« Re: 小町算 |Main| est! est! est!な日記 »

« PythonとJavaScriptの微妙な違い | JavaScript | »

jQuery勉強日記

Ajax, Ajax, Ajax...
= 日本全国ラボめぐり:グループウェアの新しい使い方「ひとり言スレ」──サイボウズ・ラボ - ITmedia Biz.ID

もうちょっとマシな写真はなかったのかと問いたい…orz


= Ratingを使おうかと思っていたけど、 微妙に気に入らないところがあって、修正するよりシンプルなのを自分で作る方がいいと判断。
= jQueryに値を渡すためにDjangoのカスタムテンプレートタグ作っててちっともAjaxの勉強になってない!
$(".rating .button").click(function(){
  alert("hello");
  return false;
});
が動かないなぁと思ったら
$(document).ready(function(){
})
で包まないといけないのか…

お、動いた動いた。


= JavaScriptはデフォルトでグローバル変数なのでx = $(this); とか書けば$(this)の中身について Firebugのコンソールでxって書いて中身をインスペクトできる。
= なるほど。jQueryオブジェクトはDjangoのクエリセットみたいなものか。
for(var b in $(this).siblings()){
  b.removeClass("selected");
}
とかやって怒られたけど、$(this).sibling()は 「エレメント(にラッパかましたもの)の配列」じゃなくてクエリなんだな。 [0]でアクセスしたときにエレメントオブジェクトらしきものが返ったのでエレメントの配列かと思った。
  btn = $(this);
  btn.addClass("selected");
  btn.siblings().removeClass("selected");
これでOK。選択したものだけハイライト表示になって、残りのハイライトが解除される。

なおbtnの前にvarが付いていないのはインスペクトして遊ぶため。


= API/1.1.2/DOM/Traversing - jQuery JavaScript Library addのあるところにremoveもあると思うじゃないか。 removeはtraversingじゃなくてmanipulationなんだそうだ。 API/1.1.2/DOM/Manipulation - jQuery JavaScript Library
= Firebugの対話的インタプリタを使って、Pythonでコーディングしているときと同じように対話的にコーディング。
>>> btn[0]
<span id="rating_z_990" class="button selected" style="background-color: rgb(255, 255, 136);">
>>> btn[0].id
"rating_z_990"
>>> btn[0].id.split("_")
["rating", "z", "990"]
>>> bits = btn[0].id.split("_")
["rating", "z", "990"]
>>> ["", bits[2], "rating", bits[1], ""].join("/")
"/990/rating/z/"
>>> url = ["", bits[2], "rating", bits[1], ""].join("/")
"/990/rating/z/"
>>> $.get(url)
GET http://localhost:8000/990/rating/z/404 (78ms)
XMLHttpRequest channel=[xpconnect wrapped nsIChannel]
なんか想像以上に簡単だ。
= ウェブ魚拓 - Wikipedia。 へー。こんなサービスが。
= urls.pyにこんなの書いて
    (r'^comment/(?P\d+)/rating/(?P.)/$',
     views.comment_rating),
views.pyにこんなの書いて
def comment_rating(request, comment_id, value):
    print comment_id, value
    return HttpResponse(value)
作りかけのrating.jsにこんなの書いて
  bits = btn[0].id.split("_");
  url = ["", "comment", bits[2], "rating", bits[1], ""].join("/");
  $.get(url, function(data){
    alert(data);
  });
レーティング用のボタンをクリックするとalertデター! なんだAjaxって簡単じゃん(ぉ)
= get_or_create。データベース API リファレンス : Django オンラインドキュメント和訳
= あ、なるほど、TraversingのaddはDOMツリーへのエレメントの追加じゃなくて、 クエリへのクエリの追加なんだな。(なお用語が正しいかどうかは知らない。)
API/1.1.2/DOM/Traversing - jQuery JavaScript Library addのあるところにremoveもあると思うじゃないか。 removeはtraversingじゃなくてmanipulationなんだそうだ。 API/1.1.2/DOM/Manipulation - jQuery JavaScript Library
エレメントをDOMツリーに追加するのは例えばbefore。やっぱりmanipulationのところに書いてある。 addの引数に前とか後とか場所を指定する要素がないからおかしいと思った。
= PythonとJavaScriptはリテラルの表記方法がほぼ同じ。 なのでPythonの辞書をstrで文字列化して返し、
def comment_rating(request, comment_id, value):
    (中略)
    return HttpResponse(str(comment.get_rating()))
