Memo Life

ビギナーSEのメモ書き

【PyCon2014JP】1日目の個人的振り返りメモ

Keynote

Kenneth Reitz氏

Python 2.7 and Python 3: A Sacred Love Story // Speaker Deck


・コミュニケーションの進化
 →人間というハードは変わらないが、言語というソフトウェアはアップグレードされている。
  大昔は1:1でのコミュニケーション。
  印刷等のテクノロジーにより、1:多によるコミュニケーションが可能となり、
  現在ではインターネットにより様々な考えの人が全く公平な立場で情報を発信する
  多:多のコミュニケーションが可能となった。
  (特定の企業に勤めながら、OSSプロジェクトで活動といった形で、世界中の人とのコラボレーションが可能)

Pythonの将来を考えると不安
 Python3系はいまいち広がっていない
  Standard Libraryが壊れてしまっていたり。。
  利用者数が少ないため、Python3.xのコアディベロッパーにフィードバックがなかったり。。
  文字列問題があったり。。
 
Pythonの方向性(どなたかが質問)
 →どのような方向で使っていくのかが明確ではない。
  オフィシャルなストーリーが構成されていない
 

Djangoによるスマホアプリバックエンドの実装】

Yuichi Nakazawa氏、Kazuhiko Kakita氏

メモとれていない

Djangoアプリケーションパフォーマンスチューニング】

Hiroki KIYOHARA氏

Pycon2014 django performance

Django内部で発行されるSQL
 ForeignKeyフィールドの値は、必要になった時点でその都度SQLを発行する
 Model名.objects.all()で取得し、テンプレート側でForeignKeyフィールドを
 使う場合、データ件数に応じてひたすら関連先のテーブルに対してクエリ発行してしまう

# models
class Hoge(models.Model):
  foo = models.CharField(max_length=100)
  bar = models.CharField(max_length=100)
  author = models.ForeignKey(Author)

class Author(models.Model):
  username = models.CharField(max_length=100)


# views
def hoge_list(request):
  hoge = Hoge.objects.all()
  return render_to_response('hoge.html', {'hoge':hoge})

#templates/
{% for h in hoge %}
  {{ h.foo }}
  {{ h.author.username }} {% comment %}ここでAuthorに対して、Hogeの数だけSQLを発行する {% endcomment %}
{% endfor %}
# 以下を利用することで、関連先のオブジェクトも取得してくれるため、
# その都度SQLを発行することはなくなる。
Hoge.objects.select_related()


RDBを知る、Djangoミドルウェアを知る
 1.テーブル設計が大事:結局ボトルネックRDB
 2.インデックス
 3.どんなクエリが発行されるのかを知っておく(debug-toolbarを有効活用するも良し)

・テストはFunkloadがいいかも

Pythonの実装系総ざらい】

MASATO NAKAMURA氏
メモとれていない

【最新リリースCMSツール Plone5のモダンUIとテクノロジーの進化】

Manabu TERADA氏
ツールそれぞれに文化がある。
ツールを業務にあわせるのではなく、業務・ビジネスフローを変える勇気も必要。
→文化があわないならば使わない方がよい。

【PyCharm活用術】

Takayuki Shimizukawa氏

・機能豊富だが、突出したものはない。
Geek的な面白味はない
・もともとvimを使っていて、PyCharmに切り替えたがこっちのが使いやすい
・JSのSyntax Checkもやってくれる(なんだこのツールは)
・メモリ消費は若干

*検索
Shiftキー2回で検索ボックスがでる
(ファイル名manage.pyなどを指定すると、PyCharmタスクを実行するボックスが出現)

デバッグ
テンプレートのデバッグが可能(HTML内のテンプレートタグにブレークポイントを設定)
ブレーク条件も記述可

*コード整形も可能

*リモートサーバーにあるDjangoプロジェクトと連携可能

リファクタリングツールあれこれ(May the force be with you】

tell k氏
メモとれていない

Pythonを支える技術:ディスクリプタ編】

Nozomu Kaneko氏

Python を支える技術 ディスクリプタ編 // Speaker Deck


ディスクリプタ・・・属性アクセスをカスタマイズする機構

以下を定義したオブジェクトがディスクリプタとなる。
__get__
__set__
__delete__

・データディスクリプタ(__get__, __set__)
・非データディスクリプタ)(__get__)
・読み取り専用ディスクリプタ(__get__, __set__ ただし、__set__呼び出し時にAttributeErrorが送出)

プロパティとディスクリプタ

・プロパティ:そのクラスのインスタンスの属性アクセスをカスタマイズ
ディスクリプタ:特定クラスとは独立して、属性アクセスをカスタマイズする
ディスクリプタ ⊃ プロパティ か?


関数はディスクリプタ

obj.func(x)
# ↓

func = type(obj).__dict__['func']
meth = func.__get__(obj, type(obj))
meth.__call__(x)

# ↓
func(obj.x)