chore: update structure and text

This commit is contained in:
Bastian Gruber 2026-03-09 09:52:19 -03:00
parent f48c0f5c34
commit 9624514c38
No known key found for this signature in database
GPG key ID: 2E8AA0462DB41CBE
12 changed files with 657 additions and 323 deletions

View file

@ -3,32 +3,24 @@
html: index.html html: index.html
index.html: resume.tex res.cls resume.cfg style.css index.html: resume.tex res.cls resume.cfg style.css
make4ht -f html5 -c resume.cfg resume.tex htlatex resume.tex "resume.cfg,html5" "" "" ""
sed -i 's|</head>|<link href="style.css" rel="stylesheet" type="text/css" /></head>|; s|<title></title>|<title>Bastian Gruber - CV</title>|' resume.html LANG=C LC_ALL=C sed -i '' 's|</head>|<link href="style.css" rel="stylesheet" type="text/css" /></head>|; s|<title></title>|<title>Bastian Gruber - CV</title>|' resume.html
sed -i 's|linkedin.com/in/bastiangruber|<a href="https://linkedin.com/in/bastiangruber">linkedin.com/in/bastiangruber</a>|g' resume.html LANG=C LC_ALL=C sed -i '' 's|linkedin.com/in/bastiangruber|<a href="https://linkedin.com/in/bastiangruber">linkedin.com/in/bastiangruber</a>|g' resume.html
sed -i 's|rustwebdevelopment.com|<a href="https://rustwebdevelopment.com">rustwebdevelopment.com</a>|g' resume.html LANG=C LC_ALL=C sed -i '' 's|rustwebdevelopment.com|<a href="https://rustwebdevelopment.com">rustwebdevelopment.com</a>|g' resume.html
sed -i 's|gruberbastian@me.com|<a href="mailto:gruberbastian@me.com">gruberbastian@me.com</a>|g' resume.html LANG=C LC_ALL=C sed -i '' 's|gruberbastian@me.com|<a href="mailto:gruberbastian@me.com">gruberbastian@me.com</a>|g' resume.html
sed -i 's|github.com/gruberb|<a href="https://github.com/gruberb">github.com/gruberb</a>|g' resume.html LANG=C LC_ALL=C sed -i '' 's|github.com/gruberb|<a href="https://github.com/gruberb">github.com/gruberb</a>|g' resume.html
sed -i 's|code.novanexus.ca/gruberb|<a href="https://code.novanexus.ca/gruberb">code.novanexus.ca/gruberb</a>|g' resume.html LANG=C LC_ALL=C sed -i '' 's|code.novanexus.ca/gruberb|<a href="https://code.novanexus.ca/gruberb">code.novanexus.ca/gruberb</a>|g' resume.html
sed -i 's|bastiangruber.ca|<a href="https://bastiangruber.ca">bastiangruber.ca</a>|g' resume.html LANG=C LC_ALL=C sed -i '' 's|bastiangruber.ca|<a href="https://bastiangruber.ca">bastiangruber.ca</a>|g' resume.html
sed -i 's|Mozilla, Remote|<span class="company">Mozilla</span>, Remote|g' resume.html LANG=C LC_ALL=C sed -i '' 's|Mozilla, Remote|<span class="company">Mozilla</span>, Remote|g' resume.html
sed -i 's|Toposware, Remote|<span class="company">Toposware</span>, Remote|g' resume.html LANG=C LC_ALL=C sed -i '' 's|Toposware, Remote|<span class="company">Toposware</span>, Remote|g' resume.html
sed -i 's|Centrifuge, Remote|<span class="company">Centrifuge</span>, Remote|g' resume.html LANG=C LC_ALL=C sed -i '' 's|Centrifuge, Remote|<span class="company">Centrifuge</span>, Remote|g' resume.html
sed -i 's|Manning Publications, Remote|<span class="company">Manning Publications</span>, Remote|g' resume.html LANG=C LC_ALL=C sed -i '' 's|Manning Publications|<span class="company">Manning Publications</span>|g' resume.html
sed -i 's|Twilio Inc., Remote|<span class="company">Twilio Inc.</span>, Remote|g' resume.html LANG=C LC_ALL=C sed -i '' 's|Twilio Inc., Remote|<span class="company">Twilio Inc.</span>, Remote|g' resume.html
sed -i 's|Kraken Digital Currency Exchange, Remote|<span class="company">Kraken Digital Currency Exchange</span>, Remote|g' resume.html LANG=C LC_ALL=C sed -i '' 's|Kraken Digital Currency Exchange, Remote|<span class="company">Kraken Digital Currency Exchange</span>, Remote|g' resume.html
sed -i 's|Self Employed, Berlin/Toronto|<span class="company">Self Employed</span>, Berlin/Toronto|g' resume.html LANG=C LC_ALL=C sed -i '' 's|TH Ingolstadt|<span class="company">TH Ingolstadt</span>|g' resume.html
sed -i 's|smartB Energy Management GmbH, Berlin|<span class="company">smartB Energy Management GmbH</span>, Berlin|g' resume.html LANG=C LC_ALL=C sed -i '' 's|OSRAM|<span class="company">OSRAM</span>|g' resume.html
sed -i 's|blogfoster GmbH, Berlin|<span class="company">blogfoster GmbH</span>, Berlin|g' resume.html LANG=C LC_ALL=C sed -i '' 's|GIATA|<span class="company">GIATA</span>|g' resume.html
sed -i 's|Dalia Research, Berlin|<span class="company">Dalia Research</span>, Berlin|g' resume.html LANG=C LC_ALL=C sed -i '' 's|Avenga|<span class="company">Avenga</span>|g' resume.html
sed -i 's|TH Ingolstadt|<span class="company">TH Ingolstadt</span>|g' resume.html
sed -i 's|OSRAM|<span class="company">OSRAM</span>|g' resume.html
sed -i 's|Körber Digital|<span class="company">Körber Digital</span>|g' resume.html
sed -i 's|Avenga|<span class="company">Avenga</span>|g' resume.html
sed -i 's|ERGO Group|<span class="company">ERGO Group</span>|g' resume.html
sed -i 's|GIATA|<span class="company">GIATA</span>|g' resume.html
sed -i 's|PaperHive|<span class="company">PaperHive</span>|g' resume.html
sed -i 's|Glispa|<span class="company">Glispa</span>|g' resume.html
mv resume.html index.html mv resume.html index.html
pdf: resume.pdf pdf: resume.pdf
@ -40,7 +32,7 @@ clean:
rm -f index.html resume.aux resume.log resume.dvi resume.html resume.css resume.4ct resume.4tc resume.idv resume.lg resume.tmp resume.xref rm -f index.html resume.aux resume.log resume.dvi resume.html resume.css resume.4ct resume.4tc resume.idv resume.lg resume.tmp resume.xref
deploy: html deploy: html
mkdir -p ~/CodingIsFun/personal/bastiangruber.ca/src/cv mkdir -p ~/CodingIsFun/fun/bastiangruber.ca/src/cv
cp index.html style.css resume.css ~/CodingIsFun/personal/bastiangruber.ca/src/cv/ cp index.html style.css resume.css ~/CodingIsFun/fun/bastiangruber.ca/src/cv/
all: deploy pdf all: deploy pdf

View file