JavaScriptでevalすると…

残念、世の中そこまで甘くはなかった。

>>> x
"{'color': 'ff8866', 'valstr': '-0.78 -7/9', 'fval': -0.77777777777777779}"
>>> eval(x)
invalid label
[Break on this error] 
{'color': 'ff8866', 'valstr': '-0.78 -7/9', 'fval': -0.77777777777777779}

=
  $.getJSON(url, function(json){
    x = json;
  })
>>> x
Object color=99ff00 valstr=0.18 6/34
>>> x.valstr
"0.18 6/34"
>>> x.fval
0.17647058823529413
やっべ、激甘だったw。 少なくとも文字列がキーで、値が文字列や浮動小数点数の辞書なんかは 「Pythonの辞書→(Python組み込みの関数str)→文字列→(jQueryのgetJSON)→JavaScriptのハッシュ」 と素通しできることがわかってしまった。これは面白い。
= なんかもうAjaxでレーティングする機能がほとんどできちゃったかも。 後は今はきちんと集計しないでランダムな値を返しているので、 きちんと集計するようにすればいいだけか。
= できた。
= あうあう、 プレビューがこけるようになっているな。 レーティングを表示する部分で、プレビューの場合だけ Commentオブジェクトの代わりに辞書が来るんだった。 テストを走らせる必要があるか…。 テストを走らせるのに30分くらいかかるようになっていて困りもの。 そろそろ貧弱なノートパソコンじゃなくてラボのマシンで開発できるように整えないといけないか。
= おなかすいた。テスト終わらないな。

テスト終わった。23時15分。むう。

フィードもこける。 ユーザ情報が渡っていないから。レーティングのユーザごとの投票を見るところでこける。

4つのエラー全部がKeyError: userだからここさえ直せば直ると思うけど、 もう一回テスト掛けたら家に帰れなくなりそうだ。 諦めて明日にしよう。


= 帰りの電車で以前投票したのがどれかも表示するようにした。

Ajaxは思ったより簡単だった。


= 寝る前に日本全国ラボめぐり:グループウェアの新しい使い方「ひとり言スレ」──サイボウズ・ラボ - ITmedia Biz.IDにいくつか言いたい。

取材って難しいんだなぁ。いまいち伝わってない。

「ひとりごと」を「ひとり言」と書くのは僕は嫌いだ。

「Python温泉(開発合宿)をきっかけにまったく新しいプロジェクトを開始して開発」 とグラフに書かれるとは思わなかった(笑) 業務時間の50%を温泉に行っている疑惑がっw

ちなみにこの「まったく新しいプロジェクト」ってのがどう書くorgです。 古いプロジェクトはまだ芽が出てませんorz。

「愛用の「Happy Hacking Keybord」を購入」って聞いたら誰でもProfessional買ったと思うだろうけど、 単にデフォルトで付いていたDELLのキーボードが嫌だったのと、 個人予算での物品購入の手始めとしてとりあえずHHK Liteを買ってみたというだけだったりする。 初めて買ったものは「愛用」とは言わないよなぁ。 僕愛用しているって言ったかなぁ。 愛用しているのはThinkpadの赤いぽっちです、たぶん。

あとトラックボールは家の押し入れで3年くらい眠ってたやつ。 DELLのマウスが嫌だったので家から持ってきたのだけど、 人に貸していたmac miniが帰ってきてポインティングデバイスが必要になったので ラボ用にもう1個買ったのだった。

「京都大学在学中にインタフェース関連の研究」…してないよなぁ。 したのかなぁ。 ゲノムの4次元可視化はインターフェイス関連の研究だったのかなぁ。

「事業領域内において、すなわちWebアプリケーションなどの開発という制限があるものの」 って、僕どう書くorgが初Webアプリなんだけど、それまでの3ヶ月間は遊んでいたということ?w

「たいていのひとり言にはアドバイスが付くようになった」はいくらなんでも事実に反するというか、 そんなにアドバイスが付いたらひとりごとじゃないというか、 「おなかすいた」とかにアドバイスが付いたら嫌だ。 「アイデアレベルでアドバイスを得たい」というモチベーションで始めたわけじゃないもんなぁ、そもそも。

