親子丼(7)

外でタバコしてると、見慣れない車が止まった。ほどなく、サラリーマン風の男性がにこにこ しながら近寄ってきた。

年末で、金とかプラチナでも買いにきたのかな。最近良く来るんよ。金歯でも時計でも何でも 貴金属なら買いますって。彼らは申し合わせたように、首からぶら下げた身分証明書を真っ先に 提示するね。

身分証明書って簡単に偽造出来るじゃん。ついでにドラマなんかでサツが手帳をさっと見せる けど、あれも普段見る事ないから、真偽をさっと判定出来ないよな。昔住んでた所で、殺人事件 があり、刑事が聞き込みにきた事あったけど、手帳見せてもらったかなあ? パトカーがわっと来て、普段着の人がきたんで、わー、ドラマみたいと舞い上がってしまいましたよ。

そしたらアリバイを確認すんのね。その時は丁度旅行から帰ってきた時だったので、ホテルの 領収書を見せてアリバイ成立になったけど、念を入れて、車種とナンバーを控えて行ったよ。 疑るのが商売って、いやな稼業だな。目つきも暗くなるし。。

で、件のサラリーマン風の人、NTTの方から来ましたって挨拶したよ。用件は、このあたりにも ファイバーが通ったので、光にしませんかって言う売り込み。おいら、ファイバーよりもメタル の方で用が足りてますって答えたよ。そしたら、今契約して頂けば、美味しい肉とかに交換できる ポイントが付いてますってさ。これぞおまけ商法。そんなのいらないから、もっと安くせいよ。

メタルとファイバーの2重投資で無駄が募ってるんだから。本当にファイバーにしたかったら ランニングコストを下げる提案を持ってこいよ。(と、偉そうに言ってみる)

次にインフラを替えるなら、ファイバー飛ばして、LTEだね。いつ頃、LTEは来るん? このあたりだと、アンテナをバンバン立てる土地が余ってるよ。LTEになるなら考えても いいよと答えておいた。いつになるんですかね?

そうか、アップルをNTTも扱うようになると、LTEが加速するな。まあスマホは 国民生活センターで解約したい なんて相談が寄せられているんで、後3年ぐらいは模様眺めが宜しいかと。

CHICKENでopelgl

以前Windowsで頑張ってる人の所へ行ったけど、無謀にもQtですって。勇気あるなあ。 おいらは、OpenGLぐらいでいいよ。

chicken openglを参考に、FreeBSDで始めてみました。

("silex" "easyffi" "opengl")
installing silex: ...
changing current directory to /tmp/tempfb86/silex
  /usr/local/bin/csi -bnq -setup-mode -e "(require-library setup-api)" -e "(import setup-api)" -e "(setup-error-handling)" -e "(extension-name-and-version '(\"silex\" \"\"))" -e "(sudo-install #t)" /tmp/tempfb86/silex/silex.setup
  /usr/local/bin/csc -feature compiling-extension -setup-mode    -s -O2 -d1 silex.scm -j silex
