メイン


Python Archives

2006年6月26日

LL Ringのチケットを買ったのとPythonで1000000までの素数探索

LL Ringのチケットを買いました。祝4年連続!

LL Saturdayは徹夜仕事明けで台風の中を行ったなぁ。
LL WeekendやLL Day & Nightはそれほど遠い気がしない。LL Saturdayだけが遥か彼方にあります。
いまもそれなりにダメダメだけど、あのころの自分はかなりダメダメだった。(遠い目)


さて、また素数。
ホームディレクトリの下を漁っていたら、以下のようなPythonのコードをみつけました。


def primes(n):
if n == 2 : return [2]
elif n < 2 : return []
s=range(3, n+2, 2)
mroot = n ** 0.5
half = (n+1)/2
i=0
m=3
while m <= mroot:
if s[i]:
j = (m*m-3)/2
s[j] = 0
while j<half:
s[j]=0
j+=m
i=i+1
m=2*i+3
return [2] + [x for x in s if x]

print primes(1000000)


元はオライリーネットに投稿されていたものです。
いまだにこんなコードがかけません。 orz...


2006年10月14日

携帯で動くPython

Python for 702NK/702NK2プログラミングブック
を買ってみた。こんなニッチな本を出していただいてありがとうございます。


2006年11月 9日

Twistedやばい

NetWork越しにhogehogeしようとしていて、そこでようやくTwistedにいきあたりました。前々から名前だけは聞いていたんですが、フレームワークの一つぐらいに捉えていて、スルーしていました。これが大きな間違いだった。

フレームワークといっても非同期ネットワークアプリケーションフレームワークでWebアプリケーションフレームワークでは無かったんです。

Twistedのサイトにある簡単な紹介はこんなかんじ。

Twisted projects variously support TCP, UDP, SSL/TLS, multicast, Unix sockets, a large number of protocols (including HTTP, NNTP, IMAP, SSH, IRC, FTP, and others), and much more.
Twistedスプリント - Python Developers Camp 2006 Summerにある紹介もおすすめ。

GUIのアプリケーションとか、ネットワーククライアントとか、デーモンとかをサクッと作れるらしい。XenやBittorrentなんかでも使われているらしい。

API一覧を見てみると、DNSサーバ!やメールサーバ!を作るためのパッケージがあったりします。



難点をあげるとすれば、オライリーから本が出ているのですが、その表紙がキモすぎです。オライリー本の中で最もキモいです。蛇玉かよ。うわー。電車の中ではカバー必須!



Twisted Network Programming Essentials (Essentials)

続きを読む "Twistedやばい" »



2006年11月16日

はじめてのIRCBot - Python Twisted編

(oreorebotみたいに)「url送ったらそのページのタイトルを返してくれるボットが欲しいなぁ」と、某IRCで発言したところ、Perl::POEでサクっと作っていただきました。
でも、作りたい衝動を抑えられず、Twisted baseのIRCクライアントを作ってみました。

ソースコード - azukibot - azuki.py

Twisted初心者なので、付属していたサンプルのIRCBotを元にしています。

付属のexamples
Twisted-2.4.0/TwistedWords-0.4.0/doc/examples/ircLogBot.py

サンプルですでにイベントに対応するメソッドが揃っているので、簡単にイベントドリブンなプログラミングができました。
あとはAPIドキュメントをPythonのプロンプトで
>>> from twisted.words.protocols import irc
>>> help(irc)
とか して、APIを眺めつつrfc2812あたりを見ながら肉付け。っていうか、ほとんど元のままです。

Webページを取得する部分はイベント管理機構であるdefferdを返す関数を使っています。
twisted.web.client.getPage は Deferred オブジェクトを返すので、Callback関数を登録してあげます。
def request(self, url, channel):
self.getter = twisted.web.client.getPage(url, timeout=5)
self.getter.addCallback(self.getTitle, channel)
self.getter.addErrback(self.handleWebError(error))
非同期non-blokingネットワークI/Oなので、重いページをリクエストしている間も、mainループでイベントを処理しつづけます。素敵。

twisted.pythonやtwisted.utilというライブラリも付属しており、これは他の用途にも便利に使えそうでした。

ちょっと困ったのが、デバッグです。とりあえず、print文で標準出力に怪しいところを出して、っていうプリミティブな方法しか思いつきませんでした。
ハマると大変かもしれません。

ここまでやってTwistedの楽しさを知り、蛇玉本を買ってしまいました。
クライアント兼サーバみたいなアプリケーションとかJabberをhogeるとか、いろいろ夢が広がっています。

2006年12月 7日

Python Workshop 04 & 忘年会

