kay-jpmobile

4,267 views

Published on

Google App Engine用フレームワークKayで、日本の携帯電話に対応するためのモジュールについて発表したものです。

Published in: Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
4,267
On SlideShare
0
From Embeds
0
Number of Embeds
315
Actions
Shares
0
Downloads
4
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

kay-jpmobile

  1. 1. Kay-jpmobile末永 匡 a.k.a. グニャラくん (株)wktk
  2. 2. 開発の経緯∗ Kayでとにかく何か作ってみよう∗ 掲示板サイトを作ろう∗ 携帯に対応したい∗ 携帯に対応するなら絵文字も対応したい
  3. 3. Django-bpmobile∗神∗ パクろうインスパイアされよう
  4. 4. Kay-jpmobile命名の由来∗ Django -> Kay ∗ これはいいけど∗ bpmobile-> jpmobile ∗ 苦肉の策
  5. 5. Kay-jpmobileでは何ができるの?
  6. 6. Kay-jpmobileでできること (1)∗ 推奨文字コードでリクエスト・レスポンスを扱う ことができる ∗ DoCoMo / au : cp932 ∗ Softbank : utf-8
  7. 7. Kay-jpmobileでできること (2)∗ ビューでキャリアの判定を行う ことができる ∗ request.agent.is_docomo() など∗ テンプレートでキャリアの判定を行うことができ る ∗ {% if agent.is_docomo %} DoCoMo {% endif %}
  8. 8. Kay-jpmobileでできること (3)∗ 絵文字を受け取り、保存することができる ∗ 内部文字コードとして、Google絵文字コードを採用∗ テンプレートで絵文字を扱うことができる ∗ キャリアごとの絵文字、もしくは<img>タグに変換 {{ "¥U000fe000"|emoji_html_filter }} ∗ 識別名を用いた埋め込み {% emoji_html "BLACK SUN WITH RAYS" %}
  9. 9. Kay-jpmobileはスマート!?∗ テンプレートでスマートにキャリアの判定を行う ことができる ∗ スマート…?
  10. 10. どういうこと?{% if agent.is_docomo %} DoCoMoです。{% else %} {% if agent.is_docomo %} {% if agent.is_ezweb %} DoCoMoです。 EZWebです。 {% elif agent.is_ezweb %} {% else %} EZWebです。 {% if agent.is_softbank %} {% elif agent.is_softbank %} SoftBankです。 SoftBankです。 {% else %} {% else %} その他です。 その他です。 {% endif %} {% endif %} {% endif %}{% endif %}∗ Jinja2のelifのおかげじゃねーか!
  11. 11. Kay-jpmobileでは何ができてないの?
  12. 12. Kay-jpmobileの実装∗ テスト実装という名のもとに、結構ひどい実装∗ でも、ないよりも、あったほうがマシだよね
  13. 13. middlewareで何やってるか∗ Request ∗ 各携帯の推奨エンコーディングを、utf-8に正規化 ∗ 絵文字もGoogle絵文字コードに正規化∗ Response ∗ utf-8を、各携帯推奨エンコーディングに変更 ∗ (Google絵文字コードを各携帯の絵文字コードに変更)
  14. 14. werkzeug.Request∗ Request.args/formはImmutableMultiDict ∗ Request.charsetをキャリア推奨charsetに変更 ∗ ImmutableMultiDictをコピー ∗ 絵文字コードをGoogle絵文字コードに変換 ∗ 新しいImmutableMultiDictを作り、args/formに代入
  15. 15. このアプローチの問題点∗ 携帯電話からのアクセス時に、必ず request.args/formが評価されてしまう ∗ もともと、request.args/formは遅延評価 ∗ 本来は、遅延評価にすべき
  16. 16. 解決策の提案∗ Kayのsettings.pyで、Requestのクラスを指定できれ ばよい? ∗ REQUEST_CLASS = ‘jpmobile.class.Request’ ∗ klass = import_string(self.app_settings.REQUEST_CLASS) ∗ local.request = request = klass(environ)
  17. 17. DoCoMoでcookieが食えないヤツ∗ 基本cookieが食えることを前提∗ Cookieが食えないDoCoMoだけ、iモードIDを用いて 疑似Cookieを作ってあげればOK? ∗ iモードIDをキーとして、Response.cookieを保存。 ∗ Request.cookieは、iモードIdをキーとして保存先から 取得∗ やっぱりRequestクラスを指定できるようになると いいのかも
  18. 18. まとめ∗ DoCoMoの件がなんとかなれば、それなりに実用的 になるのではないか∗ 是非patchを!∗ このIssueでマジ困っているので誰か助けて http://code.google.com/p/googleappengine/issues/ detail?id=4388
  19. 19. Jinja2の拡張∗ 意外とサンプルが少なく、書き方で悩んだ ∗ のでメモ∗ contextに渡っている値の取り出し方 ∗ agentの値をfilter内で取り出したかった ∗ parse時にnodes.ContextReference()を埋め込んでおけ ばOK

×