はるばる滋賀から帝都におりたち、Mozilla24に参加してきました。参加したみなさんおつかれさまでしたー。いろんな方面からきたいろんな人がいて、とてもおもしろかった。
名刺持って行かなかくて申し訳なかったんですが、"はこべ"とか"hakobe"とか id:hakobe932とか名乗っていたはうちでした。お会いしたみなさん、楽しかったです。また、お会いする時まで。
今回は、一般参加者として物見遊山と決めてかかっていたのですが、急遽LiveCodingにCoderとして参加することになりました。あまりに急遽すぎて、プレッシャー×のフラグが常に立っている、うちとしましては、テンパる他なく、いろいろと迷惑おかけてしまいましたが、まぁ、なんとかなってよかった。
ちょうど、Mozilla24の会場に向かう前に、以下の本をちょうど読んでいて、さらに、解説がdankogaiさんだということだったで、本の内容に少し会ったセルオートマトンをお題に選んでみました。
心はプログラムできるか 人工生命で探る人類最後の謎 (サイエンス・アイ新書 31)
- 作者: 有田隆也
- 出版社/メーカー: ソフトバンククリエイティブ
- 発売日: 2007/08/16
- メディア: 新書
- 購入: 6人 クリック: 104回
- この商品を含むブログ (50件) を見る
「一次元セルオートマトンWebサービス」というのを作成したのですが、プログラムとしては全然難しくなくて、一次元セルオートマトンのパラメータを受け取って結果のテーブルをJSONPで返すというだけです。LiveCodingで作成したCGIのコードは、以下。会場でつくったまんまなので、あやしげなコメントアウトも残っています。
#!/opt/local/bin/perl use strict; use warnings; use JSON::Syck; use CGI; my $q = CGI->new; print $q->header(-type => 'application/javascript'); my $rule = $q->param('r') || 30; my $callback = $q->param('callback') || 'callback'; my $row = [(0) x 40, 1, (0) x 39 ]; my $grid = [$row,]; my @rule_table = reverse split //, (unpack("B8", pack("C", $rule))); for (0..30) { my $new_row = []; for my $i (0..@$row-1) { #print $row->[$i]; my $bits = '00000'; $bits .= $i - 1 < 0 ? 0 : $row->[$i-1]; $bits .= $row->[$i]; $bits .= $i + 1 > @$row -1 ? 0 : $row->[$i+1]; my $rule_index = unpack("C", pack("B8", $bits)); $new_row->[$i] = $rule_table[$rule_index]; #print $new_row->[$i]; } $row = $new_row; push @$grid, $row; #print "\n"; } #for my $x (@$grid) { # for my $y (@$x) { # print $y; # } # print "\n"; #} print $callback . '('; print JSON::Syck::Dump($grid); print ');';
動作は、http://www.douzemille.net/labs/ca/ca.htmlで確認できます。デモした時はもうすこしきれいなお星様だったのですが、使っていい素材かわかんなかったので、ちょっと寂しい表示です。Javascriptがてきとーでなんかやたら重いので、Firefoxが警告出すやも。
ruleというパラメータをいじってdrawすると表示がかわります。90とかがおすすめです。
このPerlのコードで一見わかりにくいのはpackとunpackが出てくるですが、"Perl 2進数"でググってコピペしました。使えるところは、がんがんコピペで。
コピペを恐れるな(don't be afraid to be a copycat)