SICP5章 schemeでレジスタ計算機を模倣する

ずっと5章に興味が持てなくてほったらかしにしていたのだけど、読み始めた。5章は毛色が違うように感じてたのと、単に関数型言語が知りたいだけだったら3章までで満足できて、計算機の話って何が面白いんだろうか?なんて思ってたのだけど、(僕の場合)以下のような道のりを経て5章にたどり着いた。

EsoteicでVMとかエミュレータみたいなもんに興味がわいた。あと中間言語

Bolicとか。そういえばゲノム言語とかつくったみたな。

ProductName Rubyで作る奇妙なプログラミング言語 ~Esoteric Language~
原 悠
毎日コミュニケーションズ / ¥ 2,814 ()


プログラミングの力を生み出す本

Cのプログラムをアセンブリから眺めてみる。レジスタとかメモリとか意識できるようになった。

ProductName プログラミングの力を生み出す本―インテルCPUのGNUユーザへ
橋本 洋志,松永 俊雄,冨永 和人,石井 千春
オーム社 / ¥ 2,625 ()


CPUの創りかた

4bitCPUつくる。半加算器とか全加算器が論理回路でつくれるとかそういう話は楽しい。

ProductName CPUの創りかた
渡波 郁
毎日コミュニケーションズ / ¥ 2,940 ()
在庫あり。

SICP5章

という長い道のりを経て、やっとSICP5章。

ProductName 計算機プログラムの構造と解釈
ジェラルド・ジェイ サスマン,ジュリー サスマン,ハロルド エイブルソン
ピアソンエデュケーション / ¥ 4,830 ()
在庫あり。

数日かけてバグとって、実際にGCDマシンが動いた時にはかなり感動。

