multiprocessingのpmapヤバイ

multiprocessingのpmapは普通に書いたpythonプログラムをちょっと書き直せば並行して実行できるようになる。

しかもmapしたいところで、

p = Pool(2)
p.map(answer, problems)

って、書くだけなので超お手軽。

ちょっとがんばってc++で書いたほうがよかったかなーと思うプログラムをPythonで書いてしまい、高速化で悩んだのだけど、2コアだとこれだけで2倍近くはやくなるし4コアだと相当はやい。

8コアは試してない。

multiprocessingを試す前にpypyでもと思いコンパイル(1.6の64bitバイナリは10.5では動かなかった)したら、いつまでたってもコンパイルが終わらなくて投げ出した。

というわけで、明日の朝起きたら110の壁を超えている予定。

論語とmongoって似てるよね

pyconjp2011行きのバスの中で読んで流し読み終わった。

アイスブレークの時にfrom静岡は僕一人だったので、もう少しShiz.py的な人を増やしたいところ。

ProductName 高校生が感動した「論語」 (祥伝社新書)
佐久 協
祥伝社 / 840円 ( 2006-06-27 )


教える

「どうしようか、どうしようか」と自問自答するくらいの段階に達してない者には、おしえようがないもんだよ

訴訟

全員が悪く言うからと鵜呑みにせず、きちんと調べてみるべきだ。全員がよく言ってる時も同じ事だよ

デザインの輪郭は素晴らしいエッセイ

デザインの骨格は良書ですなーとおもっていたが、デザインの輪郭も負けず劣らず素晴らしい本であった。

「デザインの輪郭」という言葉は、この本のためだけに思いついたわけではない。これは、「デザインとはいったい何であるか」という問いに答えるときに思い浮かぶ像のようなものである。

ProductName デザインの輪郭
深澤 直人
TOTO出版 / 1890円 ( 2005-11-10 )


あまり言語化すると、ゆるふわっとしたものが失われるのでエッセイくらいで感覚として伝えるというこの方式のほうがよく伝わってくる感があった。

選択圧自体は人為的なものではなくて、いわゆる「状況」なんです。状況が、それが生き残るかどうかということを常に選択しているということです。

仕事のやり方に関してはここらへんの言葉が好きですね。

ピラミッドは頂点から組む。

下から組み上げても台形にしかならない場合があるから

これも理想でしょう。

オフィスは肥えた土壌のようなものです。 スタッフと毎日耕している

ブレーンストーミングもやらないし、 アイデアをたくさんだそうともしない

CoffeeScriptとjQueryを一緒に使ってみる

作付け状況をcanvasを使って表示するやつをExpress+Jade+CoffeeScript+jQueryという構成でやってみた。以前書いたやつは単にCanvasの練習を兼ねたものだったが、今回はデータをAjaxでとってきて描画することにした。

node_allot

サーバー側はExpressで。expressコマンドでスケルトン生成してくれるので地味に便利すぎですね。ちょっと試して終ったら消せるので心理的負担も少ない。coffeescriptのスケルトンを出力するオプションで切り替えられるようになっているとさらに嬉しいかもとおもったけどあるのかな?

express allot
cd allot
npm install -d

これでスケルトンが作られるのでapp.jsとviews/index.jadeを書き換える

app.js

/jsonにアクセスしたらデータをJSONで返すようにする。

// Routes

app.get('/', function(req, res){
  res.render('index', {
    title: 'Express'
  });
});

app.get('/json', function(req, res){
  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"}
  ];

  res.send(JSON.stringify(allotment_data));
});

views/index.jade

