preload
4月 07

Android勉強会に行ってきた(090406)

Java コメントは受け付けていません。

日本Androidの会主催の定例イベントでお話を聞いてきましたので、簡単にレポートします。

DalvikVM on JavaVMの話をメインで聞きにいきましたが、後半の家電ビジネス周りのお話も初めて知ったことが多くて、勉強になりました。とても濃いお話で楽しめましたです。

Ust録画がここで見られそうな予感。幹事のかた、スピーカの皆様、ありがとうございました。

イーフロー 久納さんによる、DalvikVM を Pure Java (CLDC) で実装した話

  • 久納さんがこれまでにつくったものの紹介
    • QuickBASICの処理系
      • 6000行くらい
    • JavaScriptで動くGameboyエミュレータ
      • ほんとに動いてた。変態だw
      • Canvas処理周りが、Google Chromeが最速とか
      • Wiiブラウザでも動くようにつくってあるとか
      • 4000行くらい
    • Skype4Java
      • Skype APIのJavaラッパ .. Skype公認とか
  • DalvikVMをつくってみたことについて
    • Google公開の仕様ドキュメントがやけに少ないので、自分でつくってみて、よく理解してみようとおもったらしい。ふむふむ
    • すでにケータイJavaVMで動くJavaVMの実装を作ってあったらしく、それに手を加えて4日半くらいでつくったとか。おおー
    • オープンソースで公開することで、イーフローさんがDalvikVMに取り組んでることをアピールしたいとか。なるほどねえ。勉強させていただきます
  • つくったDalvikVMの動き
  • どうやって作っていったか、とか、作っていて気づいたこととか
    • dexdump使って、dexバイトコードをダンプしてみて、追ってみる
      • バッチファイル書いて効率化。$ adb shell “<adb shellで実行するコマンド>” とかでadb shellへコマンドを飛ばせるらしい
    • DalvikVMの命令コードは2Byte(16bit)単位の可変長(最大80bit)らしい
    • バイトコードのエンコードを短くするための工夫が見られる。長いメソッドディスクリプタに命令コードを割り当てなおしたり、配列のデータをとり回す処理が一命令コードになってたり。
    • メソッド内でのレジスタの使い方が変わってる?引数やメソッドローカルな変数などはレジスタに。返り値や例外は、特別な場所へ入れてる?(このへん、意味がよくわからず)
    • 命令コードの説明などなど。Constなんとかでレジスタへの変数格納とかとか。
  • ベンチマーク
    • Embedded Caffeine Mark
    • Google Dev Phone(Dalvik)とP905i(JBlend)で比較
    • StringでDalvikVMの方が1/10くらい遅い
      • なぜか?実行コードが単純に多いからっぽい。JITコンパイラ使って最適化すれば、高速化の余地はありそう
  • VM on VMについて
    • 開発済み資産の再利用とかとか
    • Java MEの世界でいえば、動的なクラスロードができないという制約を超える一手としても

Celevo 岩佐さんによる、家電向けDalvikVMとCE向けAndroid Marketに関する話

  • CE は Windows CE(懐かしい)ではなくて、Consumer Electronics のほうでした
  • Celevo の話
    • 家電ベンチャー。デジカメ作ってるそうです
  • デジタル家電がハード勝負からソフト勝負になっていってる話
  • 家電メーカーにとって、ソフト差別化が(いろんな理由で)難しいし、舵切りできてないという話
  • ハードで勝負するにも、モジュール化が進んでて、海外の部品特化メーカ(IntelとかT1とかNVIDIAとか)が強い
  • 家電にユーザが作ったアプリが載る時代 .. 家電メーカーからすると「来ちゃったか」
    • PCつくるのは儲からない .. 家電もそうなっちゃうかも
  • 小規模でもハードウェアに参入できるようにもなってきたという話
  • デジタル家電のプレイヤーの話
    • 量販では、BUFFALOとかI/O DATAの売り場と(旧来からの)家電売り場で流通マージンがちがうのでごにょごにょ
    • 大手家電メーカは動きにくいね、という話
  • CE 向け Android Market の登場が、大きなターニングポイントになりそう
    • メーカは家電販売が主。そういうアプリの販売機能を持ちにくい。サーバホスティングもやりたくない、らしい
    • 出てくるには、メーカをまたいだUIの標準化や仕切り、メーカ承認フラグみたいな仕組み、DRMとかとかも必要に
  • 誰がやるんでしょうね、とかとか