Python Workshop 04 & 忘年会でした。

  • Django
    • インストールがちょっと...
    • DBのセットアップでYAMLもXMLもいらず。Railsやsymfonyより楽そう。
    • テンプレートシステムの仕組みが面白い。HTMLを書いたものと値だけ書いたものに分割し、重ねる形式らしい。
    • スタティックなファイル周りがちょっとなー。
    • JavaScriptの話。YUIライブラリは結構、めんどくさい。yui-extなんてライブラリもあるらしい。jQueryがよさげ。
    • 詳しくは増田さんのサイトへ
      • ほとんど完全な日本語翻訳
  • Psyco
  • pymixi
    • 気持ちはわかります。
  • Beautiful Soup
    • 名前はルイス・キャロル由来
    • 正しくないHTMLも正しくしてから扱うことができるパーサ
    • BeautifulSOAPとかもある
    • クラス名が変
ついでにオレ的Python 2006の振り返り。
  • Python2.5リリース
  • 日本発の書籍3冊
  • IronPython WindowsアプリもPythonでやる時代
  • kizashi.jpブレイク
  • Twisted使い始めました
  • あんまり、さわってないけどDjango, TurboGearsも流行ってんなぁ。

2007年7月 1日

Python Workshop the Edge 2007

Python Workshop the Edge 2007 へお手伝い参加しました。

たいしてお役に立てませんでしたが、設営のバタバタ感が楽しかったです。

会場が東京大学駒場キャンパスだったので、久しぶりに大学の空気を肌で感じて懐かしかった。
母校観光にも行こうかな、と思いました。

参加者、スタッフ、講演者の方々とお話して、株式市場分析、数理計算、CG、ネットワーク、会社設立等々みんなおもしろそうなことやってんなぁ、と感じました。いいコミュニティの場でした。

懇親会の景品になっていたPython クックブック 第2版を本気で欲しかったのですが、残念ながら敗退。大人しく買わなきゃ。


2007年8月21日

PyGame本 & Django本、今秋発売!

サンフランシスコ帰りの友人からLinux Pro Magazine Issue 81 2007年8号を頂きました。わーい。

第1特集はPythonネタだったのですが、内容はおいといて、ApressからPygame本Django本が出るとの広告を発見。

どっちも欲しいかも。

2008年4月 8日

春のPython祭り - Google App Engine参加中

秋元さん経由で一気にPython使いを夢中にさせたGoogle App Engineを触ってみました。
appspot.comなんてなんかのオマージュかと思ってニヤっとしたのですが、マジなのね。

cgi.print_environ()してみて気になったのはこんなパラメータ。


SERVER_SOFTWARE
Google Apphosting/1.0
PATH_TRANSLATED
/base/data/home/apps/shoma/1.1/main.py
AUTH_DOMAIN
gmail.com
USER
apphosting
USER_EMAIL
USER_IS_ADMIN
0
USER_NICKNAME

USERってのはGoogleさんのAPIにあるのをincludeしてるからだと思う。たぶん。

とりあえずDjangoは動作確認。
CherryPyWeb.pyやPylonsもいけるらしい。
逆にZopeやTwistedはダメっぽい。Cで書かれた部分があるから?

SDKはまぁ、まんまPython。
GoogleさんのPythonコードは2スペースインデントでした。
Python2.5が/opt/localにあったんだけど、Mac版のSDKで見つけてくれずインストール失敗。
Linux版だとすんなり動く。

デプロイが超楽。普通のdjangoよりぜんぜん楽。
コマンド一発で公開できるのは素敵すぐる。

メール送信量とかには制限があるみたい。
ストレージ500MBってはまぁ、とりあえずは充分かな。
足りないようならAmazon S3と連携させたいところだけど、S3のアカウント情報をGoogle App Engineに埋め込むのはちょっと怖い。

面白いのは作ったアプリに他の人を開発者として招待できること。
そうするとオープンソースならcodereosとかGoogle Codeでレポジトリ作って開発することになるのかな?
オープンソースサービスが増える予感。

BigTableの性能ってどうよ?とか脱Google App Engineするときはどうすればいいの?とか
ローカル環境でDBっぽいことするのってどうするの?とかもうちょっといろいろ調べたいです。

facebookあたりが対抗サービスをPHPでやってきたら面白いなぁ。
AmazonはPerlで、とか妄想してしまいます。

っていうか、なんか創作意欲をかきたてられます。

Python使いでよかった。

追記
CherryPyは動かなかった。
標準モジュールのsocketなどが書き換えられているらしい。


socket._fileobject

などが使えない。


2011年9月 3日

python のコメントの書き方

Python には docstring (ドキュメンテーション文字列)というソースコードにドキュメントを書く仕組みがあります。
このドキュメントを Python 対話シェルで参照した場合、次のようになります。
pythondocstring-Screenshot-Terminal.png












Powered by
Movable Type 4.25