2007年 10月 (0)。

Last Modified: Thu Nov 1 23:10:40 JST 2007

おしらっせ: tabesugi.net は捜索中です。 現在 unixuser.org 様のサーバを間借りしております。

Nov 01 [Thu]


(21:29)
きょうは韓国料理である (らしい) 「タッカルビ」に挑戦してみた。 じつはこれにトライするのは今回で二度目である。「タッカルビ」というのは、 「鶏カルビ」って意味らしいのだが、前回はうかつにも鶏肉じゃなくて 豚肉を使ってしまったので、ちっとも「タっ」にならず、 ただの豚キムチ鍋みたいになってしまった。 というわけで今日はリベンジなわけだが、やっぱり二度目でも結構時間がかかる。 なんしろ、タレに使う生姜とニンニクをおろすところから始めなければならないのだ! それからこれは前回のときも反省会で出たことだけど (反省会って? とうぜん、出席者は新山一人である)、 なんかみょうに汁気 (=みじドン) が出てしまうのね。 ガイド本の写真に載っているような サッパリした見た目にならない。グシャグシャした感じになってしまう。 なてしまうのあるね。 前回、これは豚のアブラミのせいではなかろうかと思ったのだが、 今日は脂のすくないササミを使ったのに、まだ水っぽいのだ。 どうやら野菜を必要以上にたくさん入れているせいではないか、 と考えた。ミジどん。でも味はよいのよ。

ちなみにこれを作ったら力尽きたため、これ以外に作ったものは みそ汁 (いんげん) だけ。うちの母だったらここであと一品やるところだ。 どうでもいいが (うどでもよろ)、 日本に帰ってきてからというもの、料理が楽しくてしょうがない。 贖罪がまともなうえに、なにより火力がある。 NJのアパートでは電熱コンロだった (電磁調理器ではない) ために とにかくあったまるのが遅くてイライラしたもんだが、 ガスコンロ (しかもグリルつき) があれば何でもできるもんね。ガス万歳!

とうぜん部屋を探すときはガス 2口が使える物件を探していた。 でもそういうアパートは実は女性専用が多い。差別だ…

Oct 31 [Wed]


(07:37)
きのうも書くことが沢山あったような気がするが忘れた。
(19:53)
新山の考えた無謀な Win32 API 学習法:
  1. てきとうな DLL や EXE をかたっぱしから objdump -x する。
    $ objdump -x *.exe *.EXE |
      awk '/DLL Name:/{n=$3;} /vma:/{a=1;} /^$/{a=0;} !/vma:/{if(n&&a){print n,$3;}}' |
      sort | uniq -c | sort -rn
    
  2. そこで出てきた関数名をかたっぱしから MSDN で検索 (←ここで自動化できりゃいいのに)。
  3. went to 1.

この方法のいいところは、いろんなアプリケーションで広く使われている 代表的な関数名がわかることだ。ちなみに Windows\System32\ 以下にある すべての EXE ファイルにこれを適用したみた結果がこれ:

    368 KERNEL32.dll TerminateProcess
    368 KERNEL32.dll GetCurrentProcess
    362 KERNEL32.dll Sleep
...
    176 msvcrt.dll memcpy
    175 USER32.dll LoadStringW
    171 KERNEL32.dll lstrlenW
    162 KERNEL32.dll HeapAlloc
...
    118 msvcrt.dll malloc
     98 KERNEL32.dll CreateThread
     94 KERNEL32.dll ReadFile
     75 USER32.dll DestroyWindow
     69 USER32.dll CreateWindowExW
...
      6 DUser.dll CreateGadget
      5 msvcrt.dll ungetc
      4 KERNEL32.dll Beep
      3 WINHTTP.dll WinHttpCrackUrl
      2 GDI32.dll RoundRect
      1 CRYPT32.dll CryptHashMessage

以上の観察結果からわかること:

ちなみに printf もかなり使われている。 「なんとかprintf」の順序は以下のとおりである。

    198 msvcrt.dll _vsnwprintf
     59 msvcrt.dll _vsnprintf
     49 msvcrt.dll fprintf
     36 msvcrt.dll swprintf_s
     32 msvcrt.dll wprintf
     30 msvcrt.dll printf

Win32 のソースをみると、この _ で始まる 関数や定数がやたらと多くてムカつく。Python だってアンダースコアは そんなに使いたくないのによー。 てくるで、msvcrt.dll ってのは Windows における libc.so みたいなもんらしい。 これが static と dynamic にリンクしたときでは名前が変わるらしく、 さらに CLR上ではまた違うライブラリになるんだと。 ややこしいな。

(21:22)
さいきん、仕事でフーリエ変換について勉強する機会があったのだが、 きょう、会社の非常階段の外の喫煙所でぼんやりと考えていたところ (新山はタバコなぞ吸わないが、ここがいちばん風通しがよいので)、 ふとフーリエ変換の本質がなんとなくわかったような気がした。

「高度に発達した少年は、大志と見分けがつかない」といったのは、 アーサー・クラーク 2世だったか。フーリエ変換は、数学の中でも まさに「魔法」とでも呼ぶのにふさわしい技術だと思う。 もちろん数学の中には他にもかずかずの黒魔法があるのだろうが、 フーリエ変換ほど実際に使われて成功しているものは少ない。 新山のような工学屋からみると、フーリエ変換はまったくの秘儀である。 もちろん、FFT のようなアルゴリズムは知ってるし、 フーリエ変換を実際に「使う」ことは簡単にできる。しかし、 「なんでそうなるの?」という謎はいままでずっと解けなかった。 なぜある関数をフーリエ変換するとスペクトル分析になるのか?? 以下、チョーいい加減 (かつ直感的) な説明を思いついたので書いておく:

話を簡単にするために、まず有限なフーリエ級数から考える。 各 sin・cos 項の係数 an, bn は、 (テキトーにいえば) 以下のように求められる:

an = Σ こさいん(n x)・f(x)
bn = Σ さいん(n x)・f(x)

で、Σ の中がいくつあるかは知らないが、とりあえず f(x) を有限の長さをもった「ベクトル」と考えよう。 同じように sin(n x) も数列になる。すると、 Σ sin(n x)・f(x) というのは、 2つのベクトルの内積を計算しているのだ、とみなせる。 さて、内積というのは、言語屋にはおなじみのように 「2つのベクトルの類似度」を計算していることになるのだ。 するとこれは、ある与えられた n において、関数 f(x) が この周波数の波形カーブ (sin または cos) とどれくらい似ているか、を 測定していることになるのではないか? するとこの類似度が その周波数のスペクトルとして使われてもおかしくない。

さらに、これが無限個の要素になるともうヨクワカラナイが (!)、 とりあえず、積分 ∫ f(x)・g(x)dxこまかい内積みたいなものと考えることができるから、

∫ f(t)・e-jωt dt ≈ Σ たくさんの sin、cos と f(x) のこまかい断片の内積

ということだろう。

以上のようにして、フーリエ変換がスペクトル分析 (のようなもの) を与える理由をいいかげんに説明できた。 (とりあえず、深夜まはこれでわかったつもり)

え、わかんないって?

…もう寝る!

Oct 29 [Mon]


(07:11)
朝おきたら、部屋のマグカップのなかで蚊が一匹、死んでいた。

おマエ、いくらなんでも、 もうすこし死に場所ってものがあるだろう…?

(20:31)
他人の書いた (ひどい) ソースを久しぶりに読まされて思ったこと。 たいていのひどいプログラムは 1回しか書かれてない。 つまり、書き直されたものでない。 プログラムを 2回書かねばならない、と思っている人は多い (1998年6月ごろに書かれたと思われる、qmail-1.03 の TODO を見よ、 "rewrite everything from scratch" と書かれている! で、djb はいったいいつになったら書き直すんだろうね?)。 ほとんどのプログラムに対して、書き直し (現代用語でいえば「リファクタりんぐ」) は必要だ。 たいていの人は、まずプロトタイプをある程度作って問題の感じをつかみ、 それから作り直すと思う。なぜなら結局のところ (ケッキョキ)、 ひどい実装というのは「自分が何をやりたいかを本当には理解してない」 ところから始まるからだ。その結果、人は不安のせいでどうでもいいことに 時間を費やしたりする。そんなアホな勘違いの例:
  1. いわゆる「拡張性」を重視するあまり、なんでも「OOP風に」設計する。 ありがちな症状のひとつは、意味もなくデータ隠蔽すること。 たとえば新山が見た例では、あるクラスのメンバ変数ほとんどすべてに対して 以下のようなメソッドが定義されていた:
    BOOL SetFubar(const DWORD x) { m_Fubar = x; return TRUE; }
    BOOL GetFubar(DWORD *pdwValue) const { *pdwValue = m_Fubar; return TRUE; }
    
    で、このうち実際に使われるメソッドはほとんどない。 おまけに、こんな特殊なクラスは誰も継承しようと思わない。 ようするに圧倒的にムダな作業で時間をつぶしてるわけだ。 こんなところより他に時間をかけるべき箇所がある。
  2. 似たようなこととして、やたらとクラスの継承を増やしたり、 関数を wrap したがる病気。
    void FireBird::DoSomething(void) { doer_impl->DoSomething(); }
    void Gooze::DoSomething(void) { SomethingDo(); }
    void Gooze::SomethingDo(void) { 実際の作業; }
    
    まあ、3段階ぐらいならカワイイもんかもしれない。 実際には、アクセスを間接的にするというのは重要な作業であって、 これでかなり見通しが良くなるということはある。 しかし、意味もなくやるなよ! 当然、この例も他に誰も使ってないクラスなので無意味だし、 これを書いた時点で将来的にそんな計画がないことはわかっていたはずだ。 世の中にはレイヤーを増やせば抽象化したことになると思っている人が いるようだが、それはぜんぜん「抽象化」の意味をわかってない。 プログラミングにおける抽象化というのは、文章を書くときに比喩を使うのと 似ている。たとえば実際には配列のようにメモリに並んでいないものを 「これはまるで配列のようだね」と言ってあたかも配列のように扱う、 というのは一種の抽象化だ。この意味で「抽象化」されたインターフェイスの実装は 「仮想化」になることも多い。実際にはないものをあるように 見せかけているわけだ。でも、「これまで存在しなかった意味」を新たにつくりだせば 抽象化の意味があるけれど、すでに存在する対象をいくら名前変えたところで、 それはちっとも抽象化になっていない。
  3. こんどは上と逆で、本来もっと間接的にすべきなのに、直接的すぎた例。 たとえば、このクラスには float 値を返すメソッドがあり、 この値はある別のメソッドを呼びだすごとに 0.1 → 0.2 → … 0.9 → 0.0 と変化していく。
    float GetValue(void) const { return value; }
    void IncValue(void) { value += 0.1; if (1.0 <= value) value = 0.0; }
    
    で、現在のこの float値に対応したメッセージ文字列を返す関数があるのだが…
    string GetMessage(void) { return MESSAGE[float2string(value)]; }
    
    これは「float 値を一回文字列に変換してから、 map<string,string>を使って対応するメッセージを取得する」 という手法で実装されていた! つまり "0.1" や "0.2" に 対応する文字列というのが用意されてるわけだ。で、このプログラムでは float を 文字列に変換するためにわざわざ boost::format を使っていた。 これでプログラム全体が boost に依存するようになってしまっている。 アホか! ようするにこの場合は内部変数として float を そのまま保持しているのが問題なワケである。こいつに 0.1 ずつ足していけば 誤差が出るし、上のような「float に対応する string」という アホな変換をしなければならなくなる。 どうせこの値は有限かつ離散的なんだから、内部状態は int で持ってればいいじゃん。 そんで float を返すときには int → float という写像を使い、 文字列を返すときには int → string という写像を使えばいいんだ (でも、新山が見たところではこの関数がわざわざ std::string を返す必要はまったくないのだが)。 これは、考え方は上の「メソッド呼び出しを間接的にする」のと かなり似ている。しかし、メソッドを間接的にするという手法は知っている人でも、 内部状態を間接的にするという技法は本に書いてないので、知らないのかもしれない。 ちなみに新山の頭の中では、呼び出しやアクセスの間接化は、 どちらも「ふたつの接点の間に蝶つがいを挿入する」というイメージである。 他の人はどういう理解の仕方をしているのかは知らない。

