task4233のめも

書きたいことをつらつらと

2023年の振り返りと2024年の目標を述べてみる

はじめに

2024年へ繋げることを主眼に置いて、2023年でやったことおよび思ったこと、ならびに2024年の目標をそれぞれ書く。tokizoさんが執筆されている月ごとの振り返りに触発されて4月から毎月振り返りを書いてきたので、月ごとの振り返りはしない。

もくじ

2023年の振り返り

やったこと

3月までは学生、4月からは社会人として活動していた。

本業 趣味
学生(~3月) - マルウェア検知システムに関する研究・修論・外部発表
- 技術系のインターン(アルバイト)
- 旅行
- 初めての経験
- 引越し
社会人(4月~) - IDPチームでの業務
- Build@Mercari、Mercoin Hackathonのメンター
- セキュリティ・ミニキャンプの講師
- 社の技術書典の部誌に寄稿
- Go Conferenceでの発表
- TsukuCTF, SECCON(Begineers)の運営
- ご飯
- ダーツ
- 脱出ゲーム
- 料理

これらに関して、思ったことを幾つか書く。全て読むと時間がかかると思うので、上部のもくじを活用してほしい。

思ったこと

社会人になる前に遊んでおいて良かった

社会人になる前に旅行や1人遊びをしていて良かったという話。これは私が不器用なだけかもしれないが、社会人になってから休日が新しく何かをするための時間ではなく息抜きのための時間になっている気がするからだ。この捉え方は業務への"慣れ"が関係していると思うので時間と共に薄れていくと思うが、少なくとも今は学生のうちに遊んでおいて良かったなと思う。

ちなみに、私は興味が移ろいやすいので、2~3月にやりたいことリストを作って1つずつ実践する形を取っていた。

このために貯蓄がいくらか減ってしまったが、お金に変えがたい経験と思い出を得られた。DIE WITH ZEROで言及されているように思い出は複利効果が働いて美化されるので、来年から新社会人になる人がいれば遊べる時に遊んでおくことをオススメしたい。

学生と社会人は違う

学生と社会人では、立場や社会的な扱いなど異なる面を挙げれば枚挙に遑がないが、大きな違いは開発の主体が個人からチームへ移ったことだと思う。

これは所属チームに依存すると思うが、私の所属するチームは各自が個人技で殴りながらもチームとして同じ先を向いているように思う。学生の頃は、基本的に個人で動いていたように思うが、他のチームと協力して何か1つの大きなものを作る経験に乏しかったので、この変化が私には大きく映った。

学生はすごい

メンティーの立場からメンターの立場へ変わった時に"学生はすごい"と強く感じたという話。前述の通り、私は学生から社会人という立場へ移行した訳だが、Build@MercariのメンターとMercoin Hackathonのメンター、セキュリティ・ミニキャンプの講師を担当させていただいた時、ネフェルピトーを見ている時のネテロ会長のような気持ちになっていた。

これを最も強く感じたのは、「価値交換の新たな未来をつくるプロダクト/機能を開発せよ」という曖昧なゴールへ向けて奮闘するMercoin Hackathonでのメンター経験である。このハッカソンで私が担当させていただいたチームは途中までアイデアが上手くまとまっていなかったので、メンターとして非常にヒヤヒヤしていた。しかし、その不安は杞憂に過ぎず、発表時には綺麗にまとめ上げてくださり、学生ではなく1人の人間として"すごい"と感動してしまった*1

私がインターンをしていた時にメンターさんから「学生なのにすごい」ということをよく耳にしていたのだが、その言葉の意味がようやくわかった気がしている。

チームでの存在感を増していきたい

まだまだ私の存在感がチームの中で小さいと感じており、それを増していきたいという話。なぜなら、チームとして何かを推し進めていく上で存在感が必要だと考えているためだ。しかし、僕のチームは10人以上が所属しており全員がデフォルトで強いエンジニアなので、その中の主要メンバーになることは、そもそも難しいと思っている。そのようなこともあって、発言やプロジェクトでの関与は増えているが、ガッと複数人の舵を握って推し進めることが出来ていないチームではちっぽけな存在である、というのが現状の自己評価だ。

大きなブロッカーとなっているのは大きく分けて3つあると考えている。1にドメイン知識の理解不足、2に周辺知識の理解不足、3に稚拙な英語コミュニケーションだ。それぞれ少し掘り下げる。

1つ目のドメイン知識の不足は、所属しているチームが取り扱う概念が多くて難しいという、新メンバーにとってはチャレンジングな環境なので起きている問題だと捉えている。この問題はメンターに1つ1つ教えてもらうことも出来たのだが、そもそもチーム自体が忙しいことに加え、1人でキャッチアップしたい気持ちがあったために、実際にタスクを進めながら学ぶという選択をした。

2つ目の周辺知識の理解不足も、原因は同様であると捉えている。私は認証認可関連の業務に携わっているのだが、チーム配属当初はOAuth 2.0OpenID Connect自体も理解していなかった状態だったので、かなり苦労している*2

3つ目の稚拙な英語コミュニケーションは、表現のバリエーションの少なさと会話に不慣れなことが理由で起きている問題だと捉えている。ここに至るまで、DeepLの利用や平易な単語・フレーズの習得、日本語でよく使うフレーズの習得、Speak Buddyの受講などを経ており、一応成長はしていると思う。その証拠に社内のMECTという英語試験ではスコアがA2 highからB1 highへ上がった。とはいえ、これは上記の努力よりも、所属チームの公用語が英語であるという環境のおかげだと思っていて、更にステップアップできるのかという不安がある。それでも、今後は表現のバリエーションの拡充と英語コミュニケーションの慣熟によって向上させていく予定だ。

会話はしないと下手になる

1人暮らしを始めて会話の頻度が減ったので、会話が下手になったと感じているという話。

そもそも、私は会話をする時に話が飛びがちだと言われる。これは、私が関連している話題だと思っていても、それを上手く言葉で相手へ伝えていないので、相手からすると話が飛んだと感じるためだと思っている。このような問題は会話をすることで鍛えたり矯正したり出来るが、1人暮らしを始めてから会話の頻度が極端に減ったので下手になったなと強く感じる。

会話を毎日できるような相手を見つけたくはあるが、1時期ずっと会話をしていたら本業に支障をきたすようになってしまったので週1にした。最近は週1だと少ない気もしているので、どうしようかなと思っている。

料理は人並みに出来た方が良い

ご飯に関して、自炊という選択肢を持っておくと、生活がより豊かになると感じたという話。

実は、私は1人暮らしを始めてフルグラとプロテインでやり過ごす限界生活をしていた。これは、9月ごろまで食事に対して"食事=栄養を摂取するもの"といった思想を私が抱いていたためだ。けれども、それを見かねた料理好きの友人が協力してくれたおかげで、自炊を少しずつ楽しめるようになってきた。その内容は、友人が課題レシピを設定し、私がそれを作り、友人が私の作った料理を評価するというものだ。正直なところ、このコメントが辛辣なので負けじと取り組むことができたと思っている。

勝手ながら、個人的に秀逸だと思ったコメントを抜粋して紹介したい。

「ハンバーグ作りを連続で失敗する人、初めて見た」
「え、うん、苦手ながらに頑張って作ったことは伝わってきたよ」
「大事なのは見た目よりも味だもんね」
「これ、もしかしてキャベツの千切りのつもり?」
「味見しない派なんだ、へー」

今見返すと京ことばみたいになっていて笑う。実際はこういうコメントばかりではなくて、良いところは褒めてくれたし、アドバイスもくれたので本当に助かっている。来年も続くのか分からんけど、続いてくれると嬉しい。

新しい趣味を探したい

趣味は散歩なのだけど、もっと没頭できる社会的な趣味を身につけたいなと思う。ピアノやダーツ・ポーカーは趣味ではあるのだけど、エンジョイ勢なので上手くなろうと思えるほどではない。だからこそ休日に没頭できるような趣味を見つけたいなと思う。今のところCTFが有力候補ではあるが、技術から離れた趣味の方が良いのかなという気持ちもある。そう考えると脱出ゲームが一番現実的なのかなという気持ち。

