CodeThanksFestival2017参加記

はじめに

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

qiita.com

目次

行く前 

まずは予選から。CodeFestival2017本戦は、人数が去年に比べて大きく減ったのでボーダーが上がったのと、仮に通っていてもISUCON通っていればISUCONに行くと決めていたので、Thanks行ければいいやーって感じの低いモチベでした。

予選Aは例年通り、かなりボーダー高めで通すのは難しそうでした。三問といて879位(日本人452位)。

予選Bはカプセルホテルでやりました。三問解いて289位(日本人119位)。

予選CはISUCON7予選終わった直後から始まった地獄でした。めっちゃしんどかった・・・。三問解いて350位(日本人145位)。

BかCのどちらかで通ったんでしょう。

前日

夕方ごろ、新幹線で東京まで。池袋で少し遊んでから、株式会社Aimingさんのオフィスに遊びに行ってました。

aiming-inc.com

寿司食べながら駄弁りながら飲みながら競プロしながらボドゲするというよくわからない会でした(笑)。キーボードの変態配列の話、とても面白かったです!ありがとうございました!

この後から結構大変でした。電車で上野駅まで。

新幹線の中で予約した、一泊1500円の見るからにヤバそうな宿に行きました。

宿は四人部屋で、僕含めて三人で使いました。いびきとかうるさい人でもなく、めんどくさい絡みしてくる人でもなく、平和に過ごしました。

宿は良かったんですけど、スマホが壊れました。OSがうまく起動できない?みたいな感じでした。出先で宿のWi-Fiもかなり不安定でしたが、スマホ使えないと色々お話にもならないので、復旧を決意。OSをクリーンインストール?とりあえずBIOSからいけるResetを全部して、Androidのインストールバトルをやりました。一番困ったのが、Googleアカウントの2段階認証をやってる端末を吹っ飛ばした状態で、かつ非常用パスコードを保存している端末には出先のためアクセスできない状態だったってことですね。粘った末に電話認証に気づいてうまく行ったんですけど、かなり時間使いました。

OSのアプデ、アプリのアプデを不安定なWi-Fi環境で行いました。かなり辛かったけど、サークルのインフラ班のあーちゃんとふぉのさんが普段言っていたことが、ものすごく役立ったりと、様々なファインプレーが重なった末、朝8時半頃に復旧。ホテルを出て(本当に1500円しか払わなかった、東京すごいですね)、地下鉄で豊洲を目指しました。途中、銀座一丁目銀座駅が同じものだと思ってたっていうミスがありましたがうまく有楽町駅にたどり着けたためセーフ。豊洲からゆりかもめで会場に向かいました。

当日

会場ついて、交通費精算して、TシャツGetして、周りに挨拶して、お弁当Getして、コンテスト開始。1800点以上でパーカーと聞いてテンションMAX。

A:Sortするだけ

B:回文となる文字列の文字数は奇数個と思い込んで1WA。しょーもないWAは無くして行きたい・・・。すぐ直してAC。

C:PriorityQueueで管理するだけ。AC。

D:ぱっと見でわからなかったので飛ばす

F:同じ数ずつまとめて、Combination計算してやろうとしたが、どこかでバグって1WA。mapでdpしてやるとなぜか正解した。

D:戻って見るとGCDとるだけと気づく。AC。

E:6^5<10000に気づく。6個ずつ確定していけば終わりそう。書いてAC。パーカーゲット。

G:PriorityQueueで適当なコード書いたけどTLE。ダメダメ。

H:H+M個のメモリをとってやり、うまく飛んでいくような感じで書いたけど二ケースTLE。

これで終わる。6完34位でした。

コンテストおわって、パーカー受け取ってからchokudai先生のライブ解説。

その時のF問題の指摘で、

 と、最悪ケースでTLEになるかもしれないとの指摘。理屈で考えてもダメだし、手元でやって見ると確かにTLEになる遅さ。

 出題者曰く想定外の解法だったらしく、まぐれで通ってしまった。パーカーボーダーラインだったので、助かったというかなんというか。もしこの回答がTLEときちんと判定されてたら、ちゃんと時間内で解けたかは謎・・・。

そのあと、交流会。一つ質問を決めて、参加者に聞いて回るってイベントがあったんですけど、僕は単純に思いついた「好きな数字」っていう大雑把な質問をして回りました。面白いことに、40人弱聞いて回りましたが、かぶった数字は2と17だったかな、意外とみんなバラバラな数字書いてくれました。πとか1e9+7とかeとかもあって、ああ競プロの集まりなんだなあと思いました。

