Compare commits

...

12 Commits

Author SHA1 Message Date
tTh
078d3d6b3a more garbage from op-code field 2024-08-08 16:29:03 +02:00
tTh
97f3cb336d cosmetic 2024-08-08 16:20:27 +02:00
tTh
ae2f0d965e cosmetic 2024-08-08 16:11:05 +02:00
tTh
0480a7a73f add envp pointer from main code 2024-08-08 16:05:30 +02:00
tTh
4b438e7f7a add use_envp 2024-08-08 15:48:54 +02:00
tTh
98334bd25e cosmetic 2024-08-08 15:41:04 +02:00
tTh
f00a06b0c7 more bla 2024-08-08 15:33:18 +02:00
tTh
f3289fc23c very little cosmetic change 2024-08-08 15:30:14 +02:00
tTh
f08879204f corrected an index 2024-08-08 15:29:05 +02:00
tTh
717006e34a add opendmx , cosmetic 2024-08-08 15:28:22 +02:00
tTh
1541deeff0 cosmetic 2024-08-08 15:26:53 +02:00
tTh
48beb52b14 add OpenDMX from Enttec 2024-08-08 15:25:43 +02:00
15 changed files with 174 additions and 53 deletions

View File

@ -7,8 +7,8 @@ D'après Wikipédia :
\begin{quote} \begin{quote}
Le DMX512 (Digital Multiplexing) est une norme de transmission de données Le DMX512 (Digital Multiplexing) est une norme de transmission de données
utilisée pour le contrôle de l'éclairage et des effets de scène dans le spectacle utilisée pour le contrôle de l'éclairage et des effets de scène dans le
vivant. spectacle vivant.
Le protocole DMX512 (qui utilise généralement une liaison Le protocole DMX512 (qui utilise généralement une liaison
suivant la norme EIA RS 485 et cadencée à 250 kb/s) permet suivant la norme EIA RS 485 et cadencée à 250 kb/s) permet
@ -26,13 +26,39 @@ appelée une « trame » DMX).
https://ryderdamen.com/blog/enttec-open-dmx-on-linux/ https://ryderdamen.com/blog/enttec-open-dmx-on-linux/
% ----------------------------------------------------- % -----------------------------------------------------
\section{Enttec OpenDMX} \section{Enttec OpenDMX} \index{OpenDMX} \label{OpenDMX}
D'après le constructeur :
\textsl{
The OPEN DMX USB is a DMX widget used to output
DMX from a computer. Simply connect it using its
USB 2.0 Type B port and launch your compatible
software.
The OPEN DMX USB is discovered as a USB Serial
Device or virtual COM Port dependent on the FTDI
driver installed on your system.
The Open DMX USBs output is processed directly on
the computers processor.
}
Nous allon voir ce qu'il en est exactement.
Après branchement, essayons d'identifier cette interface.
\begin{verbatim} \begin{verbatim}
Bus 001 Device 027: ID 0403:6001 Bus 001 Device 027: ID 0403:6001
Future Technology Devices International, Ltd FT232 Serial (UART) IC Future Technology Devices International, Ltd FT232 Serial (UART) IC
\end{verbatim} \end{verbatim}
\begin{verbatim}
SUBSYSTEM=="tty" ATTRS{idVendor}=="0403"
ATTRS{idProduct}=="6001" SYMLINK+="phytotron"
\end{verbatim}
Le tout sur une ligne et dans le fichier
\texttt{/etc/udev/rules.d/70-emttec-opendmx.rules}.
En général une erreur de syntaxe apparait dans
\textit{varlogmessage}.
look at \texttt{tcsendbreak} ! look at \texttt{tcsendbreak} !
% ----------------------------------------------------- % -----------------------------------------------------

View File

@ -96,7 +96,7 @@ La magie du shebang\index{shebang}
Nous disposons d'un fichier SSV Nous disposons d'un fichier SSV
(Space Separated Values)\footnote{C'est nouveau, ça vient de sortir.} (Space Separated Values)\footnote{C'est nouveau, ça vient de sortir.}
provenant d'un système optico-numérique bi-dimensionnel multi-planaire provenant d'un système optico-numérique bi-dimensionnel multi-planaire
(aka Webcam\index{Webcam}). (aka Webcam\index{webcam}).
Et nous voulons en tirer quelques chiffres et graphiques bien Et nous voulons en tirer quelques chiffres et graphiques bien
clinquants, clinquants,
par exemple les éventuels rapports entre le rouge et le bleu. par exemple les éventuels rapports entre le rouge et le bleu.

