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
|
||||