doylet.dev/index.html

500 lines
26 KiB
HTML

<!doctype html>
<html lang=en-us>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1">
<style>
html {
font-family: sans-serif;
font-size: 10pt;
color: rgba(2, 2, 41, 1);
}
a {
text-decoration: none;
color: rgba(2, 2, 41, 1);
background-color: rgba(0, 0, 0, 0.07)
}
a:visited {
color: rgba(2, 2, 41, 0.75);
}
a:hover {
color: rgba(2, 2, 41, 1);
background-color: rgba(0, 0, 0, 0.3)
}
body {
margin-top: 1rem;
margin-left: 1rem;
margin-left: 1rem;
background: #fbfbfd;
max-width: 80ch;
}
img {
max-width: 100%;
}
h1,
h2,
h3,
h4,
h5,
h6 {
padding: 0;
margin: 0;
}
p {
margin: 0.75em 0;
}
section {
margin-top: 0.5em;
margin-bottom: 0.5em;
}
.divider {
height: 0.1rem;
width: 100%;
background: #020229;
}
.contact-links: {
margin-bottom: 0.5em;
}
.citations {
border-radius: 0.2em;
padding: 0.5em;
color: rgba(0, 0, 0, 0.8);
border-style: dotted;
border-color: rgba(0, 0, 0, 0.07);
}
.row {
display: flex;
flex-direction: row;
}
.row p {
margin: 0;
padding: 0;
}
.row-key {
width: 9ch;
}
.job-role {
border-left: 0.3em;
border-right: 0;
border-top: 0;
border-bottom: 0.1em;
border-style: solid;
padding-top: 0.1em;
padding-bottom: 0.2em;
padding-left: 0.4em;
background-color: rgba(0,0,0,0.03);
}
ul {
list-style: none;
padding: 0;
}
.job-role p {
margin-bottom: 0;
font-weight: bold;
}
.job-role-year {
width: 13ch;
}
.title-note {
font-size: 1.4rem;
font-style: normal;
font-family: monospace;
vertical-align: middle;
}
.favicon {
height: 16px;
vertical-align: text-bottom;
}
.milestones {
list-style: circle;
font-size: 1rem;
margin-left: 1.5rem;
}
@media print {
.pagebreak {
page-break-before: always;
}
}
</style>
</head>
<body>
<!--
Color palette
#C16358
#BEBF5E
#8DBCA2
#519A8B
#DBAE55
-->
<header>
<div style="">
<h1><a href="https://doylet.dev">doy<u style="text-decoration: none; color: #6BBAE4">-</u>lee <em class=title-note>// TODO: Doyle T.</em> </a></h1>
<p>G'day, I'm a software developer that enjoys low-level programming.</p>
</div>
<div class=divider style="margin-bottom: 0.5em"></div>
</header>
<main>
<section aria-label="Contact Links">
<div class=row>
<p class=row-key>Print Me!</p>
<p><a href="doylet_cv.pdf">doylet.dev/doylet_cv.pdf</a></p>
</div>
<div class=row>
<p class=row-key>Email</p>
<p><a href="cv.doylet.2380i@simplelogin.com">cv.doylet.2380i@simplelogin.com</a></p>
</div>
<div class=row>
<p class=row-key>Gitea</p>
<p><a href="git.doylet.dev">https://git.doylet.dev</a></p>
</div>
<div class=row>
<p class=row-key>GitHub</p>
<p><a href="https://github.com/doy-lee">https://github.com/doy-lee</a></p>
</div>
</section>
<section aria-label="Work">
<h2>Work</h2>
<div class=divider style="margin-bottom: 0.5em"></div>
<div>
<div class=job-role style="border-color: #C16358">
<p>2022 - CURR: C++ Senior Software Engineer, Agent Orientated Software <img class=favicon src="assets/aos-favicon.ico"> (AI)</p>
</div>
<div class=job-role style="border-color: #BEBF5E">
<p>2020 - 2022: C++ Software Engineer, Agent Orientated Software <img class=favicon src="assets/aos-favicon.ico"> (AI)</p>
</div>
<sub><i>C++17, CMake, Docker, DDS+Kafka (distribution), discrete event simulators (game engine-esque)</i></sub>
<p>
AOS creates creating trustable and explainable
AI using <i>multi-agent systems</i> with the cognitive
framework, <i>Beliefs, Desires and Intentions</i> (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.
</p>
<ul class=milestones>
<li>Coordinating multiple toolchain upgrades of our in-house AI frameworks, end-to-end</li>
<li>Added virtual-memory backed allocators for cache locality, reduced sys-calls and memory profiling</li>
<li>Co-implement protocol to distribute agents onto different routing technologies (DDS & Kafka)</li>
<li>Responsible for the docs website with APIs & manuals, end-to-end for production releases</li>
<li>Implement multiple discrete event simulators for verification of agent behaviours</li>
<li>Documenting best practices, patterns and tutorials for designing effective multi-agent systems</li>
<li>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.</li>
</ul>
<small>
<ul class=citations>
<li>Agent Orientated Software <a href="https://aosgrp.com">aosgrp.com</a></li>
</ul>
</small>
</div>
<div>
</div>
<div>
<div class=job-role style="border-color: #8DBCA2">
<p>2018 - 2020: C++ Software Engineer, Oxen <img class=favicon src="assets/oxen-favicon-32x32.png"> (Blockchain)</p>
</div>
<sub><i>C++14, Boost, CMake, Docker, Android+Windows+Mac+Linux clients, Qt5, Monero Cryptonote & EPEE Levin P2P Protocol, Open Source Maintainer (Oxen), Libsodium (EC Cryptography)</i></sub>
<p>
Oxen is a non-for-profit, open-source company developing
privacy protocols and tools. I
implemented[<a href="#oxen-git-commits">1</a>]
a decentralized layer of servers known as the Service
Node[<a href="#oxen-service-nodes">2</a>] 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[<a href="#oxen-checkpointing">3</a>] and
a commit-reveal scheme known as
Pulse[<a href="#oxen-pulse#">4</a>].
</p>
<p>
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.
</p>
<ul class=milestones>
<li>Rapidly learning & up-skilling as their first developer in the startup to form a development methodology and hiring practices</li>
<li>Implement a resilient server layer over new P2P gossip protocols: node de/registration & rewards, service metrics & voting</li>
<li>Form immutable checkpoints to secure blocks using shared consensus to provide faster finalization of transfers on the network</li>
<li>Create an on-chain DNS registry to map cryptographic keys to human readable aliases (e.g. Lokinet domains, Oxen wallets and Session aliases)</li>
<li>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</li>
<li>Ownership of release process (build/package/distribute) end to end.</li>
<li>Patching of 0-days and exploits & recovering from consensus failure on a live production network</li>
<li>Improved the test framework for including re-write of Monero's framework and adding integration tests using IPC over named pipes</li>
</ul>
<small>
<ul class=citations>
<li>Oxen Website <a href="https://oxen.io">oxen.io</a></li>
<li id="oxen-git-commits">[1] Git Commits <a href="https://github.com/oxen-io/oxen-core/pulls?q=is%3Apr+author%3Adoy-lee+is%3Aclosed+">github.com/oxen-io/oxen-core/pulls?q=is%3Apr+author%3Adoy-lee+is%3Aclosed</a></li>
<li id="oxen-service-nodes">[2] Service Nodes <a href="https://oxen.gitbook.io/oxen-docs/about-the-oxen-blockchain/oxen-service-nodes">oxen.gitbook.io/oxen-docs/about-the-oxen-blockchain/oxen-service-nodes</a></li>
<li id="oxen-checkpointing">[3] Checkpointing <a href="https://github.com/oxen-io/oxen-improvement-proposals/blob/master/LIPS/LIP-3.md">github.com/oxen-io/oxen-improvement-proposals/blob/master/LIPS/LIP-3.md</a></li>
<li id="oxen-pulse">[4] Pulse <a href="https://github.com/oxen-io/oxen-improvement-proposals/blob/master/LIPS/LIP-5.md">github.com/oxen-io/oxen-improvement-proposals/blob/master/LIPS/LIP-5.md</a></li>
</ul>
</small>
</div>
<div>
<div class=job-role style="border-color: #519A8B">
<p>2017: C++ Intern Software Engineer, Wargaming Sydney <img class=favicon src="assets/wargaming-favicon.ico"> (Game Dev)</p>
</div>
<p>
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.
</p>
<small>
<ul class=citations>
<li>Wargaming Sydney <a href="https://wargaming.com/">wargaming.com</a></li>
</ul>
</small>
</div>
<div>
<div class=job-role style="border-color: #DBAE55">
<p>2014 - 2017: B. Computer Science, University of New South Wales <img class=favicon src="assets/unsw-icon-192x192.png"></p>
</div>
<small>
<ul class=citations>
<li>UNSW <a href="https://unsw.edu.au">unsw.edu.au</a></li>
</ul>
</small>
</div>
</section>
<section aria-label="Projects Summary">
<h2>Projects Summary</h2>
<div class=divider style="margin-bottom: 0.5em"></div>
<div class=job-role style="border-color: #C16358">
<p>2018 - CURR: <a href="#dqn-project">Dqn</a> C/C++ personal standard library <a href="https://git.doylet.dev/doylet/dqn">git.doylet.dev/doylet/dqn</a></p>
</div>
<div class=job-role style="border-color: #BEBF5E">
<p>2021: <a href="#intc-project">intc</a> Software u128/256 bit port to C <a href="https://git.doylet.dev/doylet/intc">git.doylet.dev/doylet/intc</a></p>
</div>
<div class=job-role style="border-color: #8DBCA2">
<p>2020: <a href="#raylibsimd-project">RaylibSIMD</a> SIMD Software rendering in C <a href="https://git.doylet.dev/doylet/RaylibSIMD">git.doylet.dev/doylet/RaylibSIMD</a></p>
</div>
<div class=job-role style="border-color: #519A8B">
<p>2017: <a href="#dtrenderer-project">DTRenderer</a> 3D Software rendering in C++ <a href="https://git.doylet.dev/doylet/DTRenderer">git.doylet.dev/doylet/DTRenderer</a></p>
</div>
<div class=job-role style="border-color: #DBAE55">
<p>2017: <a href="#mathmasher-project">Math Masher</a> Math game for mobile <a href="https://doylet.dev/luneaustralia">doylet.dev/luneaustralia</a></p>
</div>
<div class=job-role style="border-color: #C16358">
<p>2017: <a href="#dchip8-project">DCHIP8</a> Chip8 interpreter <a href="https://git.doylet.dev/doylet/dchip-8">git.doylet.dev/doylet/dchip-8</a></p>
</div>
<div class=job-role style="border-color: #C16358">
<p>2016: <a href="#dengine-project">Dengine</a> 2D engine for asteroids <a href="https://git.doylet.dev/doylet/dengine">git.doylet.dev/doylet/dengine</a></p>
</div>
</section>
<section class=pagebreak aria-label="Projects">
<h2>Projects</h2>
<div class=divider style="margin-bottom: 0.5em"></div>
<div id=dqn-project>
<div class=job-role style="border-color: #C16358">
<p>2018: Dqn C/C++ personal standard library <a href="https://git.doylet.dev/doylet/dqn">git.doylet.dev/doylet/dqn</a></p>
</div>
<p>
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.
</p>
<ul class=milestones>
<li>Custom memory routines: arena allocator, virtual memory containers, TLS scratch allocators</li>
<li>Allocation-less string slices and string manipulation routines</li>
<li>Linear probed and chained hash tables in 400~ LOC</li>
<li>Fixed sized arrays and strings containers</li>
</ul>
</div>
<div id=intc-project>
<div class=job-role style="border-color: #BEBF5E">
<p>2020: intc Software u128/256 bit port to C <a href="https://git.doylet.dev/doylet/intc">git.doylet.dev/doylet/intc</a></p>
</div>
<sub><i>C99/C++, Open Source, Single File Library Port</i></sub>
<p>
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.
</p>
<small>
<ul class=citations>
<li>calccrypto's uint256_t <a href="https://github.com/calccrypto/uint256_t">github.com/calccrypto/uint256_t</a></li>
</ul>
</small>
</div>
<div id=raylibsimd-project>
<div class=job-role style="border-color: #8DBCA2">
<p>2020: RaylibSIMD SIMD Software rendering in C <a href="https://git.doylet.dev/doylet/RaylibSIMD">git.doylet.dev/doylet/RaylibSIMD</a></p>
</div>
<sub><i>C99, SSE2, Graphics Programming</i></sub>
<p>
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.
</p>
<small>
<ul class=citations>
<li>Raylib Website <a href="https://raylib.com/">raylib.com</a></li>
</ul>
</small>
</div>
<div id=dtrenderer-project>
<div class=job-role style="border-color: #519A8B">
<p>2017: DTRenderer 3D Software rendering in C++ <a href="https://git.doylet.dev/doylet/DTRenderer">git.doylet.dev/doylet/DTRenderer</a></p>
</div>
<a href="assets/projects_dtrenderer.gif"><img src="assets/projects_dtrenderer.gif"></a>
<p>
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.
</p>
<ul class=milestones>
<li>2D Software Rendering</li>
<li>Alpha Blending</li>
<li>Bilinear Filtering</li>
<li>Correct Color Space Pipeline (SRGB <-> Linear)</li>
<li>Rasterisation</li>
<li>Texture Mapping</li>
<li>Translation, Rotation, Scale</li>
<li>3D Software Rendering</li>
<li>Full Bright, Flat, Gouraud Shading</li>
<li>Orthogaphic, Perspective Projections</li>
<li>Translation Rotation Scale</li>
<li>Custom Wavefront Obj Loader (minimal subset)</li>
<li>Hot Reloadable DLL for Renderer Code (taken from Handmade Hero)</li>
</ul>
</div>
<div id=mathmasher-project>
<div class=job-role style="border-color: #DBAE55">
<p>2017: Math Masher Math game for mobile <a href="luneaustralia/">doylet.dev/luneaustralia</a></p>
</div>
<div class=row>
<a href="assets/projects_math_masher_screen_1.png"><img src="assets/projects_math_masher_screen_1.jpg"></a>
<a href="assets/projects_math_masher_screen_2.png"><img src="assets/projects_math_masher_screen_2.jpg"></a>
<a href="assets/projects_math_masher_screen_3.png"><img src="assets/projects_math_masher_screen_3.jpg"></a>
</div>
<p>
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.
</p>
<ul class=milestones>
<li>Project management (Trello, minutes meeting, code review etc.)</li>
<li>Game engine architecture (Gameplay, UI, shopping mechanics, debug)</li>
<li>Basic sound editing (Compressor, EQuing, normalisation)</li>
<li>Asset designs (Creating graphical assets with Photoshop)</li>
</ul>
<small>
<ul class=citations>
<li>Trailer <a href="https://youtube.com/watch?v=AUozUZ8aY7g">youtube.com/watch?v=AUozUZ8aY7g</a></li>
</ul>
</small>
</div>
<div id=dchip8-project>
<div class=job-role style="border-color: #C16358">
<p>2017: DCHIP8 Chip8 interpreter <a href="https://git.doylet.dev/doylet/dchip-8">git.doylet.dev/doylet/dchip-8</a></p>
</div>
<div class="row">
<a href="assets/projects_dchip8_screen_1.png"><img src="assets/projects_dchip8_screen_1.png"></a>
<a href="assets/projects_dchip8_screen_2.png"><img src="assets/projects_dchip8_screen_2.png"></a>
</div>
<p>
DCHIP8 aims to emulate the CHIP8 architecture to better
understand at a lower level operations between memory,
cpu, input and output.
</p>
<ul class=milestones>
<li>Fetch, Decode, Execute Opcodes</li>
<li>Modelling memory, registers and basic CPU architecture</li>
<li>Software Rendering and interaction with Win32</li>
<li>Minimal dependencies, single file executable</li>
</ul>
<small>
<ul class=citations>
<li>Specification Sheet <a href="http://devernay.free.fr/hacks/chip8/C8TECH10.HTM">devernay.free.fr/hacks/chip8/C8TECH10.HTM</a></li>
</ul>
</small>
</div>
<div id=dengine-project>
<div class=job-role style="border-color: #C16358">
<p>2016: Dengine 2D engine for asteroids <a href="https://git.doylet.dev/doylet/dengine">git.doylet.dev/doylet/dengine</a></p>
</div>
<div class="row">
<a href="assets/projects_dengine_screen_1.png"><img src="assets/projects_dengine_screen_1.png"></a>
<a href="assets/projects_dengine_demo.gif"><img src="assets/projects_dengine_demo.gif"></a>
</div>
<p>
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.
</p>
<ul class=milestones>
<li>Asset Management (load data into intermediate representations)</li>
<li>Audio API from OpenAL</li>
<li>Basic 2D Game Mathematics/Physics (Vector, Trig, Explicit Euler)</li>
<li>Collision Detection (Single Axis Theorem, Minkowski Sum/Diff, AABB)</li>
<li>Debug Services & Displays</li>
<li>Entity Component Systems</li>
<li>IMGUI Systems</li>
<li>Input Parsing</li>
<li>Push-Buffer Memory Systems</li>
<li>Small Size Array Optimisations</li>
<li>Standard Library Replacements (e.g. atoi, strlen, itoa, string)</li>
<li>Texture Atlas Support, Runtime Font Packing</li>
<li>OpenGL 2D Rendering Pipeline & Batching Render Calls</li>
</ul>
<small>
<ul class=citations>
<li>Handmade Hero <a href="https://handmadehero.org/">handmadehero.org</a></li>
</ul>
</small>
</div>
</section>
</main>
</body>
</html>