@ -1,156 +1,197 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang='en-US' xml:lang='en-US'> <html lang="en-US" xml:lang="en-US" >
<head> <title>Bastian Gruber - CV</title> <head> <title>Bastian Gruber - CV</title>
<meta charset='utf-8' /> <meta charset="iso-8859-1" />
<meta content='TeX4ht (https://tug.org/tex4ht/)' name='generator' /> <meta name="generator" content="TeX4ht (https://tug.org/tex4ht/)" />
<meta content='width=device-width,initial-scale=1' name='viewport' /> <meta name="viewport" content="width=device-width,initial-scale=1" />
<link href='resume.css' rel='stylesheet' type='text/css' /> <link rel="stylesheet" type="text/css" href="resume.css" />
<meta content='resume.tex' name='src' /> <meta name="src" content="resume.tex" />
<link href="style.css" rel="stylesheet" type="text/css" /></head><body> <link href="style.css" rel="stylesheet" type="text/css" /></head><body
<div class='resume'> <!-- tex4ht:inline --><div class='tabular'> <table class='tabular' id='TBL-1'><colgroup id='TBL-1-1g'><col id='TBL-1-1' /></colgroup><tr id='TBL-1-1-' style='vertical-align:baseline;'><td class='td00' id='TBL-1-1-1' style='white-space:nowrap; text-align:left;'><span class='cmbx-12'>Bastian Gruber</span> </td></tr><tr id='TBL-1-2-' style='vertical-align:baseline;'><td class='td00' id='TBL-1-2-1' style='white-space:nowrap; text-align:left;'> </td> >
</tr><tr id='TBL-1-3-' style='vertical-align:baseline;'><td class='td00' id='TBL-1-3-1' style='white-space:nowrap; text-align:left;'> </td></tr></table> </div> <div class="resume"> <!--tex4ht:inline--><div class="tabular"> <table id="TBL-1" class="tabular"
<table class='center-addresses'><tr><td class='first-address'><!-- tex4ht:inline --><div class='tabular'> <table class='tabular' id='TBL-2'><colgroup id='TBL-2-1g'><col id='TBL-2-1' /></colgroup><tr id='TBL-2-1-' style='vertical-align:baseline;'><td class='td00' id='TBL-2-1-1' style='white-space:nowrap; text-align:left;'><span class='cmbx-10'>Professional </span> </td>
</tr><tr id='TBL-2-2-' style='vertical-align:baseline;'><td class='td00' id='TBL-2-2-1' style='white-space:nowrap; text-align:left;'>LinkedIn: <a href="https://linkedin.com/in/bastiangruber">linkedin.com/in/bastiangruber</a> </td> ><colgroup id="TBL-1-1g"><col
</tr><tr id='TBL-2-3-' style='vertical-align:baseline;'><td class='td00' id='TBL-2-3-1' style='white-space:nowrap; text-align:left;'>Book: <a href="https://rustwebdevelopment.com">rustwebdevelopment.com</a> </td> id="TBL-1-1" /></colgroup><tr
</tr><tr id='TBL-2-4-' style='vertical-align:baseline;'><td class='td00' id='TBL-2-4-1' style='white-space:nowrap; text-align:left;'>E-Mail: <a href="mailto:gruberbastian@me.com">gruberbastian@me.com</a> </td> style="vertical-align:baseline;" id="TBL-1-1-"><td style="white-space:normal; text-align:left;" id="TBL-1-1-1"
</tr><tr id='TBL-2-5-' style='vertical-align:baseline;'><td class='td00' id='TBL-2-5-1' style='white-space:nowrap; text-align:left;'>Website: <a href="https://bastiangruber.ca">bastiangruber.ca</a> </td></tr></table> </div></td><td class='second-address'><!-- tex4ht:inline --><div class='tabular'> <table class='tabular' id='TBL-3'><colgroup id='TBL-3-1g'><col id='TBL-3-1' /></colgroup><tr id='TBL-3-1-' style='vertical-align:baseline;'><td class='td00' id='TBL-3-1-1' style='white-space:nowrap; text-align:left;'><span class='cmbx-10'>Code </span> </td> class="td00"><span
</tr><tr id='TBL-3-2-' style='vertical-align:baseline;'><td class='td00' id='TBL-3-2-1' style='white-space:nowrap; text-align:left;'>GitHub: <a href="https://github.com/gruberb">github.com/gruberb</a> </td> class="cmbx-12">Bastian Gruber</span>&#x00A0;</td></tr><tr
</tr><tr id='TBL-3-3-' style='vertical-align:baseline;'><td class='td00' id='TBL-3-3-1' style='white-space:nowrap; text-align:left;'>Git: <a href="https://code.novanexus.ca/gruberb">code.novanexus.ca/gruberb</a> </td></tr></table> </div></td></tr></table> style="vertical-align:baseline;" id="TBL-1-2-"><td style="white-space:normal; text-align:left;" id="TBL-1-2-1"
<h4 class='sectionHead' id='summary'><a id='x1-10000'></a><div class='centerline'> SUMMARY </div></h4><div class='section'> class="td00"> &#x00A0;</td>
<!-- l. 55 --><p class='noindent'>Staff Software Engineer and published author (&ldquo;Rust Web Development&rdquo; &ndash; Manning) with 15+ years making </tr><tr
pragmatic architecture decisions for backend systems at scale. Currently shipping Rust, C++, and Python code to style="vertical-align:baseline;" id="TBL-1-3-"><td style="white-space:normal; text-align:left;" id="TBL-1-3-1"
hundreds of millions of Firefox users at Mozilla. Founded Rust&amp;Tell Berlin, the largest Rust meetup globally. class="td00"> &#x00A0;</td></tr></table> </div>
<table class="center-addresses"><tr><td class="first-address"><!--tex4ht:inline--><div class="tabular"> <table id="TBL-2" class="tabular"
><colgroup id="TBL-2-1g"><col
id="TBL-2-1" /></colgroup><tr
style="vertical-align:baseline;" id="TBL-2-1-"><td style="white-space:normal; text-align:left;" id="TBL-2-1-1"
class="td00"><span
class="cmbx-10">Professional </span>&#x00A0;</td>
</tr><tr
style="vertical-align:baseline;" id="TBL-2-2-"><td style="white-space:normal; text-align:left;" id="TBL-2-2-1"
class="td00">LinkedIn: <a href="https://linkedin.com/in/bastiangruber">linkedin.com/in/bastiangruber</a>&#x00A0;</td>
</tr><tr
style="vertical-align:baseline;" id="TBL-2-3-"><td style="white-space:normal; text-align:left;" id="TBL-2-3-1"
class="td00">Book: <a href="https://rustwebdevelopment.com">rustwebdevelopment.com</a> &#x00A0;</td>
</tr><tr
style="vertical-align:baseline;" id="TBL-2-4-"><td style="white-space:normal; text-align:left;" id="TBL-2-4-1"
class="td00">E-Mail: <a href="mailto:gruberbastian@me.com">gruberbastian@me.com</a> &#x00A0;</td>
</tr><tr
style="vertical-align:baseline;" id="TBL-2-5-"><td style="white-space:normal; text-align:left;" id="TBL-2-5-1"
class="td00">Website: <a href="https://bastiangruber.ca">bastiangruber.ca</a> &#x00A0;</td></tr></table> </div></td><td class="second-address"><!--tex4ht:inline--><div class="tabular"> <table id="TBL-3" class="tabular"
><colgroup id="TBL-3-1g"><col
id="TBL-3-1" /></colgroup><tr
style="vertical-align:baseline;" id="TBL-3-1-"><td style="white-space:normal; text-align:left;" id="TBL-3-1-1"
class="td00"><span
class="cmbx-10">Code </span>&#x00A0;</td>
</tr><tr
style="vertical-align:baseline;" id="TBL-3-2-"><td style="white-space:normal; text-align:left;" id="TBL-3-2-1"
class="td00">GitHub: <a href="https://github.com/gruberb">github.com/gruberb</a> &#x00A0;</td>
</tr><tr
style="vertical-align:baseline;" id="TBL-3-3-"><td style="white-space:normal; text-align:left;" id="TBL-3-3-1"
class="td00">Git: <a href="https://code.novanexus.ca/gruberb">code.novanexus.ca/gruberb</a>&#x00A0;</td></tr></table> </div></td></tr></table>
<h4 class="sectionHead"><a
id="x1-10000"></a><div
class="centerline"> SUMMARY </div></h4><div class="section">
<!--l. 55--><p class="noindent" >Staff Software Engineer at Mozilla, shipping Rust, C++, and Python to hundreds of millions of Firefox users.
Published author (&#8220;Rust Web Development&#8221; &#8211; Manning). Founder of Rust&amp;Tell Berlin, the largest Rust meetup
globally.
</p> </p>
</div><h4 class='sectionHead' id='skills'><a id='x1-20000'></a><div class='centerline'> SKILLS </div></h4><div class='section'> </div><h4 class="sectionHead"><a
<!-- l. 68 --><p class='noindent'><span class='cmbx-10'>Languages: </span>Rust, Python, TypeScript, JavaScript, Go <br class='newline' /><span class='cmbx-10'>Frontend: </span>React, Angular, Vue.js <br class='newline' /><span class='cmbx-10'>Backend: </span>Rust (Actix, Warp, Axum), Python (FastAPI), Node.js, Go <br class='newline' /><span class='cmbx-10'>Patterns: </span>REST, GraphQL, gRPC, async Rust, distributed systems (P2P) <br class='newline' /><span class='cmbx-10'>Infrastructure: </span>AWS, Google Cloud, Docker, Kubernetes, CI/CD, Grafana <br class='newline' /><span class='cmbx-10'>Domains: </span>Systems Programming, FFI, Distributed Systems, Web Services, Micro Services, IoT, Blockchain, id="x1-20000"></a><div
Firefox class="centerline"> SKILLS </div></h4><div class="section">
<!--l. 68--><p class="noindent" ><span
class="cmbx-10">Languages: </span>Rust, C++, Python, TypeScript, Go <br
class="newline" /><span
class="cmbx-10">Backend &amp; Systems: </span>Rust (Actix, Warp, Axum), Python (FastAPI), Node.js, async Rust, FFI/UniFFI
<br
class="newline" /><span
class="cmbx-10">Patterns: </span>REST, GraphQL, gRPC, distributed systems (P2P), microservices <br
class="newline" /><span
class="cmbx-10">Infrastructure: </span>AWS, Google Cloud, Docker, Kubernetes, CI/CD, Grafana <br
class="newline" /><span
class="cmbx-10">AI Tooling: </span>Claude Code, GitHub Copilot
</p> </p>
</div><h4 class='sectionHead' id='professional-experience'><a id='x1-30000'></a><div class='centerline'> PROFESSIONAL EXPERIENCE </div></h4><div class='section'> </div><h4 class="sectionHead"><a
<!-- Mozilla --> id="x1-30000"></a><div
<p class='noindent'><span class='cmsl-10'>Staff Software Engineer - Full-time </span>February 2026 - Now class="centerline"> PROFESSIONAL EXPERIENCE </div></h4><div class="section">
<br class='newline' /><span class='cmsl-10'>Senior Software Engineer - Full-time </span>July 2024 - January 2026 <!--l. 86--><p class="noindent" ><span
<br class='newline' /><span class="company">Mozilla</span>, Remote <br class='newline' />Shipping Rust, C++, and Python code across Firefox desktop and mobile to hundreds of millions of users. All work is open source. class="cmsl-10">Staff Software Engineer (promoted from Senior) </span>July 2024 - Present
</p> <br
<ul class='itemize1'> class="newline" /><span class="company">Mozilla</span>, Remote <br
<li class='itemize'>Consolidated four separate favicon implementations across Firefox teams into a single Image Service &ndash; chose to extend an existing Python/Airflow pipeline rather than build a new microservice, now serving 4 teams from one manifest behind a GCS-backed API class="newline" /></p>
</li> <ul class="itemize1">
<li class='itemize'>Implemented Oblivious HTTP (OHTTP) from scratch in application-services (shared Rust component cross-compiled to Swift and Kotlin via UniFFI) plus handwritten C++ and Rust for Firefox Desktop &ndash; users are now unidentifiable when making privacy-sensitive requests across all platforms <li class="itemize">
</li> <!--l. 89--><p class="noindent" >Implemented Oblivious HTTP (OHTTP) from scratch in application-services (shared Rust component
<li class='itemize'>Maintained Firefox Push notification service (50k requests/second, sub-200ms latency): reduced memory footprint, added circuit breakers, and built Grafana dashboards for operational visibility cross-compiled to Swift/Kotlin via UniFFI) plus C++ and Rust for Firefox Desktop &#8211; users are now
</li> unidentifiable when making privacy-sensitive requests across all platforms
<li class='itemize'>Contributor and code reviewer for UniFFI, Mozilla&rsquo;s multi-language bindings generator enabling Rust code to be called from Kotlin, Swift, Python, and JavaScript </p></li>
</li> <li class="itemize">
<li class='itemize'>Built Rust extensions for Merino (Python/FastAPI service powering Firefox Suggest); wrote RFCs, mapped out project plans, and surfaced cross-team blockers early <!--l. 90--><p class="noindent" >Consolidated four separate favicon implementations into a single Image Service &#8211; extended an existing
</li> Python/Airflow pipeline rather than building a new microservice, now serving 4 teams from one
<li class='itemize'>Led &ldquo;Rusty Fridays&rdquo; internal education sessions, guiding engineers through Rust adoption and mentoring junior contributors across teams</li></ul> manifest behind a GCS-backed API
</p></li>
<li class="itemize">
<!--l. 91--><p class="noindent" >Maintained Firefox Push notification service (50k req/s, sub-200ms latency): reduced memory footprint,
added circuit breakers, built Grafana dashboards
</p></li>
<li class="itemize">
<!--l. 92--><p class="noindent" >Contributor and code reviewer for UniFFI, Mozilla&#8217;s multi-language bindings generator (Rust to Kotlin,
<!-- Toposware --> Swift, Python, JavaScript)
<p class='noindent'><span class='cmsl-10'>Senior Systems Engineer, Team Lead - Full-time </span>April 2023 - June 2024 </p></li>
<br class='newline' /><span class="company">Toposware</span>, Remote <br class='newline' />Core team of 4 building a peer-to-peer distributed network protocol from scratch in Rust.</p> <li class="itemize">
<ul class='itemize1'> <!--l. 93--><p class="noindent" >Led &#8220;Rusty Fridays&#8221; internal education sessions, mentoring engineers across teams through Rust
<li class='itemize'>Achieved 10x throughput per node by profiling and targeting the actual bottleneck &ndash; optimized batch processing and serialization paths, tuned message volumes to avoid throughput degradation &ndash; rather than redesigning the consensus layer adoption</p></li></ul>
</li> <!--l. 96--><p class="noindent" ><span
<li class='itemize'>Led benchmark initiative with 3 engineers that revealed nodes were compute-bound on encryption/decryption, not network-limited &ndash; findings redirected optimization effort away from networking toward crypto performance class="cmsl-10">Senior Systems Engineer, Team Lead </span>2023 - 2024
</li> <br
<li class='itemize'>Rewrote the CLI from scratch, replacing error-prone CLI parameters with local config files &ndash; reduced operator misconfiguration during node setup class="newline" /><span class="company">Toposware</span>, Remote <br
</li> class="newline" />Core team of 4 building a peer-to-peer distributed network protocol from scratch in Rust. </p>
<li class='itemize'>Built an EVM bridge connecting external Ethereum-compatible chains to the core network <ul class="itemize1">
</li> <li class="itemize">
<li class='itemize'>Set up load testing, CI/CD pipelines, and Grafana dashboards for production observability</li></ul> <!--l. 100--><p class="noindent" >Achieved 10x throughput per node by profiling the actual bottleneck &#8211; optimized batch processing and
serialization paths rather than redesigning the consensus layer
</p></li>
<li class="itemize">
<!--l. 101--><p class="noindent" >Led benchmark initiative that revealed nodes were compute-bound on crypto operations, not
network-limited &#8211; redirected optimization effort accordingly
</p></li>
<li class="itemize">
<!--l. 102--><p class="noindent" >Built an EVM bridge connecting external Ethereum-compatible chains to the core network</p></li></ul>
<!--l. 105--><p class="noindent" ><span
class="cmsl-10">Senior Software Engineer </span>2022 - 2023
<br
class="newline" /><span class="company">Centrifuge</span>, Remote <br
class="newline" />Protocol team building DeFi applications on Substrate/Polkadot in Rust. </p>
<ul class="itemize1">
<li class="itemize">
<!--l. 109--><p class="noindent" >Implemented on-chain fund pool mutations &#8211; core feature for the lending protocol enabling live capital
allocation adjustments
</p></li>
<li class="itemize">
<!--l. 110--><p class="noindent" >Replaced manual documentation with CI-driven auto-generation from Rust source &#8211; eliminated
persistent drift between code and public docs</p></li></ul>
<!--l. 113--><p class="noindent" ><span
class="cmsl-10">Author, &#8220;Rust Web Development&#8221; </span>2020 - 2022
<br
class="newline" /><span class="company">Manning Publications</span> <br
class="newline" />Published end-to-end guide covering async Rust, web frameworks, and production deployment.
</p><!--l. 119--><p class="noindent" ><span
class="cmsl-10">Sr. Solutions Architect (promoted from SA) </span>2020 - 2022
<br
class="newline" /><span class="company">Twilio Inc.</span>, Remote <br
class="newline" /></p>
<ul class="itemize1">
<li class="itemize">
<!--l. 122--><p class="noindent" >Technical lead for Fortune 500 engagements: debugged latency issues, redesigned messaging flows,
advised on architectures matching client team size and resources
</p></li>
<li class="itemize">
<!--l. 123--><p class="noindent" >Created reusable engagement playbooks adopted across the EMEA Professional Services team</p></li></ul>
<!-- Centrifuge --> <!--l. 126--><p class="noindent" ><span
<p class='noindent'><span class='cmsl-10'>Senior Software Engineer - Full-time </span>August 2022 - February 2023 class="cmsl-10">Systems Engineer </span>2019 - 2020
<br class='newline' /><span class="company">Centrifuge</span>, Remote <br class='newline' />Protocol team building DeFi applications on Substrate/Polkadot in a self-governed organization.</p> <br
<ul class='itemize1'> class="newline" /><span class="company">Kraken Digital Currency Exchange</span>, Remote <br
<li class='itemize'>Implemented fund pool mutations on-chain, enabling users to adjust capital allocations in live pools &ndash; core feature for the lending protocol class="newline" /></p>
</li> <ul class="itemize1">
<li class='itemize'>Built client-facing APIs on top of fund pools, giving external integrators programmatic access to pool operations <li class="itemize">
</li> <!--l. 129--><p class="noindent" >Migrated core banking services and API gateway from PHP to Rust, achieving 100x throughput
<li class='itemize'>Replaced manual documentation with CI-driven auto-generation from Rust source on every PR &ndash; eliminated persistent drift between code and public docs improvement &#8211; enabling order-of-magnitude traffic growth without scaling hardware
</li> </p></li>
<li class='itemize'>Co-authored RFCs to build consensus on new protocol features across the decentralized team</li></ul> <li class="itemize">
<!--l. 130--><p class="noindent" >Worked directly with the CTO on privacy-focused architectural decisions for the trading platform</p></li></ul>
<!-- Manning --> <!--l. 135--><p class="noindent" ><span
<p class='noindent'><span class='cmsl-10'>Author of &ldquo;Rust Web Development&rdquo; </span>October 2020 - December 2022 class="cmsl-10">Earlier Career </span>2014 - 2019
<br class='newline' /><span class="company">Manning Publications</span>, Remote</p> <br
<ul class='itemize1'> class="newline" />Sr. Software Engineer across enterprise clients (<span class="company">OSRAM</span>, Körber Digital, <span class="company">GIATA</span>, <span class="company">Avenga</span>) and startups (Dalia
<li class='itemize'>Published &ldquo;Rust Web Development&rdquo; through Manning &ndash; end-to-end guide covering async Rust, web frameworks, and production deployment, distributed globally</li></ul> Research, blogfoster, smartB) in Berlin. </p>
<ul class="itemize1">
<!-- Twilio --> <li class="itemize">
<p class='noindent'><span class='cmsl-10'>Sr. Solutions Architect (Professional Services) - Full-time </span>May 2021 - July 2022 <!--l. 138--><p class="noindent" >Founded &#8220;Rust &amp; Tell Berlin&#8221; meetup &#8211; grew it into the largest Rust meetup globally, still running
<br class='newline' /><span class='cmsl-10'>Solutions Architect (Professional Services) - Full-time </span>June 2020 - May 2021 years later
<br class='newline' /><span class="company">Twilio Inc.</span>, Remote <br class='newline' />Second Solutions Architect hired for the new EMEA Professional Services team. Led enterprise integrations across contact center, messaging, and voice products. </p></li>
</p> <li class="itemize">
<ul class='itemize1'> <!--l. 139--><p class="noindent" >Designed IoT authentication infrastructure at <span class="company">OSRAM</span> for thousands of connected devices (Node.js,
<li class='itemize'>Technical lead for Fortune 500 engagements: debugged audio quality and latency issues, redesigned messaging flows, and advised clients on achievable architectures given their team size and resources Go, Lua)
</li> </p></li>
<li class='itemize'>Advocated for combining two existing lower-cost Twilio products over adopting a newer, more expensive one for a major engagement &ndash; reduced client spend while using battle-tested components <li class="itemize">
</li> <!--l. 140--><p class="noindent" >First engineering hire at Körber Digital: built real-time sensor data pipelines on AWS
<li class='itemize'>Created reusable engagement playbooks (setup checklists, edge-case discovery questions, technical review templates) adopted across the EMEA team </p></li>
</li> <li class="itemize">
<li class='itemize'>Hired and onboarded engineers to scale the Professional Services team</li></ul> <!--l. 141--><p class="noindent" >Decomposed <span class="company">GIATA</span>&#8217;s monolithic ERP into 6 Docker-based microservices, improving system scalability</p></li></ul>
</div><h4 class="sectionHead"><a
<!-- Kraken --> id="x1-40000"></a><div
<p class='noindent'><span class='cmsl-10'>Systems Engineer - Contract </span>August 2019 - May 2020 class="centerline"> EDUCATION </div></h4><div class="section">
<br class='newline' /><span class="company">Kraken Digital Currency Exchange</span>, Remote (San Francisco)<br class='newline' />Member of the first Rust engineering team (12 engineers), replacing core banking infrastructure and API gateway.</p> <!--l. 148--><p class="noindent" ><span
<ul class='itemize1'> class="cmsl-10">Bachelor of Science, Computer Science </span><br
<li class='itemize'>Migrated core banking services and API gateway from PHP to Rust, achieving 100x throughput improvement &ndash; enabling the exchange to absorb order-of-magnitude traffic growth without scaling hardware class="newline" /><span class="company">TH Ingolstadt</span> &#8211; Scholarship from Allianz Deutschland AG (fully funded)
</li>
<li class='itemize'>Built new Rust services from scratch with comprehensive test coverage and security-first design
</li>
<li class='itemize'>Worked directly with the CTO on privacy-focused architectural decisions for the trading platform</li></ul>
<!-- Self Employed -->
<p class='noindent'><span class='cmsl-10'>Rust Developer - Freelance </span>March 2019 - July 2019
<br class='newline' /><span class="company">Self Employed</span>, Berlin/Toronto</p>
<ul class='itemize1'>
<li class='itemize'>Founded the monthly &ldquo;Rust &amp; Tell Berlin&rdquo; meetup &ndash; grew it into the largest Rust meetup globally, still running years later
</li>
<li class='itemize'>Contributed to Rust core and ecosystem libraries
</li>
<li class='itemize'>Created Rust learning resources specifically for Node.js developers transitioning to systems programming</li></ul>
<!-- Freelance -->
<p class='noindent'><span class='cmsl-10'>Sr. Software Engineer - Freelance </span>March 2016 - February 2019
<br class='newline' /><span class="company">OSRAM</span>, <span class="company">K&ouml;rber Digital</span>, <span class="company">Avenga</span>, <span class="company">ERGO Group</span>, <span class="company">GIATA</span>, <span class="company">PaperHive</span>, <span class="company">Glispa</span> (Berlin) <br class='newline' />Freelance consultant for enterprise clients across IoT, logistics, tourism, and ad-tech.</p>
<ul class='itemize1'>
<li class='itemize'>Designed authentication infrastructure for <span class="company">OSRAM</span>&rsquo;s IoT platform (thousands of connected lighting devices) using Keycloak for user auth and service-to-service auth across microservices (Node.js, Go, Lua)
</li>
<li class='itemize'>First engineering hire at <span class="company">K&ouml;rber Digital</span>: chose Node.js/React/AWS stack, built real-time data pipelines with a time-series database optimized for fast retrieval of sensor data
</li>
<li class='itemize'>Decomposed <span class="company">GIATA</span>&rsquo;s monolithic tourism ERP into 6 Docker-based microservices &ndash; rewrote the hotel ingestion pipeline and mass photo upload system, significantly improving UI responsiveness and system scalability
</li>
<li class='itemize'>Tech Lead at <span class="company">Avenga</span>: introduced Scrum and refactored a monolith into microservices to unblock parallel team development
</li>
<li class='itemize'>Built analytics dashboards and ad platforms at <span class="company">Glispa</span> (AngularJS); mentored teams on modern JavaScript practices</li></ul>
<!-- smartB -->
<p class='noindent'><span class='cmsl-10'>Software Engineer - Full-time </span>August 2015 - February 2016
<br class='newline' /><span class="company">smartB Energy Management GmbH</span>, Berlin <br class='newline' />Small agile team building energy monitoring applications for business owners.
</p>
<ul class='itemize1'>
<li class='itemize'>Introduced pair programming and component-based frontend architecture, enabling multiple developers to work on the same codebase without conflicts
</li>
<li class='itemize'>Full-stack development with JavaScript and Python using TDD</li></ul>
<!-- blogfoster -->
<p class='noindent'><span class='cmsl-10'>Software Engineer - Freelance </span>March 2015 - July 2015
<br class='newline' /><span class="company">blogfoster GmbH</span>, Berlin <br class='newline' />First developer hired to replace legacy PHP/Backbone application with Node.js and React.</p>
<ul class='itemize1'>
<li class='itemize'>Built the first version of the ad marketplace; co-designed architecture with the CTO using TDD from day one</li></ul>
<!-- Dalia -->
<p class='noindent'><span class='cmsl-10'>Frontend Developer - Full-time </span>February 2014 - March 2015
<br class='newline' /><span class="company">Dalia Research</span>, Berlin <br class='newline' />First and sole frontend developer at 8-person startup.</p>
<ul class='itemize1'>
<li class='itemize'>Bootstrapped the customer-facing survey platform and analytics dashboards in AngularJS &ndash; core UI remained largely untouched in production for close to 10 years</li></ul>
</div><h4 class='sectionHead' id='education'><a id='x1-40000'></a><div class='centerline'> EDUCATION </div></h4><div class='section'>
<p class='noindent'><span class='cmsl-10'>Bachelor of Science, Computer Science </span>September 2010 - February 2014
<br class='newline' /><span class="company">TH Ingolstadt</span><br class='newline' />Scholarship from Allianz Deutschland AG to study Computer Science, fully funded and with trainings in Scrum,
Java, PL/I and mainframe systems on the side.
</p> </p>
</div></div> </div></div>
</body>
</html>
</body>
</html>

