財布の中身が31円…そしてキャッシュカード再発行まだしてもらってない.まぁ,みずほ以外の口座は無事なのでなんとかなる.
*http.h
更新した.
rubyのhttpclientに似せたメソッドを追加しました.あとはバグとか直した気がします.たぶん,C++のHTTPライブラリで一番簡単に使える部類に入ると思います.自分で必要な機能しか実装して無いのであれですが.
*json.h
jsonパーサも書いたので,そのうち公開する予定.
*C++
typedefの後にtypenameを書かなければいけない場合が良く分からないなあ.たとえば,自分のテンプレートのテンプレート引数で実体化したテンプレートの中でtypedefされているものを自分のスコープにtypedefするときにとかに必要になります.なんとなく経験則では分かっているのだけど,正確には説明できない.
あと,
template <typename T>
void func(T p) { }
こういうのは,いちいち書かなくても,
void func(auto p) { }
みたいに書いたら同じように解釈してほしいなぁ.型はdecltypeで取れるからほとんどこれで十分だし,ポリモーフィズムを継承とかで実現したくなったときも,最小限の修正で済みます.
仕事の合間にrubyで某ツールをファイルシステムとしてマウントしてみる.
まだ咳が出るが,とりあえず風邪は治った気がする.
財布は無事に拾われて警察署に届いていた.会社行く途中に警察署に寄って受け取りました.拾ってくれた方,ありがとうございます.
駅で落としたものとばかり思っていましたが,家の前の路上で拾われてました.時間的に,駅に行く途中ではなくてコンビニに行った帰りか.風邪ひいて熱があったので,ほとんど記憶が無い.
あとは,止めてしまったカード類を再発行して貰わないと.クレジットカードは止めるのはすぐできても,戻すためには再発行が必要で番号も変わってしまうらしい.色々な手続きがとても面倒だし,月末支払のものが全部失敗するはずなので,ネットとか止まらないかびくびくして過ごさなければいけない.
なにはともあれ,良かったです.
*rundll32.exe
昔からWindowsをバッチファイルで操作してる人の99%の人がお世話になっているに違い無いプログラムです.そして多くの人はuser32内のMessageBoxAとかを呼び出せるのではないかと期待し,直後に絶望したと思います.
今更ですが,KB164787によると,
void CALLBACK
EntryPoint(HWND hwnd, HINSTANCE hinst, LPSTR lpszCmdLine, int nCmdShow);
と宣言された関数とみなして呼ぶようです.
何勝手にHINSTANCEとか渡してるんですか.あと文字列と数値くらいは自由に渡せるようにしてほしいな.そして戻り値はvoidなので結果は受け取れない
任意の引数のAPI呼べるように作っておいてくれればバッチファイルでもっと色々できたのに.
*Dokan Ruby
DokanライブラリのRubyバインディングが最新版で動かなかったので,修正してみました.
Dokan 0.5.2とRuby 1.9.1で動きます.
とりあえずおいておきます.
dokan-ruby-0.1.5.1229.p1.zip
おなか減ったので,とりあえず秋葉原に.しかし,財布が無いことに気づいて,何も食べずに帰る.
帰って財布を捜すが見当たらない.やっぱり,どこかで落としたのか.
一番可能性が高いのは電車なので駅に電話して聞いてみるが見つからなかった.
とりあえず銀行とカード会社に連絡してカード類を止めた.免許証とかも入ってたので面倒だなあ….
*Dokan Library
RubyからDokan使おうかと思ったのだけど,Ruby1.9だとdllが無いと言われるので,少し修正してコンパイルし直す.
でも,なぜか,opendirでtrue返すとunmountされてしまう.false返すとなぜか大丈夫だけど,Dokan上のファイルは開けない.
Ruby1.9だとダメなのかと思って,1.8を使ってDLしたライブラリ使ってもダメだった.
Dokan Rubyバインディングが古いのかと思ってDokanのソースのdokan.h見たらDOKAN_OPERATIONSにメンバ増えてるし….なんでいきなりUnmountするのかと思ったけど,GetDiskFreeSpaceが呼ばれてたのか.
とりあえず動いたので良しとしよう.
あ.今年も寿司食べたのに,写真撮るの忘れた.まぁ,コンビニのお寿司ですが.
*2008は12位,2009は37位,2010は120位?
はい,このタイトルはICFPのプログラミングコンテストの私入ってたチームの順位です.
自分のプログラミング能力は大丈夫なのかな….そもそも今回はほとんんどプログラム書いてない.
*ICFP Programming Contest 2010
http://icfpcontest.org/
終わりました.
無残な結果.気力とか色々足りなかった.そしてサーバが重すぎた.というか,真面目な解析プログラムより,自動submitプログラムの方が重要で,高得点の人はみんな使ってたんじゃないだろうか.簡単な車作ると一瞬で燃料がsubmitされてくるので.
問題は面白かったけど,サーバが重いのと,真面目にsubmitするインターフェイスをどうにかしてほしかった.自動的にやる前提だったのかもしれないですが.
以下ネタばれ注意
以下ネタばれ注意
だいたい,時系列順に説明します.
―0日目
開始時間より少し遅れて eldesh のところに行くが,無線LANつながらない….とりあえず夕食でも食べることに.結局,22時頃に開始.まだ点を取っている人いないみたい.
回路
まずは,回路(燃料を生成する工場)の仕組みを解析します.何か意味ありそうなリストが問題に載っているので解析が簡単そう.
各ノードが扱うのは,0,1,2の3値論理.回路を動かしてみると,片方の出力が比較で,もう片方がNAND演算かなくらいは予想できる.実際には,差(L-R)と積(L*R-1)でしたが.
問題読んだ後,入出力ノードは何も演算をしないと勘違いしていたが,実際にやったら何かやっていることに気づいた.さらに,他のノードと違うことをやっていたらどうしようという疑心暗鬼に.
入出力を表すXを2つのゲートにまたがってかけることに気づくと小さい回路を手で作るのが楽になる.初日は気づかずに,少し苦労して回路を作っていた.
ノードの種類らしい数字が付いていたけど,最後まで何ができるのか分からなかった.(0以外を色々入れてみたけど,エラーになる)
この時点で,prefixの生成に成功している人が出てきた.少し焦るが寝る.
―ここで0日目終了
細かい回路を何パターンも試して,ノードの動作を調べる.
ノードの動作が分かると,問題に書かれている回路をローカルでシミュレートできて燃料の正しいprefixが得られる.
ただし,サーバ上では入力不明なので正しいプレフィックスを出力できない.
まず,入力をそのまま出力する回路を作ってサーバ上のストリームを調べる.
あとは,がんばって好きな回路を生成する.
Carの解析はeldeshとkmuroiに任せて,今後必要になりそうな回路モジュールと,生成プログラムや複数回路を接続するツール等を作る.
将来的に,無限長の任意のストリームを生成する必要が出てくると予測して,まずは効率悪いが何でもできる生成プログラムを作っていたが,そんな必要なくて,燃料とか有限長で短かった.結局,このとき作ったものはほとんど無駄だった.
というわけで,そのツールで生成した500行もあるprefix出力回路をsubmitして最初の点を得た.2030頃.
ぎりぎり24時間以内にここまできた.
その後は,ご飯食べたり,色々考えたり.
―ここで1日目終了
家に帰って寝る.
起きて洗濯したりアニメみたりして,夕方eldesh家に.
夕食は,寿司を食べたかったけど,品川で焼肉食べた.
kmuroiは帰った.
CarとFuelの解析が進んでいないようだったので,エラーメッセージ見ながら,簡単そうな車にsubmitしたら通った.他のも通りそうだけど,放置して寝る.
―ここで2日目終了
ストリーム
すべてのデータは3進数のストリームで扱われます.
朝起きて,ふとストリームの構造を調べ始める.Carのsubmitフォームで何度も試行して解析.今まで悩まされていたけど,真面目に調べると意外とあっけなく構造が見えてきた.
「22」というのが,その後の桁数を調節しています.
10進の0,1,2,3,4,5,6… は 0,1,220,2210,2211,2212,2222000…になります.
22の後の1桁はその後に続く桁数.2222の後の2桁も,その後に続く桁数.というわけで,22で桁数を調整しているのか.再帰的.
もうひとつ,数値の表現形式があって,
0,10,12,22000,22001,22002…
こちらは,桁数(これは上の規則で記述)+数値という形になっていて,リスト形式のデータに使われています.
本当は綺麗規則があると思うし,なんとなく考えたけど,実用上は問題ないのでこれで.
で,まだ眠いので寝る.再び起きたのは14時くらい忘れないうちに色々確認.やっぱり合ってた.
最初のと同じ燃料で走る車があるみたいなので,eldeshがsubmitしてくれていた.ついでに,今まで1000行くらいあった回路を35行くらいで作るプログラムを作成.最初作ったものより,こっちの方がとても単純.
Carのストリーム内の数値やリストやフラグの構造を把握したのが1740頃.
時間がない.
残ったフラグがmain camberを表すと気付いてCarの解析が終わったのが1845頃.
Fuelもそっくりだなと思って,数回試して意味が分かったのが,1855頃.
とりあえず,手作業で車と燃料を作ってみることに.2000頃?
最初の車をsubmit.2031.
そしてサーバが重い.
どうせ30分しかないし,自動化は難しそうだったので,似たような車を数台作ることに.そして,簡単な車だと,submitしてもすぐに他の人が燃料を供給し始めるので,点が上がらない.
というわけで,3台作った.
―ここで3日目終了
なんとか,全容を把握するところまでたどり着いたけど,得点に反映させる間も無く終わってしまった.
2日目がネックになっていた気がしないでもない.真面目にストリームを解析するしかなかったが,最初やりたくなかった.
車
燃焼室の数,upper pipeの情報, main chamberフラグ,lower pipeの情報…
例:
220100220101022011111022111010011
-
220 燃焼室の数(2)
-
1 upper pipeにつながるタンクリスト長(1)
-
0 main chamber flag(?) false
-
220 lower pipeにつながるタンクリスト長(2)
-
220 tunk list len:2
-
10 flag true
-
2211 tunk list len:4
-
10 tunk1
-
10 tunk1
-
0 tunk0
-
11 tunk2
燃料
タンク1,成分1の燃料は,エラーメッセージ見れば簡単に作れる.これをサブミットし続けるだけで,そこそこ点が取れたかもしれない.
最初の数字が,タンクの数,その後に成分数.タンクはc(i,k)が入っている二次元のリストが,タンク数分だけある.
感想
問題はとても面白かった.
個人的に,いまいちだった点は
-
ビジュアライザとかツール作るの好きだけど,必要無かった
-
本格的にコードを書くまでが長すぎる(全容を把握するまでの手順が多い…)
-
大量にsubmitしないと高得点取れない(submitまで自動化する問題だったのかも?)
-
サーバが重いのでローカルでやることを増やして欲しかった
*ICFP
後で書く.
とりあえず,任意のストリーム出力する回路を生成するプログラムを書く.数千行の回路が出力された…まあ,いいか.
焼肉食べる.本当は寿司がよかったのだけど,店が閉まっていた.
昨日の21時から24時間は進展無しだった.
回路があまりにも冗長なので,ちゃんと書いたら数十行になった.10/1くらいだ.
というか,なんであんな妙なものを作ってしまったのか不明.最初作ったやつは,無意味な気合の入り方なので,あとで説明書きたい.とりあえず簡単に書くと,
-
入力に関わらず一定の出力をする回路
-
ストリームを複製する回路
-
先頭の1桁だけ指定した出力になる回路
-
1単位時間だけ信号を遅らせる回路
-
1つのゲートを使って引き算
この4つを使って,任意のストリームを生成するというものなのだけど,プログラムに頼って生成したら,とても酷いことになってしまった.
そのあと,単純に考えて,1桁ずつ,0,1,2のどれかを引いて出力が会うように辻褄をあわせるだけのプログラムを書く.
実行時間も短いし,出力も小さくなった.というか,他の人は最初からこれくらいなんだろうな.
にしても,数値のエンコーディングが難しいな
*ICFP
昨日は,ゲートの大体の動作を確認して寝た.
今日はやっとプログラミングコンテストっぽくなってきた.
ゲートの動作は,差とNANDかと思ってたのに微妙に違った.
20時ごろ,やっと正しいprefixを出力する回路を作れた.
*ICFP Programming Contest 2010 0日目
今日のGMT12:00(日本時間だと21時)から72時間のICFPのコンテストが始まります.
数年間やってみて感じたICFPのコンテストの特徴を書くと,
-
問題が公開されたから,72時間でより良い物を作る
-
チームでやってもいい.今年は人数制限無し
-
最初に見えている問題の説明が全てだと思わない方が良い
-
速度自体は求められないが,遅いコードは試行錯誤するためには致命的
-
英語
な感じです.
関数型言語の学会が,「最強の言語」を決めるために開催しているコンテストなので,優勝すると,その時使った言語が一部界隈で「最強の言語」として認められます.
ICFPは関数型言語の学会ですが,使用言語は何でも良いので,好きな言語で参加すれば良いとお見ます.ただ,若干Haskellとか有利な問題が出たりもしますし,スクリプト言語だと,結構頑張って書いても1回の試行に数時間かかってしまいそうできついかも.
検索すればすぐ出てきますが,過去のコンテストの内容を以下に.
2009
去年は有休取れなかったので2日だけの参加でした.
人工衛星を制御して,なるべく少ない燃料,時間で指定された軌道に乗せたり,軌道上を回っている物体にランデブーするためのエンジンの噴射パターンを求める問題.
まず,与えられた人工衛星のプログラムを動かすためのVMを作るところからスタート.ある時間の色々な座標が分かるので,そこから軌道を予測したり,試行錯誤.最初は物理の問題で,その後は誤差と戦い.最終的には時間との戦い.
途中で,月の重力の影響も受けることが分かった….
2008
火星上の車(ローバー)を制御して障害物と火星人(!?)を避けて目的地にいかに早く到達するか.
近くしか見れないので,地図を作りながら安全で最短な経路を予想する.socket経由でサーバに接続してローバーを制御.なのでレイテンシがある.
迷路みたいな入り組んだ地形にも対応できるように作ったけど,結果発表で公開されたマップ見たらそんな地形は無かった.
2007
DNAを維持ってEndoさんを救う.
EndoさんのDNAである文字列をプログラムに見立てて処理するとRNAが作れる.RNAは画像を生成する描画データになっているので,処理すると瀕死のEndoさん.DNAになるべく少ない修正をして,Endoさんが生存できるようにする.
C++で普通に書くとRNA生成に数時間かかるので,適したデータ構造を考える問題.線形時間未満で実行できる文字列のsubstrとappendが必要.Haskellずるい.
2007
umix.
VMを作って実行するとunixもどきが立ち上がる.ギリシャ数字を使ったBASICとか,見たこと無い言語のソースとかが入っているので実行してヒントを得て,アカウントをクラックしたりする.真面目にクリアしたくない,難解なアドベンチャーゲームとかも入っている.
少し読んだ:http://en.wikipedia.org/wiki/Dyson%27s_eternal_intelligence
面白いけど,なんだか,しっくりこないな.永遠の知性は得られても,文明を永久に発展させ続けることは,やっぱり情報量的に無理なような気がしないでもない.人類の文明を基準に考えるから駄目なのかなぁ.
*ICFP 2010 Programming Contest
明日の夜から.月曜は有休取った.場所も確保した.
眠い.
twitbeamが公開されたので使ったりした.
*SoftBankの携帯とか
今まで書くの控えてたのですが,検索したらすぐヒットするようになったので,もう周知の事実っぽいしいいか.
SoftBankの携帯の中には,JavaScriptからUser-Agentをいじれる機種があります.ただ,先頭の方はチェックしているようで,SoftBankの端末を名乗らないとゲートウェイに蹴られます.
DNSリバインディングでXSS無いサイトでもjs実行できます.なんとHostヘッダも書き換えられる機種もあるっぽいですね.SoftBankのjsは高機能.
ソースコード検索で,strpos.*DoCoMo.*!==\s*false guid とか検索すると何か出てきました.
User-Agentじゃなくて,User!Agentとかを紛れ込ませても,ヘッダの順番はUser-Agentが必ず最後になるようです.惜しいですね.
という事実を知ったのですが,頭が悪いせいか,どういうことなのかわかりませんでした.
秋葉原行った.
はやぶさ,ちゃんと帰ってきてカプセルも無事なようですね.ニコ生は混んでてなかなか入れなかったですが….
7年前の打ち上げのときから見てたので,帰ってきたのは嬉しいのですが,興味の対象がひとつ減ってしまった喪失感も大きいです.
*はやぶさと私
はやぶさは,もし無かったら今の自分も無いと言えるほどの小惑星探査機です.これはまだ誰にも言った覚えも無いし,そもそも忘れていました.
2003-05-08に「なんだかロケットを作って飛ばしたい気分です」と書いたのが,はやぶさを載せたロケットの打ち上げ準備の記事を見てのものだったと思います.
大学時代,kstm.org(現在サイトが非常に重いです)というサークルで活動していたのですが,このkstm.orgを作る最初のきっかけが,この「なんだかロケットを作って飛ばしたい気分」だったりします.他にも色々な原因があるし,これが無くても,まぁ皆集まったと思いますが.
5月下旬,入学して知り合った人たちと,かなり真面目に在学中にロケットを打ち上げる議論をしたのですが,結局,予算や法律の都合でロボット方面にすることにしました.二足歩行ロボットとか話題になってた時期だったので,自分たちでもっと凄いものを作ろうという話になりました.最初は,手ごろな材料でロボットハンドを作ったりしてたのですが,とりあえず動くと飽きてしまって,別の興味の対象を探し始めるという集団でした.まぁ,これが後でNHK大学ロボコンに出場するときにとても役に立ちましたが,それはまた機会があれば.
そのあと,kstm.orgを公式サークルにして,人を集めて,プログラミングコンテストにも出てみたり,たまに宇宙に思いを馳せてペットボトルロケットを飛ばしたり,天体観測したり,某湖に宇宙船でも沈んでたりしないかと湖底探索計画を立案したりと,色々やりました.
サークル自体は,人も増えたし,怪しいソフト開発して新聞社から取材を受けたり,学長や後援会に表彰されたり,色々成功だったような気もしますが,残念ながら当初の目的は果たせずに卒業してしまいました.
でも「なんだかロケットを作って飛ばしたい気分」は,ずっと持ち続けてるのでどこかで実現したいなあ.
ほとんど,はやぶさ関係ないですね.
はやぶさは,色々な困難を乗り越えて帰ってきてくれましたが,そんなことはただの感動の物語であって私の人生には今のところ関係なく,はやぶさという小惑星探査機が存在してくれたことにとても感謝しています.
*ビリヤード
shimobayashiに誘われたので神保町のビリヤード場に.ビリヤードは2年前に数回やっただけなので,ルールを思い出すとかそういうレベルからスタートでした.そういえば,会社のビリヤード台は,遊ぶ前に撤去されてしまった.
そのあと,カレー食べてから,shimobayashiの家でカタン.
行くまで知らなかったのですが,VoQn,yorukaも一緒でした.私の知り合いはshimobayashiだけでしたが久しぶりにまともな遊びをして楽しかった.
カタン,今まで興味無かったのでやってなかったのですが面白かったです.
ゲームってやってみると面白いのですが,やる前はそれに時間を費やす覚悟がなかなかできないので,ほとんどやりません.
*最近,本を買っていない
ここ1年,ほとんど本を買ってないなあ.時間がないというのもあるのだけど,本屋で手に取って見ると,今更紙の本とかあり得ない,と思ってしまう.
今のところは紙の本も良いけど,気に入った本は10年単位で持ち続けることを考えると,10年とか20年後に紙の本が手元にあるのはいやなのです.私は一度愛着が沸くとなかなか捨てられないので早く電子ブックで売ってほしい.
持っている本もスキャンして電子化したいのだけど,面倒くさくてなかなかできない.次に引っ越す前にはどうにかしたいのだけど….
紙の温もりとか愛着とか言う話も聞くけど,単にデジタルデータの歴史が浅いから,まだみんな温もりや愛着を感じられないだけだと思うな.実際,昔書いたコードの断片とか,文章とか,その内容だけじゃなくてビット列そのものに対する思い入れがあるし.
mizuho銀行の口座残高を毎日はてなグラフにPOSTするようにした.
みずほダイレクトからは2カ月分しか取れないのか….2月からのデータは家の鯖にあったので,あとでcsvにして登録しておこう.過去のが取得できないのは不便だな.さすがに通帳からデータ化するのはいやだし.
とりあえず,給与振込みの前後の残高だけ入れたら不思議なグラフになった.
http://graph.hatena.ne.jp/binzume-net/mizuho/
去年の12月ころまでは,別の口座の貯金で生きていたし寮住まいなので,ほとんど階段状.その後,ボーナスで何か買ったり,イーバンクの口座に移したりして急降下.今年に入ってから,みずほの口座をそれなりに使うようになったのと,奨学金の返済もこの口座にしたので,人間らしい金使いになったように見える.
イーバンクの口座とかもう使わない気がするのでまとめようかなあ.
寝る.
寝て起きると,何気なく12時間以上経過しているのは,どういうことなんだろうか.
*Google Earth
久しぶりに見たら,テクスチャの張られた3Dモデルで表示される建物がかなり増えていた.
*とあるビル
↓建物をクリックすると表示される情報
え?いつから明治座はドワンゴのビルになったんでしょうか.一応モデルの選考基準はあるみたいだけど,このへんのチェックはいい加減っぽいな.
*永代橋
家から徒歩20秒くらいのところにある橋.
比較のために屋上から同じ視点の写真を取ろうと思ったけど,フェンスとか色々邪魔でうまく撮れなかった.
今頃気づいたのだけど,最上階の川側の部屋からは屋上の専用スペースに上がれるようになっているようだ.物件情報を見ると確かに最上階だけそれらしい階段がある.その領域が邪魔で今回写真が取れなかったのだけど.
作者情報があるオブジェクトや,複雑な橋とか明らかに人間が作っているものもあるけど,他はゼンリンあたりのデータにテクスチャを張っただけに見える.ただテクスチャはストリービューよりかなり解像度高いし,航空写真を使ったと思われる屋上の画像もGoogle Earthのものより新しい.
あと,さりげなく道路を走っている車まで3Dになってるのとかあるな….
出社してすぐミーティングで,そのあと引越しの準備してたのでほとんど仕事できず.
*引越し
オフィスの席替えです.いまいる13Fとは別に11Fにも私の席があったのですが,1年間ほとんど使わなかった.そして,とうとう消滅して13Fだけになりました.11Fで仕事する夢が潰えました.どうせ半年後にまた席替えな気がしますが.
「ゆっくり」も自販機の上に退避.
*研究開発本部祭
今日は,研究開発本部祭もとい新人歓迎会.研究開発本部の多くの人と物理的にコミュニケーションが取れる貴重な日.
偉い人がプロジェクターでコーディングを披露していたけど,このころはみんな食事に夢中だったのであまり注目されていなかった.
*あああ
某SoftBank端末のXMLHttpRequestのsetRequestHeaderでごにょごにょする話を書きたいのだけど,まだ書けないです.
まぁ,↓のURLでも少し触れられていますが
http://www.slideshare.net/ockeghem/was-forum-2010
Web開発での「クライアントから送られてきた情報は信用しない」という原則が日本のモバイルサイト開発では無視されているのが問題だよなぁ.間にキャリアのゲートウェイが挟まっているからある程度の信頼性は確保できるけど,どこまでが信頼してよい情報なのかというのがゲートウェイの仕様に依存しているけど,そのあたりの正確な情報はキャリアの公式サイトを作っててもなかなか分からない.
*寝坊した
目覚ましセットするのを忘れていて12時間も寝てしまった.携帯の電池も切れてて電話も繋がらなかったらしい.