(don't worry - still compiling...)

コンパイルを始めると関連な玉子が先にインストールされるんだけど、作成に手間取ってて、 お茶目なメッセージが出てきたよ。 (この貧乏人めが、とろいパソコン使ってからだよが本心だったら怖いけど)こういうのが出てくるって、Windowsの無駄なやってますって アイコンよりは、ずっと健康的だな。おいら好みだよ。

glut.c:17:21: error: GL/glut.h: No such file or directory
glut.c: In function 'f_1873':
glut.c:2823: error: 'GLUT_STROKE_ROMAN' undeclared (first use in this function)
glut.c:2823: error: (Each undeclared identifier is reported only once
  :
Error: shell command terminated with non-zero exit status 256: gcc glut.c -o glut.o -c  -fno-strict-aliasing -fwrapv -DHAVE_CHICKEN_CONFIG_H -DC_ENABLE_PTABLES -O2 -pipe -fno-strict-aliasing -fPIC -DPIC -DC_SHARED -I"/usr/local/include/chicken"

で、のほほーんと待っていたら頭を殴られた。不意打ちであります。 しょうがないので、/usr/includeからリンクを張って切り抜けましたよ。こういう事って 普通にあるはずなのに、chicken-installでは面倒見てくれないのね。

早速走らせてみました。ちゃんと三角錐がぐるぐると回転してたよ。

(launcher.scm)
Select one of the examples below:
0. floor
1. nehe_tutorials_2
2. nehe_tutorials_3
3. nehe_tutorials_4
4. nehe_tutorials_5
5. tehila_basic_camera
Example number (press ENTER to abort): #;1> 4
; loading lib/core.scm ...
   :
Loading custom logic...
; loading examples/nehe_tutorials_5.scm ...
Scaffolding application...
Stepping into main function...
gl:Translatef (, -1.5, 0.0, -6.0)
gl:Rotatef (, 271.75, 0, 1, 0)
 :
Error: bad argument count - received 2 but expected 0: #<procedure (display)>

        Call history:

        <eval>    [quad] (apply gl:Color3f color-4)
        <eval>    [quad] (apply gl:Vertex3f vertex-4)
        <eval>    [quad] (gl:End)
        <eval>    [with-new-matrix] (gl:PopMatrix)
        <eval>    [display] (gl:Flush)
        <eval>    [display] (glut:SwapBuffers)
        <eval>    [display] (current-milliseconds)
        <eval>    [display] (post-display-hook)
        <eval>    [keyboard] (kb:add-key key)
        <eval>    [kb:add-key] (append *keyboard-state* (list key))
        <eval>    [kb:add-key] (list key)
        <eval>    [kb:add-key] (kb:debug-keyboard-state)
        <eval>    [kb:debug-keyboard-state] (null?463 tmp462)
        <eval>    [kb:debug-keyboard-state] (f (string-append "*keyboard-state*:
 " (->string *keyboard-state*)))
        <eval>    [kb:debug-keyboard-state] (string-append "*keyboard-state*: "
(->string *keyboard-state*))
        <eval>    [kb:debug-keyboard-state] (->string *keyboard-state*) <--

終わり方が分からなかったので、Ctrl-Cで止めたら、評価の履歴が垣間見られました。 gauche-glと比べてみるかなあ。

そんじゃ早速Windowsでもと思ったら

Warning: no glut library found
  ""C:\app\chicken\bin\csc"" -feature compiling-extension -setup-mode    -s -O3 -d0 glut.scm -J  -lopengl32 -lglu32 -lfreeglut
c:/mingw/bin/../lib/gcc/mingw32/4.5.2/../../../../mingw32/bin/ld.exe: cannot find -lfreeglut
collect2: ld returned 1 exit status

なんと、ライブラリーが入っていませんでした。何処からか見つけてきて入れるって事も考え ましたが、深みにはまりそうなので、撤退します。gaucheのWindows版はglをサポートしてました からね。無理しなくても。

statistics

次も玉子シリーズで、Statisticsです。 別にRと張り合おうって訳ではありませんが。

入れてる途中でやはり引っかかりました。libgslが無いですって。頭がgって事は グラフィックでグラフでも書いてくれるのと、想像したっちゃけど、そうじゃ無かった。

The GNU Scientific Library (GSL) is a collection of routines for numerical
computing. The routines are written from scratch by the GSL team in ANSI C,
and are meant to present a modern Applications Programming Interface (API)
for C programmers, while allowing wrappers to be written for very high level
languages.

WWW: http://www.gnu.org/software/gsl

人の褌で相撲を取ろうという算段です。どこにも顔出すGNUです。Windowsだと面倒な事に なるんでしょうな。

oblist

何個目の玉子か知れんけど、oblistなんてのが有ったので入れてみた。これ、インターンされた オブジェクトを表示してくれる奴だったかな。

#;1> (use oblist)
; loading C:/app/chicken/lib/chicken/6/oblist.import.so ...
; loading C:/app/chicken/lib/chicken/6/oblist.so ...
#;2> (oblist-search "oblist")
(oblist oblist: oblist#oblist oblist-search oblist#oblist-search)
#;2> ,p (oblist-search "search")
(irregex-search/matches
  #%irregex-search/matches
  irregex-search/chunked
  #%irregex-search/chunked
    :
  string-search
  regex#string-search)

どんな風になってるか、一応見ておく。

(declare
  (fixnum)
  (disable-interrupts) )


(module oblist (oblist oblist-search)

  (import scheme chicken foreign)
  (use regex)

(define find-symbol-table (foreign-lambda c-pointer "C_find_symbol_table" c-string))
(define enum-symbols! (foreign-lambda scheme-object "C_enumerate_symbols" c-pointer scheme-object))

(define (oblist)
  (let ([it (cons -1 '())]
	[ns (find-symbol-table ".")] )
    (let loop ([lst '()])
      (let ([s (enum-symbols! ns it)])
	(if s
	    (loop (cons s lst))
	    lst) ) ) ) )

(define (oblist-search re-string)
  (let ([it (cons -1 '())]
	[ns (find-symbol-table ".")] 
	(rx (regexp re-string)))
    (let loop ([lst '()])
      (let ([s (enum-symbols! ns it)])
	(if s 
	    (loop (if (string-search rx (symbol->string s))
		      (cons s lst)
		      lst))
	    lst) ) ) ) )

)

閉じ括弧の間を空けているのが新鮮です。

don't worry ...

上で出てきたお茶目なメッセージ、何処で出しているのかな? 調べてみたら、batch-driver.scm の中のcompile-source-fileと言う巨大な手続きの中に有りました。

	    (begin-time)
	    (set! node2 (perform-closure-conversion node2 db))
	    (end-time "closure conversion")
	    (print-db "final-analysis" '|8| db i)
	    (when (and ##sys#warnings-enabled
		       (> (- (cputime) start-time) funny-message-timeout))
		            (display "(don't worry - still compiling...)\n") )
	    (print-node "closure-converted" '|9| node2)

軽くコードを読んでみると、コンパイルを始めてから1分以内に上記チェックポイントを 通過してないと、メッセージが出てくるんだ。チェックポイントは見ての通り、scheme 領分での最終段階に設置されてる。ここを通って次はgcc段階に入るから、遅いgccだとうんざり する程待たされるんだな。

だから、先にジャブ入れとけとな。分かりますよ、その気持ち。gcc改め、 tccなんていかが。それとも、gccにおんぶにだっこしてて、簡単に コンパイラーを挿げ替えられないのかしらん。