この日記はMozillaのプロダクトへの貢献者としての私の成果を中心に、気になったバグやWeb界隈の話題について書いていますが、 断り書きがある場合を除き、いかなる団体のオフィシャルな見解ではありません。あくまでも個人的なものです。 Mozilla Foundation、Mozilla Corporation、及び関連企業の公式情報ではないことに注意してください。

現在、XHTML 1.0 (もどき)から、HTML5なコンテンツに修正中です。古い日記は修正が完了していませんので表示が崩れます。 順次、修正していく予定ですのでしばらくお待ちください。

もずはっく日記(2007年11月)

2007年11月8日

Acid2テスト 初回投稿日時: 2007年11月08日20時25分19秒
最終更新日時: 2007年11月09日05時27分48秒
カテゴリ: CSS
固定リンク: id=2007110800
SNS: (list)

wikipediaで編集に関してしょうもない議論が行われてるみたいで、ウチの引用、リンクでもめてるみたいです。(元々は私の日記のエントリを出典としたことが、時期が古いし個人ブログなので残念ながら出典にはなりませんという変な理屈で削除されたことが原因のようです。確かに2005年のエントリなので最近のものではないですが、Acid2自体、そんなに新しいものでもないし、変化するものでもないしと、変な理由ですね。それにリンクを削除する意味も無いということで問題になったようです。でも個人の書いたコンテンツが出典もとになれないなら、wikipediaの多くの出典を見直さないといけなくなるんじゃないでしょうか??) 外部資料に頼らずに少しは自分で調べろよって感じですが(そもそも詳しく無い人が編集してるってのはどうよ? と思いますが……)、

で、暇があるのでちょっとAcid2のCSSに関して調べてみました(あんまり詳しく検証するのは難しすぎるのでやりません)。正規表現を使ってCSSを置換して指定されているスタイルを単純に抽出した結果から数えているのでひょっとすると細かい数字は不正確かもしれませんが、まあ参考程度に、ということで。

使われている(≠テストされている)プロパティ

background

色キーワード、dataスキームによる画像指定、fixed。

border

styleはsolidと無指定、colorはtransparentと色キーワードと無指定、widthはlength値(em)と0と無指定、存在しない文字列によるエラーテストあり。

border-bottom

styleはsolidのみ、colorはキーワードのみ、widthはlength値(em)と無指定。

border-bottom-color

inheritのみ。

border-color

色キーワードによる指定のみ、ひとつのみでの指定か、四つ全部での指定のみ。

border-left

styleはsolidのみ、colorは色キーワードのみ、widthはlength(em)のみ。

border-right

border-leftと同様。

border-spacing

0のみ。

border-style

noneとsolidのみで、二つ指定と三つ指定のみ。

border-top

styleはsolidと無指定、colorはキーワードと無指定、widthはlength(em)と0。

border-top-color

inheritのみ。

border-width

length値(em)と、0で、一つ指定と、二つ指定のみ。

bottom

length値(em)のみ。

clear

bothのみ。

color

色キーワードのみ

content

空文字列指定のみ。

display

inline、block、table、table-cellのみ。

float

left、right、inheritのみ。(noneは無し)

font

font-sizeがlength値(pxとem)、line-heightが無しとlength値(px)、font-familyはserifかsans-serifのみ。inheritもあり。他の指定は一切なし。

font-size

length値(em)のみ。

font-weight

bolderのみ。

height

length値(pxとem)か、パーセント値、そして0。

left

length値(em)のみ。

line-height

length値(em)のみ。

list-style

noneのみ。

margin

0かlength値(emとpx)で、0のみの指定を除いて、一つ指定、二つ指定、三つ指定、四つ指定と全てあり。autoは単独での指定のみ。

margin-bottom

length値(em)のみ。

margin-top

length値(em)のみ。

max-height

length値(mmとem)のみ。

max-width

length値(em)のみ。

min-height

length値(em)とパーセント値。

overflow

hiddenのみ。

padding

0かlength値(emとpx)で、0のみの指定を除いて、一つ指定、二つ指定、三つ指定、四つ指定全てあり。

position

relative、absolute、fixedのみ。staticは無し。

