15042007 javascript mochikit
MochiKitのSignalとかイテレータの使い方がイマイチわからんなぁと思ってたがMochiKitのテストスクリプトを読めばいいことに気がついた。
あとinterpreterを使いまくってるのと、Firebugの便利さを理解した。
15042007 javascript mochikit
MochiKitのSignalとかイテレータの使い方がイマイチわからんなぁと思ってたがMochiKitのテストスクリプトを読めばいいことに気がついた。
あとinterpreterを使いまくってるのと、Firebugの便利さを理解した。
13042007 Python turbogears
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にパラメータ渡すかどうか決めるように設定ファイルをいじればよいみたいだ。
最新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のトークも。
10042007 Python 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にちなんでペクチンという名前にしてみた。
ベタすぎ。
09042007 Python
結局買って読んだ。結論は
面白い、買って読め
って感じ。
Rapid Web Applications with TurboGears: Using Python to Create Ajax-Powered Sites (Prentice Hall Open Source Software Development Series)ただし、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だと思うけど(今使ってるのが気に入らないから)。
08042007 bioinformatics
PharmGKBのGoogle TechTalks、結構意欲的というか面白い。
Web ServiceAPIがあるので、うまく使うといいかも。
08042007 chemoinformatics
Open Babelが2.1にあがっていた。changelogを見てたら、MMベースの構造立ち上げが実装されていたが、どうも最近のことらしい。
というわけで、obminimizeというコマンドを使うと構造を立ち上げることができて、その後、mopacでちょこっと構造最適化をやってから、PyQuanteでエネルギー求めるとかいう事がLLでやれるようになるのでいい感じ。
08042007 perl
違いってなんだろかって思ってたんだけど。
ただ一点注意で、Mech は賢いのですが JavaScript の動作はエミュレートしません。なので、Ajax 部分などクライアント側のテストには向いていません。クライアント側の挙動のテストを行なうには、実際のブラウザのエンジンを使うのが一番でしょう。これは、Selenium というウェブアプリテストスイートがあります。
Selenium コアは JavaScript によるアプリですが、ドメインをまたげない制限を回避するソリューションとして、プロキシサーバーとして動作する Selenium RC という Java アプリも用意されています。そのプロキシサーバーに対しては各種プログラミング言語から直接テストをたたく API が用意されていますが、Perl 用も WWW::Selenium として CPAN にあります。
AjaxのテストはWWW::Seleniumでと。
TurboGearsだとSelenium4Gears ってのがあるらしい。