回答集めるのそこそこ早かったっぽくて、タンブラーもらいました。今回はいいものばっかりもらった!そのあとは、肉食って寿司食ってサンドウィッチ食ってジュース飲んでってやってました。競プロ疲れたのと、スマホのせいで少し寝不足なのもあって、めっちゃ食べた。

表彰式があって、解散したあとは、すぐに長野へ帰りました。途中ゆりかもめから花火が見えて、綺麗だったなあ。

終わりに

信州大学ものづくりサークルkstmでは、競技プログラミングに興味ある学生も募集しています。ちょっとでも興味あれば、ぜひよろしくお願いします!

部員募集 | kstmについて | 信州大学公認サークルkstm

SQLで円を描く技術

はじめに

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

qiita.com

 

目次

 

まずは見てくれ!

gist.github.com

SQLで円が描けた!

コード解説

検証、実行環境はPostgreSQL10.0です。

基本方針としては、まず方眼紙を用意して、次に条件判定で塗るべきところを*で塗っているだけです。SQLなので、再帰でごにょごにょします。

まず、limitxyで表示する大きさを決めています。

そして、formulaでnを1ずつ増やしていく過程で、x,yをうまく回しながらCASE WHENで条件判定を行い、どこを塗るのかを決めています。

最後にくっつけて出力するところを書きます。

それを呼び出すと、SQLだけで円を描くことができます!

ギャラリー

条件式を変えると、他にも色々描けます。

gist.github.com

gist.github.com

書いた動機

とある就活関連のイベントで企業の人と話していた時、

僕「ボクSQLチョットデキル」

企業戦士「へー。うちの会社にSQLで円とか描いてる人いるけど」

僕「なにそれすごそう」

帰ってきた後

僕「あれ?よく考えたら結構簡単にできるのでは?」

カキカキ〜

僕「できた!なんだ簡単じゃん!」

 みたいな感じでした。

最後に

信州大学ものづくりサークルkstmは、技術に興味のある信州大学生を募集しています。面白そうだと思っていただけたら、是非見学に来て下さい!

部員募集 | kstmについて | 信州大学公認サークルkstm

あと僕、就活中です。こんなSQLを書ける(描ける?)新卒エンジニアを募集してる企業さん、是非お声がけください!

馬 (@Goryudyuma) | Twitter

ISUCON7本戦で惜敗してきた

どうも、馬です。

今年もISUCONの本戦に行ってきました!

運営の皆さん、関わった皆さん、本当にありがとうございました!とても楽しかったです!

チームメイトの記事

あーちゃんの記事

bgpat.hateblo.jp

ふぉのさんの記事

ISUCON7本戦惜敗記(学生枠)

今回のコード

github.com

あーちゃんがブランチ分けたりGitのテクを駆使して、ソースコード管理オペレータをやってくれたので、依頼すると「この時点までこのコードだけ切り戻し」とかやってくれました。さすが。

あと、Closeされてますけどやることリストを今回も作ってます。

github.com

前も書いた通り、これは次にやることがわからなくなった時に使うものなので、あまり使わなかった感じですね。

ちょっと縁あって株式会社scoutyさんのオフィスでこのやることリストを作りました。ありがとうございました!

scouty.co.jp

前日まで

ISUCON7予選、ISUCON5本戦、ISUCON4本戦をやろうとしたのですが、結局ISUCON5本戦はうまく動かずでした。コードを見ると、もうaptで配布されていないgradle2.8をバージョン指定で入れていたので、2.8の部分を削ってビルドが通るようにしたり、PHPのいくつかのライブラリのがおかしかったので直したりしてみたのですが、ちゃんと動いているかよくわからない状態でした。二年も前のアプリケーションだとよくあることかもしれませんが、ISUCONは動かすところからだ!と言われると・・・って感じなので、なんとかしたさがあります。だけど今の環境でも動くようにするということは、スコアに影響があったり、二年前より楽になるor辛くなることがあるので、本番と全く同じ状態ではなくなってしまうところが、難しいところですね・・・。割り切りが必要そうです。

ISUCON7予選とISUCON4本戦は楽しんでやれました。もう三年も前のISUCON4本戦が普通に動いたことは、本当にすごいことだと思います。

やったこと

今回はあまり仕事できなかった感じですね。

チームではいつものごとくDB担当でしたけど、テーブルは綺麗なもんで、いじるところとか特になかったです。slow queryになるまで行けなかったです。

