2019年の振り返り

今年もようやく仕事納めということで一年の振り返りを書いてみようと思います。

f:id:takezoe:20191201023123j:plain

仕事関係

前職、前々職ではOSS活動や執筆活動に割く時間があったのですが、トレジャーデータに転職してからは基本的に仕事に専念しています。年齢による体力的な衰えも実感するところなので無理は禁物ということで…。

2月に2週間ほどUSの本社オフィスで仕事をさせていただき、taroleoさんとオンサイトで作業を進めることができたのは煮詰まっていたタイミングだったのでちょうど良かったです。ただ、特に滞在前半は体調が非常に悪く、休日もUSの祝日で三連休があったのにほぼ寝込んでしまったのは残念でした。

takezoe.hatenablog.com

この1年でチームメンバーが増え、上司がUS勤務の外国人になり、東京オフィスも拡張するなど色々と変化がありました。相変わらず色々と苦戦する部分も多かったですが、ナレッジのカバレッジも上がってきてようやく自分のアイデアを形にしていくことができるようになってきたのでこれからという感じです。また、チームに待望のScalaプログラマが加わったのでオンサイトで相談できることも増えとても助かっています。

英語でのコミュニケーションに関しては業務上必要なコミュニケーションに関してはバックグラウンドやコンテキストが補完されてきたので当初と比べるとだいぶ楽になったかなと思いますがまだまだ課題を感じます。これに関してはコツコツやっていくしかないかなという感じです。

執筆・OSS活動など

トレジャーデータへの転職前から作業していたJava逆引きレシピの改訂版が発売されました。個人的にはもう少し作り込みたかったという気持ちがあるのですが、時間もなく、自分の転職に伴って執筆メンバーが全員リモートでの作業という状況の中なんとか形にすることができました。

takezoe.hatenablog.com

OSS活動に関しては、予想はしていたもののやはりGitBucketにはあまり手をかけることができず、月1ペースのリリースも途切れてしまいました。ただ、頻度は下がったものの定期的にリリースは行なっています。大きな機能追加はなかなか難しいかもしれませんが、今後もメンテナンスは継続していくつもりです。

一方で新たにAirframeやPrestoなど仕事で使っているOSSに関してはいくつかコントリビュートすることができました。また、UberApache HudiやDatabricksのDeltaLakeといったビッグデータのストレージレイヤに関しては仕事との関連もあり興味があったのでウォッチしていました。プルリクエストもいくつか送ってマージしていただきました。

takezoe.hatenablog.com

趣味ではPredictionIOとの絡みでSalesforceOSS化したSpark用のAutoMLライブラリTransmogrifAIをいじったりしていました。

takezoe.hatenablog.com

PredictionIOもうちょっとなんとかしたいところではありますが、MLOpsはOSSでもMLFlowなど強力なものが色々出てきてしまったのでもう出る幕がなさそうな感じが若干あり、悩ましいところです。ApacheConでOSSのCDPであるApache Unomiと組み合わせて使うというセッションもあったようですし、それなりにユーザもいるようなのですが…。

昨年からOSS活動は意図的に減らしていたので計画通りと言えば計画通りなのですが、このブログを書く頻度もかなり減ってしまいました。ある程度仕事に慣れてきた部分もあるので、来年はこういった活動も少しずつ再開していけるといいなと思っています。

イベント関係

昨年に引き続き、Airframe Meetupを2回開催させていただきました。10月に開催された第三回では発表もさせていただきました。

takezoe.hatenablog.com

2月にはTokyo Scala Developers Meetupをトレジャーデータでホストさせていただきました。社外の会場ということもありかなり大変でしたが、弊社のマーケティングチームや来日中だったtaroleoさんにもお手伝いいただきなんとか無事に開催することができました。

takezoe.hatenablog.com

また、7月にはトレジャーデータの東京オフィスで日本で初めてのPresto Conferenceが開催されました。カンファレンス自体も去ることながら、Prestoのオリジナルクリエーターのお三方との長時間に渡るディスカッションに同席でき(私はほぼ話についていけず座っていただけですが)良い経験になりました。

prestosql.io

