Monthly Archive for December, 2008

2008年をふりかえる

大晦日なので、2008年をブログのエントリでふりかえってみます。

2007年のはこちら

Analytics

まずは、 Google Analytics でアクセスの様子をみてみます。

Analytics of blog.deadbeaf.org 2008

一年のアクセス数のうち、半数以上を12月最後のエントリ (NaCl のやつ) で稼いでるのが面白いですね。

次に、2007年と比較してみます。NaCl のアクセス数は例外としてあつかったほうが見やすいので、それ以前のもので。

だいたい3,4倍のアクセス数に成長した、というところでしょうか。

月別に

毎月なにをしていたかを、ハック/イベントという観点で見ていきましょう。

2008/01

hack

  • Ticket2RTM : Trac のチケットを Remember the Milk のタスクに同期させる、という試み。
  • QSTwitter 1.2 : 今年の半分を費やしていたプロジェクト。じわじわっとユーザさまが増えているのがうれしい。

event

  • Shibuya.trac 1.0 LT : 2008年一発目のイベント & 発表。
  • RTM Meeting : RTMチームの二人と直接しゃべれて、とってもうれしかった。
  • RHG returns #1 : ミラクルリナックスの巨大ホワイトボードはよかったな。

2008/02

hack

event

2008/03

hack

  • Gainer++ : Gainer つかってあそびだした頃。物理デバイスはプログラマの世界を広げると実感した。
  • QSTwitter 1.4 : 安定版のリリース。

event

  • 1000speakers:3 speaker : どこでもゆびピアノ。メジャーな LT としては初めてか。受けはとれてよかったかな。
  • 第三回 Award on Rails LT : 初お呼ばれ LT 。いまひとつだったけど、クックパッドのごはんのクオリティには自炊プログラマのハートを揺さぶるものがありました。

2008/04

hack

  • IDAvailability : Webサービスというものをつくりたくなったの図。wedataのすばらしさを知る。

event

  • 197Xs パーティ #1 LT : 自重しない 197Xs の片鱗に触れた。
  • Make Tokyo Meeting #1 : 上には上がいる、というか上にはキリがないと思い知った日。カリン塔の頂上はどこですか。

2008/05

hack

  • 夏ライオンハック : オープンソースってすばらしいなと思った。
  • Rubigraph : ほんと単純なコードだったんだけど、本家の配布物に含めてもらえるようになった。うれしい。
  • Safari SIMBL ハック : あがいてました。

event

  • YAPC::ASIA 2008 : Perl のイベントには今ひとつなじめなかったかなー。

2008/06

hack

  • QuartsComposer custom plugin by RubyCocoa on Leopard : 案外人気のあるエントリ。需要あるのかしら。
  • QCGainer : Processing とかだけじゃなく、QuartzComposer でも Gainer からあそびたいじゃない、ということでつくってみたやつ。このおかげで、 GAINER+ 本にクレジットされることになる。
  • refe2vim : Vim で開発してて、Ruby のマニュアルをさっさと見たいよ! のがモチベーション。Ruby会議 LT でのネタのため。

event

2008/07

hack

  • QSWassr : 世間の流行を感じてみたくなった。

event

2008/08

出張で半月 US にいました。

event

  • SIGGRAPH 2008
  • IDF 2008
  • HOT CHIPS Tutorial
  • NVISION 2008

現地で @sonson_twit さんとか @atsusi さんとかと知り合いになり、後に影響を及ぼすことになる。

2008/09

hack

event

2008/10

hack

  • Milpon β01 : ついに iPhone アプリ開発に進出。同時に、オープンソースアプリとしてのいろいろを学び始める。

event

  • @natsutan オフ : 人とのつながりって不思議だなあと思った夜。

2008/11

nil : 仕事がたてこみすぎてた。

2008/12

hack

KPT

Keep

毎月1つは小物をつくっていました。ハックハックできたかな。 たくさんのイベントに参加し、発表する機会を増やしていきました。 ハックという内向きな作業と発表という外向きなアウトプットを繰り返せたのはよかった。

Problem

とはいえ、つくってきたものがいまひとつ小物ばかりですね。プロトタイプどまりというか。 大きなものに取り組まねば。

英語ブログもつくってみたものの、いまひとつ書き続けるモチベーションが不足していました。

Try

来年はメディア力をもっと伸ばしていきたいですね。ハクをつけたい。

まとめ

これまでのひきこもりから、どんどん外へ出て行くような流れをつくれたのはよかったです。来年は、もっと人の役に立つような、意味のあるものをしっかりときっちりとつくっていきます。

今年もありがとうございました。

Native Client

今朝目覚めたら、Google が Native Client という面白そうなものを出していたので、論文 (PDF) をざっと読んでみました。で思ったのは、これは Google の 分散 OS ミドルウェア なのだな、ということ。

以下、自分が受け取ったことを書きます。ちゃんと知りたい方は、論文をあたってください。(参考: id:amachang による実践エントリ)

かんたんなおさらい

Native Client とは?

ブラウザの中で、x86のネイティブコードを実行できるようにする仕組みです。

