BEng(EngSc), University of Hong Kong (2021), Major in Computing & Data Analytics, Minor in Mathematics
- 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 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
- dirmod, a Rust macro to smartly detect modules to include
- thisrc, a PHP extension that observes the refcount of the
$thisobject without inducing side effects
⏳libglocal-idea-plugin, an intellij plugin for editing libglocal language files
- 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.
- 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.
⏳Traffloat, a 3D web game written in Rust.
- gping, a command-line visualization of the
- 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.
- enclavlow, my final year project that performs Java flow analysis to verify SGX data security.
- 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