Projects

Here are some fun projects I've worked on in my spare time.


💾 Retrocomputing

yax86 - IBM PC/XT emulator in C

⇨ github.com/jichu4n/yax86

IBM PC/XT emulator for minimal MCU platforms like the Raspberry Pi Pico. Freestanding, single header file, zero dependencies. Also runs in browser via SDL and Emscripten.

Emulates the 8088 CPU, MDA graphics, keyboard, and floppy disk.

qbjc - QBasic to JavaScript compiler

⇨ qbjc.dev
⇨ github.com/jichu4n/qbjc

qbjc is a QBasic to JavaScript compiler. It takes in a QBasic / QuickBASIC program, and compiles it to either:

  • A standalone executable Node.js script, with zero external dependencies; or
  • An ES6 module that can be imported and executed in both Node.js and browser environments.

Try it out in the browser: 👉 qbjc.dev

palm-sync - TypeScript library for Palm OS HotSync

⇨ github.com/jichu4n/palm-sync

palm-sync is a modern, cross-platform toolkit for HotSync with Palm OS devices, built with TypeScript.

palm-sync provides a new implementation of Palm HotSync protocols in TypeScript, and supports Node.js and browser environments. It aspires to be the foundation for a new generation of Palm OS synchronization tools for modern operating systems.

palm-pdb - Work with Palm OS PDB and PRC files in TypeScript

⇨ npmjs.com/package/palm-pdb
⇨ github.com/jichu4n/palm-pdb

palm-pdb provides a TypeScript / JavaScript API for reading and writing Palm OS PDB and PRC files. It also provides out-of-the-box implementations of several PDB data formats, including those of the core Palm OS PIM applications (Memo Pad, Date Book, Address, To Do List) and PalmDOC.

While palm-pdb doesn't directly communicate with a Palm OS device, it can be used to parse PDB / PRC files backed up from a device, or to produce PDB / PRC files that can be synced to a device.

r41n - Matrix digital rain effect in 8086 assembly

⇨ github.com/jichu4n/r41n

The iconic digital rain effect from The Matrix series, in ~700 bytes of 8086 assembly.


đŸ› ī¸ Utilities

bash- and fish-command-timer - Shell extension to time every command

⇨ github.com/jichu4n/bash-command-timer
⇨ github.com/jichu4n/fish-command-timer

bash / fish shell extension for printing timing information for each command line executed. After each command line, the extension prints out the total execution time, followed by the current time.

serio - Binary serialization in TypeScript

⇨ npmjs.com/package/serio
⇨ github.com/jichu4n/serio

Fluent binary serialization / deserialization in TypeScript.

If you need to work with binary protocols and file formats, or manipulate C/C++ structs and arrays from TypeScript, this library is for you. It provides an ergonomic object-oriented framework for defining TypeScript classes that can serialize and deserialize to binary formats.

jfbview - PDF and image viewer for Linux framebuffer

⇨ github.com/jichu4n/jfbview
⇨ aur.archlinux.org/packages/jfbview/

PDF and image viewer for the Linux framebuffer. It is very fast and has a number of advanced and unique features including:

  • Arbitrary zoom (10% - 1000%) and rotation;
  • Table of Contents (TOC) viewer for PDF documents;
  • Interactive text search for PDF documents;
  • Multi-threaded rendering;
  • Asynchronous background pre-caching;
  • Customizable multi-threaded caching.

srslib - SRS library for Python

⇨ pypi.org/project/srslib
⇨ srslib.readthedocs.io
⇨ github.com/jichu4n/srslib

A Sender Rewriting Scheme (SRS) library for Python.

  • Compatible with Python 2.7 and 3.x;
  • Implements the standard "Guarded" SRS scheme as described in the original SRS paper.

🧸 Toys

quo - Toy self-hosted compiler to WebAssembly

⇨ github.com/jichu4n/quo

Quo is a toy language with C-style syntax that compiles to WebAssembly. It is bootstrapped with a minimal version of the compiler implemented in hand-written WebAssembly. Each subsequent iteration of the compiler is written in the subset of the language supported by the previous iteration, and provides additional language features for the next iteration.

basic_wm - Basic X window manager

⇨ github.com/jichu4n/basic_wm

Simple reparenting, non-compositing X window manager that demonstrates how to implement the fundamental functionality of a window manager. It serves as a pedagogical example for my blog series, How X Window Managers Work, And How To Write One.


đŸĒĻ Old projects

AsciiDocLIVE - Online AsciiDoc editor

⇨ asciidoclive.com
⇨ github.com/jichu4n/asciidoclive

AsciiDocLIVE (asciidoclive.com) is a full-featured online AsciiDoc editor.

Main features:

  • Instant live preview (based on asciidoctor.js);
  • Sync with Dropbox and Google Drive;
  • Customizable editor (based on ACE), with themes and Vim / Emacs keybindings;
  • Runs in any modern browser; no installation required.

agentium - Browser extension to control user agent

⇨ Chrome Web Store
⇨ Firefox Add-Ons
⇨ github.com/jichu4n/agentium

Browser extension for controlling the user agent identity reported by your browser, allowing for instance to view the mobile version of a website on your computer.

Highlights:

  • Quickly select user agent identity from a default list of popular browsers
  • Add your own custom user agent identities
  • Simple & clean UI