「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チャレンジに出たりしてました。)

 

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

PC環境メモ

自分のPC環境についてメモしとこうと思います。

 

ノートPC

13inch MacBookPro2016

13インチMacBook Pro - スペースグレイ
システム構成
•   2.9GHzデュアルコアIntel Core i5プロセッサ(Turbo Boost使用時最大3.3GHz)
•   16GB 2,133MHzメモリ
•   Intel Iris Graphics 550
•   512GB PCIeベースSSD
•   Thunderbolt 3ポート x 4
•   Touch BarとTouch ID
•   感圧タッチトラックパッド
•   PRO APPS 065-C171 NONE
•   LOGIC PRO 065-C172 NONE
•   バックライトキーボード (US) + 製品マニュアル(日本語)
•   アクセサリキット

外出時のメインマシン。6月頃に買った。

初めてのMacで慣れないことも多いけど、働いてくれている。

Touch Barは非常に微妙だと思うけど、TouchIDはすごくいい機能だと思う。

BootCampでWindows10も入れてる。VisualStudioとか使うときに開く。

でも動作が微妙で、たまに固まったり変な動作するところがイライラする、ので本当に非常用になってしまっている。

買った直後に2017が出て少し悲しくなったが、2017が2016に比べてそんなに変化なくてまあよかったかな。

 

デスクトップPC

■OS : Windows 10 Home 64ビット
■CPU : インテル® Core™ i7-6800K
■メモリ : 32GB PC4-17000 (8GB×4)
SSD : 480GB ( 6Gbps 対応 )
■グラフィックス :
GeForce® GTX 1080(8GB)
■電源:700W / 80PLUS® BRONZE 
■DVDスーパーマルチドライブ搭載

f:id:Goryudyuma:20170911003014j:plain

最近自宅に入った家庭用メインマシン。7月に買った。

動作サクサクでめちゃくちゃいい。

ディスプレイ三枚環境で運用してみようと思って、とりあえずこんな感じ。

f:id:Goryudyuma:20170911000706j:plain

スペック申し分なし、もう家から出たくない・・・。

 

 

ポンポン新しいPC買ってしまった。

しばらくはこの二台と、前まで使ってたWindowsノートPCを予備機として三台体制で運用します。

これでインターンとISUCONで稼いだPC用の予算がほぼ尽きてしまった。大人買い楽しかったし、後悔はしていない。(てか予算の元、どっちもLINEだった・・・感謝しかないな、うん。)

 

goryudyuma.hatenablog.jp

 Macは買わないとか言ってた以外は、この時に書いた通りノートPCとデスクトップPCの体制になりました。

 

最高の環境を整えたので、こいつらを更新しつつ、いろんな成果を出していこうと思います!

LINE Winter Internship 2017に参加してきた

もう終わってから結構経っちゃいましたけど、LINE株式会社にてインターン生してました。

line-hr.jp

守秘義務だの何だのあって、実際に何やったのよとか、書いたコードはどんなだとかは書いちゃダメなので、次回以降応募しようか迷ってる人に向けて流れとかを書き残して置こうと思います。

めっちゃ長文かつ感想というか個人的なものが大量に入ってるんで、適当に読み飛ばしてください。

 

 

応募

まずはインターンについて知る必要があります。(このフェーズはツイッターとかブログとかでいいんですけど、)僕はISUCON6決勝で、LINEの社員さんとお話した時に「うちのインターン来ない?」みたいに誘われました。学生一位取った直後でビールも結構飲んでて、かなり気が大きくなってたと思います、「いいっすよー!」みたいに答えた覚えが微かにあります・・・(ほんとごめんなさい、めっちゃ失礼ですね・・・)。

「あ、でも僕LINE使ってないですけどいいですか?」ってのもついでに聞きました。ついでとか言いながら、かなり重要な事ですけど。そもそも僕、LINEのコミュニティって苦手で、「てかLINEやってる?」に代表されるあのリア充感というか、雰囲気がどうにも肌に合わない。ツイッターフェイスブックでいいやーって人です。大学の学科LINEがあって、そこに入るためだけにLINEアカウントを持っていましたが、そのグループLINEで「Skypeとか他のやつに移行しない?」とか発言するくらいには使ってない人でした。スマホ新しくしてからはアプリを入れず、その前のスマホ(sim無し)でたまに連絡チェックしてるくらいのユーザーでした。こんな僕でしたが、「いいですよー、是非応募してください!」って社員さんが言ってくださったので、「じゃあ応募しますね!」って返事しました。

次に応募です。ISUCONから帰ってしばらく経って、「LINEがインターン募集するぞ、しかも報酬は40万/月」ってのがTwitterのTL(タイムライン)に流れてきました。実はこの時、応募するのをかなり迷いました。そもそも力が足りてなさすぎてて、行ったとしても迷惑だろうってのが僕の中であったからです。でも応募するって言っちゃったし、もし実力足りてなけりゃ選考のどっかで落としてくれるだろ~、受けるだけ受けるか~って軽い感じでとりあえず応募しました。

まずあるのは書類選考です。もう結構経っちゃっててどんなのが出たのか全然覚えてませんけど、簡単に自己紹介とかしたような気がするようなしないような。作ったものとか。なんか通っちゃったらしくて、次の審査の技術テスト受けてください~ってメールが来ました。