11月にはロンドンのSkills Matter社が開催しているScala Mattersというミートアップに招待いただき、ScalaにおけるDependency Injectonについてお話しさせていただく予定だったのですが、なんと開催一ヶ月前にSkills Matter社が破産してしまうという事態になり、ミートアップもキャンセルされていまいました。

takezoe.hatenablog.com

Skills Matter社はロンドンの開発者コミュニティでは非常に重要な存在だったようですし、Scala Exchangeという(ScalaDaysを除けば)ヨーロッパで一番大きなScalaカンファレンスを開催されていたのでScalaコミュニティに取っても大きな損失なのではないかと思います。個人的にも2年前にScala ExchangeでLTの機会をいただき、今回もミートアップに招待していただいた縁もあり残念な気持ちでいっぱいです。

振り返ってみるとイベントに関してはそれなりに開催・参加していたなぁという感じですが、そういえば今年はScalaMatsuriに参加できませんでした。2日目のチケットを買ってあったのですが、体調不良で結局参加できず、Scala Conference時代から初めての欠席になってしまいました。

まとめ

仕事ではようやくアウトプットを出せるようになってきたかなという感じですが、まだまだ学ぶことは山積みなので引き続き精進していきたいと思います。来年は控えていたOSS活動なども再開していけるといいなと思っていますが、最近ますます加齢による衰えを実感する日々なので体調管理には気をつけたいと思いますw

入門 監視 ―モダンなモニタリングのためのデザインパターン

今更ですが、最近監視って難しいなぁと思うことが多いのでこの本を読んでみました。

入門 監視 ―モダンなモニタリングのためのデザインパターン

入門 監視 ―モダンなモニタリングのためのデザインパターン

目次を見るとオンコールやインシデント管理といった人間系、ネットワークやセキュリティ監視など幅広いトピックをカバーしているのですが、200ページ強と分量が少なめなこともあってか、かなりあっさりめでタイトル通り入門という感じでした。

もちろん内容は頷ける部分も多く、監視やオンコールをこれから導入しようという現場では読んでおくと基本的な考え方を学べると思いますが、残念ながら現場で実際に発生する悩みに対してヒントを得られるようなものではなかったです。

ところで監視というかヘルスチェックに特化した記事ですが、最近読んだものではAmazon Builder's Libraryの以下の記事が面白かったです。日本語訳もあります。

aws.amazon.com

aws.amazon.com

入門監視ではヘルスチェックも監視の一手法として軽く流されているのですが、実際はヘルスチェック1つ取ってもこれだけ考えることがあるので、監視に関するその他のトピックについてもこのくらい掘り下げられると面白そうだなと思いました。

airframe-launcherとsbt-packでScalaでCLIツールを作る

私は普段主にScalaを使っているので、ちょっと手の込んだ処理が必要だったりJava/Scalaライブラリを使ったツールが必要な場合にScalaで書けると便利だなと思うことがあります。

AirframeはScala用のDIコンテナを中心とした様々な機能を提供するライブラリ群ですが、そのうちの1つとしてairframe-launcherというCLIツール作成用のモジュールがあり、コマンドラインオプションを簡単に扱うことができます。また、sbt-packというsbtプラグインを使うと作成したアプリケーションを実行可能なコマンドとしてパッケージング、インストールできます。これらを組み合わせてScalaCLIツールを作る方法を紹介したいと思います。

wvlet.org

github.com

まずはbuild.sbtに以下の記述を追加し、airframe-launcherを依存関係に追加します。

libraryDependencies ++= Seq(
  "org.wvlet.airframe"  %% "airframe-launcher" % "19.11.1"
)

手始めにメッセージを表示するだけの簡単なCLIツールを作成してみます。コマンドラインオプションは@optionアノテーション、サブコマンドは@commandアノテーションで指定します。実行時にコマンドラインオプションでサブコマンドが指定されていない場合、isDefault = trueが指定されたコマンドが実行されます。

package com.github.takezoe

import wvlet.airframe.launcher.{Launcher, command, option}

class Hello(@option(prefix = "-n,--name", description = "your name")
            name: String,
            @option(prefix = "-h,--help", description = "show help message", isHelp = true)
            displayHelp: Boolean) {

  @command(isDefault = true)
  def default(): Unit = {
    println(s"Hello ${name}!")
  }
}

