たまに18歳未満の人や心臓の弱い人にはお勧めできない情報が含まれることもあるかもしれない、甘くなくて酸っぱくてしょっぱいチラシの裏。RSSによる簡単な更新情報を利用したりすると、ハッピーになるかも知れませんしそうでないかも知れません。
の動向はもえじら組ブログで。
宣伝。日経LinuxにてLinuxの基礎?を紹介する漫画「シス管系女子」を連載させていただいています。
以下の特設サイトにて、単行本まんがでわかるLinux シス管系女子の試し読みが可能!
表題の通り。最大化状態でFirefoxを終了して次にFirefoxを起動した時に、最大化が勝手に解除されてしまう問題。ブラウズ領域の描画内用が変になることがある問題というのが発生してて、ウィンドウをリサイズしたら直るようだったので1ピクセルだけウィンドウの大きさを変えてまた元に戻すというコードを入れてみてたんだけど、最大化状態でやると最大化が解除されてしまうということに気付かないままリリースしてしまってました。
みんな最大化って結構使ってるんですね……ということを、このバグの報告が大量に来たことで実感した次第です。
表題の通り。昨日と今日とでガラッとUIが変わったりしてカオスな事この上ないMinefield 3.1b2preですが、最終版まで残るものと踏んで、タブの一覧を表示した時に絞り込みを行う検索欄でMigemo検索できるようにしました。ページ内検索の物とは異なり、スマートロケーションバーと同様にスペース区切りで複数語句のAND検索になります。入力からそれに対応する正規表現を生成する部分の処理はスマートロケーションバーの物を汎用化して使っているので、語句の頭に「-」を付ければNOT検索もできます。
で、その関係でpIXMigemoインターフェース(XMigemoCore)に新しくいくつかメソッドが加わりました。以下、IDL定義から抜粋。
AString getRegExpFunctional(
in AString input,
out AString termsRegExp,
out AString exceptionsRegExp
);
attribute boolean andFindAvailable;
attribute boolean notFindAvailable;
boolean isValidFunctionalInput(in AString input);
AString trimFunctionalInput(in AString input);
getRegExpFunctional()
に「nihon go -hoge」という風な文字列を渡すと、nihonとgoをローマ字入力として解釈した結果でAND検索を行うための正規表現が返ってきます。第2引数に渡したオブジェクトのvalue
プロパティには、AND検索ではなくOR検索のための正規表現が格納されます(これを使うと、検索にマッチした単語を取り出すことができる)。第3引数に渡したオブジェクトのvalue
プロパティには、NOT検索で「これにマッチしたら除外する」という用途に使う正規表現が格納されます。先の例だと「hoge」をローマ字入力として解釈した結果の正規表現ですね。
trimFunctionalInput()
メソッドは、例えば「nihon go -」という風な(NOT検索の入力中と思われる)文字列を渡すと、前後の空白と最後のハイフンを取り除いた結果を返します。NOT検索が無効な時は、前後の空白だけが取り除かれます。今の所はそれだけしかしません。
isValidFunctionalInput()
は、trimFunctionalInput()
やgetRegExpFunctional()
に渡してMigemo検索するに値する内容かどうかを判定します。このメソッドがfalseを返した場合はMigemo検索のための処理を丸ごとスキップする、という風な感じで使います。
タブの一覧の絞り込み部分のコード(filterListFromInputメソッド)が、まさにこれらの実際の利用例ということになります。自分のアドオンやらuserChrome.jsやらで使ってみたい人は参考にしてください。
他の目につく改良点として、スマートロケーションバーの検索処理を改善しました。というか修正しました。元々スマートロケーションバーでは、例えば「moz」と入力して出てきた候補から「mozilla.jp」を選択した場合、2度目以降はその候補が真っ先に表示されるし、同様に「mozilla.gr.jp」や「addons.mozilla.org」なども選択したことがある場合には選択回数が多い物から順に表示される、という仕様になってるんですが、これを再現するためのSQL文を書き間違えてて(MAX関数をJavaScriptのMath.max()
みたいなものと勘違いしてた)、同じ項目を何度選んでも表示の順位が上がらないという状態になってました。スマートロケーションバーが全然スマートじゃなくなってたという……
会社サイトのブログの方で解説を書くつもりですが、UxU新バージョン(0.5.0)を公開しました。日本時間10月30日の昼下がり、太平洋標準時で29日の肉の日リリースです。変更点はMozilla Add-onsのバージョン詳細の方を見てください。
自分自身がサーバソケットの方を使ってなかったのでMozRepl互換のサーバ機能の方がだいぶ長らく死亡してたみたいなんですが、今回プロファイルを指定してテストを実行する機能を作るにあたり、新たに起動された子プロセスと親プロセス側でテストの実行結果や中止の命令とかを通信しあうために、UxUサーバで使われていた機能をブラッシュアップして流用するようにしたため、ぶっ壊れていた所がだいぶ直りました。今後はサーバ周りの実装も気をつけて見るようになると思いますので、ぶっ壊れっぱなしのまま放置ということは減るんじゃないかと思います。多分。
ところで、子プロセス起動してうんたらかんたらということができるようになったということは、FirefoxやThunderbirdの上で動かすことにこだわらなくてもいいようになった(必要に応じてそれらを呼び出せば済む)という事で、やる気次第ではXULRunnerアプリケーション化という道もあり得るかもしれませんね。
前者は3.1ブロッキングにもなってないし確定というわけではないようだけど、影響範囲があまりにでかくて入れば僕の作ってる奴も全滅は間違いないので注視しておきたい。
後者はもう入ってるので、見落としが無いようにパッチの隅々までチェックしておかないと。
ていうかほんとMozillaの世界の「ベータ」ってアテにならない表現だよね……ファイナルベータでアルファ版級の変更をぶち込んできたりとかさ。
UnitTest.XULとかUxUとかうずとかいうアレ。サイトの方は長らく放置してますが、地味に作業してます。
プロファイルを指定してテストを実行する、というのはずっと前からやりたいと思ってた。これができると機能テストとか結合テストとかいう段階のテストが圧倒的に楽になる……はず。
Ruler Bar更新した。結局、今までのやり方はほとんど全部うっちゃって、ピクセル単位で位置合わせするようにした。
ピクセル単位で現在のカーソル位置を取得するには、カーソル位置=長さ0の選択範囲の位置に何かダミーの要素を挿入して、その要素の画面上でのX座標を取得すればいい。ただ、メール本文の編集中にこれをやると、場合によっては再描画とかノードがブツ切りにされまくるとかでかなり怖いことになるんじゃないだろうかという心配があったり、そもそもテキストノードの切断を伴うような処理をやると選択範囲が失われる(=カーソルが一時的に消える)のでその復活のための処理が面倒だったり、といくつかの理由があってこの方法を採るのをずっとためらってた。
でも上手い解決方法を思いついたので、今回この方法に切り替えることにした。
種を明かすと、非表示のフレームを一つ用意しておいて、編集中のメール本文のうちカーソルがある段落の箇所だけをその隠しフレームに複製して、そっちでテキストノードの切断を伴うような処理をやってる。フォントや文字の大きさ、body要素の幅などを合わせてやれば、そこで起こる折り返しは基本的に本物と全く同じ結果になるはずなので。編集されるのは複製の方で、しかもカーソル前後の段落だけ抜き出したものだから、ノードを切り刻んでも再描画のコストは最低限で済んでる……と思う。
Firefox 3.1でのドラッグ&ドロップのデモをアップした後でYouTubeのページを見てみたら、関連動画に、いくつかSplit Browserを英語とかドイツ語とかで解説してる物があってビビった。「シモダヒロシ」って作者の名前を読み上げてる奴もあったりしてなおビビった。
そんな小市民。
Firefox 3.1からの変更への対応に関する技術情報の中に書いたけど、分割ブラウザとマルチプルタブハンドラの連携を強化したり、分割ブラウザ側の「分割された領域」と「タブ」の連携を大幅に強化したりした。
ということをグダグダグダグダ書いてみても大して伝わらんだろうなあと思うので、実際に動いてる所のデモ動画を作ってみた。
<object width="425" height="350"> <param name="movie" value="http://www.youtube.com/v/-rfZNBy0jic"></param> <embed src="http://www.youtube.com/v/-rfZNBy0jic" type="application/x-shockwave-flash" width="425" height="350"></embed> </object>
Firefox 3.1上でなら擬似的な移動でなくホントの移動になるから、ストレスが無いし、書きかけのテキスト等が失われる心配も無いので、今以上にはるかに気軽に使えると思う。作った自分自身、これらの点がネックで今はほとんど使ってないので……
デモ動画自体の作り方もメモしておく。キャプチャはCamStudio、セッティングは「描いてみた」動画の作り方を参考に、ただしフレームレートは高めで。編集はNicoVisualEffectsでやった。CamStudio+ffdshowでH264でエンコードしたaviが読み込めなくて詰まったけど、Wikiに挙がってたDirectShowプラグインというのをを入れたらちゃんと読み込めた。そんな具合で、初めてなんでちょっと手こずったけど、DebugMode Winkを使って作るのに比べるとタイムライン操作がやりやすいので、今後はデモ動画を作る時はこのやり方でいこうと思う。
Firefox 3.1からは、ウィンドウをまたいでタブを移動できるようになる。アドオンの作者はこれに合わせて修正を行わないといけない場合がある。
また、この機能を実現するために新しく用意された「表示されている2つのフレームの内容を破壊せずに入れ換える」APIは、他の目的でも利用することができる。
そんなわけで(?)、TBE3に含まれる4つともアップデートした。
情報化タブの機能として、Firefox 3.1向けに、最後のタブのクローズボックスを強制的に表示させるオプションを加えた。本体の方でまた隠し設定がどうとか色々変わりそうな気もするけど、とりあえず現時点での仕様に合わせておく。不要になったら機能自体削除の可能性もある。
ソース表示タブは、機能は変わってないんだけど、動的に書き換えてるメソッド類がMinefieldでだいぶ変わってるようだったので、その修正が主。
マルチプルタブハンドラは、ツリー型タブの修正で書いたのと同じ要領でMenu Editorとの競合を解消したり、ツリー型タブと組み合わせた時の地味なトラブルを直したり、といった程度。