ほかにも、テキトーに書かれたコードにはたいてい 「名前があまりに教科書的」という症状がある。 いつもバカのひとつ覚えみたいに「なんとかHandler」とか 「なんとかManager」じゃ、結局何してるのかわかんねえよ! たとえ動作を抽象化しても、名前まで曖昧にする必要はない。

上のような例は、なにも書いた人がとりわけアホだというのではなく、 ただ単に「考える時間がなかった」ということが原因のように思われる。 だから、アポなコードを書いた人でも たいていスクラッチから書き直せばマシになることが多い。 なぜなら 2度目には「そのプログラムが、何をするものであるか」 かなりわかっているためだ。新山のように、他人が書いたプログラムの 全体像を見てから評論するのはやさしいのである。

Oct 28 [Sun]


(08:19)
いまごろ蚊にさされた。

しかも、まぶたのキワのところをやられたので、 目がはれぼったい。くそったれ。

蚊について。新山はもともと蚊によく刺されるうえに、 刺されるといつもひどく腫れる体質だった。でも向こうに行ったら、 蚊にさされてもほとんど腫れなくなったので、体質が変わったのかと 思っていたが、日本に帰ってくるとあいかわらず腫れるのである。 ようするに、米国の蚊が親切 (?) だったらしい。

それにしても、台風一課なれだね。

(10:23)
どうでもいいが (どうでもよろ)、最近 つくづく自分は計算機上では「英語な人間」になってしまったと感じる。

とくにコメントに関しては、 英語は日本語に比べて圧倒的なメリットがある。 文字コードの問題を心配しなくてすむし、 入力モードを日本語と英語で頻繁に切り換える必要がない。 なにより、関数名や変数名はふつう英語なので、 動詞や名詞が一貫しててとっても説明しやすい。 変数名や関数名をぜんぶ日本語で書けるようになれば、 コメントを日本語で書くことには少なくとも論理的な説得力があるが (でも実際にはやりたくないな、そんなの手間がかかってしょうがないよ)、 いまんところはそれもない。どうでもいいけど VC++ は 「ソースはなるべく UTF-8 で保存しろ」っていってるくせに、 BOM がないと SJIS だと思い込むらしい。アホである。 UTF-8 なのに BOM が必要なんて…。いまだに C のソースの中に 日本語の文字定数を埋め込むは怖い。さいわい、まだやったことないけど。 Python なら encoding: 指定があるから平気なのにね。

(12:25)
今日こそ昼飯 (すこし早い) はソバにした。

めかじき

Oct 27 [Sat]


(12:34)
あっめ あっめ、ふっれ ふっれ、母さんが ♪

洗濯物が乾かないぜ menって言ってたよ (コカイン吸いながら) ♪

…どういうわけか朝から出来心で企画書 (のようなモドキ) を書いている。でも企画書ってオレぜんぜん書き方とか知らないんですけどね? しかもこの企画書を本当に出すのか、自分でもまだ自信がない。 とりあえず「自分用のメモ」としてでも書いておけばいいや、というところ。 しかし、職業病というのか、どうしても構成が「論文調」になてしまう。 なてしまうあるね。 学術論文と違って、企画書では力点を置く場所が「新奇性」ではない。 ここがだいじなところだ。ちなみにコカインうんぬんの件は これを 見たから書いただけで、とくに意味はありません。

(13:06)
…っていうか、雨ねえ。なにか「ケケケケッ」というトリが鳴いている。

実家から「苗場そば」が送られてきたので今日はソバにすっか、 と思っていたのだが、この鬱々とした天気のために どうも蕎麦という気分にならない。といって、ラーメンかなにかを 食いに行こうと思っても、こうもドシャ降られていると それも気がすさむ (? この日本語ってあってる ?) のだある。 フンとになあ。まあ、あしたは晴れるらしいからいいけど、

(19:17)
米国の新聞を読むのに必要な知識シリーズ・その 9357.49: 刑法について。米国では、犯罪は felony (重罪) と misdemeanor (軽犯罪) の 2つに分けられる。 Misdemeanor はふつう懲役一年以下の犯罪で、 おもに喧嘩、(犯罪目的でない)傷害、騒音、公共の場での飲酒、 (安い商品の) 万引き、買春、不法侵入および軽度の破壊行為などがそれにあたる。 それ以上の犯罪はすべて felony とみなされる。 Felony charge を受けた人物は、就職あるいは入国のさいに厳重な チェックの対象となる。Misdemeanor よりもさらに軽い微罪として 違反 (infraction) があるが、これは罰金だけであり前科とはならない。 (実際には misdemeanor も罰金だけの場合がある。) ちなみに、野球場で 酔っぱらってゲーム中にグラウンドに入りこむのは重罪とみなされていて、 felony である。

トリスおじさん!

(22:27)
それほどまでに他人をバカにしつつ生きるってのは信じられませんね。 オレみたいな常人にはそんなことはできないなあ。

Oct 26 [Fri]


