セキュリティキャンプ2019に参加しました。

セキュキャン参加記です。書くのが遅くなりましたがちゃんと書きます。 自分が参加したのはY-IIトラックのCコンパイラを自作してみよう!ゼミです。

応募用紙云々は↓に書いているので事前学習や当日のことについて思い出しながらつらつらと書いていきます。 md19970824.hatenablog.com

事前学習

ruiさんの書いた資料に従ってセキュキャン本番までひたすらCコンパイラを開発していきます。 週に一回ミーティングがあって進捗報告などをするのですが自分の場合は院試に邪魔をされてなかなか進捗を生むことができませんでした。おのれ院試め... 結局、単項のポインタ演算を実装したあたりでセキュキャンに突入します。

0日目(8/12)

午前中に移動すれば間に合うとの判断で前泊の許可が下りなかったのですが、自分の起床能力に自信がなかったためセルフで前泊。ナインアワーズ北新宿に泊まりました。 カプセルホテルなのですが、作業ができるラウンジがあってカプセルも広かったので3500円という値段に対してとても快適でした。ただやっぱり荷物の管理はめんどくさかったです。カプセルホテルの難点ですね。 適当にコンビニで名刺を印刷して切っておきました。

1日目

無事に起床し、11時30分頃に会場につく。 12時に受付をしてもらったあと、そのまま昼食会場へ。 席が近い人とひたすら名刺を交換しました。隣に座っていた人が京大生でびっくりした。

夕食までの時間はひたすら講義があった。それぞれ法律と倫理、セキュリティの基礎、コミュニティはいいぞ。みたいな話でした。 17:00から夕食があって、そのあとデザートが振舞われた。この時にCコンパイラゼミの皆さんと遭遇して名刺を投げつけあった。

夕食後、まずLT大会があり、いろんな人のLTを聞いた。reCAPTCHAは視覚障害を持っていて英語を母国語としない人には認証を通過するのが厳しいという話が一番興味深かった。 その後グループワークというものの班決めをしました。自分が参加することになったのは「プログラミング言語の高度な言語機能を、言語処理系でどのように実装するかについて参照実装やドキュメントを整備する」ことを目標とするグループです。 インターンや卒論がありなかなか進捗は出せないかもしれませんが、なんとか貢献していきたい...

グループワークが終わったらその日は終了。ちょっとだけ開発を進めて寝る。

2日目

実装!実装!実装! この日は講師の方々の助けで自分の実装のやばいところを発見し、ひたすら変更とデバッグを繰り返していました。院試があって進捗が出せていないのもあり結構焦っていた。 資料のステップは少ししか進みませんでしたが、なんとか軌道修正することができました。

3日目

寝坊しました

ファミマの音で起きる日が来るとは思わなかった。20分ほど遅れて開発部屋に着きました。申し訳なさを感じていたら講師やチューターの方々も寝坊してきて面白かった。(この日だっけ?)

この日も夕食までひたすら実装。 アセンブリについてわかっていなかったところを講師の方々に教えてもらいつつ、sizeof演算子までを実装しました。

夕食後には企業紹介やグループワークがありました。正直開発を続けたくてそれどころじゃなかった。

4日目

夕食までひたすら実装。 昼食後になんとかprintfが動くところまでを完成させ、ひとまず形になりました。 4時ごろに成果発表があり、各自2分程度でセキュキャンでの成果を述べました。 正直もっと先まで進み好きなことを実装してる人がほとんどで進みとしては自分が一番遅かったのですが、講師の方々の助けを借りていなければここまでたどり着けませんでした。本当に感謝しています。 夕食後はラストナイトイベントというのがあり、自分は少し迷ってHaskellの黒い本を選びました。(OCamlはある程度分かるがHaskellはあまり知らないのと、関数型言語の諸概念がいい感じにまとまっていてちょうどいいリファレンスになりそうだと感じたため。)

5日目

この日はグループワークと各トラックの成果発表だけでした。 実装を進めたいなあなどと思いながら聞いていましたが、まあ内容は面白かったです。

長いようで短かったセキュリティキャンプも終わり、名残惜しさを感じながら会場の外に出ました。暑い、暑すぎる。 会場内は常に冷房が効いていたので忘れていましたが、どうやら外は夏真っ盛りだったようです。暑さに絶望しながらCコンパイラゼミ+αの皆さんと焼き肉を食べに行きました。 美味しいお肉と5日ぶりのお酒で体力を回復しながら、色々と面白い話を聞くことが出来ました。 ここには書けませんが、応募倍率を聞いてびっくらこいた。

実は焼き肉の存在は去年参加した方々の参加記で予期していて新幹線の切符を翌日に取ったので、適当にアパホテルを予約して東京にもう一泊しました。

完走した参加した感想

自分は大学に入るまで1mmもプログラミングに触れたことがなく、大学に入ってからも理論的な内容ばかり追いかけてきた人間です。 もちろん実験やバイトで手は動かしてきましたし、少し興味が向いたものについては自分で実装してみたりもしました。(コンパイラがその例) また、3回の夏ごろからまともに競プロをやり始めて短いコードの実装は練習し続けていました。