View File

@ -47,7 +47,7 @@ Une machine connectée en wifi sur une friboite\footnote{ou le
Cisco sauvage de la salle d'AG, hein, mais ça ne sera Cisco sauvage de la salle d'AG, hein, mais ça ne sera
pas le même nameserver.} peut facilement pas le même nameserver.} peut facilement
faire translateur d'adresse pour un réseau branché sur faire translateur d'adresse pour un réseau branché sur
son eth, à condition de connaitre les son \texttt{eth}, à condition de connaitre les
incantations magiques incantations magiques
(qui sont ici très linuxisantes) : (qui sont ici très linuxisantes) :
@ -58,7 +58,7 @@ modprobe iptable_nat
iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE
\end{verbatim} \end{verbatim}
Ensuite sur les machines du lan, donc le coté ethernet, Ensuite sur les machines du lan, donc le coté Ethernet,
il faut incanter ce genre de trucs : il faut incanter ce genre de trucs :
\begin{verbatim} \begin{verbatim}

View File

@ -196,7 +196,14 @@ Tue Oct 17 08:55:01 CEST 2023
tth@redlady:~$ tth@redlady:~$
\end{verbatim} \end{verbatim}
Simple et efficace. Simple et efficace. \textbf{Mais\dots}
Mais ça ne marche pas à tous les coups comme vous le montre
clairement cet exemple. L'utilisation de la fonction
\texttt{getenv(3)} est très facilement contournable.
\lstinputlisting[language=C]{code/C/use_envp.c}
% ============================================================== % ==============================================================

View File

@ -20,7 +20,8 @@ foo = read(joy_fd, &js, sizeof(struct js_event));
Quand les choses ne se passent pas comme prévu, quand il Quand les choses ne se passent pas comme prévu, quand il
y a des accrocs dans le plan, que le résultat n'est y a des accrocs dans le plan, que le résultat n'est
qu'une video totalement noire de 17 minutes. qu'une video totalement noire de 17 minutes, que des
octets incongrus arrivent depuis l'Arduino.
dmesg, lshw, lsusb, lspci\dots dmesg, lshw, lsusb, lspci\dots
% ----------------------------------------------------------- % -----------------------------------------------------------
@ -83,7 +84,8 @@ Connecter un Minitel\index{MINITEL}
pour dialoguer avec Ulla Trentsixquinze ? Brancher un pour dialoguer avec Ulla Trentsixquinze ? Brancher un
Sportster 14400 pour retrouver Fidonet\index{Fidonet} ? Sportster 14400 pour retrouver Fidonet\index{Fidonet} ?
Discuter avec un équipement avionnique ? Rediriger Discuter avec un équipement avionnique ? Rediriger
l'impression d'un MSX\index{MSX} vers Cups\index{cups} ? l'impression d'un MSX\index{MSX} ou d'un Alice 32
vers Cups\index{cups} ?
Les possibilités sont infinies. C'est votre imagination qui Les possibilités sont infinies. C'est votre imagination qui
est la limite\footnote{Comme à peu près tout dans la vie.} est la limite\footnote{Comme à peu près tout dans la vie.}
@ -98,6 +100,11 @@ périphérique \texttt{/dev/parport}
Question: comment faire du \textsl{bitbanging} ? Question: comment faire du \textsl{bitbanging} ?
% -----------------------------------------------------------
\section{USB} \index{USB} \label{USB}
Universal Serial Bus
% ----------------------------------------------------------- % -----------------------------------------------------------
\section{Disques durs} \section{Disques durs}
@ -158,8 +165,8 @@ idéal, la prédiction des pannes.
\textsl{Check and repair a Linux filesystem} \textsl{Check and repair a Linux filesystem}
Fortune du jour : \textsf{Franchement, là, je préfère que ce soit vous qui prenne la Fortune du jour : \textsf{Franchement, là, je préfère que ce soit vous qui prenne
tronçonneuse, parce que là, c'est pas beau à voir\dots} la tronçonneuse, parce que là, c'est pas beau à voir\dots}
% ----------------------------------------------------------- % -----------------------------------------------------------
\subsection{tune2fs}\index{tune2fs} \subsection{tune2fs}\index{tune2fs}
@ -167,6 +174,26 @@ tronçonneuse, parce que là, c'est pas beau à voir\dots}
\textsl{Adjust tunable filesystem parameters on ext2/ext3/ext4 \textsl{Adjust tunable filesystem parameters on ext2/ext3/ext4
filesystems}\footnote{You can tune a fs, but you can't tuna fish}. filesystems}\footnote{You can tune a fs, but you can't tuna fish}.
% -----------------------------------------------------------
% nouveau 2 juin 2024
% basé sur mes tentatives pour faire marcher l'interface
% Enttec OpenDMX USB
\section{udev} \index{udev} \label{udev}
\begin{quote}
udev supplies the system software with device events, manages
permissions of device nodes and may create additional symlinks in the
/dev directory, or renames network interfaces. The kernel usually just
assigns unpredictable device names based on the order of discovery.
Meaningful symlinks or network device names provide a way to reliably
identify devices based on their properties or current configuration.
\end{quote}
Avant de rentre dans les détails, nous pouvons aller voir un exemple
concret en page \pageref{OpenDMX} où nous atriburons un nom fixe
à une interface USB.
% ----------------------------------------------------------- % -----------------------------------------------------------
\section{Sensors} \index{sensors} \section{Sensors} \index{sensors}
@ -195,7 +222,7 @@ int retcode;
struct ifreq req; struct ifreq req;
#if DEBUG_LEVEL #if DEBUG_LEVEL
fprintf(stderr, ">>> %s \"%s\" to %p\n", \ fprintf(stderr, ">>> %s ( \"%s\" to %p )\n", \
__func__, ifname, p_flags); __func__, ifname, p_flags);
#endif #endif
@ -225,8 +252,7 @@ if (retcode < 0)
close(fd); close(fd);
return -1; return -1;
} }
#if DEBUG_LEVEL #if DEBUG_LEVEL /* display the result */
/* display the result */
fprintf(stderr, "flags = 0x%04x\n", req.ifr_flags); fprintf(stderr, "flags = 0x%04x\n", req.ifr_flags);
#endif #endif
@ -241,7 +267,6 @@ Hélas, je n'ai pas pu trop tester ce truc sur beaucoup de systèmes,
et je vous propose de ne pas trop lui faire confiance pour une et je vous propose de ne pas trop lui faire confiance pour une
application critique... application critique...
% ----------------------------------------------------------- % -----------------------------------------------------------