強いて言えばトランザクションのところが遅いと言えば遅かったですけど、かなり触りづらい感じになっていた上、AppのCPU使用率が高すぎて、ボトルネックになっていました。

不変値であると判明したm_itemをinitialize時にメモリに読み込む処理をサクッと書いたあとは調査、遅いところを直していこうって感じでした。

書いている間にふぉのさんは使うかもしれないRedis入れたりとかの環境の整備、あーちゃんはデプロイの自動化とかやってました。

golangでやってたので、pprofで調査したところ、多倍長演算がとんでもなく時間食っていることが判明しました。

この時の話し合いで、僕は多倍長演算をなんとかする、あーちゃんは構成を分散させてroom名で使うマシンを切り替える、ふぉのさんはそのサポートって感じで仕事を分けました。

結論から言うと、多倍長演算を最後までなんとかできなくて、あまり点数を伸ばすことができませんでした。

addingの方はかけ算をサボることができて、まず左から60bitくらいを残すように右にシフトさせたあとかけ算して、右にシフトさせた分を左にシフトし直すことで、誤差範囲内でかなりの計算量を減らすことができたのですが、Priceの方はこれやっちゃダメで、どう頑張っても誤差範囲内に収めることができませんでした。書いてる時はわからなかったのですが、これは当たり前で、買えるかどうかの判定を厳密な値を用いて判定しているからでした。大して多くもないパターン数だったので、計算結果をキャッシュすればよかったっぽいんですけど、引数が64bit変数だったんでキャッシュは無理って判断してました。少し競技プログラミングを齧ってる身としては、今から思えばなんで無理って思い込んだんだろうってなってます。

あーちゃんの方の分散はある程度うまくいき、ジャッジケースセットによっては一つのマシンに偏ったり、うまく分散したりと、微妙な挙動をしてました。

結局やれたのはここまでで、あとはガチャ回していい結果を引こうとしたのですが、うまくひけず、最高点の17000点くらいまでできずに12000点くらいでフィニッシュしました。競技終了後に運営側で一回回して、その点数と競技時間内最後に提出された点数の高い方が取られるので、ちょっといいガチャが引けたっぽくて15000点くらいの結果になりました。

再起動試験は2回くらいしかやってなかったので、少し不安だったのですが、ちゃんとFailせずに終わりました。

 

終わってから

なんか頭がぼーっとしちゃって、ちょっとしんどかったです。でもビール飲んでケーキ食べたらちょっと回復しました。

優勝したチームと全く同じ構成(golang+vim)だったので、実質優勝もっといい点数を取りたかったです。

来年はあーちゃんがいなくなるので、今回でこのチームも解散です。

ISUCON5,6,7と本戦出場率100%を誇るすごくいいチームでした。

来年のISUCONはどうするかまだ決めてないのですが、あーちゃんレベルの超人オペレータはなかなかいないので苦戦しそうです。それとコード読める人が欲しい・・・。

そろそろ就職活動するんで、もし面接とかでお会いできれば、よろしくお願いします。

リンク集

isucon.net

goryudyuma.hatenablog.jp

 

ISUCON7予選参戦記

今年もISUCON予選参加したよ!

isucon.net

 

結果は「73位 49,956 kstm[学生]」でした!

isucon.net

学生枠での予選突破です!三年連続!!

 

チーム紹介

去年までと全く同じです。

馬(Goryudyuma) : DBとアプリケーション担当

ふぉの(fono09) : インフラ担当

あーちゃん(bgpat_) : アプリケーションと全体指揮

 

やったこと

前日まで

Pixiv-isucon,ISHOCON1を個人で、ISUCON4予選をチームでやった。

今年は前日に練習会やるなんて暴挙はしないで、ちゃんと時間を取ってやったので、その時に得た知見を深掘りして調べることができたので、本番に活かせたと思う。

前日

大学の学園祭だったので、終わってから打ち合わせ。

今年も不測の事態を除いてGolangを使うこと、誰がどこを担当するかを改めて確認した後、やることリストを作っていった。

やることリスト、去年まではTrelloを使っていて、あれはあれで便利だったが、今年はGitHubのProjectを使うことにした。僕たちのチームで使う用途であれば、どちらを使ってもそんなに変わらないので、コードの管理まで含めてGitHubに任せてしまうことにしました。ちょうどサークルのGitHubのチームが、Privateリポジトリ無制限に使えるしね!一応公開してあるので、参考になるかも?

github.com

全部Issueとして立ててあり、それぞれ仕事ごとに担当者に紐づける的な感じでやってます。

