2008年10月27日月曜日

[pyspa]Python温泉おつかれさまでした

普段Blogを愛読しているこの人に会えたのでちょっと嬉しい
アクセンスの中の人からPythonぬいぐるみをいただきました
本物のHackerとはどういう人種か、大変勉強になりました
っていうかアクセンスすごいよアクセンス ← 今の今までどういう会社か知らなかった

Python温泉、2泊3日お疲れ様でした。無線LAN完備の温泉完備の布団完備(?)の食料完備で大変有意義な時間を過ごすことが出来ました。本物のHacker集団はバイタリティがすごい。ニコ動の(正確にはニコニコ大百科の)中の人とお話しできたり、実は毎日自分がクレクレ厨をしていた相手が取締役と社長さんだったりとあとから思い返せばなかなか冷や汗ものでしたが、まぁ旅の恥はかきすてっていいますから・・・駄目?

一番勉強になったのは「徹底的な探求心」、感じ取れたのは「集中力」、自分に必要なのは「現在の環境に対するチャレンジ」。たとえばEclipseをやめてVimとEmacsでPythonを書いてみたりとか。

2008年10月26日日曜日

第4回Python温泉 参加中 3日目

- 9:00
おはようございます・・・
テキストエディタをmiからSmultronに入れ替えてみました
制御文字を表示したときの半角スペース表示があまりにも汚いところ以外は最高です。
でもemacsとかviも使えないと困ると思いました

- 9:47
朝早いです・・・
とりあえず家に帰ってからやるべきTodoリストを作成しておきます。

MacPortをインストール、GUIもあると便利なのでインストール
http://komposition.jp/2007/09/porticus/

MacPortからnmapをインストールする

JSONをevalして意地でも画面に出す

2008年10月25日土曜日

第4回Python温泉 参加中 2日目

- 8:00
起床。眠い!

- 9:00〜11:00
持ち込んだカルドセプトDSが大活躍してくれました。

- 11:20
温泉でさっぱりしたところで仕事開始。
まずは昨日のまとめを行う。増田さんと俺の違いは何?何を改良すればあのように優れたハッカーになれるか?

- 12:00
お昼ご飯を食べながら会社の仕事をやったりメールチェックしたりRSSをチェックしたり

- 13:00
来宮神社まで遊びにいく、神社まで遊びに行くというと、某吸血幼女が頭に浮かんだりするがいっさい関係ないと思います

- 14:23
神社に行く予定がなぜか途中の有名人の別荘に足を取られて1時間以上ガイドの人のお話を聞くことに・・・
遅れている仕事を取り戻す

- 16:05
django.conf.globalsettings.py

# List of processors used by RequestContext to populate the context.
# Each one should be a callable that takes the request object as its
# only parameter and returns a dictionary to add to the context.
TEMPLATE_CONTEXT_PROCESSORS = (
'django.core.context_processors.auth',
'django.core.context_processors.debug',
'django.core.context_processors.i18n',
'django.core.context_processors.media',
# 'django.core.context_processors.request',
)
django.core.context_processors.mediaがメディアファイルのURLをテンプレートに渡されるコンテキストに勝手に渡してくれる
strutsに例えるならば、request.setAttritebute()を勝手に裏でやってくれるところ
ここで、
    return {'MEDIA_URL': settings.MEDIA_URL}
としているので、テンプレートの中でMEDIA_URLが使えるはず。使ってみよう

- 20:03
4時間ぐらいずっとdjango.views.static.serve()について悩みっぱなし。
設定は絶対に間違っていないはずなのに、staticファイルが何度やっても読み込めない・・・なぜ?
こんなエラーが出る:
Page not found: /Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/django/contrib/admin/media/css/django_todo.css
一体全体どうしてdjango/contrib/adminなんて所を見ているのかどうかわからない・・・

- 20:10
増田さんありがとう(またかよ)!
つまりはこういうことでした。settings.pyの以下の行が原因。

# URL prefix for admin media -- CSS, JavaScript and images. Make sure to use a
# trailing slash.
# Examples: "http://foo.com/media/", "/media/".
# MEDIA_URLやdjango.views.static.serveのdocument_rootと同じ値を設定すると、
# django.adminの要求するパスとかぶってしまうためうまく動かない!
ADMIN_MEDIA_PREFIX = '/media/'
#ADMIN_MEDIA_PREFIX = '/admin_media/' のように書き換えればうまくいくことがわかりました
これでなんとか先に進めそうだ!ラストスパート!!

- 23:19
無事にJavaScriptとCSSを参照することに成功するものの、こんどはUnicodeとJSONではまってしまう・・・
1:'\u71c3\u3048\u308b\u30b4\u30df\u3092\u51fa\u3059\u7528\u610f\u3092\u3059\u308b'こんな感じの文字列で画面に送られてきてしまう。日本語として出したいのだが・・・
2:そもそもJSONがeval()できない!
eval('{a:b}');
これを実行するとエラー・・・

1時間近く格闘して解決。まず1については、これは評価されていない素のユニコード文字列だから。これをそのままtext/plainとして画面に出しているから記号のまま画面に出てしまうようだ。Python側でこれをどうこうすることはできない(Unicodeとして正しいから。出力時に勝手にきちんとした日本語にされる訳で、データとしてはユニコードとして正しい。u'\u71c3'とu'燃'は全く同じ。)解決するためには、いったんこの文字列をJavaScriptでevalして評価してもらう必要がある。

2については、そもそもJSONとして形式が間違っている。
プロパティ名と値はクオテーションする必要がある。
eval('{"a":"b"}');
これが正しい。しかしこれでもエラーになる。なぜか?
http://d.hatena.ne.jp/language_and_engineering/20081022/1224597688
このページをみて解決。まさに書いてある通り。
全体を括弧で囲まないと、"a"がジャンプ用ラベルとして扱われてしまう。括弧で囲めば{}以下がオブジェクトとして扱われる。
ということで、正解はこう
eval('({"a":"b"})');
JSONでやたら括弧が多い理由がやっとわかった!!
それにしても、たかがJSONと思って驕り高ぶっていたらひどい目にあった・・・己の無知を痛感。