親子丼(chicken + egg)

私の住んでいる所は田舎なせいか、娯楽のためのパチンコ屋が繁盛している。道路を挟んで、 パチンコ屋が向かい合って立ってたりする。

ここにパチンコ屋有りとばかりの看板が凄い。夜になると、サーチライトをぐるぐる回したり、 球場にあるような大型スクリーンで宣伝したり、何でも有りの感がして、パチンコをしないおいら からすれば、集虫灯にしか見えない。

そんなパチンコ業界だけど、ほのぼのとした広告を見かけた。 身長が5mはあろうかと言う、男女の人形。男は、緑と黄緑色。女は白とピンクのツートンカラー。 愛嬌があって、体を揺らしたり、手を振ったりしてて、子供さんが喜びそう。

どうやって動いてるかというと、風船を思い浮かべて貰ったら話が早いんだけど、両足の踵の 所に巨大な送風機が仕込まれてて、体内へ空気を送ってる。両手の指に相当する部分から、その 空気が逃げる。その時に手を振ったり、体が揺れたりするのだ。

その人形が立っている目の前が、田んぼになってるので、雀さん達も動く案山子と誤認して 寄ってこないだろうに。でも、直ぐに慣れちゃうだろうから、手にでも光物を付けてあげると 農家の人達が喜ぶかな。ああ、のどかな田舎だ事。

言語で世界旅行

いろいろな国で色々な言語が使われている。日本語、英語、中国語、フランス語、ドイツ語、、、。 世界を旅するなら、最低でも、ありがとう、こんにちは、と、1から10ぐらいまでを言えれば 何とかなる、ああ、こんな話じゃ無かった。

現在の私の常用語は、日本発のRuby,Gauche。格調高くイギリス製のHaskell。おフランスの Ocamel。アメリカ製のJava,C。そしてちょっとかじった事があるノルウェー製だったかのEralang。 そして、最近ではスイス連邦製のscala。

あれ? ドイツはどうした。最近は、エレベータで問題を起こしたり、バスが燃えたりで、質実 剛健なイメージが自分の中では音を立てて崩れているような気がするけど、何か登場させて みようか。

オボロゲな記憶で、chicken なんてどうだい。あれ、確かドイツ製だったような? こやつ、schemeのくせして、コンパイラを持ってて、実行バイナリーを作成出来るのが、味噌 だったような。

暇にまかせて、FreeBSDのportsから入れてみた。4.1.0版が入ったよ。

後は、ブラジル製のLuaとか、オランダ製のPythonとかがあるな。Luaも最近本格的な本が出た から、真面目にやってみると面白いかも知れないな。

と言う事で、オクトバーフェスト祝いで、取りあえずchickenに触ってみる。

ミュンヘンで9月末から開かれるビール祭りに、一度だけ出た事あるけど、身も心も癒され ましたよ。それぞれの醸造メーカーが、大きなテントを張って出店してる。

自分が飲みたいメーカーの所へ行って、大ジョッキになみなみとついでもらい、つまみは、豚の 姿焼きとか、チキン、後は大根サラダぐらいですかね。

ビールを飲んでいても、やたらに喉が渇くので、その渇きを補うため、ビールと大根サラダの 追加。そのうちに、バーバリアンの民族衣装に身を包んだ楽隊がやって来て、飲めや歌えの 大騒ぎ。いいなあ、もう一度行きたいよ。

鶏と卵で親子丼だい

本拠地はこちら どうです? 旨そうな鶏でしょ。

表の看板よりこちらの方が充実してるな。あれ? このURLの 尻尾の br って、何処だい? そんな時は、 こちらでしらべましょう。で、国名が判明しました。 ブラジルも鶏の産地なんですね。世は正にグローバル!

上のURLからマニュアルも閲覧できるけど、日本語で読みたいよね。日本にも鶏大好きさんが いらっしゃって、ありがたい事に、日本語に翻訳 いて、公開されてました。鶏を料理するには、最高ですね。

rubyにgem、scalaにsbazのように、最近はパッケージが容易にインストール出来るようになって いる。chickenにもeggという、パッケージ管理システムが付属してる。

鶏と卵で親子丼! ネーミングのセンスがいいねぇ。作者さんは日本びいきなのかしら?

