_ 餡麩三喜羅(あんぷさんきら)という麸饅頭が美味しい。
_ 月に一度の入浴タイム。
_ 気づいた模様。
_ シャワーでお湯をかけて激痩せわんこ状態にした後、シャンプーを泡立てておいた軍手で速攻!!
_ なす術も無く洗われる柴わんこ。
*1: だっこされるのが好きなのでだっこ中は滅多なことで暴れないのです。
*2: 犬用です。
_ 過去に連載されていたもので Web 上に掲載されているのが結構あるんですね。
_ ずっと前に買ったことあるけどサッパリ分からなかった雑誌です*3。
_ 過去の記事をまとめた CD-ROM も登場してるみたいです。
*3: そりゃ、いきなり読んでも分からないよな。
_ saino さんの日記より。
_ 試してみましたが ncurses が使えるみたいですよ。
_ Configure スクリプトが ncurses を検知できないみたいですが、「お前、termcap 関連のライブラリ持ってないの?」とスクリプトに聞かれたときに -lncurses を書いてやったら使えました。
_ プレイした感想。
_ ・・・うーむ。画面の文字が NetHack と違うので困惑したり。
_ NetHack みたいなメッセージの生成方法みたいなので日本語化は大変そう。
_ ということで saino さんは Ruby で再構築中だそうです。
_ あ、saino さん。12 月から日記の過去ページが読めなくなってますよー。
_ C言語 文字列操作+ファイル入出力完全制覇で標準関数のソースの一部を解説していたりしていたのが何か面白かったので glibc のソースをもらってきて果てしなくぞんざいに読んでみることにしました*1。
_ GNU のメインサーバからもらってくるのは迷惑になるといけないのでミラーから入手することに。
_ 日本の Ring サーバから glibc-2.3.2.tar.bz2 をもらってきました。
_ うぉー、圧縮して十数メガバイトありますね。
_ とりあえず馴染みの strcpy を捜索することに。
_ 展開して見るも何が何処にあるかもサッパリ分からず。
_ grep してもテスト用コードがゾロゾロ。
_ このまま無理をして山に踏み入るのはとてつもなく危険だ。確実に遭難する。
_ 樹海に迷わないように gtags というガイドを雇う*2。
_ gtags が長い時間をかけて地図を描いたところで出発。
_ ところがこまったことに gtags 君の結果はこんな感じ。
strcpy 401 /home/rltm/Src/glibc-2.3.2/string/bits/string2.h # define strcpy(dest, src) \ strcpy 27 /home/rltm/Src/glibc-2.3.2/sysdeps/alpha/strcpy.S ENTRY(strcpy) strcpy 24 /home/rltm/Src/glibc-2.3.2/sysdeps/generic/strcpy.c #undef strcpy strcpy 28 /home/rltm/Src/glibc-2.3.2/sysdeps/generic/strcpy.c strcpy (dest, src) strcpy 358 /home/rltm/Src/glibc-2.3.2/sysdeps/i386/bits/string.h strcpy (char *__dest, __const char *__src) strcpy 569 /home/rltm/Src/glibc-2.3.2/sysdeps/i386/i486/bits/string.h #define strcpy(dest, src) \ strcpy 54 /home/rltm/Src/glibc-2.3.2/sysdeps/ia64/strcpy.S ENTRY(strcpy) strcpy 63 /home/rltm/Src/glibc-2.3.2/sysdeps/s390/bits/string.h strcpy (char *__dest, __const char *__src) strcpy 30 /home/rltm/Src/glibc-2.3.2/sysdeps/s390/s390-32/strcpy.S ENTRY(strcpy) strcpy 29 /home/rltm/Src/glibc-2.3.2/sysdeps/s390/s390-64/strcpy.S ENTRY(strcpy) strcpy 68 /home/rltm/Src/glibc-2.3.2/sysdeps/sparc/sparc32/strcpy.S ENTRY(strcpy) strcpy 49 /home/rltm/Src/glibc-2.3.2/sysdeps/sparc/sparc64/strcpy.S ENTRY(strcpy) strcpy 44 /home/rltm/Src/glibc-2.3.2/sysdeps/vax/strcpy.s ENTRY(strcpy, R6)
_ どれを見ればいいんだぁ!?
_ ディレクトリ名の sysdep/ から察するにハード別の処理にしてあって strcpy がいくつか用意されているのかな。
_ んじゃ、x86 マシンなので i386/bits/ を・・。
_ うーむ。#define で関数っぽくしてあるのね。慣れないので読みにくいよぉ。
_ っていうよりこれ、アセンブラで書いているのか。最適化してあるのね。
_ 諦めて i386/i486/bits/ を見る。これまた #define か。初心者にはつらいよ。
_ 藁をもすがる勢いで generic/stcpy.c を見る。
_ 発見!!
_ フムフム。まん中のループでコピーしてるのね。reg_char は別のファイルで char の別名にしてあるのね。
_ やっぱりポインタを使ってるのかぁ。って、*s++ って *(s++) の順で読めばいいんだっけ*3。
_ などなど、読んでみたり。
_ しかし、関数見つけるだけでもこんだけ時間かかってるとは先が思いやられる。:-(
*1: 正確には昨日の夜の話。
*2: 給料の高い htags は雇わなかった。
*3: 本読め。
_ 某 FM が聴けるという情報をどこからか仕入れてきて試してみる。
_ Linux 用のバイナリは古いので駄目だった。
_ ソースコードアーカイブが見あたらないので CVS から入手。(Anonymous パスワードは anon です)
$ mkdir peercast $ cd peercast/ $ cvs -d:pserver:anon@peercast.org:/cvs/peercast login $ cvs -z3 -d:pserver:anon@peercast.org:/cvs/peercast co core $ cvs -z3 -d:pserver:anon@peercast.org:/cvs/peercast co ui $ cd ui/linux/ $ touch makedepend $ make -f makefile
_ 簡単にコンパイル完了。
_ iptables の設定を共有できるように変更してトライ。
_ http://localhost:7144/ にアクセスして Settings をいじる。
_ Type が Normal と表示されているので共有できている模様。
_ 早速聴く。懐かしい DJ さんだぁ。うぉー。
_ しばらくして Relayed channels を見るとアクセスがある。共有できてる模様。
_ Cyber Dentist こと歯医者さんの木本和久さんがやっている土曜日の ELE-TOPIA が楽しみ。
_ 昔はレイバースヒルとかいう名前だったんだよなぁ。
_ 今はどんな番組になってるんだろう。Web を見るとクラブ寄りな感じになってるみたい。
_ うまく聴くことができたら 6 年ぶりぐらいか。
_ Linux 版も設定ファイルが Windows 風に peercast.ini という名前の上、実行ファイルがあるディレクトリに設定ファイルが作成されてしまうのが何か嫌。
_ やっぱり HOME 以下に .peercastrc みたいに置きたい。
_ ui/linux/main.cpp をテキトーにいじってみました。
#if 0 /*rltm*/ iniFileName.set("peercast.ini"); #else char *env_pointer; char ini_file_tmp_buffer[256]; env_pointer = getenv("HOME"); sprintf(ini_file_tmp_buffer, "%s/%s", env_pointer, ".peercastrc"); iniFileName.set(ini_file_tmp_buffer); #endif
_ うむ。ちゃんと設定を読み込んだし書き込めてるみたい。
_ これで大丈夫かな*1。動いているからいいやというのは自信がなくて心配なんだけど。:-(
*1: あー、ini_file_tmp_buffer が溢れたときとか何も考えてないなコレ。まぁ、自分だけで使ってる分にはいいけど。
_ 日テレの後追い*1番組を見ようとしたらだいだひかるさんがネタをやっていたのでパス。
_ 面白いと思うけど見たくないんだよなぁ。
_ 終わったのを確認して鑑賞。
_ こういうネタが勝負の番組は文字を出すの止めて欲しいなぁ。
*1: 国営放送のね。
_ 僕も手持ちのMp3ファイルを変換*1するときに @IT のページを読んだんですが Perl がよく分からない上にモジュール追加とか面倒そうだったので UNIX のパイプを使って変換しました。
$ madplay test.mp3 -o wav:- | oggenc - -o test.ogg
_ madplay じゃなくて mpg123 でも標準出力に出せば同じことが出来たはずです。
_ この方法で順次変換していく方法と wave ファイルを作って一気に変換する方法でファイルサイズとか音質に変化があるのかどうかは分かりません。
*1: また CD からリッピングするのは面倒ですし。
_ こまつだいらせいいち さんが検証してくださいました。ありがとうございます。:-D
_ 一時ファイルを使う方法とパイプを使う方法では所要時間と ogg ファイルの容量はほぼ同じという結果だそうです。
_ それにしても id3ed とか awk の利用法とかが為になります*2。
_ awk の本を立ち読みしに行こうかな。
_ あー、でも、もう C 言語で樹海にはまってるな。
_ 森を増やしてもさらに迷うだけな気がしてきました。
*2: 僕は恥ずかしいことに XMMS を使って人力でタグを書き足していたのです。
_ 今日は比較的素直に人の言うことを聞く日だった模様。
_ 普段は散歩から帰ってきた後で足を拭かれるのが大嫌いで暴れるのだが今日は大人しく拭かれていた。
_ 夜になって足下にスリスリ甘えてきたのでちょっと相手をしてあげると大喜びでじゃれてきた。
_ おもちゃの取り合いをしてやると興奮してジャンプしまくり。
_ 疲れたのか、ケージに入るように催促すると素直に入る。
_ しばらくして就寝。おやすみ。
_ Emacs で M-x c-macro-expand をするとプリプロセッサが処理するものを処理して表示してくれることを知った。
_ で、その処理したメッセージに /lib/cpp -C と書いてあったので Emacs にマクロ展開機能が組み込まれているのではなくて Emacs がプロセッサを呼んでいるのだろう*1と思い試してみました。
$ cd jnethack $ cpp -I./include/ src/mhitu.c
_ おー、ズラズラと表示される。
_ こういう処理をした後にコンパイラがコンパイル作業を始めるのね。
*1: すでにある道具を利用するというのは極めて UNIX 的(?) だと思いました。
_ 夕方の散歩。
_ 生まれが一日違いの知り合い柴に遭遇。
_ お互い接し方が分からず尻尾を振りながら肉球パンチをしようとするので引き離す。
_ お互いに未練タラタラな感じで別れる。
_ 犬同士の付き合い方を教えてあげないといけないなぁ。
_ 樹海を歩くために C の宣言と定義の記述の説明を読み読み。
#include <stdio.h> int main(int argc, char *argv[]) { int i; int *p = &i; i = 5; printf("%d\n", *p); return 0; }
_ すごく簡単な例ですが 4 行目の *p と 9 行目の *p がごっちゃになったりしたことがあります。
_ 久しぶりにテキスト辞書変換プログラムの話。
_ 変換用の関数に引数が多いのが何とも。
_ 読み、漢字、品詞をまとめて構造体にしてポインタを渡すとかしたらいいのかな。
_ とりあえず持っている本のそれっぽい部分を読むことにしよう。