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}
|
||||
|
||||
\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}
|
||||
|
@ -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}).
|
||||
|
||||
|
@ -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}
|
||||
|
86
chap/OSC.tex
86
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
|
||||
|
||||
% ================================================================
|
||||
|
@ -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}
|
||||
|
||||
% ------------------------------------------------------
|
||||
|
46
chap/bdd.tex
46
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 (<SOURCE>) {
|
||||
@champs = split ":", $_;
|
||||
$user = $champs[0]."\0";
|
||||
$gecos = $champs[4]."\0";
|
||||
$DB{$user} = $gecos;
|
||||
}
|
||||
|
||||
untie %DB;
|
||||
close SOURCE;
|
||||
0;
|
||||
\end{verbatim}
|
||||
\lstinputlisting[language=perl]{code/bdd/mkgdbm.pl}
|
||||
|
||||
Vous remarquerez que pour cet exemple, nous avons clef et valeur qui
|
||||
sont du texte. Alors que DBM est prévu pour stocker des blocs de
|
||||
@ -65,6 +60,11 @@ binaire. Pour faciliter la récupération de ces chaines de caractères
|
||||
par un hypothétique\footnote{Oui, je vais l'écrire bientôt.} programme
|
||||
en C, le programme Perl rajoute un \texttt{'\textbackslash0'}
|
||||
(fin de chaine) aux deux champs concernés.
|
||||
% ----------------------------------------------------------------
|
||||
|
||||
\subsection{Exemple en C} \index{C}
|
||||
|
||||
XXX \index{XXX}
|
||||
|
||||
% ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
|
||||
|
@ -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}.
|
||||
|
||||
% ==============================================================
|
||||
%
|
||||
|
@ -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}
|
||||
|
@ -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}
|
||||
|
||||
% ------------------------------------------------
|
||||
|
||||
|
@ -65,7 +65,9 @@ ainsi que la norme ISO 2110 pour la connectique.
|
||||
\end{quote}
|
||||
|
||||
Comment détecter si un \textit{device} correspond bien
|
||||
à un port série ?
|
||||
à un port série ? Une fois de plus, la réponse passe
|
||||
par un \textsl{ioctl}\index{ioctl}.
|
||||
Même si il est bien caché.
|
||||
|
||||
\begin{lstlisting}[language=C]
|
||||
#include <stdio.h>
|
||||
@ -91,6 +93,11 @@ return 0;
|
||||
}
|
||||
\end{lstlisting}
|
||||
|
||||
En effet, \texttt{tcgetattr(3)} va aller lire le paramétrage
|
||||
du port associé au descripteur de fichier \texttt{fd}
|
||||
par l'intermédiaire d'un ioctl (qui aurait pû prévoir ?)
|
||||
que nous détaillerons un de ces jours.
|
||||
|
||||
Et la question qui, je le sens, va venir~: « à quoi peut bien
|
||||
servir un port série ? » appelle un réponse presque évidente~:
|
||||
« à plusieurs choses ». Une petite liste~:
|
||||
@ -105,7 +112,7 @@ Les possibilités sont infinies. C'est votre imagination qui
|
||||
est la limite\footnote{Comme à peu près tout dans la vie.}
|
||||
|
||||
% -----------------------------------------------------------
|
||||
\section{Ports //} \label{portparallele}
|
||||
\section{Ports \textbf{//}} \label{portparallele}
|
||||
\index{port //}
|
||||
|
||||
% http://people.redhat.com/twaugh/parport/html/x623.html
|
||||
@ -117,7 +124,19 @@ Question: comment faire du \textsl{bitbanging} ?
|
||||
% -----------------------------------------------------------
|
||||
\section{USB} \index{USB} \label{USB}
|
||||
|
||||
Universal Serial Bus
|
||||
Universal Serial Bus, existe en trois taille.
|
||||
|
||||
\begin{verbatim}
|
||||
tth@redlady:~/Devel/TetaTricks$ lsusb
|
||||
Bus 004 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub
|
||||
Bus 004 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
|
||||
Bus 001 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub
|
||||
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
|
||||
Bus 003 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
|
||||
Bus 002 Device 006: ID 093a:2510 Pixart Imaging, Inc. Optical Mouse
|
||||
Bus 002 Device 002: ID 0461:4e6f Primax Electronics, Ltd
|
||||
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
|
||||
\end{verbatim}
|
||||
|
||||
% -----------------------------------------------------------
|
||||
|
||||
|
20
chap/livres.tex
Normal file
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!}}}
|
||||
\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}
|
||||
|
||||
|
||||
|
105
chap/reseau.tex
105
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}
|
||||
|
@ -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}.
|
||||
|
@ -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}
|
||||
|
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
|
||||
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}
|
||||
|
||||
% --------------------------------------------------------------------
|
||||
|
||||
|
@ -6,7 +6,7 @@
|
||||
% ==============================================================
|
||||
\section{Apache, Nginx} \index{Apache} \index{nginx}
|
||||
|
||||
Apache (\textsl{A patchy server} et Nginx sont de grands classiques,
|
||||
Apache (\textsl{A patchy server}) et Nginx sont de grands classiques,
|
||||
voire même, dans le cas d'Apache, un grand ancien.
|
||||
|
||||
Que nous ne verrons pas pour le moment. Je vais plutôt me concentrer
|
||||
@ -60,34 +60,21 @@ if you want):
|
||||
\begin{verbatim}
|
||||
tth@ramen:~/Houba/Fractales90$ apt show libmicrohttpd12
|
||||
Package: libmicrohttpd12
|
||||
Version: 0.9.72-2
|
||||
Priority: optional
|
||||
Section: libs
|
||||
Source: libmicrohttpd
|
||||
Maintainer: Daniel Baumann <daniel.baumann@progress-linux.org>
|
||||
Installed-Size: 211 kB
|
||||
Depends: libc6 (>= 2.17), libgnutls30 (>= 3.7.0)
|
||||
Homepage: https://www.gnu.org/software/libmicrohttpd/
|
||||
Tag: role::shared-lib
|
||||
Download-Size: 109 kB
|
||||
APT-Sources: http://deb.debian.org/debian bullseye/main amd64 Packages
|
||||
Description: library embedding HTTP server functionality
|
||||
GNU libmicrohttpd is a small C library that is supposed to make it
|
||||
easy to run an HTTP server as part of another application.
|
||||
Key features that distinguish GNU Libmicrohttpd from other
|
||||
projects are:
|
||||
* C library: fast and small
|
||||
* API is simple, expressive and fully reentrant
|
||||
* Implementation is HTTP 1.1 compliant
|
||||
* HTTP server can listen on multiple ports
|
||||
* Four different threading models (select, poll, pthread, thread pool)
|
||||
* Support for IPv6
|
||||
* Support for SHOUTcast
|
||||
* Support for incremental processing of POST data (optional)
|
||||
* Support for basic and digest authentication (optional)
|
||||
* Support for SSL3 and TLS
|
||||
\end{verbatim}
|
||||
|
||||
\lstinputlisting[language=C]{code/inet/plopserver.c}
|
||||
|
||||
% ==============================================================
|
||||
|
||||
\section{Mais encore ?}
|
||||
|
||||
Il doit bien exister des modules Perl pour faire facilement
|
||||
un serveur web, non ?
|
||||
Même qu'on pourrait en écrire un rien qu'avec les sockets.
|
||||
|
||||
|
||||
% ==============================================================
|
||||
|
||||
|
@ -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
|
||||
|
@ -3,20 +3,18 @@
|
||||
#include <stdio.h>
|
||||
#include <unistd.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#include <lo/lo.h>
|
||||
|
||||
#define LOCAL_PORT "9000"
|
||||
|
||||
/* ----------------------------------------------------------------- */
|
||||
/* ------------------------------------------------------- */
|
||||
void error(int num, const char *msg, const char *path)
|
||||
{
|
||||
fprintf(stderr, "liblo server error %d in path %s : %s\n", num, path, msg);
|
||||
fprintf(stderr, "liblo server error %d in path %s : %s\n",
|
||||
num, path, msg);
|
||||
exit(1);
|
||||
}
|
||||
/* ----------------------------------------------------------------- */
|
||||
|
||||
int handler(const char *path, const char *types, lo_arg ** argv,
|
||||
/* ------------------------------------------------------- */
|
||||
int 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;
|
||||
|
@ -12,7 +12,6 @@ lo_address loana;
|
||||
int foo;
|
||||
|
||||
fprintf(stderr, "sending to %s:%s\n", REMOTE_HOST, REMOTE_PORT);
|
||||
|
||||
loana = lo_address_new(REMOTE_HOST, REMOTE_PORT);
|
||||
foo = lo_send(loana, "/demo", "is", 61, "meg, efface !");
|
||||
fprintf(stderr, "got a %d return code ?\n", foo);
|
||||
|
1
code/POV/.gitignore
vendored
Normal file
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
|
||||
. ./fonctions.sh
|
||||
source ./fonctions.sh
|
||||
message "hello world"
|
||||
|
@ -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}
|
||||
|
||||
% ==============================================================
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user