Compare commits

...

18 Commits

Author SHA1 Message Date
tTh
a1f7d1e0f2 ready for paper print ? 2024-09-17 19:03:54 +02:00
tTh
2dd4896b6c add another empty section 2024-09-17 19:03:19 +02:00
tTh
b252bf73a2 bla 2024-09-17 19:02:40 +02:00
tTh
7ed54fc123 more bla 2024-09-17 18:59:10 +02:00
tTh
48b66b3034 more tricks 2024-09-17 18:58:33 +02:00
tTh
2bb29f37e3 greeting tetalab 2024-09-17 18:57:52 +02:00
tTh
b67ce482bf a new empty section 2024-09-17 18:57:20 +02:00
tTh
b98ae9d629 empty chapter 2024-09-17 18:55:56 +02:00
tTh
615289b57e functions demonstartor 2024-09-17 18:55:04 +02:00
tTh
02054433b4 talking about awk 2024-09-17 18:53:54 +02:00
tTh
5723a754a8 bla about UVC 2024-09-17 18:53:09 +02:00
tTh
7e591fc958 add io related text 2024-09-17 18:52:17 +02:00
tTh
3bda7ea69b hide empty chapters 2024-09-17 17:53:46 +02:00
tTh
a1b0ffdabb virer un résidu 2024-09-17 15:51:05 +02:00
tTh
16e1d7707a typo 2024-09-17 11:39:30 +02:00
tTh
716345e270 add a feature 2024-09-17 11:23:05 +02:00
tTh
a1df488c58 cosmetic 2024-09-16 14:31:42 +02:00
tTh
9f129f64d9 no border on listings 2024-09-16 03:50:09 +02:00
20 changed files with 362 additions and 129 deletions

View File

@ -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~:

View File

@ -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.
% ================================================================ % ================================================================

View File

@ -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}

View File

@ -7,6 +7,6 @@
% ======================================================================= % =======================================================================
\section{xpaint} \index{xpaint } \section{xpaint} \index{xpaint}
% ======================================================================= % =======================================================================

View File

@ -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.

View File

@ -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
@ -45,7 +66,7 @@ des espaces et/ou des tabulations.
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
@ -63,21 +84,26 @@ deux d'entre eux étant précédés d'une « instruction ».
Le premier bloc, avec le mot-clef \textsc{BEGIN}, est exécuté 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. 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 Nous l'utilisons pour créer l'en-tête d'un descripteur
d'objet pour Povray. d'objet pour Povray.
Le second bloc (sans label) est exécuté pour chaque ligne lue. Le second bloc (sans label) est exécuté pour chaque ligne lue.
Et c'est ici que nous trouverons la magie. 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 Et le troisième bloc (\textsc{END}) sera exécuté à la fin, après
la lecture et le traitement du dernier enregistrement, la lecture et le traitement du dernier enregistrement,
qui sera dans notre cas la dernière ligne. qui est dans notre cas la dernière ligne.
Et à l'exécution~: Et à l'exécution~:
\begin{verbatim} \begin{verbatim}
tth@redlady:~/Devel/TetaTricks/code/awk$ ./mkunion.awk < dataset tth@redlady:~/Devel/TetaTricks/code/awk$ ./mkunion.awk < dataset
#declare Bubules = object #declare Bubulles = object
{ {
union { union {
sphere { <17.000000, 9.000000, 4.000000>, 1.500000 } sphere { <17.000000, 9.000000, 4.000000>, 1.500000 }
@ -85,14 +111,93 @@ union {
sphere { <0.000000, 0.000000, 0.000000>, 1.000000 } sphere { <0.000000, 0.000000, 0.000000>, 1.000000 }
} }
} }
// 3 bubulles
\end{verbatim} \end{verbatim}
% ===============================================================
\subsection{Mais ce n'est pas tout !}
% XXX to be continued XXX 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} \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.
% =============================================================== % ===============================================================

View File

@ -74,7 +74,7 @@ tests et les boucles.
% -------------------------------------------------------------- % --------------------------------------------------------------
\subsection{Le 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.
@ -99,7 +99,7 @@ l'usage à l'instant, avec la création d'un script complet~:
\begin{verbatim} \begin{verbatim}
tth@redlady:~$ echo '#!/bin/bash' > foo.sh tth@redlady:~$ echo '#!/bin/bash' > foo.sh
tth@redlady:~$ echo 'printf "%d" 85 >> foo.sh tth@redlady:~$ echo 'printf "%x" 85 >> foo.sh
tth@redlady:~$ chmod u+x ./foo.sh tth@redlady:~$ chmod u+x ./foo.sh
tth@redlady:~$ ./foo.sh tth@redlady:~$ ./foo.sh
55 55
@ -145,12 +145,31 @@ Les plus importantes sont là : le choix, la boucle, l'attente.
\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}
@ -173,37 +192,48 @@ 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
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.
@ -220,6 +250,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}

