〜2006年7月中旬〜
なるほど。LDRのpreの空白が壊れるのは このJSON::Syckの挙動 が原因ってわけね。なんとなく事情は察した。
前回と同じ。
% CFLAGS=-Os CXXFLAGS=-Os CC=/usr/bin/gcc ../configure \ --enable-languages=c++ --with-system-zlib \ --enable-sjlj-exceptions --enable-threads \ --disable-version-specific-runtime-libs --disable-nls \ --without-included-gettext --without-catgets % make CFLAGS=-Os LIBCFLAGS=-Os LIBCXXFLAGS=-Os \ STAGE1_CFLAGS=-Os BOOT_CFLAGS=-Os bootstrap
またswapfile作るの忘れてメモリが足りなくなった。 次回のために念のため書いとこう。 512MBのswapファイルを作ってswaponする。
% dd if=/dev/zero of=/tmp/swapfile bs=1M count=512 % mkswap /tmp/swapfile % sudo swapon /tmp/swapfile
最近Subjectに謎の3文字のspamがやってくるようになった。
0NL, 98F, DGG, 6GW, UTV, M6Y, G64, 873, 121,...
ドメインは0451.comが多い。
内容は英文で文章の途中から始まり途中で終わるというパターン。
いつも3,4行程度。まあ、これだとspamの意味もないわけで何かの暗号?
ちょっと気持ち悪い。
ぽすれんからなかなかDVDが届かないと思っていたら、
ヤマトの荷物追跡情報ではすでに配送済みになってた。
うーむ。なんかやっかいなことになったな。
メール便ってやつだから証拠がないんだよねえ。
夜中なのでとりえあえずWebのフォームで問い合わせてみた。
昼になると電話するの忘れちゃうしな。
どういう返事がくるか?
今日は
ヤ「壁に埋め込まれているポストに投函した」 俺「うちの壁にはポストはない」 ヤ「すみません。不手際があったようです」
などとメールでやりとりをしていたわけだが、結構楽しかった。
結局は隣の家のポストに投函されていたらしい。
実際は壁というか門なんだけど、
そのポストはすでに使われておらず口がガムテで塞がれている。
つまり入れるには裏に回って裏蓋を開ける必要がある。
しかもちゃんと住所と名前が書いてあるんだよねえ。
なんでわざわざそんなとこに入れるかねえ。
そういえば壁にポストが埋め込まれた家ってのはあまり見たことがない。
埋め込むんならドアじゃないの?
jとかkを使わないと気づかないが、Bloglinesもいつのまにかハイライト表示するようになっていた。 左側にバーが出る。
2時間ほど気づかず。syslogとmail.logに同じpostfixのログが吐かれていたので、 syslogのほうにmail.noneを追加してメールのログを吐かないように修正。 これで半分の速度になるので少しは軽減できるかな。
今頃ではあるけど、
Matches: from:(kt.rim.or.jp) AND -from:(foo@kt.rim.or.jp) Do This: Skip Inbox, Delete it, Apply label "junk"
という感じでどうかな。ちょっと試してみよう。
2年振りにCygwinのクロス環境を新しく作る。 手順はそんなに変わらない。
% prefix=/usr/local/cygwin % tar xf cygwin-1.5.20-1.tar.bz2 usr/{include,lib} % tar xf mingw-runtime-3.9-2.tar.bz2 usr/{include,lib} % tar xf w32api-3.7-1.tar.bz2 usr/{include,lib} % cp -a usr/. $prefix/i686-pc-cygwin
まずはbinutilsから:
% tar xf binutils-20060709-1-src.tar.bz2 % cd binutils-20060709-1 % CFLAGS=-Os ./configure --prefix=$prefix --target=i686-pc-cygwin % make all install
つづいてgcc:
% tar xfO gcc-core-3.4.4-1-src.tar.bz2 gcc-core-3.4.4.tar.bz2 |\ tar xf - --bz % tar xfO gcc-g++-3.4.4-1-src.tar.bz2 gcc-g++-3.4.4.tar.bz2 |\ tar xf - --bz % cd gcc-3.4.4 % tar xfO ../gcc-core-3.4.4-1-src.tar.bz2 gcc-3.4.4-1.patch |\ patch -p1 -t % CFLAGS=-Os CXXFLAGS=-Os ./configure --verbose --prefix=$prefix \ --enable-languages=c,c++ --disable-nls --without-included-gettext \ --with-system-zlib --enable-interpreter --enable-threads=posix \ --enable-sjlj-exceptions --disable-version-specific-runtime-libs \ --disable-win32-registry --target=i686-pc-cygwin % make all install <途中略> checking for extra compiler flags for building... configure: error: No support for this host/target combination. make: *** [configure-target-libstdc++-v3] Error 1
あれ?なんで?ぐぐってみる。
これ
を見ると--with-newlibが必要か。
Cygwinのソース(newlibを含んでいる)なしでもいけるかな。
% CFLAGS=-Os CXXFLAGS=-Os ./configure --verbose --prefix=$prefix \ --enable-languages=c,c++ --disable-nls --without-included-gettext \ --with-system-zlib --enable-interpreter --enable-threads=posix \ --enable-sjlj-exceptions --disable-version-specific-runtime-libs \ --disable-win32-registry --target=i686-pc-cygwin \ --with-newlib % make all install
通った。
% i686-pc-cygwin-gcc -dumpversion 3.4.4
なんとかいけてるようだ。
% echo 'main(){}' >foo.c % i686-pc-cygwin-gcc foo.c % file a.exe a.exe: MS-DOS executable PE for MS Windows (console) Intel 80386 32-bit
最後にmingwの設定:
% tar xfO gcc-mingw-core-20050522-1.tar.bz2 \ etc/postinstall/gcc-mingw-core-3.4.4-20050522-1.tgz |\ tar xfz - -C $prefix % tar xfO gcc-mingw-g++-20050522-1.tar.bz2 \ etc/postinstall/gcc-mingw-g++-3.4.4-20050522-1.tgz |\ tar xfz - -C $prefix % mkdir -p $prefix/libexec/gcc/i686-pc-mingw32/3.4.4 % cd $prefix/libexec/gcc/i686-pc-mingw32/3.4.4 % ln -s ../../i686-pc-cygwin/3.4.4/c* .
libexecになってる点が前回までと違う。
% echo 'main(){}' >foo.c % i686-pc-cygwin-gcc -mno-cygwin foo.c % file a.exe a.exe: MS-DOS executable PE for MS Windows (console) Intel 80386 32-bit
これもok。
gcc -mno-cygwinでも-ldlでリンクが成功してしまうため、
Rubyのdln.cで矛盾が生じた。
またアドホックなac_cv_lib_dl_dlopen=noをconfigure.inに追加。
本当はautoconfの意味がないからやりたくはないんだけど。
そもそもCygwinのライブラリがあるとこをgcc -mno-cygwinで探すなよと。
まあ、specsファイルを使ってもライブラリパスの追加できても削除はできないしねえ。
なかなか難しい。
問題というかブロックしちゃうやつのとりあえずの解決策。 いままでは
と何も考えない方法だった。 cvs ci時にversion.hに変化がなければcvsは何もしないので、 そのあたりはcvsに任せっきり。 つまり毎回ロックすることになる。
今回これを
という方法に変更。cvs co -pはロックしないので、 こうすることでほとんどロックすることがなくなる。 つまり滅多にブロックしないことになるはずだが、はたしてどうなるか。
1つのindentにつき空白1個ってな感じに見える。 というわけで実験。
def foo if true if true p true else p false end else p false end end
空白2個でindentした場合どう見えるかな?
どうせハッシュを使ってキャッシュするならHash.newのブロックを使えばいいじゃんと思ったり思わなかったり。
collatz = Hash.new{|h, k| h[k] = h[k%2 == 0 ? k/2 : 3*k+1] + 1}.update(1=>1) max = ARGV.shift || 100 p (1..max.to_i).map{|n| collatz[n]}.max
KirbyBaseの後継と考えてよさそう。
Mongoose is a database management system written in Ruby. It has an ActiveRecord-like interface, uses Skiplists for its indexing, and Marshal for its data serialization.
KirbyBaseはテキストファイルベースだったけど、
MongooseはMarshalベースになり、
スキップリスト
で高速化しているらしい。
- <<< word
- Perform shell expansion on word and pass the result to standard input. This is known as a here-string.
ということらしい。
% ruby <<< 'puts "hoge"' hoge
つまりecho 'puts "hoge"' | rubyと同じ意味になるわけだよね。
% <<< hoge hoge
なるほど。