今年は職場の部活と同期のおかげで、5つ以上の脱出ゲームに参加することが出来た。いつも誘ってくれる@ntk_ta01、そして脱出ゲーム部のみんなありがとうという気持ち。個人的に一番良かった脱出ゲームは「君は明日と消えていった」で、今でもオプショナルで閲覧できる限定公開の動画を見て泣くことがある。本当に良い公演を作ってくれてありがとう。再公演が決まった時は、ぜひ皆さんにもチャレンジして欲しい。

2024年に達成したいこと

1つのプロジェクトを主導する

したい。前述した通り、チームの存在感を増すために達成する必要があることだと思う。そのためには、他のチームがやりたいと思っていること、会社として推し進めたいことに気を巡らせる必要があると思っており、他チームとのやり取りや発言頻度の増加が必要になってくると思う。2024年はそういったことに挑戦するために、時間的な余裕を持つ必要があると考えている。

時間的な余裕を持つために取り組めることは山のようにあると思うが、意識して取り組みたいのは「自分がブロッカーになる時間を減らす」と「手を動かす前に状況を整理する」というものだ。前者は、私がタスクを進めていく上で問題に直面した際に1人で解決しようとしてしまう癖があるために挙げた。後者は、締切のあるタスクというものに慣れておらず、焦って曖昧な状態のままタスクに着手してしまったために挙げた。

こうなってしまったのは、一言で言えば今までインターンなどで取り組んできたタスクが、今取り組んでいるタスクに比べて要求されるスキルが少なかったためである。例えば、新しいドメイン知識を得るだけで取り組めるとか、新しい周辺知識を得るだけで取り組めるとか、そういったことである。そのため、今までは説明をサッとされれば全体像を描くのは難しくなかった。しかし、今のチームでは1度説明を聞いただけではよく分からないことが多い。そして、その「よく分からない」が言語的な要因なのか、ドメイン知識的な要因なのか、周辺知識的な要因なのかが判断できない。更に、質問しようにも言語的な問題で質問が上手く出来ないという最悪な状態にいた。思い返すと今まで生きてこれた自分を褒め称えたい。

閑話休題、上記の「自分がブロッカーになる時間を減らす」と「手を動かす前に状況を整理する」を意識していきたい。前者は質問は恥ではないし役に立つでも言及されている15分ルールを、後者は自前のGoogle Docsに進捗をまとめるなどのルールを自分に課すなどして実践していくつもりだ。プロジェクトを主導できるかは運も絡むので何とも言えないが、今まで以上に積極的に行動・発言していきたいと考えている。

MECTでB2以上のスコアを得る

MECTとは社内の英語試験の通称なのだが、このスコアでB2以上のスコアを得たいのは所属チームの公用語が英語であるためだ。入社当時はA2 high、先日受験した時はB1 highになっていたので、次のスコアを得ることが次の目標だ。スコアの他に、自分の考えを正しく伝え、相手の考えを正しく聞き取り理解する部分を更に向上させたい。もちろんチームメンバーのサポートに支えられて業務は進められているのだが、もっと上手く伝えられればなと思う場面が多々あったので、前述した1つのプロジェクトを主導するためにも達成は必須だと考えている。

そのために必要なのは、英単語を覚えることよりも会話の経験を積んでして慣れることだと思っているので、来年はチームメンバーとの1on1だけでなく部活などでも積極的に英語を話していこうと思う。

チームが保持するドメイン知識および周辺知識の概要をソラで説明できるようになる

学習方法と平均学習定着率を示すラーニングピラミッドに示される通り、学んだことを他人に説明できるようになることが最も学習定着率が高いと言われている。そのため、ドメイン知識や周辺知識を説明できるようになることは肝要であると考えているので、これを設定した。更に、説明できるようになることは他チームに対しても恩恵があるため、これは出来るようになりたい、というか出来るようにならなければならないことだと思う。

この辺りはメンターから説明を受けた時に、「こういうことですか?」というように言語化して確認するステップを踏むことで向上していくと思うので、それを続けていきたい。

人生の進捗を出す

出したい。日本という国では税金的にも風当たり的にも独身に厳しいし、何より1人で得られる幸せよりも2人ないしは3人以上で得られる幸せの方が大きいという話をよく耳にするので、早めに結婚したいなと思う。この辺りの話を大っぴらに書くと変に詮索してくるerがいるので深くは書かないが、今はそう思える相手がいないので誰か紹介してくれる人がいたら紹介して欲しい*3。あと、この辺りに知見のある人がいたらご飯へ行きたい。

悪い習慣を良い習慣で上書きする

悪い習慣はいくらでもあるが、特に夜更かし作業という習慣を朝活という習慣で上書きしたいと考えている。1度夜更かしで作業をすると次の日の日中に集中できないことが増えてきたために、その週全てを棒に振ってしまうことが多かったので、この習慣を上書きしたいと思う。

新しいことを継続する時は他人を巻き込むと良さそうなので、いい感じのプラットフォームで共に頑張る人を探そうと思う。

運動癖をつける

夏はお散歩が多めだったのだが、冬は外が寒くて外出頻度がめっきりと減ってしまった。来年はランニングを習慣化したい。ただ、ランニングしていると足が痛くなるので、近くの体育館のトレッドミルを使いにいくのが良いのかなと思っている。既にシューズ・ウェアを購入して退路を絶ったので、やっていきの気持ちでいる。

おわりに

ここまでが2023年の振り返りと2024年の目標である。総括して、2023年に点数をつけるとすれば100点中80点くらいだと思う。正直、取りこぼしたと思う部分は多々あるが、見返してみると数多くのことにチャレンジできたし、上手くいかなかったとしてもそこから学びがあるので今後改善に繋げられると思えば安いものである。そもそも、私は不器用な方で初回は大抵上手くいかない凡人なので概ねこんな感じだし、上手くいかなかったこと自体に関しては軽い気持ちで捉えている。

何はともあれ、2024年も好奇心をもって引き続きチャレンジしていきたいと思う。

最後に、2024年も引き続き多くの人とご飯に行きたいと考えているので、ぜひ行きましょう。
では、2024年もよろしくお願いします 🙇

*1:結果的に彼らは最優秀賞を獲っており、流石の一言に尽きる。

*2:今も理解したとは言えないが

*3:もちろん自分でも動くが

大学院に在籍して変わったこと

はじめに

先日、芝浦工業大学の博士前期課程を修了して修士(工学)の学位を得ることができました。

大学院でやってきたことは、

に書いたので、このエントリでは大学院に在籍して変わったことについて書きます。上記エントリに書いた通り、私は大学院生でありながら研究に重きを置いていなかったので、研究生活によるアレコレを期待している方はブラウザバックをお願いします。

数年後に私自身が見返せれば良いなくらい気持ちでガッと書いたので、もし良ければ読んでいってください。

もくじは以下の通りです。もし読む場合は興味のある部分だけ読んでいただければ幸甚です。

様々なことに挑戦できた

これは大学院では学部の時の5倍くらい自由な時間があったためです。

学部の時は通常の講義に加えて教職課程も取っていたため、全休がある日は日曜日くらいでした。一方で、大学院では少しばかりの講義とゼミ以外は基本的に自由で、大学院中に情報処理学会の全国大会での発表、7つの長期インターンシップやセキュリティ・キャンプ全国大会のチューター、SECCON for Beginnersの作問・講師などに挑戦することができました。

技術力に自信が持てるようになった

これは様々な挑戦による恩恵です。

就活が終わりました にも書いた通り、学部では他人に誇れるほどの経験をしていなかったため、自らの技術力に自信を持てていませんでした。これは自由な時間を捻出しきれなかった私の落ち度なのですが、大学院に在籍して出せた複数の成果が私に大いなる自信を授けてくれました。これは学部で就職していたら絶対に得られなかった自信です。

