smellman's Broken Diary

クソみたいなもんです

Mozilla 勉強会@東京 7th

先週の土曜日にMozilla 勉強会@東京 7thに参加してきました。って日記アップするの忘れてて先々週の話になってしまったorz
珍しくメモをたくさんとったので、そのメモベースでざざっと。

Android 版 Firefox アドオン開発事始め by Gomitaさん

Scrapbookの作者として有名なGomitaさんの発表。AndroidFirefoxでアドオン開発をするときのお話です。
基本的に資料通りですが、いくつか面白いポイントがありました。
まず、アドオンをAndroidに転送する方法。開発機と端末が別々の場合わりと面倒なんだけど、GomitaさんはDropboxで共有してWeb版のDropboxを端末で開くことで対応をしていた。このテクニックは他にも応用できそう。
アドオンの中身はやはり基本的なところは一緒だけど、発表中にdynamisがこんな注意を。


Native UIのポイントとしては、ボタンの追加とかができなかったりして不自由が多いという印象。また、端末の画面が狭いためbrowser.xulへのオーバーレイは現実的じゃないというのも面白かった。わりとわりきって開発しないといけないんだなーという感じ。
ただ、ローカルファイルの読み書きが可能だったり、もっと制限されているのかなーと思われていた点もわりと開放してるようなイメージがありました。セキュリティはどうなんだろう(ぉ
あと、質疑応答でadb logcatでログは見れるのかと質問したらdynamisが先にツイッターに書いてた。

Mecha-Mozilla: ウェブと実世界をつなぐ試み by ださん

今回のイベントで一番ハードな内容でした。ええ、ハードですね(てけ
発表したネタは以下のとおり:

Arduino.js
Arduinoを制御するJavascript。これをもとにWebを実世界に取り出す。
通天閣
写真立てに通天閣の写真を立てておいて、ブラウザで大阪の情報を見ているとLEDが光る。
re-finder
Webには写真が沢山あるけどカメラアングルが欠落しているためモニタとの自分の位置関係しかない。なので、下から見上げた写真などを再現するという試み。
weburret
webページを開くと様々な処理が発生する。その処理をお酒に割り当ててwebページを表示するとカクテルができるという仕組み。だいたい攻撃的な味になってしまうらしいw

Arduino.js自体は users javascript <-> addon + js-ctypes (C言語) <-> Arduino というつなぎ方をしている。
addonを入れていると document.arduinoArduinoインスタンスが取得できる(!)
あとはシリアルをopenしたりとか、pinModeってメソッドで信号与えたりとか。
次にこの前のハッカソンで作っていたKinnectネタ。
Arduino.js同様に、users javascript <-> addon + js-ctypes (c++) <-> kinnect という感じでKinnectをつなげてしまう試み。
デモではwebページにKinnectの出力を反映させて、手を動かすと手のところにある要素を破壊する、懐かしのFirefoxブロック崩しみたいなデモをやっていました。
面白いのがjs-ctypesの配列をそのまま使うと遅いというところ。JITコンパイラが効かないらしく、Javascriptの配列にコピーをしている。この手のテクニックはハードよりならではだなぁと思った。

Preprocessor by teramako

こじらせてE4Xに手を出していたteramakoさんの発表です。
MozillaにはPreprocessorという仕組みがある。C言語とかの#includeとか#ifdefとかがMozillaソースコードには普通に存在していて、これをどうやってやっているのかという解説。
具体的にはPreprocessor.py + Expression.pyというファイルの組み合わせでフィルタしている。
で、Preprocessor.pyにバグがあるらしく、それを聞いて僕は途中からそのソースコードと格闘を始めてしまいました(汗

ブラウザ内のエディタ事情 by moozさん

ブラウザ内のエディタというのはどのように実現しているかという話。
まず最初に実装の仕方の話。Javascriptによるtextareaへの文字列挿入のテクニックや、範囲選択とかを解説。それらをまとめると高度な編集機能が実現できる。
次に現在ブラウザで使えるエディタ実装の話。現在3パターンの実装がある。

キーイベント全解釈タイプ
イベントリスナを使って全てのキーイベントを監視して、イベントを順に解釈してビューを構築するというもの。自由度は高いけど、IMEがからむキーイベントが飛ばせない。
contentEditableタイプ
ビュー要素にcontentEditable属性を設定する。入力関係の問題は生じにくいけど、ブラウザごとに挙動が異なったりする。
hidden textareaタイプ
入力が不可能なビューを見せて、隠されたtextareaの内容を監視してその入力不可能なビューに反映させるもの。ブラウザごとの挙動には左右されないけど、実装が複雑で、コンテキストメニューからの操作ができない。

さまざまなエディタ実装があるけどそろそろ統一的なインターフェイスがほしいねっていうのでFirefox 11から入ったsource-editor.jsmのお話。
これはただのインターフェイスで、挙動はバックエンドで何を使うかによって左右される。デフォルトのバックエンドはEclipse Orionを使ってる。
SourceEditorが高度な編集機能インターフェイスを持っているのがポイント。

Add-on SDKでできない事をやってみよう -UI編- by Piroたん

日経Linuxのシス管系女子でお馴染みのPiroたんの発表。
すいません、Preprocessor.pyの修正に力を入れてしまい発表が半分ぐらい聞けてないですorz
個人的にツボなのは安定してるAPIと不安定なAPIがあるっていうところですね。これはアドオン開発者は悩まされてるんだろうなぁと(汗

雑感

今回の勉強会で面白かったのが、Androidのアドオンの話もあったためか、わりとAndroidユーザが多いという印象でした。すまべん@関西の常連の方もいたりして、いつもと違う層の人たちで賑わっていたのが印象的でした。

懇親会

加藤さんとmalaと一緒に平和について語っていました。ラブアンドピース。