gosh> (set-register-contents! gcd-machine 'a 206)
done
gosh> (set-register-contents! gcd-machine 'b 40)
done
gosh> (start gcd-machine)
done
gosh> (get-register-contents gcd-machine 'a)
2

デバッグしながら中身の動きが理解できた。

立体ピクロス

欲しいんだけど、買ってもどうせやらないんだろうな。

ProductName 立体ピクロス

任天堂 / ¥ 3,800 (2009-03-12)
在庫あり。

最近ゲームから遠ざかっているので、子供がやりそうとかそういうおまけネタがないと買わないんだよなぁ。3歳児には立体ピクロスは難しすぎるかなぁ。

2x2のルービックキューブも買ったものの、遊ばれるようになるのを待っている状態。

ProductName ルービックの2×2 キューブ(CUBE)

メガハウス / ¥ 1,260 (2002-03-20)
通常5~6日以内に発送

まぁ2x2は自分でやって面白いからいいんだけど。

Natural Language Processing With Python

気になる

ProductName Natural Language Processing with Python
Steven Bird
Oreilly & Associates Inc / 4502円 ( 2009-06-30 )


Arduino届いた

まだいじってないけど。

1238498486 1238498493

基盤の背面に描かれたイタリーがイカす。あと、思ってたより小さかった。

ProductName Arduino Duemilanove 328

スイッチサイエンス / ¥ 2,835 ()


コンパイラの理論と実現

安く感じたので買ってしまった。

送料込みで1K円

open accessやばい

製薬会社だと、会社に縛られる要因ってのは

  • 会社にいないと実験できない(設備の関係)
  • 会社でないとディスカスできない事柄(社内的なノウハウ)
  • 論文の量(知識の吸収)

最初の設備に関してはコンピューター系にとってはもう関係ない。むしろ自宅のマシンで小さいサンプルのコードを動かして、会社のクラスタではrunするだけみたいな。職場というのは、スケールとデータの違いのみ。

二番目も、ディスカスなんて週一でいいし、社内でするより社外でのつながりを重視したほうが得るものが多い。社外で得た情報やアイデアの中から会社にとって良さげなものを選別してコミットしとけば良いような。結局、会社は共有レポジトリみたいなもんで、pushとpullしに出かけていくところ。そしてpullの頻度が出社の頻度なのが理想。得るものがなければpushだけして帰ればいいんじゃないの?それが裁量労働+成果主義のあるべき姿だと思うけど。

(研究者として)会社に縛られる最大の要因が、論文アクセスだ。他人の知識を書物として吸収できるのは重要だが、会社の資産故に外部との議論に使えない。しかし、オープンアクセスになったら気兼ねなく意見をブログに載せられるし、横のつながりも増えるだろう。現実に、open accessの論文をもとにディスカッションするのが一番盛り上がるし。

とか考えると、会社のこじんまりとしたキャリアパスとかアレだよね。SOHOとかベスト

Common Lispとpythonのdocstring

Common Lispのdocstringについて調べてたのだけど、pythonって関数にしかdocstringを入れられないんだっけ?と思ったのでやってみた。

まず関数。__doc__でdocstring。

>>> def sumab (a,b):
...   "test sum"
...   return a + b
... 
>>> print sumab.__doc__
test sum

まぁ、ここまではok

続いて変数

>>> a = 10
>>> dir(a)
['__abs__', '__add__', '__and__', '__class__', '__cmp__', '__coerce__', 
'__delattr__', '__div__', '__divmod__', '__doc__', '__float__', '__floordiv__', 
...
'conjugate', 'denominator', 'imag', 'numerator', 'real']

おー__doc__あるじゃん。

>>> print (a.__doc__)
int(x[, base]) -> integer

Convert a string or number to an integer, if possible.  A floating point
argument will be truncated towards zero (this does not include a string
representation of a floating point number!)  When converting a string, use
the optional base.  It is an error to supply a base when converting a
non-string.  If base is zero, the proper base is guessed based on the
string content.  If the argument is outside the integer range a
long object will be returned instead.

ふむ、これは任意のstringに置き換えられるのかな?

>>> a.__doc__ = "test int"
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'int' object attribute '__doc__' is read-only

リードオンリーだった。str,float,listも一緒だった。

プリミティブな型にもdocstringはあるけど、それは書き換えられないってことかな。

perlスクリプト実行中に外部エディタを利用してデータ入力をおこなう

Config::Pitでデータを追加する時に外部エディタが立ち上がって便利なので、ソースを読んでみた。

File::Tempでテンポラリファイルを用意しておいて、system関数で、環境変数Editorに指定されているプログラムで、テンポラリファイルを開く。そのときのタイムスタンプと修正時刻を比較して、更新があったときファイルの内容を読み出す(Config::PitだとYAML::Syckで出し入れ)。

簡単のためにFile::Slurpで。

use File::Temp;
use File::Slurp;
use Path::Class;

my $text;
my $f = File::Temp->new();
close $f;
my $t = file($f->filename)->stat->mtime;
system $ENV{EDITOR}, $f->filename;
if ($t == file($f->filename)->stat->mtime) {
  print STDERR "No changes.";
} else {
  $text = read_file($f->filename); #外部エディタで入力したデータを読み込む
}

print $text;

File::Tempだと、テンポラリファイルの面倒をきちんと見てくれるので安心なので、よく使うんだけど、editorを組み合わせることが出来るんだったら、gamessとかのインプット用のテンプレートを用意しておいて、実行時にeditorでチョロチョロっと追加してそのままrunできるようなものがつくれてよいかもしれない。

「Arduino Duemilanove 328」注文した

物欲の春なので(?)、本能のおもむくままにクリック。

ProductName Arduino Duemilanove 328

スイッチサイエンス / ¥ 2,835 ()


書籍とか買いすぎて、今月の小遣いのほとんどがなくなってしまったが、来月の東京出張の時にCdSセンサを秋月で調達する予定。

Poken欲しい

パンダのやつ

ProductName [ポーケン / Poken] - Panda

Poken SA (Switzerland) / ¥ 2,480 ()