KMC活動ブログ

京大マイコンクラブの活動の様子を紹介します!!

GDGoC Kyoto University が発足しました

こんにちは,KMC48代のirom(id:ir0m)です.これはKMC Advent Calendar 2025 - Adventar22日目の記事です.

今月からGDGoC Kyoto University*1というエンジニアコミュニティが発足し,iromはorganizerの1人になりました.本記事ではこの団体の紹介をしようと思います.

GDGoCとは

GDGoCはGoogle Developer Groups on Campusの略で,Googleのテクノロジーに興味のある学生のためのコミュニティです.GDGoC Kyoto Universityはその京都大学支部として活動しています.京都大学の学生が中心となって運営をしていますが,他大学の学生,社会人,高校生など誰でもイベントに参加することができます.Discordサーバー京大 GDGoC Kyoto Univに入ることでイベント情報をキャッチアップできます!

活動内容

日頃からDiscord上で交流したり,勉強会を開催したりしています.また,GDG主催で3ヶ月ごとに大規模なイベントも開催予定です.イベントの内容としては,Web/App/Cloud/AIなどの技術勉強会,LT会,プロジェクト開発,ハッカソン,交流会,Google Developer系イベントとの連携,などが挙げられます.

初回イベント

12月21日に初回イベントとして,学生AI Coder Meetup in 京都 - Google Developer Group - connpassが開催されました.Google Developer Expertや関西の学生エンジニアの方々が集まり,セッション・LT会・懇親会が行われました.Vibe Codingというホットな話題について,貴重な話をたくさん聞くことができました.

おわりに

発足したばかりで今後どのように発展するか分かりませんが,多様なイベントを通して関西の学生エンジニアと交流でき,Googleのテクノロジーに詳しくなれる有意義なコミュニティになっていくと思います!気になる方はぜひDiscordサーバー京大 GDGoC Kyoto Univに入ってください!

*1:KMCとは関係のない団体です.ただ,同じ京都大学のエンジニアコミュニティなのでirom以外のKMC部員もすでに数名所属しています.

仕様と真面目に向き合う「Pietプログラミング」ガイド

KMC37代のdamaです。 KMC外ではDNEKと名乗っています。

これはKMC Advent Calendar 2025の6日目*1の記事です。

対象読者

  • Pietの正しい仕様や開発環境に興味がある方
  • 使っているPiet開発環境の挙動に疑問を感じている方
  • 一次資料を読むことの大切さを知りたい方

Pietの仕様を知らない方は、とりあえず雰囲気で読むか、以下の解説スライドの16-37ページに目を通すと良いでしょう。

www.slideshare.net

概要

「Piet」はドット絵をソースコードとして扱う難解プログラミング言語です。 ざっくり説明すると「プログラムがドット絵の中を上下左右に移動しながら各点の色の違いに応じてコマンドを実行していく」というものです。

Pietの歴史は約四半世紀*2の長きにわたり、その間にソースコード画像や開発環境がいくつも生み出されていますが、実はその多くが公式の仕様に準拠していません。 また、仕様自体にも実装依存や未定義部分が多く含まれるため、利用する開発環境により体験が大きく変わってきます。

本稿では、私自身がかつて仕様の一部を誤解してIDEを実装してしまった事例を取り上げ、Pietの仕様違反の発生と拡大の構造を分析します。 そして、そのような実態との向き合い方を考え、仕様を意識したPietプログラミングを実践するためのガイドを提示します。

仕様解釈の誤り(私の事例)

誤解の内容

私がかつて誤解していたのは「白ブロック上で行き止まりに突き当たった際の挙動」です。

以下は3x3ソースコードを例に、正しい挙動と誤解に基づく挙動をそれぞれ模した図です。 普通の矢印は移動成功、バツ印は移動失敗を表しています。

正しい挙動(左)と誤解に基づく挙動(右)

つまり、左図のように

  1. 赤から右方向へ直線状に移動する
  2. 行き止まりに突き当たって移動に失敗し、CCが切り替わる
  3. 行き先が変わらずまた移動に失敗し、DPが時計周りに進む
  4. 右上の白からそのまま下方向へ直線状に移動する
  5. 緑に入る(白ブロックから抜け出す)

というのが正しい挙動ですが、右図のように「3の直後、白でないカラーブロック(今回は赤)まで引き返してから移動を再開する(そして青に入る)」と誤って解釈していました。