right

length値(em)のみ。

text-align

leftとrightのみ。

top

length値(em)と0のみ。

vertical-align

bottomのみ。

white-space

preのみ。

width

パーセント値と、length値(pxとem)と、auto値。単位無しでのエラーテストあり。

z-index

1と2のみ。

とまあ、こんな感じ。実際には値の上書きのテストとかあると思われるので、テストされるプロパティ値はもっと減るんではないかと思われます。

まずは値のテストが行き渡っていないことが目立ちます。例えばlength値は非常によく使われるものしかテストしていません。色に関してはキーワードしか利用されておらず、よく利用されるRGB値を直接指定する方法は全くテストされていません。各種キーワードのテストもかなり少ないことが分かります。

また、CSS2.1ではauralやpaged、interactiveなプロパティを除外しても、85個のプロパティがありますが、上記のように列挙されたプロパティは41個のみでした。半分にすら到達していません。

Acid2が全般的なテストではなく、ひとつのテストケースであることが分かってもらえましたでしょうか。もちろん、たったひとつのテストケースでここまでテストできている、というのは素晴らしいアイデアと技術のたまものですが、ブラウザを実際にテストする側からすれば、全ての仕様がテストできる訳ではないことは一目瞭然です。

Acid2はクリアすべき目標ではありますが、これが全てではありません。例えばこのテストにテキストが全く無いことに気づいていますか?(もちろん、見出しではなくて、テスト内部にということです。) Gecko1.9(trunk)が初めてテストをクリアした段階では、まだ多くの言語のテキストをまともに表示することはできませんでしたが、テストはクリアできていました。Acid2のみをブラウザの唯一のテスト結果として信仰するのであれば、その当時のバグだらけのGecko1.9は、今多くの人が毎日使ってくれているFirefox2のGecko1.8.1よりも素晴らしいものだということです。

ちなみにここまで調査、書くのに約一時間半でした。

2007年11月9日

Bug 5920 PR_LOGGINGが宣言されていないとnsCookieService.cppでビルドに失敗する 初回投稿日時: 2007年11月09日03時53分04秒
カテゴリ: Mozilla Core バグ修正
固定リンク: id=2007110900
SNS: (list)

たまたま見つけて先に出されてたパッチを押しのけて修正。

こうやって複数の人が出したパッチがクオリティを競うというのはすごく良いことなんですが、珍しい。アドバイスもらったり、逆にしたり、っていうのはよくあるんですが。

「だ」「である」 vs. 「です」「ます」 初回投稿日時: 2007年11月09日03時55分29秒
カテゴリ: WebStudio
固定リンク: id=2007110901
SNS: (list)

今まではエントリのカテゴリや内容によってどちらかを使い分けていましたが、過去の自分のエントリを読んだときに、やっぱり日記全体で統一されていないのもおかしいと思い、「です」「ます」に統一してみることにしました。

Bug 5843 UI に … (U+2026 'HORIZONTAL ELLIPSIS') が使われると見た目が不自然 初回投稿日時: 2007年11月09日04時01分59秒
カテゴリ: Mozilla Core バグ修正
固定リンク: id=2007110902
SNS: (list)

1.8branchからは問題のコードをバックアウトしたのでFx2.0.0.10からは元に戻ることになります。

Trunkは日本語化責任者のdynamisとの打ち合わせでl10nの時に"…"を"..."に置き換えられるように修正しようということで話をしています。パッチはまだこれから作らないと駄目ですが。

ただ、英語版Fxを日本語のWindowsで使い続ける場合は今後はこの問題は発生し続けることになります。

Bug 4681 ThunderbirdのAddress bookのEdit cardダイアログでIMEの候補リストやATOKナビの位置がずれる #2 初回投稿日時: 2007年11月09日04時13分38秒
カテゴリ: Mozilla Core バグ修正
固定リンク: id=2007110903
SNS: (list)

Googleの桃井さんから直接連絡があって、英語版Gmailに導入された新しいUIでは、チャットへのメッセージ入力時にFx2ではこのバグが発生するとのこと。ちなみにWindows版のみのバグです。

