the caturday's really big commit

This commit is contained in:
tTh 2024-09-28 20:25:02 +02:00
parent dfede4a816
commit a1c0fddd17
38 changed files with 603 additions and 265 deletions

View File

@ -78,6 +78,14 @@ Première conclusion : affaire à suivre.
% ====================================================================
\section{Yabasic} \index{yabasic}
\begin{quote}
Yabasic implements the most common and simple elements of the BASIC
language; it comes with for-loops and goto with while-loops and
procedures. yabasic does monochrome line graphics, and printing
comes with no extra effort. yabasic runs under Unix and Windows;
it is small (less than 200 KB) and free.
\end{quote}
Première innovation, les numéros de ligne ne sont plus obligatoires.
\lstinputlisting{code/Basic/yabasic-1.bas}

View File

@ -632,7 +632,7 @@ et un exemple simple d'utilisation.
\section{Analyser une ligne de texte} \index{parser}
Nous désirons implémenter une interface en ligne de commande
(aka CLI\index{CLI}) pour un enchainement simple d'intructions
(aka CLI\index{cli}) pour un enchainement simple d'intructions
assez semblables. On peut aussi voir ça comme la création
d'un \textsl{domain specific language} (aka DSL\index{DSL}).

View File

@ -11,6 +11,10 @@ service à partir de son nom. Un énorme progrès comparé à la
maintenance du fichier \texttt{/etc/hosts} qu'il fallait,
à la vieille époque, télécharger toutes les nuits\dots
Par contre, « \textit{C'est encore de la faute du DNS} »
est devenu, ces dernières années, une excuse crédible.
Il y a de nombreuses raisons qui justifient cette remarque.
% ------------------------------------------------------------
\section{Outils de base}

View File

@ -1,7 +1,15 @@
\chapter{Open Sound Control}
\index{OSC} \label{chap:OSC}
Wikipedia :
Pour moi c'est une façon simple et élégante de faire discuter des
ordinateurs et je ne dis pas ça parce que j'ai déja pas mal
joué\footnote{https://git.tetalab.org/tTh/gadgets-OSC} avec,
mais parce c'est probablement vrai\dots
% ================================================================
\section{C'est quoi ?}
D'après Wikipedia :
\textsl{OSC est un format de transmission de données entre ordinateurs,
synthétiseurs, robots ou tout autre matériel ou logiciel compatible,
conçu pour le contrôle en temps réel.
@ -10,11 +18,20 @@ des protocoles UDP\index{UDP} ou TCP\index{TCP} et apporte des
améliorations en termes de rapidité et de flexibilité par rapport
à l'ancienne norme MIDI\index{MIDI}\dots}
% ================================================================
\section{Programmation}
Actuellement, j'utilise (pour le C) \texttt{liblo}\index{liblo}
qui reste simple
à utiliser tout en permettant de descendre à un bas niveau.
Cette bibliothèque est livrée avec deux outils que nous
allons voir maintenant.
qui reste simple à utiliser
tout en permettant de descendre à un bas niveau.
Elle fonctionne sur un modèle asynchrone
(ce qui peut poser des soucis selon le contexte d'utilisation)
et de bonnes possibilités de filtrage selon certains critères.
Cette bibliothèque est livrée avec deux outils de test/debug que nous
allons voir maintenant, et que je vous encourage à apprivoiser.
% ================================================================
@ -23,28 +40,51 @@ allons voir maintenant.
\textbf{Envoyer :}
Pour envoyer, il faut bien définir une destination. Une fois
de plus, le couple IP adresse/port est utilisé. Ce sont les
deux premiers paramètres.
Pour envoyer des données, il faut bien définir une destination. Une fois
de plus, le triplet IP adresse/port/chemin est utilisé.
Ce sont les trois premiers paramètres de la commande~:
\begin{verbatim}
tth@debian:~$ oscsend localhost 1664 /tmp/kmem is 61 'meg, efface !'
tth@debian:~$
tth@debian:~$ oscsend localhost 1664 /tmp/kmem 'is' 61 'meg, efface !'
\end{verbatim}
La chaine \texttt{is} que vous voyez dans la ligne de commande
décrit le type des paramètres qui suivent~:
\texttt{i} est pour un integer et \texttt{s} pour une
chaine (notez les simples quotes pour passer les caractères
speciaux du shell).
chaine de caractères
(notez les simples quotes autour du texte pour passer les
caractères speciaux du shell, comme l'espace).
Il existe d'autres types de paramètres que nous verrons plus loin.
\vspace{1em} \textbf{Écouter :}
C'est beaucoup plus simple, il suffit de donner le numéro
de port UDP sur lequel nous allons écouter.
L'option \texttt{-L} est utile si vous voulez exploiter
la sortie de oscdump,
par exemple avec "\texttt{oscdump 9000 | cat -n}" pour numéroter
les évènements reçus.
\textbf{Ecouter :}
\begin{verbatim}
tth@debian:~$ oscdump 1664
/tmp/kmem is 61 "meg, efface !"
^C
tth@debian:~$
\end{verbatim}
Pour descendre plus bas dans la pile, on pourra efficacement utiliser
un \textsl{dumper} de messages UDP qui nous montrera le cœur des trames.
Voici ce que l'on voit de l'envoi décrit page \pageref{sendosc}~:
\begin{verbatim}
udp_dumper: listen on port 9000
---+ frame 0 32 bytes t= 6.179 sec.
0 | 2f 64 65 6d 6f 00 00 00 2c 69 73 00 00 00 00 3d | /demo...,is....= |
16 | 6d 65 67 2c 20 65 66 66 61 63 65 20 21 00 00 00 | meg, efface !... |
32 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................ |
\end{verbatim}
On y retrouve certaines des choses le chemin, la liste des types,
le contenu des messages, toutes choses qui seront
décrites en détail dans la page \pageref{trameosc}.
% ================================================================
\section{Exemple de code}
@ -60,7 +100,7 @@ utilise un thread d'écoute qui appelle des
\lstinputlisting[language=c]{code/OSC/listen-osc.c}
\textbf{Envoyer :}
\textbf{Envoyer :} \label{sendosc}
Cette partie là est beaucoup plus simple.
@ -71,6 +111,13 @@ valeur de retour.
% ================================================================
\section{La trame OSC} \label{trameosc}
\textsf{Après tout, ce ne sont que quelques octets.}
% ================================================================
\section{En Perl} \index{Perl}
\begin{verbatim}
@ -86,9 +133,9 @@ $client->send(['/proc/kcore', 'i', 61, 's', "bla"]);
% ================================================================
% nouveau: Sat Jul 15 07:14:10 UTC 2023
\section{Le routage}
% \section{Le routage}
WIP...\index{XXX}
% WIP...\index{XXX}
% ================================================================
@ -99,7 +146,10 @@ Beaucoup d'autres logiciels peuvent être controlés par OSC, ou
générer des trames OSC : on peut citer
Processing\index{processing},
Chuck\index{Chuck} (page \pageref{chuck-osc}),
Puredata\index{puredata}
Puredata\index{puredata}.
Certains prétendent même qu'un vieux néo-rural tente de
faire un \textsl{binding} pour le
Fortran\index{fortran} moderne.
\dots
% ================================================================

View File

@ -11,18 +11,78 @@ Il est de ce fait très orienté vers la manipulation de
données textuelles et contient d'énormes facilités d'utilisation
des expressions régulières.
Il fut un temps, dans le siècle précédent, où il était le maitre
Il fut un temps béni, dans le siècle précédent, où il était le maitre
incontesté du Web\index{web} interactif, de par son intégration
dans le serveur Apache\index{Apache},
et de modules d'écriture de clients http\index{http}.
dans le serveur Apache\index{Apache}
(les fameux scripts \textsc{cgi}\index{cgi}),
et de modules d'écriture de clients http\index{http}
(page \pageref{perlhttp}).
Mais ce temps est-il révolu ? Nous le verrons dans un
prochain épisode.
Le débutant peut facilement n'utiliser qu'un sous-ensemble du langage,
mais ce serait se priver de quelques \textit{patterns} assez
mais ce serait se priver de quelques \textit{design patterns} assez
efficients.
% ------------------------------------------------------
\section{Le texte}
\section{Perl, le départ}
La méthode shebang. Tout le monde connait maintenant le shebang,
ce n'est pas la peine de radoter dessus.
On va donc commencer par le premier exemple, puis enchainer
sur les petits trucs à savoir, en mode « recette à la rache ».
\begin{verbatim}
#!/usr/bin/perl
print "hello world"
\end{verbatim}
La méthode purecli.
\begin{verbatim}
tth@redlady:~ $ echo "print \"hello world\n\";" | perl
hello world
\end{verbatim}
% ------------------------------------------------------
\section{Modèle d'exécution}
% ------------------------------------------------------
\section{Les variables}
Auto-vivification.
% ------------------------------------------------------
\section{Gestion des modules} \index{CPAN}
Tout comme pour le Fortan Moderne, c'est une notion essentielle.
Un exemple très simple, le module Dummy\index{dummy}.
% ------------------------------------------------------
\label{perlhttp}
\section{Le \texttt{http}} \index{http} \index{protocole}
HTTP (Hyper Text Transfert Protocole) est le protocole qui
est à la base du bien connu
\textsl{World Wide Web}
la chose que les gens appelent faussement l'internet.
\index{www}\index{gafam}
L'écosystème Perl est bien équipé pour
agir dans ce monde là.
% Scrapping de la patate en vue !
% https://al.smeuh.org/cgi-bin/express.pritz
% ------------------------------------------------------
\section{Traiter du texte}
Un cas concret~: générer du code en langage \texttt{C} à partir
d'un fichier traité ligne par ligne. Chacune de ces lignes est
@ -51,21 +111,10 @@ la ligne de commande feront l'affaire.
% ------------------------------------------------------
\section{Gestion des modules} \index{CPAN}
Tout comme pour le Fortan Moderne, c'est une notion essentielle.
% ------------------------------------------------------
\section{Le \texttt{http}}
Scrapping de la patate en vue !
https://al.smeuh.org/cgi-bin/express.pritz
% ------------------------------------------------------
\section {Et en vrai ?}
Quels logiciels sont écrits en Perl ?
\texttt{exiftool - Read and write meta information in files} \index{exiftool}
% ------------------------------------------------------

View File

@ -7,17 +7,22 @@
% ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
\section{sqlite} \index{sqlite}
Avantages : un produit éprouvé depuis longtemps, toutes
les données placées dans un fichier unique facilement
transportable, vraiment multi-plateforme.
% ----------------------------------------------------------------
\subsection{CLI} \index{cli}
Commandes internes:
Commandes internes (\textsl{meta-commands})~:
Utilisez \textbf{.help} en premier secours !
% ----------------------------------------------------------------
\subsection{Libreoffice} \index{Libreoffice}
Il peut utiliser des bases en SQLite.
% ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
@ -31,33 +36,23 @@ 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 ?}.
On peut appeler ça une table associative,
ou en anglais une \textsl{hashtable},
un terme qui rappelle le principe sous-jacent.
% ----------------------------------------------------------------
\subsection{Exemple en Perl} \index{Perl}
\begin{verbatim}
#!/usr/bin/perl -w
Nous allons extraire une donnée du fichier \texttt{/etc/passwd}
et la stocker en utilisant le nom du \textsl{yuser}
comme clef d'accès.
Une tâche pour laquelle Perl est optimal\footnote{krkrkr}
grâce au mécanisme du \texttt{tie} que je songe à
expliquer\footnote{un de ces jours...} dans le chapitre approprié
vers la page \pageref{chap:Perl}.
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}
\lstinputlisting[language=perl]{code/bdd/mkgdbm.pl}
Vous remarquerez que pour cet exemple, nous avons clef et valeur qui
sont du texte. Alors que DBM est prévu pour stocker des blocs de
@ -65,6 +60,11 @@ binaire. Pour faciliter la récupération de ces chaines de caractères
par un hypothétique\footnote{Oui, je vais l'écrire bientôt.} programme
en C, le programme Perl rajoute un \texttt{'\textbackslash0'}
(fin de chaine) aux deux champs concernés.
% ----------------------------------------------------------------
\subsection{Exemple en C} \index{C}
XXX \index{XXX}
% ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

View File

@ -1,13 +1,13 @@
% ==============================================================
% TRUCS DE VIEUX
\chapter{trucs de dino}
\chapter{Trucs de dino}
\label{chap:dino}
Je vais, dans ce chapitre, parler de choses que les moins de vingt
ans ne peuvent pas connaitre. Des choses qui existaient
\textsl{bien avant} le Web\index{www}, et pour lesquelles on
peur facilement imaginer des usages alternatifs et amusants !
peut facilement imaginer des usages alternatifs et amusants !
% ==============================================================
@ -17,12 +17,15 @@ peur facilement imaginer des usages alternatifs et amusants !
Aussi connu sous le nom de « superserveur Internet », ce démon
a fait ses premiers pas dans l'Unix 4.3BSD
et depuis est maintenant remplacé par
\texttt{xinetd}\index{xinetd}, décrit en page \pageref{xinetd}.
\texttt{xinetd}\index{xinetd}, décrit en page \pageref{xinetd},
lequel a peut-être été déja supplanté par un truc qui est
\textit{plus nouveau}.
% --> https://0pointer.de/blog/projects/inetd.html
Inetd a pour but de gérer l'accès à des services réseaux,
qui peuvent être internes ou externes. Un service interne
est entièrement géré par Inetd : on y trouve par exempme
daytime qui permet de connaitre l'heure qu'il est à
est entièrement géré par Inetd : on y trouve par exemple
\textsl{daytime} qui permet de connaitre l'heure qu'il est à
l'autre bout du monde :
\begin{verbatim}
@ -43,25 +46,38 @@ Il ne reste plus qu'à le mettre en œuvre, en réutilisant
un exemple très ancien\footnote{Août 1998, lors d'une
réunion du CULTe, à Toulouse}, et très simple à
comprendre.
Dans notre cas, inetd sera à l'écoute sur un port tcp.
Dès qu'une demande de connection arrive,
il accepte la connection, lance le process configuré,
puis
connecte ce qui vient du socket au \textsl{stdin} de ce
process, et le \textsl{stdout} de celui-ci à la sortie
vers l'extérieur.
Voir aussi : tcpserver\index{tcpserver}\dots
% Voir aussi : tcpserver\index{tcpserver}\dots
% ---------------------------------------------------------
\subsection{qotd}
\index{qotd}
\index{qotd} \label{qotd}
Le protocole « Quote Of The Day » (\texttt{qotd}) a été
normalise dans le \texttt{rfc865}, écrit en 1983 par John Postel.
Une rapide implémentation du moteur de quote peut être codée en Shell :
Une rapide implémentation du moteur de quote peut être codée avec
quelques lignes de shell~:
\index{fortune}
\begin{lstlisting}[language=sh]
#!/bin/sh
/usr/games/fortune -a -n 500
\end{lstlisting}
\lstinputlisting[language=sh]{code/inet/qotd.sh}
Maintenant, il nous faut dire à Inetd d'appeler ce moteur
chaque fois qu'une connection tcp entrante arrive sur le
port 17.
port 17 (ce numéro du service est défini dans le fichier
\texttt{/etc/services}).
XXX\index{XXX}
Et pour les modernistes qui utilisent \texttt{xinetd}\index{xinetd}
les explications sont en page \pageref{xinetd:qotd}.
% ==============================================================
%

View File

@ -1,5 +1,10 @@
\chapter{Gadgets}
La rubrique des trucs inutiles, mais pas que.
% https://www.linuxtricks.fr/wiki/zenity-boites-de-dialogue-graphiques-aux-scripts-shell
% ===============================================================
\section{Fortune}

View File

@ -64,57 +64,60 @@ a m'expliquer.
\lstinputlisting[language=c]{code/SDL2/strangebug.c}
Mias c'est peut-être ma totale méconnaissance du sujet qui m'a
fait faire une bêtise àlc\dots
C'est peut-être ma totale méconnaissance du sujet qui m'a
fait faire une bêtise àlc, et je ne vois pas laquelle\dots
Une enquête est en préparation.
% ------------------------------------------------
\section{Flydraw}\index{Flydraw}
Comment faire des dessins en écrivant des lignes de codes ?
\begin{quote}
flydraw is a drawing tool based on an interpreter which parses a
language featuring rich graphic primitives; it uses libgd to output
GIF, JPEG, or PNG\index{PNG} files.
\end{quote}
\lstinputlisting{code/dessiner.fly}
Pour le moment, les résultats ne sont pas encourageants~:
\begin{verbatim}
tth@fubar:~/Documents/TetaTricks/code$ flydraw < dessiner.fly
bad_parms -100000
tth@fubar:~/Documents/TetaTricks/code$
\end{verbatim}
Mais en s'obstinant un peu au \textsl{cargocult}, il
s'avère que la documentation et le code semble ne sont
pas d'accord. Et les messages d'erreur trop
cryptiques pour moi. Donc, on y arrive.
\begin{figure}[h]
\begin{center}
\includegraphics[scale=0.75]{code/flydraw}
\caption{Flydraw}
\end{center}
\end{figure}
Ceci dit, une lecture attentive du code source\footnote{UTSL!} permettra
de contourner ces petits désagréments, et de rédiger quelques exemples
d'utilisation amusants.
% package source
% http://deb.debian.org/debian/pool/main/w/wims/wims_4.17b+svn13454~dfsg1.orig.tar.gz
%
% Fri Sep 27 14:09:45 UTC 2024
% la section sur flydram est partie dans les unused
%
%====================================================================
\section{Povray}\index{Povray}
\section{Povray}\index{Povray}\label{Povray}
\textbf{Persistence Of Vision} est un logiciel de raytracing qui
existe depuis plus de trente ans. C'est un lointain descendant
de DKBtrace. Mais le raytracing, c'est quoi ?
\vspace{2em}
XXX\index{XXX} expliquer le raytracing.
% -----------------------------------------------------------------
\subsection{Première scène}
Le "hello world" du raytracing, c'est la boule miroir au
dessus d'un sol à carreaux, deux éléments.
Mais nous aurons aussi besoin de lumière et d'une caméra
pour y voir quelque chose.
Respectons la tradition, et tentons un EMC\index{EMC}..
\lstinputlisting[]{code/POV/hello.pov}
Quelques explications~:
% -----------------------------------------------------------------
\subsection{Deux langages, \small{\textsl{WTF?}}} \index{wtf}
En fait, les grands fichiers que vous écrivez pour construire
vos scènes contiennent \textbf{deux} langages différents.
Le premier décrit le contenu de la scène : les objets, les
textures, les lumières, la caméra\dots
C'est pour ça qu'il est appelé SDL\index{SDL},
\textsl{Scene Dscription Language}.
Le second est plutôt un langage de
programmation\footnote{Turing complet ?}
avec des variables, des tests, des boucles, des \textsl{io},
et tout ce genre de choses.
Et les deux sont entrelacés, ce qui est une bonne chose,
même si ça conduit à du code qui pique les yeux.
% -----------------------------------------------------------------
% -----------------------------------------------------------------
\subsection{Caméra}
Vous avez des problèmes pour caler les mouvement de la caméra ?
@ -122,27 +125,30 @@ Vous avez deux trajectoires (mal) calculées pour la
\texttt{location} et le \texttt{look\_at}, et rien ne tombe
en face de l'objectif ? Voici une approche de solution.
La première étape est l'enregistrerement des paramètres de la caméra
La première étape est l'enregistrement des paramètres de la caméra
(préalablement calculés par de savantes mais mauvaises formules)
lors du calcul de la séquence~:
\begin{verbatim}
#if (0 = clock)
#fopen CL "cam.log" create
#fopen CL "WS/cam.log" write
#else
#fopen CL "cam.log" append
#fopen CL "WS/cam.log" append
#end
#write (CL, clock, " ", CamX, " ", CamY, " ", CamZ,
" ", LatX, " ", LatY, " ", LatZ,"\n")
#fclose CL
\end{verbatim}
Et la seconde étape, l'exploitation, ou plutôt la visualisation
Et la seconde étape, l'exploitation avec \textsc{R},
le logiciel de statistiques (que nous verrons bientôt),
ou la visualisation
de ces données avec l'indémodable gnuplot\index{gnuplot}~:
\begin{verbatim}
#!/bin/bash
FILE="cam.log"
FILE="WS/cam.log"
TMPF="/dev/shm/cam.data"
IMAGE="graphe.png"
tail -360 ${FILE} | sort -n > ${TMPF}
@ -167,9 +173,33 @@ celui de Gnuplot.
% ------------------------------------------------
% updated Fri Sep 27 13:41:54 UTC 2024
\subsection{image\_map}
XXX \index{XXX}
Autre composante essentielle du raytracing, le collage d'une
image sur quelque chose, comme quand vous recouvrez une
boite de Camembert\index{Camenbert} avec du papier peint
des années 50.
Il suffit d'utiliser les pixels de l'image comme pigment.
\begin{verbatim}
plane { -z,0 pigment { image_map {png "Eggs.png"} } }
\end{verbatim}
\textsl{By default, the image is mapped onto the
\textbf{x-y-plane}.
The
image is projected onto the object as though there were a
slide projector somewhere in the -z-direction.
The image
exactly fills the square area from (x,y) coordinates
(0,0) to (1,1) regardless of the image's original size in
pixels.
If you would like to change this default you may
translate, rotate or scale the pigment or texture to map
it onto the object's surface as desired.
}%
\footnote{https://wiki.povray.org/content/Reference:Image\_Map}
% ------------------------------------------------

View File

@ -65,7 +65,9 @@ ainsi que la norme ISO 2110 pour la connectique.
\end{quote}
Comment détecter si un \textit{device} correspond bien
à un port série ?
à un port série ? Une fois de plus, la réponse passe
par un \textsl{ioctl}\index{ioctl}.
Même si il est bien caché.
\begin{lstlisting}[language=C]
#include <stdio.h>
@ -91,6 +93,11 @@ return 0;
}
\end{lstlisting}
En effet, \texttt{tcgetattr(3)} va aller lire le paramétrage
du port associé au descripteur de fichier \texttt{fd}
par l'intermédiaire d'un ioctl (qui aurait pû prévoir ?)
que nous détaillerons un de ces jours.
Et la question qui, je le sens, va venir~: « à quoi peut bien
servir un port série ? » appelle un réponse presque évidente~:
« à plusieurs choses ». Une petite liste~:
@ -105,7 +112,7 @@ Les possibilités sont infinies. C'est votre imagination qui
est la limite\footnote{Comme à peu près tout dans la vie.}
% -----------------------------------------------------------
\section{Ports //} \label{portparallele}
\section{Ports \textbf{//}} \label{portparallele}
\index{port //}
% http://people.redhat.com/twaugh/parport/html/x623.html
@ -117,7 +124,19 @@ Question: comment faire du \textsl{bitbanging} ?
% -----------------------------------------------------------
\section{USB} \index{USB} \label{USB}
Universal Serial Bus
Universal Serial Bus, existe en trois taille.
\begin{verbatim}
tth@redlady:~/Devel/TetaTricks$ lsusb
Bus 004 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub
Bus 004 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 003 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 002 Device 006: ID 093a:2510 Pixart Imaging, Inc. Optical Mouse
Bus 002 Device 002: ID 0461:4e6f Primax Electronics, Ltd
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
\end{verbatim}
% -----------------------------------------------------------

20
chap/livres.tex Normal file
View File

@ -0,0 +1,20 @@
% ===============================================================
% nouveau du Tue Sep 24 11:50:13 UTC 2024
% ===============================================================
\chapter{Mes livres} \label{chap:livres}
J'aime les livres, parce qu'ils sont bien plus durables que
tout ce que nous propose l'informatique actuelle.
Il faut dire que j'ai commencé l'informatique à la fin des
années 1970, quand ni Altavista, ni Inktomy n'existaient.
Ceux qui avaient de la chance pouvaient parfois voir passer
quelques exemplaires de \textsf{Byte} ou \textsf{Dr Dobbs},
les électroniciens avaient \textsf{Le Haut-Parleur},
et les vraiments chanceux achetaient leur documentation
chez \textsf{Perlor Radio}.
% ===============================================================
% ===============================================================

View File

@ -1,6 +1,7 @@
\chapter{\textbf{\textsl{lp0 on fire!}}}
\label{chap:imprimer}
%-----------------------------------------------------------------
L'impression sour Linux semble avoir plusieurs personnalités.
@ -35,12 +36,15 @@ Cf le bouquin de Bellanger.
« IPP Everywhere » est une évolution du protocole, publiée en 2013.
Il fournit une base de référence commune pour les imprimantes afin de
prendre en charge l'impression dite "sans pilote" à partir de périphériques
clients. Elle s'appuie sur IPP et précise des règles supplémentaires d'interopérabilité,
telles qu'une liste des
clients. Elle s'appuie sur IPP et précise des règles supplémentaires
d'interopérabilité, telles qu'une liste des
formats de documents que les imprimantes doivent prendre en charge.
\end{quote}
%-----------------------------------------------------------------
%
% https://www.evilsocket.net/2024/09/26/Attacking-UNIX-systems-via-CUPS-Part-I/
%
\section{CUPS} \index{CUPS} \label{CUPS}
@ -75,7 +79,6 @@ DESCRIPTION
Convert FILE(s) or standard input to PostScript. By default,
the output is sent to the default printer. An output file
may be specified with -o.
Mandatory arguments to long options are mandatory for short
options too. Long options marked with * require a yes/no ar
gument, corresponding short options stand for `yes'.
@ -88,7 +91,6 @@ DESCRIPTION
\item lgrind
\item src2tex
\item trueprint
\end{itemize}

View File

@ -2,8 +2,9 @@
\label{chap:reseau} \index{Internet}
Ah, le grand Internet sauvage, il serait temps qu'on en parle un peu.
Nous allons voir dans ce chapitre quelques utilisations
que l'on peut qualifier de «~créatives~».
Nous allons voir dans ce chapitre des logiciels peu connus,
et les quelques utilisations que l'on peut en faire
afin d'avoir le label « techno-futilité ».
Si vous attendiez des choses plus sérieuses, j'ai aussi ça
en magasin : \textsc{dns} page \pageref{chap:DNS},
@ -34,15 +35,17 @@ il a probablement été remplacé par quelque chose d'encore plus
étrange basé sur \textsl{systemd}\index{systemd},
puisque l'important
ça n'est pas que ça soit mieux, mais que ce soit
\textbf{nouveau}.
\textbf{nouveau}. Il fallait le dire.
\subsection{qotd}
\index{qotd}
% ---------------------------------------------------------
\subsection{Un serveur pour \textsl{qotd}}
\label{xinetd:qotd}
À titre d'exercice, nous allons reprendre l'exemple du serveur
de \textsl{quote of the day} que nous avons déja utilisé avec
Inetd\index{inetd}, et lancer le
petit script par l'intermédiaire de Xinetd.
Inetd\index{inetd} (page \pageref{qotd}),
et lancer notre petit script par l'intermédiaire de Xinetd.
Pour cela, il faut créer dans le répertoire
\texttt{/etc/xinetd.d/}\footnote{Attention, ce répertoire
@ -52,12 +55,10 @@ est peut-être un debianisme, ymmv.} un fichier nommé
\begin{verbatim}
service qotd
{
disable = yes
disable = no
type = UNLISTED
socket_type = stream
protocol = tcp
user = nobody
server = /usr/local/bin/qotd.sh
}
@ -65,13 +66,26 @@ server = /usr/local/bin/qotd.sh
Bien entendu, le script \texttt{qotd.sh} décrit en page
\pageref{inetd} sera placé dans le bon répertoire.
Et ouvert aux quatre vents par un
\texttt{sudo chmod a+x /usr/local/bin/qotd.sh} de bon aloi.
\index{fortune}
\lstinputlisting[language=sh]{code/inet/qotd.sh}
Ensuite, il faut demander à Xinetd de relire ses fichiers de
configuration par un signal bien senti et au bon endroit.
configuration par un bon \textsc{SIGHUP} bien senti
et au bon endroit, c'est à dire le PID que l'on pourra
(peut-être) obtenir dans \texttt{/var/run/xinetd.pid},
et paf.
Allons voir si cela fonctionne.
Ah, on me murmure dans l'oreille que Xinetd n'existe plus dans
les Linux modernes, et qu'il existe quelque chose de
\textit{beaucoup mieux}. Je ne sais pas quoi.
Je demande à voir\footnote{Parce que c'est écrit par LP ?}.
% --> https://0pointer.de/blog/projects/inetd.html
% ==============================================================
@ -92,59 +106,6 @@ Par exemple la comparaison de la mise en œuvre du NAT
avec \texttt{iptables} et \texttt{pfctl} est une source de trolls
sans fin.
% ==============================================================
\section{Iodine}
\index{iodine}\label{iodine}
Iodine, c'est quoi ? C'est un ensemble de logiciels qui permettent
de se brancher sur l'Intertube même si on n'a pas d'accès
«~autorisé~» par la voisine qui a déménagée vers la
lointaine campagne avec sa friboite.
\begin{quote}
This is a piece of software that lets you tunnel IPv4 data through a
DNS server. This can be usable in different situations where internet
access is firewalled, but DNS queries are allowed.
The name iodine was chosen since it starts with IOD (IP Over DNS)
and since iodine has atomic number 53, which happens to be the DNS
port number.
\end{quote}
À ce jour (2 septembre 2013) ce que vous allez lire est basé
sur la version \texttt{0.6.0-rc1} et sera probablement plus ou
moins incompatible avec les versions précedentes ou suivantes, ymmv.
\begin{verbatim}
root@plop:iodine-0.6.0-rc1# bin/iodine teton.mooo.com -f -P m
Opened dns0
Opened UDP socket
Sending DNS queries for teton.mooo.com to 192.168.1.1
Autodetecting DNS query type (use -T to override)..................
iodine: No suitable DNS query type found. Are you connected to a network?
iodine: If you expect very long roundtrip delays, use -T explicitly.
iodine: (Also, connecting to an "ancient" version of iodined won't work.)
\end{verbatim}
\subsection{Coté serveur}
Je pense qu'il faut commencer par voir du coté du DNS
pour déléguer une sous-zone à la machine qui va faire tourner
le serveur iodine. Mais j'en suis pas certain. RTFM.
\subsection{Coté client}
Je n'en sais pas plus non plus...
\begin{verbatim}
sudo bin/iodine -f -P s3cr3tp4ssw0rd i.buvette.org
\end{verbatim}
Donc, n'ayant plus vraiment (pour le moment) le besoin d'utiliser
ce passe-muraille, je vais laisser ce passage en l'état...
% ==============================================================
\section{Outils de diagnostic}
@ -152,6 +113,8 @@ iftop\index{iftop},
iptraf\index{iptraf}
\dots
Mais c'est toujours la faute du \textsc{dns}\index{dns}.
% -------------------------------------------------------------
\subsection{iperf}
\index{iperf}

View File

@ -127,19 +127,49 @@ 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}.
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}
$
tth@redlady:~/Devel/TetaTricks$ date | tee foo.txt |
tr 'EASLeasl' '34573457'
W3d 53p 25 16:07:01 C35T 2024
tth@redlady:~/Devel/TetaTricks$ cat foo.txt
Wed Sep 25 16:07:01 CEST 2024
\end{verbatim}
% ==============================================================
% new Wed Sep 25 14:00:07 UTC 2024
\section{L'environnement} \index{environ}
Commençons par une petite histoire.
Un jour\footnote{été 2024 ?}, je suis tombé par un hasard
improbable sur une variable d'environnement nommée
\textsc{hostname}. Qui contenait précisément "redlady" !
Tout bien.
Alors, quelques jours avant, vers 2006, je l'ai utilisée
dans un bout de code en C, que j'avais depuis bien
bien longtemps oublié au fond
d'une 8" hard-sectored.
Et là, ça ne marche pas comme je l'espérais.
Voyez ce bout de code~:
\begin{verbatim}
char *nom = "HOSTNAME";
printf("%s -> %s\n", nom, getenv(nom));
\end{verbatim}
Il me renvoit \texttt{HOSTNAME -> (null)}.
Krkrkr.
% ==============================================================
\section{Structures de contrôle}
Les plus importantes sont là : le choix, la boucle, l'attente.
Les plus importantes sont là : le choix, la boucle, l'attente,
le \textsc{goto}\index{goto} calculé, la sélection,
\textsl{make your choice}.
% --------------------------------------------------------------
@ -176,15 +206,21 @@ done
Une bonne manière de rendre votre code modulaire, et de réutiliser
des bouts de code à volonté depuis plusieurs programmes.
Une fonction peut accepter des paramètres, qui seront
connus sous les petits noms de
\texttt{\$1 \$2 ... \$n}.
Voici quelques fonctions~:
Voici un fichier contenant quelques fonctions~:
\lstinputlisting{code/shell/fonctions.sh}
Et comment les utiliser~:
Pour les utiliser, il faut d'abord les charger dans le shell courant.
C'est la directive \texttt{source}\index{source} qui s'en charge~:
\lstinputlisting{code/shell/demofonctions.sh}
XXX expliquer "source" \index{XXX}
% ==============================================================
% https://bwog-notes.chagratt.site/2023/le-heredoc/
@ -193,6 +229,7 @@ Et comment les utiliser~:
Un nom bien difficile à traduire, peut-être par « document en place » ?
C'est un moyen simple et efficace de mettre des données textuelles
(comme des commandes pour un logiciel particulier)
dans un script afin de les envoyer dans le \textsl{stdin} d'un
logiciel. Par exemple, quelques commandes pour générer un
graphique avec Gnuplot\index{gnuplot} sur la console \textsl{dumb}.

View File

@ -5,6 +5,10 @@ de le présenter de façon harmonieuse, tout le monde l'a déja
fait, avec des outils divers et variés et des résultats parfois
(ou souvent) hasardeux.
Heureusement, Unix\index{Unix} a été conçu quasiment dès
le départ avec tout ce qu'il faut pour traiter et
mettre en page du texte.
\section{fmt et ses copains}
\index{fmt}\index{tr}
@ -34,18 +38,19 @@ condimentum ante in metus iaculis quis congue diam commodo.
%-------------------------------------------------------------
\section{roff}
\index{roff}\label{roff}
\index{roff}\label{roff} \index{groff}\index{troff}
%
% https://linuxfr.org/users/karchnu/journaux/redecouverte-roff
% https://pjfichet.github.io/utroff/
%
% https://allthingsopen.org/articles/linux-and-unix-experiment-part-2
\textbf{Roff} est l'outil qui a permis à quelques hackers légendaire
de justifier auprès de leur hiérarchie le développement d'une machine
de jeu, il est donc légitime d'en parler, non ?
Après quelques minutes d'expérimentation, un premier souci arrive.
Après quelques minutes d'expérimentation, un premier souci arrive%
\footnote{Mais qui est peut-être causé par l'ancienneté de mon système ?}.
Il semble bien que \texttt{groff} ne sache pas lire les fichiers
encodés en \textbf{utf8}\index{utf8}. Il faut donc utiliser
un hack avec \texttt{recode} en prenant bien soin d'utiliser
@ -59,7 +64,48 @@ 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
Voyons rapidement un exemple minimum compilable\index{EMC},
le fichier
\texttt{premier.roff}~:
\lstinputlisting{code/roff/premier.roff}
Il y a deux choses différentes ici : les instructions de formatage
et le texte en lui-même.
Une instruction est placée en début de ligne.
Elle commence par un point, et est constituée de deux lettres,
eventuellement suivie de paramètres.
Nous avons \texttt{.ti} (\textsl{temporary indent})
qui gère l'indentation de la ligne qui suit,
et \texttt{.sp} (\textsl{spacing})
qui va sauter une ou plusieurs lignes.
Après compilation par la commande
"\texttt{nroff -Tutf8 < premier.roff > premier.text}",
nous obtenons ce résultat~:
\begin{verbatim}
hello world.
Ceci est le premier exemple avec nroff.
je vais essayer quelques variations de mise en page en jouant sur
les diverses marges, puis explorer les "mises en avant" comme le
gras, litalique, le soulignement, toussa. Ensuite il me faudra
solutionner le souci avec UTF8 :(
\end{verbatim}
On peut dire que c'est un bon début, avec juste deux commandes,
on a déja un résultat visible.
Voyons maintenant quelques autres possibilités du roff de base.
Mais une mise en page un peu
avancée peut devenir vite fastidieuse avec ces instructions
de bas niveau.
\subsection{eqn}
@ -82,6 +128,10 @@ input files into commands that are understood by troff.
input files into commands that are understood by troff.
\end{quote}
\subsection{Autres trucs...}
\texttt{colcrt} : filter nroff output for CRT previewing
%-------------------------------------------------------------
\section{yodl}
\index{yodl}

39
chap/unused/flydraw.tex Normal file
View File

@ -0,0 +1,39 @@
\section{Flydraw}\index{Flydraw}
Comment faire des dessins en écrivant des lignes de codes ?
\begin{quote}
flydraw is a drawing tool based on an interpreter which parses a
language featuring rich graphic primitives; it uses libgd to output
GIF, JPEG, or PNG\index{PNG} files.
\end{quote}
\lstinputlisting{code/dessiner.fly}
Pour le moment, les résultats ne sont pas encourageants~:
\begin{verbatim}
tth@fubar:~/Documents/TetaTricks/code$ flydraw < dessiner.fly
bad_parms -100000
tth@fubar:~/Documents/TetaTricks/code$
\end{verbatim}
Mais en s'obstinant un peu au \textsl{cargocult}, il
s'avère que la documentation et le code semble ne sont
pas d'accord. Et les messages d'erreur trop
cryptiques pour moi. Donc, on y arrive.
\begin{figure}[h]
\begin{center}
\includegraphics[scale=0.75]{code/flydraw}
\caption{Flydraw}
\end{center}
\end{figure}
Ceci dit, une lecture attentive du code source\footnote{UTSL!} permettra
de contourner ces petits désagréments, et de rédiger quelques exemples
d'utilisation amusants.
% package source
% http://deb.debian.org/debian/pool/main/w/wims/wims_4.17b+svn13454~dfsg1.orig.tar.gz

View File

@ -241,9 +241,11 @@ de codecs, la foultitude de containers, et les nombreuses variantes de
combinaisons codec/container rendent la compréhension de cet univers
assez perturbante.
\subsection{rtmp} \index{rtmp}
\texttt{flvstreamer -r rtmp://lacantine.live-fstreams.cdn02.rambla.be:1935/live-lacantine/live-lacantine-2 | mplayer -}
\index{rtmp}
\texttt{encodedv} - encode a series of images to a digital video stream
\index{encodedv}
% --------------------------------------------------------------------

View File

@ -6,7 +6,7 @@
% ==============================================================
\section{Apache, Nginx} \index{Apache} \index{nginx}
Apache (\textsl{A patchy server} et Nginx sont de grands classiques,
Apache (\textsl{A patchy server}) et Nginx sont de grands classiques,
voire même, dans le cas d'Apache, un grand ancien.
Que nous ne verrons pas pour le moment. Je vais plutôt me concentrer
@ -60,34 +60,21 @@ if you want):
\begin{verbatim}
tth@ramen:~/Houba/Fractales90$ apt show libmicrohttpd12
Package: libmicrohttpd12
Version: 0.9.72-2
Priority: optional
Section: libs
Source: libmicrohttpd
Maintainer: Daniel Baumann <daniel.baumann@progress-linux.org>
Installed-Size: 211 kB
Depends: libc6 (>= 2.17), libgnutls30 (>= 3.7.0)
Homepage: https://www.gnu.org/software/libmicrohttpd/
Tag: role::shared-lib
Download-Size: 109 kB
APT-Sources: http://deb.debian.org/debian bullseye/main amd64 Packages
Description: library embedding HTTP server functionality
GNU libmicrohttpd is a small C library that is supposed to make it
easy to run an HTTP server as part of another application.
Key features that distinguish GNU Libmicrohttpd from other
projects are:
* C library: fast and small
* API is simple, expressive and fully reentrant
* Implementation is HTTP 1.1 compliant
* HTTP server can listen on multiple ports
* Four different threading models (select, poll, pthread, thread pool)
* Support for IPv6
* Support for SHOUTcast
* Support for incremental processing of POST data (optional)
* Support for basic and digest authentication (optional)
* Support for SSL3 and TLS
\end{verbatim}
\lstinputlisting[language=C]{code/inet/plopserver.c}
% ==============================================================
\section{Mais encore ?}
Il doit bien exister des modules Perl pour faire facilement
un serveur web, non ?
Même qu'on pourrait en écrire un rien qu'avec les sockets.
% ==============================================================

View File

@ -1,5 +1,5 @@
open window 511,511
for x=10 to 495 step 5:for y=10 to 495 step 5
colour x/2,y/2,0
fill rectangle x,y,x+5,y+5
fill rectangle x+1,y+1,x+4,y+4
next y:next x

View File

@ -3,19 +3,17 @@
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <lo/lo.h>
#define LOCAL_PORT "9000"
/* ----------------------------------------------------------------- */
/* ------------------------------------------------------- */
void error(int num, const char *msg, const char *path)
{
fprintf(stderr, "liblo server error %d in path %s : %s\n", num, path, msg);
fprintf(stderr, "liblo server error %d in path %s : %s\n",
num, path, msg);
exit(1);
}
/* ----------------------------------------------------------------- */
/* ------------------------------------------------------- */
int handler(const char *path, const char *types, lo_arg **argv,
int argc, void *data, void *udata)
{
@ -29,14 +27,10 @@ printf("\tdata %p\n", data);
// if (NULL!=data) printf("\t >%s<\n", data);
printf("\tudata %p\n", udata);
if (NULL!=udata) printf("\t\t>%s<\n", (char *)udata);
return 0;
}
/* ----------------------------------------------------------------- */
/* ------------------------------------------------------- */
char signature[] = "Bourtoulots";
int main(int argc, char *argv[])
{
lo_server_thread st;

View File

@ -12,7 +12,6 @@ lo_address loana;
int foo;
fprintf(stderr, "sending to %s:%s\n", REMOTE_HOST, REMOTE_PORT);
loana = lo_address_new(REMOTE_HOST, REMOTE_PORT);
foo = lo_send(loana, "/demo", "is", 61, "meg, efface !");
fprintf(stderr, "got a %d return code ?\n", foo);

1
code/POV/.gitignore vendored Normal file
View File

@ -0,0 +1 @@
*.png

3
code/POV/Makefile Normal file
View File

@ -0,0 +1,3 @@
hello.png: hello.pov Makefile
povray -I$< -o$@ -W640 -H0 -Q0

0
code/POV/README.md Normal file
View File

8
code/POV/hello.pov Normal file
View File

@ -0,0 +1,8 @@
/* HELLO.POV */
#version 3.7;
global_settings { assumed_gamma 1.0 }
#include "colors.inc"
plane { y, 0 }
sphere { <0, 0.50, 0>, 0.333 }
light_source { <-210, 350, -530> color rgb <1, 1, 1>}

3
code/Perl/README.md Normal file
View File

@ -0,0 +1,3 @@
# Perl
The famous **Pathologic Eclectic Rubish Lister was here** !!!

0
code/bdd/README.md Normal file
View File

20
code/bdd/mkgdbm.pl Normal file
View File

@ -0,0 +1,20 @@
#!/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;

0
code/inet/Makefile Normal file
View File

5
code/inet/README.md Normal file
View File

@ -0,0 +1,5 @@
# Internet protocols
## Finger
Show us the [code](finger.md) !

View File

7
code/inet/finger.md Normal file
View File

@ -0,0 +1,7 @@
# Finger
Sur le port 79/tcp.
[https://tools.ietf.org/html/rfc1288](https://tools.ietf.org/html/rfc1288)
[https://www.bortzmeyer.org/1288.html](https://www.bortzmeyer.org/1288.html)

4
code/inet/plopserver.c Normal file
View File

@ -0,0 +1,4 @@
#include <stdio.h>
int main(int argc, char *argv[])
{ puts("plop"); return 0 }

2
code/inet/plopserver.md Normal file
View File

@ -0,0 +1,2 @@
# Plop serveur

3
code/inet/qotd.sh Normal file
View File

@ -0,0 +1,3 @@
#!/bin/bash
/usr/games/fortune -a -n 500

2
code/roff/README.md Normal file
View File

@ -0,0 +1,2 @@
# La famille des roffs

View File

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

View File

@ -25,10 +25,10 @@
\makeindex
\setlength \parindent {2em}
\setlength \parskip {0.30em} % XXX
\setlength \parskip {0.25em} % XXX
%------ reglages des 'listings'
\lstset{frame=none} % éventuel dessin d'un cadre autour du listing
\lstset{frame=leftline} % éventuel dessin d'un cadre autour du listing
\lstset{basicstyle=\ttfamily\small}
\lstset{aboveskip=0.7em,belowskip=0.7em}
@ -56,7 +56,7 @@ Mais elles sont en vrac, et surtout, elles sont reprises
d'une très ancienne version (circa 2011) et donc,
peut-être pas vraiment d'actualité.
\vspace{3em}
\vspace{2em}
Cependant, toute cette ouvrage est en cours de
@ -83,9 +83,14 @@ En \textbf{mars 2024}, je déménage dans le Gers, au milieu
de la campagne, et le travail sur cette ouvrage peut
reprendre dans des conditions plus sereines.
Je vais même tenter de faire avec seulement l'aide
de mes souvenirs et les manpages.
de mes souvenirs, de ma collection de livres
(qui sera bientôt racontée page \pageref{chap:livres}),
et des indispensables \textsl{manpages}.
C'est rarement facile.
Il faut parfois plonger dans les lignes de code\index{UTSL}.
\vspace{3em}
\vspace{2em}
Le code \LaTeX{} et les fichiers d'exemples sont disponibles
en ligne sur le site du Tetalab.
@ -162,7 +167,7 @@ Your mileage may vary, film at 11\dots
\input{chap/debug}
% \input{chap/buzybox}
\input{chap/gif89a}
\input{chap/IRC}
% \input{chap/IRC}
% \input{chap/SCCS} % nouveau 18 mars 2021
\input{chap/Usenet}
\input{chap/DNS}
@ -176,9 +181,10 @@ Your mileage may vary, film at 11\dots
\input{chap/curses}
% \input{chap/openwrt}
\input{chap/WiFi}
\input{chap/GIT}
% \input{chap/GIT}
\input{chap/divers}
% \input{chap/peer2peer}
\input{chap/livres}
% ==============================================================