Compare commits

...

3 Commits

Author SHA1 Message Date
tTh 2a24703136 more bla 2023-11-29 14:12:03 +01:00
tTh da080e47e3 add a nasty R chapter 2023-11-29 14:10:57 +01:00
tTh 72892afeff raler un peu 2023-10-13 22:05:00 +02:00
16 changed files with 368 additions and 57 deletions

View File

@ -1,13 +1,14 @@
% ----------------------------------------------------------
\chapter{Basic}
\index{dosbox}\label{chap:Basic}
\label{chap:Basic}
\index{dosbox}\index{Basic}
% ====================================================================
% https://www.theregister.com/2023/03/28/nostalgic_for_basic/
% ====================================================================
\section{BASIC} \index{BASIC}
% \section{BASIC} \index{BASIC}
C'est probablement un des premiers langages interactifs utilisable par le
peuple et les gens. Déja, à ce titre, dénonce que ce langage
@ -75,6 +76,20 @@ dans un livre imprimé\dots
http://www.sdlbasic.altervista.org/main/
% ====================================================================
\section{Brandy}
\index{BBC} \index{Acorn}
https://www.bbcbasic.co.uk/index.html
\begin{quote}
Brandy is an interpreter for BBC BASIC V, the dialect of BASIC that
Acorn Computers supplied with their ranges of desktop computers that
use the ARM processor such as the Archimedes and Risc PC, and is still
in use on these and compatibles.
\end{quote}
% ====================================================================
\section{FreeBASIC} \index{FreeBASIC}

View File

@ -102,9 +102,11 @@ Comment exclure par \textsl{.gitignore} tous les fichiers \texttt{foo.html} ?
% ====================================================================
\section{Krkrkr...}
\section{Trucs}
Tout cela semble bien compliqué.
git archive --format tgz --prefix=my-project/
--output /tmp/my-project.tar.gz HEAD
% ====================================================================

View File

@ -135,6 +135,9 @@ la chose\dots
\subsection{Timestamp} \index{timestamp}
Comme promis un peu plus haut, le code est très simple.
C'est juste dommage qu'une fonction aussi utile ne fasse
pas partie de la \textsl{stdlib} du langage C\index{C},
alors qu'elle le mérite.
\lstinputlisting[language=c]{code/dtime.c}

237
chap/R.tex Normal file
View File

