たまに18歳未満の人や心臓の弱い人にはお勧めできない情報が含まれることもあるかもしれない、甘くなくて酸っぱくてしょっぱいチラシの裏。RSSによる簡単な更新情報を利用したりすると、ハッピーになるかも知れませんしそうでないかも知れません。
の動向はもえじら組ブログで。
宣伝。日経LinuxにてLinuxの基礎?を紹介する漫画「シス管系女子」を連載させていただいています。
以下の特設サイトにて、単行本まんがでわかるLinux シス管系女子の試し読みが可能!
タブカタログのサムネイル上でリンクをクリックしたらリンク先に飛べるようにしたついでに、リンク上の中クリックでタブも開けるようにしてみたんだけど、これ、ちょっとでもクリック位置がずれたらタブを閉じてしまいかねないなあ。いまリンクの上にポインタがあるのかどうか一目で分かるようにしたいけど、CSSのcursorみたいなことはJavaScriptじゃ実現できないようなあ……と思った末に、現在ポイントしている位置のクリック可能な要素を強調表示するということを思いついた。でも、これで本当に実用的な速度で動くかどうか?というのははなはだ疑問だった。
GomitaさんのTab Scopeでは、DOM2 Tree Walkerによってすべてのクリック可能な要素を頭から順番に走査していき、要素のボックスの範囲がclickイベントの発生した座標を含んでいるかどうかをチェックする、という手順によってcanvas上のクリック位置に対応するリンクやボタンを見つけている。タブカタログもこの実装をそのまま使わせてもらっている。
この方法の問題は、ページの中にリンクやボタンが大量に配置されていたり、ページの末尾近くまでスクロールしていたりすると、クリック位置の要素を見つけるまでにものすごく時間がかかってしまうという点だ。クリック時のみの処理ならまあ我慢できるかもだけど、mousemoveイベントを拾って「今クリック可能な要素をポイントしている」時だけその事を示そうと思ったら、相当悲惨な事になるのは目に見えている。っていうか実際やってみてあまりの重さに死にかけた。
そこで、何年も前に試して諦めたnsIAccessibleを使う方法に再び挑戦してみることにした。
結論から言うと、これのおかげで現在の位置の要素の取得を飛躍的に高速化できて、やっと実用レベルになったと思う。
Debugmode Winkで、サムネイル上でのブラウズ操作の様子の動画を作ってみた。
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://active.macromedia.com/flash5/cabs/swflash.cab#version=5,0,0,0" height="314" width="356"> <param name="movie" value="/xul/_video/tabcatalog_browser.swf"> <param name="play" value="false"> <param name="loop" value="false"> <param name="quality" value="low"> <embed src="/xul/_video/tabcatalog_browser.swf" quality="low" loop="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/shockwave/download/index.cgi?p1_prod_version=shockwaveflash" height="314" width="356"> </object>
このあたりの成果は本当にGomitaさんのTab Scopeからのそのまんま引き写しなんだけども。
第2回拡張機能勉強会でTab Scopeのプロトタイプを見てから、公開されたらぜひタブカタログでこの機能を使わせてもらおうと思っていて、気がついたら公開されてたので早速見てみたんだけども、他の拡張機能とかで機能を利用できるような設計になってなかったので、仕方ないから関係してるコードをコピペしてタブカタログに仕込んでみた。
ただ、画像を含むリンクで画像の前後に改行があったりすると上手くいかなかったので、そこだけ手を加えた。
分割ブラウザを更新した。機能的には目新しい変化はなくて、じゃあ何が変わったのかというと、機能の見せ方。「ブラウズ領域を分割する」というメンタルモデルだけでなく、「タブブラウズのタブをひっぺがして横に貼り付ける」という風なメンタルモデルで利用できるようなメニュー項目を加えてみた。それが「横に並べる」と「縦に並べる」という物。また、「分割されたブラウズ領域をタブブラウザのタブにまとめる」機能も同時に加えた。これを使うことで、あたかもOperaでタブ表示とタイル表示を切り替えるかのような感覚で使えるようになる……といいなあ、という目論見だ。
また、マルチプルタブハンドラのAPIのデモンストレーションも兼ねて、こいつとも連携して動くようにした。全部のタブではなくて一部のタブだけタブブラウザから切り離して横に並べる、とかそんな事ができるようになる。
追記。めんどくさくてスルーしてたけど、タブの数から水平・垂直方向の分割数を割り出してほんとにタイル状に配置する機能も実装した。これでようやく、実用的なレベルになったんじゃないだろうか。
拡張機能のファイル群からXPIパッケージを自動的に生成するバッチファイルを、須藤さんの書いたスクリプトとにらめっこしながらシェルスクリプトに移植してみた。
元々バッチファイルもシェルスクリプトもよくわかってなくて、chmodを使う必要があったことからcygwinを入れざるを得なかった関係上、各コマンドの名前がWindows用の物なのかsh用の物なのかよくわかってなかったんだけど、あれこれぐぐりながら情報かき集めて、どうにかこうにか動く物になってくれた。
一応使いかたを説明しておくと、以下のような感じ。
Windowsのエクスプローラでは、ファイルなどのドラッグ中にフォルダの上でしばらく待つと、そのフォルダを勝手に開いてくれる。Firefoxのブックマークのフォルダもそういう風になっている。これと同じように、Second Searchの挙動を変えてみよう、と思って色々実験してみた。
とある便利な機能について、その作者がFirefox用の拡張機能として実装して実験した後、デスクトップアプリケーションとして作り直して正式リリースしようとしている件について、「今時デスクトップアプリケーションなんて誰も使わないよ」とコメントされたそうだ。今のこの状況で全く同感だ、とまで言い切る自信は僕には無いけど、なんとなく、そういう方向になりそうだなあとは思う。
僕自身は、絵の編集やなんかは気が済むまで時間をかけてじっくりやりたいタイプなんで、ちゃんと作りこまれたデスクトップアプリケーションが無いとお話にならない。だからWebベースの物に完全にスイッチするという姿を想像し辛い。でも、そこまでのこだわりを持っていない人は――もしくは、僕と違う所にこだわりのポイントを持っている人は、お絵描きチャットやお絵描き掲示板のJavaアプレットで十分満足している場合もあるようだ。「ふたば」とかの盛り上がりっぷりを見るとそれがよく分かる。スピーディーにたくさんの作品を発表するスタイルには、あの形式がとてもよくマッチしている気がする。
ただ、新しく何かを始めるにあたって、Webベースで、あるいは普段使っているブラウザの中でそれを実現できる手段があるのなら、それで満足してしまう可能性はある。僕自身、初めて触ったお絵描きツールがオンラインの物であったら、それに特化した制作スタイルになっていたかもしれない。僕がオフラインでの制作に拘り続けているのは、絵を描くという事に関してネットに触れる前に制作スタイルを確立してしまったからなのかもしれない。
ネットに触れるようになってから始めた事について振り返ってみると、自分自身、今ではオンラインのサービスに頼りきって生活している。巡回はlivedoor Readerにほぼ統一してしまったし、英和・和英辞書検索も英辞郎ばっかりだし、テキスト翻訳もそう。乗り換え案内も地図検索も全部オンラインだ。
オンラインのサービスなら特に何も考えなくてもフロントエンド・データベースともに最新の状態が保たれているだろうし、というのも、オンラインべったりになっている大きな理由だ。同じ理由で、少なくとも、自動アップデート機能を備えていないデスクトップアプリよりは、自動アップデートの可能なFirefox拡張機能の方が、その点において僕には魅力的だ。
今敢えて「XUL Runner」というデスクトップアプリ専用のランタイムを開発することに注力するメリットは薄いと思う。MozillaがFirefoxだけに注力するという判断をしたのなら、それはやっぱり正しいことなのかもしれない。XUL Runnerよりは、Firefox Mobileとでも言えるような仕組みを実用的な速度で動くように作ることの方が、よっぽど現実的(実現可能性が高いという意味ではなく、成功可能性が高いという意味で)だと思う。
この歳になってくると、同じフィールドで自分より年下の人と出会うことは珍しくなくなってくる。
10代であれこれやってる人は珍しくても、20代であれこれやってるひとは全然珍しくない。「若くて凄い人」は、本当に年が若くて物凄く実力がある人も多いんだろうけれども、そう評される人の中の一部は確実に、単に早熟なだけなんだろう。大人になってからしはじめるはずの事をちょっと早めに始めてしまっただけで、他の人も大人になってくれば、差が全然なくなる。
差がなくなるだけで終わらず、追い抜かれてしまった場合は、もっと悲惨だ。早熟なだけなのに、相対的に現時点で「凄い」だけでしかないのに、「自分は永続的に絶対的に凄い」と勘違いしてしまって、それ以上自分を磨くことを怠ってしまったら。気がついたら後から来た人にガンガン抜かれていって、もう追い付くことなんかできなくなってしまっていたりする。
そして、今の地位を守ることだけに固執するようになる。後から来て自分を追い抜いていく人達を見て、ただひたすら妬むばかり。
分不相応に肥大化してしまった自尊心、いや、もはやただの見栄でしかないそれを、小さく削るしかないと分かっていても、削れない。削る痛みに耐えられない。ヤスリで皮膚をごりごり擦るような鈍く長い痛みに耐えられない。
削る痛みに耐えられないから、まるごと捨てる。根っこから引き抜いて全部捨ててしまう。プライドのかけらもない人間、いっちょあがり。
でも肥大化した自尊心が上に乗っかってる状態がいままでデフォになってしまっていたから、またすぐに自尊心が元の大きさまでふくれあがってしまう。
まったく、始末に終えない。
Split BrowserのAPIのドキュメントを用意してみた。まあ、こんなもん使う人がどれだけいるんだか、はなはだ疑問なんだけど……
「諦めた」と宣言したそばからナンだけど、あの後もう少しがんばって、どうにか対応してみた。aioContent
のリダイレクタになるオブジェクトを定義するだとかの珍妙なテクニックを駆使しまくって、やっとのことで。
AiO Gesturesのためだけに7KBくらいはコード書いた気がする……あまりにハック用コードが膨大になってきたから別ファイルに分離しちゃったよ(リンク先の半分あたりから先は全部AiO Gestures用のコード)。