Hatena::ブログ(Diary)

ekurodaの日記 このページをアンテナに追加 RSSフィード

2009-02-26

Google Hackathon for OpenSocial in Kyoto に参加

先日、近所の京都リサーチパークHackathonがあるということで参加してきた。

2/20(事前ミーティング/Ideathon), 2/21(Hackathon)という2日間。結果から言うと、前日のIdeathonでは見事優勝させて頂いたものの、本番では意外な所で躓き思ったように作業が進まず惨敗であった。

今回作ろうと考えたのは、MySpaceをターゲットにした、音を使ったFlashアプリケーションで、タイトルもまんま「Social Sounds」。簡単に説明すると、まず、ユーザの属性値をパラメータとしてユーザー毎に固有の「音」が生成されるようにする。誰かと友達になるとその友達の音を自分の音コレクションに追加出来るようになる。で、集めた音を使い、簡単なシーケンサーもどきでトラックを作って聴いて遊べる、というもの。

アプリケーションのコアな部分は全てFlashで実装し、jsでの実装部分はOpenSocialコンテナとFlashアプリ間のブリッジに徹するのが良さそうだ、ということで、基本的にFlashjsに分担して作業することにした。二人チームで、相方となった方がCS使いということだったので、Flash制作は彼にお願いし、js/Flash間のインターフェースを取り決め、自分はFlexを使用してテスト用のアプリケーションを作成。Flex <-> js <-> コンテナがやりとりするコードを書いていった。

しかし自分がCSを使った事が無く、FlexCSで如何にコラボレートしていくべきかのノウハウが全く無かったのが痛かった。結局、テスト用Flexアプリに対しては問題無く動作していたjsとのインターフェースが、CSで作成したFlashとは上手く動作しない部分があり、ハマりまくっているうちに時間切れ、と非常に中途半端な状態で終了。

まあ、元々そんなに作業が進むとは期待していなかったものの、流石にこのままでは悔しいし勿体ないので、今後も開発を継続していくことにした。ついでにFlash CS4 Professionalの試用版をダウンロードし、CSの使い方を探りはじめてみたり。

で、現状は、元々MySpaceのみを対象にしていたのを、Orkutの方が開発し易いかも?ということでOrkut上で色々試しはじめているのだけど、Flashの埋め込み方法に違いがあってハマったので以下にメモしておく。

MySpaceの場合

MySpaceの場合、普通に<object>タグを書いて問題ない。

<Content type="html">
<![CDATA[
<object
  id="flashobject"
  classid="clsid:1111111-2222-333-4444-xxxxxxxxxx"
  codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=10,0,0,0"
  width="550" height="400" align="middle">
<param name="movie" value="path_to_swf_file/foo.swf" />
<param name="quality" value="high" />
<param name="bgcolor" value="#ffffff" />
<param name="allowScriptAccess" value="always" />
<param name="allowNetworking" value="all" />
<param name="allowFullScreen" value="false" />
<embed
  name="flashobject"
  src="path_to_swf_file/foo.swf"
  width="550" height="400" align="middle"
  quality="high" bgcolor="#ffffff"
  allowScriptAccess="always" allowNetworking="all" allowFullScreen="false"
  type="application/x-shockwave-flash"
  pluginspage="http://www.adobe.com/go/getflashplayer_jp" />
</object>
]]>
</Content>

Orkutの場合

まず、MySpaceと同じように<object>タグを書いてもロード出来ない。また、OpenSocialのドキュメントによれば(gadgets.flash - OpenSocial - Google Code)、gadgets.flash.embedFlashを使えば問題ないはずだが、下記の様に記述してもきちんと動作しない。もう少し正確に言うと、Flashは読み込まれるがallowScriptAccess等のパラメータが渡らないらしく、Flash内からjsアクセス出来ない為、事実上使い物にならない。これはgadgets.flash.embedFlashのバグだと思われるが、詳しい事は不明(この辺に情報あり)。

<div id="flashcontainer"></div>

<script type="text/javascript">
gadgets.flash.embedFlash(
  "path_to_swf_file/foo.swf",
  "flashcontainer", {
  swf_version: 10,
  id: "flashobject",
  allowScriptAccess: "always",
  allowNetworking: "all",
  wmode: "transparent"});
</script>

