Just over five years of backend work in C# / .NET and Rust. For each system below I've written down the trade-offs I made and the numbers I actually measured. 五年多的後端開發經驗,主要使用 C# / .NET 與 Rust。以下每一套系統,我都寫下了當時的取捨與實際量到的數字。 C# / .NET と Rust を中心に5年あまりのバックエンド開発経験。以下の各システムについて、その時の判断と実際に計測した数字を書き残しています。
ArcadeGalaxy is a multiplayer party game on Steam. I owned the entire backend as the only server engineer on the team — every game system the designers specced, I designed, built, deployed, and kept running. ArcadeGalaxy 是 Steam 上的多人派對遊戲。我是團隊裡唯一的伺服器工程師——企劃規格書上的每一個遊戲系統,都由我設計、實作、部署並持續維運。 ArcadeGalaxy は Steam のマルチプレイパーティーゲームです。チーム唯一のサーバーエンジニアとして、企画が仕様化したすべてのゲームシステムを、設計から実装、デプロイ、運用まで担当しました。
OpenDAL gives applications one API for many storage services — S3, GCS, Azure Blob, local filesystems, and dozens more. The core is Rust; my work is the layer that makes it feel native to .NET developers, which means everything that lives on the boundary between the two runtimes. OpenDAL 讓應用程式用同一套 API 存取多種儲存服務——S3、GCS、Azure Blob、本地檔案系統等數十種。核心是 Rust;我的工作是讓它對 .NET 開發者來說像原生套件一樣自然,也就是兩個 runtime 邊界上的所有事情。 OpenDAL は S3、GCS、Azure Blob、ローカルファイルシステムなど数十種類のストレージを単一の API で扱えるライブラリです。コアは Rust 製。私の仕事は、それを .NET 開発者にとってネイティブに感じられるものにすること、つまり2つのランタイムの境界に存在するすべてです。
MacacaViewSystem is my former employer's open-source Unity UI system — views are composed from reusable elements, and the framework decides what to show and when. It loaded every view asset directly, which meant all of them shipped inside the build. I added Addressables as a second loading mode, so views can be packed into bundles and fetched on demand instead. MacacaViewSystem 是前公司開源的 Unity UI 系統——畫面由可重用的元件組成,框架負責決定何時顯示什麼。它原本每個 view 資產都直接載入,等於全部打進 build 裡。我加上 Addressables 作為第二種載入模式,讓 view 改成打包成 bundle、需要時再抓。 MacacaViewSystem は前職の会社が公開している Unity の UI システムです。画面は再利用可能な要素から構成され、何をいつ表示するかはフレームワークが決めます。従来は view のアセットを直接読み込む方式で、すべてがビルドに同梱されていました。そこへ Addressables を第二の読み込みモードとして追加し、view をバンドル化して必要時に取得できるようにしました。
These commits are under rin-macaca, the account I used at MacacaGames — my personal work is under Fatorin. 這些 commit 掛在 rin-macaca 名下,那是我在 MacacaGames 使用的帳號;個人專案則在 Fatorin。 これらのコミットは MacacaGames 在籍時に使用していた rin-macaca 名義です。個人の作業は Fatorin にあります。
Warcraft III custom-map communities survive on infrastructure nobody is paid to run: a Battle.net-compatible realm, a bot that hosts the games, an account system, a ladder. When the software that does this is fifteen years old and unmaintained, somebody has to keep it working. For this community, that has been me — and over six years the work grew from patching the original C++ to owning every piece of the stack. Warcraft III 自訂地圖社群靠的是一套沒人付錢維護的基礎設施:一台相容 Battle.net 的伺服器、一個負責開房的機器人、一套帳號系統、一套積分系統。當這些軟體已經十五年沒人維護,總得有人讓它繼續動。這個社群的那個人是我——六年下來,工作從替原本的 C++ 打補丁,長成了掌握整條技術棧的每一塊。 Warcraft III のカスタムマップコミュニティは、誰も対価を受け取っていないインフラの上に成り立っています。Battle.net 互換のレルム、ゲームを立てるボット、アカウント基盤、レーティング。それらのソフトウェアが15年放置されていれば、誰かが動かし続けるしかありません。このコミュニティではそれが私でした。6年かけて、仕事は元の C++ にパッチを当てることから、スタックのすべてを自分で持つことへと育ちました。
I'm a software engineer who loves games. My career started in QA, testing games other people had made — and it was there that I started wanting to build the one I had in my head, which is what moved me into development. 一個熱愛遊戲的軟體工程師。我的職涯從 QA 開始,測試別人做出來的遊戲——也是在那段時間裡,我開始想做出心目中的那一款,於是走向開發。 ゲームが好きなソフトウェアエンジニアです。キャリアは QA から始まり、他の人が作ったゲームをテストしていました。その日々のなかで、自分の思い描く一本を作りたいと思うようになり、開発の側へ移りました。
From QA to engineering and on to today, I've kept learning and kept sharpening what I can build. 從 QA 到 RD 到現在,我持續不斷學習並加強自己的技術。 QA から開発へ、そして今に至るまで、学び続け、技術を磨き続けてきました。
What I'm working towards is specific: a game tens of thousands of people can play at the same time, and the high-concurrency, high-traffic systems that hold it up. 我想做到的事很具體:做出能讓數萬人同時遊玩的遊戲,以及撐得住它的高併發、高流量系統。 目指しているものははっきりしています。数万人が同時に遊べるゲームと、それを支える高並行・高トラフィックなシステムです。