diff --git a/chap/Basic.tex b/chap/Basic.tex index 58b608d..424a2ed 100644 --- a/chap/Basic.tex +++ b/chap/Basic.tex @@ -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} diff --git a/chap/C.tex b/chap/C.tex index 5e373d5..568292c 100644 --- a/chap/C.tex +++ b/chap/C.tex @@ -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}). diff --git a/chap/DNS.tex b/chap/DNS.tex index fc2b657..9540999 100644 --- a/chap/DNS.tex +++ b/chap/DNS.tex @@ -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} diff --git a/chap/OSC.tex b/chap/OSC.tex index 56cb6f0..070cdba 100644 --- a/chap/OSC.tex +++ b/chap/OSC.tex @@ -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 % ================================================================ diff --git a/chap/Perl.tex b/chap/Perl.tex index e246f5b..9ad32ab 100644 --- a/chap/Perl.tex +++ b/chap/Perl.tex @@ -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} % ------------------------------------------------------ diff --git a/chap/bdd.tex b/chap/bdd.tex index 99eb902..554e7a9 100644 --- a/chap/bdd.tex +++ b/chap/bdd.tex @@ -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 () { - @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} % ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ diff --git a/chap/dino.tex b/chap/dino.tex index 666c901..4022ff3 100644 --- a/chap/dino.tex +++ b/chap/dino.tex @@ -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}. % ============================================================== % diff --git a/chap/gadgets.tex b/chap/gadgets.tex index 76ee329..8aac76e 100644 --- a/chap/gadgets.tex +++ b/chap/gadgets.tex @@ -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} diff --git a/chap/graphisme.tex b/chap/graphisme.tex index e58ba33..b487d22 100644 --- a/chap/graphisme.tex +++ b/chap/graphisme.tex @@ -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,54 +125,81 @@ 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} gnuplot << __EOC__ -set term png size 720,720 -set output "${IMAGE}" -set ytics 2 -set xtics 2 -set grid front -set title "Rush Camera" -plot "${TMPF}" using 2:4 title "Cam", \ - "${TMPF}" using 5:7 title "Lat" with dots + set term png size 720,720 + set output "${IMAGE}" + set ytics 2 + set xtics 2 + set grid front + set title "Rush Camera" + plot "${TMPF}" using 2:4 title "Cam", \ + "${TMPF}" using 5:7 title "Lat" with dots __EOC__ display "${IMAGE}" & \end{verbatim} Dans ce cas, il s'agit d'une animation de 360 images, ce qui explique -la commande\texttt{tail} au début du script. Ensuite les deux clauses +la commande \texttt{tail} au début du script. Ensuite les deux clauses \textsl{using 2:4 / 5:7} permettent de sélectionner les deux coordonnées X et Z, dans le repère POVray, qui n'est pas le même que 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} % ------------------------------------------------ diff --git a/chap/hardware.tex b/chap/hardware.tex index 30cf0d8..cde5c65 100644 --- a/chap/hardware.tex +++ b/chap/hardware.tex @@ -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 @@ -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} % ----------------------------------------------------------- diff --git a/chap/livres.tex b/chap/livres.tex new file mode 100644 index 0000000..ae954da --- /dev/null +++ b/chap/livres.tex @@ -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}. + + + +% =============================================================== +% =============================================================== diff --git a/chap/print.tex b/chap/print.tex index eb2f999..b5ae85d 100644 --- a/chap/print.tex +++ b/chap/print.tex @@ -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} diff --git a/chap/reseau.tex b/chap/reseau.tex index 8a5359b..afcd5dc 100644 --- a/chap/reseau.tex +++ b/chap/reseau.tex @@ -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 @@ -51,27 +54,38 @@ est peut-être un debianisme, ymmv.} un fichier nommé \begin{verbatim} service qotd -{ -disable = yes -type = UNLISTED - -socket_type = stream -protocol = tcp - -user = nobody -server = /usr/local/bin/qotd.sh -} + { + disable = no + type = UNLISTED + socket_type = stream + protocol = tcp + user = nobody + server = /usr/local/bin/qotd.sh + } \end{verbatim} 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} diff --git a/chap/shell.tex b/chap/shell.tex index f2f8be9..b44ca83 100644 --- a/chap/shell.tex +++ b/chap/shell.tex @@ -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}. diff --git a/chap/textes.tex b/chap/textes.tex index bf8e113..1fb88ef 100644 --- a/chap/textes.tex +++ b/chap/textes.tex @@ -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, l’italique, 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} diff --git a/chap/unused/flydraw.tex b/chap/unused/flydraw.tex new file mode 100644 index 0000000..8dea585 --- /dev/null +++ b/chap/unused/flydraw.tex @@ -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 + diff --git a/chap/video.tex b/chap/video.tex index 35bbaab..6df0b47 100644 --- a/chap/video.tex +++ b/chap/video.tex @@ -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} % -------------------------------------------------------------------- diff --git a/chap/webserver.tex b/chap/webserver.tex index f45d10a..01f6a12 100644 --- a/chap/webserver.tex +++ b/chap/webserver.tex @@ -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 -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. + % ============================================================== diff --git a/code/Basic/yabasic-2.bas b/code/Basic/yabasic-2.bas index 6ed5a7e..9abd413 100644 --- a/code/Basic/yabasic-2.bas +++ b/code/Basic/yabasic-2.bas @@ -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 diff --git a/code/OSC/listen-osc.c b/code/OSC/listen-osc.c index 7d4e5d7..2ff80eb 100644 --- a/code/OSC/listen-osc.c +++ b/code/OSC/listen-osc.c @@ -3,20 +3,18 @@ #include #include #include - #include - #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 handler(const char *path, const char *types, lo_arg **argv, int argc, void *data, void *udata) { static int event_number = 1; @@ -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; diff --git a/code/OSC/send-osc.c b/code/OSC/send-osc.c index fd902ec..e38e242 100644 --- a/code/OSC/send-osc.c +++ b/code/OSC/send-osc.c @@ -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); diff --git a/code/POV/.gitignore b/code/POV/.gitignore new file mode 100644 index 0000000..e33609d --- /dev/null +++ b/code/POV/.gitignore @@ -0,0 +1 @@ +*.png diff --git a/code/POV/Makefile b/code/POV/Makefile new file mode 100644 index 0000000..e5dcab5 --- /dev/null +++ b/code/POV/Makefile @@ -0,0 +1,3 @@ + +hello.png: hello.pov Makefile + povray -I$< -o$@ -W640 -H0 -Q0 diff --git a/code/POV/README.md b/code/POV/README.md new file mode 100644 index 0000000..e69de29 diff --git a/code/POV/hello.pov b/code/POV/hello.pov new file mode 100644 index 0000000..d21a79d --- /dev/null +++ b/code/POV/hello.pov @@ -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>} diff --git a/code/Perl/README.md b/code/Perl/README.md new file mode 100644 index 0000000..5062d32 --- /dev/null +++ b/code/Perl/README.md @@ -0,0 +1,3 @@ +# Perl + +The famous **Pathologic Eclectic Rubish Lister was here** !!! \ No newline at end of file diff --git a/code/bdd/README.md b/code/bdd/README.md new file mode 100644 index 0000000..e69de29 diff --git a/code/bdd/mkgdbm.pl b/code/bdd/mkgdbm.pl new file mode 100644 index 0000000..c443c92 --- /dev/null +++ b/code/bdd/mkgdbm.pl @@ -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 () { + @champs = split ":", $_; + $user = $champs[0]."\0"; + $gecos = $champs[4]."\0"; + $DB{$user} = $gecos; + } + +untie %DB; +close SOURCE; +0; diff --git a/code/inet/Makefile b/code/inet/Makefile new file mode 100644 index 0000000..e69de29 diff --git a/code/inet/README.md b/code/inet/README.md new file mode 100644 index 0000000..43fa6b2 --- /dev/null +++ b/code/inet/README.md @@ -0,0 +1,5 @@ +# Internet protocols + +## Finger + +Show us the [code](finger.md) ! diff --git a/code/inet/finger-server.pl b/code/inet/finger-server.pl new file mode 100644 index 0000000..e69de29 diff --git a/code/inet/finger.md b/code/inet/finger.md new file mode 100644 index 0000000..e8b3df6 --- /dev/null +++ b/code/inet/finger.md @@ -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) diff --git a/code/inet/plopserver.c b/code/inet/plopserver.c new file mode 100644 index 0000000..977a363 --- /dev/null +++ b/code/inet/plopserver.c @@ -0,0 +1,4 @@ +#include + +int main(int argc, char *argv[]) +{ puts("plop"); return 0 } diff --git a/code/inet/plopserver.md b/code/inet/plopserver.md new file mode 100644 index 0000000..6df68b8 --- /dev/null +++ b/code/inet/plopserver.md @@ -0,0 +1,2 @@ +# Plop serveur + diff --git a/code/inet/qotd.sh b/code/inet/qotd.sh new file mode 100644 index 0000000..2ea0775 --- /dev/null +++ b/code/inet/qotd.sh @@ -0,0 +1,3 @@ +#!/bin/bash + +/usr/games/fortune -a -n 500 diff --git a/code/roff/README.md b/code/roff/README.md new file mode 100644 index 0000000..d45c374 --- /dev/null +++ b/code/roff/README.md @@ -0,0 +1,2 @@ +# La famille des roffs + diff --git a/code/shell/demofonctions.sh b/code/shell/demofonctions.sh index 92a33f3..12a8209 100755 --- a/code/shell/demofonctions.sh +++ b/code/shell/demofonctions.sh @@ -1,3 +1,3 @@ #!/bin/sh -. ./fonctions.sh +source ./fonctions.sh message "hello world" diff --git a/tetatricks.tex b/tetatricks.tex index 7493fbc..a766b86 100644 --- a/tetatricks.tex +++ b/tetatricks.tex @@ -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} % ==============================================================