日本Androidの会 木南さんによるLBSの話

  • LBSつくった話と、アイデアなど。
    • ショートペッパー、良いですね!
Tagged with:
3月 22

Android Hackathon に参加してきた

Java コメントは受け付けていません。

3/19, 20 に開催された Android Hackathon に参加してきました。参加者は 2 日間いずれかへの参加を選ぶ形式で、僕が参加してきたのは 3/19 のほう。主催は Android SDK Japan(User Group)、会場は Google さんの東京オフィスでした。というわけで、イベント概要やら、そこでつくったものの報告とか、メモとか、感じたこととかを書いておきます。

ところで、Hackathon というのは、Hack + Marathon の造語らしいですが、平たく言うと、お泊まり無し(そうでない場合もあるかもだけど)の開発合宿みたいなものです。で、今回は、Android Hackathon だったので、みんなで Android アプリ/サービスをつくろうぜ、的なイベントだったということになります。

今回の Hackathon では一週間ほど前に事前ミーティングが開かれており、そこで参加者のチーム分けや Ideathon なるアイデア出しの打ち合わせがおこなわれていました。チーム区分は以下の通り。

  • Lifestyle & Travel – 日常生活や旅行先で使える便利系アプリ/サービス
  • Multimedia – マルチメディアを駆使(?)するもの
  • News & Weather – ニュースとか天気とか。RSSフィード使ってごにょごにょとか。
  • Specific Device(Feature) – デバイス固有の機能を使ってごにょごにょ
  • Tutorial – テーマは決めず、チュートリアル的になんか作ってみる

僕は Specific Device のチームに参加させていただきました。で、Ideathon でいろいろ討議した結果、「端末によるモーションジェスチャを検知する仕組み(ライブラリ)の開発」&「その仕組みを使ってかめはめ波を撃つ」という壮大な目標にチャレンジすることとなったのでした。

さて、Hackathon 当日の成果ですが.. 結果から言うと、「かめはめ波」の捻出には至りませんでした。まだまだ修行が足りなかったようです。残念。

ただ、以下のような見栄えの、「単純なジェスチャの検知」アプリまでは行き着くことができました。

device

上の画像は、アプリ起動後、端末を上方向に持ち上げたときの画面表示です。とりあえず、端末を平面方向タテヨコナナメに直線に動かした際の8方向について、なんとなくジェスチャが検知できています。ほんとは、ここからこういったシンプルなジェスチャを組み合わせたジェスチャコマンドを認識させ、かめはめ波を撃って、あと、昇竜拳くらいまで行きたかったのですが、残念ながら力及ばず.. でした。

当日開発されたソースコード一式は、以下の hackathon-jp リポジトリから取得できますので、ご興味のある方、どうぞご覧ください(コミット権限はHackathon参加者に限っているようですので、read-onlyにてご了承ください)。

http://code.google.com/p/hackathon-jp/


さて、以下、今回の Hackathon 参加で自分なりにやってみたことや感じたことをメモしておきます。

今回は、事前準備として OpenIntents の Sensor Simulator を動かしてみたり、OpenIntents の trunk にいつのまにか入っていた SensorGestureDetector の実装を読んでみたり、なんとなくヒントがあるんじゃないかと Firefox の All-in-one Gestures の実装を読んでみたりしてました。

また、「ジェスチャを複合して『かめはめ波』のような複雑なジェスチャを組み立てるより、任意のジェスチャパターンを学習させられるようなトレーニングアプリを作って、ジェスチャパターンを数値化していくのが良いんじゃないか」とも考え、ジェスチャ時の各種センサの値をcsv出力するデモアプリを作ってみたりもしました。そんな折に、チームの方から、「HMM(隠れマルコフモデル)による学習/識別が主流らしい」との情報もあり、ググってみて、なんだか難しい論文に行き着いたりしていました。

