XML::Feed で作成した Atom フィードは Validator でエラー

萎える。非常に残念でしかない。XML::Feed にも裏切られるとは。W3C の Feed Validation Service で invalid と言われる始末。XML::FeedPP を利用しても Atom 1.0 対応(一応できるが、色々マズい)その他諸々の要因で駄目。そりゃ仕方ないかと XML::Feed に戻してみればこの仕打ち。これは最早 XML::Atom を直接使えとの啓示か。

週末使っていじってみるか。これで XML::Atom にも裏切られたらどうしようか……。まあ、流石にそれはないだろうが、可能性のひとつとして。

2008-06-26

書店は立ち寄るだけでいいことがある

今日も会社からの帰りにふらりと近所の書店へと足を運んだ。今続々と増えている特徴もなければポリシーもない書店とは違って、意図に満ち満ちた良い書店のひとつ。欲しい本があれば買うだけ。不発に終わることの方が多いものの、たまにはいいことだってある。『人間機械論 第2版』(ノーバート・ウィーナー みすず書房)がたまたま目にとまったのである。そういえば読んでみたかったんだっけこれ、と思い、給料も出たことだしと即購入。レジで3000円だと知りましたよ。ジャンルとページ数、年代を考えれば妥当なところか(初版は1979年)。通勤時と昼休みの時間潰しに有効活用するとしよう。

『METAL GEAR SOLID GUNS OF THE PATRIOTS』(伊藤計劃 角川書店)は読了。うーむ……。プロットと構成、オチの弱さが非常に目立つ。構成は伊藤氏本人の責だと仮定しても、プロットとオチだけはどうにもしようがないからなぁ。少々のセンス・オブ・ワンダーを期待していた身としては、いささか残念ではある。とはいえ物語を物語として自覚させ、敢えて陳腐ともとれるメタリアルへ落としこんだことは、ゲームという原作との関係性を非常にわかりやすく明示できていたのではないかと思う。

2008-06-25

Blu-ray 版も出して欲しいのに……

と、つい思ってしまう。そんな「空の境界 殺人考察(前)」が届いた今日という日。いやはや、テアトル新宿へ気軽に行ける立地は実によい。会社帰りに――という足の運び方もできるし。上映時間を遅めに設定してくれているのは非常にありがたい。

『METAL GEAR SOLID GUNS OF THE PATRIOTS』(伊藤計劃 角川書店)と『星間飛行』(ランカ・リー=中島愛)も届いたし。しかし伊藤氏、単行本2冊目が「メタルギア」シリーズとは……。『虐殺器官』(伊藤計劃 早川書房)が良かっただけに、大いに期待。事実、この本は作者買いである。

そういえば、どうしてか「作者買い」「監督買い」する、という人はあまり聞かないなぁ……。周囲にあまりいないだけか(一人は知ってる)。

2008-06-24

text-shadow の誘惑

やっぱり使いたくなるものだなぁ。text-shadow。ひとまず h1 要素へつけてみることにした。Mozilla Firefox 3.1 (latest-mozilla-central)、Apple Safari 3、Opera 9.5 なら効果が出るはず。

そして、相変わらず Opera 9.5 の :active 伝搬しない問題は継続中。……CSS 側だけで何とかならないのだろうか。ううむ。もう少し頑張ってみよう。

2008-06-22

Link を削除

もう随分と長い間整備もせず、利用もせず、意味を成さなかったので削除することに。メニューの項目が4つだけになってしまったが、まあいいか。

今日は起きたら 17:00 だった……。こんなはずじゃなかったのに。おかしい。昨日(というか今日)は 03:00 頃には寝たのだが。

明日はもちっと早く起きよう。

2008-06-21

Firefox 3 のダウンロード数と国家の事情?

残念ながら、ダウンロード数と国家の事情は切り離して考えることができない。その現状は実に現実的で、SF の世界に逃避したくもなるのだが、まあそれはそれ、これはこれ。……決して、関心度合いという括りだけでは判断できないとは思う。関心があるということは情報があるということであり、不足しているなら環境に依存する。そんなことをヨモツネットの記事を読んで思った次第。因みに、トップ10だけでなく全てのダウンロード元を一覧にした表が、TERRAZINE の記事から参照可能である。

先程 SF の話をしたが、何だかんだ言っても SF は世界を如実に描写してきた。国家の話もその一つだ。黄金時代以前も、以後も、その形や程度、明確さ(メッセージ性)の変化はあるものの、国家の話は書かれてきた。ここ1年以内の日本という環境にだけ目を向けても、その傾向は簡単かつ胡散臭いまでに掴むことができる。伊藤計劃氏の『虐殺器官』もそうだし、特に明確で意図がプンプン臭うのは冲方丁氏の『オイレンシュピーゲル』シリーズや『スプライトシュピーゲル』シリーズ。……まさかライトノベルレーベルで世界国家シミュレーションやら汚いダイヤの話をされた挙句に、それらをひっくるめて全部きちんとエンタテインメントにされるとは思ってもいなかった。よくやるよ、ホントに。

2008-06-20

jQuery でコードを書くことが増えた

色々と。jQuery の基本的な設計思想は、「CSS セレクタとメソッドチェーンを理解できていれば OK(XPath 知ってるともっと Good)」みたいな簡便さにあるから、効率その他諸々を完全度外視すれば、誰でも書くことはできたりする。まずはとっかかりが大事。

そういう意味で、CSS/XPath によるターゲットノードの特定は非常に楽。しかも CSS Level 3 Selectors にもないような「親要素」指定ができたりするのも当然かつ必然だ。CSS のセレクタは、ノードを確定するために必ず root から検索をかける必要がある。それを省く手段として要素や属性といった条件を指定することができる。だが、その走査は常に親ノードから子ノード、ないし兄弟ノード。子が親を知ることはできない。

意外なことに、Selectors API では「特定したノードに対する各種検索」をうまく実行する方法がある。:root を利用するのだ。次の XHTML 断片について考えてみる。

<ul id="foo">
  <li> ... </li>
  <li> ... </li>
  <li> ... </li>
  <li> ... </li>
</ul>

次の JavaScript コード断片を用いれば、ul 要素から querySelectorAll を実行し、その子要素たる li 要素を取得できる。

var items = document.getElementById("foo").querySelectorAll(":root > li");

:root は前述の XHTML コード断片でいうところの ul 要素となる。html 要素ではないのだ。面白い仕様といえばそうなるだろう。WebKit Nightly r34603 で試したところ、まったく動作しなかった。よって前述の話は利用不可。睡眠不足なのはアレとしても、何故検証しなかった自分……。

このサイトはなるべく JavaScript を用いないように設計された。だが、もし必要になった時、私は jQuery を用いるだろうか? ……その問いには、Yes と答えられない自分がいる。他にもライブラリはある。どれがベターか、その時にならないとわからないだろう。

2008-06-19

Mozilla Firefox 3.0 Released

今日は何よりともかくこの話題。他に語るものもない。まずダウンロードから。

……早いとこ IE8 はマトモにならないかしらん。そして IE6 はとっとと消え失せてほしい。IE6 のせいで、無駄なマークアップは増え続けているのだから。

2008-06-18

Firefox 3 Count Down!

日本時間2008年6月18日2時0分。ついに Mozilla Firefox 3 がリリースされる。Gecko 1.9 を搭載し、あらゆる意味で Firefox 2.x とは比べものにならない逸品が、ようやく一般ユーザ向けに提供されるのだ。心から祝いたい。

そしてダウンロードギネス記録に挑戦中。是非この機会にダウンロードを。

とはいえ、Gecko 1.9 には入れられなかった機能が数多くあるのもまた事実。今年の年末には Firefox 3.1 (Gecko 1.9.1?) のリリースが予定されている。その機能を一足先に Nightly で体感している。特に CSS 3 セレクタの実装がミソ。ああでもないこうでもないと、実用に向けたノウハウを溜め込んでいるところ。

JavaScript もまた忘れてはならない。クロスドメイン XMLHTTPRequest は 1.9 では見送られた。さてどうなることやら。

2008-06-17

jQuery 用 JavaScript プロファイラ

jQuery 開発者である John Resig 氏の Blog で、Deep Profiling jQuery Apps というエントリが公開されている。要するにプロファイル用の jQuery プラグインを読ませ、何らかの手段で jQuery.displayProfile(); を実行(スクリーンショットでは Firebug のコンソールを利用)すると、各メソッドのプロファイルがとれる寸法。

実は、Firebug のプロファイラを利用すると jQuery を経由したスクリプトのプロファイルが非常にとりにくい(とれるが、どこがボトルネックなのか非常にわかりにくい)という問題がある。この専用プロファイラはその問題を解決してくれるかもしれない。しかも UA に依存しないようだ。多分、IE などでもロケーションバーから javascript:jQuery.displayProfile(); でプロファイルがとれるはず(試してない)。あとで試してみよう。

プロファイラによるプロファイルは、プログラムのパフォーマンスを改善する上で非常に重要な要素のひとつだ。ボトルネックになっている部分を綺麗に炙り出してくれるためである。この主張は、Brian Kernighan & Rob Pike 両氏による名著『プログラミング作法』を読んだことがある人間なら必ず理解してくれると思う。まず性能を改善するにはプロファイルをとることから始めればよい。

FirebugSafari Web Inspector にあって、Opera DragonflyIE8 Beta 1 にはないのが JavaScript プロファイラである。各開発支援ツールが世に放たれた時、私はまず初めに「JavaScript プロファイラが搭載されているか否か」を確認した。次に列挙したのは、各ツールにおける JavaScript プロファイラの実装状況である。

現時点で、Firebug と Safari Web Inspector 以外に JavaScript プロファイラは搭載されていない。しかし、Safari Web Inspector は現時点で「ロード時のプロファイル」に対応していない。例えば、ロード前 → ロード後の間に実行されるであろうスクリプトの前処理、load イベント実行時の挙動といった諸々のプロファイルがとれない。これが非常に大事なのに。この合計時間を減らすことは、結果的にページのロード時間短縮に繋がる。体感速度は増し、閲覧者に与えるストレスを最小にできる。

JavaScript エンジンが違えば、最適化すべき部分も微妙に変わってくる。無視してよいボトルネックもあるし、無視できないボトルネックもある。現時点でほぼ完璧なプロファイラを実装しているのが Firebug だけ、というのは残念なことだ。Dragonfly と IE8 も、是非 JavaScript プロファイラを実装して欲しい。そして Safari がんばれ。超がんばれ。もう少しで実用段階なのだ。

2008-06-16

新たな Blog 用ナビを実装

IE 以外の UA のみ。メインナビゲーションの実装を完全に流用している。よって、Opera 9.5 で active 時に左上・左下の画像が切り替わらない仕様もそのまま。……これもなー。Opera 9.2 時代は大丈夫だった。どうもイベント伝搬がうまく機能していないような感じ。バグなんだろうか。

これで、ようやく画像置換を用いている部分が消滅した。ここ最近、画像を作成するスピードも以前より早くなったのが救いか。

あとは IE8 か……。Beta 2 が出てからが勝負かもしれない。

2008-06-14

Opera 9.5 & Mozilla Firefox 3 RC 3 & Apple Safari 4 Developer Preview Released

各所で既報だが、Opera 9.5Mozilla Firefox 3 RC 3Apple Safari 4 Developer Preview(Apple ID によるログイン必須)がリリースされた。また、Firefox 3 の本リリースは日本時間2008年6月18日になる模様。これもなかなか楽しみだ。

Opera 9.5 が新たに対応した CSS 仕様 も参考になるだろう。

Mozilla Firefox 3 RC 3 はまだ RC 版。一般ユーザは絶対に常用しないように。私は latest-mozilla-central をわざと常用中。今のところは、特に気になったバグもない。latest-actionmonkey は……どうしよう。

Apple Safari 4 Developer Preview も、まだデベロッパ用。一般ユーザの常用は禁物。外観はほとんど変化なし。フォントレンダリングの設定項目に "Windows Standard" が追加。Windows のフォントレンダリング設定に追従するようになった。つまり Safari でも ClearType が利用できるようになったということ。……gdi++ はどうなんだろう。試してみようかしらん。

2008-06-12

ほぼ1ヶ月ぶり

随分と長い間停滞していたが、ようやっと Atom/RSS フィード生成スクリプトの修理が完了したので更新再開。……色々と書きたいことはあるので、ちょいと長めに。

秋葉原、動乱

各所で既報だが、秋葉原で連続殺傷事件が発生した。実は土曜日(6月7日)に訪問していたばかりなので非常に驚き、恐怖したのである。この事件の第一報は、訪問時に同行していたウチの両親からだった。自作したデスクトップ PC が欲しいとのことで、下調べを手伝ったのである。日曜日、私は惰眠を貪っていて、両親からの携帯電話コールで起床。内容は安否確認。

まずやったことは情報収集。友人連中が巻き込まれていなかチェックした。死亡者の中に知人の名はなかった。

因みに、友人の一人は事件後に訪問して現場を見たという。私共々、「if」の条件式が異なっていたら危なかったのだ。

死亡、並びに負傷された方々は非常に残念としか言いようがない。

個人的には、逮捕された容疑者のバックグラウンドに関する情報、特に「他人からの印象」に関する点が非常に希薄であったことが気になった。人間は、良かれ悪かれ他人という存在が何らかの「印象」を抱くはずである。それは、あたかも「事実」であるかのように歪曲されて報道されることがマスゴミの常なのだが、私が観た限り、インタビューに応じていた人はその点を全く口にしていなかった。そこが妙に引っかかる。

先走りと勘違いと見当違いの vote 煽り

みんなガンガン Vote しようぜ!!というエントリに対し、中野氏が苦言を呈している。該当 Bugzilla は 357670

中野氏曰く:

既に担当の方はパッチを作成し、テストを行ったり、Fx3.0.1での修正のために準備をしてくれています。そんな脇で今更voteとかして、何になるというんでしょう?

Re: みんなガンガン Vote しようぜ!! - WebStudio

確かに太平洋夏時間2008年6月2日の Steven Michaud 氏による Comment #79 を読む限りでは rev7 パッチが作成され、テストなどを呼び掛けている。

つまり、現段階で必要なのはテスト報告であって、決して vote ではない。テスト報告もなく、パッチも出ずという状況ならば vote もひとつの手段なのかもしれないが、現状は異なる。それが、中野氏のあまり無責任な批判や煽りをしないでいただきたいという発言の根底にあるのだろう。現に中野氏は Comment #81 できちんとテスト結果をフィードバックしている。

教訓:文章を書いたら、深呼吸してからもう一度読み返す(個人的には胸が痛い……)。

フィード生成スクリプト: XML::XPathXML::FeedPP の運用ノウハウ

このサイトが約1ヶ月に渡り放置されたのは、実のところ XML::LibXML が突然利用できなくなったことが最大の原因である。

  1. 自作のフィード生成 Perl スクリプトで XML::LibXML を利用していた
  2. Windows XP 環境で突然 XML::LibXML が使えなくなった
  3. XML::LibXML を何とか使えるよう模索
    1. libxml.dll を最新版に → 駄目
    2. libxml.dll.manifest を作成 → 駄目
    3. libxml.dll に Manifest を無理矢理追加 → 駄目
  4. 他の方法を模索
  5. XML::DOM の利用を画策 → 以前不都合があったからボツ
  6. XML::XPath を利用
    1. XHTML ファイルをパースさせるとエラー
    2. DTD を解析しようとしてエラーになっている模様
    3. XML::XPath が利用しているパーサはデフォルトで XML::Parser
    4. オプションで DTD を解析しないよう変更できるかも
    5. XML::XPath->new メソッドに parser オプション発見
    6. perser オプションは任意のパーサを指定できる
    7. XML::Parser にオプションつけたものを渡せばよいのでは?
    8. (長期の試行錯誤……省略)
    9. perser オプション に NoExpand => 1 だけを指定した XML::Parser を指定することで完全に解決
  7. XML::FeedPP を利用
    1. 何故かオプションで指定しても不正な値として出力されたり、そもそも出力すらされないものがある
    2. add_item メソッドに link オプションを与える場合:必ずハッシュの先頭に持ってこないと値が挿入すらされない
    3. add_item メソッドに content オプションを与える場合:必ずハッシュの末尾に持ってこないと、続けて追加したオプションの出力が全て不正な値になる(author => 'Taku' を続けてしまった場合、content の出力値末尾に authorTaku という文字列が生成されるだけになる
    4. Atom 1.0 形式を利用する方法:XML::FeedPP::Atom::Atom10new メソッドを利用する(マニュアルには何も書いてない、コードを読んで初めて判明)
  8. Atom 1.0 形式を利用する方法がわかってから、いつの間にか徹夜していてプロトタイプができた
  9. この文章を書いてる ← 今ココ

色々あったけど……またぼちぼちと。

2008-06-09