Flash嫌い?

16th Mar, 2010 | development flash

今の会社に入るまで、自分も普通にFlashが嫌いだったのだけど、自分が関わるようになって「まー、ありかな」と思うところもあるのでメモ。アニメーションとかゲームとかでばりばりFlashっていう方面ではなくて、アプリケーションの一部としてFlashを使う話。

まず自分のFlashに対する経験を書いてみる。

Flashとバックエンド(サーバサイド)の間に立ってコミュニケーションをするモジュールをFlexで作った。というのが一番技術的にFlashに近づいたところかな。

これを作る前はFlashが直接バックエンド(またはJavascript経由でバックエンド)と直接コミュニケーションしていたんだけど、色々と問題(実装したFlash毎に通信方法が違ったり、通信環境のエラー処理をFlash側にそれぞれ書かなかったりいけなかったり)が出てきたので間にデータハンドリング用の層を作った。また、Flashから直接サーバサイドやJavascriptとやりとりするのを禁止にして、Flashのプログラマの人がpureなFlashの制作に集中できるようにした。

それと、ActionScriptというところで言うとAdobe Flexでそれなりの規模のアプリケーションは作ったことはある。

そんな感じなので、ActionScriptはそれなりにわかるけど、Flash固有のこと(タイムラインとか)はよくわかってないと言った感じ。でも、なんとなくFlashがどう動いているかというのはわかっているつもり。それと、それなりの数のFlashのプログラマと一緒に働いてきて、Flash開発とFlashの開発者の人の傾向みたいなものもなんとなくわかっているつもり。

で、自分が感じている開発視点でのFlashの強みは、

  • 生産性は高い? これは正直微妙なところもある。ただ、HTML+Javascript+CSSが好き(でFlashが嫌い)な人は「それ、HTMLでもできるよ」ってすぐ言うのだけど(エフェクトとかね)、やっぱり生産性、保守性という面ではまだまだFlashには敵わないかな、とは思っている。もちろんFlashが得意なところに限る。テキスト処理みたいな苦手なところで使うと一気に生産性ダウン。
  • 人材を確保しやすい。これも微妙か。数年前は、html+Javascript+cssで、きれいに動きを付けられる人を探すのは、Flashな人を探すより大変だった。最近はそうでもないのかなー。
  • オーディオやビデオの再生や録画と言ったところはまだまだFlashでしか(簡単に)できないことも多い。
  • ブラウザ間の互換性を(あまり)気にしなくていい。

弱いところは、

  • テスト系のツールが遅れてる。Unit Testがあるぐらい? 画面系の自動テストも、商用含めいくつかあるみたいだけど、あまり標準的なものもなく、結局未だに手でテストしてる。TDDだBDDだ言って盛り上げっているところから見ると、あれ?って感じ。
  • SCMが使いづらい。Flashだとまだバイナリファイルで管理している部分(fla)があって、SCMでの管理が非常にしづらい。Flexならほぼ全部テキストベースのコードで行けるのだけどね。このご時世に「いつの間にかファイルが先祖返りしてた」とかありえない。
  • バックエンドのことまで考えられる技術者が少ない? これはもう半分諦めて、インタフェースの部分はバックエンドの技術者が作ってしまった方がよさそう。
  • テキスト系が弱すぎる。Flashというより、Flash Playerの問題か。この時代に、もっさり感のあるテキスト入力とかちょっと考えられない。
  • ブラウザ間の互換性はあまり気にしなくていいけど、Flash Playerのバージョン間の互換性は知っておく必要がある。

うーん、「みんな悪く言うけど、Flashそれなりにいいもんだよ!」と思って書き始めたんだけど、こうやって書き出すと悪いところが目立つようになってしまった。あらら。

今後は、Flashが強いところをピンポイントでモジュールとして作り、htmlとJavascriptの中でそれを調和させつつうまく使う、というのが正解なんだろうな。Adobeの中の人も同じようなこと言ってたような気がするけど。で、その辺のいい感じのフレームワークみたいのがあればいいのにね。

そうなってくると、Flash技術者の人はhtmlとかJavascript/CSSの知識も持っていないとツラそう。いかにhtmlと協調して、違和感なく動くようなFlashモジュールを作れるか、というのがポイントになってくるので。

なんとなく、メモっておきました。



今週のMongoDB翻訳

13th Mar, 2010 | mongodb

なんとなく1翻訳1エントリにするのはやめた。 Twitterには流してる

新規で訳したもの:

更新したもの:

更新を追いかけていくのが大変になってきたので、新規のはぼちぼちやっていきます。


MongoDBの翻訳全般については、 こちら参照。



MongoDBのライセンスについて

10th Mar, 2010 | mongodb

Twitterで少し話題になっていたので、MongoDBのライセンスについて書いてみる。

「MongoDBを使う場合、自分で書いたアプリケーション側のソースも全部公開しないといけない」的なが広がるのはちょっと嫌なので。

http://www.mongodb.org/display/DOCS/Licensing とか、 http://blog.mongodb.org/post/103832439/the-agpl を読んでみてもらえばだいたいわかると思うのだけど、MongoDB自体は、確かにAGPLなので、改変した場合、(一般に公開する)サーバ用途の利用でMongoDB自体のソースの公開の義務はある。ただ、これはMongoDB本体の話で、自分で作ったアプリケーションには適用されない。また、ドライバー関連はApache licenseなので、ドライバーを組み込むような自分のアプリケーションを作った場合もAGPLは適用されない。

