選択ミス

ちょっと時間ができたので、無線LANの届くところでプログラミングを、と思ったのですが。
周りを見渡すと、モスバーガーの向かいにマクドナルド、細い道路を挟んで上島珈琲。

モスバーガーは行きつけのお店で、電源も用意されていて無線LANが確実にはいることも知っているのですが。
夕食時は混雑してやかましい可能性があってちょっとイヤんな可能性があります。

でも、そうすると同じ時間のマクドナルドはもっと混むので、ここは論外。

上島珈琲はいつも静かだし、夕食はないので比較的すいていることが期待できるのだけれど、無線LANがないのですよね。でも、道路一本だから、モスバーガーかマクドナルドの電波が届いていると見た!

…で、結局電波が届いていなくて、上島珈琲で350円のロイヤルミルクティーを一気飲みした後、移動してきたモスでこれを書いています。
イーモバイル買おうかなぁ。

[読書]ボナンザVS勝負脳

My Life Between Silicon Valley and Japan – ボナンザVS勝負脳 (保木邦仁、渡辺明共著)で紹介していただいて読んでみたのですが、これはマジでおもしろいです。



2007年3月、コンピュータ将棋プログラム「ボナンザ」が渡辺竜王と平手一番勝負で公開対局を行いました。
この本は、その「ボナンザ」の作者である保木邦仁さんと、渡辺竜王が将棋について語り合った本です。



梅田さんは渡辺竜王の側を強調されていましたが、僕は保木さんが断然おもしろいと思いました。


りっぱな棋譜を残す。どうやらその目的を達することはできたようだ。中盤までは、ボナンザが竜王をリードする場面もあった。渡辺竜王に汗をかかせることもできた。その誘いをいなす場面すらあった。
 ただ、あろう事か私は、途中で正確に戦局を読むことができなかった。今、どちらが優勢なのかも定かにはわからなかった。ただ、ボナンザの選んだ指し手を伝えていただけだ。最後に投了を宣言したのは私だが、ほとんど傍観者に過ぎなかった。私は、パソコンの画面と渡辺竜王の顔色ばかりみていた。



これこそが物作りの楽しさではないかと思うのです。自分の作った道具を使えば、自分が形勢を判断することすらできないような相手と互角に戦うことができる。

自分の作った将棋ソフトが、自分にもわからないくらい強い、しかもトップクラスの人間と互角の戦いを繰り広げているというのは、これはもうとんでもなくわくわくする体験なんじゃないでしょうか。


多くの人は、ボナンザを人工知能と呼ぶ。対局を観戦して、ボナンザが「躊躇った」とか、「焦った」「その気になった」などと表現をする人もいた。しかし、そのように見える思考過程は、すべて数式の結果に過ぎない。申し訳ないが、そこには環境が芽生える要素などはない。では、ボナンザは一体、何をどのように考え、指し手を選んでいるのか。そうした点について、私なりの解説を試みてみようと思う。

 この本を読んで、機械学習というのにとても興味を持ちました。機械学習というのは、何か(例えば将棋の指し方)を実装するのに、アルゴリズムそのものを実装するのではなく、過去のデータを与えて、そこから学習するように組まれたシステムを指します。

 普通にアルゴリズムをくんだ場合、その成果物は、作った人の知らないことは実装できないので、作った人自身がシステムの限界になります。これに対して、機械学習のシステムは、作るのも大変だし、学習するデータを用意するのも大変ですが、その代わり、適切なデータを与えてやれば、プログラマが知らないようなことまでもシステムが勝手に学習していきます。結果として、本人がわからないくらい強い将棋ソフトとか、作った人も驚くような返事を返す人工無能を作り出すことができます。

これ、いっぺんやってみようかな。

||=での初期化

あんまり初歩的な話を書くのも恥ずかしいのですが。

なーに、いつかすごいプログラマと呼ばれた頃には、「あのもぎゃさんにもこんな頃があったのね!」って感動される材料になるのさ♪


while true
foo ||= 0; foo += 1; puts foo; break if foo > 99
end



foo ||= 0 ってなに?そんな演算子はないよね?



…そうすると、これがパーサー(仮想マシン?Rubyの中の人^^;)からどう見えるかというと、たぶん、まず||が評価される。



fooは未定義なので、ここでのfooはfalse。orだから、falseだったら次を評価するはずで。

