doy-lee // TODO: Doyle T.

G'day, I'm a software developer that enjoys low-level programming.

Work

2022 - CURR: C++ Senior Software Engineer, Agent Orientated Software (AI)

2020 - 2022: C++ Software Engineer, Agent Orientated Software (AI)

C++17, CMake, Docker, DDS+Kafka (distribution), discrete event simulators (game engine-esque)

AOS creates creating trustable and explainable AI using multi-agent systems with the cognitive framework, Beliefs, Desires and Intentions (BDI). My role involves improving the AI toolchain such as improving cross-agent collaboration, forward planning, scheduling and de-conflicting of agent intentionality, its execution and distributed agent communication to improve resilience in adversarial situations.

  • Coordinating multiple toolchain upgrades of our in-house AI frameworks, end-to-end
  • Added virtual-memory backed allocators for cache locality, reduced sys-calls and memory profiling
  • Co-implement protocol to distribute agents onto different routing technologies (DDS & Kafka)
  • Responsible for the docs website with APIs & manuals, end-to-end for production releases
  • Implement multiple discrete event simulators for verification of agent behaviours
  • Documenting best practices, patterns and tutorials for designing effective multi-agent systems
  • Implement real-world system specs in a multi-agent architecture to highlight deficiencies in the development methodology leading to new protocols, e.g. researching interfaces for humans to effectively contribute into the agent decision making.

2018 - 2020: C++ Software Engineer, Oxen (Blockchain)

C++14, Boost, CMake, Docker, Android+Windows+Mac+Linux clients, Qt5, Monero Cryptonote & EPEE Levin P2P Protocol, Open Source Maintainer (Oxen), Libsodium (EC Cryptography)

Oxen is a non-for-profit, open-source company developing privacy protocols and tools. I implemented[1] a decentralized layer of servers known as the Service Node[2] network that distributes the blockchain and maintains layer access-control. They coordinate peer-to-peer to evict underperforming and malicious peers whilst generating entropy for securing blocks using checkpointing[3] and a commit-reveal scheme known as Pulse[4].

With over 1k+ servers and growing, the Service Node network provides a sybil-resistant foundation to facilitate a privacy preserving onion routing network, Lokinet, and, a privacy preserving messenger, Session.

  • Rapidly learning & up-skilling as their first developer in the startup to form a development methodology and hiring practices
  • Implement a resilient server layer over new P2P gossip protocols: node de/registration & rewards, service metrics & voting
  • Form immutable checkpoints to secure blocks using shared consensus to provide faster finalization of transfers on the network
  • Create an on-chain DNS registry to map cryptographic keys to human readable aliases (e.g. Lokinet domains, Oxen wallets and Session aliases)
  • Transition from Proof of Work to Proof of Stake live in production, deprecates miners for a commit-reveal scheme to generate entropy for minting blocks
  • Ownership of release process (build/package/distribute) end to end.
  • Patching of 0-days and exploits & recovering from consensus failure on a live production network
  • Improved the test framework for including re-write of Monero's framework and adding integration tests using IPC over named pipes

2017: C++ Intern Software Engineer, Wargaming Sydney (Game Dev)

Game development company most popular for developing World of Tanks. I was in the tools team assisting with the development of the editor for the asset pipeline.

2014 - 2017: B. Computer Science, University of New South Wales

Projects Summary

2018 - CURR: Dqn C/C++ personal standard library github.com/doy-lee/dqn

2021: intc Software u128/256 bit port to C github.com/doy-lee/intc

2020: RaylibSIMD SIMD Software rendering in C github.com/doy-lee/RaylibSIMD

2017: DTRenderer 3D Software rendering in C++ github.com/doy-lee/DTRenderer

2017: Math Masher Math game for mobile doylet.dev/luneaustralia

2017: DCHIP8 Chip8 interpreter github.com/doy-lee/dchip-8

2016: Dengine 2D engine for asteroids github.com/doy-lee/dengine

Projects

2018: Dqn C/C++ personal standard library github.com/doy-lee/dqn

