「ISHOCON1」と「DISCO presents ディスカバリーチャンネル コードコンテスト2017 予選」と「PHPカンファレンス2017」と「CODE FESTIVAL 2017 qual B」と「DevFest Tokyo 2017」に参加してきた話

タイトルめっちゃ長いですね、ごめんなさい。内容もめっちゃ長いです、ごめんなさい。

 

 

先週末、面白そうなイベントがいっぱいあったので、とりあえず片っ端から参加してきました。

 

10/7 ISHOCON1 DDCC予選

ISHOCON1

朝4:30に高速バスに乗り込み、長野から新宿へ、京浜東北線で渋谷まで。

株式会社scouty様にて、ISHOCONというISUCONの練習会が開かれるとの情報を得て、参加してきました。
scouty.co.jp

scouty.connpass.com

 ISUCONは一昨年から毎年参加しているコンテストで、Webアプリケーションをレギュレーション内においてひたすら早くするコンテストです。去年はこんな感じで、学生一位をとりました。

goryudyuma.hatenablog.jp

今年も開催されるので、去年に引き続き史上初(多分)の学生連覇を目指して頑張ります。そのためにも練習が必要で、練習会を開催してくださる、それも参加費無料でってなると、めちゃくちゃありがたいです。運営に感謝!

結果を先に書くと、(実質)優勝でした✌️ 実質というのは、点数的には二位だったんですけど、点数一位の@showwinさんが、作問者かつ運営という立場だったので、一位の立場が降ってきた感じですね〜。後ちょっとだったので、完全勝利したかったのですが・・・。次は勝ちます。

コードはある程度Gitで管理していたのですが、コミットログが適当すぎて何してるかわからないと思われるので、時系列順に書いときます。なお、[n]はベンチマークでn点取ったことを示しています。素のVimでGofmtとか使わずに書いたので、インデントとかバラバラなのは許して。

github.com

個人参加ですがチーム名を決める必要があり、優勝商品がシャチョーさんと焼肉らしいので、思うがまま「焼肉食べたい」って名前にしました。

 

朝 渋谷駅新南口を出たまではよかった、でもそこからだと大分遠回りになってしまった。まさか橋もトンネルも一本もないなんて・・・。

会場入り 出席とって、荷物置いて、会場内Wifi入ったらMacのアプデが・・・。あの、パスワードのヒント出すとパスワードが平文で出てくるって奴ですね、これは上げなきゃまずいということでアップデート開始(←本番直前にんなことすんなよ!)

10時、競技開始 Macのアプデ終わらず、スマホでレギュレーション読む。簡単なルールの読み合わせがあった後、アプデ終われーって祈る時間

アプデ終わり まずはサーバー立ててとりあえずenqueueして、環境確認。とりあえず僕はDB担当なので、まずはDBから見ていく。MySQL5.5で動いてたので、即5.7へ上げて、mysql-slow-queryを入れる。[138]

11時過ぎ インデックスペタペタ貼って、ベンチ回す。16533点でトップに立つ。そろそろwebappをサービスとして立ち上げたいな、init.d書くかーってなる。[16533]

12時 一位だったのは一瞬だった、すぐに抜かれた。init.dに書いたけどうまく動かなくて、昼ごはん食べる。美味しかった。ふつーに動かすことはできるので、サービス化は諦め。一人じゃなくてチームなら、インフラ班に任せるみたいにできるんだけど・・・。昼食中のおしゃべりで、ベンチマークの引数にworkloadでもっと並列度あげるといいかも?みたいな話が出たのでちょっとやってみる。スコア少し伸びた。[19791]

12時半  ISUCON本番だと、他のチームメンバーがみるところも、一人だと全部みる必要がある。ツライ。でもできないわけではないのでやる。nginxからgzip済みの画像を配信するように変更[23169]

13時  「僕はDB担当!」って心の中で叫んでいたので、ここまでコードはほとんど読んでいない。そろそろ読むかという気持ちになる。他のチームでマイナス何十万点みたいな幻を見た気がする。あれは一体なんだったのか・・・。