実際に確認してみると確かに再現。で、このバグのパッチと、これによって引き起こされたregressionのパッチをマージして入れることでバグが修正できることが確認できたので、承認をとりつけてFx2にもパッチを入れました。

日本語版のGmailのUIが変更されると、今のFx2.0.0.9ではバグが再現してしまいまうので注意してください。

もずはっく日記のRSSを修正 初回投稿日時: 2007年11月09日06時05分32秒
カテゴリ: WebStudio
固定リンク: id=2007110904
SNS: (list)

RSSを若干修正。RSSで表示されるコンテンツからはdel要素は削除するようにしました。プレーンテキストとして送信されるのに削除済みのテキストがあると訳分からないものになるので。

それから、プレーンテキストが全文ではない場合(引用文とdel要素を削除後のコンテンツと、プレーンテキストの内容が一致しない場合)、 (続く……)という文字列を末尾に付けるようにしました。

それと今回の修正ではないですが、この日記のRSSは1.0と2.0の両方を配信しています。1.0はcontent:encoded要素内でXHTML部分を全文配信しています。2.0の方は全文配信はありません。RSSリーダのみで全文を見たい人は1.0の方を利用すると良いでしょう。ブラウザで開く、という使い方をされる人は是非2.0の方を使ってください(サーバリソースの削減のため)。ちなみに、Fxで日記から直接参照できるRSSは軽量な2.0の方ですのでご注意ください。

2007年11月16日

[マイコミジャーナル] Firefoxのメモリ消費癖はフラグメンテーションに一因ありか 初回投稿日時: 2007年11月16日04時14分30秒
最終更新日時: 2007年11月16日04時16分31秒
カテゴリ: 雑談
固定リンク: id=2007111600
SNS: (list)

解析にはvladとdtraceが用いられたほか、

日本語として間違いではないですが、たぶん誤解されていると思うし、読んだ人も誤解すると思うので指摘しておきます。vladはStuart(pavlov)の同僚でStuartと同じくgfxの開発リーダーです。つまり人名。ちなみに"vlad"はニックネームというかハンドルネームで、本名はVladimir Vukicevicです。

referrerから気づいて修正してくれますかね、マイコミジャーナルさん。

ところで、「記事の間違いの指摘はこちら」みたいな情報の送信先ってニュースサイトには絶対に無いように思うのですが、それってなぜなのでしょうか。(「情報提供」と「ご意見・ご感想」の案内はあるのですが、それって違うように思います。)

Fwd: Firefoxのメモリ消費癖はフラグメンテーションに一因ありか 初回投稿日時: 2007年11月16日04時55分11秒
カテゴリ: Mozilla Core
固定リンク: id=2007111601
SNS: (list)

記事の内容にも一応言及しておきます。

dtraceの結果からしてまあ予想通りというか、なんというか。いわゆるメモリリークが原因でメモリがOSに返されない訳ではなく、フラグメント化に原因があることがよく分かります。nsAuto*のように、こうならないためのコード設計も多少ありますが、それだけでは当然のように不十分だったわけです。素人考えではアロケータ自体をモジュールごとに自前で用意するしかなさそうに思えますが、どうなんでしょうか。ちなみにlayoutはすでに自前です。

2007年11月17日

2007年11月18日

Bug 5937 行に十分なスペースが残っていても開き括弧の前で強制的に改行されてしまうことがある 初回投稿日時: 2007年11月18日07時26分09秒
カテゴリ: Mozilla Core バグ報告
固定リンク: id=2007111800
SNS: (list)

新しく報告されたバグをできるだけ日記でも情報を出していくようにしようと思います。(昔はやってたんですが、最近、全くやってなかったのでもう一度体制を見つめ直す意味でも。)

インライン要素のmargin-rightにゼロ以外が指定されていて、その中に開き括弧があると、その括弧の前で強引に改行されてしまうことがあるというバグ。

発生タイミングからしてbug-org 393096のregressionっぽいんですが、ちゃんと検証できていません。

Bug 5938 メニューとボタンはキャプションの"..."や"…"を自動的に置換すべき 初回投稿日時: 2007年11月18日07時33分26秒
カテゴリ: Mozilla Core バグ報告
固定リンク: id=2007111801
SNS: (list)