(21:06)
きょうは、雨がふってるので電車で会社へいった。 そしたらすごい混雑。もういや、あんな野。 むかし、ある人が「30過ぎて満員電車で通勤してるような人は負け犬だ」 といってた。たしかにそうだと思うね。 $$$

I'll never eat green peas again...!!

Oct 25 [Thu]


(21:37)
いちおう、初任給がでた。でも特に感慨はなし。この歳だもんなあ。 給料もらったのも初めてじゃないし。 しかも同い歳の人間と比べると相対的にかなり低額だと思う。 ま、べつに給料をアテにして現在の会社に就職したわけではないので、 正直のところどうでもいいんだけど。自分で言うのもなんだが、 新山は普段から (金使いという意味では) 堅実すぎる生活をしているので、 その意味でいえばけっこう余裕があるほうだ。でも、最初に 引っ越しと家具とか買い揃えるので 20万以上使ったから、 まだ収支的には赤字だ…。しかし仕事は楽しいので (まだ、いまのところは「毎日会社へ行くのが楽しくてしょうがない」時期 である) それが今のところ一番いいことかな。しかし Windows での 開発はあまり長いことやりたくないな。

きのうまで、Linux 上でコードを書いてテストしてたワケよ。 そんで gcc -Wall でも警告がまったく出なくなったので、 それを Visual C++ に貼りつけてビルドしてみたら、 stdafx.h がインクルードされていません から始まって、出るわ出るわゴミの山。こりゃ自身喪失するね。それから 今日はずっと pなんたら->QueryInterface って一体 何ナンだよ!! ということで悩んでいたが、ようやくわかったことは、 これはようするに「型キャスト」なのだ、ということだった。 COM 関連の入門書とかまったく読まずに MSDN とサンプルコードだけで 竹槍戦法やってるのでアレですが、他の人もよくわかってないみたい。 そもそも Microsoft のサンプルコード自体が一貫してない。 しかし COM とか ATL とかのあの笑えるコード群を見ていると、 MS がどうしても C# とかの自前言語を欲しかったんだろうなあ、 という気持ちはよくわかる。 そもそも分散オブジェクトの多態とか、言語レベルの サポートがなきゃ使いにくくってしょうがない。それをほぼ C++ の プリプロセッサ (ある意味、テンプレートなぞも新山に言わせれば プリプロセッサにすぎない) と、へっぽこなコンパイラ拡張だけを 使ってやろうとしてたんだから、根性あるというか、いや、やはりアホだ。 この手の話はそのむかし、X11 が C でオブジェクト指向 (っぽいこと) を やろうとしていたのを目撃した人 (これはこれでまだ生きているが) なら「もうその手の話は勘弁してくれ」って思うだろう。 しかし DirectX の API は結構よくできていると思った。 ちゃんと動けばの話だが。 さて一体オレは何をやっているんでしょう?

もうひとつのストレスの元は Vista の UAC である。 いままで Windows 2000 も XP も使ったことなかったのに、 いきなり Windows Vista かよ! これだけですでに相当オドロキだが、あのうざったい 装飾はすべて消してあるので、知らない人がいまの新山の画面を見ても 「いまどき Windows 95?」としか思わないだろう。 でも妙なところでアウトラインフォントを使おうとするらしく、 そういうときは (アンチエイリアス禁止にしてあるので) キタナイ 文字を見せられるときがときどきある。たぶんあれって、画面関係の API を 古いのと新しいのをまぜこぜにして使ってるからああなるんだろうね。 しかし…みんな、ホントにこんなの金出して買ってんの?? あいかわらずの旧来 Windows に皮をかぶせただけなのが見えみえ。 それから、「なんでも禁止すりゃーいいってもんじゃないだろ、馬鹿」。 MS は「真のセキュリティ対策とは、ユーザーに何ひとつ身動きさせないことだ」 というポリシーを本当に実行に移したらしい。それはある意味すばらしいが、 ホントに何もできない。そして何かしようとすれば、 (ユーザの同意のもとに) 必ず「なんでもできちゃう」 状態を招くようになっている。しかし建て前では、たしかに Vista は 最強のセキュリティをもつ OS かもしれない。 実際には、ユーザによる無限の同意が与えられているわけだけど。 これって、裁判対策か何か?

結局 (ケッキョキ)、 これは ATL の例でもそうだが、 MS がやる拡張はいつも「薄皮をかぶせるだけ」なんだよ。 しかもこいつらは、その皮だけを支えに、 表面にすごくデッカい上部構造を構築するんだから、おそれいる。 しかもさらに悪いことには、MS は誰からも耐震偽装で告発されない。

ソフトウェアにも建築基準法と消防法と破防法を適用しろ!!

Oct 24 [Wed]


(06:32)
ホイマシペーターホイマシ
(22:28)
ギョンカッキイにはさらにこたえた、それがたとえ、

Oct 23 [Tue]


(06:59)
パソを切らしているので、朝食はココナツサブレとバナナとミカンと ゆで玉子である。新山はココナツサブレがたいへん好きであるので これでも許す! TODO: パソを買うこと。

どうでもいいが (DDT)、日本で売っているバナナはどこも Dole ばかりで、 エクアドル産のブランド「Bonita」が非常に少ない。米国では けっこう多かった。Bonita バナナをみるといつも博士一年のときに 英語を習ったごんざれす先生を思い出す。 彼女はエクアドル出身で、自国のバナナがいちばん品質がいいと 信じていた。いや、なつかしいなあ。

さらにさらにどうでもいいが、 「なぜ日本のバナナはヘタをポキっと折りやすいのか」の謎をいまだに 解明できずにいる。日本に帰ってきてからバナナのヘタをよく観察しているが、 切りこみとかは入ってないのによく折れる。なぜだーーーー! もしかしてこれは電子顕微鏡レベルで見ないとわからないんじゃあ ないのか? あるいは遺伝子組み換えによりヘタが折りやすい バナナに品種改良してるとか? 「こちら側のどこからでも切れます→」の パックを発明した日本人ならそれくらいやりそうである。そのうち、 「こちら側のどこからでもポきッと折れます→」の バナナが登場するのもそう近くはない。

