diff --git a/chap/C.tex b/chap/C.tex index 3d74e83..5e1a07c 100644 --- a/chap/C.tex +++ b/chap/C.tex @@ -553,6 +553,10 @@ décomposer~: utiliser une liste pré-définie de séparateur de champs, comme le \$IFS du shell. +Pour simplifier l'exemple, toutes les commandes susceptibles d'être +tapées +seront structurées de la même manière. + \subsection{la fonction \texttt{strtok}} \index{strtok} Cette fonction nous permet de « découper » notre ligne de commande @@ -580,21 +584,26 @@ on peut ensuite aller regarder dans la mémoire ce qui s'y passe~: 66 6f 6f 20 20 20 62 61 72 09 71 75 75 78 20 77 69 7a 00 f o o b a r q u u x w i z --- 1er strtok -66 6f 6f 00 20 20 62 61 72 09 71 75 75 78 20 77 69 7a 00 +66 6f 6f \0 20 20 62 61 72 09 71 75 75 78 20 77 69 7a 00 f o o b a r q u u x w i z got [foo] \end{verbatim} -Déja on peut constater que la chaine de départ est modifiée, ce qui +Donc, \texttt{strtok} a détecté le premier caractère de séparation, +ici un espace, qui est juste après le premier mot de la ligne à analyser, +et l'a remplacé par un '\symbol{92}0', le marqueur de fin de chaine. +Le premier mot (foo) a bien été isolé. + +on peut constater que la chaine de départ est modifiée, ce qui risque de causer des soucis, mais on en parlera plus tard. - - \subsection{Le programme complet} \lstinputlisting[language=c]{code/C/demo-strtok.c} + + % ========================================================= \section{Erreurs classiques} @@ -620,6 +629,8 @@ pièges fourbes et sournois. Sans parler des UBs, hein\dots XXX \index{XXX} +Un ordinateur est déterministe. + % ========================================================= \section{Debug} \index{Debug} @@ -656,6 +667,8 @@ https://devblogs.microsoft.com/oldnewthing/20230109-00/?p=107685 \section{Dessiner} +% XXX insert blabla here + \subsection{G2} \index{g2} \label{g2} \begin{quote} @@ -667,6 +680,9 @@ types of devices. \lstinputlisting[language=c]{code/g2/un_dessin.c} +% +% XXX EXEMPLE TROP MINIMALISTE !!! +% % ========================================================= diff --git a/chap/Fortran.tex b/chap/Fortran.tex index e1006d0..befe45c 100644 --- a/chap/Fortran.tex +++ b/chap/Fortran.tex @@ -127,12 +127,16 @@ Partie imaginaire : \texttt{ipart = aimag(cmplx)}. Une « structure », c'est comme une petite boite dans laquelle on peut mettre des variables de différentes natures. +Les accès à chacune de ces variables sont idépendants les uns des autres. \begin{lstlisting} type t_pixrgb integer :: r, g, b integer :: alpha = 0 end type + +t_pixrgb :: pixel +pixel%r = 0x55 \end{lstlisting} Nous verrons plus loin l'importance de cette notion. diff --git a/chap/Usenet.tex b/chap/Usenet.tex index 30046ae..2d7b49a 100644 --- a/chap/Usenet.tex +++ b/chap/Usenet.tex @@ -17,6 +17,8 @@ in the United States used for the purposes of trading information, sharing news, discussing new and exciting developments, and collaborating on research results and projects.} +% ================================================================== + \section{slrn} \index{slrn} \label{slrn} @@ -31,12 +33,18 @@ be extended using the embedded S-Lang interpreter. printf 'set wrap_flags 7\nset wrap_width 72\n' >> .slrnrc \end{verbatim} +% ================================================================== + \section{leafnode} \index{leafnode} Leafnode est l'outil essentiel si on désire troller au fond du jardin, en dehors du rayon d'action de sa box.\index{troll} On peut le voir -comme une sorte de proxy, mais pas que. +comme une sorte de proxy, mais pas que. Il permet aussi d'agréguer +plusieurs feeds, ce qui permet de combler les trous, et de donner accès +à Usenet à votre réseau local. + +% ================================================================== \section{INN} \index{INN} @@ -44,8 +52,11 @@ comme une sorte de proxy, mais pas que. Voilà, c'est le moment de parler de l'engin fondamental de ce réseau de discussions. INN. +% ================================================================== + \section{fufe} \index{fufe} -\textbf{It's a trap !} +N'y allez pas, \textbf{It's a trap !} -. + +% ================================================================== diff --git a/chap/X11.tex b/chap/X11.tex index af9b696..0fcb5b0 100644 --- a/chap/X11.tex +++ b/chap/X11.tex @@ -1,6 +1,18 @@ \chapter{X11} \label{chap:X11}\index{X11} +L'écosysteme X11 semble être en fin de carrière pour plusieurs +raisons~: sa complexité +\textsl{mille-feuilles} accumulée au fil des décennies, ses +failles de sécurité réelles ou potentielles, la difficulté +de sa maintenance; raisons qui trainent depuis trop +longtemps\dots + +À l'heure actuelle (Octobre 2023) le successeur/remplaçant du +vénérable X11 « \texttt{Wayland}\index{wayland} » commence tout +juste à arriver dans les distributions Linux et à la +page \pageref{chap:wayland}. Mais il reste un long chemin +à parcourir pour une transition sans larme. %------------------------------------------------------------------- \section{Les fontes} diff --git a/chap/bdd.tex b/chap/bdd.tex index 3c69274..3e5f053 100644 --- a/chap/bdd.tex +++ b/chap/bdd.tex @@ -1,7 +1,9 @@ \chapter{Bases de données} -\label{chap:bdd} +\label{chap:bdd} \index{SQL} % ---------------------------------------------------------------- + + % ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ \section{sqlite} \index{sqlite} @@ -13,15 +15,60 @@ % ---------------------------------------------------------------- \subsection{Libreoffice} \index{Libreoffice} + + % ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + \section{GDBM} \index{GDBM} +Alors là, carrément du vieux truc... + +\begin{quote} +GDBM - The GNU database manager. Includes dbm and ndbm compatibility. +\end{quote} + +Gnu DBM permet de stocker des paires clef/valeur dans un fichier +de données. Chacune de ces clefs doit être unique, et doit être +liée avec une seule valeur\footnote{Peut-on alors parler +de bijection relationnelle ?}. + % ---------------------------------------------------------------- +\subsection{Exemple en Perl} \index{Perl} +\begin{verbatim} +#!/usr/bin/perl -w + +use strict; +use GDBM_File; + +my $nomdb = "exemple.gdbm"; +my (%DB, @champs); +my ($user, $gecos); + +open(SOURCE, "< /etc/passwd") or die "source $!"; +tie(%DB, "GDBM_File", $nomdb, GDBM_WRCREAT, 0666) or die "gdbm $!"; + +while () { + @champs = split ":", $_; + $user = $champs[0]."\0"; + $gecos = $champs[4]."\0"; + $DB{$user} = $gecos; + } + +untie %DB; +close SOURCE; +0; +\end{verbatim} % ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ \section{Postgresql} +Le poids lourd du domaine. + +% ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +\section{Et le "NoSQL" ?} \index{nosql} \index{troll} + % ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ diff --git a/chap/gif89a.tex b/chap/gif89a.tex index 9057003..d73ef95 100644 --- a/chap/gif89a.tex +++ b/chap/gif89a.tex @@ -69,22 +69,23 @@ XXX\index{XXX} \section{Exemples pratiques} -Dans un Makefile~: +Dans un Makefile\footnote{Les makefiles, c'est le bien !}~: \begin{verbatim} indoor.gif: $(DEPS) - convert \ - `ls -rt1 frames/indoor/????.png | tail -99` \ - -delay 120 \ - -resize 28% \ - -normalize \ - -colorspace gray \ - -colors 31 \ - -dither none \ - $@ + convert \ + `ls -rt1 frames/indoor/????.png | tail -99` \ + -delay 120 \ + -resize 28% \ + -normalize \ + -colorspace gray \ + -colors 31 \ + -dither none \ + $@ \end{verbatim} + % ================================================================== \section{gifsicle} diff --git a/chap/gnuplot.tex b/chap/gnuplot.tex index 285c1c9..256a109 100644 --- a/chap/gnuplot.tex +++ b/chap/gnuplot.tex @@ -66,6 +66,8 @@ le résultat de ce script en « pour de vrai ».} \section{Paramétrer la plume} +Largeur, couleur, odeur, toussa. + % ------------------------------------------------------------------- \section{La 3D avec \texttt{splot}} \index{splot} @@ -78,8 +80,21 @@ gnuplot> help set view supports orthographic projections only. It supports both 3D projection or orthogonal 2D projection into a 2D plot-like map. +% ------------------------------------------------------------------- +\section{Des trucs...} + +Comment générer un signal carré~: + +% https://lcamtuf.substack.com/p/square-waves-or-non-elephant-biology + +\begin{verbatim} +set samples 2000 +odd_h(x, n) = sin(x * (2*n - 1)) / (2*n - 1) +plot sum [n=1:20] 4/pi * odd_h(x, n) +\end{verbatim} + % ------------------------------------------------------------------- \section{Questions} diff --git a/chap/hardware.tex b/chap/hardware.tex index 7ef816b..538adc5 100644 --- a/chap/hardware.tex +++ b/chap/hardware.tex @@ -4,14 +4,14 @@ % ----------------------------------------------------------- \section{Joystick}\index{joystick} +La manette de jeu est un périphérique que j'affectionne particulièrement. + \begin{verbatim} int foo, joy_fd; struct js_event js; - joy_fd = open(joy_device , O_RDONLY); foo = read(joy_fd, &js, sizeof(struct js_event)); - \end{verbatim} % ----------------------------------------------------------- @@ -23,6 +23,19 @@ y a des accrocs dans le plan, que le résultat n'est qu'une video totalement noire de 17 minutes. dmesg, lshw, lsusb, lspci\dots +% ----------------------------------------------------------- +% new: Fri Sep 22 11:13:36 UTC 2023 + +\subsection{lshw} \index{lshw} + +\begin{quote} +lshw is a small tool to extract detailed information on the hardware +configuration of the machine. It can report exact memory configuration, +firmware version, mainboard configuration, CPU version and speed, cache +configuration, bus speed, etc. on DMI-capable x86 or IA-64 systems and +on some PowerPC machines (PowerMac G4 is known to work). +\end{quote} + % ----------------------------------------------------------- \section{Ports série} \index{rs232} \label{rs232} diff --git a/chap/image.tex b/chap/image.tex index 72cba72..e780843 100644 --- a/chap/image.tex +++ b/chap/image.tex @@ -228,8 +228,10 @@ Ce sera, pour vous amis lecteurs, une dure mission à assumer. \subsection{Ressources} -Le futur livre de Brunus. Réclamez les prmiers drafts dans -l'IRC\index{IRC} \texttt{freenode\#paulla} \textit{:)} +Le futur livre de Brunus. + +Réclamez les prmiers drafts dans +l'IRC\index{IRC} \texttt{libera.chat\#paulla} \textit{:)} \texttt{http://www.fmwconcepts.com/imagemagick/index.php} diff --git a/chap/ioctl.tex b/chap/ioctl.tex index eb93254..f81d378 100644 --- a/chap/ioctl.tex +++ b/chap/ioctl.tex @@ -9,18 +9,25 @@ Prenons rapidement un exemple, le baton de joie\index{joystick} dans Linux. \begin{verbatim} -int foo, joy_fd; -struct js_event js; +int joy_fd; char joy_name[128]; joy_fd = open(joy_device , O_RDONLY); - +if (ioctl(joy_fd, JSIOCGNAME(sizeof(joy_name)), joy_name) < 0) + strncpy(joy_name, "Unknown", sizeof(joy_name)); +fprintf(stderr, "Name: \"%s\"\n", joy_name); \end{verbatim} - +La macro \texttt{JSIOCGNAME} étant définie dans le fichier +\texttt{/usr/include/linux/joystick.h} comme +\texttt{\_IOC(\_IOC\_READ, 'j', 0x13, len)}. +Bon, OK, j'aurais pu choisir un exemple plus simple, +mais vous avez capté le principe\dots % ========================================================= +\vspace{5em} + Ailleurs dans ce document : Ports série (p. \pageref{rs232}) % ========================================================= diff --git a/chap/scripting.tex b/chap/scripting.tex index 24ec48a..801dec1 100644 --- a/chap/scripting.tex +++ b/chap/scripting.tex @@ -1,7 +1,14 @@ \chapter{scripting} +XXX + \section{Awk} \index{Awk} +Awk est un langage de programmation crée +par Aho, Kernighan, and Weinberger% +\footnote{The AWK Programming Language, Alfred V. Aho, +Brian W. Kernighan, Peter J. Weinberger, Addison-Wesley, 1988. +ISBN 0-201-07981-X. }. Quelques \textsl{oneliners} de bon aloi pour vous donner une idée du langage\dots diff --git a/chap/shell.tex b/chap/shell.tex index 53e74da..ccceeb6 100644 --- a/chap/shell.tex +++ b/chap/shell.tex @@ -8,21 +8,36 @@ bricolages constructifs et/ou amusant. Il y aura du gore\index{gore} aussi, parce que le shell est à la fois un interpréteur de commande et un langage de programmation. Ces deux notions ont beaucoup de choses en commun, comme nous -allons essayer de le voir. +allons essayer de le voir. Certains qualifient le shell de +« langage de glue », et c'est une image assez pertinente. Nous allons nous concentrer sur le \textsl{Bourne again shell} (aka \texttt{bash}\footnote{aka GNU/shell ?}) qui est un des plus répandus, du moins dans le monde Linux\index{Linux}. Mais il en existe d'autres : sh, ksh, ash, zsh, tthsh\dots +Ce qui, bien entendu, pose quelques problèmes de compatibilité. + +Ou alors, il faut reste \textsc{posix}, mais c'est pour le moment +une autre histoire. Parce que là, on est plutôt dans une optique +« morefun » sur l'utilisation de nos machines. % ============================================================== \section{Interpréteur}\index{cli} -Ceci est un prompt. Son petit nom est \texttt{PS1}. On peut y +Ceci est un prompt : \texttt{tth@redlady:\textasciitilde\$}. +Son petit nom est \texttt{PS1}. On peut y mettre plein d'informations utiles et de \textsl{mises en forme} assez funky\footnote{Un peu de calme, fatalerrors !} permettant -d'enhancer la reliability de votre UI/UX. +d'enhancer la reliability de votre UI/UX. Mais surtout il est +là pour indiquer qu'il attend vos ordres, qu'il est prèt à +interpréter vos lignes de commandes. + +\begin{verbatim} +tth@redlady:~$ date --utc +Thu Oct 5 00:53:01 UTC 2023 +tth@redlady:~$ +\end{verbatim} % ============================================================== @@ -57,13 +72,80 @@ Une invention géniale, dont vous pouvez voir un exemple d'utilisation par un gadget sonore en page \pageref{say-uptime} et un bout de code C en page \pageref{filtre-unix}. -Exemple rapide~: +Exemple rapide, où la commande \texttt{uptime} envoie sa sortie dans +le tuyau, et la commande \texttt{tr} va lire le tuyau pour +son entrée~: \begin{verbatim} -$ uptime | tr " " "X" +$ uptime | tr ' ' 'X' X09:22:29XupX33Xdays,X14:00,XX8Xusers,XXloadXaverage:X0.12,X0.17,X0.17 \end{verbatim} +Bien entendu, on peut utiliser plusieurs tuyaux pour construire +une chaine de traitements\footnote{La +chaine de compilation \textsc{eqn/tbl/roff} est un bon exemple}. +On peut même « intercepter » ce qui transite par un des tuyaux. + +\begin{verbatim} +$ +\end{verbatim} + +% ============================================================== + +\section{Les fonctions} + +Une bonne manière de rendre votre code modulaire, et de réutiliser +des bouts de code à volonté depuis plusieurs programmes. + +Voici quelques fonctions~: + +\lstinputlisting{code/shell/fonctions.sh} + +Et comment les utiliser~: + +\lstinputlisting{code/shell/demofonctions.sh} + +% ============================================================== + +% https://bwog-notes.chagratt.site/2023/le-heredoc/ + +\section{Heredoc} + +Un nom difficile à traduire, peut-être par « document en place » ? + +\lstinputlisting{code/shell/heredoc.sh} + +\begin{verbatim} +tth@redlady:~/Devel/TetaTricks$ code/shell/heredoc.sh + + 1 +--------------------------------------------------------------------+ + | +** *** + + + + | + 0.8 |-+.......**..........:.**.......:..........:.........sin(x).*******-| + | ** : : * : : : : | + 0.6 |-+....**..:..........:....**....:..........:..........:..........:+-| + | * : : * : : : : | + 0.4 |-+.**.....:..........:.......*..:..........:..........:..........:+-| + | * : : * : : : : | + 0.2 |-*........:..........:.........**..........:..........:..........:+-| + |* : : * : : : | + 0 |-+........:..........:..........:**........:..........:..........:+-| + | : : : * : : : *| + -0.2 |-+........:..........:..........:..**......:..........:..........:*-| + | : : : * : : * | + -0.4 |-+........:..........:..........:.....*....:..........:........**:+-| + | : : : * : : * : | + -0.6 |-+........:..........:..........:.......**.:..........:.....**...:+-| + | : : : *: : ** : | + -0.8 |-+........:..........:..........:..........**.........:..**......:+-| + | + + + + *** +** + | + -1 +--------------------------------------------------------------------+ + 0 1 2 3 4 5 6 +\end{verbatim} + +Je pense que l'exemple est assez parlant. +Pour un exemple plus complet, toujours avec gnuplot, c'est vers la +page \pageref{chap:gnuplot}. + % ============================================================== \section{Les \textsl{locales}} \index{locales} diff --git a/chap/textes.tex b/chap/textes.tex index 37e143b..bf8e113 100644 --- a/chap/textes.tex +++ b/chap/textes.tex @@ -59,6 +59,28 @@ D'un autre coté, c'est \texttt{roff} qui est utilisé pour formater les pages du manuel Unix. La documentation, c'est important. C'est pour ça que j'en cause page \pageref{chap:manpages}. +Voyons rapidement un exemple minumum compilable. XXX + +\subsection{eqn} + +\begin{quote} +\texttt{eqn} compiles descriptions of equations embedded within troff +input files into commands that are understood by troff. +\end{quote} + +\subsection{tbl} + +\begin{quote} +\texttt{tbl} compiles descriptions of tables embedded within troff +input files into commands that are understood by troff. +\end{quote} + +\subsection{pic} + +\begin{quote} +\texttt{pic} compiles descriptions of pictures embedded within troff +input files into commands that are understood by troff. +\end{quote} %------------------------------------------------------------- \section{yodl} @@ -76,6 +98,8 @@ and texinfo, a poor-man's text converter and an experimental xml converter. \section{zoem} \index{zoem} +General-purpose macro/programming language for transforming text + \begin{quote} Zoem is a language for transforming text. It supports the creation of light-weight mark-up languages as macro packages built on top of zoem. diff --git a/chap/threads.tex b/chap/threads.tex index fc56c0c..86da785 100644 --- a/chap/threads.tex +++ b/chap/threads.tex @@ -24,7 +24,8 @@ Et c'est là que les ennuis potentiels débarquent : les jours, «~ils vont se marcher sur les pieds~». D'un autre coté, ce paradigme permet de faire des choses assez -choupi, comme un synthétiseur d'évènement. +choupi, comme un « synthétiseur d'évènement», notion que noue allons +bientôt contempler. % ---------------------------------------------------------------- \section{Un exemple} diff --git a/chap/video.tex b/chap/video.tex index d1a77f4..2edae2b 100644 --- a/chap/video.tex +++ b/chap/video.tex @@ -136,6 +136,38 @@ OMFG! Il manque le son. % ----------------------------------------------------------------- +\subsection{Capturer une vidéo} + +% +% mais où ai-je bien pu trouver ça ? +% + + + +\begin{verbatim} +read -p "*** Press Enter to start recording ***" +"$FFMPEGBIN" \ + -thread_queue_size 512 \ + -r "$RATE" \ + -f v4l2 \ + -video_size "$SIZE" \ + -i "$VIDEODEVICE" \ + -crf 0 \ + -c:v libx264 \ + -preset ultrafast \ + -threads 4 \ + "$FILENAME" +\end{verbatim} + +C'est un peu rudimentaire, mais il doit être possible de +\textsl{tweaker} ça avec d'autres options, genre fixer +la durée de la capture. + + + +% ----------------------------------------------------------------- + + \subsection{Questions} Comment convertir lors de l'encodage un fichier \texttt{.WAV} diff --git a/chap/wayland.tex b/chap/wayland.tex new file mode 100644 index 0000000..f5d64b8 --- /dev/null +++ b/chap/wayland.tex @@ -0,0 +1,7 @@ +\chapter{Wayland} + +\label{chap:wayland} \index{wayland} + + +L'avenir sans X11 ?\index{X11} + diff --git a/chap/webcam.tex b/chap/webcam.tex index 575ea52..bbf91f7 100644 --- a/chap/webcam.tex +++ b/chap/webcam.tex @@ -38,7 +38,8 @@ ioctl: VIDIOC_ENUM_FMT \end{verbatim} Question : quelle méthode utiliser pour avoir la même chose avec -des lignes de code écrites en C ? +des lignes de code écrites en C ? Il faut passer par une suite d'appels +\texttt{ioctl}\index{ioctl}. % -------------------------------------------------------------------- diff --git a/code/C/demo-strtok.c b/code/C/demo-strtok.c index ac75a4b..7fd6cbd 100644 --- a/code/C/demo-strtok.c +++ b/code/C/demo-strtok.c @@ -1,5 +1,7 @@ /* - * demo strtok + * +-------------+ + * | demo strtok | + * +-------------+ */ #include @@ -14,7 +16,8 @@ unsigned char *ptr; printf(" --- %s\n", titre); ptr = (unsigned char *)ligne; for (foo=0; foo int main(int argc, char *argv[]) diff --git a/code/shell/demofonctions.sh b/code/shell/demofonctions.sh new file mode 100755 index 0000000..92a33f3 --- /dev/null +++ b/code/shell/demofonctions.sh @@ -0,0 +1,3 @@ +#!/bin/sh +. ./fonctions.sh +message "hello world" diff --git a/code/shell/fonctions.sh b/code/shell/fonctions.sh new file mode 100644 index 0000000..5870d0d --- /dev/null +++ b/code/shell/fonctions.sh @@ -0,0 +1,5 @@ +#!/bin/sh +message () +{ +echo $1 | boxes +} \ No newline at end of file diff --git a/code/shell/heredoc.sh b/code/shell/heredoc.sh new file mode 100755 index 0000000..a57c382 --- /dev/null +++ b/code/shell/heredoc.sh @@ -0,0 +1,7 @@ +#!/bin/bash + +gnuplot << __EOC__ +set term dumb +set grid +plot [x=0:pi*2] sin(x) +__EOC__ \ No newline at end of file diff --git a/tetatricks.tex b/tetatricks.tex index 38e2ea2..85669da 100644 --- a/tetatricks.tex +++ b/tetatricks.tex @@ -126,6 +126,7 @@ en ligne sur le site du Tetalab. Your mileage may vary\dots \input{chap/webcam} % \input{chap/SCSI} \input{chap/X11} +\input{chap/wayland} % nouveau septembre 2023 \input{chap/Fortran} \input{chap/scripting} \input{chap/Arduino} @@ -152,7 +153,7 @@ en ligne sur le site du Tetalab. Your mileage may vary\dots \input{chap/Bonjour} \input{chap/ioctl} \input{chap/debug} -\input{chap/buzybox} +% \input{chap/buzybox} \input{chap/gif89a} \input{chap/IRC} % \input{chap/SCCS} % nouveau 18 mars 2021 @@ -166,7 +167,7 @@ en ligne sur le site du Tetalab. Your mileage may vary\dots \input{chap/bdd} % nouveau 26 octobre 2022 \input{chap/slang} \input{chap/curses} -\input{chap/openwrt} +% \input{chap/openwrt} \input{chap/WiFi} % \input{chap/GIT} \input{chap/divers}