技術テスト、3つの項目に別れていて、それぞれWeb上で答える形式でした。一つ目が応用情報午前問題みたいなやつで、時間内に絶対終わんねえよって問題数出されるのでひたすら4択だか5択だかを答えます。僕はたまたま応用情報受けた直後だったってのもあって、時間が足りない事以外は問題なくいけました。その次にあるのが、簡単な競プロみたいなプログラミング問題です。一行もコード書けない人を弾く的な意図らしく、ABC(AtcoderBeginnerContest)のC問くらい?の難易度だと思います。それもアルゴリズムの知識とかは特に必要でなく、どちらかと言うと実装ゲーって感じでした。ここで問題となるのが使用できる言語。あくまで問題が競プロっぽいってだけで、競プロではないので、言語指定とかあるわけでして。たしか、「Java,Python(2 or 3),node,Perl」の中から選べ的な感じだったと思います。これでこのLINEという会社がどんな人材を求めてるのか、薄っすらと見えてくるというものです。しかし困った当時の僕。「(得意言語の)C++PHPもGoも使えない!」ってなって、まだこの中だと書けそうなJavaで挑みました。制限時間の最初1/3を「JavaのPackageがわかんなくてコンパイル出来ねえ!」って溶かしたり、「Javaであれってどうやるんだ!?」みたいなのの連続で、「C++PHPなら一瞬で書けるのにぃ!(※要検証)」って言いながらなんとか書きました。最終提出ではテストケース一個だけ通らないところまで行き、制限時間が少し過ぎてからそのラスト一個も通るように直しましたがそっちは提出間に合わず・・・。「あーこれは落ちましたわー」って思いながら三つ目の項目、自己アピールを書きました。

しばらく経って格通。「なんでや!」って思いながらも、「面接来て下さーい」って書いてあったので、「よし、最後は東京旅行や、華々しく散るぞー」って日程調整して面接に行きました。面接はクリスマスの直後くらいでしたね。今だから言えることとして、面接前日から当日朝まで京都で日本酒たらふく飲んでて(お猪口換算で21杯、一万くらい使ったらしい?)、その後京都駅から東海道本線18切符で渋谷駅まで行きました。途中の駅でリバースもして、「ああこれが僕の限界か・・・」などと。お酒でリバースしたのはこの時が初めてで、ようやく限界を知れた喜びが強かったくらい狂っていたのを覚えています。お酒をたらふく飲んだ後に電車に揺られる、特に211系みたいに微妙に古くて揺れる電車だと激しく気持ち悪いことがわかりました(自明)。面接で提出する書類を確認した所ちょっとした不備が見つかったので、大船あたりからグリーン車で渋谷まで乗って(机の確保)、夕方渋谷についてすぐに面接。少しだけ体調回復したもののまだ気持ち悪さが残ってる中、就活で答えそうな、「超デカいリアルタイムに動くデータで遊びたいです!」的な事を話して、「こういう時、君ならどーする?」って聞かれたのに幾つか答えました。あと「東京で暮らすことに問題ない?」とか、「Javaに親殺されたりしてない?(意訳)」とか聞かれました。これで落とされたら仕方ないなーって出来でした。終わった後は開放感から、御殿場線乗りつぶししに戻って(あたしって、ほんとバカ)JR東海全線乗りつぶし達成、そのあと東京で友達と遊んで帰りました。

1月に入ってしばらく経って、電話にて格通。簡単に最後の確認(本当に来れるか等)された上で、いつからいつまでインターンするかをできるだけ早く決めてくれって言われました。卒論発表の直後の月曜からお願いしますと連絡し、めでたくインターン生になれることになりました。

 

労働環境

さて、もうすでにかなり長くなってますけど、まだまだ続きますよ。どんどん読み飛ばしてください。次は労働環境について。

  • 待  遇:
    ・4週間コース:報酬40万円
    ・8週間コース:報酬80万円
    ※遠方からの参加の場合、希望と審査により宿泊代を支援します。
    ※交通費全額支給
    ※期間中、定められた日数内であればお休みいただくことは可能です。
    ※勤務時間10:00~18:30(休憩1時間)

ってサイトには書いてありますけど、詳しく書きますね。

まず「これだけ報酬が多いと、いろいろ他で払わないといけないものがあるのでは?」って最初に思うかもしれませんが、報酬は報酬なので、普通に振り込まれます。

次に宿泊代を支援とのことですが、私の場合はマンスリーマンションを会社に借りていただきました。駅から近く、その最寄駅からもオフィスのある渋谷まで乗換なしっていう超好立地のマンションでした。部屋もひとり暮らしする分には文句なしにいい部屋でした。地方学生にはありがたすぎる支援です。

f:id:Goryudyuma:20170506025501j:plain

(一枚だけ入った直後に撮った写真があったので貼っておきます。なお、年によってマンスリーマンションだったり他だったりするようですので、あくまで私の例ということでお願いします。)もちろん会社からの支援ですので、特にお金取られたりとかはなかったです。強いて言うなら生活用品少しだけ揃えました。家電は一通り揃っていたのですが、食料品とかシャンプーとかは流石になかったので。

交通費全額支給、たしかにされてました。インターンの往復とか、面接の往復とかも新幹線代出てました。

次は期間中の休みの制度ですね。これ、有給です。20日の勤務日のうち、2日までなら有給として休んでいいよ~って言われました。それ以上休むなら給与から天引、らしいです。まあ僕の場合有給一回も使わなかったので、関係なかったのですが。普通は学校行事等どうしても休まざるを得なくても大丈夫にするような制度らしく、インターン中に休むのはもったいなさすぎると感じていた僕には必要ない制度でした。

