すごいHaskellが届いた

たのしく学ぶために、鯨政宗でも呑みながら読むことにする

1337853565

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


pipでインストールしたパッケージをキャッシュしておきたい

virtualenv使っていると、仮想環境ごとに同じようなパッケージ(Flask,SQLAlchemy,pyqueryなんか)を何度もダウンロードすることになり、帯域の無駄遣いだよなと思っていた。それから、東京出張の際に新幹線の中でコード書いてることが多いんだけど、大抵三島-新横浜間のどこかで一度はイラッとするのもどうにかならんかと。

perlでいうところのminicpanみたいなのないかなぁと調べてみたらpep381client使えっていうやりとりをみつけたので調べてみた。ここなんかよくまとまっている。

ぱっと見ると、pep381clientがいいかなと思うんだけどPYPIのほぼ完全なミラーを作る感じだし、これはノートに入れて持ち歩くにはでかすぎるだろ(30Gくらいのストレージが必要)っていう理由で保留。まぁ、職場にミラーつくるんだったらいいんだろうなぁと思い、使ってみようかなとふとissue見たどうなんだろうね?って思った(パッチ当てたのもあるけどね)。

collective.eggproxyはキャッシュプロキシサーバーであり、キャッシュされてないパッケージはネットワークにつないでダウンロードする必要がある。これはローカルにミラーを用意したいという自分の用途には微妙に合わない。サーバー動かしておくのもなんかめんどくさいなーと。

決定打が見つからないまま悶々としたあげく、結局新しいパッケージを頻繁に入れることは少ないからキャッシュ使うっていう方法でも結構いけそうだからcollective.eggproxyでいこうかなぁと、pip installしたら、ふとpipにキャッシュのオプションあるんじゃないの?と調べたらあったというオチ。

export PIP_DOWNLOAD_CACHE=$HOME/.pip_download_cache

こんだけだった。pipのドキュメントにもchangelogのとこにちょろっと書いてあるだけだったので見逃してた。

pip自体にキャッシュの仕組みがあるんだったらダウンロードキャッシュにPYPIの最新パッケージだけをミラーするスクリプトを書けばpipからはきちんとPYPIに繋がって適切に処理しているように見えるからこのやり方でいいんじゃないかと思ったので、改めてこれをacupと名付けよう。

  • acup(上のやつ、やっつけスクリプト)
  • bcup(minicpan相当のやつ)
  • ...
  • fcup(pep381client)

という妙な脳内認識が出来上がってしまった。

参考

ProductName Pythonプロフェッショナルプログラミング
ビープラウド
秀和システム / 2940円 ( 2012-03-26 )


werkzeug.contrib.atomを使ってみた

このblogはfeedgeneratorを使っているんだけど、blohgのソースコードを読んでいたらwerkzeug.contrib.atomを使っていたのでちょっと興味があった。

最近あたらしいコードを書いていてせっかくなので使ってみた。調べたらFlaskのサイトにも書いてあった

実際使ってみるとrssを束ねて再配信するような場合にはちょっと考えなきゃいけないことが多いかなぁと。

rssにauthorとかそういう属性ないからどうしようかねぇ。

今日の畑(120519)

支柱を立ててなかったせいで、この前の強風と雹でぽっきり折れたキュウリを植え直した。

1337595517

ベランダで育ててたズッキーニも定植したが、なんか育ちが悪くて上手く行きそうな気がしない。とりあえず、マルチはしといたけど、もう花が咲きそう。

1337595519

全体像、今年の土地の利用効率は良い感じ。手前の雑草地帯は浅葱を植えてあるので、来週あたりに球根を掘り起こして堆肥を入れたらなんか別のものを植える予定

1337595521

Flask-WTFのCSRF対策でちょいはまった

ドキュメントによると

<form method="POST" action=".">
    {{ form.csrf }}
    {{ form.name.label }} {{ form.name(size=20) }}
    <input type="submit" value="Go">
</form>

って書いてあるんだけど、

'csrf_token': [u'CSRF token missing']

なんじゃこりゃーって感じで2時間ほどはまったあげく、form.csrfじゃなくてform.csrf_tokenだということに気づいた。

WTFormsのドキュメント読まないとわからん。

沼津でボート釣り

ボート釣りは二年ぶりくらいじゃなかろうか

1337513639

お約束のヒイラギ

1337513637

息子と娘は全部お膳立てしてやって、あたった竿のリールを巻かせるだけの仕事。これはキスが釣れた時のものだと思う。

1337513640

娘と息子がキスを釣って僕はメゴチ一匹という悲しい釣果。

1337513642

また行きたい。

今日の畑(120513)

ジャガイモの花が咲いてた。収穫まであと3週間くらいか。

1337423881

スナップエンドウは花も咲き終わったので、今ある実を収穫したら終了かな。

1337423883

なかなか育たなかったズッキーニも植えた。

1337423885

スナップエンドウは2kgくらいとれているのでちょっと茹でた。

1337423887

たしか種が300円くらいだったと思うので豆系の費用対効果は高いと思う。

