2009-03-01(日) [長年日記]
■ かなりゲームばかりしていた
しかし、ぜんぜん上達している実感がない。マウス+フルキーボードはわりと得意だったが、家庭用コンソールのコントローラはどうも慣れないんだよなぁ。
なんつって、たんに歳のせいだったりしてな。反射神経は明らかに落ちてるし。レッスンがほとんどバッドかノーマルどまりだよ。とほほ。
2009-03-03(火) [長年日記]
■ セルジオ・メンデス
(結婚記念日的なアレにより)BLUE NOTE TOKYOでセルジオ・メンデスを聴いてきた。ラテンはええのぅ。
ライブと言えば爺さん婆さんのしか行かないウチの夫婦だが、セルジオは最近ラップを取り入れたCDを出すなど、若い若い。今日もMais Que Nadaのラップバージョンが超盛り上がりですよ。
2009-03-04(水) [長年日記]
■ RIDEBACK(ライドバック) 10 (IKKI COMIX)(カサハラ テツロー)
なんだか今日はマンガの日だなぁ。ゲームもしてない。
『RIDEBACK』もこれで最終巻。個人主義の巻き込まれ型の主人公が、しだいに世界規模の紛争に翻弄され……という話が、安直な世界系に発散することなく、きちんと個人的な着地を決めるという締め方はいいよね。あとがきを読んでいて、編集者と良好な関係のもとで描かれたのかな、と思った。
あんまり売れない気はするが(アニメの方はどうなんですかね、あんまり評判聞かないけど)、おれの中では名作。
■ ベントラーベントラー 1 (アフタヌーンKC)(野村 亮馬)
アフタヌーンで連載中の、オールドファッションドSF。ギャグだけど、「ぎゃはは」じゃなくて「くすくす」系。はっきりいって大好物だぜ。
つーかさ、すみちゃんがいいよね(←メガネならなんでもええのかと)。
■ 鉄腕バーディー EVOLUTION 1 (ビッグコミックス)(ゆうき まさみ)
掲載誌変更を「3年の経過」で表現するのはうまい手だと思ったけど、流れ的にはあんまり変化がないので、安心できる一方で驚きも少ないな。まぁ、ちゃんと続いてくれてよかった。引き続き読む。
ここまでSF。
■ バクマン。 2 (ジャンプコミックス)(小畑 健)
『バクマン』の面白さは、『ガラスの仮面』の面白さに通じる気がする。それも『ガラスの仮面(理系版)』……というか、亜弓を主人公にした『ガラスの仮面』というか。
劇中劇が面白いというのがまず共通なんだけど(「バクマン」の描き方はかなりあっさりだけど)、それを作り手の側から描いているのも同じ。天才 vs 秀才という構図も同じ。ただ、「がらかめ」が天才サイドから見た物語であるのに対して、「バクマン」は秀才サイドからというのが違う。
「がらかめ」がその「解説パート」を主人公以外の人物に頼らざるを得ないのに対して、「バクマン」は作り手本人が理解しながら語ってくれるので、そりゃぁ迫力が出るよな。まさに少年誌向きだ。
2009-03-05(木) [長年日記]
■ tDiary: ニコ動プラグインが動いてない?
朝からメンテだったニコ動だが、その前後(前からだったような気がする)でtDiaryのnicovideo.rbプラグインが動作しなくなっていた。
ちょっと調べてみると、$SAFE = 1のとき(また$SAFEか!)に、rubyのバージョンに関わりなく(そう、1.9がらみではない)Insecure Operaionが出るようになっている。
% irb187 -ropen-uri irb(main):001:0> open 'http://www.nicovideo.jp/api/getthumbinfo/sm2351685' => #<StringIO:0x84882dc> irb(main):002:0> $SAFE = 1 => 1 irb(main):003:0> open 'http://www.nicovideo.jp/api/getthumbinfo/sm2351685' SecurityError: Insecure operation - require from /home/sho/lib/ruby19/1.9.1/open-uri.rb:260:in `require' from /home/sho/lib/ruby19/1.9.1/open-uri.rb:260:in `open_http' from /home/sho/lib/ruby19/1.9.1/open-uri.rb:767:in `buffer_open' from /home/sho/lib/ruby19/1.9.1/open-uri.rb:203:in `block in open_loop' from /home/sho/lib/ruby19/1.9.1/open-uri.rb:201:in `catch' from /home/sho/lib/ruby19/1.9.1/open-uri.rb:201:in `open_loop' from /home/sho/lib/ruby19/1.9.1/open-uri.rb:146:in `open_uri' from /home/sho/lib/ruby19/1.9.1/open-uri.rb:669:in `open' from /home/sho/lib/ruby19/1.9.1/open-uri.rb:33:in `open' from (irb):3 from /home/sho/bin/irb19:12:in `<main>'
$SAFE = 1にするとエラーになる。さらにおかしなことに、このままURIを変えると、エラーにならないパターンがあるのだ:
irb(main):006:0> open 'http://www.nicovideo.jp/' => #<File:/tmp/open-uri20090305-6639-179hxn2-0> irb(main):007:0> $SAFE => 1
何も変えてないんだからニコ動のせいだと思うけど、わけわからんなぁ。ちょっと時間がないのでメモだけしてまた明日。
追記
その後、もうちょっと追いかけてみたら、www.nicovideo/api/*がext.nicovideo.jp/api/*に301リダイレクトされるようになっていた。301が間に入ると、Insecureになるっぽい。
というわけで、原因追求はあとまわしにして、こんな感じでなおった: パッチ
2009-03-06(金) [長年日記]
■ 大阪出張のついでにニコマス京都クラスタに接待してもらった
久しぶりに大阪出張があったので、例によって超時空幹事に連絡をしたらちゃんと飲み会をセッティングしてもらった。18:00@京都。
そして、店に入り乾杯をするとおもむろにPSPを取り出して名刺交換を始め、新幹線の終電を待つ間も改札の前でオーディションを始めるという、なんともダメな大人の集団なのであった。というか、ある意味いつもどおり?
2009-03-07(土) [長年日記]
■ 川崎 1-1 柏@等々力
開幕戦。16:00キックオフの試合なのに、12:30の時点でもう裏の広場までいっぱいの行列。今年も先が思いやられる混雑ぶりであります。それでも満席じゃなかったんだけど。なんでやねん。
開幕戦での勝ち負けをどうこうしてもしょうがないので、勝ち点1はOKとしよう。ただ、去年の弱点がまったく改善されていないのがなぁ。相手に引かれたり、極端にコンパクトな陣形を取られると、攻め手がなくなって横パスを取られて速攻される……というパターンが相変わらず。相手から見れば川崎攻略法に変化なしに見えただろう。大丈夫かなぁ。
DFと中盤の連携もイマイチで、攻撃に厚みがない。というか勇介をスタメンで出せと。
そういえば、これだけは書いておかねばと思っていたのに忘れていたので追記。
ホイッスルによる中断時に、柏のGK菅野が、ボールを取りに駆け寄るテセの目の前でボールを外に蹴りだすという、たいへん非紳士的な行為をしたんだよね。この行為のひどさについて語るにはこのスペースは狭すぎるのだけど、この行為に対してテセは、ビタイチ反応することなく、静かに現場を離れた。これがまず偉い。審判が見てないのは確実なので抗議するだけ無駄だから、すばらしく冷静。これが勇介だったら(ry
さらにすばらしいのは、このあと菅野がゴールキックする場面で2度にわたり、テセがボールを蹴るべき位置に置いてやっているんだよね。フェアプレイとはどういうものか、いちいち例示してやっているわけで、おれが菅野だったらその場にいられなくなるくらい恥ずかしかったと思う。彼がどう感じたか知らないけど。
二人とも1984年生まれ。同じ25歳でもここまで違うものなのかと驚くとともに、一見して猪突猛進型であまり頭使ってなさそうな印象のテセが、実は非常にクレバーなところに感心した。いや、テセがクレバーなのはよく知ってるけど、改めてそれを確認したというべきか。勝ち負け別にして、今回の試合でもっとも印象に残ったシーンだ。
2009-03-08(日) [長年日記]
■ アート・オブ・アジャイル デベロップメント ―組織を成功に導くエクストリームプログラミング (THEORY/IN/PRACTICE)(James Shore)
監訳者の木下さんに献本していただいた……んだけど、ごらんのとおりの大型本でおまけに厚いもんだから、えらく時間がかかってしまった。分量が多いだけで、べつに難しいわけじゃないんだけどね。もっとも、苦労して読むだけの価値がある、すばらしい本だった。
本書を最初に手に取ったときの感想は「XPもずいぶんデカくなったもんだな!」。ちなみにおれのXPに対する知識はほぼ輸入初期の状態でとどまっていて、ようするにシンプルな12のプラクティスだけをMAXにして、登場人物はプログラマとオンサイト顧客のみというものだ。初期のXPが持っていた刺激的な謳い文句に誘われて、試しに導入してみた人は少なくなかったと思うけど、おそらくほとんどは失敗しただろう(おれも含め)。
そうして失敗した事例の噂を見聞きして、「やっぱアジャイルだめじゃん」と結論付けた人も多かったと思う。先日見つけた「アジャイルだウォーターフォールだいう前にさぁ」というエントリなんて、まさにこのパターンじゃないかな。XPの表面的な謳い文句に踊らされ、隠れた本質について知ることなく失敗のレッテルを貼ってしまった人たち。
本書には、その誤解を解くだけの情報がたっぷりつまっている。
なにより、プラクティスが増えて、登場人物も専門職を含めてバリエーションを増している。実際の現場で、たった12のプラクティスと2種類の登場人物だけでコトが進むわけがないので、すごく現実に歩み寄ったという印象。導入初期にはとても生産性が落ちることをちゃんと白状し、困ったときに相談できるメンターを用意するようにというアドバイスもある。奇麗ごとばかりを並べていないのはいいことだ。
さらに、「計画」についてかなりの紙数を割いている。XPといえばペアプログラミングやTDDばかりが取りざたされがちで、目にする機会も多い。しかし本当にXPをやってる人たちによれば「XPの醍醐味は計画ゲームにある」らしいのだ。にも関わらず計画ゲームは今まで、ちょっと魔術っぽい部分があった。それが本書ではかなり明瞭になっていて、なるほどこれなら……と思える。
もっともそれでもまだ具体的な例示が足らない気がしてしまうのが、計画の奥深いところなんだろう。なにしろそれだけで一冊あるわけだから。こっちもチャンスがあったら読んでみたい。たぶんすごく面白い。はず。
アジャイルな見積りと計画づくり ~価値あるソフトウェアを育てる概念と技法~
毎日コミュニケーションズ
¥3,520
具体的な事例や練習方法、想定問答が各節に用意されていて、フォーマットがよくでいている。通して読まなくても、いま直面している問題への解決策が見えてくるだろう。ただ、終盤の展開が少し駆け足なのは、まだ深く探求されていない部分なのかも知れず、今後に期待。
あと、とても読みやすい現代日本語になっているのがすばらしい。翻訳者・監訳者に拍手。なにしろアジャイル業界には(ry
2009-03-09(月) [長年日記]
■ 携帯電話を水洗いしてしまったけど乾燥させて復活させた
土曜日の帰りに、洗面所でうっかり携帯を落としてしまい、蛇口の下に。うひー。
慌てず騒がず(嘘です、騒がなかったけどけっこう慌てた)、電池を外してできるだけ拭く。もっとも外出先なのでそれ以上のことはできず、とにかくできるだけ早く帰った。Suicaが使えないのが早くも痛い。月曜までに復活できないと定期も使えないから、そうとう不便だぞこりゃ。
ドライヤー(もちろんCOLD)で30分ほど強風を当てた後、途中で買ってきたまるで携帯乾燥用かとすら思える細長い家庭用乾燥剤のパッケージに閉じ込めた(写真のような状態にしてビニール袋で全体を密閉)。無水アルコールに漬けるとか、いろいろな手法があるようだけど、とりあえずキレイな水道水だし、これで大丈夫……なはず!
2晩放置して、月曜の朝、おそるおそる電池を入れたら復活した!
もっとも寿命は確実に減っているはずなので、機種変をするつもりでちょっとビックカメラを覗いてみたら、docomoは全面的なラインナップ入れ替え直後、どれも新型ばかり。軽くて二つ折りじゃないの……というともうN-04Aしか選択肢がないんだけど(それでもD705iμに比べて20g以上重い)、価格が47,000円を超えるのをみて引いた。ないわー。
携帯にそんなに出すくらいなら騙し騙し使うよ、ばかばかしい。バックアップは取ったしな。
2009-03-11(水) [長年日記]
■ 【ACL】川崎 1-0 天津
ACL初戦は天津。レベルとしてはJ2に毛が生えた程度かな。勝つのはいいとして、もうちょっと点差が欲しかったところである。というか、ゴール前ががら空きなのに横パスとかどうなの!
あと、急激に冷え込んで死ぬほど寒かった。秋冬制にしたら誰もスタジアムに足を運ばなくなるので、どうかやめてください。
2009-03-12(木) [長年日記]
■ 帰宅するとAmazonから身に覚えのない荷物が届いていた
仕事から帰るとかみさんに「Amazonから『ただただし』宛てに何か届いてるよ」と告げられた。ちなみに、宛名が漢字表記の場合は自分の発注、ひらがな表記の場合はギフトである。またか!
まず最初に思ったのは「ミッシングムーンだったらどうしよう……」だったのだが*1、開けてみたら見覚えのあるこの表紙。伝票を見るまでもなく誰だかわかった。こういうことをする人は一人しかいない(笑)。
もちろん、先日のTAOADの書評で「こっちもチャンスがあったら読んでみたい」と書いたからに違いなんだけど、おれがこういうことを書いても実現するのは数ヶ月、場合によっては数年後ということも珍しくないので「すぐに読め」って意味なんだろうなぁ。すでに2冊溜まったSFマガジンを横目で見つつ、積読スタックの最上位にpushした。がんばって読みます、ありがとう。
アジャイルな見積りと計画づくり ~価値あるソフトウェアを育てる概念と技法~
毎日コミュニケーションズ
¥3,520
断っておくと、自分は決して貧乏で貧乏しょうがないなんてことはない。むしろ平均よりだいぶ裕福な層に入るのは間違いないし、自由になる金も多いほうだろう。だからこういうことが続くと、ほしい物リストを公開しておくのがちょっと申し訳なく感じるんだけど、まぁ、こういうモノを送り合える文化というのは豊かで良いと思うし、申し訳なさよりも楽しさ・面白さの方が勝るので、あんまり気にしないことにする。
だからみんなも、ほしい物リストを公開するといいと思うよ!
*1 ワンダリングスターはこないだ自分で買いました。
2009-03-13(金) [長年日記]
■ iTunes 8.1で時刻が狂うバグが修正された
1年半前に発覚し、最新の8.0でも直っていなかったWindows版iTunesの「時刻狂いバグ」だが、昨日公開された8.1でようやく修正されたようだ。
夕べ8.1にしたあとで立ち上げたまま休止状態にしておいて、今朝になってiPod touchと同期させたが、iPodの時刻が狂うことはなかった。こんなに簡単に再現するバグの修正に1年半とかどんだけ。
動作もだいぶ軽くなったようだし、ちょっとはWindows版をなんとかしようという気になったということかね。ともあれ、これでようやくiTunesを立ち上げっぱなしで運用できるよ。あー、長かった。
2009-03-15(日) [長年日記]
■ ゲームばかりしていた
風邪引いてあんまり出歩けなかったこともあって、読書もせず、コードも書かず、ほとんどゲーム三昧。亜美真美ストーリーモードの終盤も見えてきたので、ムーンをポチった。次はりっちゃん。
もっとも、そろそろいい陽気なので、バイクにも乗りたいなぁ。行きたいところはたぶんまだ雪深いんだけど。どことは言うまでもないけど。
2009-03-16(月) [長年日記]
■ SEMをエンターテイメント化した「ニコニ広告」
週末はゲームばかりしていたと書いたけど、メンテが明けたニコニ広告でちょっと遊んだりもしたのだった。職業柄こういうものは試しておかないと……とか言い訳しつつ、ふと宣伝したいと思った動画があったからなんだけど。
実際いろいろ試してみると、リスティング広告の手法をなかなか上手にパロディ化している。実際に広告メディアとして評価すると不足している点が少なくないし(そもそも広告主は一銭も儲からない)、作業効率も悪いんだけど、逆にニコ動らしい「楽しさ」「面白さ」はかなり追求されていて好感触だ。SEM(検索エンジンマーケティング)をエンターテイメントにしてしまった、というところか。
SEMなんて実際の業務にしてみたらあんまり面白いものじゃなくてさ、いろいろ工夫した結果、集客が増えれば達成感はあるけど、本格的にやろうとすると入札作業もツール頼みで、なんとなく「作業っぽさ」がぬぐえない。特にリスティング広告はクリエイティブに凝る余地が少ない上に、ユーザにしてみれば邪魔モノ扱いなんだから、広告主のモチベーションは上がりにくい。
エンターテイメント化は入札画面から始まっていて、こんな感じのFlashアプリであらかじめ買っておいたポイントを加算すると「ちゃりんちゃりん」と音がする。ネット上のコンテンツには投げ銭が似合うなんてよく言われていたけど、まさにそんな感じだ。
その出稿額に応じて動画の掲載頻度や枠の色が決まるのは、すでにニコ動ユーザなら目にしているはずなので省略。嫌われもののはずの広告だけど、ここでは目立つほど喜ばしいという雰囲気があるのは、儲かるのがニコ動だけという(ある意味不公平な)状況だからかも知れない。今後利益が作者や権利者に還元されるようになったらまた雰囲気が変わるかも。
(本物の)リスティング広告と決定的に違うのは、広告効果が測定できない点だろう。自分の広告でどれだけの視聴者が誘導されたかわからない。これがわからないと戦略を立てづらいので、ゲーム性はちょっと落ちる。ただ、入札画面でタグごとに検索ボリュームがわかるので、どれくらいの競争率なのかはわかる。ちょっと面白い調査を、おなじみニコ動分析部のmyrmecoleonさんが公開されているので参照のこと。
ちなみに、試しに入札してみたタグは例によって「アイドルマスター」なのだけど、週末の時点での表示確率はたったの「0.2%」だった。「競争率高すぎだろ!」と思っていたのだが、丸2日たって見てみたら35万インプレッションもあった*1。アイマスタグ恐るべし……。
で、名前をいつものようにおおっぴらにしていたら、動画の最後でこんなになってしまったのはなかなか恥ずかしいけど、まぁいいか、面白けりゃ。おかげで(?)宣伝した動画はめでたく1,000再生を超えた。おれのおかげじゃないとは思うけど、35万回も表示されて1人も誘導されてないわきゃないよね。数万再生の動画をさらに宣伝するより、ロングテールにアピールしてこそのネットコンテンツだと思うので、これからも3桁以下再生の動画だけを狙って宣伝していくよ。
なお、今回宣伝したのはClubJamoraさんの新作。彼は語ってよし、作ってよし、まとめてよしのマルチな才能を発揮してくれている、ニコマス界隈の貴重な人材。
Sorry, sm6428244 was deleted.
*1 検索ボリュームと比べると、なんとなく数字が合わない気がするけど。
2009-03-18(水) [長年日記]
■ iPhoneはOS 3.0でようやくまともなPDAとして第一歩?
最近ようやくiPod touchでの文字入力にも慣れてきたので、メモ書きなんかもこっちでやろうと思い、オンラインでバックアップが取れるメモ帳を探した。というか、立て続けにXenNotesのレビュー記事をいくつか読んだので、まずはXenNotes Freeを使ってみているところ。iPod上で書いたメモを、Google Docsと同期できる。
それにしても、オンラインサービスと同期するアプリの操作が面倒くさい。いちいち個々のアプリを立ち上げて、同期ボタンを押さないといけないなんてアホかいな。XenNotesはGoogle Docsという他社サービスだからしょうがないとしても、その他にRemember The Milk、weathernewsなんかは自社サービスなんだからバックグラウンドで勝手に同期してくれればいいじゃん、Push Notification使ってさ。
……なんて不満たらたらだったのだが、昨日のiPhone OS 3.0の発表で、Push Notification Serviceがまだ未提供だったということを今ごろ知ったのだった(笑)。なんだよ、iPhone最大の特長として鳴り物入りで宣伝してたし、純正アプリ(Calendarとかメールとか)が勝手に同期してるから、てっきり他のアプリでも使えるものだと思ってたよ。それじゃしょうがないなー。
てことはこの夏でようやく、iPhoneは当初目指していたスタイルを手に入れるってことかな。同期を気にしなくてよくなるのは良いことだ。
もっとも、PalmOSを知る者から見ると、理想のPDAへの道のりはまだまだ。だいたい、たかがカレンダーの起動に5秒もかかってるようじゃお話にならない。アーキテクチャからくる制限なのはわかっているが、こういう日常的に繰り返す動作は最適化できるようじゃないと、携帯端末としてはお粗末すぎる。iPhoneは各アプリを平等に扱いすぎていて、あまりに「パソコン臭い」。こういうのはいまだに、ケータイ使う方が断然はるかに素早くできるもんね。
■ 伊右衛門のオマケがiPhone/iPod touchにぴったり
ペットボトル500mlの伊右衛門が今、小さな巾着をオマケにつけているんだけど、これがiPhone/iPod touch用にピッタリだと聞いたので、買ってみた。たしかにあつらえたようだ。
基本的にiPodは裸で使う主義だけど、ときどきバッグに入れて持ち歩くこともあるから、バッグに忍ばせておこう。
2009-03-20(金) [長年日記]
■ pocketerでミニ名刺を作った
いつの頃からかオフ会で名刺交換をすることが当たり前の風潮になり、かといって自分は会社バレしてないので個人名刺を作るのも面倒で*1……ということで、2年くらい前から見かけるようになったミニ名刺を作ってみた。フリスクサイズの小さな紙で、裏全面に写真を使えるちょっとオシャレな名刺である。
今回使ったサービスはpocketerで、まぁ、はっきりいって先駆者であるmooのminicardsの日本版コピーである。mooとの違いは、
- (サイトが)日本語なので操作に戸惑わない
- 納期が早い(1週間と書いてあるけど実質3日で届いた)
- ちょっと高い
- livedoorPICSやフォト蔵が使える
来週末にオフ会があるので、そこに間に合わせたかったから今回は短納期を重視した。あとフォト蔵使ってるし。
使える写真の比率が1:2.5なので、あらかじめ手元で選んでおいた写真をそのサイズにトリミングしてフォト蔵にアップロード。専用のフォルダを作ってまとめておく。サイト上でもトリミングできるけど、写真が何十枚もあるなら使い慣れたツールでやっておいた方がいい。
あとはサイトの指示に従って表面のデザインを決め(といっても6行ほどのテキストを入力して、必要ならお仕着せのアイコンかQRコードを入れるだけ)、枚数を指定して発注するだけ。戸惑うことはほとんどない。16日の深夜に発注して今朝届いたので、3営業日で入手できたことになる。
で、誰かにもらったmooのminicardsと比べてみようと思ったけど、これが見つからない(笑)。小さいからすぐ行方不明になるんだよなぁ。って名刺の意味ねー。id:noplansにもらったのを発掘したけど、どうみてもpocketer製だったので比較する意味がないorz
記憶にあるmooと比べると、写真はきれいだがややボケ気味。あとmooはもっと光沢のある紙だった覚えがあるけどpocketerはマット仕上げ。これらは好みの問題か。まぁ、小さいものだし頻繁に見るものでもないから、よろしいんじゃないでしょうか。
*1 たまに自作してみたりしたけど長続きしない。
◆ ヨウスケ [なんだかよさげな名刺ですね! 一枚くださいw]
2009-03-21(土) [長年日記]
■ WikiFarm閉鎖のお知らせ
S.P.C.で運営しているWikiFarmを閉鎖することにした(→アナウンス)。6月でspc.gr.jpドメインの期限を迎えるにあたり、グループとしての活動がほぼ停止していることから延長しないことに決めたためだ。現状生きているコンテンツ(というかサービス)はたぶんWikiFarmだけなので、まずは先立ってアナウンスだけでも。
個人的にはHikiを継続して使いたいんだけど、Farm全体にちゃんとしたspam対策をするのは時間的に困難で、Farm運営自体がちょっと荷が重くなっちゃった。自分でメンテしてるWikiだけならいいんだけど。というわけで、まずはパラボラアンテナだけでも移転先を探さなくては。まぁ、tdtds.jpに移動すればいいんだけど。
なお、Farm利用者全体へのアナウンス方法は、面倒だったのでtemplate/view.htmlの書き換えという大胆な方法を採用した。あとはできるだけ目立つようにtheme/hiki_base.cssをいじるなど。
2009-03-22(日) [長年日記]
■ mixi2gmailを動くようにしたり
mixiの日記を読むために、yoosee作のmixi2gmailを使っているんだけど*1、数日前からどうもHTMLメールとして認識されなくなってしまった。作者のブログは1ヶ月くらい更新ないし、渡米中だからmixiなんて見てないのかな……と思って自力で解決。
ホントは夕べ、ちゃちゃっとやろうと思ったんだけど、自宅のマシンにrubygemsが入ってなくて、aptitudeで入れ始めたら(メモリ極貧のVMwareなので)いつまでたってもgem updateが終わらな……以下gemに関する愚痴1024行省略……今朝やった。
バグの本題に入る前にまずつまづく。Mechanizeが最近はNokogiriを使うようになっていて、これがなぜかmixiトップのparseに失敗する。コードを追っかけて、WWW::Mechanize::html_parser=で旧来のHpricotに置き換えられることを知って回避。Hpricot互換を謳うNokogiriが、挙動が違うのもいかんだろうと思ったので、バグレポートを送るなど。おかげで(いまごろ)lighthouseのアカウントを取った。
肝心の問題は、今までのコードでContent-typeが2行出ていて、最初が「text/plain」次が「multipart/mixed」。これまでは後が優先されていたのに、最近Gmail側の実装が変わって前者が採用されるようになったらしい。どっちが正しいのかな(ここでRFCを調べるのが正しい姿勢です。調べてないけど)。
あとは最新のMechanize/Hpricotで動くように微調整をしたり、どうも長文が文字化けするのはHTMLがそのまま入っているせいだとあたりをつけて、base64にしてみたり。いちおうパッチは送ったけど、反応がなかったらCodeRepos.orgにでも入れちゃうか。
差分はgistにて。これのために(いまごろ)GitHubのアカウントを取ったり。lighthouseといいGitHubといい、なんか変な進歩のある日だったなぁ。もっとも、デバッグに使ったマシンに入っているのはDebian etchなのでgitが古いのか、GitHubのconfigが動かないっぽい。とほほ。
2009-03-23 追記
CodeRepos.orgに入れました。あえてGitHubではなく(笑)。
http://svn.coderepos.org/share/lang/ruby/mixi2gmail/
*1 おかげさまでmixiの画面はもう何ヶ月も拝んでいない。
2009-03-23(月) [長年日記]
■ git学習フラグが立ってしまった。またはCorkscrewでgitのproxy越え
昨日はGitHubのアカウントを取るなどしたものの、基本的にgitを真面目に使う気はなかった。職場のネットワークはHTTPしか通さないproxyが壁になって、「git:~」とか「svn+ssh:~」なんてリポジトリは使えないのだ。
などとつぶやいたら、「Corkscrew」というキーワードが降ってきた。トンネル掘削用のツールらしい。知らんかった。gitコマンドが持つproxy越え機能と連携できるようだ。壁の向こう側に特別な仕掛けがいらないということはたぶん、以前使ったconnect.cと似たようなものかな。ウチのproxyはポート制限は特に行っていないので、これでいけそうだ。参考サイトはgitをHTTP Proxy経由で利用したい場合の対処法。
まずはgitコマンドとcorkscrewコマンドのインストールなんだけど、Debian使いはここでまずつまづく。「git」だと同名の聞いたこともないファイラーが入ってしまうのだ。ここは「git-core」:
% sudo aptitude install git-core corkscrew
GitHubではgit 1.5以降のみサポートしているようで、1.4どまりなetchでは(バックポートを入れない限り)使えない。lennyにしろってことですね、わかります。
gitから使わせるcorkscrew用のコマンドを作成:
% cat ~/bin/git-proxy #!/bin/sh corkscrew YOUR_PROXY_HOST YOUR_PROXY_PORT $1 $2 % chmod u+x ~/bin/git-proxy
YOUR_PROXY_HOSTとYOUR_PROXY_PORTは環境に合わせて。あとは環境変数GIT_PROXY_COMMANDに上記コマンドを指定して、gitコマンドを実行すればいい。とりあえず角谷さんのtestable_tdiaryをcloneしてみた:
% export GIT_PROXY_COMMAND=git-proxy % git clone git://github.com/kakutani/testable_tdiary.git
ちゃんと成功したようなので今日はここまで。gitは他のSCMと比べて考え方が相当違うみたいなので、今までgitの話は避けてきたのに、これで学習フラグが立っちゃったなぁ。時間ねぇぇぇぇ。
つーかさー、たしかLinusがgitを作ったときは「これはLinuxカーネルのソース管理には向いているけど、他のプロジェクトには合わないだろう」とか言ってなかったっけ? なんでこんなに盛り上がってんの?
■ さくらインターネットにSubversionを入れたメモ
mixi2gmailをCodeReposに入れたはいいが、動かしてるさくらのサーバにsvnが入ってない件。とほほ。この同じサーバ上に各ユーザが入れたsvnがどんだけあるか考えたら悲しくなってくるね。
で、Web上にはいろんな手法があふれていて混乱するので、おれも混乱に拍車をかけることにする。
% wget http://subversion.tigris.org/downloads/subversion-1.6.0.tar.gz % tar zxf subversion-1.6.0.tar.gz % cd subversion-1.6.0 % wget http://ftp.kddilabs.jp/infosystems/apache/apr/apr-1.3.3.tar.gz % tar zxf apr-1.3.3.tar.gz % mv apr-1.3.3 apr % wget http://ftp.kddilabs.jp/infosystems/apache/apr/apr-util-1.3.4.tar.gz % tar zxf apr-util-1.3.4.tar.gz % mv apr-util-1.3.4 apr % http://www.webdav.org/neon/neon-0.28.4.tar.gz % tar zxf neon-0.28.4.tar.gz % mv neon-0.28.4 neon % ./configure --prefix=$HOME --with-ssl --without-berkeley-db % make && make install
sqlite3とかswigを入れてないけど動いてるからよし。
追記: 2009-03-24
kayakayaさんからもっと簡単な方法を紹介してもらった。レンタルサーバに入れるのならこれで十分なはず。おれもこれに入れ替えた。
◆ ただただし [むむ。sqlite3はあったけど、swigは見つからないなぁ。ホストによって違うのかしらん?]
◆ りんね [gitでNTLM認証Proxyを通過するのに苦労しました…。 GIT_PROXY_COMMANDだとどこへのアクセ..]
◆ ただただし [>りんね あ、やっぱりgit-configでも指定できたんですね。さすがに環境変数はないだろうと思っていたのですが(..]
◆ じゃっくん [スイマセン、確かにswigはないですね。 trac入れるとき何か2つが不要だった印象があったので…。もひとつはpyt..]
◆ ひらく [ここで空気を読まずに「Mercurialならhttpでアクセスできます」とか言ってみます]
◆ ただただし [お待ちしてました(笑)。]
2009-03-24(火) [長年日記]
■ さくらインターネットにgitを入れたメモ
昨日のSubversionに比べて依存関係がないのでとても楽。
% wget http://kernel.org/pub/software/scm/git/git-1.6.2.tar.gz % tar zxf git-1.6.2.tar.gz % cd git-1.6.2 % ./configure --prefix=$HOME --without-tcltk % gmake && gmake install
2009-03-25(水) [長年日記]
■ だいたいgitが使えるようになった。またはRuBBSとmobilerをGitHubへ
Git入門のチュートリアルをひと通り読んだあとは、ネット上で日本語情報を軽く漁るという、系統だった学習とはとても言えない(でもいつも通りの)手法でだいたいの雰囲気はわかった。というか、GitHubで都度つどに出てくるヘルプが優秀で、その通りにコマンドをツッコむと、だいたいしたいことができるというのは、なかなかすごい。今回いちばん感心したのはGitHubのユーザビリティだったりして。
というわけで、spc.gr.jpの閉鎖にともなって移転先のなかった(しかしすでに歴史的意味しかなさそうな)古いプロジェクトで練習した。RuBBSとmobiler。自宅サーバにあったsvnリポジトリはすでに救出不能なので、最新のパッケージを入れて、READMEの文字コードをUTF-8にした程度だけど(GitHubはREADMEファイルを見つけて勝手に表示してくれるので)。
あとは人サマのリポジトリをcloneして、修正をpushしたりpullしてもらったりするあたりが未体験だけど、全リポジトリが対等なSCMだから勝手は同じだろう。
実際使ってみて、Linusが「ソース管理というよりはパッチ管理」を目指して作ったというのがよくわかった。確かにパッチのやり取りって、従来のSCMではシステム化されていない泥臭い領域だったしなぁ。これは確かに(特にOSS開発では)便利な方式だ。Gitのよさがちょっとわかったよ。
2009-03-26(木) [長年日記]
■ Corkscrewでgitのproxy越え(その2)
先日のトライで、「git:~」なリポジトリに関してはアクセスできるようになったが、GitHubではpullなどの操作はsshを経由するので×なことが判明。逃げ道を探す。
環境変数ではなくgit configを使う
まず、proxy経由でのアクセスを指示するのに、環境変数はよくないという指摘をもらったので、正統派のgit configを使って指定する。
git config --global core.gitproxy 'git-proxy for github.com'
core.gitproxyではproxy越え用のコマンドと、それを使うドメインを指定する。普通、proxy指定ではproxyを使わないドメインを除外指定するけど、こっちは使うドメインを指定するのだな。用途からすると正しいかも。
当面あらゆる外部リポジトリはGitHubの予定なので、面倒だから--globalを指定した。これでいろんなプロジェクトで指定して回らなくて済む。別のサービスが増えるようなことになったら、リポジトリごとに指定しよう。
GitHubにproxy経由でsshアクセス
sshを使う場合は通常「git@github.com:USER/REPOS.git」、つまり「github.com:22」へアクセスするのだが*1、HTTP/HTTPSしか通さないproxyのために、ちゃんと「ssh.github.com:443」が用意されている(参考:Access GitHub repositories from work (take that, firewall!).)。
ということで、(「git@github.com:USER/PROJECT.git」というURLをコピペして使えるように)~/.ssh/configにちょっと仕掛けを入れればいい:
Host github.com HostName ssh.github.com Port 443 ProxyCommand corkscrew YOUR_PROXY_HOST YOUR_PROXY_PORT %h %p
これでいけるはず:
% git clone git@github.com:tdtds/rubbs.git Initialized empty Git repository in /home/sho/src/rubbs/.git/ remote: Counting objects: 34, done. remote: Compressing objects: 100% (34/34), done. remote: Total 34 (delta 4), reused 0 (delta 0) Receiving objects: 100% (34/34), 38.41 KiB, done. Resolving deltas: 100% (4/4), done. %
おk!
*1 gitというアカウントを指定しているということは、GitHub上のユーザは全員同じアカウントで、公開鍵だけで識別されているということか。
2009-03-27(金) [長年日記]
■ オンライン画像編集サイト「Aviary」が相当すごい
今日作られたWassr上の某チャンネルにアイコンがないのが寂しくて、昼休みにネタっぽいのを作ろうと思ったら、職場のマシンにはGIMPをまだ入れてなかった。かといって、めったに使わないGIMPを入れるのも面倒なので、先日どこかで(百式だっけ?)見つけたオンライン画像編集サイト「Aviary」にアクセスしてみた。
画像はペイントツールのPhoenix。Flashアプリだ。例によって絵心はないので作品自体はアレだけど、とにかくまぁ、GIMPの基本機能くらいのものはぜんぜん問題なく使えてしまうのに驚いた。そこそこ性能のあるマシンだったら、これだけで十分だ。こんなのがブラウザの中で動いちゃうんだから、いい時代になったもんだねぇ。
現代的なWebサービスの常として、いちおうソーシャルっぽい機能もあって、共同作業なんかもできるみたい(というかFreeアカウントだと誰でも編集可能になっちゃうのか?)。プロフィールの画像に、Aviary上で作成した画像をそのまま指定できないというのには笑っちゃったけど。
◆ わた春香 [だ、誰ですかこれゝ#`Д´ノ)]
2009-03-28(土) [長年日記]
■ 肉充してきた
Wassrで知り合った人たちとしゃぶしゃぶを食べてきました。
というのは前半を省略しすぎで、その前にさんざんオーディションとかアイテム交換会とか。初めての対人オデで超緊張。でも売れっ子プロデューサになっていたおかげで勝てた!
2009-03-29(日) [長年日記]
■ Jリーグの試合速報を携帯で見やすくする
スーパーサッカーの速報をスクレイピングして、シンプルなテキストを吐くスクリプトを書いただけなんだけど(ソース@gist→mobile_supers.rb)。相当シンプルにしてあるので、スタジアムの混雑した電波状態でも快適……なはず。来週の名古屋戦で試す。
自宅サーバが死ぬまでは別の(もっと泥臭い)スクリプトでやっていたんだけど、最近けっこうまともなHTMLになったようなので今回からちゃんとNokogiriを使った。
とはいえ、これを短間隔のcronで回すというのも芸がない。というか、試合やってないときまでアクセスさせたくない。かといって、CGIにして毎回動的に作らせるのも、相手サイトの負荷が高いときのレスポンスが気になる。で、
- 最短5分間隔で最新情報を見られるようにする
- それより短い間隔でアクセスしても静的ファイルが返るだけ
という運用方針のもと、実現するためにたつをさんのキャッシュ方式を参考にして.htaccessでmod_rewriteを設定した。まぁ、ほとんど丸写し:
RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^/football/score\.txt$ /cgi-bin/update-score.cgi [L]
update-score.cgiはこんな感じ:
#!/usr/bin/ruby require 'nkf' require 'mobile_supers' text = NKF::nkf( '-s -Z1', Jleague.miniscore2mobile ) open( '../football/score.txt', 'w' ) {|f| f.write( text ) } print "Content-Type: text/plain; charset=Shift_JIS\n\n#{text}"
あとは5分間隔でcronを回して、score.txtを削除すればよろしい。あとやるとすれば、リンク先も同じように見られるように拡張するとか、そんなところか。
■ 単体ファイルのソース管理にGist + gistyを使う
上のような「プロジェクトにするほどでもない」プログラムを公開したり、ソース管理したいときにはGitHubのGistが便利なんだけど、gistyを入れるとさらに便利になる。
Gistの使い方やgistyのインストール方法はあちこちで書かれているので略。cloneされたGistのプロジェクト(?)は数字列で可読性が低いので、symlinkを張るといいね:
% echo $GISTY_DIR /home/sho/src/gists % cd ~/src % ln -s gists/87404 mobile_supers
いつものように、防火壁の内側からproxy経由のsshでGistを使うためには、~/.ssh/configに以下を追加すれば良いようだ:
Host gist.github.com HostName ssh.github.com Port 443 ProxyCommand corkscrew YOUR_PROXY_HOST YOUR_PROXY_PORT %h %p
GistのリポジトリはGitHubそのものとはホストが違うからsshサーバも別かと思ったら、これは共通でいいようだ。Corkscrewの設定など、その他のノウハウは以前の記事を参照:
2009-03-30(月) [長年日記]
■ RubyKaigi'08タンブラーが寿命を迎える
昨年のRuby会議でノベルティにしたタンブラー、会社で使っていたんだけど、水漏れがひどくなってとうとう寿命に。まるで発表者の選考を待っていたかのようである。いや、水漏れは前からあったんだけど。
ノベルティが短命なのはしかたがないとはいえ、一昨年のバッグなんてまだ現役だしなー。せめて2009の本番くらいまでもって欲しかったぜ。
ちなみに後任は、以前かみさんがもらってきたAmazonのステンレス製タンブラーです。またノベルティか!
2009-03-31(火) [長年日記]
■ gist上のforkをmergeする
こないだ適当に書いたスクリプトがno6vさんによってforkされた。せっかくなのでgitでのパッチの取り込みをやってみる。gistも普通のgitなリポジトリなので、操作は同じ。
リモートリポジトリを指定していきなりpullするのもいいのだけど、ちゃんと差分を確認してからmergeするなら、まずはremoteに加えてからfetchなんだろう。ということで、no6vという名前でremoteリポジトリを作成して、そこにfetch:
% cd src/mobile_supers % git remote add no6v git://gist.github.com/87620.git % git fetch no6v remote: Counting objects: 5, done. remote: Compressing objects: 100% (2/2), done. remote: Total 3 (delta 0), reused 0 (delta 0) Unpacking objects: 100% (3/3), done. From git://gist.github.com/87620 * [new branch] master -> no6v/master
no6v/masterというブランチができて、gist上と同じ内容になった、ということ。これで手元で差分が見られる:
% git log -p master..no6v/master
ページャで差分が表示される。インデントがソフト2タブに変わってるので差分になってない! ><
……とはいうものの、内容に不満はない。というか、tapを使った配列の初期化とか、openのブロック引数の書き方とかカッケー。1.9スタイルをまざまざと見せ付けられたぜ。日ごろからちょっと古いrubyでも動くコードしか書かないだから新鮮だわ。
で、merge:
% git merge no6v/master Updating e3bfa90..562ee0f Fast forward mobile_supers.rb | 44 ++++++++++++++++++++------------------------ 1 files changed, 20 insertions(+), 24 deletions(-)
あとはcommitしてpushする:
% git commit -a -m "merged no6v's patch." Created commit 8529945: merged no6v's patch. 1 files changed, 30 insertions(+), 30 deletions(-) rewrite mobile_supers.rb (81%) % git push Counting objects: 8, done. Compressing objects: 100% (4/4), done. Writing objects: 100% (6/6), 1.19 KiB, done. Total 6 (delta 0), reused 0 (delta 0) To git@gist.github.com:87404.git e3bfa90..8529945 master -> master
と、gist上のコードも新しくなってる。ふむふむ。gitの良さがわかってきた。
ついでにgist.rbプラグインのテスト。なんで3タブで展開しないのかと小一時間(ry:
◆ nmi [他の機能、デザインより防水であることを優先してるので、こういう場面にはぶちあたってない。 まあ制約があるのであるが雨..]
◆ ただただし [確かに携帯の一番のリスクは水ですから、重視するのは理にかなってるんですけどねぇ。でも重くてでかいんだよなぁ、防水携帯..]
◆ a.k [隣のdocomoショップの方が古い機種置いてそうじゃね?入ったことないから知らないけど]