diff options
Diffstat (limited to '')
| -rw-r--r-- | content/_index.md | 13 | ||||
| -rw-r--r-- | content/blog/_index.md | 7 | ||||
| -rw-r--r-- | content/blog/git-link-and-sourcegraph.md | 56 | ||||
| -rw-r--r-- | content/blog/tailscale-docker-https.md | 58 | ||||
| -rw-r--r-- | content/notes/_index.md | 7 | ||||
| -rw-r--r-- | content/notes/working-with-go.md | 2 | ||||
| -rw-r--r-- | content/resume.md | 160 | ||||
| -rw-r--r-- | content/resume.org | 40 |
8 files changed, 247 insertions, 96 deletions
diff --git a/content/_index.md b/content/_index.md new file mode 100644 index 0000000..ade4ba0 --- /dev/null +++ b/content/_index.md @@ -0,0 +1,13 @@ ++++ +title = "home" +template = "index.html" ++++ + +My name is Franck Cuny and this is my little corner on the web. + +I currently work as a [Site Reliability Engineer](https://en.wikipedia.org/wiki/Site_reliability_engineering) (SRE) at [Roblox](https://www.roblox.com). Previously, I worked as a SRE at [Twitter](https://twitter.com/TwitterEng), and my focus was on infrastructure. + +I'm interested in building sustainable teams, improving the management and operation of large infrastructure, and to work with different teams to implement best practices around reliability and security. + +- Some of my code is shared on [GitHub](https://github.com/fcuny) +- Email: franck@fcuny.net diff --git a/content/blog/_index.md b/content/blog/_index.md new file mode 100644 index 0000000..0de2091 --- /dev/null +++ b/content/blog/_index.md @@ -0,0 +1,7 @@ +--- +title: Blog +sort_by: date +render: true +generate_feeds: true +template: blog.html +--- diff --git a/content/blog/git-link-and-sourcegraph.md b/content/blog/git-link-and-sourcegraph.md index affbe8b..073068d 100644 --- a/content/blog/git-link-and-sourcegraph.md +++ b/content/blog/git-link-and-sourcegraph.md @@ -13,33 +13,35 @@ git remote add sourcegraph https://sourcegraph.com/github.com/sshaw/copy-as-form The next time you run `M-x git-link` in a buffer, it will use the URL associated with that remote. That's works great, except that now you need to add this for every repository. Instead, for my usage, I came up with the following solution: - (use-package git-link - :ensure t - :after magit - :bind (("C-c g l" . git-link) - ("C-c g a" . git-link-commit)) - :config - (defun fcuny/get-sg-remote-from-hostname (hostname) - (format "sourcegraph.<$domain>.<$tld>/%s" hostname)) - - (defun fcuny/git-link-work-sourcegraph (hostname dirname filename _branch commit start end) - ;;; For a given repository, build the proper link for sourcegraph. - ;;; Use the default branch of the repository instead of the - ;;; current one (we might be on a feature branch that is not - ;;; available on the remote). - (require 'magit-branch) - (let ((sg-base-url (fcuny/get-sg-remote-from-hostname hostname)) - (main-branch (magit-main-branch))) - (git-link-sourcegraph sg-base-url dirname filename main-branch commit start end))) - - (defun fcuny/git-link-commit-work-sourcegraph (hostname dirname commit) - (let ((sg-base-url (fcuny/get-sg-remote-from-hostname hostname))) - (git-link-commit-sourcegraph sg-base-url dirname commit))) - - (add-to-list 'git-link-remote-alist '("twitter" fcuny/git-link-work-sourcegraph)) - (add-to-list 'git-link-commit-remote-alist '("twitter" fcuny/git-link-commit-work-sourcegraph)) - - (setq git-link-open-in-browser 't)) +```lisp +(use-package git-link + :ensure t + :after magit + :bind (("C-c g l" . git-link) + ("C-c g a" . git-link-commit)) + :config + (defun fcuny/get-sg-remote-from-hostname (hostname) + (format "sourcegraph.<$domain>.<$tld>/%s" hostname)) + + (defun fcuny/git-link-work-sourcegraph (hostname dirname filename _branch commit start end) + ;;; For a given repository, build the proper link for sourcegraph. + ;;; Use the default branch of the repository instead of the + ;;; current one (we might be on a feature branch that is not + ;;; available on the remote). + (require 'magit-branch) + (let ((sg-base-url (fcuny/get-sg-remote-from-hostname hostname)) + (main-branch (magit-main-branch))) + (git-link-sourcegraph sg-base-url dirname filename main-branch commit start end))) + + (defun fcuny/git-link-commit-work-sourcegraph (hostname dirname commit) + (let ((sg-base-url (fcuny/get-sg-remote-from-hostname hostname))) + (git-link-commit-sourcegraph sg-base-url dirname commit))) + + (add-to-list 'git-link-remote-alist '("twitter" fcuny/git-link-work-sourcegraph)) + (add-to-list 'git-link-commit-remote-alist '("twitter" fcuny/git-link-commit-work-sourcegraph)) + + (setq git-link-open-in-browser 't)) +``` We use different domains to host various git repositories at work (e.g. `git.$work`, `gitfoo.$work`, etc). Each of them map to a different URI for sourcegraph (e.g. `sourcegraph.$work/gitfoo`). diff --git a/content/blog/tailscale-docker-https.md b/content/blog/tailscale-docker-https.md index 03dfff7..9a836d9 100644 --- a/content/blog/tailscale-docker-https.md +++ b/content/blog/tailscale-docker-https.md @@ -44,34 +44,36 @@ The important bit here is the `certificatesResolvers` part. I'll be using the [d - the environment variable `GCP_PROJECT`: the name of the GCP project - mounting the service account file inside the container (I store it on the host under `/data/containers/traefik/config/sa.json`) - [Unit] - Description=traefik proxy - Documentation=https://doc.traefik.io/traefik/ - After=docker.service - Requires=docker.service - - [Service] - Restart=on-failure - ExecStartPre=-/usr/bin/docker kill traefik - ExecStartPre=-/usr/bin/docker rm traefik - ExecStartPre=/usr/bin/docker pull traefik:latest - - ExecStart=/usr/bin/docker run \ - -p 80:80 \ - -p 9080:8080 \ - -p 443:443 \ - --name=traefik \ - -e GCE_SERVICE_ACCOUNT_FILE=/var/run/gcp-service-account.json \ - -e GCE_PROJECT= gcp-super-project \ - --volume=/data/containers/traefik/config/acme.json:/acme.json \ - --volume=/data/containers/traefik/config/traefik.yml:/etc/traefik/traefik.yml:ro \ - --volume=/data/containers/traefik/config/sa.json:/var/run/gcp-service-account.json \ - --volume=/var/run/docker.sock:/var/run/docker.sock:ro \ - traefik:latest - ExecStop=/usr/bin/docker stop traefik - - [Install] - WantedBy=multi-user.target +```systemd +[Unit] +Description=traefik proxy +Documentation=https://doc.traefik.io/traefik/ +After=docker.service +Requires=docker.service + +[Service] +Restart=on-failure +ExecStartPre=-/usr/bin/docker kill traefik +ExecStartPre=-/usr/bin/docker rm traefik +ExecStartPre=/usr/bin/docker pull traefik:latest + +ExecStart=/usr/bin/docker run \ + -p 80:80 \ + -p 9080:8080 \ + -p 443:443 \ + --name=traefik \ + -e GCE_SERVICE_ACCOUNT_FILE=/var/run/gcp-service-account.json \ + -e GCE_PROJECT= gcp-super-project \ + --volume=/data/containers/traefik/config/acme.json:/acme.json \ + --volume=/data/containers/traefik/config/traefik.yml:/etc/traefik/traefik.yml:ro \ + --volume=/data/containers/traefik/config/sa.json:/var/run/gcp-service-account.json \ + --volume=/var/run/docker.sock:/var/run/docker.sock:ro \ + traefik:latest +ExecStop=/usr/bin/docker stop traefik + +[Install] +WantedBy=multi-user.target +``` As an example, I run [grafana](https://grafana.com/) on my home network to view metrics from the various containers / hosts. Let's pretend I use `example.net` as my domain. I want to be able to access `grafana` via <https://dash.example.net>. Here's the `systemd` unit configuration I use for this: diff --git a/content/notes/_index.md b/content/notes/_index.md new file mode 100644 index 0000000..e3b7cd2 --- /dev/null +++ b/content/notes/_index.md @@ -0,0 +1,7 @@ +--- +title: Note +sort_by: date +render: true +generate_feeds: true +template: blog.html +--- diff --git a/content/notes/working-with-go.md b/content/notes/working-with-go.md index fbfba88..29f1737 100644 --- a/content/notes/working-with-go.md +++ b/content/notes/working-with-go.md @@ -180,7 +180,7 @@ starting point. The configuration is straightforward, this is what I use: -```elisp +```lisp ;; for go's LSP I want to use staticcheck and placeholders for completion (customize-set-variable 'eglot-workspace-configuration '((:gopls . diff --git a/content/resume.md b/content/resume.md new file mode 100644 index 0000000..34ca43e --- /dev/null +++ b/content/resume.md @@ -0,0 +1,160 @@ +--- +title: Resume +template: orphan.html +--- + +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 + +<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides"> + +<colgroup> +<col class="org-left" /> + +<col class="org-left" /> + +<col class="org-left" /> + +<col class="org-left" /> +</colgroup> +<tbody> +<tr> +<td class="org-left">Site Reliability Engineer</td> +<td class="org-left">Principal (IC6)</td> +<td class="org-left">SRE Group</td> +<td class="org-left">Feb 2022 - to date</td> +</tr> +</tbody> +</table> + +I'm a Team Lead for the Site Reliability group that was started at the end of 2021. + +I define the road-map and identify areas where SREs can partner with different team to improve overall reliability of our infrastructure and services. + +## Twitter, San Francisco + +### Compute + +<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides"> + +<colgroup> +<col class="org-left" /> + +<col class="org-left" /> + +<col class="org-left" /> + +<col class="org-left" /> +</colgroup> +<tbody> +<tr> +<td class="org-left">Software Engineer</td> +<td class="org-left">Senior Staff</td> +<td class="org-left">Compute Info</td> +<td class="org-left">Aug 2021 - Jan 2022</td> +</tr> + +<tr> +<td class="org-left">Site Reliability Engineer</td> +<td class="org-left">Senior Staff</td> +<td class="org-left">Compute SREs</td> +<td class="org-left">Jan 2018 - Aug 2021</td> +</tr> +</tbody> +</table> + +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 + +<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides"> + +<colgroup> +<col class="org-left" /> + +<col class="org-left" /> + +<col class="org-left" /> + +<col class="org-left" /> +</colgroup> +<tbody> +<tr> +<td class="org-left">Site Reliability Engineer</td> +<td class="org-left">Staff</td> +<td class="org-left">Storage SREs</td> +<td class="org-left">Aug 2014 - Jan 2018</td> +</tr> +</tbody> +</table> + +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 + +<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides"> + +<colgroup> +<col class="org-left" /> + +<col class="org-left" /> + +<col class="org-left" /> + +<col class="org-left" /> +</colgroup> +<tbody> +<tr> +<td class="org-left">Software Engineer</td> +<td class="org-left">Senior SWE</td> +<td class="org-left">Infrastructure</td> +<td class="org-left">Aug 2011 - Aug 2014</td> +</tr> +</tbody> +</table> + +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 + +<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides"> + +<colgroup> +<col class="org-left" /> + +<col class="org-left" /> + +<col class="org-left" /> + +<col class="org-left" /> +</colgroup> +<tbody> +<tr> +<td class="org-left">Software Engineer</td> +<td class="org-left">Senior SWE</td> +<td class="org-left">Infrastructure</td> +<td class="org-left">July 2007 - July 2011</td> +</tr> +</tbody> +</table> + +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/content/resume.org b/content/resume.org deleted file mode 100644 index 81789a6..0000000 --- a/content/resume.org +++ /dev/null @@ -1,40 +0,0 @@ -#+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 a Team Lead for the Site Reliability group that was started at the end of 2021. - -I define the road-map and identify areas where SREs can partner with different team to improve overall reliability of our infrastructure and 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 |
