Magnolia Tech

いつもコードのことばかり考えている人のために。

「データ指向アプリケーションデザイン」を読んだ

データ指向アプリケーションデザイン ―信頼性、拡張性、保守性の高い分散システム設計の原理

データ指向アプリケーションデザイン ―信頼性、拡張性、保守性の高い分散システム設計の原理

今年の夏休みの課題図書、「データ指向アプリケーションデザイン」をざっと読んだ。ところどころメモを取りながら進めては行ったけど、さすがに600ページ超えの厚さで全部を同じ集中度では読めなかったので、あまり馴染みのないストリーム処理あたりはかなりの流し読みになってしまった。たぶん2周目が必要。

書籍全体としては分散型のデータ処理基盤を設計するにあたり、どのような課題が有り、現実のソフトウェア(ここが重要!)がどのようにそれを解決しているのか?ということをありとあらゆるテーマについて語り尽くした本。これ以上は、もう実際に運用してみないと分からないレベルだと思う。

かなり分厚い本だけど、まずは第一章「データシステムの基礎」だけでもぜひ読んだ方がいい。「信頼性」「スケーラビリティ」「メンテナンス性」という現代のソフトウェアに求められる要素がコンパクトにまとめられている(ここだけなら20ページくらい)。

データストアよりアプリケーションの方が得意な人は引き続き「2章データモデルとクエリ言語」の「4章 エンコーディングと進化」を先に読むと入りやすいかも。JSONやProtocol Bufferなどのアプリケーションレイヤーの人に馴染みのある話題が出てきます。

夏休みシーズンももう終わりですが、数週間かけて少しずつじっくり読むには最適な本なので、秋の夜長に向けてぜひ読んでみて下さい。

なお、本書の名言としては、「最大限に努力しても、人間には信頼性がないことが知られています」という所ですね:)

Scala 2.13より未使用変数への警告を抑止するunused annotationが追加された

時々メソッドのインタフェースを揃えるために、わざと使わない引数を定義することが有る。

Scalatraでもインタフェースを揃えるためにServletのRequestとResponseをペアで定義しているが、必ずしも使っていない、みたいなコードがあり、ビルドの度に未使用パラメータの警告が出てしまう。

[warn] /repos/scalatra/auth/src/main/scala/org/scalatra/auth/ScentryStrategy.scala:44:35: parameter value request in method beforeAuthenticate is never used
[warn]   def beforeAuthenticate(implicit request: HttpServletRequest, response: HttpServletResponse): Unit = {}
[warn]                                   ^
[warn] /repos/scalatra/auth/src/main/scala/org/scalatra/auth/ScentryStrategy.scala:44:64: parameter value response in method beforeAuthenticate is never used
[warn]   def beforeAuthenticate(implicit request: HttpServletRequest, response: HttpServletResponse): Unit = {}
[warn]                                                                ^

将来の拡張性のために意図した未使用は警告しないで欲しいなぁ…と思っていたら、Scala 2.13よりunused annotationが追加された。

Scala Standard Library 2.13.0 - scala.annotation.unused

ドキュメントに全然コード例が無いので分かりづらいけど、テストコードにコメント付きで使い方が書かれているので、こちらを見た方が理解しやすいと思います。

scala/t10790.scala at 2.13.x · scala/scala · GitHub

Scala 2.13以降なので、後方互換性の観点からすぐに使うわけにはいかないけど、ライブラリ作ったりする人は知っておくといいと思いました。

ログミーTechで昨年に設計Night2018で話した内容が文字起こしされました!

connpass.com

昨年開催され、大好評だった「設計Night2018 powered by Classi」での自分の登壇内容がログミーTechさんにて文字起こしされました!

logmi.jp

logmi.jp

logmi.jp

ブクマも改めて80近く行きました。凄い!

この辺の話、もう一回整理して1時間くらいの完全版を喋りたい気持ちが有りますので、オープンなイベントでもクローズドな勉強会でも行きますので、興味がある方はご連絡下さい!

Anker PowerCore 13400 Nintendo Switch Editionを買った

そのまんまなんだけど、大容量のUSB PD対応のモバイルバッテリー、なぜかAnkerは充電器付きばかりがラインナップされているし、さすがに容量が20000mAhを超えてくるとなかなかの大きさだし、重量だし…ということでこっちを選択。

しかし、今見ると値段が6000円を超えている…先日まで4000円台だったはずなのに…

もう少し小さいモデルだとこっちがある。

Javaや、Scalaで、camel-caseをsnake-caseへ変換する方法

GoogleのGuavaというライブラリを使うとできる。

github.com

各種case表記を相互に変換してくれる便利なライブラリ。

Json4sのこのissueの解決の参考なるかと思って調べたけど、まぁObjectのキーが負の数って時点で、特殊な話なので、そこはtransformFieldで独自に変換すべきでは?という回答を書いてみた。

github.com


誰も手をつけていないissueを取り上げて調べてみると、必ず一つは全然違う分野の知識が増えてお勧めです。必ずしも完全な回答でなくてもいいので、ここまで調べた、みたいな事を書くだけでも有益だと思うし、ほかの人が興味を持ってくれるきっかけになると思うんですよね。

というわけで、色々なissueに、PRが書けなくてもいいので、まずは関わってみることをお勧めします。

Timbuk2のメッセンジャーバッグを買った

f:id:magnoliak:20190630205924j:plain

Timbuk2メッセンジャーバッグを買った。Sサイズだと、13インチノートPCがかっちり入るサイズ。長距離の移動時に、メインのバッグとは別にあると、最低限の持ち物(PC含む)がまとめられて便利。

ScalaMatsuri 2019に行ってきた

f:id:magnoliak:20190629070026j:plain

2019.scalamatsuri.org

今まで行きたいと思っていながらなかなか行けなかったScalaMatsuriにようやく参加してきました。

ScalaMatsuriは、割とメインの日程が土日になるように設定されていて、それだと参加しづらかったのですが、今年は金曜日にメインの日程が組まれていたのと、自分のスケジュールの都合が上手く合って参加することができました。

割と言語機能に関するセッションを中心に聞いていた、ということも有るんだけど、まだまだ知らないことがたくさん有って、「無限にやることは…ある」という気持ちになりました。

例えば水島さんのDOT計算の発表は、まったく手も足も出ない感じで、自分の不勉強さを痛感しました。

設計やアーキテクチャの話をあまり聞けなかったので、その辺は後日公開されたスライドを見てみようかと思っています。

あと、至るところで、Scala3(dotty)の話が出ていましたが、けっこうがっつり文法も変わるようで、「これ、Perl6みたいにならないよね…」という心配は少し思いましたが、その辺の移行プロセスはどうなるんでしょうね。


会場では今までの知り合いも何人かいらっしゃったり、なかなかお会いできなかった人に「初めまして!」が言えたりしましたが、総じて知っている顔が少なく、言語変われば参加者も変わるんだなーっと改めて思いました。

イベント全体は、とにかく運営が素晴らしく、入場から退場まで実にスムーズでした。会場ごとの誘導や案内も良かったですね。運営や、スタッフの方々にはとにかく感謝です。

またぜひ来年も参加したいですね。