もう大体Doneに移っていますが、ほとんどmustかshouldに入ってる状態でスタートしました。

それから、マイルストーンを使っての管理もできればってあーちゃんの提案により、一応全部どこかに所属するようにしました。これはあんま使わなかったな。

結論から言うと、このリスト、あんま活用できませんでした。

後で書きますが、みんなかなり慌ててしまって、更新をあまりしないで突っ走ってしまったため、Doneに入っている多くが、競技終了後に更新したものです。

この方法自体が悪いと言う訳ではなく、もっと冷静にやれば、きちんと活用できたのかなあと。

去年までの知見になりますが、本番中は「あれ、この後どーするんだっけ」ってなることが結構あったりして、そんな時に事前にやることリストを作っておくことで、スムーズに次にすることを始められたりします。しかし、今回みたいにやることがすでにわかっている(ができない)場合は、あまり活用できなさそうだな〜ってなりました。あるに越したことはないので、本戦もこれ作ります。

それからふぉのさんとあーちゃんに買い出しにいってもらい、モンスターを仕入れてもらった。ご飯炊いた。

当日

開始前

あんま寝れなかった。まあ仕方ないね。

朝から雨だった。台風の影響。

ジュースとお菓子などを買い出しで仕入れて、ご飯と鯖缶食べながら本番まで待機。

開始

三台構成にちょい慌てる。

サーバー3でDBが動いていたので、僕が担当することにした。mysqlだったので、slow logを入れる。とりあえず遅いところから順にインデックス貼る。そんなに点数伸びなかった。

ふぉのさんがfail2banに引っかかって、ログインできないとか言ってた気がする。なんとかしたあと、fail2ban消した。

画像がDBから配信されていることに気づく。サーバー1に入り、画像をファイルに書き出す。僕の仕事は書き出すスクリプトを書くまで。あーちゃんに渡す。

画像をgzipで配信するなど、やってたらしい。でもまさかCDN的なものが前段にいて、Cache-Controlに publicをつけなければいけなかったとは最後まで気付かなかった。

SQLでIFNULLが使われてて、ここどうにかしようと頑張っていたが、結局最後までできなかった。見た目上動いているように見えるまでは行ったけど、ベンチマーカー曰くなんか数字がおかしかったらしい。

帯域が明らかに足りてなかったので、サーバー構成を変更し、サーバー1とサーバー2でapp、サーバー3でDBと言う構成にした。少し早くなったが、キャッシュ関連がうまく設定できてないので、ブレイクスルーにはならなかった。

画像が投稿されたら、gzip圧縮して静的ファイル保存場所に保存するように変更。とにかく重たい画像をDBに保存させないようにした。

この辺でgitの歴史を戻した際に、コミットしていなかったソースコード大部分が損失。全てを一つのgitで管理していた(/配下をgitに沈めて全てをignore,必要なものだけgitに入れていく方針を試していた)のだが、別のところで歴史を戻そうとすると、全てに影響があると言う状態の上で、コミュニケーションエラーがおきた。仕方ないので、もう一度書き直した。方針自体は(三人程度の小さいチームで全員顔合わせてる状況でしか使わないのなら)悪くないので、うまく運用時のトラブルが無いようにしていきたい。

最後はガチャ回す。6万点弱から3万点弱の間でめっちゃぶれてた。5万点弱のスコアが出て、時間もなかったので終了した。もちろんふぉのさんが間違ってEnqueueしないように、PCから離れる、キーボードやマウスから手を離させるなど、万が一が起きないように徹底した。

終了

ISUCONの時間が後ろに移ったので、休憩なしでコドフェス予選C開始。あんま解けなかった。D問題の考察思いついて、実装でバグってる時にISUCON本戦出場が決まって、コドフェス本戦がISUCON本戦と同じ日にやるので離脱した。仮にコドフェス通ってもISUCON行くので、行けない上に、8時間フルで頭動かしててとても疲れてたからだ。結局後から見ると考察はあってたっぽくて、頭がきちんと働いて入ればDまで行けたかも?って感じだった。

選挙解説見ながら(もちろん期日前投票済み)ビール飲んで、朝方家に帰って、今回のISUCON予選を終了した。とても楽しかった!

(今回はきっちりログを残していなかったので、かなりアバウト。今まではコミットにやったことを残していたのが、今回から運用方針が変わったのでちょっとやりづらくなった。でも今まで通りコミットにメッセージとして残していても問題は多分起きないので、本戦はきっちり残すと思います。)

 

「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

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