解釈を誤った原因

この仕様解釈の誤りは、当時の私が仕様を学ぶ際、不完全な和訳と古いデバッガの挙動に依存したことに起因します。 つまり「一次資料(=仕様原文)を読み解く努力を怠った」ことが根本的な原因でした。

まず、私が頼りにしていたPietの仕様原文の和訳ページから「白ブロックの挙動について」という節の訳文を引用します。

白ブロックの挙動について(追記:2008.1.25):    (この辺り訳がちょっと微妙 by訳者)

インタプリタは白ブロック上を一直線に色の着いたブロックに当たるまで進みます。 先に説明した普通のカラーブロックの時のような動き方はしません。

白ブロックを通りすぎて黒ブロックや端に当たった時正確にどうなるのかが元の仕様では不明確でした。 私の解釈を以下に記しておきました。

  • インタプリタは一直線に"滑って"白ブロックの上を通り過ぎる。
  • もし行き止まりにあたったらCCを切り替えるが、インタプリタの行く先は変わらないのでDPを変える。
  • 新しい向きのDPで今いる白codelの上からカラーブロックに到達するか別の行き止まりにぶつかるまで滑る。
  • 白ブロックの上で行き止まりにぶつかる度にCCやDPを切り替えて滑りなおしてみる。 これをカラーブロックに到達するまで繰り返す(その場で)。 白ブロックの上から試してダメだった場合はもと来た道を引き返す。

引用元: DM氏の難解プログラミング言語 - Piet (和訳版)www.kembo.org

訳者自身も「この辺り訳がちょっと微妙」と注記している通り、最後の2行が一義的に解釈しにくい表現になっています。 後ろから2行目の「今いる白codelの上から」は正しく「引き返さない」ように読めますが、最終行の「(その場で)」「もと来た道を引き返す」は「引き返す」ように読めます。

続いて、最終行の原文を引用し、今の私による拙訳も付しておきます。

