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

Porting to Python 3: Do’s and Don’ts

http://lucumr.pocoo.org/cogitations/2008/12/07/porting-to-python-3-dos-and-donts/ の翻訳です。原文のライセンスに従い、この翻訳は Creative Commons ライセンス (http://creativecommons.org/licenses/by-nc-sa/2.0/at/deed.ja) に従います。翻訳の誤…

Python Descriptors

いろいろ使えて面白そう。あとでしっかり勉強しよう。 How-To Guide for Descriptors Python Descriptors, Part 1 of 1 Python Descriptors, Part 2 of 2 posted by id:junya_hayashi

レコードの前後のデータを取得する

「pubdate」「modified_at」「id」の3つのフィールドをキーにソートして、特定のレコードの前後を取得する。 def get_neighbors(entry): query = Session.query(DiaryModel) # get neighbors peers = query.filter_by(pubdate=entry.pubdate)\ .order_by(Dia…

VietNam 出張 2

2ヶ月間も更新していないですね、ごめんなさい。 開発が進んでいないわけではなくて、むしろかなり進みました。社内的に、Pyxis を用いたBasic, Lite などの製品を開発しています。8月は丸々VietNam出張でした。数は少ないですが、VietNam 支社でも Pythonis…

Vietnam 出張

6月20日(金)〜6月29日(日)の日程で、Pyxisを用いた開発のトレーニングのために、Vietnam (支社)に出張してきました。Vietnam で印象的だったのは、バイク・バイク・バイク!道はバイクの洪水なうえ信号が少ないため、空気の読めない人は道を渡れません(笑)。…

mod_wsgi: WSGIDaemonProcess

mod_wsgi には embeded mode (Apache のプロセスと一心同体) とdaemon mode があるのですが、小さなWSGIスクリプト以外では daemon mode を使った方が応用が利きます。 そこで、mod_wsgi の daemon mode について調べてみました。まず、 mod_wsgi の daemon …

SQLAlchemy で任意の select 結果にモデルを結びつける

Mapping a Class against Arbitrary Selectsこんなこともできるんですね。統計情報(アクセスログとか)を扱いたい場合など、group_by の結果をモデルに結び付けて、Pyxis の管理画面で活用できそうです。posted by id:junya_hayashi

Composite patterns in Toscawidgets

Here are two composite patterns. One for Widget, and the other for Validator and Schema.posted by id:junya_hayashi

みんな意外と if __name__ == "__main__" を使っている

site-packages の下で __main__ とか検索すると面白い。皆さん、パッケージのデバッグ用コードをたくさん書いています。posted by id:junya_hayashi

Toscawidgets の Widget の作成例

Toscawidgets のサンプルが少なくて、ちょっと凝ったWidget を作るのに苦労したので共有しときます。 TwoStepSelectField 1番目のSingleSelectField で絞り込み、2番目のSingleSelectField でデータを選択するフィールドセットを実装しました。 twostep.py #…

Pylons におけるデバッグ方法

社内向けに書いたドキュメントですが、汎用的で役に立ちそうなので、少し手を入れて公開することにしました。 ログ出力 ファイルの先頭でログ出力用オブジェクトをを初期化し、以下のようにログを書き出してください。 import logging log = logging.getLogg…

Jinja2

Armin Ronacher が blog に Jinja2 のことを書いていました。http://lucumr.pocoo.org/cogitations/2008/04/13/jinja2-making-things-awesome/それによると、Jinja 2.x では、テンプレートの dynamic inheritance や ネームスペース付きのインクルード({% i…

Pythonの落とし穴