(19:14)
ーーm。やっぱし 25分ぐらいはどうしてもかかてしまうようだ。あるね。 のんびりしているからかもしれないが。 坂がなるべく少ない道を見つけたんだがなあ。

そういえば、今日はゆうちょの住所変更とカード変更をやった。 ら、1時間以上かかった。要するにオレは昼休みの間じゅう郵便局に いたことになる。どうでもいいが (どうでもよろ)、 新しいキャッシュカードには電子マネー Edy が塔載!! とかいわれたが、「いらない」と言っておく。 しかしこのオプションが不公平で、電子マネーつきの カードは発行に 2週間ぐらいしかかからない (それでも十分長い) が、 電子マネー機能のつかないカードは 1ヶ月以上かかるというのだ。 そんなのより VISA と統合しろよ。 しかしオレは「何がなんでもいりません」といったので、 結局 1ヶ月待つことに。まあ、mぅfぐの ATM でおろせるからいいけどね。 しかし、むufg のシステムがこれまたアホっていて、ネットバンキングは おそろしく不便だし窓口のねえちゃんも情報が錯綜していてよくわかってない様子。 こんな不便なシステムでみんなよくやってるよね。 まあ、オレ個人にとってはドーでもいいんだが…。 そういえば、日本はいまだにほとんどの ATM が 24時間営業になってない。 コンビニでも全部の銀行がおろせるわけじゃないし。 いったい何十年アメリカに遅れてんだ (少なくとも 10年は遅れている)。 6年間のあいだにすこしは進歩したかと思ったが、ぜんぜん変わってないな。 自動改札なんかどうでもいいから ATM をやれ。 というか、山手線も 24時間営業じゃないよね (NY地下鉄はとっくに24時間営業。 ちなみにうちの大学は図書館も 24時間営業だった)。 言いわけはおおよそ推測できるけど。安全上の理由がどうたら。

しょせん、日本人に「改革 (これがどんな意味であれ)」などできるわけがない。

さて、今日はぶりの照り焼きだよ!

(21:26)
マンゾッキブ。(満足ive)

Oct 22 [Mon]


(07:13)
これからわ、袋入りのバターロールを買うときには必ず偶数個入っている やつを買うことにしよう。さもないとムカついて生姜内。ムキーーーーー

ーーーーーーーーーーーーっ。

診断書: 情緒不安定。

(23:06)
忘れないうちに書いておく。ようやっとのことで、 念願のサラリー人になれたわけだが (マトモな サラリー人かどうかはおいといて)、新山がいまどう思っているのかというと、 自分は圧倒的に自由だ、と感じる。 そりゃあもちろん会社員なのだから毎朝会社に行かねばなんないし、 遅刻とか無断欠勤とかもってのほか。しかしそれでも自由であると感じる。 逆説的に聞こえるかもしれないが、学生のころは自由じゃなかった。 そりゃ、大学一年のころは自由だと思ったかもしれない。 しかし10年以上も学生をつづけていると、とてもそんなふうには思えなくなる。 学生というのは一生やってるわけにはいかない。 いつか必ず終わるものと決まっている。ところが、 卒業できるまでは終わらせてくれないのだ。それも、とくに米国の大学は 「いるだけ」で卒業させてくれることなどまずないから、プレッシャーがある。 加えて、学生は経済的にも自立していない。 まあオレは給料もらってたからある意味では自立してたわけだけど、 それでも「好き勝手に使っていい金」という感じではなかった。 それはあくまで“報酬”ではなくて“援助”でしかないのだ。 米国の税金から出てるわけだしね。奨学金が打ち切られる前に卒業する必要があった。

それに、生活もあまり自由だとは思えなかった。 買いたいものが (値段が高いせいでなく、そもそも売ってないため) すぐ買えなかったとか、住む所もどうも具合が悪い、といったことがあった。 結局のところ (ケッキョキ、) 自分はビザがある間だけ米国に 置かせてもらってるにすぎず、しょせん異物である、 と思っていた。これは新山が行ったのが 9.11 後の米国だったからかもしれない。 空港の入国審査でアホみたいに長い行列に並ばされたり、 駅で意味もなく警官に荷物検査を受けたり、スーパーの店員に ジャマそうに扱われたりといったことは、数回ならともかく、しょっちゅう あると疲れる。考えてみれば、米国にいるあいだに本当に 落ちついた気分になったことはほとんどなかった。 たとえ生活が貧相だとしても、かの国にはもっと生活が厳しい人も 山のようにいるので、それが言いわけにはならない。それにオレには選挙権もない。 選挙権どころか、米国ではオレにはほとんどの権利がないように感じられた。 それから、新山は健康の問題を極度に恐れていた。 もしオレがここで病気したら、あるいは死んだら、英語も話せない 両親が事後処理をするハメになるのだろうか? それに米国の 医療保険制度だって、いまだによくわからない。何もかも 慣れてないことをやらされるのである。 6年間、あんな状態をよく続けられたもんだ。ある意味、卒業したら さっさと逃げ帰ろう、と思っていたからできたんだと思う。 いつも「これをやったら次はいつまでにあれをやらなくちゃ」と考えていた。 心休まることがないのだ。しかしそれでも、楽しかったかときかれれば そのとおりなんだけど…。ある意味、学生というのは 言いわけばかりしている期間のことである。でも今はもう言いわけする必要が ないのだ。なぜなら、ほとんど自分で決めなきゃならないことばかりだし、 それについてはすべて自分の責任になるのだから。 しかし、こういう状態ってのは、とっても幸せだ。 たぶん。

