02062012 life
ついでにマクルーハンも。

マクルーハン理論
02062012 家庭菜園
02062012 Ruby
あまりテスト駆動じゃなかった。
例題やりたかったら、テスト駆動JavascriptかPython Testingがいいと思う。
01062012 Python
うわ、超欲しい!図書券で買おう!とおもったら両方とも電子書籍だった。
01062012 Haskell
これは、僕のなかで非常に納得のいくものだった。
Haskell以外のほとんどの言語における「代入」という操作は、状態付きの計算と捉えることができます。
MooseやPythonでlispとかschemeを書いたことがあったが、そのときに環境というスタックを用意したなぁと妙に納得した。
この本は、日本の初級Haskellerのレベルを押し上げる役割を担うんじゃないかなぁと。少なくとも僕は本書を読んだことで、haskell細胞が進化した(by トリコ)
それからWriterモナドが面白いなぁと改めて思ったので写経。
import Control.Monad.Writer gcd' :: Int -> Int -> Writer [String] Int gcd' a b | b == 0 = do tell ["Finished with " ++ show a] return a | otherwise = do tell [show a ++ " mod " ++ show b ++ " = " ++ show (a `mod` b)] gcd' b (a `mod` b)
実行すると、ログがついて回るのでsndで抜き出す。
*Main> mapM_ putStrLn $ snd $ runWriter (gcd' 4351 3776) 4351 mod 3776 = 575 3776 mod 575 = 326 575 mod 326 = 249 326 mod 249 = 77 249 mod 77 = 18 77 mod 18 = 5 18 mod 5 = 3 5 mod 3 = 2 3 mod 2 = 1 2 mod 1 = 0 Finished with 1
Haskellはやっぱり面白いなぁ。もう少し書けるようになりたい。
31052012 Python
仕事でfeedaggregatorを作る必要があって、家でやるならplaggerでいいじゃんとか思うんだけど、職場でそれやっちゃうとメンテナンスできるヒトがいなくなっちゃって困るし、インストールも時間がかかるので、requestsとfeedparserでちゃっちゃと作ることにした。
実は非同期のクローラーが作ってみたくかったので、Tornadoでつくったのもあるんだけど、サイトアクセスのタイミングがよく分からないのと、最初はそれほど多くのサイトにアクセスしそうにないので同期型のクローラーを動かすことにした次第。
feedparserでparseするとupdate_parsedとかpublished_parsedはtime.struct_time型になるのでwerkzeug.contrib.atomに食わせるにはdatetime型に変換する必要がある。
この場合にはfromtimestampメソッドを使えばいい。
updated=datetime.fromtimestamp(mktime(e.updated_parsed))
時間の変換は結構めんどくさいね。
31052012 life
新幹線の中で読んだ。付箋を忘れたのであまりかけないのが残念だが、ちょっとしたTips集になっていて、面白いことが色々書いてあるので、ブックオフなんかで投げ売りされてたら買って読んでみるといいです。
31052012 javascript
朝からカフェオレを飲みながら。
expressコマンドを叩くと、routesが別になってるのはRoRかなんかのお作法に倣ったのかな。
.
├── app.js
├── package.json
├── public
│ ├── images
│ ├── javascripts
│ └── stylesheets
│ └── style.css
├── routes
│ └── index.js
└── views
├── index.jade
└── layout.jade
でapp.jsを見ると
var express = require('express') , routes = require('./routes');
ってなってるんだけど、これって
var express = require('express') , routes = require('./routes/index');
と同じということでいいんだろうか?実際動くんだけど。CommonJSのrequireの仕組みを見れば書いてあるんですかね?あとで探す。
来月の終わりに静岡でNode.jsの勉強会があります。私はCoffeeScriptとExpressでウェブアプリを作るっていうハンズオンをやる予定にしてますので、暇があれば参加すると楽しいと思います。
30052012 life
5年くらいの前の本をブックオフで買って、当たっているかなぁと答え合わせを兼ねて読むのも面白い。本書では「年収300万円も今や危うい」って書いてあるが、結局上向く気配もないだろうし、まぁこれからもないだろう。
それでも、経済成長を目指すっていうのはいばらのみちでしょうね。人口が減少している国で経済が成長しているという例はあるんだろうか?
結局は節約しましょうっていうのが本書のサバイバル術の主張なんであまり面白いことはかいてないんだけどね。
さて、僕が常々不思議だなぁと思っているのが、本書に書いてあるように
若いうちは本来の貢献よりも安い給料で働き、年をとったら働き以上の給料をもらうのが年功序列
だというわけです。実際に僕もバリバリ働いてた頃に、給料少なすぎんだろって上司に噛み付いたら、上と同じような返事が返ってきたし、労組系のヒトは基本的にこういうマインドですね(その当時の上司もそうだった)
なので、成果主義に移行した時点で労組は一定の役割を果たしたってことで解散すればいいのに、なぜかユニオンショップに移行してしまったりとか。あほくさすぎて、それ以来一切組合に関わらんようにしてる。
これからの働き方において、労組は枷にしかならないんじゃないかなぁ。
労組は堕落、給料は下落
29052012 coffeescript
後半Node.jsを使ったウェブアプリ開発のためのヒント集みたいになっていて、CoffeeScriptである必然性を感じなかったんだが、個人的に7章後半の運用まわりが非常に参考になったので良かったということで。
初心者向けの入門書というよりはすでにCoffeeScriptである程度書いているヒトが、文法おさらいしつつ、よさげなライブラリを使って効率的に開発しましょうって感じの内容だった。
そもそもCoffeeScriptが(javascriptへコンパイルという)一手間を加えるだけのものなので、そこにどういう価値を見出すかでCoffeeScriptへの向きあいかたが決まってくると思う。僕の場合はPythonっぽくかけて括弧のネストから解放されるのに魅力を感じたのと、リスト内包表記はやっぱいいよねーってあたりですね。
まぁ、応用考えたら、CoffeeScriptらしさっていうのは必然的に薄まってくるよなぁと思いながら読んでた。最後のほうにクライアントサイドMVCの話が出てたけどSpineに触れてないのは残念だったかな。
具体的な例をやりたければテスト駆動JavascriptのサンプルをCoffeScriptで書いてみるのがいいんじゃないかなぁと。で、わからないところを本書で補うと。