wiki:PyCon2007/20070224

PyCon2007/20070224

PyCon2007 >> 2007/2/24

カンファレンス2日目。

新しいものが上。

さぼり

このあと、寒さに耐えられなくなって部屋に戻ったら、思わず昼寝になってしまった。ごめんなさい。 こんな季節にクーラーなんて、ぜったいにおかしい。 みんな、「テキサス=暑い」という先入観があって、クーラーつけるのが正しいってことになってるんじゃないのかしらん。 あるいは、アメリカ人はみな、基礎代謝が大きいのか。

…という話を知り合ったBrianにしてみたら、やっぱ「アメリカ人はおかしいよ。」とのこと。 夏の部屋の中は寒いし、冬の部屋の中は暑いって。

このあと、1800からPyCon主催者のDavidとお話。「PyConのスポンサーになって、価値はありましたか?」

続いて、ライトニングトークを途中から聞く。ちょうど、すぐに柴田さんのトーク。 日本のPython事情について。RubyばっかはやってるのはMatzのせいだ、とか。 ちゃんと笑いを取っていてすばらしい。

Dateutil to the Rescue!

15:15~。

>>> from datatime import datetime
>>> from dateutil.parser import parse
>>> parse('02/24/2007')
  • Time delta
>>> now = datetime(2007, 2, 24)
>>> now + relativedelta(months=2)
  • Timezone
    • Use dateutil.zoneinfo module for direct access to compiled time zone information
      >>> from dateutil import zoneinfo
      >>> zone = zoneinfo.gettz('US/Central')
      
    • Use dateutil.tz for more abstract time zone activity
  • Simple recurrence
    • rrule
      >>> from dateutil.rrule import WEEKLY, TU
      >>> rr = rrule(WEEKLY, interval=2, byweekday=TU, dtstart=datetime(2007, 2, 6, 13))
      

See dateutil site for many more examples.

Distributing your project with Python Eggs

14:46~。

Using Python Eggs

14:05~。

What can Eggs Do For Me?

  • find, download and install; with dependencies satisfied.
  • Try new software easily
    • install, test, throw away
  • Automatically build tarballs even with C extensions
  • Encourages fine-grained packages
    • only install what you need

Eggs = JARs + CPAN + backwards compatibility

Eggs ≒ JARs

  • *.egg zip archive
    • EGG-INFOディレクトリにメタデータが入っている。
  • drop into sys.path
  • pkg_resources API

Eggs ≒ CPAN

  • easy_install MyPackage>=2.1

Installed Eggs

  • *.egg zip files
  • *.egg directories
  • *.egg-link files
  • *.egg-info files

 http://cheeseshop.python.org/pypi/

Keynote: Python 3000

ランチタイム。サンドイッチを食べながら聞く。

Guido van Rossum

Python 3000とは:

  • 次のメジャーリリース。Python 3.0としてリリースされる。
  • Pythonの長い歴史の中ではじめて、バックワードコンパチでなくなる。
  • 2000年くらいから検討している。
  • 初期の設計で「間違えた」部分を修正する。

スケジュール:

  • PEP 2007/4
  • 3.0a1 2007/6
  • 3.0 final 2008/6
  • 2.6a1 2007/12
  • 2.6 final 2008/4

