2006-01-01から1年間の記事一覧

狙って撃て

【続報】東証が次世代開発ベンダーを富士通にした理由 http://itpro.nikkeibp.co.jp/article/NEWS/20061220/257456/ベンダーを選定するプロセスや根拠付けの話が書いてある。これだけの巨大プロジェクトだから念には念を入れてベンダーを選定するのは当然な…

TurboGears勉強会

来年の頭の実施を目標に、動き始めました。ってわたしは見てるだけー、なんですけど。興味がある人はTRIVIAL TECHNOLOGIESへどうぞ↓http://coreblog.org/ats/turgogears-workshop-questionaire

レスポンスヘッダを書き換える

とても普通に考えて、Content-Type を書き換えてあげればよいはず。 @expose(template="nkm.templates.entry") def entry(self): response.headers['Content-Type'] = "text/xml;charset=UTF-8" return dict(wdg=EntryFormDesc()) ところがこれではダメでし…

IEでresponseTextが読めない?

TurboGearsとMochiKitを使っています。 WidgetsのRemoteFormを使ってフォームを非同期に送信します(とても普通のこと)。 Deferred.addCalback()を使ってその結果を受け取ります(とても普通のこと)。 結果のresponseTextを取り出します(とても普通のこと)。 e…

メモ

フレームワークと呼ばれるプログラムは、逆に「仕事のしかた」を規定することが多い。Ruby on Railsなどは最たるもので、これこれのシステムを作るならば、これこれの作業をしてプログラムを書けばいいですよ、ということがかなり決まっている(アーキテクチ…

ソフトウェア治具

「ソフトウェア治具」という言葉をわたしが発明したわけではないのだけど、あえてこの言葉に定義を与えたいと思う。たぶん、他で使っているのとは違う意味になってしまうが、それはそれ。最近ではオープンソースのツール、ライブラリ、フレームワークといっ…

Semiotics for Beginners -初心者のための記号論-

http://www.wind.sannet.ne.jp/masa-t/index.htmlあとで読む。

合言葉アイデンティフィケーション

id:yach:20061101 に書いたことの発展です。 目的 個人情報を極力使わずに、イベント申し込みと受付をおこなう。 動機 イベントを実施するとき、申し込み手続きが必要になる。申し込みには個人情報を取得するが、個人情報管理、社内手続きのコストがかかり、…

パッケージ同士の依存関係を抽出する

セミナー資料作成でちょっと必要になったので、調べてみた。いや、きっと世の中にはそういうツールがいっぱいありそうな気がしたんだけど、簡単にできそうなのでやってみた。Hibernateのソースから、Hibernateのパッケージ(だけ)のあいだの依存関係を、impor…

テンプレートの動的な選択

@expose() def foo(self): ... if s==1: template = '.templates.success' else: template = '.templates.failure' return dict(tg_template=template,....) @expose(template="templates.ok") def foo(self): if (not s): return(tg_template="templates.no…

TurboEntity

http://turboentity.ematia.de/ "I suggest you to take TurboEntity a try. TurboEntity is build upon SA and provide SO's simplicity. It's pretty cool to save lots of coding effort of plain SA."

秋イベントの申し込み

オブジェクト倶楽部秋のイベントが、11/17(金)の夜にあります。実はもう申し込みを締め切ってしまったのですが、明日2日(木)の正午から、追加で10名だけ追加申し込みを受け付けることになりました。今回、100人弱しか入れない場所しか用意できず、とても残念…

みんPy写経会

昨日第1回がありました。参加者は5名。 http://qwik.jp/minpyshakyo/5.htmlPython初心者も多くて、なかなかいい感じです。本自体が、「Python入門」のみならず「プログラミング入門」に近いのも、幸いしてるかな。第2回以降からの参加も歓迎です。次回は10/…

モデルの外部利用

MLより http://trac.turbogears.org/turbogears/wiki/UsingModelsOutsideTurboGearsmodel.pyに書いてあるモデルをTurboGears以外から使うには、以下のようなスクリプトを書く。 import turbogears turbogears.update_config(configfile="dev.cfg", modulenam…

アーキテクチャと開発プロセス

だいぶ前に書いたのを発掘したので、メモとして残しておきます。アーキテクチャの定義にはいろいろあるが、だいたいにおいて「できあがった姿」を云々するものである、という点においては共通していると思う。いっぽう、開発プロセスという言葉だっていろん…

テストファーストがうまくいかないとき

個人的な問題かもしれないが、TDDで作っているときに違和感を感じることがある。作りたいもののイメージが最初から明確な場合は、テストをどんどん書いてどんどん実装してゴールに着実に近づいていける。これは問題ない。なにかちょっとしたアイデアがあって…

easy_installのオプション(削除)

Or maybe you can use $ easy_install -m TurboGears to remove old version, and use $ easy_install -U TurboGears to force install new version

Python DevCamp 2006に行ってきました

というわけで3日間Python漬けになってきました。わりと黙々とプログラミングしている時間が多かったです。もっと他の人としゃべればよかったかも。 Webアプリスプリント Webチャットは、いちおう非同期で(ポーリングせずに)動くようになったものの、再接続し…

TurboGearsで出力をストリームする

...というわけで、チャットならば「やっぱリアルタイムだよね。ポーリングしたくないし」、サーバーとクライアントのコネクションをはりっぱにする方法を前もって見つけておこうと思って、調べていました。結論を言うととても簡単で、1. CherryPyの stream_r…

Python DevCamp 2006

明日から富士でおこなわれるPython DevCamp 2006に行ってきます。泊りがけでコーディング(+ドキュメント)ざんまいということで、とても楽しみ。http://nagosui.org/Nagosui/Misc/temporary-items/events/devcamp2006sここで、いくつかトラックと言うかコー…

変更の周波数

SYNOPSIS ソフトウェアの変更は、そのソフトウェアに関わる人間の活動によって発生する。人間の活動には周期があり、その周期によって発生する変更の内容も変わってくる。変更は種類に応じて周波数を持つことになるので、その周波数をソフトウェアの設計で考…

Apache+TurboGears

MLからの引用。 I would like to run my TG application behind Apache httpd. In order to do this I'm trying to use the following rewrite rule: RewriteRule ^/myapp(.*) http://127.0.0.1:8080$1 [P] In your dev.cfg or prod.cfg, put: server.webpat…

組み合わせのバリデーション

formencode/compound.py に、AnyとAllというバリデータークラスが定義されています。これを使うと、複数のバリデーションの組み合わせが実現できる、みたいです。ちゃんと確認してないけど。http://formencode.org/module-formencode.compound.html >>> from…

FancyValidatorと空の扱い

これらのクラスはすべてFancyValidatorクラスを継承しています。これは formencode/api.py にあるクラスで、基本的なバリデーション機能を提供してます。FancyValidatorおよびそのサブクラスは、初期化時に引数を与えるとバリデーションの挙動(主に値が空の…

TurboGears Widgetsのバリデーションについて

Widgetには、バリデーションが設定できます。こんな感じ。 class EditUserWidgets(widgets.WidgetsList): user_name = widgets.TextField(name="user_name", label=u"ログイン名", validator=validators.NotEmpty()) display_name = widgets.TextField(name=…

TurboGears1.0b / 便利なエラーページ

TurboGearsがついに1.0ベータになりました。Preview扱いだったのが、本体のほうで1.0ベータが配布されています。http://www.turbogears.org/で、1.0ベータとはなんの関係もないのだけど、MLで発見して「おおー!」と感動したのでメモ。app.cfgdev.cfg に tg.…

**表記は便利だ

さて、この仕組みはどうやって実現されているかというと、turbogears/widgets/forms.py の CompoundInputWidget.params_for(self, item, **params)で実装されている。このメソッド自体はTableFormのテンプレートから呼び出される。こんな感じになっている(抜…

WidgetsのTableFormと、「**」表記について

WidgetsのTableFormは、複数のWidgetを詰め込んでフォームにできる。詰め込むのはもちろんINPUT要素になるようなWidgetで、たとえば以下のように書ける。(書いてる本からの抜粋) from turbogears import widgets class EditUserWidgets(widgets.WidgetsList)…

TurboGears0.9a8リリース

はやっ。バグフィックスだけみたいです。あとKidのバージョンアップ。http://www.turbogears.org/preview/about/changelog.html

日付のパース

time.strptime(string, format)を使う。 http://www.python.jp/doc/release/lib/module-time.htmlstrftimeはdatetimeモジュールの各クラスにあるのだけど、strptimeはtimeモジュールにしかないので注意。 日付のパースは、こんな感じが楽かしら。 y,m,d,_,_,…