大学院生なら研究で成果を出すのが順当なのですが、SecHack365の研究駆動コースで私よりも研究が得意な人々を前にして、研究の道より開発の道を選んだほうが楽しそうだと感じられたのも運が良かったです。不得意な分野でズルズルと闘うよりかは、一旦諦めて得意な分野で闘った方が良いということが身に沁みたのも良い副産物でした。

就寝前に本を読むようになった

これは尊敬している人が本をよく読んでいるためです。

私は尊敬している人のムーブを真似することが好きなので最初は軽い気持ちで始めたのですが、今では良い習慣がついたなと思っています。本を読むのは刺激が少ないので昔はあまり読まなかったのですが、本を読むことで得られる知見に中毒性があって止められなくなりました。

最近は技術書の予習と復習を参考にしながら本を読もうとしていますが、まだ慣れていないので徐々に慣れていければ良いなと思っています。

運動をするようになった

これは健康のためです。

コロナ禍になってから健康に気を遣って散歩を始めるようになりました。今散歩を続けてからのストリークが472日目です*1。また、セキュリティ・キャンプの全国大会で担当したグループワークのおかげで、膝コロ*2x30が習慣化したのも良かったです。

新生活が始まってからはジムかリングフィットトレーナーを始めようと思っているのですが、まだ決めきれていません。両方経験した人がいればお話を聞かせてください!

メンタルを稀に崩すようになった

これは自由な時間が増えたためだと思っています。

自由な時間があるといえど私は意欲がいつでもある訳ではありません。そのため、手を動かすでもなくぼんやりしていると「あれ、今何やってるんだっけ?このままで良いの?」と頭の中で反芻することがありました。これは突発的に来るもので、寝たり人と話したりすることで収まるのですが、学部の時はなかったなと思うので多分自由な時間が増えたからなのかなと思っています。

これを機会として、友人からオススメされたinsightを読んで、自己認識について考える機会になったのも良かったです。悩んだ時は読み返してみると求めている情報が載っていることが多かったので、同じような悩みを持っている人がいればオススメしたい一冊です。

また、気分が沈んだり不安な時にやっていることは 木が沈んだ時や不安な時にやっていること にまとめてあるので、もし良ければご覧ください。

人と関わる機会が増えた

自由な時間が増えたためです。

インターンシップやイベントに参加したことで出来たチューターや同期、他の参加者との繋がり、SNSで仲良くなった友人との繋がりが特に増えました。これらの友人はちょっとした友人ではなくリアルでご飯に行くレベルの友人で、学部時代にはあまり居なかった人間関係です。

個人的に一番良かったのはCARTA HOLDINGSの夏期インターンシップTreasureで出来た友人です。当時はコロナ禍だったこともあり対面で会えなかったのですが、CARTA側の粋な計らいでDiscord鯖が出来たことにより、今でも遊びに行けるレベルの友人が出来たので本当に感謝しています。

Treasureは今年もエントリーが始まっているので、興味のある25卒の学生さんはぜひ参加してみてください!!!*3

人を人単体ではなく振る舞い別に判断するようになった

人と関わる機会が増えて、他人の汚い部分も見る機会が増えたためかなと思っています。

学部時代は他人の汚い部分を許容できずに、自分の常識から外れた言動をする人とは距離を取ることが多かったです。けれども、この考え方だと機会を失うことになると思いましたし、私自身も汚い部分はあるので人単体の認識と振る舞いを分けて考えるようになりました。これは自分の考えの正当化に過ぎないのですが、分け隔てなく人と関われるようになったので良い変化かなと思っています。

人を頼って良いと思えるようになった

インターンシップやイベント、就活を通して良い人と多く関われたためです。

そもそも私は他人に迷惑をかけたくないと思っているので、他人に頼ることが苦手なタイプだと思っています。けれども、大学院生活では運よく良い人に恵まれたので、学部の時よりは気兼ねなく他人に相談できるようになったと思っています。

そのようなことを繰り返していると、途中から「貰ったものは返さなくては」という呵責に苛まれることがありました。これを友人に相談したところ、「求めてないものを渡されるのは迷惑でしょ。他人に助けてもらったら別の人にも返すようにしてあげな」と言われ、それに納得したのでなるべく他人にgiveできる時はgiveするようになったのも変化だと思います。

おわりに

今見返してみると、ほとんど大学院生活で自由な時間が増えたことによる変化なのかなと思いました。

人によって多種多様な大学院生活を送る/送ったと思います。学部で就職していたら/いなかったら更に良い人生を歩めていたかもしれません。けれども、終わりよければ全て良しという言葉があるように、結果として何かを得られたり変化したりしていたのであれば、それは良い選択だったと言えるのではないでしょうか。少なくとも私は学生期間を延長して良かったと思える2年間でしたし、どういう選択をしていたとしてもこれは変わらないと思います。

なにはともあれ、研究に全振りしていなかったので卒業できるか不安だったのですが、何事もなく卒業できたのは本当に喜ばしく思います。来年度からは就職しますが、就職してからも外向きの活動を続けていければと思っています。

もしここまで読んでくださった物好きな人がいれば、どこかでお会いできた時はお話でもできると良いですね。ではまた。

*1:昨年末に体調を崩したので、年末にストリークが切れました。残念......

*2:膝をついて腹筋ローラーを前後させる動作のことです。

*3:個人的な見解であり、所属する会社、組織とは全く関係ありません。

2022年の振り返りと2023年の目標を述べてみる

はじめに

こんにちは。task4233です。

この記事をあなたが読んでいるということは、2022年を無事に脱出できたということですね 👏

昨年同様に2022年の振り返りと2023年の目標を述べていきます。

過去の振り返り記事たち

もくじ

2022年、何をしていましたか?

みなさんは2022年、どんなことをしていましたか?

急に言われるとあまり出てきませんよね。私もそんな感じだったのでカレンダーを見返してみると、以下のようなことをしていました。

▶︎ やったことリスト

2022年は2021年よりもチームや団体で取り組んだものが多く、かなり周りのメンバーに助けられた1年でした。2023年は就職するので、職場でも技術力に自信のあるメンバーと共にエンジニアリングに勤しめたら良いなと思っています。

内面と向き合った就活

就職といえば、2022年は内定先の選択という大きな決断をした年でもありました。詳しくは 就活が終わりました に書いた通りで、自分の内面と向き合う機会になったのが本当に良かったと思っています。

もう少し掘り下げると、私はどうも負荷をかけられると楽しいと感じるようなんですよね。人間をロボットのように扱うような理不尽な負荷は願い下げですけど*1

そう感じるに至った理由を考えてみると、今まで成長したと感じた時、大抵が自分のキャパシティを少し超える程度の負荷をかけられた時だったから、という解釈が一番しっくりきています。いわゆるラーニングゾーン*2にいる時です。このラーニングゾーンに自分を置き、困難を克服した経験を繰り返した結果、パブロフの犬が如く負荷をかけられた状態にいるだけで楽しいと感じるようになってしまった、というのが私の解釈です。

犬並みにチョロくて笑えますね。

一方で、もちろん失敗した時も数えきれないほどあります。やると計画してやらなかったことも無限にあります*3。それでも、少しの間でも物事に本気で取り組んだならば、そこから得られるものは何かあると思っていますし、失敗しても死ぬ訳ではないので、私はこのやり方で良いんじゃないかなと思っています。

そんな訳で、就職という観点で言えば2022年は大きな決断をした年でした。

それと、これは余談なのですが、『約束のネバーランド』という作品で「決断」にまつわる好きなセリフがあるので引用しておきます。

▶︎ネタバレになったら申し訳ないので、読みたい方は開いて読んでください。

正しい判断を下すこと 下そうとすることは大切だ でも決してそれだけが全てじゃない

