docoptでCLI用のオプションを記述するのが良い感じ

python-livereloadのソース読んでたらdocoptというモジュールを使っていて、「optparseでもargparseでもないのか、なんだこれ?」と調べてみた。

optparse,argparseのようにオプションを登録してhelp,usageをつくるのではなく、helpの文字列からオプションをparseして組み立てるものだそうだ。

Command-line interface description language(CLI記述言語)と銘打っているので、python限定というわけではなく、Ruby,CoffeeScript,PHPなんかにも実装があるようだ。

cmd = """Python LiveReload

Usage:
    livereload [-p <port>|--port=<port>] [-b|--browser] [<directory>]

Options:
    -h --help                       show this screen
    -p <port> --port=<port>         specify a server port, default is 35729
    -b --browser                    open browser when start server
"""

def main():
    args = docopt(cmd)
    port = args.get('--port')
    root = args.get('<directory>')
    autoraise = args.get('--browser')

使い方は簡単で、ヘルプの文字列書いたらdocoptに食わせるだけ。どの言語でも同じようにヘルプを書けるので嬉しいかも。積極的につかっていこうっと。

日本語の分かりやすい説明もあった。

D3をはじめようを快適に写経するためにlivereloadを使って更新時にブラウザをリロードする

日本語の入門書はD3をはじめようがあるけど、ほんのさわりだけなので、日本語の簡単なチュートリアルが読みたいというヒト以外には積極的に読む必要性を感じないかな。ただ、あのイディオム(selectAll().data().enter()ってやつ)とメソッドチェインに慣れてないのだったら読んだほうがいいのかなぁ。日本語のほうがわかりやすいしなぁ。

ちゃんと読むつもりならInteractive Data Visualization for the Webのほうが良いと思う(まだ書評かいてないけど)。

ProductName Interactive Data Visualization for the Web
Scott Murray
Oreilly & Associates Inc / 2997円 ( 2013-04-02 )


javascriptを書き写すだけなのはつまらなかったのでcoffeescriptで書いたのと、coffee --watchだとコンパイル時にブラウザリロードしないのでlivereloadを使った。

Guardfileはこんな感じ。更新されたファイル名をfuncに渡せないのでハードコードしている。

#!/usr/bin/env python

from livereload.task import Task
import logging

def coffee():
    from subprocess import Popen, PIPE
    argv = ["/Users/kzfm/.nvm/v0.8.10/bin/coffee", "-c", "-m", "js/mean.coffee"]
    p = Popen(argv, stdin=PIPE, stdout=PIPE, stderr=PIPE)
    stdout, stderr = p.communicate()
    if stderr:
        logging.error(stderr)

Task.add('js/mean.coffee', coffee)

あとは編集してセーブすると自動コンパイルして、ブラウザもリロードしてくれる。

livereload_coffee

izooで爬虫類を抱っこしまくってきた

子供の春休みと我々のお疲れ会を兼ねて東伊豆に泊まりにいってきた。

ついて早々、磯にいそいそと出かけて行ってヤドカリ捕りをしていた。

1364712736 1364712734

夕食、舟盛りっぽいもの

1364712738

鰆と金目鯛の煮付け

1364712739 1364712741

八寸

1364712742 1364712744

温泉卵とかと、金目鯛の味噌漬けを焼いたもの

1364712745 1364712747

翌日はIZooへ。体験型と銘打っているだけあって、いろいろすごかった。

1364712750

まずはパイソン、右はカエル。ほぼ全て爬虫類です。

1364712752 1364712753

昔流行ったエリマキトカゲだが、抱っこできます。右が娘が抱えているエリマキトカゲ。

1364712755 1364712757

蛇とかサソリとか色々いた。

1364712758 1364712760

カメも触りまくり、トカゲも抱っこできる

1364712761 1364712763

カメに餌やりもできる。

1364712765

爬虫類好きにはたまらない施設だな。

次の静岡Developers勉強会は入門機械学習の読書会です

前回のHTML5から本が決まらず1年以上のブランクがありましたが、入門機械学習を読んでいくことになりました。

1364714609

ひと通り読んだところ、こんな感じの本なので、機械学習に興味があるヒトには面白いかなと。

