warning: Creating default object from empty value in /var/www/drupal-5.23/modules/taxonomy/taxonomy.module on line 1418.

I18N

ソフトウェアの世界で、I18N という言葉を見かけることがある。これは何だろう?

I18N = InternationalizatioN

である。英語の意味は「国際化」。ソフトウェアを各国語対応にすることを意味する。最初の I と最後の N の間にアルファベットが 18 個あることから I18N または i18n と書くらしい。

では

L10N は?

L10N = LocalizatioN

これも I18N と似たような意味で使われる。

それでは M17N は?

M17N = MultilingualizatioN

で、他言語化、I18N = L10N = M17N である。

自己暗示

  私は、入社当時より将来、海外 (特にアメリカ) で働いたり生活したりしたいと考えていた。その 「夢」 は、今まさにかなっていると言える。

  でもどうしてここまでこれたのか、今まで私も理由がわからなかった。漠然とその答えを出すなら、「常日頃それを強く思っていた」 に過ぎない。

マイレージの裏技

私は、アメリカン航空のマイレージが X 万マイルあるが、2005/03/18 に有効期限が切れてしまうようなことがあった。

基本前提として

  • マイレージの有効期限は、最後に飛行機に乗った日から 3年
  • マイレージは、最後に飛行機に乗った日から 3年以内に飛行機に乗れば、また3年延長される。

基本的に3年間に1度でも同じ航空会社の飛行機に乗り続ければ、マイレージは消失することなく貯まっていくのである。

しかし、3年間乗らなかった場合はどうなるのか?マイレージを使わなければ、全部パーになってしまう。

今まさにアメリカン航空の私のマイレージがその状態にある。

しかしここで落とし穴があって、実はマイレージをすぐに使おうと思ってもすぐには使えないのだ。

  • 21 日前にマイレージを使って飛行機を予約すれば無料で発券してくれる。
  • 21~7日前にマイレージを使うと(アメリカンの場合)手数料として $50 取られる。
  • 6 日~2時間前にマイレージを使おうとすると手数料として $75 取られる。

マイレージを使うには、航空会社が用意した「マイレージのための座席」があるので、基本的に 3ヶ月先くらいまで希望の日に予約は取れないと思ってよい。

そうすると、私のマイレージは使わないまま(予約も取れず旅行に行く予定も合わず)消失してしまうのだろうか?

ちなみにマイレージは、計算すると1マイル2.5~3円の価値がある。たとえば 10 万マイルあると、25万~30 万の価値だ(航空券換算の場合)。

マジで使わないともったいないのだ。

で、日本のアメリカン航空に電話して聞いたら、以下のことがわかってきた。

  • 有効期限の 2005/03/18 までのフライトチケットでなくても、2005/03/18 から向こう1年間の間のフライトの予約が可能。
  • マイレージで取ったチケットは、発券日から1年間有効。ここで、フライトと日付は変更できる。使わなかった分はまたマイルに戻せる(しかし、手数料が必要)
  • ただし、2005/03/18 以降、私のマイルは消失することになるので、仮に 2005/03/17 にチケットを取ったとすると、このチケットは 2006/03/16(マイナス 60日)までの 1年間、自由に(日付、便名共に)変更可能だが、マイレージのポイントには再び戻すことはできない。

ちょっとしつこく聞いていたら、アメリカン航空のオペレータが、「マイレージの端数はありますか?お客様のマイレージ番号をお聞きしてもよろしいですか?」と聞いて来た。マイレージ番号を伝えると、

「xxx,383マイルありますね。。。実は。。マイレージを『寄付』していただいて 3年間延長する方法もあります。通常は 1,000 マイル単位なんですが…最低は250マイルでOKです。」

そうすると、結論としては今無理に使わなくても2005/03/17 に 250 マイル寄付すれば 3年間延長できることになる。この方法を使えばたまにアメリカン航空に乗って永遠にマイレージが延長できそうだ(仕組みが変わらない限り)。

しかし。。今回(来週)は、自腹を切って旅行することにするが・・家族(旅行)を優先させるのか、恵まれない子どものためにマイレージを使うのか、神様から試されてる気がする。もちろん、他の方法でも恵まれない子どもを
救う手段はいろいろとあると思うのだが。。。マイレージが寄付できるのは知っていたが、こんな裏技に使っていいものだろうか。とりあえず 250 マイル寄付するけど。