判断が正しいか間違っているかなんて その時には誰にも判らない

だから大切なのは判断の後 下した判断を正解にする努力

たとえ下した判断で悪い結果を招いても そこから何ができるか 如何に足掻くかこそが大切なんだ

判断だけで決まるのなら人生は賭け事になっちまう

引用: 白井カイウ 出水ぽすか (2019)『約束のネバーランド集英社, Vol. 13, pp. 56.

名言が過ぎますね。とても好きです。

それはさておき、2022年は就活が終わった後にもセキュリティ関連の活動が多かったので、これらの活動についても振り返ってみます。

セキュリティ関連

セキュリティ関連の活動が多めでした。

具体的には、SECCON Beginners CTF / Live / 札幌 / 福岡、セキュリティ・キャンプ全国大会 チューター、CTF for Connected Cars in CODE BLUE、SecHack Returns(TsukuCTF)、taskctfです。

私はCTFがそこまで強い訳ではないのですが、縁あってか今年はCTF関連の活動が多かったです。

特に印象に残っているSECCON Beginners、TsukuCTF、taskctfについて書きます。

SECCON Beginners

CTFの作問や地方開催の講師を担当しました。やりたいと手を挙げたのが功を奏したのだと思います。

私はCTFerとして強い訳ではないですが、エンジニアリングの部分なら自信があるので、少しは異なる視点を与えられた気もします。そのおかげで新たな繋がりもできましたし、手を挙げるのは大事なのだなと痛感しました。

TsukuCTF

作問と運営を担当しました。私の作問ミスがあったのは残念でしたが、ホストモーテムとしてミスの内容と修正案を提示できたのは良かったと思っています。

また、SecHack勢で集えたのも良かったです。コミュニティのありがたさを感じました。徹夜しながらの運営対応もレアな経験で、夜までワイワイできて楽しかったです。来年も開催できたら良いなと思っています。

taskctf

多忙の中、今年は早めに告知できたのが良かったと思います。

一部のユーザにはcrt.shで告知前にleakしていたようですが。

邪悪Discord鯖で事前にleakされた図
邪悪Discord鯖で事前にleakされた図

一方、本番中に障害が発生したのは残念でしたが、対応できたのは良かったと思います。

それにしても、景品もないのに毎年参加してくださる方がおり、非常に嬉しい限りです。

来年も参加できたら良いなと思っています。

このようにセキュリティ関連の活動を自由にできたのも、昨年の振り返りに書いた通り、研究の優先度を下げたからなのかなと思っています。詳しくは昨年の振り返りに書いたので割愛しますが、最後に研究に関して振り返りをしようと思います。

研究関連

なんとか修了したい

修了したいです

あとは学外発表1回と廃材の詰め合わせ修論だけなので、それだけ済ませれば修了できるかなと思います。

修士に進学したのは良い選択でした。学部の時は今よりも技術力や視座で劣っていましたし、人間関係も狭かったです。修士に進学することで学費2年分を失いましたが、長い人生から見ると大きくプラスの採算になったと思います。

とはいえ、衣食住も学費も親にサポートしてもらったので、本当に親には頭が上がらないです。直接これを伝えれば良いのですが、それはなんだか照れ臭いので、1人暮らしする前にまとめて伝えようかなと思います。

研究に専念できたか

多分いいえです。外部発表をしてこなかったので結果だけ見ると実質ニートです。これは、昨年の振り返りに書いた通り、研究に対する意欲よりもインターンシップ等に対する意欲の方が高かったためです。

私の所属する研究室は基本的に放任主義なので、その時間を使って自由なことが出来たのは本当に良かったです。

片や周りの修士2年生は外部発表をしたりジャーナルを通したりしており、心から凄いなと思います。D進する方もちらほら観測しており、素直に尊敬です。陰ながら応援しています。

3年間の研究を通して成長したこと

他人へ物事を伝える力が成長したと思います。より具体的には、他人と話すときに前提条件を抑えることを意識するようになったと思います。

これは教授が過去に話した話を全くと言っていいほど覚えていなかったためです。他の研究室もそうなんですかね?

教授は他の学生も見ている都合上仕方のないことだと思いますが、そのおかげか過去に話したサマリを話の頭に置くようになったと思います。

一方で、文章を書く力はあまり成長しなかったと思います。論文を全く書いていなかったので、当たり前といえば当たり前ですね。この書く力は社会人になってからブログを書く時間が増えると思うので、そこで少しずつ向上させていきたいなと思います。

2023年の目標

ここまで振り返りを書いてきたので、2023年の目標(やってみたいこと)を書いて終わろうと思います。やってみたいことは、エンジニアリングと私生活でそれぞれあります。

エンジニアリング

趣味の開発でやられアプリのOSSを開発しようと考えています。これはインターン先で脆弱性スキャナの開発をしていた際に、脆弱性スキャナのPoCとしてやられアプリが欲しいなと思ったためでした。

想定しているのはBadStoreやOWASP Juice Shopのようなものですが、車輪の再発明だとしてもやられアプリを作ることで脆弱性についても学べますし、開発力もつくので良いかなと思っています。

また、本業の開発では、少し無理してでもエンジニアリングに時間をかけたいと思っています。これは、現エンジニアの人から「やる気はいつまでも続くわけではない」という話をよく聞くからです。私もそう思っているので、ひとまずは初年度のワクワク感のデバフがかかった状態で、進捗を出したいなと思っています。

私生活

気分転換用にエンジニアリングと関係ない趣味を始めたいなと思っています。2022年はお散歩と英語学習、ピアノを趣味程度にやっていたので、新しい趣味を初めてみたいです。

Duolingoは383 streaksでした

目的は私が楽しむことなので、上手くなることを目指してはいませんが、何かオススメの趣味とかあれば教えて欲しいです。いや、アイデア募集中です。

それと、月1くらいの頻度で良いので2〜4人くらいでご飯に行きたいです。就職してからも時々話せると良いなと思っています。

おわりに

以上が2022年の振り返りと2023年の目標でした。

2022年も色々なことができました。冒頭にも書いた通り、特に複数人で何かする機会が多かったのが印象的でした。

2023年がどんな年になるのか想像もつきませんが、楽しんでいけたらなと思います。

長くなってしまいましたが、ここまでお読みいただきありがとうございました。

2023年もよろしくお願いします!

*1:教育実習の時に サイアクな めに あわされた

*2:心地の良い状態をコンフォートゾーン、少しストレスを感じる状態をラーニングゾーン、強過ぎるストレスを感じる状態をパニックゾーンと呼びます。詳しくはググってください。

*3:無限にあるというオタク的言い回し、どこから来たんでしょうね。

セキュリティ・キャンプ全国大会2022 オンラインにチューターとして従事させていただいた話

はじめに

こんにちは。task4233です。

2022年8月8日〜12日の5日間にかけて実施されたセキュリティ・キャンプ 全国大会2022 オンラインにて、D - AIセキュリティクラスのチューターとして従事させていただきました。この記事ではその参加記録として思ったことを書こうと思います。

D - AIセキュリティクラスの概要

AIセキュリティクラスは名前の通り、AIに関するセキュリティについて学んだり考えたりするクラスでした。

講義では、機械学習モデル自体に関するセキュリティと機械学習モデルが引き起こす可能性のある問題の2つについて扱いました。前者は機械学習モデルの検知結果を狂わせる敵対的摂動(Adversarial Perturbation)と、その敵対的摂動に堅牢な機械学習モデルの作成方法について学びました。その後、実際に機械学習モデルを敵対的摂動を付与した敵対的サンプルで攻撃したり敵対的サンプルに堅牢なモデルで防御したりするCTFを実施しました。後者は、フェイクニュースのようにこれからAIが引き起こす可能性のある問題とその対策についてディスカッションを通して考えました。

これらの講義の中で、特に面白かった講義について少し話します。

特に面白かった講義