Bug 5928でローカライズ時に省略記号を調整できるようにしても、ローカライズされていない拡張を使った場合等には、結局、同じ問題が残ることになります。

そこでバグをたててみました。私はlayoutレベルでの置換を考えていたのですが、本家ではメニュー等のキャプションを指定するdtdから省略記号を分離して、省略記号自体を自動生成するように考えている人が居るようです。l10n関係の反対が無ければそちらの方が良いとは思うのですが……

Bug 5940 タブバーがマウスホイールでスクロールできない 初回投稿日時: 2007年11月18日07時37分24秒
カテゴリ: Mozilla Core バグ報告
固定リンク: id=2007111802
SNS: (list)

Fxではタブバーにタブが納まりきらない時にはマウスのホイールでタブがスクロールできるようになっているのですが、それがたぶん17日のビルドからできなくなっているというバグです。

regressionなのか仕様変更なのかは現時点では不明ですが、今のところ仕様を変えようとしたバグはチェックインのログからは見つけられないので何かのregressionではないかと睨んでいます。

Bug 5242 [Cairo] FontLinkが機能しない #2 初回投稿日時: 2007年11月18日18時06分53秒
最終更新日時: 2007年11月18日18時16分51秒
カテゴリ: Mozilla Core
固定リンク: id=2007111804
SNS: (list)

WindowsのFontLinkの実装要望です。すでにパッチはできているのですが、時期が少し遅いのでFx3に入る許可がもらえるかはまだ微妙な情勢です。この問題で悩んでいる人にとっては重大な問題なんですが、その人の母数が少なそう、というのが問題です。

FontLinkのスクリーンショット一覧
Windows XPWindows Vista
現在のTrunk Windows XPでの現在のTrunkのメニューのスクリーンショット Windows Vistaでの現在のTrunkのメニューのスクリーンショット
パッチ後 Windows XPでのパッチをあてたTrunkのメニューのスクリーンショット Windows VistaでのパッチをあてたTrunkのメニューのスクリーンショット
IE7 Windows XPでのIE7のメニューのスクリーンショット Windows VistaでのIE7のメニューのスクリーンショット

一応、Stuartに重大性を認識してもらうためにスクリーンショットを本家バグに添付したものの、vote数やcc数から関心の低さが浮き彫りなのでまだまだ微妙な情勢かもしれません。

ちなみにこれらのスクリーンショットは影響が一番大きい状況の話です。XPはTahoma 8pt、VistaはSegoe UI 8ptに設定しています。

2007年11月21日

Bug 5928 UIの省略記号は"…"か"..."かをローカライズ時に選択できるべき 初回投稿日時: 2007年11月21日04時24分53秒
最終更新日時: 2007年11月21日04時25分31秒
カテゴリ: Firefox Mozilla Core バグ修正
固定リンク: id=2007112100
SNS: (list)

例の"…"問題の続きです。

すでに1.8branchからはバックアウトされて次のリリースから元に戻りますが、Trunkでは英語版はUnicodeのEllipsisを採用することに変更はありません。しかし少なくともWindowsの日本語版では"..."に置き換えるべきなので、ローカライズ時にカスタマイズ可能な様に修正しました。

メニューのキャプションもこれにあわせて自動的に連動するようになれば良いのですが、それはまだこれからです。

2007年11月22日

Bug 5947 ホイールクリック(中クリック)で新しいタブが開けない 初回投稿日時: 2007年11月22日03時46分18秒
最終更新日時: 2007年11月22日06時06分34秒
カテゴリ: Firefox Mozilla Core バグ報告
固定リンク: id=2007112200
SNS: (list)

昨日発見したリンクをホイールでクリックして新しいタブで開けないバグを報告しておきました。本家で全然見あたらなかったので私の環境も疑いましたが、IRCでは他の人も再現するとのことでした。

原因はSubmitToTabという拡張が動作しなくなっていることのようです。本来、拡張のバグで動作しないのであればInvalidなのですが、今回のケースはJavascriptのエンジンのバグが原因で、この拡張が正常に機能しなくなっているようです。

