From 311d59a48303d2a3bd6b05d47d68fb4c0f82bfae Mon Sep 17 00:00:00 2001 From: Franck Cuny Date: Sun, 1 May 2022 13:31:35 -0700 Subject: initial commit --- users/fcuny/resume/.envrc | 1 + users/fcuny/resume/.gitignore | 1 + users/fcuny/resume/flake.lock | 26 +++++++++ users/fcuny/resume/flake.nix | 19 +++++++ users/fcuny/resume/readme.org | 40 +++++++++++++ users/fcuny/resume/styles/resume.css | 72 ++++++++++++++++++++++++ users/fcuny/resume/styles/resume.tex | 106 +++++++++++++++++++++++++++++++++++ 7 files changed, 265 insertions(+) create mode 100644 users/fcuny/resume/.envrc create mode 100644 users/fcuny/resume/.gitignore create mode 100644 users/fcuny/resume/flake.lock create mode 100644 users/fcuny/resume/flake.nix create mode 100644 users/fcuny/resume/readme.org create mode 100644 users/fcuny/resume/styles/resume.css create mode 100644 users/fcuny/resume/styles/resume.tex (limited to 'users/fcuny') diff --git a/users/fcuny/resume/.envrc b/users/fcuny/resume/.envrc new file mode 100644 index 0000000..3550a30 --- /dev/null +++ b/users/fcuny/resume/.envrc @@ -0,0 +1 @@ +use flake diff --git a/users/fcuny/resume/.gitignore b/users/fcuny/resume/.gitignore new file mode 100644 index 0000000..813f87f --- /dev/null +++ b/users/fcuny/resume/.gitignore @@ -0,0 +1 @@ +/resume.html diff --git a/users/fcuny/resume/flake.lock b/users/fcuny/resume/flake.lock new file mode 100644 index 0000000..415fb11 --- /dev/null +++ b/users/fcuny/resume/flake.lock @@ -0,0 +1,26 @@ +{ + "nodes": { + "nixpkgs": { + "locked": { + "lastModified": 1651421973, + "narHash": "sha256-8CyOOzFOOqOHs+BblCJpmXJVUr+uifaR2Wu6P1HM0CE=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "6d21b873f371b2ebff63a16cf9353309d96d8567", + "type": "github" + }, + "original": { + "owner": "nixos", + "repo": "nixpkgs", + "type": "github" + } + }, + "root": { + "inputs": { + "nixpkgs": "nixpkgs" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/users/fcuny/resume/flake.nix b/users/fcuny/resume/flake.nix new file mode 100644 index 0000000..eae54f3 --- /dev/null +++ b/users/fcuny/resume/flake.nix @@ -0,0 +1,19 @@ +{ + description = "Franck Cuny's resume"; + inputs = { nixpkgs.url = "github:nixos/nixpkgs"; }; + + outputs = { self, nixpkgs }: + let pkgs = nixpkgs.legacyPackages.x86_64-linux; + in { + defaultApp.x86_64-linux = self.publishHTML; + + publishHTML = pkgs.writers.writeBashBin "html" '' + set -e + set -o pipefail + pandoc --self-contained --css styles/resume.css --from org --to html --output resume.html readme.org + ''; + + devShell.x86_64-linux = + pkgs.mkShell { buildInputs = with pkgs; [ git pandoc ]; }; + }; +} diff --git a/users/fcuny/resume/readme.org b/users/fcuny/resume/readme.org new file mode 100644 index 0000000..d83db69 --- /dev/null +++ b/users/fcuny/resume/readme.org @@ -0,0 +1,40 @@ +#+TITLE: Franck Cuny +#+AUTHOR: [[mailto:franck@fcuny.net][franck@fcuny.net]] +#+OPTIONS: toc:nil num:nil title:nil timestamp:nil prop:nil + +I'm a seasoned Site Reliability Engineer with experience in large scale distributed systems. I'm invested in mentoring junior and senior engineers to help them increase their impact. I'm always looking to learn from those around me. + +*Specializations*: distributed systems, containerization, debugging, software development, reliability. + +* Experience +** Roblox, San Mateo +| Site Reliability Engineer | Principal (IC6) | SRE Group | Feb 2022 - to date | +I'm the Team Lead for the Site Reliability group that was started at the end of 2021. + +I'm defining the road-map and identify areas where SREs can partner with different team to improve overall reliability of our services. +** Twitter, San Francisco +*** Compute +| Software Engineer | Senior Staff | Compute Info | Aug 2021 - Jan 2022 | +| Site Reliability Engineer | Senior Staff | Compute SREs | Jan 2018 - Aug 2021 | +Initially the Tech Lead of a team of 6 SREs supporting the Compute infrastructure. In August 2021 I changed to be a Software Engineer and was leading one of the effort to adopt Kubernetes for our on-premise infrastructure. As a Tech Lead I helped define number of internal processes for the team, from on-call rotations to postmortem processes. + +Twitter's Compute is one of the largest Mesos cluster in the world (XXX thousands of nodes across multiple data centers). The team defined KPIs, improved automation to mange the large fleet of bare metal machines, defined APIs for maintenance with partner teams. + +In addition to supporting Aurora/Mesos, I also lead a number of effort related to Kubernetes, both on-premise and in the cloud. + +Finally, I've helped Twitter save XX of millions of dollar in hardware by designing and implementing strategies to significantly improve the hardware utilization of our bare metal infrastructure. +*** Storage +| Site Reliability Engineer | Staff | Storage SREs | Aug 2014 - Jan 2018 | +For 4 years I supported the Messaging and Manhattan teams. I moved all the pub-sub systems from bare-metal deployment to Aurora/Mesos, being the first storage team to adopt the Compute orchestration platform. This helped reducing operations, time to deploy, and improve overall reliability. I pushed for adopting 10Gb+ networking in our data center to help our team to scale. I was the SRE Tech Lead for the Manhattan team, helping with performance, operation and automation. +** Senior Software Engineer - Say Media, San Francisco +| Software Engineer | Senior SWE | Infrastructure | Aug 2011 - Aug 2014 | +During my time at Say Media, I worked on two different teams. I started as a software engineer in the platform team building the various APIs; I then transitioned to the operation team, to develop tooling to increase the effectiveness of the engineering organization. +** Senior Software Engineer - Linkfluence, Paris +| Software Engineer | Senior SWE | Infrastructure | July 2007 - July 2011 | +I was one of the early engineers joining Linkfluence in 2007. I led the development of the company's crawler (web, feeds). I was responsible for defining the early architecture of the company, and designed the internal platforms (Service Oriented Architecture). +I helped the company to contribute to open source projects; contributed to open source projects on behalf of the company; represented the company at numerous open sources conferences in Europe. +* Technical Skills +- *Languages* Python, Go, Ruby, Perl +- *Frameworks* Kubernetes, Aurora, Mesos +- *Databases* RDBMS, NOSql +- *Dev tools* Git diff --git a/users/fcuny/resume/styles/resume.css b/users/fcuny/resume/styles/resume.css new file mode 100644 index 0000000..13ed9b3 --- /dev/null +++ b/users/fcuny/resume/styles/resume.css @@ -0,0 +1,72 @@ +body { + font-family: sans-serif; + font-size: 1em; + line-height: 1.8em; + color: #0e0e0b; + margin: 1em auto; + padding: 0 0.55em; + max-width: 50rem; +} + +h1 { + color: #0e0e0b; + font-size: 1.3rem; +} + +h2, h3 { + border-bottom: 1px solid #eee; + font-style: italic; +} +h2 { + margin-top: 1.25em; + margin-bottom: 0.41em; + font-size: 1.2rem; +} +h3 { + margin-top: 1.5em; + margin-bottom: 0.5em; + font-size: 1rem; +} + +hr{ + color:#000111; + background-color:#000111; + border:none; + height:1px +} + +a { + color:#047bc2; + transition:color .1s ease-in-out; +} + +table { + width: 100%; + border-spacing: 0px; + outline: none; +} +td{ + padding-right: 0.7em; +} +td:last-child { + text-align: right; +} +table, th, td { + font-family: monospace; + color: #000; +} + +#title-block-header { + padding-right: 10px; + font-size: 1.4em; + display: flex; + font-family: monospace; + justify-content: space-between; + align-items: center; + padding-top: 0.5rem; + border-bottom: 1px; +} + +#experience { + padding-top: 20px; +} diff --git a/users/fcuny/resume/styles/resume.tex b/users/fcuny/resume/styles/resume.tex new file mode 100644 index 0000000..6bbcf0b --- /dev/null +++ b/users/fcuny/resume/styles/resume.tex @@ -0,0 +1,106 @@ + +\startmode[*mkii] + \enableregime[utf-8] + \setupcolors[state=start] +\stopmode +$if(mainlang)$ +\mainlanguage[$mainlang$] +$endif$ + +\setupcolor[hex] +\definecolor[titlegrey][h=757575] +\definecolor[sectioncolor][h=397249] +\definecolor[rulecolor][h=9cb770] + +% Enable hyperlinks +\setupinteraction[state=start, color=sectioncolor] + +\setuppapersize [$if(papersize)$$papersize$$else$letter$endif$][$if(papersize)$$papersize$$else$letter$endif$] +\setuplayout [width=middle, height=middle, + backspace=20mm, cutspace=0mm, + topspace=10mm, bottomspace=20mm, + header=0mm, footer=0mm] + +%\setuppagenumbering[location={footer,center}] + +\setupbodyfont[11pt, helvetica] + +\setupwhitespace[medium] + +\setupblackrules[width=31mm, color=rulecolor] + +\setuphead[chapter] [style=\tfd] +\setuphead[section] [style=\tfd\bf, color=titlegrey, align=middle] +\setuphead[subsection] [style=\tfb\bf, color=sectioncolor, align=right, + before={\leavevmode\blackrule\hspace}] +\setuphead[subsubsection][style=\bf] + +$if(number-sections)$ +$else$ +\setuphead[chapter, section, subsection, subsubsection][number=no] +$endif$ + +%\setupdescriptions[width=10mm] + +\definedescription + [description] + [headstyle=bold, style=normal, + location=hanging, width=18mm, distance=14mm, margin=0cm] + +\setupitemize[autointro, packed] % prevent orphan list intro +\setupitemize[indentnext=no] + +\defineitemgroup[enumerate] +\setupenumerate[each][fit][itemalign=left,distance=.5em,style={\feature[+][default:tnum]}] + +\setupfloat[figure][default={here,nonumber}] +\setupfloat[table][default={here,nonumber}] + +\setuptables[textwidth=max, HL=none] +\setupxtable[frame=off,option={stretch,width}] + +\setupthinrules[width=15em] % width of horizontal rules + +\setupdelimitedtext + [blockquote] + [before={\setupalign[middle]}, + indentnext=no, + ] + +$if(toc)$ +\setupcombinedlist[content][list={$placelist$}] + +$endif$ +$for(header-includes)$ +$header-includes$ +$endfor$ + +\starttext +$if(title)$ +\startalignment[center] + \blank[2*big] + {\tfd $title$} +$if(author)$ + \blank[3*medium] + {\tfa $for(author)$$author$$sep$\crlf $endfor$} +$endif$ +$if(date)$ + \blank[2*medium] + {\tfa $date$} +$endif$ + \blank[3*medium] +\stopalignment +$endif$ +$for(include-before)$ +$include-before$ +$endfor$ +$if(toc)$ +\placecontent +$endif$ + +$body$ + +$for(include-after)$ +$include-after$ +$endfor$ +\stoptext -- cgit 1.4.1 From 3fdd3ad757000937ce5641d39baa14e1c6c6f8ec Mon Sep 17 00:00:00 2001 From: Franck Cuny Date: Sat, 7 May 2022 17:53:34 -0700 Subject: drone: add configuration --- users/fcuny/resume/.drone.yml | 8 ++++++++ users/fcuny/resume/flake.nix | 1 + 2 files changed, 9 insertions(+) create mode 100644 users/fcuny/resume/.drone.yml (limited to 'users/fcuny') diff --git a/users/fcuny/resume/.drone.yml b/users/fcuny/resume/.drone.yml new file mode 100644 index 0000000..9639cb1 --- /dev/null +++ b/users/fcuny/resume/.drone.yml @@ -0,0 +1,8 @@ +kind: pipeline +type: exec +name: default + +steps: +- name: build + commands: + - nix run .#publishHTML diff --git a/users/fcuny/resume/flake.nix b/users/fcuny/resume/flake.nix index eae54f3..476a981 100644 --- a/users/fcuny/resume/flake.nix +++ b/users/fcuny/resume/flake.nix @@ -7,6 +7,7 @@ in { defaultApp.x86_64-linux = self.publishHTML; + # run with `nix run .#publishHTML` publishHTML = pkgs.writers.writeBashBin "html" '' set -e set -o pipefail -- cgit 1.4.1 From 37bc4248220fe94d47772f974d80c58fc375bb16 Mon Sep 17 00:00:00 2001 From: Franck Cuny Date: Sat, 7 May 2022 18:18:35 -0700 Subject: simplify the build Running `nix build` is enough to generate the file `resume.html`. It will be created in the `result` directory automatically. The configuration for the build is also updated to run `nix build` --- users/fcuny/resume/.drone.yml | 3 ++- users/fcuny/resume/.gitignore | 1 + users/fcuny/resume/flake.lock | 16 ++++++++++++++++ users/fcuny/resume/flake.nix | 37 ++++++++++++++++++++++--------------- 4 files changed, 41 insertions(+), 16 deletions(-) (limited to 'users/fcuny') diff --git a/users/fcuny/resume/.drone.yml b/users/fcuny/resume/.drone.yml index 9639cb1..0cffea5 100644 --- a/users/fcuny/resume/.drone.yml +++ b/users/fcuny/resume/.drone.yml @@ -5,4 +5,5 @@ name: default steps: - name: build commands: - - nix run .#publishHTML + - nix build + - ls -l result/ diff --git a/users/fcuny/resume/.gitignore b/users/fcuny/resume/.gitignore index 813f87f..b61158c 100644 --- a/users/fcuny/resume/.gitignore +++ b/users/fcuny/resume/.gitignore @@ -1 +1,2 @@ /resume.html +/result diff --git a/users/fcuny/resume/flake.lock b/users/fcuny/resume/flake.lock index 415fb11..4e3cc98 100644 --- a/users/fcuny/resume/flake.lock +++ b/users/fcuny/resume/flake.lock @@ -1,5 +1,20 @@ { "nodes": { + "flake-utils": { + "locked": { + "lastModified": 1649676176, + "narHash": "sha256-OWKJratjt2RW151VUlJPRALb7OU2S5s+f0vLj4o1bHM=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "a4b154ebbdc88c8498a5c7b01589addc9e9cb678", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, "nixpkgs": { "locked": { "lastModified": 1651421973, @@ -17,6 +32,7 @@ }, "root": { "inputs": { + "flake-utils": "flake-utils", "nixpkgs": "nixpkgs" } } diff --git a/users/fcuny/resume/flake.nix b/users/fcuny/resume/flake.nix index 476a981..fbb2755 100644 --- a/users/fcuny/resume/flake.nix +++ b/users/fcuny/resume/flake.nix @@ -1,20 +1,27 @@ { description = "Franck Cuny's resume"; - inputs = { nixpkgs.url = "github:nixos/nixpkgs"; }; + inputs = { + nixpkgs.url = "github:nixos/nixpkgs"; + flake-utils.url = "github:numtide/flake-utils"; + }; - outputs = { self, nixpkgs }: - let pkgs = nixpkgs.legacyPackages.x86_64-linux; - in { - defaultApp.x86_64-linux = self.publishHTML; + outputs = { self, nixpkgs, flake-utils }: + flake-utils.lib.eachDefaultSystem (system: + let pkgs = nixpkgs.legacyPackages.${system}; + in { + defaultPackage = pkgs.stdenv.mkDerivation { + name = "resume"; + buildInputs = with pkgs; [ pandoc ]; + src = ./.; + buildPhase = '' + pandoc --self-contained --css styles/resume.css --from org --to html --output resume.html readme.org + ''; - # run with `nix run .#publishHTML` - publishHTML = pkgs.writers.writeBashBin "html" '' - set -e - set -o pipefail - pandoc --self-contained --css styles/resume.css --from org --to html --output resume.html readme.org - ''; - - devShell.x86_64-linux = - pkgs.mkShell { buildInputs = with pkgs; [ git pandoc ]; }; - }; + installPhase = '' + mkdir -p $out + cp resume.html $out/ + ''; + }; + devShell = pkgs.mkShell { buildInputs = with pkgs; [ git pandoc ]; }; + }); } -- cgit 1.4.1 From 60823f921b29034e1ad4ac25cdfa6b0c1134c0ed Mon Sep 17 00:00:00 2001 From: Franck Cuny Date: Fri, 13 May 2022 20:02:38 -0700 Subject: remove unused tex style --- users/fcuny/resume/styles/resume.tex | 106 ----------------------------------- 1 file changed, 106 deletions(-) delete mode 100644 users/fcuny/resume/styles/resume.tex (limited to 'users/fcuny') diff --git a/users/fcuny/resume/styles/resume.tex b/users/fcuny/resume/styles/resume.tex deleted file mode 100644 index 6bbcf0b..0000000 --- a/users/fcuny/resume/styles/resume.tex +++ /dev/null @@ -1,106 +0,0 @@ - -\startmode[*mkii] - \enableregime[utf-8] - \setupcolors[state=start] -\stopmode -$if(mainlang)$ -\mainlanguage[$mainlang$] -$endif$ - -\setupcolor[hex] -\definecolor[titlegrey][h=757575] -\definecolor[sectioncolor][h=397249] -\definecolor[rulecolor][h=9cb770] - -% Enable hyperlinks -\setupinteraction[state=start, color=sectioncolor] - -\setuppapersize [$if(papersize)$$papersize$$else$letter$endif$][$if(papersize)$$papersize$$else$letter$endif$] -\setuplayout [width=middle, height=middle, - backspace=20mm, cutspace=0mm, - topspace=10mm, bottomspace=20mm, - header=0mm, footer=0mm] - -%\setuppagenumbering[location={footer,center}] - -\setupbodyfont[11pt, helvetica] - -\setupwhitespace[medium] - -\setupblackrules[width=31mm, color=rulecolor] - -\setuphead[chapter] [style=\tfd] -\setuphead[section] [style=\tfd\bf, color=titlegrey, align=middle] -\setuphead[subsection] [style=\tfb\bf, color=sectioncolor, align=right, - before={\leavevmode\blackrule\hspace}] -\setuphead[subsubsection][style=\bf] - -$if(number-sections)$ -$else$ -\setuphead[chapter, section, subsection, subsubsection][number=no] -$endif$ - -%\setupdescriptions[width=10mm] - -\definedescription - [description] - [headstyle=bold, style=normal, - location=hanging, width=18mm, distance=14mm, margin=0cm] - -\setupitemize[autointro, packed] % prevent orphan list intro -\setupitemize[indentnext=no] - -\defineitemgroup[enumerate] -\setupenumerate[each][fit][itemalign=left,distance=.5em,style={\feature[+][default:tnum]}] - -\setupfloat[figure][default={here,nonumber}] -\setupfloat[table][default={here,nonumber}] - -\setuptables[textwidth=max, HL=none] -\setupxtable[frame=off,option={stretch,width}] - -\setupthinrules[width=15em] % width of horizontal rules - -\setupdelimitedtext - [blockquote] - [before={\setupalign[middle]}, - indentnext=no, - ] - -$if(toc)$ -\setupcombinedlist[content][list={$placelist$}] - -$endif$ -$for(header-includes)$ -$header-includes$ -$endfor$ - -\starttext -$if(title)$ -\startalignment[center] - \blank[2*big] - {\tfd $title$} -$if(author)$ - \blank[3*medium] - {\tfa $for(author)$$author$$sep$\crlf $endfor$} -$endif$ -$if(date)$ - \blank[2*medium] - {\tfa $date$} -$endif$ - \blank[3*medium] -\stopalignment -$endif$ -$for(include-before)$ -$include-before$ -$endfor$ -$if(toc)$ -\placecontent -$endif$ - -$body$ - -$for(include-after)$ -$include-after$ -$endfor$ -\stoptext -- cgit 1.4.1