9、10、11月の成果と12月の目標

9、10、11月の成果と12月の目標

毎月日記を更新する事で自分のモチベーションを持続させようと思っていたのですが、前回は1ヶ月とばし、そして今回は2ヶ月も飛ばしてしまいました。すこし反省しています。

成果

  • WebSocketでリアルタイムWeb!の連載

3回にわたるリアルタイムWebの連載が無事終了しました。

  1. node.jsの衝撃とWebSocketが拓く未来
  2. WebSocketの現状と技術的課題
  3. WebSocketでWebは変わる? 大胆予想!

今まで記事執筆なんてしてことなかったのでまともなもの書けるか心配でしたがなかなか好評なうちに終わったようです。

今まで自分の英語記事の反応などはツイッターのキーワード検索やメンションなどではかっていましたが、今回ははてなブックマークが大変役に立ちました。

連載第一回はなんと800近く、そして第二回、三回も80〜100近いブックマークをいただきました。

内容もさることながら、単純に文章の異様な巧さと読みやすさに感動した。こういう文章を書きたい。

いろいろな反応があったなかで一番うれしかったのが上のコメントです。

もう日本を離れて6年近く経ち、「日本語を書く」という行為をしなくなってから久しかったため、自分の文章力にかなり不安があったのですが、こういったコメントに本当に勇気づけられました。ありがとうございます。

メタプログラミングRuby
Paolo Perrotta
アスキー・メディアワークス
売り上げランキング: 117401


RubyKaigiに行った時に著者のPaoloさんの講演がすばらしかったので会場で衝動買いし、Matzさんにサインまでしていただいた本がそのままになっていました。
コンパイラの本などをよんでいたのですが、難しくて現実逃避のために読んだのですが非常に面白く、5日ぐらいで一気に読み終わりました。翻訳も非常に平易にかかれておりおすすめです。

各所でいろいろ絶賛されているようですが、やはりこの本の功績は、Rubyの色々なメタプログラミングテクニックにパターン名を与えた事でしょう。
いままで「Railsでよく使われているなんか小難しい方法」が「ここはクラスマクロでこの部分は動的ディスパッチ」といった風に細かく分析できるようになったことで格段に理解度が向上しました。

また常にスコープを意識し「ここでのselfは何にあたるのだろう」と考える癖がつく事でclass_eval, instance_eval,extend,includeといったメソッドに対する理解度が深まりました。あとblockは以前から好きだったのですが、さらに好きになりました。
本当に私のRuby度が向上した一冊だと思います。

  • 小粒な作品作り

最近会社のプロダクトからは離れ、クライアント関係の仕事をするようなことが多いのですが、そういう仕事をする時はなるべく「保守的であまり冒険しない」方法を多くとりがちです。
具体的には、自分で車輪の再発名をするより、「いかに既存のライブラリやプラグインを組み合わせる事ですばやく成果を出す」といったところでしょうか。

それはそれで良いのですが、そうすると少し冒険したくなってきます。また今までNoSQLやらモバイルやらWebSocketなどの最先端のテクノロジーを追ってばかりいたのですが、それに自分のプログラマーとしての力量が追いついていないような気がしてきました。
そこで新技術の情報収集に明け暮れるだけでなく、たいした事でなくとも、もっと自分の手を動かしてものを作る機会を増やしたいなと思うようになりました。
ということで以下の2作品です。

データベースの中には以外と気がつかないうちに木構造の情報が入っているものです。例えば「社員テーブルに上司IDコラムをわりあてる」といった構造は実は会社のハイラーキーを木構造で表しているのですが、SQLでは簡単に木構造を取り出しにくいものです。
そこで既存のrubytreeのラッパーなのですが、「木構造の深い順にトップ10を抜き出して」といったレポート情報をお手軽に取り出すことができるツールをつくってみました。
これを作った理由ですが、以前のプロジェクトで「どのユーザーがどのユーザの招待でサインアップしたか」みたいな情報があり、「この中から影響力のあるユーザーってだれだろう」と思ったことからです。

よく会社の人とかに「日本語でプログラミングできるの?」とか聞かれます。せっかくRuby実装の勉強とかしようと思っていたところだったので、
自分で作ってみる事にしました。といってもRubyコンパイラに手をいれたわけではなく、モジュールとして作りました。

ruby-1.9.2-p0 > require 'japanize'
ruby-1.9.2-p0 > 1に2をたして4を掛ける
=> 12

四則演算しかできませんが、irb上で日本語書いて動くのは結構感動的です。

これらは本当に小さなライブラリーだし、あまり実用性もないのですが、作って行く上で「ツリー構造」とか「逆ポーランド記法」とかコンピュータサイエンスの基本になるようなことを勉強できたような気がします。

目標

  • LRUG(London Ruby User Group)での発表

上のjapanizeをネタにLondon Ruby User Group で発表する予定です(というか発表のネタとしてつくったものです)。

  • Seven Languages in Seven Weeksを読み終える



Calling Methods on Potential Nil Objects in Rails」という記事でRailsの「try」というメソッドを拡張する記事があったのですが、
その時に「自分だったらこうする」みたいなのをgistでいくつか作成しました。

そうしたらツイッターで「その考え方って基本的にHaskellのMaybe Monadみたいなものだね」と言われました。
そこでHaskellの載った本書を最初に購入して、最終章のHaskellから読み始めました。現在はHaskell, Ruby, IO, と読んでPrologのところまできました。
毎章を読む度に既存のプログラミングに関する常識を打ち破られる気がします。非常におすすめです。

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

今回のWebSocketの連載で「ものを書く」ということに自信がでてきたので、これからも続けていきたいです(この日記ももう少し更新頻度をあげたいですが)。一応いくつかプロジェクトが立ち上がりつつあるので、そのうちご報告したいです。