つぎって、”=0″。 orで評価している途中ですが、そこに0を代入。どこに代入???



と思ってリファレンスマニュアルをみていたら、書いてあった。

Rubyリファレンスマニュアル – 演算子式

foo += 12       # foo = foo + 12
a ||= 1         # a が偽か未定義ならば1を代入。初期化時のイディオムの一種。



ああ。なるほど。

つまり、foo ||= 0は

foo = foo || 0

こう評価されて、fooが未定義の場合、評価したらfalseだから、後ろが評価された0をfooに代入する。次にループで回ってきたときはfooが定義されているから、foo=fooとなって、実質何もしない。結果として変数の初期化ができる、と。



おお。ナルホド。勉強になりました。

携帯電話専門TV局Qlick.TV

携帯電話専門TV局Qlick.TV(クリック ドット ティービー)さんの取材を受けてきました。
SANY0039.JPG
取材といいつつ、ケータイ向けストリーミング放送の制作会社に行く機会なんてそうそうないので、僕らはその内部に興味津々。
「ページビューは?」などとこっちから質問しまくりでした(笑)
来週火曜日からケータイ魂で見られるそうですので、ドコモ携帯持っている方は、ぜひぜひ見てくださいませ。

google入社試験

時計の針とか、スクールバスにゴルフボールが何個はいるかとか、おもしろ系の質問が紹介されていますが。
金曜日にGoogleの鵜飼さんもちょうどこのお話をしていました。
それによると、FizzBuzz問題程度の簡単な問題を出して、その場でホワイトボードに書いてもらうのだとか。
ググるのはナシ。つまり、簡単な内容なので、考えたことをすぐにコードに落とせる能力を求めています、と。
正しい試験だなぁ、と思いました。これができるとできないとで、実装の速度が違ってきますよね。
あ、ボクは落ちるぞ。

ITpro Challenge!行ってきた

というわけで、
ITpro Challenge!
に行ってきました。
ライトニングトークさせていただいた件は
「明日10時」「来週火曜日」で日付を扱うライブラリHumanDate
に書かせていただいたので、こっちでは、参加者としてのレポートを。
すでに良質なレポートが上がっていますので、補足するような形で行きたいと思います。
maeda.na@はてな – ITpro Challenge!のメモとか

濃かった

 ちょっとありえない濃度でした。Lingrの江島健太郎さん、Googleの鵜飼文敏さん、はてなの伊藤直也さん、ドワンゴの戀塚昭彦さん、ひとりでも 100人規模の人を呼べそうな人を四人呼んできて、さらに司会に弾さんを持ってくるという出血大サービスのイベントなのに、会場に入れるのはたった70 人。ライトニングトーク枠でもぐりこむ僕みたいなのもいるから、単純に入場できた人って50人くらいしかいなかったんじゃないでしょうか。
 僕としては濃厚な空気で勉強させていただけてとてもうれしかったですが、さすがにこれは、お話していただいた方に申し訳ないので、入場料を取ってもうちょっと広い会場を用意してもよかったんじゃないのかな、と思いました。
5000円なら安いと思えるレベルだったと思います。
 たいへんいいイベントを開催していただいたスタッフのみなさま、どうもありがとうございました。

How we built Lingr

>2年くらいじゃ英語うまくなんない
話の経緯を補足。
Q:Lingrが意に反して日本で人気、世界でマイナーになってしまった、ということでしたがその原因はなぜだと考えていますか?
A:チーム構成として自分がマーケティングも見ないといけない位置だったのだけれど、その自分が日本語でブログ書いてしまった。
 英語ができないわけじゃないけど、人気の出るブログを書くとなるとまた別の話で。二年くらいじゃ英語ができるようにならない。
 これ、実際自分もそうだと思いました。二年も行っていませんが。
 職場が英語なので、それなりに英語は話せるようになってきたのですが。それはあくまで「相手が聞こうとしているときに、自分の意思を相手に伝える」ための英語であって、
「なんとなくみている、聞いている人に違和感なく自分の意思を伝える」にはほど遠い状態です。
相手が聞こうとしてくれているときであれば、ちょっとくらい変な英語でも相手が察してくれるので何とかなりますが、ブログを書いて自分の作ったものを宣伝しようと思ったら、
そこにはもう一段上のレベルの英語が必要になるんじゃないのかな、と。
そうか、国際的に勝負しようと思ったらこれじゃダメなんだな、と痛感いたしました。

