何とまあ!

女房が、干しシメジを買ってきた。文字通り干からびたやつである。たまたま売ってたのを 見つけて、話の種に買ってみたとか。

どうやって使うかと思っていたら、実験その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で試行錯誤させてもいいし、自分で考えてもいいです。暇潰しにどうぞ。