14時  全データをメモリに乗せてしまうことを決意。ISUCON6予選で僕たちがやった方法。書き込みはDBにもメモリ上にもするが、読み込みはメモリ上からのみ読み込むことで、読み込みをひたすら早くするのと同時に再起動試験にも耐えうるようにする。後、initialize時にメモリ上にデータを構築するようにしとく必要あり。実装開始。

15時  なんかページ番号と件数とがあってないみたいなこと言われまくる。後々わかるが、自分の実装バグ。まあ適当に直したが、ちょっと手間取ってた。そのほかにも気づいた点があれば随時直していた。[35593]

17時 データをメモリ上に乗せたやつが、ベンチ完走。三位くらいにつける[106002]

17時20分  Go1.6が使われてたので、Go1.9に。なんでもっと早く気づかなかった・・・。ガチャ回し始める。[125206]

17時40分  ガチャ回す。workloadの値変えたりキャッシュいじって見たり。再起動試験とか細かいことはしない感じだったのですが、とりあえず18時にベンチ落ちることはないようにしていた。点数もキリがいいところで止めた。[134000]

18時  終了!二位かー、残念って思ってたところ、前述の理由で実質一位に!

 

f:id:Goryudyuma:20171011170419p:plain

 

かなりセーフにプレイしたので、例えば最後の方、頑張ればできそうだなと思った点数上がるポイントいくつか見つけてたけど、手を出さなかった。終了間際までやる癖は、少なくともISUCONにおいては絶対にやめたほうがいい。・・・と、二年前の本戦でFail(再起動後のベンチマーク完走せず)した経験から得た知見があった。ここマジで重要。いくら後ちょっとの改善で勝てそうだとしても、グッと我慢して、自分の実力は今はここまで、次は勝つぞって思うことが次に繋がるって信じてる。

 

懇親会でビール二本ほど飲みながら、「あそこどーしましたー?」とか、「本戦頑張りましょー」とか。scoutyのインターン生、楽しそうだったなあ。

チーム名「焼肉食べたい」の想いが通じ、今度焼肉奢ってもらえそうです。また東京行くときに日程調整します!

 

DISCO presents ディスカバリーチャンネル コードコンテスト2017 予選

 

終わった後は渋谷を離れて、ラーメン食べてネカフェに入った。その次のイベントに参加。AtCoder上のオンライン参加なので、ネットに繋がってて端末があって、コーディング環境があればどこにいても参加可能。

All submissions - DISCO presents ディスカバリーチャンネル コードコンテスト2017 予選 | AtCoder

結果は4完154位でした。19卒から100人本戦に行けるので、上に100人も19卒がいると思えないんで、行けたんじゃないかなーって思ってます。

AとBはやるだけ、Cは300点問題だし二重ループで終わるやろ〜って書いてDへ行く。もちろん終わってなくて、Dに悩んでるときにちょっと結果見て、TLEって出てて血の気が引いた。一重ループににぶたんするようにして計算量落として、バグってて一回WA出したけどAC。Dは上下対称か左右対称を作って、上下対称作った後は左右対称、左右対称作った後は上下対称作れば、後は4つずつポイントが入るので最適そう、って組んだけど、点数計算のところがどうにもバグりまくって、最後は気合いで通した。

まあうん、競技プログラミングやるのはいいけど、朝3時ごろから起きてて超眠くて、ビール飲んでしかもネカフェというパーソナルスペース(?)もへったくれもないところでやるとこうなるよねってやつですね。これでギリギリ通らなかったとかなりゃ、後悔するかも・・・。でもまあ、その時はその時だなあ。

というわけで、1日目終了。寝た。

 

10/8 PHPカンファレンス コドフェス予選B

あんま目覚めは良くなかったけど、蒲田まで行く。時間あったので銭湯行ってひとっぷろ浴びる。

PHPカンファレンス

phpcon.php.gr.jp

今年で三年連続参加。僕はカンファレンスを、世間ではこんなことやってるんだってのを知る機会として利用してる。特に知らない単語をいっぱい仕入れて、帰ってからその単語とかサービスを調べて見て、いざ何か作ろうってなったときに使える引き出しを増やすって感じ。

ただ、何分長野からだと参加するのが難しいのが少し悩み。早く東京就職決めて、もっと引き出しを増やす機会を増やしたい。

