たまに18歳未満の人や心臓の弱い人にはお勧めできない情報が含まれることもあるかもしれない、甘くなくて酸っぱくてしょっぱいチラシの裏。RSSによる簡単な更新情報を利用したりすると、ハッピーになるかも知れませんしそうでないかも知れません。
の動向はもえじら組ブログで。
宣伝。日経LinuxにてLinuxの基礎?を紹介する漫画「シス管系女子」を連載させていただいています。
以下の特設サイトにて、単行本まんがでわかるLinux シス管系女子の試し読みが可能!
テキストシャドウは原理上、影付きのテキストをコピーしようとした時に、影のために使っているダミーテキストまでコピーされてしまうのが大きな問題だった。フォーカスできなくしたり選択できなくしたりすることはできても、コピーの対象から外すということは、普通にやる限りはどう頑張ってもできない。
で、これをどうやって解決したのかという話なんだけど。
以前XHTMLルビサポートを作った時に、略語のフルスペルをルビで表示するという機能も持たせていて、そうやって表示したフルスペルはどう頑張ってもコピーできないという現象が起こっていたんだけれども、これがヒントになった。
略語のフルスペルの表示のためにルビサポートではバインディングを使っていて、どうやらバインディングで埋め込まれた匿名内容の中のテキストノードは、触れることもコピーすることもできないようだった。そして、XBLの<children/>
要素の位置に配置された元々の子要素や子のテキストノードについては、通常通りアクセスできる。
ということは、逆に言えば、コピーの対象にさせたくないテキストはバインディングを使って匿名内容の中に入れてやればよいというわけだ。
ダイナミック疑似クラスの問題はまだ残っているとはいえ、もっとも致命的な問題はこうして解決できたので、やっと胸を張って「Firefoxをtext-shadowに対応させました」と言えるようになったと思う。
テキストシャドウでの影付けの基本原理は以下の通り。
以下の解説を図を使って書き直しました。
テキストシャドウを地道に改良し続けている。
Geckoもtext-shadowに対応してくれ!というバグにこれを貼り付けて煽ってみようかと思ったら、貼られていたテストケースで::first-line疑似要素が使われてて表示できなくてこりゃまずいと思ったんで、元々対応する気の無かった疑似要素と疑似クラスにまで頑張って対応してみた。疑似クラスについてはGeckoすら対応してない物にまで対応してたりして。
Text Shadow。名前の通り、CSS3のtext-shadowを無理矢理再現するインチキ拡張機能。
以下は原理的にどうしようもない問題。
以下はめんどくさいから実装をさぼってる部分。そのうちどうにかするかもしれないし、しないかもしれない。
セレクタから要素ノードを選択する処理は、selector.jsを丸パクリ。でも組み込んでみたら予想以上にまともに動いてくれなかったので、半泣きになりながら修正してやっとちゃんと使えるようにした。
CSS2からCSS3に移ったtext-shadowは、どうやらFirefox 3ではサポートされない事がほとんど確定したようだ。これでモダンブラウザでドロップシャドウを実現できないのはFirefoxだけになったな(Opera 10とSafariは対応、IEもfilterを使えば可能)。
ということで拡張機能でtext-shadowを実現するという可能性を勝手に模索してみる事にしたよ。
アルゴリズムとしては以前須藤さんがcairoで不透明度を下げた物をひたすらずらして並べるというアレです。
XUL/Migemo 0.7.0公開した。このバージョンから「Forked Edition」を外して、おこがましくも本家XUL/Migemoの後継とさせていただくことにした。
前のバージョンからの最大の変更点は、ローマ字と平仮名の相互変換処理部分にRuby/Romkanを移植して採用したこと。これはMigemoの大本であるRuby/Migemoが使用しているライブラリでもある。今までは元の処理に増築に増築を重ねたみたいなややこしい物になってたけど、これで、平仮名からローマ字への逆変換も含めて大部分のコードを共通化できて見通しが良くなった、と思う。ただ、速度面で若干遅くなってないかどうか心配ではある。体感できる程の差は無いと思うんだけど。
Ruby/Romkanのコードって無駄がない感じですごいなーと思った。Ruby自体、エレガントにそういう物を作れる言語なんだな、とも。Rubyでたった7KBちょいの物がJavaScriptへの移植で30KB近くにまで膨れ上がってしまうとは……いや、これは単に僕の技術力がヘボいだけか。
あと、Ruby/Romkan自体はRubyのライセンスに準拠していて、RubyはGPL2ということで、XUL/Migemo全体もこの際だからGPL2にしてみた。
のりさんの伝える所によると、Firefox 3ではアドオンマネージャに表示される拡張機能の名前と説明文のローカライズ方法が変わるらしい。新しいやり方の解説がMDCにある。
方式 | 実際の手順とメカニズム | 利点 | 欠点 |
---|---|---|---|
現状 | 各ロケール内のpropertiesファイルに名前と説明文をローカライズした物を置いておき、デフォルトの設定ファイル(defaults/preferences/*.js)でそれを参照する。 | 各言語ごとのローカライズ済みリソースが言語ごとに一ヶ所にまとまるので、作者にとっては管理がしやすい。 | 拡張機能を無効化すると、名前や説明文がデフォルトの物(一般的には英語)になってしまい、削除や再度有効化する際に、どれが目的の拡張機能なのか分からなくなる。 |
今後 | install.rdfに各言語へローカライズ済みの名前と説明文をまとめて書く。 | 拡張機能を無効化した状態でも、自分が現在使っている設定の言語で名前と説明文が表示される。 | 各言語ごとのローカライズ済みリソースが分散するので、作者に取って管理の手間が増える。 |
現状の問題を目にする人はあまり多くないかもしれないけど、例えばSplit Browser/分割ブラウザのように英語と日本語のロケールそれぞれで名前を変えているアドオンを使うと、この問題が表面化する。新方式では作る手間や管理の手間が増えるのが気になるが、この問題を解決するためには仕方がないのか。めんどくさいと思う奴はinstall.rdfもビルドスクリプトで自動生成するようにしやがれってことなんだろう。
ITmedia Biz.ID 第5回ブログメディア研究会に行ってきた。
参加者の簡単な自己紹介の後、最初はMozillaがどういう組織であるかやFirefox登場の経緯などの説明が一通りあって、次に、Firefox 3で検討されている様々な新しいUI、特にダンさんが担当しているPlaces関係の話が、モックアップのスクリーンショットを交えてなされた。
DevConとかに参加してたり最新情報を追っかけたりしてると、このあたりの事はだいぶ「まあ、前にも聞いたよね」な部分があったので、僕は置いてあったコーラやらお菓子やらを一人つまんでた。
その後でやっと、自由質問の時間になったわけなんだけど。
皆さんがまともな質問をする中、一人だけひねくれた質問しまくって浮きまくってた気がする。主賓のダンさんがFirefox 3(のGUIに関わる部分の)開発の担当であって全体の統括だとかXULRunnerだとかGeckoエンジンだとかの担当ではないということだったんだけど、そんな事はお構いなしに全然関係ない事を聞きまくった。まったく迷惑極まりないですね。
うあああやっちまった。既にAPI使ってくれてる人がいたにもかかわらずAPIを予告なしに変更するという愚を…… 一応、本家XUL/Migemoと互換のAPI(xulMigemoCore
オブジェクト)も備えていて、そちらは動作を変えないようにしているので、XPCOMを叩かずにそっちを使ってもらっていれば今回の変更の影響は受けなかったと思うんだけど、そんなことを言っても後の祭りというやつで。
なぜこうもグダグダになってしまっているかというと、どうすれば国際化を楽にできるか、サービス同士の絡みを最小限に抑えられるか、という点で自分の中で考えが固まっていなかったからだ。