Bug 5948 letter-spacingが非ゼロの時、shrink-to-fitな幅の中で不要な改行が行われる時がある 初回投稿日時: 2007年11月22日04時25分32秒
カテゴリ: Mozilla Core バグ報告
固定リンク: id=2007112201
SNS: (list)

このもずはっく日記の右上のナビゲーションでたまに不必要な改行が発生するバグです。

テストケースが思ったより簡単に作成できたのですんなりと報告できました。

それにしてもこの日記のレンダリングはなかなか良いテストケースですね。もちろんそれを狙ってデザインしたのですが。ただ、trunkではほとんど問題無くなってきたので、そろそろもっとレンダリング困難なスタイルに変更したいところですが、まだ時間が確保できません。

世の中のかなりの数のウェブサイトはFirefoxのレンダリングのテストには向かなくなってきた 初回投稿日時: 2007年11月22日05時19分05秒
最終更新日時: 2007年11月22日05時27分04秒
カテゴリ: CSS Firefox 雑談
固定リンク: id=2007112202
SNS: (list)

先日、KOF 2007の会場で雑談の中で挙げたことなのですが、Firefoxが抱えている悩ましい問題を紹介しておきます。

おかげさまでFirefoxは世界ではなかなかの、日本でもそれなりのシェアを獲得できています。このことはつまり、多くのWebデザイナにFirefoxでのレンダリングを意識してもらえるということです。これは私も含め、ユーザにとっては短期的にはとても良いことです。なぜならユーザが(シェアNo.1の)WinIEと同様(もしくはそれ以上)のレンダリング結果が得られる可能性が高いからです。もちろん、Firefoxではテストを行わずに公開するサイトもまだまだ多いとは思いますが、それでも、職業としてデザインされている方には有名なGeckoのバグに関するノウハウは蓄積されていく訳で、テストを行わなくてもデザインする段階でFirefoxのバグを回避してくれていることが期待できます。

ですが、ここに非常に大きな落とし穴があります。仮に、世の中の5割のウェブページがFirefoxでも表示の確認を行って制作されたとします。この場合、Firefoxのユーザ、テスタはこの5割のサイトでGeckoのバグを発見することはほとんど無くなってしまいます。つまり、今までと同じように日々、ブラウザを利用しているだけでレンダリングのテストができる、という日々は既に終わってしまっているのかもしれません。

もちろん、trunkの開発にあたっては、単にブラウジングしているだけでもregressionのテストにはなります。しかし、ここ最近、Mozillaはregressionの発生を未然に防ぐために多くの自動テストをチェックイン時に行うようになっています。ですので、人の手によって発見されるregressionはゼロに近づいて行くことになります。

つまり、私たちが今後、能動的にレンダリングのテストを行う場合、より難しい作業が必要になってきます。例えば私がこのもずはっく日記(WebStudio)で行っている、サイトのデザインを仕様に基づいて行い、脳内レンダリングとの差分を見つけていくという、割と困難な作業になってしまいます。というか実際問題、ほとんど不可能に近いでしょう。

こうなってくると、私たちが最後に頼みの綱となるのはWebデザイナの方々です。仕事中に発見されたGeckoのバグ(もしくはバグかもしれない現象)をBugzilla-jpに登録してくれるのが理想です。しかし、昔から何度も私がこの日記で書いているとおり、Bugzilla-jpの利用は決して簡単なものではありません。これはBugzillaの仕様や性質の問題と、マンパワー不足からくる理由の双方があり、解決可能なものであるとは私は考えていません。現実的な解は、これも何度もここで書いているように、Bugzilla-jpよりも簡単、気軽に報告可能なワンクッションが必要でしょう。

一般的なバグに関してはすでにもじら組のとおやまさんの多大な貢献により、問題報告センターが運営されています。ですが、残念ながら現在の報告センターのUIではGeckoエンジンの(特に複雑な)バグ報告には耐えられないと考えています。例えばファイルのアップロードができないため、まだ存在しないページでのバグ(つまり、制作中のページでのバグ)を報告しにくいのではないかと思います。また、仕事で制作中のソースを公開された場にそのままアップロードするという訳にもいかないと思います。

