From 1b8e81ec5b8902ee583ab60a9c65b7426241991b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Laure=CE=B7t?= Date: Fri, 24 Nov 2023 22:58:56 +0100 Subject: [PATCH] switch to typst --- .envrc | 2 +- .gitattributes | 1 - .gitignore | 305 +---------------------- .vscode/extensions.json | 5 - .vscode/settings.json | 48 +--- flake.lock | 143 ++++++++++- flake.nix | 56 ++++- src/cover-letter/cover.cls | 111 --------- src/cover-letter/cover.tex | 68 ----- src/fonts/lato/Lato-Bla.ttf | 3 - src/fonts/lato/Lato-BlaIta.ttf | 3 - src/fonts/lato/Lato-Bol.ttf | 3 - src/fonts/lato/Lato-BolIta.ttf | 3 - src/fonts/lato/Lato-Hai.ttf | 3 - src/fonts/lato/Lato-HaiIta.ttf | 3 - src/fonts/lato/Lato-Lig.ttf | 3 - src/fonts/lato/Lato-LigIta.ttf | 3 - src/fonts/lato/Lato-Reg.ttf | 3 - src/fonts/lato/Lato-RegIta.ttf | 3 - src/fonts/raleway/Raleway-Bold.otf | 3 - src/fonts/raleway/Raleway-ExtraBold.otf | 3 - src/fonts/raleway/Raleway-ExtraLight.otf | 3 - src/fonts/raleway/Raleway-Heavy.otf | 3 - src/fonts/raleway/Raleway-Light.otf | 3 - src/fonts/raleway/Raleway-Medium.otf | 3 - src/fonts/raleway/Raleway-Regular.otf | 3 - src/fonts/raleway/Raleway-SemiBold.otf | 3 - src/fonts/raleway/Raleway-Thin.otf | 3 - src/{resume => }/hf-logo.svg | 0 src/references.bib | 11 + src/resume.typ | 177 +++++++++++++ src/resume/patents.bib | 5 - src/resume/publications.bib | 7 - src/resume/resume.cls | 92 ------- src/resume/resume.tex | 246 ------------------ src/utils.typ | 169 +++++++++++++ typstfmt.toml | 4 + 37 files changed, 555 insertions(+), 952 deletions(-) delete mode 100644 .gitattributes delete mode 100644 .vscode/extensions.json delete mode 100644 src/cover-letter/cover.cls delete mode 100644 src/cover-letter/cover.tex delete mode 100755 src/fonts/lato/Lato-Bla.ttf delete mode 100755 src/fonts/lato/Lato-BlaIta.ttf delete mode 100755 src/fonts/lato/Lato-Bol.ttf delete mode 100755 src/fonts/lato/Lato-BolIta.ttf delete mode 100755 src/fonts/lato/Lato-Hai.ttf delete mode 100755 src/fonts/lato/Lato-HaiIta.ttf delete mode 100755 src/fonts/lato/Lato-Lig.ttf delete mode 100755 src/fonts/lato/Lato-LigIta.ttf delete mode 100755 src/fonts/lato/Lato-Reg.ttf delete mode 100755 src/fonts/lato/Lato-RegIta.ttf delete mode 100755 src/fonts/raleway/Raleway-Bold.otf delete mode 100755 src/fonts/raleway/Raleway-ExtraBold.otf delete mode 100755 src/fonts/raleway/Raleway-ExtraLight.otf delete mode 100755 src/fonts/raleway/Raleway-Heavy.otf delete mode 100755 src/fonts/raleway/Raleway-Light.otf delete mode 100755 src/fonts/raleway/Raleway-Medium.otf delete mode 100755 src/fonts/raleway/Raleway-Regular.otf delete mode 100755 src/fonts/raleway/Raleway-SemiBold.otf delete mode 100755 src/fonts/raleway/Raleway-Thin.otf rename src/{resume => }/hf-logo.svg (100%) create mode 100644 src/references.bib create mode 100644 src/resume.typ delete mode 100644 src/resume/patents.bib delete mode 100644 src/resume/publications.bib delete mode 100644 src/resume/resume.cls delete mode 100644 src/resume/resume.tex create mode 100644 src/utils.typ create mode 100644 typstfmt.toml diff --git a/.envrc b/.envrc index 3550a30..8392d15 100644 --- a/.envrc +++ b/.envrc @@ -1 +1 @@ -use flake +use flake \ No newline at end of file diff --git a/.gitattributes b/.gitattributes deleted file mode 100644 index 9ab2e20..0000000 --- a/.gitattributes +++ /dev/null @@ -1 +0,0 @@ -src/fonts/** filter=lfs diff=lfs merge=lfs -text diff --git a/.gitignore b/.gitignore index 0e137ac..4d60fff 100644 --- a/.gitignore +++ b/.gitignore @@ -1,305 +1,4 @@ .direnv -*.pdf +result -# https://github.com/github/gitignore/blob/main/TeX.gitignore -## Core latex/pdflatex auxiliary files: -*.aux -*.lof -*.log -*.lot -*.fls -*.out -*.toc -*.fmt -*.fot -*.cb -*.cb2 -.*.lb - -## Intermediate documents: -*.dvi -*.xdv -*-converted-to.* -# these rules might exclude image files for figures etc. -# *.ps -# *.eps -# *.pdf - -## Generated if empty string is given at "Please type another file name for output:" -.pdf - -## Bibliography auxiliary files (bibtex/biblatex/biber): -*.bbl -*.bcf -*.blg -*-blx.aux -*-blx.bib -*.run.xml - -## Build tool auxiliary files: -*.fdb_latexmk -*.synctex -*.synctex(busy) -*.synctex.gz -*.synctex.gz(busy) -*.pdfsync - -## Build tool directories for auxiliary files -# latexrun -latex.out/ - -## Auxiliary and intermediate files from other packages: -# algorithms -*.alg -*.loa - -# achemso -acs-*.bib - -# amsthm -*.thm - -# beamer -*.nav -*.pre -*.snm -*.vrb - -# changes -*.soc - -# comment -*.cut - -# cprotect -*.cpt - -# elsarticle (documentclass of Elsevier journals) -*.spl - -# endnotes -*.ent - -# fixme -*.lox - -# feynmf/feynmp -*.mf -*.mp -*.t[1-9] -*.t[1-9][0-9] -*.tfm - -#(r)(e)ledmac/(r)(e)ledpar -*.end -*.?end -*.[1-9] -*.[1-9][0-9] -*.[1-9][0-9][0-9] -*.[1-9]R -*.[1-9][0-9]R -*.[1-9][0-9][0-9]R -*.eledsec[1-9] -*.eledsec[1-9]R -*.eledsec[1-9][0-9] -*.eledsec[1-9][0-9]R -*.eledsec[1-9][0-9][0-9] -*.eledsec[1-9][0-9][0-9]R - -# glossaries -*.acn -*.acr -*.glg -*.glo -*.gls -*.glsdefs -*.lzo -*.lzs -*.slg -*.slo -*.sls - -# uncomment this for glossaries-extra (will ignore makeindex's style files!) -# *.ist - -# gnuplot -*.gnuplot -*.table - -# gnuplottex -*-gnuplottex-* - -# gregoriotex -*.gaux -*.glog -*.gtex - -# htlatex -*.4ct -*.4tc -*.idv -*.lg -*.trc -*.xref - -# hyperref -*.brf - -# knitr -*-concordance.tex -# TODO Uncomment the next line if you use knitr and want to ignore its generated tikz files -# *.tikz -*-tikzDictionary - -# listings -*.lol - -# luatexja-ruby -*.ltjruby - -# makeidx -*.idx -*.ilg -*.ind - -# minitoc -*.maf -*.mlf -*.mlt -*.mtc[0-9]* -*.slf[0-9]* -*.slt[0-9]* -*.stc[0-9]* - -# minted -_minted* -*.pyg - -# morewrites -*.mw - -# newpax -*.newpax - -# nomencl -*.nlg -*.nlo -*.nls - -# pax -*.pax - -# pdfpcnotes -*.pdfpc - -# sagetex -*.sagetex.sage -*.sagetex.py -*.sagetex.scmd - -# scrwfile -*.wrt - -# svg -svg-inkscape/ - -# sympy -*.sout -*.sympy -sympy-plots-for-*.tex/ - -# pdfcomment -*.upa -*.upb - -# pythontex -*.pytxcode -pythontex-files-*/ - -# tcolorbox -*.listing - -# thmtools -*.loe - -# TikZ & PGF -*.dpth -*.md5 -*.auxlock - -# titletoc -*.ptc - -# todonotes -*.tdo - -# vhistory -*.hst -*.ver - -# easy-todo -*.lod - -# xcolor -*.xcp - -# xmpincl -*.xmpi - -# xindy -*.xdy - -# xypic precompiled matrices and outlines -*.xyc -*.xyd - -# endfloat -*.ttt -*.fff - -# Latexian -TSWLatexianTemp* - -## Editors: -# WinEdt -*.bak -*.sav - -# Texpad -.texpadtmp - -# LyX -*.lyx~ - -# Kile -*.backup - -# gummi -.*.swp - -# KBibTeX -*~[0-9]* - -# TeXnicCenter -*.tps - -# auto folder when using emacs and auctex -./auto/* -*.el - -# expex forward references with \gathertags -*-tags.tex - -# standalone packages -*.sta - -# Makeindex log files -*.lpz - -# xwatermark package -*.xwm - -# REVTeX puts footnotes in the bibliography by default, unless the nofootinbib -# option is specified. Footnotes are the stored in a file with suffix Notes.bib. -# Uncomment the next line to have this generated file ignored. -#*Notes.bib +*.pdf \ No newline at end of file diff --git a/.vscode/extensions.json b/.vscode/extensions.json deleted file mode 100644 index 1dd41c5..0000000 --- a/.vscode/extensions.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "recommendations": [ - "james-yu.latex-workshop" - ] -} diff --git a/.vscode/settings.json b/.vscode/settings.json index b1e001e..af5e00f 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,48 +1,6 @@ { - "latex-workshop.latex.recipe.default": "latexmk (lualatex)", - "latex-workshop.latex.tools": [ - { - "name": "lualatexmk", - "command": "latexmk", - "args": [ - "-shell-escape", - "-synctex=1", - "-interaction=nonstopmode", - "-file-line-error", - "-lualatex", - "-outdir=%OUTDIR%", - "%DOC%" - ], - "env": {}, - } - ], - "gitlens.codeLens.authors.enabled": false, - "gitlens.codeLens.recentChange.enabled": false, - "files.exclude": { - // defaults - "**/.git": true, - "**/.svn": true, - "**/.hg": true, - "**/CVS": true, - "**/.DS_Store": true, - "**/Thumbs.db": true, - // latex stuff - "**/*.aux": true, - "**/*.lof": true, - "**/*.log": true, - "**/*.lot": true, - "**/*.fls": true, - "**/*.out": true, - "**/*.toc": true, - "**/*.fmt": true, - "**/*.fot": true, - "**/*.cb": true, - "**/*.cb2": true, - "**/.*.lb": true, - "**/*.bbl": true, - "**/*.blg": true, - "**/*.fdb_latexmk": true, - "**/*.synctex.gz": true, - "**/*.synctex(busy)": true, + "typst-lsp.experimentalFormatterMode": "on", + "[typst]": { + "editor.defaultFormatter": "nvarner.typst-lsp" } } \ No newline at end of file diff --git a/flake.lock b/flake.lock index da7649b..cccdfcd 100644 --- a/flake.lock +++ b/flake.lock @@ -1,12 +1,53 @@ { "nodes": { - "flake-utils": { + "crane": { + "inputs": { + "nixpkgs": [ + "typst", + "nixpkgs" + ] + }, "locked": { - "lastModified": 1667395993, - "narHash": "sha256-nuEHfE/LcWyuSWnS8t12N1wc105Qtau+/OdUAjtQ0rA=", + "lastModified": 1698166613, + "narHash": "sha256-y4rdN4flxRiROqNi1waMYIZj/Fs7L2OrszFk/1ry9vU=", + "owner": "ipetkov", + "repo": "crane", + "rev": "b7db46f0f1751f7b1d1911f6be7daf568ad5bc65", + "type": "github" + }, + "original": { + "owner": "ipetkov", + "repo": "crane", + "type": "github" + } + }, + "flake-parts": { + "inputs": { + "nixpkgs-lib": "nixpkgs-lib" + }, + "locked": { + "lastModified": 1696343447, + "narHash": "sha256-B2xAZKLkkeRFG5XcHHSXXcP7To9Xzr59KXeZiRf4vdQ=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "c9afaba3dfa4085dbd2ccb38dfade5141e33d9d4", + "type": "github" + }, + "original": { + "id": "flake-parts", + "type": "indirect" + } + }, + "flake-utils": { + "inputs": { + "systems": "systems" + }, + "locked": { + "lastModified": 1694529238, + "narHash": "sha256-zsNZZGTGnMOf9YpHKJqMSsa0dXbfmxeoJ7xHlrt+xmY=", "owner": "numtide", "repo": "flake-utils", - "rev": "5aed5285a952e0b949eb3ba02c12fa4fcfef535f", + "rev": "ff7b65b44d01cf9ba6a71320833626af21126384", "type": "github" }, "original": { @@ -17,11 +58,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1673796341, - "narHash": "sha256-1kZi9OkukpNmOaPY7S5/+SlCDOuYnP3HkXHvNDyLQcc=", + "lastModified": 1700612854, + "narHash": "sha256-yrQ8osMD+vDLGFX7pcwsY/Qr5PUd6OmDMYJZzZi0+zc=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "6dccdc458512abce8d19f74195bb20fdb067df50", + "rev": "19cbff58383a4ae384dea4d1d0c823d72b49d614", "type": "github" }, "original": { @@ -31,10 +72,96 @@ "type": "github" } }, + "nixpkgs-lib": { + "locked": { + "dir": "lib", + "lastModified": 1696019113, + "narHash": "sha256-X3+DKYWJm93DRSdC5M6K5hLqzSya9BjibtBsuARoPco=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "f5892ddac112a1e9b3612c39af1b72987ee5783a", + "type": "github" + }, + "original": { + "dir": "lib", + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_2": { + "locked": { + "lastModified": 1698318101, + "narHash": "sha256-gUihHt3yPD7bVqg+k/UVHgngyaJ3DMEBchbymBMvK1E=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "63678e9f3d3afecfeafa0acead6239cdb447574c", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, "root": { "inputs": { "flake-utils": "flake-utils", - "nixpkgs": "nixpkgs" + "nixpkgs": "nixpkgs", + "typst": "typst" + } + }, + "systems": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, + "systems_2": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, + "typst": { + "inputs": { + "crane": "crane", + "flake-parts": "flake-parts", + "nixpkgs": "nixpkgs_2", + "systems": "systems_2" + }, + "locked": { + "lastModified": 1700840283, + "narHash": "sha256-ZueG6hz0W92izpJUkLcNQP+s06hGpHp9r/zx7nweYMc=", + "owner": "typst", + "repo": "typst", + "rev": "2f795b5c07171affa0709195a9dae3ed5c0afbeb", + "type": "github" + }, + "original": { + "owner": "typst", + "repo": "typst", + "type": "github" } } }, diff --git a/flake.nix b/flake.nix index a13391d..994f626 100644 --- a/flake.nix +++ b/flake.nix @@ -1,15 +1,65 @@ { inputs = { + typst.url = "github:typst/typst"; nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; flake-utils.url = "github:numtide/flake-utils"; }; - outputs = { self, nixpkgs, flake-utils }: + outputs = { self, nixpkgs, typst, flake-utils }: flake-utils.lib.eachDefaultSystem (system: - let pkgs = nixpkgs.legacyPackages.${system}; + let + pkgs = import nixpkgs { + inherit system; + overlays = [ typst.overlays.default ]; + }; + fonts_path = with pkgs; + lib.concatStringsSep ":" [ lato font-awesome raleway ]; in { devShell = pkgs.mkShell { - buildInputs = with pkgs; [ texlive.combined.scheme-full inkscape ]; + packages = with pkgs; [ + typst-dev + typstfmt + typst-lsp + typst-live + typst-preview + ]; + + TYPST_FONT_PATHS = fonts_path; + }; + + packages.default = pkgs.stdenvNoCC.mkDerivation { + name = "resume"; + + dontUnpack = true; + buildInputs = with pkgs; [ typst-dev ]; + TYPST_FONT_PATHS = fonts_path; + + src = ./.; + + fontawesome = pkgs.fetchFromGitHub { + owner = "duskmoon314"; + repo = "typst-fontawesome"; + rev = "1a0fcdca90ee07f297294c9c56fbcf3114340a47"; + hash = "sha256-h9LZum2f9+rZ4l4hjcmE49gDLVlbJUkRi1xSbJLVAGg="; + }; + + buildPhase = '' + # copy sources + cp -r $src/src . + chmod -R +w src + + # replace fontawesome remote import with local import + cp $fontawesome/lib.typ src/fontawesome.typ + sed -i 's/#import "@preview\/fontawesome:0\.1\.0": \*/#import "fontawesome.typ": */g' src/resume.typ + + # compile typst to pdf + typst compile src/resume.typ resume.pdf + ''; + + installPhase = '' + mkdir -p $out + cp resume.pdf $out/resume.pdf + ''; }; }); } diff --git a/src/cover-letter/cover.cls b/src/cover-letter/cover.cls deleted file mode 100644 index 1657c89..0000000 --- a/src/cover-letter/cover.cls +++ /dev/null @@ -1,111 +0,0 @@ -% Intro Options -\ProvidesClass{cover}[2014/04/30 CV class] -\NeedsTeXFormat{LaTeX2e} -\DeclareOption{print}{\def\@cv@print{}} -\DeclareOption*{% - \PassOptionsToClass{\CurrentOption}{article} -} -\ProcessOptions\relax -\LoadClass{article} - -% Package Imports -\usepackage[hmargin=2.55cm, vmargin=2.55cm]{geometry} -\usepackage[colorlinks = true, - linkcolor = blue, - urlcolor = blue, - citecolor = blue, - anchorcolor = blue]{hyperref} - -\usepackage[usenames,dvipsnames]{xcolor} -\usepackage{titlesec} -\usepackage[absolute]{textpos} -\usepackage{fontspec,xltxtra,xunicode} -\usepackage{ragged2e} - -% Publications -\usepackage{cite} -\renewcommand\refname{\vskip -1.5cm} - -% Color definitions -\usepackage[usenames,dvipsnames]{xcolor} -\definecolor{date}{HTML}{666666} -\definecolor{primary}{HTML}{2b2b2b} -\definecolor{headings}{HTML}{6A6A6A} -\definecolor{subheadings}{HTML}{333333} - -% Set main fonts -\usepackage{fontspec} -\setmainfont[Color=primary, Path = ../fonts/lato/,BoldItalicFont=Lato-RegIta,BoldFont=Lato-Reg,ItalicFont=Lato-LigIta]{Lato-Lig} -\setsansfont[Scale=MatchLowercase,Mapping=tex-text, Path = ../fonts/raleway/]{Raleway-ExtraLight} - -% Date command -\usepackage[absolute]{textpos} -% \usepackage[UKenglish]{isodate} -\setlength{\TPHorizModule}{1mm} -\setlength{\TPVertModule}{1mm} -\newcommand{\lastupdated}{\begin{textblock}{60}(155,5) - \color{date}\fontspec[Path = ../fonts/raleway/]{Raleway-ExtraLight}\fontsize{8pt}{10pt}\selectfont - Last Updated on \today - \end{textblock}} - -% Name command -\newcommand{\namesection}[3]{ - \centering{ - \fontsize{40pt}{60pt} - \fontspec[Path = ../fonts/lato/]{Lato-Hai}\selectfont #1 - \fontspec[Path = ../fonts/lato/]{Lato-Lig}\selectfont #2 - } \\[5pt] - \centering{ - \color{headings} - \fontspec[Path = ../fonts/raleway/]{Raleway-Medium}\fontsize{11pt}{14pt}\selectfont #3} - \noindent\makebox[\linewidth]{\color{headings}\rule{\paperwidth}{0.0pt}} - \vspace{0pt} -} - -% Section seperators -\usepackage{titlesec} -\titlespacing{\section}{0pt}{0pt}{0pt} -\titlespacing{\subsection}{0pt}{0pt}{0pt} -\newcommand{\sectionsep}{\vspace{8pt}} - -% Headings command -\titleformat{\section}{\color{headings} - \scshape\fontspec[Path = ../fonts/lato/]{Lato-Lig}\fontsize{16pt}{24pt}\selectfont \raggedright\uppercase}{}{0em}{} - -% Subeadings command -\titleformat{\subsection}{ - \color{subheadings}\fontspec[Path = ../fonts/lato/]{Lato-Bol}\fontsize{12pt}{12pt}\selectfont\bfseries\uppercase}{}{0em}{} - -\newcommand{\runsubsection}[1]{ - \color{subheadings}\fontspec[Path = ../fonts/lato/]{Lato-Bol}\fontsize{12pt}{12pt}\selectfont\bfseries\uppercase {#1} \normalfont} - -% Descriptors command -\newcommand{\descript}[1]{ - \color{subheadings}\raggedright\scshape\fontspec[Path = ../fonts/raleway/]{Raleway-Medium}\fontsize{11pt}{13pt}\selectfont {#1 \\} \normalfont} - -% Location command -\newcommand{\location}[1]{ - \color{headings}\raggedright\fontspec[Path = ../fonts/raleway/]{Raleway-Medium}\fontsize{10pt}{12pt}\selectfont {#1\\} \normalfont} - -% Bullet Lists with fewer gaps command -\newenvironment{tightemize}{ - \vspace{-\topsep}\begin{itemize}\itemsep1pt \parskip0pt \parsep0pt} - {\end{itemize}\vspace{-\topsep}} - -% Cover Letter -\newcommand{\companyname}[1]{\raggedright\fontspec[Path = ../fonts/lato/]{Lato-Bol}\fontsize{12pt}{14pt}\selectfont {#1 \\} \normalfont} - -\newcommand{\companyaddress}[1]{\raggedright\fontspec[Path = ../fonts/raleway/]{Raleway-Medium}\fontsize{11pt}{13pt}\selectfont {#1 \\}\mbox{}\\\mbox{}\\ \normalfont} - -\newcommand{\currentdate}[1]{\raggedleft\fontspec[Path = ../fonts/raleway/]{Raleway-Medium}\fontsize{11pt}{13pt}\selectfont {#1 \\} \normalfont} - -% Letter content command -\newcommand{\lettercontent}[1]{\justifying\noindent\fontspec[Path = ../fonts/raleway/]{Raleway-Medium}\fontsize{11pt}{13pt}\selectfont {#1 \\}\mbox{} \normalfont} - -% \newcommand{\lettercontent}[1]{\raggedright\fontspec[Path = ../fonts/raleway/]{Raleway-Medium}\fontsize{11pt}{13pt}\selectfont {#1 \\}\mbox{}\\ \normalfont} - -\newcommand{\closing}[1]{\raggedright\fontspec[Path = ../fonts/raleway/]{Raleway-Medium}\fontsize{11pt}{13pt}\selectfont {#1 \\}\mbox{}\\\mbox{}\\ \normalfont} - -\newcommand{\signature}[1]{\raggedright\fontspec[Path = ../fonts/raleway/]{Raleway-Medium}\fontsize{11pt}{13pt}\selectfont {#1 \\} \normalfont} - -\newcommand{\inlinebold}[1]{\fontspec[Path = ../fonts/raleway/]{Raleway-Bold}\fontsize{11pt}{13pt}\selectfont\bfseries {#1} \fontspec[Path = ../fonts/raleway/]{Raleway-Medium}\fontsize{11pt}{13pt}\selectfont} diff --git a/src/cover-letter/cover.tex b/src/cover-letter/cover.tex deleted file mode 100644 index 9bdc944..0000000 --- a/src/cover-letter/cover.tex +++ /dev/null @@ -1,68 +0,0 @@ -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% Deedy - Cover Letter Template -% LaTeX Template -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -\documentclass[]{cover} -\usepackage{fancyhdr} -\usepackage{fontawesome} - -\pagestyle{fancy} -\fancyhf{} - -\rfoot{Page \thepage \hspace{1pt}} -\thispagestyle{empty} -\renewcommand{\headrulewidth}{0pt} -\begin{document} - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% -% TITLE NAME -% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\namesection{Laurent}{Fainsin}{ - \faGithub \ \href{https://laurent.fainsin.bzh/}{https://laurent.fainsin.bzh} - \quad - \faEnvelopeO \ \href{mailto:laurent@fainsin.bzh}{laurent@fainsin.bzh} - \quad - \faPhone \ \href{tel:+33781492838}{0781492838} -} - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% -% MAIN COVER LETTER CONTENT -% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -\hfill - -\begin{minipage}[t]{0.5\textwidth} - \companyname{Company Recruitment Team} - \companyaddress{ - Hugging Face \\ - Paris, France - } -\end{minipage} -\begin{minipage}[t]{0.49\textwidth} - \currentdate{\today} -\end{minipage} - -\lettercontent{Dear Sir or Madam,} - -\lettercontent{I am a second year \inlinebold{Master's student in Computer Science} at ENSSEIHT. I am writing to express interest in taking part in Julia Computing as an \inlinebold{Intern in Machine Learning Engineering} starting in \inlinebold{March 2023}. I am aware of Hugging Face's role in the future of machine learning, and I would be thrilled to contribute.} - -\lettercontent{As a master student, I have worked on Machine Learning through \inlinebold{practicums}. I have experience in using and writing simple algorithms such as K-Means, K-NN, Regressions or more advanced architectures such as GANs, VAEs, Classifiers... I also have good knowledge of Probability, Statistics, Optimization and Partial Differential Equations.} - -\lettercontent{I have worked for 3 months as a \inlinebold{Research Assistant} in Computer Vision for the REVA team of the Research Institute in Computer Science of Toulouse. We studied, implemented and deployed to production a fine-tuned Mask-RCNN Neural Network to detect spherical markers in photographs for photometric stereo lightning calibration.} - -\lettercontent{In addition to this, I have taken the initiative to learn more about Machine Learning on my personal time, by reading books on the fundamentals of Neural Networks, by listening to lectures, by reading blog posts and threads on specific subjects. For example, I have recently taken the initiative to learn new models of image generation with diffusion, by reading and trying to implement by myself the paper "Denoising Diffusion Probabilistic Models" by Jonathan Ho et al. from NeurIPS 2020. You may find all my projects on my personal website.} - -\lettercontent{I define myself as someone humble but ambitious with good communication and social skills. I have a strong appetite for facing and overcoming difficulties therefore I am thrilled to have the possibility to work for your teams at the very top of innovation.} - -\lettercontent{Thank you for your time and consideration. I am eager to discuss my qualifications further at an \inlinebold{interview}. Please feel free to \inlinebold{contact me} to set up a time to chat. I look forward to hearing from you.} - -\closing{Yours faithfully, \vspace{-0.88cm}} -\signature{Laurent Fainsin.} - -\end{document} -\documentclass[]{article} diff --git a/src/fonts/lato/Lato-Bla.ttf b/src/fonts/lato/Lato-Bla.ttf deleted file mode 100755 index fbd82fa..0000000 --- a/src/fonts/lato/Lato-Bla.ttf +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:8b32bc539ca95dda2d2206a43234b5f3b0fe964bd25966c860bc80ec7f06d702 -size 114588 diff --git a/src/fonts/lato/Lato-BlaIta.ttf b/src/fonts/lato/Lato-BlaIta.ttf deleted file mode 100755 index e008912..0000000 --- a/src/fonts/lato/Lato-BlaIta.ttf +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:09660c19f1773a761b2e56a05b666813dfd6e6196b4ad9d85ff881f29a30e839 -size 111616 diff --git a/src/fonts/lato/Lato-Bol.ttf b/src/fonts/lato/Lato-Bol.ttf deleted file mode 100755 index 6f6a974..0000000 --- a/src/fonts/lato/Lato-Bol.ttf +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:14f7de6b616950395062902eb8f70f01c0a901223db5d40f2a05728ac4a830f6 -size 121788 diff --git a/src/fonts/lato/Lato-BolIta.ttf b/src/fonts/lato/Lato-BolIta.ttf deleted file mode 100755 index 533bf7f..0000000 --- a/src/fonts/lato/Lato-BolIta.ttf +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:2101c00b9c973a666bf128b3a776a45df7107bd29116079ee00541a8863d50ce -size 120312 diff --git a/src/fonts/lato/Lato-Hai.ttf b/src/fonts/lato/Lato-Hai.ttf deleted file mode 100755 index ad0eb73..0000000 --- a/src/fonts/lato/Lato-Hai.ttf +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:01ef8d755f412a945aa0b1221bfe98852200b549c4f16aad377e49937a30bd2f -size 115316 diff --git a/src/fonts/lato/Lato-HaiIta.ttf b/src/fonts/lato/Lato-HaiIta.ttf deleted file mode 100755 index 5c48063..0000000 --- a/src/fonts/lato/Lato-HaiIta.ttf +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:95a84782e0797d27d079d9cc6ab9bb24ea67558953099bf4481c08e95b2ae70a -size 91460 diff --git a/src/fonts/lato/Lato-Lig.ttf b/src/fonts/lato/Lato-Lig.ttf deleted file mode 100755 index 046cf99..0000000 --- a/src/fonts/lato/Lato-Lig.ttf +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:05903540a0675491fda9015a78c05bb589769951befab12a58a5568175566b49 -size 122524 diff --git a/src/fonts/lato/Lato-LigIta.ttf b/src/fonts/lato/Lato-LigIta.ttf deleted file mode 100755 index 71930ec..0000000 --- a/src/fonts/lato/Lato-LigIta.ttf +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:b1af3a551a7e2d9fb640773197a00f6970a2b9c6699b0c786059a37453d5d12c -size 91600 diff --git a/src/fonts/lato/Lato-Reg.ttf b/src/fonts/lato/Lato-Reg.ttf deleted file mode 100755 index 2f9ceb6..0000000 --- a/src/fonts/lato/Lato-Reg.ttf +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:7ae714b63c2c8b940bdd211a0cc678f01168a34eea8aa13c0df25364f29238a7 -size 120196 diff --git a/src/fonts/lato/Lato-RegIta.ttf b/src/fonts/lato/Lato-RegIta.ttf deleted file mode 100755 index ca662ff..0000000 --- a/src/fonts/lato/Lato-RegIta.ttf +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:1a63dda1d2f019336e934e41d7ffa8f3e5f4cee0eb6a0c4734827dbe09ce5015 -size 118352 diff --git a/src/fonts/raleway/Raleway-Bold.otf b/src/fonts/raleway/Raleway-Bold.otf deleted file mode 100755 index 52d1573..0000000 --- a/src/fonts/raleway/Raleway-Bold.otf +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:7004222230d77e6b59d8312c8d7decbcc080e67c3821f1cd7b7e3f34f41a69fb -size 66088 diff --git a/src/fonts/raleway/Raleway-ExtraBold.otf b/src/fonts/raleway/Raleway-ExtraBold.otf deleted file mode 100755 index ee76395..0000000 --- a/src/fonts/raleway/Raleway-ExtraBold.otf +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:2b6e82870aba6a9089d341e67d7a7edacec2733ef0dab23e01d9d6c826cc6f52 -size 66336 diff --git a/src/fonts/raleway/Raleway-ExtraLight.otf b/src/fonts/raleway/Raleway-ExtraLight.otf deleted file mode 100755 index aaa2394..0000000 --- a/src/fonts/raleway/Raleway-ExtraLight.otf +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:a9b4536b59d8e041280b7c03ad3a182046a87ef6eb8a5f8879a7abc5615783da -size 63364 diff --git a/src/fonts/raleway/Raleway-Heavy.otf b/src/fonts/raleway/Raleway-Heavy.otf deleted file mode 100755 index 5ff6833..0000000 --- a/src/fonts/raleway/Raleway-Heavy.otf +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:8a131abb3239b5cf7dcb3d500b16dc33cd0c66d423737be6a88cd3e3c00ea867 -size 70484 diff --git a/src/fonts/raleway/Raleway-Light.otf b/src/fonts/raleway/Raleway-Light.otf deleted file mode 100755 index 024a7f9..0000000 --- a/src/fonts/raleway/Raleway-Light.otf +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:3554e667904ae6eba906af71da95ceac81f4610c18560d71b549ffe9f8f2f48b -size 64488 diff --git a/src/fonts/raleway/Raleway-Medium.otf b/src/fonts/raleway/Raleway-Medium.otf deleted file mode 100755 index d98c2dd..0000000 --- a/src/fonts/raleway/Raleway-Medium.otf +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:31f892971f709c5e5d5a19b0a2445d3f90a9de42f2395a0ac113c4d7d933de06 -size 64776 diff --git a/src/fonts/raleway/Raleway-Regular.otf b/src/fonts/raleway/Raleway-Regular.otf deleted file mode 100755 index 1cbf63d..0000000 --- a/src/fonts/raleway/Raleway-Regular.otf +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:a1321362dc043b61962d04485022ce923d0a1c926c4dbf59ee6ea9ce6e520c4d -size 64368 diff --git a/src/fonts/raleway/Raleway-SemiBold.otf b/src/fonts/raleway/Raleway-SemiBold.otf deleted file mode 100755 index 66b6eb8..0000000 --- a/src/fonts/raleway/Raleway-SemiBold.otf +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:6d75566fed3b03036afe4f81a2d38ed1dfa3100a5c2e840abe4f8a875c73ee39 -size 65696 diff --git a/src/fonts/raleway/Raleway-Thin.otf b/src/fonts/raleway/Raleway-Thin.otf deleted file mode 100755 index eaec052..0000000 --- a/src/fonts/raleway/Raleway-Thin.otf +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:f2e1069b99f50e3c1d3b3c2aa54aebbd5d8eca97787df477a40389f7e2982efa -size 64256 diff --git a/src/resume/hf-logo.svg b/src/hf-logo.svg similarity index 100% rename from src/resume/hf-logo.svg rename to src/hf-logo.svg diff --git a/src/references.bib b/src/references.bib new file mode 100644 index 0000000..c5cc90b --- /dev/null +++ b/src/references.bib @@ -0,0 +1,11 @@ +@article{ml, + author = {Laurent Fainsin and Jean Mélou and Lilian Calvet and Antoine Laurent and Axel Carlier and Jean-Denis Durou}, + title = {Neural sphere detection in images for lighting calibration}, + journal = {QCAV}, + year = {2023} +} +@patent{safran, + author = {Laurent Fainsin and Xavier Roynard and Michele Alessandro Bucci and Brian Staber}, + title = {Latent Generative Models for Conditional 3D Unstructured Mesh Blade Design}, + year = {2023} +} diff --git a/src/resume.typ b/src/resume.typ new file mode 100644 index 0000000..a7d993c --- /dev/null +++ b/src/resume.typ @@ -0,0 +1,177 @@ +#import "utils.typ": * +#import "@preview/fontawesome:0.1.0": * + +#set par(leading: 0.5em) + +#main( + name: "Laurent Fainsin", + lastupdated: "true", + date: "2023-11-23", + bibfile: [bib.json], + contacts: ( + ( + text: "laurent.fainsin.bzh", + link: "https://laurent.fainsin.bzh/", + icon: { fa-globe() + h(3pt) }, + ), + ( + text: "laurent@fainsin.bzh", + link: "mailto:laurent@fainsin.bzh", + icon: { fa-envelope() + h(3pt) }, + ), + ( + text: "0781492838", + link: "tel:+33781492838", + icon: { fa-phone() + h(3pt) }, + ), + ( + text: "laurent-fainsin", + link: "https://www.linkedin.com/in/laurent-fainsin/", + icon: { fa-linkedin() + h(3pt) }, + ), + ( + text: "Laurent2916", + link: "https://www.github.com/Laurent2916/", + icon: { fa-github() + h(3pt) }, + ), + ( + text: "1aurent", + link: "https://huggingface.co/1aurent?sort_datasets=downloads&sort_models=downloads", + icon: { box(image("hf-logo.svg", height: 12pt), baseline: 2pt) + h(2pt) }, + ), + ), + [ + #set text( + 10pt, + font: "lato", + fill: primary_colour, + weight: "light", + baseline: 0em, + ) + + #section("Education") + #subsection[ENSEEIHT INP-Toulouse] + #descript[Master in Perf. Computing] + #descript[focused on Academic Research] + #term[2022 — 2023][Toulouse, France] + + #subsection[ENSEEIHT INP-Toulouse] + #descript[MEng in Computer Science] + #descript[specialty in ML and CG] + #term[2020 — 2023][Toulouse, France] + + #subsection[LA PÉROUSE-KERICHEN] + #descript[Preparatory class (CPGE)] + #descript[PCSI, PSI] + #term[2018 — 2020][Brest, France] + + #section("Skills") + #subsection[Programming] + #info[Python, Julia, Shell, Java] + #info[C++, CUDA, SQL, LaTeX] + + #subsection[Languages] + #info[Fluent: English, French] + #info[Elementary: Japanese, Spanish] + + #subsection[Certificates] + French driver's license \ + Cambridge Linguaskill C1+ \ + AI for Medical Diagnosis \ + HuggingFace courses + + #section[About] + #subsection[Personal projects] + Reproducible Nix Infrastructure \ + Handwriting Denoising Diffusion \ + GBA Collaborative Emulator \ + SSL on Histology Datasets \ + "AI or NOT" Hackathon \ + Diffusers.jl + + #subsection[School projects] + JPEG & MPEG Compression \ + Distributed Data Tuple Space \ + 3D Inverse Problem Solver \ + Graph Machine Learning \ + OpenGL Mesh Renderer + + #subsection[OSS Contributor] + NixOS, HuggingFace \ + LightningAI, AliceVision + + #subsection[Hobbies] + Aquariums, OSS \ + Slacklining, Padel + ], + [ + #section("Professional Experience") + #jobtitle[Safran][Machine Learning Engineer Intern] + #term[March 2023 — September 2023][Paris, France] + #jobdetail[ + - Studied state of the art generative models for 3D data, such as PointNet++, + Graph U-Net, PointFlow, Point Voxel Diffusion and LION. + - Implemented a dozen architectures using libraries such as PyTorch Geometric, + PyTorch Lightning, HuggingFace Diffusers, HuggingFace Datasets, etc. Settled on + Latent Diffusion Models and classic model reduction methods. + - Trained models on specific aircraft industrial parts, conditioned on performance + metrics, such as drag coefficients, lift coefficients, etc. Evaluated the models + using Gaussian Processes and geometrical metrics. + - Released internally the models and code, enabling Safran engineers to generate + new parts with specific performance metrics and to easily reuse the code for + other applications. Submitted a patent. + ] + + #jobtitle[REVA — IRIT][Machine Learning Scientist Intern] + #term[June 2022 — September 2022][Toulouse, France] + #jobdetail[ + - Fine-tuned a state of the art deep learning model (DETR) to detect spherical + markers in images for photometric stereophography calibration. + - Collaborated with 3 engineers from MIKROS and Technicolor as part of the + ALICIA-Vision Labcom european project. + - Monitored hundreds of trainings using the MLOps platform Weights & Biases. + Achieved 90% GIoU on test data, providing fast and accurate segmentation. + - Built using the Pytorch Lightning framework, exported to ONNX format, deployed + to production in AliceVision with ONNXRuntime. + ] + + #section("Volunteer Experience") + #jobtitle[net7 / INP-net][Treasurer #text( + 12pt, + font: "Lato", + fill: subheadings_colour, + weight: "medium", + baseline: 0.03em, + )[/] President] + #term[September 2021 — September 2022][Toulouse, France] + #jobdetail[ + - Led and managed the association and its financing for a term of one year. + - Contributed to and developed the codebase used by 5000+ students per year. + Provided technical micro-trainings to hundreds of students. + - Planned and started the migration of our server room to an + _infrastructure as code_ Proxmox + Kubernetes virtual cluster. + - Acquired solid skills in system administration and its tools: Docker, Git, + Kubernetes, NixOS, NGINX, Apache, Redis, LDAP/CAS, CI/CD, etc. + ] + + #jobtitle[Toulouse Hacking convention][Volunteer] + #term[April 2022][Toulouse, France] + #jobdetail[ + - Helped set up and tear down the equipment for the 2 day event. + - Assisted in the hardware CTF organization after the event. + ] + + #jobtitle[Capitole du Libre][Volunteer] + #term[November 2022][Toulouse, France] + #jobdetail[ + - Helped with the "nix install party" of the 2 day event. + - Promoted free software and introduced attendees to GNU+Linux. + ] + + #section("Publications & Patents") + #{ + set text(10pt, font: "Lato", fill: primary_colour, weight: "light") + bibliography("references.bib", full: true, title: none) + } + ], +) diff --git a/src/resume/patents.bib b/src/resume/patents.bib deleted file mode 100644 index 2c9338c..0000000 --- a/src/resume/patents.bib +++ /dev/null @@ -1,5 +0,0 @@ -@patent{safran, - author = {Laurent Fainsin and Xavier Roynard and Michele Alessandro Bucci and Brian Staber}, - title = {Latent Generative Models for Conditional 3D Unstructured Mesh Blade Design (patent pending)}, - year = {2023} -} diff --git a/src/resume/publications.bib b/src/resume/publications.bib deleted file mode 100644 index 4bb9165..0000000 --- a/src/resume/publications.bib +++ /dev/null @@ -1,7 +0,0 @@ -@article{ml, - author = {Laurent Fainsin and Jean Mélou and Lilian Calvet and Antoine Laurent and Axel Carlier and Jean-Denis Durou}, - title = {Neural sphere detection in images for lighting calibration}, - journal = {QCAV}, - year = {2023}, - url = {https://hal.science/hal-04160733} -} diff --git a/src/resume/resume.cls b/src/resume/resume.cls deleted file mode 100644 index f67a3ee..0000000 --- a/src/resume/resume.cls +++ /dev/null @@ -1,92 +0,0 @@ -% Intro Options -\ProvidesClass{resume}[2014/04/30 CV class] -\NeedsTeXFormat{LaTeX2e} -\DeclareOption{print}{\def\@cv@print{}} -\DeclareOption*{% - \PassOptionsToClass{\CurrentOption}{article} -} -\ProcessOptions\relax -\LoadClass{article} - -% Package Imports -\usepackage[a4paper, hmargin=1cm, vmargin=0.7cm, bottom=1.5cm]{geometry} -\usepackage[colorlinks = true, - linkcolor = blue, - urlcolor = blue, - citecolor = blue, - anchorcolor = blue]{hyperref} - -% Publications -\usepackage{cite} -\renewcommand\refname{\vskip -1.5cm} - -% Color definitions -\usepackage[usenames,dvipsnames]{xcolor} -\definecolor{date}{HTML}{666666} -\definecolor{primary}{HTML}{2b2b2b} -\definecolor{headings}{HTML}{6A6A6A} -\definecolor{subheadings}{HTML}{333333} - -% Set main fonts -\usepackage{fontspec} -\setmainfont[Color=primary, Path = ../fonts/lato/,BoldItalicFont=Lato-RegIta,BoldFont=Lato-Reg,ItalicFont=Lato-LigIta]{Lato-Lig} -\setsansfont[Scale=MatchLowercase,Mapping=tex-text, Path = ../fonts/raleway/]{Raleway-ExtraLight} - -% Date command -\usepackage[absolute]{textpos} -\usepackage[UKenglish]{isodate} -\setlength{\TPHorizModule}{1mm} -\setlength{\TPVertModule}{1mm} -\newcommand{\lastupdated}{\begin{textblock}{60}(155,5) - \color{date}\fontspec[Path = ../fonts/raleway/]{Raleway-ExtraLight}\fontsize{8pt}{10pt}\selectfont - Last Updated on \today - \end{textblock}} - -% Name command -\newcommand{\namesection}[3]{ - \centering{ - \fontsize{50pt}{60pt} - \fontspec[Path = ../fonts/lato/]{Lato-Hai}\selectfont #1 - \fontspec[Path = ../fonts/lato/]{Lato-Lig}\selectfont #2 - } \\[5pt] - \centering{ - \color{headings} - \fontspec[Path = ../fonts/raleway/]{Raleway-Medium}\fontsize{11pt}{14pt}\selectfont #3} - \noindent\makebox[\linewidth]{\color{headings}\rule{\paperwidth}{0.4pt}} - \vspace{-15pt} -} - -% Section seperators -\usepackage{titlesec} -\titlespacing{\section}{0pt}{0pt}{0pt} -\titlespacing{\subsection}{0pt}{0pt}{0pt} -\newcommand{\sectionsep}{\vspace{7pt}} - -% Headings command -\titleformat{\section}{\color{headings} - \scshape\fontspec[Path = ../fonts/lato/]{Lato-Lig}\fontsize{16pt}{24pt}\selectfont \raggedright\uppercase}{}{0em}{} - -% Subeadings command -\titleformat{\subsection}{ - \color{subheadings}\fontspec[Path = ../fonts/lato/]{Lato-Bol}\fontsize{12pt}{12pt}\selectfont\bfseries\uppercase}{}{0em}{} - -\newcommand{\runsubsection}[1]{ - \color{subheadings}\fontspec[Path = ../fonts/lato/]{Lato-Bol}\fontsize{12pt}{12pt}\selectfont\bfseries\uppercase {#1} \normalfont} - -% Descriptors command -\newcommand{\descript}[1]{ - \color{subheadings}\raggedright\scshape\fontspec[Path = ../fonts/raleway/]{Raleway-Medium}\fontsize{11pt}{13pt}\selectfont {#1 \\} \normalfont} - -% Descriptors command -\newcommand{\descriptnonewline}[1]{ - \color{subheadings}\raggedright\scshape\fontspec[Path = ../fonts/raleway/]{Raleway-Medium}\fontsize{11pt}{13pt}\selectfont {#1} \normalfont} - -% Location command -\newcommand{\location}[1]{ - \color{headings}\raggedright\fontspec[Path = ../fonts/raleway/]{Raleway-Medium}\fontsize{10pt}{12pt}\selectfont {#1\\} \normalfont} - -% Bullet Lists with fewer gaps command -\newenvironment{tightemize}{ - \vspace{-\topsep}\begin{itemize}\itemsep1pt \parskip0pt \parsep0pt} - {\end{itemize}\vspace{-\topsep}} - diff --git a/src/resume/resume.tex b/src/resume/resume.tex deleted file mode 100644 index a07363a..0000000 --- a/src/resume/resume.tex +++ /dev/null @@ -1,246 +0,0 @@ -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% Deedy - One Page Two Column Resume -% LaTeX Template -% Version 1.2 (16/9/2014) -% -% Original author: -% Debarghya Das (http://debarghyadas.com) -% -% Original repository: -% https://github.com/deedydas/Deedy-Resume -% -% IMPORTANT: THIS TEMPLATE NEEDS TO BE COMPILED WITH XeLaTeX -% -% This template uses several fonts not included with Windows/Linux by -% default. If you get compilation errors saying a font is missing, find the line -% on which the font is used and either change it to a font included with your -% operating system or comment the line out to use the default font. -% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% -% TODO: -% 1. Integrate biber/bibtex for article citation under publications. -% 2. Figure out a smoother way for the document to flow onto the next page. -% 3. Add styling information for a "Projects/Hacks" section. -% 4. Add location/address information -% 5. Merge OpenFont and MacFonts as a single sty with options. -% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% -% CHANGELOG: -% v1.1: -% 1. Fixed several compilation bugs with \renewcommand -% 2. Got Open-source fonts (Windows/Linux support) -% 3. Added Last Updated -% 4. Move Title styling into .sty -% 5. Commented .sty file. -% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% -% Known Issues: -% 1. Overflows onto second page if any column's contents are more than the -% vertical limit -% 2. Hacky space on the first bullet point on the second column. -% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -\documentclass[]{resume} -\usepackage{fancyhdr} -\usepackage{fontawesome} -\usepackage{svg} - -\pagestyle{fancy} -\fancyhf{} - -\rfoot{\bf{For additional resources (projects, code, PDFs, etc.) refer to personal website}} - -\begin{document} - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% -% TITLE NAME -% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\namesection{Laurent}{Fainsin}{ - \faGlobe \ \href{https://laurent.fainsin.bzh/}{laurent.fainsin.bzh} - \quad - \faEnvelopeO \ \href{mailto:laurent@fainsin.bzh}{laurent@fainsin.bzh} - \quad - \faPhone \ \href{tel:+33781492838}{0781492838} - \\ \vspace*{2pt} - \faLinkedin \ \href{https://www.linkedin.com/in/laurent-fainsin/}{laurent-fainsin} - \quad - \faGithub \ \href{https://www.github.com/Laurent2916/}{Laurent2916} - \quad - \raisebox{-2pt}{\includesvg[height=11pt]{hf-logo.svg}} \href{https://huggingface.co/1aurent?sort_datasets=downloads&sort_models=downloads}{1aurent} -} - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% -% COLUMN ONE -% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -\begin{minipage}[t]{0.33\textwidth} - - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - % EDUCATION - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - - \section{Education} - - \subsection{ENSEEIHT INP-Toulouse} - \descript{Master in Perf. Computing} - \descript{focused on Academic Research} - \location{2022 — 2023 | Toulouse, France} - \sectionsep - - \subsection{ENSEEIHT INP-Toulouse} - \descript{MEng in Computer Science} - \descript{specialty in ML and CG} - \location{2020 — 2023 | Toulouse, France} - \sectionsep - - \subsection{LA PÉROUSE-KERICHEN} - \descript{Preparatory class (CPGE)} - \descript{PCSI, PSI} - \location{2018 — 2020 | Brest, France} - \sectionsep - - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - % SKILLS - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - - \section{Skills} - \subsection{Programming} - Python \textbullet{} Julia \textbullet{} Shell \textbullet{} Java \\ - C++ \textbullet{} CUDA \textbullet{} SQL \textbullet{} \LaTeX\ - \sectionsep - - \subsection{Languages} - \descriptnonewline{Fluent} \ French \textbullet{} English \\ - \descriptnonewline{Elementary} \ Japanese \textbullet{} Spanish - \sectionsep - - \subsection{Certificates} - French driver's license \\ - Cambridge Linguaskill C1+ \\ - AI for Medical Diagnosis \\ - HuggingFace courses - \sectionsep - - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - % ABOUT - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - - \section{About} - \subsection{Personal projects} - Reproducible Nix Infrastructure \\ - Handwriting Denoising Diffusion \\ - GBA Collaborative Emulator \\ - SSL on Histology Datasets \\ - ``AI or NOT" Hackathon \\ - Diffusers.jl - \sectionsep - - \subsection{School projects} - JPEG \& MPEG Compression \\ - Distributed Data Tuple Space \\ - 3D Inverse Problem Solver \\ - Graph Machine Learning \\ - OpenGL Mesh Renderer - \sectionsep - - \subsection{OSS Contributor} - NixOS \textbullet{} HuggingFace \\ - LightningAI \textbullet{} AliceVision - \sectionsep - - \subsection{Hobbies} - Aquariums \textbullet{} OSS \\ - Slacklining \textbullet{} Padel - - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - % - % COLUMN TWO - % - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -\end{minipage} -\hfill -\begin{minipage}[t]{0.66\textwidth} - - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - % EXPERIENCE - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - - \section{Professional Experience} - - \runsubsection{Safran} | \descript{Machine Learning Engineer Intern} - \location{March 2023 — September 2023 | Paris, France} - \vspace{10pt} % Hacky fix for awkward extra vertical space - \begin{tightemize} - \item Studied state of the art generative models for 3D data, such as PointNet++, Graph U-Net, PointFlow, Point Voxel Diffusion and LION. - \item Implemented a dozen architectures using libraries such as PyTorch Geometric, PyTorch Lightning, HuggingFace Diffusers, HuggingFace Datasets, etc. Settled on Latent Diffusion Models and classic model reduction methods. - \item Trained models on specific aircraft industrial parts, conditioned on performance metrics, such as drag coefficients, lift coefficients, etc. Evaluated the models using Gaussian Processes and geometrical metrics. - \item Released internally the models and code, enabling Safran engineers to generate new parts with specific performance metrics and to easily reuse the code for other applications. Submitted a patent. - \end{tightemize} - \sectionsep - - \runsubsection{REVA — IRIT} | \descript{Machine Learning Scientist Intern} - \location{June 2022 — September 2022 | Toulouse, France} - \begin{tightemize} - \item Fine-tuned a state of the art deep learning model (DETR) to detect spherical markers in images for photometric stereophography calibration. - \item Collaborated with 3 engineers from MIKROS and Technicolor as part of the ALICIA-Vision Labcom european project. - \item Monitored hundreds of trainings using the MLOps platform Weights \& Biases. Achieved 90\% GIoU on test data, providing fast and accurate segmentation. - \item Built using the Pytorch Lightning framework, exported to ONNX format, deployed to production in AliceVision with ONNXRuntime. - \end{tightemize} - \sectionsep - - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - % VOLUNTEER EXPERIENCE - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - - \section{Volunteer Experience} - \runsubsection{net7 / INP-net} | \descript{Treasurer / President} - \location{September 2021 — September 2022 | Toulouse, France} - \begin{tightemize} - \item Led and managed the association and its financing for a term of one year. - \item Contributed to and developed the codebase used by 5000+ students per year. \\ Provided technical micro-trainings to hundreds of students. - \item Planned and started the migration of our server room to an \textit{infrastructure as code} Proxmox + Kubernetes virtual cluster. - \item Acquired solid skills in system administration and its tools: \\ Docker, Git, Kubernetes, NixOS, NGINX, Apache, Redis, LDAP/CAS, CI/CD, etc. - \end{tightemize} - \sectionsep - - \runsubsection{Toulouse Hacking convention} | \descript{Volunteer} - \location{April 2022 | Toulouse, France} - \begin{tightemize} - \item Helped set up and tear down the equipment for the 2 day event. - \item Assisted in the hardware CTF organization after the event. - \end{tightemize} - \sectionsep - - \runsubsection{Capitole du Libre} | \descript{Volunteer} - \location{November 2022 | Toulouse, France} - \begin{tightemize} - \item Helped with the "nix install party" of the 2 day event. - \item Promoted free software and introduced attendees to GNU+Linux. - \end{tightemize} - \sectionsep - - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - % PUBLICATION & PATENTS - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - - \section{Publications \& Patents} - \vspace{20pt} - \bibliographystyle{abbrv} - \bibliography{publications,patents} - \nocite{*} - - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - % END OF DOCUMENT - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -\end{minipage} -\end{document} diff --git a/src/utils.typ b/src/utils.typ new file mode 100644 index 0000000..b88b1ee --- /dev/null +++ b/src/utils.typ @@ -0,0 +1,169 @@ +// colors +#let date_colour = rgb("#666666") +#let primary_colour = rgb("#2b2b2b") +#let headings_colour = rgb("#6A6A6A") +#let subheadings_colour = rgb("#333333") + +// Section Headings (Education, Experience, etc) +#let section(title) = { + text( + 16pt, + font: "Lato", + fill: headings_colour, + weight: "light", + )[#upper[#title]\ ] +} + +// Subsection Headings (University, Company, etc) +#let subsection(content) = { + text( + 12pt, + font: "Lato", + fill: subheadings_colour, + weight: "bold", + )[#upper[#content]\ ] +} + +// Time period and location +#let term(period, location) = { + if location == [] or location == "" { + text(10pt, font: "Lato", fill: headings_colour, weight: "medium")[#period\ ] + } else { + text( + 10pt, + font: "Lato", + fill: headings_colour, + weight: "medium", + )[#period #text(baseline: -0.05em)[ | ] #location \ ] + } +} + +// Description of a job, degree, etc +#let descript(content) = { + text( + 11pt, + font: "Raleway", + weight: "medium", + fill: subheadings_colour, + )[#smallcaps(content)\ ] +} + +// Job title +#let jobtitle(firm, title) = { + text( + 12pt, + font: "Lato", + fill: subheadings_colour, + weight: "bold", + )[#upper(firm)] + text(baseline: -0.15em)[ | ] + text( + 11pt, + font: "Raleway", + fill: subheadings_colour, + weight: "medium", + )[#smallcaps(title)\ ] +} + +//job details +#let jobdetail(content) = { + text(10pt, font: "Lato", fill: primary_colour, weight: "light")[ + #enum(numbering: x => "", indent: 1em, body-indent: 0em)[ + #content + ] + ] +} + +// Details +#let info(content) = { + text(11pt, font: "Lato", fill: primary_colour, weight: "light")[#content\ ] +} + +#let awarddetail(time, award, organise) = { + set text( + 10pt, + font: "Lato", + fill: primary_colour, + weight: "light", + top-edge: "baseline", + bottom-edge: "baseline", + baseline: 0pt, + ) + grid(columns: (auto, auto, auto), gutter: 1em, time, award, organise) +} + +#let biblist(contents) = { + for ids in contents [ + #id.title (#id.year) + ] +} + +#let keyword(content) = { + text(12pt, font: "Lato", fill: headings_colour, weight: "light")[#content\ ] +} + +// last update +#let lastupdate(lastupdated, date)= { + if lastupdated == "true" { + set text(10pt, font: "Lato", fill: primary_colour, weight: "light") + block(width: 100%, height: 1.5em, align(right, { [Last updated: #date] })) + } +} + +#let main( + name: "", + address: "", + lastupdated: "", + date: "", + contacts: (), + bibfile: (), + left, + right, +) = { + // show contact details + let display(contacts) = { + set text(11pt, font: "Lato", fill: headings_colour, weight: "medium") + stack(dir: ltr, contacts.map(contact => { + if contact.link == none { + contact.text + } else if contact.icon == none { + link(contact.link)[#contact.text] + } else { + link(contact.link)[#contact.icon~#contact.text] + } + })) + } + + set page(margin: 1cm) + + // header + v(-25pt) + text( + 50pt, + font: "Lato", + fill: primary_colour, + weight: "light", + top-edge: "baseline", + bottom-edge: "baseline", + baseline: 50pt, + )[#align(center, name)] + + align(center)[ + #box(width: 60%)[ + #set text(spacing: 1em) + #contacts.map(contact => { + set text(11pt, font: "Lato", fill: headings_colour, weight: "medium") + link(contact.link)[#contact.icon#contact.text] + }).join(" ") + ] + ] + + line( + start: (0% - 1cm, 0pt), + end: (100% + 1cm, 0pt), + stroke: 0.5pt + primary_colour, + ) + + //Main Body + grid(columns: (1fr, 2fr), left, right) +} \ No newline at end of file diff --git a/typstfmt.toml b/typstfmt.toml new file mode 100644 index 0000000..94c3b5a --- /dev/null +++ b/typstfmt.toml @@ -0,0 +1,4 @@ +indent_space = 2 +max_line_length = 120 +experimental_args_breaking_consecutive = false +line_wrap = true