initial commit
54
.devcontainer/Dockerfile
Normal file
@@ -0,0 +1,54 @@
|
|||||||
|
FROM mcr.microsoft.com/devcontainers/base:ubuntu
|
||||||
|
|
||||||
|
# Install dependencies for TeX Live installation and usage
|
||||||
|
RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y \
|
||||||
|
perl \
|
||||||
|
biber \
|
||||||
|
wget \
|
||||||
|
fontconfig \
|
||||||
|
make \
|
||||||
|
git \
|
||||||
|
curl \
|
||||||
|
python3 \
|
||||||
|
python3-pygments \
|
||||||
|
&& rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
|
# Set non-root user provided by Microsoft base image
|
||||||
|
ARG USERNAME=vscode
|
||||||
|
|
||||||
|
# Switch to user home directory
|
||||||
|
USER $USERNAME
|
||||||
|
WORKDIR /home/$USERNAME
|
||||||
|
|
||||||
|
# Set TeX Live paths and update environment
|
||||||
|
ENV TEXLIVE_INSTALL_PREFIX="/usr/local/texlive"
|
||||||
|
ENV TEXLIVE_INSTALL_TEXDIR="${TEXLIVE_INSTALL_PREFIX}/2025"
|
||||||
|
ENV PATH="${TEXLIVE_INSTALL_TEXDIR}/bin/x86_64-linux:${PATH}"
|
||||||
|
|
||||||
|
# Download and install TeX Live 2025 as root
|
||||||
|
RUN wget -q https://mirror.ctan.org/systems/texlive/tlnet/install-tl-unx.tar.gz && \
|
||||||
|
tar -xzf install-tl-unx.tar.gz && \
|
||||||
|
rm install-tl-unx.tar.gz && \
|
||||||
|
cd install-tl-* && \
|
||||||
|
echo "selected_scheme scheme-full" > texlive.profile && \
|
||||||
|
echo "TEXDIR ${TEXLIVE_INSTALL_TEXDIR}" >> texlive.profile && \
|
||||||
|
echo "TEXMFCONFIG /home/vscode/.texlive2025/texmf-config" >> texlive.profile && \
|
||||||
|
echo "TEXMFVAR /home/vscode/.texlive2025/texmf-var" >> texlive.profile && \
|
||||||
|
echo "instopt_adjustpath 1" >> texlive.profile && \
|
||||||
|
echo "tlpdbopt_autobackup 0" >> texlive.profile && \
|
||||||
|
sudo perl ./install-tl --profile=texlive.profile --no-interaction && \
|
||||||
|
cd .. && rm -rf install-tl-*
|
||||||
|
|
||||||
|
# User-writeable directories for TeX Live and LuaLaTeX
|
||||||
|
ENV TEXMFCONFIG="/home/vscode/.texlive2025/texmf-config"
|
||||||
|
ENV TEXMFVAR="/home/vscode/.texlive2025/texmf-var"
|
||||||
|
ENV LUAOTFLOAD_HOME="/home/vscode/.texlive2025/texmf-var/luatex-cache"
|
||||||
|
ENV LUAOTFLOAD_DB="/home/vscode/.texlive2025/texmf-var/luatex-cache/database.sqlite"
|
||||||
|
|
||||||
|
# Install latexmk
|
||||||
|
RUN sudo tlmgr option autobackup 0 && \
|
||||||
|
sudo tlmgr install latexmk && \
|
||||||
|
sudo tlmgr path add
|
||||||
|
|
||||||
|
# Set the working directory back to a neutral location
|
||||||
|
WORKDIR /workspace
|
||||||
118
.devcontainer/devcontainer.json
Normal file
@@ -0,0 +1,118 @@
|
|||||||
|
{
|
||||||
|
"name": "LaTeX Dev Container",
|
||||||
|
"image": "ghcr.io/khannurien/latex-devcontainer:2025.12",
|
||||||
|
"customizations": {
|
||||||
|
"vscode": {
|
||||||
|
"settings": {
|
||||||
|
// VSCode text editor settings
|
||||||
|
"editor.fontSize": 16,
|
||||||
|
"editor.tabSize": 2,
|
||||||
|
"editor.lineHeight": 1.8,
|
||||||
|
"editor.cursorBlinking": "phase",
|
||||||
|
"editor.unicodeHighlight.nonBasicASCII": false,
|
||||||
|
"editor.wordWrap": "on",
|
||||||
|
"editor.wrappingStrategy": "advanced",
|
||||||
|
"editor.wordBasedSuggestions": "off",
|
||||||
|
// "editor.quickSuggestions": {
|
||||||
|
// "other": "on",
|
||||||
|
// "comments": "off",
|
||||||
|
// "strings": "off"
|
||||||
|
// },
|
||||||
|
// "editor.acceptSuggestionOnEnter": "off",
|
||||||
|
// LaTeX Workshop settings
|
||||||
|
"latex-workshop.intellisense.package.enabled": true,
|
||||||
|
"latex-workshop.intellisense.unimathsymbols.enabled": true,
|
||||||
|
"latex-workshop.intellisense.citation.backend": "biblatex",
|
||||||
|
"latex-workshop.latex.outDir": "build",
|
||||||
|
"latex-workshop.latex.autoBuild.run": "onFileChange",
|
||||||
|
"latex-workshop.latex.autoBuild.interval": 3000,
|
||||||
|
"latex-workshop.synctex.afterBuild.enabled": true,
|
||||||
|
"latex-workshop.view.autoFocus.enabled": false,
|
||||||
|
"latex-workshop.view.pdf.reload.transition": "fade",
|
||||||
|
"latex-workshop.view.pdf.viewer": "tab",
|
||||||
|
"latex-workshop.view.pdf.zoom": "auto",
|
||||||
|
"latex-workshop.latex.tools": [
|
||||||
|
{
|
||||||
|
"args": [
|
||||||
|
"-shell-escape",
|
||||||
|
"-synctex=1",
|
||||||
|
"-interaction=nonstopmode",
|
||||||
|
"-file-line-error",
|
||||||
|
"-pdf",
|
||||||
|
"-outdir=%OUTDIR%",
|
||||||
|
"-out2dir=.",
|
||||||
|
"-pdflatex",
|
||||||
|
"-e",
|
||||||
|
"$bibtex='biber %O %S';",
|
||||||
|
"%DOC%"
|
||||||
|
],
|
||||||
|
"command": "latexmk",
|
||||||
|
"name": "latexmk + pdflatex + biber"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"args": [
|
||||||
|
"-shell-escape",
|
||||||
|
"-synctex=1",
|
||||||
|
"-interaction=nonstopmode",
|
||||||
|
"-file-line-error",
|
||||||
|
"-pdf",
|
||||||
|
"-outdir=%OUTDIR%",
|
||||||
|
"-out2dir=.",
|
||||||
|
"-xelatex",
|
||||||
|
"-e",
|
||||||
|
"$bibtex='biber %O %S';",
|
||||||
|
"%DOC%"
|
||||||
|
],
|
||||||
|
"command": "latexmk",
|
||||||
|
"name": "latexmk + xelatex + biber"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"args": [
|
||||||
|
"-shell-escape",
|
||||||
|
"-synctex=1",
|
||||||
|
"-interaction=nonstopmode",
|
||||||
|
"-file-line-error",
|
||||||
|
"-pdf",
|
||||||
|
"-outdir=%OUTDIR%",
|
||||||
|
"-out2dir=.",
|
||||||
|
"-lualatex",
|
||||||
|
"-e",
|
||||||
|
"$bibtex='biber %O %S';",
|
||||||
|
"%DOC%"
|
||||||
|
],
|
||||||
|
"command": "latexmk",
|
||||||
|
"name": "latexmk + lualatex + biber"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"latex-workshop.latex.recipes": [
|
||||||
|
{
|
||||||
|
"name": "latexmk + lualatex + biber",
|
||||||
|
"tools": [
|
||||||
|
"latexmk + lualatex + biber"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "latexmk + xelatex + biber",
|
||||||
|
"tools": [
|
||||||
|
"latexmk + xelatex + biber"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "latexmk + pdflatex + biber",
|
||||||
|
"tools": [
|
||||||
|
"latexmk + pdflatex + biber"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"latex-workshop.latex.recipe.default": "lastUsed"
|
||||||
|
},
|
||||||
|
"extensions": [
|
||||||
|
"james-yu.latex-workshop",
|
||||||
|
"wayou.vscode-todo-highlight"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"remoteUser": "vscode",
|
||||||
|
"updateRemoteUserUID": true,
|
||||||
|
"features": {}
|
||||||
|
}
|
||||||
301
.gitignore
vendored
Normal file
@@ -0,0 +1,301 @@
|
|||||||
|
## 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
|
||||||
3
.vscode/ltex.dictionary.fr.txt
vendored
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
UMR
|
||||||
|
STICC
|
||||||
|
POJO
|
||||||
1
.vscode/ltex.hiddenFalsePositives.fr.txt
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
{"rule":"FR_SPELLING_RULE","sentence":"^\\QVincent Lannurien 1 \\E(?:Dummy|Ina|Jimmy-|Dummy-|Maniquí-|Maniquíes-|Dummy\\+|Dummy's\\+)[0-9]+\\Q Vincent Lannurien\\E$"}
|
||||||
103
.vscode/settings.json
vendored
Normal file
@@ -0,0 +1,103 @@
|
|||||||
|
{
|
||||||
|
// VSCode text editor settings
|
||||||
|
"editor.fontSize": 16,
|
||||||
|
"editor.tabSize": 2,
|
||||||
|
"editor.lineHeight": 1.8,
|
||||||
|
"editor.cursorBlinking": "phase",
|
||||||
|
"editor.unicodeHighlight.nonBasicASCII": false,
|
||||||
|
"editor.wordWrap": "on",
|
||||||
|
"editor.wrappingStrategy": "advanced",
|
||||||
|
"editor.wordBasedSuggestions": "off",
|
||||||
|
// "editor.quickSuggestions": {
|
||||||
|
// "other": "on",
|
||||||
|
// "comments": "off",
|
||||||
|
// "strings": "off"
|
||||||
|
// },
|
||||||
|
// "editor.acceptSuggestionOnEnter": "off",
|
||||||
|
// LaTeX Workshop settings
|
||||||
|
"latex-workshop.intellisense.package.enabled": true,
|
||||||
|
"latex-workshop.intellisense.unimathsymbols.enabled": true,
|
||||||
|
"latex-workshop.intellisense.citation.backend": "biblatex",
|
||||||
|
"latex-workshop.latex.outDir": "build",
|
||||||
|
"latex-workshop.latex.autoBuild.run": "onFileChange",
|
||||||
|
"latex-workshop.latex.autoBuild.interval": 3000,
|
||||||
|
"latex-workshop.synctex.afterBuild.enabled": true,
|
||||||
|
"latex-workshop.view.autoFocus.enabled": false,
|
||||||
|
"latex-workshop.view.pdf.reload.transition": "fade",
|
||||||
|
"latex-workshop.view.pdf.viewer": "tab",
|
||||||
|
"latex-workshop.view.pdf.zoom": "auto",
|
||||||
|
"latex-workshop.latex.tools": [
|
||||||
|
{
|
||||||
|
"args": [
|
||||||
|
"-shell-escape",
|
||||||
|
"-synctex=1",
|
||||||
|
"-interaction=nonstopmode",
|
||||||
|
"-file-line-error",
|
||||||
|
"-pdf",
|
||||||
|
"-outdir=%OUTDIR%",
|
||||||
|
"-out2dir=.",
|
||||||
|
"-pdflatex",
|
||||||
|
"-e",
|
||||||
|
"$bibtex='biber %O %S';",
|
||||||
|
"%DOC%"
|
||||||
|
],
|
||||||
|
"command": "latexmk",
|
||||||
|
"name": "latexmk + pdflatex + biber"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"args": [
|
||||||
|
"-shell-escape",
|
||||||
|
"-synctex=1",
|
||||||
|
"-interaction=nonstopmode",
|
||||||
|
"-file-line-error",
|
||||||
|
"-pdf",
|
||||||
|
"-outdir=%OUTDIR%",
|
||||||
|
"-out2dir=.",
|
||||||
|
"-xelatex",
|
||||||
|
"-e",
|
||||||
|
"$bibtex='biber %O %S';",
|
||||||
|
"%DOC%"
|
||||||
|
],
|
||||||
|
"command": "latexmk",
|
||||||
|
"name": "latexmk + xelatex + biber"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"args": [
|
||||||
|
"-shell-escape",
|
||||||
|
"-synctex=1",
|
||||||
|
"-interaction=nonstopmode",
|
||||||
|
"-file-line-error",
|
||||||
|
"-pdf",
|
||||||
|
"-outdir=%OUTDIR%",
|
||||||
|
"-out2dir=.",
|
||||||
|
"-lualatex",
|
||||||
|
"-e",
|
||||||
|
"$bibtex='biber %O %S';",
|
||||||
|
"%DOC%"
|
||||||
|
],
|
||||||
|
"command": "latexmk",
|
||||||
|
"name": "latexmk + lualatex + biber"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"latex-workshop.latex.recipes": [
|
||||||
|
{
|
||||||
|
"name": "latexmk + lualatex + biber",
|
||||||
|
"tools": [
|
||||||
|
"latexmk + lualatex + biber"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "latexmk + xelatex + biber",
|
||||||
|
"tools": [
|
||||||
|
"latexmk + xelatex + biber"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "latexmk + pdflatex + biber",
|
||||||
|
"tools": [
|
||||||
|
"latexmk + pdflatex + biber"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"latex-workshop.latex.recipe.default": "lastUsed"
|
||||||
|
}
|
||||||
110
build/slides.bbl-SAVE-ERROR
Normal file
@@ -0,0 +1,110 @@
|
|||||||
|
% $ biblatex auxiliary file $
|
||||||
|
% $ biblatex bbl format version 3.3 $
|
||||||
|
% Do not modify the above lines!
|
||||||
|
%
|
||||||
|
% This is an auxiliary file used by the 'biblatex' package.
|
||||||
|
% This file may safely be deleted. It will be recreated by
|
||||||
|
% biber as required.
|
||||||
|
%
|
||||||
|
\begingroup
|
||||||
|
\makeatletter
|
||||||
|
\@ifundefined{ver@biblatex.sty}
|
||||||
|
{\@latex@error
|
||||||
|
{Missing 'biblatex' package}
|
||||||
|
{The bibliography requires the 'biblatex' package.}
|
||||||
|
\aftergroup\endinput}
|
||||||
|
{}
|
||||||
|
\endgroup
|
||||||
|
|
||||||
|
|
||||||
|
\refsection{0}
|
||||||
|
\datalist[entry]{nty/global//global/global/global}
|
||||||
|
\entry{greggFlameGraph2016}{article}{}{}
|
||||||
|
\name{author}{1}{}{%
|
||||||
|
{{hash=b45aef384111d7e9dd71b74ba427b5f1}{%
|
||||||
|
family={Gregg},
|
||||||
|
familyi={G\bibinitperiod},
|
||||||
|
given={Brendan},
|
||||||
|
giveni={B\bibinitperiod}}}%
|
||||||
|
}
|
||||||
|
\strng{namehash}{b45aef384111d7e9dd71b74ba427b5f1}
|
||||||
|
\strng{fullhash}{b45aef384111d7e9dd71b74ba427b5f1}
|
||||||
|
\strng{fullhashraw}{b45aef384111d7e9dd71b74ba427b5f1}
|
||||||
|
\strng{bibnamehash}{b45aef384111d7e9dd71b74ba427b5f1}
|
||||||
|
\strng{authorbibnamehash}{b45aef384111d7e9dd71b74ba427b5f1}
|
||||||
|
\strng{authornamehash}{b45aef384111d7e9dd71b74ba427b5f1}
|
||||||
|
\strng{authorfullhash}{b45aef384111d7e9dd71b74ba427b5f1}
|
||||||
|
\strng{authorfullhashraw}{b45aef384111d7e9dd71b74ba427b5f1}
|
||||||
|
\field{sortinit}{G}
|
||||||
|
\field{sortinithash}{32d67eca0634bf53703493fb1090a2e8}
|
||||||
|
\field{labelnamesource}{author}
|
||||||
|
\field{labeltitlesource}{title}
|
||||||
|
\field{abstract}{This visualization of software execution is a new necessity for performance profiling and debugging.}
|
||||||
|
\field{issn}{0001-0782, 1557-7317}
|
||||||
|
\field{journaltitle}{Communications of the ACM}
|
||||||
|
\field{langid}{english}
|
||||||
|
\field{month}{5}
|
||||||
|
\field{number}{6}
|
||||||
|
\field{title}{The Flame Graph}
|
||||||
|
\field{urlday}{16}
|
||||||
|
\field{urlmonth}{1}
|
||||||
|
\field{urlyear}{2026}
|
||||||
|
\field{volume}{59}
|
||||||
|
\field{year}{2016}
|
||||||
|
\field{urldateera}{ce}
|
||||||
|
\field{pages}{48\bibrangedash 57}
|
||||||
|
\range{pages}{10}
|
||||||
|
\verb{doi}
|
||||||
|
\verb 10.1145/2909476
|
||||||
|
\endverb
|
||||||
|
\endentry
|
||||||
|
\entry{HandbookTypeScriptHandbook}{book}{}{}
|
||||||
|
\name{author}{1}{}{%
|
||||||
|
{{hash=140864078aeca1c7c35b4beb33c53c34}{%
|
||||||
|
family={Microsoft},
|
||||||
|
familyi={M\bibinitperiod}}}%
|
||||||
|
}
|
||||||
|
\strng{namehash}{140864078aeca1c7c35b4beb33c53c34}
|
||||||
|
\strng{fullhash}{140864078aeca1c7c35b4beb33c53c34}
|
||||||
|
\strng{fullhashraw}{140864078aeca1c7c35b4beb33c53c34}
|
||||||
|
\strng{bibnamehash}{140864078aeca1c7c35b4beb33c53c34}
|
||||||
|
\strng{authorbibnamehash}{140864078aeca1c7c35b4beb33c53c34}
|
||||||
|
\strng{authornamehash}{140864078aeca1c7c35b4beb33c53c34}
|
||||||
|
\strng{authorfullhash}{140864078aeca1c7c35b4beb33c53c34}
|
||||||
|
\strng{authorfullhashraw}{140864078aeca1c7c35b4beb33c53c34}
|
||||||
|
\field{sortinit}{M}
|
||||||
|
\field{sortinithash}{4625c616857f13d17ce56f7d4f97d451}
|
||||||
|
\field{labelnamesource}{author}
|
||||||
|
\field{labeltitlesource}{title}
|
||||||
|
\field{howpublished}{https://www.typescriptlang.org/docs/handbook/intro.html}
|
||||||
|
\field{title}{The {{TypeScript Handbook}}}
|
||||||
|
\field{year}{2026}
|
||||||
|
\endentry
|
||||||
|
\entry{poggialiConciseTypeScriptBook2026}{book}{}{}
|
||||||
|
\name{author}{1}{}{%
|
||||||
|
{{hash=6455011b3c9d32fd16da63c7b54ef9e8}{%
|
||||||
|
family={Poggiali},
|
||||||
|
familyi={P\bibinitperiod},
|
||||||
|
given={Simone},
|
||||||
|
giveni={S\bibinitperiod}}}%
|
||||||
|
}
|
||||||
|
\strng{namehash}{6455011b3c9d32fd16da63c7b54ef9e8}
|
||||||
|
\strng{fullhash}{6455011b3c9d32fd16da63c7b54ef9e8}
|
||||||
|
\strng{fullhashraw}{6455011b3c9d32fd16da63c7b54ef9e8}
|
||||||
|
\strng{bibnamehash}{6455011b3c9d32fd16da63c7b54ef9e8}
|
||||||
|
\strng{authorbibnamehash}{6455011b3c9d32fd16da63c7b54ef9e8}
|
||||||
|
\strng{authornamehash}{6455011b3c9d32fd16da63c7b54ef9e8}
|
||||||
|
\strng{authorfullhash}{6455011b3c9d32fd16da63c7b54ef9e8}
|
||||||
|
\strng{authorfullhashraw}{6455011b3c9d32fd16da63c7b54ef9e8}
|
||||||
|
\field{sortinit}{P}
|
||||||
|
\field{sortinithash}{ff3bcf24f47321b42cb156c2cc8a8422}
|
||||||
|
\field{labelnamesource}{author}
|
||||||
|
\field{labeltitlesource}{title}
|
||||||
|
\field{howpublished}{https://gibbok.github.io/typescript-book/book/the-concise-typescript-book/}
|
||||||
|
\field{title}{The {{Concise TypeScript Book}}}
|
||||||
|
\field{year}{2026}
|
||||||
|
\endentry
|
||||||
|
\enddatalist
|
||||||
|
\endrefsection
|
||||||
|
\endinput
|
||||||
|
|
||||||
2377
build/slides.bcf-SAVE-ERROR
Normal file
BIN
build/slides.pdf
Normal file
BIN
img/async-joke.jpg
Normal file
|
After Width: | Height: | Size: 37 KiB |
BIN
img/brace.png
Normal file
|
After Width: | Height: | Size: 4.5 KiB |
BIN
img/deno.png
Normal file
|
After Width: | Height: | Size: 48 KiB |
BIN
img/flamegraph.png
Normal file
|
After Width: | Height: | Size: 192 KiB |
BIN
img/http-message.png
Normal file
|
After Width: | Height: | Size: 168 KiB |
BIN
img/javascript-alert.png
Normal file
|
After Width: | Height: | Size: 14 KiB |
BIN
img/jetbrains-ecosystem-2025-evolution.png
Normal file
|
After Width: | Height: | Size: 138 KiB |
BIN
img/jetbrains-ecosystem-2025-platforms.png
Normal file
|
After Width: | Height: | Size: 112 KiB |
BIN
img/js-event-loop.png
Normal file
|
After Width: | Height: | Size: 270 KiB |
BIN
img/js.png
Normal file
|
After Width: | Height: | Size: 28 KiB |
BIN
img/jsr.png
Normal file
|
After Width: | Height: | Size: 5.5 KiB |
BIN
img/logos.png
Normal file
|
After Width: | Height: | Size: 1.6 MiB |
BIN
img/netscape.png
Normal file
|
After Width: | Height: | Size: 76 KiB |
BIN
img/nodejs.png
Normal file
|
After Width: | Height: | Size: 127 KiB |
BIN
img/npm.png
Normal file
|
After Width: | Height: | Size: 3.2 KiB |
BIN
img/oak.png
Normal file
|
After Width: | Height: | Size: 26 KiB |
BIN
img/osi-model.png
Normal file
|
After Width: | Height: | Size: 214 KiB |
BIN
img/point.png
Normal file
|
After Width: | Height: | Size: 164 KiB |
BIN
img/promises.png
Normal file
|
After Width: | Height: | Size: 7.4 KiB |
BIN
img/scaling-monolith.png
Normal file
|
After Width: | Height: | Size: 169 KiB |
BIN
img/scaling-uservices.png
Normal file
|
After Width: | Height: | Size: 175 KiB |
BIN
img/series-of-tubes.png
Normal file
|
After Width: | Height: | Size: 1.1 MiB |
BIN
img/sqlite.png
Normal file
|
After Width: | Height: | Size: 40 KiB |
BIN
img/tbl.jpg
Normal file
|
After Width: | Height: | Size: 193 KiB |
BIN
img/ts.png
Normal file
|
After Width: | Height: | Size: 19 KiB |
45
res/.$architecture.drawio.bkp
Normal file
@@ -0,0 +1,45 @@
|
|||||||
|
<mxfile host="Electron" agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/28.2.5 Chrome/138.0.7204.251 Electron/37.6.1 Safari/537.36" version="28.2.5" pages="2">
|
||||||
|
<diagram name="Page-1" id="WE2OBRBfjwrgRAvIH2Xi">
|
||||||
|
<mxGraphModel dx="1106" dy="963" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
|
||||||
|
<root>
|
||||||
|
<mxCell id="0" />
|
||||||
|
<mxCell id="1" parent="0" />
|
||||||
|
<mxCell id="njQ_imjs8zr5ET9f7Rwc-4" value="réponse HTTP" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;" edge="1" parent="1" source="njQ_imjs8zr5ET9f7Rwc-1" target="njQ_imjs8zr5ET9f7Rwc-2">
|
||||||
|
<mxGeometry relative="1" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="njQ_imjs8zr5ET9f7Rwc-5" value="WebSocket" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;startArrow=classic;startFill=1;" edge="1" parent="1" source="njQ_imjs8zr5ET9f7Rwc-1" target="njQ_imjs8zr5ET9f7Rwc-2">
|
||||||
|
<mxGeometry relative="1" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="njQ_imjs8zr5ET9f7Rwc-1" value="Serveur web (Deno)" style="shape=process;whiteSpace=wrap;html=1;backgroundOutline=1;" vertex="1" parent="1">
|
||||||
|
<mxGeometry x="130" y="410" width="120" height="60" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="njQ_imjs8zr5ET9f7Rwc-3" value="requête HTTP" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="njQ_imjs8zr5ET9f7Rwc-2" target="njQ_imjs8zr5ET9f7Rwc-1">
|
||||||
|
<mxGeometry relative="1" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="njQ_imjs8zr5ET9f7Rwc-2" value="Client web (navigateur)" style="shape=process;whiteSpace=wrap;html=1;backgroundOutline=1;" vertex="1" parent="1">
|
||||||
|
<mxGeometry x="520" y="410" width="120" height="60" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="1ptE3tQJX40rlnvv1j5o-1" value="Application client<div>HTML, CSS, TypeScript</div>" style="ellipse;whiteSpace=wrap;html=1;" vertex="1" parent="1">
|
||||||
|
<mxGeometry x="630" y="290" width="120" height="80" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="1ptE3tQJX40rlnvv1j5o-2" value="Application serveur<div>Deno, Oak</div>" style="ellipse;whiteSpace=wrap;html=1;" vertex="1" parent="1">
|
||||||
|
<mxGeometry x="70" y="280" width="120" height="80" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="1ptE3tQJX40rlnvv1j5o-3" value="Base de données" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=15;" vertex="1" parent="1">
|
||||||
|
<mxGeometry x="240" y="270" width="60" height="80" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="1ptE3tQJX40rlnvv1j5o-4" value="Cache" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=15;" vertex="1" parent="1">
|
||||||
|
<mxGeometry x="384" y="270" width="60" height="80" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
</root>
|
||||||
|
</mxGraphModel>
|
||||||
|
</diagram>
|
||||||
|
<diagram id="wkPXxGK0bhSZwc4x9mIX" name="Page-2">
|
||||||
|
<mxGraphModel grid="1" page="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
|
||||||
|
<root>
|
||||||
|
<mxCell id="0" />
|
||||||
|
<mxCell id="1" parent="0" />
|
||||||
|
</root>
|
||||||
|
</mxGraphModel>
|
||||||
|
</diagram>
|
||||||
|
</mxfile>
|
||||||
82
res/.$js-event-loop.drawio.bkp
Normal file
@@ -0,0 +1,82 @@
|
|||||||
|
<mxfile host="Electron" agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/28.2.5 Chrome/138.0.7204.251 Electron/37.6.1 Safari/537.36" version="28.2.5">
|
||||||
|
<diagram name="Page-1" id="o2Z0k-pMrQSQu8LE0CHS">
|
||||||
|
<mxGraphModel dx="2066" dy="1235" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
|
||||||
|
<root>
|
||||||
|
<mxCell id="0" />
|
||||||
|
<mxCell id="1" parent="0" />
|
||||||
|
<mxCell id="I0g5zxyyZJP6Qi3c9r4H-2" value="" style="html=1;shadow=0;dashed=0;align=center;verticalAlign=middle;shape=mxgraph.arrows2.uTurnArrow;dy=11;arrowHead=43;dx2=25;fontFamily=Lucida Console;" vertex="1" parent="1">
|
||||||
|
<mxGeometry x="380" y="360" width="310" height="300" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="I0g5zxyyZJP6Qi3c9r4H-10" value="Register callback" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0;exitY=0;exitDx=144.75;exitDy=300;exitPerimeter=0;entryX=0.25;entryY=0;entryDx=0;entryDy=0;fontFamily=Lucida Console;" edge="1" parent="1" source="I0g5zxyyZJP6Qi3c9r4H-3" target="I0g5zxyyZJP6Qi3c9r4H-6">
|
||||||
|
<mxGeometry relative="1" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="I0g5zxyyZJP6Qi3c9r4H-3" value="" style="html=1;shadow=0;dashed=0;align=center;verticalAlign=middle;shape=mxgraph.arrows2.uTurnArrow;dy=11;arrowHead=43;dx2=25;flipV=1;flipH=1;fontFamily=Lucida Console;" vertex="1" parent="1">
|
||||||
|
<mxGeometry x="570" y="370" width="310" height="300" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="I0g5zxyyZJP6Qi3c9r4H-4" value="Event Loop" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontFamily=Lucida Console;fontSize=48;" vertex="1" parent="1">
|
||||||
|
<mxGeometry x="480" y="450" width="300" height="70" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="I0g5zxyyZJP6Qi3c9r4H-5" value="<span style=""><font style="font-size: 24px;">(1 thread)</font></span>" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontFamily=Lucida Console;" vertex="1" parent="1">
|
||||||
|
<mxGeometry x="530" y="540" width="200" height="30" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="I0g5zxyyZJP6Qi3c9r4H-18" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;startArrow=classic;startFill=1;fontFamily=Lucida Console;" edge="1" parent="1" source="I0g5zxyyZJP6Qi3c9r4H-6" target="I0g5zxyyZJP6Qi3c9r4H-12">
|
||||||
|
<mxGeometry relative="1" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="I0g5zxyyZJP6Qi3c9r4H-36" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="I0g5zxyyZJP6Qi3c9r4H-6" target="I0g5zxyyZJP6Qi3c9r4H-35">
|
||||||
|
<mxGeometry relative="1" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="I0g5zxyyZJP6Qi3c9r4H-6" value="I/O<div>Operations</div>" style="shape=process;whiteSpace=wrap;html=1;backgroundOutline=1;fontFamily=Lucida Console;verticalAlign=top;fontSize=24;" vertex="1" parent="1">
|
||||||
|
<mxGeometry x="960" y="382.5" width="210" height="275" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="I0g5zxyyZJP6Qi3c9r4H-7" value="FS" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=15;fontFamily=Lucida Console;" vertex="1" parent="1">
|
||||||
|
<mxGeometry x="990" y="470" width="60" height="80" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="I0g5zxyyZJP6Qi3c9r4H-8" value="DB" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=15;fontFamily=Lucida Console;" vertex="1" parent="1">
|
||||||
|
<mxGeometry x="1080" y="470" width="60" height="80" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="I0g5zxyyZJP6Qi3c9r4H-9" value="NET" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=15;fontFamily=Lucida Console;" vertex="1" parent="1">
|
||||||
|
<mxGeometry x="1035" y="560" width="60" height="80" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="I0g5zxyyZJP6Qi3c9r4H-11" value="Operation complete" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.25;exitY=1;exitDx=0;exitDy=0;entryX=0;entryY=0;entryDx=227.375;entryDy=300;entryPerimeter=0;fontFamily=Lucida Console;" edge="1" parent="1" source="I0g5zxyyZJP6Qi3c9r4H-6" target="I0g5zxyyZJP6Qi3c9r4H-2">
|
||||||
|
<mxGeometry relative="1" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="I0g5zxyyZJP6Qi3c9r4H-12" value="Internal Thread Pool" style="shape=process;whiteSpace=wrap;html=1;backgroundOutline=1;verticalAlign=bottom;labelPosition=center;verticalLabelPosition=top;align=center;fontFamily=Lucida Console;" vertex="1" parent="1">
|
||||||
|
<mxGeometry x="1210" y="410" width="120" height="178.75" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="I0g5zxyyZJP6Qi3c9r4H-13" value="Call Stack" style="shape=process;whiteSpace=wrap;html=1;backgroundOutline=1;fontFamily=Lucida Console;verticalAlign=bottom;labelPosition=center;verticalLabelPosition=top;align=center;" vertex="1" parent="1">
|
||||||
|
<mxGeometry x="200" y="382.5" width="120" height="277.5" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="I0g5zxyyZJP6Qi3c9r4H-19" value="Thread 1" style="rounded=0;whiteSpace=wrap;html=1;fontFamily=Lucida Console;" vertex="1" parent="1">
|
||||||
|
<mxGeometry x="1222.5" y="428.75" width="95" height="40" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="I0g5zxyyZJP6Qi3c9r4H-22" value="Thread n" style="rounded=0;whiteSpace=wrap;html=1;fontFamily=Lucida Console;" vertex="1" parent="1">
|
||||||
|
<mxGeometry x="1223.5" y="528.75" width="95" height="40" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="I0g5zxyyZJP6Qi3c9r4H-23" value="..." style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontFamily=Lucida Console;" vertex="1" parent="1">
|
||||||
|
<mxGeometry x="1241" y="490" width="60" height="30" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="I0g5zxyyZJP6Qi3c9r4H-28" value="fn1<span style="background-color: transparent; color: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));">(...)</span>" style="rounded=0;whiteSpace=wrap;html=1;fontFamily=Lucida Console;" vertex="1" parent="1">
|
||||||
|
<mxGeometry x="212.5" y="401.25" width="95" height="60" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="I0g5zxyyZJP6Qi3c9r4H-29" value="fn2(...)" style="rounded=0;whiteSpace=wrap;html=1;fontFamily=Lucida Console;" vertex="1" parent="1">
|
||||||
|
<mxGeometry x="212.5" y="461.25" width="95" height="60" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="I0g5zxyyZJP6Qi3c9r4H-30" value="callback(...)" style="rounded=0;whiteSpace=wrap;html=1;fontFamily=Lucida Console;" vertex="1" parent="1">
|
||||||
|
<mxGeometry x="212.5" y="581.25" width="95" height="60" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="I0g5zxyyZJP6Qi3c9r4H-31" value="..." style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontFamily=Lucida Console;" vertex="1" parent="1">
|
||||||
|
<mxGeometry x="230" y="541.25" width="60" height="30" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="I0g5zxyyZJP6Qi3c9r4H-33" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0.081;entryY=0.24;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="1" source="I0g5zxyyZJP6Qi3c9r4H-28" target="I0g5zxyyZJP6Qi3c9r4H-2">
|
||||||
|
<mxGeometry relative="1" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="I0g5zxyyZJP6Qi3c9r4H-34" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0.113;entryY=0.84;entryDx=0;entryDy=0;entryPerimeter=0;startArrow=classic;startFill=1;endArrow=none;endFill=0;" edge="1" parent="1" source="I0g5zxyyZJP6Qi3c9r4H-30" target="I0g5zxyyZJP6Qi3c9r4H-2">
|
||||||
|
<mxGeometry relative="1" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="I0g5zxyyZJP6Qi3c9r4H-35" value="OS async syscalls" style="shape=process;whiteSpace=wrap;html=1;backgroundOutline=1;verticalAlign=middle;labelPosition=center;verticalLabelPosition=middle;align=center;fontFamily=Lucida Console;" vertex="1" parent="1">
|
||||||
|
<mxGeometry x="1210" y="610" width="120" height="50" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
</root>
|
||||||
|
</mxGraphModel>
|
||||||
|
</diagram>
|
||||||
|
</mxfile>
|
||||||
45
res/architecture.drawio
Normal file
@@ -0,0 +1,45 @@
|
|||||||
|
<mxfile host="Electron" agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/28.2.5 Chrome/138.0.7204.251 Electron/37.6.1 Safari/537.36" version="28.2.5" pages="2">
|
||||||
|
<diagram name="Architecture (locale)" id="WE2OBRBfjwrgRAvIH2Xi">
|
||||||
|
<mxGraphModel dx="1106" dy="963" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
|
||||||
|
<root>
|
||||||
|
<mxCell id="0" />
|
||||||
|
<mxCell id="1" parent="0" />
|
||||||
|
<mxCell id="njQ_imjs8zr5ET9f7Rwc-4" value="réponse HTTP" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;" edge="1" parent="1" source="njQ_imjs8zr5ET9f7Rwc-1" target="njQ_imjs8zr5ET9f7Rwc-2">
|
||||||
|
<mxGeometry relative="1" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="njQ_imjs8zr5ET9f7Rwc-5" value="WebSocket" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;startArrow=classic;startFill=1;" edge="1" parent="1" source="njQ_imjs8zr5ET9f7Rwc-1" target="njQ_imjs8zr5ET9f7Rwc-2">
|
||||||
|
<mxGeometry relative="1" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="njQ_imjs8zr5ET9f7Rwc-1" value="Serveur web (Deno)" style="shape=process;whiteSpace=wrap;html=1;backgroundOutline=1;" vertex="1" parent="1">
|
||||||
|
<mxGeometry x="130" y="410" width="120" height="60" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="njQ_imjs8zr5ET9f7Rwc-3" value="requête HTTP" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="njQ_imjs8zr5ET9f7Rwc-2" target="njQ_imjs8zr5ET9f7Rwc-1">
|
||||||
|
<mxGeometry relative="1" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="njQ_imjs8zr5ET9f7Rwc-2" value="Client web (navigateur)" style="shape=process;whiteSpace=wrap;html=1;backgroundOutline=1;" vertex="1" parent="1">
|
||||||
|
<mxGeometry x="520" y="410" width="120" height="60" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="1ptE3tQJX40rlnvv1j5o-1" value="Application client<div>HTML, CSS, TypeScript</div>" style="ellipse;whiteSpace=wrap;html=1;" vertex="1" parent="1">
|
||||||
|
<mxGeometry x="630" y="290" width="120" height="80" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="1ptE3tQJX40rlnvv1j5o-2" value="Application serveur<div>Deno, Oak</div>" style="ellipse;whiteSpace=wrap;html=1;" vertex="1" parent="1">
|
||||||
|
<mxGeometry x="70" y="280" width="120" height="80" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="1ptE3tQJX40rlnvv1j5o-3" value="Base de données" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=15;" vertex="1" parent="1">
|
||||||
|
<mxGeometry x="240" y="270" width="60" height="80" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="1ptE3tQJX40rlnvv1j5o-4" value="Cache" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=15;" vertex="1" parent="1">
|
||||||
|
<mxGeometry x="384" y="270" width="60" height="80" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
</root>
|
||||||
|
</mxGraphModel>
|
||||||
|
</diagram>
|
||||||
|
<diagram id="wkPXxGK0bhSZwc4x9mIX" name="Architecture (reverse proxy)">
|
||||||
|
<mxGraphModel dx="1106" dy="963" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
|
||||||
|
<root>
|
||||||
|
<mxCell id="0" />
|
||||||
|
<mxCell id="1" parent="0" />
|
||||||
|
</root>
|
||||||
|
</mxGraphModel>
|
||||||
|
</diagram>
|
||||||
|
</mxfile>
|
||||||
82
res/js-event-loop.drawio
Normal file
@@ -0,0 +1,82 @@
|
|||||||
|
<mxfile host="Electron" agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/28.2.5 Chrome/138.0.7204.251 Electron/37.6.1 Safari/537.36" version="28.2.5">
|
||||||
|
<diagram name="Page-1" id="o2Z0k-pMrQSQu8LE0CHS">
|
||||||
|
<mxGraphModel dx="2066" dy="1235" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
|
||||||
|
<root>
|
||||||
|
<mxCell id="0" />
|
||||||
|
<mxCell id="1" parent="0" />
|
||||||
|
<mxCell id="I0g5zxyyZJP6Qi3c9r4H-2" value="" style="html=1;shadow=0;dashed=0;align=center;verticalAlign=middle;shape=mxgraph.arrows2.uTurnArrow;dy=11;arrowHead=43;dx2=25;fontFamily=Lucida Console;" vertex="1" parent="1">
|
||||||
|
<mxGeometry x="380" y="360" width="310" height="300" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="I0g5zxyyZJP6Qi3c9r4H-10" value="Register callback" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0;exitY=0;exitDx=144.75;exitDy=300;exitPerimeter=0;entryX=0.25;entryY=0;entryDx=0;entryDy=0;fontFamily=Lucida Console;" edge="1" parent="1" source="I0g5zxyyZJP6Qi3c9r4H-3" target="I0g5zxyyZJP6Qi3c9r4H-6">
|
||||||
|
<mxGeometry relative="1" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="I0g5zxyyZJP6Qi3c9r4H-3" value="" style="html=1;shadow=0;dashed=0;align=center;verticalAlign=middle;shape=mxgraph.arrows2.uTurnArrow;dy=11;arrowHead=43;dx2=25;flipV=1;flipH=1;fontFamily=Lucida Console;" vertex="1" parent="1">
|
||||||
|
<mxGeometry x="570" y="370" width="310" height="300" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="I0g5zxyyZJP6Qi3c9r4H-4" value="Event Loop" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontFamily=Lucida Console;fontSize=48;" vertex="1" parent="1">
|
||||||
|
<mxGeometry x="480" y="450" width="300" height="70" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="I0g5zxyyZJP6Qi3c9r4H-5" value="<span style=""><font style="font-size: 24px;">(1 thread)</font></span>" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontFamily=Lucida Console;" vertex="1" parent="1">
|
||||||
|
<mxGeometry x="530" y="540" width="200" height="30" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="I0g5zxyyZJP6Qi3c9r4H-18" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;startArrow=classic;startFill=1;fontFamily=Lucida Console;" edge="1" parent="1" source="I0g5zxyyZJP6Qi3c9r4H-6" target="I0g5zxyyZJP6Qi3c9r4H-12">
|
||||||
|
<mxGeometry relative="1" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="I0g5zxyyZJP6Qi3c9r4H-36" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="I0g5zxyyZJP6Qi3c9r4H-6" target="I0g5zxyyZJP6Qi3c9r4H-35">
|
||||||
|
<mxGeometry relative="1" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="I0g5zxyyZJP6Qi3c9r4H-6" value="I/O<div>Operations</div>" style="shape=process;whiteSpace=wrap;html=1;backgroundOutline=1;fontFamily=Lucida Console;verticalAlign=top;fontSize=24;" vertex="1" parent="1">
|
||||||
|
<mxGeometry x="960" y="382.5" width="210" height="275" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="I0g5zxyyZJP6Qi3c9r4H-7" value="FS" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=15;fontFamily=Lucida Console;" vertex="1" parent="1">
|
||||||
|
<mxGeometry x="990" y="470" width="60" height="80" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="I0g5zxyyZJP6Qi3c9r4H-8" value="DB" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=15;fontFamily=Lucida Console;" vertex="1" parent="1">
|
||||||
|
<mxGeometry x="1080" y="470" width="60" height="80" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="I0g5zxyyZJP6Qi3c9r4H-9" value="NET" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=15;fontFamily=Lucida Console;" vertex="1" parent="1">
|
||||||
|
<mxGeometry x="1035" y="560" width="60" height="80" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="I0g5zxyyZJP6Qi3c9r4H-11" value="Operation complete" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.25;exitY=1;exitDx=0;exitDy=0;entryX=0;entryY=0;entryDx=227.375;entryDy=300;entryPerimeter=0;fontFamily=Lucida Console;" edge="1" parent="1" source="I0g5zxyyZJP6Qi3c9r4H-6" target="I0g5zxyyZJP6Qi3c9r4H-2">
|
||||||
|
<mxGeometry relative="1" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="I0g5zxyyZJP6Qi3c9r4H-12" value="Internal Thread Pool" style="shape=process;whiteSpace=wrap;html=1;backgroundOutline=1;verticalAlign=bottom;labelPosition=center;verticalLabelPosition=top;align=center;fontFamily=Lucida Console;" vertex="1" parent="1">
|
||||||
|
<mxGeometry x="1210" y="410" width="120" height="178.75" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="I0g5zxyyZJP6Qi3c9r4H-13" value="Call Stack" style="shape=process;whiteSpace=wrap;html=1;backgroundOutline=1;fontFamily=Lucida Console;verticalAlign=bottom;labelPosition=center;verticalLabelPosition=top;align=center;" vertex="1" parent="1">
|
||||||
|
<mxGeometry x="200" y="382.5" width="120" height="277.5" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="I0g5zxyyZJP6Qi3c9r4H-19" value="Thread 1" style="rounded=0;whiteSpace=wrap;html=1;fontFamily=Lucida Console;" vertex="1" parent="1">
|
||||||
|
<mxGeometry x="1222.5" y="428.75" width="95" height="40" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="I0g5zxyyZJP6Qi3c9r4H-22" value="Thread n" style="rounded=0;whiteSpace=wrap;html=1;fontFamily=Lucida Console;" vertex="1" parent="1">
|
||||||
|
<mxGeometry x="1223.5" y="528.75" width="95" height="40" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="I0g5zxyyZJP6Qi3c9r4H-23" value="..." style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontFamily=Lucida Console;" vertex="1" parent="1">
|
||||||
|
<mxGeometry x="1241" y="490" width="60" height="30" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="I0g5zxyyZJP6Qi3c9r4H-28" value="fn1<span style="background-color: transparent; color: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));">(...)</span>" style="rounded=0;whiteSpace=wrap;html=1;fontFamily=Lucida Console;" vertex="1" parent="1">
|
||||||
|
<mxGeometry x="212.5" y="401.25" width="95" height="60" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="I0g5zxyyZJP6Qi3c9r4H-29" value="fn2(...)" style="rounded=0;whiteSpace=wrap;html=1;fontFamily=Lucida Console;" vertex="1" parent="1">
|
||||||
|
<mxGeometry x="212.5" y="461.25" width="95" height="60" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="I0g5zxyyZJP6Qi3c9r4H-30" value="callback(...)" style="rounded=0;whiteSpace=wrap;html=1;fontFamily=Lucida Console;" vertex="1" parent="1">
|
||||||
|
<mxGeometry x="212.5" y="581.25" width="95" height="60" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="I0g5zxyyZJP6Qi3c9r4H-31" value="..." style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontFamily=Lucida Console;" vertex="1" parent="1">
|
||||||
|
<mxGeometry x="230" y="541.25" width="60" height="30" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="I0g5zxyyZJP6Qi3c9r4H-33" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0.081;entryY=0.24;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="1" source="I0g5zxyyZJP6Qi3c9r4H-28" target="I0g5zxyyZJP6Qi3c9r4H-2">
|
||||||
|
<mxGeometry relative="1" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="I0g5zxyyZJP6Qi3c9r4H-34" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0.113;entryY=0.84;entryDx=0;entryDy=0;entryPerimeter=0;startArrow=classic;startFill=1;endArrow=none;endFill=0;" edge="1" parent="1" source="I0g5zxyyZJP6Qi3c9r4H-30" target="I0g5zxyyZJP6Qi3c9r4H-2">
|
||||||
|
<mxGeometry relative="1" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="I0g5zxyyZJP6Qi3c9r4H-35" value="OS async syscalls" style="shape=process;whiteSpace=wrap;html=1;backgroundOutline=1;verticalAlign=middle;labelPosition=center;verticalLabelPosition=middle;align=center;fontFamily=Lucida Console;" vertex="1" parent="1">
|
||||||
|
<mxGeometry x="1210" y="610" width="120" height="50" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
</root>
|
||||||
|
</mxGraphModel>
|
||||||
|
</diagram>
|
||||||
|
</mxfile>
|
||||||
155
res/scaling.drawio
Normal file
@@ -0,0 +1,155 @@
|
|||||||
|
<mxfile host="Electron" agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/28.2.5 Chrome/138.0.7204.251 Electron/37.6.1 Safari/537.36" version="28.2.5" pages="2">
|
||||||
|
<diagram name="Page-1" id="xunzUwHFhwkz4ZFfysU3">
|
||||||
|
<mxGraphModel dx="1307" dy="1078" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
|
||||||
|
<root>
|
||||||
|
<mxCell id="0" />
|
||||||
|
<mxCell id="1" parent="0" />
|
||||||
|
<mxCell id="1ADzjnrqRUSSSZhDYKZD-6" value="Server 2" style="rounded=0;whiteSpace=wrap;html=1;fontFamily=Lucida Console;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;" vertex="1" parent="1">
|
||||||
|
<mxGeometry x="931" y="740" width="180" height="300" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="1ADzjnrqRUSSSZhDYKZD-7" value="Server 1" style="rounded=0;whiteSpace=wrap;html=1;fontFamily=Lucida Console;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;" vertex="1" parent="1">
|
||||||
|
<mxGeometry x="712.5" y="740" width="180" height="160" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="1ADzjnrqRUSSSZhDYKZD-8" value="Backend" style="rounded=1;whiteSpace=wrap;html=1;fontFamily=Lucida Console;fillColor=#dae8fc;strokeColor=#6c8ebf;" vertex="1" parent="1">
|
||||||
|
<mxGeometry x="733.5" y="760" width="70" height="60" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="1ADzjnrqRUSSSZhDYKZD-9" value="Authentication" style="rounded=1;whiteSpace=wrap;html=1;fontFamily=Lucida Console;fillColor=#ffe6cc;strokeColor=#d79b00;" vertex="1" parent="1">
|
||||||
|
<mxGeometry x="742.5" y="820" width="120" height="60" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="1ADzjnrqRUSSSZhDYKZD-10" value="Backend" style="rounded=1;whiteSpace=wrap;html=1;fontFamily=Lucida Console;fillColor=#dae8fc;strokeColor=#6c8ebf;" vertex="1" parent="1">
|
||||||
|
<mxGeometry x="803.5" y="760" width="70" height="60" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="1ADzjnrqRUSSSZhDYKZD-11" value="Frontend" style="rounded=1;whiteSpace=wrap;html=1;fontFamily=Lucida Console;fillColor=#d5e8d4;strokeColor=#82b366;" vertex="1" parent="1">
|
||||||
|
<mxGeometry x="952" y="820" width="70" height="60" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="1ADzjnrqRUSSSZhDYKZD-12" value="Frontend" style="rounded=1;whiteSpace=wrap;html=1;fontFamily=Lucida Console;fillColor=#d5e8d4;strokeColor=#82b366;" vertex="1" parent="1">
|
||||||
|
<mxGeometry x="1021" y="760" width="70" height="60" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="1ADzjnrqRUSSSZhDYKZD-13" value="Backend" style="rounded=1;whiteSpace=wrap;html=1;fontFamily=Lucida Console;fillColor=#dae8fc;strokeColor=#6c8ebf;" vertex="1" parent="1">
|
||||||
|
<mxGeometry x="951" y="760" width="70" height="60" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="1ADzjnrqRUSSSZhDYKZD-17" value="<font face="Lucida Console">Horizontal Scaling<br></font>" style="endArrow=classic;html=1;rounded=0;dashed=1;" edge="1" parent="1">
|
||||||
|
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||||
|
<mxPoint x="678.5" y="1085" as="sourcePoint" />
|
||||||
|
<mxPoint x="1360" y="1085" as="targetPoint" />
|
||||||
|
</mxGeometry>
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="1ADzjnrqRUSSSZhDYKZD-18" value="Server count" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontFamily=Lucida Console;" vertex="1" parent="1">
|
||||||
|
<mxGeometry x="1303.5" y="1105" width="60" height="30" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="1ADzjnrqRUSSSZhDYKZD-19" value="Server 3" style="rounded=0;whiteSpace=wrap;html=1;fontFamily=Lucida Console;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;" vertex="1" parent="1">
|
||||||
|
<mxGeometry x="1149.5" y="740" width="180" height="160" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="1ADzjnrqRUSSSZhDYKZD-20" value="Authentication" style="rounded=1;whiteSpace=wrap;html=1;fontFamily=Lucida Console;fillColor=#ffe6cc;strokeColor=#d79b00;" vertex="1" parent="1">
|
||||||
|
<mxGeometry x="1179.5" y="760" width="120" height="60" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="1ADzjnrqRUSSSZhDYKZD-21" value="<font face="Lucida Console">Vertical Scaling<br></font>" style="endArrow=classic;startArrow=none;html=1;rounded=0;startFill=0;dashed=1;horizontal=0;" edge="1" parent="1">
|
||||||
|
<mxGeometry x="-0.0556" width="50" height="50" relative="1" as="geometry">
|
||||||
|
<mxPoint x="678.5" y="1085" as="sourcePoint" />
|
||||||
|
<mxPoint x="678.5" y="725" as="targetPoint" />
|
||||||
|
<mxPoint as="offset" />
|
||||||
|
</mxGeometry>
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="1ADzjnrqRUSSSZhDYKZD-22" value="Compute power" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontFamily=Lucida Console;" vertex="1" parent="1">
|
||||||
|
<mxGeometry x="600" y="720" width="70" height="30" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="1ADzjnrqRUSSSZhDYKZD-23" value="Authentication" style="rounded=1;whiteSpace=wrap;html=1;fontFamily=Lucida Console;fillColor=#ffe6cc;strokeColor=#d79b00;" vertex="1" parent="1">
|
||||||
|
<mxGeometry x="961" y="880" width="120" height="140" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="1ADzjnrqRUSSSZhDYKZD-24" value="Backend" style="rounded=1;whiteSpace=wrap;html=1;fontFamily=Lucida Console;fillColor=#dae8fc;strokeColor=#6c8ebf;" vertex="1" parent="1">
|
||||||
|
<mxGeometry x="1021" y="820" width="70" height="60" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="1ADzjnrqRUSSSZhDYKZD-25" value="Backend" style="rounded=1;whiteSpace=wrap;html=1;fontFamily=Lucida Console;fillColor=#dae8fc;strokeColor=#6c8ebf;" vertex="1" parent="1">
|
||||||
|
<mxGeometry x="1169.5" y="820" width="70" height="60" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="1ADzjnrqRUSSSZhDYKZD-26" value="Frontend" style="rounded=1;whiteSpace=wrap;html=1;fontFamily=Lucida Console;fillColor=#d5e8d4;strokeColor=#82b366;" vertex="1" parent="1">
|
||||||
|
<mxGeometry x="1239.5" y="820" width="70" height="60" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
</root>
|
||||||
|
</mxGraphModel>
|
||||||
|
</diagram>
|
||||||
|
<diagram id="XuR8pBeYArQNiwP7_7Y3" name="Page-2">
|
||||||
|
<mxGraphModel dx="1307" dy="1078" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
|
||||||
|
<root>
|
||||||
|
<mxCell id="0" />
|
||||||
|
<mxCell id="1" parent="0" />
|
||||||
|
<mxCell id="uBfJnC3izJ6YzHo_WmXs-1" value="Server 2" style="rounded=0;whiteSpace=wrap;html=1;fontFamily=Lucida Console;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;" vertex="1" parent="1">
|
||||||
|
<mxGeometry x="781" y="590" width="180" height="300" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="uBfJnC3izJ6YzHo_WmXs-2" value="Server 3" style="rounded=0;whiteSpace=wrap;html=1;fontFamily=Lucida Console;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;" vertex="1" parent="1">
|
||||||
|
<mxGeometry x="995" y="590" width="180" height="160" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="uBfJnC3izJ6YzHo_WmXs-3" value="Server 1" style="rounded=0;whiteSpace=wrap;html=1;fontFamily=Lucida Console;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;" vertex="1" parent="1">
|
||||||
|
<mxGeometry x="565" y="590" width="180" height="160" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="uBfJnC3izJ6YzHo_WmXs-4" value="" style="rounded=1;whiteSpace=wrap;html=1;fontFamily=Lucida Console;fillColor=#f5f5f5;fontColor=#333333;strokeColor=#666666;" vertex="1" parent="1">
|
||||||
|
<mxGeometry x="575" y="600" width="160" height="140" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="uBfJnC3izJ6YzHo_WmXs-5" value="Backend" style="rounded=1;whiteSpace=wrap;html=1;fontFamily=Lucida Console;fillColor=#dae8fc;strokeColor=#6c8ebf;" vertex="1" parent="1">
|
||||||
|
<mxGeometry x="586" y="610" width="70" height="60" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="uBfJnC3izJ6YzHo_WmXs-6" value="Frontend" style="rounded=1;whiteSpace=wrap;html=1;fontFamily=Lucida Console;fillColor=#d5e8d4;strokeColor=#82b366;" vertex="1" parent="1">
|
||||||
|
<mxGeometry x="656" y="610" width="70" height="60" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="uBfJnC3izJ6YzHo_WmXs-7" value="Authentication" style="rounded=1;whiteSpace=wrap;html=1;fontFamily=Lucida Console;fillColor=#ffe6cc;strokeColor=#d79b00;" vertex="1" parent="1">
|
||||||
|
<mxGeometry x="595" y="670" width="120" height="60" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="uBfJnC3izJ6YzHo_WmXs-8" value="" style="rounded=1;whiteSpace=wrap;html=1;fontFamily=Lucida Console;fillColor=#f5f5f5;fontColor=#333333;strokeColor=#666666;" vertex="1" parent="1">
|
||||||
|
<mxGeometry x="791" y="600" width="160" height="140" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="uBfJnC3izJ6YzHo_WmXs-9" value="Backend" style="rounded=1;whiteSpace=wrap;html=1;fontFamily=Lucida Console;fillColor=#dae8fc;strokeColor=#6c8ebf;" vertex="1" parent="1">
|
||||||
|
<mxGeometry x="802" y="610" width="70" height="60" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="uBfJnC3izJ6YzHo_WmXs-10" value="Frontend" style="rounded=1;whiteSpace=wrap;html=1;fontFamily=Lucida Console;fillColor=#d5e8d4;strokeColor=#82b366;" vertex="1" parent="1">
|
||||||
|
<mxGeometry x="872" y="610" width="70" height="60" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="uBfJnC3izJ6YzHo_WmXs-11" value="Authentication" style="rounded=1;whiteSpace=wrap;html=1;fontFamily=Lucida Console;fillColor=#ffe6cc;strokeColor=#d79b00;" vertex="1" parent="1">
|
||||||
|
<mxGeometry x="811" y="670" width="120" height="60" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="uBfJnC3izJ6YzHo_WmXs-16" value="" style="rounded=1;whiteSpace=wrap;html=1;fontFamily=Lucida Console;fillColor=#f5f5f5;fontColor=#333333;strokeColor=#666666;" vertex="1" parent="1">
|
||||||
|
<mxGeometry x="1005" y="600" width="160" height="140" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="uBfJnC3izJ6YzHo_WmXs-17" value="Backend" style="rounded=1;whiteSpace=wrap;html=1;fontFamily=Lucida Console;fillColor=#dae8fc;strokeColor=#6c8ebf;" vertex="1" parent="1">
|
||||||
|
<mxGeometry x="1016" y="610" width="70" height="60" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="uBfJnC3izJ6YzHo_WmXs-18" value="Frontend" style="rounded=1;whiteSpace=wrap;html=1;fontFamily=Lucida Console;fillColor=#d5e8d4;strokeColor=#82b366;" vertex="1" parent="1">
|
||||||
|
<mxGeometry x="1086" y="610" width="70" height="60" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="uBfJnC3izJ6YzHo_WmXs-19" value="Authentication" style="rounded=1;whiteSpace=wrap;html=1;fontFamily=Lucida Console;fillColor=#ffe6cc;strokeColor=#d79b00;" vertex="1" parent="1">
|
||||||
|
<mxGeometry x="1025" y="670" width="120" height="60" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="uBfJnC3izJ6YzHo_WmXs-22" value="" style="rounded=1;whiteSpace=wrap;html=1;fontFamily=Lucida Console;fillColor=#f5f5f5;fontColor=#333333;strokeColor=#666666;" vertex="1" parent="1">
|
||||||
|
<mxGeometry x="791" y="740" width="160" height="140" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="uBfJnC3izJ6YzHo_WmXs-23" value="Backend" style="rounded=1;whiteSpace=wrap;html=1;fontFamily=Lucida Console;fillColor=#dae8fc;strokeColor=#6c8ebf;" vertex="1" parent="1">
|
||||||
|
<mxGeometry x="802" y="750" width="70" height="60" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="uBfJnC3izJ6YzHo_WmXs-24" value="Frontend" style="rounded=1;whiteSpace=wrap;html=1;fontFamily=Lucida Console;fillColor=#d5e8d4;strokeColor=#82b366;" vertex="1" parent="1">
|
||||||
|
<mxGeometry x="872" y="750" width="70" height="60" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="uBfJnC3izJ6YzHo_WmXs-25" value="Authentication" style="rounded=1;whiteSpace=wrap;html=1;fontFamily=Lucida Console;fillColor=#ffe6cc;strokeColor=#d79b00;" vertex="1" parent="1">
|
||||||
|
<mxGeometry x="811" y="810" width="120" height="60" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="uBfJnC3izJ6YzHo_WmXs-26" value="<font face="Lucida Console">Vertical Scaling<br></font>" style="endArrow=classic;startArrow=none;html=1;rounded=0;startFill=0;dashed=1;horizontal=0;" edge="1" parent="1">
|
||||||
|
<mxGeometry x="-0.0556" width="50" height="50" relative="1" as="geometry">
|
||||||
|
<mxPoint x="528.5" y="935" as="sourcePoint" />
|
||||||
|
<mxPoint x="528.5" y="575" as="targetPoint" />
|
||||||
|
<mxPoint as="offset" />
|
||||||
|
</mxGeometry>
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="uBfJnC3izJ6YzHo_WmXs-27" value="<font face="Lucida Console">Horizontal Scaling<br></font>" style="endArrow=classic;html=1;rounded=0;dashed=1;" edge="1" parent="1">
|
||||||
|
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||||
|
<mxPoint x="528.5" y="935" as="sourcePoint" />
|
||||||
|
<mxPoint x="1210" y="935" as="targetPoint" />
|
||||||
|
</mxGeometry>
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="uBfJnC3izJ6YzHo_WmXs-28" value="Compute power" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontFamily=Lucida Console;" vertex="1" parent="1">
|
||||||
|
<mxGeometry x="450" y="570" width="70" height="30" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="uBfJnC3izJ6YzHo_WmXs-29" value="Server count" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontFamily=Lucida Console;" vertex="1" parent="1">
|
||||||
|
<mxGeometry x="1153.5" y="955" width="60" height="30" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
</root>
|
||||||
|
</mxGraphModel>
|
||||||
|
</diagram>
|
||||||
|
</mxfile>
|
||||||
29
slides.bib
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
@book{poggialiConciseTypeScriptBook2026,
|
||||||
|
title = {The {{Concise TypeScript Book}}},
|
||||||
|
author = {Poggiali, Simone},
|
||||||
|
year = 2026,
|
||||||
|
howpublished = {https://gibbok.github.io/typescript-book/book/the-concise-typescript-book/},
|
||||||
|
}
|
||||||
|
|
||||||
|
@book{HandbookTypeScriptHandbook,
|
||||||
|
title = {The {{TypeScript Handbook}}},
|
||||||
|
author = {Microsoft},
|
||||||
|
year = 2026,
|
||||||
|
howpublished = {https://www.typescriptlang.org/docs/handbook/intro.html},
|
||||||
|
}
|
||||||
|
|
||||||
|
@article{greggFlameGraph2016,
|
||||||
|
title = {The Flame Graph},
|
||||||
|
author = {Gregg, Brendan},
|
||||||
|
year = 2016,
|
||||||
|
month = may,
|
||||||
|
journal = {Communications of the ACM},
|
||||||
|
volume = {59},
|
||||||
|
number = {6},
|
||||||
|
pages = {48--57},
|
||||||
|
issn = {0001-0782, 1557-7317},
|
||||||
|
doi = {10.1145/2909476},
|
||||||
|
urldate = {2026-01-16},
|
||||||
|
abstract = {This visualization of software execution is a new necessity for performance profiling and debugging.},
|
||||||
|
langid = {english},
|
||||||
|
}
|
||||||
215
slides.cls
Normal file
@@ -0,0 +1,215 @@
|
|||||||
|
\ProvidesClass{slides}[27/01/2025 v1]
|
||||||
|
|
||||||
|
\PassOptionsToPackage{dvipsnames}{xcolor}
|
||||||
|
\PassOptionsToPackage{unicode}{hyperref}
|
||||||
|
\PassOptionsToPackage{naturalnames}{hyperref}
|
||||||
|
\LoadClass[aspectratio=169,10pt]{beamer}
|
||||||
|
|
||||||
|
% speaker notes
|
||||||
|
% open pdf in dual screen using pympress (https://github.com/Cimbali/pympress)
|
||||||
|
% \setbeameroption{show notes on second screen=right}
|
||||||
|
|
||||||
|
% listings (should be loaded before csquotes)
|
||||||
|
\RequirePackage{minted}
|
||||||
|
|
||||||
|
% language and encoding
|
||||||
|
\RequirePackage[french]{babel}
|
||||||
|
\RequirePackage[T1]{fontenc}
|
||||||
|
\RequirePackage{csquotes}
|
||||||
|
|
||||||
|
% biblatex for references on slides
|
||||||
|
\RequirePackage[backend=biber]{biblatex}
|
||||||
|
% clean, short citations in footnotes (cf. https://tex.stackexchange.com/a/587604)
|
||||||
|
\renewbibmacro{in:}{}
|
||||||
|
% \AtEveryCitekey{\clearfield{journaltitle}}
|
||||||
|
\AtEveryCitekey{\clearfield{volume}}
|
||||||
|
\AtEveryCitekey{\clearfield{number}}
|
||||||
|
% \AtEveryCitekey{\clearfield{booktitle}}
|
||||||
|
% \AtEveryCitekey{\clearfield{series}}
|
||||||
|
\AtEveryCitekey{\clearfield{pages}}
|
||||||
|
\AtEveryCitekey{\clearfield{month}}
|
||||||
|
\AtEveryCitekey{\clearlist{publisher}}
|
||||||
|
\AtEveryCitekey{\clearname{editor}}
|
||||||
|
\AtEveryCitekey{\clearlist{location}}
|
||||||
|
\AtEveryCitekey{\clearfield{doi}}
|
||||||
|
\AtEveryCitekey{\clearfield{isbn}}
|
||||||
|
\AtEveryCitekey{\clearfield{issn}}
|
||||||
|
\AtEveryCitekey{\clearfield{eprint}}
|
||||||
|
\AtEveryCitekey{\clearfield{url}}
|
||||||
|
\AtEveryCitekey{\clearfield{urlyear}}
|
||||||
|
\AtEveryCitekey{\clearfield{urlmonth}}
|
||||||
|
\AtEveryCitekey{\clearfield{urlday}}
|
||||||
|
% include reference number in citations (cf. https://tex.stackexchange.com/a/176295)
|
||||||
|
\DeclareCiteCommand{\fullcite}
|
||||||
|
{\usebibmacro{prenote}}
|
||||||
|
{{\printtext[labelnumberwidth]{%
|
||||||
|
\printfield{prefixnumber}%
|
||||||
|
\printfield{labelnumber}}} %
|
||||||
|
\usedriver
|
||||||
|
{\DeclareNameAlias{sortname}{default}}
|
||||||
|
{\thefield{entrytype}}}
|
||||||
|
{\multicitedelim}
|
||||||
|
{\usebibmacro{postnote}}
|
||||||
|
% blank footnotes using \footnote[]{}
|
||||||
|
\let\svthefootnote\thefootnote
|
||||||
|
\textheight 1in
|
||||||
|
\newcommand\blankfootnote[1]{%
|
||||||
|
\let\thefootnote\relax\footnotetext{#1}%
|
||||||
|
\let\thefootnote\svthefootnote%
|
||||||
|
}
|
||||||
|
\let\svfootnote\footnote
|
||||||
|
\renewcommand\footnote[2][?]{%
|
||||||
|
\if\relax#1\relax%
|
||||||
|
\blankfootnote{#2}%
|
||||||
|
\else%
|
||||||
|
\if?#1\svfootnote{#2}\else\svfootnote[#1]{#2}\fi%
|
||||||
|
\fi
|
||||||
|
}
|
||||||
|
|
||||||
|
% captions
|
||||||
|
\RequirePackage{caption}
|
||||||
|
\captionsetup{font=scriptsize,labelfont=scriptsize}
|
||||||
|
|
||||||
|
% beamer theme
|
||||||
|
\usetheme{moloch}
|
||||||
|
\RequirePackage{appendixnumberbeamer}
|
||||||
|
\RequirePackage{fontspec}
|
||||||
|
\setsansfont[
|
||||||
|
ItalicFont={Fira Sans Light Italic},
|
||||||
|
BoldFont={Fira Sans},
|
||||||
|
BoldItalicFont={Fira Sans Italic}
|
||||||
|
]{Fira Sans Light}
|
||||||
|
\setmonofont[BoldFont={Fira Mono Medium}]{Fira Mono}
|
||||||
|
% \setmonofont{Fantasque Sans Mono}
|
||||||
|
\AtBeginEnvironment{tabular}{%
|
||||||
|
\addfontfeature{Numbers={Monospaced}}
|
||||||
|
}
|
||||||
|
% https://steeven9.github.io/USI-LaTeX/html/packages_hyperref_babel_xcolor3.html
|
||||||
|
% Section 3.2 of:
|
||||||
|
% https://mirror.ibcp.fr/pub/CTAN/macros/latex/contrib/beamer-contrib/themes/moloch/moloch.pdf
|
||||||
|
\definecolor{ubo}{HTML}{8c3759}
|
||||||
|
\setbeamercolor{progress bar}{fg=ubo}
|
||||||
|
\setbeamercolor{title separator}{fg=ubo}
|
||||||
|
\setbeamercolor{frametitle}{bg=ubo}
|
||||||
|
% \setbeamercolor{progress bar}{fg=BrickRed}
|
||||||
|
% \setbeamercolor{title separator}{fg=BrickRed}
|
||||||
|
% footnote font size
|
||||||
|
\setbeamerfont{footnote}{size=\tiny}
|
||||||
|
% frame numbering font size
|
||||||
|
\setbeamerfont{footline}{size=\footnotesize}
|
||||||
|
% solid background for blocks
|
||||||
|
\molochset{block=fill}
|
||||||
|
% remove section frames
|
||||||
|
% \molochset{sectionpage=none}
|
||||||
|
% enable subsection frames
|
||||||
|
\molochset{subsectionpage=progressbar}
|
||||||
|
% table of contents
|
||||||
|
\setbeamertemplate{section in toc}[sections numbered]
|
||||||
|
% smaller first-level bullet points
|
||||||
|
\setbeamertemplate{itemize item}{\textbullet}
|
||||||
|
% smaller bibliography entries
|
||||||
|
\renewcommand*{\bibfont}{\scriptsize}
|
||||||
|
|
||||||
|
% figures uncover animation (cf. https://tex.stackexchange.com/a/354033/95423)
|
||||||
|
\setbeamercovered{transparent}
|
||||||
|
\newcommand<>{\uncovergraphics}[2][{}]{
|
||||||
|
\begin{tikzpicture}
|
||||||
|
\node[anchor=south west,inner sep=0] (B) at (4,0)
|
||||||
|
{\includegraphics[#1]{#2}};
|
||||||
|
\alt#3{}{%
|
||||||
|
\fill [draw=none, fill=palette primary.fg, fill opacity=0.9] (B.north west) -- (B.north east) -- (B.south east) -- (B.south west) -- (B.north west) -- cycle;
|
||||||
|
}
|
||||||
|
\end{tikzpicture}
|
||||||
|
}
|
||||||
|
|
||||||
|
% fonts and symbols
|
||||||
|
\RequirePackage{pifont}
|
||||||
|
\newcommand{\cmark}{\color{YellowGreen}\ding{51}}
|
||||||
|
\newcommand{\xmark}{\color{BrickRed}\ding{55}}
|
||||||
|
\RequirePackage{textcomp}
|
||||||
|
\RequirePackage{emoji}
|
||||||
|
% markers
|
||||||
|
\RequirePackage{circledsteps}
|
||||||
|
\pgfkeys{/csteps/inner color=white}
|
||||||
|
\pgfkeys{/csteps/fill color=black}
|
||||||
|
\newcommand{\DONE}{%
|
||||||
|
\CircledParamOpts{inner color=black, outer color=LimeGreen, fill color=LimeGreen}{1}{\textbf{DONE}} %
|
||||||
|
}
|
||||||
|
\newcommand{\TODO}{%
|
||||||
|
\CircledParamOpts{inner color=black, outer color=Goldenrod, fill color=Goldenrod}{1}{\textbf{TODO}} %
|
||||||
|
}
|
||||||
|
\newcommand{\FIXME}{%
|
||||||
|
\CircledParamOpts{inner color=white, outer color=Red, fill color=Red}{1}{\textbf{FIXME}} %
|
||||||
|
}
|
||||||
|
% custom font size for a slide (cf. https://tex.stackexchange.com/a/401409)
|
||||||
|
\RequirePackage{environ}
|
||||||
|
\newcommand{\customframefont}[1]{
|
||||||
|
\setbeamertemplate{itemize/enumerate body begin}{#1}
|
||||||
|
\setbeamertemplate{itemize/enumerate subbody begin}{#1}
|
||||||
|
}
|
||||||
|
\NewEnviron{framefont}[1]{
|
||||||
|
\customframefont{#1} % for itemize/enumerate
|
||||||
|
{#1 % For the text outside itemize/enumerate
|
||||||
|
\BODY
|
||||||
|
}
|
||||||
|
\customframefont{\normalsize}
|
||||||
|
}
|
||||||
|
% math
|
||||||
|
\RequirePackage{amsmath,amssymb,amsfonts}
|
||||||
|
% resizebox
|
||||||
|
\RequirePackage{graphicx}
|
||||||
|
\RequirePackage{subcaption}
|
||||||
|
% tables
|
||||||
|
\RequirePackage{tabularx}
|
||||||
|
\RequirePackage{booktabs}
|
||||||
|
% various tabular columns with text wrapping
|
||||||
|
\newcolumntype{L}{>{\arraybackslash}m{\linewidth}}
|
||||||
|
\newcolumntype{M}{>{\centering\arraybackslash}m{0.33\linewidth}}
|
||||||
|
\newcolumntype{Y}{>{\centering\arraybackslash}m{0.15\linewidth}}
|
||||||
|
\newcolumntype{y}{>{\arraybackslash}m{0.15\linewidth}}
|
||||||
|
% generic horizontally centered column with line breaks
|
||||||
|
\newcolumntype{Z}{>{\centering\arraybackslash}X}
|
||||||
|
% vertical centering of text in all tabularx columns
|
||||||
|
\renewcommand\tabularxcolumn[1]{m{#1}}
|
||||||
|
% links
|
||||||
|
\RequirePackage{hyperref}
|
||||||
|
|
||||||
|
% redefine title page
|
||||||
|
% https://tex.stackexchange.com/a/396409
|
||||||
|
% Section 6.2.3 of:
|
||||||
|
% https://ctan.math.illinois.edu/macros/latex/contrib/beamer-contrib/themes/moloch/moloch.pdf
|
||||||
|
\makeatletter
|
||||||
|
\setbeamertemplate{title page}{
|
||||||
|
\begin{minipage}[b][\paperheight]{\textwidth}
|
||||||
|
% \vfill%
|
||||||
|
\ifx\inserttitle\@empty\else\usebeamertemplate*{title}\fi
|
||||||
|
\ifx\insertsubtitle\@empty\else\usebeamertemplate*{subtitle}\fi
|
||||||
|
\vspace{.2cm}
|
||||||
|
\ifx\insertdate\@empty\else\usebeamertemplate*{date}\fi
|
||||||
|
\usebeamertemplate*{title separator}
|
||||||
|
\vspace{-.2cm}
|
||||||
|
\begin{columns}[]
|
||||||
|
\column{0.4\linewidth}
|
||||||
|
\ifx\beamer@shortauthor\@empty\else\usebeamertemplate*{author}\fi
|
||||||
|
\column{0.4\linewidth}
|
||||||
|
% \begin{table}[]
|
||||||
|
% \begin{flushleft}
|
||||||
|
% \small
|
||||||
|
% \begin{tabular}{ll}
|
||||||
|
% Rapporteur & Blabla \\
|
||||||
|
% Rapporteur & Blabla
|
||||||
|
% \end{tabular}
|
||||||
|
% \end{flushleft}
|
||||||
|
% \end{table}
|
||||||
|
\end{columns}
|
||||||
|
\begin{columns}[b]
|
||||||
|
\column{0.4\linewidth}
|
||||||
|
\ifx\insertinstitute\@empty\else\usebeamertemplate*{institute}\fi
|
||||||
|
\column{0.5\linewidth}
|
||||||
|
\vspace{-2cm}
|
||||||
|
\ifx\inserttitlegraphic\@empty\else\inserttitlegraphic\fi
|
||||||
|
\end{columns}
|
||||||
|
\vspace*{.2cm}
|
||||||
|
\end{minipage}
|
||||||
|
}
|
||||||
|
\makeatother
|
||||||