娘の体調が優れない(+自分にも飛び火した)のでゆったり休日気分で

昨晩からここ二三日体調の悪かった娘の調子がさらに悪化して、ついでに一緒に寝ている僕にも直撃したらしく、妙にしんどかったので会社を休んだ。で、明日のことを見越して病児保育の付いてる病院に行ってきたんだけど2時間待った。iPadとDSとUnixネットワークプログラミングを抱えて行ったので待ち時間は苦にならなかったけどそれでほとんど半日がつぶれた。

その後、昼ごはんを食べたら眠くなって夕方まで昼寝をしていたが、娘は眠れずに病院で教えたうごメモにはまってとなりの布団で色々作ってたらしい。起きたら早速見せられた。

今はiPadでさっき購入したMr. Kumoという一筆書きパズルをやっている。こういう数学的なのを与えて数学耐性つけとこう。

ProductName 最短経路の本
R. ブランデンベルク
シュプリンガー・ジャパン株式会社 / 3675円 ( 2007-12-13 )


そういえば、布団の中で数学ガール読みきった、面白かった。あとで感想書く。

ProductName 数学ガール/乱択アルゴリズム
結城 浩
ソフトバンククリエイティブ / 1995円 ( 2011-03-02 )


あとtwitter追っかけてて、日本語訳でんのか思ったんだけど原著でもいいかな。

ProductName Statistical Computing with R (Chapman & Hall/CRC Computer Science & Data Analysis)
Maria L. Rizzo
Chapman and Hall/CRC / 6031円 ( 2007-11-15 )


まぁそんな感じでたいして進捗のない一日だった。

予算がなくてもステキなデザインのフライヤー・コレクション

印刷とか紙の選び方でコストを抑えるっていう話がメイン。

デザインそのものの工夫って感じじゃなかったので想定していたのとはちょっと違う本だったが、眺める本としてはそこそこ楽しめた。素敵なフライヤーはアテンション獲得には必須だからなぁ。

名刺のデザインとかにも参考になる感じ(この前procaで作っちゃったけど)。

クラブイベントのフライヤーの手伝いしてたときはCMYK印刷だったよなぁとか思い出した。

「伝承農法を活かすマンガでわかる家庭菜園の裏ワザ」を読んだ

ジャガイモの植え方とか、ナスの仕立て方とかなかなか面白かった。入門者向けの本を鵜呑みにしないで色々試してみるといいということに気付かされたので良書。

ProductName 伝承農法を活かすマンガでわかる家庭菜園の裏ワザ
木嶋 利男
家の光協会 / 1365円 ( 2010-01 )


ナス

ナスは第一花を摘みとる。三本仕立てにしないで主枝を切って二本仕立てにする。そして脇芽を伸ばしながら実のある枝ごと切って収穫する

切り戻しするときは株元から30センチ離れたところでスコップを入れて根切りをする

ピーマン

ピーマンは一番、二番花は摘みとる。また収穫毎に同じ節から内側に伸びてる脇芽を1つ摘みとる

オクラ

四本立ちにすると実が硬くなるのを遅らすことが出来る

冬季の土づくり

ヘアリーベッチを植える

入門自然言語処理

ひと通り流し読みした。

職場の昼休みに読み進めてきたので結構時間がかかったし、流し読みなので理解できてないところも結構ある。

1-4章がPythonでテキスト処理するための基礎的な事柄の説明で、それ以降が英語を想定した自然言語処理。最後の方は内容が高度だが10章の「文の意味の解析」は面白かった。プログラミング言語も言語の一種だからね。12章が日本語版オリジナルでPythonでの日本語の取り扱いに関して。

ProductName 入門 自然言語処理
Steven Bird
オライリージャパン / 3990円 ( 2010-11-11 )


章末問題が充実していて、この部分を解いて理解度をチェックしながら読み進むのがよいんだろうなぁと思いつつも、独習はちょっとやだなぁと思った。勉強会の題材にはいいのかなぁと。

今は自然言語処理へのモチベーションがそれほど高まってないこともあってざっと読んでみた。

今日の畑(110306)

暖かかったのでチャリでぶらっと畑に顔をだしてみた

1299498189

ジャガイモの芽はまだ出てなかったがソラマメの花は結構咲いていた。

1299498195

浅葱収穫できるかなぁと期待して来てみたのだけどまだまだだった。

1299498176 1299498183

秋に比べて生え方が全然違うので収量期待できる(これが秋)

1286359096

東の麓

山形の酒

1299498254

なかなか

作付け状況をcanvasを使って表示

毎度Photoshopをいじるのも面倒なのでcanvasで出来るようにしてみた。

html

