ChromeRepl - a remote REPL client for Google Chrome

2009-11-07 15:50

Today is a little party about Chromium extension at Shibuya. And so I wrote a small extension to learn about Chromium and Google Chrome.

Developer Tools Protocol

Yesterday, I hear about Google Chrome Developer Tools from co-worker. He said “I tried Eclipse debugger but not works well…”. Um, I don’t know Eclipse. Sorry.

However I found a Google Chrome Developer Tools Protocol from Developer Tools page. It’s simple, text based protocol over TCP/IP. User can control Chrome from a remote client.

Protocol

Developer Tools Protocol have some Tools. DevToolsService is not fun, V8Debugger is powerful and interesting, and ExtensionPorts is most flexible. This tool used to talk to a Chrome extension.

How to use ChromeRepl

So I wrote a extension, Ruby client library and script. Repository is chrome-repl.

ChromeRepl is proof-of-concept quality yet. First, launch Chrome with –remote-shell-port and load extension from chrome://extensions/.

% /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --remote-shell-port=9222
...

Second, edit extension ID of chrome-repl script and launch on another console.

% ruby -I lib ./bin/chrome-repl 9222
> 1 + 2
3
> chrome.tabs
{"onRemoved"=>{"listeners_"=>[], "eventName_"=>"tabs.onRemoved"}, "onAttached"=>{"listeners_"=>[], "eventName_"=>"tabs.onAttached"}, "onDetached"=>{"listeners_"=>[], "eventName_"=>"tabs.onDetached"}, "onSelectionChanged"=>{"listeners_"=>[], "eventName_"=>"tabs.onSelectionChanged"}, "onMoved"=>{"listeners_"=>[], "eventName_"=>"tabs.onMoved"}, "onCreated"=>{"listeners_"=>[], "eventName_"=>"tabs.onCreated"}, "onUpdated"=>{"listeners_"=>[], "eventName_"=>"tabs.onUpdated"}}

I’ll make chrome-repl.crx soon. Please wait a moment.

10月をふりかえる

2009-10-31 10:44

10月も終わりで、あと2ヶ月もすれば今年も終わってしまう。仕事はうまくいっていない、けど9月よりはがんばれたと思う。

クラスや関数をきったり実装を整理したりは、自分でもそれなりにできていると思っている。でも運用に関しては、まわりとの間に歴然とした差を感じることが多い月だった。障害対応の場数はふんだけど、役割は交通整理が精一杯だ。負荷が高まる DB をみながらテーブルにインデックスを追加したり、サーバー間の通信量を減らしたりはまだできない。マスター1台に複数のスレーブがぶらさがる構成のデータベースで、アプリケーションからスレーブへのバランシングを直したのはちょっと楽しかった。見つけたのも、ふりかたを考えたのも自分じゃないけどね。

GTD は結局みについていない。フィードリーダーは Fastladder で再開してしまった。とはいえ13件で1つは自分、2つは英語で、のこりは全部友達や先輩なので、なんかずいぶんちがう。ソーシャルブックマークはまだ止めたままだ。

Web に対する考え方はすこし変わった、ことを COOKPAD のいざこざをみて意識させられた。クロールする権利とか、スクレイピングする自由とかは、別に空からふってくるものではないと思う。最近カメラマンのひとと会う機会があって、そのときも少しコピーのはなしをしていた。

あとそう、ちょっと自分のなかで GitHub ブームがあって Rip の # TODO とコメントされている部分を直したり、OAuth::Lite に機能が足りないと思ったら自分が間違っていたり (わかりづらいと強弁した)、Buildbot の IRC まわりに機能を足したりしていた。トピックブランチははじめて作った。

『Linux-DB システム 構築/運用入門』を読んだ (3)

2009-10-24 21:37

最近 MySQL まわりで困ることが多くなってきたので、kazuhoのメモ置き場blog.nomadscafe.jp で勧められていた『Linux-DB システム 構築/運用入門』を読んだ。

本書がカバーする範囲は広い。実際に私がさわる場所は7, 8, 9章の memcached やアプリケーションパーティショニング、インデックス、そして14章の負荷テストのあたりだけだ。でも、その前の章で出てくる DRBD やロードバランサは、自分がさわる場所の前後左右に、後の章に出てくるファイルシステムやスケジューラは、これも自分がさわる場所の下にあるわけで、知っておくべきだしわかるのは楽しい。

いろいろハイテクもあったので、実験用に自宅 Linux サーバーでもたてようかと少し思った。8-p.info も Debian GNU/Linux で動いてはいるけど、これは Slicehost という海外の VPS だからか、コマンドを打ち込んだりするにはネットワーク的に遠くて遅い。

抽象化

例えばハードディスクというのは通電していなくてもデータが消えない回転する円盤で、それを抽象化してファイルシステムがあり、さらに抽象化した上には RDBMS がある。その上でアプリケーションを書いている人が「ランダムリードはシークが」とかいうのは変な気もするけど、下では相変わらず円盤が回転して、遅かったり速かったりするんだからしょうがない。

『Joel on Software』にはここらへんをあつかった「漏れのある抽象化の法則」という章があり、こう書いてあった。

そういうわけで、抽象化は私たちが作業する時間を減らしてはくれるが、私たちが学ぶ時間までは節約してくれないのだ。

確かに、このくらいの割り切ったつきあいが良い気はします。