blogNetworkxをつかってグラフを描くWikipediaのカテゴリ間のネットワークを見てみたくて、Networkxというpythonのライブラリをつかってグラフを描きました。風俗アフリカ系アメリカ人の文化というカテゴリに登録されています。これらのカテゴリがそれぞれ所属するカテゴリをさらに辿ってそれらの関係を視覚化すると下の図のようになります。(この図では3階層上のカテゴリまで)日本語をグラフに描画するのに苦労しました。描ければよいということで適当なパッチを作って対応しています。»Matplotlibで日本語フォントを使うgistを使ってみたかったので、Matplotlibで日本語フォントを使うサンプルを上げます。買ったりしていろいろやっていて気づいたこと。pythonのnltkをimportした後、”ム”(\xe3\x83\xa0)をstrip()すると\xa0が取り除かれてしまう。通常は\xe3\x83\xa0のままのはず。Parserで書き始めたものの、拡張されたnamespaceを操作できないことがわかり、ElementTreeをつかうことにした。できるはずだと思っていたので時間を無駄にした。ドキュメントを読みましょう。いう位置情報APIを提供するクラウドサービスにふれた。SimpleGeoにはLayerという位置情報データを貯めておくストレージがあって、1つだけなら無料で作って動かすことができる。この無料プランの場合、APIの呼び出しは月100万回まで。有料プランは$399〜$9999まであってAmazonS3にバックアップができる。いくつか無償のLayerが提供されている。天気や震源地のLayerや米国政府が提供している保養地のLayerとかもある。これらを自分のLayerと組み合わせたりして、マッシュアップアプリが作れる。以下アカウントをつくってPythonで使うAPIのチュートリアルをやってみた。GoogleAppEnginefixtureをGoogleAppEngineのDataStoreテストで使う。SiteDataSetsをjson化するのにfixture.dataset.converterでdataset_to_jsonが提供されていたりもする。date_created(auto_now_add=True)のようなフィールドはDataSetsで前もって値を指定できないので、ここでjson化したデータを、実際(date_createdの付いた)のjsonのレスポンスと比較しても同じにはならない。data.DataSetクラスはなんらかの格納媒体(以下ORMapper)例えばDataMapperやActiveRecordパターンで実装されたオブジェクトによってロードされる。Fixtureは正しいオブジェクトを使って、どのようにデータをロードするかを知っている環境だ。内部的にはDataSetの行と列は単純にORMapperに渡されて、ORMapperがデータを保存する。Fixture.Fixtureクラスは多くの異なるタイプのデータベースやストレージメディアに対し、どのように接続するかを知っているサードパーティーのライブラリにフックすることで、それらをサポートするようデザインされている。後のほうに独自のFixtureを作るセクションがある。データの格納方法を既にそなえたアプリケーションのためにデザインされている。そのインターフェースにフックしているに過ぎない。参考にデータセットとテストコードを書いた。いうpythonモジュールは、テストに関するDBの面倒をみてくれる様子。setupをリッチに一元管理できるという感覚で捉えています。errorなしに簡単に削除したいIDではなく意味のある名前で接続された行を参照したいauto-incrementを気にしたくないバグを検証するためにDBの実際のデータにSQLを発行し、環境を再構築したいファイルについてファイルシステムに依存せずテストしたい意訳するとこんなとき便利らしい。dataDBアプリをテストする方法はいくつかある。DBのレイヤーそのもののテストはせずに、モックオブジェクトをつくって完全に個々のコンポーネントのユニットテストに集中するとか、または単純にテストを走らせる前にサンプルデータをロードする手もある。接続のおかげで、後者は思ったより効果的。いいけどでもこれは2つの大きな欠点がある。外部キーの連鎖に配慮したり、手で管理したりしなければならない。その後にデータの値を参照するときに、値をコピペするか、たくさんの変数をたらい回しにしなければならない。moduleはこれを、二つの独立したコンポーネントにそのプロセスを分けることで単純化している。DataSetサンプルデータのセットを定義Fixtureデータのロードの仕方を知ってる(意訳終わり)個人的に使いたい状況は、例えばUserとEmailの2つのテーブルがあるとする。bob@bob.netもEmailから消したい。ORMapperのセッティングを間違えると、これがメールアドレスを削除するとユーザが削除されたりして、とても危険(実際にあった)なのでこういう基本的なところは日々のテストで確認したい。