飲み会

 なんか新人歓迎会につっこまれて私の歓迎会も今日行われました。
 飲みまくりですよ。
 今日の酒果・生中3 生大1 いいちこ720ml

 プロは道具を選ばないといいます。プロフェッショナルともなれば、道具の弱点をスキルで克服できるだろうと言うことです。私は、これは確かにそういうこともあると思います。プロのピアニストは例えそれがクラビノーバ等のピアノシミュレータであっても、何の文句も言わず、クラビノーバが奏でられる限界点以上の曲は弾かずに、それで可能な最高の結果を出そうとするでしょう。それでも素人のピアニストよりはずっとすばらしく聞こえるはずです。クラビノーバは叩けば鳴るオモチャピアノとは違い、できる限りピアノらしく振舞うようにできていますから。鍵の叩き方一つで鳴り方がどんどん変わります。

 プロは道具を選ばない。むしろ、道具の良さを引き出すのがプロであると考えたいものです。そもそもプロとはそれを仕事にして金を稼いでいるという認識が普通ですが、この場合は玄人であればプロフェッショナルという認識で結構です。道具にこだわりたくなるのも玄人ですが、道具に文句を言って何もできなくなるのはただのクズです。その道具が故障でもしていれば別ですが…

 ただ、こうも思います。プロは道具を選ばないといいますが、ビギナーは道具に育てられると考えられないかと。ビギナー、すなわち初心者には良い道具を与えて育てるべきだと思います。それは贅沢とは違いまして、道具の悪い癖を覚えて欲しくないからです。それに、道具のせいで上達を遅らせるわけにはいきません。スキルの向上にスピードはとても大切です。早く覚えて、早く次のステップへ。早く、早く。パソコンが2台、ハブ、ルータ、スニファアプリケーション等が無いとネットワークのネの字も学べない。本を読んだって実際にやらないとダメ。失敗の重さを背負う、それが人間を鍛えると誰かが言っていました。でも試して何度も失敗して重ねる経験は、道具が早く結果を出してくれないと困ります。

 そう思っているからこそ、子供が「?をやりたい」と言い出して、それに「まだ早い。そんな事しなくてもいい」と返して何もしない親が嫌いです。私の両親は幸いにも、話のわかる人でしたから、何をするにも小学生の頃からパッパとできました。もっとも、パソコンを手に入れるのは流石に時間も手間もかかりましたが…。そもそも私がパソコンに手を出したのは、小学三年生の頃、親父がゴルフでとってきたMSX2というテレビにつないで使うパソコンでBASICプログラミングをはじめてからでした。その頃はNECのPC98でMS-DOSにWindows3.1を乗せて動かすのが普通で、Pentiumなんてものすら無かったわけですが、私は何故かMacが使いたくてたまりませんでした。数年後PowerMacが登場しましたが、この間何年も親と相談し、中学1年の時(1995)にMacintosh Performer6210という、当時のマルチメディアパソコンをゲット。ここから、パソコンとの付き合いが本格化しました。両親は心配したことでしょう、学業ほったらかしてパソコンと向き合う日々でしたから。(それが大学入学しても続いて、現在に至ります)
 そういえばアマチュア無線の免許を取ると言った時には、何故か反対されました。理由は、そんなものよくわからないし、とっても意味があるとは思えないから。でも、取って困る免許ってあるんでしょうか?取得には僅かながらお金がかかるから反対されたのかな。車の免許なんて教習所で30万円かかりますし、知らない世界を恐れたのかもしれません。私は親が知らない世界へどんどん行ってしまう子供です。今でも子供です。

20050730.jpg

 IntelMac登場により、MacOSX for Intel には Rosettaという技術が組み込まれました。
 Rosetta(ロゼッタ)を簡単に説明すると、PowerPC搭載Macのエミュレータです。PowerPCの実行バイナリを逐次x86のバイナリコードに変換してくれるプロセス(サービス)です。
 例えば、PowerPC G4にはAltiVecという超超高速ベクトル演算ユニットが搭載されています。当然、専用のAPIで独特なコードになる訳ですが、これは変換してくれません。というのも、CPU独自の機能にあたるものを使うプログラムは別のCPUで動く訳が無いですから。これはプログラマが出来るだけ高速に処理されるようにSSE等のPentium4独特の高速コードへ書き換えなければなりません(もっとも、AltiVecほど強力ではないかもしれませんが)。つまり、CPUのネイティブコードではなくMacOSXのAPIを使用しているアプリケーション程、高速に安定動作させられるのです。PowerPCのネイティブコードが多いアプリケーションは遅くなります。
 OpenGLのAPI等もうまく高速に変換されます。しかしながら、FFT(高速フーリエ変換)やレイトレーシング、MPEGエンコード等、高速な演算を連続して行う必要のあるアプリケーションはハングする可能性があります。
 また、MacOS8やMacOS9のアプリケーションも動かす事は出来ません。Macの世界では、MacOSX以前のMacOS向けアプリケーションをClassicと呼びます。Classicで使われているライブラリ等を、MacOSXに用意されているネイティブなものに書き換えて、Classicとは別のコンパイルを行うとCarbonというアプリケーションになります。これはMacOSXでネイティブに動作するアプリケーションです。
 MacOSXにはCarbon用APIと、OSXネイティブフレームワークであるCocoa用API、Java-Cocoa用API(OSXではJavaもネイティブコードです)、そしてCoreFoundationというDarwin(MacOSXに使われているオープンソースのBSD互換OS)のAPIが基礎として存在します。それぞれのAPIは、一つのソースでオブジェクトや構造体を共有しながら特に変換作業もなく使う事が可能です。CoreFoundationは、Cocoa、そしてCarbonどちらからも利用でき、どちらかのアプリケーションとなります。
 つまり、特殊でないJavaコードのCocoaアプリか、CarbonかCocoaであればRosettaでエミュレートされるわけです。

 Rosettaでは、カーネルモジュールや、永続的に使用される環境設定の追加パネル等は動かせません。
 Rosettaでは、Rosetta内で生まれたプロセスのメモリ空間はビッグエンディアンにしてくれますが、プロセス間通信やRosetta外との入出力は全てリトルエンディアンとなります。従って、Rosettaで動作させるアプリが書いたファイルはバイトが逆順になっています。これが一番の問題点で、Macデベロッパはエンディアン問題に数年間悩まされるものと考えられます。プロセス間通信の煩わしさを無くすため、無駄なマルチプロセスはあまり用いられなくなるかもしれません。マルチスレッドにすれば良いだけですから。