a 771 lines diff
This commit is contained in:
parent
c6fe2224bf
commit
c3e227f472
24
chap/C.tex
24
chap/C.tex
@ -553,6 +553,10 @@ décomposer~:
|
|||||||
utiliser une liste pré-définie de séparateur de champs,
|
utiliser une liste pré-définie de séparateur de champs,
|
||||||
comme le \$IFS du shell.
|
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}
|
\subsection{la fonction \texttt{strtok}} \index{strtok}
|
||||||
|
|
||||||
Cette fonction nous permet de « découper » notre ligne de commande
|
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
|
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
|
f o o b a r q u u x w i z
|
||||||
--- 1er strtok
|
--- 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
|
f o o b a r q u u x w i z
|
||||||
got [foo]
|
got [foo]
|
||||||
\end{verbatim}
|
\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.
|
risque de causer des soucis, mais on en parlera plus tard.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
\subsection{Le programme complet}
|
\subsection{Le programme complet}
|
||||||
|
|
||||||
\lstinputlisting[language=c]{code/C/demo-strtok.c}
|
\lstinputlisting[language=c]{code/C/demo-strtok.c}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
% =========================================================
|
% =========================================================
|
||||||
|
|
||||||
\section{Erreurs classiques}
|
\section{Erreurs classiques}
|
||||||
@ -620,6 +629,8 @@ pièges fourbes et sournois. Sans parler des UBs, hein\dots
|
|||||||
|
|
||||||
XXX \index{XXX}
|
XXX \index{XXX}
|
||||||
|
|
||||||
|
Un ordinateur est déterministe.
|
||||||
|
|
||||||
% =========================================================
|
% =========================================================
|
||||||
|
|
||||||
\section{Debug} \index{Debug}
|
\section{Debug} \index{Debug}
|
||||||
@ -656,6 +667,8 @@ https://devblogs.microsoft.com/oldnewthing/20230109-00/?p=107685
|
|||||||
|
|
||||||
\section{Dessiner}
|
\section{Dessiner}
|
||||||
|
|
||||||
|
% XXX insert blabla here
|
||||||
|
|
||||||
\subsection{G2} \index{g2} \label{g2}
|
\subsection{G2} \index{g2} \label{g2}
|
||||||
|
|
||||||
\begin{quote}
|
\begin{quote}
|
||||||
@ -667,6 +680,9 @@ types of devices.
|
|||||||
|
|
||||||
\lstinputlisting[language=c]{code/g2/un_dessin.c}
|
\lstinputlisting[language=c]{code/g2/un_dessin.c}
|
||||||
|
|
||||||
|
%
|
||||||
|
% XXX EXEMPLE TROP MINIMALISTE !!!
|
||||||
|
%
|
||||||
|
|
||||||
% =========================================================
|
% =========================================================
|
||||||
|
|
||||||
|
@ -127,12 +127,16 @@ Partie imaginaire : \texttt{ipart = aimag(cmplx)}.
|
|||||||
|
|
||||||
Une « structure », c'est comme une petite boite dans laquelle on peut
|
Une « structure », c'est comme une petite boite dans laquelle on peut
|
||||||
mettre des variables de différentes natures.
|
mettre des variables de différentes natures.
|
||||||
|
Les accès à chacune de ces variables sont idépendants les uns des autres.
|
||||||
|
|
||||||
\begin{lstlisting}
|
\begin{lstlisting}
|
||||||
type t_pixrgb
|
type t_pixrgb
|
||||||
integer :: r, g, b
|
integer :: r, g, b
|
||||||
integer :: alpha = 0
|
integer :: alpha = 0
|
||||||
end type
|
end type
|
||||||
|
|
||||||
|
t_pixrgb :: pixel
|
||||||
|
pixel%r = 0x55
|
||||||
\end{lstlisting}
|
\end{lstlisting}
|
||||||
|
|
||||||
Nous verrons plus loin l'importance de cette notion.
|
Nous verrons plus loin l'importance de cette notion.
|
||||||
|
@ -17,6 +17,8 @@ in the United States used for the purposes of trading information,
|
|||||||
sharing news, discussing new and exciting developments,
|
sharing news, discussing new and exciting developments,
|
||||||
and collaborating on research results and projects.}
|
and collaborating on research results and projects.}
|
||||||
|
|
||||||
|
% ==================================================================
|
||||||
|
|
||||||
\section{slrn}
|
\section{slrn}
|
||||||
\index{slrn}
|
\index{slrn}
|
||||||
\label{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
|
printf 'set wrap_flags 7\nset wrap_width 72\n' >> .slrnrc
|
||||||
\end{verbatim}
|
\end{verbatim}
|
||||||
|
|
||||||
|
% ==================================================================
|
||||||
|
|
||||||
\section{leafnode}
|
\section{leafnode}
|
||||||
\index{leafnode}
|
\index{leafnode}
|
||||||
|
|
||||||
Leafnode est l'outil essentiel si on désire troller au fond du jardin,
|
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
|
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}
|
\section{INN}
|
||||||
\index{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
|
Voilà, c'est le moment de parler de l'engin fondamental de ce réseau
|
||||||
de discussions. INN.
|
de discussions. INN.
|
||||||
|
|
||||||
|
% ==================================================================
|
||||||
|
|
||||||
\section{fufe} \index{fufe}
|
\section{fufe} \index{fufe}
|
||||||
|
|
||||||
\textbf{It's a trap !}
|
N'y allez pas, \textbf{It's a trap !}
|
||||||
|
|
||||||
.
|
|
||||||
|
% ==================================================================
|
||||||
|
12
chap/X11.tex
12
chap/X11.tex
@ -1,6 +1,18 @@
|
|||||||
\chapter{X11}
|
\chapter{X11}
|
||||||
\label{chap:X11}\index{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}
|
\section{Les fontes}
|
||||||
|
49
chap/bdd.tex
49
chap/bdd.tex
@ -1,7 +1,9 @@
|
|||||||
\chapter{Bases de données}
|
\chapter{Bases de données}
|
||||||
\label{chap:bdd}
|
\label{chap:bdd} \index{SQL}
|
||||||
|
|
||||||
% ----------------------------------------------------------------
|
% ----------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
% ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
% ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||||
\section{sqlite} \index{sqlite}
|
\section{sqlite} \index{sqlite}
|
||||||
|
|
||||||
@ -13,15 +15,60 @@
|
|||||||
% ----------------------------------------------------------------
|
% ----------------------------------------------------------------
|
||||||
\subsection{Libreoffice} \index{Libreoffice}
|
\subsection{Libreoffice} \index{Libreoffice}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
% ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
% ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||||
|
|
||||||
\section{GDBM} \index{GDBM}
|
\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}
|
\section{Postgresql}
|
||||||
|
|
||||||
|
Le poids lourd du domaine.
|
||||||
|
|
||||||
|
% ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||||
|
|
||||||
|
\section{Et le "NoSQL" ?} \index{nosql} \index{troll}
|
||||||
|
|
||||||
% ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
% ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||||
|
@ -69,22 +69,23 @@ XXX\index{XXX}
|
|||||||
|
|
||||||
\section{Exemples pratiques}
|
\section{Exemples pratiques}
|
||||||
|
|
||||||
Dans un Makefile~:
|
Dans un Makefile\footnote{Les makefiles, c'est le bien !}~:
|
||||||
|
|
||||||
\begin{verbatim}
|
\begin{verbatim}
|
||||||
indoor.gif: $(DEPS)
|
indoor.gif: $(DEPS)
|
||||||
convert \
|
convert \
|
||||||
`ls -rt1 frames/indoor/????.png | tail -99` \
|
`ls -rt1 frames/indoor/????.png | tail -99` \
|
||||||
-delay 120 \
|
-delay 120 \
|
||||||
-resize 28% \
|
-resize 28% \
|
||||||
-normalize \
|
-normalize \
|
||||||
-colorspace gray \
|
-colorspace gray \
|
||||||
-colors 31 \
|
-colors 31 \
|
||||||
-dither none \
|
-dither none \
|
||||||
$@
|
$@
|
||||||
\end{verbatim}
|
\end{verbatim}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
% ==================================================================
|
% ==================================================================
|
||||||
|
|
||||||
\section{gifsicle}
|
\section{gifsicle}
|
||||||
|
@ -66,6 +66,8 @@ le résultat de ce script en « pour de vrai ».}
|
|||||||
|
|
||||||
\section{Paramétrer la plume}
|
\section{Paramétrer la plume}
|
||||||
|
|
||||||
|
Largeur, couleur, odeur, toussa.
|
||||||
|
|
||||||
% -------------------------------------------------------------------
|
% -------------------------------------------------------------------
|
||||||
|
|
||||||
\section{La 3D avec \texttt{splot}} \index{splot}
|
\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
|
supports orthographic projections only. It supports both 3D projection or
|
||||||
orthogonal 2D projection into a 2D plot-like map.
|
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}
|
\section{Questions}
|
||||||
|
@ -4,14 +4,14 @@
|
|||||||
% -----------------------------------------------------------
|
% -----------------------------------------------------------
|
||||||
\section{Joystick}\index{joystick}
|
\section{Joystick}\index{joystick}
|
||||||
|
|
||||||
|
La manette de jeu est un périphérique que j'affectionne particulièrement.
|
||||||
|
|
||||||
\begin{verbatim}
|
\begin{verbatim}
|
||||||
int foo, joy_fd;
|
int foo, joy_fd;
|
||||||
struct js_event js;
|
struct js_event js;
|
||||||
|
|
||||||
|
|
||||||
joy_fd = open(joy_device , O_RDONLY);
|
joy_fd = open(joy_device , O_RDONLY);
|
||||||
foo = read(joy_fd, &js, sizeof(struct js_event));
|
foo = read(joy_fd, &js, sizeof(struct js_event));
|
||||||
|
|
||||||
\end{verbatim}
|
\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.
|
qu'une video totalement noire de 17 minutes.
|
||||||
dmesg, lshw, lsusb, lspci\dots
|
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}
|
\section{Ports série}
|
||||||
\index{rs232} \label{rs232}
|
\index{rs232} \label{rs232}
|
||||||
|
@ -228,8 +228,10 @@ Ce sera, pour vous amis lecteurs, une dure mission à assumer.
|
|||||||
|
|
||||||
\subsection{Ressources}
|
\subsection{Ressources}
|
||||||
|
|
||||||
Le futur livre de Brunus. Réclamez les prmiers drafts dans
|
Le futur livre de Brunus.
|
||||||
l'IRC\index{IRC} \texttt{freenode\#paulla} \textit{:)}
|
|
||||||
|
Réclamez les prmiers drafts dans
|
||||||
|
l'IRC\index{IRC} \texttt{libera.chat\#paulla} \textit{:)}
|
||||||
|
|
||||||
\texttt{http://www.fmwconcepts.com/imagemagick/index.php}
|
\texttt{http://www.fmwconcepts.com/imagemagick/index.php}
|
||||||
|
|
||||||
|
@ -9,18 +9,25 @@ Prenons rapidement un exemple, le baton de joie\index{joystick}
|
|||||||
dans Linux.
|
dans Linux.
|
||||||
|
|
||||||
\begin{verbatim}
|
\begin{verbatim}
|
||||||
int foo, joy_fd;
|
int joy_fd;
|
||||||
struct js_event js;
|
|
||||||
char joy_name[128];
|
char joy_name[128];
|
||||||
|
|
||||||
joy_fd = open(joy_device , O_RDONLY);
|
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}
|
\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})
|
Ailleurs dans ce document : Ports série (p. \pageref{rs232})
|
||||||
|
|
||||||
% =========================================================
|
% =========================================================
|
||||||
|
@ -1,7 +1,14 @@
|
|||||||
\chapter{scripting}
|
\chapter{scripting}
|
||||||
|
|
||||||
|
XXX
|
||||||
|
|
||||||
\section{Awk} \index{Awk}
|
\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
|
Quelques \textsl{oneliners} de bon aloi pour vous donner
|
||||||
une idée du langage\dots
|
une idée du langage\dots
|
||||||
|
@ -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
|
aussi, parce que le shell est à la fois un interpréteur de commande
|
||||||
et un langage de programmation.
|
et un langage de programmation.
|
||||||
Ces deux notions ont beaucoup de choses en commun, comme nous
|
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}
|
Nous allons nous concentrer sur le \textsl{Bourne again shell}
|
||||||
(aka \texttt{bash}\footnote{aka GNU/shell ?}) qui est un des plus
|
(aka \texttt{bash}\footnote{aka GNU/shell ?}) qui est un des plus
|
||||||
répandus, du moins dans le monde Linux\index{Linux}.
|
répandus, du moins dans le monde Linux\index{Linux}.
|
||||||
Mais il en existe d'autres : sh, ksh, ash, zsh, tthsh\dots
|
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}
|
\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
|
mettre plein d'informations utiles et de \textsl{mises en forme} assez
|
||||||
funky\footnote{Un peu de calme, fatalerrors !} permettant
|
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
|
par un gadget sonore en page \pageref{say-uptime} et
|
||||||
un bout de code C en page \pageref{filtre-unix}.
|
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}
|
\begin{verbatim}
|
||||||
$ uptime | tr " " "X"
|
$ uptime | tr ' ' 'X'
|
||||||
X09:22:29XupX33Xdays,X14:00,XX8Xusers,XXloadXaverage:X0.12,X0.17,X0.17
|
X09:22:29XupX33Xdays,X14:00,XX8Xusers,XXloadXaverage:X0.12,X0.17,X0.17
|
||||||
\end{verbatim}
|
\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}}
|
\section{Les \textsl{locales}}
|
||||||
\index{locales}
|
\index{locales}
|
||||||
|
@ -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.
|
les pages du manuel Unix. La documentation, c'est important.
|
||||||
C'est pour ça que j'en cause page \pageref{chap:manpages}.
|
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}
|
\section{yodl}
|
||||||
@ -76,6 +98,8 @@ and texinfo, a poor-man's text converter and an experimental xml converter.
|
|||||||
\section{zoem}
|
\section{zoem}
|
||||||
\index{zoem}
|
\index{zoem}
|
||||||
|
|
||||||
|
General-purpose macro/programming language for transforming text
|
||||||
|
|
||||||
\begin{quote}
|
\begin{quote}
|
||||||
Zoem is a language for transforming text. It supports the creation of
|
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.
|
light-weight mark-up languages as macro packages built on top of zoem.
|
||||||
|
@ -24,7 +24,8 @@ Et c'est là que les ennuis potentiels débarquent :
|
|||||||
les jours, «~ils vont se marcher sur les pieds~».
|
les jours, «~ils vont se marcher sur les pieds~».
|
||||||
|
|
||||||
D'un autre coté, ce paradigme permet de faire des choses assez
|
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}
|
\section{Un exemple}
|
||||||
|
@ -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}
|
\subsection{Questions}
|
||||||
|
|
||||||
Comment convertir lors de l'encodage un fichier \texttt{.WAV}
|
Comment convertir lors de l'encodage un fichier \texttt{.WAV}
|
||||||
|
7
chap/wayland.tex
Normal file
7
chap/wayland.tex
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
\chapter{Wayland}
|
||||||
|
|
||||||
|
\label{chap:wayland} \index{wayland}
|
||||||
|
|
||||||
|
|
||||||
|
L'avenir sans X11 ?\index{X11}
|
||||||
|
|
@ -38,7 +38,8 @@ ioctl: VIDIOC_ENUM_FMT
|
|||||||
\end{verbatim}
|
\end{verbatim}
|
||||||
|
|
||||||
Question : quelle méthode utiliser pour avoir la même chose avec
|
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}.
|
||||||
|
|
||||||
% --------------------------------------------------------------------
|
% --------------------------------------------------------------------
|
||||||
|
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* demo strtok
|
* +-------------+
|
||||||
|
* | demo strtok |
|
||||||
|
* +-------------+
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
@ -14,7 +16,8 @@ unsigned char *ptr;
|
|||||||
printf(" --- %s\n", titre);
|
printf(" --- %s\n", titre);
|
||||||
ptr = (unsigned char *)ligne;
|
ptr = (unsigned char *)ligne;
|
||||||
for (foo=0; foo<combien; foo++) {
|
for (foo=0; foo<combien; foo++) {
|
||||||
printf("%02x ", ptr[foo]);
|
if (ptr[foo]) printf("%02x ", ptr[foo]);
|
||||||
|
else printf("\\0 ");
|
||||||
}
|
}
|
||||||
puts("");
|
puts("");
|
||||||
for (foo=0; foo<combien; foo++) {
|
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 :) */
|
foo = cptr - copie; /* this is the hack :) */
|
||||||
|
|
||||||
printf(" index = %d\n", foo);
|
printf(" index = %d\n", foo);
|
||||||
printf(" and we have [%s]\n", input+foo);
|
printf(" and we have [%s] :)\n", input+foo);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,3 @@
|
|||||||
/*
|
|
||||||
* Hello, Sun.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
int main(int argc, char *argv[])
|
int main(int argc, char *argv[])
|
||||||
|
3
code/shell/demofonctions.sh
Executable file
3
code/shell/demofonctions.sh
Executable file
@ -0,0 +1,3 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
. ./fonctions.sh
|
||||||
|
message "hello world"
|
5
code/shell/fonctions.sh
Normal file
5
code/shell/fonctions.sh
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
message ()
|
||||||
|
{
|
||||||
|
echo $1 | boxes
|
||||||
|
}
|
7
code/shell/heredoc.sh
Executable file
7
code/shell/heredoc.sh
Executable file
@ -0,0 +1,7 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
gnuplot << __EOC__
|
||||||
|
set term dumb
|
||||||
|
set grid
|
||||||
|
plot [x=0:pi*2] sin(x)
|
||||||
|
__EOC__
|
@ -126,6 +126,7 @@ en ligne sur le site du Tetalab. Your mileage may vary\dots
|
|||||||
\input{chap/webcam}
|
\input{chap/webcam}
|
||||||
% \input{chap/SCSI}
|
% \input{chap/SCSI}
|
||||||
\input{chap/X11}
|
\input{chap/X11}
|
||||||
|
\input{chap/wayland} % nouveau septembre 2023
|
||||||
\input{chap/Fortran}
|
\input{chap/Fortran}
|
||||||
\input{chap/scripting}
|
\input{chap/scripting}
|
||||||
\input{chap/Arduino}
|
\input{chap/Arduino}
|
||||||
@ -152,7 +153,7 @@ en ligne sur le site du Tetalab. Your mileage may vary\dots
|
|||||||
\input{chap/Bonjour}
|
\input{chap/Bonjour}
|
||||||
\input{chap/ioctl}
|
\input{chap/ioctl}
|
||||||
\input{chap/debug}
|
\input{chap/debug}
|
||||||
\input{chap/buzybox}
|
% \input{chap/buzybox}
|
||||||
\input{chap/gif89a}
|
\input{chap/gif89a}
|
||||||
\input{chap/IRC}
|
\input{chap/IRC}
|
||||||
% \input{chap/SCCS} % nouveau 18 mars 2021
|
% \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/bdd} % nouveau 26 octobre 2022
|
||||||
\input{chap/slang}
|
\input{chap/slang}
|
||||||
\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}
|
||||||
|
Loading…
Reference in New Issue
Block a user