View File

@ -3,7 +3,8 @@
Le traitement des images est un art à part entière. Nous allons Le traitement des images est un art à part entière. Nous allons
voir quelques grands classiques de la catégorie pas du tout voir quelques grands classiques de la catégorie pas du tout
interactif. Le genre de machin que l'on peut ranger au fond interactif.
Le genre de machin que l'on peut ranger au fond
d'un script shell pour le réutiliser la semaine prochaine. d'un script shell pour le réutiliser la semaine prochaine.
\begin{itemize} \begin{itemize}
@ -27,7 +28,8 @@ et leurs interactions parfois troublantes\dots
Il y a plusieurs binaires dans le paquet : \texttt{convert} pour Il y a plusieurs binaires dans le paquet : \texttt{convert} pour
la plupart des traitements, la plupart des traitements,
\texttt{display} et \texttt{animate} pour visualiser des images, \texttt{display} et \texttt{animate} pour visualiser des images,
\texttt{identify} pour en lire les méta-données. \texttt{identify} pour en lire les méta-données,
\texttt{montage} pour assembler plusieurs images.
Ils partagent un certain nombre d'options communes. Ils partagent un certain nombre d'options communes.
Certains d'entre eux peuvent avoir un effet destructif% Certains d'entre eux peuvent avoir un effet destructif%
@ -190,6 +192,10 @@ On peut aussi procéder autrement, avec les outils PNM\index{PNM} :
pngtopnm \$negatif | ppmtotga -rgb -norle > \$picz pngtopnm \$negatif | ppmtotga -rgb -norle > \$picz
\end{verbatim} \end{verbatim}
Un volontaire dans la salle pour faire des tests de performance ?
Ma première hypothèse est que le résultat des mesures peut
être assez surprenant.
% ------------------------------------------ % ------------------------------------------
\subsection{identify}\index{identify} \subsection{identify}\index{identify}
@ -311,7 +317,7 @@ for ((y=0; y<250; y++)) {
Comment faire un \textsl{resize} avec NetPBM ? Comment faire un \textsl{resize} avec NetPBM ?
Est-il nécessaire d'apprendre la bibliothèque de fonctions Est-il nécessaire d'apprendre la bibliothèque de fonctions
\texttt{libnetpbm}\footnote{Réponse: oui.} ? \texttt{libnetpbm}\footnote{Réponse: certainement oui.} ?
% ------------------------------------------------------------------- % -------------------------------------------------------------------
@ -340,11 +346,11 @@ use it heavily.
\end{quote} \end{quote}
\begin{verbatim} \begin{verbatim}
tiffcp combines one or more files created according to the Tag Image tiffcp combines one or more files created according to the Tag Image
File Format, Revision 6.0 into a single TIFF file. Because the output File Format, Revision 6.0 into a single TIFF file. Because the output
file may be compressed using a different algorithm than the input file may be compressed using a different algorithm than the input
files, tiffcp is most often used to convert between different compres files, tiffcp is most often used to convert between different compres
sion schemes. sion schemes.
\end{verbatim} \end{verbatim}
% ------------------------------------------------------------------- % -------------------------------------------------------------------

View File

@ -37,7 +37,7 @@ connexion possibles, la liste des appareils gérés, et l'éventuel
appareil connecté, si il est sous tension, bien entendu :) appareil connecté, si il est sous tension, bien entendu :)
\begin{verbatim} \begin{verbatim}
tth@redlady:~/Photos/Canon600D/2022-12$ gphoto2 --auto-detect tth@redlady:~/Photos$ gphoto2 --auto-detect
Model Port Model Port
---------------------------------------------------------- ----------------------------------------------------------
Canon EOS 600D usb:002,005 Canon EOS 600D usb:002,005

