feedparserとwerkzeug.contrib.atomで時間の型を合わせる

仕事で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))

時間の変換は結構めんどくさいね。

ちょいデキ!

新幹線の中で読んだ。付箋を忘れたのであまりかけないのが残念だが、ちょっとしたTips集になっていて、面白いことが色々書いてあるので、ブックオフなんかで投げ売りされてたら買って読んでみるといいです。

ProductName ちょいデキ! (文春新書)
青野 慶久
文藝春秋 / ?円 ( 2007-09 )


Expressのroutes

朝からカフェオレを飲みながら。

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でウェブアプリを作るっていうハンズオンをやる予定にしてますので、暇があれば参加すると楽しいと思います。

年収崩壊

5年くらいの前の本をブックオフで買って、当たっているかなぁと答え合わせを兼ねて読むのも面白い。本書では「年収300万円も今や危うい」って書いてあるが、結局上向く気配もないだろうし、まぁこれからもないだろう。

それでも、経済成長を目指すっていうのはいばらのみちでしょうね。人口が減少している国で経済が成長しているという例はあるんだろうか?

結局は節約しましょうっていうのが本書のサバイバル術の主張なんであまり面白いことはかいてないんだけどね。

ProductName 年収崩壊―格差時代に生き残るための「お金サバイバル術」 (角川SSC新書)
森永 卓郎
角川SSコミュニケーションズ / 798円 ( 2007-10 )


さて、僕が常々不思議だなぁと思っているのが、本書に書いてあるように

若いうちは本来の貢献よりも安い給料で働き、年をとったら働き以上の給料をもらうのが年功序列

だというわけです。実際に僕もバリバリ働いてた頃に、給料少なすぎんだろって上司に噛み付いたら、上と同じような返事が返ってきたし、労組系のヒトは基本的にこういうマインドですね(その当時の上司もそうだった)

なので、成果主義に移行した時点で労組は一定の役割を果たしたってことで解散すればいいのに、なぜかユニオンショップに移行してしまったりとか。あほくさすぎて、それ以来一切組合に関わらんようにしてる。

これからの働き方において、労組は枷にしかならないんじゃないかなぁ。

結論

労組は堕落、給料は下落

CoffeeScriptファーストガイドはモダンなWebアプリケーション開発ガイド

後半Node.jsを使ったウェブアプリ開発のためのヒント集みたいになっていて、CoffeeScriptである必然性を感じなかったんだが、個人的に7章後半の運用まわりが非常に参考になったので良かったということで。

初心者向けの入門書というよりはすでにCoffeeScriptである程度書いているヒトが、文法おさらいしつつ、よさげなライブラリを使って効率的に開発しましょうって感じの内容だった。

そもそもCoffeeScriptが(javascriptへコンパイルという)一手間を加えるだけのものなので、そこにどういう価値を見出すかでCoffeeScriptへの向きあいかたが決まってくると思う。僕の場合はPythonっぽくかけて括弧のネストから解放されるのに魅力を感じたのと、リスト内包表記はやっぱいいよねーってあたりですね。

まぁ、応用考えたら、CoffeeScriptらしさっていうのは必然的に薄まってくるよなぁと思いながら読んでた。最後のほうにクライアントサイドMVCの話が出てたけどSpineに触れてないのは残念だったかな。

  • 文法のところではdoを使ったクロージャの作り方と、複数行の正規表現は知らなかった
  • CoffeeDoc
  • Node.jsのデバッガ
  • ログ出力モジュール winston
  • npmパッケージの開発方法が簡単に紹介されていた

具体的な例をやりたければテスト駆動JavascriptのサンプルをCoffeScriptで書いてみるのがいいんじゃないかなぁと。で、わからないところを本書で補うと。

ProductName テスト駆動JavaScript
Christian Johansen
アスキー・メディアワークス / ?円 ( 2011-11-25 )


ふもと博に行ってきた

これです。

みくりや蕎麦は山芋をつなぎに使ってて、山芋の香りが決行するんだけど、短すぎなのと切りが不揃いだったのでちょっといまいち。金太郎あたりでたべるのがいいんじゃないかなぁ。山芋をつなぎに使っているとこだったら、きわだ路もいいよね。

1338201503

こっちはJA鳴沢の。せんどそばっていうらしい。大根の千切りのせたり、唐辛子味噌をつけたりとなかなか面白い食べ方だった。

1338201505

チキンハウスの唐揚げをつまみにビール飲んで終了。

1338201508

ハプニングがあってすぐに終了したけどねー。

CoffeeScriptとTitanium mobileの本が届いた

なんかたて続けに5,6冊届いた。

1338198186

ProductName Appcelerator Titanium Smartphone App Development Cookbook
Boydlee Pollentine
Packt Publishing / 3810円 ( 2011-12 )


今日の畑(120526)

