言語ゲーム

とあるエンジニアが嘘ばかり書く日記

Twitter: @propella

技を盗む

僕は C5 で発表しないけど、今やってる仕事をアランさんやアンドレアスさんに確認して貰わないといけなくてそれなりに頑張ってます。ちょっとは派手な機能も提案してみたのだが、冷静に考えると今やってる OpenDocument エクスポータを確実に動かせるだけでもまだ春くらいまで地味にかかりそう。

何故これが地味なのかと言うと、OpenDocument は自分が考えた物では無く、標準化された物を実装しているだけだから。でもつまらない作業だが利点がある。標準には、沢山の技術的選択から特定の一つを選び出した歴史がある。それは純粋に技術的な判断かも知れないし、経験的なものかもしれない。政治的な事も多いだろう。それらを学ぶ事はとても勉強になるし、時間の節約にもなる。

OpenOffice の過去のバージョンでは、同じディレクトリの他の文書へのリンクを貼る際に、素直に のように書く。これが新しいバージョンでは のように ../ が増えている。これは面白い。OpenDocument は複数の XML ファイルを zip で纏めた構成をしているのだが、../ を含めないリンクは zip 内にあるファイルを指すとみなされる。これにより、zip 内のリソースと zip 外のリソースを統一的に参照出来る。

これは一見非直感的だ。first.odp の中から同じディレクトリにあるファイルを指すのに ../next.odp と書くなんて。しかしあえて変更したという事は、確信的な利点があったに違いない。変更には長い議論と経験が必要だったろうし、理詰めでどっちが良いと言えるものでも無い。もしもこういう仕組みを自分で初めから設計し、同じ判断に悩む羽目になる事を考えると、こういったファイルフォーマットの物語に触れられる事は大変在り難い。

もう一つ実装で工夫している事は、URL クラスに readStream メソッドを追加し、ストリームを通じてローカル/リモートファイルにアクセスするという点だ。この APIVisualWorks のパクリだ。ファイルアクセスに使う要素の、どこを公開 APIにするかというのもセンスが要る問題で、Squeak ではディレクトリクラスとそれに付随するメソッドを使うのが普通のやり方だ。しかし、理由はうまくいえないけど、長年使っていてディレクトリクラスを使わない方がスマートなコードになる事が分かったので、いっそのことメソッド名も VisualWorks と同じにして使っている。

問題は、korakurider 氏の調べによると(id:korakurider:20050902)、ローカルファイルと File URL に互換性の無い場合があるという事で、ファイル名を使わないで全部 URL で統一したいのに悩ましい所であります。

p.s. 実は色んな人に日記が難しい!と文句を言われて、面白い事を思いつくまで書かないで置こうと思ったんだけど、思いつかないのでいつものように業務連絡モードです。