何がうれしいの?

  • 実行速度。スピード! とにかくもっとスピードを!!
  • マシンの機能をフルに使える。ファイルアクセスも、マルチスレッドも、SIMDでさえも書けるよ!
  • それでいてセキュア: 多段サンドボックス方式で、危険なことができないようになってます。

例として挙げられているのは、写真をあつかうWebアプリ。JS+HTMLでユーザインターフェイスを書いておいて、スピードが必要な画像処理はローカルのネイティブコードでやるという処理分担です。 ユーザは JS/HTML/ネイティブコード の3つを書くことになりますね。

それに加えて、Native Client 間の通信もサポートされています。先ほどの写真アプリだと、画像処理に加えてローカルストレージへのアクセスを提供するライブラリと組み合わせる、なんてことも難なくできるという。

みどころ

ランタイムシステムのところでは、とにかく OSっぽさ が随所にでてきますね。マイクロカーネルみたいなもんだよ、とか IPC とか UDP ライクな通信とかマルチスレッドとか。sbrk(), mmap(), malloc(), free() みたいな API を提供するとか。それでいて、 Windows/Mac/Linux といったマルチプラットフォームで動きますと。なので、ぼくはこれこそが Google OS なのだと思いました。下位に存在する OS レイヤをラップするような、それでいて低レベルなタスクをこなすミドルウェア

NativeClient-1

Intel TBB (Threading Building Blocks) でさえ移植できたよ! というのもおもしろかったです。

どうやってセキュアにするのか

2段階のサンドボックスでアプリを閉じ込めます (3) 。Inner (HW, x86 アーキテクチャの機能を利用) と Outer (SW, ptrace とか使う) の2つ。ここの実装がバイナリハックス的に面白いですね。実行できる命令の種類に制限をつけるとか、GCCに手を入れて出力する機械語をサンドボックス用にするとかそういうあたり。論文読む方はこのへんを重点的にどうぞ。

3.1 の Inner Sandbox の性能について述べてるとこが楽しいですね。ユーザのコードがSandbox規約に違反してないかをチェックする Validator が、たった 500 statements の C コードであり、コンパイルすると 6000 バイトでしかないよ、と胸を張っているあたりにぐっときます。

Java とか Flash とかとどう違うの?

より低レイヤなことができる、ということなのかと思いました。 Java は思想的に近いだろうけど、さらに泥臭いことができるという。あと、 Java とか Flash だと、中間に VM というレイヤがあるのですが、 Native Client ではそこをすっとばしていきなりネイティブをさわりにいくというあたりが Google っぽいなと (参考: Google Chrome)。

そもそも、記述言語として使えるのが GCC toolchain が提供するものなので (3.6) 、まあ C/C++ になりますよね。そんなレベルでゴリゴリ書いたコードが Web アプリで動かせるという。データベースと回線の太さに律速されるようなふつうの Web アプリ屋さんにはオーバースペックになるかもしれませんが、 Goolge みたいな用途ではバリバリ使うのかしら。

疑問が残るところ

2.1 では、 UI を書く JS+HTML コードと .nacl なネイティブコードはプラットフォーム間でポータブルとあるのですが、その後の章でそれについて触れられていないのが気になりました。gcc toolchain を使うんだし、 Windows とかどうするんだろうな、と。そのままのバイナリでいけるのかな。

2008-12-10 01:33 追記: takuma104さんのブコメ によると、同じバイナリ (ELF フォーマット) が Mac でも Windows でもそのまま動いたとのこと。3.2 で書かれている、セキュア ELF ローダ (sel_ldr) とその先にあるランタイムで、プラットフォーム間の差異を吸収しているのでしょう。

あと、評価のところ (4.3) で、 H.264 decoder を Native Client のコードと元々のコードとで比較しているのですが、実測値がでてこず

Performance of the original and NaCl versions were comparable and limited by video frame-rate

としか書かれていなかったのが寂しかったです。

思うところ

  • ブラウザの中で動く言語処理系とかを簡単につくれるのではないでしょうか。これまで JavaScript で実装した処理系とかいくつかありましたけれど、そういうのがもっと簡単につくれる (というか、移植できる) ようになる気が。
  • GPGPUと組み合わせてみてもおもしろそうですね。ちょうど OpenCL 1.0 も出たところだし。
  • 練習問題: Gears との関係は?

Native Client が流行るかといわれるとそうでもないかなーと思うんですが、やはり Google のインフラ技術はおもしろいですね。

WritingTestableCode – テストできるコードの書きかた

ざくっと訳しました。 各 Flaw の先を訳すともっと意味のあるコンテンツになりますね。というか、そっちを訳さないと話にならないような… ひとまずとっかかりだけということで。

いま自分が書いてるコードを見てみると、その1はばっちり当てはまりますね。hoge->fuga->moge とかもしてるのでその2にもか。あ、シングルトンつかってるや。そういえば、この前コードを新しくきた人に見せたら、読もうとして目をまわしてたな… ということは、ぜんぶですね、はい。

1から4までを通して眺めてみると、ちっさなコード片にせよ、というのが柱としてありますね。独立してて、やることが1つだけはっきりしているようなメソッドをキープしなさいよ、と。 分かってるつもりなんだけど、なかなかできないというのはなんでなんだろうなあ。