たまに18歳未満の人や心臓の弱い人にはお勧めできない情報が含まれることもあるかもしれない、甘くなくて酸っぱくてしょっぱいチラシの裏。RSSによる簡単な更新情報を利用したりすると、ハッピーになるかも知れませんしそうでないかも知れません。
の動向はもえじら組ブログで。
宣伝。日経LinuxにてLinuxの基礎?を紹介する漫画「シス管系女子」を連載させていただいています。
以下の特設サイトにて、単行本まんがでわかるLinux シス管系女子の試し読みが可能!
ブックマークまわりの仕様が変わってるから手こずりそうだなあと思ったけど、案外サックリ行けた。むしろPlacesベースの今の方が、ゼロから作るなら簡単に作れそうな勢いだった……
下のペインにフォルダが出るようにするかどうかで迷って、今は下のペインではフォルダは全く出さないようにしてしまった(Firefox 3のみ)。選択されたフォルダの直下にあるフォルダだけをレンダリングさせる方法が分かればそうしたい。
Firefox 3のFUEL、調べれば調べるほど酷さが浮き彫りになってくる。norahさんが「これはひどい」と言ってた意味を! 「心」でッ! 「理解」したッ!! いやもうほんと酷すぎます。XULとJavaScriptとXPCOMが入り乱れてる酷い現状を何とかしようとして作られたはずなのに、それで出てきた物が輪をかけて酷いなんて、悪夢だ……
正直、こんな物の使い方の解説を書くのは犯罪じゃないかって気がするよ。使い方とか誰にも知られないまま、ひっそりと廃れるかひっそりと改善されるのを待つか、どっちかにしたほうがいいって。まじで。
例えばこんな世界を想像してごらん。
var listener = new EventListener();
var reference1 = document.getElementById('item');
reference1.addEventListener('click', listener, false);
var reference2 = document.getElementById('item');
reference2.removeEventListener('click', listener, false); // ここでエラーになる。
alert(reference1 == reference2); // false
これが実際に起こるのがFUELの世界なんだぜ……
var reference1 = Application.extensions.get('myextension@mydomain');
reference1.storage.set('privateValue', 'someData');
var reference2 = Application.extensions.get('myextension@mydomain');
var val = reference2.storage.get('privateValue', 'defaultData');
alert(val); // says "defaultData"
alert(reference1 == reference2); // false
誤解してた。Extensionとそのsotrageプロパティの場合は問題ないようだ。でもWindowやBrowserTabへのイベントリスナの登録はやっぱり問題あり。こういう風に「どの場合は問題なくて、どの場合は問題ありなのか」が場合によって異なるというのも非常に困る。
もちろんこの状況でも問題を回避する方法はあるけど、その方法の意味を理解するには、処理系の中で何が起こってるかが分かっている必要がある。そういうことが分からなくても気楽に書けるのがLightweightLanguageのいいところなんじゃないのかー!
オープンソースなライセンスとかコピーレフトなライセンスとかたくさんありすぎて違いがよく分かってなかった(自分で使ってるのに……)。特に、それぞれどう組み合わせることができてどういう組み合わせはアウトになるのか、どういう使い方は許されててどういう使い方は許されないのか、というあたりがボンヤリとしか分かってなかった(詳しい人にツッコまれたらその時対処しよう……という考え)。なので、可知さんの書かれた記事とかを読んで改めて調べてみた。
とりあえず大前提として、以下の説明はあくまでソフトウェアを作る側が開発から頒布までの過程でコードを使う、著作権法上の「利用」にあたる範囲の話で、そのソフトウェアで商売したり作品を作ったりという、著作権法上の「使用」の範囲には言及していません。つまり完全に開発者向けの文章。以下、混乱を招きそうなので「利用」の文脈の時は全て「利用」と書くことにします。
あと、この理解が間違ってる場合はブクマコメントとかでこっそり書くんじゃなくてこのエントリのコメントで指摘しておいてもらえると、このエントリをウッカリ見てしまった人がこのエントリの内容を信用しないで済むので、そうしてもらえるとうれしいです。
今のXUL/Migemoでは
という改造を施しているので、その点で検索結果に差異が出ると思う。わりとどうでもいいと言えばどうでもいいことなんだけど。与える辞書、ローマ字の変換テーブルとかをDLLの外に置けるになってればいいんだけどなあ。まあ、中国語やハングルや発音記号のある他の言語にも対応できるとは言っても、実際にそれらの言語用のエンジンを開発してくれる人がいない現状では、日本語決め打ちでいいのかもだけど。
ページ内検索の速度の改善はもちろん重要なんだけど、それ以外の部分でもXUL/Migemoを使えるようにしてみると、そもそも正規表現でのマッチング自体が凄く重いということに気がつく。これはAutocomplete Managerとの組み合わせで特に感じられる。Thunderbirdのクイック検索に対応した時のように、なるべくマッチングの回数自体も減らすようにロジックを変更しないと、この問題は解決できないっぽい……
Firefox3MemoryUsage - Firefox 3 のメモリ使用量
色んな所で「Firefox 3ではメモリの消費量が云々」という記事が書かれててるんだけどいまいちピンと来ない。まだ常用はしてないし。だからこういうの見てやっと「へえ」と感じる。こう言う所を事細かに「解説」できるのはオープンであることのメリットなのかもなと思う。
各地既報ですが、セキュリティ上の仕様変更によってmozIJSSubScriptLoaderで読み込めるスクリプトの置き場所がChrome内に限定されるようになった(File URLなどの読み込みは拒否されるようになった)そうで。まあ自分が作ってる拡張機能には外部のスクリプトを動的に読み込んでどうこうするものがあんまり無いのでそれほど影響は無いんですが、せっかくなので手持ちの情報を晒しときます。
実は僕、割と最近まで、mozIJSSuScriptLoaderで実行コンテキストを指定できるってことに気付いてなかったんですよね。だから、外部スクリプトは実行できてもその実行結果を取り出すとかはできないと思い込んでまして。Firefox 1.5以前から作ってたやつでデフォルト設定をdefault.jsとしてcontent内に置いてた物で、default.jsの内容を読み込ませるために、わざわざmozIJSSubScriptLoaderと同じ働きをするコードを書いてたんです。ああ車輪の再発明。そんなわけで以下の情報がもしかしたら参考になるかもしれません。
……あ。今気付いたけど(ぉぃ)、Chrome URL限定ってことはdata: URLもダメになったってことか。んじゃUXUもやっぱ影響受けるなぁ。さてどうしたものか。
とりあえずスクリプトを実行するだけだったら上記の方法で読み込んだファイルの内容をeval()
するだけでいいので、その点では話は簡単なんですけどね。
20日追記。最終的に、格好悪いやっつけの方法ではあるんだけど、こういう風な所に落ち着いた。UxU 0.2.6で採用した方法は以下の通り。
eval()
するだけのスクリプトをパッケージに含めておき、mozIJSSubScriptLoaderで読み込んで実行。実際のコードはこんな感じ。
var loader = Components
.classes['@mozilla.org/moz/jssubscript-loader;1']
.getService(Components.interfaces.mozIJSSubScriptLoader);
this.include = function(aSource, aEnvironment, aEncoding) {
var encoding = aEncoding || this.getPref('extensions.uxu.defaultEncoding')
var script = this.readFrom(aSource, encoding) || '';
var env = aEnvironment || this.environment;
env._subScript = script;
loader.loadSubScript(
'chrome://uxu/content/test/helper/subScriptRunner.js?includeSource='+
encodeURIComponent(aSource)+
';encoding='+encoding,
env
);
};
subScriptRunner.jsというファイルの内容は、たったこれだけ。
if (_subScript) eval(_subScript);
これで、mozIJSSubScriptLoaderで普通にスクリプトを読み込ませるのと同じような結果になる。
さらに追記。仕様が変更されて、file:とresource:は使えるようになったそうだ。でもdata:は相変わらずダメなので、今までdata:でやってたものはここに書いたような何らかの方法で代替するしかないと思う。
さらにさらに追記。evalInSandboxを使う方法もあるそうだ。
さらにさらにさらに追記。evalの機能についてFirefox 3.1でまた変更があったようだ。
Mozilla Development Strategies、なんとか一通り翻訳した。他の文書に比べてムチャクチャ読みにくくて、段落全体を訳してやっと最初の文の意味が分かるとかそんな感じで、中学英語程度の英語力しかない僕では、読んでてほんと辛かった……これがネイティブの使う普通の英語という物なのか、それとも単に原文が悪文だったのか、僕には分からない。いずれにせよ、誤訳してる所がきっとたくさんあると思う。軽い気持ちで手を出して後悔した。
ruby-align、ruby-overhang、line-stacking-ruby(これはRuby ModuleではなくてLine Module)の仕様書を読みながらこれらを実装してみている。line-stacking-rubyはruby要素上下のマージンの動的設定でも使わないと再現できないので、display:inline-table
が使えるGecko 1.9(Minefield)でなければline-stacking-ruby:include-ruby
で固定になる。
まぁ、どれだけ意味があるかは甚だしく疑問で、ほとんど意地(と現実逃避)ですね。
ということでその成果をXHTMLルビサポート 2.1.2008031701として公開した。設定項目とその効果は基本的に上記の仕様通り(各設定項目の初期値も仕様の初期値)なので、何がどう変わるのか分からんという人はそちらを見てください。