原文:

  • Each time the interpreter hits a restriction while within the white block, it toggles the CC and steps the DP clockwise, then tries to slide again. This process repeats until the interpreter either enters a coloured block (where execution then continues); or until the interpreter begins retracing its route. If it retraces its route entirely within a white block, there is no way out of the white block and execution should terminate.
  • 引用元: DM's Esoteric Programming Languages - Pietwww.dangermouse.net

    拙訳:

  • インタプリタが白ブロック内部で行き止まりに突き当たる度に、CCを切り替えてからDPを時計回りに進め、それから再度滑って行こうとする。 この手順は、インタプリタがカラーブロックに入る(それから実行が再開する)か、同じ経路を再度辿り始めるまで繰り返される。 もしインタプリタが同じ経路を完全に白ブロック内部だけで再度辿ることになった場合は、白ブロックの外部に出る方法は無く、実行は終了する。
  • このように、原文には「引き返す」解釈を促すような表現は無く、また、同じ経路を再度辿る場合の仕様が明記されています。

    そして、当時はステップ実行機能が便利という理由で主にPietDevというオンラインIDEデバッグをしていました。 しかし、PietDevが作られたと推測される2006年*3時点では、先述の挙動が未定義でした*4。 PietDevはおそらくその未定義動作を独自に実装した結果、まさに「引き返す」実装になっていました。

    当時の私はデバッガが古い可能性を考慮せず、その挙動に整合する解釈を和訳から選択するだけで満足してしまったため、誤りに気付くことができませんでした。

    仕様解釈の誤りがもたらした影響

    2015年、私が自作のIDE「Pidet」とPietの仕様解説スライドを合わせてKMC部内で発表したところ*5、予想外の反響を受け、部内でPietが流行り始めました。

    また、勉強会や外部イベントでの発表*6に加え、何人かのKMC部員がPidetを参考に様々なPietアプリケーション*7を開発していったため、2017年5月に外部から指摘を受けるまでの間、私を含む誰もがその誤りに気付かないままKMC外にも仕様違反を広める結果になりました。

    2018年以降このPietブームは下火となったものの、「KMC Piet」*8に基づくアプリケーションの一部は修正されないままインターネット上に残り続けています。

    Pietの仕様との向き合い方

    私個人として、当時の私の考慮不足が結果的に周囲へ混乱を招いた点について、反省すべき点が多かったと改めて感じます。 誤解に気付いた当時の私はPidetの当該仕様違反を修正し、翌年には新しいIDEの開発に移行して更なる修正を加えています。

    一方で「OSSライセンス等により明確に免責され、需要も少ないアプリケーションのメンテナンスをする必要は無い」という考え方も尤もであり、他の開発者にまで同様の対応を求めるつもりはありません。 また、その利用者の多くはPietの外見上の難解さやプログラムが動作する様子を見てカジュアルに楽しむのが目的であり、彼らにまで実装の精査を求めるのはナンセンスです。

    したがって「インターネット上の多くのPiet実装が不確かであり、指摘を受ける機会も稀である」という事実を認識し、仕様に忠実なPietプログラミングを行いたければ最終的には自分で判断するしかないという意識を持つのが合理的であると考えます。

    なお、Pietの最新仕様冒頭の注意書きには以下に引用する記述があります。

    I have now added some clarifications to this specification to address some of the questions I have been asked over the years. Hopefully they are sensible and most implementations will already be compliant, but it's possible some do not comply. Caveat emptor.

    引用元: DM's Esoteric Programming Languages - Pietwww.dangermouse.net

    拙訳:

    これまでに寄せられた質問の一部に対応するため、私はこの仕様にいくつかの補足説明を追加しました。それらが理に適っており、ほとんどの実装が既にそれらに準拠していることを願いますが、一部はそうでない可能性もあります。買い手に用心させよ。

    Caveat emptor(買い手に用心させよ)というのは、「商品の品質を確認する責任は購入者にある」という売買法上の原則を表すラテン語法諺です。 現実の商取引への適用はさておき、無料でオープンソースが基本の難解プログラミング言語の世界ではそう考えておくのが無難なようです。

    仕様重視型Pietプログラミングガイド

    先述のように、Pietをカジュアルに楽しむのであれば、ググって一番上に出てくるものやAIのオススメに従うのも手軽で良いと思います。 しかし、本格的にPietプログラミングに取り組むのであれば、仕様を意識しない限りほぼ確実に罠に嵌まります。

    過去に間違いを犯した私を信じるかの判断は勿論読者に任せられますが、ここでは仕様原文を隅々まで読み込んだ今の私が考える、仕様を重視してPietプログラミングをするための具体的な選択肢を紹介していきます。

    入門資料2選

    最終的に自己判断が必要であるとは言え、初学者が公式の仕様原文を読むのは骨が折れます。 原文は英語で書かれている他、画像をソースコードとして扱うにも関わらず図による説明が一切ありません。

    そこで、内容に大きな問題が無く図解が豊富な入門用の資料を2つ紹介します。 まずは入門でPietの具体的なイメージを掴み、厳密性を原文で補いましょう。

    1つ目は冒頭で挙げたbase64氏によるスライドです。

    www.slideshare.net

    もう読んだ方もいるかもしれませんが、発表用スライドということもあり要点がコンパクトにまとまっていて読みやすいです。

    2つ目はy-mos氏によるブログ記事シリーズです。

    ymos-hobby-programing.hatenablog.com

    5回にわたり、複数の例を図解しながら細部まで丁寧に解説されています。

    IDE 2選

    Pietプログラミングには通常IDE(画像エディタ兼デバッガ)を用いますが、仕様を重視する上でその選択は特に注意が必要です。

    今私が「Piet editor」及び「Piet IDE」というキーワードでそれぞれGoogle検索をしたところ、一番上に表示されたものはそれぞれ別のIDEでありながら、いずれも白ブロック上の挙動が誤っており、しかもその誤り方はそれぞれ異なるものでした。 また、GPT-5.2の一時チャットで「お勧めのPiet開発環境を教えてください。」と尋ねたところ、「エディタ/IDE(画像ベース)」を3つ紹介されましたが、リンク切れが1つと最新仕様が定まった2014年*9以前にインタプリタ部分の更新が止まっているものが2つでした。

    私の知る限り、ある程度実用的かつ仕様に忠実そうなIDEは現在2つしか無いので、それらを紹介します。

    1つ目はBubbler-4氏によるブラウザベースのIDEです。

    github.com

    オンラインのIDEは手軽に使えて便利です。「Export」タブの「Permalink」ボタンで、IDEと描いたソースコード画像をまとめて共有するURLを取得できます。

    2つ目は私がPidetの次に作った「Pietron」です。

    github.com

    ここで紹介しても良いと思える品質に仕上げるため、この記事の執筆と並行して改修作業をしていました。 改修したばかりで新しいバグを埋め込んでいたりしたら申し訳ないです。 デスクトップアプリなので手軽さでは負けますが、現存するIDEの中で私にとっては一番使いやすいUIになっています。

    なお、これら2つの間にも以下のような実装依存部分の差異があります。

    • 整数が多倍長整数 vs 符号付き64ビット整数
    • in(number) コマンドで標準入力が整数にマッチしなかった場合に先頭の空白を消費する vs 消費しない

    これ以上拘りたい方は是非それぞれの実装やPietの仕様原文を精読してみてください。

    インタプリタ2選

    私は画像編集機能が無い普通のインタプリタにはあまり詳しくないのですが、現在主流(?)と思われるものを2つ挙げます。

    1つ目はErik Schoenfelder氏によるnpietです。 エディタも別アプリとして載っていますがIDEではない普通の画像エディタなので、圧倒的に有名であるインタプリタの方だけ紹介します。

    www.bertnase.de

    昔からPietインタプリタデファクトスタンダードとされており紹介しない訳にはいかないのですが、実はそのまま実行すると白ブロック上で無限ループすることになっても実行が終了しません。 マニュアルに書いてある通り -v11 オプションを付けて実行しましょう。 また、npietのソースコードを読むと mod コマンドがC言語% で実装されていることがわかりますが、Pietの仕様では「切り下げ除算」を使うことになっているのでこれは仕様違反です。

    2つ目はynn氏によるRust製インタプリタです。

    github.com

    何故これを挙げたかと言うと、最近AtCoderでPietが使えるようになりそのインタプリタとして採用されたからです。

    新ジャッジ運用開始のお知らせ - AtCoder

    私はRust初心者ですが、READMEや実装を読むと仕様を忠実に守ろうとする姿勢が伺えます。 div コマンドに切り下げ除算が使われていないのが少し気になりますが、こちらは仕様に明記されていないので仕様違反ではないはずです。

    また、こちらの in(n) コマンドはREADMEに書かれている通り、より積極的に標準入力を消費します。 先述のIDEを用いてAtCoderに参加する場合は特に注意しましょう。

    ちなみに、AtCoderでは基本的にバイナリファイルを提出できないためPlain PPMというテキストベースの画像フォーマットを使う必要があるのですが、これを一般的な画像フォーマットと相互に変換するUserScriptを公開しているので紹介しておきます。

    dnek.net

    今後の予定

    先ほど公開したPietron 2.0.0のリリースノートにも書いたのですが、PidetとPietronに続き3つ目のIDEを作ろうと思っています。 これ以上作り直す羽目にならないように保守性を重視して開発したいです。 また、今回の調査で改めて手軽さが重要であることを実感したので、利便性を向上させつつも純粋なウェブアプリとして作る予定です。

    この記事と同様にどれくらい完成が遅れるかは不明ですが、興味のある方は以下のいずれかを適当に見ておいてください。

    それでは、各々にとって良きPietライフをお過ごしください。

    *1:カレンダーの枠が空いていたので6日当日に登録して書き始めたところ全然間に合いませんでした。

    *2:Timeline of esoteric programming languages - Esolangには2001年にPietが考案された旨が記載されていますが、ソースが無く定かではありません。なお、公式の仕様ページのアーカイブが残っていることから、遅くとも2002年4月には公開されていたことがわかります。

    *3:オリジナルのPietDevが動作するページは現存しませんが、そのソースコードのフォークに含まれるライセンス文のコピーライト表記から2006年に作られたと類推できます。

    *4:和訳ページの引用部分にも書かれている通り、「白ブロックの挙動について」の説明は2008年1月に追記されました。

    *5:KMCでは毎年春に合宿を開催して部員同士で講座スライドを発表し合っています。

    *6:このブログ内の「Piet」をキーワードに含む記事の検索結果からその様子がわかります。

    *7:新しいIDEインタプリタ中間言語による自動生成プログラム等

    *8:仕様違反の発覚以降、今後は正しい仕様に従おうという流れになったものの、これまでの活動と作品がただの勘違いとして片付けられてしまうのは浮かばれないということで、KMC部内ではそれらを古い仕様に準拠した方言であったと捉え、今までのPietを「KMC Piet」、2008年の新仕様に基づくPietを「Piet08」と呼び分けることにしました。

    *9:Wayback Machineのアーカイブ2008年1月以降の公式仕様ページの更新が確認できるのは、2014年5月2016年1月2017年7月2018年9月の計4回ですが、この中で仕様自体に実質的な変更があったのは2014年の1回だけです。このとき、主に mod コマンドに「切り下げ除算」を用いることや各種コマンド実行時のエラーの扱い等が明確化されています。

    C107に『独習KMC vol.23』を販売します

    こんにちは,KMC48代のirom(id:ir0m)です.これはKMC Advent Calendar 2025 - Adventar15日目の記事です.

    京大マイコンクラブはコミックマーケットに毎回出展し部誌を販売しています. 今月末に開催されるC107の2日目では,既刊のAS59128本と独習KMC vol.21に加えて,新刊の独習KMC vol.23を販売します! 今回iromが新刊の編集長を担当したので,仕事内容と記事の紹介をしようと思います.

    ↓C107のお品書きです.参加する方はぜひブースにお越しください!

    編集長の仕事

    編集長の仕事を簡単に紹介します.

    記事執筆の呼びかけ

    10月末から定期的に部内Slackで記事執筆を部員に呼びかけました.

    記事執筆のリマインド

    11月は学祭があることもあり11月末から記事執筆に取り掛かる部員が多いです.期間が空いて記事執筆のことを忘れがちなので,定期的にSlackでメンションしました.

    記事校正

    12月に入ってから校正作業に入りました.markdownやTypstで記事を提出してもらい,それをPDFにしたものをSlackに投げて有志に校正してもらいます.

    組版

    校正作業と同時進行で組版作業を行いました.各記事をまとめて1つのPDFにして,部誌として発注できる形にします.

    発注

    12月中旬の期限ギリギリに表紙絵と本文のPDFが完成したので,出版社に発注しました.学祭が終わってから発注までの期間は2,3週間しかなくハードスケジュールでした.

    謝辞

    部誌の作成には多くの部員が携わってくれました.本当にありがとうございます!せっかくなので,簡単に紹介していきます.

    • 記事執筆者

    iromを除いて6名の部員が記事,26名の部員が自己紹介を執筆してくれました.

    • 46代のmarimoさん

    去年Typstの組版環境を構築してくれており,とても組版がやりやすかったです.Github Actionsで部員の記事をまとめて発注用のPDFを生成してくれます.詳しくは去年のアドベントカレンダーの記事,TypstでC105に出す部誌を組みました - KMC活動ブログを読んでください.

    • 49代のやらわくん

    表紙絵をお願いしました.お絵描き勢で,来年度のお絵描きプロジェクト担当です.急遽お願いしたのですが,とてもカッコいい表紙を描いてくれました!

    • 48代のiiiishii

    発注をお願いしました.

    • 49代のあきのおいもさん,猫屋敷さん

    コミケ当日にブースで販売してくれます.

    記事の中身

    8つの記事から構成されています.各記事の内容について簡単に紹介します.

    Unity初心者が探索アクションゲームを作ってみた

    49代のakkeyくん, furakutaくんがKMCの新入生プロジェクト「みんなでゲームを作ろう」で11月祭に向けてゲーム制作をした体験談を語っています.

    Typstでいろんなグラフを描いてみた

    49代のshooogoくんがTypstでレポート執筆に役立ちそうなグラフを作成した話をしています.

    プライバシー

    49代のrandintくんがプライバシーの概念とプライバシー保護に役立つソフトウェアを紹介しています.

    Kea + StorkDHCP サーバー構築と監視

    JANOG57のNOCチームのDHCP担当になった49代のwuhu1slandさんがDHCPサーバーを構築した話をしています.

    Docker で体験するネットワーク監視とサーバー監視

    JANOG57のNOCチームのメトリクス監視担当になった48代のiromが監視サーバーを構築した話をしています.

    Google Apps Script で Web スクレイピングをする Slack Slash Command を作る

    48代のcreeamsodaがWebスクレイピングをするSlash Commandを作成した話をしています.

    ゲームにおける実践的なレイマーチングーラスタライズ方式と併用

    45代のsashiさんが自作エンジンでゲームの描画システムを開発した話をしています.

    部員紹介

    27名の部員が自己紹介をしています.部員がどんな活動をしているのかがわかります!

    おわりに

    本記事ではC107で販売する新刊『独習KMC vol.23』を紹介しました.興味を持ってくださった方はC107でKMCのブースにぜひお越しください!

    ピクシブ様との合同LT会を開催しました!

    11月30日、ピクシブ様との合同LT会を開催しました。

    当日は学生の個人開発から企業での現場の知見まで、双方から多様な発表が行われました。質疑応答も白熱し、予定時間を忘れるほど技術交流の場として非常に活気ある雰囲気でした。

    普段得られない視点や刺激を多くいただき、大変密度の濃い交流会となりました。今回の経験を今後の活動に活かしていきたいと思います。 ピクシブの皆様、貴重な機会をありがとうございました。

    写真は当日の様子です。

    合同LT会の様子

    OB会を開催しました

    こんにちは。KMC(京大マイコンクラブ)広報のKMCID: gunjouです。

    11月22日、11月祭2日目のこの日はなんとOB会! KMCでは毎年6月と11月の年2回、OB・OGの方々との交流会「OB会」を開催しています。 今回は夕方からOBの皆さんをKMCのブースにお招きし、現役部員の作品をご覧いただきました。

    その後は場所を天寅(元田中)に移し、懇親会(宴会)を開催。普段なかなか聞けないOBの方々のお話を伺い、50周年が近づくKMCの歴史を改めて感じる時間となりました。

    写真は懇親会の様子です。

    OB会の様子

    コーディング合宿2025のWi-Fi事情

    こんにちはこんにちは、KMC45代の id:crashrt です。 コーディング合宿は温泉に入ったり雑談したりコーディングしたりして進捗を生むイベントです。 進捗をたくさん生むためにはインターネットが必要です。 さらに今年はKMC1回生である49代の部員が16人も参加してくれているなど後輩が多く、ネットワーク技術を布教する絶好のチャンスでした。 そこで後輩を巻き込みつつ合宿Wi-Fiを構築してみました。 設計から一緒にやる時間はなかったので、準備は僕の方で済ませて、構成を解説しながら一緒に作業する、という形で進めました。

    前回のコーディング合宿のときの様子は以下のブログにあります。 大まかな構成は今回も同じです。

    codecamp.kmc.gr.jp

    前提

    今回宿泊したあわら温泉政竜閣には、既設のWi-Fiが一応あります。 しかしこのWi-Fiがあまり強くはないため、前回同様自分たちでWi-Fiを構築します。 会議室で提供されている有線LANと、合宿用にレンタルしたホームルータの2つを上流として使うことにしました。

    構成

    以下のような構成で構築しました。

    コーディング合宿Wi-Fiの構成図

    合宿Wi-Fiを支える機材たち

    上流

    上流はレンタルしたホームルータと既設の有線LAN(壁に情報コンセントがありました)の2つです。 メインのルーターは部室に転がっていたIX2105(haruka)です。 上流側は以下のような設定を入れて、2つの回線にロードバランシングしています。 ほとんど前回と同じですが、IX2105はWANの口が一つしかないので、LAN側のポートであるGE1でVLANを切って一つをWAN用として使っています。

    ip multipath per-flow
    ip route default GigaEthernet0.0 dhcp
    ip route default GigaEthernet1:1.0 dhcp
    !
    device GigaEthernet0
    !
    device GigaEthernet1
      vlan-group 1 port 1
      vlan-group 2 port 2 3 4
    !
    interface GigaEthernet0.0
      description kabe
      ip address dhcp receive-default
      ip tcp adjust-mss auto
      ip napt enable
      no shutdown
    !
    interface GigaEthernet1:1.0
      description home-router
      ip address dhcp receive-default
      ip tcp adjust-mss auto
      ip napt enable
      no shutdown

    下流

    DHCPはIX2105で動かして、DNSはミニPC (debussy) で動かしたKnot Resolver、APはAironet 1852 (aquarius) を使いました。 APはTP-LinkのPoE+スイッチ (capricornus) に繋いでいます。

    ip dhcp profile user
      assignable-range 192.168.220.128 192.168.220.254
      default-gateway 192.168.220.1
      dns-server 192.168.220.3
      lease-time 300
    !
    interface GigaEthernet1:2.0
      ip address 192.168.220.1/24
      ip dhcp binding user
      no shutdown

    Knot Resolver は以下のブログと同じように構築しました。

    blog.crashrt.work

    運用・監視

    せっかくミニPCがあるので、Grafana + Prometheus を使って監視基盤も構築してみました。 node_exporterでミニPCから, snmp_exporterでIX2105とAironet 1852からメトリクスを取得しました。 DNS系のメトリクスはKnotResolverのAPIから取得しています。

    Grafanaのダッシュボード

    トラフィック

    壁コンセントの有線回線が想定していたよりも品質が良く、200Mbps程度出ていました。 逆にホームルータの方は夕方の時間帯(20時~24時頃)はあまり速度が出ず数Mbps程度でした。 合宿期間中は雨が降っていたので、その影響もあるかもしれないです。 NAPTセッション数はホームルータ側は600程度、有線回線側は1500程度でした。 26人が参加していたのでまあこれくらいかなという感じです。 帯域に余裕があった有線回線側に多くのセッションが振られていますが、細かい設定は特に入れていないため、IXが適切に処理してくれたのかなと思います。

    トラフィック量(ホームルーターは-1倍しています)
    NAPTセッション数

    DNS

    実は合宿期間中にこっそりDNSのキャッシュサイズを変えて少し遊んでいました。 初期値の100MB→1GB→8GBへと変えていったのですが、キャッシュヒット率は以下のグラフのとおりあまり変わらず5-6割程度でした。 もっと改善する方法があるのか、それともこういう会場ではこれが限界なのか...まだまだ勉強が必要ですね。

    DNSキャッシュヒット率

    ちなみにこのグラフは以下のPromQLで取得していて、直近1分間の応答のうちキャッシュ済みだったものの割合です。

    sum(increase(resolver_answer_cached_total{job="knot_resolver"}[1m])) / (sum(increase(resolver_answer_total{job="knot_resolver"}[1m])))

    キャッシュサイズの変更の他に、先にクエリを投げてキャッシュに入れておく、というのも試してみました。 クエリリストはCisco Umbrellaの以下のドメインリストを使ってみました。

    s3-us-west-1.amazonaws.com

    このリストにあるドメインについてのクエリをdnsperfで流しています。 9/19 0時頃の極端にキャッシュヒット率が下がっている部分が試していた時間ですが、キャッシュヒット率はあまり改善しませんでした。 全世界と部員とではクエリの傾向がきっと違うのであまり影響しなかったのかなと思っています。 そもそもこれくらいが限界なのかもしれないですが、他に良い方法があればまた試してみたいです。

    まとめ

    今回のコーディング合宿で構築したWi-Fiを紹介してみました。 規模は小さいですが実際に誰かに使われるネットワークを作ってみるのは楽しくていいですね。 利用者が全員身内で比較的気軽に構築できたので、色々試したり練習の場したりできる貴重な機会でした。

    また、後輩もネットワーク構築に興味を持ってくれたのでやって良かったなと思います。 普段あまり意識せずに使っているインターネットも裏では色々やってる人がいるんだなというのが伝わっていたら嬉しいですね。 今後ネットワーク面白そう、やってみようかなと思ってくれる人がいたらさらに嬉しいです。

    コーディング合宿2025!

    こんにちは。KMC48代のcreeamsodaです。最近はハッカソンをきっかけに少年ジャンプ+にドハマリし、ラブコメを読み漁っています。他の部員にもたくさん作品を紹介してもらっているのですが、だんだんと僕に刺さる作品ばかりおすすめされるようになってきていて、僕の性癖がバレている可能性があります。まずいかも?

    先日、KMCではコーディング合宿2025が行われました。場所は福井県芦原温泉。ピークは過ぎたものの、まだ夏の暑さが残る中、電車を乗り継いで向かいました。今回は、新入生である49代の部員が16人も参加してくれたため、若い力にあふれた賑やかな合宿となっています。

    そもそも、コーディング合宿とは何か。僕は今回が初めてだったので、まずは過去のログや先輩の証言を基にその実態を暴いていきます。

    結論から言うと、コーディング合宿は旅館でコーディングをしたりしなかったり、ときどき温泉に入ったり入らなかったりするというイベントでした。合宿というと、期間中ひたすら自分を追い込んで高みを目指すガチンコ熱血系か、メンバーと楽しく遊んで親睦を深めるゆるふわ旅行系かのどちらかに分かれるイメージがあります(?)が、コーディング合宿では熱血を名乗るほどコーディングは強制されないものの、だからといって特に全体レクリエーションなどがあるわけでもないという中間の立ち位置になっています。各々がやりたいことをやるというスタイルは何ともKMCらしいですね。

    今回のコーディング合宿のスケジュールはこんな感じでした。

    1日目

    • 15:00 芦原温泉駅集合
    • 15:15 バスで旅館到着
    • 自由時間
    • 18:00 夕食
    • 自由時間

    2日目

    • 8:00 朝食
    • 9:30 会場のWi-Fi設営
    • 10:00 例会
    • コーディングしたければする時間
    • 12:00 昼食
    • コーディングしたければする時間
    • 18:00 夕食
    • 寝たければ寝る時間

    3日目

    • 8:00 朝食
    • 10:00 成果発表
    • 12:30 解散

    伝統的なスタイルを踏襲した全体レクリエーション無しのスケジュール! コーディングが捗りそうです。決して部員どうしの仲が悪いわけではないということはここにしっかりと主張しておきます。

    全体レクは無くとも、たくましい49代の部員たちは旅館内でカラオケを見つけ出して楽しんでいました。

    持ち込んだボートゲームで盛り上がっている部員の姿も。何やら「ミ・ニピㇳ・ミ・レティㇳ・レティ」が強いらしい。

    架空の言語を駆使するゲームらしい

    肝心のコーディングの方も良い感じでした。僕はハッカソンを経てかなり開発モチベーションが高まっていたため、バリバリ進捗を生むつもりだったのですが、初日の夜にお布団コーディングを試みた結果、睡魔に敗北して10時間睡眠をかましてしまいました。ドンマイ。

    2日目は1日中会議室を借りて作業スペースとしていました。最初にインフラに興味がある部員たちによって、部屋のWi-Fiの設営が行われました。そのあたりは別記事で紹介します。

    設営が終われば、あとはひたすら作業です!

    ときどきお菓子をつまんだり、雑談をしたり、温泉に入ったりしながら作業を進めていきます。ちなみに僕は学祭で展示するためのゲームの制作をしていました。他の部員は、同じように学祭に向けてゲーム制作をしていたり、Web関連の開発をしていたり、OSを作っていたり、研究を進めていたり(!?)といった感じでした。お疲れ様です……。

    夕飯も食べ終わり、夜遅くなっていくにつれてだんだんと人は減っていき、徹夜組だけが残る形になりました。僕も1日目爆睡した分、徹夜で進捗をブーストする構えです。うおお。

    旅館でコスプレ用メイド服をレンタルしていた部員がいたのですが、深夜になって化粧がトッピングされ、新たな領域へと踏み出していっていました。

    かわいい

    そんなこんなでなんとか寝落ちすることなく朝を迎え、それなりにゲーム制作も進んだため、朝風呂へ。そこでリラックスしてしまったのか、風呂上がりに強烈な眠気に襲われてしまい、結局仮眠を取ることになりました。やはり身体的な限界には逆らえない。早起きして進捗を積み足している戦略的な部員もいました。このあたりは経験がものを言いますね。

    最終日となり、朝食を取ったあとは進捗報告会です。それぞれが取り組んだことと、その進捗を軽く発表していきます。全体としては、集中してやりたいこと(やらないといけないこと)に向き合う時間が取れたことが良かったという感じでした。みんなそれなりに進捗が生めていてめでたい。

    以下に部員の一言コメントを紹介します。

    • 快適な環境下で作業がとてもはかどる
    • 進捗生めたぞ!
    • 後輩巻き込んで合宿Wi-Fi構築できて良かったです!
    • ご飯美味しすぎました。家のカップラーメンでないだろう

    温泉については、まだ暑さもある時期でしたが、ときどき吹く風が心地よく最高でした。温泉なんていつ入っても良いんですね。ご飯もおいしかったです。

    ハッカソンに続いてゴリゴリ開発するイベントに参加して、今後もときどきこういう気合をいれる機会を作っていきたいなと思いました。体力も気力も使うのでときどき以上にはやりたくないですが。

    夏休み明けからは11月の学祭に向けて開発や準備を進めていきます。学祭直前のデスマーチが発生しないよう、コツコツ頑張ります。