ただ、Hackathon 当日は、なんだかんだで時間制限に押され、

  • ジェスチャで取得できたcsv値も隠れマルコフモデルとかもよくわからん.. 深みにハマりそう
    • やっぱしとりあえずはシンプルなジェスチャを認識させるところを作ろう
  • どうも加速度センサの値がオカシイ
    • 重力加速度の影響を受けてしまっているみたいだ
      • 重力加速度をキャンセルできるように、逆向きの加速度を渡してみよう
        • 端末のどちら側が地表側を向いているのかを適切に数値化するのが難しい..
          • とりあえず、端末の向きは固定で使うってことにしよう
  • Z軸方向のジェスチャの認識を加えると、認識精度が落ちるみたいだ
    • とりあえず、今日のところは X-Y 2方向の平面ジェスチャのみでいこう
  • 平面でもイマイチ精度が悪い
    • 一定時間(回数)以上、同方向の加速度が取れることをジェスチャ認識の条件にしよう
    • センサデータ取得時の速度を変更させるオプションがあるらしい => 最高速度(SENSOR_DELAY_FASTEST)に!

と、まあ、こんな感じに試行錯誤の繰り返しに多くの時間を使ってしまっていたような気がします。最後のプレゼンが終わった後になって、他の参加者の方に「重力加速度のキャンセルにはローパスフィルタ使うといいよ!」って教えてもらったり、既に試行錯誤されていた方のエントリを発見したり、という感じで、なんだかんだで準備不足、力不足を痛感したわけでした..

とはいえ、こういった開発は久しぶりに新鮮でした。「時間制限(のプレッシャー)」と「チームでの開発」があったおかげでしょうか。意見交換したり、コード見せ合ったりしながらも、ひとりで深みにハマる前に、上のような「問題の単純化(「あきらめ」ともいう)」や、「仕様の割り切り」「当座の目標決定」を短いサイクルで繰り返し、一日での成果を出すことに集中する、ということができたような気がします。で、しかも、それが、とても楽しかったわけです。良いですね、こういうの。僕、いわゆる「開発合宿」には参加したことが無いんですが、その楽しさの一端が垣間見えたような気がしました。


そんなこんなで、当日の他のチームのプレゼンや飲み会の部まで含めると、とても書き切れないほどの多くが得られた、楽しいイベントでした。同じチームの皆様はじめ、ご参加の皆様、主催や協力の皆様、お疲れさまでした。ありがとうございました。

Tagged with:
10月 31

@東京ステーションコンファレンス。本日1日目は諸事情あり十分な聴講時間がとれなかったこと&明日2日目は行けそうにない事から、今日聞けた中で一番面白かった Ameba(アメブロ) の話のメモをとりあえずポストしておきます。スピーカーはサイバーエージェントの岡田さん、大黒さん。


セッションのメモは以下に転記しますが、講演の内容は、2006 年以降アメブロで行われた Oracle => MySQL 移行の苦労話や、増大する PV (月間50億PV!) による負荷対策の取り組み、各種ストレージエンジン x ファイルシステムの組み合わせでのパフォーマンス検証結果、自作サーバによる各種ディスク構成でのパフォーマンス検証結果などなど、といったところでした。


率直な感想としては、けっこう生々しくて濃いセッションでした。サイバーエージェントさんが社内の研究開発で、ここまで面白そうな事をやられてるとは存じ上げなかったので、そちらも驚きました。プレゼン資料や動画については、後日公開されると伺いましたので、興味のある方は、サイバーエージェントさんサイトとか、このプレスリリース周辺をウォッチしておくと良いかも知れません。