変更点:

  • No more classic class -- "class C:" and "class C(object):" both are new-style classes.
  • "print" will be a function. -- 98%は自動的に変換できる。
    • print(x, y) -- print x, y
    • print(x, end=" ") -- print x,
    • print(x, file=f) -- print >>f, x
  • Dictionary Views
    • Inspired by Java Collections Framework
    • Remove .iterkeys(eritems(), .itervalues()
    • Change .keys(), .items(), .values()
      • dict viewを返す。
      • イテレータじゃないよ。
      • keys()とitems()は、setのような使い方。
      • values()は、コレクションのような使い方。
  • Default Comparison Changed
    • Default == != compare object identity; unchanged
    • Default <, <=, >, >= raise TypeError?
    • ex: [1, 2, ""].sort() raises TYpeError
  • Unicode Strings
    • Java-like model
      • 文字列は常にUnicode
      • separate bytes type
      • bytesとの相互変換には、エンコーディングを明示的に指定する必要がある。
    • どのように実装するか、まだ決定してない。
  • Bytes型
    • A mutable sequence of small integers (0..255)
    • unsigned char[]くらいに効率的な実装。
    • .extend(), .find()
    • リテラル:b"abcdefg"
  • New I/O Library
    • Stackable components (inspired by Java, Perl)
      • 最下位は、バッファ無しI/O
      • バッファリングを追加。
      • ユニコード変換を追加。
      • CRLF/LF変換を追加。
  • Int/Long? Unification
    • Only one built-in integer type; named 'int'
    • Python 2.xでのlongに近い実装。
  • Int division returns a float
    • 常にfloatを返す!
    • Python 2.xでfrom __future__ import divisionとするのと同じ。
    • 整数の割り算には、「//」を使う。
  • Raise and Except Changes
    • 全ての例外はBaseExceptionを継承すべし。
    • Exceptions have __traceback__ attribute
    • raise E, arg」は廃止。「raise E(arg)
    • except E, v」は廃止。「except E as v:
      • 例外ブロックが終わるとvは削除される。
  • Signature Annotations
    • NOT type declarations!
    • ex: def foo(x: "whatever", y: list(range(3))) -> 42*2:
  • Keyword-only Parameters
    • ex: def foo(a, b=1, *, c=42, d):
    • *」以後は、必ずキーワード引数。
  • Set Literals
    • {1, 2, 3} -- set([1, 2, 3])
    • No empty set literal; use set()
    • No frozen set literal; use frozenset({...})
    • setの内包表記。検討中。
  • Absolute Import
    • Python 2.5でfrom __future__ import absolute_importと同じ。
    • "import foo"は、現パッケージの中身を探さない。sys.pathだけから探す。
    • Use "from . import foo" for relative import
  • String formatting
    • ex (see PEP 3101 for more)
    • "{0}, {1}, {foo}".format("A", "B", foo="C")
  • nonlocal
    • 未確定。他の名前も提案されている。
    • 関数中の関数で、外側の関数にある変数をアクセスしたい。
  • Abstract Base Classes
  • Switch/Case文?
    • Highly speculative; see PEP 3103
    • 課題:caseの値(選択肢)は、いつ評価すべき?
      • 実行効率を考えれば、先に評価しておきたい。
      • しかし、それでは、他のルールとの整合性が悪い。
  • その他細かいこと
    • execは関数に戻る
    • range()はxrange()になる。
    • input()はraw_input()になる。
    • zip()はイテレータを返す。
    • intern()をsysモジュールに移動。
    • __nonzero____bool__に変更。
    • as、withはキーワードになる。
  • 細かい削除
    • classic classes: new-style classes default
    • backticks: use repr()
    • removed <>: use !=
    • apply(): use func(*args)
    • coerce(), __coerce__: not needed
    • ...
  • Library Reform
    • Guidoはやってない。
    • 興味のある人もいるが、止まりがち。
    • だれか助けて。
    • 3.0a1リリース後かも。
  • C API changes
    • 未定。
    • APIの増減はあるが、名前が同じで使い方を変えることは無い。

対処:

  • 2.xコードの変換
    • 変換ツールがある。空白やコメントを維持したまま変換。
    • 途中、2.6を通れば楽。古い文法を警告してくれる。
  • 今できること
    • Don't worry about stuff that can be automated
    • Don't try to write source-level compatible code
      • Use 2.6
      • Write unit tests
      • keys = sorted(d.iterkeys())
      • list(d.iterkeys())
      • Derive all exeptions from Exception
      • Derive all classes from object
      • Don't rely on sbtle print/softspace.

たしかに、整合性とか綺麗さを追求してのことなんだろうけど、こんなに変えて大丈夫なんだろうか? Pythonだから、Guidoだからきちんとやってくれるとは思うが…。ちょっと心配。

Understanding and Using NumPy

What is  NumPy?

  • 巨大なデータを取り扱う。
  • Multi-dimensional array
  • array同士の演算
  • 科学計算ユーティリティ

歴史:

  • Numeric (1995) -- 型に制限があった。
  • Numarray (2001) -- 小さいarrayでは遅すぎる。Numericを完全に置き換えるものではなかった。
  • NumPy (2006) -- NumericとNumarrayの協力のもとに。

コンパチビリティ:

  • Numeric、Numarray用のコードも動く。
  • 新しく書くならNumPy用に書いてくれ。

画像処理:

  • たとえば静止画のサイズ変換は、配列アクセスで1行で書ける。

Arrays of "Records"

Ufuncs

 http://www.trelgol.com/

380 page book available for purchase. freely available in Oct. 2010 at the latest.

Scaling Python for High-Load Web Sites

10:52。

 http://www.polimetrix.com/pycon/slides/

  • 静的ページ:4000 pages/s
  • 動的ページ(Python):400
  • データベース:40
  1. CGIで実装 25 pages/seq
  2. Python App Server 120 pages/seq
    • 問題
      • Global Interpreter Lock
      • セッション情報がDBにある。
  3. ロードバランス 220 pages/seq
    • 問題
      • 静的ファイルは毎回ディスクから読んでいる。
  4. キャッシュ 600 pages/seq

 nginx  memcached

  • DBのインデックスを忘れるな。
  • SQL問い合わせのログをとって、最適化すべし。

デモコード: http://polimetrix.com/pycon/demo.tar.gz

Keynote: Premise: eLearning does not Belong in Public Schools

0900から。

by Ms. Adele Goldberg

"40 is a small number"

アメリカは40年前、世界一位だったが、現在は19位。 29秒に一人、脱落している。

公立学校教育の危機と、eLearningができること。 これまでのところ、どのようにPythonと関係する話になるのかよくわからない…。 コンピュータを教える話と、コンピュータで教える話が混ざってるような気がする。

LOGOの話にからんで、Seymor Papertの名前が出てきたが、ハノイでの事故の話にはふれられなかった。

"Guido van Robot"  http://gvr.sourceforge.net/ 教育用言語。Guido?Guidoってば、いじられキャラらしい?

Creativist Teaching is Hard

Programming needs to be taught as a form of reflection.

教育→「CourseCloud?」→Zope/MySQL/SQLAlchemy/ZAlchemy→Pythonってつながり?残り5分。

rougemountain.com