世迷い言おわり。

Oct 21 [Sun]


(11:56)
GPL などのコピーレフトがウザいと思うこと。コピーレフトがやっているのは、 要するに「モラルの押し付け」である。自分はこうやってる (そしてそれが正しいと思っている) んだから、 あんたもこうやんなさい、というわけだ。そしてこの背後にあるのは RMS の根本的な人間不信、あるいは 「規則によって個人のモラルを規定しよう」という思想である。 RMS の書いた BSDライセンスへの批判なぞを見ると、 彼は本当にこう思っているように見える。 そんなことできるわけないだろ。そりゃ、最終的にソフトウェアは公開されるのが 理想だとしても、それを規則によって宣言してしまうとコトは途端に 大政翼賛的になってくる。RMS は自由、自由というが、そもそも人間には その前の段階で「なにが善でなにが悪かを自分で判断する自由」というものが あるのだ。これはある意味で究極の「メタ自由」である。そしてこれは法律を 守ることと矛盾しない (なぜなら現代の法律というものは、 ある実用的な目的のためにつくられた契約だから)。 「自由などというものは、悪だ!」と思った人間でさえ、そう「思う」ことの 自由は与えられている。GPL がいくら広まろうとこの部分をとり消すことは できないが、結局のところ (ケッキョキ)、個人の行動というのは、 究極的にはこのレベルの判断から生じたものしか信頼できないと思う。 規則による「善行」の押し付けはいずれ必ず破綻する (というか、GPL をちゃんと守っている企業ってどれくらいあんの? そんなに多いかどうか、あやしいところだ)。 しかし、「自発的な判断」に頼った人類が最終的にどこへ行くのか オレは知らんケドね。

でも、彼 (RMS) には Lisp マシンというトラウマを考えれば同情はできる。 あれこそが彼の思想 (と人間不信) を決定づけてしまったんだろうな。 まあ、それに比べればなぁーんの苦労もしていない音質育ちの新山が こんなこというのはまったくもって失礼な話だけど。

(14:44)
スペイン人の大好きなスポーツが「闘牛」であるとすれば、 日本人の大好きなスポーツは「魔女狩り」である。

新山祐介さん (長野県出身) の供述: (中略) …なにしろ、あんなに楽しいことはありませんよね。 ちょっとしたことであげあしをとって、コテンパンに叩く。 そんで何か向こうに反応があったら、それを茶化してまたコテンパに叩く。 ありがたいことに、この国はそういう材料を見つけてくるのがすごくウマい 有能な人々に恵まれているんです。そういう人々のおかげで、 私たちはを見つけだすことができますし、 そしてそれを徹底的に叩くことによって、 みんながお互いに仲むつまじく協力しあって社会を良くしている、 つまり自分たちはひとつだという、 何ものにも代えがたい感覚を得ることができるんです。 いや、まったく、あんな楽しいことはありません。… (以下略)

…あ、でも韓国人も結構好きそうだよなあ、魔女狩り。

(17:57)
ああもうこんな時間??
(21:14)
(目がとろーんとしている)

いやー、やっぱアジの干物はいいわ。ホント。

(目がとろーん)

しかし、もやしの茹でたのは母がやったような味にならんかったっ。 まだまだ修行が必要だ。

きょうは銭湯へいった。よろしき。

Oct 20 [Sat]


(09:29)
さて?
(12:27)
せんたく終了。洗濯はコインランドラーである。 本当はセンタッキを置く場所があるのだが買うのがメンドーなので (狭くなるし) 置いていない。 まあ、いいや。ランドリーも近いし。しかし今日はアホなことがひとつあった。 新山は洗濯が終わったあとにシャツやジーンズを 10分間だけ乾燥機にかけるようにしている (こうしてから干すと乾きが早いので)。 しかし下着はそのまま洗濯機の中に残しておいたのだが、そのあと チョッと出かけて戻ってきたら、いつのまにやら終わったはずのその洗濯機がまた 回っていた…? どうやら誰か新山がいない間に誰かがその洗濯機に間違って 200円を入れたらしい (実際、隣の洗濯機も回っていたから、 そいつが犯人だろう)。中をのぞいてみると、オレの下着だけが チョロチョロと回っている。たぶん、そこを空いているとカン違いして (目印とかは置かれてないので) お金を入れちゃってから 洗濯物が入っているのに気づいたんだろうが、ちゃんと確認しろよ、アホ! まあ「そいつ」からすれば 200円損してるので、そっちのほうが 腹立つだろうが、こっちもまた 30分間待たなアカンのでたいへん不便である。 おまけに、意味もなく下着だけ 2度も洗濯しちゃったし。 そんなわけで今の今までかかっちまった。

てくるできょうはカレイが食いたいんだけど近所のスーパーで売ってるかな。 しかしそういやアジの残りがまだあるんだよな。どうし余。 日本に帰ってきてからというもの、毎日、親の仇のごとく 魚ばかり食っている。ちなみに昼食は会社へ (冷凍) ゴハンだけ持っていって 向かいのオリジン弁当でお惣菜を買えば 300円ぐらいでハラいっぱい 食べられることが判明した (料理は好きなのだが、さすがに朝お弁当を作るほどの ズクはなし)。しかも、栄養的にもけっこういい。 ニッポンの生活はいいわよね。しかしむしろ問題は仕事にのめり込みすぎて お昼を食うのを忘れることなのである。 まあ、お昼休みの時間は融通がきくのでいいんだけど。

ちなみにテレビがないので家にいるときは結局 (ケッキョキ)、 smoothjazz.com を流している。ようするに、向こうにいたときと変わってない。 でも、向こうのアパートでは陽がほとんどあたらない部屋で、 天井に間接照明を当てた状態で聴いていた。ようするに、わりあい ジャズむきな部屋だったといえる。それに対してこっちは陽当たりが よすぎるので (これまで陽当たりが悪すぎたので、今回はいいところを選んだのだ)、 ノーテンキな曲のほうが合う。 おんなじ曲でも環境が変わるとやっぱ雰囲気変わるよね。