これまで自分が認識する範囲での強い人というのは、競プロが強かったり、数学が強かったり、論文生成能力が強かったりする人々のことであって、 熱心にプログラムを書いて物を作り続ける人たちのことは全く目に入っていませんでした。

しかし、セキュキャンで会った人々はこれまで自分がなんとか足元に縋り付こうと追いかけてきた人たちとは全く異なる方向での強さを持っていました。 当たり前のように手を動かし続け、日々成果物を生成している人たちを目の当たりにして、エンジニアとして強いということについての認識を根底から覆されました。

自分は4回生ですから、学生として自由な時間はあまり残されていません。

院の進路も考えると、もっともっと本や論文を読んだり競プロをやって学ばなければいけないことがたくさんあるため、今から毎日手を動かして物をつくるぞ!という方向にシフトするのは正直厳しい気がしています。 ただ、何でもいいから手を動かして実装することを続けていかなければ彼らに大きく距離を離されてしまうという危機感を覚えました。

時間は作るものです。

1日は短いですが、限られた時間をなんとか活かしていかなければ、いざちゃんと働き始めたときに本当に何もできなくなってしまう気がしています。 今後はとりあえず競プロ、ISUCON、ETロボコンインターンの予習(深層学習コンパイラ)、Cコンパイラの続き、FPGAの勉強 あたりを進めて行きたいですね。不可能では?

院試受かりました

通信情報システム専攻の院試に受かりました。
前期は院試のことしかやってなかった気がします。
ひたすら過去問を頼りに勉強していったのですが傾向が大幅に変化し、結構空欄ができてしまったので割と不安でした。以下、対策していった科目の感想を書きます。まあ見たらわかることしか書きません。



専門基礎A
A-5: JFR
実家。なんと数年ぶりに巡回符号が復活した。

A-6: データ構造
(3)(c)だけわかんなかった。あとはいつも通り。

A-7: 計算機の構成
実家。これだけいろんな科目が傾向を変えてきた中まじで何も変わっていない。

A-8: プログラミング言語
インタプリタ書くだけが出ると思ったら、結構変わっててびびった。
型安全性について授業資料には書いてなさそうだけど、授業で話してたのかな。

A-9: グラフ理論
選んでない。まあ妥当みたいな問題が出た。

専門基礎B
B-4: 論理回路
実家。 ほんとに1mmも変わってないのこれとA-7だけ。

B-5: 計算機アーキテクチャ
語句説明をやめろ。満点予定の科目だったのでとても焦った。

B-6: アルゴリズムオートマトン
選んでない。アルゴリズムはどこ...?
がっつりオートマトンの問題が出たし過去問にすべてを費やした人は死んでそう

B-7: コンパイラとOS
やりやがった。過去十年ほどコンパイラとOSが交互に出ていたが、今年はなんとコンパイラとOSが出た。オートマトンの最後がわからなかったのとコンパイラが完璧に書ける自信があったので迷ってこっちを選んだ。

B-8: 計算と論理
実家。 予想より簡単でびっくりした。



以上10科目をやりました。
TOEICも8割取れてないのにmnt研に受かったのは奇跡。夏はいろいろ頑張ります。

セキュリティ・キャンプ2019の選考に通過しました

セキュキャン2019通過してました。
今年で年齢制限なので応募したのですが、倍率高いらしいし受かるわけがないと思っていたのでめちゃくちゃ驚いてます。 というか今も半信半疑です。何度も自分のIDと通過者のID一覧を見比べていますが、今の所同じ数字が書いてあるので多分受かってるんだと思います。 コースはシステムプログラミングトラックのCコンパイラ自作コースです。 事前課題と院試勉強を並行して進めることになるのでかなり忙しくなると思いますが、なんとか両立出来るように頑張ります。(研究は?)(競プロは?)
応募用紙に書いたことを軽くまとめます。(そのまま貼るのは恥ずかしいので、、、)

問1 これまでのプログラミング歴(C言語に限りません)について好きなだけ語ってください。何か作ったものがあれば、それについても教えてください。

githubのリンクを貼って、実験とバイトと競プロのことを書きました。
railsを使ったwebページ作成(バイト)
・miniMLインタプリタ(実験3SW)
・miniMLコンパイラ(実験4の前半がすぐ終わったのでアセンブリ吐くとこまでやってみた)
brainfuckインタプリタ(実験3の追加課題として書いてみた)
・3層NNの実装(実験4前半)
・自作CPU(実験3HW)
・競プロ
・自作OS(応募に向けてやってみたけど間に合いませんでしたと正直に言った)

実験4後半書かれてなくてウケる

問2 コンパイラソースコードから実行バイナリを生成する過程について、現在知っている範囲で説明してください。ソースコードの言語については、好きなものでかまいません。

前処理→字句解析→構文解析中間言語生成→アセンブル(オブジェクトファイル生成)→リンク
の流れで、途中で各種最適化と型検査が挟まる

