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
- Use dateutil.zoneinfo module for direct access to compiled time zone information
- Simple recurrence
- rrule
>>> from dateutil.rrule import WEEKLY, TU >>> rr = rrule(WEEKLY, interval=2, byweekday=TU, dtstart=datetime(2007, 2, 6, 13))
- rrule
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との相互変換には、エンコーディングを明示的に指定する必要がある。
- どのように実装するか、まだ決定してない。
- Java-like model
- 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変換を追加。
- Stackable components (inspired by Java, Perl)
- 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
- nonlocal文
- 未確定。他の名前も提案されている。
- 関数中の関数で、外側の関数にある変数をアクセスしたい。
- Abstract Base Classes
- Still highly speculative. No PEP yet. http://wiki.python.org/moin/AbstractBaseClasses
- file, container, sequence, iterableなどの型に、抽象基底クラスを導入する。
- 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
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
- CGIで実装 25 pages/seq
- Python App Server 120 pages/seq
- 問題
- Global Interpreter Lock
- セッション情報がDBにある。
- 問題
- ロードバランス 220 pages/seq
- 問題
- 静的ファイルは毎回ディスクから読んでいる。
- 問題
- キャッシュ 600 pages/seq
- 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