勤務時間、10:00~18:30ですね。残業とかないの?とかは気になりますが、むしろ残業しようとしてると怒られます・・・。てか怒られました・・・。インターン生は超ホワイトでしたね。社員さんの中には、僕より早く来て僕より遅く帰る人もいて、社会人すごいってなってました。もちろん人それぞれで、僕より遅く来られる人も結構いらっしゃったり。

さて、ここからは書いてないこと。

まず、一人一台、PC貸与があります。インターン前に、「/^(MacBookPro (13|15)inch (JIS|US)keyboard | Windows)$/の中から選んで!」ってメールが来たので、ちょっと迷って希望を伝えた所、「MacBookPro2016 15inch US keyboard」がきました。(この記事をあなたがいつ読んでるのか知りませんが、出てから半年たってないモデルです。)Macをメインで使ったことがなく、またUSキーボードもメインで使ったことがなかったので、挑戦してみた感じです。Macに慣れるのに少し時間がかかりましたけど、慣れた後は普通に使いこなしてました。

それから一人一台、Dell4Kディスプレイが貸与されます。これも結構便利に使ってました。コード読むのも何するのも楽でした。

あとは机や椅子、各種社内ツールのアカウント、オフィス入館証などをもらいました。

朝ごはん、早く行けば無料でおにぎりがもらえたりします。昼はカフェで弁当が安く買える他、社員さんと外にもよく食べに行っていました。その節はごちそうさまでした。夜は惣菜買ってきて食べたりが多かったですが、飲み会形式で社員さんと食べたり、最後の方は仲良くなった他のインターン生と飲みに行ったりしてました。てな感じで、健康的な(不健康的な?)食生活を送ってました。基本夜型の僕が昼型になってた点も特筆すべき事案かもしれません。

 

やったこと

次は具体的にインターン中何してたかについて。最初に書いたように、コードを貼ったりすることはそもそもできないのですが、Web上で公開されてる範囲で答えると、JavaのSpring-bootってやつでWebサイトみたいなのを作ってました。実はこんなスライドがありまして、

www.slideshare.net

(僕の見た範囲でも)LINEってJavaの会社って言っても過言じゃないくらい使われてました。後はいわゆる歴史的な経緯から、Perlも少し。

とまあ軽く言語の話題に触れたところで、インターンの流れを。

まず2月24日に卒論発表を終えて、その土曜日に新幹線で移動。関東の友人たちと遊んだあとマンスリーマンション入居。足りない物をリストアップし、買い出しなどをする。インターン一週間目は、オリエンテーションの後、支給されたMacに慣れること、環境に慣れること、Javaに慣れることなどを目標にしながら、社内のGithub Enterpriseのコードを眺めるなどしていた。社内特有の用語なども多く、自分で調べたり質問したりしてた。社内会議などにも参加させてもらい、いろんなところで取ってるデータがまとめられて共有されてて、大企業はここまでやるんだって思った。土日はICTSCってコンテストに2日とも引っ張り出されたので、特に休めずインターン二週目突入。初めてプロジェクトを持ち、ガリガリコーディングしていく。自分の力がどんどん発揮できて、(どの週も楽しんでやってたけど、この週は特に)楽しくて楽しくて仕方がなかった一週間だった。この後の土日は半日寝て半日遊ぶって感じで、ゆる~く過ごした。三週目、しっかり休めたのもあって少しだけクールダウン、企画の人やデザインの人とも話し合いながら担当プロジェクトをほぼ完成させた。同時にもう一つ仕事やってみることになった。四週目、一個目のプロジェクトの改善点が上がってきてはちょこちょこっと直しながら、2つめの仕事をこなしていたが、壁にぶつかる。仕様上の問題で、すぐには解決できそうになかったので、解決できそうな手法を一応提示して降りることになった。これを完成まで見れなかったのはとても残念。これにてインターン終了、翌日長野へ帰りました。

(どこまで書いて良いのか怪しいので安全マージン取ってかなりボカした結果、すごくわかりづらい文章になっていますね・・・)

 

報酬の使いみち

結構な額をもらっちゃったんで、使っていきたいのですが実はまだ手を付けてなかったりします。PC買うぞって決めたのは良いものの、まだどれにするか迷ってます。インターン中ずっとMac触ってましたけど、Windows(とサーバーで使ってるUbuntu)に慣れてる身からして、Macじゃなくても別にいいやってなりました。ここ、深く掘り下げると宗教戦争勃発してしまうのであんまり話したくないです(笑)。とりあえずいいパソコンを探して、今の5年目に突入したメインノートマシンを置き換えようと企画してます。「どんな高いノートパソコン買ったところで40万もいかんだろ?」って意見がありますけど、たしかにその通り(これは嘘で、40万超えのモンスターノートPCもあるにはありますが・・・。僕はいらないです・・・)。余ったお金でPC買いたいです。「ノートPC買うのにまたPC買うの?」ってなりますけど、こっちはデスクトップでそこそこの性能が出せるやつがいいですね。軽くて持ち運びが楽で充電持つノートPCと、性能の出るデスクトップ、一気に二台!大人買い(?)!買いたい!というわけで、今鋭意選定中です。

 

最後に

