最近、更新できてなかったので言い訳や近況と最近勉強してたことについて書いておく(ほぼ日記)。 気が向いたら、勉強したことについては別の機会に個別に書くかも知れない。とりあえず項目だけ振り返る。

言い訳

前はTinkererを使ってreST形式で記事を書いていた。 ところがメモはMarkdownを使うことが多く、Boostnote, Jupyter-notebookを使っている。 そのため記事にするのに、いちいち多くの変換が必要となっていた。 またテンプレートも古くなってきたのでデザインも変えたかった。

そこでMarkdownに対応した静的サイトジェネレータに移行することにした。 Go製で中を読めるし評判も悪くなさそうでユーザーも多そうだったので、Hugoに移行してみた。

しばらく見えなくなってた理由

移行ついでにOSの再インストールを行った。 サーバーを落としてAnsibleでデプロイしたのだけど、 virtualbox, ec2で事前テストしてたのに本番ではgitoliteのロールが機能しなかった。 どうやら依存しているロールが不安定でansibleのバージョンアップでroot で一時ファイルが作られてbecome_user の権限で機能しなくなっていた。 凄い眠くて寝た次の日に継続しようとしたら、MBPのキーボードが壊れてしまって戦闘力が低下した。

理解が追いつかず、とりあえず一部を手作業で行った。 ロールの開発者はPRを受け取ってる様子がないので次は自作した方が良さそう。

とりあえずGoogle Analyticsでみてるとアクティブユーザーが0になって戻らない。 個人ブログ運営は不思議のダンジョン。少し悲しい。

近況

転職

大学院同期が始めた会社に転職した。もう数年間誘われ続けてて断っていたのだけど、タイミングが良くなったのでしばらく手伝うことにした。

振り返ると、比較的大きめの会社に新卒入社した後は、ニュースサイト全般(主に入稿周り)の設計・開発をさせてもらい、 そのあと分散ストレージの設計手伝い・実装をやっていた。 最後はHTAP(in memory db), NewSQLとかの調査やりしつつ、別の小さめな仕事の設計・開発・進捗管理おじさんをやってた。

楽しかったのだけど、幾つか思うところがあった。

そして、1,2回は転職して組織の違いを感じてみたかった、 彼らが新しく始めった事業は内容にも協力したいと思えた、 大学院時代の先輩も合流するらしく面白そうだった、 外国人が多い環境で英語を強制されるのが良さそうだった、 設計・運用に対する裁量が増え試行錯誤を増やせそうだった、 などが特に惹かれたところ。

今のところ楽しい、意見を理由付けて提示すれば認めて貰えるし逆に意見や指摘には必ず理由が提示されているって環境で、当たり前なんだけど快適だ。 実際のところ出来ない人や場面は世の中あるのだけど、今のところ転職してからそんな場面には出会ってないので心が穏やか。

インフルエンザ

12月末に実家に帰ったら倒れた、当時はインフルエンザと判定されなかったけど長引いた。 帰ってきて一週間くらい軽度の風邪っぽさが続いたので再度、病院に行った。 マイコプラズマ肺炎と判定されて咳が続いた。 1週間後にインフルエンザ疑い(迅速ではでなかった)になりタミフル飲みながら1週間倒れてた。

結局、2か月くらい体調不良が続いてた。こりゃいかんって事で同期から退職祝いで貰ったヘルシープログラマー読んだ。 最近は歩いたり日光浴したり30分毎に立ち上がって軽い運動したりと気を使っている。

確定申告

面倒すぎて笑った。今まで不要で意識してなかったのだけど、今年はふるさと納税などで必要になった。 ところが資産運用は学生時代に作った一般口座で取引をしていた。 一般口座は源泉徴収票が発行されず取引毎の譲渡益を自分で計算しないとならない。

これには売却時点での購入平均額(取得価額)を出して売却数を掛けたものを取得原価とする。 売却分は購入金額から差し引いて以降の取得価額の計算を行う。 そこに再帰が含まれ集合操作が中心のSQLだと少し厄介。結局スクリプトを書いた。 (スプレッドシートに慣れてたらそれも早かったかも)

また外貨建譲渡益は更に面倒で、ドル建て取引しててもその時点でのレートで日本円換算して売却益を出す。 なので円高で売却すると利益が少なく計算され税金が減る。 逆に円安で売ってると、仮にドル資産が増えてなくても利益があったことになり課税される。

そして仮想通貨の計算は明確に定められてなくて株式譲渡益に準じる計算って感じで行った。 計算が間違ってたら連絡が来るはず。ただ記載方法は銘柄ごとに年内総計なので入力作業自体は面倒じゃなかった。

計算方法を学びながらプログラム書くのに3日くらい使ってしまった。

勉強したり遊んでいたこと

Pythonで書いたスクリプトを整理してPyPIに公開した。 pytest, toxでローカルでテストしてCircleCIでpush毎にテストしてる。READMEにバッジも付けてみた。

Goのスケジューラのコードを読んでた。 スケールするように並列にスケジュール出来るようになっていた。 GCやtcmallocの部分も少し読んだ。mmapで確保してる感じがある。 あと増えたら減らない。このあたりは復習と整理がてら文章に起こしたい。

Javaの基本的な文法などを勉強した。 Apache BeamのPTransformと呼ばれるビルディングブロックはSerializableが要求される。 匿名オブジェクトを作ってメソッドで生成するだけなら良いけど、効率のためにメソッド外で定義したくなる。 そうやってPTransformのステートに含めるとそのインスタンスもSerializableが要求される。 Effective Javaで本当は怖いSerializableって感じの章は役に立った。 他にも継承より委譲・集約をって感じの部分は今まで通り納得。

Kotlinの基本的な使い方を学んだ。これはもう少し詳しくなりたい。 Apache Beamのパイプラインをひたすら書いてる。

Apache Beamの使い方を勉強した。 ParDo, side inputs, CoGroupByKey, MapElementsに慣れてきて割りとパイプラインを自由に作れるようになりつつある。 PTransformを書くための抽象クラス作るの楽しい。Beamのバージョンを2.2.0 から2.3.0 に上げたらMapElementsが動かなくなってて調査中。 ミニマムな使い方して失敗を再現できたらユーザーグループに報告出すつもり。

Apache Flinkの使い方や設計を読んでる。 Akkaのバージョン指定を省いてランタイムでバージョン不一致が起きて苦労した。

Javaの語彙力としては、Apache commons, Spring framework, guavaあたりを押さえたい。 Gradleは色々と隠してくれていて辛かった。

Elixir+Phoenixを軽く勉強した。 もうちょっと深く知りたい。バージョンマネージャにasdfを使ったけど、は割りと快適だった。

マイクロサービス本とか復習したりドメイン駆動設計本とか読んでる。

Ansibleで幾つかの環境を構築したりリファクタを繰り返したりしていた。 Ansibleから使うJinja2はPythonが使える代わりに、バージョン依存な警告やエラー隠せない。 バージョンアップでちょいちょい失敗するのでわりと面倒だった。

Ansibleの変数はほぼ全てがグローバルスコープで、 スコープが限定されているのはwith_items 利用時のitem くらいなものなのが扱いにくいと思った。

ロールの境界の考え方や変数の命名や定義箇所でrequired/optional を分離するとか、自分なりのスタイルが出来てきたので整理したい。

HyPer(in memory db)の論文を読んでた。なんか本当に大量に読んだのでちゃんと整理したい。 F1, Spannerの論文を読んでTiDBの実装を読んでた。 目標にしているGoogle系の面白そうな論文の幾つかに目を通し終えたら整理しておきたいと思ってる。 あと、分散オブジェクトストレージ系の論文の復習していたけど全然、ニート期間には読み終えられなかった。

ツール(vim,bash)の設定を整理していた。だいたいPython,Go,Rustの整理に集中してた。vimスクリプトは少しだけ慣れてきて闇。

挨拶エンジニアにはなりたくないのだけどツールと移行作業の都合で色々触ってしまっている。 Goのレベルを落とさないようにしつつKotlin,Java,Elixirのイディオム強化するのが直近の課題。 長期的にはRust触りたい。

その他

あとは友達が結婚式挙げた。一人は表参道でもう一人はハワイで。それぞれとても良かった。 ふるさと納税で頂いた肉で焼肉パーティした。家でボドゲ会をするつもりがインフルエンザで中止に、申し訳ない。 ボルダリングは一緒にやってる友人たちのレベルが上がりまくって少し挫折気味だけど、またやる気が復活しつつある。 Google Play Musicを使い始めてしまって色々と聴いている。