VideoCaptureを試してみる。

VideoCaptureという、USBカメラとかの画像をキャプチャできるPython用ライブラリを試してみた。


うちにあるHDVカメラでやってみたのだが、
どうもDV変換しないといけないみたい。


HDVをそのまま扱うためには、mstapeのドライバに対応しないといけないようだ。
むー…書くか!?DVでガマンするか!?でもやっぱり画質が違うぞ。

Django勉強会 Disk 4

Django勉強会 Disk 4があるということで、
http://www.djangoproject.jp/etude/4/

id:Voluntasさまの日記に
「発表できるネタがあれば発表したい!」
とコメントした。


そしたら、即entryされていた(笑
さて、ネタを作るぞ。


そういや、サイボウズ・ラボは初訪問だ。
なんかおやつを持っていって置き去りにしていこう。

Python温泉を総括するッッッッ!!!

Python温泉のまとめ。

  • メガネを換えたくなった(「すげーメガネかけてるね?」ってよく言われようなメガネに)
  • 集中する時間って大事ね。週1みんなで集中する会とかをやりたい。
  • 欠食児童っぷりがバレてしまった…
  • Djangoはじっくり勉強していく。ある程度の規模のプロジェクトのソースコードと本体のソースコードを交互に読んでいこう。
  • 自分って結構パフォーマンス狂なんだと自覚した。
  • pyrexはちょっと気になる。試してみよう。
  • そして、AmazonはいまだにPythonクックブックを発送しない。かなり前から予約してたのになぁ。
  • 一個書きたいプログラムが新しくできてしまった。うーむ、どうしようか…

2日目。

Djangoのドキュメントを読みまくる。

複数カラムでのUNIQUE制約は、

class Model(models.Model):
  class Meta:
    unique_together = (("column1", "column2"),)

う〜ん、悩む。
以下のようなモデルがある場合、

class Parent(models.Model):
  name = models.CharField(maxlength=128)

class Child(models.Model):
  name = models.CharField(maxlength=128)
  parent = models.ForeignKey(Parent, related_name='children')

class GrandChild(models.Model):
  name = models.CharField(maxlength=128)
  parent = models.ForeignKey(Child, related_name='children')

class Mago(models.Model):
  name = models.CharField(maxlength=128)
  parent = models.ForeignKey(Child, related_name='magotachi')

以下のようなテンプレートで表示を行いたい。

・Parent.name
 ・children[0].name
  ・children.children[0].name
  ・children.children[1].name
・children.magotachi[0].name
・children.magotachi[1].name
・children.magotachi[2].name
 ・children[1].name
・children.magotachi[0].name
 ・children[2].name
  ・children.children[0].name

はて、どうするのがスマート&高速なんだろうか…


常山さんに、satchmoのコードが参考になるよ!と教えていただいた。
http://www.satchmoproject.com/trac/browser/satchmo/trunk/satchmo/product/models.py


階層を無限に持てるカテゴリのModelらしい。
get_all_childrenのあたりを参考にすればよさそうだ。
やはり、自前で辿ってリストを作るしかないようだ…
flattenの元ネタはここのようだ。


よくよく考えたら、ジェネレータが適するタイプの問題じゃないかな、これ。
ジェネレータで書いてみよう。


こんな感じで書いてみたけどようわからん。

class Parent(models.Model):
  name = models.CharField(maxlength=128)

class Child(models.Model):
  name = models.CharField(maxlength=128)
  parent = models.ForeignKey(Parent, related_name='children')
  def children_array(self):
    for c in self.children.all():
      yield c
  def magotachi_array(self):
    for m in self.magotachi.all():
      yield m

class GrandChild(models.Model):
  name = models.CharField(maxlength=128)
  parent = models.ForeignKey(Child, related_name='children')

class Mago(models.Model):
  name = models.CharField(maxlength=128)
  parent = models.ForeignKey(Child, related_name='magotachi')

複雑なレンダリングについて他にも例を見たければ, {% if %} や {% for %}, {% ifequal %} , {% ifchanged %} のソースを参照してください.ソースは django/template/defaulttags.py にあります.

ということで、defaulttags.pyを読もう。うん。


…と思いつつ、メシを食って帰って瞑想していたら、
djangoを使わなくてもいいんじゃね…という結論に達した。


スレッド式掲示板はdjangoでは書きづらい、という噂も聞いたし、
ORMapperはあんまり必要じゃない感じのアプリケーションだしね。
というわけで、

  • スケールするテンプレートエンジン

を探すことにしよう。
Admin画面だけ別でDjangoを素で使おう。


さかとくさんの記事を読む。

そしてまた瞑想に入る…

を読む。
うん、ClearSilverしかあるまいな!!


と思って周りのメンバーに聞いてみると、
ClearSilverTracで使われているテンプレートエンジンらしい。
ClearSilverMakoも文法がキモいらしいが…


とにかくスケールしたい、でも利便性も欲しい場合にはどちらがいいかねぇ…
C言語でも使えるClearSilverをいっぺんちゃんと追ってみるか。

1日目(随時更新)

小田急が遅れて、ロマンスカーに危うく乗り遅れそうになる。
危険危険。


ロマンスカーの中でftのプログラムを開始。
とりあえず、掲示板で閲覧するときにタグ等の情報を送るようにする。
ft.fileとft.dbの機能分担が微妙になってきた。あとでリファクタリング
explorerインスタンスインタプリタ持ちっぱなしになってしまう。


山喜旅館に到着。ぱちぱち。
http://www.ito-yamaki.co.jp/
地下の会議室でプログラム再開。


wxPython側は一応完成。大きなファイルの場合の取り扱い
(キャンセル付きプログレスバー)を実装しなければいけないけど、
とりあえずサーバサイドに着手。


サーバサイドはとりあえずDjango
ひさし振りにやると忘れている…


まず、

Model.objects.get(unique_column='key')

って感じで1件データを取得するんだけど、
データが無い場合に投げられる例外は、
Model.DoesNotExistらしい。以下のページにあった。


でも、僕が本当に欲しかったものは、

Model.objects.get_or_create(unique_column='key')

だった。
存在しない場合はDoesNotExistをトラップして新しいインスタンスを作っていたよ。
やべーやべー初心者やべー。
というか、人のソースを読むべきなような気がしてきた。


Mercurial、面白そうだけど、親切な本が出るの待ち。
http://www.dodgson.org/omo/t/?date=20070118


svn diff | wc -lをしようと思ったけど、
Windows環境でTortoiseSVNしか入れていないんだった。


'RelatedManager' object is not iterableとエラーが出た。
あきらめて寝ようかと思って部屋に帰る。
だが、ついデバッグ
ForeignKeyを逆方向に辿って得られるものは
RelatedManagerという全てのインスタンスを返すあくまでマネジャであって、
その一覧を取得するには.all()しないといけないようだ。

明日は〜明日は〜温泉〜 しかしッ…

今日Amazonから届いたプライベートなモノ。
(ちなみに、Amazonプライム会員です…)

四年生 (アフタヌーンKC)

四年生 (アフタヌーンKC)

ヤサシイワタシ(1) (アフタヌーンKC)

ヤサシイワタシ(1) (アフタヌーンKC)

ヤサシイワタシ(2)<完> (アフタヌーンKC)

ヤサシイワタシ(2)<完> (アフタヌーンKC)

いただきストリートDS

いただきストリートDS

有言実行三姉妹シュシュトリアン3 [DVD]

有言実行三姉妹シュシュトリアン3 [DVD]


明日はたぶんコレが届く。

On Lisp

On Lisp


あさってはたぶんコレが届く。

ゼルダの伝説 夢幻の砂時計

ゼルダの伝説 夢幻の砂時計


いたストは荒井&上野コンビがいいと今でも思うんだけどなあ…
と思いつつ、パッケージを開けてはならない!
だって明日はPython温泉初日だもん!


しかも、事前にやっておくべきことっていうのが
まだ出来ていないんだもん!!!…


と、とりあえずロマンスカーの指定席は購入したよ!