Dクラスの講義は4種類あったのですが、その中でも実践AIシステム Attack&Defenseが最も面白かったです。この講義は、画像のクラスタリング用の機械学習モデルに絞って、攻撃手法と防御手法を実践形式で学ぶ講義でした。

講義の前半は座学で、なぜ敵対的サンプルが機械学習モデルを誤認識させるのかという基礎的な話などを説明されました。後半は実践演習で、Google Colaboratory上でコードを動かしながら、検知精度(Accuracy)を80%から10%程度に落とすような敵対的サンプルの作成手法や、そのような敵対的サンプルにも堅牢なモデルの作成手法について学びました。参考になる連載記事が講義中で提示されていたので、もしよければご参照ください。

jpsec.ai

特に面白かったのは、その後に実施されたAttack&Defense形式のCTFでした。このCTFでは、各受講生が機械学習モデルを管理し、他の受講生の機械学習モデルを誤認識させるような敵対的サンプルを送りつけるAttackと、他の受講生から送られてくる敵対的サンプルに対して堅牢な機械学習モデルを管理し続けるDefenseがありました。私はAttack&Defense形式のCTFは初めてでしたし、CTF終了後の感想戦で各受講生の手法を聞いて学びがあったので、非常に面白かったです。

他の講義も面白かったのですが、それらの講義の感想は他の受講生が書いてくれると思います*1。そこで、私はチューターとしてどのようなことを意識していたかを書きます。

チューターとして意識していたこと

一言で言うと、2つの機能を有するbotになることを意識していました。

1つ目の機能は、受講生に補足情報を届ける機能です。これは、講義中に講師の方が仰った話に関連する情報等をシュッと投げる行為のことを指します。具体的には、講義中に「最近〜といった攻撃がありましたよね」と講師が仰った時に、それに関する記事をシュッと貼る、といったような振る舞いのことです。

私はセキュリティ・キャンプの全国大会に受講生として参加したことがあるのですが、当時はよく分からない単語や情報が出てくると講義中でもすぐに調べていました。講義中にすぐ調べていたので、その時調べないとすぐに忘れると思ったためです。その結果、その先の話を聞き逃すということが何度かありました。受講生にはこのような勿体ない経験をして欲しくないと考えていたため、講義で少し難し目の単語が出てきた時は補足や参考記事をシュッと貼るようにしていました。

本年度のセキュリティ・キャンプはオンライン開催であったため、展開される講義に対して非同期的に情報を提供することができ、チューターとしてこの振る舞いが非常にやりやすかったです。受講生のアンケートを見ないとまだ何とも言えませんが、少しでも良い効果があったのであれば幸いです。

2つ目の機能は、受講生の発言・問いかけに対してリアクションをする機能です。これはオンライン講義あるあるだと思うのですが、自分の発言に対して反応がないと発言者は不安を感じます。そのため、誰かが発した発言に対してはコメントで反応することを意識していました。

もちろん、音声で反応することもできたのですが、その場合講義の邪魔になる可能性もあると思ったので、今回は基本的にコメントベースで反応するようにしていました。これが助けになったかは分かりませんが、受講生の方々のサポートになったなら幸いです。

(チューター業務を)完走した感想

一言で言うと、かなり疲れました。やはり、5日間、朝の8:30から夜の20時まで集中して多くのことをインプット・アウトプットしただけあります。LT会でも発表しましたし。

speakerdeck.com

とはいえ、受講生の皆さん、講師の方々や他のチューターさんの方がもっと疲れていたと思いますが。

一方で、その疲れを忘れさせてくれるほど、一部の講師陣やチューターさんと対面でお話できたのが良かったです。私含め一部の講師陣とチューターはオフラインで参加していたため、久しぶりのエンカイベントで非常に楽しめました。最近このようなイベントは昨年のCODE BLUE以来だったと思うので、最近モチベが停滞していた私にとっては本当にありがたい機会でした。

もちろん全ての講師やチューターの方々と話を出来た訳ではありませんが、私の実力不足に引け目を感じていましたし、どうせまた別のイベントでも話せる気がしたので一部の講師陣とは話さないようにしていました。そのような講師陣と同じ土俵に立てるようになるために、私の強みを磨いて行こうと今一度思いました。

おわりに

現在、私は修士2年生で来年就職予定なので、来年もチューターとして参加することは叶いません。そのため、仮にセキュリティ・キャンプに関わるとすれば、地方開催のセキュリティミニキャンプの講師枠として参加し、そこから権限昇格して全国大会の講師になることくらいしかできないと考えています。

そのために、まず手をたくさん動かすこと、そしてそれを外部で発表することが必須になってくると思います。昨年の振り返りにも書いた通りファーストキャリアとしてはソフトウェアエンジニアを目指す予定ですが、正直この先ソフトウェアエンジニアのスキルだけでは生きていけるとは思っていません。そのため、第二の刃としてセキュリティ系にも少し足を突っ込んでいれば良いかなと言う気持ちでいます。

とはいえ、直近ではそんなことよりも修士学生として卒業できるかが不安なので、学業に力を注ごうと思います。果たして私は無事に卒業できるんだろうか......

さて、最後の最後で完全に自分語りになっていしまいましたが、チューターとしての参加記録としてはこんな感じです。セキュリティ・キャンプ中に関わってくださった講師・チューター・受講生・そして関連者の皆様、色々とお世話になりました。また会う機会があれば、その時はよろしくお願いします。

*1:とても楽しみにしています!

BlueStacks 4.27.0 を MacOS にインストールする際にクラッシュする問題の解決方法

TL;DR

  • インストール済みの VirtualBox および BlueStacks を App Cleaner で削除する
  • PC を再起動する
  • 公式ページから最新版の BlueStacksInstaller を再度ダウンロードする
  • ダウンロードした BlueStacksInstaller で BlueStacks をインストールする
  • ダイアログが表示された場合は公式のサポートページ を参考に対応する
  • これで BlueStacks を起動できるはず

はじめに

この記事は、BlueStacks を MacOS で起動する際にクラッシュする問題の対処法をまとめた記事です。内容はほぼ Reddit に投稿されたコメントの転載ですが、日本語の記事がなかったため投稿することにしました。その Reddit の投稿や公式のサポートページは、本記事の末尾にあるので必要に応じて参照してください。

解決に至るまで

Android Emulator である BlueStacks を利用したかったのですが、起動時にクラッシュが起きていました。クラッシュレポートを読むと、以下のように Cannot parse contents of file /tmp/BlueStacks-501-Private/guest-network-tcp-9999 というエラーが多数発生していました。

クラッシュログの一部

Cannot parse contents of file /tmp/BlueStacks-501-Private/guest-network-tcp-9999

Cannot parse contents of file /tmp/BlueStacks-501-Private/guest-network-tcp-9999

Cannot parse contents of file /tmp/BlueStacks-501-Private/guest-network-tcp-9999

Cannot parse contents of file /tmp/BlueStacks-501-Private/guest-network-tcp-9999

Cannot parse contents of file /tmp/BlueStacks-501-Private/guest-network-tcp-9999

applicationDidResignActive

Cannot parse contents of file /tmp/BlueStacks-501-Private/guest-network-tcp-9999

Cannot parse contents of file /tmp/BlueStacks-501-Private/guest-network-tcp-9999

Cannot parse contents of file /tmp/BlueStacks-501-Private/guest-network-tcp-9999

Cannot parse contents of file /tmp/BlueStacks-501-Private/guest-network-tcp-9999

applicationDidBecomeActive

Setting IMAP State 0

Cannot parse contents of file /tmp/BlueStacks-501-Private/guest-network-tcp-9999

Cannot parse contents of file /tmp/BlueStacks-501-Private/guest-network-tcp-9999

Cannot parse contents of file /tmp/BlueStacks-501-Private/guest-network-tcp-9999

Cannot parse contents of file /tmp/BlueStacks-501-Private/guest-network-tcp-9999

Cannot parse contents of file /tmp/BlueStacks-501-Private/guest-network-tcp-9999

