はてなキーワード: ミニマムとは
これ、ふと頭をよぎった言葉。
ただいま、夢のある、そして業界を一悶着させそうな新しい事業の起ち上げに取り組んでいて、これまでの自分が培ってきたインターネット分野やテクノロジー分野を超えた、実業(リアルを扱う事業)に及ぶことをやらかそうとしています。
そうすると、これまでの自分の経験やノウハウが通用しないハードルがたくさん現れてくるわけで、人材はどうする、どんな人材を雇うあるいは参画してもらうのが最適か、場所はどうする、オペレーションはどうする、流通はどうする、お客様サポートはどうする、十分な資本はどこから調達してくる、などなど、これまでの小資本でなんとかやりくり出来てたソフトウェア開発のお仕事とはまるで畑違いの悩み事がわんさか。
(とはいえ、ネットやIT技術はこの事業をブーストさせるためには必須なので、それは自分のアドバンテージ。)
悩みもがいている、というよりは、キャッキャと遊んでいるかのように取り組んでいるので傍から見れば「なんじゃこいつ」と言われても仕方がないけど、実際はいろんな事が頭をよぎったりして、思わず当初とは違う方向性に進んでいる自分に気がついて方向修正したり。
最初の”Think Big”は、かのAppleのSteve Jobs御大が口にしてたワードだけど、その以下はそれに続けてスラスラと出てきた言葉。いつでも原点に戻れるように「これだけは忘れまい!」と心に留めておくべく、メモ。
● Think big, …大きくものを考えろ
● Act quick, …すぐに動け
● Start small, …小さく始めろ
● Enjoy all. …全てを楽しめ
●Think big,(大きくものを考えろ)
物事に取り組むにはまず、極大化された理想の状態を考えるべし。その姿が一番シンプルでわかりやすくて、誰でも納得するくらいの説得力が無ければ、そこからディテールを掘り下げていっても無駄。枝葉末節のことを考えるのは後でもOK。「神は細部に宿る」なんて言った人がいるらしいけれど、細部の苦労が報われて美しい姿になるためには、必ずその上位の考えが美しい必要がある。
●Act quick,(すぐに動け)
その行動が必要だと分かっているならばすぐに行動すればいい。「いや、よく考えをまとめてから…」という綺麗好きな人がいるが、考えることが目的ならまだしも、実現することが目的ならばさっさと初動に移せばいい。色々考える必要があるのは「わからないから」であって、そんな自分が考えて予想した結果を行動で確認する作業なんてナンセンス。逆に行動すれば解決できることまでウンウン考えていると、数少ない本当に考えるべき事ことまで埋もれてしまって重要度が麻痺してしまう。
●Start small,(小さく始めろ)
自信家ならばいきなり大きく始めて(上手くいけば)成功するだろうけど、事業とはイチかバチかのギャンブルではないのだから、理想は追求しつつも「成功させる」という目的を確実に達成させるため、なるべく最初はミニマムで始めるべき。自分は神ではないのだから、途中、全てあるいは一部において自分が当初考えていた予想が食い違っていたときのための、それを改めて軌道修正できる余力が必ず必要。
なにも説明する必要なし。
●Enjoy all.(全てを楽しめ)
面白いことばかりじゃない。(いや、本当は面白いことばっかりなんだけど)楽しい経験はまぁさておき、あっちこっちで動いていると反対意見も出るし、現実的な障害を見つけてしまったり、単に自分の利益だけを気にする人もいたり、気力体力的にも疲れてきたり、と。
それはどんなにメンタル・フィジカルに自信がある人であっても経験することでダメージはあるだろうけど、それもひっくるめて「すっげー楽しい経験をしてる。この体験を知らずに死んでられねえ(笑」くらい、ある意味自分という主人公をコントロールしている第三者の自分という視点で、全ての物語を楽しむことが最終的には良い結果につながるんじゃないかな、と。
http://blog.bresson.biz/2010/12/think-big-act-quick-start-small-try-hard-enjoy-all.html
彼女は勤勉で努力家で、安定した過労死するほどではないエリート職についていて、実家も都内で持ち家一人娘。
生活に困窮することは無いだろうし、社会的地位もあるし、教養もある。
そんな彼女でも、オタクの男性が虹最高惨事氏ねとか外国人の若妻貰っている話を聞くと凹むんだそうな。
彼女は外国史オタクで、オタクの男性と付合いたいと思っている。そしてオタクの女性はオタクの男性と交際したがっていると思っている。
そうすると、余りにも虹や外国人妻にオタク男性のパイを奪われたらオタク女性がハブられて、余ってしまうんじゃなかろうかと心配しているんだと。
まじめな子で不器用な子だから、オタクの男性が挙げている『彼女の条件』っていうのは全部満たさなくてもいいんじゃない?と言ってみた。
男の人もそうだよね。
『イケメン』『金持ってる』『言うこと聞いてくれる』『ダサくない』とか。
ネットに限らず、そもそも見合いでも何でも、見ず知らずの相手と交際と考えた時点で条件主義になるのは当然だよね。
実際に知り合って、仲良くなっていくごとに相手の欠点も許せるようになるんだから。
15 Ways to Reclaim 2 Precious Hours Every Day | Ririan Project
よく私が例に出す算数なのですが、24時間の生活の中から毎日1時間を節約することができればどうなるでしょうか? 毎日毎日一時間ですから、一年間で 365 時間。8時間労働のワークデーに換算すると 45 日あまり、週に5日勤務として、9週間分の時間をセーブできた計算になります。
もちろん、節約した時間は「すきま時間」が多いので、連続した時間に焼き直すのは難しいのですが、細かく時間をセーブする習慣は、もっと大きな時間節約のための基礎になります。
Ririan Project で、もっと野心的に「毎日2時間をセーブする方法」という記事がありましたので、例によって大意を翻訳してみます(理解しやすくするために、一部自分の知ってるテクニックを混ぜたりしてます)。
1.リストを作る:頭のなかで仕事をしないでかならずリストに書き出して仕事をする。これだけでも頭のなかの混乱と非効率を防げる
2.最も不快なタスクを先に片付ける:どうせやらなきゃいけないものなら、先にやることで不快な時間をミニマムにできるし、タスクの先延ばしを避けられる
3.見る必要のないものを減らす:放っておいてもいろいろなメールや資料はデスクに舞い込んでくるものですが、見る必要のない資料送付は断ったり、開くまでもなく捨ててゆく癖をつける
4.仕事の重心は午前に:夕方に1時間労働時間を延ばしても結果はあまりかわらない。それよりは1時間早く来て仕事を始めた方が効果が大きい
5.通勤時間を最適化:渋滞にはまるのなら自転車を使ったりする。また、引っ越すことで通勤時間とコストを最適化できるなら思い切って引っ越すのも一つの方法。
6.会議・会合は立ったまま:座って話すとだらだらと会話が長くなりがち。要点をまとめて、かつ相手との会話に集中するために会議は立ったまま行ったり、少なくとも同僚との会話を立って行う。
7.テクノロジーから離れる:仕事に集中している時間には携帯電話や、余計なテクノロジーを切っておく。注意力を散らさないこと。
8.人に任せる:自分にしかできないと思っていたことでも、よく考えると人に任せられる点はあったりする。人を信頼して任せる習慣を身につけよう。
9.電話を最小限に:電話をかけるときはメモにアジェンダを書いて簡潔に、他人からの電話も簡潔に切り上げられるように会話を運ぶ
10.ルート検索を徹底: 年間一人の人は平均で36時間を渋滞か、道に迷って失うそうです。事前にルートやタイムテーブルをよく計画することで、実際の行動の時に時間をセーブできます。
11.常に実行できるプロジェクトを持ち歩く:いつでもとりかかれる仕事やタスクを1つないしは2つ持ち歩いて、常に何かが動いているようにする。
12.上手にお金を使う:原文では「オーダーメイド製品を使って上手に料理する」でした。ようはお金で解決できることで、時間も同時にセーブできることなら、コストとメリットをよく考えてお金で解決してしまうのもオプションに加えておく
13.闖入者を回避する:訪問販売を全て断ったり、集金は自動引き落としにするなど、時間をとられる手続きはなるべく削除するか自動化する。
14.記憶力を強くする:研究では一年に人は20時間ほど忘れたことを思い出したり、考えたりするのに使っているとのことです。記憶力を訓練するのは長い目で見て、非常に大きな時間節約になります。
15.よく眠る: 体幹温度を上げる睡眠前の運動を避けて、すぐに眠りにつけるように心がける。眠る前に牛乳を飲むと、眠りにつくのが早くなるという研究もあり、応用できる。
考えればまだまだありそうですけど、小さな時間節約ではこのあたりが定番っぽいですね。私は 1、4、11 は注意していましたが、記憶力を鍛えることが時間節約になるというのは思ってもみませんでした。
あと 16 番目として加えたいなと思ったのが「先を読む」というコツです。
5分後には自分は何をしているか。今日の午後は何をしているか。明日は? 来週は? 来月は? 来年は? こうしたことの大半は実際には予想できないことばかりですが、当てずっぽうでもいいので、常に先を読む習慣を付けていると方向性が集約されて目的への最短ルートを選べるケースが多い気がします。
http://lifehacking.jp/2007/10/time-saving-tips/
まず先に結論を述べます
「過去の最適化をしたからって未来が最適化されるわけではない」
僕らはよく「あのときああしていればよか」って思うのだけれど
じゃあ「過去を変えることはできるのか?」と考えたとき、まあ最初に過去に行くにはどうするのっていう技術的な話になると思う。ワームホールを使うとかドラえもんに頼むとか。
で、まあそこの議論はめんどくさいからやらない.だからとりあえず今は過去を変えることは出来るとなったと仮定します。
また、過去を変えたことで自分の今の未来へも影響を与えることができるとして(過去を変えた時点で宇宙がもうひとつ生まれてしまうので現在の宇宙に影響を与えるわけではない、とかいう人がいるわけですから)。
「よっしゃ!いっちょ過去いって今まで起こったすべてのいやなことをなかったことにしてくるわ!」
このようにしてタイムマシンに乗った僕は過去の最適化を行うわけです.
テストで満点を取って,憧れのあの子と付き合って,ほしかったゲームを買って,誰からも怒られず,みんなからは賞賛を送られ…
最高の人生をやり直せてるわけですが,いつかはまたタイムマシンに乗り込んだ時点,つまり今に帰ってきます.
そこからが問題です.僕は今の時点においてこれからなにが起こるか何もわかりません.それまで最高の人生を送ってこれたのはこれから起こることを知っていて修正することが出来たからです.
僕は未来が自分に押し寄せてきたときに結局またいつもどおりに”あてずっぽ”で進むべき方向の選択をすることになります.もちろん一番いいことが起こるであろう方向を選ぼうとすることはできます.でも解空間が単峰性とは限りません!!結局はローカルミニマムに陥ることになるんです(ここらへん最適化の専門用語です,すいません).
だからベストの状態への最短ルートを過去から取得できない以上過去の最適化にはなんの意味もないことになります.
「過去を最適化したからといって未来を最適化できるわけではない」
そしてここで付け足しです.数学的帰納法の考えを導入します.上の命題が成立つと仮定すると両辺に「+未来」して(?
「未来を最適化したからといってさらに先の未来を最適化できるわけではない」
つまり
「過去の最適化から最適化された未来を得ることは金輪際ない!」
じゃあどおすればいいんだって思うわけですが,そもそも人間にはきっと後悔しない人生なんて送る権利がはじめからないんだと思うわけです.
失敗したという情報から離れるように進むことしか出来ない.つまり失敗しなければ今よりよい場所へ向かうことはできない.
できるだけ良い思われる今を過ごすこと.人間に出来るのはそれくらいなのだと思います.
なんで自分がこんなことを考えているのかというと、昨日TEDで見た物理学者のせいです.
http://www.ted.com/talks/lang/jpn/clifford_stoll_on_everything.html
僕が一番この人を魅力的だろ感じた一言.
「ワオ! タイムマシンだ! なんてことだろう,昔に引き戻されました」
このひとは写真を見てそれをタイムマシンといった(比喩表現を用いたとは思えない本気の口調で,まるで今本当にタイムマシンを発明したかのように).
このインスピレーションは自分にとってとても印象的でした.感動的ですらありました.
なんてこった思ったのはこっちなんです.そんな発想今までしたことなかった.
もし過去へいって人生をやり直すことのできるタイムマシンが見つかったとしても,僕はそんなものは絶対に使いません.
下手したら過去に戻ってやりなおしたい瞬間が過ぎた後未来に戻るのにまた全ての自分の人生をやり直さなければならないからです.
そんなタイムマシンは絶対嫌です.
でもこのへんてこな頭の物理学者が発明したタイムマシンなら僕はいつでも乗っていいと思う.
過去はやり直すものではなく,懐かしむものなんです.
まー、勝てるとは思ってる。
でなきゃこんな賭けに出ないし、仲介だけして利ざや抜く方法だってあったわけだしね。
一人代理店じゃ満足出来なくてミニマム商社まで風呂敷広げたのにはそれなりの期待値があるわけで。
出資者との関係は役員だよ。正確に言えば息子が役員。メンバーの一人。息子が出資してるので、二億そのものは俺には弁済責任はない。
でもまぁ…ね、お察しの面はあるよね!この賭けに出て二億失ってもいいと思う人はいないよね!
体よくチューチューされてる感じは超あるよ。でも、素寒貧がでかい勝負にいくにはこれしかないわけで。
つーか、ビジネスとか言うけど
「分け前」みたいな話になるような野暮ったい取引なわけで。
手の内晒すなって人もいるけど、手の内なんか何も無いよ。金を引っ張って、ヒトを引っ張って、
一般的に見ればリスクは高いけれど個人的なコネクションのある相手と取引する。それだけ。
って思い切ったようなこと言ってるけど。
超怖いっすよね、しょんべんちびりそう。明日辞表だすんだけど、これが区切りになっちまうわけで。
泣きそうに怖いね、ホント怖い。だからここに書いてるわけですよ。
こわいこわいこいわこいわこわいこわいこわいこわいこわいこわい。
獣医になりたかった、俺が当時調べたこと。
俺が高校生の頃に調べたことなんで、今と多少の相場のズレはあるかも。
その前に、相場は↓な感じ。
たいていは社会保険は完備してない。(個人事業主ばっかりだから)
給料が安い代わりに社会保険が完備されていたりとか、交通費が出るとか、そんなこんなで手取にするとだいたいどこも20万ってところ。
4週6休とか5週8休くらい。
勤務時間は9~20時、残業代、時間外、休日出勤手当てっていう概念はない。
ボーナスは1.5ヶ月が二回とか。
分院長とかになるともっともらえるとかだけども。
勤め人してるうちは激務薄給は確実だから、将来開業することも考えてその相場が↓な感じ。
けっこうかかる。
まず土地と箱モノ、テナントにしろ、自宅改装にしろ、相当かかる。
駐車場がないとやりにくい商売だから、都内だと倍くらいかかるっぽい。
で、つぎ設備。
ヒトの個人病院よりかかるらしい。
そりゃあ内科と外科の道具揃えるんだから、たしかに。
で、仕事みたら一人じゃ無理。押さえる人が必要。なんで1人2人は雇うか、嫁にただ働きさせないと。
なんだかんだで、うまくやりくりしても3000~5000万ってところっぽい。
億かければ相当なものが建つみたいだけど。(田舎なら)
とりあえず1000万貯めて、のこり数千万は銀行で借りてって感じと想像。
ところで小児科が儲からないという話を聞いたけど、なら動物病院なんて儲かるわけがない。
ガキよりもは言葉通じないし、ガキよりも想像もしないような事故でやってくるし、ガキよりも薬に対して想定外の反応を示すし、薬も使いきれないから開封してちょっと使って廃棄ばっかだし・・・、滅多に使わない機械もたくさん揃えなきゃならんし・・・
年に20回しか使わない1000万の検査機器を買ったら、10年で元を取るとしても検査1回5万とらないとなんない。
自分が病院に払う治療費の3倍くらいしか飼い主は払わないと思う。
例えば俺が病院で3000円払うとしたら、ペットには9000円が限界。
病院に3000円払ってるということは、3割負担で3000円ってことで病院には1万円支払われてると一緒。
10000円-9000円=1000円 それだけ動物病院が売り上げが少ない。
じゃあどこで儲けてるの?
なんといっても、他の手術と数が段違い。
他の手術が数年に一度~一年に数件の手術ばかりなのに、この二つだけ年に百以上。
専用の道具を用意しても元が取れるし、それを軸にシフトを組んでも問題ないし。
やっぱり慣れた仕事=ノウハウが蓄積されてる=段取りがよくて事故も少ない
ってことで。
もう1つが、中間卸業。
安く買って高く売る、商売の基本だね。
ノミダニ、フィラリア予防、それだけ売ってたほうが治療するより割がいい。
とはいっても、なら最初からヒトの薬局やったほうが儲かるって話だけども。
そんで、予防接種。
ほとんどが技術料だもん。
ってわけで、道は二つなわけ。
大型病院路線:避妊去勢+薬売り+赤字覚悟でプラスα (たぶん開業資金5000万~)
ミニマム経営路線:避妊去勢+薬売り (たぶんペットショップに併設の小さな施設)
都市部じゃ動物病院が飽和だそうで、新規開業は田舎じゃないと無理らしい。
っということで、お金だけが人生じゃないけれど、最初っから儲かる気がしない商売に手をだすほどチャレンジャーじゃないので、獣医は諦めました。
追記
獣医学部を卒業し獣医師になった人の1/3は公務員就職するそうです。
現実みるとそうだよな。
好きな彼は、前の結婚で奥さんにパイプカットしてくれ、といわれしたそうです。
わたしは子供一人いますが、できたら兄弟をつくってあげたい、という気持ちと
彼とも家族になりたい、という野望もあって、子供を望んでいます。
そして、彼も、子供をのぞんでいます(彼は元奥さんとの間に1子おり、奥さんがひきとっています)。
が、パイプカットして数年たつと、再結合の手術をしたとしてもそもそも精子がつくられなくなってしまっていたり、
で、体外受精だと妊娠するのに1割くらいの確率で、しかも、毎回全身麻酔をしたり、副作用のある
卵子誘発剤とか使って、母体への心理的&肉体的負担が大きい、と最近
本を読んで知ってびびってしまっています・・・。
不妊治療している世のおかーさんたちは、むっちゃ苦労しているんだなぁ、と実感しました。
わたしは、子供ほしーし、子供産むならぜひ彼と再婚したい、と思っているけど、
子供をつくらないなら、再婚する必要はない気もします。(二人共稼ぎで事実婚でやっていけばいいし)
もう、36歳なので、ハイリスク出産で、ダウン症の子供が生まれる確率も年々高くなってくるので
産むなら早い方がいい、とわかっていますが、不妊治療の件でびびっていて、
正直、彼の元妻が「パイプカットしろ」といわなかったら、と愚痴も言いたくなってしまいますが、
彼と家族をやっていきたい、と思っているので、ミニマム3人でやって、経済的にも余裕がでてきたら
養子をもらうなりすればいいんですかね。
これは、人民により、利便性を担保しつつ我慢を強いない、人民と人民も最適ミニマム化を図るシステムと共に人民による人民の活用等、新たに構築することを主な人民テーマとします。今回の人民では人民を対象としますが、将来的な人民への適応も考慮し、スケール性の高いネットワーク構成を目指します。さらには、人民・人民・人民に関する新しい機能を加味したシステムと、それらに対応したサービスアプリケーションなど、多様なサービス基盤を作り上げる予定です。
これは、○○○○により、利便性を担保しつつ我慢を強いない、○○○○と○○○○も最適ミニマム化を図るシステムと共に○○○○による○○○○の活用等、新たに構築することを主な○○○○○○○○テーマとします。今回の○○○○では○○○○を対象としますが、将来的な○○○○○○○○への適応も考慮し、スケール性の高いネットワーク構成を目指します。さらには、○○○○・○○○○・○○○○に関する新しい機能を加味したシステムと、それらに対応したサービスアプリケーションなど、多様なサービス基盤を作り上げる予定です。
こういう文を大真面目に書くひと(だいぶ年上)がいるんだが、どうやって矯正すればいいんだろう。
まあ、アメリカ人のクレジットカードへの思い入れは凄まじいものがあるからな。
海外赴任中に取引先の月収20万円しかないデブに誘われて、嫌々遊びに行ってみたんだが、 まず家が凄い。
庭プール付きの100坪以上で4千万。俺ん家の写真をみせると「それはガレージだ、 貧乏人」という顔をする。
エコノミックアニマルはいつまでもウサギ小屋だな、みたいな。 絶対、その家のローン完済できない。
っつうか、それいわゆるサプライムローンじゃねえか。 で、デブがでかいピックアップトラックを見せる。
これはカードで買ったという、不良娘とデブ息子も このときばかりは親父を尊敬。
普段、目もあわせないらしいガキがダディクールとか言ってる。 郷ひろみか? 畜生、氏ね。
カード金利も凄い、18%どころじゃねえ。23%、26%とか冗談かよと思う。使うなつうか返済しろ。
で、やたらカードを持ってる。片っ端からカードを作ってデブ一家で使う。
給料の倍以上を通販で片っ端から購入。返済には回さない。アホか。
あらかたカードの枠を上限まで使って、「これはもう使えない」などと、カードの束を寄越す。バカめ。
で、デブ一家で海外旅行で豪遊までした後に、みんなでバーベキューを庭でやる。
「明日は職案いかなくちゃね」とかデブ息子が言う。おまえ、絶対働く気ないだろ?
デブ娘も「日本人は働くだけで楽しまないから可哀相」とか言う。こっち見んな、殺すぞ。
http://anond.hatelabo.jp/20081105135432
とか読んで思ってたんだけど、これ女医さんでも会計士さんでも弁護士でも保育士でも看護士でもOLでも自営業でも女子プロレスラーでも花屋さんでもお嫁さんでもスチュワーデスでも教師でも何でも成り立つんだよなぁ。そこに自分の好きな職業を入れて、好きな属性を入れれば。
属性がすきなの?それとも属性付けして一般化して語るのがすきなの?それとも属性で語らないと通じないと思ってるの?個人の話はしちゃいけないとかそういう勘違い?抑圧?どれ?モデル化してれば安心とかそういう思考?異常値とか特殊例とかどうやって処理するの?局値解かどうかどうやって判断するの?ローカルミニマムではないの?その評価はどうやってやってるの?
純粋に理解できないので教えてほしい。結局のところ一般化するなら「自分の彼女は○○で、△△というところが自分は好きだ。一般化すると○○は△△でよい」でおk?途中の論理の飛躍がすごすぎて気持ち悪いなぁ。一般化っつーよりは省略してるだけな感じもするけどさ。
…なので、ネットであらすじ読んだ程度だけど
こりゃ星新一「生活維持省」のパクリって言われてもしゃーないわ。
アイデアだけならパクリじゃないって言うのも、ここまで被ってると言い訳に使えない。
…が
星新一自体も、膨大な作品の中で「アイデア」を様々な表現で試行錯誤して楽しんでいるように、「生活維持省」も、あの展開であり、あのオチであり、
そもそもがショート・ショートだからこその価値があるんじゃなかろうか。
「イキガミ」は、そこまで練られていない・昇華されていないんじゃないか?
「イキガミ」が「生活維持省」をアイデア呼ばわりしたのは、逃げ口実云々よりも、その辺りにあるような気がする。
どうせならフレデリック・フォーサイスが「ジャッカル」を拒否したように、星新一ファンとしてはイキガミを拒否してほしい。
あんなん、「アイデアパクった」だけで無関係ダロ?別モンじゃん、と。
世の中には玉と石が入り混じったような作品の中の「ひとつの台詞」が「似通っている」っちゅーだけで相手を訴える器がミニマムサイズな人間もいるが、そんな安っぽいモンじゃないと思うんだよね。
ファンの欲目かもしれないけど
訳してみた。あらためて、和訳はものすごく時間を要する作業だということがわかった。もうしないと思う。
注意:以下は意訳、適当訳、稚拙訳であり、誤訳を多々含んでいることは確実であり、Joel氏が本当に以下のように述べているとは限りません。
なぜMicrosoft Officeファイルフォーマットはこんなにもややこしいのか (そしてその対処法を幾つか)
Tuesday, February 19, 2008
先週、MicrosoftはOfficeのバイナリフォーマットを公開したが、このフォーマットは殆ど正気でないように見える。Excel 97-2003ファイルフォーマットは349ページのPDFファイルだ。でも待って、それで全部じゃない。このドキュメントには次の面白いコメントが書いてある。
それぞれのExcelワークブックは1つのcompound fileに収められている
つまり、Excel 97-2003ファイルはOLE coumpound documentで、それは結局、1つのファイル内にあるファイルシステムである。これは、理解するのにあと9ページはスペックを読まなくちゃならないぐらいには十分に複雑だ。そしてこれらの「スペック」は、普通我々が考えるようなスペックというよりは、Cデータ構造みたいに見える。これ全体が階層的ファイルシステムなのだ。
もしあなたが週末を、Wordドキュメントをブログにインポートしたり、あなたの個人的な財務データからExcelフォーマットのスプレッドシートを生成するような気の利いたコードを書くのに使おうと思ってこれらのドキュメントを読み始めたなら、このスペックのややこしさと長さがそんな気をあっという間に失せさせるだろう。普通のプログラマはこのOfficeバイナリファイルフォーマットについて次のような結論を下す:
この4つ全てについて、きみは間違っている。ちょっとだけ掘り下げて、これらのファイルフォーマットがどうしてこんなに信じがたいくらいに複雑なのか、なぜMicrosoftの悪いプログラミングを反映しているのではないのか、そしてそれを回避するためにあなたに何ができるか、を明らかにしよう。
理解すべき最初のことは、これらのバイナリファイルフォーマットはちょっと違ったデザインゴールを持って設計されたということだ。たとえばHTMLとは。
これらはすごく古いコンピュータで速く処理できるようにデザインされた。Excel for Windowsの初期のバージョンでは、1MBのRAM、20MHz動作の80386が Excelを快適に走らせることができるための妥当なものだった。このファイルフォーマット内には、ファイルを素早く開いたり閉じたりするための最適化が沢山仕込まれている:
これはライブラリを使うことを想定して設計されている。もしあなたがバイナリをインポートするものを1から書き上げたいと思ったら、Windows Metafile Format (何か図を描く場合) や OLE Counpound Storage みたいなものをサポートしなくてはいけなくなる。もしあなたが Windows上でやるのなら、そうしたことをたいしたことのない作業にするためのライブラリのサポートが存在する... そういったフィーチャーを使うことは(元々)マイクロソフトチームのためのショートカットだった。でもあなたが全部を自分でスクラッチから書くなら、全部の作業を自分自身でやらなくてはいけない。
オフィスはcompound documentsに対して広範囲のサポートを持っている。例えば、スプレッドシートをWord文書に埋め込んだりできる。完璧なWordファイルフォーマットのparserは、同じように、埋め込まれたスプレッドシートで何かインテリジェントなことが出来るべきだろう。
それは相互協調性(interoperability)を意識してデザインされてはいない。仮定されていたのは、WordファイルフォーマットはWordからのみ読み書きされなくてはいけない、ということで、それは当時においては十分に合理的なものだった。これは、Wordチームのプログラマがファイルフォーマットをどう変更するかについて決定を行う場合にはいつでも、彼らが気にするのは (a)何が高速か (b)Wordのコードベースにおいて最小の行数になるのは何か、だったことを意味する。SGMLやHTML-interchangeableといった標準ファイルフォーマットのようなアイデアは、最初にインターネットがドキュメントの相互交換を実現するまで現実のものにはならなかった。それはOfficeバイナリフォーマットが最初に考案されてから10年後のことだったのだ。ドキュメントを交換するのにインポーターとエクスポーターを使うことができるという仮定が常にあった。実際Wordは簡便な交換のために設計されたRTFと呼ばれるフォーマットを持っており、そのフォーマットは殆ど最初のころからあり、今も100%サポートされている。
それはアプリケーションの全ての複雑さを反映していなくてはいけない。 全部のチェックボックス、全部のフォーマッティングオプション、そして全部の、Microsoft Officeのフィーチャーは、ファイルフォーマットのどこかで叙述されていなくてはいけない。Wordのパラグラフメニューにある、"Keep With Next" と呼ばれるチェックボックス、これはパラグラフを、その後ろのパラグラフと同じページに置くのに必要な場合は、次のページに移動させるもの(?)だが、これもファイルフォーマットの中に無くてはいけない。そしてこれはつまり、あなたがWordドキュメントを正しく読み込める完璧なWordクローンを実装したいなら、そういったフィーチャーを実装しなくてはいけないということだ。Wordドキュメントをロードする競争力のあるワードプロセッサを作っているのなら、ファイルフォーマットからそのビットをロードするコードを書くのには1分しかかからないかもしれないが、ページのレイアウトアルゴリズムをそれに対応させるのに何週間もかかるかもしれない。もしあなたがそうしない場合、カスタマーがあなたのクローンでWordファイルを読み込んだら、全部のページがぐちゃぐちゃになってしまうだろう。
それはアプリケーションの歴史を反映していなくてはいけない。 このファイルフォーマットに見られる多くの複雑さは、古く、複雑で、愛されず、めったに使われないフィーチャーを反映している。それらはファイルフォーマットのなかに後方互換性のためにまだあり、そしてMicrosoftにとってその辺りのコードを残しておくことには何らコストはかからない。しかしあなたがこれらのファイルフォーマットをparseおよびwriteする一貫した完全な仕事をしたいと思うなら、Microsoftのインターンが15年前にやったのと同じことを全て、またやらなくてはいけない。要点は、何千人年の仕事が今のWordやExcelには費やされてきたのであり、これらのアプリケーションの完璧なクローンを作りたいと本当に欲するなら、あなたは何千人年を費やさなくてはならないことになる、ということだ。ファイルフォーマットは単に、アプリケーションがサポートする全てのフィーチャーの簡潔なサマリーなのだ。
手始めに、小さな例を一つ、深く見てみよう。Excelのワークシートは色々なタイプのBIFFレコードの集まったものだ。私はスペックの一番最初のBIFFを見てみたい。1904と呼ばれるレコードだ。
Excelファイルフォーマット仕様のこのレコードについての記述は非常に曖昧なものだ。そこでは単に、1904レコードが「1904日付システムが使われているかどうか」を示すレコードだ、と述べているだけだ。ああ、使えない仕様書の典型的な一例だ。あなたがExcelファイルフォーマットで何かしている開発者で、そしてファイルフォーマット仕様にこう書いてあるのを見つけたなら、あなたがMiocrosoftは何かを隠しているのだと結論付けたとしても無理はない。この情報の断片は十分な情報をあなたに与えはしない。あなたには幾ばくか外部の情報が必要で、私は今ここで、それを提供しよう。Excelワークシートには、2種類ある。日付のエポックが1900/1/1のもの(これには、Lotus 1-2-3 との互換性のために故意に入れられた閏年に関するバグがあるが、ここでそれについて述べるのは退屈すぎる)、および、1904/1/1のものだ。Excelは両方をサポートしているが、それはExcelの最初のバージョンはMac版であり、それは単に簡単だったという理由でOSのエポックを使っていて、しかしWindows版のExcelは1-2-3のファイルをインポートできなくてはならず、そしてそれは1900/1/1をエポックとして採用していたからだ。あなたが涙ぐむのも無理はない。歴史のどの時点においても、プログラマが正しいことをしなかった、という時はないのだが、しかし現実にあなたが手にしているものはこれなのだ。
1900と1904のファイルタイプは両方とも世の中には広く存在しており、それは通常、ファイルがWindowsとMacのどちらで作られたかによる。一方のタイプから他方のタイプへ黙って変換するのはIntegrity的に問題があるので、Excelはファイルタイプを変換することをしない。Excelファイルをparseするためには、あなたは両方を扱わなくてはならない。それはファイルからこのbitをロードするだけの問題ではなく、あなたが日付表示と両方のエポックを扱うparsingのコードまで書き直さなくてはいけないということを意味する。実装には何日かかかるだろうと私は思う。
実際、あなたがExcelクローンの作業をするなら、日付の扱いについて、あらゆる種類の微妙なディティールを発見することになるだろう。Excelは日付の値をいつ変換するのか? 表示の整形はどうやっているのか? なぜ1/31は今年の January 31と翻訳され、また一方で1/50はJanuary 1st, 1950と翻訳されるのか? Excelのソースコードと同じだけの量のドキュメントを書かないがぎり、振る舞いに関しての微妙なビットを全て完全に記述することはできない。
そしてこのレコードは、あなたが扱う何百もあるBIFFレコードの最初の1つに過ぎず、しかももっとも単純なものなのだ。他のレコードの殆どは、より多くのプログラマーを涙に暮れさせるぐらいには十分複雑だ。
唯一導き得る結論はこれだ。
MicrosoftがMicrosoftとOfficeのファイルフォーマットをリリースしたことは大変有用なことだが、しかしそれでOfficeファイルフォーマットをインポートしたり保存したりするのが楽になるということは全く無さそうだ。それらは狂気じみて複雑で、リッチなアプリケーションで、そしてあなたは人気のある20%の部分を実装して80%の人々を幸せにするというくらいのことしかできない。バイナリファイル仕様によってなされるのは、多く見積もっても、著しく複雑なシステムのリバースエンジニアリングにかかる時間を何分か削減するくらいだろう。
オーケー, 私はいくつか回避法を教えると約束した。良いニュースは、殆どの良く知られたアプリケーションにとって、Officeバイナリファイルフォーマットを読み書きしようと試みることは誤った決定だということだ。あなたが真剣に考えなくてはいけない代案が2つある。Officeそのものにそれをやらせるか、書き込むのが簡単なファイルフォーマットを使うかだ。
ヘビーな仕事はOfficeにやらせよう。WordとExcelは実に完全なオブジェクトモデルを持っており、COMオートメーションの手段が可能で、これであなたは何でもプログラムでやるようにできる。多くのシチュエーションでは、Office内のコードを再利用するほうがそれを実装しようとするよりも良い。ここにいくつか例がある。
この手のアプローチは、全ての種類の一般的なOfficeタイプについての、サーバ上であなたがやりたいと思うであろうアプリケーションで、うまくいくだろう。例えば:
これらのケースの全てにおいて、Officeオブジェクトにインタラクティブ動作でないことを教えてやる方法があり、だから表示をアップデートするのに煩わされたり、ユーザに入力を促す必要はない。ところで、このようなやりかたでいく場合には、gotchas(?)がいくつかあり、そしてそれはMicrosoftは公式にサポートしているものではない。だからあなたがそれを始める前にはKnowledge baseの記事を読むように。
書き込むファイルにはもっとシンプルなフォーマットを使いなさい。単にOfficeドキュメントをプログラムで生成したいなら、殆どいつでもOfficeバイナリフォーマットよりももっと良いフォーマット、WordやExcelでも問題なく開くことができるようなフォーマットが存在する。
いずれにせよ、全てのOfficeファイルを完全に読み書きできるような、文字通りのOffice競合製品を作ろうとする(その場合には、何千年もの作業があなたに予約される) のでない限り、Officeバイナリフォーマットの読み書きをするというのは、何であれあなたが解決しようとしている問題を解決するためのもっとも労働集約的な方法だ。