以下、メモ。

  • 組織の話
    • 「新規開発局」以下の組織体系。プロデュース、フロントクリエイティブ、システムクリエイティブ、インフラテクノロジーの 4 区分
    • インフラチームは、更に、インフラの統括的なところと、ネットワーク、DB の 3 区分
    • DB チームの業務は DB に関わる部分全般。監視やら、パフォーマンス改善、研究開発や DC でのラックマウント作業も
  • Oracle からの移行の話
    • 2006 年 9 月時点では Oracle x 2 での Active/Stanby – 月間 4 億 PV
    • 2008 年現在は Oracle x 4, MySQL シングルマスタ x 1 + レプリケーション 41 台。Oracle で管理していたブログ記事や、コメント、トラックバックのレコードを MySQL に移行
    • MySQL への移行前(中?)も、ページの一部(サイドバーとか)へのキャッシュ導入、WebLogic から Apache + tomcat への移行、NFS マウントから WebDAV への移行などのチューニングは、いろいろやっていた
    • MySQL へ移行するにあたって、レコード数の多いデータ(ブログ記事とか 80 百万レコードくらいあったとか)は –replicate-do-table しつつサーバ/テーブルを分割。最終的に月間 50 億 PV 捌けるようになったとか
    • Oracle からのデータ移行は、ダンプしたやつを scp とかで運んで LOAD DATA INFILE するのが速い。
    • 移行ツールが一見ラクそうだが、やってみるとアプリ側の処理がボトルネックになってるようだった。LOAD DATA INFILE で 2 億件ほどのレコードを 4 時間で移行できた
    • DB を変えるにあたって、DB に適したシステム設計にできるよう、UI 側のデザイン見直しにも積極的に関与したとか。ブログ管理画面に年月タブを表示したり
    • INDEX の見直し、クエリの見直し、explain での確認を丁寧にやった
    • 最終的に、一画面表示の際の、参照系のクエリ発行回数は増加したが、ディスクの I/O はかなり軽減し、スケールアウトしやすい構成にできた
    • 現在の構成で 35000-40000 クエリ/分くらいだが、60000 クエリくらいまでは行けそう
  • ストレージエンジン x ファイルシステムの比較検証の話
    • 開発では CentOS 4 系、ファイルシステムに ext3、DB に MySQL 4.1 系 MyISAM 利用がスタンダードになっていた。
    • サイバーエージェントでは MyISAM が好まれている。テーブルロックはテーブル分割で回避できているし、InnoDB は運用時の扱いにくさもあるので避けられているとか
    • 一部 MySQL 5.1 を採用したサービスもあるが、もっといい組み合わせが無いかと、いろいろ試してみた
    • ext3, xfs, zfs の比較。OS が異なるため厳密な比較はできなかったが、ext3 < xfs で xfs のスループットが 1 割ほど良い結果が得られた。zfs はチューニング次第で ext3 レベルまで持っていけるかも
    • xfs は journal log 周りにチューニングの余地があり、まだ伸びしろがありそう
    • MyISAM, InnoDB, Maria の比較。InnoDB は想定ほど悪くはなかった
    • 組み合わせ的には xfs + MyISAM がもっともよさそう
  • 自作サーバの話
    • 自身で機器選定してサーバ構築&パフォーマンス検証。ハードウェア構成検証、スキルアップ、コスト削減のための取り組み
    • HW-RAID, SW-RAID, SSD によるディスク構成比較
    • HW-RAID なかなかよい。SW-RAID は I/O が増大してくると不安定に。SSD は読み込みは抜群に高性能だが、書込みパフォーマンスが悪い

ブログアプリってことで、参照系アクセスが多いんでしょうね。50 億 PV でも、シングルマスタ& MyISAM テーブル分割で回避できちゃうんだなあ。いや、もちろん、言うほど簡単じゃないんだろうけど。しかし 41 台レプリケーションで LAN 内ネットワークトラフィックは問題にならないんだろうかとか思ってたら、その辺の議論も質疑で交わされてて、そちらも参考になりました。いまんとこ、ネットワーク側はそんなに問題になってないとか。うんー、勉強になりましたです。


なお、上記メモ後半部分の、サイバーエージェントさん社内研究成果については、コンファレンス会場の展示会場ブースで見せてもらう事ができます。他のテーマも含め、いろんなネタがファイルされていたのですが、こういう研究活動のアウトプットがしっかりまとめられているという体制/仕組みもすばらしいなあと思ったのでした。


