12月の成果と1月の目標

12月の成果と1月の目標

もう1月も半分経ってしまいましたが先月の成果と今月の目標です。

成果

  • LRUG(London Ruby User Group)で発表

先月の目標としていたLRUGでの発表、無事に終了いたしました。スライドはここで、ビデオはここです。あと英語ですがまとめ記事をRuby Advent Calendarの一環として公開しました。

  • Rails Hub」での連載開始

Railsで目指せ、情熱エンジニア」という題でRails Hubで連載することになりました。タイトルはもちろんChad Fowlerの「情熱エンジニア」のぱくりです。WebSocketに関する連載を記事を3回ほど書いたのですが、今度はそれより長めの連載を依頼していただきました。こういったチャンスはそんなにしょっちゅうくるものではないので、大事にしていきたいです。

ちょうどこの日記を書き始めたのは、Award On Railsというプログラミングコンテストの経過報告のためでした。それがきっかけでRuby On Railsにのめり込み、退社、起業(すぐポシャりましたが)、Ruby On Railsエンジニアとしてかれこれ3年ほど経ちました。この日記の始めの方を読み返すと、当時の興奮や悩んだことが色々書かれているので、当時の自分の気持ちを思い出しながら書いていこうと思います。

  • 「Seven Languages in Seven Weeks」読了

先日読書感想文を書きました。この本を翻訳とかしたら楽しそうですが、7つの言語の全てを監訳するのは大変かもしれません。

この本のおかげもあって昨年は10もの言語(Lua, Golang, C++, C,Scala, IO, Prolog, Erlang,Clojure, Haskell)を学ぶ事ができました。それぞれの言語にそれぞれの良さがあって、これまでRuby一色でやってきた私の視野を大きく広げてくれたと思います。そしてこれらを学ぶ過程で分かったのは自分のRuby力もまだまだだなと思いました。本を読んでいる時に「この言語のこの機能がすごい」とかツイートしたら「いや、それRubyでもできるんですけれど」と返事が返って来た事もありますし。それだけRubyの底は深いんだなと思いました。

逆にたくさんの言語を学びすぎた弊害ですが、どの言語もまともに使えこなせていないことでしょう。ほとんどの言語は練習問題を解いたり、サンプルを書いた程度で終わってしまいました。唯一の例外はGolangですこしライブラリーみたいなものも書きかけていたのですが、それも中途半端に終わってしまいました。

できれば今年はRuby, Javascriptにつづく「題3の言語」を習得したいなと思います。本来はそれがGolangになる予定だったのですが、結局途中で断念してしまいました。本当はWebSocketのベンチマーク用のスクリプトを作りたかったのですが、プロトコルが固まらないままずるずるきているため「ドラフトが固まったらまた再開しよう」のままになっています。あとGolangはまわりにやっている人が少なすぎるのもちょっと問題です。7月にGoogleで勉強会を開いた時は内部のGooglerの人ですら「いや〜Golangに興味があって参加しました」みたいな感じでした。今は状況はちがうかもしれませんが。

自分のRuby力が足りないという以上に、自分のJavascript力も足りないなと思い知らされる今日このごろです。スキルアップの一番の近道は自分でなにか作ることなので、一つつくってみました。

英語では「Needle in a haystack」ということわざがあるそうです。訳すと「むしろの中の針をさがす」といったところでしょうか。
最近Ajaxなどで以下のように外部のAPIからのデータの受け渡しが多くなっています。

    var json = [
      {a:"A"},
      {b:"B"},
      {c:{
        name:"bob",
        age:10
      }},
      {d:{
        name:"mark",
        age:10,
        alphabet:"a",
        hage: true
      }}
    ];

ものすごく階層化されたJSONとかから自分の気になるキーや値をさがすのはブラウザーのInspectorのオブジェクトツリーを何度もクリックするのがめんどくさかったりするのですが、そんなときにhaystack. 詳しくはREADMEを読んでいただきたいのですが、通常はBookmarkletとして登録しておき、こんな感じで使います。

    hs = new Haystack(json)

// キーで検索

    hs.key("a")              // ["["0"]["a"]"]

// 値で検索

    hs.val(10)               // ['["2"]["c"]["age"]', '["3"]["d"]["age"]']

// 両方で検索

    hs.all("a")              // ["["0"]["a"]", "["3"]["d"]["alphabet"]"]

// 両方で検索(正規表現)

    hs.reg(/b/i)              // ["["1"]["b"]", "["3"]["d"]["alphabet"]"]

毎回「new」とするのがめんどくさいというフィードバックがあり、ショートカットも用意しました。

H(json).val(10) // ['["2"]["c"]["age"]', '["3"]["d"]["age"]']

やっていることはただ単に木構造を全部探っていき(最近つくるものが全て木構造にからんでいるような気がします)、該当するキーや値を返すだけの50行程度のシンプルなものです。

ただ関数渡しをAPIとして提供、再帰の多用、変数を上書きしないスタイルなどは最近よんだ「Seven Languages in Seven Weeks」の関数型言語の影響を受けたような気もします。非常に簡単なツールですが一度試していただけるとうれしいです。。

目標

  • さらなる執筆、翻訳活動

連載なのでこれからも地道に続けていこうと思います。

  • 今年の目標を考える

本当はこういうのは去年の年末に考えておくべきなのですが、まだ決めかねています。決めなければいけない事は

  • 今後3年間の方向性(中期目標)?
  • 中期目標を達成するために今年は何を軸におけばよいか
  • そのために何をやって、何をやらないか

とくに「何をやらないか」というのは大切だと思います。去年はいろいろな事に手を回しすぎた間があります。勉強とかしていると楽しいのでなんか前進している気になりますが、自己満足だけに終わってしまう可能性も大です。
あと具体的に決めたい事としてこんなのがあります。

  • どの言語を第3の言語にするか
  • どのテクノロジー分野を深めたいか
  • どういった場で発表していくか(カンファレンス、ブログ、アプリやライブラリーの公開)

できれば複数の行っている事が互いに相乗効果のあるような形にして行きたいです。ベタな言い方ですが「シナジー」大切ですね。

  • Eurukoのトークプロポーザルを考える

私は毎年Scottish Ruby Confに行っているのですが、最近カンファレンスの値段が高くなったのと、まだEurukoに行ったことがないので、今年は5月にベルリンで開かれるEurukoに行ってみたいです。でもただ行くだけではつまらないので、あたってくだけろでトークプロポーザルも考えたいです。昨年はNoSQL(Tokyo Cabinet)とWebSocketでいろいろ話す機会がありましたが、最近はどちらもあまりやっていないので、新しいテーマを探したいです。できれば今年の目標とマッチする分野で。