diff --git a/Makefile b/Makefile index 1cc709c..5610e10 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 (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 + perl -0pi -e 's|||; s||Bastian Gruber - CV|' resume.html + perl -0pi -e 's|linkedin.com/in/bastiangruber|linkedin.com/in/bastiangruber|g' resume.html + perl -0pi -e 's|rustwebdevelopment.com|rustwebdevelopment.com|g' resume.html + perl -0pi -e 's|gruberbastian\@me\.com|gruberbastian\@me.com|g' resume.html + perl -0pi -e 's|github.com/gruberb|github.com/gruberb|g' resume.html + perl -0pi -e 's|code.novanexus.ca/gruberb|code.novanexus.ca/gruberb|g' resume.html + perl -0pi -e 's|bastiangruber.ca|bastiangruber.ca|g' resume.html + perl -0pi -e 's|Mozilla, Remote|Mozilla, Remote|g' resume.html + perl -0pi -e 's|Toposware \(acquired by Polygon Labs\), Remote|Toposware (acquired by Polygon Labs), Remote|g' resume.html + perl -0pi -e 's|Centrifuge, Remote|Centrifuge, Remote|g' resume.html + perl -0pi -e 's|Manning Publications|Manning Publications|g' resume.html + perl -0pi -e 's|Twilio Inc\., Remote|Twilio Inc., Remote|g' resume.html + perl -0pi -e 's|Kraken Digital Asset Exchange, Remote|Kraken Digital Asset Exchange, Remote|g' resume.html + perl -0pi -e 's|TH Ingolstadt|TH Ingolstadt|g' resume.html + perl -0pi -e 's|OSRAM|OSRAM|g' resume.html + perl -0pi -e 's|GIATA|GIATA|g' resume.html + perl -0pi -e 's|Avenga|Avenga|g' resume.html mv resume.html index.html pdf: resume.pdf diff --git a/index.html b/index.html index b06d6e6..d576397 100644 --- a/index.html +++ b/index.html @@ -54,15 +54,16 @@ class="td00">Git: code.novanexus.ca/

SUMMARY

-

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

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 across distributed services, +Kubernetes-based infrastructure, and production operations; published Rust author and long-time technical +writer.

SKILLS

-

Languages: Rust, C++, Python, TypeScript, Go
Systems & Backend: async Rust (Axum, Actix), Python/FastAPI, Node.js, FFI/UniFFI, gRPC, REST @@ -77,141 +78,141 @@ profiling

PROFESSIONAL EXPERIENCE

-

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

+

Maintaining the Firefox Push notification service (Rust backend on Kubernetes, 50k req/s, sub-200ms + latency). Reduced memory footprint, added circuit breakers, built Grafana dashboards for observability

-

Senior Software Engineer Jun 2024 - Jan 2026
Mozilla, Remote

-

Technical Editor, “From C to Rust” Feb 2026 - Present
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. -

+class="newline" />Core team of 4 building a peer-to-peer distributed network protocol from scratch in Rust, with Kubernetes-based +deployment and benchmarking environments. Our core implementation of the double echo protocol and the +Ethereum bridge became part of the Polygon stack after acquisition.

-

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 infrastructure on Substrate/Polkadot in Rust.

-

Author, “Rust Web Development” Oct 2020 - Dec 2022
Manning Publications
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

-

Created reusable engagement playbooks adopted across the EMEA Professional Services team

+

Systems Engineer, Core Backend Aug 2019 - May 2020
Kraken Digital Asset Exchange, Remote
Part of the first Rust team rewriting Kraken’s core infrastructure from PHP.

-

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

-

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’

EDUCATION

-

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.dvi b/resume.dvi index 68a3b07..819704d 100644 Binary files a/resume.dvi and b/resume.dvi differ diff --git a/resume.idv b/resume.idv index 1447bcc..b709789 100644 Binary files a/resume.idv and b/resume.idv differ diff --git a/resume.log b/resume.log index 0fed124..bad2193 100644 --- a/resume.log +++ b/resume.log @@ -1,20 +1,17 @@ -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 +This is pdfTeX, Version 3.141592653-2.6-1.40.29 (TeX Live 2026) (preloaded format=pdflatex 2026.3.1) 24 APR 2026 14:21 entering extended mode restricted \write18 enabled. %&-line parsing enabled. -**\makeatletter\def\HCode{\futurelet\HCode\HChar}\def\HChar{\ifx"\HCode\def\HCo -de"##1"{\Link##1}\expandafter\HCode\else\expandafter\Link\fi}\def\Link#1.a.b.c. -{\g@addto@macro\@documentclasshook{\RequirePackage[#1,html]{tex4ht}}\let\HCode\ -documentstyle\def\documentstyle{\let\documentstyle\HCode\expandafter\def\csname - 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 +**resume.tex +(./resume.tex +LaTeX2e <2025-11-01> +L3 programming layer <2026-01-19> +(./res.cls Document Style `res' <26 Sep 89>. Document Class: res 2000/05/19 v1.4b Resume class -(/usr/share/texmf-dist/tex/latex/base/article.cls +(/usr/local/texlive/2026basic/texmf-dist/tex/latex/base/article.cls Document Class: article 2025/01/22 v1.4n Standard LaTeX document class -(/usr/share/texmf-dist/tex/latex/base/size10.clo +(/usr/local/texlive/2026basic/texmf-dist/tex/latex/base/size10.clo File: size10.clo 2025/01/22 v1.4n Standard LaTeX file (size option) ) \c@part=\count275 @@ -41,403 +38,86 @@ No auxiliary output files. \resumewidth=\dimen150 \@columnwidth=\dimen151 \c@numberofcolumns=\count283 -) (/usr/share/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/share/texmf-dist/tex/generic/tex4ht/usepackage.4ht -version 2025-08-27-10:30 -) -(/usr/share/texmf-dist/tex/latex/psnfss/helvet.sty +) (/usr/local/texlive/2026basic/texmf-dist/tex/latex/psnfss/helvet.sty Package: helvet 2020/03/25 PSNFSS-v9.3 (WaS) -(/usr/share/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) -\KV@toks@=\toks23 -)) (./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' --------------------------------------- - -:::::::::::::::::::::::::::::::::::::::::: - TeX4ht info is available in the log file -:::::::::::::::::::::::::::::::::::::::::: -) (/usr/share/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/share/texmf-dist/tex/generic/tex4ht/html4.4ht -version 2026-01-04-08:10 --------------------------------------- ---- Note --- to remove the processing instruction use the c -ommand line option `no-VERSION' --------------------------------------- --------------------------------------- ---- Note --- to remove the DOCTYPE declaration use the command line option `no- -DOCTYPE' --------------------------------------- -) -(/usr/share/texmf-dist/tex/generic/tex4ht/unicode.4ht -version 2026-01-04-08:10 -) -(/usr/share/texmf-dist/tex/generic/tex4ht/html4-math.4ht -version 2026-01-29-13:49 -) -(/usr/share/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/share/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/share/texmf-dist/tex/generic/tex4ht/unicode.4ht -version 2026-01-04-08:10 -) -(/usr/share/texmf-dist/tex/generic/tex4ht/html4-math.4ht -version 2026-01-29-13:49 -) -(/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 --------------------------------------- --------------------------------------- ---- 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/share/texmf-dist/tex/generic/tex4ht/html4.4ht -version 2026-01-04-08:10 -) -(/usr/share/texmf-dist/tex/generic/tex4ht/unicode.4ht -version 2026-01-04-08:10 -) -(/usr/share/texmf-dist/tex/generic/tex4ht/html4-math.4ht -version 2026-01-29-13:49 -) -(/usr/share/texmf-dist/tex/generic/tex4ht/html5.4ht -version 2026-01-18-07:06 -) -(/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. -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/share/texmf-dist/tex/generic/tex4ht/html4.4ht -version 2026-01-04-08:10 -) -(/usr/share/texmf-dist/tex/generic/tex4ht/unicode.4ht -version 2026-01-04-08:10 -) -(/usr/share/texmf-dist/tex/generic/tex4ht/html4-math.4ht -version 2026-01-29-13:49 -) -(/usr/share/texmf-dist/tex/generic/tex4ht/html5.4ht -version 2026-01-18-07:06 -) -(/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 -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/share/texmf-dist/tex/generic/tex4ht/unicode.4ht -version 2026-01-04-08:10 -) -(/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' - --------------------------------------- --------------------------------------- ---- 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/share/texmf-dist/tex/generic/tex4ht/html5.4ht -version 2026-01-18-07:06 +\KV@toks@=\toks22 )) -(/usr/share/texmf-dist/tex/generic/tex4ht/fontmath.4ht -version 2022-10-25-13:59 - -(/usr/share/texmf-dist/tex/generic/tex4ht/html4.4ht -version 2026-01-04-08:10 -) -(/usr/share/texmf-dist/tex/generic/tex4ht/unicode.4ht -version 2026-01-04-08:10 -) -(/usr/share/texmf-dist/tex/generic/tex4ht/html4-math.4ht -version 2026-01-29-13:49 -) -(/usr/share/texmf-dist/tex/generic/tex4ht/html5.4ht -version 2026-01-18-07:06 -)) -(/usr/share/texmf-dist/tex/generic/tex4ht/res.4ht -version 2009-05-21-09:32 -) -(/usr/share/texmf-dist/tex/generic/tex4ht/article.4ht -version 2023-04-10-13:46 - -(/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 ` -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/share/texmf-dist/tex/generic/tex4ht/unicode.4ht -version 2026-01-04-08:10 -) -(/usr/share/texmf-dist/tex/generic/tex4ht/html4-math.4ht -version 2026-01-29-13:49 -) -(/usr/share/texmf-dist/tex/generic/tex4ht/html5.4ht -version 2026-01-18-07:06 -)) -(/usr/share/texmf-dist/tex/generic/tex4ht/res-a.4ht -version 2009-05-21-09:32 - -(/usr/share/texmf-dist/tex/generic/tex4ht/html4.4ht -version 2026-01-04-08:10 -) -(/usr/share/texmf-dist/tex/generic/tex4ht/unicode.4ht -version 2026-01-04-08:10 -) -(/usr/share/texmf-dist/tex/generic/tex4ht/html4-math.4ht -version 2026-01-29-13:49 -) -(/usr/share/texmf-dist/tex/generic/tex4ht/html5.4ht -version 2026-01-18-07:06 -)) -(/usr/share/texmf-dist/tex/generic/tex4ht/html4.4ht -version 2026-01-04-08:10 -) -(/usr/share/texmf-dist/tex/generic/tex4ht/unicode.4ht -version 2026-01-04-08:10 -) -(/usr/share/texmf-dist/tex/generic/tex4ht/html4-math.4ht -version 2026-01-29-13:49 -) -(/usr/share/texmf-dist/tex/generic/tex4ht/html5.4ht -version 2026-01-18-07:06 -)) -(/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 -\g__pdfannot_backend_int=\count285 -\g__pdfannot_backend_link_int=\count286 -\g__pdfannot_backend_link_sf_int=\count287 +(/usr/local/texlive/2026basic/texmf-dist/tex/latex/l3backend/l3backend-pdftex.d +ef +File: l3backend-pdftex.def 2025-10-09 L3 backend support: PDF output (pdfTeX) +\l__color_backend_stack_int=\count284 ) LaTeX Warning: Unused global option(s): [10pt]. No file resume.aux. -LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 2. -LaTeX Font Info: ... okay on input line 2. -LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 2. -LaTeX Font Info: ... okay on input line 2. -LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 2. -LaTeX Font Info: ... okay on input line 2. -LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 2. -LaTeX Font Info: ... okay on input line 2. -LaTeX Font Info: Checking defaults for TS1/cmr/m/n on input line 2. -LaTeX Font Info: ... okay on input line 2. -LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 2. -LaTeX Font Info: ... okay on input line 2. -LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 2. -LaTeX Font Info: ... okay on input line 2. ---- file resume.css --- -) +LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 35. +LaTeX Font Info: ... okay on input line 35. +LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 35. +LaTeX Font Info: ... okay on input line 35. +LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 35. +LaTeX Font Info: ... okay on input line 35. +LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 35. +LaTeX Font Info: ... okay on input line 35. +LaTeX Font Info: Checking defaults for TS1/cmr/m/n on input line 35. +LaTeX Font Info: ... okay on input line 35. +LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 35. +LaTeX Font Info: ... okay on input line 35. +LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 35. +LaTeX Font Info: ... okay on input line 35. LaTeX Font Info: External font `cmex10' loaded for size -(Font) <7> on input line 46. +(Font) <7> on input line 51. LaTeX Font Info: External font `cmex10' loaded for size -(Font) <5> on input line 46. - [1 +(Font) <5> on input line 51. -] [2] [3] [4] +Overfull \hbox (3.9103pt too wide) in paragraph at lines 95--96 +[]\OT1/cmr/m/n/10 Implemented Obliv-i-ous HTTP (OHTTP) in application-services +(shared Rust com-po-nent cross-compiled + [] + + +Underfull \hbox (badness 10000) in paragraph at lines 99--101 + + [] + +[1 + + +Non-PDF special ignored! + papersize=210mm,297mm +{/usr/local/texlive/2026basic/texmf-var/fonts/map/pdftex/updmap/pdftex.map}] +Underfull \hbox (badness 10000) in paragraph at lines 137--139 + + [] + +[2] [3] *********** LaTeX2e <2025-11-01> L3 programming layer <2026-01-19> *********** ) Here is how much of TeX's memory you used: - 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 - 14 hyphenation exceptions out of 8191 - 49i,8n,59p,882b,464s stack positions out of 10000i,1000n,20000p,200000b,200000s + 599 strings out of 469006 + 10764 string characters out of 5454814 + 444756 words of memory out of 5000000 + 29364 multiletter control sequences out of 15000+600000 + 629322 words of font info for 45 fonts, out of 8000000 for 9000 + 319 hyphenation exceptions out of 8191 + 49i,8n,52p,440b,204s stack positions out of 10000i,1000n,20000p,200000b,200000s + +Output written on resume.pdf (3 pages, 77251 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 (4 pages, 29120 bytes). diff --git a/resume.md b/resume.md index bea126b..4e94af7 100644 --- a/resume.md +++ b/resume.md @@ -3,10 +3,121 @@ address: - | **Professional**\ LinkedIn: linkedin.com/in/bastiangruber\ - Project: rustwebdevelopment.com\ - E-Mail: gruberbastian@me.com + Book: rustwebdevelopment.com\ + E-Mail: gruberbastian@me.com\ + Website: bastiangruber.ca - | **Code**\ GitHub: github.com/gruberb\ + Git: code.novanexus.ca/gruberb --- +# Bastian Gruber + +## Summary + +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 across distributed services, Kubernetes-based infrastructure, and production operations; published Rust author and long-time technical writer. + +## Skills + +**Languages:** Rust, C++, Python, TypeScript, Go + +**Systems & Backend:** async Rust (Axum, Actix), Python/FastAPI, Node.js, FFI/UniFFI, gRPC, REST + +**Architecture:** distributed systems, P2P protocols, system design, cross-platform (Desktop/Android/iOS) + +**Infrastructure & Observability:** AWS, GCP, Docker, Kubernetes, CI/CD, Grafana, performance profiling + +## Professional Experience + +### Staff Software Engineer, Mozilla + +Feb 2026 - Present, Remote + +Promoted for cross-team technical leadership and delivering multi-platform privacy features. + +- 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 +- 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 +- Maintaining the Firefox Push notification service (Rust backend on Kubernetes, 50k req/s, sub-200ms latency). Reduced memory footprint, added circuit breakers, built Grafana dashboards for observability + +### Senior Software Engineer, Mozilla + +Jun 2024 - Jan 2026, Remote + +- Core maintainer of Merino, the Kubernetes-deployed Python/FastAPI service powering Firefox Suggest. All search suggestions in Firefox route through Merino, which enriches and serves them in a privacy-preserving way +- Code reviewer for UniFFI, Mozilla's multi-language bindings generator (Rust to Kotlin, Swift, Python, JavaScript) +- Contributing directly to Firefox Desktop (mozilla-central): shipping Rust and C++ code +- Led "Rusty Fridays" sessions (6-10 engineers per session), building internal Rust knowledge across teams + +### Technical Editor, "From C to Rust", Manning Publications + +Feb 2026 - Present, Contract, Part-time + +Reviewing technical accuracy and pedagogical quality for Manning's C-to-Rust migration guide. + +### Senior Systems Engineer, Team Lead, Toposware + +Apr 2023 - Jun 2024, Remote + +Core team of 4 building a peer-to-peer distributed network protocol from scratch in Rust, with Kubernetes-based deployment and benchmarking environments. Our core implementation of the double echo protocol and the Ethereum bridge became part of the Polygon stack after acquisition. + +- 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 +- Built the EVM bridge connecting external Ethereum-compatible chains to the core network +- Led the internal benchmarking initiative that changed where the team focused optimization effort + +### Senior Software Engineer, Centrifuge + +Aug 2022 - Feb 2023, Remote + +Protocol team building DeFi infrastructure on Substrate/Polkadot in Rust. + +- Implemented on-chain fund pool mutations, the core feature enabling live capital allocation adjustments in the lending protocol +- Replaced manual documentation with CI-driven auto-generation from Rust source, eliminating persistent drift between code and public docs + +### Author, "Rust Web Development", Manning Publications + +Oct 2020 - Dec 2022 + +Wrote and published an end-to-end guide covering async Rust, web frameworks, and production deployment. + +### Sr. Solutions Architect, Twilio Inc. + +Jun 2020 - Jul 2022, Remote + +- 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 +- Created reusable engagement playbooks adopted across the EMEA Professional Services team + +### Systems Engineer, Core Backend, Kraken Digital Asset Exchange + +Aug 2019 - May 2020, Remote + +Part of the first Rust team rewriting Kraken's core infrastructure from PHP. + +- 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 +- 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 (freelance from 2016) across enterprise clients (OSRAM, Koerber Digital, GIATA, Avenga) and startups (Dalia Research, blogfoster, smartB) in Berlin. + +- 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 +- Designed IoT authentication infrastructure at OSRAM for thousands of connected devices (Node.js, Go, Lua) +- First engineering hire at Koerber Digital: built real-time sensor data pipelines and cloud service deployments on AWS (Lambda, ECS, Route53, Kubernetes) +- 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, Freelance + +2008 - 2020, 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 fuer Einsteiger" (Bookboon, 2012). + +## Education + +### 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.pdf b/resume.pdf index b8c3c03..34fea59 100644 Binary files a/resume.pdf and b/resume.pdf differ diff --git a/resume.tex b/resume.tex index f0a9d32..dc55b3c 100644 --- a/resume.tex +++ b/resume.tex @@ -21,6 +21,11 @@ %---------------------------------------------------------------------------------------- \documentclass[10pt]{res} % Use the res.cls style, the font size can be changed to 11pt or 12pt here +\special{papersize=210mm,297mm} +\ifx\pdfpagewidth\undefined\else + \pdfpagewidth=210mm + \pdfpageheight=297mm +\fi \usepackage{helvet} % Default font is the helvetica postscript font %\usepackage{newcent} % To change the default font to the new century schoolbook postscript font uncomment this line and comment the one above @@ -52,7 +57,7 @@ \section{\centerline{SUMMARY}} \vspace{8pt} % Gap between title and text -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. +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 across distributed services, Kubernetes-based infrastructure, and production operations; published Rust author and long-time technical writer. %---------------------------------------------------------------------------------------- @@ -88,13 +93,13 @@ Promoted for cross-team technical leadership and delivering multi-platform priva \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 +\item Maintaining the Firefox Push notification service (Rust backend on Kubernetes, 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 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 Core maintainer of Merino, the Kubernetes-deployed 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 @@ -108,7 +113,7 @@ Reviewing technical accuracy and pedagogical quality for Manning's C-to-Rust mig {\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. +Core team of 4 building a peer-to-peer distributed network protocol from scratch in Rust, with Kubernetes-based deployment and benchmarking environments. 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 @@ -151,7 +156,7 @@ Sr. Software Engineer (freelance from 2016) across enterprise clients (OSRAM, K\ \begin{itemize} \itemsep -2pt \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 (Lambda, ECS, Route53) +\item First engineering hire at K\"orber Digital: built real-time sensor data pipelines and cloud service deployments on AWS (Lambda, ECS, Route53, Kubernetes) \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} @@ -174,4 +179,4 @@ TH Ingolstadt. Scholarship from Allianz Deutschland AG (fully funded dual-study \end{resume} -\end{document} \ No newline at end of file +\end{document}