About

This site is home to four self-directed courses aimed at getting genuinely good, in both theory and practice, at digital signal processing for embedded software / firmware engineering and at real-time rendering and GPU engineering: a Math Foundations for Signal Processing, Machine Learning, and Artificial Intelligence track (a self-contained 51-lesson booklet spanning linear algebra, probability, signals and systems, the analysis behind the transforms, and convex optimization and information theory); a Programming Foundations course in scientific Python (NumPy, SciPy, PyTorch), modern embedded C, and embedded Rust — the languages and libraries the labs are written in, taught in the Python-first, then C-or-Rust rhythm the labs use; a fully lab-based Embedded DSP: From the Bench to Real-Time Firmware course, where every idea is built on a breadboard, driven from a microcontroller, and measured on real instruments; and a lab-based Real-Time Rendering & GPU Engineering course in Vulkan, Metal, and CUDA. Alongside them are worked proof sets and notes from the textbooks that underpin them.

I work full time in distributed systems and mobile device management. These courses are my hobby-outside-work project, built during weekends, likely over 1–2 years.

My academic background is a B.S. in EECS from UC Berkeley and an M.S. in Computer Science from Georgia Tech. At Berkeley, my EE coursework centered on signal processing, systems, random signals, and convex optimization, the direct foundations of the courses here. The CS half of the EECS degree, like my Georgia Tech master’s, focused on artificial intelligence and machine learning, alongside computer networking, security, operating systems, algorithms, and compilers.

AI plays a deliberately limited and fully disclosed role here. The Course 3 and Course 4 lab write-ups, the Course 2 lessons pages, and the Course 1 booklet’s teaching text are drafted with AI assistance (and reviewed by me) so each page has a consistent structure to study from. The substance is mine: every math proof and exercise solution is worked by hand on paper first, then converted to LaTeX/KaTeX/MathJax using AI for typesetting only, and all code is written by me. The whole point is to solidify and revisit concepts from my undergrad years and to rigorously self-learn new ones, and that deep understanding only comes from producing the proofs and the code myself. Overuse of generative AI has been shown in studies to weaken exactly the kind of understanding I’m trying to build, which is why the reasoning and the implementation stay hand-done.