Cannot parse contents of file /tmp/BlueStacks-501-Private/guest-network-tcp-9999

Cannot parse contents of file /tmp/BlueStacks-501-Private/guest-network-tcp-9999

Cannot parse contents of file /tmp/BlueStacks-501-Private/guest-network-tcp-9999

Cannot parse contents of file /tmp/BlueStacks-501-Private/guest-network-tcp-9999

PrivilegedHelper: ERR: Executing: /usr/bin/kmutil showloaded --list-only --bundle-identifier org.virtualbox.kext.vboxdrv

PrivilegedHelper: ERR: No variant specified, falling back to release

Virtualization driver is loaded

SetupSignals()

-[ServiceStateMachine start]

-[ServiceStateMachine enterStateStarting]

PrivilegedHelper: ERR:

VBoxBridge: Already initialised

VBoxBridge: VBoxBridgeStartMachineAsync()

VBoxBridge: VBoxBridgeStartMachine_Begin()

VBoxBridge: VBoxBridgeInternalOpenMachine()

VBoxBridge: VBoxBridgeStartMachine_Tick()

VBoxBridge: VBoxBridgeIsPowerOperationPending()

VBoxBridge: VBoxBridgeStartMachine_End()

VBoxBridge: VBoxBridgeCompletePowerOperation()

int VBoxDevicesRegister(PPDMDEVREGCB, uint32_t) -> 0x700007223bd8 393217

Cannot parse contents of file /tmp/BlueStacks-501-Private/guest-network-tcp-9999

AudioConstruct -> 0x7f88041e8220 0 0x7f8805666660

Assertion failed: (pDevIns->pHlpR3->u32Version == PDM_DEVHLPR3_VERSION), function AudioConstruct, file /Volumes/android/bst-v4.270.1-bgp64-mac/app-player/hd/external/appplayer/Host/BlueStacks/bstdevices/bstdevices/AudioDevice.m, line 246.

INFO : BSG_KSCrashReport.c (1557): void bsg_kscrashreport_writeStandardReport(BSG_KSCrash_Context *const, const char *const): Writing crash report to /Users/task4233/Library/Caches/KSCrashReports/BlueStacks/BlueStacks-CrashReport-80D7BC24-7BA7-4CDF-B144-D3D675D9AAEA.json

zsh: abort /Applications/BlueStacks.app/Contents/MacOS/BlueStacks

Saving session...

...copying shared history...

...saving history...truncating history files...

...completed.

Deleting expired sessions...none found.

[Process completed]

ググると、類似のエラーが出たという Reddit の投稿を発見しました。

www.reddit.com

ここに投稿された以下のコメントに従って対処したところ、クラッシュが起きなくなりました。

www.reddit.com

対処方法は冒頭に記した通りです。

もし同じ問題にハマっている方の助けになれば幸いです。

参考リンクたち

NTTコミュニケーションズ ISPネットワークのつくり方 参加記

はじめに

こんにちは。task4233 です。

2022年1月22日(土)にNTTコミュニケーションズにて開催された「ISPネットワークのつくり方」に参加しました。午前中にはISPネットワーク構築に関する座学が、午後にはハンズオンが行われました。

この記事は、特に学びが多かった午後のハンズオンの内容を書き記すために執筆されました。そのため、ハンズオンに繋がるStatic RoutingとDynamic Routingの話を紹介した上で、ハンズオンで利用したJunos OSとCisco IOSと私が挑戦したExtra Stageの内容について書きます。

午前 - 座学

今回の座学は、OSI基本参照モデルネットワーク層に該当し、ネットワーク機器間の通信経路を確立するための処理に関わる話がメインでした。

前提知識

説明に関わる基本単語をここで提示します。

  • AS(Autonomous System)
    • 相互に接続し合うネットワークのこと
    • 世界で一意な番号が付与されている
  • Peer
    • 接続したASの経路を交換して、お互いのネットワーク到達性を確保する関係のこと
  • ISP(Internet Service Provider)
    • インターネット接続サービスを提供するプロバイダ
  • IX(Internet eXchange)
    • 必要な回線数を減らすためにISPやデータセンタ同士の相互接続するポイントのこと
    • IXが無いと、N個のASがある場合フルメッシュでPeerを張るとN(N-1)/2 回線必要
      • IXを用意すれば、各ASがIXにアクセスするだけで良いので N 回線で済む
      • 嬉しいね
  • ルーティング
    • TCP/IPネットワーク上で目的のノードまでの最適な経路を選択すること
  • ルーティングプロトコル
    • ネットワークの経路情報を交換するためのプロトコル
    • Static Routing(静的経路制御)とDynamic Routing(動的経路制御)の2つがある

ルーティングに利用されるロジックと技術

ルーティングにおける最適経路選択におけるロジックとして、下記の3つのロジックがあります。

  1. Longest Prefix Match
  2. Administrative Distance(AD値)
  3. Metric

それぞれ簡単に説明します。

  • Longest Prefix Match
  • Administrative Distance(AD値)
    • プロトコルごとで優先度をつけるための値
    • 値が小さい方が優先される
    • ベンダによって異なることがあるが、大枠の優先順位としては変わらない
  • Metric
    • 同一のルーティング, プロトコルでルートが重複した際にどちらを優先するか決める値
    • 値が小さい方が優先される
    • RIPならホップ数、OSPFならインタフェースの帯域幅と言ったようにルーティングプロトコルに応じて異なるMetricを利用する
      • 全てのルーティングプロトコルで同じ指標なわけないよね

以上の経路の情報はRIB(Routing Information Base)として保持されます。このRIBはルーティングテーブルとも呼ばれ、後述するDynamicなルーティングプロトコルであるOSPFやBGPごとに存在し、ルータはそれらの経路をマージして1枚のルーティングテーブルを作成します。

この情報を用いてルータのパケット転送に最適な情報であるFIB(Forwarding Information Base)が生成されます。この結果がルータのCAMに書き込間れることで、ハードウェア的に高速なルート決定を行っています。

CAMとTCAM等については、こちらのスライドの説明が具体的で分かりやすかったです。

www.slideshare.net

Static Routing と Dynamic Routing

先述したとおり、ルーティングプロトコルには、Static Routing(静的経路制御)とDynamic Routing(動的経路制御)の2つがあります。正しくは、ルータが直接接続しているネットワークであるConnected(直接接続経路)もありますが、そのままなので説明は省きます。

  • Static Routing
    • 静的に設定された経路情報を使う
    • メリット
      • 帯域幅が狭い時に適している
        • Dynamic Routingのような経路探索のための通信が発生しないため
      • ルータに負荷がかかりづらい
        • 入れた瞬間にルータ自身のRIBとしての計算は走るが1回のみ
    • デメリット
      • 障害があったときに死んだまま
      • ネットワークが大きくなればなるほど設定が辛い
  • Dynamic Routing
    • ルーティングプロトコルにて他のルータの経路情報を使う
    • メリットとデメリットはStatic Routingのvice versa
    • ルーティングプロトコルとして、IGPならOSPF、EGPならBGPが有名
      • OSPFに関しては、DR*1とBDR*2を用意して、それらのルータにコネクションを集中させることで、ネットワーク全体のコネクション数を削減している
        • BDRはバックアップという位置付けではあるが、実質ダブルマスターの構成のイメージ

この後、ISPネットワークへの攻撃手法と対策、監視と制御、SDNに関する話がありました。午後のハンズオンに大きく関わる訳ではないので詳細は省きますが、基本的な内容でした。

午後 - ハンズオン

ハンズオンでは、提示された要件を満たすネットワークを構築しました。
ネットワークは2つのASから構成され、AS間はEGPとしてBGPを、AS内ではIGPとしてOSPFを用います。

ネットワーク機器の設定でミスが発生すると大きな障害に繋がり、最悪の場合SLAに大きな打撃を与える可能性があります。そのため、データベースのトランザクションのように、変更がCommitされるまで適用されないという特徴を兼ね備えているものが多いそうです。

