親子丼(6)

マンガで分かるフーリエ変換 なんて漫画を読んでみた。 姉妹編に、Excelで学ぶフーリエ変換 なんてのもあるのね。他にも有って、萌えちゃうぞ。(漫画でわかる微分方程式とか電子回路とか シーケンス制御とか統計とか)

で、この漫画では、関数F(t)と直交するようなAn*cos(nt)&Bn*sin(nt)のAnとBnを求めるのがフーリエ変換なんだよ って事なんだけど、直交の意味が初めて理解出来たよ。(但し、n=0,1,2,...)

直交の関係にある関数の積の定積分はゼロになるとな。sin(nt) * sin(mt)とか cos(nt) * cos(mt) で、nとmが異なれば 直交するんだけど、n == m の場合は直交しない。 (sin(nt) * cos(mt)の場合はいずれも直交)これを利用して、任意の次数の振幅成分が 取り出せるってのが味噌。

また、任意の波形の合成を考えた時、An*cons(nt+p)で表しちゃうと(pは位相角)、pは 無限に存在しちゃって都合が悪い。 そこで、任意の波形の合成をAn*cos(nt)+Bn*sin(nt)で表すとすっきりするとな。ここら辺が、 数学のずるい所ですな。

原理原則が分かったので続きはWebで。 物理のかぎしっぽフーリエ解析 とか、 やる夫で学ぶディジタル信号処理 とかディジタル信号処理 (基礎編) がお勧め。

Windowsでもchickenするぞ

前回の後遺症で、Windowsでもchickenしたくなった。先例に倣ってまずは コンパイラを落としてくる。大きな玉になってるかと 思ったら、ネットワークインストなんで、以外に小さい。その代わりインストールが始まると ネットワークにアクセスしっ放しになるけど。。。

先例の通りにコンパイルしようとしたらエラーになったので、PATHを次のように通した

C:\MinGW\bin\;c:MinGW\msys\bin\;

おいらのPCは人様のやつと違うんですかね? まあ、自分で手を動かせ、頭を多少使えって事だな。

$ cd c:/chicken-4.7.0

sakae@NIL /c/chicken-4.7.0
$ make PLATFORM=mingw-msys PREFIX=C:/app/chicken
  :
$ make PLATFORM=mingw-msys PREFIX=C:/app/chicken install

これでインストール完了。emacsから使おうとしたら、csiは起動してるにも関わらず、プロンプトが 出てこない(従って、csiを使えない)と言う状況になっちゃった。糞Windowsってこれだから 素直じゃないんだよな。msysが入って、大分unixっぽくなったと言うのに。 調べてみたら、

 (setq scheme-program-name "csi -:c")

The -:c is to force interactive mode, which is required on some platforms (most notably Windows).

軽めに遠慮がちに書いてあったけど、仲間外れはWindowsだけだろうに!

後は適当に、玉子達を入れてあげたよ。ちなみに、鶏の状態は

#;1> ,r
Features:

  chicken           chicken-4         chicken-4.7
  csi               data-structures   dload
  extras            files             hygienic-macros
  irregex           irregex-is-core-unit
  little-endian     lolevel           manyargs
  mingw32           ports             ptables
  srfi-0            srfi-1            srfi-10
  srfi-11           srfi-12           srfi-13
  srfi-14           srfi-15           srfi-16
  srfi-17           srfi-2            srfi-23
  srfi-26           srfi-28           srfi-30
  srfi-31           srfi-39           srfi-4
  srfi-46           srfi-55           srfi-6
  srfi-6            srfi-61           srfi-62
  srfi-69           srfi-8            srfi-88
  srfi-9            srfi-98           syntax-rules
  utils             windows           x86


Machine type:    	x86 
Software type:   	windows
Software version:	unknown
Build platform:  	mingw32
Installation prefix:	C:/app/chicken
Extension path:  	C:/app/chicken/lib/chicken/6
Include path:    	(C:/app/chicken/share/chicken)
Symbol-table load:	1.39
  Avg bucket length:	2.5
  Total symbol count:	4194
Memory:	heap size is 1004884 bytes with 895982 bytes currently in use
nursery size is 131072 bytes, stack grows downward
Command line:    	("c:\\app\\chicken\\bin\\csi.exe" "-:c")

interrupts are enabled

ruby

こうして、Windowsにも鶏が住み着いた訳であるが、その導入時に使ったmingw32がperl一族を 引き連れてきてるんだなあ。こうなると、既にPythonは入っているので、あれが無いなと気づいたよ。 そう、Matz Lispね。 mingw32記念に入れてみるか。

CPUを酷使する事数十分。./configure; make; make install で、一丁上がり。

$ ruby -v
sh: ruby: command not found