終わってから記事書くまで期間が空いたのは、文章書く気が起きなかったからですごめんなさい・・・。給料も振り込まれて修了記念の盾も届いて、もうここで書いとかないと一生書かないなと思ったので、頑張って書きました。(相も変わらず長文ごめんなさい。)

インターン中、社員さんには本当にお世話になりました!またいつか、一緒に仕事出来たらうれしいです!ありがとうございました!

 

インターン中に撮ったお気に入りの写真、貼っときますね。

f:id:Goryudyuma:20170506044313j:plain

 

@社員さんへ

出しちゃダメそうな情報は出してないつもりですけど、もし万が一漏れてたら至急

馬 (@Goryudyuma) | Twitter

 まで連絡ください。できるだけ早く消します。

セキュリティ・キャンプ2016 応募用紙

どうも、馬です。

なんか2017年セキュリティ・キャンプ全国大会の募集が始まった事により、

www.ipa.go.jp

 

去年以前にセキュリティ・キャンプに行った人の応募用紙がまとめられてるスプレッドシートができる事態になっています。

 

というわけで、僕も流れ的に晒して、スプレッドシートに載ろうと思います。

 

ただし一つ注意点。

晒してるみなさんはプロの人達ばっかで、それに比べて僕の応募用紙はみすぼらしいものとなっています。他の方と比較されると、どうしても劣って見えるかと思いますが、その点ご容赦ください。

 

問題文

https://www.ipa.go.jp/files/000053055.pdf

 

 

共通問題 【1-1】:https://063.jp/location2/  (今は動かしてない)
今いる場所から近い順に駅を表示するアプリを作りました。GPS情報が変わることをトリガーに情報を更新しているので、移動している時に、リアルタイムに一番近い駅を出せます。また、最寄り地点リストは、線路情報から、一番近い線路を出すことができます。このアプリにより、今どの路線に乗っていて、次の駅まで何mくらいあって、周辺の鉄道はどんな路線があるのかなどが簡単にわかるようになりました。
技術的な自慢としては、駅情報は約3万件、線路地点情報は約100万件のデータベースの検索を、一般的な土地では1秒以内に終わらせられるようにチューニングした点です。
また、googlemapへの表示も、なめらかにカーブが表示されるように工夫しています。

共通問題 【1-2】:サーバー側はPHP7でAPIが動いています。このAPIにリクエストを送ると、APIは駅情報などを保存しているMySQLに対してクエリを発行し、帰ってきたデータをJSON形式でクライアントに返します。
クライアント側はReact.jsで書かれています。また、表示をきれいにするために、bootstrapも用いています。

共通問題 【1-3】:組み終わったあとにブログ記事を書きました。
http://goryudyuma.hatenablog.jp/entry/2016/02/05/225848

共通問題 【2-1】:データベースの正規化がよくわからなかった。具体的には、正規化する目的、正規化するにはどうすればよいのか、正規化のメリットデメリットなど。
共通問題 【2-2】:ネットの記事を読み漁った。書籍では「理論から学ぶデータベース実践入門(奥野幹也)」を読んだ。また、実際に正規化を試してみたりした。
共通問題 【2-3】:正規化する目的は、同じデータを同じカラムにデータそのもののまま入れることを防ぐことにある。一つのデータを更新したい時に、データがそのまま入っている状態だと、そのデータと同じものをすべて更新しないといけない。しかし、そのデータそのものが入っているところにリンクとして入れておき、データそのものは別のところで持っておくことで、更新は一回ですむ。正規化する基準としては、同じデータが複数同じカラムに入っていて、更新がかかる可能性があるとき。メリットとしては更新時に一回のみ更新すれば良くなること、デメリットとしてはテーブルが増えてしまうので、きちんとドキュメント化しておかなければ管理できないほどテーブルが増えてしまうこと。
共通問題 【3-1】:5-A サーバー運用におけるパスワード管理
普段、自分はVPSを運用している。その上で動いているサービスや、他のところで動いているサービスには、パスワード認証が使われている物が多い。これからさらに自分が扱うサーバーの数は増えていくことが予想され、扱うパスワードも増えるであろう。まさにこの講義でパスワード管理の問題点と対処法を学び、自分の力としたい。

2-C 人工知能セキュリティ
詳細にも述べられている通り、人工知能に関するセキュリティと言われてもなにも思い浮かばないので、とても惹かれた。人工知能機械学習は様々な分野で使われており、自分も興味がある。確実に自分の知らないことを講義してくださると思うので、楽しみにしている。

3-A Webアプリケーションの脆弱性の評価と発見
Webアプリケーションを運用する上で、脆弱性は特にあってはいけないものだ。自分で作るときは自分で分かる範囲では対策するが、自分が知らない脆弱性については対処しようがない。個人レベルでしか脆弱性があるかチェックできないので、本講義を通して、より実践的な脆弱性の発見の手法を身につけ、今動いているWebアプリケーションや今後作るWebアプリケーションにおいて、脆弱性を発見して理解し、対処していきたい。

