Home > Latest topics

Latest topics 近況報告

たまに18歳未満の人や心臓の弱い人にはお勧めできない情報が含まれることもあるかもしれない、甘くなくて酸っぱくてしょっぱいチラシの裏。RSSによる簡単な更新情報を利用したりすると、ハッピーになるかも知れませんしそうでないかも知れません。

萌えるふぉくす子さんだば子本制作プロジェクトの動向はもえじら組ブログで。

宣伝。日経LinuxにてLinuxの基礎?を紹介する漫画「シス管系女子」を連載させていただいています。 以下の特設サイトにて、単行本まんがでわかるLinux シス管系女子の試し読みが可能! シス管系女子って何!? - 「シス管系女子」特設サイト

Page 39/248: « 35 36 37 38 39 40 41 42 43 »

2 Pane BookmarksをFirefox 3に対応させた - Apr 07, 2008

2ペインブックマーク 0.4.2008040701

ブックマークまわりの仕様が変わってるから手こずりそうだなあと思ったけど、案外サックリ行けた。むしろPlacesベースの今の方が、ゼロから作るなら簡単に作れそうな勢いだった……

下のペインにフォルダが出るようにするかどうかで迷って、今は下のペインではフォルダは全く出さないようにしてしまった(Firefox 3のみ)。選択されたフォルダの直下にあるフォルダだけをレンダリングさせる方法が分かればそうしたい。

FUELが酷すぎる - Apr 03, 2008

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が持ってるstorageプロパティはセッションストレージとしては全く役立たずです。グローバルなApplication.storageしか使い物にならない。

誤解してた。Extensionとそのsotrageプロパティの場合は問題ないようだ。でもWindowやBrowserTabへのイベントリスナの登録はやっぱり問題あり。こういう風に「どの場合は問題なくて、どの場合は問題ありなのか」が場合によって異なるというのも非常に困る。

もちろんこの状況でも問題を回避する方法はあるけど、その方法の意味を理解するには、処理系の中で何が起こってるかが分かっている必要がある。そういうことが分からなくても気楽に書けるのがLightweightLanguageのいいところなんじゃないのかー!

続きを表示する ...

オープンソースなライセンスやコピーレフトなライセンス、クリエイティブコモンズについて、他のライセンスとどう組み合わせられるのかを図にしてみた - Apr 02, 2008

オープンソースなライセンスとかコピーレフトなライセンスとかたくさんありすぎて違いがよく分かってなかった(自分で使ってるのに……)。特に、それぞれどう組み合わせることができてどういう組み合わせはアウトになるのか、どういう使い方は許されててどういう使い方は許されないのか、というあたりがボンヤリとしか分かってなかった(詳しい人にツッコまれたらその時対処しよう……という考え)。なので、可知さんの書かれた記事とかを読んで改めて調べてみた。

とりあえず大前提として、以下の説明はあくまでソフトウェアを作る側が開発から頒布までの過程でコードを使う、著作権法上の「利用」にあたる範囲の話で、そのソフトウェアで商売したり作品を作ったりという、著作権法上の「使用」の範囲には言及していません。つまり完全に開発者向けの文章。以下、混乱を招きそうなので「利用」の文脈の時は全て「利用」と書くことにします。

あと、この理解が間違ってる場合はブクマコメントとかでこっそり書くんじゃなくてこのエントリのコメントで指摘しておいてもらえると、このエントリをウッカリ見てしまった人がこのエントリの内容を信用しないで済むので、そうしてもらえるとうれしいです。

続きを表示する ...

XUL/MigemoとC/Migemo - Mar 31, 2008

絶対に便器!: XPCOM+C/Migemo

今のXUL/Migemoでは

  • 辞書へのユーザによる単語登録を可能にしている
  • 生成する正規表現に、ひらがな・カタカナの同一視、発音記号付きのアルファベットも含めている

という改造を施しているので、その点で検索結果に差異が出ると思う。わりとどうでもいいと言えばどうでもいいことなんだけど。与える辞書、ローマ字の変換テーブルとかをDLLの外に置けるになってればいいんだけどなあ。まあ、中国語やハングルや発音記号のある他の言語にも対応できるとは言っても、実際にそれらの言語用のエンジンを開発してくれる人がいない現状では、日本語決め打ちでいいのかもだけど。