@ -0,0 +1,237 @@
\chapter{R}
\index{R}
% new: Mon Oct 9 07:44:09 UTC 2023
% https://raw.githubusercontent.com/wurli/r-best-practice/main/cheatsheet.jpg
% ======================================================================
Je n'ai certainement pas la prétention de vous enseigner
les arcanes du \textsl{R project},
je suis (octobre 2023) en pleine périoe de découverte.
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.
\begin{quote}
R is a language which bears a passing resemblance to the S language
developed at AT\&T Bell Laboratories.
It provides support for a variety of statistical and graphical analyses.
R is a true computer language which contains a number of control-flow
constructions for iteration and alternation.
It allows users to add additional functionality by defining new functions.
\end{quote}
% ======================================================================
\section{Les bases}
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.
On peut définir des variables, leur donner une valeur et faire des calculs
avec ces variables,
ce qui est bien suffisant pour commencer. Démonstration~:
\begin{verbatim}
> a <- 22
> b <- 7
> a ; b
[1] 22
[1] 7
> a / b
[1] 3.142857
\end{verbatim}
Les choses semblent simples, nous avons approximé $\pi$.
Les deux premières lignes affectent des valeurs aux variables a et b.
La troisième demande l'affichage de ces variables, et la quatrimème
fait le calcul du nombre qu'il faut apprendre aux sages..
% ----------------------------------------------------------------------
\subsection{Variables}
Elles sont auto-vivifiantes\footnote{Si quelqu'un a un meilleur terme,
je sui preneur}, c'est-à-dire qu'elles existent dès qu'elles
sont référencées, il n'y a pas de déclaration préalable à faire.
Enfin, avec R, il ne faudrait pas parler de variables, mais
d'objets, lesquels contenant les variables.
Ces objets/variables peuvent être de différents types : chaines de caractères,
valeurs numériques, booléens\dots
% ----------------------------------------------------------------------
\subsection{Builtins}
Quelques fonctions de base, plus ou moins vaguement expliquées.
\vspace{1em}
\begin{tabular}{|l|p{7cm}|}
\hline
\textbf{Fonction} & \textbf{Signification} \\
\hline
foo <- 3.14159 & Affectation d'une valeur à une variable \\
ls() & Liste les objets actuellement chargé. \\
help(foobar) & Avoir de l'aide sur la chose \textsl{foobar}, %
abréviation: ?foobar \\
class(pixel) & Classe de l'objet (numeric, data.frame, ...) \\
str(foobar) & Information sur l'objet 'foobar' \\
\hline
\end{tabular}
% ----------------------------------------------------------------------
\subsection{Scripting}
\textbf{R --vanilla --quiet < mon-script.R}
La magie du shebang\index{shebang}
% Heredoc ?
% ======================================================================
\section{Un cas concret}
Nous disposons d'un fichier SSV
(Space Separated Values)\footnote{C'est nouveau, ça vient de sortir.}
provenant d'un système optico-numérique bi-dimensionnel multi-planaire
(aka Webcam\index{Webcam}).
Et nous voulons en tirer quelques chiffres et graphiques bien
clinquants,
par exemple les éventuels rapports entre le rouge et le bleu.
Pour la facilité de la mise en page, nous allons utiliser un fichier
contenant seulement huit lignes de données,
alors qu'un cas réel en comprend quelques centaines de milliers.
Voici les quelques lignes de ce fichier~:
\begin{verbatim}
X Y R G B
0 0 0.000000 0.000000 0.000000
240 0 3967.814941 1983.907471 0.000000
480 0 7935.629883 3967.814941 0.000000
720 0 11903.445312 5951.722656 0.000000
0 240 0.000000 3967.814941 7935.629883
240 240 3967.814941 5951.722656 7935.629883
480 240 7935.629883 7935.629883 7935.629883
720 240 11903.445312 9919.537109 7935.629883
\end{verbatim}
Vous pouvez remarquer que les noms de colonnes sont sur la première
ligne du fichier, et qu'il y a deux types de données~:
les coordonnées x/y qui sont des nombres entiers, et les composantes
de couleur (r/g/b) qui sont des valeurs flottantes.
% ----------------------------------------------------------------------
Il nous faut maintenant charger ces données dans le logiciel.
La fonction \texttt{read.delim} est là pour ça, il faut juste lui
passer les options convenantes pour notre fichier de données~:
signaler la présence de l'entête avec les noms de colonnes et
le type du séparateur entre champs.
\begin{verbatim}
> pixels <- read.delim("foo.txt", header=TRUE, sep=' ')
> pixels
X Y R G B
1 0 0 0.000 0.000 0.00
2 240 0 3967.815 1983.907 0.00
3 480 0 7935.630 3967.815 0.00
4 720 0 11903.445 5951.723 0.00
5 0 240 0.000 3967.815 7935.63
6 240 240 3967.815 5951.723 7935.63
7 480 240 7935.630 7935.630 7935.63
8 720 240 11903.445 9919.537 7935.63
> class(pixels)
[1] "data.frame"
> pixels$G
[1] 0.000 1983.907 3967.815 5951.723 3967.815 5951.723 7935.630 9919.537
\end{verbatim}
Si vous avez fait cette manipulation, bravo, vous êtes maintenant
un \textsl{data-scientist} reconnu. Mais il nous reste beaucoup
de choses à apprendre. Le voyage n'est pas fini.
Il est temps d'explorer (ou exploiter ?) un peu nos données.
% ======================================================================
\section{Statistiques}
Oui, c'est un peu pour ça que \textbf{R} a été conçu.
Hélas ce n'est pas un domaine qui m'est familier, alors ce que
vous allez lire doit être pris avec des pincettes aussi bien
du coté des maths sous-jacentes que de la méthodologie.
\begin{verbatim}
> mean(pixels$R) ; mean(pixels$G)
[1] 5951.723
[1] 4959.769
\end{verbatim}
% ======================================================================
\section{Graphiques}
Bah c'est pas simple, alors j'ai activé le \textsl{rach-system} et je
suis arrivé à ce petit truc qui me permet de faire de la
\texttt{gif89a}\index{gif89a}, donc je suis content.
Vous allez voir, c'est assez simple, mais le diable\index{Prada}
se cache dans les détails, et un peu aussi dans la doc tortueuse.
% ----------------------------------------------------------------------
\subsection{x/y}
Un des classiques du genre.
\begin{verbatim}
R --vanilla --quiet << __EOR__
pixels <- read.delim("cumul.txt", header=TRUE, sep=' ')
png(filename="cumul.png", width=640, height=480)
plot(pixels\$X, pixels\$B, pch=".",
main="$title", sub="tTh 2023",
xlab="composante rouge",
ylab="composante bleu")
quit(save="no")
__EOR__
\end{verbatim}
Détaillons un peu le script~:
comme dans l'exemple précédent, nous chargeons nos données dans un
\textsl{data.frame}. Ensuite nous spécifions une sortie vers un
fichier image au format PNG\index{PNG}, avec une taille d'image fixée.
Finalement, nous traçons notre image avec l'instruction \texttt{plot}
et ses nombreux paramêtres.
Je vais détailler ceux qui sont utilisés dans cet exemple, et je vous rappelle
que \texttt{help(plot)} est là pour vous aider.
\begin{itemize}
\item \texttt{pch} : type de la plume utilisée
\item \texttt{main} : titre principal de la page
\item \texttt{sub} : sous-titre, placé tout en bas
\item \texttt{xlab} : label de l'axe des X
\item \texttt{ylab} : label de l'axe des Y
\end{itemize}
Avec ça, nous pouvons déja faire quelgues diagrammes corrects
\footnote{Voire même on peut tenter de la gif89a\index{gif89a}},
mais d'autres paramêtres devraient retenir notre attention, comme
la gestion des marges et des couleurs, comment exporter proprement
vers \LaTeX, peut-on faire de la 3D\index{3D}, \dots
% ----------------------------------------------------------------------
\subsection{Histogramme}
hist(datas\$V3, breaks=50)
% ======================================================================
\section{Interface avec l'OS}
% ======================================================================

View File

@ -2,6 +2,8 @@
\index{backup}
% https://blog.flozz.fr/2023/10/15/borgbackup-sauvegarde-sur-une-machine-distante-via-ssh/
% ===============================================================
\section{Geb...}

View File

@ -11,6 +11,8 @@
% ----------------------------------------------------------------
\subsection{CLI} \index{cli}
Commandes internes:
% ----------------------------------------------------------------
\subsection{Libreoffice} \index{Libreoffice}
@ -21,8 +23,6 @@
\section{GDBM} \index{GDBM}
Alors là, carrément du vieux truc...
\begin{quote}
GDBM - The GNU database manager. Includes dbm and ndbm compatibility.
\end{quote}
@ -41,26 +41,31 @@ de bijection relationnelle ?}.
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;
}
@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
sont du texte. Alors que DBM est prévu pour stocker des blocs de
binaire. Pour faciliter la récupération de ces chaines de caractères
par un hypothétique\footnote{Oui, je vais l'écrire bientôt.} programme
en C, le programme Perl rajoute un \texttt{'\textbackslash0'}
(fin de chaine) aux deux champs concernés.
% ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
\section{Postgresql}

View File

@ -180,12 +180,22 @@ oh surprise, contient votre nom de login.
Et justement, vous avez un programme sous la main que vous suspecter
d'avoir un problème relationnel avec cette variable.
Il nius faut donc remplacer le getenv de la libc par notre propre
Il nous faut donc remplacer le getenv de la libc par notre propre
version qui va écouter et exfiltrer l'utilisation de cette
fonction.
\lstinputlisting[language=C]{code/debug/spy_getenv.c}
Et à l'utilsation~:
\begin{verbatim}
tth@redlady:~$ LD_PRELOAD=~/Devel/TetaTricks/code/debug/spy_getenv date
--getenv--> TZ --> (nil)
--getenv--> TZ --> (nil)
Tue Oct 17 08:55:01 CEST 2023
tth@redlady:~$
\end{verbatim}
Simple et efficace.
% ==============================================================

View File

@ -32,6 +32,7 @@ et reçu le petit nom
de \textsc{gif89a}. Il y a toujours la limitation à 256 couleurs
et un seul niveau de transparence. Contraintes qui n'étaient pas si
génantes que ça à l'époque vu les terminaux visés.
Contraintes qu'un artiste numérique peut comprendre et accepter.
% ==================================================================
@ -49,7 +50,7 @@ Le \textsl{delay} est exprimé en millisecondes. On peut aussi
rajouter l'option \texttt{-loop nnn}\footnote{aka: add Netscape loop
extension to your GIF animation} avec nnn qui est le nombre de
boucle que doit faire l'animation. La valeur 0 demandant une
boucle infinie. Deux fois\index{Vous connaissez Chuck Norris ?}.
boucle infinie. Deux fois\footnote{Vous connaissez Chuck Norris ?}.
Et ensuite, vouv pouvez voir votre logo en flamme avec la
commande \texttt{animate foo.gif} sur votre super écran

