知延常楽
最近、知延常楽という言葉を思い出した。多分辞書には載っていない・・・と思っていたらグーグル大先生は知っていた。知るを延ばすことを常に楽しむという意味なんだろう。
中学生の頃、初めてパソコンという物(今から考えるととんでもなく非力なPC-98XLというマシンだったが、)を手にして、それこそむさぼるように知識を求めた。一緒にもらった青い色のMS-DOSシステムコールリファレンスなんて難しくてちんぷんかんぷんだし、オレンジ色のBASICリファレンスマニュアルも最初は訳が分からなかった。でも、廃品回収で捨ててあったベーシックマガジンとかのパソコン雑誌を夢中で読んで、サンプルコードを打ち込んで、デバッグして動かして、そんなことをしながら次第にいろんな事が分かるようになっていって、それがとても楽しかった。
そんな中で異色だったのが、一緒に拾ったMACPOWERという雑誌。Macだけにデザインとかユーザーインターフェースとかの話が載っている。その中に、知延常楽という言葉の話があった。工芸職人だった父が亡くなった日に、主のいなくなった工房で筆者が見つけたのが、作業台に彫られた知延常楽という四文字、そのことを筆者がつらつら考えるという話。
今日グーグル大先生に聞いたら、川崎和男という有名なデザイナーのエッセイのようだ。早速ブックオフオンラインで見つけて注文してしまった。
さて、この知延常楽、僕のなかにずっと残っている言葉だ。そして、最近よく意識するようになった。新しいことを知って、自分の頭で考えて、理解して、そして新しい自分なりの物を創り出していく。いうなれば、KnowThinkUnderstandDevelopでKTUDサイクルか。そんなサイクルが楽しくて楽しくてしかたがない。それでこそ自分なのだと、そういう状態じゃなくなって痛烈に意識した。だから、今あらゆる覚悟と熱意でそういう自分を復活させようと一歩を踏み出した。
HeatHashを作ったわけ
一段落ついたので、HeatHashに関する色々を説明していきたいと思う。
HeatHashが中でどんなことをやっているかを説明する前に、なぜ作ったのかということと、設定した目標について説明したいと思う。
HeatHashを作ろうと思った最初のきっかけは、会社のプロジェクトのパフォーマンス問題だった。空間情報の検索のパフォーマンスが非常に悪かったわけだ。空間DB機能のない普通のRDBMSを使っているのもその原因だし、適切な空間インデックスになっていないのも問題だ。しかし、根本的にスケールアウトできないためにおのずから一台のマシンの性能に制約されてしまう。
では、スケールアウトできるDBとしてKVSがはやっているが、KeyとValueの単純な構造の中に、空間情報をどうやって格納して検索しようかと考え始めた。そこで考えたのが、一次元空間インデックスだ。単純に考えるとある範囲の点を検索する場合、XとY方向の二つの要素の大小関係を比較する必要がある。それを、一つのインデックスにXYの二つの情報を格納することで、一つの値の大小比較だけで検索が可能となる。KVSは複雑な検索はできないが、一つの値の範囲検索は非常に高速だし、スケールアウト可能だ。こいつは面白そうだ!実装してみようと思った。後から考えると、空間二分木の構造をちょっと違う表現で作ったということになるが、既存のKVSに乗っかれることは色々と楽でよい。
また、そのころTwitterのStreamingAPIとジオタグを調べたこともあり、これを組み合わせてなにか面白いことができないかと思い、できたのが、Tweetの空間分布をKVSに格納し、ヒートマップで表示するHeatHashだったというわけだ。
では、HeatHashを作るにあたって目標としたことは何か。
一つ目は、1から自分一人で作ること。とにかくインフラの整備からOSからミドルウェアから何から何まで自分でインストールして構築した。サーバーマシンは古いPentiumDのデスクトップマシンだし、OSはCentOSをOpenVZで仮想化した上でHeatHashシステムを動かしている。チューニングも全部自分で勉強しながらやった。
二つ目は、人に見せられるレベルの物にするということ。これまで、多くのプログラムを趣味で書いてきたが、公開できる完成度の物はほとんどない。だから、自分で納得して公開できるレベルの物を作ると決めた。
三つ目は、パフォーマンス。とにかく、自分が考え得る限り軽く速く動くこと。そして、一台の非力なサーバーでもそこそこ動くこと。これは、サーバーが非力なPentiumDのさらに仮想マシンでスタートすると決めたのも理由だが、パフォーマンス問題で会社で痛い目を見たので、切実な目標とした。
四つ目は、スケールアウト可能な構成にすること。そのためにHornetQによるメッセージングシステムで、Tweetのクロール部分とTokyoCabinetに格納する部分を分離している。また、Tokyo CabinetをTokyo Tyrantに変えたり、その他の分散KVSにすることで、データストレージ部分も別サーバーへの分離やスケールアウトができると考えている。
五つ目は、大規模な空間情報を上記のように今後を見据えた基盤の上で扱うノウハウを得ること。
六つ目は、プロジェクトを進める意志と計画を持って行うこと。また、これまであまりできていなかったロギングやメンテナンス性の高いコード、運用のことなど、を常に考え、実行すること。
以上六点をこのプロジェクトの主な目標としてやってきた。
一段落ついた今、振り返ってみると100点満点ではないが自分の満足のいく結果になったと思う。
しかし、まだ終わりではない。せっかくここまでできたのだから、まだ実装していないいくつかの仕組みを実装しようと思っている。
HeatHash ベータ公開
今日の作業で
・キーワードごとのヒートマップの作成が可能になりました。
・デザインを少しだけましにしました。
・TokyoCabinetへの接続の安定性を高めました。
・色々と裏側を整理しました。
ということで、HeatHashのベータ版を公開します。URLは
http://www.ohoooo.mydns.jp/
です。
以下、HeatHashの復習。
HeatHashとは?
・世界中のTweetをリアルタイムで収集し、その位置情報からヒートマップを作成します。
・どんなキーワードがどこでつぶやかれているか?
・世界のどこがつぶやきが多いのか?
・などなど色々なことが分かる地図です。
ではお楽しみください。
カプセル
大手町にて、はやぶさのカプセルを見てきた。前面ヒートシールドは再突入時に燃えたからなのだろう、真っ黒だった。だけど、内部の機器類はそれこそ新品のようで、7年間宇宙を旅してきたものとは思えないくらいきれいだった。
以前筑波のJAXAに行ったときに、はやぶさの1/2模型を見てきたけど、こんな小さな機械が何十億㎞と宇宙を旅して、実際に小惑星に着陸して、そして地球に帰ってきた。それは、かつてのアメリカとソ連の有人宇宙飛行の華々しいドラマとは趣の違った宇宙飛行だけれども、ハリウッドなヒーローもいないけれども、静かだけど熱く壮大な、技術と科学のドラマだったと思う。
ちなみにカプセル回収時に、すごい防護服を着て作業している写真があって、なぜあそこまで完全防備が必要なんだろうと思っていたけれど、今日疑問が解けた。つまり、火薬で動く部品があるから安全のために爆発物対策が必要だったということだそうだ。
今日は、はやぶさとJAXAの人たちに、感動と熱いエンジニア魂を分けてもらった。はやぶさ2の開発も進みそうだし、いまはあかつきとIKAROSが金星に向かっている。まだまだ日本の宇宙開発は熱い。そして、日本の科学技術も。いつかどこかで、自分もそういうプロジェクトXに関われたら本望だと思っている。
PS:やっぱりJAXAiのおかえりなさいはやぶさの寄せ書きにありました。「オカヱリナサト」
ブレードランナー&TRON
SF好きとして恥ずかしながら、昨日初めてブレードランナーとTRONを見た。
「アンドロイドは電気羊の夢をみるか」は、だいぶ昔に読んだのだけれど。
両方とも1982年公開らしい。僕が1歳のときだ。
時代を感じつつ、でも映画として楽しめた。妻はつまんないといって早々に離脱したけど。
両作品ともその後の多くの作品に与えた影響というのが、まさに原典をあたってる形で、至る所にでてくる。
TRONのCGにスターフォックスを感じたり、
二つで十分ですよとか、オリオン座の近くで炎に包まれていた(以下略)とか。
こういうキーワードとか台詞とかイメージとかで作品と作者とをリンクしていく仕組みがあると、
見てるだけで楽しいと思う。
(Wikipediaやまとめサイトがある意味そういう役割をしているけれど)
そんなことを考えた。
今日はAhoCorasick法を実装した
こんな時間になってしまったけれど、今日の記録
今日はTweetのキーワードごとの分類のために、AhoCorasick法をJavaで実装した。
参考にしたのはこのページ。
http://d.hatena.ne.jp/naoya/20090405/aho_corasick
とてもわかりやすくまとめてあり、すんなりと実装することができた。
著者さん、ありがとうございます。
もう一度見直してから公開しようと思う。
それから、KLab×はてな エンジニア応援ブログコンテストで優秀賞を頂いたみたい。
とてもうれしい。
これからもエンジニアとして頑張っていこうと思う。