ページ内検索の速度の改善はもちろん重要なんだけど、それ以外の部分でもXUL/Migemoを使えるようにしてみると、そもそも正規表現でのマッチング自体が凄く重いということに気がつく。これはAutocomplete Managerとの組み合わせで特に感じられる。Thunderbirdのクイック検索に対応した時のように、なるべくマッチングの回数自体も減らすようにロジックを変更しないと、この問題は解決できないっぽい……

Firefox 3とメモリ性能 - Mar 31, 2008

Firefox3MemoryUsage - Firefox 3 のメモリ使用量

色んな所で「Firefox 3ではメモリの消費量が云々」という記事が書かれててるんだけどいまいちピンと来ない。まだ常用はしてないし。だからこういうの見てやっと「へえ」と感じる。こう言う所を事細かに「解説」できるのはオープンであることのメリットなのかもなと思う。

Firefoxが勝たなければならない理由 - Mar 24, 2008

IEからシェアを奪う、を合言葉にしていてはFirefoxが勝てない理由に寄せられたコメントを見て少し補足しておこうと思った。

Linux&Sexという文書を紹介している人がいた。「勝ち負けとか誰もそんな事考えてないし。必要だったり面白かったりするからやってるだけだし。」なるほど正論だ。でも今(例えば)Linuxがここまで使い物になる状況になってることの背景には、それが儲かると考えて多大な投資をした企業があったからではないのか? Linuxをハックする人達を雇って給与を払う者がいたから、雇われた彼らは生活が立ちゆかなくなる不安に怯えることなく安心してLinuxをハックできたのではないのか? 仮に、開発の100%すべてが一部の富裕プログラマの余暇の時間だけで行われていたら、Linuxが今の品質になるには百年とかそういう長い時間がかかっていたのではないか?(むしろ百年かかっても無理だったかも知れない)

LinuxはLinuxのことを愛している俺達だけが支えているんだ、と言う人が、Linuxのことを好きでもなんでもない人の支えその背景にある、ということに気付いていないのだとしたら、おめでたい話だと思う。良い開発のサイクルを回すために「勝利」「成功」そしてそこからもたらされる活動資金は必要なものだ。そして同じことがFirefoxにも言えると思う。

中野さんが指摘するように、現実に対して影響力を持ち発言力を行使できるようになるにはシェアが必要だという点も確かに見逃せない。「勝利」「成功」というと、他を圧倒する大勝利のことばかり想像されるかも知れないけれども、僕は、中野さんが言うところの「最低限のシェア」を獲ることも勝利だと思ってる。

でも、世間に対し影響力を持つ最低限のシェアと、(他から資金を投じてもらったり下駄を履かせてもらったりしなくても、プロジェクト自身が自身の活動だけでうまく回っていける、という意味での)プロジェクトの存続に必要な最低限のシェアとはまた別だと思っていて、前者を達成できたのなら、次のステージとして後者のシェアを獲ることが新たな勝利条件になっているのではないか、と僕は思っている。前述の「同じことがFirefoxにも言える」というのはそういう意味だ。

ちなみに、「Mozillaは今でも十分収益出てるんじゃないの? 十分成功してて上手くいってるんじゃないの?」って思ってる人は、もう少し想像力を働かせた方がいいと思う。

Mozillaの収入源がFirefoxのウィンドウ右上にある検索バーからのアフィリエイト収入からだ、ということはよく言われているけれども、Firefoxの主なユーザであるリテラシの高いギーク層はまずWeb上の広告から買い物をしない(Adblockが最も人気のあるアドオンだって事も忘れてはいけない)のだから、これは建前である可能性が高い。そしてMozilla CorporationがGoogle本社のすぐ近くにあって、Mozilla社員はGoogleでタダでご飯を食べられるというのもこれまた有名な話(それって文字通り餌付けされてるってことじゃないか!)。MozillaとGoogleのこの関係を見れば、GoogleがMicrosoftあたりと争う上でのカードにするためという政治的な意図でMozillaを囲い込んでるんじゃないのか、ってのは、これだけ材料が揃っていれば容易に想像が付くことだろう。

でもGoogleはAndroidでMozillaのGeckoではなくAppleのWebKitを選んだ。AdobeもAIRでWebKitを選んだ。Mozillaの技術は彼らから見たら魅力的じゃないって言われたも同然だ。こういう流れが今後も止まらないなら、これはもう、Mozillaにしてみればスポンサーも市場への影響力も両方失いかねない存続の危機と言っていいんじゃないのか。

MozillaがGoogleと今のような関係を維持するにしても、別のスポンサーをたくさん見つけるにしても、シェアという武器がなければ交渉なんてできやしない。僕が「Mozillaというプロジェクトが存続するためには今以上のシェアが必要だ」と考える理由は、そういうこと。

