何とまあ!
女房が、干しシメジを買ってきた。文字通り干からびたやつである。たまたま売ってたのを 見つけて、話の種に買ってみたとか。
どうやって使うかと思っていたら、実験その1は、 スパゲッティーの具になって出てきました。噛み応えがあってなかなかおいしゅう ございました。 実験その2は、昼のうどんの具。これもなかなかおいしかったよ。実験その3は、なんとカレー の具。華麗なる変身をしましたよ。干し椎茸は水に戻して使うけど、干しシメジは細いので、 戻さずにそのまま使っても大丈夫だそうです。
次の実験は何だろうな。
干したやつと言うと、祖母が生きていた頃は、よく山へ行って、わらびやぜんまいを取ってきて、 余ったやつは、茹でたやつを干していたなあ。そして、冬の時期に煮物の中に混じって出てきたっけ。 祖母の味、懐かしいな。
今、太陽利用と言うと、太陽電池って事になるけど、(電気を蓄えないくせに、太陽電池とは、 これいかに?)、昔は、屋根の上の温水器、そして、干物造りと、様々と利用してたんだね。
太陽のおかげで、冬を過ぎても干し柿を食べられるね。昔から伝わる、和風スィーツ万歳!
干しシメジって簡単に作れるのね。今度やってみよっかな。干し柿よりは簡単そう。
pythontidy を更正する
前回やったpytonの整形スクリプトが、悪徳な整形外科だった。めりはりの有るスクリプトを 修正させると、のっぺら棒な一行野郎にされちまうんだ。内偵(ソースを眺める)したよ。 でも、不正を暴けなかったので強制監査する事にしました。
折角vimを使ってるんで、vim上でpdbを動かせないか調べてみたけど、ちゃんとしたのが無かったので 素直にpdbと戯れる事にした。
[sakae@secd ~/py]$ python -m pdb /usr/local/bin/pythontidy blood.py after.py > /usr/local/bin/pythontidy(116)<module>() -> ''' (Pdb) b tidy_up Breakpoint 1 at /usr/local/bin/pythontidy:4777 (Pdb) c > /usr/local/bin/pythontidy(4790)tidy_up() -> INPUT = InputUnit(file_in)
こんな風に始めて、後は地道に追跡ですね。それで分かったのは、変数の初期化がOSデペンドに なっていなかったって事。これはもう、send_prで、Bug報告しとくしか。
OVERRIDE_NEWLINE = '\n' # 2012 Feb 23 by Sakae '' -> '\n'
これで、綺麗に整形してくれるようになったよ。
[sakae@secd ~/py]$ pythontidy blood.py after.py [sakae@secd ~/py]$ wc blood.py after.py 159 485 4173 blood.py 209 530 4407 after.py
綺麗になったのは好いんだけど、元からのコードはそのまま残っているので、pep8を通すと 若干の注意を受ける。これは手修正しろってな。(元は47箇所の指摘が有った)
[sakae@secd ~/py]$ pep8 -r after.py after.py:51:11: W601 .has_key() is deprecated, use 'in' after.py:60:11: W601 .has_key() is deprecated, use 'in' after.py:199:24: W601 .has_key() is deprecated, use 'in'
Bug報告は何処へ?
折角見つけたBugなんで、ちゃんとフィードバックするかな。それがOSSを使ってる人の礼儀って もんだ。FreeBSDのportsにはそのパッケージのメンテナ(担当者)がいるんで、そこへメール すれば済むんだけど、Makefileを読むと、パッチを当てている。
事前にどんな事をやってるか、確認しとく。
[sakae@secd /usr/ports/devel/pythontidy/work]$ diff -u PythonTidy-1.21.python.bak PythonTidy-1.21.python --- PythonTidy-1.21.python.bak 2012-02-23 13:56:07.000000000 +0900 +++ PythonTidy-1.21.python 2012-02-23 13:56:07.000000000 +0900 @@ -1,4 +1,4 @@ -#!/usr/bin/python +#!/usr/local/bin/python2.7 # -*- coding: utf-8 -*- # PythonTidy.py @@ -312,7 +312,7 @@ DICT_COLON = ': ' SLICE_COLON = ':' COMMENT_PREFIX = '# ' # 2007 May 25 -SHEBANG = '#!/usr/bin/python' +SHEBANG = '#!/usr/local/bin/python2.7' CODING = 'utf-8' CODING_SPEC = '# -*- coding: %s -*-' % CODING BOILERPLATE = NULL # 2007 Mar 06
元ネタはLinux用だな。それをFreeBSDに馴染むようにしてるだけで、ロジックには一切手を 加えていない事が分かる。そうなると、FreeBSDのメンテナに報告するより、元ネタを書いた 人にメールを送るのが正解かな。
まあ、悩まずに両方へ送っとけ。
gauche for FreeBSD 9.0R
FreeBSD9にgaucheを入れるの忘れてた。0.9.2のtar玉を持ってきてコンパイルしたらエラった。 最新版だと大丈夫かな? 試してみた。
[sakae@secd ~]$ git clone git://gauche.git.sourceforge.net/gitroot/gauche/Gauche [sakae@secd ~]$ cd Gauche/ [sakae@secd ~/Gauche]$ ./DIST gen : [sakae@secd ~/Gauche]$ CC=clang ./configure --enable-threads=none : This Gauche has been configured with the following parameters: version: 0.9.2 multibyte: utf8 slib: /usr/local/slib thread: none optional modules: ndbm zlib [sakae@secd ~/Gauche]$ gmake : gmake[1]: ディレクトリ `/usr/home/sakae/Gauche/gc' から出ます gmake[1]: ディレクトリ `/usr/home/sakae/Gauche/src' に入ります /bin/sh ./genconfig GAUCHE_LOAD_PATH="" GAUCHE_DYNLOAD_PATH="" gosh -l./preload -I../src -I../lib builtin-syms.scm gosh: not found gmake[1]: *** [gauche/builtin-syms.h] エラー 127
最初gccでやったんだけどエラったので、CCをclangに変えて更に危なそうなスレッドを、無しに したけど、やっぱりエラー。これはもう、shiroさんへ直メールかな。それとも、 Gauche Chatonの方が、いろいろな人の目が あるんでいいかな?
とか、考えていたけど、上のエラーでちょっと疑問が出てきた。goshが無いって言ってるけど そりゃ無いわな。まだ、何も入れてないんだから。その確認を取る為、gitで落としてきたGaucheの ソースをArchLinuxへ転送。Archに入っていた古いgoshを削除。その状態でコンパイルしてみると
make[1]: Entering directory `/home/sakae/Gauche/src' /bin/sh ./genconfig GAUCHE_LOAD_PATH="" GAUCHE_DYNLOAD_PATH="" gosh -l./preload -I../src -I../lib builtin-syms.scm /bin/sh: gosh: command not found make[1]: *** [gauche/builtin-syms.h] Error 127
そうか、Headをコンパイルするには、古いgoshが必要なのね。0.9.2をコンパイルして入れた。 そしてHeadをコンパイル。Archの方は、先端goshになったよ。
そんじゃ、もう一度FreeBSDに戻って、0.9.2をコンパイルしてみる。すると
gmake[2]: ディレクトリ `/usr/home/sakae/Gauche-0.9.2/ext/gauche' に入ります ../../src/gosh -ftest ../../src/precomp -e -P -o gauche--collection ../../libsrc/gauche/collection.scm gmake[2]: *** [gauche--collection.c] セグメンテーション違反: 11 (コアダンプしました)
状況が変わって少しは先に進んでくれたけど、困ったちゃんです。srcの下にgoshが出来てるぽい ので、走らせてみる。
[sakae@secd ~/Gauche-0.9.2/src]$ ./gosh -V セグメンテーション違反: 11 (コアダンプ) [sakae@secd ~/Gauche-0.9.2/src]$ gdb gosh gosh.core GNU gdb 6.1.1 [FreeBSD] : Core was generated by `gosh'. Program terminated with signal 11, Segmentation fault. Reading symbols from /home/sakae/Gauche-0.9.2/src/libgauche-0.9.so.0.2...done. Loaded symbols for /home/sakae/Gauche-0.9.2/src/libgauche-0.9.so.0.2 Reading symbols from /lib/libcrypt.so.5...done. Loaded symbols for /lib/libcrypt.so.5 Reading symbols from /lib/libutil.so.9...done. Loaded symbols for /lib/libutil.so.9 Reading symbols from /lib/libm.so.5...done. Loaded symbols for /lib/libm.so.5 Reading symbols from /lib/libthr.so.3...done. Loaded symbols for /lib/libthr.so.3 Reading symbols from /lib/libc.so.7...done. Loaded symbols for /lib/libc.so.7 Reading symbols from /libexec/ld-elf.so.1...done. Loaded symbols for /libexec/ld-elf.so.1 #0 GC_malloc (lb=8) at malloc.c:280 280 *opp = obj_link(op); [New Thread 28804300 (LWP 100070/gosh)] (gdb) bt #0 GC_malloc (lb=8) at malloc.c:280 #1 0x28109f8c in Scm_VaList (pvar=0xbfbfe914 "8/J\b0/J\b(/J\b?m (") at list.c:126 #2 0x2810b0c3 in Scm_List (elt=0x2820d0fc) at list.c:90 #3 0x280fe44c in init_class (klass=0x28206d60, name=Variable "name" is not available. ) at class.c:2990 #4 0x280f7972 in Scm__InitCode () at code.c:938 #5 0x280d9cfa in Scm_Init (signature=0x804b376 "0.9,utf8,pthreads") at core.c:147 #6 0x08049f23 in main (argc=0, argv=Cannot access memory at address 0x4 ) at main.c:381 (gdb)
うーん。FreeBSD 9.0Rになって、GCルーチンがOSとマッチしなくなったんだな。微妙な所だから なあ。(と、分かったような口ぶりが悲しいぞ)
クイズ
昨日だかのニュースで、最近の大学生は学力低下が著しいと嘆いていた。平均を正しく理解 していないとか、考える力が衰えているとか。日本の未来は暗いな。
そこで、頭の体操です。昔、ドライブに出かけた時、高速等で単調な運転を強いられると眠く なっちゃいます。そんな時に同乗者が眠気覚ましの方法を教えてくれました。
前を行く車のナンバーの数字と任意の算術記号を使って、10を作れっての。眠気覚ましにうってつけ だったのを覚えています。例えば、ナンバーが、1234だったら、1 + 2 + 3 + 4 = 10 って具合。
今回はこれの変形で、333のナンバーを使って、10だけじゃ無く、0から10までの 数字を表す式を作れってのがクイズの問題です。
これ、たまたま読んだ本に出てたもので、出典は、海軍大学校入試問題に出たそうです。 海軍ってのがヒントになるかな。
答えはrubyなりschemeで試行錯誤させてもいいし、自分で考えてもいいです。暇潰しにどうぞ。