Maintainer of x86-64 BSP2018 - PRESENTRTEMS (Open-source Organization)
Technologies: C, Assembly
- Made upstream patches to GCC so it would correctly include C runtime files (i.e. the ones that call the "main" function) for RTEMS x86-64 target binaries, and would allow for custom GCC spec options (such as -qrtems, which link the standard RTEMS libraries into a program).
- Evaluated how UEFI support functioned on various operating systems, including FreeBSD and Arch Linux, discussing the pros and cons of every approach with the open-source community, and finally porting FreeBSD's UEFI bootloader to RTEMS after unanimous agreement.
- Developed code to calibrate Intel x86-64's dynamic APIC timer by using the PIT (which runs at a fixed frequency). Since RTEMS is an RTOS, timing is of critical importance, and this step determines how task-scheduling and context-switching are handled by the kernel.
- Implemented all the code required by the RTEMS kernel to initialize contexts, and switch contexts (for pre-emptive context switching schemes), by perfectly storing and restoring all machine state (i.e. hardware registers, flags, etc.).
- Built a system for the RTEMS kernel to be able to hook into the microprocessor's interrupts, and to correctly fire user-subscribed tasks upon said interrupts (for eg. in a space mission, it might be "calculate the recalibration needed by the thrusters every time the sensors detect movement" - the sensors may be attached to a hardware interrupt, which the kernel will handle, and schedule the user's task for).
- Implemented a polling console driver to allow the RTEMS kernel to log messages to a console over UART.
- Mentored students for Google's Code-In and Google's Summer of Code, helping them familiarize themselves with RTEMS, debug issues, and giving them feedback and guidance on their projects.
Embedded Engineer2019 - 2020MindSea
Technologies: Linux, Android OS, AOSP, SELinux, C, kernel
- Wrote and customized Linux kernel drivers for a new touchscreen (including both input and display drivers), such that it's fully functional with Android (brightness, orientation, resolution, etc.).
- Added support for Android applications to access hardware serial ports through SELinux restrictions.
- Helped hardware teams determine smart battery packs, controller ICs, and charging circuits required for battery functionality in Android device, based on existing Linux drivers and functionality requirements.
Systems Programmer2017 - 2019Droplet Computing
- Helped develop an Intel x86 emulator which runs in browsers or Node.js environments by compiling source code to WebAssembly, in a small team where every member was always responsible for many components.
- Created a method of automatically generating randomized, deterministic tests for most machine instructions supported by the emulator. Test fixtures were generated by running the tests on an oracle (such as QEMU or GDB for Intel x86 hosts), and then compared with the actual results of running through our emulator, in real-mode.
- Sped up the generation of test fixtures from taking 3 mins, down to a solid 15 seconds, for hundreds of automatic tests, by parallelizing the process and reducing state setup and teardown.
- Implemented various techniques of detecting hot-code basic blocks in the guest OS and compiling them Just-In-Time to WebAssembly, thereby allowing the emulator to be sped up by directly executing the guest OS's instructions, without having to read from emulated memory and having to reinterpret instructions, supporting a dynamic system for invalidating cached blocks efficiently as well.
- Helped build the networking stack bridge required between guest-to-host interactions, to allow the guest's networking events, such as sending physical Ethernet frames, to be correctly unwrapped into TCP/UDP packets the host OS could actually send/receive, and then repackaging the host's network response into a physical frame for the guest OS.
- Built a custom instrumentation profiler for the emulator, to be able to dynamically examine and find bottlenecks in the application.
- Implemented most of the emulation code for a hardware Floating Point Unit (FPU), MMX, and SSE instructions, enabling more modern applications such as Microsoft Word and Wine to function correctly in the emulator.
- Experimented with methods of symbolic execution using KLEE to automatically increase code coverage across the project. Measuring code coverage also required extending LLVM intrinsics due to our compiler-chain targeting WebAssembly.
Developer Success Engineer2016 - 2017Auth0
- Developed a custom application that would act as a SAML Identity Provider for any client, and would allow sending back intentionally malformed SAML Responses. This application proved very useful when debugging issues customers had in integrating their systems with Auth0's SAML systems.
- Provided support to customers using a variety of technologies, regardless of familiarity with said technologies, by asking relevant questions and knowing how to gather the relevant HTTP requests in different environments (i.e. capturing HAR files and analyzing those).
- Guided customers as an expert on various authorization protocols, including OAuth, OpenID Connect, SAML, and WS-Fed, and help customers architect their applications securely.
- Created both internal and external documentation on specific technical topics related to authorization, thereby reducing my own bus factor.
- Volunteered as a "concierge" to answer any questions the rest of the company had about the authorization pipeline, its features, its security guarantees, recommended methods of use, etc. This allowed engineering teams to focus more on creating features instead of explaining them.
HTML5 Game Developer2010 - 2011CodeHeads
- Ported various Flash / ActionScript based games to HTML5 so they would work in web browsers on mobile devices too.
- Developed several 2D platformer games, puzzle games, and action games for various online gaming portals.
- Created a custom game framework for common elements of game development such as sprite management, media management, UI and screen elements, pub/sub event management, etc.