diff --git a/Makefile b/Makefile index 9e7b38f..1cc709c 100644 --- a/Makefile +++ b/Makefile @@ -4,23 +4,23 @@ html: index.html index.html: resume.tex res.cls resume.cfg style.css htlatex resume.tex "resume.cfg,html5" "" "" "" - LANG=C LC_ALL=C sed -i '' 's|||; s||Bastian Gruber - CV|' resume.html - LANG=C LC_ALL=C sed -i '' 's|linkedin.com/in/bastiangruber|linkedin.com/in/bastiangruber|g' resume.html - LANG=C LC_ALL=C sed -i '' 's|rustwebdevelopment.com|rustwebdevelopment.com|g' resume.html - LANG=C LC_ALL=C sed -i '' 's|gruberbastian@me.com|gruberbastian@me.com|g' resume.html - LANG=C LC_ALL=C sed -i '' 's|github.com/gruberb|github.com/gruberb|g' resume.html - LANG=C LC_ALL=C sed -i '' 's|code.novanexus.ca/gruberb|code.novanexus.ca/gruberb|g' resume.html - LANG=C LC_ALL=C sed -i '' 's|bastiangruber.ca|bastiangruber.ca|g' resume.html - LANG=C LC_ALL=C sed -i '' 's|Mozilla, Remote|Mozilla, Remote|g' resume.html - LANG=C LC_ALL=C sed -i '' 's|Toposware, Remote|Toposware, Remote|g' resume.html - LANG=C LC_ALL=C sed -i '' 's|Centrifuge, Remote|Centrifuge, Remote|g' resume.html - LANG=C LC_ALL=C sed -i '' 's|Manning Publications|Manning Publications|g' resume.html - LANG=C LC_ALL=C sed -i '' 's|Twilio Inc., Remote|Twilio Inc., Remote|g' resume.html - LANG=C LC_ALL=C sed -i '' 's|Kraken Digital Currency Exchange, Remote|Kraken Digital Currency Exchange, Remote|g' resume.html - LANG=C LC_ALL=C sed -i '' 's|TH Ingolstadt|TH Ingolstadt|g' resume.html - LANG=C LC_ALL=C sed -i '' 's|OSRAM|OSRAM|g' resume.html - LANG=C LC_ALL=C sed -i '' 's|GIATA|GIATA|g' resume.html - LANG=C LC_ALL=C sed -i '' 's|Avenga|Avenga|g' resume.html + LANG=C LC_ALL=C sed -i 's|||; s||Bastian Gruber - CV|' resume.html + LANG=C LC_ALL=C sed -i 's|linkedin.com/in/bastiangruber|linkedin.com/in/bastiangruber|g' resume.html + LANG=C LC_ALL=C sed -i 's|rustwebdevelopment.com|rustwebdevelopment.com|g' resume.html + LANG=C LC_ALL=C sed -i 's|gruberbastian@me.com|gruberbastian@me.com|g' resume.html + LANG=C LC_ALL=C sed -i 's|github.com/gruberb|github.com/gruberb|g' resume.html + LANG=C LC_ALL=C sed -i 's|code.novanexus.ca/gruberb|code.novanexus.ca/gruberb|g' resume.html + LANG=C LC_ALL=C sed -i 's|bastiangruber.ca|bastiangruber.ca|g' resume.html + LANG=C LC_ALL=C sed -i 's|Mozilla, Remote|Mozilla, Remote|g' resume.html + LANG=C LC_ALL=C sed -i 's|Toposware (acquired by Polygon Labs), Remote|Toposware (acquired by Polygon Labs), Remote|g' resume.html + LANG=C LC_ALL=C sed -i 's|Centrifuge, Remote|Centrifuge, Remote|g' resume.html + LANG=C LC_ALL=C sed -i 's|Manning Publications|Manning Publications|g' resume.html + LANG=C LC_ALL=C sed -i 's|Twilio Inc., Remote|Twilio Inc., Remote|g' resume.html + LANG=C LC_ALL=C sed -i 's|Kraken Digital Asset Exchange, Remote|Kraken Digital Asset Exchange, Remote|g' resume.html + LANG=C LC_ALL=C sed -i 's|TH Ingolstadt|TH Ingolstadt|g' resume.html + LANG=C LC_ALL=C sed -i 's|OSRAM|OSRAM|g' resume.html + LANG=C LC_ALL=C sed -i 's|GIATA|GIATA|g' resume.html + LANG=C LC_ALL=C sed -i 's|Avenga|Avenga|g' resume.html mv resume.html index.html pdf: resume.pdf @@ -32,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 deploy: html - mkdir -p ~/CodingIsFun/fun/bastiangruber.ca/src/cv - cp index.html style.css resume.css ~/CodingIsFun/fun/bastiangruber.ca/src/cv/ + mkdir -p ~/CodingIsFun/personal/bastiangruber.ca/src/cv + cp index.html style.css resume.css ~/CodingIsFun/personal/bastiangruber.ca/src/cv/ all: deploy pdf diff --git a/index.html b/index.html index 3ef5d99..b06d6e6 100644 --- a/index.html +++ b/index.html @@ -54,9 +54,10 @@ class="td00">Git: code.novanexus.ca/