(13:32)
ああ、すじ雲がきれいです。
(21:06)
というわけで今夜はめでたくカレイをゲットしたが、 切り身がなかったので一匹まるごと煮たのだが、 小ぶりだったので食うところが少なくてえらく不満だった。 しかし「きょうの料理」でやってたようにネギと一緒に 煮込んだら、そいつが甘辛でえらくウマかったのでよしとする。 最後は煮汁ごとゴハンにかけて満足。

てくるでいままで新山はカレイってなんで 目の位置が必ず左側になるんだろう、この非対称性はなんなのか? とか思っていたけど、よく考えてみれば人間の身体も厳密には 左右対称じゃないもんな、と思って勝手に納得した。

Oct 19 [Fri]


(07:59)
このところ日記があまり書けないなあ。 べつに時間がないわけではないのだが、 もっぱら空いた時間はプログラミングをしている。 もちろん fooling/shaling はまだ改良しているよ。 なぜなら職場で、職場の windows で使いたいからだ!
(21:41)
おいおい誰だよ今日雨ふんないって言ったのは。 ズブぬれだぞお! やっぱレインコートとか買っとくんだった。
(00:27)
ぴちょんくんと音で遊ぼう! のコーナー。

まず、こんなふうにして正弦波を生成します。 全部ジェネレータを使っているところがミソね。

from math import sin, pi
samplerate = 44100  # 44.1kz

def osc(freq):  # 無限の長さの正弦波を生成する。
  rate = freq/float(samplerate)
  i = 0
  while 1:
    yield sin(2*pi*rate*i)
    i += 1
  return

def cut(n, seq):  # 与えられた時間でちょん切る。
  n *= samplerate
  for (i,v) in enumerate(seq):
    if n <= i: break
    yield v
  return

a = osc(440.0)   # generate 440hz sine wave
a = cut(1.0, a)  # cut off at 1.0s

つぎに、こっから .wav ファイルを生成。

def play(a):
  import wave, array
  pcm = array.array('h', ( int(v*32767) for v in a ))
  pcm.byteswap()  # for Intel
  out = wave.open('out.wav', 'wb')
  out.setnchannels(1)  # mono
  out.setsampwidth(2)  # 16bits
  out.setframerate(samplerate)
  out.writeframes(pcm.tostring())
  out.close()

Pygame をもってる人は、このあと再生もできますよ。

  import pygame
  pygame.init()
  ch = pygame.mixer.Sound('out.wav').play()
  while ch.get_busy():
    pygame.time.wait(100)

で、こんだけだと大して面白くもないので、 以下の関数を加えよう!

def squ(freq):  # 方形波
  n = int(samplerate/freq/2)
  while 1:
    for i in xrange(n):
      yield 1.0
    for i in xrange(n):
      yield -1.0
  return

def white():  # ホワイトノイズ
  from random import random
  while 1:
    yield random()*2-1
  return

def amp(a, seq):  # 増幅
  for v in seq:
    yield a*v
  return

def cat(*seqs):  # 連結
  for seq1 in seqs:
    for v in seq1:
      yield v
  return

def add(*seqs):  # 加算
  try:
    while 1:
      yield sum( seq1.next() for seq1 in seqs )
  except StopIteration:
    pass
  return

def mult(*seqs):  # 乗算
  try:
    while 1:
      yield reduce(lambda r,seq1: r*seq1.next(), seqs, 1.0)
  except StopIteration:
    pass
  return

こんだけあれば、もう気分は SuperCollider! (もどき)。

たとえば、こんなの:

a = osc(440.0)      # 基準
b = osc(440.0*1.41) # 基準+半オクターブ
c = add(a, b)       # 重ね合わせる
c = amp(0.5, c)     # 音を小さく
c = cut(1.0, c)     # 1秒で切る
d = cut(1.0, osc(880.0))
e = cat(c, d)       # つなぎ合わせる
play(e)

この例はジェネレータの利点がいかんなく発揮されている。 各関数は数列の大きさとか考える必要がなく、 ただひたすら数を yield していけばよい。 本当なら wav を生成するんではなくてジェネレータの結果を 直接サウンドデバイスに流したいよな。 まあ、いまの Python の実行速度じゃムリだけど。 こうしてまた貴重な時間を無駄にしました。おやすむ

Oct 18 [Thu]


(21:22)
学歴なんてもんはビルと同じで、高ければ高いほど目立つが、 そのぶん崩れてきたときが怖いよ。

Oct 15 [Mon]


(20:46)
仕事から帰ってきて、買いもの行って、ゴハン作って、食って、 ひと休みしてももまだこの時間。すばらっし。
(23:20)
pygame.mixer がどうしてもうがかねーー! というモンダイに悩まされること 30分。古い SDL が自分のホームディレクトりの下の ~/Library/Frameworks/SDL.framework/ に 残っていたのが問題だった。こんなろ、誰だこんなとこに インストルーしたのは!!

Oct 14 [Sun]


(01:13)
そして最近気に入っている youtube ビデオ:

マインスイーパのやつは、途中で出てくるサングラスのおっさんが、 あの画面上のほうに出る 「ニコチャン (たしかに終了時にはサングラスをかけている)」 だということを知ったときは爆笑した。 しかし本当に気に入っているのは 2番目のやつである。 何度も見てしまった。おそらくは Kermit the Frog のパクリだと思うのだが (喋り方的にも)、こいつがカメラとパソコンを交互に見つめながら 何か喋るときの「間」がよくって、無性に笑える。そういえば セサミストリートの frog も「間」が非常によかった。やはりアレは あの間を理解する人が米国にも沢山いるからウケたんだろう。 どうでもいいけど (どうでもよろ) これってわざわざ人形作ったんだよなあ。 よくやるなあ。 Chad Vader 以降、youtube のためにこういうアホな自主作成映画を 作る人が増えているのだろうか。こういうのって、日本人が作っているのも あるのかな? ほとんど見ないんだけど。まあ、オレが知らないだけか。