View file

@ -2,5 +2,5 @@
\doTocEntry\tocsection{0}{\csname a:TocLink\endcsname{1}{x1-10000}{QQ2-1-1}{\centerline {SUMMARY}}}{1}\relax \doTocEntry\tocsection{0}{\csname a:TocLink\endcsname{1}{x1-10000}{QQ2-1-1}{\centerline {SUMMARY}}}{1}\relax
\doTocEntry\tocsection{0}{\csname a:TocLink\endcsname{1}{x1-20000}{QQ2-1-2}{\centerline {SKILLS}}}{1}\relax \doTocEntry\tocsection{0}{\csname a:TocLink\endcsname{1}{x1-20000}{QQ2-1-2}{\centerline {SKILLS}}}{1}\relax
\doTocEntry\tocsection{0}{\csname a:TocLink\endcsname{1}{x1-30000}{QQ2-1-3}{\centerline {PROFESSIONAL EXPERIENCE}}}{1}\relax \doTocEntry\tocsection{0}{\csname a:TocLink\endcsname{1}{x1-30000}{QQ2-1-3}{\centerline {PROFESSIONAL EXPERIENCE}}}{1}\relax
\doTocEntry\tocsection{0}{\csname a:TocLink\endcsname{1}{x1-40000}{QQ2-1-4}{\centerline {EDUCATION}}}{5}\relax \doTocEntry\tocsection{0}{\csname a:TocLink\endcsname{1}{x1-40000}{QQ2-1-4}{\centerline {EDUCATION}}}{3}\relax
\par \par