object Main extends App {
  Launcher.execute[Hello](args)
}

これをsbt-packでパッケージングします。plugins.sbtに以下の記述を追加します。

addSbtPlugin("org.xerial.sbt" % "sbt-pack" % "0.11")

build.sbtにパッケージングの設定を追加する必要があります。PackPluginを有効にし、コマンドと起動クラスのマッピングを行ないます。

enablePlugins(PackPlugin)
packMain := Map("hello" -> "com.github.takezoe.Main")

sbt packtarget/packディレクトリに必要なファイル一式が生成されます。また、sbt packInstall$HOME/local/binディレクトリに実行可能なコマンドがインストールされるのでこのディレクトリにPATHを通しておけば普通のコマンドと同じように使用できます。

インストールしたコマンドを実行してみます。

$ hello -n Naoki
Hello Naoki!

続いてScalaコードを修正してサブコマンドを追加してみます。Helloクラスに以下のメソッドを追加します。サブコマンド固有のオプションも定義できます。

@command(description = "display a message repeatedly")
def repeat(@option(prefix = "-c,--count", description = "repeat count")
           count: Int): Unit = {
  for(_ <- 0 to count){
    println(s"Hello ${name}!")
  }
}

以下のように実行します。

$ hello repeat -n Naoki -c 3
Hello Naoki!
Hello Naoki!
Hello Naoki!

airframe-launcherにはヘルプを自動生成する機能もあります。isHelp = trueが指定されたオプションを指定して実行すると以下のようなヘルプが表示されます。

$ hello --help
usage: hello [options] <command name>

[options]
 -n, --name:[NAME]  your name
 -h, --help         show help message

[commands]
 repeat         display a message repeatedly

JVMの起動速度という問題はあるものの、CLIツールでもそこそこ大きなものであれば既存のJVM資産が活用できタイプセーフかつ記述能力の高いScalaで書くメリットもあるかと思います。こういった用途にもScalaの活用の幅が広がればと思います。

Skills Matter社の破産とロンドンで登壇予定だったScalaミートアップのキャンセルについて

f:id:takezoe:20191130222308p:plain

ロンドンで技術系イベントを多数開催していたSkills Matter社が10月末に破産してしまったそうです。

www.cbronline.com

Skills Matter社はScalaDaysを除けばヨーロッパで最大のScalaカンファレンスであるScala Exchangeを毎年開催していたりと、Scalaコミュニティでも大きな存在感がありました。自分も一昨年のScala ExchangeでGitBucketのライトニングトークをさせていただきました。

takezoe.hatenablog.com

実は今月末にSkills Matter社が定期的に開催しているScala MattersというScalaミートアップで登壇させていただく予定だったのですが、11月頭に担当の方にメールで連絡を取ろうとしたところ、自動返信メールでAdministrationに入ったということを知りました。ミートアップがキャンセルされるのか知りたかったのでLinkedIn経由で連絡を取ってみたのですが、「何もわからない、数日後に発表があるはず」という返信を貰いました。

数日後、CEOであるWendyさんからLinkedIn上の記事で、予定されていた資金調達に失敗して会社を畳まざるを得なかったことが語られました。

www.linkedin.com

現在はSkills Matter社のWebサイトもクローズされ、有料イベントのチケットを購入してしまった人は管財会社に電話で問い合わせるようにとのメッセージがあるのみです。

旅費をカバーしてもらう関係でロンドンまでのフライトやホテルは最短の日程かつキャンセルできない格安チケットで予約してしまっていたのですが、ミートアップが開催されないとなるとわざわざ往復20時間以上かけてロンドンまで弾丸ツアーをするのも疲れるだけなので残念ながら今回のロンドン行きは取りやめることにしました。

管財会社はSkills Matter社の資産の買い手を探しているとのことでしたが進捗はあったのでしょうか。Skills Matter社はWebサイト上で過去のイベントの動画なども公開していたのですが、これらの貴重なリソースが失われてしまわないよう祈るばかりです。

マルチペアリング可能なUS配列のBluetoothキーボード

