この日記にはツッコミを入れられます。 ツッコミを入れたい日付をクリックすると、フォームが現れます。
xreaでtDiaryを使う方法はxrea.com で tDiary を使う方法やインストールメモやXREA + tDiary + Namazuをどうぞ。
http://fprog.nifty.com/fprog/2005/09/post_8c7a.html#trackback からたどっていって発見。裏裏と裏表がFPROGとFPLの移転先というのはちょっと違うような気がしないでもないですが。
ftplugin/ruby.vimから(今だと1.8を)とってきて~/.vim/ftplugin/ruby.vimにおいて、さらに~/.vimrcでsource $VIMRUNTIME/macros/matchit.vimのようにしてmatchit自体を有効にしておけばいいらしい。そうすればdo/endやbegin/rescue/ensure/endなどを%で移動できるようになる。matchit自体を有効にしているので.vimrcのif/endifやシェルスクリプトのif/elif/else/fiなども%で移動できるようになる。
ちなみに前回の手順だとruby-matchit.vimというのを使ったが、ftplugin/ruby.vimの方が新しくて良さそうな気がする。
sargeの風博士が落ちる話はkazehakase 0.2.7-2.sarge1を使ってください、ということのようです。
原因はmozilla側で互換性のない変更が入ったからで、風博士が悪いわけではない(はず)です。
ここ数日、メールが遅延しているような感じだったが、今は大丈夫そうな感じがする。
1日頃に遅延が発生するのならmailmanの通知メールが原因かなと言う気がするけど、4〜5日頃というのは心当たりがない。
ruby-core MLでsignatureに日本語で「カラチ」と入っていて、何かときいてみたら「カラチ」で間違いなかったという話が[ruby-core:6171]あたり。
「朝日ネットのサーバーは,故障のためしばらく停止します.(2005/10/05)」という状態らしく、debianのaptとcygwinのsetup.exeで使っていたので不便。aptはどのミラーでも安定版なら差がないのでいいとしても、cygwinはミラーによっては古いからどこを使えばいいのか悩む。
LVM論理ボリュームの拡張を見て、lvextendなどのコマンドはdfコマンドの結果などで出てくる/dev/mapper/VG-LVという形式のパスではうまくいかなくて、/dev/VG/LV形式のパスじゃないとだめだったというのを思い出した。
/dev/VGはroot権限がないと中が見えなくなっていて/dev/mapper/VG-LVへのシンボリックリンクがあるだけで、実体は同じに見えるのになぜだろう?
Ruby/SDLはmswin32版rubyとWin32's binary(ver 0.9.4) for Ruby 1.8の組み合わせで動いた。それからVMwareに入れていたdebian sargeでも試してみたらlibsdl-ruby1.8を入れるだけで簡単に動いた。
test/unitの話はTAの中でもいろいろ話が盛り上がったりしておもしろかった。途中、cygwin版rubyでtk runnerを試したり、sargeの方でgtk2 runnerも試してみたりしていた。
とりあえず高橋征義さんといろいろ話が出来たり、babieさんたちとk-ofでどうするのかという話がいろいろ出来て良かった。
nVidia 謹製ドライバを使いたいを参考にしてnvidiaドライバを入れた。
まず、sudo aptitude install nvidia-kernel-source nvidia-kernel-common、sudo module-assistant auto-install nvidia-kernel-source、sudo aptitude install nvidia-glxという感じでパッケージを入れた。
次に/etc/X11/XF86Config-4の編集。Section "Module"の"GLcore"と"dri"のLoadをコメントアウトして"glx"を追加しようと思ったらあったのでそのまま。lg3dのためにDriver "keyboard"をDriver "kbd"に変更。Section "Device"のDriver "nvidia"のところには、これもlg3dのためにOption "AllowGLXWithComposite" "yes"を追加しておいた。
nvidiaのmanはないのでオプションの説明はどこかと思ったら/usr/share/doc/nvidia-glx/README.gzにあって、"AllowGLXWithComposite"にはENABLE AT YOUR OWN RISK.
と書いてあったので、lg3dを使わないなら"yes"にしない方がよさそう。他にオプションを設定するとしたらXの起動時にロゴが出てくるのを止める"NoLogo"ぐらいかな。
% mkdir -p $HOME/tmp/dir % TMPDIR=$HOME/tmp/dir fakeroot make-jpkg jdk-1_5_0_05-linux-i586.bin % sudo dpkg -i sun-j2sdk1.5_1.5.0+update05_i386.deb %
% unzip java3d-1_4_0-build6-linux-i586.zip
Archive: java3d-1_4_0-build6-linux-i586.zip
creating: java3d-1_4_0-build6-linux-i586/
inflating: java3d-1_4_0-build6-linux-i586/LICENSE-JRL.txt
inflating: java3d-1_4_0-build6-linux-i586/HOW-TO-INSTALL.txt
inflating: java3d-1_4_0-build6-linux-i586/COPYRIGHT.txt
inflating: java3d-1_4_0-build6-linux-i586/LICENSE.txt
inflating: java3d-1_4_0-build6-linux-i586/README.txt
extracting: java3d-1_4_0-build6-linux-i586/j3d-140-build6-linux-x86.zip
% cd java3d-1_4_0-build6-linux-i586
% unzip j3d-140-build6-linux-x86.zip
Archive: j3d-140-build6-linux-x86.zip
creating: lib/
creating: lib/ext/
inflating: lib/ext/j3dcore.jar
inflating: lib/ext/j3dutils.jar
inflating: lib/ext/vecmath.jar
creating: lib/i386/
inflating: lib/i386/libj3dcore-ogl.so
inflating: lib/i386/libj3dutils.so
inflating: lib/i386/libj3dcore-ogl-cg.so
% mkdir -p ./usr/lib/j2sdk1.5-sun/jre
% mv lib ./usr/lib/j2sdk1.5-sun/jre
% mkdir -p ./usr/share/doc/sun-libjava3d-java
% mv *.txt ./usr/share/doc/sun-libjava3d-java
% tar --owner=root --group=root -zcvf sun-libjava3d-java-1.4.0build6.tar.gz usr
usr/
usr/lib/
usr/lib/j2sdk1.5-sun/
usr/lib/j2sdk1.5-sun/jre/
usr/lib/j2sdk1.5-sun/jre/lib/
usr/lib/j2sdk1.5-sun/jre/lib/ext/
usr/lib/j2sdk1.5-sun/jre/lib/ext/j3dcore.jar
usr/lib/j2sdk1.5-sun/jre/lib/ext/j3dutils.jar
usr/lib/j2sdk1.5-sun/jre/lib/ext/vecmath.jar
usr/lib/j2sdk1.5-sun/jre/lib/i386/
usr/lib/j2sdk1.5-sun/jre/lib/i386/libj3dcore-ogl.so
usr/lib/j2sdk1.5-sun/jre/lib/i386/libj3dutils.so
usr/lib/j2sdk1.5-sun/jre/lib/i386/libj3dcore-ogl-cg.so
usr/share/
usr/share/doc/
usr/share/doc/sun-libjava3d-java/
usr/share/doc/sun-libjava3d-java/COPYRIGHT.txt
usr/share/doc/sun-libjava3d-java/HOW-TO-INSTALL.txt
usr/share/doc/sun-libjava3d-java/LICENSE-JRL.txt
usr/share/doc/sun-libjava3d-java/LICENSE.txt
usr/share/doc/sun-libjava3d-java/README.txt
% fakeroot alien -v sun-libjava3d-java-1.4.0build6.tar.gz
ls -l sun-libjava3d-java-1.4.0build6.tar.gz
tar Oxzf sun-libjava3d-java-1.4.0build6.tar.gz install/predoinst.sh 2>/dev/null
tar Oxzf sun-libjava3d-java-1.4.0build6.tar.gz install/delete.sh 2>/dev/null
tar Oxzf sun-libjava3d-java-1.4.0build6.tar.gz install/doinst.sh 2>/dev/null
tar Oxzf sun-libjava3d-java-1.4.0build6.tar.gz install/predelete.sh 2>/dev/null
mkdir sun-libjava3d-java-1.4.0build6
chmod 755 sun-libjava3d-java-1.4.0build6
cat sun-libjava3d-java-1.4.0build6.tar.gz | (cd sun-libjava3d-java-1.4.0build6; tar zxpf -)
cd sun-libjava3d-java-1.4.0build6; rm -rf ./install
mkdir sun-libjava3d-java-1.4.0build6/debian
822-date
822-date
chmod 755 sun-libjava3d-java-1.4.0build6/debian/rules
debian/rules binary 2>&1
sun-libjava3d-java_1.4.0build6-2_all.deb generated
find sun-libjava3d-java-1.4.0build6 -type d -exec chmod 755 {} ;
rm -rf sun-libjava3d-java-1.4.0build6
% mv java3d_1.4.0build6-2_all.deb ..
% cd ..
% rm -r java3d-1_4_0-build6-linux-i586
% sudo dpkg -i sun-libjava3d-java_1.4.0build6-2_all.deb
(データベースを読み込んでいます... 現在 162096 個のファイルとディレクトリがイン ストールされています。)
(sun-libjava3d-java_1.4.0build6-2_all.deb から) sun-libjava3d-java を展開してい ます...
sun-libjava3d-java (1.4.0build6-2) を設定しています ...
%
% tar zvxf jai-1_1_2_01-lib-linux-i586.tar.gz
jai-1_1_2_01/
jai-1_1_2_01/lib/
jai-1_1_2_01/lib/jai_core.jar
jai-1_1_2_01/lib/jai_codec.jar
jai-1_1_2_01/lib/mlibwrapper_jai.jar
jai-1_1_2_01/lib/libmlib_jai.so
jai-1_1_2_01/INSTALL-jai.txt
jai-1_1_2_01/UNINSTALL-jai
jai-1_1_2_01/README-jai.txt
jai-1_1_2_01/COPYRIGHT-jai.txt
jai-1_1_2_01/LICENSE-jai.txt
% cd jai-1_1_2_01
% mkdir -p ./usr/lib/j2sdk1.5-sun/jre/lib/{ext,i386}
% mv lib/*.jar ./usr/lib/j2sdk1.5-sun/jre/lib/ext/
% mv lib/*.so ./usr/lib/j2sdk1.5-sun/jre/lib/i386/
% rmdir lib
% mkdir -p ./usr/share/doc/sun-libjai-java
% mv *.txt UNINSTALL-jai ./usr/share/doc/sun-libjai-java
% tar --owner=root --group=root -zcvf sun-libjai-java-1.1.2.01.tar.gz usr
usr/
usr/lib/
usr/lib/j2sdk1.5-sun/
usr/lib/j2sdk1.5-sun/jre/
usr/lib/j2sdk1.5-sun/jre/lib/
usr/lib/j2sdk1.5-sun/jre/lib/ext/
usr/lib/j2sdk1.5-sun/jre/lib/ext/jai_codec.jar
usr/lib/j2sdk1.5-sun/jre/lib/ext/jai_core.jar
usr/lib/j2sdk1.5-sun/jre/lib/ext/mlibwrapper_jai.jar
usr/lib/j2sdk1.5-sun/jre/lib/i386/
usr/lib/j2sdk1.5-sun/jre/lib/i386/libmlib_jai.so
usr/share/
usr/share/doc/
usr/share/doc/sun-libjai-java/
usr/share/doc/sun-libjai-java/COPYRIGHT-jai.txt
usr/share/doc/sun-libjai-java/INSTALL-jai.txt
usr/share/doc/sun-libjai-java/LICENSE-jai.txt
usr/share/doc/sun-libjai-java/README-jai.txt
usr/share/doc/sun-libjai-java/UNINSTALL-jai
% fakeroot alien sun-libjai-java-1.1.2.01.tar.gz
sun-libjai-java_1.1.2.01-2_all.deb generated
% mv sun-libjai-java_1.1.2.01-2_all.deb ..
% cd ..
% rm -rf jai-1_1_2_01
% sudo dpkg -i sun-libjai-java_1.1.2.01-2_all.deb
未選択パッケージ sun-libjai-java を選択しています。
(データベースを読み込んでいます... 現在 162110 個のファイルとディレクトリがイン ストールされています。)
(sun-libjai-java_1.1.2.01-2_all.deb から) sun-libjai-java を展開しています...
sun-libjai-java (1.1.2.01-2) を設定しています ...
%
lg3d-fcs-rel-0-7-0-linux-i686-0506241329.tar.gzを展開して./lg3d/bin/lg3d-devを実行するだけ。tcshが必要。JAVA_HOME=/usr/lib/j2sdk1.5-sunという環境変数も必要かも。lg3d-dev.shというbashスクリプトもあるけど、ちゃんとメンテナンスされてなさそうなので、tcshが入ってなかったら入れてlg3d-devの方を使った方が無難。ちゃんとメンテナンスされてなさそうと感じるのはlg3d/bin/lg3d-dev.shから呼ばれるlg3d/bin/setup.shの中のset RELEASEして[ ${RELEASE:-0} == 0 ]というチェックをしているところとか、lg3d-appやlg3d-sessionにはbashスクリプト版がないところとか。
Java3Dがちゃんと入っていない状態だとSEVERE: Project Looking Glass requires Java 3D 1.4 build4 or laterとでた。
JAIがちゃんと入ってない状態だとSEVERE: Project Looking Glass requires JAI 1.1.2とでた。
Java3DとJAIがちゃんと入った後はlg3d-devを試すことが出来た。
今回は、実験的に括弧を全角にしてみたり、連載一覧がプラグインで自動で出るようにして過去の記事も含めてタイトルを設定し直したり、各号目次と分野別目次がついたりと全体的な作業も多くて大変でした。
標準添付ライブラリ紹介で1.8.2から1.8.3での添付ライブラリの変更点を簡単に列挙してみましたが、細かいところまで書くのは無理っぽいです。特にrdocはそもそも日本語での情報があまりなくて厳しかった。
他の記事はRubyist HotlinksでTRY!PCの記事の話で実は前号のRubyist Hotlinksとつながりがあったり、「あなたの Ruby コードを添削します」ではURI.regexpを何度も呼んでるのが遅い原因だったという落ちがあったり。
http://www.asahi.com/ を画像オフの状態で見ると「ここから本文エリア」とか「現在位置」とか謎の文字列が出てくるので何かと思ったらalt属性だった。「<a name="constart"><img src="/image/dot.gif" width="1" height="1" alt="ここから本文エリア"></a><img src="/image/dot.gif" width="1" height="1" alt="現在位置">」のように画像だと目立たないようになっているのにfirefoxなどのブラウザで画像オフの状態でみると、文字がでかでかと出てきて変なところに出てきたり重なったりしておかしくなるみたい。
「Rubyのプログラムで今月「日曜日」が何回あるのか教えてください。(「今月」はプログラム実行時のシステム時間でかまいません)
」という問題。素直に数えてみるならruby -rdate -e 't = Date.today; p((Date.new(t.year, t.mon, 1)..Date.new(t.year, t.mon, -1)).select{|d| d.wday == 0}.size)'という感じかな。
外部プログラムを使ってruby -e 'p(`cal`.grep(/^.\d/).size)'というのはどうだろう。
素直に数える方法は4.
のように次の月の1日と終端を含まないRangeを使う方が(末日と終端を含むRangeを使うより)良さそう。
calを使うというのはcal|egrep '^ ?[1-9]'|wc -lとかcal | cut -b 1-2 | grep -c [0-9]という感じで他にもいたようで、まとめるとcal|egrep -c '^.[0-9]'まで短く出来そうです。シェルによっては''でくくる必要がないこともありますが、そういうことはしないということで。
余談 calコマンドの出力は常に6行か?というのはcal 9 1752が例外のはず。
前にちょっとだけ作ってみたWikiRPC ClientをまともなGUIに見えるように修正していた。
GUIプログラムはイベントドリブンなので、何も考えてないと一覧更新中にも一覧更新のメソッドが呼ばれて一覧が混ざったりとかしてその対応をちゃんと考えておかないとだめだと思った。とりあえずUI側でボタンなどを無効にして起きて欲しくないイベントが起きないようにして対処したけど、内部側でも同時に起きるべきではないものはチェックして起きた場合はバグとして例外が上がるようにしておいた方がよさそう。
メニューの項目はset_sensitive(false)で無効に出来なくて無効にする方法がわからなかったので、仕方なくダイアログを出すようにしてしまった。
ダイアログがでまくるのはだめなUIということで、メッセージは出来るだけステータスバーに出るようにしてみたけど、これはこれで最新のメッセージしか残らないので、エラーの後に正常な処理にfallbackしたらエラーメッセージが残らないということに。解決方法として、エラーはちゃんと通知しても問題なさそうなので、ダイアログを出すようにした。
今は対象となるHikiのURLを引数で指定するかメニューのOpen URLで指定しないといけないので、gconf2あたりを使って設定を保存するようにすれば良いかもしれない。
WikiRPCの問題点かもしれないけど気になった点がいくつか。
起動時(URL変更時)にgetAllPages()ですべてのページを取得するまではいいとして、その後すべてのページについてgetPageInfo(pagename)でページの情報をとっていくのが非常に時間がかかる。getAllPages()ですべてのページ名をとってくるまではいいとしても、getPageInfo(pagename)をすべてのページについて実行するのやめた方がいいかもしれない。作っているときには思いつかなかったけど、今思えば表示されている範囲の行についてgetPageInfo(pagename)していけばいいのかもしれない。
次にputPage(pagename,content,attributes)するときにmd5hexを入れるようにして気づいたけど、getPage(pagename)とgetPageInfo(pagename)を実行るする間にページが変更されていないことが保証できないので、getPage(pagename)でとってきたcontentとgetPageInfo(pagename)でとってきたpageinfo(のmd5hex)が一致する保証がなくて困った。getPage(pagename)でとってきたcontentのMD5をとっても文字コードの関係(Hikiが内部でMD5をとるときはeuc-jpでWikiRPCでとれるcontentはutf-8)で一致しなくてそれもうまくいかない。これは、(1)WikiRPCがpageinfoとcontentを同時にとれない、(2)euc-jpに戻してMD5をとってもHiki側と同じ変換が出来るとは限らない、(3)getPage(pagename)とgetPageInfo(pagename)の間でページの内容が変更される可能性は低い、などの理由で完全な解決は無理と言うことで、連続して実行したgetPage(pagename)とgetPageInfo(pagename)が同じものについての情報を返してくれると期待することにした。
HikiのWikiRPC実装の問題点。
getPageInfo(pagename)でname,lastModified,author,versionのうちlastModified,authorしか入っていなくて(nameの代わりにtitleがある)、他の要素を勝手に追加している。WikiRPCの仕様でgetPageInfo(pagename)に他の要素を入れていいのかどうかが明記されていないのでそこが気になる。
putPage(pagename,content,attributes)のcommentに対応していない。まあ未対応のものは無視するということになっているので、標準で決まっているものでも未対応ということで無視するのは問題ないのかもしれない。
今回直してcommitしてしまったけど、putPage(pagename,content,attributes)でattributesの値に文字列以外を入れるとエラーになっていた。これで何がひっかかっていたかというと、keywordに配列を期待している(ようにみえる)のに渡せなかったり、minoreditにtrueを渡すとエラーになったりしていた。結局keywordは指定せずに渡すしかなくて、それだと既存のkeywordが消えてしまっていたので、keywordは指定がなければ消さずに既存のものを使うようにした。それからattributesもString以外を受け付けるようにした。
% cd qdbm-1.8.33 % ./configure --prefix=$HOME/opt/$(basename $(pwd)) --enable-pthread --enable-zlib --enable-iconv % LD_RUN_PATH=$HOME/opt/$(basename $(pwd))/lib make % LD_RUN_PATH=$HOME/opt/$(basename $(pwd))/lib make install % cd .. % cd hyperestraier-1.0.0 % vi configure MYRUNPATH="" を MYRUNPATH="$HOME/opt/hyperestraier-1.0.0/lib" に変更 % PKG_CONFIG_PATH=$HOME/opt/qdbm-1.8.33/lib/pkgconfig ./configure --prefix=$HOME/opt/$(basename $(pwd)) % make % make install %
Operation not permitted
モジュール(piix)だと効かないことがあるっぽいという話もあったので、カーネル組み込みにして解決。
結局ちゃんと最初から最後まで聞けたのは「Skip up with Ruby-GNOME2」とJDMC-「Debian におけるパッケージ配布」とJDMC-「余は如何にして Debian Developer となりしか」だけだった。須藤さんの話とg新部さんの話は予想通りおもしろかった。パッケージ配布の話は最初の方は知っていることがほとんどだったのでどうしようかと思っていたけど、後半は知らないことも多くて参考になった。dists形式とapt-ftparchiveなどの形式との違いは「./」の末尾の「/」が重要だったとか。
懇親会は料理少なすぎ、飲み物がなくなるのも早すぎ、禁煙側と喫煙側とで分かれていたけど、プレゼントの抽選を喫煙側でやっていたので結局たばこ臭くなってしまったとか、会場については不満が多かった。
がんばって早起きしてOpenPGPの話を聞いた。
その後は昨日はなかった4階のブースを回ってみた。中国語のクイズのところでは7問正解でボールペンをもらった。あの問題と答えはどこかで公開されてるのかな。
12時からは日本Rubyの会の話。本当に日本Rubyの会についての話でそれ以上でもそれ以下でもなかったような気がする。リファレンスマニュアルなどの改善をどうするかについての話は、後でRuby勉強会@関西-KOF2005 懇親会の時に高橋さんたちと話をした。
13時から14時はRuby関係の人は昼休みということで昼食に。昨日とはちょっと違う四人で昨日とは逆方向の店へ。しばらくして他のRuby関係の人も大勢偶然同じ店に来ていた。
14時からrastの話。部屋に入りきれないほど人が来ていて注目度が高いんだなあと思った。午前中にRubyブースのあたりで立ち話していた時に言ったようにDBIのように抽象化してbdb以外も使えるようになるとうれしい気がする。ximapdとかを使ってみてはいるけど本格的に使っているわけではないので速度的にどうなのかはまだよくわからない。
15時からは同じ部屋でRailsの話。rastの時よりさらに人が多かった。朝早かったので途中で寝てしまった。
16時からはブースを見る最後のチャンスと言うことで3階にいた。RGSSのデモを見たり、他の用事をしていたりしたら上に行くのが遅れてしまって、Ruby勉強会@関西-KOF2005 勉強会@関西の準備が手伝えなかった。事前に手伝うリストに名前を入れておいたのに、すいません。
で17時から勉強会。いわゆる肉の日リリースと言うことでRubyリファレンスマニュアルのアーカイブをどうにかする予定だったのに、全然時間がとれずに準備が出来ていなかったので、勉強会の時間中に作業をしていて、結局勉強会の中でも何も手伝えなかった。
そして最後にRuby関係の懇親会に参加。移動前の待ち時間の間にRubyリファレンスマニュアルのアーカイブをどうにかしたが、アナウンスのメールを書く暇はなかった。懇親会ではいろいろ話が出来て良かった。
帰ってからRubyリファレンスマニュアルのアーカイブのアナウンスのメールを書いて送った。
escape(Iconv.conv(@tocode, @fromcode, unescape($&)))するだけだった。CVS管理の場合はCVS/Entriesの「/」で区切られた2番目の部分も変換する必要あり。実際にファイル名を変えるのは戻すのが面倒なので、実際にはCVS/Entriesの変換から作り始めた。Iconv.convでいけるかと思ったら、あらしで書き込まれた内容に変換できない部分があったので、続: Ruby: Iconv と Uconvを参考にして変換できない文字は「?」にしてしまうことにした。\ooo形式で埋め込んでいたので、irbでIconvを通してdumpし直して完了。
✑ babie [なぜにパキスタン]