これからたっぷりと、親子丼を味わってみる事にする。で、にわとりさんの巣がFreeBSDだけ では心もとないので、Windowsでもやってみる。パッケージになってるかと思ったら、4系 は、Windows用の楽してポンは無かった。

Windowsのchickenで少々難儀したぞ

私のWindows上の開発環境は、MinGW-5.14 + MinSYS-1.0.11。gcc 3.4.5 というもの。 MinGWのインストールでは、確かここの お世話になったはず。 gcc4系は、いまだに導入してないという、ちと時代遅れ版。そのせいかどうか知らないけど コンパイルすると、惜しい所でエラーになった。

c:\sakae\chicken-4.2.0> gmake PLATFORM=mingw-msys PREFIX=c:/app/chicken
gmake -f ./Makefile.mingw-msys all
gmake[1]: Entering directory `/c/sakae/chicken-4.2.0'
gcc -Wl,--enable-auto-import -shared -Wl,--out-implib,libchicken.dll.a \
          -o libchicken.dll library.o eval.o data-structures.o ports.o
files.o extras.o lolevel.o utils.o tcp.o srfi-1.o srfi-4.o srfi-13.o
srfi-14.o srfi-18.o srfi-69.o posixwin.o regex.o scheduler.o profiler.o
stub.o expand.o chicken-syntax.o runtime.o apply-hack.x86.o -lm -lws2_32
Creating library file: libchicken.dll.a
extras.o:extras.c:(.text+0xb4a2): undefined reference to `random'
extras.o:extras.c:(.text+0xb6bf): undefined reference to `srandom'
collect2: ld returned 1 exit status
gmake[1]: *** [libchicken.dll] Error 1
gmake[1]: Leaving directory `/c/sakae/chicken-4.2.0'
gmake: *** [all] Error 2

MinGWって、srandomやrandomをサポートしてないの? ググれカスと言われる前に ググったら、解決方法が分かった。違った名前で出てますとの事。 extras.cを修正して、再コンパイルしたら、今度は違うソースで、同様な事が。 ええい、面倒だとばかり、大元修正のパッチ作成。

--- chicken.h.org       2009-09-22 09:17:38 +0900
+++ chicken.h   2009-09-24 16:08:19 +0900
@@ -94,6 +94,8 @@

 #if defined(__MINGW32__)
 # include <sys/param.h>
+#define random rand
+#define srandom srand
 #elif defined(__CYGWIN__)
 # include <endian.h>
 #elif defined(__linux__)

これで、ようやくインストール完了。開発陣へ初めてのpatchを投稿しておきました。

さて たまご を取ってくるぞ。

c:\>chicken-install apropos
retrieving ...
connecting to host "chicken.kitten-technologies.co.uk", port 80 ...
requesting "/henrietta.cgi?name=apropos" ...
reading response ...
HTTP/1.1 200 OK
Date: Fri, 25 Sep 2009 02:07:45 GMT
Server: Apache
Connection: close
Transfer-Encoding: chunked
Content-Type: text/plain
reading chunks ...
reading files ...
  ./apropos.setup
  ./apropos.scm
  ./apropos.meta
 apropos located at C:\DOCUME~1\sakae\LOCALS~1\Temp/chicken-install-1a4.tmp/apropos
    :
  copy "apropos.so" "c:\app\chicken\lib\chicken\4\apropos.so"
        1 個のファイルをコピーしました。
  copy "apropos.import.so" "c:\app\chicken\lib\chicken\4\apropos.import.so"
        1 個のファイルをコピーしました。

* Installing documentation files in c:/app/chicken/share/chicken/doc:

Warning: file does not exist: "apropos.html"

chicken.kitten-technologies.co.uk しゃれたと言うか、粋なサイト名だなあ。イギリスでは こういうユーモアが無いと、紳士淑女になれないのね。

次は、多倍長をサポートした numbers というたまご。 FreeBSDでは、何の問題もなく入ったが、Windowsでは、エラーにつぐエラー。じっくり エラーを見てたら、libgmpが必要と判明。gmpって、用意するのにめっぽう時間がかかるやつ。 楽したいよと、mingw libgmp.dllで探して取ってくるも、卵の生育には成らず。

しょうがないので、自前でlibgmpを作り(mingwって随分遅いな)、それをもって、やっと numbersをインストールできました。やれやれ。

現在のたまごの保有状態は、次のような感じ。