ではどうするか?答はSWFObjectを使用すること。Download SWFObject 1.5を適当に配置し下記の様に記述すると、問題無く動作した。まだ試していないが、多分Orkut以外もこの方法で大丈夫なのではと思われる。

<div id="flashcontainer"></div>

<script type="text/javascript" src="path_to_swfobject/swfobject.js"></script>
<script type="text/javascript">
var so = new SWFObject(
  "path_to_swf_file/foo.swf",
  "flashobject", "550", "400", "10", "#ffffff");
so.addParam("allowScriptAccess","always");
so.addParam("allowNetworking","all");
so.addParam("wmode","transparent");
so.addParam("menu", "false");
so.write("flashcontainer");
</script>

という訳で、

Hackathonはとても楽しいイベントだった。Hackathonというと、コードばりばり書けるハッカーばかりが集まりそうな感じがして敷居が高そう(だし、実際ハッカー度の高いHackathonも多そう)だけど、Google Hackathonは色んなレベルの人が参加し易い良いイベントだと思う。このようなイベントを開催してくれたGoogleの方や京都のスタッフの方には感謝したい。懇親会で他の開発者の方々やGooglerの皆さんに色々と興味深い話が聞けるのも楽しいし、ハッカーが集まってコード書きまくるなんてなんか怖い、とか思ってる人がいるとしたら、それは誤解だと言っておきたい。

尚、今回参加の目的として、他の人の開発手法やどんな感じでコード書いてるのか等のテクニックを盗みたい、というのもあったが、とてもそんなことやってる場合じゃない、という位、自分の事で精一杯だったのは残念。

2009-02-01

下駄記号

文字列同士の類似度を調べるコードを見ていて、下駄記号(〓)というのを初めて知った。へえ。

と、それはどうでもいいんだけど、仕事場の近くにふたば書房っていう極々普通の町の小さな書店があるのだが、久しぶりに立ち読みに入ったら、BGMが延々Animal Collectiveで異様だった上に、何故だか音楽やら建築やらのコーナーがやたらと増えている。一体何処へ向かってるんだ。小さい店は色々大変なんだろうな。

で、そのよく分からない頑張りに敬意を表し、見つけた「ナイロン100パーセント」を買ってみた。

この本、ページ左下がディスクガイドになっていて1ページに1タイトル紹介されているのだけど、これが僕が好きなのばっかで嬉しくなる。というか、ニューウェーブレコメン系、クラウトロック等なんだけど、そういうのを僕が好きだということの源流がここら辺にあるのだろうな・・・。殆ど持ってる(or 持っていた)ので、ここで紹介されていた中でまだ聴いてないやつは今後全て入手し聴くべきだ、と思った。

以上、ここへきて初めて音楽絡みのことを書いてみた。

2008-11-21

ATOKのキーバインドをEmacs風にする

ATOKダイレクト API for Perl/Rubyが面白そうだったので、これを機会に初めてATOKを使ってみた。

で、早速ruby_evalを試してみら、確かに便利なんだけど、残念ながらATOKの変換後の文字列って、改行などを含むことが出来ないのね。便利さ半減。

それはそうと、ATOKって滅茶苦茶キーバインドをカスタマイズ出来るんだな。知らなかった・・・。即、以下のような感じでEmacs風にしてみたら、非常に日本語入力が快適になった!

変換/次候補Ctrl-N追加
変換/前候補Ctrl-P追加
全角無変換(後)変換Ctrl-YCtrl-Pから変更
部分確定-Ctrl-Nを削除
変換取消Ctrl-GCtrl-Hから変更
全文字削除Ctrl-G追加(入力中のみ)
1文字削除Ctrl-DCtrl-Gから変更
カーソル前移動Ctrl-BCtrl-Kから変更
カーソル後移動Ctrl-FCtrl-Lから変更
カーソル先頭移動Ctrl-A追加
カーソル末尾移動Ctrl-E追加
文節区切り伸張Ctrl-VCtrl-Lから変更
文節区切り収縮Ctrl-6Ctrl-Kから変更
文節前移動Ctrl-B追加
文節後移動Ctrl-F追加
文節先頭移動Ctrl-A追加
文節最終移動Ctrl-E追加

惜しむらくは、修飾キーにAltが使えないことだな。それが出来たら、文節区切りの変更にM-F/M-Bを使うのだが。