ちなみに、 Powerthirst もかなり好きなのだ。でもこれはアメリカ風 CM のパロディだから、 日本でやってもウケないだろうね。

(09:03)
おはよ。

それにしても、最近ようやく人並みな生活になったと思える。 なんしろ先週まではベッドもなくて、 引っ越してきてから 2週間ぐらいは床で寝てたんだからな。 電話もネットもなく、いつも近くの公衆電話 (でもこれが実はあまり近くない、 罰ゲームのような遠さである!) まで 行かねばならなかった。とうぜん連絡先もないので、 なにかの配達で連絡先を教えてくれって言われると困るわけよ。 実家の電話番号を教えてそっちに伝言してもらうようにするとか、 向こうの番号を聞いて何度も電話して「ポーリング」するとか、 大変だったんである。ま、しかし、それも終了した。 もちろん、すでに子供がいたり家を買ってたりする同年代のヤツラと 比べるとまだトンでもなく遅れているけど (たぶん給料的にも)。まあそんなことはどうでもいいさ。

(13:16)
理論上では、人間というものは決して死なないハズである。 理論上では。
(20:32)
本を買おうと新宿へ行ったが、たまにああいうとこへ行くと、 自分の中にガイジン視点がまだ少し残っているために、 「ワーオ! ジャパンだ!」となってしまい、どことなく 海外旅行しているような気分になてしまう。しかし人混みがそんなに 好きでないのは変わらないので、 キの国屋 3階に 2時間ぐらいいて 疲労困憊したあげく手ぶらで帰ってくる。あのな、オレはわざわざ 本買うためにセレクションの豊富そうなとこに行ったんだよ! 立ち読みしに行ったんじゃないんだ。ところが、いざ行ってみると、 あいかわらずロクな本がなく、ちっとも買いたいと思わんかった。 そうだ、そういえば帰りにティッシュもらったんだ。 新山はこういうのは積極的に貰いに行くようにしている。 なんしろ NY じゃ誰もこんなのくれなかったし (ガイジン的感覚)。 これが唯一の成果か。結局 (ケッキョキ)、買いものをしたのは 最寄り駅前の100円ショップだけだった。 夕食はサバの煮付と大根のみそ汁、キムチ(既製品)、 小松菜のおひたしに納豆。きょうは久しぶりに銭湯へ行こうかな。

(追記) それにしても、あいかわらずたいした本がなかった。 ああいう計算機関連の書籍売り場に行くといつも安心すると同時に 脱力もする。結局、10年たってもやることは何も変わってないのね。 ただメンツが変わるだけ。Indeed, でなきゃ「プログラミングの心理学」が 35年も生きのびるハズがない。しかし、逆にいえば、 あんな本ばっかでこの国は大丈夫なのか、とも思う。 もちろん自分も「あんな本」を書いた一人であるので、 あまり人のこた言えない。

Oct 13 [Sat]


(08:36)
さて、そういうわけで無事に○×市の住民から○×区の住民となったワケですが…。 (ちなみに「○×」の部分はどちらも同じ文字列が入ります)

やっとネットにつながtta。んTTの工事とプロダイバーの 申し込みに今のいままでかかったのだる。 テレビもないので、まるっきり世の中のニュースにとり残されていた (会社ではネットは使っていたが、私用では見ていなかった)。 そのため完全なウラシマ状態:

以上です。

(12:09)
せんたく終了。

てくるで (ところで、) ドーーでもいいですが、 この日記が開始してからいつのまにか 10年が経過している。 始めたのが 1997年の 6月だからね。もうそんなにたったのか。 しかし、この間にいくつのサイトが新しく開始し、 そして消えたのを見てきたことだろう。ま、オレも当初はこんなに続くとは 予想してなかったのだけど、web が信頼できないのはまさにここだ。 ある書籍が図書館に 10年以上置かれている、などというのはざらにある。 それに対して、web サイトは何の前触れもなく現れたり消えたりする。 こういうサイトが大量にあるような現状では、web はそもそも 内容以前に物理的に信頼できない。一方で、 まえにも書いたように「消えたい」人々の権利、 というのはできるだけ尊重すべきだと考える。 しかしまあ、ほとんどの個人サイトが消える理由は 「飽きた」とか「時間がなくなった」とかいうのがほとんどだと思うのだけど。 似たようなことは新山にもあって、いまさら某フォントのメンテナンスなんて やってらんないもんな。だから放ってあるのだけど、この場合は sf.net に 放置しておいてもほぼ ok なのに対して、たいていのサイトは (ホスティングサービスの制約などにより) 消えざるを得ない、 というのは残念なこった。まあ、古い情報は意図的に消したほうがいい、 という場合も多いのだけど。どうだかね。

(追記) 情報の安定性、保存性という面からみると、長い目で見て web は 図書館に勝てないだろうと思われる。web はいま現在の情報を見るには 役に立つだろうけど、そこに置かれている情報というのはせいぜい 数日〜1年間前ぐらいのものに限られる。図書館ではめまぐるしく変わるような 情報にはアクセスしにくいが、ある程度の時間を経た情報は確実に整理され、 最終的にはネットの検索なぞよりもアクセスしやすい形でまとめられる。 そういう意味では、web の位置付けってのはテレビと図書館の間にあるんだろうな。 逆に言うと図書館のありがたみってのは長い時間をかけないとわからない、 のかもしれない。


Document ID: e6b0b3bf7dad408e8a308255373c95a7

Yusuke Shinyama