オライリーからはやっぱケモインフォマティクスの本も出して欲しいと思う

バイオインフォだけだと片手落ちの気がする。表紙はケクレ構造にちなんで亀でお願いしたい。

ProductName バイオインフォマティクスのためのPerl入門
水島 洋
オライリー・ジャパン / ¥ 5,040 ()


ProductName 実践 バイオインフォマティクス -ゲノム研究のためのコンピュータスキル-
Cynthia Gibas,Per Jambeck
オライリー・ジャパン / ¥ 4,410 ()


今のCPUとかmemoryの状況でLLで量子化学とか、かなりアリだと思うんだけどなぁ。pyquanteとかやばいでしょう。

Net::AmazonでBad Requestエラー

大掃除と配置換えのためにサーバーの電源を切ったり入れたりしてたらNet::Amazonが動かなくなってしまった。

Net::Amazonのデバッグは

use Net::Amazon;
use Log::Log4perl qw(:easy);

Log::Log4perl->easy_init($DEBUG);

my $ua = Net::Amazon->new(

とか。

手元のMacbookと比較しながらにらめっこすること3時間。そろそろイライラして来た頃合にSignatureしか考えられんよなぁとソースを見ながらふと、時間ズレてんじゃねーの?

ビンゴだった

モナド(副作用の意思を伝える?)

非決定性計算とかambでどんづまり。なんか色々みているうちにうっかりモナドに迷い込んでしまった。

世界で一番か二番くらいにやさしい「モナド入門」

我々の課題を思い出してください:「副作用付き計算を、純関数で表現せよ」でした。カウンター(大域変数count)に触ることは副作用ですから、これをやめましょう。んじゃ、カウントアップできないじゃないか! って?はい、そのとおり。でも、「カウントアップしたい」という意志を伝えることはできます。

Perlの駱駝のこぶにはMonadも入ってる

結局Monadを実装するためには、値と副作用を別々に保持し、値に関しては参照等価性を保ちさえすればいい。

    $op0->{value} = eval{
        $coderef->($op0->{value}, $op1->{value});
    };
    if ($@){
        $op0->{state} = $@;
        $op0->{value} = undef;
    }

evalで「失敗するかもしれない演算」を包んで「より大きな失敗するかもしれない演算」を作るって解釈すればよいのかな。

ProductName ふつうのHaskellプログラミング ふつうのプログラマのための関数型言語入門
青木 峰郎
ソフトバンククリエイティブ / ¥ 2,940 ()
在庫あり。

あとでふつうのHaskellプログラミング読み返そう。

Haskellすごいなぁ

現実逃避もかねて、どう書く?解いてた。

Higher-order Perlのおかげでこんな感じの問題は、まず再帰で考えることができるようになった気がする。

ProductName Higher-Order Perl: Transforming Programs with Programs
Mark Jason Dominus
Morgan Kaufmann / 5692円 ( 2005-03-28 )


それにしても、haskellの二行ってすごいなぁと思った。

cpanのgpgエラー

cpanコマンドでinstall CPANすると

警告: 構成ファイル「/Users/xxxx/.gnupg/gpg.conf」の安全でない所有者

となるのは-Hオプションをつけてないから。

sudo -H cpan CPAN

とやればよろしい。

ProductName 初めてのPerl 第5版
Randal L. Schwartz
オライリージャパン / ?円 ( 2009-10-26 )


perlでソースコードのハイライト

Pygmentsをperlで使いたかったので、 Inline::Pythonでやってみた。

use Inline Python => <<'END_OF_PYTHON_CODE';
from pygments import highlight
from pygments.lexers import PythonLexer
from pygments.formatters import HtmlFormatter

def py_highlight(code):
   return highlight(code, PythonLexer(), HtmlFormatter())

def get_stylesheet():
    return HtmlFormatter().get_style_defs('.highlight')
END_OF_PYTHON_CODE


$code = <<'PYTHON_CODE';
from reportlab.pdfgen import canvas

c = canvas.Canvas('hello.pdf')
t = c.beginText()
t.setFont(t._fontname, 64)
t.setTextOrigin(0, 0)
t.textOut('Hello, World')
h = 64 / t.getX() * c._pagesize[1]
t.setFont(t._fontname, h)
c.setFontSize(h)
c.rotate(-90)
c.drawString(-c._pagesize[1], t._leading - h, 'Hello, World')
c.save()
PYTHON_CODE

printf qq|<html><head><style type="text/css">%s</style>
</head>\n<body>%s</body>\n</html>|, get_stylesheet(), py_highlight($code);

pygments

amazon認証プロキシ

amazonの認証に対応するためにhikiのバージョンを0.8.8.1にあげたついでにamazonプラグインを覗いてみたらプロキシで対応していた。

drkcoreのほうはNet::Amazon使っているので、ローカルでSignature組み立ててるんだけど、wikiりたいだけのユーザーがわざわざsecret_keyとか取得すんのもあほくさいからwikiみたいのはプロキシーでいいのかと。

ProductName パターン、Wiki、XP ~時を超えた創造の原則 (WEB+DB PRESS plusシリーズ)
江渡 浩一郎
技術評論社 / ¥ 2,394 ()
在庫あり。

駱駝使いw (2)

行末がOCamlっぽくなっても大丈夫!

use XXX;;
use WWW::Mixi::Scraper;;
my $mixi = WWW::Mixi::Scraper->new(
    email => 'ml', password => 'pw',
    mode  => 'TEXT');;
XXX $mixi->new_friend_diary->parse;;

駱駝使いw

perlと言えば駱駝、OCamlと言えば駱駝。つまり両頭使いは必然の流れですな。

perl4camlを使うとocamlでperlのコードを取り込める。

#require "perl";;
open Perl;;
eval "use Net::Twitter";;
eval "Net::Twitter->new({username => 'ur', password => 'pw'})->update('from perl4caml')";;

from perl4caml

CPANの膨大な資産が使えるのは魅力。

Chuckで遊んでみた

朝からChucKで遊ぶ。

編集した結果をリアル気味に反映させたくなったのでperlで書いた(loop.pl)。

use Path::Class;

my $file = $ARGV[0] || die "filename not found";

my $t = file($file)->stat->mtime;

system "chuck", "+", $file;

while(1){
  sleep 1;
  unless ($t == file($file)->stat->mtime) {
    system "chuck", "=", "1", $file;
    $t = file($file)->stat->mtime;
  }
}

あとはChuckのサンプル(test.pl)

SinOsc s => JCRev r => dac;

.5 => s.gain;
.2 => r.mix;

[ 1, 3, 5, 7 ] @=> int note[];

while( true )
{
    Std.mtof(Std.rand2(1,3)*12 + 48 + note[Std.rand2(0,note.cap()-1)] ) => s.freq;
    140::ms => now;
}

これで、chuckのほうをサバクラにするために

chuck --loop

で動かしておいて、別の端末から

perl loop.pl test.ck

これで、test.ckをエディタで編集して保存すると反映される。

Arduinoとかで制御すればもっと面白くなりそう。CdSセンサとかで変化するようなのをつくってみてもいいし、ChucKをネットワーク越しに制御できるので音サーバーというのも面白いかもしれませんな。

ProductName Making Things Talk -Arduinoで作る「会話」するモノたち
Tom Igoe
オライリージャパン / ¥ 3,990 ()
在庫あり。