ともかくこれでまた、矢印キーに指を伸ばさねばならない場面が減った。というか、今までMS-IME使い続けててかなり損してたかも。変換精度の良さとかはまだあまり体感出来てないけど、キーバインド変え放題というだけで使う価値大だな。本物のEmacs使いはSKK使うんだろうけど。

これで、残る大きな矢印キー問題は、eclipseのインテリセンスで候補を選択する時位になったな。

2008-11-12

KOF 2008での「はてな流大規模データ処理」by id:naoyaさんの発表に関して質問したときのメモ

KOF 2008 の発表資料 - naoyaのはてなダイアリー

こちらの発表に関して、後日質問した時のメモ。

  • 全文検索インデックス生成等の為、MySQLのデータをバッチ処理でdumpしている、という点について。
    • データが多く、dump処理からして重い/時間が掛かるのでは?
      • そこまで即時性を求めないので、10日とか用途毎に適当な間隔で。
      • パーティショニングされたテーブルなら、各パーティションそれぞれ担当分のdumpとなり軽くなる。
      • また、master-master構成で片方をユーザーのアクセス用、もう片方を完全にバッチ用にしたり。
        • はてなは殆どMyISAM。テーブルロックになるのでユーザーの利用でアクセスするマシンでdumpすると、その間のレスポンスがえらいことに。
          • ちなみにMyISAMって結構よく壊れて、気付いたら滅茶苦茶リソース食って暴走してたりする。
          • でもファイルコピペするだけで他のDBにテーブル移動したりできて取り扱いは楽。
          • はてなの場合、トランザクション基本的に必要ないのでinnoDB使ってない。
    • 用途毎に特化したデータを出力している?
      • テキストになっていればHadoopに突っ込んで割とどうとでもなるので、そうでもない。

  • 全文検索について。Sedueを使っているが、既にLuceneなどもあるが?
    • Senna -> 以前試したが、segvしてMySQLごと落ちたりして使えなかった。今は良くなってると思うけど。インデックスがでかくなってメモリに載せられなかったり。
    • Lucene -> 試したが、目的の用途では遅くて使えなかった。融通も効きにくい。それにJavaだし。
      • その時一緒に話していた方より、Luceneは億単位のデータを扱っている例もあるとのこと。(ここでその方がSenのコミッタである事が判明。驚!!)
      • 日本語の扱いが…。またn-gramだとキーに紐付くドキュメント数が膨大になって、計算量が多くなりがち。
    • HyperEstraier -> 試してみていない模様?mixiとかでも使ってるのでいい感じなのかな、とのこと。
    • Sedue -> Suffix Arrayならではの弱点もある。(具体的な話は忘れた。)
    • 検索は自分で実装するのが良いよ!

  • Hadoop使いまくりですか?
    • 今年使い始めて、今8台のHadoopクラスタ
    • 最初はログデータの解析が追い付かないので使い始めたけど、その後クローラに使ったり、結構色々出来て便利。

  • memcachedは結構使ってる?
    • 勿論使ってるけど、そこまで使いまくってるというほどでもない。
    • 格納するデータはケースバイケースで。あんまり凝ったことをしようとし過ぎるとまたバッドノウハウの世界に…。
    • DBアクセスも、OSキャッシュにデータがちゃんと載ってれば全然速い。

以上、特に公表してマズそうな内容も無さそうだし、もしかすると何か参考になる人がいるかも知れないので公開しておく。憶えている内容をそのまま書いただけで、間違ったことを書いている可能性もあるので注意。

ちなみに、id:kazuhookuさんのコメントで「〜OSバッファの話からすると、myisam なん?」とあったが、例えばinnoDBだとOSバッファが有効でないという事なんだろうか。実践ハイパフォーマンスMySQL読めば分るかな?

しかしJOINもトランザクションも要らないなら、もうそこはRDBMS捨てても良さそうな気もするんですが、本当に完全にJOIN使わないという訳でもなく、色々あってなかなか捨てられないもんなんですね。

2008-11-10

PHP関西 勉強会に参加

11/7、KOF初日の帰りにPHPの勉強会に初参加。関西でPHPの勉強会というのは久しぶりらしい。とりあえず、全参加者のうち、かなりの割合がCakePHPを使っていて驚いた。以下感想。

PHPUnitのこんな機能知ってる? by id:kunitさん

