a 771 lines diff

This commit is contained in:
tTh 2023-10-08 21:56:41 +02:00
parent c6fe2224bf
commit c3e227f472
23 changed files with 339 additions and 42 deletions

View File

@ -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 !!!
%
% =========================================================

View File

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

View File

@ -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 !}
.
% ==================================================================

View File

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

View File

@ -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 (<SOURCE>) {
@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}
% ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

View File

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

View File

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

View File

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

View File

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

View File

@ -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})
% =========================================================

View File

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

View File

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

View File

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

View File

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

View File

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

7
chap/wayland.tex Normal file
View File

@ -0,0 +1,7 @@
\chapter{Wayland}
\label{chap:wayland} \index{wayland}
L'avenir sans X11 ?\index{X11}

View File

@ -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}.
% --------------------------------------------------------------------

View File

@ -1,5 +1,7 @@
/*
* demo strtok
* +-------------+
* | demo strtok |
* +-------------+
*/
#include <stdio.h>
@ -14,7 +16,8 @@ unsigned char *ptr;
printf(" --- %s\n", titre);
ptr = (unsigned char *)ligne;
for (foo=0; foo<combien; foo++) {
printf("%02x ", ptr[foo]);
if (ptr[foo]) printf("%02x ", ptr[foo]);
else printf("\\0 ");
}
puts("");
for (foo=0; foo<combien; foo++) {
@ -49,6 +52,6 @@ dump_line("2eme & 3me strtok", copie, sizeof(input));
foo = cptr - copie; /* this is the hack :) */
printf(" index = %d\n", foo);
printf(" and we have [%s]\n", input+foo);
printf(" and we have [%s] :)\n", input+foo);
return 0;
}

View File

@ -1,7 +1,3 @@
/*
* Hello, Sun.
*/
#include <stdio.h>
int main(int argc, char *argv[])

3
code/shell/demofonctions.sh Executable file
View File

@ -0,0 +1,3 @@
#!/bin/sh
. ./fonctions.sh
message "hello world"

5
code/shell/fonctions.sh Normal file
View File

@ -0,0 +1,5 @@
#!/bin/sh
message ()
{
echo $1 | boxes
}

7
code/shell/heredoc.sh Executable file
View File

@ -0,0 +1,7 @@
#!/bin/bash
gnuplot << __EOC__
set term dumb
set grid
plot [x=0:pi*2] sin(x)
__EOC__

View File

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