View File

@ -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}

View File

@ -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
@ -58,6 +62,29 @@ that shields its users from many of the difficulties and problems
of using the V4L2 API directly. of using the V4L2 API directly.
\end{quote} \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}* où je me penche sur cette techno, premier souci~:
\textsl{Le pilote pour les WebCams UVC
standard utilisé pour les caméras USB modernes
nest pas encore au point et nest pas inclus dans les
versions publiées de Haiku.}
% -------------------------------------------------------------------- % --------------------------------------------------------------------
\section{GameBoy camera} \section{GameBoy camera}
@ -97,13 +124,14 @@ fonctionne et le rendu ressemble.
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 :
\texttt{-S} échange des
deux composantes R et B; \texttt{-s <device>} affiche deux composantes R et B; \texttt{-s <device>} affiche
les capacités du périphérique v4l\index{v4l}. les capacités du périphérique v4l\index{v4l}.

View File

@ -1,16 +0,0 @@
/*
* afficher les arguments.
*/
#include <stdio.h>
int main(int argc, char *argv[])
{
int foo;
for (foo=0; foo<argc; foo++) {
printf(" %3d %s\n", foo, argv[foo]);
}
return 0;
}

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

20
code/awk/demo-func.awk Executable file
View 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
}

View File

@ -2,7 +2,8 @@
# create the sdl object: an union of sphere # create the sdl object: an union of sphere
BEGIN { BEGIN {
print "#declare Bubules = object" nbre = 0
print "#declare Bubulles = object"
print "{ \nunion { " print "{ \nunion { "
} }
@ -10,9 +11,11 @@ BEGIN {
{ {
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 # closing sdl structure
END { END {
print " }\n}\n" print " }\n}"
printf "// %d bubulles\n", nbre
} }

View File

@ -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.

View File

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

View File

@ -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;
}

View File

@ -1,18 +0,0 @@
/* SEND OSC */
#include <stdio.h>
#include <lo/lo.h>
#define REMOTE_HOST "localhost"
#define REMOTE_PORT "9000"
int main(int argc, char *argv[])
{
lo_address loana;
int foo;
loana = lo_address_new(REMOTE_HOST, REMOTE_PORT);
foo = lo_send(loana, "/dev/kmem", "is", 61, "meg, efface !");
fprintf(stderr, "foo %d\n", foo);
return 0;
}

View File

@ -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__

View File

@ -1,4 +0,0 @@
#!/usr/bin/awk -f
{ printf "%5d\t%s\n", NR, $0; }

View File

@ -28,7 +28,8 @@
\setlength \parskip {0.30em} % XXX \setlength \parskip {0.30em} % XXX
%------ reglages des 'listings' %------ reglages des 'listings'
\lstset{frame=single} % dessin d'un cadre autour du listing \lstset{frame=none} % é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}
@ -126,16 +127,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/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}
@ -153,10 +154,10 @@ Your mileage may vary, film at 11\dots
\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}
@ -169,9 +170,9 @@ 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}