ベランダで育苗していたゴーヤが畑デビューする日がやってきた。今年はゴーヤの発芽率が悪かったので、わざわざ198円の苗を3つ調達したのに、購入した翌々日に立て続けに諦めてたボットから4つくらい発芽したので萎えた。

リーフレタスは上手く行ってないので、再度種まきにチャレンジする予定。ついでにコリアンダーとローズマリーも植えてやる。

1338116670

オクラとゴーヤ。オクラはまだ定植できないなぁ。

1338116672

ラディッシュ。これもいまいち根が肥大化してないけど、もうそろそろ収穫できそう。

1338116674

サツマイモは、苗取り用のが安かったので買ってみたんだけど、手間がかかってしょうがない。先週の月曜に切り苗を買って畑に植えてしまったので、時間差で植える苗にする予定。

1338116676

おまけの朝顔。撒くの遅すぎんだろ?とか思うんだけど娘の仕事だからまぁいいや。

1338116678

さて、ここから畑。ニンニクはそろそろ収穫できそうなんだけど、まとまった時間が取れないので、どうしようかなぁと。どこかで遅刻出勤するかな。

1338116680

ゴーヤの植え付けは娘に手伝ってもらった。人参間引くのに夢中になっててあんま手伝ってくれなかったけど。

1338116682

ズッキーニは2株だけ植えといた。あまり期待してない。

1338116684

サツマイモはどうかなぁ。あんま水やりできてないので根付くかどうか不安。

1338116686

人参は良い感じに育っているので期待している。

1338116688

ニンニクの後に何を植えようかなぁと悩んでいるんだけど、空芯菜でもいこうかなぁと。

ApplicativeとMonadの違い

引き続き「すごいHaskellたのしく学ぼう」を読んでいる。

ProductName すごいHaskellたのしく学ぼう!
Miran Lipovača
オーム社 / 2940円 ( 2012-05-23 )


ApplicativeとMonadの違いはbind(>>=)があるかどうかだと思うんだけど

(>>=) = m a -> (a -> m b) -> m b

これは、

モナド値を取って、それに「通常の値を取るがモナド値をとる返す関数」を適用する

わけだ。そしてこれは、Applicativeのススメによると、Applicativeでは条件分岐は実現できず(Monadではできる)ということになるんだと思うわけで、そこら辺の分かりやすい説明が13.4の綱渡りに書かれている。

で、書かれている関数は理解できるんだが、意図しているものがモヤモヤしている。この例の場合の条件分岐はNothingかJust xで型(データコンストラクタ?)が別れるということになるんだろうなぁと思うんだけど、じゃぁMaybe型ってなんなの?

失敗するかもしれないという文脈付きの型って本書では書いてあるけど、モナドから見たら失敗している、失敗してないという2つの状態を表現している型 っていう認識でいいのか?bindはその二つのいずれかに条件分岐できるという。

アプリカティブ値が相互作用できない(モナド値が相互作用できる)てそういうこと?

PreziのズーミングプレゼンテーションのコツはBig Pictureを描くこと

Preziの本なのか、筆者の考える発想論の本なのかよくわからないが、読んだ感じでは後者のニュアンスを強く持った。特に、preziをマインドマップがわりに使う(4章)話は普通にマインドマップ用のツール使えばいいじゃんと思ったのであまり役に立たなかった。

ProductName Preziで始めるズーミングプレゼンテーション
筏井 哲治
日経BP社 / 1575円 ( 2011-03-31 )


実際に役に立ったのは、5章のあたり。Preziのコツはマクロとミクロな視点を上手く組み合わせることで、マクロにみた時にPreziの絵が美しくあるべきという筆者の主張には共感を覚えた。

一方で、抜けてんじゃないの?って思ったのが、本書ではカメラワークが視聴者にどういう効果を与えるかの説明がまるでないところ。

Preziは一枚の巨大なキャンパスで世界を表現し、それを視点移動と回転、ズームイン、ズームアウトといった躍動感のあるカメラワークでプレゼンテーションを行う点にあります。

とか書いてあるのにねぇ。実際に大きな絵を描いても、プレゼンは動きにも制約されるだろうし、動きの与える効果にも絵の描き方が制約されるだろうし、この2つは切り離せないんじゃないかなぁ。

例えば、同じような話題を反転させながら移動させたら気持ち悪いし、対比させる内容が横とか縦にスライドされて表示されるのもまた変だ。

そういうあたりのカメラワークは映画やアニメーションの技法とかを参考にするんだろうなと思っていたので、そういう話題にも触れてることを期待して本書を買ったんだけど、まったく書いてなかった。なので、去年に買った本なんだけどエントリに上げてなかったという。

なんで突然エントリ書こうかなと思ったかというと、

というエントリをみつけたので、おーこれは期待できそう!と思ったから。色々手を入れれば自分好みのプレゼン作れそうですね。動きと配置のデザインパターンとかも溜まっていけば面白いんじゃないかなぁ。