SUMMARY

-

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. +

Staff Engineer at Mozilla, shipping Rust, C++, and Python to hundreds of millions of Firefox users across Desktop, +Android, and iOS. Promoted for leading cross-team projects and getting complex, multi-platform features shipped. +12+ years of backend and systems work, published author (“Rust Web Development”), and 13 years of technical +writing for outlets like c’t and iX.

SKILLS

Languages: Rust, C++, Python, TypeScript, Go
Backend & Systems: Rust (Actix, Warp, Axum), Python (FastAPI), Node.js, async Rust, FFI/UniFFI +class="cmbx-10">Systems & Backend: async Rust (Axum, Actix), Python/FastAPI, Node.js, FFI/UniFFI, gRPC, REST
Patterns: REST, GraphQL, gRPC, distributed systems (P2P), microservices
Architecture: distributed systems, P2P protocols, system design, cross-platform (Desktop/Android/iOS) +
Infrastructure: AWS, Google Cloud, Docker, Kubernetes, CI/CD, Grafana
AI Tooling: Claude Code, GitHub Copilot +class="cmbx-10">Infrastructure & Observability: AWS, GCP, Docker, Kubernetes, CI/CD, Grafana, performance +profiling

PROFESSIONAL EXPERIENCE

-

Staff Software Engineer (promoted from Senior) July 2024 - Present +

Staff Software Engineer Feb 2026 - Present +
Mozilla, Remote
Promoted for cross-team technical leadership and delivering multi-platform privacy features.

+ + +

Senior Software Engineer Jun 2024 - Jan 2026
Mozilla, Remote

-

Senior Systems Engineer, Team Lead 2023 - 2024 +

Led “Rusty Fridays” sessions (6–10 engineers per session), building internal Rust knowledge across + teams

+

Technical Editor, “From C to Rust” Feb 2026 - Present
Toposware, Remote
Core team of 4 building a peer-to-peer distributed network protocol from scratch in Rust.

+class="newline" />Manning Publications (Contract, Part-time)
Reviewing technical accuracy and pedagogical quality for Manning’s C-to-Rust migration guide. +

Senior Systems Engineer, Team Lead Apr 2023 - Jun 2024 +
Toposware (acquired by Polygon Labs), Remote
Core team of 4 building a peer-to-peer distributed network protocol from scratch in Rust. Our core implementation +of the double echo protocol and the Ethereum bridge became part of the Polygon stack after acquisition. +

-

Senior Software Engineer 2022 - 2023 +

Led the internal benchmarking initiative that changed where the team focused optimization effort

+

Senior Software Engineer Aug 2022 - Feb 2023
Centrifuge, Remote
Protocol team building DeFi applications on Substrate/Polkadot in Rust.

+class="newline" />Protocol team building DeFi infrastructure on Substrate/Polkadot in Rust.

-

Author, “Rust Web Development” 2020 - 2022 +

Author, “Rust Web Development” Oct 2020 - Dec 2022
Manning Publications
Published end-to-end guide covering async Rust, web frameworks, and production deployment. -

Sr. Solutions Architect (promoted from SA) 2020 - 2022 +class="newline" />Wrote and published an end-to-end guide covering async Rust, web frameworks, and production deployment. +

Sr. Solutions Architect (promoted from SA) Jun 2020 - Jul 2022
Twilio Inc., Remote

- -