h1= title
canvas#allotment(width=500, height=500)
script(type="text/javascript", src="http://jashkenas.github.com/coffee-script/extras/coffee-script.js")
script(type="text/javascript", src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js")
script(type="text/coffeescript")
  | draw = () ->
  |   $.getJSON('/json', (data) -> drawCanvas(data))
  | 
  | drawCanvas = (allotment_data) ->
  |   ctx = document.getElementById('allotment').getContext('2d')
  |   ctx.save()
  |   ctx.font = "20px"
  |   for alt in allotment_data
  |     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()
  | 
  | draw()

もとのと比べるとcoffeescriptのコードのほうがシンプルで見やすくなっていいですね。普段Python使っているのでインデントはわかりやすいし、for in ループはpythonそのものだし、文の終わりに;が必要ないのもいい。

HTML5楽しい

ブーム到来。2冊買った。

ProductName 入門 HTML5
Mark Pilgrim
オライリージャパン / 2415円 ( 2011-04-23 )


Dive into HTML5の和訳なので、原著がおもしろそうだったら買えばいいと思います。

PythonistaだったらDive into Pythonでおなじみの著者ですね。

ProductName HTML5 Canvas: Native Interactivity and Animation for the Web
Steve Fulton
Oreilly & Associates Inc / 2922円 ( 2011-05-13 )


こっちは、Canvasでちょっとしたゲームくらい作れるようになりたいなぁということで購入。値段の割に分厚い。

CanvasとかAudioが使えるようになりたいところ。

fjkwをMarkdownに対応させた

Node.jsでWikiを作っているわけですが。

jeditableのドキュメントをきちんと読んだら、loadurlでraw_text引っ張ればmarkdownでもなんでもいいらしいので。

wiki.jade

script.jeditable
  $(".editable_textarea").editable("#{title}", { 
      type   : 'textarea',
      submitdata: { _method: "post" },
      name     : 'body',
      loadurl  : '/md/' + "#{title}",
      rows     : 10,
      submit : 'OK',
      cancel : 'cancel',
      cssclass : "editable"
  });

app.js

htmlに変換する前のmarkdown書式のテキストを返すURLを追加した

app.get('/md/:title', function(req, res){
  WikiContent.findOne({title: req.params.title}, function (err, content) {
    res.send(content.body);
  });
});

蝉しぐれ

実家に帰省したときに飲んだ日本酒。

出羽桜の微発泡酒(右はビール)。

1314098848

甘酸っぱさは弱くて、日本酒の微発泡という感じだった。

発泡日本酒としてはいまのところ真澄のスパークリングがピカイチだなぁ。

もう少し寒くなってくれば燗つけてもいい感じになってくるので楽しみだ。

今日の畑(110816)

アップするの忘れてた。

トマトとゴーヤ

1314098383 1314098387

モロヘイヤとオクラ。オクラは収穫判定がシビアなので結構ダメにしてる。普通のオクラはすぐに硬くなるので、来年は丸オクラを植えようかなぁ。種とりどうしようか迷っている。

モロヘイヤは絶好調でガンガン収穫できるが、寒くなるととたんに生育が鈍るので意外に収穫時期は狭い。来年はもう少し早く種まきしよう。

1314098389 1314098391

除草して少し綺麗になったが、あまり使われてない。秋植の葉物とか大根とかをそろそろ準備する。

1314098393

jadeでcoffeescriptを使う

もう少しjavascriptに慣れてきたらCoffeeScriptを積極的に使いたいなぁと思っている今日この頃ですが、CoffeeScriptはインストールしなくてもブラウザ上で実行できるよという話を見て、

おーこれだったらjadeでも使えるじゃん

と思ったのでやってみた。

スケルトンは普通にexpressコマンドで作って、views/index.jadeだけをいじる

h1= title
p Welcome to #{title}
canvas#canvas

script(type='text/javascript', src='http://jashkenas.github.com/coffee-script/extras/coffee-script.js')
script(type="text/coffeescript")
  | canvas = document.getElementById('canvas')
  | cc = canvas.getContext('2d')
  | cc.beginPath()
  | cc.fillRect(10, 10, 100, 100)

100px x 100pxの黒い四角をcanvasに描く。

jade_coffeescript

src属性で別ファイルにするほうが開発しやすいかな。

第5回Javascript読書会に行ってきた

正規表現の章。

var napo_parse = /(nap){2,4}/g;

var napotext1 = "napnapnapnaprinnapnap";
var napotext2 = "napnapnapnaprinnapnap";

var result = napo_parse.exec(napotext1);
console.log(result);

var result = napo_parse.exec(napotext2);
console.log(result);

この場合napotext2をparseしたときに何がマッチするのか?と。

$ node naporin.js 
[ 'napnapnapnap',
  'nap',
  index: 0,
  input: 'napnapnapnaprinnapnap' ]
[ 'napnap',
 'nap',
 index: 15,
 input: 'napnapnapnaprinnapnap' ]

indexの記憶は正規表現オブジェクトが持っているのでこういうことになる。

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


次回が最後のjavascript読書会です。