<html lang="ja">
<head>
<title>Allotment</title>
<style type="text/css">
canvas { border: 1px solid #999; }
</style>
</head>
<body>
<canvas id="allotment" width="500" height="500"></canvas>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="allotment.js"></script>
</body>
</html>

js

$(document).ready(function() {
var cv, ctx;
var allotment_data = [
    {name:"なにもうえてない",  x:10,  y:10,  width:480, height:120, color:"#CCCCCC"},
    {name:"浅葱",  x:10,  y:140,  width:140, height:120, color:"#66CC66"},
    {name:"ニンニク",  x:160,  y:140,  width:80, height:120, color:"#993300"},
    {name:"春菊",  x:250,  y:140,  width:80, height:120, color:"#339933"},
    {name:"ジャガイモ",  x:340,  y:140,  width:150, height:120, color:"#CC6600"},
    {name:"ソラマメ",  x:10,  y:340,  width:70, height:150, color:"#339933"},
    {name:"エンドウ",  x:10,  y:270,  width:70, height:60, color:"#339933"},
    {name:"ジャガイモ",  x:90,  y:270,  width:400, height:110, color:"#CC6600"},
    {name:"ミョウガ",  x:90,  y:390,  width:400, height:100, color:"#CC9966"}
];

initCanvas();
drawCanvas();

function initCanvas () {
    cv = $("#allotment").get(0);
    if (!cv) { return; }
    ctx = cv.getContext('2d');
    if (!ctx) { return; }
}

function drawCanvas () {
    var alt;
    ctx.save();
    ctx.font = "20px";;
    for(index=0; index<allotment_data.length; index++){
    alt = allotment_data[index];
    ctx.fillStyle = alt.color;
    ctx.fillRect( alt.x, alt.y, alt.width, alt.height);
    ctx.fillStyle = "#000";
    ctx.fillText(alt.name, 12 + alt.x, 32 + alt.y);
    }
    ctx.restore();
}

});

まぁまぁの出力

allotment

区画のデータはSQLiteかなんかで管理してJSONで取り出せるようにしよう。

REGZA 42Vを購入

2週間くらい前にバチッと音がして突然アクオスがお亡くなりになってからテレビ無し生活を送っていた。

ノートパソコン2台とiPadあるし、子供は順応した(僕はテレビほとんど見ない)のだが、若干一人耐え切れずにギブった。

色々調べて42Z1でいいやと。

運動も兼ねて近所のコジマにチャリで行って価格交渉したら、ネットの最安値とそれほど変わらなくて、壊れたアクオスの引き取り手数料とかコジマポイントを考えるとコジマのほうがお買い得だった。それから明日までフェアをやってるらしくて、500Gの外付けHDDを付けてくれたのでコジマで購入した。

Javascriptで末尾最適化関数

Javascript The Good Partsの4章の最後にメモ化関数があるので、末尾最適化関数を書かねばならんだろうと。

Function.prototype.tail = function () {return [this, arguments];};
Function.prototype.call_with_tco = function () {
  var c = [this, arguments];
  var escape = arguments[arguments.length-1];
  while(c[0] !== escape)
    c = c[0].apply(this, c[1]);
  return escape.apply(this,c[1]);
};

var tcoptimizer = function (f) {
    var s = f.toString();
    var t = s.match(/function\s+\((.+?)\)\s+{\s+(.+)\?\s+(.+?)\((.+?)\)\s+:\s+([a-zA-Z_]+)/);
    var f_str = "var func_ = function (" + t[1] + ", k_) { " + t[2] + " ? func_.tail(" + t[4] + ", k_) : k_.tail(" + t[5] +");};";
    eval (f_str);
    return func_;
};

var id   = function (x) {return x;};
var sum  = function (n,acc) { return n > 0 ? sum(n-1,acc+n) : acc;};
//console.log(sum(10000,0));
console.log(tcoptimizer(sum).call_with_tco(10000,0,id));

firebugでfunctionで始まる文字列をevalしたらSyntaxエラーになったのでvarからevalしてある。これは謎だがとりあえず動くようになった。しかしid関数とcall_with_tcoメソッドがちょっとよろしくないのでラップしてみる。

var tcopt = function (f) {
    var id   = function (x) {return x;};
    var func_ = tcoptimizer(f);
    return function() {
    var slice = Array.prototype.slice;
    var args = slice.apply(arguments);
    args.push(id);
    return func_.call_with_tco(args);
    };
};

var sum  = function (n,acc) { return n > 0 ? sum(n-1,acc+n) : acc;};
//console.log(sum(10000,0));
var tco_sum = tcopt(sum);

console.log(tco_sum(100,0));

すると

TypeError: k_ is undefined

ってエラーが出るのだが理由がよくわからん。

k_ define error


静岡ではJava Script The Good Patsの読書会をしています。興味があれば気軽に参加を。

ProductName JavaScript: The Good Parts ―「良いパーツ」によるベストプラクティス
Douglas Crockford
オライリージャパン / 1890円 ( 2008-12-22 )


近所の本屋でコミックスを初めて買った

聖☆おにいさんだけどねー

ProductName 聖☆おにいさん(3) (モーニングKC)
中村 光
講談社 / 580円 ( 2009-03-23 )


ProductName 聖☆おにいさん(4) (モーニングKC)
中村 光
講談社 / 580円 ( 2009-10-23 )


あと、ビューティフルデータを立ち読みしててradioheadのビデオの解説してたので興味を持った。

もう、コレの話が出た時点で欲しいんだけど堪えた。