ハッカーのソフトウェアエンジニアリング

maeda.na@はてな – ITpro Challenge!のメモとかをみていただいてもわかるかもしれないですが、
教科書に載ってるんじゃないのか、と思うくらい当たり前の話が多くて、ちょっと退屈そうにしている方もおられました。
でも、実はそれがハッカー/Googleエンジニア/鵜飼さん(どれか)の本質なんじゃないのかな、と思ったり。
たとえば、Googleの入社試験ではホワイトボードにその場でコードを書いてもらうそうです。
「ググるのはナシ?」
「ナシです。ごく簡単な問題ですから。簡単な日本語の文章を書くのにいちいち辞書引かないのと同じように、開発言語も使えることを求めています」
僕落ちます(笑) もちろんそうなるべきだと思いつつも、実際には、あれ、%Qと%qはどっちがどっちだっけ、と思ったり、文字列操作のsplitの名前が出てこなくて
ググったりしながらRubyのコード書いています。
でも、これができるようになっていれば生産性が大幅に上がるのは間違いないわけで。そこを入社時点で求めるというのは、妥当な足きりだと思いました。
つまりハッカーというのは、そういう地道な努力の集合体で、それを馬鹿にしないからこそすごいんじゃないのかな、と。

ベンチャー志向プログラマ

 質問してきました。
Q:えらくなると、自分が集中してコード書き始めたところで「直也さーんっ!」って割り込まれることが増えると思います。それでもコードを書き続けるためにどうやっていますか?
A:かつては「その質問は今じゃないとダメなの?」とか言って切れていました。よくないとは思うけど、集中したいし。
  最近は、AMは周りのサポートに注力して、PMは会社を抜け出してスタバでプログラミングしたりしています。
  メールもメッセンジャーも全部切って集中!
Q:そうすると、はてなブックマークが503出してます、とか言うことにならない?
A:その時は携帯に電話が入ってきます(笑)

ニコニコ動画の創りかた

 ゆっくりと、ポツポツとしたしゃべり方が印象的でした。「あ、きっと人前で話をするのが得意でないのだなぁ」と。
けれども、一つ一つ丁寧にお話ししていただけたので、とてもわかりやすかったです。
 こういう人のすごさを見抜いて活躍の場を与えるのって、かなり難しいことだと思うのです。
自分みたいな出たがりは、どんな場でも勝手に主張して仕事を取りに行くのでそれなりの成果を出してくるけど、
たぶんこういう方は、放っておくとオロオロしちゃってなんにもできないタイプ。
#すいません。勝手に妄想しています。
でも、適切な活躍の場があった結果、僕なんかよりずっとすごい成果を出されているわけで。実はニワンゴすごい?とか思いました。

ライトニングトーク

 自分の発表で頭が真っ白だったので、何にもメモしていません(笑)
それでも印象に残っていたお話をあげさせていただくと。

フログラミング 増井 雄一郎氏

 バッチリお話してきました!しかしフログラミング、威力強すぎです。

開発環境と言語 氏久達博氏

 言語開発合宿やるそうです!その場で小飼さんとか伊藤さんを勧誘(笑)

思いやり駆動開発 五十嵐邦明氏

 ベアプロ:ペアプロできないさみしいあなたに!机にクマのぬいぐるみを置いておいて、行き詰ったら彼に話しかけてみましょう。たいていの問題は解決します。
 ネタに見えるけど、実際これ有効だと思う。これやろうかなぁ。

私がApacheモジュールを書く理由「wafful.org」竹迫良範氏

 この人のプレゼンのうまさは異常だと思います。
実は今回、ライトニングトークに竹迫さんの名前を見つけて、ひそかに対抗心を燃やしていたのですが。勝負にもなりませんでした。
あんな写真どこから集めてくるんだろう…

懇親会

 これも参加してきました。ここでは一般参加の方は結構減った一方、講演したハッカーのみなさまはそのまま懇親会に参加していただけたので、ハッカー密度が臨界点を超えた状態でした。
 会場のプロジェクタにPCを接続させていただけたので、みんなもちネタを披露。

とても楽しい一日でした。

「明日10時」「来週火曜日」で日付を扱うライブラリHumanDate

本日はITpro Challenge!でライトニングトークをさせていただきました。