以上です。一部理解が追いつかなかったところもあり、正確にメモできてるかは微妙です。すみません。なんかオカシイんじゃねえかとおもうところとか、訂正とか指摘いただける方は、コメントとかで教えてください。


ちなみに、明日はニフティさんココログの PostgreSQL => MySQL マイグレーション事例紹介セッションがあるそうです。こちらも聞いてみたいのですが、行けそうにないので、誰かレポートしてくれるとうれしいです。

Tagged with:
3月 16

Shibuya.abc #1に行ってきた(080315)

ActionScript コメントは受け付けていません。

BeInteractive! の yossy さんの呼びかけで始まった、変態さんたちの集いに行ってきました。参加しただけで、しゃべるネタが用意できなくてごめんなさい。でも、皆さんのお話や飲み会での会話は、思ってた以上に楽しくて、思う存分ニヤニヤできました。ニヤニヤ。

では、例によってメモを転記。

BeInteractive! yossyさん

  • Shibuya.abc 誕生の理由
  • AVM2, FlexSDK オープン化の話
  • たまりんと戯れる話
    • ビルド。ソース入手。
    • zlib のパスを Makefile にいれとく
    • avmplus できる。
    • asc ひろってくる。ビルトインのabcをパスの通ったとこにおく
    • as プログラムかく。クラス単位である必要なし。
    • コマンドライン引数を取得するテスト
      • 引数は — をつけてやらないといけないらしい。
    • 標準入力を取得するテスト
    • 直接実行できるようにするテスト。binfmt_misc つーので avmplus へ渡せるとかなんとか@linux
    • – で引数書かなくてすむように、ラッパーのシェルスクリプトを書いてやるテスト
  • ServerSide AS3 .. CGI で動くようにする
    • GET引数はQueryStringに入る。でもenvが取れない。
      • AVM2 を拡張する。SystemClass に getEnv() 追加。内部的には getenv システム関数を呼ぶ
      • ビルド方法がむずかしそう。ながい
      • 同様にPOSTもとれる。取り出すときは、Content-Length とかちゃんとチェックしてやる。
    • 独自のWebフレームワークを使って、ゲストブックを作る
      • javac のときに -AS3 フラグが要るらしい
  • Flashと連携する。BlaseDSを使う。AMF通信。移植したらしい。なんと。
  • swfassist もサーバサイドで動いたとな

クジラ飛行机さん

  • FlashLite でうごく言語をつくる
    • 言語を作ると出勤が週2でよくなることもある
    • 電車でつくるプログラミング言語
    • FL2.0 をつかった。パーサジェネレータで自動生成。コンパイルはサーバサイドでやる。アセンブラだけつくる
    • swfmill, flasm, kmyacc .. swfmill は simple モードを使う
    • flasm は swf の中のアクションを書き換えるのに使う
    • swfmillでテンプレートswfを作る。kmyaccでパーサを作る。flasmでアクションを書き換える
    • kmyacc で文法を作る。calc.phpy っていうサンプルを改造していく
      • 実行コードの中に、計算結果を返す代わりに、flasm のアセンブラ表記に書き換える形にする
      • PRINT をサポートさせる。字句解析ルールを追加。
      • サーバサイド処理を作る。ソース入力に対してyyparse()を実行して、flmの中身を書き換えてアセンブルする
  • 「葵」.. FLashベース開発環境
  • 八角研究所で情報公開中。AIRの本も書いてるそうです

