というわけで

無事修士課程を修了できました。一年前に修論を出しておきながら単位が足りずに留年する羽目になったときはどうなることかと思ったけど、今年はちゃんと必要な単位も揃えたし、一息ついた頃にいきなりすべてがひっくり返る心配もなし。すばらしい。
さあ、あと三年博士課程で勉強しなくちゃ!いったい僕はどれだけ親の脛をかじれば気が済むんでしょうか。

卒業式と祝賀謝恩会

三年前の学部の卒業式はサボったけど、今回は学位記を受け取るのにどうせ吹田まで行く必要があったので、ついでのように参加してきた。あと三年は同じ大学に残るのに。総長の式辞の最中、総長の後ろに並んで座っている各研究科長のうち数名が首をがっくり折って寝ており、さらにビデオカメラで撮影されその姿が正面右側のでかいモニタに表示されたときには笑ってしまった。ゆっくりと流れていく映像で、右側から一人また一人と寝ている人が現れる様子はかなり面白かった。まあ午前に行われた学部の卒業式とまったく同じ内容を聞いてたはずだし、寝ちゃってもしょうがないよね…。
その後は一旦豊中に戻り、ろくに休む暇も無く今度は送迎バスに乗ってエキスポパーク近くのホテルで行われた祝賀・謝恩会へ参加。「ちつじょ」をちゃんと発音できない研究科長(おっさん)に萌える。適当に飲み食いした後、現在豊中の研究室。
しかし豊中-吹田間を一日で二往復…交通費を無駄にした気がする(無料の連絡バスは三月は運休しているのでモノレールを使った)し、なんだかすごく疲れたよ…。

びすたる

大学から借りてるノートPCの2台目が去年の9月に原因不明の壊れ方をした(参考:1台目が壊れた顛末)あと、しばらくノートPCなしで過ごしていたのだけど、この度ようやく新しいのが届いた。当然OSはVista(Home Premiumでした)。見た感じ、半透明のウィンドウフレームは割りと好み。少なくともXPデフォルトの青いフレームよりはだいぶマシ。XPのあれは本当に嫌いでいつもテーマをクラシックにして使ってたけど、今回はしばらくこのまま使ってみようと思う。
ちなみに2台目が壊れているのに気づいたのは、学会の一日目にそのノートを使って発表を終えたあとホテルに戻った直後で、これがもう少し早く壊れていたら学会で大恥かくところだったと考えるとかなり恐ろしい。発表の時USBメモリにバックアップを持っとくのは必須だと痛感した。

Dにおける静的配列の動的配列

Dでは、静的配列(多次元含む)は全体が連続した領域として確保されたはず。それならa[4][ ]みたいなの(静的配列の動的配列)とか、b[4][3][ ]みたいなの(静的な多次元配列の動的配列)ってどう確保されるの?と思ったので以下のコードを書いて実験してみた。
OSはWindows XP SP2、Dコンパイラdmd Ver.1.0を使用。

続きを読む

lame-3.97をdmcでビルドする

Windows上でdからlameをさわろうとしてlibmp3lame.libをビルドしようと試行錯誤したのでそのメモ。ビルドおよびテストプログラムとのリンクもできたけど、動いてないので未完(1/6 追記:ビルド手順自体は間違っていなかったっぽい)。
VCはオブジェクトファイルのフォーマットが違う(VCはCOFF、dmdはOMF)、bccは未解決シンボルが出る(_fdivとか_turboなんちゃらとか)のであきらめ、dmdと同じくDigitalMarsが出してるdmcなら大丈夫だろうということで、これを用いてビルドすることにする。手順:

  1. nasmを使うのでhttp://sourceforge.net/projects/nasm/からダウンロードし、パスを通す
  2. makeはbccのを使う(Makefile見つかったので)ので、bccのパスがdmcのパスより先に見つかるようにしておく(dmc.exe、lib.exeはbccとかぶらないので問題なし)
  3. Makefileを修正
    • NASMを@-nasmに
    • CCを@-dmc
    • CC_OPTS(のインクルードパス指定以外の部分)を -Nc -Jm -o -ff -DNDEBUG に(参考
    • lib_sources、lib_obj を libmp3lame フォルダの状態に合わせて書き換える(無いファイルを削ったりあるファイルを足したり)
    • ターゲット .c.obj で、 $<が$(CC)のすぐ後に来るように並べ替える(dmcはファイル名の後じゃないとオプション指定を読んでくれないっぽい)
    • ターゲット libmp3lame/libmp3lame.lib で、tlib /a を lib -c に
  4. config.hを修正
    • uint32_tが定義されるようにする(当該箇所の #elif defined(__GNUC__) を #else に変えるとか)
  5. libmp3lame\id3tag.cを修正
    • snprintfをsprintfに変える(当然引数も合うように)

以上。make -fMakefile.B32 とすると、frontendのビルドには失敗するけどlibmp3lame.libはlibmp3lameフォルダにできている。dmdでのテストプログラム(自作)とのリンクも成功。でも動かない。
しかし並べてみると大したことしてないのに、なんかやたら時間を食ったよなあ。そういうもんだというのはわかるけど。

(1/6 追記)なぜかWindows上ではdout.writeLine()が動かなかったのでどこでこけてるのか特定するのに苦労したけど、linux上で動かしてみると、ポインタを渡すところでdの配列を渡していたのがまずかったようで、その後テストプログラムをデバッグしたら少なくとも単純なエンコード・デコードはできるのを確認した。というわけでlameのビルド自体は上記の通りで良かったらしい。