よくネットで「何万マイル貯まった」とか自慢してる人がいるのだが(そういえばツインズのオフ会でも会ったなぁ…)、とても自慢などできない、、(とか言いつつ、私にマイルがあることをこのメールで書いているのだが…
マイレージは第 2の貨幣とはよく言ったもので、航空チケット以外にも ホテル、レンタカーもマイレージで取ることができるのだ。)

ハッシュ

1997 年頃だったか、マイクロソフトが 「ActiveX」 というインターネットの新しい技術を発表した。今我々が使っているインターネットエクスプローラーという名前のブラウザも、この頃初期のバージョンが発表された。

我々技術者は、その新しい技術を使ってソフトを開発しなければならなくなった。マイクロソフトのずさんなセキュリティのために、全世界のウィンドウズを使うユーザーは現在、ウィルス付きメールや月に 1度のパッチを充てなければならないという煩わしさに悩まされ続けているが、すべてはここから始まった。

この頃、マイクロソフトはそれぞれのソフトウェアに世界で一意(=ユニークな)番号を与えるから、それを使え、と言い出した。

世界中のプログラマは、個人や企業に関わらず、ウィンドウズのプログラムを作ったら、そのプログラムを識別するために番号を付けるのだ。

ちょっとパソコンに詳しい人なら、ウィンドウズの 「レジストリ」 というコトバを聞いたことがあるだろう?実は、そこにソフトの番号がたくさん貯められているのだ。

しかしすぐにこんな質問が思いつく。

「いったい誰がどうやって他のプログラムとバッティングしないように番号を振るのか?」

まず自分で勝手に振ったら、世界で無数にあるウィンドウズのソフトの番号とバッティングしそうだ。それは容易に想像できる。

では、マイクロソフトにいちいち申請をして番号を振ってもらうのか?オンラインですべて自動で行われたとしても、ちょっと面倒だ。マイクロソフト自身もそんな番号を管理するのはコストがかかって仕方ないだろう。

実はマイクロソフトは、自社のソフトウェア開発のためのソフト(ソフトを作るソフト)が、自動的に番号を振るから、それを使え、といっていた。

そんなことが可能なのだろうか?世界で、本当に自分しか所有しない番号、、しかも誰ともその番号を調整しないで・・・

このとき、ウィンドウズのソフト開発に非常に詳しい同僚に質問してみたが、実は上の説明をされただけで、どうしてそうなるのかまでは説明してもらえなかった。しかし、今ならその仕組みを説明できる。ヒントは、件名にある「ハッシュ」だ。まずはググってみよう。

上では、マイクロソフトが「世界で唯一の番号を各人が作ったソフトに自動的に割り振る」という話をした。

実際にそんなことは可能なのだろうか?答えは、「事実上」 可能なのである。事実上と、枕詞がつく理由は、「十分に実用的に耐えうる」からである。

それには、このメールのタイトルのハッシュというものを使う。

中高で 「関数」 を習ったが、ハッシュとは関数の一種だ。

この関数は特殊で、A というものを入れると B というものが出てくるが、一度 A を B に変換してしまうと、元のAには絶対に戻せない、というものだ。戻せないというより、元のAは何だったかわからない、といった方が正しい。

たとえば 1234 を入力すると 7890 が出てくるような感じである。7890 から 1234 を復元する方法はこの世に存在しない。1234 を入力すると必ず決まった値である 7890 が出てくるもので、1234 を入力したときの 7890 という値は、この世の中で(おそらく)あなたの他に誰も 7890 という値を持っていないものである。

では 1234 から 7890 どうやって計算するのか?というと、複雑な計算手順が必要らしく、実は私にもわからない。ひとつ言えるのは世界で唯一の数字はどんなものか?と少し考えると、「時刻」 があると思う。その計算をした瞬間の時刻をそのまま数値化すれば、あなたとまったく同じ計算をした人はおそらくいないだろうから、時刻は唯一であると言える、というものだ。