鴨志田さん

  • A=ord(“d”) でニヤニヤする話
  • よりコンパクトに
    • 直接 値を書くよりも、何か評価した結果を値にもっていくことで、その命令セットと合わせてもちっちゃくなるばあいがある
    • substring(A,1,1) よりも chr(ord(A))
    • 変数名を短くする。コンスタントプールが使えない FL1.1 では重要
    • eval で数字やら制御文字を渡してやって変数名にする事もできる。そうすると使える一文字変数の数がふえる!eval(“t”) = 123; とか。
    • FL1.x で $_VARSION みると、5 系っぽい。試してみたら 5 のアクションも使えた。Increment とか使えた。SWFヘッダは4にしとく必要あり。
    • 複数の値をいっぺんに Push して、Push のヘッダ部分を節約する話 .. FL1.x 系でもいけたらしい
      • 変数が入る場合はgetVarも必要。交換法則が適用できるかどうかチェック必要
    • if で || やら && を使うと、コードサイズが2の冪乗でコードサイズが増える。
      • 各論理値を他方の式に対してそれぞれ重複して生成してしまうためらしい。A || A || A || .. ってたくさんかくだけで swf が 100K こえる
  • より高速に
    • SetRegister した値をすぐ使う場合は、直後の pop, push は要らない
    • 1万回の push[null] からオーバヘッドを測定。ヘッダ部分で 1.5μsec くらい
    • サイズが減る=アクション数が減る場合は、たいてい高速になる

TAKESAKO さん

  • Flashアンチリバースエンジニアリング
    • ライセンス。オープンにされている情報の話
    • swf を頭から読んでいく話。可変長タグの「データが無ければ飛ばされる」データを節約してファイルサイズを下げる話
    • 境界ジャンプを使う。逆コンパイラがジャンプのフローを解析できないものが多い。ジャンプ先のコードが正しく読めない
      • このテクニックを自動化するツール as2lock

gyuque さん

  • Gnash ぐなっしゅの話。オープン実装の Flash プレイヤー
  • ubuntu だとパッケージで入るらしい。でもビルドする。gtk いれとかないと mozilla 対応できない
  • 実験台swfアニメーション: アニメーションは完璧ぽい。BGM が変
  • ゲームをやってみる。クリック効かない。gotoAndPlay 追加して強制スタート。ぐちゃぐちゃになった。
  • Gnash は youtube を意識している?Youtube 再生結構完璧にいける。シークできない。バッファリングできない。
  • ソースを覗く。ソースツリーの解説。
    • swf.h に AVM2 のオペコードの実装が進んでるぽい形跡が
    • ASHander.cpp に各アクションの実装。動く仕様書というかんじ。
  • AVM を書いてみる。命令の解釈や実行スコープ管理を俺実装するデモ。それ以外は既存のVMに渡す
    • mtasc でコンパイルして defineFunction2 を置き換える
    • VM の教科書として最適?

nitoyon さん

  • avmplus how-to
  • irb みたいのがほしい。いちいちコンパイルがめんどくさい
    • ソースの中に AVMPLUS_INTERACTIVE てのが。コメントとってリビルドすると使えるようになった。おおおおお
    • でも、実行毎の状態は保持できない.. 内部的には毎回コンパイルして実行してるみたい。
    • class Hoge() {} に失敗。Object のビルトインが読み込まれてないためらしい。.import でビルトインのabcを呼んでやればOK
    • Windows でしか動かないみたい
  • winQuery .. Windows で jQuery 、みたいな Windows アプリ。
    • $(“explorer.exe”).close() みたくやりたい
    • as3Query をベースにする。
    • Window の構造を DOM として捉えるとできるんじゃないか?という仮説。nodeName=window名、className=プロセス名みたいにしてみる
    • print($(“.explorer:root:visible”)) とかで、見えてはいけないウィンドウまで見えちゃってニヤニヤ
    • ウィンドウのパーツを取得して動的に書き換えるとか。
    • 裏側では Win32 な関数をいっぱい書いてる。avmplus ってスクリプトエンジンとしても使えるんですね

こんなかんじ。wiki の方には nishio さんが Ust 中継された動画もあるみたいですので、そちらもどうぞー。

yossy さん、お声がけありがとうございました。おかげで楽しめました :)
yossy さんとは、前に amachang さん繋がりの勉強会 で会っていたと思うんだけど、今回はお話するタイミングを逸してしまった。残念。

それから、休日にもかかわらず、勉強会の場所を提供いただけるサイボウズラボさんには感謝です。TAKESAKO さん、飲み会の取りまとめまで、ありがとうございました。