共通問題 【3-2】:今まで、自分はセキュリティに対して一種の恐怖感を持っており、例えばアプリケーションを作る際、できるだけ個人情報となりうるものは保存しないように徹底していた。個人情報を持ちたくないがために、作りたいと思ったアプリケーションの仕様そのものを変えたこともあるくらいである。自分程度が組むアプリケーションなら、脆弱性など有って当然だと思っていた。もし流出したら・・・と考えると、どうしても保守的な考え方になってしまっていた。しかし、そろそろわがままも言えない状態になってきていて、個人情報の保存に手を出さざるを得なくなりそうだ。もし可能ならば、セキュリティキャンプに参加し、セキュリティ脆弱性について知識をつけ、自信を持った上で今後のサーバー運用やアプリケーションの開発に挑みたい。
選択問題 【1】:
選択問題 【2】:
選択問題 【3】:
選択問題 【4】:プログラム(C++)

-----------


#include <iostream>
#include <fstream>
#include <string>
#include <algorithm>

#define DEBUG 0

struct FRH {
        char Magic[3];
        char Source[21]; /* null(‘\0’) terminated ascii strings */
        char Destination[21]; /* null(‘\0’) terminated ascii strings*/
        uint32_t DataLength; /* min 0, max 4,294,967,295 */
        char *Data; /* null(‘\0’) terminated ascii strings */
};

//デバッグ用の出力関数
void show(FRH now) {
        std::cout << "Magic       :" << now.Magic << std::endl;
        std::cout << "Source      :" << now.Source << std::endl;
        std::cout << "Destination :" << now.Destination << std::endl;
        std::cout << "DataLength  :" << now.DataLength << std::endl;
        std::cout << "Data        :" << now.Data << std::endl;
        std::cout << std::endl;
}

//条件1のチェック
bool checkCondition1(FRH now) {
        if (now.Magic[0] == 'R' && now.Magic[1] == 'H') {
                return true;
        } else {
                return false;
        }
}

//条件2のチェック
bool checkCondition2(FRH now) {
        std::string S = now.Source;
        transform(S.begin(), S.end(), S.begin(), ::tolower);
        if (S == "rise-san" || S == "cocoa-san") {
                return true;
        } else {
                return false;
        }
}

//条件3のチェック
bool checkCondition3(FRH now) {
        std::string D = now.Destination;
        transform(D.begin(), D.end(), D.begin(), ::tolower);
        if (D == "chino-chan" || D == "chino") {
                return true;
        } else {
                return false;
        }
}

//条件4のチェック
bool checkCondition4(FRH now) {
        std::string S = now.Source;
        std::string D = now.Destination;
        transform(S.begin(), S.end(), S.begin(), ::tolower);
        transform(D.begin(), D.end(), D.begin(), ::tolower);
        if (!(S == "cocoa-san" && D == "chino")) {
                return true;
        } else {
                return false;
        }
}

//条件5のチェック
bool checkCondition5(FRH now) {
        std::string data = now.Data;
        if ( ( int)data.find("BlueMountain") != -1 ||
                        (int)data.find("Columbia") != -1 ||
                        (int)data.find("OriginalBlend") != -1) {
                return true;
        } else {
                return false;
        }
}

//条件6のチェック
bool checkCondition6(FRH now) {
        std::string data = now.Data;
        if ( (int)data.find("DandySoda") == -1 &&
                        (int)data.find("FrozenEvergreen") == -1) {
                return true;
        } else {
                return false;
        }
}

int main() {
        //ファイルとして開く
        std::ifstream fin("pyonpyon.rh", std::ios::in | std::ios::binary);
        if (!fin){
                std::cout << "ファイルが開けません" << std::endl;
                return 1;
        }

        FRH now;

        //順番に処理する
        while(fin.readsome(now.Magic, 2)) {
                fin.readsome(now.Source, 20);
                fin.readsome(now.Destination, 20);

                //4byte読み込んでuint32_tに変換する
                now.DataLength = 0;
                char x[4];
                fin.readsome(x, 4);
                now.DataLength = 0;
                for (int i = 0; i < 4; i++) {
                        now.DataLength <<= 8;
                        now.DataLength += x[i];
                }

                //文字数+1だけメモリを確保する
                now.Data = new char[now.DataLength + 1];
                fin.readsome(now.Data, now.DataLength);

                //flagが一度でもfalseになればREJECTED、ならなければPASS
                bool passflag = true;
                if(passflag && !checkCondition1(now)){
                        passflag = false;
                }
                if(passflag && !checkCondition2(now)){
                        passflag = false;
                }
                if(passflag && !checkCondition3(now)){
                        passflag = false;
                }
                if(passflag && !checkCondition4(now)){
                        passflag = false;
                }
                if(passflag && !checkCondition5(now)){
                        passflag = false;
                }
                if(passflag && !checkCondition6(now)){
                        passflag = false;
                }

                if(passflag) {
                        std::cout << "PASS" << std::endl;
                } else {
                        std::cout << "REJECTED" << std::endl;
                }


                if(DEBUG) {
                        show(now);
                }

                delete now.Data;
        }
}

-----------

以上プログラム

実行結果

-----------

PASS
PASS
REJECTED
PASS
REJECTED
PASS
PASS
REJECTED
PASS
REJECTED
PASS
REJECTED
PASS
REJECTED
REJECTED
PASS
REJECTED
PASS
REJECTED
REJECTED
REJECTED
PASS
REJECTED
PASS
REJECTED
REJECTED
REJECTED
REJECTED
PASS
REJECTED
PASS
REJECTED
REJECTED
REJECTED
REJECTED
REJECTED
PASS
REJECTED
PASS
REJECTED
REJECTED
REJECTED
REJECTED
REJECTED
REJECTED

-----------

以上実行結果