pdfファイル
HumanDate.pdf
HumanDate.rbのgemファイル。
HumanDate-0.0.1.gem
あと、プレゼンで紹介した、HumanDateをつかって携帯電話(というか電子メール)からGoogleカレンダーに登録するスクリプトはこちら。
pop3togcal.rb
このスクリプトを
cronで定期的に呼び出すようにすることで、
設定したメールアドレスのメールをチェックしにいって、
該当するメールがあればgoogle calendar apiをつかってGoogleカレンダーに登録するようになっています。
なお、このスクリプトは
zorioの日記 – メールからGoogle Calendarに登録するサンプル
を元にさせていただきました。素敵なコード、どうもありがとうございます。
(追記 2007-09-08 08:28:27)
maeda.na@はてな – ITpro Challenge!のメモとか

古川氏のカレンダライブラリはいいと思う。

いえぇ~っ!そうそうたるメンバーに囲まれてどうしようかと思っていたのですが、このお言葉はうれしいです。
ライトニングトーク中毒になってしまいそうだ(笑)

pukiwikiのファイル名を文字列に変換 by ruby

pukiwikiのファイル名について
attachの中の余分なファイルを消したいと思っているのですが、
CBE2CBA1B7BFBCEDBEEC_A5DEA5B8A5C3A5AFA5A2A5EDA1BCB3CEBBA62E786C73
↑のようなファイル名ばかりなのでどれが不要でどれが必要なのかわからなくて困っています。
こういったよくわからない文字の羅列を普通のファイル名に戻すといったことはできないでしょうか?

ということで、perlのコードが紹介されている。
自分も変換する必要に迫られたので、rubyのコードを書いてみた。

require 'kconv'
Dir.foreach("./euc/") {|inputFileName|
if File.file?("./euc/"+inputFileName)
#出力ファイル名(デコードしておく)
outputFileName = inputFileName.scan(/([0-9A-F]{2})/).map{|a| a[0].hex.chr}.flatten.join("").gsub(/\//,'_')+".txt"
File::open("./euc/"+inputFileName) {|inputFile|
File::open("./sjis/"+outputFileName,'w'){|outputFile|
inputFile.each {|line|
#ついでに、文字コードをsjisに変換
outputFile.print line.kconv(Kconv::SJIS,  Kconv::EUC)
outputFile.print "\n"
}
}
}
end
}

日本語のファイル名がうまく戻せていないのは、linuxマシン上のファイルシステムの問題かこのコードの問題かちょっとわからない。

Thank you という理由

まず、Thank you と言うこと/ぼんやりと考えたこと

最近、何人かの英語初心者、もしくは英語慣れはしているけれどアメリカ初心者、もしくは英語もアメリカ慣れもしているいるけれど暮らしたことはない、という日本人を観察していて気がついたこと。
それは、客の時にはだれも Thank you とは言わないということ。さすがにこの場面なら言うかなという場面でも決して期待を裏切らない。彼らは絶対に店員にむかって Thank you とは言わない。

えー。僕いいますよ? Thank you madam♪ って。

あ、もちろん相手が男性の場合はThank you sir.

最長で一ヶ月くらいの海外出張しか経験はないけど、普通にThank you言ってます。
はじめて海外出張したとき、同伴してくれたのがアメリカ人(しかも南部出身の人)だったのです。
ひな鳥のようにその人の話し方、言い回しを覚えていった結果、お店で買い物をしたり、ホテルでチェックインしたときには、”Thank you madam♪”って言うんだね、と無意識に学習したのだと思います。最後に♪がつくのもそういう理由。
日本人がなぜ「Thank you」と言わないかの考察は、元記事の人と弾さんが説明されていますが。

「いちいちそんなことを言わなくてもまともなサービスが期待できる日本と、フレンドリーに振る舞わなければ何をされるかたまったものではないアメリカ」
(まず、Thank you と言うこと/ぼんやりと考えたこと)

それは「感謝の気持ちがない」のでは決してなく、感謝の背景をどう捉えているかの違いだと思われる。
(404 Blog Not Found:”Thank you” = 「すみません」)

たぶん、そんなに難しい理屈で自分を納得させなくても、現地で他の人がどうしているのかを見て、「あ、みんなThank youって言っているからマネてみよう」ってやったほうが早いんじゃないのかな、と思います。