View file

@ -2,4 +2,4 @@
\doTocEntry\tocsection{0}{\csname a:TocLink\endcsname{1}{x1-10000}{QQ2-1-1}{\centerline {SUMMARY}}}{1}\relax \doTocEntry\tocsection{0}{\csname a:TocLink\endcsname{1}{x1-10000}{QQ2-1-1}{\centerline {SUMMARY}}}{1}\relax
\doTocEntry\tocsection{0}{\csname a:TocLink\endcsname{1}{x1-20000}{QQ2-1-2}{\centerline {SKILLS}}}{1}\relax \doTocEntry\tocsection{0}{\csname a:TocLink\endcsname{1}{x1-20000}{QQ2-1-2}{\centerline {SKILLS}}}{1}\relax
\doTocEntry\tocsection{0}{\csname a:TocLink\endcsname{1}{x1-30000}{QQ2-1-3}{\centerline {PROFESSIONAL EXPERIENCE}}}{1}\relax \doTocEntry\tocsection{0}{\csname a:TocLink\endcsname{1}{x1-30000}{QQ2-1-3}{\centerline {PROFESSIONAL EXPERIENCE}}}{1}\relax
\doTocEntry\tocsection{0}{\csname a:TocLink\endcsname{1}{x1-40000}{QQ2-1-4}{\centerline {EDUCATION}}}{5}\relax \doTocEntry\tocsection{0}{\csname a:TocLink\endcsname{1}{x1-40000}{QQ2-1-4}{\centerline {EDUCATION}}}{3}\relax

View file

