This is a page showcasing projects I have worked on, is working on, or plan to work on. I give brief introductions to, technologies I use in, concepts involved in, and personal thoughts on the projects. I usually think too much when creating projects, and most of the time people just don’t understand what I think. This time, I try to write them down.

Note: I’m still working on this page, so the information is not complete yet.

Under Development

These are my recently progressing projects; new features are added from time to time.

World Wide Web Services

All World Wide Web (WWW) services are included in this category, including:

Jekyll is used to statically generate this whole website from Markdown. Despite the fact that this site just uses the Jekyll’s default Minima theme, a few tweaks are made:

Both Microdata and RDFa are Linked Data markups. The former is defined in the HTML Living Standard, while the latter is defined by W3C and is used in all other non-HTML scenarios.

Some Thoughts

In my opinion, informational websites (like this site) should be made with plain HTML documents, rather than Web Apps (e.g. Vue.js, React.js powered websites). If a Web App is purely informational (i.e. no interactions are required from the user), it’s fucked up.

(I’m not saying that using Vue.js or React.js is bad – they are both excellent frameworks writing Web Apps. In fact, I have a few planned projects that embrace Vue.js. However, when it comes to information, the use of an App just advocates information silos and sets up fences around.)

While people can read the documents, machines can too. If a website relies on JavaScript to dynamically render information, then only people can view it. Thus, I deliberately avoided the use of JavaScript. In this way, these ones can benefit:

  • People using…
    • the NoScript browser plugin;
    • browsers without JavaScript functionality at all (e.g. w3m);
  • Crawers and robots (e.g. search engines).

Sir Tim Berners-Lee, who’s the inventor of WWW, has a biography, Weaving the Web, that explains the original design of the Web, which I think we haven’t even achieved yet. There’s also a documentary,, in which Sir Tim, along with people working on and using the WWW, are interviewed. Some dialogues are taken from the biography. I’ve also translated the subtitles into Simplified Chinese.


After some quick-and-dirty, ad-hoc implementations of Mozilla Web Thing API for contests, I had the idea of creating a universal framework (or a library) that fits into both the model of W3C WoT and an extremely resource-constraint device (e.g. ATmega328p).

I know Web stuff are naturally not designed for devices with only 2KiB of RAM, but what if we really have one, which can also run blazingly fast on larger devices. Meaningless, but cool.

PeaZip Simplified Chinese Localization

This project translates the language files in PeaZip to Simplified Chinese (zh-Hans). A few collaborators have contributed to this project too, so this is not maintained solely by me.

Unfortunately, the author and maintainer of PeaZip, Giorgio Tani, doesn’t want to host the source code on Github. As a result, collaboration is done by sending an email to them each time the translation is updated. Every tag I add in the repository is the version I’ve sent to them.

Under Maintenance

These are projects that have “finished” and have entered a “stable” state. The progress of these projects may look inactive, but I’m still accepting new issues (bug reports) and pull requests.

LibYAML Vala Binding

This is the Vala API (.vapi) definition for the use of LibYAML in Vala. It’s basically a transcription from the LibYAML C APIs to Vala style APIs. Simplified Chinese Subtitles

This project translates the subtitles of the documentary to Simplified Chinese (zh-Hans).

The former half of the subtitle file was translated by me, and the latter half was translated by gloomy-ghost. The finished subtitles are then rendered into the video (hard-coded into the video). The video has been uploaded to Bilibili.

There’re possible improvements though. The timeline was taken from another user from Bilibili who constantly uploads documentary films, and although we’ve got approval on its free use, it’s better to use the W3C version used in their upload on YouTube. More tweaks on font sizes and effects can be added.

Planned (Stalled)

These are projects that have never been started, or have been paused due to insufficient spare time. At this moment, I don’t have an idea when can I start these projects, but I’d like to first note them down.

Coreboot Distribution for ThinkPad X200

I own a ThinkPad X200, and I experiment Coreboot on it. To make the firmware as universal as possible, I plan to install as many payloads as possible, thanks to the abundant room emptied by Libreboot’s ich9gen. This may include a GRUB 2, a SeaBIOS, a TianoCore, a tiny Linux rescue toolbox, and more. A binary distribution of the image can enable many other people to just use my work. Nevertheless, either automation of image building or end-user customisation are not done yet.


This will be an application helping people to plan their trips that rely on public transportation. This will not be a general sight-seeing adviser; instead, it aims at addressing the pain of managing multiple public transportation trips in a journey.

There will be a few niche features: hand-writing (in e.g. TOML) support, open (linked) data and printable format (PDF) output support, etc.


These are projects that are abandoned. I’m not planning to improve them, but if someone is still interested in the ideas of them, I’ll be very happy.


“MDBFS” stands for “Mapping DataBases into a File System”. The project implements a file system in userspace (FUSE) that takes a database container or a database management system connector, and mounts it as a file system.

This is the final year project for my bachelor’s degree. It was started with an ambitious goal of making it an actively maintained open source software, but after knowing some alternatives e.g. Windows Projected File System (ProjFS) and feeling uncertain about my future spare time, I decided to stop maintaining it right after my thesis defense. If you’re interested in it, you may request the thesis by contacting me.


“URM” stands for “Unified Repository Manager”. “Repository” here means a real repository; it was a reinvented wheel for simple inventory management. Originally designed for asset management in small laboratories, URM provides a light-weight and straightforward way to manage things without the burden put by enterprise-class inventory management systems.

This is a boring ad-hoc project. The only “novel” concept involved is content negotiation (it’s not novel at all) on a resource.

Rocket is hard to use when it comes to customising the data flow.


Projects fulfilling requirements of coursework assignments are never meant to be functionally complete, but they did cost me a great amount of time. When I do coursework projects, I usually try practicing my novel ideas, and some of them might be worth talking about.

Not all coursework projects are listed here–only the ones that are worth talking about. Many of my other coursework projects only fulfill the basic requirements, even they cost me a large amount of time. Nevertheless, being buried may be their fate.


“Aaa” (pronounced ei-ei-ei) is an end-to-end encrypted peer-to-peer instant messaging software, proudly powered by Curve25519. (?)

The idea of the name comes from my group-mate Yvonne. It doesn’t have any meaning at all. Despite this fun (?) fact, the project is somewhat sad: it did not work.

  • The Vala programming language is experimented to write GTK-related codes. However, other modules, e.g. the cryptographic functions based on libsodium, are still written in C. To make the APIs written in the two languages callable to each others’, Vala API binding is experimented. The insufficient documentation of Vala have caused difficulty to the process.
    • Later, when the program run, because of our my poor management of memory, garbage collection kept destroying things, and we I didn’t know why.
  • Yvonne couldn’t help much. I feel sorry for using too many new technologies that she hasn’t even heard about (and I wasn’t confident with).


Teapot is a simple HTTP server implemented in C. The idea of the name comes from HTTP 418 I'm a Teapot: we implemented it, but in a sad way.

The coursework requires socket programming, so HTTP processing is done manually. This project tries to make full use of GLib, utilising all kinds of facilities it provides.

I must say that the experience of writing C with GLib is way better than without GLib.

Phone Book

This is an implementation of both client and server of an online yellow page service, allowing a user to query contact information of someone using a dedicated graphical client written in GTK.

The coursework requires socket programming, so we derived our own protocol based on HTTP and JSON. HTTP parsing is done manually, while JSON parsing is done using the library parson. The GUI is constructed with Glade. Keeping both the client and the server in a single executable (the server is invoked by appending a server argument) is experimented.