2007年2月1日(木) おなかがいたいよ [同日]
● [DocoMomo] /etc最小版のinitrd
昨日作った リストを見て、 ファイルとディレクトリを下記にしぼったinitrdを作ってみました。
/sbin /bin /lib /etc/sysconfig/keyboard /etc/sysconfig/init /etc/mtab /etc/ld.so.cache /etc/termcap /etc/security/console.perms.d/50-default.perms /etc/security/console.perms.d/60-libnjb.perms /etc/security/console.perms /etc/inittab /etc/dev.d/default /etc/rc.sysinit /etc/init.d /etc/rc?.d /etc/localtime /etc/cpuspeed.conf /etc/profile /etc/rc /etc/selinux/config /etc/nsswitch.conf /etc/passwd /etc/fstab /etc/blkid/blkid.tab /etc/inputrc /etc/rc.local /etc/momonga-release /etc/redhat-release
とりあえずはハードディスクの/bootにコピーしてgrubから選択して run level 1に起動できるか試してみました。こういう時にファイルだけ 置いておけば後から選べるgrubは便利です。 起動には無事成功して、rootのシェルが使えました。
で、initrdのイメージ(cpioアーカイブをgzip -9で圧縮したもの)の 大きさは、docomomo-0.9.4の29890893バイトに対して/etcをしぼったもの が28872983バイト。これだけ苦労して3.4%の減量。またこれか…。 とは言え、実メモリの使用量はこの差1Mバイト程度は減るわけで、それ はそれでうれしいのかもしれません。
一方、etcをext2のイメージとして持つ場合には、およそ6メガバイト のファイルになります。つまり/etcを後から変えられないDocoMomoに対 して、USBメモリに入るファイルの大きさは合計5メガバイト増える計算。 …まあ許容範囲かなあ。
いまのところ、上のリストにもあるように、/sbin /bin /lib以下の ファイルは全てinitrdに入れるようにしています。これはrun level 1で そこそこの作業ができるようにしたい、と思っているからです。ここで、 /libの内容は、/binにあるファイルからリンクされているものと 昨日のリストにあるものに 限ると、まだまだ減量できるかもしれないですね。そのかわり、/libの 内容もSquashFSにして別のファイルとして持つことになります。あぁ、 unionfsにできるといいのにな。でも、unionfsは、Momongaのカーネルが対応す るまではおあずけです。
(追記) あー。/etc/passwd消し忘れてました。
● [DocoMomo] /lib最小版のinitrd
次に、/etc/passwdを消したあとに、/libにはinitrdに行くコマンドからリンクされているライブラリと、/lib/modulesと、/lib/kbd以下の必要なファイルだけを入れたinitrdを作ってみました。gzip -9したイメージは25068170バイト。これは効く。
で、ブートしてみてわかたことは、rc.sysinitが実行する/sbin/pam_console_applyなどがlibnss_files.so.2を必要とするが、lddでは見つけれられない(nsswitch.confを見てからロードするライブラリを決めるのかな)、また、rc.sysinitは他にもchownやchgrpを実行して、/etc/passwdにrootの行が、/etc/groupに root utmp floppy disk uucp の行が必要、ということでした。
そろそろ、これまでにわかったことをDocoMomoのMakefileに反映して、run level 3まで行く試験をしたいところです。
● ruby-entity-reference-0.1.6をリリースしました
ruby-entity-referenceは、ISO-8859-1あるいはUTF-8の文字列のうち、ヨーロッパ言語の一部の文字を実体参照に変換します。多言語のwwwページの文字コードの変換などの際にお使いください。
リリース0.1.6では、ドキュメントを整備しました。使用例や、APIドキュメントもあります。通常使うAPIは、EntityReference.referenciate(string, encoding, charset)だけなのですが。
2007年2月3日(土) 山頂は天気が悪そうだ [同日]
● [DocoMomo] docomomo-0.4.14でのイメージの大きさ
そろそろいろいろ工夫した版ができそうなので消してしまう前に大きさを記録しておこう。initrd.img: 29890893バイト、usr.sqs: 323657728バイトで合計337MB強。さて、工夫したやつはどうなるか?initrd.imgは大幅減、libとetcとusrも合わせるとちょっと増量になるといいのだけれど。
● [DocoMomo] docomomo-0.5.8でのイメージの大きさ
それでどうなったか。/etcも/libも一度マウントしていまうとそう簡単にはアンマウントできないことがわかりました。また振り出しに戻る。okujiさんのおっしゃるように(違う、okujiさんは、/etcの下のファイルをsymlinkにすると大変とおっしゃってたんだ)、/etc/init.d以下のスクリプトから/etcをアンマウントするのは結構大変なようです。
さて、何度もリブートしながら、親マシンのファイルも一部失いながらそろそろ良くなってきたと思われるdocomomo-0.5.8では、initrd.img: 27803903バイト、usr.sqs: 294871040バイト。308MB弱になりました。0.4.14と同じファイルシステムので構成なのにもかかわらず目に見えて小さくなったのは、使わなさそうなカーネルモジュールの削除のおかげでしょうか?…いや、それだけでも無さそう。なんだろうな?
では、リブートしてきます。無事に起動しますように。
● [DocoMomo] docomomo-0.5.9リリース
結局、/homeや/usrをumountするところを手直しして0.5.9としてリリースしました。tar ball置き場からどうぞ。Makefifleの変数がまちがえていて親マシンの日本語とC以外のlocaleのファイルを消してしまうバグも直ってるはず。でも気をつけてくださいませ…。
そういうわけで、/etc以下への変更を保存する目論みは保留となりました。まあMakefileが少し整理されて、イメージもだいぶ小さくできた(なんでだろう…)ので良しとする。もう少し細かい手直しをしたらソースファイルの配布の準備に戻ろう。
…ドキュメントにも更新しなきゃいけない記述がありますね。
2007年2月4日(日) 家族総出で、寝坊 [同日]
● RubyConf 2006 の裏番組、RejectConf の実施形式メモ (kiwamu日記)
Matzにっきより。
RubyConfの正規のセッションに漏れた発表を、夜になってみんなが集まって聴くという主旨で集まったとのこと。発表したい人に手を挙げてもらって発表者を決めるという形式は、正規のセッションに漏れた発表だけじゃなくて、もっと新鮮な内容も聴けそうだ。いいなあ。
RubyConf2007行きたいけれど時間もお金もありませーん。
● [DocoMomo] docomomo-0.6.3 /etcへの変更を覚えておいてくれる版リリース
DocoMomoは、大きめのメモリ (512MB程度以上)のあるix86マシンで大きめ(512MB程度以上)の USBメモリからLinuxを起動できるようにするツールです。DocoMomoの作成環境から引き継いだLinuxディストリビューションと設定で、使い慣れた環境をUSBメモリ上に構築できます。
昨夜、 /etcへの変更のあったファイルだけtarアーカイブにしてとっておく、という方法を思いつきました。それを実装したのが0.6.x。/etc/init.d/docomomoで、runlevel 3に行くときに/homeと/usrをマウントする他、/etcへの変更をとっておいたtarアーカイブを展開しています。逆にrunlevel 3から下に降りる時にはfileで変更のあったファイルを検出してtarアーカイブにまとめます。
/etc以下のファイルはけっこう書き換えられているのだ、ということを発見しました。mtabとかblkidとか。そういうのはほんとは/varに書くんじゃないのかなあ…。docomomoでは、マシン依存の設定の変更は保存しない方向で行こうと思います。xorg.confはしょうがないけど。
興味のある方は、tar玉置き場からどうぞ。
2007年2月5日(月) Vogですぜ、だんな [同日]
● 時々下に「テレビ取材されました。安心なお店」という広告が見える。いや、不安感煽ってるし。
● [Momonga] ビルドマシン再インストール中
カーネルのバグって2.6.19にあったんだよね。Momongaのsvnを見てみたら2.6.19のパッケージはみあたらない T_T
というわけでやっぱりハードディスクの不調を疑いつつ、そこら辺にころがっていたハードディスクに移ることにした。今度は/を9G、swapを1G、残りを/homeに。
● /etc/postfix/aliasesをいじったらnewaliasesを実行するのを忘れない。
● SElinuxがenforcingになっているとntpqが動かない。Momonga 3。めんどーなのでpermissiveにしてしまう戯け者。
● おシゴトマシンではgperfが絶賛稼働中。久しぶりだな〜。
● svn coしながらソースファイルをcpしていたらフリーズしましたよ。pingも通らないくらい T_T やっぱりマザーボードか、古い方のハードディスクが悪さをしてるのか…。あ、とりあえず古い方のswapを使ってないことを確認しよう。
● swapつこてました。swapoffしてさあどうだ。
● 落ちた。今度はハードディスクのマウントを一切やめてみなくちゃね。
● cd /usr/bin; ln -s fastjar jar が必要かな?そもそもfastjarでいいのかな。
● 米国で水陸空両用のホバークラフトキットが発売、値段も軽自動車並み (Technobahn)
すごいよ。空に浮いてるよ。
2007年2月6日(火) まだまだVogが続く [同日]
● [DocoMomo] docomomo-0.7.2 splash imageをつけました
DocoMomoは、大きめのメモリ (512MB程度以上)のあるix86マシンで大きめ(512MB程度以上)の USBメモリからLinuxを起動できるようにするツールです。DocoMomoの作成環境から引き継いだLinuxディストリビューションと設定で、使い慣れた環境をUSBメモリ上に構築できます。
すみません。splash imageを付けちゃいました。ゆーなさんのデザインしたMomonga、かわいいので。
興味のある方は、tar ball置き場からお試しください。
● [Momonga] 今日のへたれオモコン
npapi.hをみつけてくれないのでgccができない。
# cd /usr/include/ # ln -s firefox-2.0.0.1/npapi.h .
さーどーだ。
(追記)
/usr/include/npapi.h:51:21: error: prtypes.h: No such file or directory
がっかり。nspr-develかな。
● Thoughts on Music (Apple)
Steve Jobs による、Digital Restrictions Management のジジョーの説明が掲載されている。iTunes Music Storeから売られたDRM付きの音楽はiPod(最近のものは1000曲程度入るのだそうだ)ひとつあたり22曲。音楽業界でも結局CD売ってんだからDRMをかけても無駄じゃんか、とのこと。わはは。
いや、まあ、どうなるにしろ僕は計算機が壊れただけで聴けなくなるような音楽は買いたくない。
2007年2月7日(水) まだまだ白い空 [同日]
● gettextで得られる文字列を入れるバッファの大きさはどうやって決めるんだろう?
@ITに、「ロケールの問題でプログラムが正常に動作しない場合には」という記事が載っていた。gripというプログラムを例に採って、LANG=Cで使えるプログラムが日本語ロケール(ってFC6ならja_JP.UTF-8なのかな?)で使えない場合にどうやって修正するのか解説してある。曰く、char versionbuf[20];をchar versionbuf[22];にしろ、とのこと。えぇーっ?「ここで挙げた対処方法は、あくまで暫定的な措置なので自己責任の下で作業していただきたい」と断り書きがあるにせよ、これはさすがにまずそうだと感じる。きっと他のロケールで落ちる。
興味が湧いてきたのでコードを覗いてみることにした*1。grip-3.2.0のsrc/grip.cに下記のようなコードがあった。
char versionbuf[20];
(中略)
sprintf(versionbuf,_("Version %s"),VERSION);
label=gtk_label_new(versionbuf);
(中略)
gtk_widget_show(label);
VERSIONはconfig.hで定義されるマクロだろう。
この場合、versionbufに必要な大きさは実行時まで不明ということになるのかな。なら、malloc(3)でメモリ領域を確保するべきなんだろう。C99ならsnprintf(3)で必要なバイト数を測るか、C99が仮定できない場合にはprintf(3)のmanページにあるコードでメモリ領域を確保しつつ文字列を作ることになりそう。
さて、こうやってmalloc(3)で確保された領域の文字列をgtk_label_new()に渡した場合はこの領域はいつまで確保しとかないといけないか…ちょっと探しただけではわかませんでした。GUIは難しいね…結論はそれか?
*1 そんなことしてる時間がないのは自明の事実なのだけれど。
● [memo] Debian:i18n (ukai.org)
gettextについていろいろ探している過程で、「i18nについて世界のdeveloperにたいして言わなければいけない時に忘れてはいけないポイント」の書いてあるページをみつけました。もし国際化するべきプログラムを書く時があれば参考になりそうだ。i18nについて自分にたいして言わなければならないポイント。
● Citrixのウインドウを画面の端にドラッグして離したらメニューバーにアクセスできなくなった。もう用済みなので閉じたいのですが。ローカルのWindowsからはウインドウが選択されていないように見えるようで、Alt+F4でも閉じられないし、Alt+Space-Mでも移動できない。ネットワークが切れる(そのうち必ず切れる)のを待とうかとも思ったけれど、スタートメニューの横にならんでるアイコンを右クリックしてCloseを選んだら閉じられた。しかしデータベースとやりとりするのにデータベースサーバのウインドウを持って来ちゃうってのは斬新な発想だよねえ…。
● オモコンマシン死亡
ハードディスクの問題じゃなかったか…。 フリーズ時のtopは下記のような感じ。gccを作り中でした。 やっぱりファイルの操作時に不安定になるみたい。
top - 17:54:06 up 9:02, 4 users, load average: 1.07, 1.22, 1.25
Tasks: 71 total, 2 running, 69 sleeping, 0 stopped, 0 zombie
Cpu(s): 99.3% us, 0.7% sy, 0.0% ni, 0.0% id, 0.0% wa, 0.0% hi, 0.0% si,
Mem: 515452k total, 504420k used, 11032k free, 58796k buffers
Swap: 1004052k total, 144k used, 1003908k free, 289840k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
20989 zunda 25 0 8908 7780 372 R 99.1 1.5 1:11.81 bzip2
2313 zunda 16 0 1900 920 720 R 0.7 0.2 1:21.09 top
2269 zunda 15 0 6140 1148 824 S 0.3 0.2 0:03.74 sshd
20988 zunda 17 0 1748 680 588 S 0.3 0.1 0:00.04 tar
1 root 16 0 1908 636 540 S 0.0 0.1 0:00.82 init
2 root 34 19 0 0 0 S 0.0 0.0 0:00.00 ksoftirqd/0
3 root RT 0 0 0 0 S 0.0 0.0 0:00.00 watchdog/0
4 root 10 -5 0 0 0 S 0.0 0.0 0:00.00 events/0
5 root 10 -5 0 0 0 S 0.0 0.0 0:00.00 khelper
6 root 10 -5 0 0 0 S 0.0 0.0 0:00.00 kthread
8 root 10 -5 0 0 0 S 0.0 0.0 0:00.62 kblockd/0
9 root 20 -5 0 0 0 S 0.0 0.0 0:00.00 kacpid
83 root 10 -5 0 0 0 S 0.0 0.0 0:00.00 khubd
85 root 10 -5 0 0 0 S 0.0 0.0 0:00.01 kseriod
143 root 15 0 0 0 0 S 0.0 0.0 0:02.51 kswapd0
144 root 20 -5 0 0 0 S 0.0 0.0 0:00.00 aio/0
310 root 11 -5 0 0 0 S 0.0 0.0 0:00.00 kpsmoused
kernel-2.6.20に行ってみるか?ハードウェアの問題か?泥沼か?うーん…
(追記) 8日に古い方のハードディスクを物理的にはずして再挑戦。
top - 17:33:27 up 8:50, 4 users, load average: 1.02, 1.17, 1.22 Tasks: 71 total, 3 running, 68 sleeping, 0 stopped, 0 zombie Cpu(s): 99.3% us, 0.7% sy, 0.0% ni, 0.0% id, 0.0% wa, 0.0% hi, 0.0% si, Mem: 515452k total, 509740k used, 5712k free, 60724k buffers Swap: 1004052k total, 128k used, 1003924k free, 293064k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 19154 zunda 25 0 8908 7780 372 R 99.4 1.5 2:02.16 bzip2 1870 zunda 17 0 51604 43m 3616 S 0.3 8.7 0:09.62 ruby 1919 zunda 16 0 1896 916 720 R 0.3 0.2 1:22.08 top (後略)
で目の前で止まってしまいました T_T マザーボードか電源か…。嗚呼。
● parse error, unexpected $, expecting kEND (SyntaxError)
そういえば昨日職場でPythonのスクリプトを書いていた。
2007年2月8日(木) 風が強くなるのだそうだ [同日]
● Failするテストを作ってからcommitする
昼休みコーディング。少なくともプログラムを作りかけの段階では、failするテストを作った段階でcommitしてコーディングを中断した方が、次にコーディングを再開する時にどこで止まったか思いだしやすいことに気づいた。
でも複数人でコーディングしてたら嫌だろうなあ。Updateした瞬間に何をやらなきゃいけないか決まっちゃうことになる。
● 39歳でMIT教授!タンジブル・ビッツを生んだ石井裕/Tech総研
電電公社で開発したプロジェクトが注目されてアラン・ケイの目にとまり、MITに招致された石井裕さんという方へのインタビュー記事。僕もがんばらねばなあ…
2007年2月9日(金) memtestでは問題なし [同日]
● 無線LANをばしばしと使ったあと、そろそろPalmを充電しなきゃと思って電池の残量を見なおすと増えている。充電池でも、こういうことが起きるんだね。
● 「だらしないオーラ」を利用せよ (@IT)
僕がコーヒーを汲みにいくと、頻繁にみんなの分のコーヒーを淹れるはめになる。負け組だよなあ、とか思いながらね。
というわけでディルバートおもしろいです。@ITの日本語訳付きのものとか、毎日更新されるDilbert.comとか。毎日見てるわけじゃないけど〜。
そうそう、人によっては、ディルバートがおもしろい、と言うのはsnobbishに見えるらしいです。どうしてだろう。
● [pda] ついにPalmにGoogle Mapsを入れてしまった
なんとなく負けた気分になるのはなぜだろう。GoogleMaps.prc 433KB。Version 1.1.1。Googleから送ってくる地図データの転送量は基本的にはGoogle持ちなのだそうだ。へぇ。僕は携帯は使わないから無関係だけれど。
無線LAN経由で快適に使えたが、起動時に必ず無線LANをつなごうとするのが残念。接続をキャンセルすればキャッシュに残ってる地図だけ見られるのに。無線LANを「OFF」にしておくと起動してくれなかった。
まあ、緊急の時には役にたつかもしれないので入れておこうか。
● 54 passしてエラーは1つも無し。優秀だよな。あとできるのはCPUの抜き差しくらい?うーん…
● Windows VistaでPerlのプログラムを作るのは大変、というビデオ (YouTube)
…誤解を招く表現。いやー、こういう感じでしゃべるイギリス人居るよねぇ♪
Lingrで教えてもらったのを医学都市伝説で再発見。ビデオだけ埋め込まれていると検索語句が覚えられなくて困らない?僕だけ?
(追記) 消えてしまった。「Thank you」が良かったんだけどな。
● IDEインターフェースからハードディスク1台以外をすべてとりはずしてgccをビルト中。さてどうなるか…というか新しいハードウェアの手当てをしないとね T_T
● 「セーラー服と機関銃」 手作り英語字幕初体験! (ジャンクションより)
海部美知さんが、サンフランシスコで字幕の無い日本映画を上映するのに、Powerpointで映画に字幕を重ねて上映した、という話題を書いておられた。へぇー、読んでしまえばなんでもないようだけれど、すごいアイディアだよねえ。
たぶん、35mmフィルムのスクリーンの明るさに負けないプロジェクターが苦労なく手に入るというのもすごいことなんだろうと思う。
2007年2月11日(日) 暖炉が欲しいくらい寒い [同日]
● 部分的に戻るのにdiffを多用する
まだまだドタバタ開発中。頭の中にイメージとしてこう動作してほしい、という目標はあるのだけれど、なかなかコードにまで落しこめない。
で、ここはさっきからどう変更したんだっけ?と思いつつcvs diffをばしばし使ってしま…いたいところなのだけれど、ネットワークの向こうのcvsサーバとのやりとりはやっぱり待たされる。
sourceforge.jpでもsubversionも正式サポートされているのだし、そろそろ移行しなくちゃね。…いつやろう。
やっぱり今のブランチをマージできた後だな。
● sourceforge.netの場合はcheckout元のURLに気をつけないといけないようですね。
2007年2月12日(月) 山頂が見える。体調は回復基調。 [同日]
● sourceforge.netでcvsからsvnに移行する その1
しばらくcommitしていない方の仕事場用プロジェクトでやってみることにした。
sourceforge.netによるドキュメントより、「Importing Data into SVN」を見て、…うわー。全部自分でやるのか。
まず手元のマシン(Momonga 2からオモコン)に、足りないパッケージを入れた。subversion-cvs2svn-1.1.4-1mと rcs-5.7-21m。Momonga 2のリリース版のものが入ってよかった。
次に週に一回rsyncしているcvsレポジトリのバックアップのパスをとりあえず変更しておいて、次のバックアップで上書きされないようにしておく。そこからテンポラリなコピーをcp -aで作成し、不要そうなファイルを消す。CVSROOT/とAttic/を消してみた。
レポジトリのコピーのroot(CVSROOTがあったディレクトリ)に移動し、
$ cvs2svn --dumpfile=svndump . Error: must pass one of '-s' or '--dump-only'.
あら。古いのかな。
$ cvs2svn --dump-only --dumpfile=svndump .
画面に流れるメッセージを見ると、cvsへのcommitごとにsvnへのcommitを再現しているようだ。そのあと、タグづけもしてくれている。最後にsvndumpファイルをbzip2で圧縮しておいた。
次はsourceforgeへのインポート。
もう一度レポジトリのバックアップをとった。
次に、svndump.bz2をシェルサーバのグループディレクトリ(USERNAME@shell.sourceforge.net:/home/groups/P/PR/PROJECTNAME/)にscp…connection refusedですと。
SourceForge.net: Site Statusより、
( 2007-02-12 10:53:39 - Project Shell Service ) 2007-02-12: The shell server was taken offline for unscheduled maintenance. We estimate the outage will last at least 24 hours.
あい。待ちます。
● [memo] バックアップする時のcdrecordのオプション
$ cdrecord -v -dao dev=/dev/hdX ISOファイル名 cdrecord: WARNING: Data may not fit on current disk.
アホでした。なぜかDVDに7GB入ると思いこんでた。正解は4.7GB
● ディクシー・チックス、グラミー賞受賞おめでとう (ベイエリア在住町山智浩アメリカ日記)
町山さんの上記の記事を読んだ。お、それはおめでたい、と思ったら地元の新聞の一面にも載ってたよ。すごいな。
おめでたい記念に、以前町山さんの記事を読んで買ったCD*1をファイルに落とした。これでPalmで聴けるよ。
…というところで実家に置いてあるCDプレイヤーが懐かしくなったよ。高校のときにある友人*2のバイトしていた店で薦められて買ったもので、とてもいい音がする。あ、いや、Playstation 3には負けるんだろうけどさ。いつも圧縮された音ばっかり聴いてたらだめだよね。
● www.textfile.orgで「はてなテレビ」というものを知った。はてなとは無関係そうなところがおもしろいよね。動画ってやっぱり儲かるんかいな。
2007年2月13日(火) さみーよ [同日]
● OpenSSLが再認定されるまでの苦難の道 (Open Tech Press)
OpenSSLが5年の作業の後に、アメリカの政府機関が機密情報を扱う場合にソフトウェアに要求する認定を受けた、という話。イロイロ大変だったんだろうなあ。おめでとうございます。
● [memo] さよならコピーレフト
上のOpenSSLの話題について読んでいる時に、Open Tech Pressで目についた記事。以前書いた、「WebサービスにおけるGPL的なライセンス」に関連した話だろう。
僕にはまだいまいち問題点が理解できていない (wwwブラウザで表現されるユーザーインターフェースは、そりゃ自分に合うように変えたいけれど、どうせそこで表現されるデータは彼らのものだ) のだけれど、読んどかなくちゃね。
● 遠くのマシンでxinetdの代わりにnetworkをrestartしてしまって焦る。
2007年2月14日(水) やれやれ [同日]
● このサイトが転送量の制限にかかって見えなくなっていました。ご迷惑をおかけしました。転送量が上位2つのIPアドレス (ask.comとgoo.ne.jpの、多分クローラー) が転送量全体の半分以上を占めていましたのでアクセス禁止にしました (ask.comは検索結果にこの日誌が出てこないので、UAとアドレスブロックで拒否)。ちなみにだいぶ離れて3位は日本のある大学のドメインのマシン。これは何だろう?
● 更に、長時間にわたって頻繁にリクエストをくださるIPアドレスから、しばらくの間この日誌を閲覧できなくなるようにしました。転送量で制限したいのですがtDiary側に改造が必要なのでリクエストの回数で。例えば3時間の間に240回以上閲覧してくださる方を制限するだけで、転送量は半分程度になりそうです。リクエスト回数の記録に使うPStoreのファイルは7.2KBほどの見込み。
2007年2月15日(木) やれやれ [同日]
● このサイトがまた見えなくなっていました。今度はハードディスク障害が原因だったようです。ご迷惑をおかけしました。
● F-22「ラプター」、嘉手納基地への飛行の途中でハワイに帰還・搭載電子機器に障害が発生 (Technobahn)
沖縄に配備されるF-22が、ハワイから沖縄に向かう途中「コンピューターのソフトウェアに障害が発生」して「引き返していた」とのこと。
きっとあれだよ、日付変更線を越えらなかったんだよ…んなはずあるかい。
(2月26日追記) slashdot.jpには同じことを考える人も…ほんとかなあ。
● Picasaウェブアルバムを使ってみる
PicasaウェブアルバムはGoogleの画像ファイル閲覧サービス。友達が撮った写真を見せてもらうのに利用した。いい写真ばかりでよかった…のだけれど、ウェブアルバムとしての機能はイマイチなように感じた。
せっかくなので、後で似たもの(もちろんこんなに高機能である必要はない)を作る時のために初めて使った感覚を記録しておく。まず、URLがわかりにくい。上でリンクを貼ろうとしたのだけれど、PicasaというアプリケーションのURLはあっても、PicasaウェブアルバムというサービスのURLは簡単にはみつけられなかった。(友達からもらったURLは、そのアルバムのためのURLのようだった。) 次に、反応速度が遅く感じられる。アルバムを開くと、いかにもAJAXです、という感じでもっさりと縮小サイズの写真が表示されていくのだけれど、ある枚数以降の写真は灰色のままだった (Momonga 2/firefox-1.0.6-2m。Windows XP SP2/Firefox 2.0.0.1では期待通りに表示された)。さらに、タブを作って閲覧することができない。写真を何枚かピックアップして見比べたかったのだけれど、いちいちクリックしてもっさりと大きい写真が表示されるのを待つことはできなかった。また、中クリックや右クリックで新しいタブで開くという動作をさせることはできなかった。写真そのもののURLがわからない。気に入った写真を家族にメールで知らせたかったのだが、大きい写真が表示されている時には「authkey」というクエリのついたURLになっていて、写真によってこのクエリの値が異なる。このURLで家族も同じ写真を見ることができるのか直感的にわからなかった。
というわけで、直感的なURLと、アプリケーション側ではなくブラウザ側で統一されたユーザーインターフェスは僕にとっては大事なんだなあ、とわかった次第。
しかしWeb2.0用のオープンソースライセンスが普及すれば自分でユーザインターフェースをいじれるようになるのかなあ…。よくわからない。
2007年2月16日(金) もー金曜日 [同日]
● [memo] 今度こそ継続がわかるかも!
内部イテレータを外部イテレータ化する (enbug diary) あとでちゃんと理解する!がんばる!
● Makefile.amでつくるライブラリが、同じパッケージで作る別のライブラリに依存していることを表現する
FSF踏み絵実施中。「依存するライブラリ名_la_LIBADD = 依存されるライブラリ名.la」をMakefile.amに追加したら依存されるライブラリを先に作ってくれるようになったようだ。
2007年2月17日(土) 久しぶりに南十字星を見た [同日]
● 家族とずんこの友人と4人で山へ。風が強くて寒かったのだけれど、久しぶりに仕事ではなく星を見た。西の空がぼんやり青かったのは黄道光なのかな。
2007年2月19日(月) 山頂作業。冷房効きすぎ。 [同日]
● 今日は自分で落下防止ハーネスが着られるようになりました。まる。
● JellyとJamの違い
ずんこがどうも日本語で言うジャムのことをJellyと言っているようなので、辞書に問いただしたところ、イギリスではJam、アメリカではJellyということがわかった。
アメリカでのJellyには日本語で言うゼリーの意味もあるけれど、普段はみんなJell-oと言っているような気がする。厳密にはこれは商品名。
2007年2月20日(火) まだまだ寒いよ [同日]
● オモコンマシン代替案
shiroさんが、newegg.comで買ったパーツでPCを組んだそうだ。
いろいろな通販サイトをまわって高い送料にげんなりしていたのだけれど、確かにnewegg.comは送料が安いみたいです。やっぱりマザーボードとCPUを新調しちゃおうかな…とは言え何を買うのがいいのかよくわかってないのだけど。
● 日頃あまりつかっていないドライブのデフラグをしたら、プロットが青と白だけになった。なんとなくうれしい。
2007年2月21日(水) 歯医者日和 [同日]
● ずんこの歯のチェックに行ったらちょうど空いてるので僕のクリーニングもやろうということになった。以前と同じくCCDでレントゲン写真を撮ったあと、今回の新兵器は歯のための超音波洗浄器。前回針金でごりごりやってもらったよりは痛みが少なかったような気がするよ。
● [run] 最短コース 3.14マイル 26分23秒
MSG中毒のため今日は食べるのを控えていたのだけれど、その影響か、走りはじめには左腹が、後半には右腹が痛くなった。呼吸器系リミットはまだ続いているが回復しつつはあるかな。
● [tDiary] 後日談プラグインのバグの修正
miasaka_mさんにお知らせいただいた複数の月の後日談を期待通り表示できないバグをrev 1.8で修正しました。そのほか、CSSのインデントをきれいにしました。お使いの方は更新をお願いします。ご報告をいただきありがとうございました。
● 「実践『JavaからRubyへ』〜血があつい鉄道ならば/走りぬけてゆく汽車はいつかは心臓を通るだろう〜(Internal Edit.)」 (角谷HTML化計画)
あとで見る!ぜったい!
● 今日の継続
やっとわかったこと。 下記のようなコードで、Bの行で継続をcallして戻る先はAの行ではなくてCの行。 callccに与えられたブロックの後に行くようだ。 もちろん、以下のコードでは、 Bの行をコメントアウトしてもそのままCの行に進む。
callcc do |c| #A continuation = c : continuation.call #B end #C
これを念頭に置いてokujiさんのコードを読むと、2回目以降のadvanceは下記(okujiさんのコードより抜粋して註釈を加えた)のように進むことがわかる。
def advance callcc do |o| # (1) @outer = o # (2) if @inner.nil? @container.__send__(@name, *@args) do |*i| callcc do |c| # (5) @inner = c # (6) @outer.call(*i) # (7) end # (4) end raise StopIteration else @inner.call # (3) end end # (8) end
(3)から(4)へのジャンプは継続によるもので、 次に(4)から(5)に行く過程で内部イテレータがひとつ進んでいる。 さらに、(7)から(8)へのジャンプは継続によるもので、 (7)でcallに与えられた引数が(1)ではじまるブロックの返り値となる。
つまり、@outerの継続で内部イテレータのブロック引数を外にとりだしていて、 次のadvanceで内部イテレータに戻るために@innerの継続を利用してるわけですね。
なるほどぉ。
しかしまだわからないこと。なぜ(3)から(4)に行く過程で、 内部イテレータの状態が元に戻ってしまわないのか? 「状態をすべて保存する」という意味での継続だと戻らなくちゃいけないような気がするのだけれど、それじゃあいつまでたってもイテレータは進んでいかないし、そもそも継続を使う意味がないような気もする。 ということは、RubyならRubyで、継続を使いやすいように、継続で戻される状態と戻されない状態が決められてる、ということなんだろうか…。夜も眠れなくなりそうだ(おい)
というわけでそろそろ寝ます。
2007年2月22日(木) ネットワークが不安定みたい。天気も。 [同日]
● この日誌、じゃない、このサーバへのhttpでの接続がよくタイムアウトになる。このサーバ自体の負荷の問題もあるのだけれど、他にもつながらなかったりデータ転送速度の遅いサイトがいくつかある。家サーバへのSSHの接続も、すぐつながる時となかなかつながらないことがある。Internet traffic reportをみてもとても悪いわけではなさそう。何だろう。Rimo障害も関係あるのかな…。
2007年2月23日(金) 寝すぎた [同日]
● 昨日のネットワークの問題は仕事場でのハードウェアの不具合によるものだったようです。パケットロスが増えると昨日みたいに見えるサイトと見えないサイトがあるように見えたり、応答が遅く見えたりするのかな。
● いや、インターネットの障害もあったということみたいでした。このホストの負荷も含めて、いろいろあったんだねえ。
● 「負荷とは何か」(naoyaのはてなダイアリー)によると、Linuxはload averageを計算するときにキューに入っているプロセス数を単位時間で割ってるのだそうだ。それぞれの瞬間のプロセス数(のある時間での平均)だと思いこんでいたので意外。単位は何になるんだろう?
● コストパフォーマンスを考えるとオモコンマシンはAthlon 64 (Dual coreじゃないやつ) を使うのがいいのかなあ。geeks.comではマザーボードの選択肢があまり無いのが残念。ああ「Almost gone」になってるし…。
● 現有のメモリも電源も使えなさそうなことが判明。うーん。
2007年2月24日(土) 飛行機飛ばしまくり [同日]
● そういえば海軍の飛行機(4発のプロペラ機)もtouch&goの練習をしてたよ。
● Rubyの継続の返り値と帰り先
人間は一度止めた作業を再開するのにけっこうコストがかかると思う。 それはともかく。
そろそろリファレンスマニュアルに書いてあることが理解できるかもしれないと思って見てみた。
曰くcallcc()は
- ブロックの返り値を返す、が、
- Continuation#call()が呼ばれた時はcallの引数を返す
なるほど。前回わかったように、 okujiさんのコードでは二番目の仕様を利用して内部イテレータの引数を 外部イテレータに渡してましたよね。
okujiさんにツッコんでいただいたcallccがreturnするところに帰るというのは、上の1項目の仕様だと思うのですが、下記のようなコードを実行してみるとよくわかりました。
$ ruby -e 'continuation = nil
> puts callcc{|c| continuation = c; "hello"}
> continuation.call("good bye")' | head
hello
good bye
good bye
good bye
good bye
good bye
good bye
good bye
good bye
good bye
-e:2:in `write': Broken pipe (Errno::EPIPE)
from -e:2
最初はcalccのブロックの値がputsで表示され、putsの後の Continuation#callが呼ばれると、callccが再び callの引数に与えた値を返しています。 なお、Continuation#callに引数を与えなかった場合は、返り値はnilに なっていました。
● Rubyの継続では何が保存されるか
本題。きっと今日中には理解できないと思うけれど。リファレンスマニュアルでは、calccを呼ぶ「直前の状態(ローカル変数の定義、スタックフレーム)を」記憶する、とありました。
まず、ブロックのなかで変えたローカル変数がどう扱われるかみてみ たいような気がします。
$ ruby -e 's="good morning"
c=nil; callcc{|c| s = "hello"}
puts s
c.call' | head -3
hello
hello
hello
-e:3:in `write': Broken pipe (Errno::EPIPE)
from -e:3
あれ。最初の一行は「good morning」かと思ったんだけどな。下記の 場合は、callccを呼ぶ直前のsの状態に戻るのなら、ぜんぶ「good morning」かと思ったのですが、そうではありませんでした。
$ ruby -e 's="good morning"
c=nil; callcc{|c|}
puts s
s = "hello"
c.call' | head -3
good morning
hello
hello
-e:3:in `write': Broken pipe (Errno::EPIPE)
from -e:3
うーん…。
継続なだけに、続く。
2007年2月25日(日) 山のち飛行機 [同日]
● HPからPavilionを買うとfree shippingだ。これはいいなぁ。でも、ケース付きでそれほど高くないとは言え、Windows VistaやらDVDドライブやら要らないものにお金を払うのはもったいない気がする。
● ssh越しのcvs commitが、「new revision: …」の行を表示したあとブロックしてしまった。どうするべ…とりあえずシャワーを浴びよう。
● 風呂上がりにcvs commitを^C、cvs upすると同じファイルについての「Merging differences between…」でブロックした。cvs statするとNeeds Mergeとなる。じゃあcvs co…今度は別のファイルでブロックした。でも新しいワーキングコピーの中ではcvs upが終わった。revisionも新しいもの。まあこれでいいか。
● もう一度commitしてまた同じ事態に陥る。ねよ orz
2007年2月26日(月) 停電だあてーへんだあ [同日]
● 停電のテストって難しいよねぇ、とか言ってると準備できる前にホンモノが来るんだよねぇ。
● [run] 最短コース 27分06秒
今日は消化器系リミット。しかしみなさん、ジョギングをすると消化器系の活動が促進されると思いません?僕だけかなあ…。
とにかく先週に比べるとだいぶ楽にはなった。継続*1は力なり。
*1 継続違い。
● [Ruby] PStoreされたデータの内容を表示する
たまに欲しくなる。irbでせこせこタイプしてもいいけど。
#!/usr/bin/env ruby
require 'pstore'
require 'pp'
ARGV.each do |path|
begin
PStore.new(path).transaction(true) do |db|
pp db
end if File.exist?(path)
rescue
puts $!
end
end
● 菅野よう子、ええなあ。いまさらながら :)
2007年2月27日(火) 朝焼け時々土砂降り [同日]
● Linuxが起動される手順
ふと思い立って、以前同僚に宛てて書いたメールの内容を少しだけ整理して、「Linuxが起動される手順」として公開しました。バージョン2.6前後のLinuxがどのような手順で起動されるか、概要を説明してあります。
Linuxのインストールはしたことがあるのだけど、例えば外付けのハードディスクから起動するなど、もう少し変則的な構成にしたい、という人には参考になるかもしれません。
ご活用ください。誤りなどの指摘も大歓迎です。
● 山頂、雪積もってますよ。スキーしたいなあ。(山頂では嫌だけど。)
● かなしいとき〜不具合が起きた日付を地方時だと思ってログを解析し終わってから世界時だとわかった時〜。しょぼーん。
● Windows XPでSkypeを3.0にしたら、Windows Firewallからブロックした旨表示があったのにつながった。すげー。でもAdminになったら許可してあった。うげー。
● わかった。前のバージョンは一般ユーザーとして入れてあったのでパスが違うんだ。
● 英語版のWindowsなのにSkypeが日本語になってますよ。きもちわりー。
2007年2月28日(水) まだまだ雨は続く [同日]
● [Ruby] るびま18号出ました
あー…。進捗管理のできない編集者。関係者のみなさん、すみませんでした。次号にはぜひに m(..)m
というわけで、お楽しみください。今号は僕もいち読者として楽しみますです…すみません。編集のみなさん。
● るびま18号の巻頭言に、高橋さんが、Rubyの会の「ビジョン」について書いておられる。組織の運営についてはなしをするときは、ビジョンと一緒に、Mission StatementとForce Field Analysisがくっついてくる。まず、組織の存在意義をMission Statementとして、組織の内外の誰にでもわかりやすい短い文章にまとめ、それを実現するための短期的な展望をVisionにまとめ、そのような状態にいきつくために、何が後押しをしてくれて何が障害となっているかを、Force Field Analysisとして分析する…ということを以前習ったことがあるのだけれど、はて、Rubyの会のMLに書くべきか、どうしようか。
● とりあえずシゴトしよう。
● わあ、Rubyist Hotlinksに僕が登場してるよ。ぜひ来てください(はーと)。でもVMの開発はしてないよなあ…
脳味噌から汁が出るくらい考える。こともある。
> kou [gtk_label_new()だと,中でg_strdup()しているので,すぐに開放してかまいません. たぶん,ふつ..]
> h_nakamura [Momongaのgripではちゃんと日本語出てるなぁ、と思ったら char versionbuf[30];にするとい..]
> zunda [なるほど。kouさん、h_nakamuraさんありがとうございます。BTSを見てもgtkの関数には便利そうなのがあり..]