From 7dea31c24c871dda75fe985d06c021b5c62bcad4 Mon Sep 17 00:00:00 2001 From: tth Date: Sun, 3 Apr 2022 11:56:49 +0200 Subject: [PATCH] small patches for a grey sunday --- chap/Fortran.tex | 19 +++++++++++++------ chap/debug.tex | 6 +++++- chap/image.tex | 9 ++++++--- chap/plugins.tex | 38 ++++++++++++++++++++++++++++---------- chap/webserver.tex | 9 ++++++++- code/awk/mkunion.awk | 0 6 files changed, 60 insertions(+), 21 deletions(-) create mode 100644 code/awk/mkunion.awk diff --git a/chap/Fortran.tex b/chap/Fortran.tex index 80da08b..555bc7e 100644 --- a/chap/Fortran.tex +++ b/chap/Fortran.tex @@ -43,6 +43,9 @@ $ \end{verbatim} % -------------------------------------------------------- +% +% https://fortranwiki.org/fortran/show/Command-line+arguments +% \section{Args \& Env} Un fort beau programme, mais il est un peu fermé au monde extérieur. @@ -75,16 +78,20 @@ il faut la convertir avant usage. call getarg(2, string) ; read (string, *) cx \end{verbatim} - % -------------------------------------------------------- -\subsection{Tableaux} +\section{Tableaux} 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. + % -------------------------------------------------------- -\subsection{Fichiers} +\section{Fichiers} Pour qui vient du C et de la philosophie Unix, la gestion des fichiers en Fortran est assez déroutante% @@ -95,7 +102,7 @@ Il semble qu'il y ait deux concepts orthogonaux. % -------------------------------------------------------- -\subsection{Modules} +\section{Modules} Une notion essentielle, à mon avis, pour écrire des programmes au-delà de 104 lignes. Oui, j'avoue, j'ai bien changé depuis @@ -103,7 +110,7 @@ l'époque où je confectionnait des procédures \textsl{monobloc} de 1337 lignes, avec une bonne centaine de \texttt{GOTO} dedans. % -------------------------------------------------------- -\subsection{Random et Aléa} +\section{Random et Aléa} La dernière ligne va vous étonner. @@ -122,7 +129,7 @@ La dernière ligne va vous étonner. % -------------------------------------------------------- -\subsection{Images} +\section{Images} Plplot semble être un bon choix pour commencer. diff --git a/chap/debug.tex b/chap/debug.tex index 0b32b74..0e2b113 100644 --- a/chap/debug.tex +++ b/chap/debug.tex @@ -6,7 +6,11 @@ Il existe bien entendu des outils \textsl{mainstream} tels que le classique \texttt{gdb}\index{gdb}, mais il en existe une foultitude d'autres, injustement méconnus. Nous allons en voir quelques-uns en essayant de nous baser -sur des cas réels. +sur des cas quasiment 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. % ============================================================== diff --git a/chap/image.tex b/chap/image.tex index 4ef8976..4c2b137 100644 --- a/chap/image.tex +++ b/chap/image.tex @@ -133,10 +133,13 @@ l'IRC\index{IRC} \texttt{freenode\#paulla} \textit{:)} \textsl{Perform generic image processing operations, through the G'MIC language interpreter. gmic: GREYC's Magic for Image Computing.} -\index{XXX} +Gmic se base sur une grosse bibliothèque de fonctions écrite +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 -pleine de curseurs et de boutons. +pleine de curseurs et de boutons, qui facilite (ou pas) l'exploration +des possibles. % ------------------------------------------------------------------- @@ -161,7 +164,7 @@ for ((y=0; y<250; y++)) { Comment faire un \textsl{resize} avec NetPBM ? Est-il nécessaire d'apprendre la bibliothèque de fonctions -\texttt{libnetpbm} ? +\texttt{libnetpbm}\footnote{Réponse: oui.} ? % ------------------------------------------------------------------- diff --git a/chap/plugins.tex b/chap/plugins.tex index 5e317da..3523a28 100644 --- a/chap/plugins.tex +++ b/chap/plugins.tex @@ -10,26 +10,37 @@ Mais il est probable que ce concept existait déja dans d'autres mondes, peut-être avec \textsl{AmigaOS} ou \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 -mécanisme que nous allon découvrir~: +mécanisme que nous allons découvrir~: \texttt{dlopen} et sa petite famille. % ------------------------------------ -\section{Mécanique} +\section{Mécanisme} -\index{dlopen} +\index{dlopen} \index{dlclose} \texttt{dlclose, dlopen, dlmopen - open and close a shared object} \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 -"handle" for the loaded object. This handle is employed with other -functions in the dlopen API, such as dlsym(3), dladdr(3), dlinfo(3), +"handle" for the loaded object. This handle is employed with other +functions in the dlopen API, such as dlsym(3), dladdr(3), dlinfo(3), and dlclose(). \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 ?} @@ -42,7 +53,8 @@ un tableau de quatre nombres flottants, et que nous souhaitons proposer un affichage de ce tableau modifiable à volonté. Nous allons donc écrire notre fonction personnelle d'affichage -dans un fichier \textsc{.c} indépendant (le plugiciel) et qui +dans un fichier \textsc{.c} indépendant +(ci-après dénommé «le plugiciel») et qui sera chargé dynamiquement au \textsl{run-time} par le logiciel principal (l'appelant). @@ -54,12 +66,16 @@ lecteurs, à titre d'exercice. \lstinputlisting[language=c]{code/plugiciel.c} -On peut difficelement faire plus simple pour une première -approche, mais attendez la suite. +On peut difficilement faire plus simple pour une première +approche, mais attendez la suite des opérations, +la cinquième va vous étonner. \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} @@ -83,7 +99,9 @@ tth@fubar:~/Documents/TetaTricks/code$ \section{Autres langages} +En Perl\index{Perl} ? +En Fortran\index{Fortran} ? % -------------- to be continued diff --git a/chap/webserver.tex b/chap/webserver.tex index 14fba01..27fdc6a 100644 --- a/chap/webserver.tex +++ b/chap/webserver.tex @@ -6,7 +6,7 @@ % ============================================================== \section{Apache} \index{Apache} -Le grand classique. +Le grand classique. Que nous ne verrons pas pour le moment. % ============================================================== @@ -22,6 +22,13 @@ root@ramen:~# service lighttpd force-reload root@ramen:~# \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} diff --git a/code/awk/mkunion.awk b/code/awk/mkunion.awk new file mode 100644 index 0000000..e69de29