まあ、何でも悪く考えすぎだって言われてしまえばそれまでですけどね。

IEからシェアを奪う、を合言葉にしていてはFirefoxが勝てない理由 - Mar 23, 2008

第348回 PC業界がAppleに学べること - 本田雅一の「週刊モバイル通信」

こうした戦略を実行できたのは、最初から「ジョブズはWindows搭載PCを超えるシェアを取ることに興味がなかった(福田氏)」からだともいえる。 Windowsをライバルと見立て、それ以上のシェアを取るのではなく、同氏が実現したいと考えているビジョンを実現するために粛々とできることから順に取り組んでいるのが現在のAppleというわけだ。

まあMozillaが「ブラウザ界でのシェア」にどれだけ関心があるかは知らないけど、少なくとも、「ブラウザ界でのシェア」なんて考え方をしているのなら、その考えである限りは絶対に成功なんてありえないよな、と常々思う。

すでに一社製品で独占されたような場に割り込むことがどれだけ大変か。特に素の状態で機能を比べればIE7とFirefoxに有意な差はないと言っていいわけで、機能でも値段でも圧倒的に優れているわけでない製品が同じような製品の市場を奪うための努力なんてのは、僕には、無駄な努力としか思えない。同じ土俵で戦おうとしている時点でもうダメ。勝ってる相手に正面から挑むなんて、これ以上の愚策は無い。

勝てる可能性があるとしたら、ライバルがいない新しい市場、別の次元で戦うことしかない。「ブラウザ」とかいう枠にとらわれない全く別の新しい物として売り込んで、「その市場で」シェア100%を獲る。そうして初めて、「その市場でのシェア100%の人数」が「ブラウザ全ユーザのうち30%の人数」に等しくなり、結果として「ブラウザ界でのシェア30%」が実現されるんだと僕は思っている。

あれだけ娯楽産業の覇者としてウハウハだった音楽業界その他の業界が今急速に衰退している理由。ネットワークを活かした対人コミュニケーションという全く別の次元で勝負を展開したケータイ業界が、他の業界からゴッソリと「みんなが財布から出せる自由な金」「みんなが何かに割ける自由時間」両方のシェアを持っていってしまったという事実。これを見て「どうすれば勝てるのか」、いや、「どうしないと勝てないのか」、「それをすれば必ず勝てる(十分条件)とは言えないけれども、少なくともそれをしない限り勝ちはありえない(必要条件)」ということを理解しないといけない、と僕は思う。

その点、Operaは実にうまくやっている。auでは全機種でOperaが導入されて、つまりここでシェア100%を獲っている。WiiでもDSでも、それらのハードでインターネットを見る唯一の手段としてシェア100%を獲っている。デスクトップPCで使われるブラウザとしてのOperaのシェアなんかに、多分Operaは無関心なんだろう。Mozillaがデスクトップに拘泥している間に、日本のネット利用人口の大半がOperaユーザになってしまっている、そんな事にだって十分なり得ると僕には思える。

続きを表示する ...

外部のスクリプトを読み込む - Mar 19, 2008

各地既報ですが、セキュリティ上の仕様変更によって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で採用した方法は以下の通り。

  1. 上記の方法でJavaScriptファイルの内容を文字列として取得。
  2. それをmozIJSSubScriptLoaderに渡すコンテキストオブジェクトのプロパティとして格納。
  3. そのコンテキストのプロパティとして格納されているスクリプトを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 - Mar 19, 2008

Mozilla Development Strategies、なんとか一通り翻訳した。他の文書に比べてムチャクチャ読みにくくて、段落全体を訳してやっと最初の文の意味が分かるとかそんな感じで、中学英語程度の英語力しかない僕では、読んでてほんと辛かった……これがネイティブの使う普通の英語という物なのか、それとも単に原文が悪文だったのか、僕には分からない。いずれにせよ、誤訳してる所がきっとたくさんあると思う。軽い気持ちで手を出して後悔した。

CSS3 Ruby Module - Mar 16, 2008

ruby-alignruby-overhangline-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として公開した。設定項目とその効果は基本的に上記の仕様通り(各設定項目の初期値も仕様の初期値)なので、何がどう変わるのか分からんという人はそちらを見てください。

Page 39/248: « 35 36 37 38 39 40 41 42 43 »

Powered by blosxom 2.0 + starter kit
Home

カテゴリ一覧

過去の記事

1999.2~2005.8

最近のコメント

最近のつぶやき