ではでは、次回 Shibuya.abc[d-z]+ を楽しみにしております!

Tagged with:
2月 18

Rails勉強会(東京)に行ってきた(080217)

Ruby コメントは受け付けていません。

なんと、第27回とのこと。長く続けられている運営の皆様に感謝&尊敬。今回は、霞ヶ関 CTC さんのセミナールームっぽいところをお借りしました。ありがとうございます。

Ruby 関連のこういう勉強会は、今回初めての出席。今回おこなわれた Rails 勉強会は、冒頭、その日のセッションを前後半、幾つかの部屋に分けて募り、いずれかにサインアップしていくという方式。こういう方式のおかげで、Rails 歴の短い僕も、自分のレベルに合うセッションに参加させていただく事ができた。こういう運営はうれしいなあ。

前半は、先日公開された fastladder のソース読み。こういう面白い教材をオープンにしてくれたなかのひとに感謝!一応手元の MacBook で動かせるようにして、gonzui でソース読みの環境を作ってから臨んだ。進行は井上さん。始めに E-R 図で全体のモデルを確認してから、サインアップ〜ユーザ認証〜セッション管理周りを追っていく。認証は AuthenticatedSystem を使ってて、特にトリッキーな部分は無く、素直な実装だった。元が Perl アプリだから当たり前か。Application.rb で before_filter :set_member してて、毎アクセスごとに DB 問い合わせしてユーザの正当性をチェックするような実装になってるみたい。
認証周りだけだと時間が余ってしまったので、lib/crawler.rb も追ってみたい、とお願いし、一緒に読むことになった。サーバサイドだと、クローラの実装周りが面白いところなんじゃないかな、と思って読んでみたけど、こちらもそれほどトリッキーな部分は見当たらなかった。フィードを取得するリクエストの発行部分のタイムアウト値の制御周りや、almost_same みたいなフィードの中身チェックの部分が結構興味深かったかな。本家の方には、まだ明かされてないいろんな工夫があるんだろうな〜。
そうそう、favicon を取得変換する辺りのメモリ使用量について話題になった。僕はこの件なにも追ってなかったんだけど、言われてるような FreeImage の問題なのかな?
メモリ使用量を 10 分の 1 にした shunirr.org さんによれば:

まぁ、favicon取得は新規サイトを登録した時だけだろうと思うので、たぶん2回目以降のくろうるからはメモリ使用量は大して変わらないと思いますけどね。

とのことだけど、どうも update の都度 favicon を見に行ってるように見えるなあ。 (ざっと読んだだけなので、ひょっとしたら違うかも。) subscription のときだけでもいいようにしたら、どうなるかな。
せっかくサーバサイドもセットで公開してくれたんだし、JavaScript 側も含めていろいろいじってみようかな。

後半は、舞波さんによる ActiveScaffold の紹介セッション。去年の8月くらいに ActiveScaffold をちらっと使ってみたけど、カスタマイズの仕方がよくわからなくて、結局放置してた。(ほぼ)ノンカスタマイズで使うときは Streamlined を使っていたので、良い機会だった。
使いはじめが scaffold と同じで簡単なことや、リレーションを動的に解決してくれることは知っていたが、ここまでいろいろカスタマイズできるとは知らなかった。active_scaffold :モデル名 でブロックへ渡してごりごりカスタマイズ。この第一歩がわかっただけで、すげーテンションが上がった。この一歩がわかれば、ドキュメントもソースもどんどん読める!いやー、ActiveScaffold ってスゴいんですね〜。

最後は、KPT (Keep, Problem, Try) と題した、運営の振り返り。前半後半の終わりにも、各セッションでどういうことが話されたかの振り返りの時間があったんだけど、こういうのも含めて、運営がしっかりしてるなあとおもった。27回も続いているのもうなずけます。

いつもブログ拝見してるような方々も来られてて、なんだかとても有意義な時間を過ごさせていただきました。今日は終わってから用事があったので懇親会は行けなかったんだけど、次回は懇親会も行きたいな〜。それから、なんかネタ提供してしゃべれるようにならないと。

Tagged with: