2004/11の Past topics

1st day

大学祭です。今日は平日なので人が少ない。

就活で名古屋と大阪をハシゴしてきた友人が夜に差し入れを持ってきた。スーツ姿の足下のくたびれた革靴が、僕が目を背けたものに対して逃げてないことを語っていると思った。

2nd day

大学祭は後輩に任せて、お仕事なのです。

人の考え方が、「みんなに」好かれたいという漠然とした思いから、「女に(男に)」好かれたい・モテたいという明確な思いに変わるのは、いつのことなんだろう。それがいわゆる思春期というものだろうか。

落ちるケースには二種類あって、ひとつは前触れもなくリセットがかかるもの、もうひとつは何か特定の操作をした時にBEEP音を鳴り響かせて電源が落ちるもの。前者について、思いつきで、Windows 2000のログオン画面で落ちるかどうか試してみた。結果。どうもログオン画面の状態(つまり何も操作していない状態)でも落ちているようだ。

大切な人には限りなくやさしく そうでない人には限りなく残酷になれれば一人前だ。結局マンガからの引用かよって感じですか。でもそうなんじゃないのかなーと想像だけで同意する。漠然とした「みんなが好き」から、「女(男)が好き」になって、さらに明確に「誰某が好き」になる、みたいな。馬鹿遺族死ねとか言える人ほど、その分近い誰か(恋人かもしれないし、家族かもしれないし、あるいは自分自身かもしれない)を深く愛してるんじゃないかと思う。逆に、こういうどっちを向いても八方塞がりというかどうにも言えないようなことについて美しいことを言いたがる人ほど、誰も何も愛してないんじゃないかと思う。いや、うん、彼女も子供もいない童貞キモヲタの僕が言うんだから多分そうなんでしょう。

「童貞キモヲタ」と入力しようとして間違えて「動的ヲタ」と入力してしまう今日この頃です。ダイナミックなヲタてなんやねん、みたいな。逆にスタティックなヲタちうのもあるんかい、みたいな。

二者択一で考えるからいけないのかもしれない。誰かを愛せる人と、誰も愛せない人と、誰もを愛せる人の、三種類なんだと仮定した方がよいのかもしれない。僕は本人を知っているわけではないから本当のところは知らないけど、故・マザーテレサなんかは三番目の種類の人のように見える。

3rd day

大学祭最終日なのです。

上の階でコスプレ喫茶なんて催し物が行われてて、他の人らもなんだかんだで行ったらしく、そりゃ俺だって興味あるべなと遅れて一人で特攻。感想。ありゃあ一人で行くもんじゃありませんな。間が持たなさすぎ。じろじろ見るのも憚られるし(この辺がヘタレ)、なんだか意味のない時間を過ごしてしまいました。

ハシゴしてロベルト・バッジョの展示というのも見てきた。何故バッジョ? と思ったんだけど、バッジョの半生を記した文を読み続けていくと分かった。「池田先生の教えに……」ああ、創価学会つながりなのか。普通に知りませんでした。というか名前とサッカー選手ということしか知らなかったんで。

今日はなんだかいつぞやの勉三さんが大人気でした。僕の見てた限りでは女性客の方がウケてくれてた気がします。先のコスプレ喫茶の人達も見に来てらしたので、何をトチ狂ったのか大判のものなんかを差し上げてみたりしました。いや、これはあくまで勉三さんですよ? 決してペ様ではありませんよ?

そんな感じで、特に驚くようなイベントもないままに4年目の大学祭は終わったのでした。お祭りは終わってしまいました。準備に精を出さなかったお祭りは、終わった後にもあんまり感慨がないものなんだなあ、ということを、活動に関わる時間がほぼゼロになってしまったこの4年目になって初めて認識したPiroさんなのでした。

4th day

8日に中間発表をしなければいかんのに何も準備していなかった卒業制作について、第一優先で作業中。とりあえずこの2日間でバックエンド(履歴のデータソースの構築処理)はある程度形になってきたかな。でも、この卒業制作の意義はむしろフロントエンドの部分にこそあるわけで、全体から見た進度はまだまだ1%もいってないと思うわけで、やっとスタート地点に立とうとしてるとことも言えるわけで。先は長いのう……

僕は馬鹿だから、調べる前にまず自分で考えたことだけで突っ走ってしまいます。というわけで既存の技術を全く無視して勝手に考えたRDFデータソースの構造。ノードとノードを関連付けるアークのためだけにまた新たなノードを挟み込んでいるのは、そこに情報を持たせることを考えているから。例えば、よく通る道は太くするとか。

問題は、どうやってこれを記録していくのかということ。今のところは手抜きしてページ読み込み完了時にリファラを見てるけど、リファラを隠してたりすると正しく記録できないし、ページ読み込み中にタブを閉じたりなんかすると記録自体が行われないし、リンクを辿ったのかJavaScriptで開いたページなのかとかそういう情報は取得できないし、色々問題が多い。でも本格的にやろうとするとcontentAreaClick()とかまで乗っ取らんといかんのだよなあ。めんどくさいなあ。まあその辺は後回しでいい。こうしてできあがったデータソースをいかにビジュアル化するかが本題なんだから。

5th day

卒業制作のフロントエンドの製作に着手する。

ノード間を繋ぐ線をXULの要素だけで描画する方法を考えるのはめんどくさいので、手っ取り早くSVGビルドを使う、というのは前々から決めてたことなんだけど。とりあえず最適化ビルドのSVGオプション付きのものを導入してみた。

SVGの要素の中に他の名前空間の要素を埋め込む方法が分からなくて半日潰してしまった。確かSVGの中にHTMLのフォーム要素やMathMLの数式を埋め込んだ例があったような……といううろ覚えの記憶で検索してもそのものズバリのものが見つからなくて。そんな中、Mozilla SVG プロジェクトから現在の実装状況に飛んで表を眺めてたら、一番最後にforeignObjectという名前が……なるほど、コンテナとしてforeignObject要素を使えば良かったのか。え、悩む前に仕様書読めって? はい、ごもっともです……

6th day

母が急死するという夢を見た。夢の中で涙は出なかったけど、とても悲しかった。目が覚めて、夢で良かったと心底思った。帰宅した母にとりあえず抱きついて、ちゃんと生きてることを確認した。

卒業制作の突貫工事

  • SVGのキャンバス上にノードを生成する
  • ドラッグによるノードの移動
  • ノードの位置の保持
  • ノードからページを開く

ここまででけた。

  • ノード間を線で結ぶ
  • 中ボタンドラッグでのパニングスクロール
  • ホイールスクロールでのズームイン・ズームアウト
  • Alt+ホイールスクロールでの回転

さらにここまででけた。なんか重要なところをすっ飛ばしてどうでもいい機能ばっか増えてってる気がするけど、8日の中間発表では完全に動く必要はないようなので、まあ目に見えるとこから手を付けてくということで。

回転するとX座標とY座標に影響が出て、色々崩れてしまう。ドラッグでのノードの移動なんてとんでもないとこにいっちゃうし。当たり前なんだけど。X座標とY座標に回転を考慮した補正をかけてやればいいんだろうけど、どう計算するのか分からん。高校数学はずっと欠点だったのですよぅ……

なんかもう手に負えなくなってきたので、回転機能は封印することにする。

現状。(スクリーンショット)ノードを自動的に追加する処理が入ってないので、まあ、ただの飾りなんですが。最適化ビルドといっても、ノードが増えてくると再描画がきついですなァ。

隔離病棟だと思った方がいい(どっちが、とは敢えて言わない)

ベクターがライトユーザー向けのFirefoxファンクラブなるサイトを作るという件に関して、既にFirefoxを使い倒している方々からは「まとめサイトで十分じゃねえか」という見方が強いようですけれども。初心者をナメてはいけないけれども、過信してもいけないと僕は思うのです。

  1. 新しいWebブラウザを試すためだけに
  2. Mozilla Japanを探し当て
  3. Firefoxをダウンロードして、インストールし
  4. まとめサイトを探し当て
  5. 関連文書や各拡張の配布サイトまで出向き
  6. メニュー構成から何から全部異なる個人サイトから、目的とする拡張のダウンロードリンクを探し当て、導入し
  7. 手探りで
  8. 自分好みにカスタマイズする

これらの多大な手間をかけてでもFirefoxを使いたいと思う人は、立派な駄目人間だと思うのです。

  1. なんか欲しいソフトがあったらベクターに行けば大抵見つかるよ、と教えられた
  2. ベクターのサイトでFirefoxの紹介を見る
  3. ベクターのサイトで説明を読む
  4. ベクターのサイトからFirefoxや拡張をダウンロード・インストールする

ドメインが一貫してることに注目。ここまで簡単になれば、「自分ではちょっとパソコンに詳しいと思ってて、周囲からも頼られてたりする」くらいの人でも導入できると僕は思います。情報科の教育がやっと始まったばかりで国民全体のほとんどを占める「大人」の層の情報リテラシが非常に低いこの国では、「教育を進める」のと同時に、「彼らのレベルに合わせてやる」こともまだまだ必要なのではないでしょうか。

Mozilla Updateの日本語版があるだけでも結構マシになるとは思いますが、Mozilla Japanにそんなことは期待できませんので(さりげなく失礼なことを……)、この辺のことに関してのノウハウが豊富なベクターに丸抱えしてもらえるのなら、それはそれでアリなんじゃないかなと。ぶっちゃけ、そこまでのことをボランティアでしてくれる日本人はいるわけがないし、自分でしようとも思えませんし。

卒業制作の突貫工事の続き

  • 複数ノードの選択
  • 複数ノードをまとめて移動
  • 新しいノードを自動で適当な位置に配置する

処理速度の向上とかは後回しで、とりあえず動くものを……

7th day

  • 新しいページを読み込んだ時にノードを自動的に追加
  • 読み込んだページに対応するノードに自動でパン
  • 同一ドメインのノードは近くに、層でない場合は遠くに自動配置
  • 再描画のタイミングを制御して、パンや拡大・縮小の処理速度を向上

再描画が異様に遅かったのの原因のひとつは、各ノードに連なるアークだけが関連付けられるはずが、全てのノードと全てのアークが関連付けられてしまっていて、ノードを一つ動かすだけで全てのアークが再描画されているせいだった。そりゃあ遅くもなりますわ……

夢の中で勝手に殺してしまった母の誕生日ということでお詫びに(?)ケーキなど買ってきた。まあ主に自分が食べたかったわけですが。

8th day

  • 「同じドメイン」「似たドメイン」「全然違うドメイン」の3段階で距離を変えてノードを自動配置
  • 既に同じドメインのノードがあった場合、新しいノードをその近くに自動配置するようにした
  • ズームイン・ズームアウトの中心をビューポートの中心にするようにした
  • ノードの削除(しかしまだまだバギー(バギーのことではない))
  • コンテキストメニューからの各種操作

思考力が最強に低まった頭でズームイン・ズームアウトの中心をビューポートの中心に合わせる計算方法をああでもないこうでもないと2〜3時間悩んで、よく考えたら既に「フォーカスしたノードをビューポートの中心に持ってくるようスクロールする」処理を書いていたということを思い出し、その式をそのまんま持ってきたら解決できた。ああ、まるっきり無駄な時間を費やしてしまった……

そして中間発表へ。資料なんて作る時間無かった(というかその分をすべて製作につぎ込んだ)ので、実際に操作してる画面を表示しながら、思いつくままたらたらと喋ってみたりした。

他の人の制作物で、マルチメディア的な作品のデモが面白かった。画面内に点を置いていくと、それが音階になるというもの。Javaで開発しているそうだ。

地道にためてた地域のポイントカードがついに満点になった!というささやかな喜び。でも還元率は1%だから微妙だ。

9th day

  • ホイールのないマウスでも操作できるようにした(Shift+ドラッグ、Ctrl+ドラッグ)
  • 選択したノードの近隣ノードを強調表示するようにした

できる操作がだいぶ増えてきたので、まとめておこう

  1. 自分の辿ったWeb上での足どり(どのページを見て、リンクを辿ってどのページに移ったか)の情報を、自動的に記録し、二次元的に履歴化するソフトウェアである。(現在の状況のスクリーンショット)
  2. ダンジョンもののゲームで見られるオートマッピングのように自動的に地図状に記録していくということで、「Web Map」と名付けている。
  3. 開発の動機は何か?
    1. 1993年に発表されたMosaic以降、Hot Java、Netscape、Internet Explorer、いずれも「戻る」「進む」という形で履歴を一次元的に扱うインターフェースを踏襲してきた。Operaの「早送り」「巻き戻し」も、根本的にはこの一次元への呪縛からは逃れられていない。グラフィカルなWebブラウザのGUIはこの10年、本質的には進歩していないと言える。(参考:Browser Museum
    2. WWWは、ハイパーリンクによってハイパーテキストが縦横無尽に連結されてできている。おのおののページは、一次元的にではなく二次元、三次元、あるいは四次元的に連結されている。利用者が形成するWWWそのもののメンタルモデルも、そのような形になっているものと考えられる。
    3. あるいは、現状が「戻る」「進む」という一次元のインターフェースであるため、初めてブラウザを利用するユーザは、WWWについて一次元的なメンタルモデルを形成してしまい、その結果として、WWWならではの自由なブラウズに戸惑いを覚え得る。これは誤ったメンタルモデルの形成である。
    4. ユーザーインターフェース設計で重要なのは、利用者に正しいメンタルモデルを形成してもらうことと、そのメンタルモデルを形成しやすい形状を備えることである。
    5. しかるに、WWWブラウザのユーザーインターフェースも、一次元的なものではなく、二次元、三次元的なものであるべきなのではないだろうか。
  4. 何が新しいのか?
    1. この手の「Web上での足どりを視覚化する」ソフトウェアとしては、Galactica Proxyなどの先例がいくつもある。
    2. しかしGalactica ProxyはHTTPプロキシとして動作するものであり、足どりを記録・表示するのみにとどまる。逆方向の利用、すなわち、履歴を元に「以前見たページを表示する」といったことはできない。
    3. また、このようなインターフェースを設計する場合、新規のアプリケーション開発となる。コンポーネント化されたWebブラウザの機能(IEコンポーネント、MozillaのGRE、SafariなどのWebKit、ほか)を利用するとしても、フル機能のWebブラウザと同等の機能を備えるのは大変な苦労である。
    4. Web Mapは、Firefox用の(将来的には、Mozilla Suiteにも対応したいが)拡張として開発している。
      • Webブラウザと有機的に結合することで、「足どりビューワー」から「ユーザーインターフェース」へと昇華される。
      • Webブラウザの機能がそのまま利用できるため、新規に開発されたアプリケーションよりも、安心且つ便利に利用できる。例えば、選択したノードをすべてタブで開くなどの操作が可能である。
      • Mozilla/Firefox自体の備える拡張性により、他の拡張と連携することで、利用者自身が使い方の幅を広げられる。また、Web Map自体を拡張することもできる。
  5. 特記事項、今後の展開
    • 同じドメインのページとそうでないページとでノード間の自動配置の距離を変えることで、クラスタ化がなされてくる。
    • 現状ではドメインのみを対象にしているが、キーワードによるクラスタ化も行いたい。
    • 現状では、各ノードの視覚的な識別にはfaviconを使用しているが、これをスクリーンショットに置き換えたい。
    • 現状では、「通った道(リンク)」のみを記録しており、先読みなどは行っていない。今後の課題あるいはWeb Mapの拡張として検討する余地は十分にある。
    • JavaScript/XUL/SVG/RDFのみで実現されており、メモリ管理などはMozillaのレンダリングエンジンとスクリプトエンジンに完全に丸投げしている状況なので、ノードの上限などは不明である。ただし、相当なメモリ消費になることは想像に難くない。
    • その他の付随する考え
      • Web Mapで形成される履歴の姿は、利用者のWebの利用の仕方が如実に反映される。ブックマークしたサイトを見ることが多い人は孤立したノードが増えていくし、ポータルサイトを利用する人はその周辺にノードが増えていくことだろう。
      • 個々人の「Web観」を比較、分析するツールとしても役立つ可能性がある。
      • 関連性を持たないサイト同士が、同じ話題を参照している様子を見ることで、サイト運営者の傾向が見えてくるかもしれない。

大学に行き、就職支援セミナーの「先輩の就活体験談を聞く」みたいな催しにパネリストとして出席した。会長(サークルの)、大祭の時に全く連絡が取れなかったと思ってたら何でこんなとこに座ってんだ! そして出席者はちゃんと就活をした人代表数名とマトモな就活をしてない駄目な人代表3名(含、僕&会長)という取り合わせなのか! 何かが間違ってる気がするよ! というかこんな人達(もちろん、駄目な人代表の方のことですよ)の話に聞く耳持っちゃいかんよ! とか思いつつ、駄目人間を量産しかねないようなヤバイ発言をしてみたり。

終盤で飛び入りでパネリストとして参加して、テレビ局等の製作系で内定が決まったという女の子二人が、セミナーが終わった後に「ヨン様の人?」と。うわ、誰かと思ったら、二人ともこないだのコスプレ喫茶でメイドさんやってた人だ つか4年だったんですか……

セミナーが終わった後、友人にWeb Mapを見てもらった。実のところ、自分で作っててかなり面白くて、自慢したくてしょうがないって感じなんですよ。実にヤな人ですね。

  • 指定したノードを「ブックマーク」する機能
  • 特定のノードに色をつけたりする
  • ドメイン単位で表示する「ワールドマップ」と、ページ単位の「詳細マップ」の実現
  • ユニバーサルデザインの観点からの配慮はどうか?

……という風なアイデアをもらうことができた。

Web Mapは、履歴を各ノード同士が縦横無尽に関連付けられたRDFデータソースとして保存していくバックエンド層と、そのRDFデータソースを元にマップ状のインターフェースを構築するフロントエンド層の二つの構成になっている。Mozillaをいじってて、例えばツリーの扱いやなんかで「ビュー」とか「ドキュメント」とか何でこんなにいちいちややこしいんだろう? と思ってたけど、自分で作ってみると、そういう構造にしたくなる気持ちがよく分かった。

ところで、このとおりWeb Mapの保存する履歴はRDF形式なので、他の拡張やアプリケーションからも再利用することができるはずだ。音声ブラウザなどでうまく利用すれば、これはこれで面白いことになるかもしれない。

10th day

作ってて面白くてたまんないというのは事実なんだけど、Galactica Proxyなどがある以上、この手のものは絶対誰か既に作ってるはずだ、っていうかFlashかなんかで作ってる人がいなかったっけ? とも思ってて、しかも、助教授にもツッコまれたんだけど「何に使うの、コレ?」と問われた時に「いや、そういうユーザーインターフェースなんです、履歴の代わりとかに使うんです」以上の答えを持ち合わせていないわけで、正直、世間からは全く相手にされないんじゃないだろうかと思ってたんだけど、石川氏が興味を持って下さってるとのことで、嬉しく思いました。興味深いアイディアも拝見しました。

もちろんWeb Mapはインストール可能な形で公開する予定です(助教授にも、卒業制作は公開済みのものでもOKとの確認を取りました)し、インストーラのないコードそのまんまで良ければ既にWeb上で誰からでも見れる状態で置いてあるんですが、今のところは基本機能一つとってもまだまだ満足に動いてくれてない(とりあえずノードの削除はできるようになっとかなきゃねえ)ということで、インストーラにはまだ着手してません。

なんてこった……ホイールの動作は設定依存で、ヒストリの移動やズームに割り当てられた操作ではDOMMouseScrollイベントが発生しないだなんて……

今まで全然チェックしてなかったのですが、Stylesheet Stylebookのサイトからなにげなく著者の一人のヤスヒサ氏のサイトを見てみたら、3次元サイトマップとか3Dブラウジングとか3Dウェブ検索とか、スデにスンバラシイものがあることを知って激しく凹む。

  • アークをダブルクリックしたら始点あるいは終点のノードまで自動スクロールするようにした(しかしこんな細い線をダブルクリックするのは至難の業だったりする……)
  • アーク上でのコンテキストメニューから始点あるいは終点のノードまで自動スクロールできるようにした(しかしこんな細い線の上で以下略)
  • Sidebarと併用できないのが激しく不便だったので、全く新規にウィンドウを開くようにした(そのおかげで、ステータスバーを表示できるようになった)

寝坊して講義をさぼってしまったのだけれども、卒業制作のためなので勘弁して下さい。

11th day

  • 直接はリンクされていない同じドメインのノードについて、弱いリンクを自動的に生成できるようにした(でもとても重くなるのでデフォルトでは切っとく)
  • ノードの削除処理で、ゴミを残さずデータソースまで完璧に削除するようにした
  • 画面隅で自動スクロールっぽい処理
  • ツールバーっぽいもの装備
  • アークをポイントした時にマーカーを表示するようにした。これで、少々ポインタが動いても「アークの上でコンテキストメニュー」や「アークの上でダブルクリック」がしやすくなったと思う。

もう少しやり残してることがあるので、それを片づけてから、一旦公開したい。

OpenOffice.org解説本つくるからマスコットキャラ考えて! と言われていくつかラフを描いてみた。あ、萌え系はナシですよ。

12th day

シュレックおもろかった。

Firefoxファンクラブ

Firefox 1.0にインストールできないようなバージョンしかソフトウェアライブラリに登録されてないというのはいかにもまずいので、現在スデに1.0で動作を確認できていた4つについて登録情報を更新した。TBEは実際に1.0に入れてみると色々問題が起こってることが改めて分かって(ネイティブタブブラウズ機能なんて、いつ仕様変更が入ってたんだか……)、その修正のために夜を徹することになってしまった。まあいつものことなんですけど。しかもそんな状況で慌てて手を入れたもんだから盛大なバグが混入してたりして。誰一人幸せになれない、関わる者すべてを不幸にするという意味で、まるでですね。とか問題発言をしてみる。

userContent.cssとかuserChrome.cssをいじるだけで実現できるようなものを拡張機能にしてんじゃねーよ、と思われる方もいらっしゃるでしょうが、それを言うなら、僕だって「タブの並べ替え機能とかbrowser.jarとtoolkit.jarに手を入れればできるんだからわざわざ拡張にする必要ないじゃん」とか思うわけでして。そんなの難しい? いやいや簡単ですよ。ちょっとファイル展開して、100行ほど書き加えて、固め直すだけですから。言語もJavaScriptなんてオモチャみたいな言語だし。コンパイラも何もいらない。Windows XPいっこあれば他に何もなくてもできます(これはマジ)。大丈夫ですよ、僕ですらできてるんですから、皆さんにできないはずがないです。

……というようなことを軽く言い放ってしまうような廃人から、そうじゃない人を隔離するためのものとして、僕はFirefoxファンクラブを見ています。はい。

13th day

仲間由紀恵がメイク落としのCMでマスカラを落とすために目のあたりをぐりぐりやってるシーンを見ると何故か目がしょぼしょぼしてくるのは僕だけだろうか。

まとめサイトの転送量もすごいようですが、ここの転送量もえらいことになってますね。11月10日(Firefox 1.0リリースの翌日)の記録はなんと10GB。ありえねえ。こんなんで自宅サーバやってたら間違いなく死んでましたな。スキル無くて良かった……

Web Mapの作業を再開。

  • キーボードショートカットをつかえるようにしつつ。
  • faviconをファイルとして保存するようにしたりとか。
  • URIのスキーマを見て履歴に入れるか入れないか判断したりとか。
  • アークをつまんで動かせるようにした(両端のノードが一緒に動くという挙動)

広域マップと詳細マップを実装しないと使い物にならんので、それを急ごう。

14th day

昼はおろしカツ丼など作って食べてみた。用意する物は、ご飯、昨日の残りのトンカツ、大根、醤油。今日はうちにあったつけだし醤油というのを使ってみた。大根おろしに醤油を混ぜてからご飯・トンカツにかけると醤油の味がかたまらなくて良い。大根をおろす手間はともかく、簡単にできるので一度試してみてはどうだろうか。

TBE不要論

Firefox本体にTBEを標準で添付して欲しいとかおっしゃる方がいらっしゃるようですが、正気の沙汰とは思えませんなあ。自分で言っちゃあおしまいですが、プログラミングのプの字も分かってないようなド素人が趣味で作った、こんなクソなものが標準添付されてたら、僕は怒りますよ。クソだと分かった上で自己責任で導入するから、自分でもやっと許せる訳でして。苦笑。

今までにも何度も言ってきてますけど、TBEを機能面でかる〜く蹴散らすようなスバらしい物を誰かが作ってくれないと、いつまでもこんなクソな物が持ち上げられ続けてデカイ面して存在し続けてしまいます。それは、多くのMozillaユーザにとって、もしかしたらものすごい損失かもしれません。既にある単機能拡張の日本語化なり、日本語圏の人の手による新しい拡張の開発なり、是非ともどんどん進めていって頂きたいというのが僕の正直な気持ちです。そうなれば僕もメンテナンスから解放されますしね。←これが本音

Web Mapつづき

  • 広域マップと詳細マップの切り替えができるようになった。つかれた。

詳細マップの個々のページのノードと広域マップのドメインごとのノードとを同期させるのに手こずる。でもここまでの設計でちょこっとだけ柔軟性を持たせてたのが幸いして、大部分は変更なしで動いてくれた。設計って大事ですね。オブジェクト指向って便利ですね(使いこなしてるとは言えないけど)。

マップの表示切り替えはできるんだけど、全体が見やすくなること以外にメリットが全くない、という状況で足踏みさせられてしまった。

現在の実装では内部的に4枚のレイヤ(下から順に「広域マップのアーク」「広域マップのノード」「詳細マップのアーク」「詳細マップのノード」)を持っていまして、個々のノードごとに表示・非表示を切り替えてたんじゃあ日が暮れちまうのでレイヤごとばっさりと消したり表示したりということをやって高速化を図ってるんですが、ここで一つ問題が。visibility:collapseをレイヤ(SVGのg要素です)に適用しても中身には継承されなかったり、じゃあってんで子孫セレクタを使って全部collapseにすると、visibileに戻した時にSVGの描画がぶっ壊れちまう(SVGビルドで試すと分かりますが、SVGの中にforeignObject要素を使って埋め込んだ他の名前空間の要素の属性やスタイルを動的に変更すると、何故かキャンバス全体の表示が吹っ飛んでしまうのです)し、visibility:hiddenにすると見た目には見えなくなるけどクリックしたりドラッグできるなんていう透明人間な要素ができてしまうし、display:noneを指定するとXBLでのバインディングが適用されなくなってノードのドラッグでの移動すらできなくなってしまったりするし、という八方塞がりの状況に陥ってしまいまして。試したことのある人じゃないと分からん書き方ですね。申し訳ない。

最終的には、display:noneで乗り切れることが分かった。僕はてっきり「display:noneの時にバインディングを適用しても適用されない」という動作だと思ってたんだけど、実際には「display:noneからdisplay:inlineに切り替わる時にバインディングが再適用される」という動作になっていて、つまり、「バインディングが適用されてなかった」のではなく、「バインディング適用後に一度初期化した内容が、初期化し直されて吹っ飛んでしまっていた」ということだったんですね。 <field name="foobar">null</field> とかの「初期化前のデフォルト値」を消したら、一度初期化した値が初期化し直されることはなくなりました。

  • ドメインごとのノードをクリックしたらそのドメインのノードの一覧をポップアップ表示するようにした
  • forループをぶん回していた部分の多くをnsIObserverをnsIObserverServiceを使うようにしてみた
  • ドメイン内のノードの位置の平均値を割り出すための処理を高速化する目処が付いた。JavaScriptのforループは詳しい人曰く激遅だそうなので、前項と合わせて、可能な限りループは減らしていく方向で。

やっと実用レベルになってきたかな?

15th day

久しぶりにファンヒータに火を入れたんですよ。一応、前と後ろのホコリは掃除したんですけどね。スイッチ入れて、なんか点火まで時間がかかるなーと思ったら、火が点いてファンが回り出すと同時に勢いよく「もふっ」と白いものが……どうやら中の方にホコリがたまってた模様です。シーズンオフ中はカバー掛けとかないと駄目ですね。

で、前の冬から油が入れっぱなしになってたりなんかしまして。なんか臭いんですよね。もう目がしょぼしょぼしてたまりません。

「あ」がなくなってCuteMenusの日本語版は諦めてた(自分でやってもいいけどめんどかったし)んだけど、Firefox - ソフトウェア関連記事でCuteMenus 0.4日本語対応版 for Firefox 1.0 on Windowsが公開されてることを今知った。

研究室の方の友人に、統計の入門書みたいな本を借りた。対数変換とかこれで勉強して、より自然な「ノードの平均的な位置」を割り出せるようになろう、と意気込みだけは立派に。

USB接続のクリスマスツリー「線上のメリークリスマス2004」の記事から別の記事を見たら、その中の社員までぶっこ抜きかよ!という記述でウケた。へえ、ギガバイトのあのキャラクターはギガバイ子というのか。

MozillaのSVGビルドの問題点のまとめ

ええと。デッドノウハウになる前に書いとこう。SVGのことについてよく調べないままに書いてるので、勘違いがあるかもしれんけど。ていうか多分勘違いしてる。その場合、初心者が躓きやすい注意点ということで誰か補完して下さい。

  • XMLで名前空間の異なる要素を埋め込むやり方でSVGのsvg要素をXUL内に埋め込む場合、svg要素がビューポート全域を覆う。内容領域のキャンバスとしてのみSVGを使い、ツールバーやメニューバーなどを使いたいという場合、ifame要素やbrowser要素などで間接的に埋め込むとよい。
  • SVGのforeignObject要素を使うとSVGの中にXULの要素を直接埋め込めるが、埋め込むXULの要素の属性やスタイル指定などは、appendChildでドキュメントツリーに組み込む前に確定している必要がある。ドキュメントツリーに組み込んだ後で動的に属性やスタイル指定を変更すると、SVGの描画領域が真っ白に吹き飛んでしまい、リロードしなければいけなくなる(強制的に再描画させても駄目)。
  • ただし、一部のスタイル指定は動的に変更しても問題ないようだ。僕が確認したのは、color, background-color, background-image(およびその他のbackground系プロパティ), border-color, border-style。これらは:hoverなどでの動的な変更でも問題なし。visibility:collapse⇔visibleの動的な切り替えは、前述の問題が起こるが、visibility:hidden⇔visibleであれば問題ない。
  • この問題は、親となるSVG要素をdisplay:noneで非表示にしていても発生する。
  • foreignObject要素で埋め込んだ他の名前空間の要素は、親要素の回転・拡大縮小の影響を受けない。XUL要素のboxObjectの各値は、常に画面上での値を返す。
  • svg|line[hidden="true"] { display: none; } よりも svg|g[hidden="true"] svg|line { display: none; } のように書いた方が、表示が高速に切り替わる。複数の要素の表示・非表示をまとめて変更したい場合は、グループ化しておいて、グループごと非表示にすると良い。
  • SVGの要素に対しても、XBLと-moz-bindingによるバインディングは有効。無名要素の追加の他、メソッドやプロパティの追加指定もできる。ただし、無名要素として他の名前空間の要素を追加したければ、やはりforeignObject要素を使う必要がある。
  • 上の補足。バインディングの中でforeignObject要素を無名内容として追加しても、これは効果がない。foreignObject要素に直接バインディングを指定して、他の名前空間の要素を無名内容に追加するのなら、正しく表示される。

Web Mapつづき

キャッシュ?って呼んでいいのかな? マップを描画してるキャンバスの内容はSVGそのまんま(というかXULアプリではGUI=ドキュメントだったりする)なので、必要な部分だけ切り出して外部ファイルに保存するようにした。次の起動時にはそれを読み込んでまるごとドキュメントツリーに組み込み、ノードの生成等の処理を簡略化しようということです。効果あるのかないのか分かりませんけど。

……と書いてたけど、単に読み込みに失敗してて今まで通り毎回初期化されてただけだった。ちゃんと読み込むように直したら、内部処理が追っつかんくらいに爆速で表示されるようになった。キャッシュおそるべし。

あとは内部の初期化処理が相変わらず時間かかるので(こればっかりはどうしようもない)、これをごまかさないといかんね。メッセージ出したり入力を禁止したりプログレスバー出したり。

ビューウィンドウを起動してるだけでマシンの動作が極端に遅くなる。タイマーで無限ループに陥ってるものでもあるんだろうか? ということですべてのタイマーに印を付けて動かしてみたけど、無限ループになってるものはなかった。んじゃ何が原因なんだろう。メモリ食いつぶしてるのか、SVGを使ってること自体が問題なのか……

Web Mapつづき

分かった。XBLのconstructorやproperty(主にgetter)を活用しろということなのね。起動時にタイマーなんぞでシーケンシャルにちまちま初期化してやらんでも、これらをうまく使えば、キャッシュから読み込んだドキュメント片をドキュメントツリーに組み込むだけで、各要素がパラレルに初期化される。また、新しいノードを追加する時も、制御スクリプトで単にcreateElementしてappendChildするだけでいい。初期化に異様に時間がかかる問題を解決する鍵はここにあった。

今までは、「Web Mapのノードを表すクラス」のオブジェクトを要素ノードに関連付けて(ちょうどXUL要素ノードにboxObjectプロパティで関連付けられているnsIBoxObjectのオブジェクトのような感じで)、すべての処理はそのオブジェクトを中心にして行ってた。この方法だと、ノードを操作するより前に必ずノードが初期化されていないといけないので、ということは起動時に全てのノードを初期化しないといけないため、起動に死ぬほど時間がかかるという問題がある。これを、要素ノードにバインディングでプロパティ・メソッドを追加して「ノードを表すオブジェクト」の代わりに使うようにするためには、かなりあちこちに手を入れないといけない。ああめんどくさ……

17th day

マジ泣きそう。いつかこうなるんじゃないかと思ってはいたけど、ついにこの時が来たかと。昨日から全力を注いでたバインディングベースの実装への大転換作業がようやく終わるかと思ったところで、GREP置換中に例の強制リセットがかかってWeb Mapのフロントエンドのスクリプトが吹っ飛んでしまいました ファイルサイズは同じなのに中身が空っぽという破損ファイルになってしまったですよ。しかも秀丸エディタによる自動バックアップも一緒に吹っ飛んでたし。二日がかりの作業が完全にパァです。もう泣きそうっていうか泣きます。

吹っ飛んだのは、ビューエリアの制御をするスクリプトと、バインディングの定義。つまりこの二日間の作業が丸々消えてしまったという次第です。もうやっとれん。萎えまくり。月曜夜の時点でのファイルがWeb上に残ってたので、完全に振り出しに戻ったわけではないけど、それでも痛すぎます。あんだけ苦労したのを、またもう一度やり直さなあかんのか……鬱だ……

……と思ってたけど、いざ手をつけてみたら3時間くらいで吹っ飛ぶ直前と同じくらいの所までもってこれた。人間、やればできるもんですね。まあ、二日かかってたとはいっても、そのうちほとんどの時間は、ああでもないこうでもないとトライ&エラーをやってたわけで。その末に辿り着いた答えだけ憶えてて、そこに向かってガリガリとコードだけを書いていけば、そりゃ、初めてやった時よりは早くできあがるわな。

話つまんねーしサボろっかなー、と思ってた講義が今日は意外と興味深かった。エントロピーの計算方法から、何bitあれば情報を表し尽くせるのかという話を経て、日本語で使う文字の数から文字コードに必要なバイト数を求める話、それから、人間が一生の間に意識して理解できる文字情報なんてのはたかだか16GBくらいだ、と。

研究室はコンセントが机の奥の方にあってACアダプタの取り回しに難儀するので、図書室で卓上のコンセントから電源を取って卒業制作をまたちまちま進めていました。メインの自宅環境よりLet's noteの方がSVGの描画が圧倒的に早くて、嬉しいような悲しいような。

国民年金・厚生年金・共済の中で唯一破綻していない(らしい)公務員共済年金をうらやましがっても、年金をもらえる歳になる前に心労過多でバタバタ死んでいくような人の割合が多い年金が本当に羨ましいだろうか、という話。いや、父が言ってただけですよ。

18th day

Firefox最高!IEは窓から投げ捨てろ!とか、いやいや細かいところで気が利いてるSleipnirこそがナンバーワン!とか、色々な見方があるかとは思いますが、IEは最新の6.0でさえもう3年も前に公開されたものだということなどを鑑みるに、僕は、Firefoxは数あるIEコンポーネントブラウザとタメを張るような存在じゃあなくて、IEが歩みを止めずに正常に進歩し続けていたらこうなっていたんじゃないかなあ、という姿だと思っています。Mozilla SuiteやOperaのように多機能なWebブラウザのニーズは相変わらずあり続けるでしょうが、それとはまた別の流れとして。

……ということを思ってたんですが、社のblogの方にも書きましたけど、Sleipnirのソースコードが完全に失われてしまったそうで。全財産が盗まれたってことの方がご本人にとっては一番痛いことだとは思うんですが、非常に多くの人に影響を与える事件という意味で、やはりSleipnirの方に着目せずにはおれません。

自分自身つい昨日ソースの喪失を体験して、まだリリースしてもいないソフトウェアのたった二日間の作業が失われただけで顔面蒼白茫然自失意欲消滅意気消沈したばかりなのですが、それを考えると、Sleipnir作者の方のお気持ちはもう想像を絶するものだと思うのです。

僕自身はMozilla萌えな人でIEベースのSleipnirは全然使ってませんでしたが、しかし某マンガの帝王ジャシュガンのような偉大な先人と思っていただけに、悲しいやら悔しいやら、うまく言葉にできませんがそういう胸の痛くなる気持ちです。

オープンソースっていうとなんか「共同開発」みたいなイメージが強いかもしれませんが、べつに、オープンソースだからって共同開発しないといけないってことはないんですよね。かくいう僕の制作物もだいたいMPL/GPL/LGPLのトリプルライセンスというこれ以上ないほどのオープンソースなんですが、デバッグで条件絞り込みに協力してくれるユーザの方はいても、実際にコードを書いて送ってくださる人はいません。いや、この3年間の間で一人か二人はいらっしゃったかもしれませんけど、ほぼゼロと言っていいでしょう。また、必要以上に口出ししてくる人がもしいたら、「そんなに言うならソースコードあげるからそっちで独自に開発を続けてくれ、俺は俺で今まで通りの物を作り続けるから」と言うこともできますし。僕はそんな現状が嬉しくない人なんですけど、多人数での開発が煩わしいからオープンソースにしたくないと思ってる人がもしいたとしたら、それは誤解ですよ、オープンソースでも一人っきりで気ままに開発できますよ、ってことで。

Web Map。TBEとかでリファラをブロックしてても、リンクを辿って開いたページだったらアークで連結したい、と思ってたのでやっつけ仕事で対処してみた。

新しいビデオカード

なんか朝になって電源点けたらPCから異音がしだしたので、よく調べてみたら、ビデオカードのファンが異音の発生源だった。そういえば最近妙に画面に再描画時のゴミが出たり画面が揺らいだりしてたなあ。もう寿命ということか。Canopus SPECTRA5400PE君、中古とはいえ今までよく頑張ってくれた……もしかしたらこのところの激しい強制リセットのせいでイカレたのかもしれんけど。その前にマザボが逝った時に一緒にダメージ受けてたのかもしれんけど。

そんなわけで退勤後に日本橋まで出向いて新しいビデオカードを買って参りました。3D性能はあんまり重要じゃなくて(そもそもゲームをあんまりしないので)、2Dがキレイに出るのが一番いい、とりあえず画面の右と左でアスペクト比が狂ってるようなやつは困る(SPECTRAに替える前、友人の薦めで新品で買ったRADEONチップのやつがそういう物だったので、なんかトラウマになってる)……てな要望はあっても最近のハードウェア事情にはとんと疎いので、会社の詳しい先輩にアドバイスを求めた。

曰く、最近のやつは2D性能はどれもあまり変わらないと。GeForce系のエントリー〜ミドルクラスでしっかりしたメーカーのやつなら安心だろうと。で、店頭で「これかな?」と思って選んできました、ELSAのGLADIAC FX 736(GeForce FX5700, 128MB RAM)というやつ。僕の使い方から考えると異常にオーバースペックですね。わらい。

新品で何か買おうと思ったのには前述ののっぴきならない理由以外にももう一つのきっかけがありまして。メインマシンでWeb Mapを開発してる時には再描画とか超重くて、まあこんなもんなんかなーと思ってたんですが、Let's noteで動かしたら鼻血が出そうなくらい爆速で動いてしまいまして、オンボードグラフィックスに負けるメインマシンてどうよ、と思ったのですよ。

移行後さっそくWeb Mapの動作を試してみました。結果。あんまり変わってませんね  SVGの描画はビデオカードの性能よりもCPUに依るところが大きかった模様です……

Web Mapつづき

最後の詰めの段階です。まあ「最後」っつっても基本機能が一通り揃ったという意味での到達点でしかないんですが。

  • タブの切り替えに応じてマップ上のノードにフォーカスするようにした
  • 広域マップ表示の際に、ドメインの名前の後に、そのドメインに属しているノードの数を表示するようにした
  • 履歴が更新された時に、マップ上のノードを動的に更新するようにした
  • 設定画面を作成(とりあえずユーザがいじって使いでのありそうな機能についてのみGUIを提供)
  • CSSの書き方を見直し、描画速度を向上
  • フラットに配置してた各ファイルを、機能ごとに整理した(まあ仮にも卒業制作ですから、かっこつけときたいのですよ)

SVG用CSSプロパティのpointer-eventsのようなものとして-moz-user-focusが使えないだろうか、っていうか-moz-user-focusの正しい使い方ってどないやねん、と思ってXULのリファレンスの上位階層のXPツールキットプロジェクトから切り替え可能 XUL と CSS の書き方とか効率的 CSS の書き方とか見てたら、子孫セレクタを使った指定は厳禁とされていて、ダメ! 有害! 終わってる!とまで言われてる、ということを初めて知った。

以前、デフォルトのスキンで子セレクタを使ってるせいで、TBEでバインディングを追加すると表示が崩れたりなんかしてて、ああもうなんでこんなとこで子セレクタ使ってんだよ素直に子孫セレクタにしときゃいーじゃんと思ってたんだけど、こういう理由があったとは思いもせなんだ。ということで僕もさっそくWeb Mapのノードのスタイル指定の書き方を子セレクタを使ってガチガチに固めてみたら、目に見えて再描画の速度が向上しまして。侮れないなCSS。

この有害なルールによってスタイルシステムは treehead 中にない全 treecell (事実上典型的なツリーでの全 treecell) に対して、スタイルルールがマッチしないことを判断するために全ての親チェーンをドキュメントルートまで這い上がっていく羽目になりました――そんなことまで考慮しなくてはならんのか、と呆れもするけど、そこまで知り尽くしていないとできない高速化テクニックがCSSにはあるのだということには、新鮮な驚きを感じた。

しかしこの方法、高速化できる反面、構造を変更した時なんかにはこのスタイル指定は使えなくなってしまうという欠点もある。ズボラな僕にはこのスタイルを徹底することは結構苦痛だなあ。

オープンソース化と子離れ

オープンソース化にはなかなか踏み切れない、何故なら、自分の書いたコードはかわいいものだから……というフリーソフト作家の方の発言を見て、思ったこと。

オープンソースにしたからソフトウェアに愛着を持ってないのかっていうと、そんなことは無い。少なくとも僕は、自分が作った物にはどれも愛着がある。出来が良い悪いというのとはまた別のことなんだけど。むしろ僕は、自分の作ったソフトウェアがかわいいからこそ、オープンソースにするという考え方でいる。

子を育てることは親の仕事だけれども、それは子を思い通りに育てるということじゃなくて、独り立ちできるような子に育てるということだ。だから親はいつか子離れしなければいけない。子の生殺与奪を親がいつまでも握り続けるのは、宜しくない。本当に大切な子だからこそ、僕は、僕が死んでも子が生きていけるようにしておきたい。

オープンな体制でやってる人のことがまるで理解できないよと思われてるんだとしたらちょっと悲しいので、こんなことを書いてみた。

べつに、だからといってクローズドな体制で開発を続けることが悪だとかは思わない。公開できない技術だって世の中にはあるし。バグが見つかっても放置されりゃあオープンソースだろうがクローズドソースだろうが変わりない、むしろオープンソースの方がそこは危険かもしれないし。何かあれば他人の足下をすくってやろうという人ばかりなこんな時代に、人の善意にばかり期待するのは甘いとも思うし。ええと、つまり、オープンソースにする人がいる一方で、クローズドソースにする人がいても全然問題とは思わない、両者は並立していくものだと。

オープンソース化と子離れと反人類

上のようなことを書いてさらに思ったんだけど、自分のプロダクトを子供みたいに思ってる奴ってキモイよね、と。特に、子供もいない僕みたいな奴が本気でそう思ってるのはキモさの極みだよね、と。さらに言うなら、自分という人間様より、無機物ですらないプログラムコードの「人生」の「幸せ」を願ってるという時点で廃人だよね、と。

何のために物を作るかといったら、自己表現であったり、仕事のための道具であったり、何にせよ、人間のために物を作るのが普通なわけで。そのはずが、今の僕はそうして作った制作物の「その先」までいつの間にか考えてしまってるわけで。しかもそれを良いことだとか思って正当化する考えを述べたりまでしてて。

漫画家と漫画作品とファンとファンの作った二次創作漫画の関係を述べる時なんかでも、「漫画が作家の手を離れてファン達の間で育っていって」云々という語り方がなされることが多い気がするけど。それと根本的には同じ話で。

人間の幸せを蹴ってでも人間じゃないもののために熱を上げるという、環境保護団体とかみたいな、「非国民」を通り越した「非人類」。対人コミュニケーション能力が著しく低かったり、社会性が身に付いていなかったり、そういう背景があるからそういう主義主張に落ち着くのか。ともかく、そういう人類の幸せにツバを吐きかけるようなところが、同人やらオープンソースな人達やらが世間から嫌われる理由の一つなんじゃないかな、と、「もののけ姫」を見ててふと思った。

Web MapとSVG

SVGビルドでforeignObject内の他の名前空間の要素の属性やスタイルをいじると表示が死ぬ問題について、faviconの読み込みタイミング等の関係でよく表示が死ぬため開発当初から悩みの種だったんだけど、これに解決策が見つかった。試してみたら、background系の指定は動的に変更しても全部大丈夫だったので、これを使えばいいんだ。もし将来faviconの代わりにスクリーンショットを表示するようにするとしても大丈夫なはず。あとは画像の拡大・縮小がネックだなあ。このやり方だと、CSSで画像の表示倍率をいじれない限り、どうしても画像がトリミングされてしまうので。

まだまだ細かい修正が続く。今まで放置してた所に手を着けてってるということなんだけど。

  • ノードやアークをポイントしたらステータスバーに情報を示すようにした
  • ノードの自動配置の計算方法をちょっとだけ改善(ズームアウトしてると自動配置の位置が大きくズレるのはこれが原因だった……)

拡大表示した時に問題が起こったけど、なんとか対処方法を見つけられた。ソースコード中にコメントとして書いといたけど、一応ここにも書いておこう。

  • サイズ指定がないと、SVGのforeignObjectの大きさは内容に応じて広がる。
  • foreignObject要素の内容である他の名前空間の要素は、拡大縮小の影響を受けない。
  • 例えば300%に拡大表示した際、XUL要素の大きさは、見かけ上は変わらず、SVGの座標空間上では計算上は1/3になっている。
  • しかしforeignObjectのボックスの大きさは、XUL要素の見かけの大きさではなく100%表示の時の大きさに固定されてしまう。つまり、300%に拡大表示していれば、foreignObjectのボックスはXUL要素のボックスの見かけのサイズの3倍の大きさとなる。

以上の理由から、拡大表示した際に、何もないところでノードがマウスイベントに反応するという問題が起こる。この問題は、適当なサイズをSVG要素に指定してやることで回避できる。自分は高さ・幅ともに1を指定した。

  • foreignObjectの中に置かれた他の名前空間の要素は、foreignObjectのボックスの外にまではみ出して描画される。
  • 子要素で発生したイベントは親要素にも伝搬する。無名内容として追加されたXUL要素の上でイベントを起こせば、それらは親要素のforeignObjectに伝わるため、パーザ的には依然として「foreignObjectでイベントが起こった」扱いになる。

以上の理由から、この対処法でも問題は起こらない。ただし、これらの点でSVGの実装が変更された場合、この対処法は意味をなさなくなる。

また、再描画を行うと表示が乱れる問題も起こる。(ここで指定した仮のサイズの外側にはみ出した内容が描画されないことがある)これは何故か透明度を指定したXUL要素についてのみ問題が起こらなかったので、暫定的に、CSSでopacityを0.999に指定してごまかしている。再描画がかかると全体にゆらゆら揺れる感じになるのがちょっと気持ち悪いけど、背に腹は代えられません……

本当なら、拡大・縮小に応じてforeignObjectのボックスの大きさを計算して、そのマウスイベントが有効か否かを判断するべきなんだろうけど、めんどくさいのでやらない。

Web Map最後の詰め

  • ズームイン・アウトの処理について、「拡大率をn%プラス」ではなく「現在の倍率のn倍に拡大」という風に改めた
  • Ez Sidebarからコードを引っ張ってきて、自動で畳んだりブラウザに連動して起動したりということをできるようにした
  • 特定のノードを起点として、連結されているノードをコンテキストメニューから探せるようにした
  • その他、バグ修正

正直、Ez Sidebarと同様のブラウザとの連携とかの便利機能は、うちの学科の卒業制作レベルだったら必要ない(ぉぃ)と思うんだけど。このあたり、目が既に別の方を向いちゃってますね。

再描画が乱れる問題について透明度を指定して回避するのは、やめました。やはりいくらか重くなってたので。

というわけで今度はリリースの準備に取りかかる。

21st day

Web Mapプロジェクトページつくりました。ちかれた。ホントは昨日公開するつもりだったんですが、力尽きて寝てました。あと英語版の方に一部日本語のままのページがあるのは気にしないでください。

というわけでようやく人目にさらせる物ができたかなって感じなんですが、使った人はみんなこう思うでしょうね。期待はずれって。いや、作ってる自分がそう思ってるんだから、他の人が思わないはずがないんですけど。

実質的には実験+ただのデモンストレーションの域を脱してないというのは、機能面よりもむしろバックエンドによるところが大きいと思う。オーバーヘッドが大きすぎるんですね。本気で実用的な物を作ろうと思ったら、C++なりJavaなりでもっとカツカツに書かんといかんはず。ただでさえオーバーヘッドの大きいXULという仕組みで、こんな大量のデータを贅沢に扱うようなアプリケーションを作るのは、テーブルレイアウトと同じで「間違った道具の使い方」だと思うのです。

お好み焼きうまかった。

22nd day

Web Mapの技術情報を載せました。ちかれた。

ウホッ。「できるかな?」の人がとりあげて下さってるよ

RDF視覚化ツール「Welkin」のことを書くのをすっかり忘れてた。プロジェクトページからリンクしようと思ってたけど今の今まで綺麗さっぱりと。この記事を見た時に思ったけど、Web Mapって、データをRDFで保持してたりノードとアークを点と線で表示してたり、このWelkinに相当似てる気がする。もちろん、ブラウザ内に統合されてるかどうかとか、出来は先方の方が比較にならんほどスバらしいとか、違いはあるんですが。つかWelkinが正常に発展したらWeb Mapは不要になるような気がする

「履歴」として考えた時に絶対必要なはずの、エントリの時系列順の情報というのを、今の今までトーンと忘れてましたよ。シャレになりませんな。ともかくサクッと実装。これによって履歴データの互換性がなくなりますので、人柱として既に広大なマップを構築されてる方には申し訳ないのですが、まあ、古いノードを自動で削除するとかそういう機能をつけるためには絶対に必要な仕様変更なので、ご容赦下さい。普通に「ユーザのこと」を考えれば、履歴データのコンバータは必須なわけですが、そんなとこに情熱を傾けるつもりは全く無いという僕自身の心づもりあたりが、このソフトウェアの現在の位置づけを表していますね。

Web Map動作情報追加。研究室のOS XマシンでMac用の唯一のSVGビルドを試したところ、Windows版のMozillaと同様、全然動きませんでした。表示はWindows版よかちょっとだけマシでしたが。(何故?)

その道に詳しそうな方のコメント。ばねモデルってなんだ……3Dアトリエのバーテックス・リレーションみたいなののことだろうか?

23rd day

アークのマーカー。地味に改良。アークの端のノードが画面外にある場合、マーカーにアイコンを表示するようにした。あと、左クリックするだけで、始点・終点ノードに移動するためのメニューを出したりとか。拡大表示してる時なんかの操作性が高まったかなと。

「ばねモデル」て、ほんまになんやねん……ぐぐって見つけた修士論文には、個々のノードの間に斥力を持たせてはじき合わせるみたいな話が書かれてたんだけど、これのことだろうか? もしそうだとしても、もはや完全に文系脳の僕の理解を超えた世界なのでお手上げなのであります。

ノードをいっこいっこ動かすか選択してまとめて動かすかしかできないのは確かに面倒だなと思うわけで、3Dアトリエのバーテックスリレーションみたいに隣り合うノードを引きずる感じで動かすような処理を試しに組み込んでみた。……お、重すぎる……計算自体にかかる時間よりも、SVGの再描画が激遅なんだな。

24th day

先日Web Mapについて言及して下さった方からアドバイスを頂いた。ばねモデルはこの手のグラフ化ツールでノードを自動配置する際の定番アルゴリズムで、Javaによる実装系のTouchGraphという優秀なアプレットが広く使われてる、と。そのソースコードSunのアプレットのデモなんかが参考になるだろう、と。……ごめんなさい、見てもでんでん分かりませんでした そもそもJava分からないし。オール英語だし。

諦めてもっと泥臭いやり方を考えてみた。単に「同じグリッドに他のノードがあるかどうか」をチェックするだけでなく、「周囲の8つのグリッド(正方形を9分割した中央が現在位置とする)に他のノードがあり、且つ、そのノードとの距離がグリッドの大きさよりも近いかどうか」のチェックも行うというもの。タブを一気に開いた時なんかはどうしようもないけど、それ以外のケースであれば、新しいノードが他のノードのすぐ近くに配置されてしまうというような事態は激減すると思う。その反面、チェックに時間がかかるようになったので、もう少しマシな方法はないかと未だ模索中です。

初心者と有識者で思いつく言葉が違うせいで初心者は有識者の知識に辿り着けず有識者は初心者の現状に辿り着けないという問題。それは あれですね 「啓発」(「啓蒙」と言うと「蒙」をとかれる蒙な人が怒るらしーので、そう言っとく)に挫折した元コミュン人は いわゆるひとつの 癌。

25th day

S木さんに言われましてね。会社紹介のリーフレットを印刷することになったんですね。最後のページの顔写真がお堅い取引相手向けにはまずかろうということで。で、いつも印刷に使ってるWindows機がデモのために駆り出されてて、それを使っての印刷ができなかったので、S木さんのdynabookでやったんですが。もうね、死ぬかと。256MBの物理メモリで、メモリ展開後1GBオーバーの激重画像を操作しようってもんだから、そりゃもうえらいことで。メニュー開くだけで10秒待ちとか当たり前、トリミングとかのでかい処理になると軽く10分は固まってくれちゃったりなんかして。あんまりヒマなんで社の本棚にあったコンピュータは、むずかしすぎて使えない!Amazon.co.jp)を読み始めちゃいましたよ。

で、まあ、この本なんですけど、耳に痛いことがたくさん書いてあるみたいですね。まだ最初の方の1/10も読めてませんが。こつこつ読んでいきたい。

NHKにようこそ 2Amazon.co.jp)買った。感想。うん、わりと面白い、面白いんだけど。むしろたたみかけるようなクライマックスはツボだったけど。佐藤君、全然ひきこもりじゃねーよ! 普通にラブコメしてるし初対面の自殺オフ会メンバーと普通に会話してるし。違うだろ! そこで行動に移せないのが真のひきこもりだろ! 海に行きたい水着のねーちゃん見たいとか言っても言うだけで実際には何も行動を起こそうとしないのが真のひきこもりだろ! いくら脚色とはいえ、ここまで言動不一致が激しいと、違和感の方が目について仕方がないなあ。

アクメツ 10Amazon.co.jp)も買った。カウンタックかっこええ。

26th day

最近は、いつにも増して無価値なことしか書いてませんね。なんででしょうね。書くことのない空虚な日々しか過ごしてないからでしょうか。だんだん鬱が戻ってきた気がするし、「今日のよかった」、再開しようかな。

27th day

自動配置のアルゴリズムの改善(改悪?)内容偽バーテックスリレーションのしくみを書いた。もうアルゴリズムとも呼べないような力業の世界ですね。恥でしかないですね。発表の時は真っ先に削るべき部分ですね。わらい。