PHPUnitというかSeleniumの話がメイン。なぜPHPUnitというタイトルかというと、話の中で、kunitさんが今作っている、SeleniumIDEの吐くテストのHTMLを、SeleniumRC使ったPHPUnitのコードに変換するツールについて触れようと思ってたら、Seleniumの話が面白くなってきてしまって、それメインになった、とのこと。

SeleniumIDEは便利だけど、HTMLだと柔軟性に欠けるので、結局プログラム書いてテストしたくなるよね?なのでそのHTMLをコードに変換し、それを改変してテスト書くと楽じゃないかという話。確かに便利そうだ。個人的にはSeleniumIDEの方は使ったこと無くて、最初からRCだけ使っていて十分便利だと思っているのだが。ちなみにそのRCも、テスト用に使ってるのではなく、ブラウザを自動操作するMechanize的なツールとして使っている。(Mechanizeでは上手く行かないところがあったので。)SeleniumRCはテスト用途で無くとも便利な道具だと思う。

PHPUnitについては、最近は単なるxUnit系のテスティングフレームワークという枠を超えて、RSpecみたいなBDDの要素を取り込んだりして面白い事になっているという(詳しくは今回の発表の範囲外)。自分は何故だったかSimpleTestをずっと使っている為PHPUnitは全然チェックしていなかったが、ちょっと気になった。

CakePHPとか by shin1x1さん

どの様な経緯でCakePHPを使うようになったかという話から、ちょっとしたTIPS、実際の構築例まで。自分はCakePHPは使っていないのだが、こういった経験談というのは参考になるし面白い。Cakeを選んだ理由として、PHP4/5対応、ドキュメント充実、などの点を挙げていたが、ここら辺が自分がsymfonyを選んだ理由と対照的で興味深かった。自分の場合、CakeはPHP4対応という所で、オブジェクト指向的にイマイチなんじゃないかと思ったのがまずあったし、またドキュメントという点では、当時の時点ではsymfonyの方がしっかりしていたように感じられた、ということもあるので。まあでも、今の時点で選ぶならCakeにするかもなーとか思ったりして。それにしても、発表途中で出てきたCake内のSetとかの配列関係のライブラリは、どんだけarray好きやねん!という感じでちょっと引いた。XPath的に多次元配列の要素にアクセスできるような機能とか、かなりキモい。便利そうだけど。

PHPScraping2008 by させざきさん

Web::Scraper的に使えるPHPライブラリDiggin_Scraperの作者であるid:sasezakiさんによる発表。Diggin_Scraper知らなかったけどなかなかいい感じ!sfBrowser使ったテストとかでDOMXPath->query()とかチマチマやってassertしたりしてたんだが、試しに使ってみて大丈夫そうなら今後はこれを使おうと思った。発表後半では、HTTPアクセスして結果をスクレイプするようなコードを書く時に、HTTPリクエスト周りの抽象化Zend_Http_Client使ってやると、テストするのにテストアダプタ使えていいよ、といった話もあり、Zendフレームワームライブラリって完全にスルーしてたけど実は色々便利なものが埋もれてるのか、という気付きがあった。

懇親会

一度会ってみたかったkunitさんですが、やはり熱い方で、飲みまくりながら色々語ってくれました。少し前の設計勉強会絡みの話から、開発中だというMapleの次期バージョンの設計思想まで。既にsymfonyやらCakePHPなどが出ている中で、フルスタックフレームワークを作る気はもう無いという話やら、レイヤーアーキテクチャ大好きだから勿論そういう作りになるのを意識したフレームワークであるとか、複数のリソースが複合的に表示されたビューに対応するRESTfulなインターフェースの話とか、色々と。最近RESTやテスト駆動に傾倒されているようなので、その辺を強力にサポートするフレームワークになるのだろう。テスト可能性を重視するならやはりDIコンテナがあると良いのだけど。個人的にsymfony2で入る予定だというDIコンテナにもかなり期待してるので。それにしてもkunitさんはこの懇親会後、次の日KOFで発表があるにも関わらず、更に朝4時まで飲んでいたという。凄い。

その他、ずっと不思議な存在として気になっているrhacoについて、やはり何だか凄いものなのだということが色んな人の話からちょっと分ったり。というか、作者のtokushimaさんという方が非常に面白い人のようだ。あんまり使ってもらうことを前提としてないとか、色々自由過ぎる話に衝撃を受けた。