選択問題 【5】:OSとは、ハードウェア(物理的なもの)を操作する仮想的なインターフェースだ、と考えています。汎用OSでは、さまざまなメーカーが製造する部品の合作である現在のコンピューターを、共通のインターフェースで操作できるようにしようとしたものであり、逆に組込みシステムは、自分の会社の製品に特化して無駄な機能は取り除き、必要な機能のみにすることで、メンテナンスしやすくしたり保存に必要になる容量を少なくしたり、コストを下げたりできます。しかし最近、一台のハードウェアに対応するOSは一つである必要性はないという考え方が主流になってきました。マルチブートで複数のOSを一台のハードウェアに入れて、好みや役割により使いたいインターフェースを選ぶなどもできます。また、動いているハードウェアに対応するOSの上に、仮想的にハードウェアを作り対応するOSを動かす、バーチャルマシンもできてきました。
OSがハードウェアを操作するので、OSそのものには様々な機能が備わっています。OSがCPUをどのように使うのかを決め、OSがメモリをどのように使うのかを決め、OSがマウスやキーボードをどのように使うのかを決めます。OSはコンピューターのすべてを操作する頭脳の役割を果たしています。

選択問題 【6】:IDとパスワードを入力して認証ということは、どこかにデータベースがあり、そこでSQLが使われていると考えました。そこで、SQLインジェクションに対するセキュリティテストを行います。SQLインジェクションがもし成功すると、データの改ざんから個人情報の取得まで、幅広くダメージが与える事が可能です。一度でも信頼を大きく失ったアプリケーションは、今後使われることはないでしょう。これはとても大きな損害で、実際に問題になっています。
セキュリティテストテストですが、まず、IDやパスワードの入力欄に、「'」(シングルクォート)や「`」(バッククォート)などを入れて送信します。もし入力文字列をエスケープせず、文字列結合によりSQLを生成している場合、ここで何かしらのエラーや予期せぬ結果が出ます。
つぎに、入力欄に、「%」(パーセント)や「_」(アンダーバー)などを入れて送信します。入力文字列に適切なエスケープがされていなければ、ワイルドカードとなるのでこちらも予期せぬ結果が出力されるでしょう。

選択問題 【7】:
選択問題 【8】:
選択問題 【9】:マイナンバーカードは、本人とマイナンバーを紐付ける大切なカードである。別人に送られてはいけない。自分なら、カードの申請時に住所に誤りがないかをチェックしてもらい、情報が確認取れ次第、本人限定受取で郵送されるというクレジットカードの送付と似たシステムにするだろう。郵送時の誤りは極力抑えられるとして、申請時に誤りが入りにくいようにしなければならない。マイナンバーカードが発行されるのは、マイナンバーが発行された後なので、発行したい人はすでにマイナンバーを手元に持っているはずである。よって申請時には、マイナンバーと、氏名年齢などの個人を特定できる情報を要求し、データが一致していた時に申請が通るようにする。ネット弱者にも配布できるように、市役所などの窓口でも申請はできるようにしなければならないが、これはこの申請手続きの代行である。
選択問題 【10】:
選択問題 【11】:

 

 

(メールそのままコピってきた)

 

以上です。自分でもなんで通ったかあんま分かってないし、その分今後に期待されてるのかなと勝手に思ってます。今後とも、精進いたします。

終結

この記事は、kstmアドベントカレンダー25日目(最終日)の記事として書かれました。

qiita.com

 

まずは、25日間、一日も落とすことなく終えることができました!お疲れ様でした!

この記事は、特に技術的にどーとか言う話はナシで、純粋な心でMerry Christmas!と祝いましょう。

ちょっと最初に、ツッコミどころとして残っている所だけ突っ込まさせてください。(これ片付けとかないとオチオチ新年も迎えられない)

 

ツッコミどころ

その一:みんな締切守りすぎ

え、どゆこと!?絶対「記事遅れました~テヘペロ」って人一人くらい出ると思ってたのに!ふつーに締め切り守るとか、外に公開されてるものだからって張り切りすぎでしょみんな!!後から多少の編集したものはあるものの、全日当日夜には記事が公開されてて、「やればできるやん・・・」って思いました。

その二:続きがあると思わせぶりなタイトルの記事

「前半」「その1」とかタイトルに入ってたり、

 タイトルに(技術編)とか付けてしまったので誰か別のも書いてくれると嬉しいなー。

強いkstm部員になるために(技術編) - bgpatのブログ

とか。早く続きが読みたいです!

 

kstmの活動

さて、アドベントカレンダーでだいたいkstmの雰囲気とかわかってもらえたと思います。そうです、kstmとは飲みサーです!

・・・って冗談で言ってますけど、実際そう言っても間違いではないです。もちろん未成年や飲みたくない者に飲ませることはしないですし、節度を持って飲みますけど、それは置いといて。"全員で"何かを成し遂げるってことは少なくて、その場にいたメンバーで「やろうぜ!」って声かけあって、コンテストに参加したりしています。または個人で勝手にやって、記録だけkstmに置いていくとか、最近は多いです。なので、「kstmの"みんな"は普段どんなことしてるの?」って聞かれると、「飲み会です」と答えざるを得ないのです・・・。

 

( 追記:上のことを書いておいたものの、後から検索してみても「kstmは飲みサー」とはアドベントカレンダーのどこにも書いてなかった・・・!誰か一言くらい触れてると思ってたのに・・・!

追記終わり )

 

