ラベル 勉強会 の投稿を表示しています。 すべての投稿を表示
ラベル 勉強会 の投稿を表示しています。 すべての投稿を表示

2013年1月20日日曜日

エンジニアサポートCROSS 2013で発表してきました

先日ニフティさんが主催されたエンジニアサポートCROSS 2013におじゃまさせていただきました。このエンジニアサポートCROSSは年に1回、去年から開催されているらしいのですが、なんといっても大手企業さんが主催ということで
  • 参加者がとにかく豪華
  • プレモル飲み放題ケンタッキー食べ放題という夢の様な環境
  • それでいてきちんとWeb系/Make系コミュニティのギークっぽい雰囲気のカンファレンスになっている、スーツではない
という独自の魅力があるカンファレンスになっていました。

で、このエンジニアサポートCROSSにはアンカンファレンス枠があって、参加者が自由気軽にその場でプレゼンを行う事ができる場がありましたので、せっかくだからということで私も発表させて頂きました。


内容については先日リリースしましたダンゴルのサーバサイド側の裏話です。といってもスライド見れば分かる程度のものです。

来年は正規のスピーカー枠で参加したいです><

2012年4月15日日曜日

iphone_dev_jp 東京iPhone/Mac勉強会でしゃべってきた & 反省

昨日開催されましたiphone_dev_jp 東京iPhone/Mac勉強会で1セッションほどお話しさせて頂きました。
http://atnd.org/events/26946

当日の様子がニコ生で配信されていて、現在タイムシフトで視聴することができます。一週間視聴できるので、4/20までですかね。
http://live.nicovideo.jp/watch/lv88663921

このタイムシフト視聴であとから録画されたプレゼンが見られるというのが実に素晴らしくて、具体的には以下のようなご利益があるわけです。
  • 遠隔地の人(今回は大阪の人)が同時に勉強会に参加できる
  • 参加できなかった人があとから当日の雰囲気を見るのに使える
  • 発表者があとから自分のプレゼンを見て反省するのに使える
主催していただいた岸川さん、機材を準備していただいたshachiさんをはじめ運営の方々、ありがとうございます!この仕組が他の勉強会でも流行ればなぁとか思ってます。(自分で主催する気がなくてすんません><)

さてここからは反省会です。タイムシフトのお陰で普段できない「自分のプレゼンはどんな具合だったか」をあとから客観的に見直すことができるので、これは大いに捗るぞと思いちょっと見てみました。2時間30分ちょいぐらいから出てくる一番煩いのが私なのですが。

うん。これはひどい><
ともかく、悪かったところとまぁ良かったんじゃないってところを列挙してみます。
  • 喋るの早すぎ。テンションが上がると更に早くなって困る。
  • 落ち着きなさすぎ。動きがなさすぎるのもつまらないので動くの自体は良いと思っているけれども、動きに変な癖があってそれが煩い。
  • プレゼンの資料で前提知識というか説明が抜け落ちている箇所が多々ある。急ぎで作ったBlocksの資料とかが顕著で、なぜ最初にアプリをクラッシュさせてるのとか説明がない。唐突すぎる。
  • 超テンションで超フランクにやったおかげかツッコミがいただけた、ネタ議論っぽくなったのはすごく良かった。だが、うまく広げられてないのがもったいない。テンパりすぎ。
逆にプレゼンが非常にうまかったsonsonさんやfladdictさんのプレゼンを見て、自分のプレゼンと比較して気づいたところを列挙してみます。
  • 発表に安心感というか安定感というか落ち着きがある。このあたりは場慣れしていきたい。
  • 図の使い方、図による説明の仕方が上手い。直前まで作っていたとか手書きで仕上げたのはやっぱダメですね><
  • デモの回数・実施方法が適切。最もキモとなる1回か2回程度に抑え、あまり資料から離れないため、流れが中断されない。ちょっと自分のプレゼンはコードとデモに逃げすぎたため流れが悪くなっていた。必要であればコードは資料の方に書いておいて流れを切らないようにする(要するに手抜き資料を作ってはならない)

あとはこれを踏まえてどんどん場数を踏んで上達していきたいですね。ということでiOSの勉強会とかで発表者募集している方がいらっしゃいましたら是非宜しければ喋らせてください!

2011年7月18日月曜日

