はてなキーワード: ネイティとは
○ご飯
朝:なし。昼:ベーコンエッグ。人参の炒め物。夜:寿司。間食:プリン。
○調子
むきゅーはややー。お仕事はじゅうれんきゅー五日目。
やられた!!!!!
作者お得意のドエスな女性の肉体や洋服にまつわるクドイ描写に隠された絶妙なロジックには参った。
前作や前前作、シリーズ違いの他の作品などで、ずーーっとドエスな女性の太ももや足や胸や制服の描写を特に意味もなくし続けていたのは、この明かされて見たらなんてことないシンプルなロジックとトリックを隠すためのカモフラージュだったんだろう。
これが一般的な他の作者だった場合、間違いなく真相へはあっさりたどり着けただろう。
けれど相沢沙呼だけは違う、相沢沙呼の女体描写に意味があるなんて思ってもなかった。
これが叙述トリックやサプライズ系のどんでん返しなら気付けたのだろうけど、犯人特定のロジックと物理トリックに使われると流石にやられた。
途中の多重解決じみたパートも読んでいて楽しいし、シリーズキャラたちの魅力的なシーン(特に今回は満を辞しての登場となる小西さん)も数多く、早く続きが読みたい。
若干ハーレムもののように取り巻きの女性キャラが増えてきているが、主人公の気持ちが一途なのも読んでいて安心できた。(欲情はしてるけど、気持ちはね)
○グラブル
次はどの武器を集めようかなあ。
○朝食:ハヤシライス
○昼食:なし
○調子
はややー。
お休みですので、掃除したり、ゲームしたり、散歩したりしていました。
これで、今月の中頃ぐらいからプレイしていた、ケムコADVのシリーズは一通りプレイし終えた。
シリーズ外の文章を読む作品もあるみたいだけど、アンドロイド端末は持ってないので、ここら辺で一旦区切りとしよう。
来週もお仕事頑張るぞいや。
今月は、東京出張とかがあるので、体を壊さないように気をつけないとなあ。
●スイッチ
暴露モード、エキストラシナリオ、家庭用追加シナリオ、全てクリア。
ケムコADVシリーズの中でも、なんならADVジャンルのオールタイムベスト、いや、ゲームとしてのオールタイムベスト級の超超超超面白い作品だった。
昨日も書いたけど、とにかくあのキャラの「狂気」が凄まじかった。
要所要所の「滾る!」展開は、過去作品も負けてないと思うけども、
この作品はこの滾りに「狂気」が味付けされていて、そこがもう、今まで味わったことがない、すごい面白さになってる。
「え? ここから踏ん張るの? がんばえー、まけるなー、がんばえー!」
と、キャラクタの頭の良さに滾ることが多いし、
それらと同じぐらい
「え? すごいけど、こいつ狂ってる…… こわい……」
と思わせられるのが、もうなんか途轍もなく面白かった。
何がすごいって、この「滾る展開」が合計で五回ぐらいあって、
毎回毎回、その狂気に底知れなさを感じるところ。
クリア終えた今でも、底が見えないあのキャラはとにかくすごかった。
ただ、5本目のエキストラシナリオと、暴露モードでのオチを、ネットのレビューで過去作品のキャラが出るぞ、と読んでいたので知っていたせいで、
いや、こんなのレビューを読む僕が悪いし、僕自身ネタバレをガンガンするタイプだから仕方ないんだけど、
という段階で、どの作品の誰が登場するかわかっちゃうし、中盤のあのキャラの異能の手続きが明らかになったところで、もう時系列含めてこの謎解きは一直線な感じだよなあ。
繰り返しになるけど、だからそこをばらすレビューはよくない、とかそういう話じゃなくて、
○ヒューマン・リソース・マシーン
面白いDLソフトはないかなーとストアを探して見つけた、パズルゲーム。
ノベルゲームが続いたのでゲームゲームしたのがプレイしたかったんだけど、
イメージ的には、Scratchをよりシンプルにした感じかな?
今、16面だけど、if文の判定式に否定を使えないのが非常に面倒臭い、けど中々ハマる。
さすがに、それなりにプログラミングの仕事をしているので、ただクリアするだけならそこまで悩まずにできるけど、
ステップ数を縮めたりするのはかんり苦労しそう。
い、いや、その、ほら、業務の世界は、その、なんていうの、読みやすさ? 大事やん? その、なんというか、ほら、ね? おれおれコードでおれおれしたロジック読むの嫌じゃん? だからそのシンプルにしか書かない的な?
ごめんなさい、言い訳だね、まずは普通にクリアすることを目指して頑張るぞいやー。
○ポッ拳
アミーボとデイリー。
●3DS
○ポケとる
英語ネイティブはこう言う、ネイティブはこう言うゆって英語本出してる某セインがいるけど、
たとえば、タクシー運転手が行き先を尋ねる時に
ネイティブな日本語が「どちらへ?」とか「どちらへ行かれますか?」だとしても、
日本人相手に「おまえ、どこいく?」って日本語でいってくれるだけありがたいじゃない。
英語だって「where to?」か、「where are you going?」がネイティブな英語で、
「where?」がネイティブじゃない英語になるん。。。かな、わからんけど。
それでも「どこへ行きたいですか?」の意味を伝わるきっかけにはなるじゃない。
英語が通じるかどうかを放置して、ネイティブかどうかを押しつけるって、
どういうノリなんですかね。
日本語ネイティブだって、人によって違うはず。方言が混じればなおさら。
・発音について
http://diamond.jp/articles/-/12268
めちゃくちゃに見えて実は有効そうです。
英語圏のネイティブでも"th"の音を省略したり他の音に置き換えたりしてる地方はあります。例えば、確かロンドンの労働者階級の人の言葉だったか['em](them)みたいなのはハリー・ポッターの登場人物ハグリットが連発してます。ハワイのピジンと呼ばれる方言みたいなものでは"the"は"da"になります。
少し外れるけれど、インド人の英語は訛りがきついことで有名。それでも通じる英語です。
以上のことから、とりあえず話すだけなら訛りなんてのはさほど気にしなくて良いのです。外国語学部英語科の学生でもカタカナ発音してる奴はいます。そしてネイティブの先生の英語onlyな講義についていけています。
勿論こんなことをいつまでもやっていては、本当に音を聞き分けられるようにはならないだろうとは思いますが。
一番良いのは、学習初期にある程度発音を勉強してしまうことです。学習に掛かるコストはいつ始めても変わらないので。お手軽なところでは英語耳が役に立ちます。
本当に英語を勉強したい方には、やはりいつかは音韻論を齧ってみることをお勧めします。
・文法について
http://diamond.jp/articles/-/12269
要約:SVOだけ覚えればOK
これはほとんど賛成。
とりあえずは、5文型と時制さえ覚えれば良いというのが私の持論です。
私は高校時代にNEXT STAGEという参考書を買わされた口ですが、そいつは今でも折れ目なし書き込みなしの綺麗な状態を保っています。単語帳も嫌いでほとんどやりませんでした。ただ高校時代は毎日英語の授業があって英語を読まざるを得ませんでした。それで、卒業時点でTOEIC600点程度の英語力は確保できました。
高校レベルまでの辞書片手に新聞読める程度の英語力であれば、参考書と睨めっこしてる暇があるなら実際の新聞なり教科書なり試験の問題文なりを読むほうが遙かに勉強になります。ほとんどの人は英語を読める(話せる)ようになる為に勉強しているのであって、英語学の学者になる為でも文法用語という日本語を覚える為でもないからです。
ただし、参考書というのは参考にするには(当たり前ですが)かなり役に立ちます。知らない言い回しには良く出くわしますが、そういう時にこそ素晴らしい索引のついた参考書が一冊あると便利です。
・総括
とりあえず勉強を始めてみても裏目に出ることは(あまり)ない。得るものが沢山あるのは確か。
最後に。
英語の勉強に煮詰まったら、ロシア語やフランス語やドイツ語やスペイン語など、とにかく他の言葉をほんの少し齧ってみることをお勧めします。
英語の簡単さは神。
http://diamond.jp/articles/-/12268
ネイティヴに通じる英語になる 「たった6個の正しい発音」 ほとんどの日本人が間違えている「6個の発音」|30分で英語が話せる|ダイヤモンド・オンライン
まず、ダイヤモンドにこの程度の英会話の記事が載っているという点で糞。
次に、ダイヤモンドの読者がこの程度の英会話の記事でマンセーしてるという点で糞。
そして、大してダイヤモンドの記事を読まない人間もブコメで適当にマンセーしてるという点で糞。
ダイヤモンドを読むような年齢でこの程度の英会話記事をありがたがってる時点で、程度が知れるから英会話に手を出すのはやめときなww
まず英語をカタカナに転写してる時点で糞なんだけど「わかりやすい!www」「素晴らしい!ww」とかいうマンセーっぷりwww
こいつらがまともに英語話せることはないんだろうなあと思うと優越感が湧いてくるんですがwww
ダイヤモンドってある程度経済に疎い人間が背伸びして読むものかと思ってたけど、本格的に厨房向けに路線変更したのかな?www
まあ、掲載元がどうあれ、あれをマンセーしてる時点で英語話せるようになることはないからww日本に閉じこもってろってジャップwww
(某所でたまたま見かけた日記を翻訳したものです。支障があったら消します)
こんにちは、みなさん。
ここを利用してしばらく経つけれど、私がどういう人なのか、言ってなかったので、生い立ちについて書きます。
まず最初に言っておきたいのは、私が日系アメリカ人ということです。でも、そう言えるのかどうか。というのも、私はアメリカで生まれたわけじゃなくて、国籍は日本だからです。私の姉と私は岡山で生まれました。そしてそのあと、東京に移って、6歳までそこにいました。
私の両親はしばしばアメリカに旅行したこともあって、私たち姉妹はアメリカンスクールに入れられました。そして私が6歳の時に、私たち家族はアメリカに永住するために移り、それ以後は私はアメリカの学校で教育を受けました。今はアメリカの大学に通っています。
どうして両親が私に日本語を教えなかったか、きっと疑問に思われるでしょう。両親はもちろんそうしようとしました。でも、身につかなかったのです。私たちが住んだ州には日本人はほとんどいませんでした。学校では私たち姉妹だけが日本人でした。私の友達にはアメリカ人以外には中国人や韓国人がいました。でも、私と同年齢くらいの日本人といえば、姉しかいなかったのです。
私たち以外には日本人はいなかったので、私たちは次第に日本語を話さなくなりました。私たちが内気だったこともあって、アメリカ人の友達に日本語で話しかけたりするようなこともありませんでした。それで、私は英語は話せますが、日本語は話せないのです。
私が住んでいるこの州は素晴らしいところだと思いますが、州内の大学に進んだ後、私はひどく孤独になりました。高校生までは私は誰とでも友達になりましたから、自分が学校でただひとりの日本人だということを意識しませんでした。でも、大学では学生たちは彼らの集団ごとに固まる傾向があります。中国人の友達は中国人ですし、アメリカ人の友達はアメリカ人です。もちろん例外はありますが、ごくわづかです。
私の大学には百人もの中国からの交換留学生がいます。韓国から来ている人たちもいます。彼らは素晴らしい人たちですが、私は当然ながら日本人の学生も来ていることを期待しました。でも一人もいませんでした。
私には親切な中国人の友達がいますが、私がいたとしても、彼らはつい中国語で話してしまうのです。何を言っているのか分からないので、私は泣きたくなってしまいます。時々、むしろまったくひとりきりの方がどれだけ楽かと思ってしまいます。
ハワイやカリフォルニアだったら、日本人も日系人もたくさんいるので、そういう孤独は感じないのでしょうが、私の住んでいる州ではそういうわけにはいきません。家族がここにいるのでこの州が好きです。日本であろうが、アメリカであろうが、家族がいる場所が私の故郷です。結局、自分を何と呼ぶべきなのか、私にもわからないのです。
日本語をネイティヴのように話せないとしても、私は日本人でしょうか。
私自身まったくわかりません。
私は自分が Japanese であることを誇りに思っています。でも、日本語を話せないこと、知らないことが無数にあることをとても恥ずかしく思っています。
もちろん,英語の授業の時,ですよ.
普段,友だちと喋るときに
いちいちネイティヴっぽく発音してたら
伝わらないでしょーが!!
ttp://sofusha.moe-nifty.com/series_02/2010/03/post-eac7.html
たとえば『マトリックス』では、裏切り者、つまり悪役側のサイファーという人物がこんな言葉を口にします。
「俺はな、このステーキが存在しないことは知ってるんだよ。口に入れると、マトリックスが俺の脳味噌に、これが肉汁たっぷりで最高にうまいと教えてくれるんだってこともな。9年かかって俺がなにを理解したか、アンタわかるか? 無知の至福さ。」
現実よりも仮想現実を選択するという判断が「悪役」のものであるということ。この描写が象徴するように、「現実>仮想」あるいは「三次元>二次元」という価値観は、もはやハリウッド映画の強迫観念ですね。虚構産業の自浄作用のようなものでしょうか。まあそれはともかく。
『アバター』で、主人公ジェイクは、あらゆるハリウッド映画的伝統に逆らって、なんと仮想現実に生きることを選択します。この部分、あまりにもあっさりと描かれているので気づかれにくいようですが、これは二重の意味で画期的なことです。
前衛映画ではありません。超娯楽大作の主人公が、地球(=現実世界)に還らず、仮想空間(パンドラ)のヒロインと生きることを選ぶということ。なんともオタク的な「ネイティリは俺の嫁」宣言です。すいませんわかりにくかったですね。これは一般には、漫画やアニメのキャラクターにリアルな恋愛感情を喚起されてしまった漢(おとこ)たちが口にすべきテンプレートとされています。
さらにいえば、キャメロンはこの映画で「もう現実とか仮想とか区別しなくてもよくね?」と提案しているようにもとれます。アメリカでは本作を観た観客のなかに、「パンドラから帰りたくない」という思いが高じて、うつ状態におちいった人々がすくなくなかったと報じられています。もしこれが事実なら、キャメロンの目論見は見事に当たったといえるでしょう。なにしろハリウッド映画に連綿と受けつがれてきたプラトニズム(イデア>現実>虚構)の伝統を、根底からくつがえしちゃったんですから。
16072154年ジョン・スミスジェイク・サリーをのせた船は緑あふれる「新世界」,北アメリカ衛星パンドラに到着した。入植者たちはラトクリフ総督クオリッチ大佐の指揮のもと金アンオブタニウム を掘っていた。ジョン・スミスジェイク・サリーは新たな領域の探索を開始し,ポカンホンタスネイティリに出会う。はじめは彼を信じていなかった彼女も,グランドマザー・ウィロー魂の木のメッセージを受けて,しだいに動揺を克服する。ふたりは一緒にすごし,ポカホンタスネイティリは,ジョンジェイクにすべての生命は尊く,自然が生命の輪につながっていることを教えた。その他にも彼女は狩りや,作物の手入れドラゴンの飼い慣らし方や,文化について教えた。彼女の父はパウアタン首長族長のエイチュカンで,彼女は真面目で偉大な戦士,ココアムツーテイと結婚することになっていたが,彼女はそれを望んでいなかった。そのころ入植地では,原住民は野蛮な未開人だと考えている人々が,金アンオブタニウム のために原住民への攻撃を計画していた。ココアムツーテイは嫉妬心からジョンジェイクを殺そうとするが,後に入植者たちに殺されてしまう。入植者たちが攻撃の準備をすすめていたことで,ジョンジェイクはインディアンナヴィたちに批難され,死刑を宣告される。処刑の寸前で入植者たちが現れる。パウアタン首長族長エイチュカンは殺されかけ,ラトクリフ総督クオリッチ大佐はジョンジェイクを負傷させるが,ラトクリフ総督クオリッチ大佐は拘束される。ポカホンタスネイティリは命を危険にさらしながらジョンジェイクを救う。ジョンジェイクとポカホンタスはネイティリついに絆で結ばれる。ふたつの文化は違いを乗り越える。
その辺りの是非を語るつもりはないし
語ることが出来るほどの知識も経験も無いわけだが
昨日、それに関連して面白い出来事があった。
Aさんは小学校から英語を教え(代わりに算数と理科と国語の時間を削る)
大学に入学するまでにはネイティヴスピーカーと英語で会話できる
というレベルまで国が指導するよう教育改革するべきだ! という意見の持ち主。
このAさんと、昨日食事をする機会がありレストランに足を運んだのだが
比較的若いバイトのウェイターが注文を復唱した際、
「以上でよろしかったでしょうか?」
という、聞く人が聞けばパブロフの犬の如く"噛み付く"言葉を口にしてしまったのだ。
Aさんはウェイターが下がった後に、案の定言葉の乱れについて嘆いていたわけだが
そんなことはこの際どうでもよく、この「以上でよろしかったでしょうか?」
という言い回しは案外興味深いと思う。
「以上でよろしかったでしょうか?」
という言葉に違和感を感じる人は、"かった"という部分に反応して
「よろしいでしょうか」に訂正してほしいと感じることが多いようだ。
だが、"かった"という過去形を持ち出すのは、英語の感覚から考えると結構自然な発想で、
過去形という時制をして、現在のことであっても相手との距離感等をかもし出す事で
丁寧婉曲の表現として提示することが出来る。
現代では、どんどんと英語圏の文化が日常に取り入れられているし
そういうものに敏感な若い人達ならば無意識的に敬語表現の一環として
「よろしかったでしょうか」と口に出してしまうのは必然的なことじゃないかと思ったりした。
そう考えてみると他にもいろいろと思い当たる節があって
「私的には~」→「I guess」
「ていうか」→「or(should I say )」
みたいに、若者言葉というのは英語の感覚を反映していることが多いように感じる。
恐らく今以上に日本語は乱れていくと思う。
lang-8 を利用してそろそろ一年になるが、いろいろコツが掴めてきたので書いておく。
1.長文アウト
添削する側になれば分かるが、長文は添削するのに手間がかかる。よって敬遠される。たくさん添削されるためには、長文は避けたほうがいい。
2.短文アウト
と言って、短文では大した内容のことも書けず、よって英語力も身につきにくい。挨拶ばかりしていてもどうしようもないんだ。
3.日本人は親切
アクセス数や被添削数の上位を見ればわかるが、日本語で書いている外国人ほど上位に来やすい。つまり日本人は積極的に添削をしてあげているということだ。もともと日本で始まったサービスなので日本人比率が高いということもあるが、最近は英語話者の方が比率としては増えているらしいが、英語話者は面倒くさがりだ。英語ばかりでなく日本語で記事をたまに書けばすぐに分かるがアクセス数が全然違う。
効率よく相互添削するためには、他人を添削してあげた記録がない人は避けよう。
添削もされておらずコメントもついていない記事はその書かれた言語のネイティヴスピーカーのページにはトップ表示される。それを見て、多くの人は添削されていない記事を添削してあげるわけだ。しかし添削されていないにもかかわらずコメントをつけると、少なくとも一件は「添削された」表示になってトップ表示の順位が下がってしまう。
そうなるとより「添削されにくく」なってしまう。未添削の記事にコメントをつけるのはよって迷惑行為である。
5.礼儀知らずは避けろ
添削されてお礼コメントもない人はそもそも相互添削もしてくれない。時間のリソースは有限なので、そういう人は無視して避けるのが吉。
6.議論は避けろ
相互添削が目的なのだから書かれている内容は極端にいえばどうでもいいのだ。とは言っても、もちろん何を書いてもいいというわけでもなく、議論になりそうなテーマは避けよう。
訳してみた。あらためて、和訳はものすごく時間を要する作業だということがわかった。もうしないと思う。
注意:以下は意訳、適当訳、稚拙訳であり、誤訳を多々含んでいることは確実であり、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バイナリフォーマットの読み書きをするというのは、何であれあなたが解決しようとしている問題を解決するためのもっとも労働集約的な方法だ。
大量のデータを処理するプログラム(プログラム自体が大規模じゃない)なら別にJavaでもいいじゃない、って言ったら何かポカーンって顔されちゃった。
いつもおいらC++賛美してるってのもあるんだろうけれど……。
何か馬鹿扱いされそうで不安で、その場で言えなかったから増田に投稿。
Javaは中間コード、C++はネイティヴコードってことは、JavaとC++との差はVMにあるはず。ということは、実行において、VMがネイティヴコードに翻訳する分の遅延とVMそれ自体の分のメモリ消費が上積みされる分、Javaが不利になっているはず。
大量のデータを処理するプログラムは、データはVMには直接は関係しないし、VMも最近は賢いらしいからメモリにネイティヴコード展開したらそれを出来る限り使い回すだろうから、よほど複雑な処理でない限り、データを処理している間はC++と(変換された機械語の優劣は除いて)差は殆ど無いはず。
故に、処理するデータが膨大になればなるほど(ただしメモリ資源が貴重になるほどひどい環境や処理でないことを仮定する)コード変換の時間なんかの割合が相対的に小さなものになっていって、その結果Javaの実行効率は良くなると思う。逆に、極めて少ない処理の場合、Javaはアホの子になっちゃうと思う。
でも本当の所は知らないので、えろい人教えて下さい。