PyPI Author になりました
Pyxis は現在オープンソース化を目指して開発が進められています。
その第一歩として Pyxis で利用しているパッケージをオープンソースで公開することにしました。
tw.starrating は Amazon の 5つ星みたいな機能を提供するための ToscaWidgets のウィジットで、 jQuery Star Rating Plugin を利用しています。 tw.jtageditor も同様に jTagEditor (現在はバージョンアップして markItUp! という名前になっています) を ToscaWidgets 化したものです。
tw.starrating の方は PyPI にも登録しました。
PyPI への登録は初めての経験だったのですが、 http://d.hatena.ne.jp/jYoshiori/20080104/1199440115 の記事などを参考にさせていただいて、あっけないほど簡単に終わりました。これで easy_install コマンドを使って一発でインストールできるようになったので、ぜひ使ってみてください。
$ easy_install tw.starrating
(いま見たらもう何回かダウンロードされていました)
Pyxis 本体も早く公開できるように頑張ります。
Posted by id:knzm
書評: 10日で覚える Python 入門教室
初めての経験なのですが、書籍を頂いたのでご紹介いたします。CMS コミュニケーションズの穂刈さん、寺田さんたちが著者に名を連ねている「10日で覚える Python 入門教室」です。翔泳社から送って頂きました。
Python の書籍といえば、これまでオライリーの「初めてのPython」や「Python クックブック」、柴田さんの書かれた「みんなの Python」など、どちらかというと Python 全体を網羅的に扱った書籍や堅めの本しかなかったのですが、「10日で覚える Python 入門教室」は、「Python の機能を余すところなく紹介せねば…」という重圧から解放され、楽しいトピックを非常にのびのびと扱っています。
目次を見て頂くと分かりますが、 Amazon API からデスクトップアプリ、Pylons を用いたウェブアプリケーションまで、初学者の方が初めから退屈することなく、ものを動かすワクワク感を感じながら Python を学べる構成になっています。また、「第7日 エラーとテストを学ぼう」もイチオシです。デバッグやテストの手法はプログラマが押さえておくべき重要項目の1つですが、リファレンスマニュアル等を見てもなかなか分かりません。このトピックについて一章を割いてしっかりと説明しているのは、初学者にとって助けになるのではないかと思います。
また、本書の後半では SQLAlchemy と Pylons に触れていますが、前者は Python の OR Mapper としてデファクトスタンダードであり、学んでおいて絶対に損をしないでしょう。また、Pylons は日本ではまだまだ認知度が低いですが、私の会社でも利用していてお勧めです。WSGI ベースの非常に小さなフレームワークですが、様々な拡張に耐えられるように設計されており、自由度が高いです。MVC の紹介に Pylons を使ってくれたのには、なんだか嬉しくなりました。1人でも多くの Pylons ユーザが増えてくれればと思います。
それにしても、楽しい題材を選びながら、重要なポイントはしっかりと押さえられていて、著者の皆さまの構成力には脱帽します。初学者の方は、リファレンス系の Python 本とこの本をセットにして学ばれると良いのではないでしょうか。うちの会社でも、今年の新人に早速この本で学ばせています。
目次:
第0日 オリエンテーション
第1日 Pythonはじめの一歩
- 1時限目 インタープリタを使ってみよう
- 2時限目 変数とデータ構造について
- 3時限目 ファイルに保存して実行しよう
第2日 Pythonを本格的に使ってみよう
- 1時限目 制御構造を理解しよう
- 2時限目 処理を関数にして流用しよう
- 3時限目 モジュールを読み込んで処理しよう
第3日 Web APIを使ってみよう
第4日 日本語とファイルの扱いを学ぼう
- 1時限目 日本語について再考しよう
- 2時限目 Yahoo翻訳APIを使って翻訳してみよう
- 3時限目 結果をファイルに保存しよう
第5日 便利なツールを作ってみよう
第6日 デスクトップアプリを作ろう
第7日 エラーとテストを学ぼう
- 1時限目 エラーとトレースバックを学ぼう
- 2時限目 デパッガとイントロスペクションを学ぼう
- 3時限目 テストとアサーションを学ぼう
第8日 データベースを操作しよう
- 1時限目 SQLAlchemyをSQLツールキットとして使おう
- 2時限目 SQLAlchemyのO/Rマッパーを使ってみよう
- 3時限目 SQLAlchemyの複数テーブルを操作しよう
第9日 Webフレームワークを使ってフォトログを作ろう
- 1時限目 Webフレームワークはじめの一歩
- 2時限目 Pylonsとデータベースを知ろう
- 3時限目 Webアプリケーションを作ろう
第10日 Google App Engineを使ってフォトログを作ろう
- 1時限目 Google App Engine SDKを利用しよう
- 2時限目 フォトログを作成しよう
- 3時限目 フォトログを仕上げて公開しよう
posted by id:junya_hayashi
jQuery
Pyxisではフォーム制御にToscaWidgetsを利用しているのですが、
その中でjQueryを提供しているモジュールがあります。
これを活用しない手はない!とうことでただ今鋭意勉強中…
- 作者: 沖林正紀
- 出版社/メーカー: 技術評論社
- 発売日: 2008/06/19
- メディア: 大型本
- 購入: 14人 クリック: 247回
- この商品を含むブログ (42件) を見る
気分一新
これまであまり頻繁に更新していませんでしたが、
これからはマメにつけていきたいと思いますので、
どうぞよろしくお願いいたします。
Paste:URLMap で VirtualHost
Paste の URLMap を利用すると VirtualHost と同じようなことができる。
[DEFAULT] debug = false email_to = foo@example.com smtp_server = localhost error_email_from = foo@example.com [server:main] use = egg:Paste#http host = 0.0.0.0 port = 5000 [composite:main] use = egg:Paste#urlmap domain 127.0.0.1 port 5000 = main-app domain main.example.com port 5000 = main-app domain dev.example.com port 5000 = debug-app domain pony.example.com port 5000 = debug-app [composite:main-app] use = egg:Paste#urlmap / = myapp /blog = blogapp [app:myapp] use = egg:MyApp#main ... [app:blogapp] use = egg:BlogApp#blog ... [app:dev-app] use = main-app debug = true [app:pony] use = main-app filter-with = egg:Paste#pony
Paste Deploy のマニュアル に載っていなかったので、これまで domain や port オプションが使えることに気付かなかった。
余談
全く同じ Pylons アプリケーションを、DB 設定や data ディレクトリ設定のみ変えて、複数動かしたい。ハードウェア資源をできる限り有効活用したいのだけれども、上記構成だとたいしてメモリの節約にはならない。かと言って、 pylons.config オブジェクトはアプリケーションの初期化時に一度だけ作られるので、安易には書き換えられない(特に SQLAlchemy 周りで注意が必要)。1つの Pylons アプリで複数サイトを動かすには、 Dynamic に DB 設定や data ディレクトリ設定を変える仕組みをもう少し掘り下げて考える必要がありそうだ。
Posted by id:junya_hayashi
mimetypes.guess_type problem
- http://lucumr.pocoo.org/2009/3/1/the-1000-speedup-or-the-stdlib-sucks
- http://bugs.python.org/issue5401
実行時間を計測してみました。
試行1:
>>> import timeit >>> setup = "from mimetypes import guess_type" >>> stmt = "guess_type('test.jpg')" >>> print timeit.Timer(stmt = stmt, setup = setup).timeit(1000) 4.73700714111
試行2:
>>> import timeit >>> setup = "import mimetypes" >>> stmt = "mimetypes.guess_type('test.jpg')" >>> print timeit.Timer(stmt = stmt, setup = setup).timeit(1000) 0.0164821147919
補足
上記の試行はそれぞれ、インタプリタを起動しなおして実行する必要があります。
コマンドの実行が、モジュールの中身を書き換えてしまうので。
補足2
より簡単なコードで現象を再現すると、以下のようになります。
foo.py
def foo(): init() print "foo called" return foo() def bar(): print "bar" def init(): global foo print "initialized" foo = bar
試行3:
>>> from foo import foo >>> foo() initialized foo called bar >>> foo() initialized foo called bar
試行4:
>>> import foo
>>> foo.foo()
initialized
foo called
bar
>>> foo.foo()
bar
posted by id:junya_hayashi