今回のネットワーク内ではJunos(Juniper Networks)およびCisco IOS(Internet Os Software)が混在していました。いずれも処理の流れに大きな違いはありませんでした。

基本の流れは下記の3手順でした。

  1. 状態の確認
  2. 変更のプール
  3. 変更の適用

ネットワークの構成図は非公開だと思うので、ハンズオンでよく利用したコマンド等を備忘録として貼っておきます。困ったらヘルプが見れるので大体 ? を実行しておけば良いです。

Junos OS

Junos OSはシェルコマンドモード、オペレーションモード、コンフィグレーションモードの3つのモードが存在します。下記ページの説明がわかりやすかったです。

www.infraeye.com

よく利用したコマンドは下記の通りです。大体 ? を実行するかドキュメントを参照すればなんとかなります。

  • オペレーションモードからコンフィグレーションモードに移行したい時
    • configure
  • 現行の状態を表示したい時
    • show ${表示対象のキーワード}
    • 困ったら show ? でなんとかなる
    • e.x.) show configuration, show route
  • 情報を新たに設定したい時
    • set ${表示対象のキーワード} ...
    • 困ったら set ? でなんとかなる
  • 変更を取り消したい時
    • delete ${削除対象のキーワード} ...
    • 困ったら delete ? でなんとかなる
  • commit前の変更差分を見たい時
    • show | compare
  • commitする時
    • commit check で変更内容のバリデーション
    • commit でコミット

Cisco IOS

Cisco IOSは4つのモードがあります。下記ページの説明がわかりやすかったです。

www.infraexpert.com

よく利用したコマンドは下記の通りです。大体 ? を実行するかドキュメントを参照すればなんとかなります。

  • Privileged EXECモードからGlobal Configurationモードに移行したい時
    • configure terminal
  • 現行の状態を表示したい時
    • show ${表示対象のキーワード}
    • 困ったら show ? でなんとかなる
    • e.x.) show running-config
  • 情報を新たに設定したい時
    • 設定したいコンフィグレーションモードに入る
    • コンフィグレーションモードに入ると、(config-*)# の様に表示される
      • interfaceのコンフィグレーションなら (config-if)#
      • routerのコンフィグレーションなら (config-router)#
  • 変更を取り消したい時
    • no句を接頭辞として、情報を新たに設定したい時と同じ処理を実行すれば良い
    • 困ったら no ? でなんとかなる
  • commit前の変更差分を見たい時
    • show commit changes diff
  • commitする時
    • commit でコミット

Extra Stage

追加課題が5つ用意されていた内2つ解きました。その時の問題と解答例をこちらで供養しておきます。

1.任意のリンク切断

  • 任意のリンクを切断することによりルーティングテーブルやTrafficにどのような変化が起きますか?
    • 切断したリンクのTrafficが0になった
    • ルーティングテーブルは確認していないが、リンク切断に応じてそのルートの優先度が低い並びに変更されていると考えられる
  • Dynamic Routing Protocol(OSPFやBGPなど)はどのようなしくみで動的に経路を制御しているでしょうか?
    • Neighborとの到達を確認することで、そのコストを動的に確認することで制御していると考えられる

2.in-boundおよびout-boundのtrafficをねじ曲げる

  • 指定した経路をTrafficが流れるように設定を変えてください
    • 指定した経路のBGPのLP(LOCAL_PREF)属性を高く、MED(MULTI_EXIT_DISC)属性を低くする
      • ちなみに、configを見る限り、LPはINはout-bound用に、MEDはin-bound用に利用されると考えられる
    • 指定した経路以外の経路に逆操作を行う
  • Static Routing/Dynamic Routingそれぞれのメリット/デメリットとして何が考えられるでしょうか?

おわりに

マスタリングTCP/IPの入門編程度しか読んでいなかった中で、実際にコマンドを実行しながらISPネットワークの構築とルーティングプロトコルについて学べるイベントでした。そもそもASを複数利用する現場にJOINすることがなかった(今後もなさそうな)ので、非常に貴重な経験ができたと思います。

来年も実施されるようであればぜひ参加してみてはいかがでしょうか? (これ毎回言ってる気がしますね)

*1:Designated Router: 代表ルータ

*2:Backup Designed Router: バックアップ代表ルータ

2021年の振り返りと2022年の目標を述べてみる

はじめに

こんにちは。task4233です。
この記事は私の2021年の振り返りと2022年の目標をまとめるために書かれました。

2021年は研究を控えめにしてインターンシップに注力した年でした。多少の悔恨はあるものの、悩んだ末に決めた振る舞いだったのでこれはこれで良かったのかなと思います。2022年は一心不乱に研究に取り組みたいと思います。

今年もポエム多めなので、興味のあるところだけ拾い読みしてください。

過去の振り返り記事たち

もくじ

2021年の振り返り

2021年1月1日に掲げた目標は以下の3つでした。

そのうち、1つを達成しました。

「え、1つだけ?」と思った方もいると思うので、それについてざっくり述べようと思います。

私は研究者になりたいのか、開発者になりたいのか

結論から言うと、私は研究者よりも開発者になりたいと思ったので、研究は控えめでインターンシップをたくさん経験するという選択をしました。この選択に至った理由は2つあります。

まず、やったことが誰かの役にたって欲しいという思いが私の中にあると気づいたためです。
これは主観ですが、研究の8割は実世界で使われることがないと思っています。もちろん、ある研究にインスパイアされて開発された製品やソフトウェアは五万とあるでしょう。しかし、それが世の中に出るまでに数年〜数十年かかるはずです。私はこの事実を楽しいと思えなかったため、私は研究を主軸に置いた職が合っていないと思ったのが理由になります。

次に、研究を続ける環境が開発を続ける環境よりも整備されていなかったためです。
これも主観ですが、研究は1人で続けるものではないと思っています。もちろん一流の研究者はそれができるのかもしれませんが、私は一介の学生に過ぎません。その点で、私の所属している研究室は放任主義です*1。教授が次の研究テーマについて口を出してくる訳でもないですし、進捗に対して口うるさく言ってくる訳でもありません。必要であれば教授にアポを取って相談するという形になりますし、輪読と進捗報告は月にそれぞれ1回あるくらいです。

私はこの研究室の体制に不安を感じ、同じ研究を続けられるような筑波大学院のとある研究室を受験しました。曲がりなりにも学部時代に人並みにCSを学んでいたため、問題なく試験は通過できました。しかし、その研究室の輪講に参加させていただいたときに、コメントがほとんど飛び交っていない事実に絶望しました。そこで、結局研究室を変えても意味はないのだな、と悟ったのをよく覚えています。

それならば、今いる研究室の環境をよりよくする方向にシフトした方が良いと思い、最近はその働きかけに取り組んでいます。
私の力ではありませんが、研究室のSlackがProプランになりました。それと、研究室のGitHubがなかったので勝手に作りました。良いですね。

以上が、私が研究者よりも開発者になりたいと思うに至った経緯です。
後述しますが、計10個のインターンシップに参加して、研究の進め方にヒントを得た気がしたので2022年は実践していこうと思います。

SecHack365 研究駆動コースのアシスタントを担当させていただいた件

閑話休題、そんな私に、3月ごろ研究駆動コースのコースマスターである猪俣先生からアシスタントのオファーをいただきました。私は昨年の研究駆動コースの中では落第生寄りという自己評価をしていたので、オファーをいただいた時は非常に驚きました。しかし、オファーをいただいたからには自分ができることを最大限やってやろうと決めました。

その後、私に求められているものについて熟考した結果、研究時のアドバイス以外に

  • 習慣化セッションへの助力
  • アシスタント側の企画出し
  • 開発系のアドバイス・知見の共有
  • 1on1の実施

といったことを僕ならサポートできるだろうと思い、コースワークの他に尽力してきました。