BPStudy #46 での発表資料 ViewController の作り方を公開してます

かなり旧聞になってしまいますが、 BPStudy #46 で話したときの資料をpreziにアップしてますので、ご覧いただけます。
http://prezi.com/7b_joy2lcfil/bpstudy-46/

発表時にお見せしたソースコードはちょっと公開出来なかったのでこの資料だけだとイマイチよくわからないのですが、要するに
  • View Controllerにサービスを書かないようにしてサービスレイヤを分離しろ
  • View Controllerの描画コードは、アウトレットの生成、アウトレットのデータ更新、アウトレットのレイアウトの3つに分離しろ
って言う感じのお話をしました。

すげー当たり前のことしか書いてなくて恐縮なのですが><
実際、人様のコードをメンテしたりバージョンアップしたりするお仕事をいただいていると、ほとんど全てのコードがこの問題に引っかかっていて非同期通信化すると動かないとかちょっとView Controllerの呼び出され方を変えると動かないとかあって、iOS開発者の皆さんがこういうところに気を配ってコードを書いていただければなぁそして私が楽できればなぁという思いで書いてみた次第であります。

2010年5月30日日曜日

第 2 回西東京 iPhone 勉強会に行ってきました

http://atnd.org/events/4014

メンツがそうそうたるメンバーでびっくりしました。内容も非常に充実していて、 iPhone 技術ネタとしては Bonjour と UIGestureRecognizer 、iPhone 技術以外のネタとしては iPhone アプリのネタだしの仕方と iPhone アプリで受託案件をした際のお話、最後に HTML5 で Keynote みたいなのを作ったよと言う話でした。

技術ネタは予習しておいたおかげで、聞くだけになってしまわなくてすごくよかったです。 UIGestureRecognizer は UIView.multiTouchEnabled を無視して複数指のジェスチャが取れるというネタが大収穫。あとは UIWebView のタッチを無理矢理検出する方法とか。

個人的には iPhone アプリで受託案件をした際の経験談が非常に面白かったです。作る方はまだ分かるのですが、契約だとかお金の話だとかそういう話になってくるとなかなか参考になるものがないので、非常に貴重でした。次回もこのネタは聞きたいです。

HTML5 は可能性を見た感じです。マルチタッチも検出できているし簡単なアニメーションも CSS で実装できているみたいで、 JavaScript (笑)なんて言えなくなりそう。

予想通りというか iPad 率は6割超えてました。 iPhone アプリリリース経験者も5割以上。

最後に懇親会で iPadによる iよせがき を試してみました。はい、単に岸川さん高山さんにiPad上にサインを貰っただけです>< ありがとうございます!

2009年8月23日日曜日

Python Hackathon #1に参加してきました

http://atnd.org/events/649

Python Hackathon #1に参加してきました。主催はいつものごとくvの人。しかしながら幸いにして雨は降りませんでした。


■以下、適当にダイジェスト
会場がいつもの四ッ谷健保会館ではなく、大久保の健保会館だったため場所を間違える人が続出。
今回のハンズオンは、
  • id:tokibitoのパーフェクトdjango教室
  • Google App Engineハンズオン Kayを使ってみよう
  • Pythonソースコード読書会
の3本立てだったのですが、Pythonソースコード読書会が参加者0人のためあえなく中止><

私はというと社内ブログの投稿順序を記録して利マインドメール投げたりするためのアプリをひたすら書いてました。が、前日夜遅くまで東方をプレイしていたせいで半分意識がもうろう・・・
気がついたらもう18時になって終わっていた感じです。PyPyとかwxPythonとかPyQtとかjQueryのカスタムイベントの話とかをしていたそうなのですが、意識が無くほとんど聞けずちょっと後悔。しかし後悔先に立たず・・・

18時半から毎度おなじみ@moriyoshiのすべらない話。

(音小さくてすみません、iPhone 3GSの限界)
相変わらず面白いなぁ。しかし本人曰く「納得いかない、やり直したい」とのこと。凄いw


■懇親会
普段は懇親会お断りしているのですが、今回は禁酒の上で懇親会に参加してみました。
http://www.yamachan.co.jp/index.html
場所は大久保のこの店。この手羽がまた美味しい!普段は飲み会など参加しても3分の1人前も食べない私ですが、今回は思わず一人前完食。話も盛り上がってなかなか充実したひとときでした。