しかしやはり本当にその瞬間に全世界で同じ計算をした人が存在しないかと言われたら、ひょっとしたらいるかも知れない。だから、時刻という値はハッシュであることの最有力候補であるけれども、もっともっとバラバラな数字が必要だ。だからハッシュを計算する関数、つまりハッシュ関数はもっと複雑な計算を行い、その出力が世界で唯一であることを数学的に保証する、というものなのだ。

ハッシュは、乱数(ランダムな、バラバラな数字)に見えて、実はインプットが同じなら出力も常に同じ、という性質を持っている。

ではハッシュは日常生活でどんなところに使われているのだろう?

  • プログラムを世界中でたった1つに特定する。→マイクロソフトのソフトウェア ─── Excel や Word、IE でさえも ─── 世界中で一意の番号が振られている。
  • メールのメッセージ ID。メールには、 d2384969b8419d7a8273c53a0c51d819@twinkle.cc などという番号が振られている。もし同一時刻に同一者から同一内容が送られれば この ID は同じである。1 秒でも遅れて同一内容のメールを送ってもこの値はまったく違ったものになる。
  • 本人確認の手段。社員番号が 12435700 で、誕生日が 19700101、名前が「アオイヤスヒコ」というデータからハッシュ値を求める。この 3 つの要素を持っているのが世界中でただ 1 人だったとすると (実際には 1 人に特定するためにもっとたくさんの要素を 組み合わせる必要があるのだが)、ここから生成されたハッシュ値、たとえば 2a2c110bfc7f4875f0ab7a5393b7a7bf という文字列は、アオイヤスヒコが持っている 個人情報からしか生成されない。そのため、この値は本人確認に使用できる。この文字列を伝えられた側は、この文字列からアオイヤスヒコであることは確認できるが、元の個人情報を復元できないのだ。
  • 医療分野では、上を応用すると、本人の身元を明かさないまま、統計データを処理できる。統計データを処理するにあたって、多くの場合はその本人の「本名」はいらないからである。本名自体から求めたハッシュ値を使えば良いのである。
  • パスワードの保存。実は、このことが書きたくてハッシュのことをつらつら書いてきた。 ウェブサイトではユーザー名とパスワードを入力させられるケースが多々ある。このとき、ユーザー名は誰に知られてもいいが、パスワードは本人のみ知っているものである。素人がシステムを作ると、パスワードを生のままサイト側に保存してしまう。もう少し気の利いたエンジニアだと、パスワードを暗号化して入れる。しかしパスワードを暗号化すると、パスワードが漏れてしまったとき、復元方法もバレると結局もとのパスワードもバレてしまう。そこでハッシュの登場である。システムには、ユーザーが入力したパスワードのハッシュ値を記録・保存しておく。ユーザーがサイトにアクセスしてパスワードを入力したときには、常にハッシュ値を計算してシステム内に保存されているものと 等しいか比較するのである。こうすれば、パスワードとして保存していた 「つもり」 のハッシュ値が万が一漏れたとしても、誰もその文字列からは元のパスワードを復元 することはできない。この方式は拙作のサイト i-Services でも使っている。

    実はもっといろいろな応用があるが、ちょっと難しかったと思うので今回はここまで。

循環呼吸奏法

  Kenny G とは、世界的に有名な SAX 奏者であり、Smooth Jazz という新しい分野を切り開いたのは彼だといっていい。

  その昔私は、来日した Kenny G のコンサートを代々木体育館に観に行った(というか聴きに行ったというべきか)ことがある。彼はエンターテイナーで、非常にサービス心旺盛なコンサートであった。彼の音楽は pure そのものだが、彼の人柄などが伝わってくるものであった。

  彼は、これまでクリスマスシーズンになるとホリデーアルバムを出しているのだが、単に売れるから、という理由の他にも、敬虔なクリスチャンであることがうかがえると思う。その真面目さが彼の創る音楽に表れていると思う。

  さて、コンサート中で、おそらく彼は(感覚的には)5分以上は同じ音を出し続けた記憶がある。そんなことが可能なのか?と思うが、実際に耳で確かめたし、彼の CD で Kenny G Live! というにロングトーンをしている曲が入っていたと思う。事実であることは確かだ。しかし自分が管楽器を吹くときに、同じ音をそんなに長く出せるものだろうか?

  ずっと頭の片隅に疑問に思っていたところ、そのやり方が書いてある HP を偶然見つけたので記しておくことにする。