Implementation
and
Future of Taberareloo
id:Constellation Constなんとか
Yusuke Suzuki
Dec 17, 2011 @ tumblr developer's meetup jp 2011
自己紹介
- id:Constellation
-
- ECMAScripter / JavaScripter
- Taberareloo
- ECMA262 仕様厨
- 最近はECMA262処理系書いたり
- 型解析したり
- 回復機能付きparser書いたり
- esprima parser projectにcontributeしたり
自己紹介
- Q&A
- 「なぜfacebookは対応していないの?」
Taberarelooは多くの開発者の協力で成り立っています(敬称略)
- Constellation
- os0x
- YungSang
- hitode909
- syoichi
- Tombloo Dev Team
特にYungSangさんにはGoogle+用Model/Extractorの実装等大変お世話になっております
皆さん本当にありがとうございます
Taberarelooついて
-
- Yet Another Tombloo on Chromium Tombloo
-
Taberarelooついて2
- kuさんのtableau
- 「たべるー」って読むと思っていた
- じゃあ自分は「たべられるー」で
- 紅白のあのキャラが思い浮かんだりも
- モンスターの壺に入れて持って行きましたよね!
patch
Tombloo, Taberarelooの大枠の仕組み
- Extractorがpageから情報を抽出する
- この情報に付加情報をつける(タグとか, コメントとか)
- Modelがこの情報をそれぞれのServiceに投げる
例えば
- なにかService(例えばfacebook)へPostしたいと思ったら
- facebookのModelを作り, Modelsに登録
- Modelは一定の規約に沿って作る
-
Models.register({
NAME: "あずにゃん...",
ICON: "...",
check: function() { ... },
post: function() { ... }
})
- するとpost先に選べるようになる
で, ここから
- Google Chromeはpageごとにcontextが独立している
- 拡張の永続的instanceであるbackgroundがある
- それとの通信は, Message passingになる. よってJSONで渡せるもの
実装
- なのでpageの情報を使いながら情報を抽出するExtractorは, pageのcontextに
- Modelはbackgroundのcontextにある
- この間を抽出情報を非同期でpassingしあいながらうまくやり取りする
問題点
contextが分かれている!!
問題点2
- 拡張性として非常に難しい
- Tomblooのpatchのsystemを導入できない
- やるとすれば, context, background別々にpatchを入れないといけない
いくつか検討
という訳でずっと考えているのですが, 何かいい案ないでしょうか?
疎結合Model
Abst: より疎結合に
- 今, postとかextractとかは全て非同期だが, checkは同期
- checkとは, 今Modelが有効かどうかを調べるmethod
- 何もかも非同期にする
- すると外部拡張との通信を含むModel(Model実体が外部拡張に存在する)が作れそう... (Blobとかは今は考慮せず)
- Google Chromeの拡張関連系の話
疎結合Model2
問題として, Modelしかできない
page contextの情報(例えばHTMLElement)が必要なExtractorは無理
うーん, 片手落ちか...
多態patch
Abst: 1つのpatchを2つのcontextで
- 1つのpatchを両方のcontextで動かす
- たとえば...
多態patch2
Patch.register({
background: function() {
// background contextでのみ呼び出される
},
page: function() {
// page contextでのみ呼び出される
}
})
- とか...
- こういうpatchを書いてもらい, 両方のcontextで動かせば
- うーん...
API based Implementation
きっかけ
DelicousがあんまりにもUI変えまくるので...
API based Implementation
とは
- ごく普通にAPI tokenをTaberarelooに登録
- 提供されているAPIを通してのpost
- 高い安定性
- セッション切れなし
えっ
なんで今までやってないの?
- API token登録するとか利用者的に面倒...
- browserがloginしてたらそのまま使いたい
- APIからでは取得できない情報やpostできない情報があったり
- ならformからpostで...
そこで
- optionalとしてtokenを登録できるようにしてはどうか
- 完全にAPIのみでやりたいことがまかなえるServiceに限る
- tokenが登録されていればそちらを使って安定post
- なければ従来挙動
- というのを検討しているのですが
- どうでしょうか?
Future
ChromeのAPI
Google Chrome extensionのAPIはまだまだ拡張が続いています(以下experimentalばかりなので, 今は使えません. 将来)
楽しみですね...
終わりに
- Taberarelooではissue, patch, pull requestなんでもお待ちしております
- issueなどはこちらへ
- あとでYouTubeのExtractorが壊れているの直します...
ありがとうございました
id:Constellation