■はんせい
  • 前日はちゃんと寝ておこう
  • ソースコード書いてばっかりないでもっと話そう
逆に良かった点としては、ちゃんと必要なライブラリとか実行環境とかを用意してきたためスムーズに作業に入れたところと、懇親会に参加したところかな。
当日のTwitterで見られたつぶやきのうちに、「話しかけるきっかけがないまま終わってしまった」というものがありましたが、納得。この手の勉強会は勉強会の最中よりも懇親会の方が話が弾んで名刺の交換もはかどるので、懇親会には出た方がお得ですね。勉強会の最中は相手もコード書いてたりでなかなか話しかけづらい雰囲気なんですよねー。その点、id:mopemopeさんとかは気さくに参加者に話しかけてくださってて凄いと思います。一見しゃべってるばかりで何もしてなさそうなのですが、話しかけてこの勉強会の緩い雰囲気を保ってくださっているんだなぁと感心。自分ももっともっと話していきたいです><

2009年6月26日金曜日

第5回 Python温泉に参加中



第5回Python温泉に参加中です。以下、随時更新していきます。



■2009/06/26
16:00ぐらい
到着。挨拶もそこそこに早速Mac引っ張り出して開発開発。


18:46
晩ご飯準備中、いすがないので大の大人が20人も階段に座り込んだりたったままプログラム書いたり>< カオス><

19:00
ご飯。Pyspaグッズ販売について説明。Pyspaマグほしい。


19:56
晩ご飯終了。@moriyoshiがパンツ一丁で走り回っていたりとか。

21:04
最近書いてなかったうちにたまったネタでBlog更新。
@nakamura001さんにiPhone 3GSの良さを語ったりとか。

22:02
ひたすらプログラム。眠い、集中力が落ちてきているが何とかがんばる。
iPhone 3GSの新機能 VoiceOverを使ってsayコマンド祭りを試みるが、vの人に「感動を覚えない」と一蹴される><

22:25
眠い・・・寝るー。

■2009/06/27
6:56
おきったー。およそ7時間半睡眠。よほど疲れていたらしい。あと食い過ぎで胃がもたれている感じなので今日は自重する。軽く散歩して目を覚ましてから昨日の続きのコードを書く。
周りは死屍累々。徹夜と思われる4人以外全員寝てる。


7:00
layoutSubviewsの中で[super layoutSubviews];を呼び出してなくてセルがうまく描画されていなかった問題を修正。

8:26
朝ご飯終了。Python温泉鉄の掟のため、朝ご飯タイム(8時〜8時半)は強制的にたたき起こされます。

9:27
くぼけーさんと政治談義とか?やはり渡米して政治学とか専攻されている方は凄い、外から客観的に日本が見られるというのはいいな

10:00
コーディングコーディング。YourTurnのリファクタリングを行ったり。

11:00
お菓子買い出し


12:17
お昼ご飯&コーディング。隣で@nishioさんとvの人がErlangやらHaskelやらについて熱く議論してますが、1mmも理解できないので無視。何か論文みたいなのを確認しているようだが・・・いや、この人たちレベル高杉><

12:21
現在のタイムライン:
コンパイラーとかインタープリターとかCPUとか自作する?

CPU自作の本の表紙が萌え〜で買いづらい

もっと萌え〜なのと一緒に持って行けばいい

むしろオライリー本を萌え〜で挟んで持って行く

「何それ蛇とか萌え〜なのかしらこわい」

12:27
Python談義。@aodagさんがWerkZeuk嫌いですとかそういう話。
@moriyoshiの実装力&PHP力 + @nishiohirokazuの理論 + @tmatsuoのドキュメントスキル + 料理スキルという化け物プログラマの話(しかもニートらしい)

12:34
でもcommit logがひどい「impl」「impl」「impl」「impl「implばっかじゃねーか!」

12:43
rabbitMQのお話、@everesさんとvの人が戦争中
rabbitMQはzero-configulationだよ(ユーザーの追加だけ)!rpmでもyamでもapt-getでも入るよ!

14:56
お昼寝して散歩してリフレッシュ。



15:34
化学実験(コーヒーにドライアイスを投下などする)。

16:27
順調に進まない。あとは設定をつけるだけとか高をくくっていたのだが
設定をつけるって超大変じゃないか・・・