家のデスクが狭いので二台のクラムシェルモードMacBookを一式の入力デバイスで切り替えて使いたいと思い、マルチペアリングの可能なBluetoothキーボードを探していたのですが、マルチペアリングできてUS配列のものがなかなか見つからず、結局以下のものを購入してみました。

実際に使ってみて、Bluetoothの接続自体は問題なく機器の切り替えもスムーズです。機器は3台までペアリングでき、Fn + 1 or 2 or 3で接続先を切り替えることができます。今どのデバイスに繋がっているかはLEDインジケーターで分かりますし、電池式でなく充電式なのもよいです。配列は至って標準的でキーストロークやクリック感もそれなりにあるのですが、筐体が薄すぎるのと、筐体とデスクの間に空間ができるのでタイプしていてやや不安定な感じがあります。付属のポーチをキーボードの下に敷いて使うと安定していい感じです。

とりあえず目的は達成できたのですが、やはり入力デバイスは実際に触って買わないとダメだなと感じました。ただ、US配列のマルチペアリング可能なBluetoothキーボードは選択肢が少ない上に家電量販店などにもなかなか置いていないので悩ましいところです。日本国内にいる限り、日本語配列の方が既製品の選択肢が豊富なので、そういう意味で日本語配列を選ぶのはありかも知れないと思います。

以前のエントリで触れたNizのものは価格がそれなりに高いのと、最近HHKBとThinkPadキーボードを併用していてパンタグラフのキーボードの方がキーストロークが浅くて疲れにくいと感じていたのでこちらを選択したのですが、本当はThinkPadキーボードのBluetoothモデルがマルチペアリングできるようになると一番良いですね。ThinkPadキーボードは現行モデルが出てからもう何年も経つのでそろそろモデルチェンジしてもよさそうな気もしますが…。

ちなみにマウスもマルチペアリングできる手頃なものということで以下のロジクールのものをセットで購入しました。こちらは単三電池式でBluetoothだけでなくUSBアダプタも付属しています。2台までペアリング可能でマウスホイール手前のボタンで簡単に接続先を切り替えることができます。マウスの使い勝手自体は可もなく不可もなくという感じです。

Airframe Meetup #3でLTをしました

去る10月23日(水)にトレジャーデータの東京オフィスでAirframe Meetup #3が開催されました。

airframe.connpass.com

誠に僭越ながら私もLTをさせていただきました。Java時代からのDIの変遷を振り返るという老害的なテーマだったのですが、だいぶグダグダな感じになってしまったのでもう少し時間をかけて準備するべきだったと反省しています。

www.slideshare.net

ちなみにどういう風の吹きまわしか、11月にロンドンで開催されるScala Mattersというミートアップで同様のテーマでお話しさせていただくことになっています。こちらは45分のセッションとなるので気合いを入れて準備して臨みたいと思います。万が一当日ロンドンにいらっしゃる方が居られましたら是非お立ち寄りいただければと思います。

skillsmatter.com

MacBookを二枚立てられるようにしてみた

以前書いたように自宅ではデスクが狭いのでまな板スタンドでMacBookを立てて使っています。

takezoe.hatenablog.com

ここのところ諸事情によりもう一台のMacBookと使い分けているのですが、都度置き換えるのが面倒なので二枚立てできるスタンドを購入してみました。

以下のような感じでしっかり二枚のMacBookを立てられるようになりました。

f:id:takezoe:20191020020747j:plain

Amazonは最近治安が悪いし、聞いたことないメーカーのものなので大丈夫かなと思っていたのですが、作りもしっかりしてるし立てる部分の幅も調節できていい感じです。お洒落度は微妙なところですが、ノートPCだけでなくタブレットを立てたり、キーボードを立てたりするのにも使えそうです。デスクを広く使えるようになりますね。

ちなみに外部ディスプレイは一枚しかないのですが、片方のMacBookHDMI、もう片方をDisplayPortに接続しておくことでディスプレイ側の入力を切り替えるだけで使い分けられるようにしてあります。

いまのところキーボードは有線のHHKBを差し替えて使っていますが、マルチペアリングできるBluetoothマウスとキーボードがあれば線を差し替えずに二台の使い分けができるようになるはず…。以下のNiZというメーカーの静電容量式キーボードが気になっています。もうキーボードは積まないと固く心に誓ったのですが…。