ファンヒーターの調子が悪いのは寿命みたいですね。ここに越してきてからだから、7年くらい? 考えてみるとよく働いたんだな、こいつは。あと今使ってるディスプレイも同じくらい経ってるし。年代物ばっかりだ。気がついたら身の回りの物が年代物ばかりになってるというのは、何というか、歳を取ったなーと思わずにはおれません。え? ただのヒッキーだからだろこのクソボケ? 普通はもっと早くに買い換えるだろこの貧乏人が? はい、おっしゃるとおりです……

TBEの数少ない特徴的な機能の一つの、タブのグループ化機能。表面的にはタブのラベルの自動色づけ機能。ネット世間的には全くと言っていいほど無視されてるようなんですが、活用してくれてる人がいるのを見るとほっとします。

pitONEでUSBメモリを買ってきた。ハギワラシスコム製、USB2.0対応、256MBで3200円。安くなったもんですね。

ラヴィ!

「愛してる! 世界中を敵に回しても君のことを守る! 君のためなら死ねる!」……とかって言うじゃな〜い? でも……その「君」に愛されてなかったら、アンタただのストーカーですからァァぁあ!! 残念ざァんねェェンッ!!!(波田陽区風)

僕がストレスを感じる理由はここにある。

「右も左も分からないFirefox初心者の人に親しまれる物を作りたい。中級者以上の人は、他の人の手による、高度で洗練された単機能の拡張を使ってくれればいい。」と言うだけは言っていても、実際には中・上級者の人に嫌われたくないという欲を捨てきれずにいるため、どっちつかずのものになっている。どちらかに非常に愛されていれば、他方から憎まれても耐えられよう。だが、どちらからも愛されておらず、それでもなお注目されているということは、つまり、どちらからも憎まれているということである。それをストレスに感じずにいられるのはMの人のみであろう。

そう。拙者……客観的には既にストーカーですから。切腹ゥ!!!(波田陽区風)

29th day

頼られるのは悪い気はしない。なに、下心? おう、ありまくりよ! 文句あっか!

時間の無駄

病は気からだっけ? 健全なる魂は健全なる肉体に宿るだったっけ? とにかくマシンの不調でデバッグも開発も絵描きも満足にできないのがイライラの一つの元凶であることは事実なので、重い腰を上げて治療に乗り出しまして。

マザーボードが炎上して、ケースと電源とマザーボードとHDDを交換して以来システムが非常に不安定なのには、いくつかの原因が考えられる。

  • ハードウェア構成が変わった状態でWindows 2000を再インストールせずにそのまま強引に使い続けているから
  • 設定ミス
  • ハードウェアが壊れてるまたは初期不良

このうちどれが原因かわからないのが最大の問題なので、一念発起して一つ一つ潰していこうかと。そういうわけで昨日一日を費やして、ソフトウェアの設定に関するレジストリの書き出し、Windows 2000の新規インストール、レジストリのマージや設定の移動、一部のアプリケーションの再インストール、などの作業を行っておりました。nForce2の最新ドライバとかも入れてみました。大変疲れました。

しかしただの徒労に終わったようです(いや、徒労で終わればまだよかったんだけど、頼みの綱の英和翻訳ソフトと命の源のATOK17がどちらもCD-ROMが現在手元にないことに後から気づいたので、常用環境としては大きく後退してる)。突然落ちる現象は相変わらず続いております。もうイヤ。