Systems Engineer 2019 - 2020 +

Created reusable engagement playbooks adopted across the EMEA Professional Services team

+

Systems Engineer, Core Backend Aug 2019 - May 2020
Kraken Digital Currency Exchange, Remote

+class="newline" />Kraken Digital Asset Exchange, Remote
Part of the first Rust team rewriting Kraken’s core infrastructure from PHP.

-

Earlier Career 2014 - 2019 +

Shipped the first version of the automated KYC verification flow, replacing manual processing right as + COVID drove a massive spike in new customer sign-ups

+

Earlier Career 2013 - 2019
Sr. Software Engineer across enterprise clients (OSRAM, Körber Digital, GIATA, Avenga) and startups (Dalia -Research, blogfoster, smartB) in Berlin.

+class="newline" />Sr. Software Engineer (freelance from 2016) across enterprise clients (OSRAM, Körber Digital, GIATA, Avenga) and +startups (Dalia Research, blogfoster, smartB) in Berlin.

+

Decomposed GIATA’s monolithic PHP system into 6 Docker-based services, taught the existing team + Scrum and JavaScript +

+
  • +

    Contributed to the Rust compiler and standard library during a self-directed sabbatical (2019)

  • +

    Technical Writer 2008 - 2020 +
    Freelance (Contract)
    13 years writing for technical publications including c’t, iX, Macwelt (IDG/Heise), and tech blogs +(LogRocket, stadt-bremerhaven.de, mobilegeeks.de). Also authored “OS X für Einsteiger” (Bookboon, +2012). +

    EDUCATION

    -

    Bachelor of Science, Computer Science
    TH Ingolstadt – Scholarship from Allianz Deutschland AG (fully funded) +

    Bachelor of Science, Computer Science Mar 2014 +
    TH Ingolstadt. Scholarship from Allianz Deutschland AG (fully funded dual-study program, 2010–2014)

    diff --git a/resume.4ct b/resume.4ct index 84a4e43..4be78c1 100644 --- a/resume.4ct +++ b/resume.4ct @@ -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-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-40000}{QQ2-1-4}{\centerline {EDUCATION}}}{3}\relax +\doTocEntry\tocsection{0}{\csname a:TocLink\endcsname{1}{x1-40000}{QQ2-1-4}{\centerline {EDUCATION}}}{4}\relax \par diff --git a/resume.4tc b/resume.4tc index 5ad2690..c7ff6a1 100644 --- a/resume.4tc +++ b/resume.4tc @@ -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-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-40000}{QQ2-1-4}{\centerline {EDUCATION}}}{3}\relax +\doTocEntry\tocsection{0}{\csname a:TocLink\endcsname{1}{x1-40000}{QQ2-1-4}{\centerline {EDUCATION}}}{4}\relax diff --git a/resume.dvi b/resume.dvi index c982761..68a3b07 100644 Binary files a/resume.dvi and b/resume.dvi differ diff --git a/resume.idv b/resume.idv index 90994a7..1447bcc 100644 Binary files a/resume.idv and b/resume.idv differ diff --git a/resume.log b/resume.log index 348a135..0fed124 100644 --- a/resume.log +++ b/resume.log @@ -1,4 +1,4 @@ -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 +This is pdfTeX, Version 3.141592653-2.6-1.40.29 (TeX Live 2026/Arch Linux) (preloaded format=latex 2026.3.10) 17 MAR 2026 07:46 entering extended mode restricted \write18 enabled. %&-line parsing enabled. @@ -12,9 +12,9 @@ ut resume.tex (./resume.tex (./res.cls Document Style `res' <26 Sep 89>. Document Class: res 2000/05/19 v1.4b Resume class -(/usr/local/texlive/2026basic/texmf-dist/tex/latex/base/article.cls +(/usr/share/texmf-dist/tex/latex/base/article.cls Document Class: article 2025/01/22 v1.4n Standard LaTeX document class -(/usr/local/texlive/2026basic/texmf-dist/tex/latex/base/size10.clo +(/usr/share/texmf-dist/tex/latex/base/size10.clo File: size10.clo 2025/01/22 v1.4n Standard LaTeX file (size option) ) \c@part=\count275 @@ -41,7 +41,7 @@ No auxiliary output files. \resumewidth=\dimen150 \@columnwidth=\dimen151 \c@numberofcolumns=\count283 -) (/usr/local/texlive/2026basic/texmf-dist/tex/generic/tex4ht/tex4ht.sty +) (/usr/share/texmf-dist/tex/generic/tex4ht/tex4ht.sty version 2025-12-14-13:41 Package: tex4ht -------------------------------------- @@ -52,18 +52,17 @@ Package: tex4ht -------------------------------------- \tmp:toks=\toks22 ) -(/usr/local/texlive/2026basic/texmf-dist/tex/generic/tex4ht/usepackage.4ht +(/usr/share/texmf-dist/tex/generic/tex4ht/usepackage.4ht version 2025-08-27-10:30 ) -(/usr/local/texlive/2026basic/texmf-dist/tex/latex/psnfss/helvet.sty +(/usr/share/texmf-dist/tex/latex/psnfss/helvet.sty Package: helvet 2020/03/25 PSNFSS-v9.3 (WaS) -(/usr/local/texlive/2026basic/texmf-dist/tex/latex/graphics/keyval.sty +(/usr/share/texmf-dist/tex/latex/graphics/keyval.sty Package: keyval 2022/05/29 v1.15 key=value parser (DPC) \KV@toks@=\toks23 -)) -(./resume.cfg -(/usr/local/texlive/2026basic/texmf-dist/tex/generic/tex4ht/tex4ht.4ht +)) (./resume.cfg +(/usr/share/texmf-dist/tex/generic/tex4ht/tex4ht.4ht version 2025-07-09-13:35 -------------------------------------- --- Note --- for additional information, use the command line option `info' @@ -72,7 +71,7 @@ version 2025-07-09-13:35 :::::::::::::::::::::::::::::::::::::::::: TeX4ht info is available in the log file :::::::::::::::::::::::::::::::::::::::::: -) (/usr/local/texlive/2026basic/texmf-dist/tex/generic/tex4ht/tex4ht.sty +) (/usr/share/texmf-dist/tex/generic/tex4ht/tex4ht.sty version 2025-12-14-13:41 l.882 --- TeX4ht warning --- nonprimitive \everypar --- @@ -87,7 +86,7 @@ l.882 --- TeX4ht warning --- nonprimitive \everypar --- \openout3 = `resume.xref'. -(/usr/local/texlive/2026basic/texmf-dist/tex/generic/tex4ht/html4.4ht +(/usr/share/texmf-dist/tex/generic/tex4ht/html4.4ht version 2026-01-04-08:10 -------------------------------------- --- Note --- to remove the processing instruction use the c @@ -98,13 +97,13 @@ ommand line option `no-VERSION' DOCTYPE' -------------------------------------- ) -(/usr/local/texlive/2026basic/texmf-dist/tex/generic/tex4ht/unicode.4ht +(/usr/share/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 +(/usr/share/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 +(/usr/share/texmf-dist/tex/generic/tex4ht/html5.4ht version 2026-01-18-07:06 ) -------------------------------------- @@ -124,7 +123,7 @@ version 2026-01-18-07:06 --- Note --- for ^ of catcode 13, use the command line option `^13' -------------------------------------- -(/usr/local/texlive/2026basic/texmf-dist/tex/generic/tex4ht/html4.4ht +(/usr/share/texmf-dist/tex/generic/tex4ht/html4.4ht version 2026-01-04-08:10 -------------------------------------- --- Note --- for alternative charset, use the command line option `charset=...' @@ -174,13 +173,13 @@ TeX4ht package options: html5,html,xhtml on `imgdir:.../' -------------------------------------- ) -(/usr/local/texlive/2026basic/texmf-dist/tex/generic/tex4ht/unicode.4ht +(/usr/share/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 +(/usr/share/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 +(/usr/share/texmf-dist/tex/generic/tex4ht/html5.4ht version 2026-01-18-07:06 -------------------------------------- --- Note --- To print a timestamp, use the command line option timestamp @@ -204,21 +203,20 @@ o use custom a CSS design \:tocout=\write4 \openout4 = `resume.4tc'. - -(resume.4tc) -(/usr/local/texlive/2026basic/texmf-dist/tex/generic/tex4ht/html4.4ht + (resume.4tc) +(/usr/share/texmf-dist/tex/generic/tex4ht/html4.4ht version 2026-01-04-08:10 ) -(/usr/local/texlive/2026basic/texmf-dist/tex/generic/tex4ht/unicode.4ht +(/usr/share/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 +(/usr/share/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 +(/usr/share/texmf-dist/tex/generic/tex4ht/html5.4ht version 2026-01-18-07:06 ) -(/usr/local/texlive/2026basic/texmf-dist/tex/generic/tex4ht/latex.4ht +(/usr/share/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. @@ -233,19 +231,19 @@ LaTeX Info: Redefining \> on input line 848. ine option `refcaption' -------------------------------------- -(/usr/local/texlive/2026basic/texmf-dist/tex/generic/tex4ht/html4.4ht +(/usr/share/texmf-dist/tex/generic/tex4ht/html4.4ht version 2026-01-04-08:10 ) -(/usr/local/texlive/2026basic/texmf-dist/tex/generic/tex4ht/unicode.4ht +(/usr/share/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 +(/usr/share/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 +(/usr/share/texmf-dist/tex/generic/tex4ht/html5.4ht version 2026-01-18-07:06 ) -(/usr/local/texlive/2026basic/texmf-dist/tex/generic/tex4ht/html4.4ht +(/usr/share/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 @@ -293,10 +291,10 @@ 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 +(/usr/share/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 +(/usr/share/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' @@ -317,31 +315,31 @@ 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 +(/usr/share/texmf-dist/tex/generic/tex4ht/html5.4ht version 2026-01-18-07:06 )) -(/usr/local/texlive/2026basic/texmf-dist/tex/generic/tex4ht/fontmath.4ht +(/usr/share/texmf-dist/tex/generic/tex4ht/fontmath.4ht version 2022-10-25-13:59 -(/usr/local/texlive/2026basic/texmf-dist/tex/generic/tex4ht/html4.4ht +(/usr/share/texmf-dist/tex/generic/tex4ht/html4.4ht version 2026-01-04-08:10 ) -(/usr/local/texlive/2026basic/texmf-dist/tex/generic/tex4ht/unicode.4ht +(/usr/share/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 +(/usr/share/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 +(/usr/share/texmf-dist/tex/generic/tex4ht/html5.4ht version 2026-01-18-07:06 )) -(/usr/local/texlive/2026basic/texmf-dist/tex/generic/tex4ht/res.4ht +(/usr/share/texmf-dist/tex/generic/tex4ht/res.4ht version 2009-05-21-09:32 ) -(/usr/local/texlive/2026basic/texmf-dist/tex/generic/tex4ht/article.4ht +(/usr/share/texmf-dist/tex/generic/tex4ht/article.4ht version 2023-04-10-13:46 -(/usr/local/texlive/2026basic/texmf-dist/tex/generic/tex4ht/html4.4ht +(/usr/share/texmf-dist/tex/generic/tex4ht/html4.4ht version 2026-01-04-08:10 -------------------------------------- --- Note --- for automatic sectioning pagination, use the command line option ` @@ -356,44 +354,43 @@ option `sec-filename' index=2) -------------------------------------- ) -(/usr/local/texlive/2026basic/texmf-dist/tex/generic/tex4ht/unicode.4ht +(/usr/share/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 +(/usr/share/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 +(/usr/share/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 +(/usr/share/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 +(/usr/share/texmf-dist/tex/generic/tex4ht/html4.4ht version 2026-01-04-08:10 ) -(/usr/local/texlive/2026basic/texmf-dist/tex/generic/tex4ht/unicode.4ht +(/usr/share/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 +(/usr/share/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 +(/usr/share/texmf-dist/tex/generic/tex4ht/html5.4ht version 2026-01-18-07:06 )) -(/usr/local/texlive/2026basic/texmf-dist/tex/generic/tex4ht/html4.4ht +(/usr/share/texmf-dist/tex/generic/tex4ht/html4.4ht version 2026-01-04-08:10 ) -(/usr/local/texlive/2026basic/texmf-dist/tex/generic/tex4ht/unicode.4ht +(/usr/share/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 +(/usr/share/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 +(/usr/share/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 +(/usr/share/texmf-dist/tex/latex/l3backend/l3backend-dvips.def File: l3backend-dvips.def 2025-10-09 L3 backend support: dvips \l__pdfannot_backend_content_box=\box53 \l__pdfannot_backend_model_box=\box54 @@ -428,19 +425,19 @@ LaTeX Font Info: External font `cmex10' loaded for size (Font) <5> on input line 46. [1 -] [2] [3] +] [2] [3] [4] *********** LaTeX2e <2025-11-01> L3 programming layer <2026-01-19> *********** ) Here is how much of TeX's memory you used: - 4481 strings out of 469007 - 58078 string characters out of 5454840 - 592612 words of memory out of 5000000 - 33137 multiletter control sequences out of 15000+600000 + 4481 strings out of 469516 + 56217 string characters out of 5470833 + 592327 words of memory out of 5000000 + 33094 multiletter control sequences out of 15000+600000 629490 words of font info for 46 fonts, out of 8000000 for 9000 - 319 hyphenation exceptions out of 8191 - 49i,8n,59p,828b,464s stack positions out of 10000i,1000n,20000p,200000b,200000s + 14 hyphenation exceptions out of 8191 + 49i,8n,59p,882b,464s stack positions out of 10000i,1000n,20000p,200000b,200000s -Output written on resume.dvi (3 pages, 26000 bytes). +Output written on resume.dvi (4 pages, 29120 bytes). diff --git a/resume.pdf b/resume.pdf index 2962ffd..b8c3c03 100644 Binary files a/resume.pdf and b/resume.pdf differ diff --git a/resume.tex b/resume.tex index 62ccc43..f0a9d32 100644 --- a/resume.tex +++ b/resume.tex @@ -52,7 +52,7 @@ \section{\centerline{SUMMARY}} \vspace{8pt} % Gap between title and text -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. +Staff Engineer at Mozilla, shipping Rust, C++, and Python to hundreds of millions of Firefox users across Desktop, Android, and iOS. Promoted for leading cross-team projects and getting complex, multi-platform features shipped. 12+ years of backend and systems work, published author (``Rust Web Development''), and 13 years of technical writing for outlets like c't and iX. %---------------------------------------------------------------------------------------- @@ -66,10 +66,9 @@ Staff Software Engineer at Mozilla, shipping Rust, C++, and Python to hundreds o \vspace{8pt} % Gap between title and text {\bf Languages:} Rust, C++, Python, TypeScript, Go \\ -{\bf Backend \& Systems:} Rust (Actix, Warp, Axum), Python (FastAPI), Node.js, async Rust, FFI/UniFFI \\ -{\bf Patterns:} REST, GraphQL, gRPC, distributed systems (P2P), microservices \\ -{\bf Infrastructure:} AWS, Google Cloud, Docker, Kubernetes, CI/CD, Grafana \\ -{\bf AI Tooling:} Claude Code, GitHub Copilot +{\bf Systems \& Backend:} async Rust (Axum, Actix), Python/FastAPI, Node.js, FFI/UniFFI, gRPC, REST \\ +{\bf Architecture:} distributed systems, P2P protocols, system design, cross-platform (Desktop/Android/iOS) \\ +{\bf Infrastructure \& Observability:} AWS, GCP, Docker, Kubernetes, CI/CD, Grafana, performance profiling %---------------------------------------------------------------------------------------- @@ -79,74 +78,98 @@ Staff Software Engineer at Mozilla, shipping Rust, C++, and Python to hundreds o % PROFESSIONAL EXPERIENCE SECTION %---------------------------------------------------------------------------------------- -\section{\centerline{PROFESSIONAL EXPERIENCE}} +\section{\centerline{PROFESSIONAL EXPERIENCE}} \vspace{8pt} % Gap between title and text -{\sl Staff Software Engineer (promoted from Senior)} \hfill July 2024 - Present \\ +{\sl Staff Software Engineer} \hfill Feb 2026 - Present \\ +Mozilla, Remote \\ +Promoted for cross-team technical leadership and delivering multi-platform privacy features. +\begin{itemize} \itemsep -2pt +\item Leading the Image Service project: replaced 3 fragile, duplicated favicon systems with a single GCS-backed API serving 4+ internal teams. Extended an existing Python/Airflow pipeline instead of building a new service, reducing maintenance burden across the board +\item Implemented Oblivious HTTP (OHTTP) in application-services (shared Rust component cross-compiled to Swift/Kotlin via UniFFI) and wrote the C++ integration for Firefox Desktop. Now live on Firefox iOS, Android, and Desktop, covering millions of users +\item Maintaining the Firefox Push notification service (Rust backend, 50k req/s, sub-200ms latency). Reduced memory footprint, added circuit breakers, built Grafana dashboards for observability +\end{itemize} + +{\sl Senior Software Engineer} \hfill Jun 2024 - Jan 2026 \\ Mozilla, Remote \\ \begin{itemize} \itemsep -2pt -\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 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 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 (Rust to Kotlin, Swift, Python, JavaScript) -\item Led ``Rusty Fridays'' internal education sessions, mentoring engineers across teams through Rust adoption +\item Core maintainer of Merino, the Python/FastAPI service powering Firefox Suggest. All search suggestions in Firefox route through Merino, which enriches and serves them in a privacy-preserving way +\item Code reviewer for UniFFI, Mozilla's multi-language bindings generator (Rust to Kotlin, Swift, Python, JavaScript) +\item Contributing directly to Firefox Desktop (mozilla-central): shipping Rust and C++ code +\item Led ``Rusty Fridays'' sessions (6--10 engineers per session), building internal Rust knowledge across teams \end{itemize} -{\sl Senior Systems Engineer, Team Lead} \hfill 2023 - 2024 \\ -Toposware, Remote \\ -Core team of 4 building a peer-to-peer distributed network protocol from scratch in Rust. -\begin{itemize} \itemsep -2pt -\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 that revealed nodes were compute-bound on crypto operations, not network-limited -- redirected optimization effort accordingly -\item Built an EVM bridge connecting external Ethereum-compatible chains to the core network -\end{itemize} - -{\sl Senior Software Engineer} \hfill 2022 - 2023 \\ -Centrifuge, Remote \\ -Protocol team building DeFi applications on Substrate/Polkadot in Rust. -\begin{itemize} \itemsep -2pt -\item Implemented on-chain fund pool mutations -- core feature for the lending protocol enabling live capital allocation adjustments -\item Replaced manual documentation with CI-driven auto-generation from Rust source -- eliminated persistent drift between code and public docs -\end{itemize} - -{\sl Author, ``Rust Web Development''} \hfill 2020 - 2022 \\ -Manning Publications \\ -Published end-to-end guide covering async Rust, web frameworks, and production deployment. +{\sl Technical Editor, ``From C to Rust''} \hfill Feb 2026 - Present \\ +Manning Publications (Contract, Part-time) \\ +Reviewing technical accuracy and pedagogical quality for Manning's C-to-Rust migration guide. \vspace{4pt} -{\sl Sr. Solutions Architect (promoted from SA)} \hfill 2020 - 2022 \\ +{\sl Senior Systems Engineer, Team Lead} \hfill Apr 2023 - Jun 2024 \\ +Toposware (acquired by Polygon Labs), Remote \\ +Core team of 4 building a peer-to-peer distributed network protocol from scratch in Rust. Our core implementation of the double echo protocol and the Ethereum bridge became part of the Polygon stack after acquisition. +\begin{itemize} \itemsep -2pt +\item Achieved 10x message throughput per node by profiling the actual bottleneck: optimized batch processing and serialization paths after discovering nodes were compute-bound on crypto operations, not network-limited +\item Built the EVM bridge connecting external Ethereum-compatible chains to the core network +\item Led the internal benchmarking initiative that changed where the team focused optimization effort +\end{itemize} + +{\sl Senior Software Engineer} \hfill Aug 2022 - Feb 2023 \\ +Centrifuge, Remote \\ +Protocol team building DeFi infrastructure on Substrate/Polkadot in Rust. +\begin{itemize} \itemsep -2pt +\item Implemented on-chain fund pool mutations, the core feature enabling live capital allocation adjustments in the lending protocol +\item Replaced manual documentation with CI-driven auto-generation from Rust source, eliminating persistent drift between code and public docs +\end{itemize} + +{\sl Author, ``Rust Web Development''} \hfill Oct 2020 - Dec 2022 \\ +Manning Publications \\ +Wrote and published an end-to-end guide covering async Rust, web frameworks, and production deployment. + +\vspace{4pt} + +{\sl Sr. Solutions Architect (promoted from SA)} \hfill Jun 2020 - Jul 2022 \\ Twilio Inc., Remote \\ \begin{itemize} \itemsep -2pt -\item Technical lead for Fortune 500 engagements: debugged latency issues, redesigned messaging flows, advised on architectures matching client team size and resources +\item Technical lead for Fortune 500 professional services engagements: diagnosed latency issues, redesigned messaging architectures, delivered implementation roadmaps sized to each client's team and resources \item Created reusable engagement playbooks adopted across the EMEA Professional Services team \end{itemize} -{\sl Systems Engineer} \hfill 2019 - 2020 \\ -Kraken Digital Currency Exchange, Remote \\ +{\sl Systems Engineer, Core Backend} \hfill Aug 2019 - May 2020 \\ +Kraken Digital Asset Exchange, Remote \\ +Part of the first Rust team rewriting Kraken's core infrastructure from PHP. \begin{itemize} \itemsep -2pt -\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 Worked directly with the CTO on privacy-focused architectural decisions for the trading platform +\item Rewrote core banking services and API gateway in Rust, replacing legacy PHP services. The new stack handled significantly higher throughput with a smaller hardware footprint +\item Shipped the first version of the automated KYC verification flow, replacing manual processing right as COVID drove a massive spike in new customer sign-ups \end{itemize} \vspace{4pt} -{\sl Earlier Career} \hfill 2014 - 2019 \\ -Sr. Software Engineer across enterprise clients (OSRAM, K\"orber Digital, GIATA, Avenga) and startups (Dalia Research, blogfoster, smartB) in Berlin. +{\sl Earlier Career} \hfill 2013 - 2019 \\ +Sr. Software Engineer (freelance from 2016) across enterprise clients (OSRAM, K\"orber Digital, GIATA, Avenga) and startups (Dalia Research, blogfoster, smartB) in Berlin. \begin{itemize} \itemsep -2pt -\item Founded ``Rust \& Tell Berlin'' meetup -- grew it into the largest Rust meetup globally, still running years later +\item Founded ``Rust \& Tell Berlin'' meetup, grew it into the largest Rust meetup globally. Coordinated with companies for venue sponsorship, organized speakers, photographers, and videographers. Gave talks and created a welcoming space for the Rust community \item Designed IoT authentication infrastructure at OSRAM for thousands of connected devices (Node.js, Go, Lua) -\item First engineering hire at K\"orber Digital: built real-time sensor data pipelines on AWS -\item Decomposed GIATA's monolithic ERP into 6 Docker-based microservices, improving system scalability +\item First engineering hire at K\"orber Digital: built real-time sensor data pipelines on AWS (Lambda, ECS, Route53) +\item Decomposed GIATA's monolithic PHP system into 6 Docker-based services, taught the existing team Scrum and JavaScript +\item Contributed to the Rust compiler and standard library during a self-directed sabbatical (2019) \end{itemize} -\section{\centerline{EDUCATION}} +{\sl Technical Writer} \hfill 2008 - 2020 \\ +Freelance (Contract) \\ +13 years writing for technical publications including c't, iX, Macwelt (IDG/Heise), and tech blogs (LogRocket, stadt-bremerhaven.de, mobilegeeks.de). Also authored ``OS X f\"ur Einsteiger'' (Bookboon, 2012). + +%---------------------------------------------------------------------------------------- + +\vspace{0.2in} % Some whitespace between sections + +\section{\centerline{EDUCATION}} \vspace{8pt} % Gap between title and text -{\sl Bachelor of Science, Computer Science} \\ -TH Ingolstadt -- Scholarship from Allianz Deutschland AG (fully funded) +{\sl Bachelor of Science, Computer Science} \hfill Mar 2014 \\ +TH Ingolstadt. Scholarship from Allianz Deutschland AG (fully funded dual-study program, 2010--2014) diff --git a/resume.xref b/resume.xref index 5ae92bc..4b4fdc8 100644 --- a/resume.xref +++ b/resume.xref @@ -5,4 +5,4 @@ \:CrossWord{)Qx1-10000}{1}{1}% \:CrossWord{)Qx1-20000}{1}{1}% \:CrossWord{)Qx1-30000}{1}{1}% -\:CrossWord{)Qx1-40000}{1}{3}% +\:CrossWord{)Qx1-40000}{1}{4}%