- Rust: Almost all my serious personal projects are written in Rust.
- Type-driven: I adopt type-driven development. I tend to express most code concepts with the type system. For example, I use newtype pattern extensively for basic numeric types, and assertions about types are expressed in wrapper types.
- Plaintext only: I avoid working with files that cannot be managed by Git.
This means I avoid committing images
(unless they won't be modified or in SVG) into a repo,
and I don't like producing multimedia.
- For documents, I use Markdown and LaTeX and generate the PDF on CI.
- For graphs, I use GraphViz and compile the image on CI.
- Vim: My primary IDE is NeoVim + coc.nvim. On mobile, I develop with Vim over SSH. My setup is updated here.
- Linux: My personal computer runs on Ubuntu. I use Bash as the default shell. My setup is here.
- Other preferences:
- Scripting languages: Bash, Python and NodeJS.
- JVM language: Kotlin.
- Deployment: Docker on Alpine Linux image.
I have started jotting down some weird opinions from me in the wiki of this personal repo.
I have started a lot of open-source projects for personal interest, but many are incomplete because of lack of time and financial support. Incomplete projects are marked as ⏳.
Some of these projects were not created or maintained by me, but I included them here as I have contributed a substantial amount of code to them.
- await-generator, a PHP library that enables async/await pattern
- portrait, a Rust proc-macro framework to write trait-aware proc-macro attributes such as impl-by-delegation.
- dirmod, a Rust macro to smartly detect modules to include
- rwlock-promise, a JavaScript library that implements mutually-exclusive and shared-exclusive locks with a Promise API
- thisrc, a PHP extension that observes the refcount of the
$this
object without inducing side effects - xylem, a Rust framework for statetul type conversion (a post-deserialize processing stage).
I have also created numerous tiny macros and libraries in Rust, but those generally have very ad-hoc purposes and are not known to have any other users. Examples include serde-iter, count-write, xias, qualify-derive, etc.
- enclavlow, my final year project that performs Java flow analysis to verify SGX data security.
- Kelemetry, an observability tool to provide global control plane tracing for Kubernetes.
- KubeAdmiral, a multi-cluster orchestrator and scheduler for Kubernetes.
- KubeZoo, a lightweight multi-tenancy solution for Kubernetes.
- PocketMine-MP, a reverse-engineered Minecraft server software.
- PocketMine-MP has a huge ecosystem of plugins, and most of my work in earlier years were related to developing tools and cohesion of the ecosystem, such as dependency management, build tools and common-dependency APIs.
- PocketMine-MP is an ancient project started in 2012. Some of my contributions include introducing modern tools and paradigms to the project.
- ⏳ libglocal-idea-plugin, an intellij plugin for editing libglocal language files
- ⏳ Traffloat, a 3D web game written in Rust.
- ⏳ dynec, an ECS library that focuses on type safety and optimized for specific scenarios.
- include-flate, a Rust macro for attaching constants as deflated strings in the executable.
- phar.rs, a Rust library for the PHAR (PHp ARchive) format. Also includes a WASM app and a CLI command for phar manipulation.
- signed-vimrc, a vim plugin that loads PGP-signed .vimrc files in cwd
- ⏳ pathetique, an object-oriented abstraction of OS paths in PHP
I was a member of the HKU Robocon Team.
- ⏳ octorest, generated Rust bindings for the GitHub API (can adapt to other OpenAPI implementations too)
- ⏳ webcord, a webapp + discord bot that mirrors a discord chat
- AndTransfer, a simple Android app that shares files to any transfer.sh server.
- Mentamatics, an app to train mental arithmetic calculation
- MySQLClientCompact, a small MySQL browser.
The Discord bots I write follow minimalistic approach and rarely have sophisticated framework.
- bthint, a bot that tries to extract syntactically correct code from chat messages
- boredphoton, a minimalistic bot for alerting spam raids
- orbs.bot, a fan project that reverse engineers the API of the webgame orbs.it and mirrors live games
- ⏳ blob-mirror, a bot mirroring GitHub markdown files to Discord.
- ⏳ webcord, a webapp + discord bot that mirrors a discord chat