もし、これが嘘なら、自分のところでも使いづらくなるので、ツッコミ超歓迎。



Rubyを「知ってるつもり」の人にお勧めな「Metaprogramming Ruby」本

9th Mar, 2010 | ruby book

とてもいい本だったので紹介してみる。

Metaprogramming Ruby: Program Like the Ruby Pros by Paolo Perrotta

この本を読み始めてすぐに、自分がこの本に対してタイトルから想像していた内容と違うことに気付いた。

自分が想像していたのは、「こういうケースでは、こういうメタプログラミングをするといいよ」「こういうメタプログラミングのパターンもあるよ」というRubyでするメタプログラミングの実践編の本かと思っていた。でも、これは間違いで、この本はRubyでメタプログラミングができるようになるためのRubyの基礎知識が書いてある本だった(基礎、と言っても初心者向けというわけではなくて、Rubyのベース部分という意味で)。

想像とは違っていたのだけど、結果的に、ちょうど今自分が読むべき本だった。

自分は、この本を読むまで半年ちょっとRailsを通してRubyを経験してきて、期間的にはそれほどでもないが、それなりの規模のシステムも作ってきた。その結果、それなりにRubyのことをわかっているつもりだったし、最近はRailsのソースとかも少しずつ読むようになってきて、見よう見まねでメタプログラミングもしていた。

そのくらいのときにこの本にめぐり合ったのだけど、とてもいいタイミングだったようだ。実はよくRubyのことわかってなかった、ということを痛感できた。

この本を読む前にメタプログラミング実践編的なのに入っていたら、上辺だけのメタプログラミングをしてしまい、訳がわからなくなっていたかもしれない。

この本の構成としては、

  • 10%: メタプログラミングとは何か、の導入
  • 50%: メタプログラミングで必要になってくるRubyについての解説
  • 20%: メタプログラミングの基礎を習得したところで、RailsのActiveRecordを例にとってメタプログラミングがどう使われているかの解説
  • 10%: メタプログラミングに対するテストの書き方
  • 10%: 便利なTipsを含むその他

な感じ。

こんな感じで半分くらいをRubyそのものについて読ませる内容になっている。Rubyでメタプログラミングができるようになるための基礎体力をじっくり着けてくれる作りになっている。

たとえば、「スコープ」というプログラミング言語を勉強するときに基本中の基本なところだけども、10ページくらいかけてしっかりと教えてくれる。スコープの章の中の各タイトルを抜き出してみると、Scope/Changing Scope/Scope Gates/Flattening the Scope/Sharing the Scope とこれだけある。そして、スコープを理解することはメタプログラミングをするときにもとても重要なこともよくわかる。

その他にも、自分が今まであやふやに過ごしてきたことで、この本によってはっきりと理解できるようなったものとして、ぱっと思いつくものだけでも、

  • Objectとは何か?
  • Classとは何か?
    • Class名とは何か?
  • Classはどこにあるか?
  • Class変数とは何か?
  • selfとは何?

  • メソッドとは何?
  • Class メソッドとは何か?
  • Instance メソッドとは何か?
  • Moduleとはなにか?
  • classとsuperclassとmoduleの関係
    • methodを探す順序は?
  • lambdaとは何か?
  • procとは何か?
  • lambdaとprocの違いは?
  • instance_eval とは?
  • class_eval とは?
  • eval とは?
  • include と extendの違いは?
  • scopeが変わる場所はどこ?何種類ある?
  • 特異メソッドはどこに存在する?

おそらく、それぞれの説明は、Googleにでも聞いてどっかのページを見ればわかると思うのだけど、なぜそうなっているのか、それぞれがどう関係しているのか、ということをこの本はとてもわかりやすく説明してくれる。そして、これらのそれぞれの技術が独立したものではなくて、関連し協調しあって、「Rubyらしさ」を作っていることもよくわかる。

読んでいるときには「ここまでの知識が必要?」と感じたところもあったけど、読み終わってみると、すべてがしっかりとつながっていて、余分かなと思ったところは実は伏線で、最後までにはしっかりと回収されている感じになっている。

この本を読んでから、Railsのコードとかを見ると、一行一行はっきり意味がわかるようになって、今までコードを読んでいるつもりだった自分はなんなんだったんだろう、という気分にすらなった。ちょっと大袈裟だけど、わりと本気。

1.9 対応

ちゃんとRuby 1.9にも対応している。たとえば、Objectの解説のところでは、BasicObjectのこともしっかり説明されていて、どういうときに使うのが便利か、ということまで解説している。

英語

今のところ英語版しかないようなんだけど、英語苦手な人でもコードの例もたくさんあるし、そんな難しくない英語なので大丈夫だと思う。BillとBobという二人の登場人物が対話する形でRubyの物語が進んで行く。読み物としてもよくできている。

そういう自分も英語だと日本語で読むより数倍遅い。でも日本語で読んだ時よりも頭の中に残っている感じはある。日本語だと字を追っているだけで頭に入ってないときとかあるんだけど、英語だと一文ずつしっかり読むので頭に残りやすいのかも。

お勧め

そんなわけで、Rubyをなんとなくやっているけど、深いところまでびしっと理解はしていない、という人にすごくお勧めな本でした。

日本語訳も出るようなのでそちらも期待!



MongoDB翻訳 - アップデートの続き

7th Mar, 2010 | mongodb

アトミックなアップデートについてのドキュメント。