結果として、アシスタント側の企画書は事務局の方に好評でしたし、実施した1on1も良かったと言ってくれたトレーニーもいたので、少しでも力になれたと思いたいです。

研究駆動のトレーニーの方々に「アイツ、研究してないのに何偉そうにコメントしてんだ?」とか思われてたら泣いちゃいますが、アシスタントとして最後までサポートできることはやっていこうと思います。

また、習慣化では本当にお世話になったので、今年も継続しています。毎日の筋トレや1日1コミットを続けています。

f:id:task4233:20220101020700p:plain
365 Days of Codeを達成した図

個人的にとても嬉しいです。

インターンシップにて得られたもの

一方で、私が今年最も力を入れていたインターンシップでは多くのことを得られました。その中で、特に価値があったと感じているものは、タスクの進める時の質問の仕方タスクの進め方図々しさです

タスクを進める時の質問の仕方

ドキュメントから得られないドメイン知識*2に関する情報は、積極的に早めに聞くべきだと思います。逆に、普遍的に得られる情報は、自分で調査する癖をつけると調査する力がつくので、可能な限り自分で調査するべきだと思います。

前提として、質問とは相手の時間を奪う行為だと思っています。とはいえ、質問回数をゼロにすることは、自分のタスクを停滞させる要因になり得るので悪手に他ならないとも思っています。
そこで、可能な限り意味のある質問をしたいです。

では、意味のある質問とは何でしょうか。
私は、質問者がいくら調べても答えが得られない情報を得るための質問だと思います。

そのような質問がドメイン知識に関する情報を問う質問です。そのため、インターン生は、ドメイン知識に関する情報は質問した方がタスクを速く進められるはずです。

逆に、インターン生のメンターは、事前にドメイン知識をドキュメントにまとめておいたり、ドメイン知識の理解に役立つドキュメントの在処を提示すると良いと思います。
ここで、最初にオリエンテーションを設けて口頭で説明する方もいましたが、インターン生は聞くだけでは結構聞き落とすことが多いので、文字にして残すのがオススメです。
更に、こういう時は質問してね、こういう時は自分で考えてね、といったことを共通認識にしておくと良いかもしれません。たかが数分のSyncでその後の進捗が大きく変わるはずです。

タスクの進め方

手に余る大きいPRを1つ作るのではなく、細分化されたPRを小さく複数作ってレビューしてもらった方が結果的に速く終わると感じました。

大体のインターンシップでは、1つのJIRAチケットを切られて、そのタスクに取り組むことが多かったです。
このタスクが十分に細分化されていたならば問題ないですが、実装方針が一度に描けないのであれば細分化した方が良いと思いました。

ここで、タスクを細分化するデメリットとして、しない時と比べてレビュアーの時間を多く奪ってしまうことを、私は危惧していました。
これをとあるエンジニアさんに相談したところ、

  • 第一に、君のタスクは"君だけ"のタスクじゃない
  • レビュアーも開発メンバーの一員
  • 君がそこで小さく切り出すことでレビュアーはレビューごとに解像度が上がる
  • レビューはレビュアーを君のタスクに巻き込む手段にすぎない

という話をされたのがきっかけで、小さなタスクで切り出すようにしました。その結果、タスクを進める速度は結構速くなった気がします*3

この小さく作って小さくレビューしてもらうサイクルは研究でもできることだと思いました。タスクの細分化は大事とよく言いますが、細分化した後の進め方として迷ったときにレビューを挟むと言うサイクルを入れていない場合が多い気がしました。そのため、2022年の研究ではこれに気をつけて進めていこうと思います。

図々しさ

そして、図々しさも得られたと思います。 図々しさっていいことなのか?と思うかもしれませんが、開発現場では図々しさが美徳な気がしました。

これは私が一方的に尊敬している方の話なのですが、彼はとてもアクティブで前のめりに発言して、考えるよりも手が先に出るタイプの人です*4。彼の近くで1年間研究を続けてきて、基本的に図々しい方が欲しい情報は得られる気がしました。私もそれに倣って意外と図々しく過ごしてきた方だと思いますが、結果としてより多くのものを得られた気がします。

学部卒で社会人になっている友人に「陽キャはあんま仕事できなくても声が大きいだけで評価高いんだから理不尽な世界だよな」と言われたことがありますが、それができることが凄いことなんだなと思うなどしました。

その他

また、言うまでもありませんが、技術面とコミュニケーション面でも大きく成長できました。下手なエンジニアよりも成長してる気がしますね*5

技術面で成長できた要素は以下の通りです。

  • 実践を通したクリーンアーキテクチャの理解
  • Goの内部仕様の理解
  • 負荷試験を実施する際の指標・ツールの理解
  • A/Bテストを実施する際の指標・ツールの理解
  • 既存コードの文法に併せてシュッとコードを書く力
  • アプリケーションを設計する力
  • ドキュメントを読んでコードに反映する力
  • 設計書を書く力
  • ユニットテストを意識した設計・コードを書く力
  • MVPを意識して設計・実装を行う力
  • k8sの基本的なコンセプトに関する理解
  • AWSGCPのリソースを活用して開発に取り入れる力
  • OAuth2/OIDCの実例から学ぶ認証/認可の流れの理解
  • TerraformのCustom Providerを実装する力

コミュニケーション面で成長できた要素は以下の通りです。

  • 自分の施策を他人に構造的に伝える力
  • 同期的コミュニケーションと非同期的コミュニケーションの得手不得手

おそらくまだまだあると思いますが、今パッと思い浮かんだのはこんな感じです。

今思うと、インターンシップに行き過ぎた気もしますが、将来を考えるといい選択だったなと思います。インターンシップの話を聞きたい人がいたら*6気軽に話を振ってくれれば対応します。

失敗した朝活

冒頭でも書いた通り、朝活は見事に失敗しました。要因は大きく分けて2つあると思っています。

1つ目の要因は、朝早く起きるモチベーションが続かないことです。 実は、3月ごろまで、はてなブックマークでまとめられている記事について話す会をClubhouseでやっていたのですが、結局モチベが続かずにやめました。

やるなら何か朝やることを作ると良いのだと思いますが、特に毎日やりたいことは夜にやっているので 🤔 という顔になっています。そこで、2022年は夜寝る前にやっている読書を朝やってみることにします。

2つ目の要因は、就寝時間が遅いということです。 当然ながら就寝時間が遅いと早起きできる訳ないですね。そこで、9月ごろからみんちゃれと言うアプリで、1時までに就寝するグループに入って今まで継続しています。意外と時間をオーバーしてしまうことがありますが、これをやっているお陰で徹夜することはないと思います(今日はのぞきます)。

minchalle.com

実はとある2daysのハッカソンで徹夜してしまい、2日目で寝落ちした経歴があるのでそこから徹夜はしないようにしています(今日はのぞきます(2回目))

2022年の目標

  • 学外発表を1回はする
  • 毎朝5分は読書する
  • 7月に軽めの振り返り記事を書く

2022年の目標を立てようと思ったのですが、将来のために必要なことを2021年のうちにほとんどやってしまったので、今年の上半期は研究8割、就活2割くらいで頑張ろうと思います。下半期は何をしようか決めていないので、上半期が終わったら軽めの振り返り記事を書こうと思います。

おわりに

以上が、2021年の振り返りと2021年の目標でした。

2021年は目標と異なる年になってしまいましたが、結果として今しかできないことを享受できたので本当に良い年だったと思います。

長くなってしまいましたが、ここまでお読みいただきありがとうございました。今年も1年よろしくお願いします。

*1:それが普通なのかもしれませんが

*2:その業界・チームのみの専門知識。例えば、サーバの構成など。

*3:一方で、PRを複数出すときは修正内容を被らないようにしてほしいと言われました。これは私の改善点です......

*4:前のめりに発言しすぎてて、一瞬ギョッとさせられることもありますが

*5:ダウトです

*6:いるのか?