Turbogears(SQLObject)でSQLのトレース

DBICの場合はexport DBIC_TRACE=1でOKなんだけど、SQLObjectだと_connection.debugアトリビュートにTrueを突っ込むらしい。

Personってクラスがある場合

Person._connection.debug = True

これで実際に発行されるSQL文がトレースできる。

が、個々のクラスでこんなことするのは結構めんどくさいので、DBICみたいに環境変数で設定できないかと調べた。

seraphyの日記 - Pyhon2.5でSQLObjectを使ってみる

コネクションのURIにパラメータとして「Debug=True」と指定しているため、実行時にSQLObjectのトレース情報がコンソール画面に表示される。

URIにパラメータ渡すようにすればいいらしいので、環境変数がセットされているかどうかでURIにパラメータ渡すかどうか決めるように設定ファイルをいじればよいみたいだ。

TMTOWTDI

最新Pythonエクスプローラ眺めてたら、import thisって打つとpythonistaの心構えみたいなのが出てくることを知った。

>>> import this
The Zen of Python, by Tim Peters

Beautiful is better than ugly.
Explicit is better than implicit.

...

Namespaces are one honking great idea -- let's do more of those!

ほう。で、perlでも

perl --slogan

とかで

TMTOWTDI(There's More Than One Way To Do It.)

こういう風にスローガンが出ないもんかと探してみたけど、オプションにもモジュールにも見当たらなかった。

そういえば、最近言語の設計思想とかそんなのがなんとなく感じられるようになってきた。こんなのとか今読むと、タメになるなぁとか。もちろん去年のYAPCのトークも。

旬菜割烹なかだ

先月送別会で使った。

のれん

つくしもうまいね。

つくし

造りは、その週の初めに花膳いったから感動が薄かった。まぁ普通な感じ

盛り合わせ

ちらし寿司は桜つきで、風流だ

ちらしずし

帰りにちょっと寄っていくのにいい感じ。てか今度はぶらりと立ち寄る。

TurboGearsのモデルだけいじる

TurboGearsでなんか作ってて、とりあえずテスト用になんかデータをモデルに突っ込んでおきたい場合

tg-admin shell

で対話的にモデルを操作できるのが便利。あとはtg-admin toolsでcatwarkとか。

単純なモデルの場合はこれで十分だったりするんだけど、ちょっと複雑になるとスクリプトから操作したい。

コネクションの書き方が違うみたいなので、少し悩んだ挙句、

from turbogears import update_config
update_config(configfile="dev.cfg",modulename="myapp.config")
from myapp.model import *

とやるといいらしいことがわかった。普通にSQLObjectだと下のように書くようだ。

from sqlobject import *

connection_string = 'sqlite:///home/kzfm/myapp/devdata.sqlite'
connection = connectionForURI(connection_string)
sqlhub.processConnection = connection

これで、feedparserを使ってRSSをとってきてテストデータを作ってみた。

from turbogears import update_config
update_config(configfile="dev.cfg",modulename="pectin.config")

from pectin.model import *
import feedparser

rss_sites = ['/index.rss10', \
            'http://kzfm.vox.com/library/posts/atom.xml']

for rss in rss_sites:
   f = feedparser.parse(rss)
   newfeed = Feed(url=rss,link=f.feed.link, \
        title=f.feed.title,description=f.feed.subtitle)

   for e in f.entries:
       newentry = Entry(read=False, link=e.link, title=e.title, \
                        content=e.content[0].value ,feed=newfeed)

   hub.commit()

なんかeがエラーキャッチみたいだけどentryってことで。あと、feedparserはatomとかrssとか考えなくてもいいみたいで便利。

ちなみに、今はイントラで使う用にちょっとしたRSSリーダーを作ろうとしている。会社ではfeed on feeds使ってるんだけど、LDRに慣れてしまうと、ストレスが溜まりまくってどうしようもない。せめて、キー操作が欲しいのそれぐらいやれそうな簡易なやつを作ってみることにした。

ではじめて使ったRSSリーダーであるglucoseにちなんでペクチンという名前にしてみた。

ベタすぎ。

Rapid Web Applications With Turbogears:読んだ

結局買って読んだ。結論は

面白い、買って読め

って感じ。

ただし、comのほうではtypoが多いとか言われてたけど、確かにやたらとtypoが目立つ。

筆者の言い訳コメントがあったけど、どうかなぁ。

My only defense is that people clearly wanted a good enough book NOW, rather than a perfect book later.

特に、chapter4,5のあたりは、簡単にアプってみようヨ!っていう導入的に重要な部分だと思うが、Typo。しかもクラスが単数だったり複数だったりしてちょっと嫌。手動かすつもりだったら気をつけるべし。とはいえ、すぐに気付くようなミスなのであんま気にならないというか、むしろ楽しんでこなせたけど。

SQLObject,CherryPy,Kid,MochiKitそれぞれに割と詳しく書かれていて、読んでてわかりやすかった。特にMochiKitはページを結構割いていたような。けど1.4の説明なの。

あと、AppendixでSQLAlchemyにも触れてたけどGenshiには触れていない。

最初に書いたように、読んでて面白かったけど、なんか作りながらもう一回読むと更に面白いと思うので、適当なものを作る。多分イントラで使えるようなRSSReaderだと思うけど(今使ってるのが気に入らないから)。

[Google TechTalks] Opportunities For Pharmacogenomics and Personalized Medicine

PharmGKBのGoogle TechTalks、結構意欲的というか面白い。

Web ServiceAPIがあるので、うまく使うといいかも。

Obminimizeで構造立ち上げ

Open Babelが2.1にあがっていた。changelogを見てたら、MMベースの構造立ち上げが実装されていたが、どうも最近のことらしい。

というわけで、obminimizeというコマンドを使うと構造を立ち上げることができて、その後、mopacでちょこっと構造最適化をやってから、PyQuanteでエネルギー求めるとかいう事がLLでやれるようになるのでいい感じ。

WWW::MechanizeとWWW::Selenium

違いってなんだろかって思ってたんだけど。

use WWW::Mechanize

ただ一点注意で、Mech は賢いのですが JavaScript の動作はエミュレートしません。なので、Ajax 部分などクライアント側のテストには向いていません。

クライアント側の挙動のテストを行なうには、実際のブラウザのエンジンを使うのが一番でしょう。これは、Selenium というウェブアプリテストスイートがあります。

Selenium コアは JavaScript によるアプリですが、ドメインをまたげない制限を回避するソリューションとして、プロキシサーバーとして動作する Selenium RC という Java アプリも用意されています。そのプロキシサーバーに対しては各種プログラミング言語から直接テストをたたく API が用意されていますが、Perl 用も WWW::Selenium として CPAN にあります。

AjaxのテストはWWW::Seleniumでと。

TurboGearsだとSelenium4Gears ってのがあるらしい。

NuVJ欲しい

物欲の春です。

動画がyoutubeにあがってた

まじで欲しいナァ。

Azure

久々にSoma買った。ヴァイナル買うのは130番くらい以来ではなかろうか?(Azureは216番)

溶けて透きとおるような繰り返しと、気持ちのいい音圧。途中に入るノイジーなブレイクが高揚感を煽る。

9分近くあるけど、長さを感じさせない気持ちの良い繰り返し。Part1,part2ともによいが、Part1のほうが好み。

あとSoma Subscriptionが気になる。レーベル自体が好きなのでこっちはおとくかも。