My personal standard library used in personal projects that focuses on simplicity, transparent data structures void of crazy C++ features with minimal dependencies on the standard libraries. The library is orientated around avoiding unnecessary allocations e.g. minimal calls to malloc and non-pessimized implementations.

  • Custom memory routines: arena allocator, virtual memory containers, TLS scratch allocators
  • Allocation-less string slices and string manipulation routines
  • Linear probed and chained hash tables in 400~ LOC
  • Fixed sized arrays and strings containers

2020: intc Software u128/256 bit port to C github.com/doy-lee/intc

C99/C++, Open Source, Single File Library Port

intc is a port of calccrypto's uint128/256 library into a single header file library to allow u128/256 calculations. This port is primarily C first and provides C++ helpers like operator overloads that are opt in.

2020: RaylibSIMD SIMD Software rendering in C github.com/doy-lee/RaylibSIMD

C99, SSE2, Graphics Programming

Raylib is a game-engine by Raysan5 whose main focus is to make game engine programming simple and enjoyable. In this project, I rewrote the software-rendering routine to use SSE2/3 instructions to attain the expected 4x speed-up by taking advantage of data-parallelism offered by SIMD.

2017: DTRenderer 3D Software rendering in C++ github.com/doy-lee/DTRenderer

DTRenderer is an attempt to build a simple software renderer from the ground up. The main goal is to build an intuitive understanding of graphics mathematics, rendering pipeline and core concepts. It runs as a Win32 program with minimal dependencies.

  • 2D Software Rendering
  • Alpha Blending
  • Bilinear Filtering
  • Correct Color Space Pipeline (SRGB <-> Linear)
  • Rasterisation
  • Texture Mapping
  • Translation, Rotation, Scale
  • 3D Software Rendering
  • Full Bright, Flat, Gouraud Shading
  • Orthogaphic, Perspective Projections
  • Translation Rotation Scale
  • Custom Wavefront Obj Loader (minimal subset)
  • Hot Reloadable DLL for Renderer Code (taken from Handmade Hero)

2017: Math Masher Math game for mobile doylet.dev/luneaustralia

Math Masher is a cross-platform mobile app that aims to teach basic arithmetic skills including addition, subtraction and multiplication by gamifying the learning experience. The app was developed in a team using the Cocos2DX framework in C++. My role in the project is as the lead developer and assisting role with asset design.

  • Project management (Trello, minutes meeting, code review etc.)
  • Game engine architecture (Gameplay, UI, shopping mechanics, debug)
  • Basic sound editing (Compressor, EQuing, normalisation)
  • Asset designs (Creating graphical assets with Photoshop)

2017: DCHIP8 Chip8 interpreter github.com/doy-lee/dchip-8

DCHIP8 aims to emulate the CHIP8 architecture to better understand at a lower level operations between memory, cpu, input and output.

  • Fetch, Decode, Execute Opcodes
  • Modelling memory, registers and basic CPU architecture
  • Software Rendering and interaction with Win32
  • Minimal dependencies, single file executable

2016: Dengine 2D engine for asteroids github.com/doy-lee/dengine

Dengine is a solo project, 2D game engine developed with OpenGL and low-level libraries in C. The main goal of Dengine is to facilitate learning from many aspects of Computer Science. Alongside Dengine, Asteroids is being built which guides the development of features for the game. Dengine is inspired by Handmade Hero, with a focus on developing as many features with minimal libraries, such that it is not too time-consuming and counter-productive to do so.

  • Asset Management (load data into intermediate representations)
  • Audio API from OpenAL
  • Basic 2D Game Mathematics/Physics (Vector, Trig, Explicit Euler)
  • Collision Detection (Single Axis Theorem, Minkowski Sum/Diff, AABB)
  • Debug Services & Displays
  • Entity Component Systems
  • IMGUI Systems
  • Input Parsing
  • Push-Buffer Memory Systems
  • Small Size Array Optimisations
  • Standard Library Replacements (e.g. atoi, strlen, itoa, string)
  • Texture Atlas Support, Runtime Font Packing
  • OpenGL 2D Rendering Pipeline & Batching Render Calls