久しぶりに Python の基本的な構文でハマりました。 class ContactForm(BaseForm): class fields(WidgetsList): name = TextField( label_text=u"お名前",) name_kana = TextField( label_text=u"フリガナ",) email = TextField( label_text=u"メールアドレ…

Mako の Dynamic Inheritance

Mako では、下記のように動的に継承元のテンプレートを切り替えられます。 <%inherit file="${context.get('parentTemplate')}"/> 参考 Dynamic Inheritanceposted by id:junya_hayashi

Pyxis のデフォルトテンプレート

Pyxis のデフォルトテンプレートを mako から Jinja に浮気しようと画策中。Jinja は Django のテンプレ―トから派生したものなのですが、「Sandboxed」を謳っています。 The whole engine is completely sandboxed. A template designer won't be able to mo…

Pyxis のドキュメント生成

Pyxis のドキュメント生成では、EpyDoc と Sphinx を使っています。Pylons 0.9.6.1 のデフォルトでは Pudge を用いた仕組みが提供されているのですが、Pudge のメンテナンスが遅れている(古いバージョンのKidなどに依存している)ため、うまく動きません。S…

mod_wsgi で WSGI アプリケーションを動かす

Python 合宿で WSGI を多人数で気軽に動かす方法を聞かれたのですが、 mod_wsgi を使えばできると思って、やってみました。 mod_wsgi のインストール 手元のVM は Ubuntu なので、checkinstall でソースからインストールします。 $ sudo aptitude install ap…

SQLAlchemy のメモ

今、Controller でやっていることの一部を MapperExtension SessionExtension でやるとすっきりしそう。MapperExtension, SessionExtension では、insert や commit といった操作の前後にフックをかけられる。Posted by id:junya_hayashi

Pylons-ja

いつものメンバーで Python Developers Camp 2008 Winter に参加してきました。で、その勢いで Pylons-ja コミュニティを作成しました。Pylons や WSGI にご興味のある方、ぜひご参加ください。Posted by id:junya_hayashi

WSGIをネットワークに例える

先日、WSGIはネットワーク図に似ているよね、という話題で盛り上がりました。 そのときに描いた図がこれです。Cascadeミドルウェアがハブ、Routesがルーター、AuthKitがファイアウォールといった感じで対応しています。それからつい最近、Ian Bickingの過去…

独立した複数のPylons Application を一度に動かす方法

いまだにPaste のことをちゃんと理解していなかった。 paste.app_factory paste.composite_factory paste.filter_app_factory このあたりは、ちゃんと押さえておかなくてはならない。 [filter:main] use = egg:Pyxis#pyxiscomposite /blog = blog /wiki = wi…

Python の raw 文字列を用いて正規表現を書く

任意の文字列に \' をマッチさせようとして、混乱したので書きます。 例題 pattern: \' string: backslash \' single quote 以下、raw 文字列を使った場合と使わない場合で、それぞれ書き方の答え pattern も string も raw 文字列 >>> re.findall(r'\\\'', …

DBに格納したmakoテンプレートをレンダリングする(2)

結局、次のように実装しました。 # -*- coding: utf-8 -*- import inspect import pylons from pylons.templating import render from mako.template import Template from mako.lookup import TemplateLookup class MakoStringProcessor(object): """ rende…

paster setup-app --name=wiki development.ini

When your are using some kind of middleware (ex. "Paste#urlmap") in development.ini, maybe you would like to run a command like this... $ paster setup-app --name=wiki development.ini In default, this command would not behave as expected. (…

DBに格納したmakoテンプレートをレンダリングする

Pylons において、DBに格納したMakoテンプレートをレンダリングするために調べたことを公開します。 Buffet Pylons は、pylons.templating:Buffet を介してテンプレートをレンダリングしています。こんな感じ。 render() render() Pylons --------> Buffet -…

テックランチ

業務の合間をぬって、Pyxis テックランチをしました。 話題はRoutes の Application 間共有の問題。Pyxis ではフロントと管理画面を別WSGIApplication として実装することを検討しているのですが、これがなかなか難しいです。 Routes の仕組み Routes の主な…

Pixis 図

簡単ですが「Pixis」の位置づけをイラストにしました。

今、家に帰ってきました

今家に帰ってきました。今朝は、せっかく技術的なブログを書いたのですが、誤って消してしまった。orz。今日は、城ヶ崎海岸の門脇吊橋から海沿いを歩き、城ヶ崎海岸駅近くのお店でパスタを食べて、高原の湯で露天風呂につかり、昼寝して、新幹線で帰ってきま…

合宿3日目

合宿3日目が始まりました。夜中に雪が降って、一面雪景色です。

合宿2日目、スタートです。

煙草を吸う人が一人もいないと言ったら宿の人が驚いていたけれども、みんな酒もあまり飲まない。内2名は、乾杯ビール10mlのみ。これを聞いたらもっと驚くだろうなぁ。宿の人の好意で、会議スペースも使わせてもらうことになったので、今日はホワイトボードな…