created at 2023/05/01
2022年度のSecHack365に参加し、修了することができました。
この記事ではSecHack365とその活動について軽く紹介した後に、作ったものとSecHack365を通して得たものについて書きます。
開催概要から引用します。
SecHack365とは、"SECURITY +HACKATHON 365 DAYS"を意味する名称で、25歳以下を対象に、サイバーセキュリティの問題に新しい発想で切り込む人材、セキュリティイノベーターを育成する長期ハッカソンです。
NICTをはじめ、大学や企業など様々な分野で活躍する研究開発・セキュリティのスペシャリストからなる専門家集団(トレーナー)の助言を得ながら、サイバーセキュリティの課題解決に資する実践的な研究・開発に取り組んでもらいます。議論の中で課題を分析したり掘り下げたりしながらサイバーセキュリティへの理解を深め、専門家や先輩、仲間たちの助言を活かしてさまざまな改良を加え、その経緯や成果を発表してさらなるフィードバックをもらいながら研究・開発を進め、多くの刺激と1年間という長期ならではの深い体験を得ていきます。
他には以下のような特徴があります。
過去の修了生の作品はこちらから見ることができます。
SecHack365の活動は大きく以下のように分けられます。
コースワークは所属するコース(ゼミがある場合はゼミ)ごとに内容が異なります。
私は開発駆動コースの川合ゼミに所属していました。
開発駆動コースとはどういったコースなのかについてはコース概要を引用します。
[Q]どのようなコースですか? 1年間でどのようなことをやりますか?
[A]とにかく開発まず開発、勢いで作ってみてから、あれこれと考えるコースです。何を作るべきかを悩んだら、まず作れるところから作ってみて、それから考えるのです。作ってみることで分かること、作ってみないと分からないことっていっぱいあると思うのです。作る前から悩んでいてもしょうがない、という考え方が好きな人におすすめです。
[Q]どのようにセキュリティの知識や意識を身につけますか? 何を目標としますか?
[A]開発状況に合わせて、少しずつセキュリティ機能を追加してもらえたらと思っています。もしくは最初からセキュリティ上の問題を解決するための開発をしてもらってもいいです。
[Q]期待する応募者像、応募者に求めるものは?
[A]このコースは川合ゼミと仲山ゼミのためのコースなので、どちらかのゼミに興味がある人が選んでください。
川合ゼミがどういったゼミなのかについてはSecHack365 2023年度 川合ゼミの説明を引用します。
「SecHack365 2023年度 開発駆動コース 川合ゼミ」では、こんな人を募集します。
- [1]プログラミング言語を作りたい人(これが川合ゼミでのおすすめテーマ#1になります)。
- [2]ライブラリを作りたい人(これが川合ゼミでのおすすめテーマ#2になります)。
- [3]そのほか川合が興味を持ちそうな開発をやりたい人(これが川合ゼミでの持ち込みテーマになります)。
いずれにせよ、私がトレーナとしてもっとも大切にしているのは、みんなが開発を楽しめることです。「SecHack365のせいで開発が嫌いになってしまった」というのを避けたいです。「前から好きだったけど、もっと好きになった。すごく楽しい」これを目指しています。
だから無理強いすることはないですし、効率よく早く正解を学ばせることよりも楽しみにながら試行錯誤して実感を伴って学んでもらうことを重視します。そもそも何が正解か、そんなに簡単に決められるものじゃないですよね。
どうしてもうまくいかなくてギブアップしたら私に質問してもらって、私は最低限のヒントを与えてあとは自力で突破してもらう、これが私の理想とする方法です。多くの人は、本当にあとちょっとのところまで来ているものなのです。
川合ゼミのコースワークでは週1回の雑談会(オンライン)をします。
雑談会では近況を話したり実装の相談をしたり集合イベントの感想を話したりしていました。
集合イベントでのコースワークは、実装の紹介をする会をしたり散歩をしたりしました。
それはそうって感じですが、コースワークはコースによって内容が結構違うので応募する方はコース概要を良く読むことをおすすめします。
2023年度からコース説明動画が入っていますが、これが結構分かりやすい気がします。
集合イベントは年6回開催されます。2022年度はオンラインで3回、オフラインで3回開催されました。
集合イベントでは自分の作品についての発表がほぼ毎回あり、その発表に合わせて作品、スライド、ポスター、動画などの締め切りが発生します。
集合イベントでの主なプログラムは以下の通りです。
成果発表会の開催概要を引用します。
成果発表会は、2022年度SecHack365に参加したトレーニー作品を一般に向けて発表する、年に1回のイベントです。
優秀修了生の動画発表のほか、展示スペースでは各コースごとに全トレーニーの作品紹介を行いますので、直接トレーニーから説明が聞ける機会となります。
各修了生ごとにポスター展示を行います。
優秀修了生はポスター展示に加えて動画発表+質疑も行います。
Althea(アルテア)というプログラミング言語を開発しました。
Altheaは所有権と参照カウントを組み合わせた所有権付き参照カウントというメモリ管理手法を備えています。
詳細は別で記事があるので、そちらをご覧ください。
https://blog.yagipy.me/althea
開発初期はKaleidoscope: Implementing a Language with LLVM、10日くらいでできる!プログラミング言語自作入門、低レイヤを知りたい人のためのCコンパイラ作成入門がとても参考になりました。
ベースの実装が完成した後、しばらくは以下のようにして開発を進めました。
後半はLLVM IRを直接書いて進めていました。
自動メモリ管理全般と参照カウントについてはガベージコレクション 自動的メモリ管理を構成する理論と実装を読んで学習しました。
所有権についてはThe Rust Programming Language 日本語版を読んだくらいな気がします。Rustで所有権起因のコンパイルエラーが発生したらその都度調べる感じでした。
あとOwnership You Can Count On: A Hybrid Approach to Safe Explicit Memory ManagementとMemory Management in Lobsterを読みました。
他にも何か読んだ気はしますが忘れてしまいました。。。
Altheaの開発を通して、プログラミング言語の開発に関する知識や経験を得ることができました。
基本的な言語機能に加えて自動メモリ管理やソケット通信などの実装を経験したことによって、プログラミング言語を今までより多くの観点で評価することができるようになりました。
あとは普段使用しているプログラミング言語の実装を読む際、今までは標準ライブラリの実装を読むので精一杯だったのですが、コンパイラのコアな実装に関しても勘所を押さえて読めるようになってきたと思います。(まだまだですが)
作品について発表する機会が多かったため、自身の作品を正しく相手に理解してもらう表現力を得ることができたと思います。
私の作品はプログラミング言語であり、コア機能はメモリ管理というかなりニッチな分野だったので、前提知識のない相手に作品の内容を伝えるのにとても苦労しました。
何度も発表していく中で、説明の順序、言葉、図を工夫してなんとか自身の作品について伝えることができたように思います。
また、今までは「作品の内容が良ければそれで良い、分かる人に分かってもらえれば良い」と考えていたため、より多くの人に理解してもらうことを重視していませんでした。
しかし、SecHack365でより多くの人に理解してもらおうと頑張った結果、よりシンプルなアルゴリズムにしようと何度も再構築し様々な観点でアルゴリズムを見つめ直すことができました。
そうしてシンプルになったアルゴリズムは問題点や無駄な点が浮き彫りになり、より良いアルゴリズムを考える助けになりました。
さらにシンプルであればあるほどフィードバックをいただきやすくなり、抜けていた点や改善点を見つけやすくなりました。
表現力というのは作品を相手に分かってもらうためだけではなく、作品をより良いものにするために必要な力だということを実体験を通して学ぶことができました。
SecHack365を通して多くの方々にお世話になりました。特に開発駆動コース川合ゼミのメンバーには大変お世話になりました。
みなさんからいただいたアドバイスを元に作品をより良いものにすることができました。みなさんの頑張りを見て私も頑張ろうと思えました。ありがとうございました。