03042012 life
幸せそうなキャラクターデザインするようなひとの思考はどうなっているのかな?と思って読んでみた。
基本的にポジティブ。
ここらへんのシリーズを薦めていたが、面白いんだろうか?
今度ブックオフにでも探索に行ってみるか。
03042012 life
幸せそうなキャラクターデザインするようなひとの思考はどうなっているのかな?と思って読んでみた。
基本的にポジティブ。
ここらへんのシリーズを薦めていたが、面白いんだろうか?
今度ブックオフにでも探索に行ってみるか。
02042012 Python
昨日、近所の本屋に行ったら追いてあったので、衝動買いしてそのまま読み始めて、今日仕事から帰ってきて少しよんだら読み終わったので、400ページ超えの厚さの割にはさくさく読める。
広く浅めのエキスパートPythonプログラミングかなぁと思っていたけど、カバーしている範囲が結構違っていて、本書はチーム開発のやり方with Pythonっていう感じかな
virtualenvを使った仮想環境の構築とMercurialでのバージョン管理といった基本からはじまって、 ITS(Trac)のインストールと運用のコツ、Sphinxを使ったドキュメント基盤の整備とかJenkinsを利用した継続的インテグレーションの話がPart1,2のチーム開発のサイクルで書かれている。書籍としてまとまっていると手っ取り早く把握できていいですね。僕はココらへんをブログを漁ったりして仕入れたので若干苦労した。
さて、僕が興味を持ったのがPart3のサービス公開のところで、Fabricの使い方とかgunicorn,nginxの使い方、GAE周りの情報だったので非常に参考になった。
ちなみにuWSGIも気になってるんだけどその話題はなかったと思う。いまだとどっちを使うのがいいんだろうか。 apache+mod_wsgiで動かしているこのブログもnginxに移行したい。
あとpip freeze便利。これでインストールしたモジュールをテキストファイルにリスト化しておいて、
$ pip install -r list.txt
ってやれば必要なモジュールを入れられるのでvirtualenvと相性がいいですね。
というわけで最近のFlask開発で入れてるモジュールをリスト化してみた。
Flask==0.8 Flask-DebugToolbar==0.6.2 Flask-SQLAlchemy==0.15 Flask-Script==0.3.3 Jinja2==2.6 SQLAlchemy==0.7.6 Werkzeug==0.8.3 argparse==1.2.1 blinker==1.2 pyjade==1.0.1 wsgiref==0.1.2
pyjadeはいいですね。
いままで0.6.1を使っていたのだけど、バージョンが上がってJade互換になったそうなので週末を使って自分のブログシステムに対応させていた。
テンプレート周りの設定が色々変わっていてエラー吐きまくったんだけど、出来上がったテンプレートはJinjaっぽさ({{ }})が排除されていい感じに洗練されてきている。
JadeがヨサゲなのはBrunchと一緒に開発すればサーバーサイド(Flask)とクライアントサイド(backbone.js)で同じテンプレート言語を使えるっていうのもありそう。そういうwebアプリを作ってみたいと思っているが。
それから、1.0はutf-8のテキストを渡すとエラーになるバグがあったのでgithubのissueに登録したらすぐに対応してもらえて1.01になったので、サーバーのpyjadeのバージョンを上げて動作を確認してデプロイして、酒を飲みながらこのエントリを書いている。ソーシャルコーディングってサイコーですね。製薬系みたいな閉鎖系では味わえないスピード感がある。
ダブルクォーテーションとか中括弧が省略できるようになっている
0.6.1だと
autoescape(false)= entry.content
ってやればJinjaのautoescapeが使えたんだけど1.0ではautoescapeタグになってしまう。
.contents= entry.content|safe
ってやってフィルタをかますようにした。
31032012 life
31032012 家庭菜園
雨が降って畑にいけない。大根とか人参の発芽状況をチェックしたかったのに。
寝室の窓際で育てているズッキーニの苗。

オクラとか、ゴーヤもそろそろ種まきしないとなぁ。
バグフィックスしたり基底関数まわりを追加してバージョンをちょっとあげた。
一番大きな変更はデフォルトでrungmsを使わないようにしたことで 直接ddikickを叩くことにしたことか。それでgamessのパスをどうしようかなぁと。
とりあえずコンストラクタで直接指定してない場合は
それとは別にrungmsのpathを探したりもしている(僕の場合はrungmsを/usr/local/binに置いている)のでちょっとくどいやり方になってしまった。
それから、コンストラクタにオプションを渡せるようにしたんだけど、これだと、gamessのインプットいじるのと変わらないので、もう少しスマートな指定方法も用意したほうがいいかなぁと思った。
水分子を基底関数を変えながらエネルギーを計算する例。このくらいだったら対話環境でサクッとうごく。
>>> import pybel >>> from pygamess import Gamess >>> g = Gamess() >>> mol = pybel.readstring('smi', 'O') >>> mol.make3D() >>> g.run(mol).energy -74.96450135 >>> g.run_type('optimize') >>> g.run(mol).energy -74.9659012146 >>> g.basis_set('3-21G') >>> g.run(mol).energy -75.585959758 >>> g.basis_set('6-31G') >>> g.run(mol).energy -75.9853591564 >>> g.basis_set('6-311G') >>> g.run(mol).energy -76.0109546389 >>> g.basis_set('6-31G*') >>> g.run(mol).energy -76.0107465155 >>> g.basis_set('6-31G**') >>> g.run(mol).energy -76.0236150193
最近ちょっと困っているのが、構造最適化で収束しないのをどうやって収束させるかという。6-31G*くらいでmopacみたいなノリで計算できるようにしたい。
openbabelのコンバーターがバグってる。
>>> import pybel >>> from pygamess import Gamess >>> g = Gamess() >>> mol = pybel.readstring('smi','C') >>> mol.make3D() >>> nmol = g.run(mol) >>> nmol.OBMol.GetTotalSpinMultiplicity() 1882919584
30032012 drum
CAMO & KROOKEDはちょっとイケイケすぎるというか疾走感が強すぎて、聴き疲れしてしまうという理由から超好きというわけではないのだけど、remixは期待度大。
元ネタのほうは買ってない