落ちるのは以下のような状況だ。

  • Windows起動中。
  • スタートアップ項目の処理中。
  • ムービー再生中。
  • 3Dのゲームとか動かしてるとき。
  • DirectX使ったゲームとか動かしてるとき。
  • AutoFTPで更新ファイルのチェックが行われてるとき。(再現性100%)
  • Ad-Awareで完全チェックしながらOffice Updateしてるとき。
  • Web Map表示中。
  • なんもしてないとき。

リセットがかかる場合があったり、けたたましいBEEP音を響かせて電源が落ちたり、ブルースクリーンになったり、落ちるときの症状も非常にバラエティ豊かだ。感覚的には、負荷が高くなった時が落ちやすいような気がするけれども、気のせいかもしれない。

CPUとかメモリとかマザーボードとかって、壊れててもここまで動くもんなの?

その後

デバッグや開発どころか、Webサイトを巡回したりメールの返事を書いたりする程度のことすらままなりません……

ATOK17が帰ってきたよ! 日本語入力は日本人PCユーザにとって何よりも大事な物なんだなということを改めて実感する。それだけに、海外の開発者がメインだとそういうところに気を回してもらえないというのは非常に残念なことだと思う。

……頂いたアドバイスを元にBIOSメニューでCLほかメモリ関係のアクセスをものすごーくルーズに設定してみたら、落ちにくくはなったようだ。ストレステストでも今のところ落ちる現象は起こってない。でもこれって定格よりはるかに下を行く設定なんだよね……中野さんのアドバイスを拝見するに、ハズレ品掴んだということだろうか。

30th day

環境としてはわりと落ち着いたようなので、作業のペースを戻していきたい。

電車男Amazon.co.jp)買った。既に全文読んでるけど、まあ、ある意味でメモリアルアイテムということで。読んでて思ったけど、この文の形式ってどこかあしながおじさんAmazon.co.jp)とかに通じる物がある気がした。気がしただけ。あと、最後のエロ小説は確かに掲載しなくて正解だったなと思った。

会社の入居してるビルで防災訓練が行われたので、仕事ほったらかして参加してました 訓練用偽消火器は迫力が無くてつまんない……

パスでゴリゴリ作ってくならSodipodiよりInkscapeの方がいいですね。Linux上での話ですけど、Sodipodiではパスを作ってる最中はスクロールも拡大縮小もできなかったので、往生こきました。

出版社の方に社までお越し頂き、表紙図案をネタに「これは駄目」「ここはいい」という風なポイントを色々と指摘して頂いた。余白を取りまくったりとか「全体に上品すぎる」と言われて、自分もまだまだ割り切れてないなあと痛感した。あと、ここまでの段階で誰一人気付いてなかったんだけど、コンピュータ系のしかも解説書なのに右綴じのレイアウトで作ってしまってたし それらを受けて作り直した新しい図案は、確かにものすごく見栄えするようになったと思う。印刷して、本の形に折ってみたら、ああ、書店で並んでる姿を(いや、並んでるだけじゃなくて売れてないと困るんだけど)見てみたいなあ、とか思った。

データを入稿する(出版社さんに渡す段階までの話としても)なら、デファクトスタンダードから外れてるSodipodi/Inkscapeではやっぱり辛いなあ、ということでとりあえずAdobe Illustrator CSの導入を申請してみた。

あー。北海道の地震のことは全然知りませんでした。ニュース見ろとか新聞読めとかいう以前に、アンテナがズレちゃってる。とりあえずジュンさん犬神さんは大きな被害はなかったそうなので安心しました。