ProductName やさい畑 2012年 06月号 [雑誌]

家の光協会 / 880円 ( 2012-05-02 )


ATNDのイベント参加状況をフィンガープリントにしてbayonでクラスタリング

ATNDはアテンションのデータとしても興味深いわけで、ATteNtion Dataとして使ってみたいなぁと常々かんがえていたわけですが。

静岡javaScript勉強会が丁度よさげなデータだったので、対象者の参加した他のイベントに参加(1)不参加(0)っていう10のビットをフィンガープリントとして bayonを使ってクラスタリングをしてみた。

import json
import requests
import time

event_id = 19418
event_url = "http://api.atnd.org/events/users/?event_id=%d&format=json" % event_id
r = requests.get(event_url)
ev = json.loads(r.text)

for u in ev['events'][0]['users']:
    nickname = u['nickname']
    user_url = "http://api.atnd.org/events/users/?user_id=%d&format=json" % u['user_id']
    r = requests.get(user_url)
    ev = json.loads(r.text)
    events = [str(e['event_id']) + "\t1" for e in ev['events']]
    print "%s\t%s" % (nickname, "\t".join(events))
    time.sleep(1)

これでTSVのファイルを吐くので、js.tsvとでもしてbayonで実行する。44人いるので6クラスにわけてみた。

$ bayon -n 6 js.tsv 
1   まあこ logicraft   y.yabe  tomof
2   Kaz_110 yukio.47    secondarykey    となか ando_ando_ando  harumakiyukko   keito5656
3   polidog でみ/DEMi k0sukey
4   tano4510    bontakun_R  aalt    wangzhi planpot オーイシ
5   Hotti   kawario you39   ahonuishino jamireon    motokix _wa_    toniokatanuki   Wataru \
 Yokoyama   deep    keiyuyama   haru_iida   fmmfm   enkue   dongame Shinichi Nabeta nckt \
    muchico Lasty
6   fujimaruJP  w1mvy   taka2geek   eibiisii    iori_ma

5群はその他をまとめた感じですね。1群はフロントエンド寄りの人達で、2群はサーバーまわりを好む人達ですね。3,4群は地理的な制約も受けてるのかなぁと思ってそれぞれの人達の参加したイベント眺めてみたんだけど別れ方がよくわからん。クラスタ数を小さくしてっても3群はなかなかどこにもマージされんしなぁ。ネガティブな特徴(不参加の状況が似ている)が出ているんだろうかねぇ。

Traktor Pro2でCould not find iTunes library

上記のエラーが出たときは、

えーなんだよ、まじかよーえーなんでー?

と絶望的な気分になりますが、単にiTunesのXMLが壊れているだけなので、落ち着いて対処しましょう。

iTunesフォルダのiTunes Music Library.xmlっていうファイルをおもむろに削除したらiTunesを起動して適当な曲のレーティングでもいじって一回終了すると新しいiTunes Music Library.xmlが出来てて(できるタイミングがよくわからんかったが、、)それをTraktorで読み直せば元通り。

ProductName Native Instruments TRAKTOR PRO 2

Native Instruments / 26820円 ( )


「決算書の暗号を解け!」は良書

生き方指南系で有名な勝間和代さんの本だが、本書は純粋に決算書の読み方に閑する本でしかも面白い。 本書を読み終わった時に、丁度自分の会社の決算短信が出てたのでニヤニヤしながら読んでしまった。

100円台で手に入る本なので買いだと思いますよ。

ProductName 決算書の暗号を解け! ダメ株を見破る投資のルール
勝間和代
武田ランダムハウスジャパン / ?円 ( 2007-10-25 )


科学論文の実験データもそうだけど、自分で数字をいじれる裁量の余地がある部分はある程度決まっていて、そこに無理のある解釈を入れると他が必ず歪みます。決算報告書なんかの会計も一緒だそうで、どこの数字をどういじるとどこに歪みが生じるかっていうことが丁寧に書かれていて、分析が好きな人にとっては本書を読むことで数字パズルという新たな玩具が手に入ります。

営業なんかから情報を仕入れていれば、自社の内情を知っていると思うので決算報告書が超楽しめるようになります。それだけでも読む価値アリですね。

尚、前提知識として簿記三級くらいは必要かもしれませんが。

  • 貸借対照表はあくまでも「会社が買った時にその資産がいくらだったのか」ということを主に示すもの
  • キャッシュフロー計算書は、期初の現金と期末の現金の差が何故生じたのかを説明してくれるもの
  • 本当に成長している会社は利益だけでなくキャッシュも伸びていて、効率良く資産を使っている
  • のれん代の償却期間で守備的か攻撃的か判断できる
  • 通常は売上高の伸びよりも、営業利益や経常利益の伸びのほうが大きくなる
  • 費用候補は貸借対照表の資産の部に計上される
  • 棚卸資産を増やせば売上原価は下がる
  • 社債を発行してたら財務諸表を細かくみたほうがいい
  • アナリストのレポートはそもそも買いへのバイアスがかかっている