それはさておき、kstmではコンテストや勉強会などに積極的に参加しています。一例として、去年度の活動記録を貼っておきます。

f:id:Goryudyuma:20161224234411p:plain

(kstmメンバーがコンテストや勉強会に参加する時に、kstmの名前で参加した他に、個人で参加して後からkstmの活動としてこのリストに入れたものがあります。)

今年度はさらに、ICTSCやISUCONなどで、参加しただけにとどまらず結果も残るようになってきました。先輩たちから受け継いできたゆるい雰囲気を維持しながらやるときはやる、っていういいサークルに更に磨きがかかってきたと思います。

 

メンバー募集

最後くらいダラダラ書いても仕方ないので、言いたいこと言ってしまいます。

kstmでは、メンバーを募集しています。信州大学生で、このアドベントカレンダーを見て興味を持った、活動に参加してみたくなったら、是非サークルメンバーにコンタクトしてください!見学だけでも大歓迎です!

 

来年のアドベントカレンダー

来年のことを言うと鬼が笑うと言いますが、笑って過ごせるクリスマスなんていいではありませんか。来年、やるとしたら、今回参加できなかったメンバーや、kstmに関わりのある人なんかを呼んで、もっと盛大に開催できればいいなーと思います。目標はメンバーの被りなし!ってことで、よろしくね、アドベントカレンダー総責任者のugwisくん!(丸投げ)

 

締め

これにて2016年度kstmアドベントカレンダー、終結です。

メリークリスマス!

それと、良いお年を!

来年もよろしく&がんばりましょう!!!

GitHub緑化運動のすゝめ

この記事は、kstmアドベントカレンダー二日目の記事として書かれました。

qiita.com

 

とりあえずまずはこれを見てくれ。

f:id:Goryudyuma:20161201182707p:plain

Goryudyuma (Goryudyuma) · GitHub

 

緑化運動してるとなんか凄そう(に見える)!

 

やり方

  1. GitHubのアカウントを用意します。
  2. 毎日contributeします。
  3. できた!

ルール

自分なりのルールを定めます。できるだけ(自分が納得できる範囲で)低めに設定しとくと長続きします。

例えば僕は、競技プログラミングで簡単な問題を一問だけ解いてcommitってのはありにしてますが、条件として言語はC++以外ってのを定めています。なぜならC++競技プログラミングは慣れてて、簡単な問題だとあまり意味が無いからです。最近はJavaで書いてますが、その前はGolangOcamlで出してた時期もありました。いろんな言語の標準入出力や、簡単なデータ構造の書き方を学ぶことができます。

メリット

・毎日何かしらのコードを書く必要ができる

「継続は力なりぃぃぃ!」を地で行く感じです。

あと、どーしても進捗出したい物があるときに、毎日コードを書く習慣が付いていると一気に楽になります(個人差あり)。

・三日坊主の克服

何を隠そう僕は三日坊主どころか、一日坊主です。「やるぞ!」って思ったら一気に始めて、やる気なくなるまでやって、燃え尽きて終わるってパターンをずっとやってきました。ですが、継続して何かをするということを覚えないと、この先やっていけないと思いました。

今一年半弱緑化運動が続いているこれを見て、僕が三日坊主だと思う人はいないでしょう。完全に克服したとは言えないと思いますけど、ある程度克服したとは言えると思います。

・アピールできる

 他人に自分のGitHubを晒すのに抵抗が全くなくなりました。以前は「大したものを公開していない僕のアカウントなんて・・・」って感じで、あんまり晒したくなかったのですが、今は大したものを公開していないことは変わっていないのに普通に晒せるようになりました。

デメリット

・ダレる。

しょーもないコミットが増えます。同じ緑化運動をしてる人で、毎日ちゃんとした内容で出してる人もいますが、僕にはそんな能力はないので、簡単な競技プログラミングの問題一問だけみたいな日が結構あります。

これだとそんなに意味がないので、なんとかしたいのですが、それ以上にハードル上げて一日でも緑化できない日を作っちゃうと、その後も怠けるのが目に見えてるので、ハードルは低めに設定しています。

・毎日githubにアクセスする必要がある。

ユニコーン出てたりすると辛くなったりします。

あと、旅行などにもパソコンを置いていくっていう選択肢は無くなりました。一泊二日の旅行で、一日目の早朝と二日目帰ってきてから夜にやるってのを一度やりましたけど、二日目何かの事故で帰れなかったら詰むと判明した(それはそう)ので、日帰り旅行以外は持って行くことに・・・。

終わりに

僕がここまでやれてるのは、緑化運動している先輩の存在が大きいです。自分と同じような時間割で動いているような人ができてたなら自分もできるだろうって考えてます。少なくとも院卒業までは。社会人になったら、どこまで忙しくなるかわからないので、とりあえず学生のうちは続けようと思っています。

kstmメンバーなら誰でもできると思うので、誰か同志になってくれないかなー?

codefestival2016 参戦記

予選Cでぎっりぎりで通ったので、Finalにいってきた。去年に引き続き二回目。

 


11/26朝。
起きる予定時刻から40分寝坊。
僕「まあ時間余裕を持ってるしね、ちゃんと間に合う新幹線あるの知ってる。」

 

駅につく。
僕「指定席満席・・・?かがやきやから自由席もない・・・?一本あとだと間に合わない・・・?」

 

よし。
僕「グリーン車課金・・・しかたない・・・」

 

