Projects

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

qbjc - QBasic to JavaScript compiler

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

qbjc is a QBasic to JavaScript compiler. It can compile a QBasic / QuickBASIC program to:

  • 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

agentium - Chrome / Firefox extension for controlling 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

bash-command-timer & fish-command-timer - Shell extension for timing commands

⇨ 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.

jfbview - PDF and image viewer for the 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.
 

🛠️ Other projects

serio - Binary serialization library for 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.

palm-pdb - TypeScript library for working with Palm OS PDB and PRC files

⇨ 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.

quo - Toy self-hosted language

⇨ 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.

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.

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.