Upload
kazufumi-ohkawa
View
13.644
Download
10
Embed Size (px)
DESCRIPTION
Javascriptを書きたくないヒ トのためのPythonScript
Citation preview
Javascriptを書きたくないヒトのためのPythonScript
Shizuoka.py #2 @kzfm
私について • @kzfm – 製薬会社の研究員(最近インフラ周りばかり) – perl -> python (-> haskell)
• 最近pandas(Rみたいに使えるやつ)がお気に入り
• PyconAPACも参加登録済み
マリー・アントワネット曰く
じJajavascriptがいやなら pythonで書けばいいじゃない
これによりPython革命勃発 (私の中で)
ブラウザでのPython実行方法 1. javascriptでpythonを実装する 1. <script type=“text/python”></
script>
2. pythonで書いてjavascriptにコンパイルする 1. 実行されるのはjavascript
1. sass -> css 2. jade -> html
Brython
javascriptに汚染されて汚れまくった この世界をPythonで浄化してやる! (意訳)
h%p://www.brython.info/
python inside !
いいところ、わるいところ • brython.jsを読みこめばpythonで開発できるのでお手軽にはじめられる
• 開発も活発
• jQuery等のjavascript資産を気軽に流用できなさそう
• 最初の読み込みで若干モサッとする – javascriptのパーサを通して構文解析して構文木をつくってjavascriptを出力してevalしている
我々は 完全に浄化された言語世界では
生きられないのです!
ブラウザでのPython実行方法 1. javascriptでpythonを実装する 1. <script type=“text/python”></
script>
2. pythonで書いてjavascriptにコンパイルする 1. 実行されるのはjavascript
1. scss -> css
Javascriptと Pythonの 融合個体的アプローチ
PythonScript • Pythonサブセット • javascriptライブラリを簡単に取り込める
h%p://apppyjs.appspot.com/
はじめかた pip install pythonscripttranslator wget http://bit.ly/YSAbSS -O pythonscript.js echo 'print "Hello Shizuoka"' > app.py pythonscript < app.py > app.py.js
(app.py.js) console.log("Hello Shizuoka");
<!DOCTYPE html> <html> <body> <h1>PythonScript Example</h1> <script src="pythonscript.js"></script> <script src="app.py.js"></script> </body> </html>
補足 • pythonscripttranslatorをインストールするとpythonscriptというコマンドが使えるようになります
• これはpythonをjavasrcriptに変換します。
• wgetでDLしたpythonscript.jsには上記javascriptが必要とする関数が定義されています。
コンパイルの流れ 1. コードをPythonの
astモジュールでパースして抽象構文木に変換
2. PythonToPythonJSにより抽象構文木がPythonJSに変換
3. PythonJSの抽象構文木からJavascript生成
jQueryの使い方 • PythonScriptにjQueryバインディングがついてるのでそれを読み込んでおく
• J関数でアクセスできる($といっしょ)
• jQueryオブジェクトはj
bu%on = J("#newtask”) bu%on.bind("click", false, self.create)
j = J("#taskinput").j name = JS("j.val()")
Javascriptを取り込む • JS関数を使えばいい • 例)handlebarsをつかう
source = "<div class='view'>{{name}}<a href='#' class='destroy'></a></div>" + “” template = JS("Handlebars.compile(source)") name = self.model.name data = JS("template({name:name})")
注1)0.7.3だとJS関数の中で文字列をそのまま書くとコケる 注2)文字列も一度評価しないといけない感じ (+ “”)
開発Tips • livereloadを使えば、コードの更新を検知してコンパイル、ブラウザのリロードをしてくれる – http://blog.kzfmix.com/entry/1367924270
• よく監視させてるもの – Jade – Sass/Compass – PythonScript
いいところ、わるいところ • Javascriptの資産を手軽に使えるので便利
• 楽しい、超楽しい、そして超ハマる
• バージョン上がると「えー動かんやん、なんでやーーー!?」ってなる – 発展途上
はまったところ • jQueryバインディングにdelegateがなかった
– 自分で追加して解決 • ブラウザのイベントが受け取れない
– どうすんの? • クラスメソッドが使えない
– シングルトンの作り方が分からなかった • *args,**kwargsはサポートされているが
– 関数で渡せなくてこまった • “””が使えないのもテンプレート書くときにちょっとめんどくさかった
デモ • HakuinというSpine.jsインスパイアなフロントエンドMVCフレームワークを紹介します。
• 白隠正宗美味いので飲むといいよ
あなたが使うべきなのは、 PythonScript?
それともJavaScript?
CoffeeScriptでしたー \(^O^)/
javascript