Compare commits
No commits in common. "7dea31c24c871dda75fe985d06c021b5c62bcad4" and "fa3b83fa25cf8bbbd7dc4a495439dceb97890256" have entirely different histories.
7dea31c24c
...
fa3b83fa25
@ -43,9 +43,6 @@ $
|
|||||||
\end{verbatim}
|
\end{verbatim}
|
||||||
|
|
||||||
% --------------------------------------------------------
|
% --------------------------------------------------------
|
||||||
%
|
|
||||||
% https://fortranwiki.org/fortran/show/Command-line+arguments
|
|
||||||
%
|
|
||||||
\section{Args \& Env}
|
\section{Args \& Env}
|
||||||
|
|
||||||
Un fort beau programme, mais il est un peu fermé au monde extérieur.
|
Un fort beau programme, mais il est un peu fermé au monde extérieur.
|
||||||
@ -78,58 +75,37 @@ il faut la convertir avant usage.
|
|||||||
call getarg(2, string) ; read (string, *) cx
|
call getarg(2, string) ; read (string, *) cx
|
||||||
\end{verbatim}
|
\end{verbatim}
|
||||||
|
|
||||||
|
|
||||||
% --------------------------------------------------------
|
% --------------------------------------------------------
|
||||||
|
|
||||||
\section{Tableaux}
|
\subsection{Tableaux}
|
||||||
|
|
||||||
Rank, Size, \textsc{allocatable}, toussa\dots
|
Rank, Size, \textsc{allocatable}, toussa\dots
|
||||||
|
|
||||||
Amies du C, soyez d'entrée prévenues, en Fortran, l'indice
|
|
||||||
par défaut du premier élément d'un tablesu est \textbf{1},
|
|
||||||
mais cette valeur peut être modifiée à la déclaration
|
|
||||||
du tableau.
|
|
||||||
|
|
||||||
% --------------------------------------------------------
|
% --------------------------------------------------------
|
||||||
|
|
||||||
\section{Fichiers}
|
\subsection{Fichiers}
|
||||||
|
|
||||||
Pour qui vient du C et de la philosophie Unix, la gestion
|
Pour qui vient du C et de la philosophie Unix, la gestion
|
||||||
des fichiers en Fortran est assez déroutante%
|
des fichiers en Fortran est assez déroutante%
|
||||||
\footnote{Par contre, pour un dino des \textsl{big irons}\dots}.
|
\footnote{Par contre, pour un dino des \textsl{big irons}\dots}.
|
||||||
Il semble qu'il y ait deux concepts orthogonaux.
|
Il semble qu'il y ait deux concepts orthogonaux.
|
||||||
|
|
||||||
\textit{Open, Read, Write, Inquire, toussa\dots}
|
Open, Read, Write, Inquire, toussa\dots
|
||||||
|
|
||||||
% --------------------------------------------------------
|
% --------------------------------------------------------
|
||||||
|
|
||||||
\section{Modules}
|
\subsection{Modules}
|
||||||
|
|
||||||
Une notion essentielle, à mon avis, pour écrire des programmes
|
Une notion essentielle, à mon avis, pour écrire des programmes
|
||||||
au-delà de 104 lignes. Oui, j'avoue, j'ai bien changé depuis
|
au-delà de 104 lignes. Oui, j'avoue, j'ai bien changé depuis
|
||||||
l'époque où je confectionnait des procédures \textsl{monobloc}
|
l'époque où je confectionnait des procédures \textsl{monobloc}
|
||||||
de 1337 lignes, avec une bonne centaine de \texttt{GOTO} dedans.
|
de 1337 lignes, avec une bonne centaine de \texttt{GOTO} dedans.
|
||||||
|
|
||||||
% --------------------------------------------------------
|
|
||||||
\section{Random et Aléa}
|
|
||||||
|
|
||||||
La dernière ligne va vous étonner.
|
|
||||||
|
|
||||||
\begin{verbatim}
|
|
||||||
integer, dimension(3) :: tarray
|
|
||||||
integer :: t3
|
|
||||||
real :: dummy
|
|
||||||
call itime(tarray)
|
|
||||||
t3 = 3600*tarray(1) + 60*tarray(2) + tarray(3)
|
|
||||||
write(0, '(A,3I3,A,I6)') "sranding: ", tarray, " --> ", t3
|
|
||||||
call srand(t3)
|
|
||||||
! after initializing the random generator engine,
|
|
||||||
! you MUST use it for initializing the initializer
|
|
||||||
dummy = rand()
|
|
||||||
\end{verbatim}
|
|
||||||
|
|
||||||
% --------------------------------------------------------
|
% --------------------------------------------------------
|
||||||
|
|
||||||
\section{Images}
|
\subsection{Images ?}
|
||||||
|
|
||||||
Plplot semble être un bon choix pour commencer.
|
Plplot semble être un bon choix pour commencer.
|
||||||
|
|
||||||
|
@ -35,8 +35,6 @@ pinpin0: çhârsèt ?
|
|||||||
/SET autoclose_windows OFF
|
/SET autoclose_windows OFF
|
||||||
\end{verbatim}
|
\end{verbatim}
|
||||||
|
|
||||||
\textbf{Question :} comment enregistrer un chan' ?
|
|
||||||
|
|
||||||
% ==============================================================
|
% ==============================================================
|
||||||
\section{hexchat}
|
\section{hexchat}
|
||||||
\index{hexchat}
|
\index{hexchat}
|
||||||
|
@ -216,7 +216,7 @@ d'un fichier \texttt{.mid} ?
|
|||||||
|
|
||||||
\lstinputlisting[language=perl]{code/midifile.pl}
|
\lstinputlisting[language=perl]{code/midifile.pl}
|
||||||
|
|
||||||
Voilà enfin du code qui n'est pas fini\dots
|
Voilà.
|
||||||
|
|
||||||
% ---------------------------------------------------------
|
% ---------------------------------------------------------
|
||||||
|
|
||||||
@ -233,7 +233,5 @@ OSC\index{OSC} (page \pageref{chap:OSC}) semble une possibilité
|
|||||||
pour aller au-delà. Mais, \textsl{amho}, rien ne pourra vraiment
|
pour aller au-delà. Mais, \textsl{amho}, rien ne pourra vraiment
|
||||||
remplacer le midi tel que nous le connaissons depuis les années 80.
|
remplacer le midi tel que nous le connaissons depuis les années 80.
|
||||||
|
|
||||||
You can read more about USB MIDI here:
|
|
||||||
https://www.midi.org/midi-articles/basic-of-usb
|
|
||||||
|
|
||||||
% ---------------------------------------------------------
|
% ---------------------------------------------------------
|
||||||
|
@ -15,19 +15,6 @@ Je songe ensuite aborder certains aspects de la théorie du
|
|||||||
signal, dans le but pratique de brotcher du son.
|
signal, dans le but pratique de brotcher du son.
|
||||||
|
|
||||||
|
|
||||||
\section{En vrac}
|
|
||||||
|
|
||||||
\begin{verbatim}
|
|
||||||
double stddev(const auto *x, int N)
|
|
||||||
{
|
|
||||||
double sum = 0, sum_sq = 0;
|
|
||||||
for (int i = 0; i < N; i++) {
|
|
||||||
sum += x[i];
|
|
||||||
sum_sq += x[i]*x[i];
|
|
||||||
}
|
|
||||||
return sqrt((sum_sq - sum*sum/N)/(N-1));
|
|
||||||
}
|
|
||||||
\end{verbatim}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -6,11 +6,7 @@ Il existe bien entendu des outils \textsl{mainstream}
|
|||||||
tels que le classique \texttt{gdb}\index{gdb}, mais il en existe
|
tels que le classique \texttt{gdb}\index{gdb}, mais il en existe
|
||||||
une foultitude d'autres, injustement méconnus.
|
une foultitude d'autres, injustement méconnus.
|
||||||
Nous allons en voir quelques-uns en essayant de nous baser
|
Nous allons en voir quelques-uns en essayant de nous baser
|
||||||
sur des cas quasiment réels.
|
sur des cas réels.
|
||||||
|
|
||||||
Et non, je ne vais pas vous parler du vénérable \texttt{ddt}
|
|
||||||
des antiques systèmes CP/M, ni même du \texttt{debug} des
|
|
||||||
anciens DOS, bien que tous deux méritent votre attention.
|
|
||||||
|
|
||||||
% ==============================================================
|
% ==============================================================
|
||||||
|
|
||||||
|
@ -133,13 +133,10 @@ l'IRC\index{IRC} \texttt{freenode\#paulla} \textit{:)}
|
|||||||
\textsl{Perform generic image processing operations, through the G'MIC
|
\textsl{Perform generic image processing operations, through the G'MIC
|
||||||
language interpreter. gmic: GREYC's Magic for Image Computing.}
|
language interpreter. gmic: GREYC's Magic for Image Computing.}
|
||||||
|
|
||||||
Gmic se base sur une grosse bibliothèque de fonctions écrite
|
\index{XXX}
|
||||||
en \texttt{C++}\index{C++} dont l'utilisation est bien
|
|
||||||
docummentée dans le livre ???\index{XXX}
|
|
||||||
|
|
||||||
Existe aussi en plugin pour Gimp\index{Gimp} avec une interface
|
Existe aussi en plugin pour Gimp\index{Gimp} avec une interface
|
||||||
pleine de curseurs et de boutons, qui facilite (ou pas) l'exploration
|
pleine de curseurs et de boutons.
|
||||||
des possibles.
|
|
||||||
|
|
||||||
% -------------------------------------------------------------------
|
% -------------------------------------------------------------------
|
||||||
|
|
||||||
@ -164,7 +161,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} ?
|
||||||
|
|
||||||
% -------------------------------------------------------------------
|
% -------------------------------------------------------------------
|
||||||
|
|
||||||
|
@ -10,37 +10,26 @@ Mais il est probable que ce concept existait déja dans
|
|||||||
d'autres mondes, peut-être avec \textsl{AmigaOS} ou
|
d'autres mondes, peut-être avec \textsl{AmigaOS} ou
|
||||||
\textsl{VAX/VMS}\index{VMS}\dots
|
\textsl{VAX/VMS}\index{VMS}\dots
|
||||||
|
|
||||||
Une bibliothèque partagé (aka \texttt{.so}) est une collection
|
|
||||||
de fonctions, chargée une seule fois en mémoire centrale,
|
|
||||||
mais qui peut être utilisée par plusieurs programmes en
|
|
||||||
même temps.\index{.so}
|
|
||||||
Et c'est en partie sur ce concept qu'est basé le premier
|
Et c'est en partie sur ce concept qu'est basé le premier
|
||||||
mécanisme que nous allons découvrir~:
|
mécanisme que nous allon découvrir~:
|
||||||
\texttt{dlopen} et sa petite famille.
|
\texttt{dlopen} et sa petite famille.
|
||||||
|
|
||||||
% ------------------------------------
|
% ------------------------------------
|
||||||
|
|
||||||
\section{Mécanisme}
|
\section{Mécanique}
|
||||||
|
|
||||||
\index{dlopen} \index{dlclose}
|
\index{dlopen}
|
||||||
|
|
||||||
\texttt{dlclose, dlopen, dlmopen - open and close a shared object}
|
\texttt{dlclose, dlopen, dlmopen - open and close a shared object}
|
||||||
|
|
||||||
\begin{quote}
|
\begin{quote}
|
||||||
The function dlopen() loads the dynamic shared object (shared library)
|
The function dlopen() loads the dynamic shared object (shared library)
|
||||||
file named by the null-terminated string filename and returns an opaque
|
file named by the null-terminated string filename and returns an opaque
|
||||||
"handle" for the loaded object. This handle is employed with other
|
"handle" for the loaded object. This handle is employed with other
|
||||||
functions in the dlopen API, such as dlsym(3), dladdr(3), dlinfo(3),
|
functions in the dlopen API, such as dlsym(3), dladdr(3), dlinfo(3),
|
||||||
and dlclose().
|
and dlclose().
|
||||||
\end{quote}
|
\end{quote}
|
||||||
|
|
||||||
Traduit en clair, la fonction \texttt{dlopen} permet de charger
|
|
||||||
manuellement un \texttt{.so} en mémoire centrale, au lieu de
|
|
||||||
laisser faire le loader (ld.so) automatiquement au lancement
|
|
||||||
d'un binaire. la fonction \texttt{dlclose} va, elle, vidanger
|
|
||||||
la zone mémoire dans laquelle est le plugin.
|
|
||||||
|
|
||||||
|
|
||||||
% ------------------------------------
|
% ------------------------------------
|
||||||
|
|
||||||
\section{Un exemple ?}
|
\section{Un exemple ?}
|
||||||
@ -53,8 +42,7 @@ un tableau de quatre nombres flottants, et que nous souhaitons
|
|||||||
proposer un affichage de ce tableau modifiable à volonté.
|
proposer un affichage de ce tableau modifiable à volonté.
|
||||||
|
|
||||||
Nous allons donc écrire notre fonction personnelle d'affichage
|
Nous allons donc écrire notre fonction personnelle d'affichage
|
||||||
dans un fichier \textsc{.c} indépendant
|
dans un fichier \textsc{.c} indépendant (le plugiciel) et qui
|
||||||
(ci-après dénommé «le plugiciel») et qui
|
|
||||||
sera chargé dynamiquement au \textsl{run-time} par le logiciel
|
sera chargé dynamiquement au \textsl{run-time} par le logiciel
|
||||||
principal (l'appelant).
|
principal (l'appelant).
|
||||||
|
|
||||||
@ -66,16 +54,12 @@ lecteurs, à titre d'exercice.
|
|||||||
|
|
||||||
\lstinputlisting[language=c]{code/plugiciel.c}
|
\lstinputlisting[language=c]{code/plugiciel.c}
|
||||||
|
|
||||||
On peut difficilement faire plus simple pour une première
|
On peut difficelement faire plus simple pour une première
|
||||||
approche, mais attendez la suite des opérations,
|
approche, mais attendez la suite.
|
||||||
la cinquième va vous étonner.
|
|
||||||
|
|
||||||
\subsection{L'appelant}
|
\subsection{L'appelant}
|
||||||
|
|
||||||
Voyons maintenant comment mettre ça en œuvre depuis le programme
|
|
||||||
principal.
|
|
||||||
Nous supposerons que le binaire du plugin est dans le répertoire
|
|
||||||
courant.
|
|
||||||
|
|
||||||
\lstinputlisting[language=c]{code/appelant.c}
|
\lstinputlisting[language=c]{code/appelant.c}
|
||||||
|
|
||||||
@ -99,9 +83,7 @@ tth@fubar:~/Documents/TetaTricks/code$
|
|||||||
|
|
||||||
\section{Autres langages}
|
\section{Autres langages}
|
||||||
|
|
||||||
En Perl\index{Perl} ?
|
|
||||||
|
|
||||||
En Fortran\index{Fortran} ?
|
|
||||||
|
|
||||||
% -------------- to be continued
|
% -------------- to be continued
|
||||||
|
|
||||||
|
@ -200,7 +200,7 @@ Comment scanner un /24 pour y découvrir les machines ?
|
|||||||
\section{netcat}
|
\section{netcat}
|
||||||
\index{netcat}
|
\index{netcat}
|
||||||
|
|
||||||
\textbf{Attention :} Il existe au moins $N$ variantes de netcat
|
\textbf{Attention :} Il existe au moins deux variantes de netcat
|
||||||
en circulation, bien entendu avec des options et des
|
en circulation, bien entendu avec des options et des
|
||||||
comportements différents.
|
comportements différents.
|
||||||
|
|
||||||
|
@ -1,34 +0,0 @@
|
|||||||
\chapter{scripting}
|
|
||||||
|
|
||||||
\section{Awk} \index{Awk}
|
|
||||||
|
|
||||||
|
|
||||||
Quelques \textsl{oneliners} de bon aloi pour vous donner
|
|
||||||
une idée du langage\dots
|
|
||||||
|
|
||||||
\begin{verbatim}
|
|
||||||
cat { print $0 } or just 1
|
|
||||||
grep pattern /pattern/
|
|
||||||
head -n 5 NR <= 5
|
|
||||||
cut -f1 { print $1 }
|
|
||||||
tr a-z A-Z { print toupper($0) }
|
|
||||||
sed 's/hi/ho/g' gsub(/hi/,"ho")
|
|
||||||
wc -l END { print NR }
|
|
||||||
\end{verbatim}
|
|
||||||
|
|
||||||
% ===============================================================
|
|
||||||
\subsection{Un exemple simple}
|
|
||||||
|
|
||||||
À 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}.
|
|
||||||
Un cas d'école : un élément par ligne, les valeurs séparées par
|
|
||||||
des espaces.
|
|
||||||
|
|
||||||
|
|
||||||
\lstinputlisting[]{code/awk/dataset}
|
|
||||||
|
|
||||||
Ces données sont les coordonnées \textsc{xyz} et le rayon d'une
|
|
||||||
petite collection de bubulles. Pratiquement, une représentation
|
|
||||||
sommaire d'une sphère de povray.
|
|
||||||
|
|
||||||
% ===============================================================
|
|
13
chap/son.tex
13
chap/son.tex
@ -91,8 +91,8 @@ sur la page \pageref{chap:MIDI}.
|
|||||||
TODO\index{XXX}
|
TODO\index{XXX}
|
||||||
|
|
||||||
%------------------------------------------------------------------
|
%------------------------------------------------------------------
|
||||||
%
|
|
||||||
% bienvenu dans le monde de LP
|
|
||||||
\section{pulseaudio}
|
\section{pulseaudio}
|
||||||
\index{pulseaudio}
|
\index{pulseaudio}
|
||||||
\label{pulseaudio}
|
\label{pulseaudio}
|
||||||
@ -102,7 +102,7 @@ même falloir y passer : ce machin prétenduement
|
|||||||
\textsl{michu compliant}\index{Michu}
|
\textsl{michu compliant}\index{Michu}
|
||||||
a parfois, voire même souvent, tendance à se mettre en travers
|
a parfois, voire même souvent, tendance à se mettre en travers
|
||||||
du chemin des honnètes gens%
|
du chemin des honnètes gens%
|
||||||
\footnote{Du moins vers les années 2014/2019}.
|
\footnote{Du moins vers l'année 2014}.
|
||||||
|
|
||||||
%------------------------------------------------------------------
|
%------------------------------------------------------------------
|
||||||
\section{Jack}
|
\section{Jack}
|
||||||
@ -159,13 +159,6 @@ voir qu'elle est à deux niveaux.
|
|||||||
|
|
||||||
https://www.xiph.org/ao/doc/drivers.html
|
https://www.xiph.org/ao/doc/drivers.html
|
||||||
|
|
||||||
\subsection{Choisir la sortie}
|
|
||||||
|
|
||||||
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
|
|
||||||
(aixs, oss, alsa, jack, sndio\dots)
|
|
||||||
et la partie matérielle (jack standard, casque audio USB\dots).
|
|
||||||
|
|
||||||
%------------------------------------------------------------------
|
%------------------------------------------------------------------
|
||||||
|
|
||||||
\section{Portaudio} \label{Portaudio} \index{Portaudio}
|
\section{Portaudio} \label{Portaudio} \index{Portaudio}
|
||||||
|
@ -32,7 +32,7 @@ the implementation makes use of the FUSE (Filesystem in Userspace)
|
|||||||
kernel module. The practical effect of this is that the end user can
|
kernel module. The practical effect of this is that the end user can
|
||||||
seamlessly interact with remote files being securely served over SSH
|
seamlessly interact with remote files being securely served over SSH
|
||||||
just as if they were local files on his/her computer. On the remote
|
just as if they were local files on his/her computer. On the remote
|
||||||
computer the SFTP\index{sftp} subsystem of SSH is used.}
|
computer the SFTP subsystem of SSH is used.}
|
||||||
|
|
||||||
Hélas, ça ne marche pas trop bien depuis un
|
Hélas, ça ne marche pas trop bien depuis un
|
||||||
OpenBSD\index{OpenBSD}\footnote{OpenBSD 5.5 sur sparc64} :
|
OpenBSD\index{OpenBSD}\footnote{OpenBSD 5.5 sur sparc64} :
|
||||||
|
@ -152,16 +152,6 @@ VLC peut éventuellement aussi être utilisé comme un outil
|
|||||||
de streaming, voyez ça page \pageref{streamvlc}, bon courage.
|
de streaming, voyez ça page \pageref{streamvlc}, bon courage.
|
||||||
|
|
||||||
% --------------------------------------------------------------------
|
% --------------------------------------------------------------------
|
||||||
\section{Mediainfo}
|
|
||||||
|
|
||||||
\begin{quote}
|
|
||||||
MediaInfo\footnote{by the famous Zenitram of DaLFP.} is a utility
|
|
||||||
used for retrieving technical information and other
|
|
||||||
metadata about audio or video files.
|
|
||||||
\end{quote}
|
|
||||||
|
|
||||||
% --------------------------------------------------------------------
|
|
||||||
|
|
||||||
|
|
||||||
\section{Autres trucs}
|
\section{Autres trucs}
|
||||||
|
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
% ==============================================================
|
% ==============================================================
|
||||||
\section{Apache} \index{Apache}
|
\section{Apache} \index{Apache}
|
||||||
|
|
||||||
Le grand classique. Que nous ne verrons pas pour le moment.
|
Le grand classique.
|
||||||
|
|
||||||
|
|
||||||
% ==============================================================
|
% ==============================================================
|
||||||
@ -22,13 +22,6 @@ root@ramen:~# service lighttpd force-reload
|
|||||||
root@ramen:~#
|
root@ramen:~#
|
||||||
\end{verbatim}
|
\end{verbatim}
|
||||||
|
|
||||||
\textbf{Q:} Sur une installation fraiche, la racine du site est
|
|
||||||
en 403\index{403} ?\linebreak
|
|
||||||
\textbf{R:} Par défaut le listing des répertoires vides
|
|
||||||
(sans \texttt{index.html}) est interdit. Pour changer ça, il faut
|
|
||||||
\texttt{\# lighttpd-enable-mod dir-listing} et
|
|
||||||
\texttt{\# service lighttpd force-reload}, voilà.
|
|
||||||
|
|
||||||
% ==============================================================
|
% ==============================================================
|
||||||
|
|
||||||
\section{Custom made}
|
\section{Custom made}
|
||||||
|
@ -1,3 +0,0 @@
|
|||||||
17 9 4 1.5
|
|
||||||
11 0.8 2.3 0.989
|
|
||||||
0 0 0 1
|
|
2
main.tex
2
main.tex
@ -119,8 +119,6 @@ en ligne sur le site du Tetalab. Your mileage may vary\dots
|
|||||||
% \input{chap/SCSI}
|
% \input{chap/SCSI}
|
||||||
\input{chap/X11}
|
\input{chap/X11}
|
||||||
\input{chap/Fortran}
|
\input{chap/Fortran}
|
||||||
\input{chap/scripting}
|
|
||||||
|
|
||||||
% \input{chap/GMP}
|
% \input{chap/GMP}
|
||||||
\input{chap/Python}
|
\input{chap/Python}
|
||||||
\input{chap/dino}
|
\input{chap/dino}
|
||||||
|
Loading…
Reference in New Issue
Block a user