Projects

TYPHOON2024Present
Rust, UDP, XChaCha20-Poly1305, AES-GCM-256, Classic McEliece, X25519, Ed25519, BLAKE3
Transport protocol designed to make traffic statistically unidentifiable, not merely encrypted ("Transfer Your Packets Hidden Over Observed Networks"). UDP payload is fully opaque: encrypted metadata ("tailor") is appended at the end of each packet — no cleartext fields, no fixed magic bytes. Fake configurable protocol headers (5 field behavior modes: random, constant, volatile, switching, incremental) mimic arbitrary existing protocols. Four adaptive decoy modes (Heavy, Noisy, Sparse, Smooth) use EWMA-based rate tracking and exponential/Gaussian timing to prevent traffic-analysis fingerprinting. Post-quantum KEM (Classic McEliece 348864) combined with X25519 ECDH and BLAKE3 key derivation; software (XChaCha20-Poly1305) and hardware (AES-GCM-256) cipher suites. Rust reference implementation covers full crypto stack and all decoy modes; session layer in progress. Paper in preparation.
Airwire2025Present
Protobuf, X25519, XChaCha20-Poly1305, Firebase, SMS/MMS
Design-stage hybrid messenger that switches between web API and SMS/MMS transport. Server acts as a stateless relay with no message persistence; messages are stored only on-device. Web mode uses TLS; SMS mode uses X25519 key exchange and XChaCha20-Poly1305 encryption with a 48-byte per-chunk overhead, yielding 84 bytes of usable ciphertext per SMS. MMS premium tier adds two steganographic encoding modes: Markov-chain text generation and image steganography, to make payloads appear benign to carrier inspection.
HogWeedGo20212022
Python, Django, PostgreSQL, PostGIS, Docker, TensorFlow, Dart, Flutter
Bachelor's thesis: a monitoring system for Sosnowsky's hogweed, combining a Django/PostGIS server, Flutter mobile client, and MobileNetV2 transfer-learning classifier (ImageNet pretrained, fine-tuned on ~21 300 images from iNaturalist and OpenImages across 3 classes). Achieved 92% average test accuracy; exported as a 79.3 MB TFLite model with ~0.4 s mobile inference. Server stores georeferenced sightings (PostGIS) and exposes a REST API; mobile app supports photo-based classification, map view of sightings, and report submission workflow.
imagine_food20242025
Python, PyTorch, Ultralytics, ONNX, TypeScript, React
COMP4471/ELEC4240 final project at HKUST: food allergen detection and calorie estimation using YOLOv11n (nano) with two-stage transfer learning on the Allergen30 dataset (30 classes, 416×416, 3× augmentation). Achieved mAP@50 of 0.662 (precision 0.707, recall 0.602). Model exported to quantised INT8 ONNX and deployed as a React/TypeScript web app with custom in-browser NMS logic. Report written to CVPR standard, auto-published via GitHub Actions.
Follow the DROW20232024
Python, C++, PyTorch, ROS, Docker, pybind11
LIG research internship: comparison framework for neural network (DROW) and algorithmic person detectors on 2D LiDAR data. Key finding: DROW dataset annotation quality is severely limited (valid annotations cover ~20 s out of 3 min of recorded data), explaining large performance gaps vs. the algorithmic baseline. Contributions: Annotator ROS node for manual dataset re-annotation via RViz; PersonTracker node with four selectable follow-me policies (First, Closest, Tracked, None). Post-internship: extended with FROG and JRDB dataset support, four new architectures (FullScanCNN, SpaceTimeCNN, FullScanTransformer, Li2Former), and a unified training/evaluation pipeline.
MushOS20192020
NASM, C, CMake, QEMU
A UNIX-like OS prototype in x86 assembly and C, targeting 32-bit protected mode. Hand-rolled two-stage bootloader (real-mode to protected-mode, custom flat GDT, no GRUB); full IDT/PIC setup with all 256 interrupt vectors and 8259 PIC remapping; preemptive round-robin multitasking with UNIX-style fork() and page-directory cloning; two-level paging with bitmap frame allocator and kernel/user separation; VGA text-mode (80x25, 16 colors) and interrupt-driven keyboard drivers; raw-sector module loader; and MushLib — a self-contained freestanding stdlib (heap, string, format with 8 specifiers, vararg, exceptions, color-coded kernel logging).
Classic Dungeon20212022
Kotlin Multiplatform, OpenGL, WebGL, Coroutines
Rogue-like game engine written from scratch targeting Android, Desktop (JVM), and Web (WebGL) from a single Kotlin Multiplatform codebase. Custom hand-rolled OpenGL wrapper layer: VBO batching, texture atlases with frame animation, bitmap fonts, gradient textures, custom 4×4 matrix math, and a vertex/fragment shader pipeline with per-sprite material and ambient color blending. UI built on a declarative JSON layout system (JSON Schema validated) with a widget-tree scenegraph and extension-interface behaviors (Clickable, Movable, Zoomable). Coroutine-based async resource loading. Game logic layer in progress.
Kotlin, Android, Firebase, Protobuf, RSA
Android messenger with no custom backend: messages are delivered peer-to-peer via Firebase Cloud Messaging, with contact discovery through Firebase Realtime Database. Novel 2-bit BiBit/Myte encoding packs Morse code (dot, dash, gap, space) into a compact BigInteger; payloads are Protobuf-serialized and end-to-end encrypted with RSA-2048 (Android Keystore hardware-backed). Includes a system-wide Morse IME keyboard usable in any app, and multi-channel incoming-message alerts (sound, vibration, flashlight).
create-logger20202021
Typescript, Pug, Less
A web tool for creating colorful console logging modules in different programming languages.