@ -35,6 +35,8 @@ li p:first-child{ margin-top:0em; }
li p:last-child, li div:last-child { margin-bottom:0.5em; } li p:last-child, li div:last-child { margin-bottom:0.5em; }
li p:first-child{ margin-bottom:0; } li p:first-child{ margin-bottom:0; }
li p~ul:last-child, li p~ol:last-child{ margin-bottom:0.5em; } li p~ul:last-child, li p~ol:last-child{ margin-bottom:0.5em; }
ul.itemize1,ol.enumerate1{padding-left: 0;}
ul li.itemize,ol li.enumerate{margin-left: 1rem;}
.enumerate1 {list-style-type:decimal;} .enumerate1 {list-style-type:decimal;}
.enumerate2 {list-style-type:lower-alpha;} .enumerate2 {list-style-type:lower-alpha;}
.enumerate3 {list-style-type:lower-roman;} .enumerate3 {list-style-type:lower-roman;}
@ -66,6 +68,7 @@ div.flushleft {text-align: left;}
.framebox-r {text-align:right;} .framebox-r {text-align:right;}
span.thank-mark{ vertical-align: super } span.thank-mark{ vertical-align: super }
span.footnote-mark sup.textsuperscript, span.footnote-mark a sup.textsuperscript{ font-size:80%; } span.footnote-mark sup.textsuperscript, span.footnote-mark a sup.textsuperscript{ font-size:80%; }
aside.footnote-text p{margin-top:0; margin-bottom:0;text-indent: 0;}
code.verb{font-family:monospace,monospace;} code.verb{font-family:monospace,monospace;}
div.tabular, div.center div.tabular {text-align: center; margin-top:0.5em; margin-bottom:0.5em; } div.tabular, div.center div.tabular {text-align: center; margin-top:0.5em; margin-bottom:0.5em; }
table.tabular td p{margin-top:0em;} table.tabular td p{margin-top:0em;}
@ -111,7 +114,9 @@ table.pmatrix {width:100%;}
span.bar-css {text-decoration:overline;} span.bar-css {text-decoration:overline;}
img.cdots{vertical-align:middle;} img.cdots{vertical-align:middle;}
.partToc a, .partToc, .likepartToc a, .likepartToc {line-height: 200%; font-weight:bold; font-size:110%;} .partToc a, .partToc, .likepartToc a, .likepartToc {line-height: 200%; font-weight:bold; font-size:110%;}
.index-item, .index-subitem, .index-subsubitem {display:block} .theindex-letter{ margin-top: 1em;}
.index-subitem{ margin-left: 2ch;}
.index-subsubitem{ margin-left: 4ch;}
div.caption {text-indent:-2em; margin-left:3em; margin-right:1em; text-align:center; margin-top: 0.5rem;} div.caption {text-indent:-2em; margin-left:3em; margin-right:1em; text-align:center; margin-top: 0.5rem;}
div.caption span.id{font-weight: bold; white-space: nowrap; } div.caption span.id{font-weight: bold; white-space: nowrap; }
h1.partHead{text-align: center} h1.partHead{text-align: center}
@ -122,7 +127,7 @@ p.bibitem-p { text-indent: 0em; margin-left: 2em; margin-top:0.6em; margin-botto
.subparagraphHead, .likesubparagraphHead { font-weight: bold;} .subparagraphHead, .likesubparagraphHead { font-weight: bold;}
.verse{white-space:nowrap; margin-left:2em} .verse{white-space:nowrap; margin-left:2em}
div.maketitle {text-align:center;} div.maketitle {text-align:center;}
h2.titleHead{text-align:center;} h1.titleHead{text-align:center;}
div.maketitle{ margin-bottom: 2em; } div.maketitle{ margin-bottom: 2em; }
div.author, div.date {text-align:center;} div.author, div.date {text-align:center;}
div.thanks{text-align:left; margin-left:10%; font-size:85%; font-style:italic; } div.thanks{text-align:left; margin-left:10%; font-size:85%; font-style:italic; }
@ -139,6 +144,8 @@ figure.figure {text-align:center;}
figcaption.caption {text-indent:-2em; margin-left:3em; margin-right:1em; text-align:center;} figcaption.caption {text-indent:-2em; margin-left:3em; margin-right:1em; text-align:center;}
figcaption.caption span.id{font-weight: bold; white-space: nowrap; } figcaption.caption span.id{font-weight: bold; white-space: nowrap; }
p + figcaption, img + figcaption{margin-top: 1em;} p + figcaption, img + figcaption{margin-top: 1em;}
.thebibliography dl { display: grid; grid-auto-columns: min-content 1fr; grid-auto-flow: column; }
.thebibliography dt { grid-column: 1; margin-bottom: 0.5em; }
.abstract{margin:1em;} .abstract{margin:1em;}
table.tabbing {width:100%; margin-top:1em;} table.tabbing {width:100%; margin-top:1em;}
td.tabbing {width:33%;} td.tabbing {width:33%;}

Binary file not shown.

Binary file not shown.

View file

@ -42,6 +42,8 @@ Css: li p:first-child{ margin-top:0em; }
Css: li p:last-child, li div:last-child { margin-bottom:0.5em; } Css: li p:last-child, li div:last-child { margin-bottom:0.5em; }
Css: li p:first-child{ margin-bottom:0; } Css: li p:first-child{ margin-bottom:0; }
Css: li p~ul:last-child, li p~ol:last-child{ margin-bottom:0.5em; } Css: li p~ul:last-child, li p~ol:last-child{ margin-bottom:0.5em; }
Css: ul.itemize1,ol.enumerate1{padding-left: 0;}
Css: ul li.itemize,ol li.enumerate{margin-left: 1rem;}
Css: .enumerate1 {list-style-type:decimal;} Css: .enumerate1 {list-style-type:decimal;}
Css: .enumerate2 {list-style-type:lower-alpha;} Css: .enumerate2 {list-style-type:lower-alpha;}
Css: .enumerate3 {list-style-type:lower-roman;} Css: .enumerate3 {list-style-type:lower-roman;}
@ -73,6 +75,7 @@ Css: .framebox-l {text-align:left;}
Css: .framebox-r {text-align:right;} Css: .framebox-r {text-align:right;}
Css: span.thank-mark{ vertical-align: super } Css: span.thank-mark{ vertical-align: super }
Css: span.footnote-mark sup.textsuperscript, span.footnote-mark a sup.textsuperscript{ font-size:80%; } Css: span.footnote-mark sup.textsuperscript, span.footnote-mark a sup.textsuperscript{ font-size:80%; }
Css: aside.footnote-text p{margin-top:0; margin-bottom:0;text-indent: 0;}
Css: code.verb{font-family:monospace,monospace;} Css: code.verb{font-family:monospace,monospace;}
Css: div.tabular, div.center div.tabular {text-align: center; margin-top:0.5em; margin-bottom:0.5em; } Css: div.tabular, div.center div.tabular {text-align: center; margin-top:0.5em; margin-bottom:0.5em; }
Css: table.tabular td p{margin-top:0em;} Css: table.tabular td p{margin-top:0em;}
@ -118,7 +121,9 @@ Css: table.pmatrix {width:100%;}
Css: span.bar-css {text-decoration:overline;} Css: span.bar-css {text-decoration:overline;}
Css: img.cdots{vertical-align:middle;} Css: img.cdots{vertical-align:middle;}
Css: .partToc a, .partToc, .likepartToc a, .likepartToc {line-height: 200%; font-weight:bold; font-size:110%;} Css: .partToc a, .partToc, .likepartToc a, .likepartToc {line-height: 200%; font-weight:bold; font-size:110%;}
Css: .index-item, .index-subitem, .index-subsubitem {display:block} Css: .theindex-letter{ margin-top: 1em;}
Css: .index-subitem{ margin-left: 2ch;}
Css: .index-subsubitem{ margin-left: 4ch;}
Css: div.caption {text-indent:-2em; margin-left:3em; margin-right:1em; text-align:center; margin-top: 0.5rem;} Css: div.caption {text-indent:-2em; margin-left:3em; margin-right:1em; text-align:center; margin-top: 0.5rem;}
Css: div.caption span.id{font-weight: bold; white-space: nowrap; } Css: div.caption span.id{font-weight: bold; white-space: nowrap; }
Css: h1.partHead{text-align: center} Css: h1.partHead{text-align: center}
@ -129,7 +134,7 @@ Css: .paragraphHead, .likeparagraphHead { margin-top:2em; font-weight: bold;}
Css: .subparagraphHead, .likesubparagraphHead { font-weight: bold;} Css: .subparagraphHead, .likesubparagraphHead { font-weight: bold;}
Css: .verse{white-space:nowrap; margin-left:2em} Css: .verse{white-space:nowrap; margin-left:2em}
Css: div.maketitle {text-align:center;} Css: div.maketitle {text-align:center;}
Css: h2.titleHead{text-align:center;} Css: h1.titleHead{text-align:center;}
Css: div.maketitle{ margin-bottom: 2em; } Css: div.maketitle{ margin-bottom: 2em; }
Css: div.author, div.date {text-align:center;} Css: div.author, div.date {text-align:center;}
Css: div.thanks{text-align:left; margin-left:10%; font-size:85%; font-style:italic; } Css: div.thanks{text-align:left; margin-left:10%; font-size:85%; font-style:italic; }
@ -146,6 +151,8 @@ Css: figure.figure {text-align:center;}
Css: figcaption.caption {text-indent:-2em; margin-left:3em; margin-right:1em; text-align:center;} Css: figcaption.caption {text-indent:-2em; margin-left:3em; margin-right:1em; text-align:center;}
Css: figcaption.caption span.id{font-weight: bold; white-space: nowrap; } Css: figcaption.caption span.id{font-weight: bold; white-space: nowrap; }
Css: p + figcaption, img + figcaption{margin-top: 1em;} Css: p + figcaption, img + figcaption{margin-top: 1em;}
Css: .thebibliography dl { display: grid; grid-auto-columns: min-content 1fr; grid-auto-flow: column; }
Css: .thebibliography dt { grid-column: 1; margin-bottom: 0.5em; }
Css: .abstract{margin:1em;} Css: .abstract{margin:1em;}
Css: table.tabbing {width:100%; margin-top:1em;} Css: table.tabbing {width:100%; margin-top:1em;}
Css: td.tabbing {width:33%;} Css: td.tabbing {width:33%;}

View file

@ -1,12 +1,15 @@
This is pdfTeX, Version 3.141592653-2.6-1.40.29 (TeX Live 2026) (preloaded format=pdflatex 2026.3.1) 4 MAR 2026 11:52 This is pdfTeX, Version 3.141592653-2.6-1.40.29 (TeX Live 2026) (preloaded format=latex 2026.3.1) 9 MAR 2026 09:46
entering extended mode entering extended mode
restricted \write18 enabled. restricted \write18 enabled.
%&-line parsing enabled. %&-line parsing enabled.
**resume.tex **\makeatletter\def\HCode{\futurelet\HCode\HChar}\def\HChar{\ifx"\HCode\def\HCo
(./resume.tex de"##1"{\Link##1}\expandafter\HCode\else\expandafter\Link\fi}\def\Link#1.a.b.c.
LaTeX2e <2025-11-01> {\g@addto@macro\@documentclasshook{\RequirePackage[#1,html]{tex4ht}}\let\HCode\
L3 programming layer <2026-01-19> documentstyle\def\documentstyle{\let\documentstyle\HCode\expandafter\def\csname
(./res.cls tex4ht\endcsname{#1,html}\def\HCode####1{\documentstyle[tex4ht,}\@ifnextchar[{
\HCode}{\documentstyle[tex4ht]}}}\makeatother\HCode resume.cfg,html5.a.b.c.\inp
ut resume.tex
(./resume.tex (./res.cls
Document Style `res' <26 Sep 89>. Document Style `res' <26 Sep 89>.
Document Class: res 2000/05/19 v1.4b Resume class Document Class: res 2000/05/19 v1.4b Resume class
(/usr/local/texlive/2026basic/texmf-dist/tex/latex/base/article.cls (/usr/local/texlive/2026basic/texmf-dist/tex/latex/base/article.cls
@ -38,77 +41,406 @@ No auxiliary output files.
\resumewidth=\dimen150 \resumewidth=\dimen150
\@columnwidth=\dimen151 \@columnwidth=\dimen151
\c@numberofcolumns=\count283 \c@numberofcolumns=\count283
) (/usr/local/texlive/2026basic/texmf-dist/tex/latex/psnfss/helvet.sty ) (/usr/local/texlive/2026basic/texmf-dist/tex/generic/tex4ht/tex4ht.sty
version 2025-12-14-13:41
Package: tex4ht
--------------------------------------
--- Note --- for _ at preamble, use the command line option `early_'
--------------------------------------
--------------------------------------
--- Note --- for ^ at preamble, use the command line option `early^'
--------------------------------------
\tmp:toks=\toks22
)
(/usr/local/texlive/2026basic/texmf-dist/tex/generic/tex4ht/usepackage.4ht
version 2025-08-27-10:30
)
(/usr/local/texlive/2026basic/texmf-dist/tex/latex/psnfss/helvet.sty
Package: helvet 2020/03/25 PSNFSS-v9.3 (WaS) Package: helvet 2020/03/25 PSNFSS-v9.3 (WaS)
(/usr/local/texlive/2026basic/texmf-dist/tex/latex/graphics/keyval.sty (/usr/local/texlive/2026basic/texmf-dist/tex/latex/graphics/keyval.sty
Package: keyval 2022/05/29 v1.15 key=value parser (DPC) Package: keyval 2022/05/29 v1.15 key=value parser (DPC)
\KV@toks@=\toks22 \KV@toks@=\toks23
)) ))
(/usr/local/texlive/2026basic/texmf-dist/tex/latex/l3backend/l3backend-pdftex.d (./resume.cfg
ef (/usr/local/texlive/2026basic/texmf-dist/tex/generic/tex4ht/tex4ht.4ht
File: l3backend-pdftex.def 2025-10-09 L3 backend support: PDF output (pdfTeX) version 2025-07-09-13:35
\l__color_backend_stack_int=\count284 --------------------------------------
--- Note --- for additional information, use the command line option `info'
--------------------------------------
::::::::::::::::::::::::::::::::::::::::::
TeX4ht info is available in the log file
::::::::::::::::::::::::::::::::::::::::::
) (/usr/local/texlive/2026basic/texmf-dist/tex/generic/tex4ht/tex4ht.sty
version 2025-12-14-13:41
l.882 --- TeX4ht warning --- nonprimitive \everypar ---
--- needs --- tex4ht resume ---
\tmp:cnt=\count284
\openout15 = `resume.tmp'.
(./resume.tmp)
\tmp:dim=\skip52
(./resume.xref)
\:refout=\write3
\openout3 = `resume.xref'.
(/usr/local/texlive/2026basic/texmf-dist/tex/generic/tex4ht/html4.4ht
version 2026-01-04-08:10
--------------------------------------
--- Note --- to remove the <?xml version=...?> processing instruction use the c
ommand line option `no-VERSION'
--------------------------------------
--------------------------------------
--- Note --- to remove the DOCTYPE declaration use the command line option `no-
DOCTYPE'
--------------------------------------
)
(/usr/local/texlive/2026basic/texmf-dist/tex/generic/tex4ht/unicode.4ht
version 2026-01-04-08:10
)
(/usr/local/texlive/2026basic/texmf-dist/tex/generic/tex4ht/html4-math.4ht
version 2026-01-29-13:49
)
(/usr/local/texlive/2026basic/texmf-dist/tex/generic/tex4ht/html5.4ht
version 2026-01-18-07:06
)
--------------------------------------
--- Note --- for marking of the base font, use the command line option `fonts+'
--------------------------------------
--------------------------------------
--- Note --- for non active _, use the command line option `no_'
--------------------------------------
--------------------------------------
--- Note --- for _ of catcode 13, use the command line option `_13'
--------------------------------------
--------------------------------------
--- Note --- for non active ^, use the command line option `no^'
--------------------------------------
--------------------------------------
--- Note --- for ^ of catcode 13, use the command line option `^13'
--------------------------------------
(/usr/local/texlive/2026basic/texmf-dist/tex/generic/tex4ht/html4.4ht
version 2026-01-04-08:10
--------------------------------------
--- Note --- for alternative charset, use the command line option `charset=...'
--------------------------------------
--------------------------------------
--- Note --- to ignore CSS font decoration, use the `NoFonts' command line opti
on
--------------------------------------
--------------------------------------
--- Note --- for jpg bitmaps of pictures, use the `jpg' command line option. (C
haracter bitmaps are controled only by `g' records of tex4ht.env and `-g' switc
hes of tex4ht.c)
--------------------------------------
--------------------------------------
--- Note --- for gif bitmaps of pictures, use the `gif' command line option. (C
haracter bitmaps are controled only by `g' records of tex4ht.env and `-g' switc
hes of tex4ht.c)
--------------------------------------
--------------------------------------
--- Note --- for content and toc in 2 frames, use the command line option `fram
es'
--------------------------------------
--------------------------------------
--- Note --- for content, toc, and footnotes in 3 frames, use the command line
option `frames-fn'
--------------------------------------
--------------------------------------
--- Note --- for file extension name xht, use the command line option `xht'
--------------------------------------
TeX4ht package options: html5,html,xhtml
--------------------------------------
--- Note --- To print a timestamp, use the command line option timestamp
--------------------------------------
--------------------------------------
--- Note --- to ignore CSS code, use the command line option `-css
--------------------------------------
--------------------------------------
--- Note --- for inline CSS code, use the command line option `css-in'
--------------------------------------
--------------------------------------
--- Note --- for pop ups on mouse over, use the command line option `mouseover'
--------------------------------------
--------------------------------------
--- Note --- for addressing images in a subdirectory, use the command line opti
on `imgdir:.../'
--------------------------------------
)
(/usr/local/texlive/2026basic/texmf-dist/tex/generic/tex4ht/unicode.4ht
version 2026-01-04-08:10
)
(/usr/local/texlive/2026basic/texmf-dist/tex/generic/tex4ht/html4-math.4ht
version 2026-01-29-13:49
)
(/usr/local/texlive/2026basic/texmf-dist/tex/generic/tex4ht/html5.4ht
version 2026-01-18-07:06
--------------------------------------
--- Note --- To print a timestamp, use the command line option timestamp
--------------------------------------
--------------------------------------
--- Note --- We use a default CSS style. Use the `nostyle' option if you want t
o use custom a CSS design
--------------------------------------
)
\:tokwrite=\toks24
\:tokpage=\toks25
--------------------------------------
--- Note --- for back links to toc, use the command line option `sections+'
--------------------------------------
--------------------------------------
--- Note --- for linear crosslinks of pages, use the command line option `next'
--------------------------------------
\openout15 = `resume.4ct'.
\:tocout=\write4
\openout4 = `resume.4tc'.
(resume.4tc)
(/usr/local/texlive/2026basic/texmf-dist/tex/generic/tex4ht/html4.4ht
version 2026-01-04-08:10
)
(/usr/local/texlive/2026basic/texmf-dist/tex/generic/tex4ht/unicode.4ht
version 2026-01-04-08:10
)
(/usr/local/texlive/2026basic/texmf-dist/tex/generic/tex4ht/html4-math.4ht
version 2026-01-29-13:49
)
(/usr/local/texlive/2026basic/texmf-dist/tex/generic/tex4ht/html5.4ht
version 2026-01-18-07:06
)
(/usr/local/texlive/2026basic/texmf-dist/tex/generic/tex4ht/latex.4ht
version 2025-12-04-13:51
LaTeX Info: Redefining \_ on input line 180.
LaTeX Info: Redefining \begin on input line 634.
LaTeX Info: Redefining \end on input line 682.
LaTeX Info: Redefining \, on input line 844.
LaTeX Info: Redefining \; on input line 845.
LaTeX Info: Redefining \! on input line 846.
LaTeX Info: Redefining \: on input line 847.
LaTeX Info: Redefining \> on input line 848.
--------------------------------------
--- Note --- for links into captions, instead of float heads, use the command l
ine option `refcaption'
--------------------------------------
(/usr/local/texlive/2026basic/texmf-dist/tex/generic/tex4ht/html4.4ht
version 2026-01-04-08:10
)
(/usr/local/texlive/2026basic/texmf-dist/tex/generic/tex4ht/unicode.4ht
version 2026-01-04-08:10
)
(/usr/local/texlive/2026basic/texmf-dist/tex/generic/tex4ht/html4-math.4ht
version 2026-01-29-13:49
)
(/usr/local/texlive/2026basic/texmf-dist/tex/generic/tex4ht/html5.4ht
version 2026-01-18-07:06
)
(/usr/local/texlive/2026basic/texmf-dist/tex/generic/tex4ht/html4.4ht
version 2026-01-04-08:10
--------------------------------------
--- Note --- For mini tocs immediately aftter the header use the command line o
ption `minitoc<'
--------------------------------------
--------------------------------------
--- Note --- For full TOC on each page compatible with the collapsetoc DOM filt
er, use the `fulltoc' command line option.
--------------------------------------
--------------------------------------
--- Note --- for enumerated list elements with valued data, use the command lin
e option `enumerate+'
--------------------------------------
--------------------------------------
--- Note --- for enumerated list elements li's with value attributes, use the c
ommand line option `enumerate-'
--------------------------------------
--------------------------------------
--- Note --- for CSS2 code, use the command line option `css2'
--------------------------------------
--------------------------------------
--- Note --- for pictorial tabular, use the command line option `pic-tabular'
--------------------------------------
--------------------------------------
--- Note --- for bitmap fbox'es, use the command line option `pic-fbox'
--------------------------------------
--------------------------------------
--- Note --- for minipage with width, use the command line option `minipage-wid
th'
--------------------------------------
--------------------------------------
--- Note --- for bitmap framebox'es, use the command line option `pic-framebox'
--------------------------------------
--------------------------------------
--- Note --- for inline footnotes use command line option `fn-in'
--------------------------------------
--------------------------------------
--- Note --- for tracing of latex font commands, use the command line option `f
onts'
--------------------------------------
--------------------------------------
--- Note --- for width specifications of tabular p entries, use the `p-width' c
ommand line option or a configuration similar to \Configure{HColWidth}{\HCode{
style="width:\HColWidth"}}
--------------------------------------
)
(/usr/local/texlive/2026basic/texmf-dist/tex/generic/tex4ht/unicode.4ht
version 2026-01-04-08:10
)
(/usr/local/texlive/2026basic/texmf-dist/tex/generic/tex4ht/html4-math.4ht
version 2026-01-29-13:49
--------------------------------------
--- Note --- for pictorial eqnarray, use the command line option `pic-eqnarray'
--------------------------------------
--------------------------------------
--- Note --- for pictorial array, use the command line option `pic-array'
--------------------------------------
--------------------------------------
--- Note --- for pictorial $...$ environments, use the command line option `pic
-m' (not recommended!!)
--------------------------------------
--------------------------------------
--- Note --- for pictorial $...$ and $$...$$ environments with latex alt, use t
he command line option `pic-m+' (not safe!!)
--------------------------------------
--------------------------------------
--- Note --- for pictorial array, use the command line option `pic-array'
--------------------------------------
)
(/usr/local/texlive/2026basic/texmf-dist/tex/generic/tex4ht/html5.4ht
version 2026-01-18-07:06
))
(/usr/local/texlive/2026basic/texmf-dist/tex/generic/tex4ht/fontmath.4ht
version 2022-10-25-13:59
(/usr/local/texlive/2026basic/texmf-dist/tex/generic/tex4ht/html4.4ht
version 2026-01-04-08:10
)
(/usr/local/texlive/2026basic/texmf-dist/tex/generic/tex4ht/unicode.4ht
version 2026-01-04-08:10
)
(/usr/local/texlive/2026basic/texmf-dist/tex/generic/tex4ht/html4-math.4ht
version 2026-01-29-13:49
)
(/usr/local/texlive/2026basic/texmf-dist/tex/generic/tex4ht/html5.4ht
version 2026-01-18-07:06
))
(/usr/local/texlive/2026basic/texmf-dist/tex/generic/tex4ht/res.4ht
version 2009-05-21-09:32
)
(/usr/local/texlive/2026basic/texmf-dist/tex/generic/tex4ht/article.4ht
version 2023-04-10-13:46
(/usr/local/texlive/2026basic/texmf-dist/tex/generic/tex4ht/html4.4ht
version 2026-01-04-08:10
--------------------------------------
--- Note --- for automatic sectioning pagination, use the command line option `
1', `2', `3', '4', '5', '6', or '7'
--------------------------------------
--------------------------------------
--- Note --- for files named derived from section titles, use the command line
option `sec-filename'
--------------------------------------
--------------------------------------
--- Note --- for i-columns index, use the command line option `index=i' (e.g.,
index=2)
--------------------------------------
)
(/usr/local/texlive/2026basic/texmf-dist/tex/generic/tex4ht/unicode.4ht
version 2026-01-04-08:10
)
(/usr/local/texlive/2026basic/texmf-dist/tex/generic/tex4ht/html4-math.4ht
version 2026-01-29-13:49
)
(/usr/local/texlive/2026basic/texmf-dist/tex/generic/tex4ht/html5.4ht
version 2026-01-18-07:06
))
(/usr/local/texlive/2026basic/texmf-dist/tex/generic/tex4ht/res-a.4ht
version 2009-05-21-09:32
(/usr/local/texlive/2026basic/texmf-dist/tex/generic/tex4ht/html4.4ht
version 2026-01-04-08:10
)
(/usr/local/texlive/2026basic/texmf-dist/tex/generic/tex4ht/unicode.4ht
version 2026-01-04-08:10
)
(/usr/local/texlive/2026basic/texmf-dist/tex/generic/tex4ht/html4-math.4ht
version 2026-01-29-13:49
)
(/usr/local/texlive/2026basic/texmf-dist/tex/generic/tex4ht/html5.4ht
version 2026-01-18-07:06
))
(/usr/local/texlive/2026basic/texmf-dist/tex/generic/tex4ht/html4.4ht
version 2026-01-04-08:10
)
(/usr/local/texlive/2026basic/texmf-dist/tex/generic/tex4ht/unicode.4ht
version 2026-01-04-08:10
)
(/usr/local/texlive/2026basic/texmf-dist/tex/generic/tex4ht/html4-math.4ht
version 2026-01-29-13:49
)
(/usr/local/texlive/2026basic/texmf-dist/tex/generic/tex4ht/html5.4ht
version 2026-01-18-07:06
))
(/usr/local/texlive/2026basic/texmf-dist/tex/latex/l3backend/l3backend-dvips.de
f
File: l3backend-dvips.def 2025-10-09 L3 backend support: dvips
\l__pdfannot_backend_content_box=\box53
\l__pdfannot_backend_model_box=\box54
\g__pdfannot_backend_int=\count285
\g__pdfannot_backend_link_int=\count286
\g__pdfannot_backend_link_sf_int=\count287
) )
LaTeX Warning: Unused global option(s): LaTeX Warning: Unused global option(s):
[10pt]. [10pt].
No file resume.aux. No file resume.aux.
LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 30. LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 2.
LaTeX Font Info: ... okay on input line 30. LaTeX Font Info: ... okay on input line 2.
LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 30. LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 2.
LaTeX Font Info: ... okay on input line 30. LaTeX Font Info: ... okay on input line 2.
LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 30. LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 2.
LaTeX Font Info: ... okay on input line 30. LaTeX Font Info: ... okay on input line 2.
LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 30. LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 2.
LaTeX Font Info: ... okay on input line 30. LaTeX Font Info: ... okay on input line 2.
LaTeX Font Info: Checking defaults for TS1/cmr/m/n on input line 30. LaTeX Font Info: Checking defaults for TS1/cmr/m/n on input line 2.
LaTeX Font Info: ... okay on input line 30. LaTeX Font Info: ... okay on input line 2.
LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 30. LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 2.
LaTeX Font Info: ... okay on input line 30. LaTeX Font Info: ... okay on input line 2.
LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 30. LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 2.
LaTeX Font Info: ... okay on input line 30. LaTeX Font Info: ... okay on input line 2.
--- file resume.css ---
)
LaTeX Font Info: External font `cmex10' loaded for size LaTeX Font Info: External font `cmex10' loaded for size
(Font) <7> on input line 46. (Font) <7> on input line 46.
LaTeX Font Info: External font `cmex10' loaded for size LaTeX Font Info: External font `cmex10' loaded for size
(Font) <5> on input line 46. (Font) <5> on input line 46.
[1 [1
{/usr/local/texlive/2026basic/texmf-var/fonts/map/pdftex/updmap/pdftex.map}] ] [2] [3]
Underfull \hbox (badness 10000) in paragraph at lines 121--123
[]
Underfull \hbox (badness 10000) in paragraph at lines 147--149
[]
[2] [3]
*********** ***********
LaTeX2e <2025-11-01> LaTeX2e <2025-11-01>
L3 programming layer <2026-01-19> L3 programming layer <2026-01-19>
*********** ***********
) )
Here is how much of TeX's memory you used: Here is how much of TeX's memory you used:
598 strings out of 469006 4481 strings out of 469007
10756 string characters out of 5454814 58078 string characters out of 5454840
445756 words of memory out of 5000000 592612 words of memory out of 5000000
29363 multiletter control sequences out of 15000+600000 33137 multiletter control sequences out of 15000+600000
629322 words of font info for 45 fonts, out of 8000000 for 9000 629490 words of font info for 46 fonts, out of 8000000 for 9000
319 hyphenation exceptions out of 8191 319 hyphenation exceptions out of 8191
49i,8n,52p,357b,206s stack positions out of 10000i,1000n,20000p,200000b,200000s 49i,8n,59p,828b,464s stack positions out of 10000i,1000n,20000p,200000b,200000s
</Users/bastian/Library/texlive/2026basic/texmf-var/fonts/pk/ljfour/jknappen
/ec/tcrm1000.600pk></usr/local/texlive/2026basic/texmf-dist/fonts/type1/public/
amsfonts/cm/cmbx10.pfb></usr/local/texlive/2026basic/texmf-dist/fonts/type1/pub
lic/amsfonts/cm/cmbx12.pfb></usr/local/texlive/2026basic/texmf-dist/fonts/type1
/public/amsfonts/cm/cmr10.pfb></usr/local/texlive/2026basic/texmf-dist/fonts/ty
pe1/public/amsfonts/cm/cmsl10.pfb>
Output written on resume.pdf (3 pages, 77604 bytes).
PDF statistics:
39 PDF objects out of 1000 (max. 8388607)
24 compressed objects within 1 object stream
0 named destinations out of 1000 (max. 500000)
1 words of extra memory for PDF output out of 10000 (max. 10000000)
Output written on resume.dvi (3 pages, 26000 bytes).

Binary file not shown.

View file

@ -52,7 +52,7 @@
\section{\centerline{SUMMARY}} \section{\centerline{SUMMARY}}
\vspace{8pt} % Gap between title and text \vspace{8pt} % Gap between title and text
Staff Software Engineer and published author ("Rust Web Development" -- Manning) with 15+ years making pragmatic architecture decisions for backend systems at scale. Currently shipping Rust, C++, and Python code to hundreds of millions of Firefox users at Mozilla. Founded Rust\&Tell Berlin, the largest Rust meetup globally. Staff Software Engineer at Mozilla, shipping Rust, C++, and Python to hundreds of millions of Firefox users. Published author (``Rust Web Development'' -- Manning). Founder of Rust\&Tell Berlin, the largest Rust meetup globally.
%---------------------------------------------------------------------------------------- %----------------------------------------------------------------------------------------
@ -65,12 +65,11 @@ Staff Software Engineer and published author ("Rust Web Development" -- Manning)
\section{\centerline{SKILLS}} \section{\centerline{SKILLS}}
\vspace{8pt} % Gap between title and text \vspace{8pt} % Gap between title and text
{\bf Languages:} Rust, Python, TypeScript, JavaScript, Go \\ {\bf Languages:} Rust, C++, Python, TypeScript, Go \\
{\bf Frontend:} React, Angular, Vue.js \\ {\bf Backend \& Systems:} Rust (Actix, Warp, Axum), Python (FastAPI), Node.js, async Rust, FFI/UniFFI \\
{\bf Backend:} Rust (Actix, Warp, Axum), Python (FastAPI), Node.js, Go \\ {\bf Patterns:} REST, GraphQL, gRPC, distributed systems (P2P), microservices \\
{\bf Patterns:} REST, GraphQL, gRPC, async Rust, distributed systems (P2P) \\
{\bf Infrastructure:} AWS, Google Cloud, Docker, Kubernetes, CI/CD, Grafana \\ {\bf Infrastructure:} AWS, Google Cloud, Docker, Kubernetes, CI/CD, Grafana \\
{\bf Domains:} Systems Programming, FFI, Distributed Systems, Web Services, Micro Services, IoT, Blockchain, Firefox {\bf AI Tooling:} Claude Code, GitHub Copilot
%---------------------------------------------------------------------------------------- %----------------------------------------------------------------------------------------
@ -84,114 +83,70 @@ Staff Software Engineer and published author ("Rust Web Development" -- Manning)
\vspace{8pt} % Gap between title and text \vspace{8pt} % Gap between title and text
{\sl Staff Software Engineer - Full-time} \hfill February 2026 - Now \\ {\sl Staff Software Engineer (promoted from Senior)} \hfill July 2024 - Present \\
{\sl Senior Software Engineer - Full-time} \hfill July 2024 - January 2026 \\
Mozilla, Remote \\ Mozilla, Remote \\
Shipping Rust, C++, and Python code across Firefox desktop and mobile to hundreds of millions of users. All work is open source.
\begin{itemize} \itemsep -2pt \begin{itemize} \itemsep -2pt
\item Consolidated four separate favicon implementations across Firefox teams into a single Image Service -- chose to extend an existing Python/Airflow pipeline rather than build a new microservice, now serving 4 teams from one manifest behind a GCS-backed API \item Implemented Oblivious HTTP (OHTTP) from scratch in application-services (shared Rust component cross-compiled to Swift/Kotlin via UniFFI) plus C++ and Rust for Firefox Desktop -- users are now unidentifiable when making privacy-sensitive requests across all platforms
\item Implemented Oblivious HTTP (OHTTP) from scratch in application-services (shared Rust component cross-compiled to Swift and Kotlin via UniFFI) plus handwritten C++ and Rust for Firefox Desktop -- users are now unidentifiable when making privacy-sensitive requests across all platforms \item Consolidated four separate favicon implementations into a single Image Service -- extended an existing Python/Airflow pipeline rather than building a new microservice, now serving 4 teams from one manifest behind a GCS-backed API
\item Maintained Firefox Push notification service (50k requests/second, sub-200ms latency): reduced memory footprint, added circuit breakers, and built Grafana dashboards for operational visibility \item Maintained Firefox Push notification service (50k req/s, sub-200ms latency): reduced memory footprint, added circuit breakers, built Grafana dashboards
\item Contributor and code reviewer for UniFFI, Mozilla's multi-language bindings generator enabling Rust code to be called from Kotlin, Swift, Python, and JavaScript \item Contributor and code reviewer for UniFFI, Mozilla's multi-language bindings generator (Rust to Kotlin, Swift, Python, JavaScript)
\item Built Rust extensions for Merino (Python/FastAPI service powering Firefox Suggest); wrote RFCs, mapped out project plans, and surfaced cross-team blockers early \item Led ``Rusty Fridays'' internal education sessions, mentoring engineers across teams through Rust adoption
\item Led ``Rusty Fridays'' internal education sessions, guiding engineers through Rust adoption and mentoring junior contributors across teams
\end{itemize} \end{itemize}
{\sl Senior Systems Engineer, Team Lead - Full-time} \hfill April 2023 - June 2024 \\ {\sl Senior Systems Engineer, Team Lead} \hfill 2023 - 2024 \\
Toposware, Remote \\ Toposware, Remote \\
Core team of 4 building a peer-to-peer distributed network protocol from scratch in Rust. Core team of 4 building a peer-to-peer distributed network protocol from scratch in Rust.
\begin{itemize} \itemsep -2pt \begin{itemize} \itemsep -2pt
\item Achieved 10x throughput per node by profiling and targeting the actual bottleneck -- optimized batch processing and serialization paths, tuned message volumes to avoid throughput degradation -- rather than redesigning the consensus layer \item Achieved 10x throughput per node by profiling the actual bottleneck -- optimized batch processing and serialization paths rather than redesigning the consensus layer
\item Led benchmark initiative with 3 engineers that revealed nodes were compute-bound on crypto operations, not network-limited -- redirected optimization effort accordingly \item Led benchmark initiative that revealed nodes were compute-bound on crypto operations, not network-limited -- redirected optimization effort accordingly
\item Rewrote the CLI from scratch, replacing error-prone CLI parameters with local config files -- reduced operator misconfiguration during node setup
\item Built an EVM bridge connecting external Ethereum-compatible chains to the core network \item Built an EVM bridge connecting external Ethereum-compatible chains to the core network
\item Set up load testing, CI/CD pipelines, and Grafana dashboards for production observability
\end{itemize} \end{itemize}
{\sl Senior Software Engineer - Full-time} \hfill August 2022 - February 2023 \\ {\sl Senior Software Engineer} \hfill 2022 - 2023 \\
Centrifuge, Remote \\ Centrifuge, Remote \\
Protocol team building DeFi applications on Substrate/Polkadot in a self-governed organization. Protocol team building DeFi applications on Substrate/Polkadot in Rust.
\begin{itemize} \itemsep -2pt \begin{itemize} \itemsep -2pt
\item Implemented fund pool mutations on-chain, enabling users to adjust capital allocations in live pools -- core feature for the lending protocol \item Implemented on-chain fund pool mutations -- core feature for the lending protocol enabling live capital allocation adjustments
\item Built client-facing APIs on top of fund pools, giving external integrators programmatic access to pool operations \item Replaced manual documentation with CI-driven auto-generation from Rust source -- eliminated persistent drift between code and public docs
\item Replaced manual documentation with CI-driven auto-generation from Rust source on every PR -- eliminated persistent drift between code and public docs
\item Co-authored RFCs to build consensus on new protocol features across the decentralized team
\end{itemize} \end{itemize}
{\sl Author of "Rust Web Development"} \hfill October 2020 - December 2022 \\ {\sl Author, ``Rust Web Development''} \hfill 2020 - 2022 \\
Manning Publications, Remote \\ Manning Publications \\
\begin{itemize} \itemsep -2pt Published end-to-end guide covering async Rust, web frameworks, and production deployment.
\item Published ``Rust Web Development'' through Manning -- end-to-end guide covering async Rust, web frameworks, and production deployment, distributed globally
\end{itemize}
{\sl Sr. Solutions Architect (Professional Services) - Full-time} \hfill May 2021 - July 2022 \\ \vspace{4pt}
{\sl Solutions Architect (Professional Services) - Full-time} \hfill June 2020 - May 2021 \\
{\sl Sr. Solutions Architect (promoted from SA)} \hfill 2020 - 2022 \\
Twilio Inc., Remote \\ Twilio Inc., Remote \\
Second Solutions Architect hired for the new EMEA Professional Services team. Led enterprise integrations across contact center, messaging, and voice products.
\begin{itemize} \itemsep -2pt \begin{itemize} \itemsep -2pt
\item Technical lead for Fortune 500 engagements: debugged audio quality and latency issues, redesigned messaging flows, and advised clients on achievable architectures given their team size and resources \item Technical lead for Fortune 500 engagements: debugged latency issues, redesigned messaging flows, advised on architectures matching client team size and resources
\item Advocated for combining two existing lower-cost Twilio products over adopting a newer, more expensive one for a major engagement -- reduced client spend while using battle-tested components \item Created reusable engagement playbooks adopted across the EMEA Professional Services team
\item Created reusable engagement playbooks (setup checklists, edge-case discovery questions, technical review templates) adopted across the EMEA team
\item Hired and onboarded engineers to scale the Professional Services team
\end{itemize} \end{itemize}
{\sl Systems Engineer - Contract} \hfill August 2019 - May 2020 \\ {\sl Systems Engineer} \hfill 2019 - 2020 \\
Kraken Digital Currency Exchange, Remote (San Francisco)\\ Kraken Digital Currency Exchange, Remote \\
Member of the first Rust engineering team (12 engineers), replacing core banking infrastructure and API gateway.
\begin{itemize} \itemsep -2pt \begin{itemize} \itemsep -2pt
\item Migrated core banking services and API gateway from PHP to Rust, achieving 100x throughput improvement -- enabling the exchange to absorb order-of-magnitude traffic growth without scaling hardware \item Migrated core banking services and API gateway from PHP to Rust, achieving 100x throughput improvement -- enabling order-of-magnitude traffic growth without scaling hardware
\item Built new Rust services from scratch with comprehensive test coverage and security-first design
\item Worked directly with the CTO on privacy-focused architectural decisions for the trading platform \item Worked directly with the CTO on privacy-focused architectural decisions for the trading platform
\end{itemize} \end{itemize}
{\sl Rust Developer - Freelance} \hfill March 2019 - July 2019 \\ \vspace{4pt}
Self Employed, Berlin/Toronto \\
\begin{itemize} \itemsep -2pt
\item Founded the monthly ``Rust \& Tell Berlin'' meetup -- grew it into the largest Rust meetup globally, still running years later
\item Contributed to Rust core and ecosystem libraries
\item Created Rust learning resources specifically for Node.js developers transitioning to systems programming
\end{itemize}
{\sl Sr. Software Engineer - Freelance} \hfill March 2016 - February 2019 \\ {\sl Earlier Career} \hfill 2014 - 2019 \\
OSRAM, K\"orber Digital, Avenga, ERGO Group, GIATA, PaperHive, Glispa (Berlin) \\ Sr. Software Engineer across enterprise clients (OSRAM, K\"orber Digital, GIATA, Avenga) and startups (Dalia Research, blogfoster, smartB) in Berlin.
Freelance consultant for enterprise clients across IoT, logistics, tourism, and ad-tech.
\begin{itemize} \itemsep -2pt \begin{itemize} \itemsep -2pt
\item Designed authentication infrastructure for OSRAM's IoT platform (thousands of connected lighting devices) using Keycloak for user auth and service-to-service auth across microservices (Node.js, Go, Lua) \item Founded ``Rust \& Tell Berlin'' meetup -- grew it into the largest Rust meetup globally, still running years later
\item First engineering hire at K\"orber Digital: chose Node.js/React/AWS stack, built real-time data pipelines with a time-series database optimized for fast retrieval of sensor data \item Designed IoT authentication infrastructure at OSRAM for thousands of connected devices (Node.js, Go, Lua)
\item Decomposed GIATA's monolithic tourism ERP into 6 Docker-based microservices -- rewrote the hotel ingestion pipeline and mass photo upload system, significantly improving UI responsiveness and system scalability \item First engineering hire at K\"orber Digital: built real-time sensor data pipelines on AWS
\item Tech Lead at Avenga: introduced Scrum and refactored a monolith into microservices to unblock parallel team development \item Decomposed GIATA's monolithic ERP into 6 Docker-based microservices, improving system scalability
\item Built analytics dashboards and ad platforms at Glispa (AngularJS); mentored teams on modern JavaScript practices
\end{itemize}
{\sl Software Engineer - Full-time} \hfill August 2015 - February 2016 \\
smartB Energy Management GmbH, Berlin \\
Small agile team building energy monitoring applications for business owners.
\begin{itemize} \itemsep -2pt
\item Introduced pair programming and component-based frontend architecture, enabling multiple developers to work on the same codebase without conflicts
\item Full-stack development with JavaScript and Python using TDD
\end{itemize}
{\sl Software Engineer - Freelance} \hfill March 2015 - July 2015 \\
blogfoster GmbH, Berlin \\
First developer hired to replace legacy PHP/Backbone application with Node.js and React.
\begin{itemize} \itemsep -2pt
\item Built the first version of the ad marketplace; co-designed architecture with the CTO using TDD from day one
\end{itemize}
{\sl Frontend Developer - Full-time} \hfill February 2014 - March 2015 \\
Dalia Research, Berlin \\
First and sole frontend developer at 8-person startup.
\begin{itemize} \itemsep -2pt
\item Bootstrapped the customer-facing survey platform and analytics dashboards in AngularJS -- core UI remained largely untouched in production for close to 10 years
\end{itemize} \end{itemize}
\section{\centerline{EDUCATION}} \section{\centerline{EDUCATION}}
\vspace{8pt} % Gap between title and text \vspace{8pt} % Gap between title and text
{\sl Bachelor of Science, Computer Science} \hfill September 2010 - February 2014 \\ {\sl Bachelor of Science, Computer Science} \\
TH Ingolstadt\\ TH Ingolstadt -- Scholarship from Allianz Deutschland AG (fully funded)
Scholarship from Allianz Deutschland AG to study Computer Science, fully funded and with trainings in Scrum, Java, PL/I and mainframe systems on the side.

View file

@ -5,4 +5,4 @@
\:CrossWord{)Qx1-10000}{1}{1}% \:CrossWord{)Qx1-10000}{1}{1}%
\:CrossWord{)Qx1-20000}{1}{1}% \:CrossWord{)Qx1-20000}{1}{1}%
\:CrossWord{)Qx1-30000}{1}{1}% \:CrossWord{)Qx1-30000}{1}{1}%
\:CrossWord{)Qx1-40000}{1}{5}% \:CrossWord{)Qx1-40000}{1}{3}%