2013年9月20日金曜日

PyCon APAC 2013 2日目に行ってきた(2) #pyconapac

ちょっと間が空いてしまったけど、PyCon APACの2日目の後半。Pythonでハードウェアを操る話、ちょうどRasberryPiを買ったので耳寄り情報が多かった。とりあえずpyserialは入れとけと。

あとDjangoのデバッグの話は、django-debug-toolbarなど興味深かった。これって他のフレームワークにも移植されてて、Flask版やBottle版もあるみたい。そういえばBottleはwerkzeugで動かすこともできたような。

PythonでハードウェアをWebAPIにした話

  • 北神雄太さん @nonNoise
  • 所属:ArtifactNoise
  • 職業:発明家
  • 主な開発:Elpis Framework
  • スライド
気になってる話題
  • Tessel
    • JavaScript, Nodeが動くらしい
  • Arduino YUN (アードゥイーノ ヤン)
    • Linuxが乗ってる
  • GALAXY Gear
  • Nymi
ハードウェア界隈の話
  • Arduinoの進化
  • RaspberryPiなどのカード型PCの登場
  • RaspberryPiのPiはPythonのパイらしい
  • PyGameが標準で入っている!
  • Linuxなら標準で入っているので、カード型PCでPythonを動かし、特殊なハードウェアをコントロールする新しいムーブメント
Pythonでハードウェアを扱う方法
  • Pyserialを使う。簡単
  • USBが刺さった時にどっちのポートが刺さったかわからない
  • USB Serial変換チップ
    • USBがttyとして認識される!
    • USBのドライバを書かなくてすむ
  • マザーボードのIOを直接操作できる
ハードウェアとのやりとり
  • 基本的にはコマンド方式がほとんど
    • 1(前へ進む), 2(後ろへ進む)
ハードウェアをWebAPIにする

(メモあんまり残ってない)

ser.getline()

Django最速デバッグ指南

django-pdb
  • -pm
    • Exception出たらデバッガが起動する
django-devserver
  • SQLのクエリのログ
  • リクエストの情報
  • プロファイリング情報

などをコンソールに出力。

django-debugtoolbarはテンプレートを使っていないと表示されない。APIだとデバッグ情報は見れない。あとJSが走るのでJSゴリゴリ書いているとエラーになる可能性がある。

runserverwerkzeug
  • Flaskの人が作っているWSGI実装
  • ブラウザ上でインタラクティブなデバッガーが使える
logging
  1. logger.error(Invalid code: %s%azunyan)
  2. logger.error(Invalid code: %s,miotan)

2.が正しい。理由は2.で書いておくとログ集約ができるから。

重要な点

  • 正しく使う
  • ログレベルの認識を一致させる
  • ログの頻度の統一

debug,info,warning(warn),error,critical(crit)

  • debug
    • 開発時のみ出力
  • info
    • ファイル出力
  • warning
    • 機能は動作してるけど何か間違っている
    • 処理は継続できるけど何かがおかしい
    • バリデーションエラーぐらいの認識
  • error
    • 500エラー
    • バッチが落ちるレベル
  • critical
    • 使わない
その他開発・運用で使っているツール
  • PyCharm: Python向けIDE(IntelliJ)
  • Sentry: ログ収集プラットフォーム
    • ログを集約してメールで通知とか
まとめ
  • デバッグには何が起こっているのかを理解するのが大事
  • ツールを正しく使えばデバッグ時の負荷を減らせる

0 件のコメント: