switch to typst
This commit is contained in:
parent
49750e243d
commit
1b8e81ec5b
1
.gitattributes
vendored
1
.gitattributes
vendored
|
@ -1 +0,0 @@
|
|||
src/fonts/** filter=lfs diff=lfs merge=lfs -text
|
305
.gitignore
vendored
305
.gitignore
vendored
|
@ -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
|
5
.vscode/extensions.json
vendored
5
.vscode/extensions.json
vendored
|
@ -1,5 +0,0 @@
|
|||
{
|
||||
"recommendations": [
|
||||
"james-yu.latex-workshop"
|
||||
]
|
||||
}
|
48
.vscode/settings.json
vendored
48
.vscode/settings.json
vendored
|
@ -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"
|
||||
}
|
||||
}
|
143
flake.lock
143
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"
|
||||
}
|
||||
}
|
||||
},
|
||||
|
|
56
flake.nix
56
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
|
||||
'';
|
||||
};
|
||||
});
|
||||
}
|
||||
|
|
|
@ -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}
|
|
@ -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}
|
|
@ -1,3 +0,0 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:8b32bc539ca95dda2d2206a43234b5f3b0fe964bd25966c860bc80ec7f06d702
|
||||
size 114588
|
|
@ -1,3 +0,0 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:09660c19f1773a761b2e56a05b666813dfd6e6196b4ad9d85ff881f29a30e839
|
||||
size 111616
|
|
@ -1,3 +0,0 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:14f7de6b616950395062902eb8f70f01c0a901223db5d40f2a05728ac4a830f6
|
||||
size 121788
|
|
@ -1,3 +0,0 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:2101c00b9c973a666bf128b3a776a45df7107bd29116079ee00541a8863d50ce
|
||||
size 120312
|
|
@ -1,3 +0,0 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:01ef8d755f412a945aa0b1221bfe98852200b549c4f16aad377e49937a30bd2f
|
||||
size 115316
|
|
@ -1,3 +0,0 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:95a84782e0797d27d079d9cc6ab9bb24ea67558953099bf4481c08e95b2ae70a
|
||||
size 91460
|
|
@ -1,3 +0,0 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:05903540a0675491fda9015a78c05bb589769951befab12a58a5568175566b49
|
||||
size 122524
|
|
@ -1,3 +0,0 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:b1af3a551a7e2d9fb640773197a00f6970a2b9c6699b0c786059a37453d5d12c
|
||||
size 91600
|
|
@ -1,3 +0,0 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:7ae714b63c2c8b940bdd211a0cc678f01168a34eea8aa13c0df25364f29238a7
|
||||
size 120196
|
|
@ -1,3 +0,0 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:1a63dda1d2f019336e934e41d7ffa8f3e5f4cee0eb6a0c4734827dbe09ce5015
|
||||
size 118352
|
|
@ -1,3 +0,0 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:7004222230d77e6b59d8312c8d7decbcc080e67c3821f1cd7b7e3f34f41a69fb
|
||||
size 66088
|
|
@ -1,3 +0,0 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:2b6e82870aba6a9089d341e67d7a7edacec2733ef0dab23e01d9d6c826cc6f52
|
||||
size 66336
|
|
@ -1,3 +0,0 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:a9b4536b59d8e041280b7c03ad3a182046a87ef6eb8a5f8879a7abc5615783da
|
||||
size 63364
|
|
@ -1,3 +0,0 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:8a131abb3239b5cf7dcb3d500b16dc33cd0c66d423737be6a88cd3e3c00ea867
|
||||
size 70484
|
|
@ -1,3 +0,0 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:3554e667904ae6eba906af71da95ceac81f4610c18560d71b549ffe9f8f2f48b
|
||||
size 64488
|
|
@ -1,3 +0,0 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:31f892971f709c5e5d5a19b0a2445d3f90a9de42f2395a0ac113c4d7d933de06
|
||||
size 64776
|
|
@ -1,3 +0,0 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:a1321362dc043b61962d04485022ce923d0a1c926c4dbf59ee6ea9ce6e520c4d
|
||||
size 64368
|
|
@ -1,3 +0,0 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:6d75566fed3b03036afe4f81a2d38ed1dfa3100a5c2e840abe4f8a875c73ee39
|
||||
size 65696
|
|
@ -1,3 +0,0 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:f2e1069b99f50e3c1d3b3c2aa54aebbd5d8eca97787df477a40389f7e2982efa
|
||||
size 64256
|
Before Width: | Height: | Size: 30 KiB After Width: | Height: | Size: 30 KiB |
11
src/references.bib
Normal file
11
src/references.bib
Normal file
|
@ -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}
|
||||
}
|
177
src/resume.typ
Normal file
177
src/resume.typ
Normal file
|
@ -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)
|
||||
}
|
||||
],
|
||||
)
|
|
@ -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}
|
||||
}
|
|
@ -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}
|
||||
}
|
|
@ -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}}
|
||||
|
|
@ -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}
|
169
src/utils.typ
Normal file
169
src/utils.typ
Normal file
|
@ -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)
|
||||
}
|
4
typstfmt.toml
Normal file
4
typstfmt.toml
Normal file
|
@ -0,0 +1,4 @@
|
|||
indent_space = 2
|
||||
max_line_length = 120
|
||||
experimental_args_breaking_consecutive = false
|
||||
line_wrap = true
|
Loading…
Reference in a new issue