Compare commits
66 Commits
fd3a4b8336
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e823f5d883 | ||
|
|
00db540bbc | ||
|
|
470327b596 | ||
|
|
6790bb95ab | ||
|
|
e27ac13e68 | ||
|
|
e298d6ca5d | ||
|
|
b776f3de8d | ||
|
|
ac1afb5a88 | ||
|
|
a1c0fddd17 | ||
|
|
dfede4a816 | ||
|
|
784b2d04aa | ||
|
|
435b3195d2 | ||
|
|
dfdfa7926e | ||
|
|
6fad79d67c | ||
|
|
9c602777aa | ||
|
|
a1f7d1e0f2 | ||
|
|
2dd4896b6c | ||
|
|
b252bf73a2 | ||
|
|
7ed54fc123 | ||
|
|
48b66b3034 | ||
|
|
2bb29f37e3 | ||
|
|
b67ce482bf | ||
|
|
b98ae9d629 | ||
|
|
615289b57e | ||
|
|
02054433b4 | ||
|
|
5723a754a8 | ||
|
|
7e591fc958 | ||
|
|
3bda7ea69b | ||
|
|
a1b0ffdabb | ||
|
|
16e1d7707a | ||
|
|
716345e270 | ||
|
|
a1df488c58 | ||
|
|
9f129f64d9 | ||
|
|
d96238bca4 | ||
|
|
3ea16fbbc8 | ||
|
|
f7d11b4178 | ||
|
|
28933d542c | ||
|
|
0ee9005885 | ||
|
|
eda5044c35 | ||
|
|
0b3e6d1517 | ||
|
|
7ee4eb0930 | ||
|
|
57973a0bc7 | ||
|
|
f35170113d | ||
|
|
61286736e3 | ||
|
|
19e3db36ed | ||
|
|
3fc33f10ea | ||
|
|
f15aad0c2e | ||
|
|
3bd50b2ab5 | ||
|
|
a83761fea8 | ||
|
|
7abf55e44b | ||
|
|
1e175bc6ef | ||
|
|
0707c0192c | ||
|
|
13e00baba5 | ||
|
|
6aaf9de226 | ||
|
|
078d3d6b3a | ||
|
|
97f3cb336d | ||
|
|
ae2f0d965e | ||
|
|
0480a7a73f | ||
|
|
4b438e7f7a | ||
|
|
98334bd25e | ||
|
|
f00a06b0c7 | ||
|
|
f3289fc23c | ||
|
|
f08879204f | ||
|
|
717006e34a | ||
|
|
1541deeff0 | ||
|
|
48beb52b14 |
@@ -4,4 +4,4 @@ Astuces diverses pour utiliser un ordinateur sous Linux...
|
|||||||
|
|
||||||
Un travail à l'évolution (trop) lente.
|
Un travail à l'évolution (trop) lente.
|
||||||
|
|
||||||
* http://la.buvette.org/devel/docs/tetatricks.pdf
|
`pdfbook2 tetatricks.pdf --paper=a4paper --short-edge --no-crop`
|
||||||
|
|||||||
@@ -57,11 +57,35 @@ mais canonique~:
|
|||||||
|
|
||||||
\lstinputlisting{code/Basic/bywater-1.bas}
|
\lstinputlisting{code/Basic/bywater-1.bas}
|
||||||
|
|
||||||
|
Ce qui nous donne à l'exécution~:
|
||||||
|
|
||||||
|
\begin{verbatim}
|
||||||
|
tth@redlady:~/Devel/TetaTricks$ bwbasic code/Basic/bywater-1.bas
|
||||||
|
Bywater BASIC Interpreter/Shell, version 2.20 patch level 2
|
||||||
|
Copyright (c) 1993, Ted A. Campbell
|
||||||
|
Copyright (c) 1995-1997, Jon B. Volkoff
|
||||||
|
|
||||||
|
2 4
|
||||||
|
3 9
|
||||||
|
4 16
|
||||||
|
5 25
|
||||||
|
|
||||||
|
tth@redlady:~/Devel/TetaTricks$
|
||||||
|
\end{verbatim}
|
||||||
|
|
||||||
Première conclusion : affaire à suivre.
|
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}
|
||||||
|
|||||||
14
chap/C.tex
14
chap/C.tex
@@ -26,7 +26,7 @@ Ces paramètres sont fournis par des mécanismes planquées
|
|||||||
dans la soute du système d'exploitation, et n'ont pas
|
dans la soute du système d'exploitation, et n'ont pas
|
||||||
d'importance pour le moment..
|
d'importance pour le moment..
|
||||||
|
|
||||||
\lstinputlisting[language=c]{code/hello.c}
|
\lstinputlisting[language=c]{code/C/hello.c}
|
||||||
|
|
||||||
Un fois passé l'entrée, nous sommes dans la partie active.
|
Un fois passé l'entrée, nous sommes dans la partie active.
|
||||||
Nous appelons à ce moment une fonction de la bibliothèque
|
Nous appelons à ce moment une fonction de la bibliothèque
|
||||||
@@ -53,7 +53,7 @@ un tableau de chaines de caractères contenant ces différents mots.
|
|||||||
|
|
||||||
Ce petit bout de code va nous afficher tout ça~:
|
Ce petit bout de code va nous afficher tout ça~:
|
||||||
|
|
||||||
\lstinputlisting[language=c]{code/arguments.c}
|
\lstinputlisting[language=c]{code/C/arguments.c}
|
||||||
|
|
||||||
Et voici un exemple d'exécution depuis un shell~:\index{shell}
|
Et voici un exemple d'exécution depuis un shell~:\index{shell}
|
||||||
|
|
||||||
@@ -75,6 +75,14 @@ En C, les tableaux commencent toujours à l'indice 0.
|
|||||||
Pour le traitement des options, il faut sauter à
|
Pour le traitement des options, il faut sauter à
|
||||||
la page \pageref{getopt}.
|
la page \pageref{getopt}.
|
||||||
|
|
||||||
|
. . .
|
||||||
|
|
||||||
|
\begin{verbatim}
|
||||||
|
if (config->optind < config->argc)
|
||||||
|
for (int i = config->optind; i < config.argc; ++i)
|
||||||
|
process(config->argv[i]);
|
||||||
|
\end{verbatim}
|
||||||
|
|
||||||
% =========================================================
|
% =========================================================
|
||||||
|
|
||||||
\section{Les variables}
|
\section{Les variables}
|
||||||
@@ -624,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}).
|
||||||
|
|
||||||
|
|||||||
@@ -7,8 +7,8 @@ D'après Wikipédia :
|
|||||||
|
|
||||||
\begin{quote}
|
\begin{quote}
|
||||||
Le DMX512 (Digital Multiplexing) est une norme de transmission de données
|
Le DMX512 (Digital Multiplexing) est une norme de transmission de données
|
||||||
utilisée pour le contrôle de l'éclairage et des effets de scène dans le spectacle
|
utilisée pour le contrôle de l'éclairage et des effets de scène dans le
|
||||||
vivant.
|
spectacle vivant.
|
||||||
|
|
||||||
Le protocole DMX512 (qui utilise généralement une liaison
|
Le protocole DMX512 (qui utilise généralement une liaison
|
||||||
suivant la norme EIA RS 485 et cadencée à 250 kb/s) permet
|
suivant la norme EIA RS 485 et cadencée à 250 kb/s) permet
|
||||||
@@ -26,13 +26,39 @@ appelée une « trame » DMX).
|
|||||||
https://ryderdamen.com/blog/enttec-open-dmx-on-linux/
|
https://ryderdamen.com/blog/enttec-open-dmx-on-linux/
|
||||||
|
|
||||||
% -----------------------------------------------------
|
% -----------------------------------------------------
|
||||||
\section{Enttec OpenDMX}
|
\section{Enttec OpenDMX} \index{OpenDMX} \label{OpenDMX}
|
||||||
|
|
||||||
|
D'après le constructeur :
|
||||||
|
\textsl{
|
||||||
|
The OPEN DMX USB is a DMX widget used to output
|
||||||
|
DMX from a computer. Simply connect it using it’s
|
||||||
|
USB 2.0 Type B port and launch your compatible
|
||||||
|
software.
|
||||||
|
The OPEN DMX USB is discovered as a USB Serial
|
||||||
|
Device or virtual COM Port dependent on the FTDI
|
||||||
|
driver installed on your system.
|
||||||
|
The Open DMX USB’s output is processed directly on
|
||||||
|
the computer’s processor.
|
||||||
|
}
|
||||||
|
|
||||||
|
Nous allon voir ce qu'il en est exactement.
|
||||||
|
Après branchement, essayons d'identifier cette interface.
|
||||||
|
|
||||||
\begin{verbatim}
|
\begin{verbatim}
|
||||||
Bus 001 Device 027: ID 0403:6001
|
Bus 001 Device 027: ID 0403:6001
|
||||||
Future Technology Devices International, Ltd FT232 Serial (UART) IC
|
Future Technology Devices International, Ltd FT232 Serial (UART) IC
|
||||||
\end{verbatim}
|
\end{verbatim}
|
||||||
|
|
||||||
|
\begin{verbatim}
|
||||||
|
SUBSYSTEM=="tty" ATTRS{idVendor}=="0403"
|
||||||
|
ATTRS{idProduct}=="6001" SYMLINK+="phytotron"
|
||||||
|
\end{verbatim}
|
||||||
|
|
||||||
|
Le tout sur une ligne et dans le fichier
|
||||||
|
\texttt{/etc/udev/rules.d/70-emttec-opendmx.rules}.
|
||||||
|
En général une erreur de syntaxe apparait dans
|
||||||
|
\textit{varlogmessage}.
|
||||||
|
|
||||||
look at \texttt{tcsendbreak} !
|
look at \texttt{tcsendbreak} !
|
||||||
|
|
||||||
% -----------------------------------------------------
|
% -----------------------------------------------------
|
||||||
|
|||||||
@@ -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}
|
||||||
|
|||||||
@@ -175,9 +175,10 @@ XXX\index{XXX}
|
|||||||
Pour faire simple, on accède à chaque unité de donnée l'une après l'autre,
|
Pour faire simple, on accède à chaque unité de donnée l'une après l'autre,
|
||||||
comme quand on déroule une bande 6250bpi. Ces unités peuvent être
|
comme quand on déroule une bande 6250bpi. Ces unités peuvent être
|
||||||
(restons simple pour commencer) des lignes entières de texte.
|
(restons simple pour commencer) des lignes entières de texte.
|
||||||
Dans l'ancien temps\footnote{F77 rulz the world}, le format de ces
|
Dans l'ancien temps\footnote{F66 rulz the world} des cartes
|
||||||
lignes devait être précisement structure, avec des largeurs de champs
|
à trous, le format de ces
|
||||||
fixés.
|
lignes devait être précisement structurées, avec des largeurs de champs
|
||||||
|
dans la ligne fixés.
|
||||||
|
|
||||||
% --------------------------------------------------------
|
% --------------------------------------------------------
|
||||||
|
|
||||||
@@ -186,7 +187,51 @@ fixés.
|
|||||||
XXX\index{XXX}
|
XXX\index{XXX}
|
||||||
|
|
||||||
C'est pas pareil : d'abord les enregistrements sont tous de la même
|
C'est pas pareil : d'abord les enregistrements sont tous de la même
|
||||||
taille
|
taille. Ensuite, on y accède par son rang, son numéro d'ordre dans le
|
||||||
|
fichier. Dès que j'ai fini de planter les deux arbres en attente,
|
||||||
|
je vous propose un exemple simple et aussi artificiel que les
|
||||||
|
autres exemples de ce ouvrage.
|
||||||
|
|
||||||
|
% --------------------------------------------------------
|
||||||
|
|
||||||
|
\section{Read et Write}
|
||||||
|
|
||||||
|
Ces deux opérations (la lecture et l'écriture) sont contrôlables
|
||||||
|
par plusieurs choses~: les paramètres à l'ouverture,
|
||||||
|
du fichier, à XXX\index{XXX},
|
||||||
|
et surtout les chaines de format.
|
||||||
|
Bienvenue dans le monde du légendaire champ "Hollerith".
|
||||||
|
|
||||||
|
\subsection{Les chaines de format}
|
||||||
|
|
||||||
|
%
|
||||||
|
% attention, il y a un hack pour l'affichage du mot "format" !
|
||||||
|
% Attention, dans "{\small{\textsc{format}}}", les accolades
|
||||||
|
% exterieures sont indispensables. Affaire à suivre...
|
||||||
|
%
|
||||||
|
La chaine de {\small{\textsc{format}}} contrôle la façon dont les
|
||||||
|
données (nombres, textes ou booleans)
|
||||||
|
seront présentées à l'affiche ou à l'impression.
|
||||||
|
Une bonne connaissance, et une longue pratique des chaines de
|
||||||
|
{\small{\textsc{format}}} est
|
||||||
|
indispendable pour arriver à l'harmonie ultime bien que rigoureuse,
|
||||||
|
de vos interminables listings de chiffres abscons.
|
||||||
|
Nous verrons ensuite comment les utiliser pour faire de la saisie
|
||||||
|
presque (mais pas complètement) utilisable en milieu
|
||||||
|
\textsl{enduser}\index{enduser}.
|
||||||
|
|
||||||
|
Il y a deux manières de les utiliser~: en ligne de l'instruction
|
||||||
|
d'écriture/lecture, ou séparément en tant que chaine de caractères.
|
||||||
|
Pour la clarté de lecture, c'est la seconde que je vais utiliser.
|
||||||
|
|
||||||
|
%
|
||||||
|
%
|
||||||
|
%
|
||||||
|
% INSERT BIG "TODO" HERE.
|
||||||
|
%
|
||||||
|
%
|
||||||
|
\lstinputlisting{code/fortran/printty.f90}
|
||||||
|
|
||||||
|
|
||||||
% --------------------------------------------------------
|
% --------------------------------------------------------
|
||||||
|
|
||||||
@@ -216,7 +261,7 @@ end module
|
|||||||
|
|
||||||
Rien de bien compliqué~:
|
Rien de bien compliqué~:
|
||||||
Un module peut être vu comme une boite qui contient (\texttt{contains})
|
Un module peut être vu comme une boite qui contient (\texttt{contains})
|
||||||
des procédures (\texttt{function} ou \texttt{subroutine},
|
des procédures (\texttt{function} ou \texttt{subroutine}),
|
||||||
et qui sera utilisé avec ce genre de petit programme~:
|
et qui sera utilisé avec ce genre de petit programme~:
|
||||||
|
|
||||||
\begin{lstlisting}
|
\begin{lstlisting}
|
||||||
@@ -228,9 +273,17 @@ program t
|
|||||||
end program
|
end program
|
||||||
\end{lstlisting}
|
\end{lstlisting}
|
||||||
|
|
||||||
|
La première ligne, \texttt{use dummy}, permet d'accéder aux fonctions disponibles
|
||||||
|
dans le module dummy.
|
||||||
|
Elle doit être suivie d'un \texttt{implicit none}, pour une raison à éclaircir.
|
||||||
|
Et ensuite nous pouvons appeler notre procédure.
|
||||||
|
|
||||||
|
Mais les modules permettent de faire bien d'autre choses.
|
||||||
|
|
||||||
% --------------------------------------------------------
|
% --------------------------------------------------------
|
||||||
\section{Random et Aléa}
|
\section{Random et Aléa}
|
||||||
|
|
||||||
|
Tentative de sranding faite à la rache.
|
||||||
La dernière ligne va vous étonner.
|
La dernière ligne va vous étonner.
|
||||||
|
|
||||||
\begin{lstlisting}
|
\begin{lstlisting}
|
||||||
@@ -246,15 +299,22 @@ La dernière ligne va vous étonner.
|
|||||||
dummy = rand()
|
dummy = rand()
|
||||||
\end{lstlisting}
|
\end{lstlisting}
|
||||||
|
|
||||||
|
Mais il y a d'autres manières plus rigoureuses d'utiliser les nombres
|
||||||
|
pseudo-aléàtoires avec le fortan moderne.
|
||||||
|
|
||||||
% --------------------------------------------------------
|
% --------------------------------------------------------
|
||||||
% new Thu 24 Nov 2022 02:27:05 AM CET
|
% new Thu 24 Nov 2022 02:27:05 AM CET
|
||||||
|
|
||||||
\section{Options de gfortran} \index{gfortran}
|
\section{Options de gfortran} \index{gfortran}
|
||||||
|
|
||||||
Comme d'habitude avec gcc\footnote{The Gnu Compiler Collection}, les
|
Comme d'habitude avec gcc\footnote{Giant Complicated Compilords}, les
|
||||||
options sont innombrables. J'ai essayé d'en dégager les plus importantes,
|
options sont innombrables. J'ai essayé d'en dégager les plus importantes,
|
||||||
mais ce ne sont probablement pas les seules.
|
mais ce ne sont probablement pas les seules.
|
||||||
|
|
||||||
|
Pour commencer, la plus obligatoire de toutes ces options est sans contexte
|
||||||
|
le protecteur de base \texttt{-Wall} qui vous protégera de nombreux
|
||||||
|
maléfices.
|
||||||
|
|
||||||
% --------------------------------------------------------
|
% --------------------------------------------------------
|
||||||
|
|
||||||
\section{Images}
|
\section{Images}
|
||||||
@@ -339,7 +399,7 @@ immédiatement garnir de données pertinentes~:
|
|||||||
\end{verbatim}
|
\end{verbatim}
|
||||||
|
|
||||||
Une fois en possession de ces données conceptuelles, que l'on peut
|
Une fois en possession de ces données conceptuelles, que l'on peut
|
||||||
aisément voire comme un cheminement, nous allons demander
|
aisément voir comme un cheminement, nous allons demander
|
||||||
au crayon de se promener sur notre feuille virtuelle en suivant
|
au crayon de se promener sur notre feuille virtuelle en suivant
|
||||||
ce chemin, et enfin de s'arreter de dessiner~:
|
ce chemin, et enfin de s'arreter de dessiner~:
|
||||||
|
|
||||||
|
|||||||
@@ -63,6 +63,10 @@ Vous voilà prévenus, la suite bientôt\dots
|
|||||||
|
|
||||||
% ================================================================
|
% ================================================================
|
||||||
|
|
||||||
|
\section{Les sockets Unix} \index{socket}
|
||||||
|
|
||||||
|
Les sockets de la famille AF\_UNIX sont utilisés pour
|
||||||
|
les communications locales entre applications sur une même machine.
|
||||||
|
|
||||||
% ================================================================
|
% ================================================================
|
||||||
|
|
||||||
|
|||||||
89
chap/OSC.tex
89
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}
|
||||||
@@ -58,19 +98,26 @@ utilise un thread d'écoute qui appelle des
|
|||||||
\textsl{callbacks} préalablement "accrochés",
|
\textsl{callbacks} préalablement "accrochés",
|
||||||
\textsl{hooked} en vrai langue.
|
\textsl{hooked} en vrai langue.
|
||||||
|
|
||||||
\lstinputlisting[language=c]{code/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.
|
||||||
|
|
||||||
\lstinputlisting[language=c]{code/send-osc.c}
|
\lstinputlisting[language=c]{code/OSC/send-osc.c}
|
||||||
|
|
||||||
J'avoue ne pas encore savoir ce que veut bien dire la
|
J'avoue ne pas encore savoir ce que veut bien dire la
|
||||||
valeur de retour.
|
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,6 +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}.
|
||||||
|
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}
|
||||||
|
|
||||||
% ------------------------------------------------------
|
% ------------------------------------------------------
|
||||||
|
|||||||
@@ -9,13 +9,19 @@ gens faire du code en Python,
|
|||||||
certains même font de choses très avancées.
|
certains même font de choses très avancées.
|
||||||
Et beaucoup de ces gens essayent de me convaincre que c'est
|
Et beaucoup de ces gens essayent de me convaincre que c'est
|
||||||
un langage vraiment trop bien, trop moderne, trop dans la
|
un langage vraiment trop bien, trop moderne, trop dans la
|
||||||
\textit{vibe} du devops, battery included, toussa.
|
\textit{vibe} du devops\index{devops}, battery included, toussa.
|
||||||
Quelques uns d'entre eux vont même jusqu'à me parler d'un
|
Quelques uns d'entre eux vont même jusqu'à me parler d'un
|
||||||
certain \textbf{canard} qui faciliterait bien la vie
|
certain \textbf{canard} qui faciliterait bien la vie
|
||||||
des preogrammeurs.
|
des preogrammeurs.
|
||||||
|
|
||||||
Je ne suis pas convaincu.
|
Je ne suis pas convaincu.
|
||||||
|
|
||||||
|
Parce qu'un langage où, si tu remplaces un caractère \textbf{invisible}
|
||||||
|
par un autre caractère tout aussi \textbf{invisible}, le programme
|
||||||
|
ne marche plus, je trouve ça un peu craignos.
|
||||||
|
Bien entendu, certains vont te dire~: « configurer l'éditeur, gna, gna. »
|
||||||
|
mais bon, être dépendant de la conf' d'un éditeur pour que les
|
||||||
|
choses fonctionnent, c'est un peu limite.
|
||||||
|
|
||||||
|
|
||||||
\section{Mais quand même...}
|
\section{Mais quand même...}
|
||||||
@@ -28,3 +34,19 @@ Je ne suis pas convaincu.
|
|||||||
\end{figure}
|
\end{figure}
|
||||||
|
|
||||||
|
|
||||||
|
\section{Quelques trucs}
|
||||||
|
|
||||||
|
On souhaite parfois partager rapidement quelques fichiers sur
|
||||||
|
le réseau local. Avec une de batteries incluses, c'est facile.
|
||||||
|
|
||||||
|
À l'ancienne :
|
||||||
|
|
||||||
|
\begin{verbatim}
|
||||||
|
$ python -m SimpleHTTPServer 9000
|
||||||
|
\end{verbatim}
|
||||||
|
|
||||||
|
Et maintenant :
|
||||||
|
|
||||||
|
\begin{verbatim}
|
||||||
|
$ python3 -m http.server 9000
|
||||||
|
\end{verbatim}
|
||||||
|
|||||||
22
chap/R.tex
22
chap/R.tex
@@ -9,7 +9,7 @@
|
|||||||
|
|
||||||
Je n'ai certainement pas la prétention de vous enseigner
|
Je n'ai certainement pas la prétention de vous enseigner
|
||||||
les arcanes du \textsl{R project},
|
les arcanes du \textsl{R project},
|
||||||
je suis (octobre 2023) en pleine périoe de découverte.
|
je suis (octobre 2023) en pleine période de découverte.
|
||||||
Mais j'ai déja un projet concret en tête, et ce chapitre sera,
|
Mais j'ai déja un projet concret en tête, et ce chapitre sera,
|
||||||
dans un premier temps, composé de mes notes de voyage.
|
dans un premier temps, composé de mes notes de voyage.
|
||||||
|
|
||||||
@@ -29,16 +29,17 @@ Le caractère \texttt{>} est le prompt de R, il vous invite à taper
|
|||||||
des commandes afin qu'il vous explique le sens de la vie.
|
des commandes afin qu'il vous explique le sens de la vie.
|
||||||
On peut définir des variables, leur donner une valeur et faire des calculs
|
On peut définir des variables, leur donner une valeur et faire des calculs
|
||||||
avec ces variables,
|
avec ces variables,
|
||||||
ce qui est bien suffisant pour commencer. Démonstration~:
|
ce qui est bien suffisant pour commencer.
|
||||||
|
Une rapide démonstration~:
|
||||||
|
|
||||||
\begin{verbatim}
|
\begin{verbatim}
|
||||||
> a <- 22
|
> a <- 22
|
||||||
> b <- 7
|
> b <- 7
|
||||||
> a ; b
|
> a ; b
|
||||||
[1] 22
|
[1] 22
|
||||||
[1] 7
|
[1] 7
|
||||||
> a / b
|
> a / b
|
||||||
[1] 3.142857
|
[1] 3.142857
|
||||||
\end{verbatim}
|
\end{verbatim}
|
||||||
|
|
||||||
Les choses semblent simples, nous avons approximé $\pi$.
|
Les choses semblent simples, nous avons approximé $\pi$.
|
||||||
@@ -96,7 +97,7 @@ La magie du shebang\index{shebang}
|
|||||||
Nous disposons d'un fichier SSV
|
Nous disposons d'un fichier SSV
|
||||||
(Space Separated Values)\footnote{C'est nouveau, ça vient de sortir.}
|
(Space Separated Values)\footnote{C'est nouveau, ça vient de sortir.}
|
||||||
provenant d'un système optico-numérique bi-dimensionnel multi-planaire
|
provenant d'un système optico-numérique bi-dimensionnel multi-planaire
|
||||||
(aka Webcam\index{Webcam}).
|
(aka Webcam\index{webcam}).
|
||||||
Et nous voulons en tirer quelques chiffres et graphiques bien
|
Et nous voulons en tirer quelques chiffres et graphiques bien
|
||||||
clinquants,
|
clinquants,
|
||||||
par exemple les éventuels rapports entre le rouge et le bleu.
|
par exemple les éventuels rapports entre le rouge et le bleu.
|
||||||
@@ -226,6 +227,7 @@ vers \LaTeX, peut-on faire de la 3D\index{3D}, \dots
|
|||||||
|
|
||||||
hist(datas\$V3, breaks=50)
|
hist(datas\$V3, breaks=50)
|
||||||
|
|
||||||
|
|
||||||
% ======================================================================
|
% ======================================================================
|
||||||
|
|
||||||
\section{Interface avec l'OS}
|
\section{Interface avec l'OS}
|
||||||
|
|||||||
@@ -47,7 +47,7 @@ Une machine connectée en wifi sur une friboite\footnote{ou le
|
|||||||
Cisco sauvage de la salle d'AG, hein, mais ça ne sera
|
Cisco sauvage de la salle d'AG, hein, mais ça ne sera
|
||||||
pas le même nameserver.} peut facilement
|
pas le même nameserver.} peut facilement
|
||||||
faire translateur d'adresse pour un réseau branché sur
|
faire translateur d'adresse pour un réseau branché sur
|
||||||
son eth, à condition de connaitre les
|
son \texttt{eth}, à condition de connaitre les
|
||||||
incantations magiques
|
incantations magiques
|
||||||
(qui sont ici très linuxisantes) :
|
(qui sont ici très linuxisantes) :
|
||||||
|
|
||||||
@@ -58,7 +58,7 @@ modprobe iptable_nat
|
|||||||
iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE
|
iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE
|
||||||
\end{verbatim}
|
\end{verbatim}
|
||||||
|
|
||||||
Ensuite sur les machines du lan, donc le coté ethernet,
|
Ensuite sur les machines du lan, donc le coté Ethernet,
|
||||||
il faut incanter ce genre de trucs :
|
il faut incanter ce genre de trucs :
|
||||||
|
|
||||||
\begin{verbatim}
|
\begin{verbatim}
|
||||||
|
|||||||
@@ -129,14 +129,16 @@ C'est simple, non ?
|
|||||||
|
|
||||||
%-------------------------------------------------------------------
|
%-------------------------------------------------------------------
|
||||||
|
|
||||||
\section{Le Windowmanager}
|
\section{Le WindowManager}
|
||||||
|
|
||||||
Aka \textbf{WM}.
|
Aka \textbf{WM}\index{WM}.
|
||||||
|
|
||||||
%
|
%
|
||||||
% https://jichu4n.com/posts/how-x-window-managers-work-and-how-to-write-one-part-i/
|
% https://jichu4n.com/posts/how-x-window-managers-work-and-how-to-write-one-part-i/
|
||||||
%
|
%
|
||||||
|
|
||||||
|
Twm, Fvwm, Mwm... nous avons le choix.
|
||||||
|
|
||||||
%-------------------------------------------------------------------
|
%-------------------------------------------------------------------
|
||||||
|
|
||||||
\section{XCB}\index{XCB}
|
\section{XCB}\index{XCB}
|
||||||
|
|||||||
48
chap/bdd.tex
48
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}
|
||||||
|
|
||||||
% ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
% ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||||
|
|
||||||
@@ -76,4 +76,6 @@ Le poids lourd du domaine.
|
|||||||
|
|
||||||
\section{Et le "NoSQL" ?} \index{nosql} \index{troll}
|
\section{Et le "NoSQL" ?} \index{nosql} \index{troll}
|
||||||
|
|
||||||
|
Pour parler de ça, je préfère attendre Vendredi.
|
||||||
|
|
||||||
% ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
% ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||||
|
|||||||
@@ -122,7 +122,7 @@ Comme vous le savez tous, un appel système
|
|||||||
est \textbf{le} moyen de communication qu'utilise un process
|
est \textbf{le} moyen de communication qu'utilise un process
|
||||||
utilisateur pôur demander un service au noyau.
|
utilisateur pôur demander un service au noyau.
|
||||||
|
|
||||||
\lstinputlisting[language=C]{code/hello.c}
|
\lstinputlisting[language=C]{code/C/hello.c}
|
||||||
|
|
||||||
Un exemple canonique, n'est-il pas ? Ce bout de code affichant
|
Un exemple canonique, n'est-il pas ? Ce bout de code affichant
|
||||||
quelque chose à l'écran, il doit bien y avoir un appel au noyau
|
quelque chose à l'écran, il doit bien y avoir un appel au noyau
|
||||||
@@ -196,7 +196,14 @@ Tue Oct 17 08:55:01 CEST 2023
|
|||||||
tth@redlady:~$
|
tth@redlady:~$
|
||||||
\end{verbatim}
|
\end{verbatim}
|
||||||
|
|
||||||
Simple et efficace.
|
Simple et efficace. \textbf{Mais\dots}
|
||||||
|
|
||||||
|
Mais ça ne marche pas à tous les coups comme vous le montre
|
||||||
|
clairement cet exemple. L'utilisation de la fonction
|
||||||
|
\texttt{getenv(3)} est très facilement contournable.
|
||||||
|
|
||||||
|
\lstinputlisting[language=C]{code/C/use_envp.c}
|
||||||
|
|
||||||
|
|
||||||
% ==============================================================
|
% ==============================================================
|
||||||
|
|
||||||
|
|||||||
12
chap/dessin.tex
Normal file
12
chap/dessin.tex
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
\chapter{Dessiner}
|
||||||
|
\label{chap:dessin}
|
||||||
|
|
||||||
|
%
|
||||||
|
% new: Thu Sep 5 18:14:20 UTC 2024
|
||||||
|
%
|
||||||
|
|
||||||
|
% =======================================================================
|
||||||
|
|
||||||
|
\section{xpaint} \index{xpaint}
|
||||||
|
|
||||||
|
% =======================================================================
|
||||||
@@ -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}
|
||||||
@@ -17,10 +22,9 @@ You are deeply attached to your friends and acquaintances.
|
|||||||
tth@plop:~$
|
tth@plop:~$
|
||||||
\end{verbatim}
|
\end{verbatim}
|
||||||
|
|
||||||
Bref, vous voyez le principe : c'est un machin à raconter des
|
Bref, vous voyez le principe : c'est une machine à raconter des
|
||||||
trucs plus ou
|
trucs plus ou
|
||||||
moins aléatoires\footnote{et jamais revenus, il faut bien le
|
moins aléatoires. Il y a tout un tas d'options intéressantes,
|
||||||
préciser.}. Il y a tout un tas d'options intéressantes,
|
|
||||||
la principale étant \texttt{-o} pour avoir les fortunes
|
la principale étant \texttt{-o} pour avoir les fortunes
|
||||||
offensives\index{porn} qui peuvent choquer les âmes
|
offensives\index{porn} qui peuvent choquer les âmes
|
||||||
sensibles.
|
sensibles.
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ gnuplot> splot "cam.indoor" using 2:4:3, "cam.indoor" using 5:7:6
|
|||||||
|
|
||||||
Un exemple réel, issu d'un projet d'élevage d'algues
|
Un exemple réel, issu d'un projet d'élevage d'algues
|
||||||
bio-luminescentes dans un frigo bricolé par une jeune stagiaire
|
bio-luminescentes dans un frigo bricolé par une jeune stagiaire
|
||||||
fort sympathique.
|
fort sympathique avec l'aide du Tetalab\index{tetalab}.
|
||||||
|
|
||||||
Le fichier des données contient cinq champs séparés par des espaces
|
Le fichier des données contient cinq champs séparés par des espaces
|
||||||
ou des tabulations.
|
ou des tabulations.
|
||||||
|
|||||||
@@ -1,56 +1,123 @@
|
|||||||
\chapter{Graphisme}
|
\chapter{Graphisme}
|
||||||
|
\label{chap:graphisme}
|
||||||
|
|
||||||
|
Voici quelques notes en vrac sur divers logiciels
|
||||||
|
ou bibliothèques de fonctions qui permettent
|
||||||
|
de faire des dessins et des images\dots
|
||||||
|
|
||||||
|
Nous verrons ici (dans le désordre) SDL, Povray, Flydraw, Fortran,
|
||||||
|
et peut-être d'autres dans un avenir incertain.
|
||||||
|
Mais il en existe d'autres~:
|
||||||
|
Gnuplot (page \pageref{chap:gnuplot}),
|
||||||
|
\texttt{gif89a} (page \pageref{chap:gif89a}),
|
||||||
|
le dessin (page \pageref{chap:dessin}),
|
||||||
|
les images (page \pageref{chap:image}) et
|
||||||
|
les photos (page \pageref{chap:photos})\dots
|
||||||
|
|
||||||
|
Le sujet est vaste, en fait.
|
||||||
|
|
||||||
|
% ------------------------------------------------
|
||||||
|
% nouveau : Tue Sep 3 11:14:13 UTC 2024
|
||||||
|
|
||||||
|
\section{SDL2} \index{SDL} \label{sdl}
|
||||||
|
|
||||||
|
\begin{quote}
|
||||||
|
Simple DirectMedia Layer est une bibliothèque de développement multiplateforme conçue pour fournir un accès de bas niveau à l'audio, au clavier, à la souris,
|
||||||
|
aux joysticks et à la vidéo (via OpenGL/Direct3D/Metal/Vulkan).
|
||||||
|
\end{quote}
|
||||||
|
|
||||||
|
\textbf{Attention}, à l'heure\footnote{Wed Sep 4 00:40:42 UTC 2024} qu'il est,
|
||||||
|
j'utilise une version assez ancienne\footnote{Mais je vais me soigner\dots},
|
||||||
|
donc
|
||||||
|
ce que vous allez lire à propos de SDL doit être pris avec des pincettes.
|
||||||
|
D'autre part, la version \textbf{3} est sortie depuis un certain temps,
|
||||||
|
mais beaucoup de logiciels n'ont pas encore fait la transition.
|
||||||
|
Nous allons rester pour le moment avec la version 2.
|
||||||
|
|
||||||
|
\subsection{Afficher la version}
|
||||||
|
|
||||||
|
Et puisque on parle de version, ils ont pris une approche vraiment
|
||||||
|
interessante (dont je devrais d'ailleurs m'inspirer) dans le cas de
|
||||||
|
l'édition de lien dynamique.
|
||||||
|
|
||||||
|
\begin{verbatim}
|
||||||
|
SDL_version compiled;
|
||||||
|
SDL_version linked;
|
||||||
|
SDL_VERSION(&compiled);
|
||||||
|
SDL_GetVersion(&linked);
|
||||||
|
printf("We compiled against SDL version %d.%d.%d ...\n",
|
||||||
|
compiled.major, compiled.minor, compiled.patch);
|
||||||
|
printf("But we linked against SDL version %d.%d.%d.\n",
|
||||||
|
linked.major, linked.minor, linked.patch);
|
||||||
|
\end{verbatim}
|
||||||
|
|
||||||
|
|
||||||
Voici quelques notes en vrac sur divers logiciels qui permettent
|
|
||||||
de faire des dessins et des images.\dots
|
|
||||||
|
|
||||||
% ------------------------------------------------
|
% ------------------------------------------------
|
||||||
|
|
||||||
\section{Flydraw}\index{Flydraw}
|
\subsection{Mon premier "bug"}
|
||||||
|
|
||||||
Comment faire des dessins en écrivant des lignes de codes ?
|
C'est en essayant quelques fonctions de la SDL dans le but de faire
|
||||||
|
un dégradé\footnote{On a toujours besoin de dégrader...} de couleurs
|
||||||
|
que je suis tombé sur une anomalie que je n'arrive pas (encore)
|
||||||
|
a m'expliquer.
|
||||||
|
|
||||||
\begin{quote}
|
\lstinputlisting[language=c]{code/SDL2/strangebug.c}
|
||||||
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}
|
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.
|
||||||
|
|
||||||
Pour le moment, les résultats ne sont pas encourageants~:
|
% ------------------------------------------------
|
||||||
\begin{verbatim}
|
%
|
||||||
tth@fubar:~/Documents/TetaTricks/code$ flydraw < dessiner.fly
|
% Fri Sep 27 14:09:45 UTC 2024
|
||||||
bad_parms -100000
|
% la section sur flydram est partie dans les unused
|
||||||
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 ?
|
||||||
@@ -58,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}
|
||||||
|
|
||||||
% ------------------------------------------------
|
% ------------------------------------------------
|
||||||
|
|
||||||
@@ -206,7 +300,7 @@ material {
|
|||||||
|
|
||||||
\section{Avec Fortran}
|
\section{Avec Fortran}
|
||||||
|
|
||||||
plplot\index{plplot} est la piste à explorer.
|
plplot\index{plplot} est une des pistes à explorer.
|
||||||
|
|
||||||
|
|
||||||
% ------------------------------------------------
|
% ------------------------------------------------
|
||||||
|
|||||||
@@ -20,8 +20,9 @@ foo = read(joy_fd, &js, sizeof(struct js_event));
|
|||||||
|
|
||||||
Quand les choses ne se passent pas comme prévu, quand il
|
Quand les choses ne se passent pas comme prévu, quand il
|
||||||
y a des accrocs dans le plan, que le résultat n'est
|
y a des accrocs dans le plan, que le résultat n'est
|
||||||
qu'une video totalement noire de 17 minutes.
|
qu'une video totalement noire de 17 minutes, que des
|
||||||
dmesg, lshw, lsusb, lspci\dots
|
octets incongrus arrivent depuis l'Arduino.
|
||||||
|
dmesg, lscpu, lshw, lsusb, lspci\dots
|
||||||
|
|
||||||
% -----------------------------------------------------------
|
% -----------------------------------------------------------
|
||||||
% new: Fri Sep 22 11:13:36 UTC 2023
|
% new: Fri Sep 22 11:13:36 UTC 2023
|
||||||
@@ -37,6 +38,20 @@ on some PowerPC machines (PowerMac G4 is known to work).
|
|||||||
\end{quote}
|
\end{quote}
|
||||||
|
|
||||||
% -----------------------------------------------------------
|
% -----------------------------------------------------------
|
||||||
|
\subsection{lscpu} \index{lscpu}
|
||||||
|
|
||||||
|
\begin{verbatim}
|
||||||
|
tth@redlady:~/Desktop$ lscpu --all --extended
|
||||||
|
CPU NODE SOCKET CORE L1d:L1i:L2:L3 ONLINE MAXMHZ MINMHZ
|
||||||
|
0 0 0 0 0:0:0:0 yes 3800.0000 1600.0000
|
||||||
|
1 0 0 1 1:1:1:0 yes 3800.0000 1600.0000
|
||||||
|
2 0 0 2 2:2:2:0 yes 3800.0000 1600.0000
|
||||||
|
3 0 0 3 3:3:3:0 yes 3800.0000 1600.0000
|
||||||
|
tth@redlady:~/Desktop$
|
||||||
|
\end{verbatim}
|
||||||
|
|
||||||
|
% -----------------------------------------------------------
|
||||||
|
|
||||||
\section{Ports série}
|
\section{Ports série}
|
||||||
\index{rs232} \label{rs232}
|
\index{rs232} \label{rs232}
|
||||||
|
|
||||||
@@ -50,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>
|
||||||
@@ -76,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~:
|
||||||
@@ -83,13 +105,14 @@ Connecter un Minitel\index{MINITEL}
|
|||||||
pour dialoguer avec Ulla Trentsixquinze ? Brancher un
|
pour dialoguer avec Ulla Trentsixquinze ? Brancher un
|
||||||
Sportster 14400 pour retrouver Fidonet\index{Fidonet} ?
|
Sportster 14400 pour retrouver Fidonet\index{Fidonet} ?
|
||||||
Discuter avec un équipement avionnique ? Rediriger
|
Discuter avec un équipement avionnique ? Rediriger
|
||||||
l'impression d'un MSX\index{MSX} vers Cups\index{cups} ?
|
l'impression d'un MSX\index{MSX} ou d'un Alice 32
|
||||||
|
vers Cups\index{cups} ?
|
||||||
|
|
||||||
Les possibilités sont infinies. C'est votre imagination qui
|
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
|
||||||
@@ -98,6 +121,23 @@ périphérique \texttt{/dev/parport}
|
|||||||
|
|
||||||
Question: comment faire du \textsl{bitbanging} ?
|
Question: comment faire du \textsl{bitbanging} ?
|
||||||
|
|
||||||
|
% -----------------------------------------------------------
|
||||||
|
\section{USB} \index{USB} \label{USB}
|
||||||
|
|
||||||
|
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}
|
||||||
|
|
||||||
% -----------------------------------------------------------
|
% -----------------------------------------------------------
|
||||||
|
|
||||||
\section{Disques durs}
|
\section{Disques durs}
|
||||||
@@ -158,8 +198,8 @@ idéal, la prédiction des pannes.
|
|||||||
|
|
||||||
\textsl{Check and repair a Linux filesystem}
|
\textsl{Check and repair a Linux filesystem}
|
||||||
|
|
||||||
Fortune du jour : \textsf{Franchement, là, je préfère que ce soit vous qui prenne la
|
Fortune du jour : \textsf{Franchement, là, je préfère que ce soit vous qui prenne
|
||||||
tronçonneuse, parce que là, c'est pas beau à voir\dots}
|
la tronçonneuse, parce que là, c'est pas beau à voir\dots}
|
||||||
|
|
||||||
% -----------------------------------------------------------
|
% -----------------------------------------------------------
|
||||||
\subsection{tune2fs}\index{tune2fs}
|
\subsection{tune2fs}\index{tune2fs}
|
||||||
@@ -167,6 +207,26 @@ tronçonneuse, parce que là, c'est pas beau à voir\dots}
|
|||||||
\textsl{Adjust tunable filesystem parameters on ext2/ext3/ext4
|
\textsl{Adjust tunable filesystem parameters on ext2/ext3/ext4
|
||||||
filesystems}\footnote{You can tune a fs, but you can't tuna fish}.
|
filesystems}\footnote{You can tune a fs, but you can't tuna fish}.
|
||||||
|
|
||||||
|
% -----------------------------------------------------------
|
||||||
|
% nouveau 2 juin 2024
|
||||||
|
% basé sur mes tentatives pour faire marcher l'interface
|
||||||
|
% Enttec OpenDMX USB
|
||||||
|
|
||||||
|
\section{udev} \index{udev} \label{udev}
|
||||||
|
|
||||||
|
\begin{quote}
|
||||||
|
udev supplies the system software with device events, manages
|
||||||
|
permissions of device nodes and may create additional symlinks in the
|
||||||
|
/dev directory, or renames network interfaces. The kernel usually just
|
||||||
|
assigns unpredictable device names based on the order of discovery.
|
||||||
|
Meaningful symlinks or network device names provide a way to reliably
|
||||||
|
identify devices based on their properties or current configuration.
|
||||||
|
\end{quote}
|
||||||
|
|
||||||
|
Avant de rentre dans les détails, nous pouvons aller voir un exemple
|
||||||
|
concret en page \pageref{OpenDMX} où nous atriburons un nom fixe
|
||||||
|
à une interface USB.
|
||||||
|
|
||||||
% -----------------------------------------------------------
|
% -----------------------------------------------------------
|
||||||
|
|
||||||
\section{Sensors} \index{sensors}
|
\section{Sensors} \index{sensors}
|
||||||
@@ -195,7 +255,7 @@ int retcode;
|
|||||||
struct ifreq req;
|
struct ifreq req;
|
||||||
|
|
||||||
#if DEBUG_LEVEL
|
#if DEBUG_LEVEL
|
||||||
fprintf(stderr, ">>> %s \"%s\" to %p\n", \
|
fprintf(stderr, ">>> %s ( \"%s\" to %p )\n", \
|
||||||
__func__, ifname, p_flags);
|
__func__, ifname, p_flags);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -225,8 +285,7 @@ if (retcode < 0)
|
|||||||
close(fd);
|
close(fd);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
#if DEBUG_LEVEL
|
#if DEBUG_LEVEL /* display the result */
|
||||||
/* display the result */
|
|
||||||
fprintf(stderr, "flags = 0x%04x\n", req.ifr_flags);
|
fprintf(stderr, "flags = 0x%04x\n", req.ifr_flags);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -241,7 +300,6 @@ Hélas, je n'ai pas pu trop tester ce truc sur beaucoup de systèmes,
|
|||||||
et je vous propose de ne pas trop lui faire confiance pour une
|
et je vous propose de ne pas trop lui faire confiance pour une
|
||||||
application critique...
|
application critique...
|
||||||
|
|
||||||
|
|
||||||
% -----------------------------------------------------------
|
% -----------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,8 @@
|
|||||||
|
|
||||||
Le traitement des images est un art à part entière. Nous allons
|
Le traitement des images est un art à part entière. Nous allons
|
||||||
voir quelques grands classiques de la catégorie pas du tout
|
voir quelques grands classiques de la catégorie pas du tout
|
||||||
interactif. Le genre de machin que l'on peut ranger au fond
|
interactif.
|
||||||
|
Le genre de machin que l'on peut ranger au fond
|
||||||
d'un script shell pour le réutiliser la semaine prochaine.
|
d'un script shell pour le réutiliser la semaine prochaine.
|
||||||
|
|
||||||
\begin{itemize}
|
\begin{itemize}
|
||||||
@@ -27,7 +28,8 @@ et leurs interactions parfois troublantes\dots
|
|||||||
Il y a plusieurs binaires dans le paquet : \texttt{convert} pour
|
Il y a plusieurs binaires dans le paquet : \texttt{convert} pour
|
||||||
la plupart des traitements,
|
la plupart des traitements,
|
||||||
\texttt{display} et \texttt{animate} pour visualiser des images,
|
\texttt{display} et \texttt{animate} pour visualiser des images,
|
||||||
\texttt{identify} pour en lire les méta-données.
|
\texttt{identify} pour en lire les méta-données,
|
||||||
|
\texttt{montage} pour assembler plusieurs images.
|
||||||
|
|
||||||
Ils partagent un certain nombre d'options communes.
|
Ils partagent un certain nombre d'options communes.
|
||||||
Certains d'entre eux peuvent avoir un effet destructif%
|
Certains d'entre eux peuvent avoir un effet destructif%
|
||||||
@@ -190,6 +192,10 @@ On peut aussi procéder autrement, avec les outils PNM\index{PNM} :
|
|||||||
pngtopnm \$negatif | ppmtotga -rgb -norle > \$picz
|
pngtopnm \$negatif | ppmtotga -rgb -norle > \$picz
|
||||||
\end{verbatim}
|
\end{verbatim}
|
||||||
|
|
||||||
|
Un volontaire dans la salle pour faire des tests de performance ?
|
||||||
|
Ma première hypothèse est que le résultat des mesures peut
|
||||||
|
être assez surprenant.
|
||||||
|
|
||||||
% ------------------------------------------
|
% ------------------------------------------
|
||||||
|
|
||||||
\subsection{identify}\index{identify}
|
\subsection{identify}\index{identify}
|
||||||
@@ -311,7 +317,7 @@ for ((y=0; y<250; y++)) {
|
|||||||
|
|
||||||
Comment faire un \textsl{resize} avec NetPBM ?
|
Comment faire un \textsl{resize} avec NetPBM ?
|
||||||
Est-il nécessaire d'apprendre la bibliothèque de fonctions
|
Est-il nécessaire d'apprendre la bibliothèque de fonctions
|
||||||
\texttt{libnetpbm}\footnote{Réponse: oui.} ?
|
\texttt{libnetpbm}\footnote{Réponse: certainement oui.} ?
|
||||||
|
|
||||||
% -------------------------------------------------------------------
|
% -------------------------------------------------------------------
|
||||||
|
|
||||||
@@ -340,11 +346,11 @@ use it heavily.
|
|||||||
\end{quote}
|
\end{quote}
|
||||||
|
|
||||||
\begin{verbatim}
|
\begin{verbatim}
|
||||||
tiffcp combines one or more files created according to the Tag Image
|
tiffcp combines one or more files created according to the Tag Image
|
||||||
File Format, Revision 6.0 into a single TIFF file. Because the output
|
File Format, Revision 6.0 into a single TIFF file. Because the output
|
||||||
file may be compressed using a different algorithm than the input
|
file may be compressed using a different algorithm than the input
|
||||||
files, tiffcp is most often used to convert between different compres‐
|
files, tiffcp is most often used to convert between different compres‐
|
||||||
sion schemes.
|
sion schemes.
|
||||||
\end{verbatim}
|
\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}.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
% ===============================================================
|
||||||
|
% ===============================================================
|
||||||
@@ -2,8 +2,9 @@
|
|||||||
\index{man}
|
\index{man}
|
||||||
\label{chap:manpages}
|
\label{chap:manpages}
|
||||||
|
|
||||||
|
Guidelines for writing man pages can be found in \texttt{mdoc(7)}.
|
||||||
|
|
||||||
man is the system's manual pager. Each page argument given to man is
|
\texttt{man} is the system's manual pager. Each page argument given to man is
|
||||||
normally the name of a program, utility or function. The manual page
|
normally the name of a program, utility or function. The manual page
|
||||||
associated with each of these arguments is then found and displayed. A
|
associated with each of these arguments is then found and displayed. A
|
||||||
section, if provided, will direct man to look only in that section of
|
section, if provided, will direct man to look only in that section of
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
\chapter{Photographie}
|
\chapter{Photographie}
|
||||||
|
\label{chap:photos}
|
||||||
\index{Photo}
|
\index{Photo}
|
||||||
|
|
||||||
Le domaine de la photographie numérique est vaste.
|
Le domaine de la photographie numérique est vaste.
|
||||||
@@ -37,7 +38,7 @@ connexion possibles, la liste des appareils gérés, et l'éventuel
|
|||||||
appareil connecté, si il est sous tension, bien entendu :)
|
appareil connecté, si il est sous tension, bien entendu :)
|
||||||
|
|
||||||
\begin{verbatim}
|
\begin{verbatim}
|
||||||
tth@redlady:~/Photos/Canon600D/2022-12$ gphoto2 --auto-detect
|
tth@redlady:~/Photos$ gphoto2 --auto-detect
|
||||||
Model Port
|
Model Port
|
||||||
----------------------------------------------------------
|
----------------------------------------------------------
|
||||||
Canon EOS 600D usb:002,005
|
Canon EOS 600D usb:002,005
|
||||||
|
|||||||
@@ -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.
|
||||||
@@ -12,6 +13,8 @@ avec une interface Web et/ou des outils en cli..
|
|||||||
Les aspects matériels de la connexion seront vus dans un chapitre adéquat,
|
Les aspects matériels de la connexion seront vus dans un chapitre adéquat,
|
||||||
en page \pageref{portparallele} pour le port \texttt{//},
|
en page \pageref{portparallele} pour le port \texttt{//},
|
||||||
et \pageref{rs232} pour le serial.
|
et \pageref{rs232} pour le serial.
|
||||||
|
L'omniprésente connectivité USB\index{USB} demande peut-être
|
||||||
|
un chapitre à part entière.
|
||||||
|
|
||||||
%-----------------------------------------------------------------
|
%-----------------------------------------------------------------
|
||||||
|
|
||||||
@@ -33,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}
|
||||||
|
|
||||||
@@ -73,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'.
|
||||||
@@ -86,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}
|
||||||
|
|||||||
@@ -1,7 +1,28 @@
|
|||||||
\chapter{scripting}
|
\chapter{scripting}
|
||||||
|
|
||||||
XXX
|
Qu'est-ce que le \textsl{scripting} ?
|
||||||
|
C'est l'art de coller entre eux divers outils logiciels
|
||||||
|
afin de réaliser une tache donnée.
|
||||||
|
Le "collage" est fait par un \textbf{script},
|
||||||
|
lequel est un fichier texte, écrit dans divers
|
||||||
|
langages (plus ou moins spécifiques) et qui sera lu et exécuté
|
||||||
|
par un interpréteur.
|
||||||
|
|
||||||
|
Je ne vais pas revenir sur l'art du shebang, si vous ne
|
||||||
|
le connaissez pas, c'est expliqué page \pageref{shebang}.
|
||||||
|
En bref, c'est la manière dont le script sélectionne
|
||||||
|
le bon interpréteur lors de son lancement.
|
||||||
|
|
||||||
|
Quels sont les langages courrament utilisés pour faire du
|
||||||
|
script ? Il y a une bonne poignée de réponses à ça.
|
||||||
|
La première étant souvent « Use The Shell ! »,
|
||||||
|
et la seconde « tu as songé à awk ? »,
|
||||||
|
ce qui est tout aussi sensé.
|
||||||
|
Le shell étant dégrossi page \pageref{chap:shell},
|
||||||
|
passons directement au langage Awk.
|
||||||
|
|
||||||
|
|
||||||
|
% ===============================================================
|
||||||
\section{Awk} \index{Awk}
|
\section{Awk} \index{Awk}
|
||||||
|
|
||||||
Awk est un langage de programmation crée
|
Awk est un langage de programmation crée
|
||||||
@@ -9,9 +30,12 @@ par Aho, Kernighan, and Weinberger%
|
|||||||
\footnote{The AWK Programming Language, Alfred V. Aho,
|
\footnote{The AWK Programming Language, Alfred V. Aho,
|
||||||
Brian W. Kernighan, Peter J. Weinberger, Addison-Wesley, 1988.
|
Brian W. Kernighan, Peter J. Weinberger, Addison-Wesley, 1988.
|
||||||
ISBN 0-201-07981-X. }.
|
ISBN 0-201-07981-X. }.
|
||||||
|
Son originalité vient du fait qu'il a été conçu principalement
|
||||||
|
pour traiter ligne par ligne des fichiers tabulés.
|
||||||
|
C'est son domaine de prédilection, autant en profiter.
|
||||||
|
|
||||||
Quelques \textsl{oneliners} de bon aloi pour vous donner
|
Quelques \textsl{oneliners} de bon aloi pour vous donner
|
||||||
une idée du langage\dots
|
une idée des possibilités du langage\dots
|
||||||
|
|
||||||
\begin{verbatim}
|
\begin{verbatim}
|
||||||
cat { print $0 } or just 1
|
cat { print $0 } or just 1
|
||||||
@@ -32,15 +56,17 @@ on va procéder en quelque sorte « demi-dalle par demi-dalle ».
|
|||||||
\subsection{Un exemple simple}
|
\subsection{Un exemple simple}
|
||||||
|
|
||||||
À partir d'un jeu de données structurées, nous allons générer un
|
À partir d'un jeu de données structurées, nous allons générer un
|
||||||
fichier \texttt{.inc} contenant un objet pour Povray\index{Povray}.
|
fichier \texttt{.inc} contenant la description en
|
||||||
|
SDL\index{SDL}\footnote{SDL: Scene Description Language}
|
||||||
|
d'un objet pour Povray\index{Povray}.
|
||||||
Un cas d'école : un élément par ligne, les valeurs sont séparées par
|
Un cas d'école : un élément par ligne, les valeurs sont séparées par
|
||||||
des espaces.
|
des espaces et/ou des tabulations.
|
||||||
|
|
||||||
\lstinputlisting[]{code/awk/dataset}
|
\lstinputlisting[]{code/awk/dataset}
|
||||||
|
|
||||||
Ces données sont les coordonnées \textsc{x,y,z} et le rayon d'une
|
Ces données sont les coordonnées \textsc{x,y,z} et le rayon d'une
|
||||||
petite collection de bubulles. Pratiquement, une représentation
|
petite collection de bubulles. Pratiquement, une représentation
|
||||||
sommaire d'une sphère de povray\footnote{SDL keyword: \texttt{Sphere}}.
|
sommaire d'une sphère de povray.
|
||||||
|
|
||||||
Le fichier à générer est en trois partie : l'en-tête, la liste
|
Le fichier à générer est en trois partie : l'en-tête, la liste
|
||||||
des bubulles\index{bubulle} et l'en-pied, ce qui est bien raccord
|
des bubulles\index{bubulle} et l'en-pied, ce qui est bien raccord
|
||||||
@@ -49,7 +75,129 @@ le voir ici-même~:
|
|||||||
|
|
||||||
\lstinputlisting[]{code/awk/mkunion.awk}
|
\lstinputlisting[]{code/awk/mkunion.awk}
|
||||||
|
|
||||||
|
La première ligne est pour le traditionnel
|
||||||
|
\textsl{shebang}\index{shebang},
|
||||||
|
avec l'option \texttt{-f} pour que le contenu du script soit lu
|
||||||
|
par l'interpréteur Awk dès son lancement.
|
||||||
|
Ensuite, nous trouvons trois blocs délimités par des accolades,
|
||||||
|
deux d'entre eux étant précédés d'une « instruction ».
|
||||||
|
|
||||||
% XXX to be continued XXX
|
Le premier bloc, avec le mot-clef \textsc{BEGIN}, est exécuté
|
||||||
|
avant la lecture de la première ligne des données en entrée.
|
||||||
|
Ce qui est le bon moment pour initialiser des variables.
|
||||||
|
Nous l'utilisons pour créer l'en-tête d'un descripteur
|
||||||
|
d'objet pour Povray.
|
||||||
|
|
||||||
|
Le second bloc (sans label) est exécuté pour chaque ligne lue.
|
||||||
|
Et c'est ici que nous trouverons la magie.
|
||||||
|
La ligne lue depuis l'entrée a été découpée selon le
|
||||||
|
séparateur FS, et les tranches sont connues sous les noms
|
||||||
|
de \$1, \$2, ... \$N (la ligne entière étant \$0)
|
||||||
|
que nous utilisons dans la génération de la bubulle.
|
||||||
|
|
||||||
|
Et le troisième bloc (\textsc{END}) sera exécuté à la fin, après
|
||||||
|
la lecture et le traitement du dernier enregistrement,
|
||||||
|
qui est dans notre cas la dernière ligne.
|
||||||
|
|
||||||
|
Et à l'exécution~:
|
||||||
|
|
||||||
|
\begin{verbatim}
|
||||||
|
tth@redlady:~/Devel/TetaTricks/code/awk$ ./mkunion.awk < dataset
|
||||||
|
#declare Bubulles = object
|
||||||
|
{
|
||||||
|
union {
|
||||||
|
sphere { <17.000000, 9.000000, 4.000000>, 1.500000 }
|
||||||
|
sphere { <11.000000, 0.800000, 2.300000>, 0.989000 }
|
||||||
|
sphere { <0.000000, 0.000000, 0.000000>, 1.000000 }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// 3 bubulles
|
||||||
|
\end{verbatim}
|
||||||
|
|
||||||
% ===============================================================
|
% ===============================================================
|
||||||
|
\subsection{Mais ce n'est pas tout !}
|
||||||
|
|
||||||
|
Ce premier exemple nous a montré comment, avec quelques
|
||||||
|
lignes de code facile à comprendre, transformer des
|
||||||
|
données et faire quelques calculs avec ces données.
|
||||||
|
Nous avons vu le découpage de la ligne d'entrée, mais
|
||||||
|
ce n'est pas tout, je suis passé très vite sur ce sont
|
||||||
|
ces "labels" dont j'ai parlé.
|
||||||
|
|
||||||
|
Ce ne sont absolument pas des labels, ni des mot-clefs,
|
||||||
|
mais quelque chose de bien plus puissant.
|
||||||
|
C'est le mécanisme qui permet de sélectionner les lignes
|
||||||
|
sur lesquelles nous voulons appliquer un traitement.
|
||||||
|
|
||||||
|
Nous avons déja vu \textsc{BEGIN} et \textsc{END},
|
||||||
|
pour lancer du code avant-le-début et/ou après-la-fin.
|
||||||
|
Mais nous pouvons mettre des bouts de code donnant un résultat
|
||||||
|
booléen, oui/non, qui conditionnera l'exécution du
|
||||||
|
bloc de code ainsi
|
||||||
|
préfixé\footnote{J'ai l'impression de pas être très clair ?},
|
||||||
|
ce qui nous donnera des possibilités de filtrage
|
||||||
|
surpuissantes.
|
||||||
|
|
||||||
|
Par exemple, nous ne voulons pas de bubulle trop
|
||||||
|
petite, il suffit de précéder le second bloc de l'exemple
|
||||||
|
déja vu par un test sur la taille qui est dans
|
||||||
|
le quatrième champ du fichier d'entrée~:
|
||||||
|
|
||||||
|
\begin{verbatim}
|
||||||
|
$4 > 0.999 {
|
||||||
|
printf(" sphere { <%f, %f, %f>, %f }\n", \
|
||||||
|
$1, $2, $3, $4 )
|
||||||
|
}
|
||||||
|
\end{verbatim}
|
||||||
|
|
||||||
|
Vous comprenez maintenant les deux plus importantes choses
|
||||||
|
que l'on peut trouver dans Awk (/me fan).
|
||||||
|
|
||||||
|
XXX to be continued \index{XXX}
|
||||||
|
|
||||||
|
% ===============================================================
|
||||||
|
\subsection{Définir une fonction}
|
||||||
|
|
||||||
|
Bien, nous savons maintenant générer des bubulles avec un
|
||||||
|
filtrage sur la taille, mais nous voudrions maintenant procéder
|
||||||
|
à des calculs sur les données que nous lisons.
|
||||||
|
Deux choix s'offrent à nous, soit faire ça directement dans
|
||||||
|
le deuxième bloc, soit utiliser un sous-programme dédié.
|
||||||
|
Pour des raisons aussi bien didactiques que de bon sens,
|
||||||
|
nous allons opter pour la seconde solution.
|
||||||
|
|
||||||
|
Mais voyons d'abord la syntaxe d'une fonction, avec en prime
|
||||||
|
une petite astuce: si vous voulez utiliser Awk dans devoir
|
||||||
|
lui fournir de données en entrée, c'est simple, mettez tout
|
||||||
|
dans le bloc \textsc{BEGIN}.
|
||||||
|
|
||||||
|
\lstinputlisting[]{code/awk/demo-func.awk}
|
||||||
|
|
||||||
|
\begin{verbatim}
|
||||||
|
tth@redlady:~/Devel/TetaTricks/code/awk$ ./demo-func.awk
|
||||||
|
---- demo fonction ----
|
||||||
|
sin(1.000000) = 0.841471
|
||||||
|
distance from center = 0.707107
|
||||||
|
\end{verbatim}
|
||||||
|
|
||||||
|
|
||||||
|
La deuxième fonction demande quelques explications, puisqu'elle
|
||||||
|
met en œuvre un « awkisme » de bon aloi.
|
||||||
|
En effet, Awk ne connait pas les variables locales à une fonction,
|
||||||
|
c'est-à-dire connues seulement à l'intérieur de celle-ci.
|
||||||
|
|
||||||
|
% ===============================================================
|
||||||
|
|
||||||
|
\subsection{Les variables}
|
||||||
|
|
||||||
|
Et puisque on en parle...
|
||||||
|
|
||||||
|
% ===============================================================
|
||||||
|
|
||||||
|
\subsection{Pattern filtering} \index{pattern}
|
||||||
|
|
||||||
|
Wesh, regexp.
|
||||||
|
|
||||||
|
% ===============================================================
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
211
chap/shell.tex
211
chap/shell.tex
@@ -39,24 +39,47 @@ Thu Oct 5 00:53:01 UTC 2023
|
|||||||
tth@redlady:~$
|
tth@redlady:~$
|
||||||
\end{verbatim}
|
\end{verbatim}
|
||||||
|
|
||||||
|
Ces ordres peuvent être des commandes internes à l'interpréteur,
|
||||||
|
d'autres seront des commandes fournies par des exécutables
|
||||||
|
externes. Pour le début, la différence n'est pas importante.
|
||||||
|
|
||||||
|
Mais comment le shell fait-il pour retrouver tous les outils
|
||||||
|
dont il a besoin ? Simplement, il connait une liste
|
||||||
|
d'endroits où aller chercher, une sorte de chemin de recherche,
|
||||||
|
c'est d'ailleurs pour ça que cette liste
|
||||||
|
est nommée \texttt{PATH}\index{PATH}.
|
||||||
|
Il est très simple de la visualiser~:
|
||||||
|
\begin{verbatim}
|
||||||
|
tth@redlady:~/Devel/TetaTricks$ echo $PATH
|
||||||
|
/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
|
||||||
|
\end{verbatim}
|
||||||
|
|
||||||
% ==============================================================
|
% ==============================================================
|
||||||
|
|
||||||
\section{Langage}\index{script}
|
\section{Un langage}\index{script}
|
||||||
|
|
||||||
Le shell est aussi, et surtout, un langage de programmation, parfois
|
Le shell est aussi, et surtout, un langage de programmation
|
||||||
appelé \textsl{glue-language} parce qu'il permet de "coller" ensemble
|
à part entière.
|
||||||
plusieurs opérations élémentaires, d'abord avec ses opérateurs internes
|
Il est parfois appelé \textsl{glue-language} parce qu'il permet de
|
||||||
et ensuite l'utilisation d'outils
|
"coller" ensemble plusieurs opérations élémentaires, d'abord avec
|
||||||
extérieurs\footnote{Grep, Sed, Awk, BwBasic...}
|
ses opérateurs internes et ensuite par l'utilisation d'outils
|
||||||
|
extérieurs\footnote{Grep, Sed, Awk, BwBasic, Sort, Gfortran...}
|
||||||
divers. C'est \textsl{très} efficace.
|
divers. C'est \textsl{très} efficace.
|
||||||
|
|
||||||
|
Nous allons commencer par voir quelques notions liées à
|
||||||
|
la création d'un script exécutable, puis d'un enchainement
|
||||||
|
de commandes.
|
||||||
|
Nous passerons ensuite aux structures de contrôle, comme les
|
||||||
|
tests et les boucles.
|
||||||
|
|
||||||
% --------------------------------------------------------------
|
% --------------------------------------------------------------
|
||||||
|
|
||||||
\subsection{Le \textsc{shebang}} \index{shebang}
|
\subsection{Le shebang} \index{shebang} \label{shebang}
|
||||||
|
|
||||||
Le shebang, c'est ce couple de caractères \texttt{\#!} qui apparait
|
Le shebang, c'est ce couple de caractères \texttt{\#!} qui apparait
|
||||||
au tout début d'un script shell.
|
au tout début d'un script shell.
|
||||||
Le 'she' est l'abréviation de 'sharp', coupant en français. C'est
|
Le 'she' est l'abréviation de 'sharp', qui veut dire 'coupant' en français.
|
||||||
|
C'est
|
||||||
probablement une allusion aux cotés tranchants du \texttt{\#}.
|
probablement une allusion aux cotés tranchants du \texttt{\#}.
|
||||||
Quand au 'bang', c'est le point d'exclamation après l'explosion
|
Quand au 'bang', c'est le point d'exclamation après l'explosion
|
||||||
de la forkbomb.
|
de la forkbomb.
|
||||||
@@ -67,6 +90,26 @@ octets. Si les deux premiers sont \textsl{0x23 0x21}, le reste
|
|||||||
de la première ligne sera interprété pour lancer un autre exécutable,
|
de la première ligne sera interprété pour lancer un autre exécutable,
|
||||||
avec un traitement particuler des options.
|
avec un traitement particuler des options.
|
||||||
|
|
||||||
|
Et à ce momment-là des explications, on entend Serguey qui hurle
|
||||||
|
du fond de la salle « schmod777 en force ! ».
|
||||||
|
Et il a bien raison. En effet, ce fichier doit être vu comme
|
||||||
|
possiblement exécutable selon les droits 'X' qu'il a.
|
||||||
|
Il y a une commande prévue à cet effet, dont nous allons voir
|
||||||
|
l'usage à l'instant, avec la création d'un script complet~:
|
||||||
|
|
||||||
|
\begin{verbatim}
|
||||||
|
tth@redlady:~$ echo '#!/bin/bash' > foo.sh
|
||||||
|
tth@redlady:~$ echo 'printf "%x" 85 >> foo.sh
|
||||||
|
tth@redlady:~$ chmod u+x ./foo.sh
|
||||||
|
tth@redlady:~$ ./foo.sh
|
||||||
|
55
|
||||||
|
tth@redlady:~$ cat foo.sh
|
||||||
|
#!/bin/bash
|
||||||
|
printf "%x\n" 85
|
||||||
|
tth@redlady:~$
|
||||||
|
\end{verbatim}
|
||||||
|
|
||||||
|
|
||||||
% ==============================================================
|
% ==============================================================
|
||||||
\section{Le pipeline}\index{pipeline}\label{pipeline}
|
\section{Le pipeline}\index{pipeline}\label{pipeline}
|
||||||
|
|
||||||
@@ -84,43 +127,100 @@ 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,
|
||||||
|
le \textsc{goto}\index{goto} calculé, la sélection,
|
||||||
|
\textsl{make your choice}.
|
||||||
|
|
||||||
% --------------------------------------------------------------
|
% --------------------------------------------------------------
|
||||||
|
|
||||||
\subsection {Les tests}
|
\subsection {Les tests}
|
||||||
|
|
||||||
Deux éléments sont ils-égaux ?
|
Deux éléments sont ils égaux ? Et d'abord, ces deux éléments
|
||||||
|
sont-ils comparables ?
|
||||||
|
|
||||||
% --------------------------------------------------------------
|
% --------------------------------------------------------------
|
||||||
|
|
||||||
\subsection {Les boucles}
|
\subsection {Les boucles}
|
||||||
|
|
||||||
|
Exemple très simple~:
|
||||||
|
|
||||||
|
\begin{verbatim}
|
||||||
|
for foo in A B C D
|
||||||
|
do
|
||||||
|
echo ${foo}
|
||||||
|
done
|
||||||
|
\end{verbatim}
|
||||||
|
|
||||||
|
Autre exemple, un peu moins simple~:
|
||||||
|
|
||||||
|
\begin{verbatim}
|
||||||
|
for foo in $(seq 0 37 133)
|
||||||
|
do
|
||||||
|
printf "foo = %3d\n" ${foo}
|
||||||
|
done
|
||||||
|
\end{verbatim}
|
||||||
|
|
||||||
% ==============================================================
|
% ==============================================================
|
||||||
|
|
||||||
\section{Les fonctions}
|
\section{Les fonctions}
|
||||||
|
|
||||||
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/
|
||||||
@@ -128,37 +228,49 @@ Et comment les utiliser~:
|
|||||||
\section{Heredoc}
|
\section{Heredoc}
|
||||||
|
|
||||||
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
|
||||||
|
(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}.
|
||||||
|
|
||||||
\lstinputlisting{code/shell/heredoc.sh}
|
\lstinputlisting{code/shell/heredoc.sh}
|
||||||
|
|
||||||
\begin{verbatim}
|
Après le \textsl{shebang}, nous avons la création de la variable
|
||||||
tth@redlady:~/Devel/TetaTricks$ code/shell/heredoc.sh
|
pour le titre,
|
||||||
|
et ensuite l'appel à Gnuplot avec la redirection
|
||||||
|
\texttt{$<<$ \_\_EOC\_\_} % bug affichage "<<"
|
||||||
|
qui va envoyer sur le stdin de Gnuplot la suite du
|
||||||
|
script shell (des commandes gnuplot), jusque au marqueur de fin,
|
||||||
|
qui est \texttt{\_\_EOC\_\_} dans notre cas.
|
||||||
|
|
||||||
Here Doc
|
... et la démonstration~:
|
||||||
|
|
||||||
1 +--------------------------------------------------------------------+
|
\begin{verbatim}
|
||||||
| +** *** + + + + |
|
tth@redlady:~/Devel/TetaTricks/code/shell$ ./heredoc.sh
|
||||||
0.8 |-+.......**..........:.**.......:..........:.........sin(x).*******-|
|
|
||||||
| ** : : * : : : : |
|
Here Doc (9946)
|
||||||
0.6 |-+....**..:..........:....**....:..........:..........:..........:+-|
|
|
||||||
| * : : * : : : : |
|
1 +-------------------------------------------------------------+
|
||||||
0.4 |-+.**.....:..........:.......*..:..........:..........:..........:+-|
|
| + + + + + + + + + |
|
||||||
| * : : * : : : : |
|
| 0.7*sin(x) ******* |
|
||||||
0.2 |-*........:..........:.........**..........:..........:..........:+-|
|
| ****** ****** |
|
||||||
|* : : * : : : |
|
0.5 |-+ ** ** ** ** +-|
|
||||||
0 |-+........:..........:..........:**........:..........:..........:+-|
|
| ** * * ** |
|
||||||
| : : : * : : : *|
|
| ** ** ** ** |
|
||||||
-0.2 |-+........:..........:..........:..**......:..........:..........:*-|
|
| ** ** ** ** |
|
||||||
| : : : * : : * |
|
|* ** ** *|
|
||||||
-0.4 |-+........:..........:..........:.....*....:..........:........**:+-|
|
0 |-+ * * +-|
|
||||||
| : : : * : : * : |
|
| ** ** |
|
||||||
-0.6 |-+........:..........:..........:.......**.:..........:.....**...:+-|
|
| * * |
|
||||||
| : : : *: : ** : |
|
| * * |
|
||||||
-0.8 |-+........:..........:..........:..........**.........:..**......:+-|
|
-0.5 |-+ ** ** +-|
|
||||||
| + + + + *** +** + |
|
| *** *** |
|
||||||
-1 +--------------------------------------------------------------------+
|
| ******* |
|
||||||
0 1 2 3 4 5 6
|
| |
|
||||||
|
| + + + + + + + + + |
|
||||||
|
-1 +-------------------------------------------------------------+
|
||||||
|
0 1 2 3 4 5 6 7 8 9
|
||||||
\end{verbatim}
|
\end{verbatim}
|
||||||
|
|
||||||
Je pense que l'exemple est assez parlant.
|
Je pense que l'exemple est assez parlant.
|
||||||
@@ -175,6 +287,23 @@ Quelle sont les différences entre \texttt{en\_US.UTF-8} et
|
|||||||
\texttt{C.UTF-8} ?
|
\texttt{C.UTF-8} ?
|
||||||
|
|
||||||
% ==============================================================
|
% ==============================================================
|
||||||
|
% https://wiki.fiat-tux.fr/books/d%C3%A9veloppement/page/ajouter-des-couleurs-a-ses-scripts-shell
|
||||||
|
|
||||||
|
\section{Écrire en couleur} \index{ANSI} \index{escape}
|
||||||
|
|
||||||
|
\begin{verbatim}
|
||||||
|
BLACK='\033[0;30m'
|
||||||
|
RED='\033[0;31m'
|
||||||
|
GREEN='\033[0;32m'
|
||||||
|
YELLOW='\033[0;33m'
|
||||||
|
BLUE='\033[0;34m'
|
||||||
|
PURPLE='\033[0;35m'
|
||||||
|
CYAN='\033[0;36m'
|
||||||
|
WHITE='\033[0;37m'
|
||||||
|
\end{verbatim}
|
||||||
|
|
||||||
|
% ==============================================================
|
||||||
|
|
||||||
\section{Questions à voir}
|
\section{Questions à voir}
|
||||||
|
|
||||||
\begin{itemize}
|
\begin{itemize}
|
||||||
|
|||||||
28
chap/son.tex
28
chap/son.tex
@@ -2,10 +2,19 @@
|
|||||||
\label{chap:son}
|
\label{chap:son}
|
||||||
|
|
||||||
Abordons maintenant un sujet complexe :
|
Abordons maintenant un sujet complexe :
|
||||||
le son en général,
|
le son en général, et en particulier avec Linux.
|
||||||
|
Vous pouvez aussi regarder
|
||||||
la musique (p. \pageref{chap:musique}) et la
|
la musique (p. \pageref{chap:musique}) et la
|
||||||
synthèse de sons (p. \pageref{chap:modular}).
|
synthèse de sons (p. \pageref{chap:modular}).
|
||||||
|
|
||||||
|
Complexe, parce que, il faut bien se le dire
|
||||||
|
entre nous, je me permet d'affirmer avec vigueur que la gestion du son
|
||||||
|
dans Linux est horriblement compliquée, pour ne pas dire
|
||||||
|
totalement bordélique.
|
||||||
|
C'est un empilement de couches logicielles, chacune destinée à
|
||||||
|
un usage particulier, et qui passent leur temps à se marcher
|
||||||
|
sur les pieds.
|
||||||
|
|
||||||
%------------------------------------------------------------------
|
%------------------------------------------------------------------
|
||||||
|
|
||||||
\section{ALSA}
|
\section{ALSA}
|
||||||
@@ -33,6 +42,8 @@ Ensuite, nous avons \texttt{aplay} et \texttt{arecord},
|
|||||||
qui permettent d'écouter et d'enregistrer les sets de
|
qui permettent d'écouter et d'enregistrer les sets de
|
||||||
James Lewis\footnote{Que ça, c'est de la super noise !}.
|
James Lewis\footnote{Que ça, c'est de la super noise !}.
|
||||||
|
|
||||||
|
Ils partagent beaucoup d'options communes.
|
||||||
|
|
||||||
\subsection{arecord}
|
\subsection{arecord}
|
||||||
|
|
||||||
Si vous avez plusieurs cartes son, la sélection du
|
Si vous avez plusieurs cartes son, la sélection du
|
||||||
@@ -48,6 +59,13 @@ arecord -D plughw:CARD=Snowball,DEV=0 -v -r 22050 foo.wav
|
|||||||
arecord -D plughw:CARD=H4,DEV=0 -v -c 2 -f S16_LE -r 44100 foo.wav
|
arecord -D plughw:CARD=H4,DEV=0 -v -c 2 -f S16_LE -r 44100 foo.wav
|
||||||
\end{verbatim}
|
\end{verbatim}
|
||||||
|
|
||||||
|
\subsection{aplay} \index{aplay}
|
||||||
|
|
||||||
|
C'est le pendant de arecord pour écouter des fichiers sonores.
|
||||||
|
Avec pas mal d'options communes.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
\subsection{Du code...}
|
\subsection{Du code...}
|
||||||
|
|
||||||
\begin{verbatim}
|
\begin{verbatim}
|
||||||
@@ -129,8 +147,8 @@ serveur de stream comme Icecast\index{icecast}
|
|||||||
Libsndfile est essentiellement une très complète bibliothèque
|
Libsndfile est essentiellement une très complète bibliothèque
|
||||||
de lecture et écriture de fichiers sons.
|
de lecture et écriture de fichiers sons.
|
||||||
Elle permet de gérer facilement un nombre
|
Elle permet de gérer facilement un nombre
|
||||||
considérable de formats de fichiers\footnote{Mais ceci est une autre
|
considérable de formats de fichiers,
|
||||||
histoire, que nous verrons peut-être un de ces jours\dots}.
|
que nous verrons peut-être un de ces jours\dots.
|
||||||
|
|
||||||
Elle arrive avec une floppée d'outils en ligne de
|
Elle arrive avec une floppée d'outils en ligne de
|
||||||
commande, dont certains sont assez performants.
|
commande, dont certains sont assez performants.
|
||||||
@@ -164,11 +182,11 @@ https://www.xiph.org/ao/doc/drivers.html
|
|||||||
Pour choisr comment et vers quelle prise physique libao va envoyer
|
Pour choisr comment et vers quelle prise physique libao va envoyer
|
||||||
le son, il y a deux choix à faire. La partie logicielle d'une part
|
le son, il y a deux choix à faire. La partie logicielle d'une part
|
||||||
(aixs, oss, alsa, jack, sndio\dots)
|
(aixs, oss, alsa, jack, sndio\dots)
|
||||||
et la partie matérielle (jack standard, casque audio USB\dots).
|
et la partie matérielle (jack 3.5 standard, casque audio USB\dots).
|
||||||
|
|
||||||
%------------------------------------------------------------------
|
%------------------------------------------------------------------
|
||||||
|
|
||||||
\section{Portaudio} \label{Portaudio} \index{Portaudio}
|
\section{Portaudio} \label{Portaudio} \index{portaudio}
|
||||||
|
|
||||||
Une suggestion de Wargreen pour avancer un peu dans la construction
|
Une suggestion de Wargreen pour avancer un peu dans la construction
|
||||||
de ma DAW\footnote{Digital Audio Workstation, aka machine à sons}
|
de ma DAW\footnote{Digital Audio Workstation, aka machine à sons}
|
||||||
|
|||||||
3
chap/systemd.tex
Normal file
3
chap/systemd.tex
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
\chapter{systemd}
|
||||||
|
\label{chap:systemd}
|
||||||
|
|
||||||
3
chap/systemd.text
Normal file
3
chap/systemd.text
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
\chapter{systemd}
|
||||||
|
\label{chap:systemd}
|
||||||
|
|
||||||
@@ -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}
|
||||||
|
|
||||||
@@ -33,19 +37,20 @@ condimentum ante in metus iaculis quis congue diam commodo.
|
|||||||
|
|
||||||
%-------------------------------------------------------------
|
%-------------------------------------------------------------
|
||||||
|
|
||||||
\section{roff}
|
\section{La famille \texttt{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
|
||||||
|
|
||||||
53
chap/unused/iodine.tex
Normal file
53
chap/unused/iodine.tex
Normal file
@@ -0,0 +1,53 @@
|
|||||||
|
% ==============================================================
|
||||||
|
\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...
|
||||||
|
% ==============================================================
|
||||||
|
|
||||||
|
|
||||||
@@ -62,7 +62,6 @@ Il existe bien une alternative, mais je n'ai pas encore essayé~:
|
|||||||
\# Write out 20 png format frames from a video starting at 3 minutes, 46 seconds.
|
\# Write out 20 png format frames from a video starting at 3 minutes, 46 seconds.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Tu peux générer les images de transition avec
|
Tu peux générer les images de transition avec
|
||||||
ImageMagick\index{ImageMagick} :
|
ImageMagick\index{ImageMagick} :
|
||||||
\texttt{convert a.png b.png -alpha set -channel A
|
\texttt{convert a.png b.png -alpha set -channel A
|
||||||
@@ -149,8 +148,6 @@ OMFG! Il manque le son.
|
|||||||
% mais où ai-je bien pu trouver ça ?
|
% mais où ai-je bien pu trouver ça ?
|
||||||
%
|
%
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
\begin{verbatim}
|
\begin{verbatim}
|
||||||
read -p "*** Press Enter to start recording ***"
|
read -p "*** Press Enter to start recording ***"
|
||||||
"$FFMPEGBIN" \
|
"$FFMPEGBIN" \
|
||||||
@@ -224,11 +221,11 @@ Et avec du \textbf{Zenitram} dedans \textit{:)}
|
|||||||
\section{MPV} \index{MPV}
|
\section{MPV} \index{MPV}
|
||||||
|
|
||||||
\begin{quote}
|
\begin{quote}
|
||||||
mpv is a media player based on MPlayer and mplayer2. It supports a wide
|
mpv is a media player based on MPlayer and mplayer2. It supports a wide
|
||||||
variety of video file formats, audio and video codecs, and subtitle
|
variety of video file formats, audio and video codecs, and subtitle
|
||||||
types. Special input URL types are available to read input from a vari‐
|
types. Special input URL types are available to read input from a variety
|
||||||
ety of sources other than disk files. Depending on platform, a variety
|
of sources other than disk files. Depending on platform, a variety
|
||||||
of different video and audio output methods are supported.
|
of different video and audio output methods are supported.
|
||||||
\end {quote}
|
\end {quote}
|
||||||
|
|
||||||
Un avantage de Mpv sur ses camarades (Mplayer, Ffplay\dots) est évident
|
Un avantage de Mpv sur ses camarades (Mplayer, Ffplay\dots) est évident
|
||||||
@@ -244,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}
|
||||||
|
|
||||||
% --------------------------------------------------------------------
|
% --------------------------------------------------------------------
|
||||||
|
|
||||||
|
|||||||
@@ -21,6 +21,10 @@ image.
|
|||||||
|
|
||||||
\textsl{Video For Linux, second edition.}
|
\textsl{Video For Linux, second edition.}
|
||||||
|
|
||||||
|
%
|
||||||
|
% PLEASE EXPLAIN !
|
||||||
|
%
|
||||||
|
|
||||||
\begin{verbatim}
|
\begin{verbatim}
|
||||||
tth@delirium:~$ v4l2-ctl --list-formats-ext
|
tth@delirium:~$ v4l2-ctl --list-formats-ext
|
||||||
ioctl: VIDIOC_ENUM_FMT
|
ioctl: VIDIOC_ENUM_FMT
|
||||||
@@ -43,6 +47,45 @@ Il faut certainement passer par une suite d'appels
|
|||||||
\texttt{ioctl}\index{ioctl} après ouverture du device,
|
\texttt{ioctl}\index{ioctl} après ouverture du device,
|
||||||
mais la documentation est difficile à \textsl{greper}.
|
mais la documentation est difficile à \textsl{greper}.
|
||||||
|
|
||||||
|
% --------------------------------------------------------------------
|
||||||
|
% nouveau : Tue Sep 3 11:14:13 UTC 2024
|
||||||
|
|
||||||
|
\section{libwebcam} \index{libwebcam}
|
||||||
|
|
||||||
|
\begin{quote}
|
||||||
|
The Webcam Library libwebcam is designed to simplify
|
||||||
|
the development of webcam applications, primarily on Linux but
|
||||||
|
with an option to be ported to other platforms, in particular
|
||||||
|
Solaris. It realizes part of what the unwritten Video4Linux user
|
||||||
|
space library was always supposed to be: an easy to use library
|
||||||
|
that shields its users from many of the difficulties and problems
|
||||||
|
of using the V4L2 API directly.
|
||||||
|
\end{quote}
|
||||||
|
|
||||||
|
% --------------------------------------------------------------------
|
||||||
|
% nouveau du Tue Sep 17 08:03:49 UTC 2024
|
||||||
|
|
||||||
|
\section{UVC} \index{UVC}
|
||||||
|
|
||||||
|
|
||||||
|
\begin{quote}
|
||||||
|
L'USB video device class (aussi appelé USB video class abrégé en UVC)
|
||||||
|
est un protocole de gestion de périphériques électroniques vidéo via
|
||||||
|
les ports de type USB\index{USB}.
|
||||||
|
Il permet de gérer les flux vidéo dans différents encodages, les images fixes,
|
||||||
|
ainsi que le contrôle des appareils qui le permettent.
|
||||||
|
\end{quote}
|
||||||
|
|
||||||
|
|
||||||
|
Le jour\footnote{Lundi 17 septembre 2024} même
|
||||||
|
où je me penche sur cette techno, premier souci~:
|
||||||
|
\textsl{Le pilote pour les WebCams UVC
|
||||||
|
– standard utilisé pour les caméras USB modernes –
|
||||||
|
n’est pas encore au point et n’est pas inclus dans les
|
||||||
|
versions publiées de Haiku.}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
% --------------------------------------------------------------------
|
% --------------------------------------------------------------------
|
||||||
|
|
||||||
\section{GameBoy camera}
|
\section{GameBoy camera}
|
||||||
@@ -81,18 +124,21 @@ fonctionne et le rendu ressemble.
|
|||||||
\index{vgrabbj}
|
\index{vgrabbj}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
D'après la manpage :
|
D'après la manpage :
|
||||||
« \textit{
|
« \textit{%
|
||||||
vgrabbj is a program that will grab images from any v4l-capable device
|
vgrabbj is a program that will grab images from any v4l-capable device
|
||||||
which supports one of the rgb24, rgb32, yuv420, yuv420p, yuyv, or
|
which supports one of the rgb24, rgb32, yuv420, yuv420p, yuyv, or
|
||||||
yuv422 palettes and saves the image as a .jpg, .png, or .pnm file.
|
yuv422 palettes and saves the image as a .jpg, .png, or .pnm file.
|
||||||
} »
|
} »
|
||||||
|
|
||||||
Quelques options à connaitre : \texttt{-S} échange des
|
Quelques options à connaitre :
|
||||||
deux composantes R et B; \texttt{-s <device>} affiche
|
\texttt{-S} échange des
|
||||||
les capacités du périphérique v4l\index{v4l}.
|
deux composantes R et B (parfois utile avec des caméras \textit{noname});
|
||||||
|
\texttt{-s <device>} affiche
|
||||||
|
les capacités du périphérique v4l\index{v4l} que l'on sélectionne
|
||||||
|
avec \texttt{-d /dev/vidz0}.
|
||||||
|
|
||||||
|
Il y a plus de choses à dire, avec un exemple concret. XXX\index{XXX}
|
||||||
|
|
||||||
% --------------------------------------------------------------------
|
% --------------------------------------------------------------------
|
||||||
\section{Cheese}
|
\section{Cheese}
|
||||||
|
|||||||
@@ -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,4 +1,6 @@
|
|||||||
10 CLEAR
|
10 CLEAR
|
||||||
20 FOR I=1 TO 10
|
20 FOR I=2 TO 5
|
||||||
30 PRINT I, I*I
|
30 PRINT I, I*I
|
||||||
40 NEXT I
|
40 NEXT I
|
||||||
|
50 SYSTEM
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
1
code/C/.gitignore
vendored
1
code/C/.gitignore
vendored
@@ -1,3 +1,4 @@
|
|||||||
fgets-simple
|
fgets-simple
|
||||||
demo-strtok
|
demo-strtok
|
||||||
packtest
|
packtest
|
||||||
|
use_envp
|
||||||
|
|||||||
@@ -2,7 +2,16 @@
|
|||||||
# exemples pour le chapitre sur le C
|
# exemples pour le chapitre sur le C
|
||||||
# new Sat Feb 11 12:06:34 CET 2023
|
# new Sat Feb 11 12:06:34 CET 2023
|
||||||
|
|
||||||
all: no-op slowprint fgets-simple packtest
|
|
||||||
|
all: no-op slowprint fgets-simple packtest use_envp
|
||||||
|
|
||||||
|
# simplified version of the canonical first C program
|
||||||
|
hello: hello.c Makefile
|
||||||
|
gcc -Wall $< -o $@
|
||||||
|
|
||||||
|
# please show me the command line
|
||||||
|
arguments: arguments.c Makefile
|
||||||
|
gcc -Wall $< -o $@
|
||||||
|
|
||||||
no-op: no-op.c Makefile
|
no-op: no-op.c Makefile
|
||||||
gcc -Wall $< -o $@
|
gcc -Wall $< -o $@
|
||||||
@@ -19,3 +28,8 @@ demo-strtok: demo-strtok.c Makefile
|
|||||||
# added Wed Mar 27 10:01:41 UTC 2024
|
# added Wed Mar 27 10:01:41 UTC 2024
|
||||||
packtest: packtest.c
|
packtest: packtest.c
|
||||||
gcc -Wall $< -o $@
|
gcc -Wall $< -o $@
|
||||||
|
|
||||||
|
# added Thu Aug 8 13:44:58 UTC 2024
|
||||||
|
use_envp: use_envp.c Makefile
|
||||||
|
gcc -Wall $< -o $@
|
||||||
|
|
||||||
|
|||||||
16
code/C/use_envp.c
Normal file
16
code/C/use_envp.c
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
/* using envp for fun and profit */
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
int main(int argc, char *argv[], char *envp[])
|
||||||
|
{
|
||||||
|
char *cptr;
|
||||||
|
int idx = 0;
|
||||||
|
cptr = envp[idx];
|
||||||
|
while ( NULL != (cptr=envp[idx]) ) {
|
||||||
|
fprintf(stderr, "envp[%d] %p --> %s\n",
|
||||||
|
idx, cptr, cptr);
|
||||||
|
idx++;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
@@ -10,23 +10,9 @@ ex_curses: ex_curses.c Makefile
|
|||||||
thread-demo: thread-demo.c Makefile
|
thread-demo: thread-demo.c Makefile
|
||||||
gcc -Wall -pthread $< -o $@
|
gcc -Wall -pthread $< -o $@
|
||||||
|
|
||||||
hello: hello.c Makefile
|
|
||||||
gcc -Wall $< -o $@
|
|
||||||
|
|
||||||
arguments: arguments.c Makefile
|
|
||||||
gcc -Wall $< -o $@
|
|
||||||
|
|
||||||
voirenv: voirenv.c Makefile
|
voirenv: voirenv.c Makefile
|
||||||
gcc -Wall $< -o $@
|
gcc -Wall $< -o $@
|
||||||
|
|
||||||
#------------- OSC -----------------------
|
|
||||||
|
|
||||||
osc: send-osc listen-osc
|
|
||||||
|
|
||||||
send-osc: send-osc.c Makefile
|
|
||||||
gcc -Wall $< -llo -o $@
|
|
||||||
listen-osc: listen-osc.c Makefile
|
|
||||||
gcc -Wall $< -llo -o $@
|
|
||||||
|
|
||||||
#------------- IPC -----------------------
|
#------------- IPC -----------------------
|
||||||
|
|
||||||
|
|||||||
9
code/OSC/Makefile
Normal file
9
code/OSC/Makefile
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
#------------- OSC -----------------------
|
||||||
|
|
||||||
|
osc: send-osc listen-osc
|
||||||
|
|
||||||
|
send-osc: send-osc.c Makefile
|
||||||
|
gcc -Wall $< -llo -o $@
|
||||||
|
|
||||||
|
listen-osc: listen-osc.c Makefile
|
||||||
|
gcc -Wall $< -llo -o $@
|
||||||
0
code/OSC/README.md
Normal file
0
code/OSC/README.md
Normal file
48
code/OSC/listen-osc.c
Normal file
48
code/OSC/listen-osc.c
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
/* LISTEN OSC */
|
||||||
|
|
||||||
|
#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);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
/* ------------------------------------------------------- */
|
||||||
|
int handler(const char *path, const char *types, lo_arg **argv,
|
||||||
|
int argc, void *data, void *udata)
|
||||||
|
{
|
||||||
|
static int event_number = 1;
|
||||||
|
|
||||||
|
printf("------ event #%d :\n", event_number++);
|
||||||
|
printf("\tpath '%s' types '%s' argc %d\n",
|
||||||
|
path, types, argc);
|
||||||
|
|
||||||
|
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;
|
||||||
|
int count = 0;
|
||||||
|
|
||||||
|
st = lo_server_thread_new(LOCAL_PORT, error);
|
||||||
|
lo_server_thread_add_method(st, "/demo", "is", handler, signature);
|
||||||
|
lo_server_thread_start(st);
|
||||||
|
|
||||||
|
for (;;) {
|
||||||
|
fprintf(stderr, "%6d I'm alive\n", count++); sleep(10);
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
@@ -11,8 +11,9 @@ int main(int argc, char *argv[])
|
|||||||
lo_address loana;
|
lo_address loana;
|
||||||
int foo;
|
int foo;
|
||||||
|
|
||||||
|
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, "/dev/kmem", "is", 61, "meg, efface !");
|
foo = lo_send(loana, "/demo", "is", 61, "meg, efface !");
|
||||||
fprintf(stderr, "foo %d\n", foo);
|
fprintf(stderr, "got a %d return code ?\n", foo);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
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** !!!
|
||||||
8
code/Perl/getip.pl
Executable file
8
code/Perl/getip.pl
Executable file
@@ -0,0 +1,8 @@
|
|||||||
|
#! /usr/bin/perl
|
||||||
|
use strict;
|
||||||
|
use LWP::UserAgent ();
|
||||||
|
my $ua = LWP::UserAgent->new(agent => "curl");
|
||||||
|
my $url = "https://ifconfig.io";
|
||||||
|
my $req = HTTP::Request->new('GET' => $url);
|
||||||
|
my $res = $ua->simple_request($req);
|
||||||
|
print($res->content());
|
||||||
10
code/Perl/listurls.pl
Executable file
10
code/Perl/listurls.pl
Executable file
@@ -0,0 +1,10 @@
|
|||||||
|
#!/usr/bin/perl
|
||||||
|
use strict;
|
||||||
|
use LWP::Simple;
|
||||||
|
use HTML::Parser;
|
||||||
|
|
||||||
|
my $page = get "https://tetalab.org";
|
||||||
|
|
||||||
|
my $parser = HTML::Parser->new;
|
||||||
|
$parser->parse($page);
|
||||||
|
|
||||||
1
code/SDL2/.gitignore
vendored
Normal file
1
code/SDL2/.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
strangebug
|
||||||
4
code/SDL2/Makefile
Normal file
4
code/SDL2/Makefile
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
|
||||||
|
|
||||||
|
strangebug: strangebug.c Makefile
|
||||||
|
gcc -Wall $< -lSDL2 -o $@
|
||||||
11
code/SDL2/README.md
Normal file
11
code/SDL2/README.md
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
# Simple DirectMedia Layer
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
The *[Simple DirectMedia Layer](https://libsdl.org/)
|
||||||
|
is a cross-platform development library designed
|
||||||
|
to provide low level access to audio, keyboard, mouse, joystick, and
|
||||||
|
graphics hardware via OpenGL/Direct3D/Metal/Vulkan.*
|
||||||
|
|
||||||
|
Paf, premier essai, [premier souci](strangebug.md) **:)**
|
||||||
|
|
||||||
BIN
code/SDL2/picz/strangebug.png
Normal file
BIN
code/SDL2/picz/strangebug.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 2.9 KiB |
47
code/SDL2/strangebug.c
Normal file
47
code/SDL2/strangebug.c
Normal file
@@ -0,0 +1,47 @@
|
|||||||
|
/*
|
||||||
|
* Strange Bug ?
|
||||||
|
*
|
||||||
|
* gcc -Wall strangebug.c -lSDL2 -o strangebug
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <SDL2/SDL.h>
|
||||||
|
|
||||||
|
int main(int argc, char *argv[])
|
||||||
|
{
|
||||||
|
SDL_Window *win;
|
||||||
|
SDL_Renderer *rend;
|
||||||
|
int foo, idx, idy;
|
||||||
|
|
||||||
|
foo = SDL_CreateWindowAndRenderer(256, 256,
|
||||||
|
SDL_WINDOW_SHOWN, &win, &rend);
|
||||||
|
if (foo) {
|
||||||
|
fprintf(stderr,
|
||||||
|
"Err %d CreateWindowAndRenderer : %s",
|
||||||
|
foo, SDL_GetError());
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
SDL_SetRenderDrawColor(rend, 255, 0, 0, 0);
|
||||||
|
SDL_RenderClear(rend);
|
||||||
|
SDL_RenderPresent(rend);
|
||||||
|
|
||||||
|
for (idx=0; idx<256; idx++) {
|
||||||
|
for (idy=0; idy<256; idy++) {
|
||||||
|
SDL_SetRenderDrawColor(rend,
|
||||||
|
127, idx, idy, 0);
|
||||||
|
SDL_RenderDrawPoint(rend, idx, idy);
|
||||||
|
}
|
||||||
|
SDL_RenderPresent(rend);
|
||||||
|
// SDL_Delay(50); /* Is the bug here ? */
|
||||||
|
}
|
||||||
|
SDL_RenderPresent(rend);
|
||||||
|
sleep(30);
|
||||||
|
|
||||||
|
SDL_DestroyRenderer(rend);
|
||||||
|
SDL_DestroyWindow(win);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
17
code/SDL2/strangebug.md
Normal file
17
code/SDL2/strangebug.md
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
# `strangebug`, ou le bug étrange
|
||||||
|
|
||||||
|
Pour mes premiers pas dans la sdl, j'ai voulu faire un gradient de couleur
|
||||||
|
dans une petite fenêtre, quelque chose de vraiment simple, me diriez-vous,
|
||||||
|
mais qui cache une chose étrange...
|
||||||
|
|
||||||
|
La version que j'ai utilisée pour ça (et qui est <u>très</u> ancienne) est
|
||||||
|
la 2.0.9 et j'ai beau me creuser la tête, je ne vois pas d'explication *:)*
|
||||||
|
|
||||||
|
Voici le [Code source](strangebug.c). Si vous décommentez la ligne
|
||||||
|
marquée, seul une colonne sur deux est correctement tracée,
|
||||||
|
comme le montre cette capture d'écran :
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
*Please explain that ...*
|
||||||
|
|
||||||
0
code/awk/README.md
Normal file
0
code/awk/README.md
Normal file
20
code/awk/demo-func.awk
Executable file
20
code/awk/demo-func.awk
Executable file
@@ -0,0 +1,20 @@
|
|||||||
|
#!/usr/bin/awk -f
|
||||||
|
BEGIN {
|
||||||
|
print "---- demo fonction ----"
|
||||||
|
print_sinus(1.0)
|
||||||
|
print_dist(0.5, 0.5, 0.0)
|
||||||
|
}
|
||||||
|
|
||||||
|
# the simple version
|
||||||
|
function print_sinus ( value )
|
||||||
|
{
|
||||||
|
printf "sin(%f) = %f\n", value, sin(value)
|
||||||
|
}
|
||||||
|
|
||||||
|
# version with local variables.
|
||||||
|
function print_dist(x, y, z, dist)
|
||||||
|
{
|
||||||
|
dist = sqrt(x*x + y*y + z*z)
|
||||||
|
printf "distance from center = %f\n", dist
|
||||||
|
}
|
||||||
|
|
||||||
@@ -1,15 +1,21 @@
|
|||||||
#!/usr/bin/awk -f
|
#!/usr/bin/awk -f
|
||||||
|
|
||||||
|
# create the sdl object: an union of sphere
|
||||||
BEGIN {
|
BEGIN {
|
||||||
print "#declare Bubules = object"
|
nbre = 0
|
||||||
|
print "#declare Bubulles = object"
|
||||||
print "{ \nunion { "
|
print "{ \nunion { "
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# active portion of the code
|
||||||
{
|
{
|
||||||
printf(" sphere { <%f, %f, %f>, %f }\n", \
|
printf(" sphere { <%f, %f, %f>, %f }\n", \
|
||||||
$1, $2, $3, $4 )
|
$1, $2, $3, $4 )
|
||||||
|
nbre++
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# closing sdl structure
|
||||||
END {
|
END {
|
||||||
|
print " }\n}"
|
||||||
|
printf "// %d bubulles\n", nbre
|
||||||
}
|
}
|
||||||
|
|||||||
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;
|
||||||
@@ -1,14 +1,10 @@
|
|||||||
/*
|
/*
|
||||||
*
|
|
||||||
* spy_getenv.so: spy_getenv.c Makefile
|
* spy_getenv.so: spy_getenv.c Makefile
|
||||||
* gcc -Wall -shared -fPIC $< -ldl -o $@
|
* gcc -Wall -shared -fPIC $< -ldl -o $@
|
||||||
*
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
|
||||||
#define __USE_GNU
|
#define __USE_GNU
|
||||||
#include <dlfcn.h>
|
#include <dlfcn.h>
|
||||||
|
|
||||||
@@ -18,15 +14,12 @@ char *getenv(char *envname)
|
|||||||
{
|
{
|
||||||
static char *arrow = "--getenv--> ";
|
static char *arrow = "--getenv--> ";
|
||||||
static char *wtf = " --> (nil)";
|
static char *wtf = " --> (nil)";
|
||||||
|
|
||||||
char *content;
|
char *content;
|
||||||
original_getenv orig_getenv;
|
original_getenv orig_getenv;
|
||||||
|
|
||||||
orig_getenv = (original_getenv)dlsym(RTLD_NEXT, "getenv");
|
orig_getenv = (original_getenv)dlsym(RTLD_NEXT, "getenv");
|
||||||
|
|
||||||
write(STDERR_FILENO, arrow, strlen(arrow));
|
write(STDERR_FILENO, arrow, strlen(arrow));
|
||||||
write(STDERR_FILENO, envname, strlen(envname));
|
write(STDERR_FILENO, envname, strlen(envname));
|
||||||
|
|
||||||
content = orig_getenv(envname);
|
content = orig_getenv(envname);
|
||||||
if (NULL != content) {
|
if (NULL != content) {
|
||||||
write(STDERR_FILENO, "=", 1);
|
write(STDERR_FILENO, "=", 1);
|
||||||
@@ -35,9 +28,7 @@ if (NULL != content) {
|
|||||||
else {
|
else {
|
||||||
write(STDERR_FILENO, wtf, strlen(wtf));
|
write(STDERR_FILENO, wtf, strlen(wtf));
|
||||||
}
|
}
|
||||||
|
|
||||||
write(STDERR_FILENO, "\n", 1);
|
write(STDERR_FILENO, "\n", 1);
|
||||||
|
|
||||||
return content;
|
return content;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
1
code/fortran/.gitignore
vendored
1
code/fortran/.gitignore
vendored
@@ -1,6 +1,7 @@
|
|||||||
|
|
||||||
plplotting
|
plplotting
|
||||||
dessiner
|
dessiner
|
||||||
|
printty
|
||||||
|
|
||||||
*.png
|
*.png
|
||||||
*.gif
|
*.gif
|
||||||
|
|||||||
@@ -1,6 +1,14 @@
|
|||||||
|
|
||||||
INCS = -I/usr/include/plplot -I/usr/lib/x86_64-linux-gnu/fortran/modules/plplot
|
INCS = -I/usr/include/plplot -I/usr/lib/x86_64-linux-gnu/fortran/modules/plplot
|
||||||
|
|
||||||
|
# sinple examples
|
||||||
|
|
||||||
|
printty: printty.f90 Makefile
|
||||||
|
gfortran -g $< $(INCS) -o $@
|
||||||
|
|
||||||
|
|
||||||
|
# more complex garbage
|
||||||
|
|
||||||
plplotting: plplotting.f90 Makefile
|
plplotting: plplotting.f90 Makefile
|
||||||
gfortran -g $< $(INCS) -lplplotfortran -o $@
|
gfortran -g $< $(INCS) -lplplotfortran -o $@
|
||||||
|
|
||||||
@@ -11,4 +19,5 @@ dessiner: dessiner.f90 Makefile
|
|||||||
plot89a.gif: dessiner Makefile
|
plot89a.gif: dessiner Makefile
|
||||||
rm -f WS/A????.png
|
rm -f WS/A????.png
|
||||||
./dessiner
|
./dessiner
|
||||||
convert -delay 10 -colors 42 WS/A????.png $@
|
convert -delay 10 -colors 42 WS/A????.png $@
|
||||||
|
wc -c plot89a.gif
|
||||||
|
|||||||
@@ -3,3 +3,8 @@
|
|||||||
Pour les explications, il faut aller lire le livre ou
|
Pour les explications, il faut aller lire le livre ou
|
||||||
les codes source.
|
les codes source.
|
||||||
|
|
||||||
|
## Dessiner...
|
||||||
|
|
||||||
|
Je pense qe l'on devrait parler ici de plplot.
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -8,8 +8,8 @@ program dessiner
|
|||||||
call plgver(version)
|
call plgver(version)
|
||||||
write (*,'(" ",a,a)') 'plPlot version: ', trim(version)
|
write (*,'(" ",a,a)') 'plPlot version: ', trim(version)
|
||||||
|
|
||||||
call dessin_X11 (0.12, 1.51, 11)
|
!! call dessin_X11 (0.12, 1.51, 11)
|
||||||
!! call dessin_dans_un_fichier ()
|
call dessin_dans_un_fichier ()
|
||||||
|
|
||||||
contains ! -----------------------------
|
contains ! -----------------------------
|
||||||
!------------------------------------------------------
|
!------------------------------------------------------
|
||||||
@@ -33,7 +33,7 @@ subroutine dessin_X11 (sha, shb, color)
|
|||||||
|
|
||||||
call plsdev('xwin')
|
call plsdev('xwin')
|
||||||
call plinit ()
|
call plinit ()
|
||||||
call plenv (-2.5, 2.5, -2.5, 2.5, 1, 2)
|
call plenv (-2.5, 2.5, -2.5, 2.5, 1, 1)
|
||||||
|
|
||||||
amp = 2.06
|
amp = 2.06
|
||||||
do i = 1, lg
|
do i = 1, lg
|
||||||
@@ -52,47 +52,67 @@ subroutine dessin_X11 (sha, shb, color)
|
|||||||
|
|
||||||
end subroutine
|
end subroutine
|
||||||
!------------------------------------------------------
|
!------------------------------------------------------
|
||||||
!- _ __ ___ ___ ___
|
!- _ __ ___ ___
|
||||||
!- __ _ (_) / _| ( _ ) / _ \ __ _ |__ \
|
!- __ _ (_) / _| ( _ ) / _ \ __ _
|
||||||
!- / _` | | | | |_ / _ \ | (_) | / _` | / /
|
!- / _` | | | | |_ / _ \ | (_) | / _` |
|
||||||
!- | (_| | | | | _| | (_) | \__, | | (_| | |_|
|
!- | (_| | | | | _| | (_) | \__, | | (_| |
|
||||||
!- \__, | |_| |_| \___/ /_/ \__,_| (_)
|
!- \__, | |_| |_| \___/ /_/ \__,_|
|
||||||
!- |___/
|
!- |___/
|
||||||
|
!-
|
||||||
|
|
||||||
subroutine dessin_dans_un_fichier ()
|
subroutine dessin_dans_un_fichier ()
|
||||||
|
|
||||||
integer, parameter :: nbpts = 20
|
integer, parameter :: nbpts = 179
|
||||||
real, parameter :: usz = 15.0 ! univers size
|
integer, parameter :: nbframes = 99
|
||||||
|
real, parameter :: usz = 17.0 ! univers size
|
||||||
|
|
||||||
|
real :: xa(nbpts), ya(nbpts)
|
||||||
|
real :: xb(nbpts), yb(nbpts)
|
||||||
real :: x(nbpts), y(nbpts)
|
real :: x(nbpts), y(nbpts)
|
||||||
|
|
||||||
integer :: frame, i
|
integer :: frame, i
|
||||||
|
real :: coef
|
||||||
|
|
||||||
character(len=89) :: filename
|
character(len=89) :: filename
|
||||||
character(len=89) :: buffer
|
character(len=89) :: buffer
|
||||||
character(len=3) :: str
|
character(len=3) :: str
|
||||||
|
|
||||||
print *, 'Dessin dans un fichier'
|
print *, 'Dessin dans un fichier'
|
||||||
|
|
||||||
|
! build the startup conditions
|
||||||
do i=1, nbpts
|
do i=1, nbpts
|
||||||
x(i) = usz * (rand() - 0.5000)
|
coef = real(i) * 0.051
|
||||||
y(i) = usz * (rand() - 0.5000) * 0.50
|
xa(i) = usz * 0.80 * sin(coef*2.0)
|
||||||
|
ya(i) = usz * 0.70 * (-0.27 + cos(coef*3.0))
|
||||||
|
xb(i) = usz * 0.11 * (rand() - 0.54)
|
||||||
|
yb(i) = usz * 0.11 * (rand() - 0.97)
|
||||||
enddo
|
enddo
|
||||||
|
|
||||||
do frame= 0, 119
|
! iterate over frames.
|
||||||
|
do frame= 0, nbframes
|
||||||
|
coef = real(frame) / real(nbframes)
|
||||||
|
coef = cos(coef*3.141592654)
|
||||||
|
|
||||||
write (filename, "(a, i4.4, a)") "WS/A", frame, ".png"
|
write (filename, "(a, i4.4, a)") "WS/A", frame, ".png"
|
||||||
print *, frame, ' => ', trim(filename)
|
! print *, frame, "!", coef, ' => ', trim(filename)
|
||||||
|
|
||||||
call plsdev ('pngcairo')
|
call plsdev ('pngcairo')
|
||||||
call plsfnam (trim(filename))
|
call plsfnam (trim(filename))
|
||||||
call plinit ()
|
call plinit ()
|
||||||
call plenv (-10., 10., -10., 10., 0, 1)
|
call plenv (-usz, usz, -usz, usz, 0, 1)
|
||||||
call plcol0 (3)
|
call plcol0 (3)
|
||||||
|
|
||||||
|
! compute the real picture...
|
||||||
do i=1, nbpts
|
do i=1, nbpts
|
||||||
x(i) = x(i) + 1.2 * (rand() - 0.5000)
|
x(i) = xa(i)*coef - xb(i)*(1.0-coef)
|
||||||
y(i) = y(i) + 1.2 * (rand() - 0.5000)
|
y(i) = ya(i)*coef - yb(i)*(1.0-coef)
|
||||||
call plline (x, y)
|
enddo
|
||||||
enddo
|
|
||||||
write(buffer, "(i3.3)") frame
|
! ... and plot it *now*
|
||||||
str = trim(buffer)
|
call plline (x, y)
|
||||||
call plcol0 (15)
|
|
||||||
call plstring (x, y, buffer)
|
call plcol0 (15) ! 15 is pure white
|
||||||
|
call pllab("Apéro level", "Choupitude", "-- Philosophie de comptoir --")
|
||||||
|
|
||||||
call plend ()
|
call plend ()
|
||||||
enddo
|
enddo
|
||||||
|
|||||||
7
code/fortran/printty.f90
Normal file
7
code/fortran/printty.f90
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
! new: Sun Sep 15 05:04:37 UTC 2024
|
||||||
|
program hello
|
||||||
|
implicit none
|
||||||
|
|
||||||
|
print *, "This is the 'printty' program"
|
||||||
|
|
||||||
|
end
|
||||||
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
|
||||||
@@ -1,15 +0,0 @@
|
|||||||
/* LISTEN OSC */
|
|
||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <lo/lo.h>
|
|
||||||
|
|
||||||
#define LOCAL_PORT "9000"
|
|
||||||
|
|
||||||
int main(int argc, char *argv[])
|
|
||||||
{
|
|
||||||
lo_server_thread st;
|
|
||||||
|
|
||||||
st = lo_server_thread_new(LOCAL_PORT, NULL);
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
2
code/roff/.gitignore
vendored
Normal file
2
code/roff/.gitignore
vendored
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
*.text
|
||||||
|
|
||||||
6
code/roff/Makefile
Normal file
6
code/roff/Makefile
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
|
||||||
|
# this is not a serious job !
|
||||||
|
|
||||||
|
premier.text: premier.roff Makefile
|
||||||
|
nroff -Tutf8 < $< > $@
|
||||||
|
|
||||||
2
code/roff/README.md
Normal file
2
code/roff/README.md
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
# La famille des roffs
|
||||||
|
|
||||||
10
code/roff/premier.roff
Normal file
10
code/roff/premier.roff
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
.ti 12
|
||||||
|
hello world.
|
||||||
|
.sp 1
|
||||||
|
Ceci est le premier exemple avec nroff.
|
||||||
|
.sp 2
|
||||||
|
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 :(
|
||||||
@@ -1,3 +1,3 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
. ./fonctions.sh
|
source ./fonctions.sh
|
||||||
message "hello world"
|
message "hello world"
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
TITLE="Here Doc"
|
TITLE="Here Doc ($$)"
|
||||||
|
|
||||||
gnuplot << __EOC__
|
gnuplot << __EOC__
|
||||||
set term dumb
|
set term dumb size 72,24
|
||||||
set grid
|
# set grid
|
||||||
set title "$TITLE"
|
set title "$TITLE"
|
||||||
plot [x=0:pi*2] sin(x)
|
plot [x=0:pi*3] [-1:1] 0.7*sin(x)
|
||||||
__EOC__
|
__EOC__
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
#!/usr/bin/awk -f
|
|
||||||
|
|
||||||
{ printf "%5d\t%s\n", NR, $0; }
|
|
||||||
|
|
||||||
@@ -24,11 +24,12 @@
|
|||||||
|
|
||||||
\makeindex
|
\makeindex
|
||||||
|
|
||||||
\setlength \parindent {2em}
|
\setlength \parindent {1.5em}
|
||||||
\setlength \parskip {0.30em} % XXX
|
\setlength \parskip {0.25em} % XXX
|
||||||
|
|
||||||
%------ reglages des 'listings'
|
%------ reglages des 'listings'
|
||||||
\lstset{frame=single} % 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}
|
||||||
|
|
||||||
@@ -55,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{1em}
|
||||||
|
|
||||||
|
|
||||||
Cependant, toute cette ouvrage est en cours de
|
Cependant, toute cette ouvrage est en cours de
|
||||||
@@ -82,13 +83,19 @@ 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}
|
|
||||||
|
|
||||||
Le code \LaTeX{} et les fichiers d'exemples sont disponibles
|
\vspace{2em}
|
||||||
|
|
||||||
|
Le code \LaTeX{} de cet ouvrage
|
||||||
|
et la plupart des fichiers d'exemples sont disponibles
|
||||||
en ligne sur le site du Tetalab.
|
en ligne sur le site du Tetalab.
|
||||||
Your mileage may vary, film at 11\dots
|
\textsl{Your mileage may vary, film at 11\dots}
|
||||||
|
|
||||||
\texttt{https://git.tetalab.org/tTh/TetaTricks}
|
\texttt{https://git.tetalab.org/tTh/TetaTricks}
|
||||||
|
|
||||||
@@ -126,15 +133,16 @@ Your mileage may vary, film at 11\dots
|
|||||||
|
|
||||||
\input{chap/video}
|
\input{chap/video}
|
||||||
\input{chap/graphisme}
|
\input{chap/graphisme}
|
||||||
|
% \input{chap/dessin} % nouveau 5 septembre 2024
|
||||||
\input{chap/gnuplot}
|
\input{chap/gnuplot}
|
||||||
% \input{chap/print}
|
\input{chap/print}
|
||||||
\input{chap/webcam}
|
\input{chap/webcam}
|
||||||
% \input{chap/SCSI}
|
% \input{chap/SCSI}
|
||||||
\input{chap/X11}
|
\input{chap/X11}
|
||||||
\input{chap/wayland} % nouveau septembre 2023
|
% \input{chap/wayland} % nouveau septembre 2023
|
||||||
\input{chap/Fortran}
|
\input{chap/Fortran}
|
||||||
\input{chap/scripting}
|
\input{chap/scripting}
|
||||||
\input{chap/Arduino}
|
% \input{chap/Arduino}
|
||||||
\input{chap/Basic}
|
\input{chap/Basic}
|
||||||
\input{chap/R} % new octobre 2023
|
\input{chap/R} % new octobre 2023
|
||||||
% \input{chap/GMP}
|
% \input{chap/GMP}
|
||||||
@@ -147,20 +155,20 @@ Your mileage may vary, film at 11\dots
|
|||||||
% \input{chap/MINITEL}
|
% \input{chap/MINITEL}
|
||||||
% \input{chap/Raspberry}
|
% \input{chap/Raspberry}
|
||||||
% \input{chap/Fedora}
|
% \input{chap/Fedora}
|
||||||
% \input{chap/IPv6}
|
\input{chap/IPv6}
|
||||||
\input{chap/threads}
|
\input{chap/threads}
|
||||||
\input{chap/IPC}
|
\input{chap/IPC}
|
||||||
\input{chap/dosbox}
|
\input{chap/dosbox}
|
||||||
\input{chap/manpages}
|
\input{chap/manpages}
|
||||||
\input{chap/grub}
|
% \input{chap/grub}
|
||||||
\input{chap/photos}
|
\input{chap/photos}
|
||||||
\input{chap/plugins}
|
\input{chap/plugins}
|
||||||
\input{chap/Bonjour}
|
% \input{chap/Bonjour}
|
||||||
\input{chap/ioctl}
|
\input{chap/ioctl}
|
||||||
\input{chap/debug}
|
\input{chap/debug}
|
||||||
% \input{chap/buzybox}
|
% \input{chap/buzybox}
|
||||||
\input{chap/gif89a}
|
\input{chap/gif89a}
|
||||||
\input{chap/IRC}
|
% \input{chap/IRC}
|
||||||
% \input{chap/SCCS} % nouveau 18 mars 2021
|
% \input{chap/SCCS} % nouveau 18 mars 2021
|
||||||
\input{chap/Usenet}
|
\input{chap/Usenet}
|
||||||
\input{chap/DNS}
|
\input{chap/DNS}
|
||||||
@@ -168,15 +176,16 @@ Your mileage may vary, film at 11\dots
|
|||||||
\input{chap/webserver}
|
\input{chap/webserver}
|
||||||
\input{chap/hardware}
|
\input{chap/hardware}
|
||||||
\input{chap/gadgets}
|
\input{chap/gadgets}
|
||||||
\input{chap/sdr}
|
% \input{chap/sdr}
|
||||||
\input{chap/bdd} % nouveau 26 octobre 2022
|
\input{chap/bdd} % nouveau 26 octobre 2022
|
||||||
\input{chap/slang}
|
% \input{chap/slang}
|
||||||
\input{chap/curses}
|
\input{chap/curses}
|
||||||
% \input{chap/openwrt}
|
% \input{chap/openwrt}
|
||||||
\input{chap/WiFi}
|
\input{chap/WiFi}
|
||||||
% \input{chap/GIT}
|
% \input{chap/GIT}
|
||||||
\input{chap/divers}
|
\input{chap/divers}
|
||||||
% \input{chap/peer2peer}
|
% \input{chap/peer2peer}
|
||||||
|
\input{chap/livres}
|
||||||
|
|
||||||
% ==============================================================
|
% ==============================================================
|
||||||
|
|
||||||
@@ -185,6 +194,8 @@ Your mileage may vary, film at 11\dots
|
|||||||
|
|
||||||
\textbf{Non, la route est longue, mais la voie est libre.}
|
\textbf{Non, la route est longue, mais la voie est libre.}
|
||||||
|
|
||||||
|
\vspace{4em}
|
||||||
|
|
||||||
Si vous êtes arrivés jusque ici, c'est que vous avez (peut-être ?)
|
Si vous êtes arrivés jusque ici, c'est que vous avez (peut-être ?)
|
||||||
parcouru cet ouvrage, et constaté à quel point il est en friche.
|
parcouru cet ouvrage, et constaté à quel point il est en friche.
|
||||||
Beaucoup de chapitres sont vraiment incomplets, voire cruellement
|
Beaucoup de chapitres sont vraiment incomplets, voire cruellement
|
||||||
|
|||||||
Reference in New Issue
Block a user