まぁ、まとめると、取材して原稿書く人は大変だなぁ、 100%インタビュイーの考えていることをくみ取ることは不可能なのだろうけど、 事実と違うことが書いてあるとやっぱり反論したくなるわけで。


= 昨日か一昨日に書いたけど結局貼らなかった文章に手を加えて貼る。

カンファレンスに参加することによって得られる情報や人脈などの参加者その人にとっての価値が、 参加費16000円や消費される時間などのコストを上回るなら、 参加することは合理的。

そのカンファレンスによって運営側がいくら儲けたのかは別にどうでもいい。 たくさん儲けたのなら、 それは安価な仕入れ価格で多くの人に求められる商品を作り出したということなのだから、 そのビジネス能力に対する正当な報酬なんじゃないかと。

自分も儲けたいのであれば、自分も同じような商売をすればいいだけ。 実際やってみると思ったよりも難しいかも知れないし、思ったよりも簡単かも知れない。 それはやってみなければわからない。

逆に、不当に高い値段だと憤りを感じるのなら、より安価に提供するために行動すればいい。 他人のビジネスを「不当に高い」と非難したって仕方がない。 その価格で買っている人がいて生態系として成立しているわけだから叩いても不毛な争いになるだけだ。

とここまで書いてやっぱり公開しないことにしていたのだけども、 考え直してやっぱり公開。

争いは無益だ。

有償で「不当に高い疑惑」のあるCSS Niteと、 無償で「たとえどんなにつまらない内容で来場者が退屈したとしてもクレームはお門違い」 とか言われちゃってるShibuya.JSとは、 まぁかなり対照的なカンファレンスなので、 比較して色々言うのもやり安いのだろうとは思う。 でも現実世界はデジタルではないので、 たいがいのものに「間」がある。 2点だけに注目するよりも、間も含めた複数の点を考えた方が、 より立体的に考えられると思う。

CSS Nite公式ブログ:収支概算を公表します:[Web標準の日々]:二日で16000円 、Shibuya.js:0円、 の他に、参加費無料だけど海外から人を呼んできて同時通訳付きで発表してもらったりした Python Workshop the Edge 2007(2007年6月30日開催) と 3500円のLightweight Language Spiritあたりを混ぜるといいのではないだろうか。

単純に金額だけ見ると、 shibuya.jsやPython Workshop the Edgeは 「たとえどんなにつまらない内容で来場者が退屈したとしてもクレームはお門違い」 なカンファレンスで、 CSS NiteはLL Spiritの4倍以上の濃度だと言うことになるが、どうだろうか。

Python Workshop the Edgeで発表した僕は、 「無償だから来場者を退屈させてもいい」 なんて思ったりはしなかった。 今、いくらだったのか検索してみて無償だということを初めて知った。 なので、カンファレンスが無償だったらどう、有償だったらどう、という議論には疑問を感じる。 有償のカンファレンスは来場者が退屈したら参加費を返すってわけでもないだろうし、 無償のカンファレンスであっても来場者は貴重な時間を割いてきているわけだからむげにはできないだろう。

結局のところ、何に価値を見いだすかは人によって違うわけで、 他の人間がそれをどうこう言ったって仕方がないんだよなぁ。 金額の話だって、CSS Niteに行くお金は出るけども Shibuya.jsに行くお金は出せない、って会社もあるかも知れないし、 そういうシチュエーションでは単純に金額で比較できないもんなぁ。

うん、で、結局何が言いたいんだ、僕は? 「有償v.s.無償という構図にしない」「CSS nite v.s. shibuya.jsという構図にしない」 「っていうかCSS Niteで儲かってようが儲かってなかろうが別にいいじゃん」 「高いカンファレンスに腹が立つ人たちで集まって 『安いカンファレンス』カンファレンス(実体はただの飲み会)とかやりませんか?(ぉ」

トラックバック(Trackback)

Trackback URL: http://www.nishiohirokazu.org/mt/mt-tb.cgi/623

ご意見・ご感想をお送りください(フィードバック)

(フィードバックはメールで送信され、基本的に表示されませんが、内容によっては公開させていただくこともございます。ご了承ください。Your comment doesn't appear the page immediately. If the comment has value to other people, it will be put on the page or subsequent entries. Thank you.)

上の情報は、いずれも未記入でかまいません。 All of above questions are optional.