今年心に残ったことは、

  • グラブルはメインデータをCSVで管理している(!?)こと
  • 徳丸先生の講演は特に興味深く拝聴させていただいている、なんというかよくそんな脆弱性見つけられたなってのが分かりやすく解説していただけるのがとてもありがたい
  • MySQLのチューニングは、ISUCONでやってることではあったが、具体的にこうなるから早くなるよってことが示されてなるほどってなった。バッファプールの関係でSELECT時に書き込みが発生しうる点とか面白い。
  • 結果にコミットできるデバイス、最高では。しかも効果ありとなると、商品化待った無し。

などです。

それから、企業ブースに出ていらっしゃったmedibaさんから頂いた、「nu board」ってやつがめっちゃ神です。ノート型のホワイトボードで、めっちゃ使いやすいです。今度から持ち歩くものが一つ増えました。

 本当にありがとうござました!

 

CODE FESTIVAL 2017 qual B

またネカフェ入ろうと思ったけど、なんとなくホテル調べてみようと思って適当に探してると、カプセルホテル一泊3100円見つけて「これは行くしかないなー、久々にカプセルホテル泊まりたいし」ってなって、予約して20分ほどでチェックイン。booking.com初めて利用しましたけど、めっちゃ簡単に取れました。

ちゃんとWifiついてるところ選んだので、問題なくコドフェス予選出れます。一応ネットのチェックした後、なんか大浴場ついてたのでとりあえずお風呂。

「今日はビール飲んでないしー」とか思いながら開始、無事死亡って感じでしたね。疲れもあったと思う・・・。

ABCの三完、289位、日本人119位でした。うーん、サンクスも厳しそーかなーってなった。

 ここでさっきのmedibaさんから頂いた「nu board」が超役に立ったのですよ!(モロマ)

 

CANSAY nu board ヌーボード A4判 NGA403FN08

CANSAY nu board ヌーボード A4判 NGA403FN08

 

 外出先でちょっとホワイトボードがあると、思考の整理がしやすかったです。C問題とか、これがなかったら解けたかどうか怪しいし。

これで二日目終わり。

 

10/9 DevFest Tokyo 2017

池上線

朝から池上線に行きました。この日は90周年で無料開放デーだったのです。

 朝8時ごろに行ったので、まあ普通に人は多かったですけど、全然乗れないなんてことはなかったです。昼頃ツイッターに大混雑って流れてて、朝のうちに行ってよかったなーって思いました。

五反田から大崎へ行き、りんかい線東京テレポートまで行きました。

DevFest Tokyo 2017

実は今回東京行く前、 「月曜日授業かー、帰ってきて一限出るのつらいなー」って話したら「月曜祝日だよ何言ってるの」って言われて「じゃあ月曜まで東京いてもいいじゃん!なんかイベントないかな!?」ってconnpass見たらあったのがこのイベント。かなりゆるい気持ちで参加しました。

  • Firebase,正直何も知らなくて、色々できそうってことがわかった。
  • GCPAWSもそうだけど、多すぎて何がなんやら。どんどん触らないとわからないんだろうけど、触るためにはわかってないと難しそうってスパイラル。
  • React Nativeってふつーに使えるんだなー、これは触って見なければ。
  • Golang2.0の話題も出てくるんだなー、どーなるんだろなー。
  • AppEngineのためだけにGo書く人もいるらしいので、Goをある程度書く人として、少しは触っといたほうが良さそうね。

満員の会場とか出てたり、人気の講演は人がいっぱいでした。また触ってみたい技術がいっぱい出てきたので、ちょっとずつ消化して行きます。

 

終わって

終わった後は新宿に出てご飯食べてバスタから長野まで帰りました。

三日間、超疲れました。ようやく体調回復したのと、やる気が出たので、アウトプットしときます。

(夏休みやってたこととかまだアウトプットできてない・・・どーしよ・・・。Fringe81さんにインターン行ったり、IBMメインフレームコンテストに出たり、Gitチャレンジに出たりしてました。)

 

また今後も、勉強会、コンテストなどで東京行きます!お会いした時などにはよろしくお願いします!