the caturday's really big commit
This commit is contained in:
parent
dfede4a816
commit
a1c0fddd17
@ -78,6 +78,14 @@ Première conclusion : affaire à suivre.
|
|||||||
% ====================================================================
|
% ====================================================================
|
||||||
\section{Yabasic} \index{yabasic}
|
\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.
|
Première innovation, les numéros de ligne ne sont plus obligatoires.
|
||||||
|
|
||||||
\lstinputlisting{code/Basic/yabasic-1.bas}
|
\lstinputlisting{code/Basic/yabasic-1.bas}
|
||||||
|
@ -632,7 +632,7 @@ et un exemple simple d'utilisation.
|
|||||||
\section{Analyser une ligne de texte} \index{parser}
|
\section{Analyser une ligne de texte} \index{parser}
|
||||||
|
|
||||||
Nous désirons implémenter une interface en ligne de commande
|
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
|
assez semblables. On peut aussi voir ça comme la création
|
||||||
d'un \textsl{domain specific language} (aka DSL\index{DSL}).
|
d'un \textsl{domain specific language} (aka DSL\index{DSL}).
|
||||||
|
|
||||||
|
@ -11,6 +11,10 @@ service à partir de son nom. Un énorme progrès comparé à la
|
|||||||
maintenance du fichier \texttt{/etc/hosts} qu'il fallait,
|
maintenance du fichier \texttt{/etc/hosts} qu'il fallait,
|
||||||
à la vieille époque, télécharger toutes les nuits\dots
|
à 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}
|
\section{Outils de base}
|
||||||
|
86
chap/OSC.tex
86
chap/OSC.tex
@ -1,7 +1,15 @@
|
|||||||
\chapter{Open Sound Control}
|
\chapter{Open Sound Control}
|
||||||
\index{OSC} \label{chap:OSC}
|
\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,
|
\textsl{OSC est un format de transmission de données entre ordinateurs,
|
||||||
synthétiseurs, robots ou tout autre matériel ou logiciel compatible,
|
synthétiseurs, robots ou tout autre matériel ou logiciel compatible,
|
||||||
conçu pour le contrôle en temps réel.
|
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
|
améliorations en termes de rapidité et de flexibilité par rapport
|
||||||
à l'ancienne norme MIDI\index{MIDI}\dots}
|
à l'ancienne norme MIDI\index{MIDI}\dots}
|
||||||
|
|
||||||
|
|
||||||
|
% ================================================================
|
||||||
|
\section{Programmation}
|
||||||
|
|
||||||
Actuellement, j'utilise (pour le C) \texttt{liblo}\index{liblo}
|
Actuellement, j'utilise (pour le C) \texttt{liblo}\index{liblo}
|
||||||
qui reste simple
|
qui reste simple à utiliser
|
||||||
à utiliser tout en permettant de descendre à un bas niveau.
|
tout en permettant de descendre à un bas niveau.
|
||||||
Cette bibliothèque est livrée avec deux outils que nous
|
Elle fonctionne sur un modèle asynchrone
|
||||||
allons voir maintenant.
|
(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 :}
|
\textbf{Envoyer :}
|
||||||
|
|
||||||
Pour envoyer, il faut bien définir une destination. Une fois
|
Pour envoyer des données, il faut bien définir une destination. Une fois
|
||||||
de plus, le couple IP adresse/port est utilisé. Ce sont les
|
de plus, le triplet IP adresse/port/chemin est utilisé.
|
||||||
deux premiers paramètres.
|
Ce sont les trois premiers paramètres de la commande~:
|
||||||
\begin{verbatim}
|
\begin{verbatim}
|
||||||
tth@debian:~$ oscsend localhost 1664 /tmp/kmem is 61 'meg, efface !'
|
tth@debian:~$ oscsend localhost 1664 /tmp/kmem 'is' 61 'meg, efface !'
|
||||||
tth@debian:~$
|
|
||||||
\end{verbatim}
|
\end{verbatim}
|
||||||
|
|
||||||
La chaine \texttt{is} que vous voyez dans la ligne de commande
|
La chaine \texttt{is} que vous voyez dans la ligne de commande
|
||||||
décrit le type des paramètres qui suivent~:
|
décrit le type des paramètres qui suivent~:
|
||||||
\texttt{i} est pour un integer et \texttt{s} pour une
|
\texttt{i} est pour un integer et \texttt{s} pour une
|
||||||
chaine (notez les simples quotes pour passer les caractères
|
chaine de caractères
|
||||||
speciaux du shell).
|
(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}
|
\begin{verbatim}
|
||||||
tth@debian:~$ oscdump 1664
|
tth@debian:~$ oscdump 1664
|
||||||
/tmp/kmem is 61 "meg, efface !"
|
/tmp/kmem is 61 "meg, efface !"
|
||||||
^C
|
^C
|
||||||
tth@debian:~$
|
|
||||||
\end{verbatim}
|
\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}
|
\section{Exemple de code}
|
||||||
@ -60,7 +100,7 @@ utilise un thread d'écoute qui appelle des
|
|||||||
|
|
||||||
\lstinputlisting[language=c]{code/OSC/listen-osc.c}
|
\lstinputlisting[language=c]{code/OSC/listen-osc.c}
|
||||||
|
|
||||||
\textbf{Envoyer :}
|
\textbf{Envoyer :} \label{sendosc}
|
||||||
|
|
||||||
Cette partie là est beaucoup plus simple.
|
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}
|
\section{En Perl} \index{Perl}
|
||||||
|
|
||||||
\begin{verbatim}
|
\begin{verbatim}
|
||||||
@ -86,9 +133,9 @@ $client->send(['/proc/kcore', 'i', 61, 's', "bla"]);
|
|||||||
% ================================================================
|
% ================================================================
|
||||||
% nouveau: Sat Jul 15 07:14:10 UTC 2023
|
% 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
|
générer des trames OSC : on peut citer
|
||||||
Processing\index{processing},
|
Processing\index{processing},
|
||||||
Chuck\index{Chuck} (page \pageref{chuck-osc}),
|
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
|
\dots
|
||||||
|
|
||||||
% ================================================================
|
% ================================================================
|
||||||
|
@ -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
|
données textuelles et contient d'énormes facilités d'utilisation
|
||||||
des expressions régulières.
|
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
|
incontesté du Web\index{web} interactif, de par son intégration
|
||||||
dans le serveur Apache\index{Apache},
|
dans le serveur Apache\index{Apache}
|
||||||
et de modules d'écriture de clients http\index{http}.
|
(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,
|
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.
|
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
|
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
|
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 ?}
|
\section {Et en vrai ?}
|
||||||
|
|
||||||
|
Quels logiciels sont écrits en Perl ?
|
||||||
|
|
||||||
\texttt{exiftool - Read and write meta information in files} \index{exiftool}
|
\texttt{exiftool - Read and write meta information in files} \index{exiftool}
|
||||||
|
|
||||||
% ------------------------------------------------------
|
% ------------------------------------------------------
|
||||||
|
46
chap/bdd.tex
46
chap/bdd.tex
@ -7,17 +7,22 @@
|
|||||||
% ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
% ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||||
\section{sqlite} \index{sqlite}
|
\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}
|
\subsection{CLI} \index{cli}
|
||||||
|
|
||||||
Commandes internes:
|
Commandes internes (\textsl{meta-commands})~:
|
||||||
|
|
||||||
|
Utilisez \textbf{.help} en premier secours !
|
||||||
|
|
||||||
% ----------------------------------------------------------------
|
% ----------------------------------------------------------------
|
||||||
\subsection{Libreoffice} \index{Libreoffice}
|
\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
|
de données. Chacune de ces clefs doit être unique, et doit être
|
||||||
liée avec une seule valeur\footnote{Peut-on alors parler
|
liée avec une seule valeur\footnote{Peut-on alors parler
|
||||||
de bijection relationnelle ?}.
|
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}
|
\subsection{Exemple en Perl} \index{Perl}
|
||||||
|
|
||||||
\begin{verbatim}
|
Nous allons extraire une donnée du fichier \texttt{/etc/passwd}
|
||||||
#!/usr/bin/perl -w
|
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;
|
\lstinputlisting[language=perl]{code/bdd/mkgdbm.pl}
|
||||||
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}
|
|
||||||
|
|
||||||
Vous remarquerez que pour cet exemple, nous avons clef et valeur qui
|
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
|
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
|
par un hypothétique\footnote{Oui, je vais l'écrire bientôt.} programme
|
||||||
en C, le programme Perl rajoute un \texttt{'\textbackslash0'}
|
en C, le programme Perl rajoute un \texttt{'\textbackslash0'}
|
||||||
(fin de chaine) aux deux champs concernés.
|
(fin de chaine) aux deux champs concernés.
|
||||||
|
% ----------------------------------------------------------------
|
||||||
|
|
||||||
|
\subsection{Exemple en C} \index{C}
|
||||||
|
|
||||||
|
XXX \index{XXX}
|
||||||
|
|
||||||
% ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
% ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||||
|
|
||||||
|
@ -1,13 +1,13 @@
|
|||||||
% ==============================================================
|
% ==============================================================
|
||||||
% TRUCS DE VIEUX
|
% TRUCS DE VIEUX
|
||||||
|
|
||||||
\chapter{trucs de dino}
|
\chapter{Trucs de dino}
|
||||||
\label{chap:dino}
|
\label{chap:dino}
|
||||||
|
|
||||||
Je vais, dans ce chapitre, parler de choses que les moins de vingt
|
Je vais, dans ce chapitre, parler de choses que les moins de vingt
|
||||||
ans ne peuvent pas connaitre. Des choses qui existaient
|
ans ne peuvent pas connaitre. Des choses qui existaient
|
||||||
\textsl{bien avant} le Web\index{www}, et pour lesquelles on
|
\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
|
Aussi connu sous le nom de « superserveur Internet », ce démon
|
||||||
a fait ses premiers pas dans l'Unix 4.3BSD
|
a fait ses premiers pas dans l'Unix 4.3BSD
|
||||||
et depuis est maintenant remplacé par
|
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,
|
Inetd a pour but de gérer l'accès à des services réseaux,
|
||||||
qui peuvent être internes ou externes. Un service interne
|
qui peuvent être internes ou externes. Un service interne
|
||||||
est entièrement géré par Inetd : on y trouve par exempme
|
est entièrement géré par Inetd : on y trouve par exemple
|
||||||
daytime qui permet de connaitre l'heure qu'il est à
|
\textsl{daytime} qui permet de connaitre l'heure qu'il est à
|
||||||
l'autre bout du monde :
|
l'autre bout du monde :
|
||||||
|
|
||||||
\begin{verbatim}
|
\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
|
un exemple très ancien\footnote{Août 1998, lors d'une
|
||||||
réunion du CULTe, à Toulouse}, et très simple à
|
réunion du CULTe, à Toulouse}, et très simple à
|
||||||
comprendre.
|
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}
|
\subsection{qotd}
|
||||||
\index{qotd}
|
\index{qotd} \label{qotd}
|
||||||
|
|
||||||
Le protocole « Quote Of The Day » (\texttt{qotd}) a été
|
Le protocole « Quote Of The Day » (\texttt{qotd}) a été
|
||||||
normalise dans le \texttt{rfc865}, écrit en 1983 par John Postel.
|
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}
|
\index{fortune}
|
||||||
\begin{lstlisting}[language=sh]
|
\lstinputlisting[language=sh]{code/inet/qotd.sh}
|
||||||
#!/bin/sh
|
|
||||||
/usr/games/fortune -a -n 500
|
|
||||||
\end{lstlisting}
|
|
||||||
|
|
||||||
Maintenant, il nous faut dire à Inetd d'appeler ce moteur
|
Maintenant, il nous faut dire à Inetd d'appeler ce moteur
|
||||||
chaque fois qu'une connection tcp entrante arrive sur le
|
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}.
|
||||||
|
|
||||||
% ==============================================================
|
% ==============================================================
|
||||||
%
|
%
|
||||||
|
@ -1,5 +1,10 @@
|
|||||||
\chapter{Gadgets}
|
\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}
|
\section{Fortune}
|
||||||
|
@ -64,57 +64,60 @@ a m'expliquer.
|
|||||||
|
|
||||||
\lstinputlisting[language=c]{code/SDL2/strangebug.c}
|
\lstinputlisting[language=c]{code/SDL2/strangebug.c}
|
||||||
|
|
||||||
Mias c'est peut-être ma totale méconnaissance du sujet qui m'a
|
C'est peut-être ma totale méconnaissance du sujet qui m'a
|
||||||
fait faire une bêtise àlc\dots
|
fait faire une bêtise àlc, et je ne vois pas laquelle\dots
|
||||||
|
Une enquête est en préparation.
|
||||||
|
|
||||||
% ------------------------------------------------
|
% ------------------------------------------------
|
||||||
|
%
|
||||||
\section{Flydraw}\index{Flydraw}
|
% Fri Sep 27 14:09:45 UTC 2024
|
||||||
|
% la section sur flydram est partie dans les unused
|
||||||
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
|
|
||||||
|
|
||||||
%====================================================================
|
%====================================================================
|
||||||
|
|
||||||
\section{Povray}\index{Povray}
|
\section{Povray}\index{Povray}\label{Povray}
|
||||||
|
|
||||||
\textbf{Persistence Of Vision} est un logiciel de raytracing qui
|
\textbf{Persistence Of Vision} est un logiciel de raytracing qui
|
||||||
existe depuis plus de trente ans. C'est un lointain descendant
|
existe depuis plus de trente ans. C'est un lointain descendant
|
||||||
de DKBtrace. Mais le raytracing, c'est quoi ?
|
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}
|
\subsection{Caméra}
|
||||||
|
|
||||||
Vous avez des problèmes pour caler les mouvement de la 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
|
\texttt{location} et le \texttt{look\_at}, et rien ne tombe
|
||||||
en face de l'objectif ? Voici une approche de solution.
|
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~:
|
lors du calcul de la séquence~:
|
||||||
|
|
||||||
\begin{verbatim}
|
\begin{verbatim}
|
||||||
#if (0 = clock)
|
#if (0 = clock)
|
||||||
#fopen CL "cam.log" create
|
#fopen CL "WS/cam.log" write
|
||||||
#else
|
#else
|
||||||
#fopen CL "cam.log" append
|
#fopen CL "WS/cam.log" append
|
||||||
#end
|
#end
|
||||||
#write (CL, clock, " ", CamX, " ", CamY, " ", CamZ,
|
#write (CL, clock, " ", CamX, " ", CamY, " ", CamZ,
|
||||||
" ", LatX, " ", LatY, " ", LatZ,"\n")
|
" ", LatX, " ", LatY, " ", LatZ,"\n")
|
||||||
#fclose CL
|
#fclose CL
|
||||||
\end{verbatim}
|
\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}~:
|
de ces données avec l'indémodable gnuplot\index{gnuplot}~:
|
||||||
|
|
||||||
\begin{verbatim}
|
\begin{verbatim}
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
FILE="cam.log"
|
FILE="WS/cam.log"
|
||||||
TMPF="/dev/shm/cam.data"
|
TMPF="/dev/shm/cam.data"
|
||||||
IMAGE="graphe.png"
|
IMAGE="graphe.png"
|
||||||
tail -360 ${FILE} | sort -n > ${TMPF}
|
tail -360 ${FILE} | sort -n > ${TMPF}
|
||||||
gnuplot << __EOC__
|
gnuplot << __EOC__
|
||||||
set term png size 720,720
|
set term png size 720,720
|
||||||
set output "${IMAGE}"
|
set output "${IMAGE}"
|
||||||
set ytics 2
|
set ytics 2
|
||||||
set xtics 2
|
set xtics 2
|
||||||
set grid front
|
set grid front
|
||||||
set title "Rush Camera"
|
set title "Rush Camera"
|
||||||
plot "${TMPF}" using 2:4 title "Cam", \
|
plot "${TMPF}" using 2:4 title "Cam", \
|
||||||
"${TMPF}" using 5:7 title "Lat" with dots
|
"${TMPF}" using 5:7 title "Lat" with dots
|
||||||
__EOC__
|
__EOC__
|
||||||
display "${IMAGE}" &
|
display "${IMAGE}" &
|
||||||
\end{verbatim}
|
\end{verbatim}
|
||||||
|
|
||||||
Dans ce cas, il s'agit d'une animation de 360 images, ce qui explique
|
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
|
\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
|
coordonnées X et Z, dans le repère POVray, qui n'est pas le même que
|
||||||
celui de Gnuplot.
|
celui de Gnuplot.
|
||||||
|
|
||||||
|
|
||||||
% ------------------------------------------------
|
% ------------------------------------------------
|
||||||
|
% updated Fri Sep 27 13:41:54 UTC 2024
|
||||||
\subsection{image\_map}
|
\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}
|
||||||
|
|
||||||
% ------------------------------------------------
|
% ------------------------------------------------
|
||||||
|
|
||||||
|
@ -65,7 +65,9 @@ ainsi que la norme ISO 2110 pour la connectique.
|
|||||||
\end{quote}
|
\end{quote}
|
||||||
|
|
||||||
Comment détecter si un \textit{device} correspond bien
|
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]
|
\begin{lstlisting}[language=C]
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
@ -91,6 +93,11 @@ return 0;
|
|||||||
}
|
}
|
||||||
\end{lstlisting}
|
\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
|
Et la question qui, je le sens, va venir~: « à quoi peut bien
|
||||||
servir un port série ? » appelle un réponse presque évidente~:
|
servir un port série ? » appelle un réponse presque évidente~:
|
||||||
« à plusieurs choses ». Une petite liste~:
|
« à 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.}
|
est la limite\footnote{Comme à peu près tout dans la vie.}
|
||||||
|
|
||||||
% -----------------------------------------------------------
|
% -----------------------------------------------------------
|
||||||
\section{Ports //} \label{portparallele}
|
\section{Ports \textbf{//}} \label{portparallele}
|
||||||
\index{port //}
|
\index{port //}
|
||||||
|
|
||||||
% http://people.redhat.com/twaugh/parport/html/x623.html
|
% 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}
|
\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
20
chap/livres.tex
Normal 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}.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
% ===============================================================
|
||||||
|
% ===============================================================
|
@ -1,6 +1,7 @@
|
|||||||
\chapter{\textbf{\textsl{lp0 on fire!}}}
|
\chapter{\textbf{\textsl{lp0 on fire!}}}
|
||||||
\label{chap:imprimer}
|
\label{chap:imprimer}
|
||||||
|
|
||||||
|
|
||||||
%-----------------------------------------------------------------
|
%-----------------------------------------------------------------
|
||||||
|
|
||||||
L'impression sour Linux semble avoir plusieurs personnalités.
|
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.
|
« 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
|
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
|
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é,
|
clients. Elle s'appuie sur IPP et précise des règles supplémentaires
|
||||||
telles qu'une liste des
|
d'interopérabilité, telles qu'une liste des
|
||||||
formats de documents que les imprimantes doivent prendre en charge.
|
formats de documents que les imprimantes doivent prendre en charge.
|
||||||
\end{quote}
|
\end{quote}
|
||||||
|
|
||||||
%-----------------------------------------------------------------
|
%-----------------------------------------------------------------
|
||||||
|
%
|
||||||
|
% https://www.evilsocket.net/2024/09/26/Attacking-UNIX-systems-via-CUPS-Part-I/
|
||||||
|
%
|
||||||
|
|
||||||
\section{CUPS} \index{CUPS} \label{CUPS}
|
\section{CUPS} \index{CUPS} \label{CUPS}
|
||||||
|
|
||||||
@ -75,7 +79,6 @@ DESCRIPTION
|
|||||||
Convert FILE(s) or standard input to PostScript. By default,
|
Convert FILE(s) or standard input to PostScript. By default,
|
||||||
the output is sent to the default printer. An output file
|
the output is sent to the default printer. An output file
|
||||||
may be specified with -o.
|
may be specified with -o.
|
||||||
|
|
||||||
Mandatory arguments to long options are mandatory for short
|
Mandatory arguments to long options are mandatory for short
|
||||||
options too. Long options marked with * require a yes/no ar‐
|
options too. Long options marked with * require a yes/no ar‐
|
||||||
gument, corresponding short options stand for `yes'.
|
gument, corresponding short options stand for `yes'.
|
||||||
@ -88,7 +91,6 @@ DESCRIPTION
|
|||||||
\item lgrind
|
\item lgrind
|
||||||
\item src2tex
|
\item src2tex
|
||||||
\item trueprint
|
\item trueprint
|
||||||
|
|
||||||
\end{itemize}
|
\end{itemize}
|
||||||
|
|
||||||
|
|
||||||
|
105
chap/reseau.tex
105
chap/reseau.tex
@ -2,8 +2,9 @@
|
|||||||
\label{chap:reseau} \index{Internet}
|
\label{chap:reseau} \index{Internet}
|
||||||
|
|
||||||
Ah, le grand Internet sauvage, il serait temps qu'on en parle un peu.
|
Ah, le grand Internet sauvage, il serait temps qu'on en parle un peu.
|
||||||
Nous allons voir dans ce chapitre quelques utilisations
|
Nous allons voir dans ce chapitre des logiciels peu connus,
|
||||||
que l'on peut qualifier de «~créatives~».
|
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
|
Si vous attendiez des choses plus sérieuses, j'ai aussi ça
|
||||||
en magasin : \textsc{dns} page \pageref{chap:DNS},
|
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},
|
étrange basé sur \textsl{systemd}\index{systemd},
|
||||||
puisque l'important
|
puisque l'important
|
||||||
ça n'est pas que ça soit mieux, mais que ce soit
|
ç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
|
À titre d'exercice, nous allons reprendre l'exemple du serveur
|
||||||
de \textsl{quote of the day} que nous avons déja utilisé avec
|
de \textsl{quote of the day} que nous avons déja utilisé avec
|
||||||
Inetd\index{inetd}, et lancer le
|
Inetd\index{inetd} (page \pageref{qotd}),
|
||||||
petit script par l'intermédiaire de Xinetd.
|
et lancer notre petit script par l'intermédiaire de Xinetd.
|
||||||
|
|
||||||
Pour cela, il faut créer dans le répertoire
|
Pour cela, il faut créer dans le répertoire
|
||||||
\texttt{/etc/xinetd.d/}\footnote{Attention, ce 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}
|
\begin{verbatim}
|
||||||
service qotd
|
service qotd
|
||||||
{
|
{
|
||||||
disable = yes
|
disable = no
|
||||||
type = UNLISTED
|
type = UNLISTED
|
||||||
|
socket_type = stream
|
||||||
socket_type = stream
|
protocol = tcp
|
||||||
protocol = tcp
|
user = nobody
|
||||||
|
server = /usr/local/bin/qotd.sh
|
||||||
user = nobody
|
}
|
||||||
server = /usr/local/bin/qotd.sh
|
|
||||||
}
|
|
||||||
\end{verbatim}
|
\end{verbatim}
|
||||||
|
|
||||||
Bien entendu, le script \texttt{qotd.sh} décrit en page
|
Bien entendu, le script \texttt{qotd.sh} décrit en page
|
||||||
\pageref{inetd} sera placé dans le bon répertoire.
|
\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
|
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
|
Ah, on me murmure dans l'oreille que Xinetd n'existe plus dans
|
||||||
les Linux modernes, et qu'il existe quelque chose de
|
les Linux modernes, et qu'il existe quelque chose de
|
||||||
\textit{beaucoup mieux}. Je ne sais pas quoi.
|
\textit{beaucoup mieux}. Je ne sais pas quoi.
|
||||||
Je demande à voir\footnote{Parce que c'est écrit par LP ?}.
|
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
|
avec \texttt{iptables} et \texttt{pfctl} est une source de trolls
|
||||||
sans fin.
|
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}
|
\section{Outils de diagnostic}
|
||||||
|
|
||||||
@ -152,6 +113,8 @@ iftop\index{iftop},
|
|||||||
iptraf\index{iptraf}
|
iptraf\index{iptraf}
|
||||||
\dots
|
\dots
|
||||||
|
|
||||||
|
Mais c'est toujours la faute du \textsc{dns}\index{dns}.
|
||||||
|
|
||||||
% -------------------------------------------------------------
|
% -------------------------------------------------------------
|
||||||
\subsection{iperf}
|
\subsection{iperf}
|
||||||
\index{iperf}
|
\index{iperf}
|
||||||
|
@ -127,19 +127,49 @@ X09:22:29XupX33Xdays,X14:00,XX8Xusers,XXloadXaverage:X0.12,X0.17,X0.17
|
|||||||
\end{verbatim}
|
\end{verbatim}
|
||||||
|
|
||||||
Bien entendu, on peut utiliser plusieurs tuyaux pour construire
|
Bien entendu, on peut utiliser plusieurs tuyaux pour construire
|
||||||
une chaine de traitements\footnote{La
|
une chaine de traitements%
|
||||||
chaine de compilation \textsc{eqn/tbl/roff} est un bon exemple}.
|
\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.
|
On peut même « intercepter » ce qui transite par un des tuyaux.
|
||||||
|
|
||||||
\begin{verbatim}
|
\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}
|
\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}
|
\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
|
Une bonne manière de rendre votre code modulaire, et de réutiliser
|
||||||
des bouts de code à volonté depuis plusieurs programmes.
|
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}
|
\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}
|
\lstinputlisting{code/shell/demofonctions.sh}
|
||||||
|
|
||||||
|
XXX expliquer "source" \index{XXX}
|
||||||
|
|
||||||
% ==============================================================
|
% ==============================================================
|
||||||
|
|
||||||
% https://bwog-notes.chagratt.site/2023/le-heredoc/
|
% 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 » ?
|
Un nom bien difficile à traduire, peut-être par « document en place » ?
|
||||||
C'est un moyen simple et efficace de mettre des données textuelles
|
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
|
dans un script afin de les envoyer dans le \textsl{stdin} d'un
|
||||||
logiciel. Par exemple, quelques commandes pour générer un
|
logiciel. Par exemple, quelques commandes pour générer un
|
||||||
graphique avec Gnuplot\index{gnuplot} sur la console \textsl{dumb}.
|
graphique avec Gnuplot\index{gnuplot} sur la console \textsl{dumb}.
|
||||||
|
@ -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
|
fait, avec des outils divers et variés et des résultats parfois
|
||||||
(ou souvent) hasardeux.
|
(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}
|
\section{fmt et ses copains}
|
||||||
\index{fmt}\index{tr}
|
\index{fmt}\index{tr}
|
||||||
|
|
||||||
@ -34,18 +38,19 @@ condimentum ante in metus iaculis quis congue diam commodo.
|
|||||||
%-------------------------------------------------------------
|
%-------------------------------------------------------------
|
||||||
|
|
||||||
\section{roff}
|
\section{roff}
|
||||||
\index{roff}\label{roff}
|
\index{roff}\label{roff} \index{groff}\index{troff}
|
||||||
|
|
||||||
%
|
%
|
||||||
% https://linuxfr.org/users/karchnu/journaux/redecouverte-roff
|
% https://linuxfr.org/users/karchnu/journaux/redecouverte-roff
|
||||||
% https://pjfichet.github.io/utroff/
|
% 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
|
\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 justifier auprès de leur hiérarchie le développement d'une machine
|
||||||
de jeu, il est donc légitime d'en parler, non ?
|
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
|
Il semble bien que \texttt{groff} ne sache pas lire les fichiers
|
||||||
encodés en \textbf{utf8}\index{utf8}. Il faut donc utiliser
|
encodés en \textbf{utf8}\index{utf8}. Il faut donc utiliser
|
||||||
un hack avec \texttt{recode} en prenant bien soin d'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.
|
les pages du manuel Unix. La documentation, c'est important.
|
||||||
C'est pour ça que j'en cause page \pageref{chap:manpages}.
|
C'est pour ça que j'en cause page \pageref{chap:manpages}.
|
||||||
|
|
||||||
Voyons rapidement un exemple minumum compilable. XXX
|
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}
|
\subsection{eqn}
|
||||||
|
|
||||||
@ -82,6 +128,10 @@ input files into commands that are understood by troff.
|
|||||||
input files into commands that are understood by troff.
|
input files into commands that are understood by troff.
|
||||||
\end{quote}
|
\end{quote}
|
||||||
|
|
||||||
|
\subsection{Autres trucs...}
|
||||||
|
|
||||||
|
\texttt{colcrt} : filter nroff output for CRT previewing
|
||||||
|
|
||||||
%-------------------------------------------------------------
|
%-------------------------------------------------------------
|
||||||
\section{yodl}
|
\section{yodl}
|
||||||
\index{yodl}
|
\index{yodl}
|
||||||
|
39
chap/unused/flydraw.tex
Normal file
39
chap/unused/flydraw.tex
Normal 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
|
||||||
|
|
@ -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
|
combinaisons codec/container rendent la compréhension de cet univers
|
||||||
assez perturbante.
|
assez perturbante.
|
||||||
|
|
||||||
\subsection{rtmp} \index{rtmp}
|
|
||||||
|
|
||||||
\texttt{flvstreamer -r rtmp://lacantine.live-fstreams.cdn02.rambla.be:1935/live-lacantine/live-lacantine-2 | mplayer -}
|
\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}
|
||||||
|
|
||||||
% --------------------------------------------------------------------
|
% --------------------------------------------------------------------
|
||||||
|
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
% ==============================================================
|
% ==============================================================
|
||||||
\section{Apache, Nginx} \index{Apache} \index{nginx}
|
\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.
|
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
|
Que nous ne verrons pas pour le moment. Je vais plutôt me concentrer
|
||||||
@ -60,34 +60,21 @@ if you want):
|
|||||||
\begin{verbatim}
|
\begin{verbatim}
|
||||||
tth@ramen:~/Houba/Fractales90$ apt show libmicrohttpd12
|
tth@ramen:~/Houba/Fractales90$ apt show libmicrohttpd12
|
||||||
Package: 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
|
Description: library embedding HTTP server functionality
|
||||||
GNU libmicrohttpd is a small C library that is supposed to make it
|
GNU libmicrohttpd is a small C library that is supposed to make it
|
||||||
easy to run an HTTP server as part of another application.
|
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}
|
\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.
|
||||||
|
|
||||||
|
|
||||||
% ==============================================================
|
% ==============================================================
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
open window 511,511
|
open window 511,511
|
||||||
for x=10 to 495 step 5:for y=10 to 495 step 5
|
for x=10 to 495 step 5:for y=10 to 495 step 5
|
||||||
colour x/2,y/2,0
|
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
|
next y:next x
|
||||||
|
@ -3,20 +3,18 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
||||||
#include <lo/lo.h>
|
#include <lo/lo.h>
|
||||||
|
|
||||||
#define LOCAL_PORT "9000"
|
#define LOCAL_PORT "9000"
|
||||||
|
|
||||||
/* ----------------------------------------------------------------- */
|
/* ------------------------------------------------------- */
|
||||||
void error(int num, const char *msg, const char *path)
|
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);
|
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)
|
int argc, void *data, void *udata)
|
||||||
{
|
{
|
||||||
static int event_number = 1;
|
static int event_number = 1;
|
||||||
@ -29,14 +27,10 @@ printf("\tdata %p\n", data);
|
|||||||
// if (NULL!=data) printf("\t >%s<\n", data);
|
// if (NULL!=data) printf("\t >%s<\n", data);
|
||||||
printf("\tudata %p\n", udata);
|
printf("\tudata %p\n", udata);
|
||||||
if (NULL!=udata) printf("\t\t>%s<\n", (char *)udata);
|
if (NULL!=udata) printf("\t\t>%s<\n", (char *)udata);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
/* ------------------------------------------------------- */
|
||||||
/* ----------------------------------------------------------------- */
|
|
||||||
|
|
||||||
char signature[] = "Bourtoulots";
|
char signature[] = "Bourtoulots";
|
||||||
|
|
||||||
int main(int argc, char *argv[])
|
int main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
lo_server_thread st;
|
lo_server_thread st;
|
||||||
|
@ -12,7 +12,6 @@ lo_address loana;
|
|||||||
int foo;
|
int foo;
|
||||||
|
|
||||||
fprintf(stderr, "sending to %s:%s\n", REMOTE_HOST, REMOTE_PORT);
|
fprintf(stderr, "sending to %s:%s\n", REMOTE_HOST, REMOTE_PORT);
|
||||||
|
|
||||||
loana = lo_address_new(REMOTE_HOST, REMOTE_PORT);
|
loana = lo_address_new(REMOTE_HOST, REMOTE_PORT);
|
||||||
foo = lo_send(loana, "/demo", "is", 61, "meg, efface !");
|
foo = lo_send(loana, "/demo", "is", 61, "meg, efface !");
|
||||||
fprintf(stderr, "got a %d return code ?\n", foo);
|
fprintf(stderr, "got a %d return code ?\n", foo);
|
||||||
|
1
code/POV/.gitignore
vendored
Normal file
1
code/POV/.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
*.png
|
3
code/POV/Makefile
Normal file
3
code/POV/Makefile
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
|
||||||
|
hello.png: hello.pov Makefile
|
||||||
|
povray -I$< -o$@ -W640 -H0 -Q0
|
0
code/POV/README.md
Normal file
0
code/POV/README.md
Normal file
8
code/POV/hello.pov
Normal file
8
code/POV/hello.pov
Normal 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
3
code/Perl/README.md
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
# Perl
|
||||||
|
|
||||||
|
The famous **Pathologic Eclectic Rubish Lister was here** !!!
|
0
code/bdd/README.md
Normal file
0
code/bdd/README.md
Normal file
20
code/bdd/mkgdbm.pl
Normal file
20
code/bdd/mkgdbm.pl
Normal 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
0
code/inet/Makefile
Normal file
5
code/inet/README.md
Normal file
5
code/inet/README.md
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
# Internet protocols
|
||||||
|
|
||||||
|
## Finger
|
||||||
|
|
||||||
|
Show us the [code](finger.md) !
|
0
code/inet/finger-server.pl
Normal file
0
code/inet/finger-server.pl
Normal file
7
code/inet/finger.md
Normal file
7
code/inet/finger.md
Normal 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
4
code/inet/plopserver.c
Normal 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
2
code/inet/plopserver.md
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
# Plop serveur
|
||||||
|
|
3
code/inet/qotd.sh
Normal file
3
code/inet/qotd.sh
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
/usr/games/fortune -a -n 500
|
2
code/roff/README.md
Normal file
2
code/roff/README.md
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
# La famille des roffs
|
||||||
|
|
@ -1,3 +1,3 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
. ./fonctions.sh
|
source ./fonctions.sh
|
||||||
message "hello world"
|
message "hello world"
|
||||||
|
@ -25,10 +25,10 @@
|
|||||||
\makeindex
|
\makeindex
|
||||||
|
|
||||||
\setlength \parindent {2em}
|
\setlength \parindent {2em}
|
||||||
\setlength \parskip {0.30em} % XXX
|
\setlength \parskip {0.25em} % XXX
|
||||||
|
|
||||||
%------ reglages des 'listings'
|
%------ 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{basicstyle=\ttfamily\small}
|
||||||
\lstset{aboveskip=0.7em,belowskip=0.7em}
|
\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,
|
d'une très ancienne version (circa 2011) et donc,
|
||||||
peut-être pas vraiment d'actualité.
|
peut-être pas vraiment d'actualité.
|
||||||
|
|
||||||
\vspace{3em}
|
\vspace{2em}
|
||||||
|
|
||||||
|
|
||||||
Cependant, toute cette ouvrage est en cours de
|
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
|
de la campagne, et le travail sur cette ouvrage peut
|
||||||
reprendre dans des conditions plus sereines.
|
reprendre dans des conditions plus sereines.
|
||||||
Je vais même tenter de faire avec seulement l'aide
|
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
|
Le code \LaTeX{} et les fichiers d'exemples sont disponibles
|
||||||
en ligne sur le site du Tetalab.
|
en ligne sur le site du Tetalab.
|
||||||
@ -162,7 +167,7 @@ Your mileage may vary, film at 11\dots
|
|||||||
\input{chap/debug}
|
\input{chap/debug}
|
||||||
% \input{chap/buzybox}
|
% \input{chap/buzybox}
|
||||||
\input{chap/gif89a}
|
\input{chap/gif89a}
|
||||||
\input{chap/IRC}
|
% \input{chap/IRC}
|
||||||
% \input{chap/SCCS} % nouveau 18 mars 2021
|
% \input{chap/SCCS} % nouveau 18 mars 2021
|
||||||
\input{chap/Usenet}
|
\input{chap/Usenet}
|
||||||
\input{chap/DNS}
|
\input{chap/DNS}
|
||||||
@ -176,9 +181,10 @@ Your mileage may vary, film at 11\dots
|
|||||||
\input{chap/curses}
|
\input{chap/curses}
|
||||||
% \input{chap/openwrt}
|
% \input{chap/openwrt}
|
||||||
\input{chap/WiFi}
|
\input{chap/WiFi}
|
||||||
\input{chap/GIT}
|
% \input{chap/GIT}
|
||||||
\input{chap/divers}
|
\input{chap/divers}
|
||||||
% \input{chap/peer2peer}
|
% \input{chap/peer2peer}
|
||||||
|
\input{chap/livres}
|
||||||
|
|
||||||
% ==============================================================
|
% ==============================================================
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user