View File

@ -12,6 +12,8 @@ avec une interface Web et/ou des outils en cli..
Les aspects matériels de la connexion seront vus dans un chapitre adéquat, Les aspects matériels de la connexion seront vus dans un chapitre adéquat,
en page \pageref{portparallele} pour le port \texttt{//}, en page \pageref{portparallele} pour le port \texttt{//},
et \pageref{rs232} pour le serial. et \pageref{rs232} pour le serial.
L'omniprésente connective USB\index{USB} demande peut-être
un chapitre à part entière.
%----------------------------------------------------------------- %-----------------------------------------------------------------

View File

@ -39,24 +39,47 @@ Thu Oct 5 00:53:01 UTC 2023
tth@redlady:~$ tth@redlady:~$
\end{verbatim} \end{verbatim}
Ces ordres peuvent être des commandes internes à l'interpréteur,
d'autres seront des commandes fournies par des exécutables
externes. Pour le début, la différence n'est pas importante.
Mais comment le shell fait-il pour retrouver tous les outils
dont il a besoin ? Simplement, il connait une liste
d'endroits où aller chercher, une sorte de chemin de recherche,
c'est d'ailleurs pour ça que cette liste
est nommée \texttt{PATH}\index{PATH}.
Il est très simple de la visualiser~:
\begin{verbatim}
tth@redlady:~/Devel/TetaTricks$ echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
\end{verbatim}
% ============================================================== % ==============================================================
\section{Langage}\index{script} \section{Un langage}\index{script}
Le shell est aussi, et surtout, un langage de programmation, parfois Le shell est aussi, et surtout, un langage de programmation
appelé \textsl{glue-language} parce qu'il permet de "coller" ensemble à part entière.
plusieurs opérations élémentaires, d'abord avec ses opérateurs internes Il est parfois appelé \textsl{glue-language} parce qu'il permet de
et ensuite l'utilisation d'outils "coller" ensemble plusieurs opérations élémentaires, d'abord avec
extérieurs\footnote{Grep, Sed, Awk, BwBasic...} ses opérateurs internes et ensuite par l'utilisation d'outils
extérieurs\footnote{Grep, Sed, Awk, BwBasic, Sort, Gfortran...}
divers. C'est \textsl{très} efficace. divers. C'est \textsl{très} efficace.
Nous allons commencer par voir quelques notions liées à
la création d'un script exécutable, puis d'un enchainement
de commandes.
Nous passerons ensuite aux structures de contrôle, comme les
tests et les boucles.
% -------------------------------------------------------------- % --------------------------------------------------------------
\subsection{Le \textsc{shebang}} \index{shebang} \subsection{Le shebang} \index{shebang}
Le shebang, c'est ce couple de caractères \texttt{\#!} qui apparait Le shebang, c'est ce couple de caractères \texttt{\#!} qui apparait
au tout début d'un script shell. au tout début d'un script shell.
Le 'she' est l'abréviation de 'sharp', coupant en français. C'est Le 'she' est l'abréviation de 'sharp', qui veut dire 'coupant' en français.
C'est
probablement une allusion aux cotés tranchants du \texttt{\#}. probablement une allusion aux cotés tranchants du \texttt{\#}.
Quand au 'bang', c'est le point d'exclamation après l'explosion Quand au 'bang', c'est le point d'exclamation après l'explosion
de la forkbomb. de la forkbomb.
@ -67,6 +90,26 @@ octets. Si les deux premiers sont \textsl{0x23 0x21}, le reste
de la première ligne sera interprété pour lancer un autre exécutable, de la première ligne sera interprété pour lancer un autre exécutable,
avec un traitement particuler des options. avec un traitement particuler des options.
Et à ce momment-là des explications, on entend Serguey qui hurle
du fond de la salle « schmod777 en force ! ».
Et il a bien raison. En effet, ce fichier doit être vu comme
possiblement exécutable selon les droits 'X' qu'il a.
Il y a une commande prévue à cet effet, dont nous allons voir
l'usage à l'instant, avec la création d'un script complet~:
\begin{verbatim}
tth@redlady:~$ echo '#!/bin/bash' > foo.sh
tth@redlady:~$ echo 'printf "%d" 85 >> foo.sh
tth@redlady:~$ chmod u+x ./foo.sh
tth@redlady:~$ ./foo.sh
55
tth@redlady:~$ cat foo.sh
#!/bin/bash
printf "%x\n" 85
tth@redlady:~$
\end{verbatim}
% ============================================================== % ==============================================================
\section{Le pipeline}\index{pipeline}\label{pipeline} \section{Le pipeline}\index{pipeline}\label{pipeline}
@ -96,6 +139,8 @@ $
\section{Structures de contrôle} \section{Structures de contrôle}
Les plus importantes sont là : le choix, la boucle, l'attente.
% -------------------------------------------------------------- % --------------------------------------------------------------
\subsection {Les tests} \subsection {Les tests}

View File

@ -62,7 +62,6 @@ Il existe bien une alternative, mais je n'ai pas encore essayé~:
\# Write out 20 png format frames from a video starting at 3 minutes, 46 seconds. \# Write out 20 png format frames from a video starting at 3 minutes, 46 seconds.
Tu peux générer les images de transition avec Tu peux générer les images de transition avec
ImageMagick\index{ImageMagick} : ImageMagick\index{ImageMagick} :
\texttt{convert a.png b.png -alpha set -channel A \texttt{convert a.png b.png -alpha set -channel A
@ -149,8 +148,6 @@ OMFG! Il manque le son.
% mais où ai-je bien pu trouver ça ? % mais où ai-je bien pu trouver ça ?
% %
\begin{verbatim} \begin{verbatim}
read -p "*** Press Enter to start recording ***" read -p "*** Press Enter to start recording ***"
"$FFMPEGBIN" \ "$FFMPEGBIN" \
@ -224,11 +221,11 @@ Et avec du \textbf{Zenitram} dedans \textit{:)}
\section{MPV} \index{MPV} \section{MPV} \index{MPV}
\begin{quote} \begin{quote}
mpv is a media player based on MPlayer and mplayer2. It supports a wide mpv is a media player based on MPlayer and mplayer2. It supports a wide
variety of video file formats, audio and video codecs, and subtitle variety of video file formats, audio and video codecs, and subtitle
types. Special input URL types are available to read input from a vari types. Special input URL types are available to read input from a variety
ety of sources other than disk files. Depending on platform, a variety of sources other than disk files. Depending on platform, a variety
of different video and audio output methods are supported. of different video and audio output methods are supported.
\end {quote} \end {quote}
Un avantage de Mpv sur ses camarades (Mplayer, Ffplay\dots) est évident Un avantage de Mpv sur ses camarades (Mplayer, Ffplay\dots) est évident

1
code/C/.gitignore vendored
View File

@ -1,3 +1,4 @@
fgets-simple fgets-simple
demo-strtok demo-strtok
packtest packtest
use_envp

View File

@ -2,7 +2,7 @@
# exemples pour le chapitre sur le C # exemples pour le chapitre sur le C
# new Sat Feb 11 12:06:34 CET 2023 # new Sat Feb 11 12:06:34 CET 2023
all: no-op slowprint fgets-simple packtest all: no-op slowprint fgets-simple packtest use_envp
no-op: no-op.c Makefile no-op: no-op.c Makefile
gcc -Wall $< -o $@ gcc -Wall $< -o $@
@ -19,3 +19,8 @@ demo-strtok: demo-strtok.c Makefile
# added Wed Mar 27 10:01:41 UTC 2024 # added Wed Mar 27 10:01:41 UTC 2024
packtest: packtest.c packtest: packtest.c
gcc -Wall $< -o $@ gcc -Wall $< -o $@
# added Thu Aug 8 13:44:58 UTC 2024
use_envp: use_envp.c Makefile
gcc -Wall $< -o $@

16
code/C/use_envp.c Normal file
View File

@ -0,0 +1,16 @@
/* using envp for fun and profit */
#include <stdio.h>
int main(int argc, char *argv[], char *envp[])
{
char *cptr;
int idx = 0;
cptr = envp[idx];
while ( NULL != (cptr=envp[idx]) ) {
fprintf(stderr, "envp[%d] %p --> %s\n",
idx, cptr, cptr);
idx++;
}
return 0;
}

View File

@ -1,14 +1,10 @@
/* /*
*
* spy_getenv.so: spy_getenv.c Makefile * spy_getenv.so: spy_getenv.c Makefile
* gcc -Wall -shared -fPIC $< -ldl -o $@ * gcc -Wall -shared -fPIC $< -ldl -o $@
*
*/ */
#include <stdio.h> #include <stdio.h>
#include <string.h> #include <string.h>
#include <unistd.h> #include <unistd.h>
#define __USE_GNU #define __USE_GNU
#include <dlfcn.h> #include <dlfcn.h>
@ -18,15 +14,12 @@ char *getenv(char *envname)
{ {
static char *arrow = "--getenv--> "; static char *arrow = "--getenv--> ";
static char *wtf = " --> (nil)"; static char *wtf = " --> (nil)";
char *content; char *content;
original_getenv orig_getenv; original_getenv orig_getenv;
orig_getenv = (original_getenv)dlsym(RTLD_NEXT, "getenv"); orig_getenv = (original_getenv)dlsym(RTLD_NEXT, "getenv");
write(STDERR_FILENO, arrow, strlen(arrow)); write(STDERR_FILENO, arrow, strlen(arrow));
write(STDERR_FILENO, envname, strlen(envname)); write(STDERR_FILENO, envname, strlen(envname));
content = orig_getenv(envname); content = orig_getenv(envname);
if (NULL != content) { if (NULL != content) {
write(STDERR_FILENO, "=", 1); write(STDERR_FILENO, "=", 1);
@ -35,9 +28,7 @@ if (NULL != content) {
else { else {
write(STDERR_FILENO, wtf, strlen(wtf)); write(STDERR_FILENO, wtf, strlen(wtf));
} }
write(STDERR_FILENO, "\n", 1); write(STDERR_FILENO, "\n", 1);
return content; return content;
} }

View File

@ -127,7 +127,7 @@ Your mileage may vary, film at 11\dots
\input{chap/video} \input{chap/video}
\input{chap/graphisme} \input{chap/graphisme}
\input{chap/gnuplot} \input{chap/gnuplot}
% \input{chap/print} \input{chap/print}
\input{chap/webcam} \input{chap/webcam}
% \input{chap/SCSI} % \input{chap/SCSI}
\input{chap/X11} \input{chap/X11}
@ -147,7 +147,7 @@ Your mileage may vary, film at 11\dots
% \input{chap/MINITEL} % \input{chap/MINITEL}
% \input{chap/Raspberry} % \input{chap/Raspberry}
% \input{chap/Fedora} % \input{chap/Fedora}
% \input{chap/IPv6} \input{chap/IPv6}
\input{chap/threads} \input{chap/threads}
\input{chap/IPC} \input{chap/IPC}
\input{chap/dosbox} \input{chap/dosbox}
@ -174,7 +174,7 @@ Your mileage may vary, film at 11\dots
\input{chap/curses} \input{chap/curses}
% \input{chap/openwrt} % \input{chap/openwrt}
\input{chap/WiFi} \input{chap/WiFi}
% \input{chap/GIT} \input{chap/GIT}
\input{chap/divers} \input{chap/divers}
% \input{chap/peer2peer} % \input{chap/peer2peer}