というわけで参加をお待ちしています。

Cscope

この間の三島Haskellで@karky7にcscopeを教えてもらったので、朝からいじっていたのだけどetagsとの違いがよく分からなかった。規模がでかいとこっちのほうがいいのだろうけど、.emacsにいちいち書かないといけないのが面倒くさそうだなと思ったが、virtualenvで作った仮想環境のlibを登録してしまえばいいのかなぁ。

pydocかpypiで気軽にソースコードが見られるようになっていればなぁと思う

HaskellのHackageだと関数ごとにソースコードへのリンクがついていて便利。

Pythonで似たことやりたい時には、(pypi上ではソースコードを読めないので)、pydoc -pでブラウザからアクセスすればいいと思うのだけど

  • htmlがケバい
  • トップにもとのファイルの参照があるだけで個別のメソッドのコードを気軽に参照出来ない
  • しかもfile://のリンクはchromeでは効かない(解決方法)し、サーバーだとアクセスできなくて面倒くさい

という状況なのでgit cloneしたコードをtmpディレクトリに置いてEmacsでetags付けて参照しするのが僕の最近のデフォなのだけど、さすがに効率悪いよなぁと思っているので改善したい。

なんかいい方法はないものか。

型システム入門がきた

頑張って読んでいこうかと。

1364542311

ProductName 型システム入門 −プログラミング言語と型の理論−
Benjamin C. Pierce
オーム社 / 7140円 ( 2013-03-26 )


因果とは脳の所作

学生向けの脳の講義を本にまとめたもの。

因果とは脳の錯覚

ProductName 単純な脳、複雑な「私」
池谷裕二
朝日出版社 / 1785円 ( 2009-05-08 )


  • 基底核が直感を扱う
  • パターンコンプリーションの謎
  • 匂いは視床を経由せず直接大脳皮質にとどく
  • 自由意志は存在よりも知覚

入門機械学習

入門機械学習は機械学習を使いたいヒトのための入門書であり、作りたいヒトのための本ではありませんので統計の本にあるような数式は全然出てきません。(これはこれでベイズの定理とか正則化とか説明できているのか?と疑問に思うところはあるのだが。)

お手軽にどういう問題の時にどういう手法を選択すればいいか?がわかるような内容になっているので、これはこれでありなのではなかろうかと。

とりあえず使ってみて機械学習がどんな感じのものなのかという感触をつかめばよいと思う。

事例としては

  • 電子メールのスパム判定
  • アマゾンのオススメみたいなの
  • ウェブのアクセス数を予測する
  • twitterのソーシャルグラフを分析する

といった感じで万人にオススメできるような内容になっています。

ProductName 入門 機械学習
Drew Conway
オライリージャパン / 3360円 ( 2012-12-22 )


ちょっと残念なのは教師なし学習(クラスタリング)の手法(PCAとかMDS)の説明が超適当で、クラスタリングの素晴らしさについてほとんど触れられていないところと、SVMがおまけ程度でSVMのお手軽さがわからないのと、みんな大好きRandom forestに触れられていないあたりかなぁ。

それから本書のコードはRで書かれているのだけど、本書の内容の範囲だったらRなんて代入が<-になったjavascriptのようなものなので、ちょっとjavascriptを書いたことのあるプログラマーであれば、少ない労力で機会学習の基礎が学べて費用対効果的にかなりお得じゃないかと思う。

あとはggplot2のグラフ描画の快適さは癖になる。

本書を読んで

  • より使いヒトはCRANのライブラリ漁りをすればいいし
  • 作ってみたくなったヒトは王道のPRMLの方向に進んでいけばいい

かなと思う。

おまけ

ソーシャルグラフの分析にGephiをつかっていたのだけどCYtoscapeとの違いがちょっと気になったのであとで調べてみるかもしれない。

git pullしたらSupervisor+Gunicornをrestartする設定

gitでpullしたらgunicorn restartできないかなと思って調べた。

supervisorctl status gunicorn | sed "s/.*[pid ]\([0-9]\+\)\,.*/\1/" | xargs kill -HUP

でrestartできるので、これを.git/hooks/post-mergeに書いておけばいいうようだ。

(あとでやる)