17:45
晩飯撤収タイム。いまのうちに温泉に行ってくることにする。

18:36
カードゲームタイム!


20:12
ご飯終了。カードゲームの続き。
隣では企業偏差値ランキングとかで盛り上がっているが。

22:18
@moriyoshi先生によるLiveプログラミング会(1時間半!)これは熱い!
なぜかjava.applet.Appletでボールを跳ね返すプログラムを作って遊んでいた。

続いて@ianmluiceの作ったSnippleというWebアプリの解説。タスクキューを使ったバックグラウンド処理とか、「メールボックスのような設計」とか(ある人が処理を行ったら、フォロワー全員のメールボックスにキューで処理を投げて、ある人がそのストリームを読めるようにする)

22:46
会議室に降りてきてラストスパート!

23:28
幕間設定できた!!


Just a small step for the world, but a giant leap for me!!

■2009/06/28
1:32
音ファイル設定も下地が完成。後は家に帰って音声素材を探してきて追加するだけ。
どうやら明日には予定通りApp Storeに提出できそうです。

2:00
就寝。

7:00
起床。

8:00
朝ご飯。

9:14
宿泊代金も支払って暇タイム。

10:04
10時より第6回Python温泉受付開始しました。開始5分で28人枠埋まりました。

11:00
解散!おつかれさまでした!

2009年6月7日日曜日

java-ja #15 TDDとかペアプロとか

株式会社ドワンゴの本社にて開催された、java-jaの第15回勉強会に参加してまいりました。(ドワンゴさんありがとうございます!噂通りの社風が垣間見られておもしろかったです)
今回のテーマはTDDとペアプロ。TDDの権威である@t-wadaさん(http://twitter.com/t_wada)の講義+実際にTDD&ペアプロを体験する時間が設けられ、非常に充実した時間が過ごせました。

以下、Twitterにアップした感想を転載。


とにかく疲れる!そして慣れていないせいもあるがコードが進まない!普段の倍疲労して半分しかコードが進まないなら、明らかに生産性が下がっているように見える。でも違う、逆だ。こんなに生産的にコードが書けるとは思わなかった!

TDDを進めていくうちに、自分が意図しない考えや見落とし、typoなどの指摘が次々に飛び出した。書き上がったテストコードも普段自分が作っているものより綿密だ(もっとも普段はかなり手抜きなのだが)。TDDに反する進め方を指摘してストップすることもできた。

TDD自体はというと、テストケースが増えたり仕様が複雑化してきたりすると、途端に難易度が跳ね上がるな。一箇所直すと複数のテストがあっという間に真っ赤になる!新しくテストを作る判断とかも難しい、なによりテストを実行するのが面倒になったりする。jUnitMaxが素晴らしい理由を体感。

ペアプロの弱点は調べ物だな。明らかに調べ物をするときは個々人がググったほうが早い。だから熟練度が高くないとオーバーヘッドが大きくなってかえって非効率的。@yuruyoroさんには足引っ張って申し訳ない。スキルの差を埋める必要があるのも課題かなー、、、

個人的には一人でやる方が楽かな。人と話すのがへたくそ何だよなあ、、、いつもより疲れるのもそれが原因かも。ウォーターフォールがいけてないとはよく言うが、TDDやペアプロ自体にもたくさん課題があるのだなー、、、でも同じ課題満載なら、新しいやり方を開拓する方がいいよね、多分


TDDやペアプロは良いプラクティスですが、慣れないと実践は難しいですし、ウォーターフォールに代わる銀の弾丸でもなさそうです。そのことを実際に体で覚えることができたのが一番の収穫かな!

2009年4月17日金曜日

第1回java-ja温泉に行ってきます

http://java-ja.yoshiori.org/index.php?%E7%AC%AC%E5%8D%81%E4%B8%89%E5%9B%9E

以下、やろうと思っていることリスト
  • 昔作ったGAEアプリを作り直し、Werkzeugなんか使ってみたい
  • iPhoneアプリを作成する、こないだ書いたPythonのツールを移植するだけ
  • Javaはインストールすらしていません

2008年11月30日日曜日

DEMOsa Vol.5に参加してきました

DEMOsaについてはこちら
http://www.mosa.gr.jp/?p=2168

デザイナー系の人が自分のやった新しくて面白いことをライトニングトークみたいに発表する会でした。
スケジュールを見てもわかる通り、iPhoneネタが非常に多かったです。

最初の半分を遅刻して見逃してしまいましたが、以下感想を箇条書き。

■ポメラ
  • ノートPCが持ち込めない場所(会社とか会社とか会社)では大活躍できそうだ。言われてやっとその価値に気づいた。
  • でもポメラからPCにデータが移せない(USBメモリは全面禁止が当たり前なので)ので、結局意味がない気がしてきた。
  • 実際に触らせていただいたが、小さい。初代DSにそっくり。キーボードはいまいち。EeePCのどうしようもないキーボードに比べれば遥かによいが、MacBook Airのキーボードに慣れてしまうとやはりMacBook Airに軍配が上がる。

■Cookie
  • 絵文字だけでコミュニケーションする子供向けSNSのようなもの。
  • 実装はともかくとして、絵文字だけでコミュニケーションという発想は最高。これでイスラエル人ともヘブライ語を覚えずしてコミュニケーションできる訳だ。絶対にこれはiPhoneで実現するべき。

■iKotoの中の人
  • 日本文化に関するアプリばっかり作る理由は、文化を創るか。かっこいい。
  • 漫画とアニメ以外の文化は創らないと伝わらない。

■Afrous
  • ブラウザだけでマッシュアップが作れるというアプリ。らしい。
  • RSSもAPIもないただのWebページのDOMを解析してデータを抜き出して、youtubeやamazonと連携させていた。凄い!
  • たとえば日経新聞のトップページを切り出して強制的にRSS化することもできそうだ。

■RainbowNoteの中の人
  • 1万アプリものアプリケーションがあふれ変えるiTunes Storeの壁は高い、キーになるのはプロモーション
  • Moopf's App Store Review Scrapper itunesレビュー評価を見る
  • Mybefia 競合アプリとの人気の差を見る
  • Mobclix 国別の評価を見る

■BiND
  • 10分でWebページを作成していた。Webページをブロック単位に分割して、ブロックを追加したり編集したり。
  • 本当なら6時間かかる作業を10分でやったんだって!本当かどうかは信じがたいが、確かにページの編集速度は速かったしCSSをいっさい触ってなかった。
  • ロゴ画像の編集は本当に便利そうだった。

■MemoryTreeの中の人(宮田さん)
  • 空間にPostitみたいに画像を貼付ける!セカイカメラみたいだなぁ。もっともセカイカメラと違ってこちらは本当に実現されている(できることが限られているけど)。
  • iPhoneを振ってメモリーを投げ、メモリーを受け取るというアイディアがすばらしい!後から懇親会でお聞きしたところ一人の天才プログラマーとセットで1週間不眠不休でやって作ったそうな。
  • Motion Comics Playerなんて動画を電子書籍としてリリースしているけどほとんど売れてないらしい。それでもそこそこのApp Storeで上位だから電子書籍はよほど売れていないんだろうとのこと。
  • 以下、後から懇親会でお話ししたときのこと・・・
  • 貫禄がある人だった。ちょっと怖い。でもいい人。
  • 1万アプリのうちほとんどは有象無象、いいものを作ってプロモーションをきちんとやればいくらでも上位に入れるよ、とのこと。
  • ケータイなんかに比べてiPhoneを購入する層の嗜好は偏っているとのこと。いわゆる新しいものとかっこいいものが好きな人たち。
  • 実はこの宮田さん、世界で一番最初に着メロを作って大もうけした人なんだとか。なんてこった・・・
  • で、あまりにも着メロが大成功だったのでモバイルからは遠ざかっていたが、iPhoneでモバイルに復帰したそうな。それほどの可能性か!iPhone
■Niconの新製品は化け物か
  • http://www.nikon.co.jp/main/jpn/whatsnew/2008/1007_up_01.htm
  • 第一印象:どう見てもスカウターです
  • 第二印象:やりやがったNicon、やりやがった
  • 実際に体験しましたが、ヘッドフォン部分のフィット具合は凄くいいです。画質も凄い、目の前に画像イメージがわいてくる感じです。サイズは640*480らしいですが実際はもっと小さく見えます。
  • ディスプレイ位置の調整がかなり大変です。あと振動にも弱いです(大きくぶれて見えなくなるので、歩きながらはつらいと思います)。
  • しかしこれにGPSとアプリケーション作成プラットフォームをつけてiPhoneみたいにしたら面白そう
  • そうしたら私は絶対にライトセイバーアプリならぬスカウターアプリを作る。「戦闘力、たったの5か・・・ゴミめ・・・」

■ノルウェーの留学生の方とお話
  • 外人さんは未だにちょっと苦手かも
  • 彼曰く、留学している日本人とそうでない日本人は話す内容が全然違うらしい
  • 留学していない日本人は、日本の否定的なところを言われたときに鵜呑みにしてしまうが、留学している日本人は嫌な顔をする(そうではないという)らしい。う・・・

2008年11月10日月曜日

知っている人がメディアに露出すると有頂天になる小者=自分


何気なく@ITのフィードを眺めていたら、なんだかどこかで見た名前が・・・って!こないだのPython温泉にいたニコニコ大百科の中の人!!
うらやましいと思う反面、なんだか凄い悔しいです。自分もいつか日の目が当たる人間になれる時が来るんでしょうかね?
とにかく、勉強会にはえり好みせずどんどん参加することにしました。このカレンダーさえあれば勉強会の日程は分かるんだから、参加しなきゃ損ですよね。

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と思って驕り高ぶっていたらひどい目にあった・・・己の無知を痛感。

2008年10月24日金曜日

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

- 11:40
宿に到着、こんなに坂の上とは思わなかった

- 12:30
近くの来宮神社でうどん、なかなか美味しい
雨が降っていなければまたきて写真撮ろう

- 13:00
RTMにアクセスするだけの簡単なDjangoアプリを作ってみることにする
http://www.rememberthemilk.com/services/api/
http://repo.or.cz/w/pyrtm.git
こいつのソースを解析してRTMへのアクセス方法を調べる予定、まずは後回しにしてdjango側からつくってゆく

- 14:00
全員黙々とプログラミング作業中、なんだか会社にいるときよりまじめに仕事している俺がいる
さすがにこの空気で遊ぶ訳には・・・

- 15:42
なんとかURLとviewの設計まで完了、まだHelloWorldレベル
Modelは全然使ってないです^^

誰でも知っているどうでもいいTips:
Mac OS Xのpythonのインストール先はなんだか特殊なのでwhichして調べよう
   akisute bin$ which python
/Library/Frameworks/Python.framework/Versions/Current/bin/python
akisute bin$ cd /Library/Frameworks/Python.framework/Versions/Current/bin/python

2行目をコピーして、/bin/pythonを/libに書き換えるといい感じ。/lib/python2.5/site-packages以下がみんな大好きサイトパッケージです
後々の実験のために、ここのsite-packagesにrtm.pyをおいておく

- 16:03
そろそろRTMへのアクセスが必要なので、rtm.pyの解析を行うことにした
パブリックメンバーとして用意されているメンバーは4行目に定義されている
   __all__ = (
'API',
'createRTM',
'set_log_level',
)

あとtest()も自由に使えるようだ。
どうやらcreateRTM()すれば基本万事解決みたいですね。
ここでapiKey, secret, token, frob, signといったよくわからない単語が多数登場。RTMのAPIリファレンスをみて勉強し直すことにする

- 16:50
WireSharkなるソフトウェアが話題になる。
(パケット監視ソフトウェアらしい)
Mac OS XではCocoa動作ではなくてX11(多分GTK)で動作するとのこと
・・・こんなのを使うのかよ

- 17:22
RTM APIシステムについて調査完了。別記事にして詳しく書きます。腹減った・・・

- 18:12
温泉に入ってきました。さすが源泉掛け流しだぜ・・・いい湯でした

- 18:42
rtm.pyの使用により、RTMからタスク一覧を取得することに成功!
しかしrtm.pyが例外を吐いて止まってしまいました。
Traceback (most recent call last):
File "", line 1, in
File "rtm.py", line 381, in test
print [t.name for t in rspTasks.tasks.list.taskseries]
AttributeError: 'list' object has no attribute 'taskseries'
ソースを追ってみると・・・384行目
rtm = createRTM(apiKey, secret, token)
rspTasks = rtm.tasks.getList(filter='dueWithin:"1 week of today"')
print [t.name for t in rspTasks.tasks.list.taskseries]
さらに追いかける・・・85行目から
def get(self, **params):
"Get the XML response for the passed `params`."
params['api_key'] = self.apiKey
params['format'] = 'json'
params['api_sig'] = self._sign(params)
json = openURL(SERVICE_URL, params).read()
LOG.debug("JSON response: \n%s" % json)
if _use_simplejson:
data = dottedDict('ROOT', simplejson.loads(json))
else:
data = dottedJSON(json)
rsp = data.rsp
if rsp.stat == 'fail':
raise RTMAPIError, 'API call failed - %s (%s)' % (rsp.err.msg, rsp.err.code)
else:
return rsp
rsp.statにはアクセスできるが、
rspTasks.tasks.list.taskseriesにはアクセスできない・・・
返ってきたJSONをよく見てみる
{"rsp":{"stat":"ok","tasks":{"list":[{"id":"3161896","taskseries":{"id":"......
なるほど、listがリストになっている。
rspTasks.tasks.list[0].taskseriesというふうにしなくちゃならないんだな。

- 21:26
ご飯も食べ終わってそれでもひたすらソースを書き続ける・・・
引き続きDjangoのview作成を進めるが、rtm.pyの結果をJSON形式にできないことが判明(DottedDictという特殊な型)
自分でJSON変換を書くしかないのかな?オブジェクトをJSONに変換するライブラリなんていくつもありそうだけど

それからもう一つ問題が、
Djangoのデバッグ時のエラー画面(エラーの詳細情報を表示してくれる)がうまく表示されない。

TemplateSyntaxError: Caught an exception while rendering: unknown encoding: X-MAC-JAPANESE

- 22:34
増田さんがあっというまに問題を解決してしまいましたとさ・・・
かろうじて何をやっているのか見えた箇所をメモ
find -r? ./ -name 'sitecu*.py'
C Pythonを使ってC言語のstdlibのlocaleモジュールにアクセス?
QuickSilverを利用?
export LANG=ja_JP; python
>>> import sys
>>> dir(sys)
>>> sys.getdefaultencoding()
>>> import locale
>>> print locale.getdefaultlocale()
>>> assert False, locale.getdefaultlocale()
>>> print '\n'.join(sys.path)
python -vで読み込まれたパッケージがすべて表示される
/usr/local/bin以下のシンボリックリンクをdmgパッケージからインストールしたPython.org公式のPythonが上書き(というか優先的に読み込み)している
結論から:
1:python.org公式の2.6にアップグレードする。問題が修正されている。
2:/System/Library以下のPython2.5.1を利用する、Macシステム標準のPythonはMacPortsから大量のパッチがあたっているらしい。
公式の2.5.2はそれらのMac用のパッチがあたっていないためそのような問題が起きる・・・?
(Cocoaを利用してロケールを読み込んでいるから?envを無視している?)
3:どちらもいやなら、sitecustomize.pyを作って修正を書き込む

よくわからないがとにかくpythonを2.6にアップグレードするのが最善なようだ。

- 0:46
python2.6へのアップグレードは問題解決にならなかった。
確かにパッチはあたっていたが、locale.getdefaultlocale()の値を書き換えるようなパッチではなく、
getdefaultlocale()の値がX-MAC-JAPANESEの場合はsjisに振り返るようにしているだけで、
直接locale.getdefaultlocale()の値を利用しているdjangoの場合には使えないようだ。

locale.getdefaultlocale()が正しい値を返すようにするにはAppleがビルドしたpython(パッチ適用済み、要するに2.5.1)を使うしかない。

そこで回避策を考えつかれた:
エラーで落ちる原因はX-MAC-JAPANESEを処理するためのcodecが登録されていないから見つからないでLookupErrorになっている
X-MAC-JAPANESEの正体は単なるshift-jisなので、shift-jisのコーデックを利用して新たにX-MAC-JAPANESEのコーデックを登録すればいいということらしい。

あっというまにパッチが完成、試してみると・・・見事に通った!これがハッカーの仕事か・・・

あとFinderで隠しファイルを表示したり/usr/binを表示する方法が地味にわかった
http://goonsh.ddo.jp/fg/2005/01/18/on-finder
http://netafull.net/macosx/014755.html

Spotlightの有用性もわかった
明日はQuickSilverを入れてみることにする

今日はもう寝る!!