From 25fa2237ba8a96a86bf5db30baa597a5b25168d7 Mon Sep 17 00:00:00 2001 From: Franck Cuny Date: Sat, 6 Sep 2025 15:26:03 -0700 Subject: generate the site and the resume using pandoc --- .editorconfig | 15 - .github/dependabot.yml | 6 - .github/workflows/check-links.yml | 54 ---- .github/workflows/flake-checker.yml | 18 -- .github/workflows/flake-updater.yml | 24 -- .github/workflows/page.yml | 45 --- .lycheeignore | 1 - .vscode/extensions.json | 3 - .vscode/settings.json | 4 - README.md | 21 -- README.org | 1 + config.toml | 18 -- content/_index.md | 12 - content/resume/_index.md | 166 ---------- flake.lock | 45 +-- flake.nix | 90 ++---- justfile | 32 -- lychee.toml | 21 -- src/css/main.css | 25 ++ src/resume.org | 601 ++++++++++++++++++++++++++++++++++++ static/CNAME | 1 - static/css/custom.css | 34 -- static/css/resume.css | 80 ----- static/profile.jpg | Bin 895450 -> 0 bytes templates/base.html | 18 -- templates/index.html | 7 - templates/resume.html | 1 - treefmt.nix | 21 ++ 28 files changed, 687 insertions(+), 677 deletions(-) delete mode 100644 .editorconfig delete mode 100644 .github/dependabot.yml delete mode 100644 .github/workflows/check-links.yml delete mode 100644 .github/workflows/flake-checker.yml delete mode 100644 .github/workflows/flake-updater.yml delete mode 100644 .github/workflows/page.yml delete mode 100644 .lycheeignore delete mode 100644 .vscode/extensions.json delete mode 100644 .vscode/settings.json delete mode 100644 README.md create mode 100644 README.org delete mode 100644 config.toml delete mode 100644 content/_index.md delete mode 100644 content/resume/_index.md delete mode 100644 justfile delete mode 100644 lychee.toml create mode 100644 src/css/main.css create mode 100644 src/resume.org delete mode 100644 static/CNAME delete mode 100644 static/css/custom.css delete mode 100644 static/css/resume.css delete mode 100644 static/profile.jpg delete mode 100644 templates/base.html delete mode 100644 templates/index.html delete mode 100644 templates/resume.html create mode 100644 treefmt.nix diff --git a/.editorconfig b/.editorconfig deleted file mode 100644 index 8b2e254..0000000 --- a/.editorconfig +++ /dev/null @@ -1,15 +0,0 @@ -root = true - -[*] -charset = utf-8 -end_of_line = lf -insert_final_newline = true -indent_size = 2 -indent_style = space -trim_trailing_whitespace = true - -[*.{html,yaml,yml}] -max_line_length = off - -[{justfile}] -indent_size = 4 diff --git a/.github/dependabot.yml b/.github/dependabot.yml deleted file mode 100644 index 5ace460..0000000 --- a/.github/dependabot.yml +++ /dev/null @@ -1,6 +0,0 @@ -version: 2 -updates: - - package-ecosystem: "github-actions" - directory: "/" - schedule: - interval: "weekly" diff --git a/.github/workflows/check-links.yml b/.github/workflows/check-links.yml deleted file mode 100644 index d1c9fe1..0000000 --- a/.github/workflows/check-links.yml +++ /dev/null @@ -1,54 +0,0 @@ -name: 🌐 Check Links - -"on": - pull_request: - branches: [main] - paths: - - "**.md" - - .github/workflows/check-links.yaml - - flake.lock - push: - branches: [main] - paths: - - "**.md" - - .github/workflows/check-links.yaml - - flake.lock - schedule: - # Run once a month on the 28th. - - cron: "0 0 28 * *" - workflow_dispatch: - -jobs: - lychee: - runs-on: ubuntu-latest - permissions: - issues: write - steps: - - uses: actions/checkout@v4 - - uses: DeterminateSystems/nix-installer-action@v17 - - name: Build the site - run: nix build --print-build-logs - - name: Restore lychee cache - uses: actions/cache/restore@v4 - with: - path: .lycheecache - key: lychee-cache - - name: Check links - id: lychee - uses: lycheeverse/lychee-action@v2 - with: - fail: false - args: "./result/**/*.html" - - name: Save lychee cache - uses: actions/cache/save@v4 - if: always() - with: - key: lychee-cache - path: .lycheecache - - name: Create issue - if: steps.lychee.outputs.exit_code != 0 - uses: peter-evans/create-issue-from-file@v5 - with: - title: "[lychee] Broken links" - content-filepath: ./lychee/out.md - labels: bug, automated issue diff --git a/.github/workflows/flake-checker.yml b/.github/workflows/flake-checker.yml deleted file mode 100644 index 97090cd..0000000 --- a/.github/workflows/flake-checker.yml +++ /dev/null @@ -1,18 +0,0 @@ -name: ❄️ Flake Checker - -on: - push: - branches: - - master - schedule: - - cron: "42 0 * * 6" - workflow_dispatch: - -jobs: - flake-checker: - name: Flake Checker - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: DeterminateSystems/nix-installer-action@v17 - - uses: DeterminateSystems/flake-checker-action@v9 diff --git a/.github/workflows/flake-updater.yml b/.github/workflows/flake-updater.yml deleted file mode 100644 index ba5ac66..0000000 --- a/.github/workflows/flake-updater.yml +++ /dev/null @@ -1,24 +0,0 @@ -name: ❄️ Flake Lock Updater - -on: - workflow_dispatch: - schedule: - - cron: "30 5 * * 0" - -# you need to grant permissions to create PR: -# https://github.com/DeterminateSystems/update-flake-lock/issues/75 -jobs: - update-flake-lock: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: DeterminateSystems/nix-installer-action@v17 - - uses: DeterminateSystems/update-flake-lock@v24 - with: - token: ${{ secrets.GH_TOKEN_FOR_UPDATES }} - pr-title: "Update flake.lock" - commit-msg: "chore: update flake" - pr-assignees: fcuny - pr-labels: | - dependencies - automated diff --git a/.github/workflows/page.yml b/.github/workflows/page.yml deleted file mode 100644 index ca92f77..0000000 --- a/.github/workflows/page.yml +++ /dev/null @@ -1,45 +0,0 @@ -name: 📦 Deploy to Pages -on: - push: - branches: ["main"] - paths-ignore: - - "README.md" - - "justfile" - workflow_dispatch: - -permissions: - contents: read - pages: write - id-token: write - -concurrency: - group: "pages" - cancel-in-progress: true - -jobs: - build: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: DeterminateSystems/nix-installer-action@v17 - - name: ❄️ nix check - run: nix flake check - - name: ❄️ nix fmt - run: nix fmt - - name: ❄️ Build the site - run: nix build - - name: 📦 Upload artifact - uses: actions/upload-pages-artifact@v3 - with: - path: ./result - - deploy: - runs-on: ubuntu-latest - environment: - name: github-pages - url: ${{ steps.deployment.outputs.page_url }} - needs: build - steps: - - name: Deploy to GitHub Pages - id: deployment - uses: actions/deploy-pages@v4 diff --git a/.lycheeignore b/.lycheeignore deleted file mode 100644 index 239d7c1..0000000 --- a/.lycheeignore +++ /dev/null @@ -1 +0,0 @@ -https://www.amd.com/en/technologies/3d-v-cache diff --git a/.vscode/extensions.json b/.vscode/extensions.json deleted file mode 100644 index fe10822..0000000 --- a/.vscode/extensions.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "recommendations": ["mkhl.direnv", "nefrob.vscode-just-syntax"] -} diff --git a/.vscode/settings.json b/.vscode/settings.json deleted file mode 100644 index 0c5a4cc..0000000 --- a/.vscode/settings.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "nix.enableLanguageServer": true, - "nix.serverPath": "nil" -} diff --git a/README.md b/README.md deleted file mode 100644 index c011a0a..0000000 --- a/README.md +++ /dev/null @@ -1,21 +0,0 @@ -[My personal site](https://fcuny.net). - -## Run - -Running `just run` will start the `zola` server. - -## Build - -Running `just build` will build the site, and the content will be available under `result/`. - -## Deploy - -The site is deployed by a [GHA](.github/workflows/page.yml). - -## Maintenance - -Running `just validate` will run some validations (checking the links for example). - -A few GHA are taking care of checking the validity of the flake, and will report if the [flake.lock](flake.lock) is out of date. - -Another GHA will run periodically to bump the [flake.lock](flake.lock). diff --git a/README.org b/README.org new file mode 100644 index 0000000..691eb20 --- /dev/null +++ b/README.org @@ -0,0 +1 @@ +[[https://fcuny.net][My personal page]] diff --git a/config.toml b/config.toml deleted file mode 100644 index e0e1cfa..0000000 --- a/config.toml +++ /dev/null @@ -1,18 +0,0 @@ -base_url = "https://fcuny.net/" - -title = "@fcuny" -author = "Franck Cuny" -description = "Franck Cuny" - -output_dir = "docs" - -default_language = "en" - -generate_feeds = false - -[markdown] -render_emoji = true -smart_punctuation = true - -[extra] -license = { name = "CC BY-SA 4.0", href = "https://creativecommons.org/licenses/by-sa/4.0/" } diff --git a/content/_index.md b/content/_index.md deleted file mode 100644 index fad2e0d..0000000 --- a/content/_index.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: "home" ---- - -👋 I'm Franck, and this is my little corner on the web. - -- I'm a Technical Director at [Roblox](https://www.roblox.com) -- Previously, I worked at [Twitter](https://twitter.com/TwitterEng) for close to 8 years. Before Twitter, I worked for different startups in S.F and Paris -- I focus on Compute Infrastructure and Reliability -- I live in Berkeley, and I'm married to the multi-talented artist [Felicia Martinez](https://www.feliciamartinez.com/about-1) - -The simplest way to contact me is via email. diff --git a/content/resume/_index.md b/content/resume/_index.md deleted file mode 100644 index 9fca7e5..0000000 --- a/content/resume/_index.md +++ /dev/null @@ -1,166 +0,0 @@ -+++ -title = "Resume" -template = "resume.html" -+++ - -# Franck Cuny - -Technical Director Site Reliability Engineer - -Email: franck@fcuny.net | Phone: 415-617-5129 - -Results-driven Site Reliability Engineering leader with extensive experience in architecting, scaling, and optimizing large-scale distributed systems. Proven track record of driving reliability improvements, fostering cross-functional collaboration, and mentoring engineering talent. Dedicated to building resilient infrastructures and cultivating a strong reliability culture. - -## Core Competencies: - -- Technical leadership and mentorship -- Cross-team collaboration and communication -- Large-scale distributed systems architecture -- Reliability engineering and disaster recovery -- Infrastructure optimization and cost reduction -- Production readiness and failure testing methodologies - -## Career Focus: - -Seeking opportunities to lead transformative reliability initiatives, mentor the next generation of SREs, and drive architectural decisions that significantly enhance system resilience and performance at scale. - -# Experience - -## Roblox, San Mateo - - - --- -- -- -- - - - - - - - - - - - - - - -
Site Reliability EngineerTechnical Directory (IC7)SRE GroupAugust 2024 - to date
Site Reliability EngineerPrincipal II (IC6)SRE GroupFeb 2022 - August 2024
- -As a Team Lead for the Site Reliability group, I define road-maps, milestones, and identify areas where SREs can partner with different teams to improve overall reliability of our infrastructure and services. Key projects and responsibilities include: - -- **Cell Architecture Implementation**: Led the SRE effort to transition from monolithic Compute clusters to a Cell architecture, significantly enhancing Roblox's infrastructure resilience and efficiency. Developed migration plans, identified necessary automation, and drove production readiness for this critical reliability improvement. - -- **Edge Infrastructure Migration**: Spearheaded the migration from HAproxy to Envoy at the edge, aimed at reducing failure domains, improving performance by streamlining the proxy chain, and enabling user traffic steering to specific cells from the edge. - -- **Active/Passive Reliability Lead**: Orchestrated the failover strategy across multiple teams, developing detailed action plans and validation procedures. Conducted comprehensive tests to ensure plan effectiveness. This work reduced the amount of time for a fail-over from days to hours. - -- **Reliability Culture Champion**: Mentored engineers of various levels (both SREs and SWEs), established a model for production readiness, and popularized the practice of running failure exercises for new large infrastructure projects. - -- **Technical Leadership**: Acted as tech lead on numerous projects, demonstrating strong cross-team collaboration skills. Provided technical guidance and mentorship to the SRE team, fostering a culture of reliability and continuous improvement. - -Key strengths include driving complex infrastructure projects, mentoring, setting reliability standards, and facilitating effective cross-team collaboration. - -## Twitter, San Francisco - - ------ - - - - - - - - - - - - - - -
Site Reliability EngineerSenior StaffCompute SREJan 2018 - Jan 2022
Site Reliability EngineerStaffStorage SREAug 2014 - Jan 2018
- -### Key Achievements and Responsibilities: - -- **Large-Scale Infrastructure Management**: Led SRE efforts for one of the world's largest compute clusters (Mesos), spanning hundred of thousands of nodes across multiple data centers. Defined KPIs and improved automation for managing a massive fleet of bare metal machines. - -- **Kubernetes Adoption**: Spearheaded the initiative to adopt Kubernetes for on-premise infrastructure, driving architectural decisions and implementation strategies. - -- **Cost Optimization**: Designed and implemented strategies that significantly improved hardware utilization, resulting in tens of millions of dollars in savings on hardware costs. - -- **Tech Leadership**: Served as Tech Lead for a team of 6 SREs supporting Compute infrastructure. Established critical team processes including on-call rotations and postmortem procedures. - -- **Cloud and On-Premise Expertise**: Led multiple efforts related to Kubernetes deployment and management, both in cloud environments and on-premise infrastructure. - -- **Storage Systems Migration**: Successfully migrated all pub-sub systems from bare-metal deployment to Aurora/Mesos, pioneering the adoption of the Compute orchestration platform among storage teams. This transition reduced operational overhead, decreased deployment times, and enhanced overall system reliability. - -- **Network Infrastructure Improvement**: Advocated for and implemented the adoption of 10Gb+ networking in data centers, enabling significant scaling improvements for storage systems. - -- **Cross-Functional Leadership**: Served as the SRE Tech Lead for the real time storage team, driving improvements in performance, operations, and automation across storage systems. - -I consistently demonstrated the ability to lead complex technical initiatives, deliver impactful projects on-time, optimize large-scale systems, and drive cross-functional collaboration to achieve significant improvements in infrastructure reliability, efficiency, and cost-effectiveness. - -## Say Media, San Francisco - - - --- -- -- -- - - - - - - - - -
Software EngineerSenior SWEInfrastructureAug 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 APIs then I then transitioned to the operation team to develop tooling in order to increase the effectiveness of the engineering organization. - -## Linkfluence, Paris - - - --- -- -- -- - - - - - - - - -
Software EngineerSenior SWEInfrastructureJuly 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 contributed to multiple open source projects on behalf of the company and represented the company at numerous open source conferences in Europe. diff --git a/flake.lock b/flake.lock index db23658..64c43bf 100644 --- a/flake.lock +++ b/flake.lock @@ -1,23 +1,5 @@ { "nodes": { - "devshell": { - "inputs": { - "nixpkgs": "nixpkgs" - }, - "locked": { - "lastModified": 1741473158, - "narHash": "sha256-kWNaq6wQUbUMlPgw8Y+9/9wP0F8SHkjy24/mN3UAppg=", - "owner": "numtide", - "repo": "devshell", - "rev": "7c9e793ebe66bcba8292989a68c0419b737a22a0", - "type": "github" - }, - "original": { - "owner": "numtide", - "repo": "devshell", - "type": "github" - } - }, "flake-compat": { "flake": false, "locked": { @@ -74,22 +56,6 @@ } }, "nixpkgs": { - "locked": { - "lastModified": 1722073938, - "narHash": "sha256-OpX0StkL8vpXyWOGUD6G+MA26wAXK6SpT94kLJXo6B4=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "e36e9f57337d0ff0cf77aceb58af4c805472bfae", - "type": "github" - }, - "original": { - "owner": "NixOS", - "ref": "nixpkgs-unstable", - "repo": "nixpkgs", - "type": "github" - } - }, - "nixpkgs_2": { "locked": { "narHash": "sha256-m3AMudxoQ3CF/D74tuvrNKJwGUV7Gj5RnsEk5cJfY8U=", "rev": "dab7a3a658ca886fdd5389cc4b2bdb17d1ae0139", @@ -101,7 +67,7 @@ "url": "https://channels.nixos.org/nixos-25.05-small/nixexprs.tar.xz" } }, - "nixpkgs_3": { + "nixpkgs_2": { "locked": { "lastModified": 1730768919, "narHash": "sha256-8AKquNnnSaJRXZxc5YmF/WfmxiHX6MMZZasRP6RRQkE=", @@ -117,7 +83,7 @@ "type": "github" } }, - "nixpkgs_4": { + "nixpkgs_3": { "locked": { "lastModified": 1745377448, "narHash": "sha256-jhZDfXVKdD7TSEGgzFJQvEEZ2K65UMiqW5YJ2aIqxMA=", @@ -137,7 +103,7 @@ "inputs": { "flake-compat": "flake-compat", "gitignore": "gitignore", - "nixpkgs": "nixpkgs_3" + "nixpkgs": "nixpkgs_2" }, "locked": { "lastModified": 1742649964, @@ -155,9 +121,8 @@ }, "root": { "inputs": { - "devshell": "devshell", "flake-utils": "flake-utils", - "nixpkgs": "nixpkgs_2", + "nixpkgs": "nixpkgs", "pre-commit-hooks": "pre-commit-hooks", "treefmt-nix": "treefmt-nix" } @@ -179,7 +144,7 @@ }, "treefmt-nix": { "inputs": { - "nixpkgs": "nixpkgs_4" + "nixpkgs": "nixpkgs_3" }, "locked": { "lastModified": 1746216483, diff --git a/flake.nix b/flake.nix index c1ca52c..fb3b89f 100644 --- a/flake.nix +++ b/flake.nix @@ -5,7 +5,6 @@ nixpkgs.url = "https://channels.nixos.org/nixos-25.05-small/nixexprs.tar.xz"; flake-utils.url = "github:numtide/flake-utils"; pre-commit-hooks.url = "github:cachix/pre-commit-hooks.nix"; - devshell.url = "github:numtide/devshell"; treefmt-nix.url = "github:numtide/treefmt-nix"; }; @@ -15,7 +14,6 @@ nixpkgs, flake-utils, pre-commit-hooks, - devshell, treefmt-nix, }: flake-utils.lib.eachDefaultSystem ( @@ -23,32 +21,37 @@ let pkgs = import nixpkgs { inherit system; - overlays = [ - devshell.overlays.default - ]; }; - - treefmt = ( - treefmt-nix.lib.mkWrapper pkgs { - projectRootFile = "flake.nix"; - programs = { - actionlint.enable = true; - deadnix.enable = true; - jsonfmt.enable = true; - just.enable = true; - nixfmt.enable = true; - prettier.enable = true; - taplo.enable = true; - typos.enable = true; - }; - settings.formatter.typos.excludes = [ - "*.jpeg" - "*.jpg" - ]; - } - ); + treefmtEval = treefmt-nix.lib.evalModule pkgs ./treefmt.nix; + texlive = pkgs.texlive.combine { inherit (pkgs.texlive) scheme-context; }; in { + # for `nix fmt` + formatter = treefmtEval.config.build.wrapper; + + # for `nix flake check` + checks = { + # Throws an error if any of the source files are not correctly formatted + # when you run `nix flake check --print-build-logs`. Useful for CI + treefmt = treefmtEval.config.build.check self; + pre-commit-check = pre-commit-hooks.lib.${system}.run { + src = ./.; + hooks = { + format = { + enable = true; + name = "Format with treefmt"; + pass_filenames = true; + entry = "${treefmtEval.config.build.wrapper}/bin/treefmt"; + stages = [ + "pre-commit" + "pre-push" + ]; + }; + }; + }; + }; + + # for `nix build` packages = { default = with pkgs; @@ -57,48 +60,23 @@ version = self.lastModifiedDate; src = ./.; buildInputs = [ - zola - git + pandoc + texlive ]; buildPhase = '' mkdir -p $out - ${pkgs.zola}/bin/zola build -o $out -f + pandoc --embed-resources -s src/index.org --css=src/css/main.css -t html -o $out/index.html + pandoc --pdf-engine=context src/resume.org -o $out/resume.pdf ''; dontInstall = true; }; }; - formatter = treefmt; - - checks = { - pre-commit-check = pre-commit-hooks.lib.${system}.run { - src = ./.; - hooks = { - treefmt = { - enable = true; - excludes = [ ".*" ]; - }; - check-merge-conflicts.enable = true; - end-of-file-fixer.enable = true; - }; - }; - }; - - devShells.default = pkgs.devshell.mkShell { - name = "zola"; + devShells.default = pkgs.mkShell { + inherit (self.checks.${system}.pre-commit-check) shellHook; packages = with pkgs; [ - zola git treefmt - lychee - just - ]; - devshell.startup.pre-commit.text = self.checks.${system}.pre-commit-check.shellHook; - env = [ - { - name = "DEVSHELL_NO_MOTD"; - value = "1"; - } ]; }; } diff --git a/justfile b/justfile deleted file mode 100644 index 75bedea..0000000 --- a/justfile +++ /dev/null @@ -1,32 +0,0 @@ -default: - @just --list - -[doc('Run the local HTTP server')] -[group('site')] -run: - zola serve - -[doc('Build the site')] -[group('site')] -build: - nix build - -[doc('Format all the files')] -[group('nix')] -fmt: - nix fmt - -[doc('Check the flake')] -[group('nix')] -check: - nix flake check - -[doc('Validate the site')] -[group('site')] -validate: build - lychee ./result/**/*.html - -[doc('Update the dependencies')] -[group('nix')] -update-deps: - nix flake update --commit-lock-file diff --git a/lychee.toml b/lychee.toml deleted file mode 100644 index 52d3842..0000000 --- a/lychee.toml +++ /dev/null @@ -1,21 +0,0 @@ -# Enable link caching. -cache = true - -# Discard all cached requests older than one day. -max_cache_age = "1d" - -# Maximum number of allowed retries before a link is declared dead. -max_retries = 3 - -# User agent to send with each request. -# https://www.whatismybrowser.com/guides/the-latest-user-agent/chrome -user_agent = "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36" - -# Minimum wait time in seconds between retries of failed requests. -retry_wait_time = 3 - -# Comma-separated list of accepted status codes for valid links. -accept = [200, 403] - -# Exclude all private IPs from checking. -exclude_all_private = true diff --git a/src/css/main.css b/src/css/main.css new file mode 100644 index 0000000..9600987 --- /dev/null +++ b/src/css/main.css @@ -0,0 +1,25 @@ +body { + margin: auto; + font: + 1rem/2 -apple-system, + sans-serif; + background-color: #f8f8f8; + color: #333333; + padding: 20px; + min-height: 100vh; + padding: 50px, 50px, 50px, 50px; + max-width: 55rem; +} +p { + margin: 0 0 1em; +} +a { + color: inherit; + text-decoration: none; + border-bottom: 1px solid #007f9f; +} +ul { + display: inline-block; + text-align: left; + padding-left: 1em; +} diff --git a/src/resume.org b/src/resume.org new file mode 100644 index 0000000..47aadc5 --- /dev/null +++ b/src/resume.org @@ -0,0 +1,601 @@ ++++ title = "Resume" template = "resume.html" +++ + +* Franck Cuny +:PROPERTIES: +:CUSTOM_ID: franck-cuny +:END: +Technical Director Site Reliability Engineer + +Email: franck@fcuny.net | Phone: 415-617-5129 + +Results-driven Site Reliability Engineering leader with extensive +experience in architecting, scaling, and optimizing large-scale +distributed systems. Proven track record of driving reliability +improvements, fostering cross-functional collaboration, and mentoring +engineering talent. Dedicated to building resilient infrastructures and +cultivating a strong reliability culture. + +** Core Competencies: +:PROPERTIES: +:CUSTOM_ID: core-competencies +:END: +- Technical leadership and mentorship +- Cross-team collaboration and communication +- Large-scale distributed systems architecture +- Reliability engineering and disaster recovery +- Infrastructure optimization and cost reduction +- Production readiness and failure testing methodologies + +** Career Focus: +:PROPERTIES: +:CUSTOM_ID: career-focus +:END: +Seeking opportunities to lead transformative reliability initiatives, +mentor the next generation of SREs, and drive architectural decisions +that significantly enhance system resilience and performance at scale. + +* Experience +:PROPERTIES: +:CUSTOM_ID: experience +:END: +** Roblox, San Mateo +:PROPERTIES: +:CUSTOM_ID: roblox-san-mateo +:END: + +#+begin_html + +#+end_html + +#+begin_html + +#+end_html + +#+begin_html + +#+end_html + +#+begin_html + +#+end_html + +#+begin_html + +#+end_html + +#+begin_html + +#+end_html + +#+begin_html + +#+end_html + +#+begin_html + +#+end_html + +#+begin_html + +#+end_html + +#+begin_html + +#+end_html + +#+begin_html + +#+end_html + +#+begin_html + +#+end_html + +#+begin_html + +#+end_html + +#+begin_html + +#+end_html + +#+begin_html + +#+end_html + +#+begin_html + +#+end_html + +#+begin_html + +#+end_html + +#+begin_html + +#+end_html + +#+begin_html + +#+end_html + +#+begin_html + +#+end_html + +#+begin_html + +#+end_html + +#+begin_html +
+#+end_html + +Site Reliability Engineer + +#+begin_html + +#+end_html + +Technical Directory (IC7) + +#+begin_html + +#+end_html + +SRE Group + +#+begin_html + +#+end_html + +August 2024 - to date + +#+begin_html +
+#+end_html + +Site Reliability Engineer + +#+begin_html + +#+end_html + +Principal II (IC6) + +#+begin_html + +#+end_html + +SRE Group + +#+begin_html + +#+end_html + +Feb 2022 - August 2024 + +#+begin_html +
+#+end_html + +As a Team Lead for the Site Reliability group, I define road-maps, +milestones, and identify areas where SREs can partner with different +teams to improve overall reliability of our infrastructure and services. +Key projects and responsibilities include: + +- *Cell Architecture Implementation*: Led the SRE effort to transition + from monolithic Compute clusters to a Cell architecture, significantly + enhancing Roblox's infrastructure resilience and efficiency. Developed + migration plans, identified necessary automation, and drove production + readiness for this critical reliability improvement. + +- *Edge Infrastructure Migration*: Spearheaded the migration from + HAproxy to Envoy at the edge, aimed at reducing failure domains, + improving performance by streamlining the proxy chain, and enabling + user traffic steering to specific cells from the edge. + +- *Active/Passive Reliability Lead*: Orchestrated the failover strategy + across multiple teams, developing detailed action plans and validation + procedures. Conducted comprehensive tests to ensure plan + effectiveness. This work reduced the amount of time for a fail-over + from days to hours. + +- *Reliability Culture Champion*: Mentored engineers of various levels + (both SREs and SWEs), established a model for production readiness, + and popularized the practice of running failure exercises for new + large infrastructure projects. + +- *Technical Leadership*: Acted as tech lead on numerous projects, + demonstrating strong cross-team collaboration skills. Provided + technical guidance and mentorship to the SRE team, fostering a culture + of reliability and continuous improvement. + +Key strengths include driving complex infrastructure projects, +mentoring, setting reliability standards, and facilitating effective +cross-team collaboration. + +** Twitter, San Francisco +:PROPERTIES: +:CUSTOM_ID: twitter-san-francisco +:END: + +#+begin_html + +#+end_html + +#+begin_html + +#+end_html + +#+begin_html + +#+end_html + +#+begin_html + +#+end_html + +#+begin_html + +#+end_html + +#+begin_html + +#+end_html + +#+begin_html + +#+end_html + +#+begin_html + +#+end_html + +#+begin_html + +#+end_html + +#+begin_html + +#+end_html + +#+begin_html + +#+end_html + +#+begin_html + +#+end_html + +#+begin_html + +#+end_html + +#+begin_html + +#+end_html + +#+begin_html + +#+end_html + +#+begin_html + +#+end_html + +#+begin_html + +#+end_html + +#+begin_html + +#+end_html + +#+begin_html + +#+end_html + +#+begin_html + +#+end_html + +#+begin_html + +#+end_html + +#+begin_html +
+#+end_html + +Site Reliability Engineer + +#+begin_html + +#+end_html + +Senior Staff + +#+begin_html + +#+end_html + +Compute SRE + +#+begin_html + +#+end_html + +Jan 2018 - Jan 2022 + +#+begin_html +
+#+end_html + +Site Reliability Engineer + +#+begin_html + +#+end_html + +Staff + +#+begin_html + +#+end_html + +Storage SRE + +#+begin_html + +#+end_html + +Aug 2014 - Jan 2018 + +#+begin_html +
+#+end_html + +*** Key Achievements and Responsibilities: +:PROPERTIES: +:CUSTOM_ID: key-achievements-and-responsibilities +:END: +- *Large-Scale Infrastructure Management*: Led SRE efforts for one of + the world's largest compute clusters (Mesos), spanning hundred of + thousands of nodes across multiple data centers. Defined KPIs and + improved automation for managing a massive fleet of bare metal + machines. + +- *Kubernetes Adoption*: Spearheaded the initiative to adopt Kubernetes + for on-premise infrastructure, driving architectural decisions and + implementation strategies. + +- *Cost Optimization*: Designed and implemented strategies that + significantly improved hardware utilization, resulting in tens of + millions of dollars in savings on hardware costs. + +- *Tech Leadership*: Served as Tech Lead for a team of 6 SREs supporting + Compute infrastructure. Established critical team processes including + on-call rotations and postmortem procedures. + +- *Cloud and On-Premise Expertise*: Led multiple efforts related to + Kubernetes deployment and management, both in cloud environments and + on-premise infrastructure. + +- *Storage Systems Migration*: Successfully migrated all pub-sub systems + from bare-metal deployment to Aurora/Mesos, pioneering the adoption of + the Compute orchestration platform among storage teams. This + transition reduced operational overhead, decreased deployment times, + and enhanced overall system reliability. + +- *Network Infrastructure Improvement*: Advocated for and implemented + the adoption of 10Gb+ networking in data centers, enabling significant + scaling improvements for storage systems. + +- *Cross-Functional Leadership*: Served as the SRE Tech Lead for the + real time storage team, driving improvements in performance, + operations, and automation across storage systems. + +I consistently demonstrated the ability to lead complex technical +initiatives, deliver impactful projects on-time, optimize large-scale +systems, and drive cross-functional collaboration to achieve significant +improvements in infrastructure reliability, efficiency, and +cost-effectiveness. + +** Say Media, San Francisco +:PROPERTIES: +:CUSTOM_ID: say-media-san-francisco +:END: + +#+begin_html + +#+end_html + +#+begin_html + +#+end_html + +#+begin_html + +#+end_html + +#+begin_html + +#+end_html + +#+begin_html + +#+end_html + +#+begin_html + +#+end_html + +#+begin_html + +#+end_html + +#+begin_html + +#+end_html + +#+begin_html + +#+end_html + +#+begin_html + +#+end_html + +#+begin_html + +#+end_html + +#+begin_html + +#+end_html + +#+begin_html + +#+end_html + +#+begin_html + +#+end_html + +#+begin_html + +#+end_html + +#+begin_html +
+#+end_html + +Software Engineer + +#+begin_html + +#+end_html + +Senior SWE + +#+begin_html + +#+end_html + +Infrastructure + +#+begin_html + +#+end_html + +Aug 2011 - Aug 2014 + +#+begin_html +
+#+end_html + +During my time at Say Media, I worked on two different teams. I started +as a software engineer in the platform team building APIs then I then +transitioned to the operation team to develop tooling in order to +increase the effectiveness of the engineering organization. + +** Linkfluence, Paris +:PROPERTIES: +:CUSTOM_ID: linkfluence-paris +:END: + +#+begin_html + +#+end_html + +#+begin_html + +#+end_html + +#+begin_html + +#+end_html + +#+begin_html + +#+end_html + +#+begin_html + +#+end_html + +#+begin_html + +#+end_html + +#+begin_html + +#+end_html + +#+begin_html + +#+end_html + +#+begin_html + +#+end_html + +#+begin_html + +#+end_html + +#+begin_html + +#+end_html + +#+begin_html + +#+end_html + +#+begin_html + +#+end_html + +#+begin_html + +#+end_html + +#+begin_html + +#+end_html + +#+begin_html +
+#+end_html + +Software Engineer + +#+begin_html + +#+end_html + +Senior SWE + +#+begin_html + +#+end_html + +Infrastructure + +#+begin_html + +#+end_html + +July 2007 - July 2011 + +#+begin_html +
+#+end_html + +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 contributed to +multiple open source projects on behalf of the company and represented +the company at numerous open source conferences in Europe. diff --git a/static/CNAME b/static/CNAME deleted file mode 100644 index 9d43514..0000000 --- a/static/CNAME +++ /dev/null @@ -1 +0,0 @@ -fcuny.net diff --git a/static/css/custom.css b/static/css/custom.css deleted file mode 100644 index 26c0436..0000000 --- a/static/css/custom.css +++ /dev/null @@ -1,34 +0,0 @@ -body { - margin: 0; - font-size: 1rem; - line-height: 2; - background-color: #f4f4f4; - font-weight: normal; - font-style: normal; - font-family: monospace; - color: #333333; - padding: 20px; -} - -main { - max-width: 50rem; - margin: 0 auto; - padding: 0 1em; - padding-top: 6em; - padding-bottom: 2em; -} - -p { - margin: 0 0 1em; -} - -a { - color: inherit; - text-decoration: none; - border-bottom: 1px solid #b1b1b1 -} - -ul { - display: block; - padding-left: 1em; -} diff --git a/static/css/resume.css b/static/css/resume.css deleted file mode 100644 index daf322d..0000000 --- a/static/css/resume.css +++ /dev/null @@ -1,80 +0,0 @@ -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 0.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/static/profile.jpg b/static/profile.jpg deleted file mode 100644 index 5417f13..0000000 Binary files a/static/profile.jpg and /dev/null differ diff --git a/templates/base.html b/templates/base.html deleted file mode 100644 index 5537a36..0000000 --- a/templates/base.html +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - - - {% block title %}{{- config.title -}}{% endblock title %} - - - -
{% block content %}{% endblock content %}
- - diff --git a/templates/index.html b/templates/index.html deleted file mode 100644 index bb5a86c..0000000 --- a/templates/index.html +++ /dev/null @@ -1,7 +0,0 @@ -{% extends "base.html" %} - -{%- block content -%} - -{% if section.content %} {{ section.content | safe }}{% endif %} - -{%- endblock content -%} diff --git a/templates/resume.html b/templates/resume.html deleted file mode 100644 index 84449c5..0000000 --- a/templates/resume.html +++ /dev/null @@ -1 +0,0 @@ -{% extends "base.html" %} {% block content %} {{ section.content | safe }} {% endblock %} diff --git a/treefmt.nix b/treefmt.nix new file mode 100644 index 0000000..cd28b86 --- /dev/null +++ b/treefmt.nix @@ -0,0 +1,21 @@ +{ + projectRootFile = "flake.nix"; + programs = { + nixfmt.enable = true; + statix.enable = true; + actionlint.enable = true; + deadnix.enable = true; + prettier.enable = true; + typos.enable = true; + }; + settings = { + formatter = { + nixfmt.includes = [ + "*.nix" + ]; + statix.includes = [ + "*.nix" + ]; + }; + }; +} -- cgit v1.2.3