↑を述べて、各内容について詳しく説明しました。大体授業資料を参考に書いて、リンクのところはパタヘネを参考に書いた。数えたら3000字ちょいでした。

問3 C言語コンパイラを書く際に、最も難しいポイントはどこだと思いますか?考えたことや、これまでのプログラミング経験を元に、具体的に教えてください。

アセンブリ生成を挙げました。レジスタ割当てむずかしくないですか。 あと、字句解析・構文解析を自分でやるならそっちのほうが難しいと思いますと書きました。

問4 何か他にアピールしたいことがあれば、自由に書いてください。この設問も含め、誤ったことを書いていても減点はしません。書いておきたいことは何でも書いてください。

一応情報学科に在籍しているので、「基本的なCSの知識はあります!」と豪語しました。 あとすいばかと一緒にTAPLを読んだので、操作的意味論さわったことありますって書きました。 最後にヤケクソで、ほんとにやれるかわかんないけどいつか自作OSに自作コンパイラ載せてみたいなあという願望を書きました。やるぞ。

応募用紙に書いたことは以上です。
正直ほとんどは計算機の人たちなら書ける内容な気がします。
後輩のみんなは年齢制限引っかかってなければ、そして少しでも興味があれば来年絶対応募したほうがいいです。しろ!!!

どんな5日間になるか、今から楽しみです。
コンパイラ書き始める前に院試勉強を一段落させなきゃ、、、

CODE THANKS FESTIVAL 2018 参加記

一回生からちょくちょく手を出してた競プロをこの夏から真面目にやったら、THANKSに参加できてしまった人の参加記です。
(6月時点のレートが609で、現在レート1340)

予選

ここ数年の参加記を眺めていると、年々枠が減ってるみたいですね。
予選の回数も減っていてかなしい、、、

qualA

解けまへん。
やはり地力不足で、2完でした。333位。

qualB

前日のAGCで晴れて水色になりました。

f:id:mdyh2a380824:20181120042056p:plain
その時の記録
モチベも上がり、気合十分な状態でのqualBですが、、、

Dを解いたのが9人(!?)で、予選が3完早解きコンテストと化す。
しかし、まだまだ未熟な僕にとってはこれが幸いしました。普通のコンテストだったらたぶんTHANKS参加できてなかったです。
40分ちょいで3完、190位。

通過確定、ほぼ確定の人をみて、いいなーと思いつつ賞賛をおくる。
この時点ではまだ予選落ちたと思ってました。(もともと来年に向けて経験しとくくらいの気持ちで参加していた。)

通過

上位で通った人の通過報告から数週間遅れてメールが届きました。
僕の10~20番くらい下だったれなすが落ちてたので、ほんとにボーダーギリギリの通過でした。(彼は遅刻してなければ、、、!と悔やんでいた。)
qualBの通過人数は本選40名、THANKS40名なので100人ちょい繰り上がってます。すごい。

前日

朝の新幹線に乗って東京へ向かう。
KMC勢と合流して晩飯を食べる予定だったが、3時頃にホテルについてベッドに横になった結果なんとそのまま6時間寝てしまった(各位ごめんなさい)
ちょっとだけ問題を解いて寝る。

当日

寝坊せずちゃんと起きる。
10時40分ごろに会場に着いた。いろいろ手続きをして席につく。
会場の後ろの方にはお菓子や飲み物がたくさんあった。
コンテストが始まる12:00まで知り合いと喋ったり配られた弁当を食べたりしながら時間をつぶす。

コンテスト

コンテスト開始!
※ネタバレ注意

まずA問題を解く。(1:39)
ほんとにやるだけと言った感じの問題。chokudaiさん曰くDPでも解けるらしい。

B問題は、10^9やけど間に合うやろ!って感じで投げるとACした(6:31)
655msなのでまあ余裕だった。

C問題。死亡。
ソートして差を取るとこまではすぐ思いついたけど、それぞれの区間が出て来る回数の処理をバグらせる。結局30:00にAC

D問題
しょーもない誤読をしてWAを生やす。すぐ気づいてAC(37:50)

悲しいかな、この時点で解ける問題がなくなる。この後何もわからず、2時間半地蔵になってしまった。(一応Fを解こうとはしていた)

終了後

結果は4完87位。うーん。
やはりオンサイトに進める人はレベルが高いなあと感じた。次はパーカー獲得を目標にします。
懇親会ではビンゴとコミュ力の融合ゲームがあり、人数の多い京都大学が圧勝していた。(zakiとamanoさんおめでとうございます)
僕もなんだかんだビンゴしてレポートパッドをもらいました。計算用紙おいしい!

懇親会終了後は京大の人たちとお寿司を食べに行きました。amanoさんが認知してくれていたのが驚きだった。

感想

結果はあまり良くなかったけど、やり始めて実質4ヶ月くらいなので出れただけでもよしとします。
今週末はHTTF本選なのでそっちは1ページ目にはいるぞ!