catwalkの使い方がメインのスクリーンキャスト

TurboGearsのTrac にスクリーンキャストが幾つかあったので英語の勉強も兼ねて見てた。

TurboTunesTutorial.movでCatwalkの使い方が解説されてた。

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にパラメータ渡すかどうか決めるように設定ファイルをいじればよいみたいだ。

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にちなんでペクチンという名前にしてみた。

ベタすぎ。

Better Web Application Framework

英語強化年間ということで、GoogleのTechTalksを見るようにしているが、実際に見てみると面白いのが結構あるし、なによりスライドが読みやすくて、かなりよいかもな感じ。めぼしいものはローカルに落としてGoogle Video Playerで見てます。

で、Google TechTalksじゃないけど今日見たWebAppの話は面白かった。Rails,Zope,TG,Djangoの比較をしているのだけどわかりやすい。

Better Web Application Framework

ただしこのプレゼンいつ撮ったのかわからないんだけど、最後のスライドに関しては、現在のTurbogearsはauthもi18nも対応していると思うし、本も出てるのでそこそこいい位置にいるのではなかろうか?と思った。

あと、RoRはレガシーのシステム(特にプライマリーキーがなかったり、無駄に複合キーだったりとやたら奇抜なDB)とインテグレートしにくいよとかいってたけど、RoRでシステム構築する人達は、現実的にはそこらへんどうやって解決してるんでしょ?

病理組織画像のflickrみたいなもんをつくる

ふと、毒性評価のチームが「病理とかの画像にタグつけて管理したいなぁ」とのたまうので、

ほう、それはイントラflickrクローンみたいなものに落書き機能をつけてタグとコメントで管理できる洒落たツールが欲しいということか?

それいいじゃん!ということでいけそうか試してみた。

Making a Flickr Killer With TurboGearsを参考に喜久酔ひっかけながらもそもそと手を動かすこと30分。

おーCRUDくらいまでできた。

tflickr

SQLiteのText型ってBLOB突っ込めんの知らんかったが、実際はバイナリはデータベースに突っ込むよりはファイル管理のほうがいいのかな。タグ付けは自分で書いてもいいし、Tastyにお任せしてもいい気がする。

落書き機能(病理画像に着目ポイントを書き込む機能)はAjaxかAS3でつくる。

gimpとかphotoshopのレイヤーみたいに重ねる感じにすればいいと思うんだけど。そのうち、まとまった時間をとってやる。

TurboGearsでpdfを出力する

Produce PDF Pages with TurboGears, Cheetah, and ReportLab を見つけたので早速やってみた。

ReportLabはpdfを生成するライブラリらしい。ドキュメント読むと面白そうなんだけど、グラフ作成とかの部分はちょっと使いにくそうかナァ。むしろmatplotlibRpyにグラフ作成は任せて、できた画像を入れ込むほうが使いやすいかな。

それから、tg-admin infoして気付いたけど、CheetahはTGの標準モジュールだった。

プレゼン資料作成用にPythonPointというXMLからpdfのスライドを作成するライブラリも一緒に入ってた。XMLじゃなくてYAMLから生成できるともっと便利に使えそう。Sporkのテキストファイルをpdfにできるようにしてもいいかもしれん。

flex2でswfなど作ってみたり

最近、イントラで使っているシステムのUIに関して考えさせられるような事が立て続けに起きて、創薬系のシステムはAjaxとかのwebだけの枠組み以上のものがやっぱ必要なのかナァと感じている。

で、いつものようにリーダーチェックしてたら、

Creating a Flex application using the TurboGears frameworkなんつーものをみっけた。

flex2とturbogearsで簡単な住所録を作るっていうチュートリアルで、JSON使ったCRUDの過程を追えておもしろい。こんな感じでCatalystとFlexを連携させても面白いんじゃなかろうかと思ったし、これだとflashなので表現に幅がでて色々できて楽しいかもんと。

早速適当に流し読みして放ってあった、WEB+DB PRESS Vol.37のflex2の章なんかを見ながらflex2の勉強などはじめてみた。

ProductName WEB+DB PRESS Vol.37

技術評論社 / ?円 ( 2007-02-23 )


以下のリンクも参考にした。

週末集中してなんか作ってみよう。

kidってなかなかいいかも

TurboGearsのテンプレートエンジンのKidって使いやすい感じだなぁ思ったので、週末何でかなーってジムの自転車漕ぎながら考えてた。

TurboGears: Kid Template System — nagosui.org

多くのテンプレートシステムでは、タグをミスマッチな状態にしておくことが可能になっています。KidにおいてはあなたのテンプレートはvalidなXMLになります。つまりあなたは、ミスマッチなタグが存在しないことを保証されているのです。

CatalystのTTなんかはブロックでくみ上げるイメージになるのでブロック内でif-elseとかごちゃごちゃやりだすと手が付けられなくなってくるけど、KidはXMLだからDOMTreeみたいな思考パターンになって処理のイメージがしやすいのかナァってのが今の結論。つまり、TTは面構造(PROCESSとか)なのに対し、Kidは木構造(defとか)だと。

Kidも使い込んでいくと、嫌なとことか目についてくるだろうからまた変わるかもしれんけど。

SQLObjectとSQLAlchemyの違い

相変わらず、暇を見つけてはTurboGearsで。メジャーなO/Rマッパーが二つあるみたいなのでちょっと調べた。

turbogears-jaにも資料があった。

SQLObject = CDBI
SQLAlchemy = DBIC

というイメージでよいのかな。てかCDBIがアクティブレコードパターンだっていう記述を見た事がないので、さらに追っかけてみるとActiveRecord パターンに近い実装らしい。じゃぁActiveRecordパターンに足りない部分はなんなの?が知りたくなったので更に調べてみた。

うーん微妙に掴めきれてない気が。

ちゃんと読んでみようか。

CBlogをいじってます

TurboGearsのシンプルブログツールとして紹介されているCBlogをいれてみた。

このツールは、Development modeとProduction modeに分かれているのだけど、Production modeでは何故か動かなかった。ていうかエラーもでなかったのでちょっと原因不明。

Development modeで起動すると、こんな感じのblogっぽいテンプレートが出てきて、あとはwebからユーザーの設定とかすればすぐに使えそうだ。roleとか設定できるので多人数での書き込みも考慮されているっぽい。

  • いいとこ
  • カテゴリの部分がタグなんで階層型の区分けでないのが楽
  • マルチユーザー対応なので職ブロ(職場ブログ)とか便利かも
  • いまいちなとこ
  • マルチユーザー対応なとこ。blosxom代替品としての僕のニーズ的にはloginとか必要ないかも
  • ちょっとjavascriptのポップアップ多すぎ
  • 下書き保存機能がない。僕は書きぱなしの駄文が多いのでこれはつらい
  • devモードだとlocalhostでアクセスしないとあかん。

という感触だけど、色々と勉強になりそうなのでコード読んでみる。