というわけで、行きは仕方なく、贅沢にもグリーン車で東京まで行きました。
車内はめっちゃ静かに感じた。椅子も電動で倒れるし、ああこれが上流階級の人たちが味わってる世界か~って思いながら、ウトウトしてた。
新橋ついて、会場まで徒歩。電通本社ビル前通って、ここが例の・・・!ってなった。

会場ついて、交通費精算で、グリーン車の旨伝えると、指定席分は出してもらえるとのこと。差額は自腹。まあ仕方ない、けどよかった。


Final開始。
パーカー取るためには、A~Dまでを完答とEかHの部分点を取れば良いことが配点からわかっていたので、まずはEを読む。
わからん。
全然頭のなかに問題が入ってこなくていたずらに時間だけが過ぎた。
仕方ないのでパーカー諦めてAから開始。
Aはやるだけ。
Bは適当にやったらWAで、もう無理~ってなった。飛ばしてCへ。
CはN+M要素を持つUnionFindして、N人が同じグループに属するかどうかだけを判定すればいいってことがすぐにわかったので実装、AC。
Dは問題はすぐに理解できたけど、よくわからなかった。適当に書いてWA。無駄にかけ2わる2してるところがあって、そこが悪さしてそうだったので考察し直したらAC。
E問題に戻って神のお告げ、「DPを使うのじゃ」ってのに閃いて、実装すれば部分点獲得。パーカー確保。

 

目標達成によりやる気は0に。gdgdタイムライン見て過ごす。

 

いろはちゃんに「観戦してばっかじゃだめ!」って言われたので、

 

B問題通してきた。

 


2000点取ってフィニッシュ。

そのあとの表彰式も、touristすげーってなりながら聞いてた。

午後は適当に回ってた。chokudai先生の解説聞いて、ご飯食べて、秋葉先生のトークライブ聞いて、エキシビジョン。
海外勢がめっちゃタイピング早くてびっくりしながら見ていた。

ってな感じで一日目終わり。今回はホテルみんなばらばらで、僕に割り当てられたホテルは少し遠目のところだった。ここだけは今回のコドフェス、去年との比較で唯一の改悪かな~。まあ200人以上を同じホテルにとか、普通は無理なんだけど、交流を増やすという意味で近いほうが良かったな~と。
スタンプラリーなくしたことにより、いっぱい回らなきゃって脅迫概念みたいなのがなくなって、まったりゆっくりコンテンツ見れたし、海外勢入れたこともすごく良かったと思う。

 

ホテルついてからぼーっとテレビ見てた。「とげ」ってドラマやってて、最終回だったんだけど、めっちゃ超展開な気がした。最初から見てるとフラグとかちゃんとあったのかなー。
ひさびさにドラマ見た気がする。それで寝た。

二日目(11/27)、8時集合だと思って6時半に起きて準備してついたのが7時45分、ついてから開場が8時だと知る。
しばらく待って会場入りして、トーナメント戦開始。

round1、A問題全然わからなかった。でも適当に書いた。案の定WA。
時間も短くてめっちゃ焦ってた。仕方なくB開けてみて、「これ全探索で出せば部分点貰えそう」って思った。
この手の問題はPHPで書くほうが楽そうだったのでPHPで書いた。提出は終了20秒前。
そこからひたすらテストケースTLEになってたので、結果が出るのが終了して他のグループの通過者の発表が終わったあとだった。
200点部分点もらって3位通過。まさか通るとは思ってなかった。

round2、round1で早解きが有利とわかったので、ひたすら早解きする。
Aは1足して2で割るだけで200点。2分弱で通す。
Bはとりあえず回せば200点。400点確保で2位通過。

round3、さすがにもう残るのは無理そうって思いながらとりあえずやってみる。
A、とりあえずDPで行けそうとわかるものの、まずCEが消えず。
あとから見ると、size_tの扱いがVC++gccで違うんだねーって話だった。ちくしょう。
そのあとWAが続く。考察何回かし直して、100点を取る。
B行く時間はなかった。
というわけで、round3は5位でした。残念。

そのあとはご飯食べてLT聞いてた。山の話ときゅうり先生の話とchokudai先生の話、どれもおもしろかった。

UFOキャッチャーでセンスのなさを周りに見せて、お情けで手ぬぐいをもらった。

そして最後のイベント、チーム対抗リレー。去年と同様、レッドブルが配られるので、開始前に飲んで気合い入れた。僕はF問題を担当した。
最初に嘘考察して、 @ki6o4 さんに反例だされて、それ含めて考察、書いたら一発で通った。
自分の担当問題通したあとは他の人の考察手伝う(見てるだけ)みたいなことしてた。みなさん頭良すぎでは・・・ってずっと思ってた。

結果発表と表彰式があって、終わって、自宅に帰った。
新幹線の指定席が何故か26日で取られてて(多分伝達ミス。確認する間がなかったから確認怠ってしまった・・・)、指定席書い直す羽目になったり、新幹線が珍しく遅れたりと、無駄に不幸が続いたけど、なんとか帰宅。

家に帰ってからエキシビジョンのB問題通した。一個だけ通らなくて辛かったけど、よくわからない不正っぽいことして通した。

 

基本はTLに流れてた考察通りやれば行けた。プロ各位に感謝。

 

これで終わり。めっちゃ楽しかった!


来年もがんばって、Finalいっくぞ~~!!