View File

@ -36,7 +36,7 @@ cryptiques pour moi. Donc, on y arrive.
\end{center}
\end{figure}
Ceci dit, une lecture attentive du code source\footnote{UTSL} permettra
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.
@ -49,7 +49,7 @@ d'utilisation amusants.
\textbf{Persistence Of Vision} est un logiciel de raytracing qui
existe depuis plus de trente ans. C'est un lointain descendant
de DKBtrace.
de DKBtrace. Mais le raytracing, c'est quoi ?
\subsection{Caméra}
@ -72,8 +72,8 @@ lors du calcul de la séquence~:
#fclose CL
\end{verbatim}
Et la seconde, l'exploitation, ou plutôt la visualisation
des données~:
Et la seconde étape, l'exploitation, ou plutôt la visualisation
de ces données avec l'indémodable gnuplot\index{gnuplot}~:
\begin{verbatim}
#!/bin/bash
@ -137,7 +137,7 @@ initialiser un générateur~:
\texttt{\#declare RND = seed(13.37);}
Vous noterez au passage le fort degré de ce délicieux Corbière que je
Vous noterez au passage le fort degré alcolique de ce délicieux Corbière que je
déguste en ce moment même.
Ensuite, pour obtenir le résultat du tirage, on utilise le \textsl{handler}
que l'on vient d'obtenir~:
@ -187,7 +187,7 @@ transform {VIRGINIA}
\section{Avec Fortran}
plplot
plplot\index{plplot} est la piste à explorer.
% ------------------------------------------------

View File

@ -96,6 +96,8 @@ est la limite\footnote{Comme à peu près tout dans la vie.}
périphérique \texttt{/dev/parport}
Question: comment faire du \textsl{bitbanging} ?
% -----------------------------------------------------------
\section{Disques durs}
@ -167,6 +169,12 @@ filesystems}\footnote{You can tune a fs, but you can't tuna fish}.
% -----------------------------------------------------------
\section{Sensors} \index{sensors}
L'outil pour connaitre la température de votre CPU surmené.
% -----------------------------------------------------------
\section{Interface réseau}\index{NIC}
On a parfois besoin de savoir dans quel état est une interface

View File

@ -35,7 +35,8 @@ 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
manuellement une bibliothèque partagée (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.
@ -62,7 +63,7 @@ principal (l'appelant).
C'est ici que nous trouverons le code actif de l'exemple,
l'utilité de notre \textsl{usecase} reste à déterminer par nos
lecteurs, à titre d'exercice.
lecteurs, mais seulement à titre d'exercice.
\lstinputlisting[language=c]{code/plugiciel.c}
@ -75,7 +76,9 @@ la cinquième va vous étonner.
Voyons maintenant comment mettre ça en œuvre depuis le programme
principal.
Nous supposerons que le binaire du plugin est dans le répertoire
courant.
courant. Pour les autres cas, il faut jouer avec la variable
d'environnement \texttt{LD\_LIBRARY\_PATH} (cf man dlopen(3)) ou
le fichier \texttt{/etc/ld.so.cache} (cf man ldconfig(8)).
\lstinputlisting[language=c]{code/appelant.c}

View File

@ -50,6 +50,8 @@ et ensuite l'utilisation d'outils
extérieurs\footnote{Grep, Sed, Awk, BwBasic...}
divers. C'est \textsl{très} efficace.
% --------------------------------------------------------------
\subsection{Le \textsc{shebang}} \index{shebang}
Le shebang, c'est ce couple de caractères \texttt{\#!} qui apparait
@ -92,6 +94,20 @@ $
% ==============================================================
\section{Structures de contrôle}
% --------------------------------------------------------------
\subsection {Les tests}
Deux éléments sont ils-égaux ?
% --------------------------------------------------------------
\subsection {Les boucles}
% ==============================================================
\section{Les fonctions}
Une bonne manière de rendre votre code modulaire, et de réutiliser
@ -111,35 +127,38 @@ Et comment les utiliser~:
\section{Heredoc}
Un nom difficile à traduire, peut-être par « document en place » ?
Un nom bien difficile à traduire, peut-être par « document en place » ?
\lstinputlisting{code/shell/heredoc.sh}
\begin{verbatim}
tth@redlady:~/Devel/TetaTricks$ code/shell/heredoc.sh
1 +--------------------------------------------------------------------+
| +** *** + + + + |
0.8 |-+.......**..........:.**.......:..........:.........sin(x).*******-|
| ** : : * : : : : |
0.6 |-+....**..:..........:....**....:..........:..........:..........:+-|
| * : : * : : : : |
0.4 |-+.**.....:..........:.......*..:..........:..........:..........:+-|
| * : : * : : : : |
0.2 |-*........:..........:.........**..........:..........:..........:+-|
|* : : * : : : |
0 |-+........:..........:..........:**........:..........:..........:+-|
| : : : * : : : *|
-0.2 |-+........:..........:..........:..**......:..........:..........:*-|
| : : : * : : * |
-0.4 |-+........:..........:..........:.....*....:..........:........**:+-|
| : : : * : : * : |
-0.6 |-+........:..........:..........:.......**.:..........:.....**...:+-|
| : : : *: : ** : |
-0.8 |-+........:..........:..........:..........**.........:..**......:+-|
| + + + + *** +** + |
-1 +--------------------------------------------------------------------+
0 1 2 3 4 5 6
Here Doc
1 +--------------------------------------------------------------------+
| +** *** + + + + |
0.8 |-+.......**..........:.**.......:..........:.........sin(x).*******-|
| ** : : * : : : : |
0.6 |-+....**..:..........:....**....:..........:..........:..........:+-|
| * : : * : : : : |
0.4 |-+.**.....:..........:.......*..:..........:..........:..........:+-|
| * : : * : : : : |
0.2 |-*........:..........:.........**..........:..........:..........:+-|
|* : : * : : : |
0 |-+........:..........:..........:**........:..........:..........:+-|
| : : : * : : : *|
-0.2 |-+........:..........:..........:..**......:..........:..........:*-|
| : : : * : : * |
-0.4 |-+........:..........:..........:.....*....:..........:........**:+-|
| : : : * : : * : |
-0.6 |-+........:..........:..........:.......**.:..........:.....**...:+-|
| : : : *: : ** : |
-0.8 |-+........:..........:..........:..........**.........:..**......:+-|
| + + + + *** +** + |
-1 +--------------------------------------------------------------------+
0 1 2 3 4 5 6
\end{verbatim}
Je pense que l'exemple est assez parlant.

3
code/.gitignore vendored
View File

@ -19,4 +19,7 @@ plugiciel.so
send-osc
thread-demo
voirenv
xform/yesyno
debug/spy_getenv

3
code/R/README.md Normal file
View File

@ -0,0 +1,3 @@
# R
Be warned, Only garbage here.

View File

@ -1,7 +1,10 @@
#!/bin/bash
TITLE="Here Doc"
gnuplot << __EOC__
set term dumb
set grid
set title "$TITLE"
plot [x=0:pi*2] sin(x)
__EOC__

View File

@ -17,6 +17,10 @@
%
% hot to have \begin{quote} in sans serif ?
%
\makeatletter
\def\verbatim@font{\normalfont\ttfamily\small}
\def\quote@font{\sffamily}
\makeatother
\makeindex
@ -26,7 +30,7 @@
%------ reglages des 'listings'
\lstset{frame=single} % dessin d'un cadre autour du listing
\lstset{basicstyle=\ttfamily\small}
\lstset{aboveskip=1.0em,belowskip=1.0em}
\lstset{aboveskip=0.7em,belowskip=0.7em}
\setcounter{tocdepth}{1} % XXX à regarder un de ces jours ?
\pagestyle{plain}
@ -36,11 +40,6 @@
\setitemize[1]{label={\ding{87}}}
\frenchbsetup{CompactItemize=false}
\makeatletter
\def\verbatim@font{\normalfont\ttfamily\small}
% XXX \def\quote@font{\sffamily}
\makeatother
\title{Tricks pour mon ordinateur}
\author{Thierry « tTh » Boudet}
@ -50,8 +49,6 @@
% ==============================================================
\chapter{Introduction}
Un nouveau nouvel ouvrage, en vrac.
Des notes informelles sur l'utilisation
d'un ordinateur moderne, vous allez en avoir vraiment beaucoup.
Mais elles sont en vrac, et surtout, elles sont reprises
@ -131,7 +128,7 @@ en ligne sur le site du Tetalab. Your mileage may vary\dots
\input{chap/scripting}
\input{chap/Arduino}
\input{chap/Basic}
\input{chap/R} % new octobre 2023
% \input{chap/GMP}
\input{chap/Python}
\input{chap/dino}