sakae@NIL ~

インストールが完了したはずなのに入っていない。はて何処へ行った? 調べてみたら c:\usr\local\bin の中に入ってた。何か、msys系と扱いが違うんですかね? C:\MinGW\msys\1.0\local\binが 相当してるんだけど。

$ cd /c/usr/local/bin

sakae@NIL /c/usr/local/bin
$ ruby -v
ruby 1.9.3p0 (2011-10-30 revision 33570) [i386-mingw32]

どうでもいいけど、lib中とかに、1.9.1ってのが有るけど、紛らわしいなあ。互換性があるから こうしてるのかな?

$ irb.bat
./irb.bat: line 1: @echo: command not found
./irb.bat: line 2: @if: command not found
./irb.bat: line 3: usrlocalbinruby: command not found
./irb.bat: line 4: @goto: command not found
./irb.bat: line 5: :WinNT: command not found
./irb.bat: line 6: fg: no job control
./irb.bat: line 7: @goto: command not found
./irb.bat: line 16: require: command not found
./irb.bat: line 19: syntax error near unexpected token `__FILE__'
./irb.bat: line 19: `  IRB.start(__FILE__)'

しょうがないので、

$ cat irb.rb
require "irb"
IRB.start()

偽、replを書いて

$ ruby irb.rb
irb(main):001:0> exit

やっと動いた。以上は、msysの中にあった、msys.batを起動したターミナル上の結果。ごちゃごちゃ やってbashが上がってくるのかな。

こちらは、素直にアクセサリの中のターミナルからです。

c:\usr\local\bin>irb.bat
irb(main):001:0> exit

こうしてみると、bashがいらぬお節介を焼いてるって事になるな。こういうので足をすくわれる んだよな。心しておこう。

FreeBSDでもruby1.9.3が来てたのでportupgradeしたよ。んでもって、chicken-doc宜しくriしようと したら、何を調べても答えはnil。おっかしいなあ、Windowsではちゃんと動くのに。何処かに ri用のデータベース(今更ながら、これってrdocの成果物だったのね)が有るはず。昔の人が作ったtreeで、構造がどうなってるか調べてみた。

c:\usr\local> bin\ruby.exe bin\tree.rb -d -l=3
|-+ .
  |-+ bin
  |-+ include
  | |-+ ruby-1.9.1
  |   |-+ i386-mingw32
  |   |-+ ruby
  |-+ lib
  | |-+ pkgconfig
  | |-+ ruby
  |   |-+ 1.9.1
  |   |-+ gems
  |   |-+ site_ruby
  |   |-+ vendor_ruby
  |-+ share
    |-+ doc
    | |-+ ruby
    |-+ man
    | |-+ man1
    |-+ ri
      |-+ 1.9.1

19 directores

ってな事で、shareの下にあったやつを、FreeBSDにコピー。何たって共有しましょだからね。 人の物は俺の物です。物忘れが激しくなった人には助かるなあ。

[sakae@cdr ~]$ ri swap
.swap not found, maybe you meant:

String#swapcase
String#swapcase!
Symbol#swapcase

ruby1.9Xは、_ko1さんの成果物らしい。2.Xでは、Python宜しく、ただrubyって叩くと内蔵のirbが 起動されるらしい。ますます、Lispに近づいていくなあ。括弧をちゃんと書けば、昔懐かしいM式 だもんなあ。

ああ、どうせPythonと似せるならもう一つやって欲しい事があるぞ。rybyが起動してから、ソースを パースしてるはずなんだけど、毎回やるの無駄だろ。パースした結果を、hoge.rboとかに 保存出来ないかね。んでもって、hoge.rboが有ったら、それを使って即実行する。無かったら、 しょがないから、hoge.rbをえっちらおっちらとパースしてから実行。勿論、hoge.rbとhoge.rbo のタイムスタンプはちゃんとチェックしてからってのは、お約束ね。パースの結果をキャッシュ するだけじゃ、イケテないってんだら、JITの結果でもいいけど。これで、あの人の子分の卒論の テーマが出来たかな。おまけに難読化も付けると箔がつくかも。

だれかば昔、るびまでcgi.rbがいけてない10の理由とかを書いていたけど、この機構で少しはいけてる ようになるかな。それとも、大胆にcgi.rbを作り直しとか。。もう、cgi.rbを使う局面なんて 無いから、親父の戯言と聞き流してくだせえ。

おまけ

最近はIEして見つけた面白URLのメモ欄の様相を呈しているけど、懲りずに。

処理系:実行ファイルの作り方

Lisp Cabinet

Running external programs

ディストリワッチ、最近はウブの人気が下火らしい。

Python for Windows

Python de ext program

vim for lisp

Superior Lisp Interaction Mode for Vim