Webデザイナの方々で、気軽に報告したいんだけど……、という人がいらっしゃれば、是非その報告ツールに求められる簡単さ、オープンであるべきではない点、というのを指摘してくだされば、検討材料としたいので提案(メールをくださるか、あなたのblogで)してもらえると助かります。

以下、メモ。

  • 報告者に意図の確認を行うことは絶対にありえるので完全匿名はありえない。
  • 報告のInvalidの率が高いとスタッフのマンパワーが破綻するのである程度のフィルタリングは必要。
  • CSSに無駄な項目が多くても、DOM Inspectorで要素ごとに適用されたスタイルを確認できるので、その辺の報告者の手間はスタッフ側で吸収可能なはず。
  • 私はJavascriptについては仕様も挙動もバグ管理のノウハウもほとんど無いので詳しいスタッフが最低一人は必要。
  • 非公開のファイルアップロードができたとしてもソースコードをそのままアップロードする訳にはいかない?

2007年11月24日

Bug 5949 [SeaMonkey only] フォームでオートコンプリートの候補を削ってIMEで文字入力するとき、最初に打鍵したキーで1文字目だけ確定される 初回投稿日時: 2007年11月24日06時29分50秒
カテゴリ: Mozilla Core SeaMonkey バグ原因判明 バグ報告
固定リンク: id=2007112401
SNS: (list)

SeaMonkeyでautocomplete用のポップアップが出ている間、IMEが使えないというバグ。

Bug-org 400893でメニュー以外のポップアップでもignorekeys="true"が指定されている場合はIMEをオフにするように変更され、更にSeaMonkeyのautocomplete用のポップアップにこれが指定されるという二重の原因があったようです。

とりあえずシンプルなパッチを提出しています。

2007年11月28日

application/xhtml+xmlがHTTP_ACCEPTに無い場合はエラーを吐くように変更 初回投稿日時: 2007年11月28日03時26分10秒
最終更新日時: 2007年11月28日18時25分25秒
カテゴリ: WebStudio
固定リンク: id=2007112800
SNS: (list)

HTTP_ACCEPTにapplication/xhtml+xmlが含まれない場合にはエラーを返すようにしました(show.phpのみ)。これで説明ページへの誘導もできるようになりました。また、強制的にダウンロードすることもできるのでコンテンツにアクセスできない訳ではないですが、そこからのリンクではまたエラーが出てしまうのでIEで強引に見ようとする人には不便にはなっていると思います。その辺は近日中に暇を見て追々対応していきます。

対策としてcookieを使うようにしました。IE7でテストすると、レジストリをいじってHTTP_ACCEPTを修正しても、キャッシュに存在している場合には*/*しか送信してこないという妙な仕様になっているためです。

巡回ソフトに関しては更新日時を取得できれば大丈夫だと思うので、RSSを利用してください。RSSはapplication/xhtml+xmlではないのでエラーを返しません。

アンテナに関してはアンテナの作者に連絡して修正してもらってください。アンテナはこちらの送信しているデータの再配信なので面倒見る気はありません。

2007年11月29日

Bug 5305 [Cocoa] ことえりで再変換が機能しない 初回投稿日時: 2007年11月29日01時15分27秒
カテゴリ: Mozilla Core バグ原因判明
固定リンク: id=2007112900
SNS: (list)

MacがCocoaベースに移行してから再変換が全く機能しないというバグ。ようやく「動く」パッチができました。

まだ、動いただけでパッチも汚いですし、もうちょっと周りのコードの確認も必要ですが、b2にはなんとか間に合わせたいですね。

2007年11月30日

IRC 初回投稿日時: 2007年11月30日02時16分40秒
カテゴリ: Bugzilla-jp
固定リンク: id=2007113000
SNS: (list)

IRCの#bugzilla-jpチャンネルの案内をbugzilla-jpのトップページに出しました(日本語版のトップページのみ)。もちろん、テスタやハッカー向けです。

Trunkのバグに関する話やBugzilla-jpの運用に関する話が必要な方は是非来てみてください。ちなみに私は最近は昼間か日付変更あたりがオンラインです。それ以外の時間もチャンネルには居ますが、反応が無いかもしれません。