c:\sakae\chicken-4.2.0>chicken-status
apropos ....................................................... version: 1.0.0
check-errors .................................................. version: 1.0.0
chicken-wrap ................................................... version: 1.96
conditions .................................................... version: 1.0.0
easyffi ........................................................ version: 1.96
easyffi-base ................................................... version: 1.96
iset ............................................................ version: 1.5
matchable ..................................................... version: 2.4.2
mathh ......................................................... version: 2.1.0
miscmacros ..................................................... version: 2.6c
numbers ....................................................... version: 1.809
oblist .......................................................... version: 1.1
setup-helper .................................................. version: 1.1.4
silex ........................................................... version: 1.2
srfi-9-ext .................................................... version: 0.0.0
sxml-transforms ................................................. version: 1.3
synch ......................................................... version: 2.1.0
type-checks ................................................... version: 1.0.0
type-errors ................................................... version: 1.0.0
unicode-char-sets ............................................. version: 3.3.0
utf8 .......................................................... version: 3.3.0
utf8-case-map ................................................. version: 3.3.0
utf8-lolevel .................................................. version: 3.3.0
utf8-srfi-13 .................................................. version: 3.3.0
utf8-srfi-14 .................................................. version: 3.3.0

まだ、たまご間のバージョン管理がきちんとしてなくて、たとえば srfi-19を入れようと すると、リリースされてない他のたまごを要求される等があり、うまく育成出来ない事が あります。

ちと試運転

c:\>csi

CHICKEN
(c)2008-2009 The Chicken Team
(c)2000-2007 Felix L. Winkelmann
Version 4.2.0 - SVN rev. 16023
windows-mingw32-x86 [ manyargs dload ptables applyhook ]
compiled 2009-09-24 on g40 (MINGW32_NT-5.1)

#;1> (* 111111111111111111111111111111 11111111111111111111111111111)
1.23456790123457e+057
#;2> (use numbers)
; loading c:/app/chicken/lib/chicken/4/numbers.import.so ...
; loading c:/app/chicken/lib/chicken/4/scheme.import.so ...
; loading c:/app/chicken/lib/chicken/4/chicken.import.so ...
; loading c:/app/chicken/lib/chicken/4/foreign.import.so ...
; loading c:/app/chicken/lib/chicken/4/regex.import.so ...
; loading c:/app/chicken/lib/chicken/4/easyffi.import.so ...
; loading c:/app/chicken/lib/chicken/4/numbers.so ...
#;3> (* 111111111111111111111111111111 11111111111111111111111111111)
1234567901234567901234567901220987654320987654320987654321
#;4> (exit)

普通のschemeだと多倍長整数を普通にサポートしてるけど、にわとりさんは、そうじゃ 無い現実路線なのね。必要になったら、その時は use しろと。

にわとりさんの解剖

試運転も済んだ事だし、ちと解剖してみます。(って、いきなり、それかい?)

lib/chicken/4/ の中身を見てたら、modules.dbに遭遇。いかめしい名前の割りには、中身が テキストファイルだったりするので、切り取って、展示してみる。

(* value scheme)
(+ value scheme)
 :
(and syntax scheme)
(and-let* syntax chicken)
(any value srfi-1)
 :

全部で、1424個有ったよ。なるほどね。

次は、types.db の方。

;; scheme
 
(not (procedure not (*) boolean))
(boolean? (procedure boolean (*) boolean))
(eq? (procedure eq? (* *) boolean))
 :
;; chicken

(abort (procedure abort (*) noreturn))
(add1 (procedure add1 (number) number))
(argc+argv (procedure argc+argv () fixnum list))
  :
(maximum-flonum float)
(memory-statistics (procedure memory-statistics () vector))
  :

これを見れば、使い方が分かるのね。了解です。

所で、上で出てきた ユーモアあるサイト名が何処に定義されてるか、しらみつぶしで調べて みた。

c:\sakae\chicken-4.2.0>grep chicken.kitten-technologies.co.uk *
File setup.defaults:
((location "http://chicken.kitten-technologies.co.uk/henrietta.cgi")

このファイル、実際にはどこに鎮座してるかと言うと、share/chickenの中にありましたよ。たまごの出荷は イギリス、そこがだめならブラジルとなってました。

これを見ると、ver3時代のドイツの人は、やめちゃったのかなあ?