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

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

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

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

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

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

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

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

07032011 javascript 家庭菜園
毎度Photoshopをいじるのも面倒なのでcanvasで出来るようにしてみた。
<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>
$(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(); } });
まぁまぁの出力

区画のデータはSQLiteかなんかで管理してJSONで取り出せるようにしよう。
06032011 life
2週間くらい前にバチッと音がして突然アクオスがお亡くなりになってからテレビ無し生活を送っていた。
ノートパソコン2台とiPadあるし、子供は順応した(僕はテレビほとんど見ない)のだが、若干一人耐え切れずにギブった。
色々調べて42Z1でいいやと。
運動も兼ねて近所のコジマにチャリで行って価格交渉したら、ネットの最安値とそれほど変わらなくて、壊れたアクオスの引き取り手数料とかコジマポイントを考えるとコジマのほうがお買い得だった。それから明日までフェアをやってるらしくて、500Gの外付けHDDを付けてくれたのでコジマで購入した。
06032011 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
ってエラーが出るのだが理由がよくわからん。

静岡ではJava Script The Good Patsの読書会をしています。興味があれば気軽に参加を。
05032011 life
05032011 家庭菜園
あんま流通にのらないけど自分で育てるのは楽しそうな野菜はないかなぁと思い読んでみた。見慣れない野菜なのでちょっとしたレシピが付いているのが良かった。
興味を引いたのはこんなもんだが、特にカリフラワーロマネスコは育ててみたい野菜としてのプライオリティが上がった。

05032011 drum'n'bass
聴きやすい曲が揃っている。
がお気に入り
高揚感が気持よく、途中に入るシンセブリブリ攻撃で盛り上がる歌モノチューン。アンセム決定かな。
個人的には、アゲ気味よりはこういうベースラインが黙々と続くほうが好き。
05032011 perl
htmlをロードした後にgetJSONでJSON取ってくるようになっているので3秒ほど待たせてある。WWW::Mechanize::Firefoxの$mech->synchronize使えばいいのかなと思ったんだができなかったためにやっつけでsleepさせたのであとでちゃんと調べる。
use WWW::Mechanize::Firefox; use Web::Query; use Encode; my $mech = WWW::Mechanize::Firefox->new(); $mech->get('http://blog.kzfmix.com/404'); sleep(3); my $q = Web::Query->new_from_html($mech->content); $q->find('.tags a')->each(sub { my $i = shift; printf "(%d) %s\n", $i+1, encode('utf-8', $_->text); });
で、タグの名前がリスト表示される
(1) AIR (2) AMOP (3) Android ... (218) 電子工作 (219) 静岡 (220) 高山
そもそもここらへんから始まった話で、最初は他の言語にもmechanizeの実装あるからそれ使えばいいんじゃないのかなぁという助言で終わるかなと思っていたのだけど、対象のサイトのhtmlみたらjavascript使いまくって組み立てられていた。で、そういう場合にスクレイピングするにはどういう方法があるのか色々調べて勉強になったので個人的には満足だけど、あのおじさんにはできない仕事であることが判明した。ということはあの人達丸投げしてくんのかな?
というか丸投げする気が満々だったので、いちおうどういう目的でどういう事をやろうとしていて、どこら辺が技術的に難しいと考えてるのか資料にまとめて事前に送れば会議に出るか考えてやる、って返答しといたけど、絶対やらんと思うなぁ(昔からそうだったし)。
設計も実装もテストも行わないシステム部の社員が存在したり、
wwwwって笑い事じゃないなぁ。
03032011 DMPK
7章が良い。体裁としては7章を説明するために6章まで割いて基本的なことから説明してるんだけど、結局7章の内容を少し読み進めては1-6章のどこかを読みなおすという、ちょっと読んでは復習と理解の確認のために前の章を探すというスタイルになってしまうので、これは非常に手間だ。
あとそういう読み方を想定している割には目次が貧弱な気がした。校正もうちょっと丁寧に入っていれば必読書なんだろうけど。
で、7章を丁寧に読めばある薬剤が、肝固有クリアランス律速で消失するのか、血流律速で消失するのか、薬物間相互作用を受けやすいのか、吸収の良し悪し、蓄積の懸念あたりに関して大雑把な手がかりを得られるようになる。
自分のフィールドはコンピュテーショナルケミストリー、ケモインフォマティクス、バイオインフォマティクスだけど、構造最適化プロジェクトに関わっていると、DMPKのデータを解釈して理想とするプロファイルとの不一致はどこから来ていて、それを解消するためには合成的にどういう方向に向かえばいいのかというあたりに深く関わらないといけない。QSPRとか言って物性があーだこうだとパラメータこねくり回すだけじゃなくて、もっとin vivoとin vitroの関係を捕まえたうえでQSPRとして合成方針にフィードバックしたいなぁと思っている。
そういうヒトも読んでおいて損はない。7章の最後に書いてありますが、非臨床だったらパラメータをモデル動物のそれに置き換えればどうように議論できるので。