Compare commits
3 Commits
c3e227f472
...
2a24703136
Author | SHA1 | Date | |
---|---|---|---|
|
2a24703136 | ||
|
da080e47e3 | ||
|
72892afeff |
@ -1,13 +1,14 @@
|
|||||||
% ----------------------------------------------------------
|
% ----------------------------------------------------------
|
||||||
\chapter{Basic}
|
\chapter{Basic}
|
||||||
\index{dosbox}\label{chap:Basic}
|
\label{chap:Basic}
|
||||||
|
\index{dosbox}\index{Basic}
|
||||||
|
|
||||||
% ====================================================================
|
% ====================================================================
|
||||||
|
|
||||||
% https://www.theregister.com/2023/03/28/nostalgic_for_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
|
C'est probablement un des premiers langages interactifs utilisable par le
|
||||||
peuple et les gens. Déja, à ce titre, dénonce que ce langage
|
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/
|
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}
|
\section{FreeBASIC} \index{FreeBASIC}
|
||||||
|
@ -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
|
||||||
|
|
||||||
% ====================================================================
|
% ====================================================================
|
||||||
|
|
||||||
|
@ -135,6 +135,9 @@ la chose\dots
|
|||||||
\subsection{Timestamp} \index{timestamp}
|
\subsection{Timestamp} \index{timestamp}
|
||||||
|
|
||||||
Comme promis un peu plus haut, le code est très simple.
|
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}
|
\lstinputlisting[language=c]{code/dtime.c}
|
||||||
|
|
||||||
|
237
chap/R.tex
Normal file
237
chap/R.tex
Normal 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}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
% ======================================================================
|
||||||
|
|
@ -2,6 +2,8 @@
|
|||||||
|
|
||||||
\index{backup}
|
\index{backup}
|
||||||
|
|
||||||
|
% https://blog.flozz.fr/2023/10/15/borgbackup-sauvegarde-sur-une-machine-distante-via-ssh/
|
||||||
|
|
||||||
|
|
||||||
% ===============================================================
|
% ===============================================================
|
||||||
\section{Geb...}
|
\section{Geb...}
|
||||||
|
23
chap/bdd.tex
23
chap/bdd.tex
@ -11,6 +11,8 @@
|
|||||||
% ----------------------------------------------------------------
|
% ----------------------------------------------------------------
|
||||||
\subsection{CLI} \index{cli}
|
\subsection{CLI} \index{cli}
|
||||||
|
|
||||||
|
Commandes internes:
|
||||||
|
|
||||||
|
|
||||||
% ----------------------------------------------------------------
|
% ----------------------------------------------------------------
|
||||||
\subsection{Libreoffice} \index{Libreoffice}
|
\subsection{Libreoffice} \index{Libreoffice}
|
||||||
@ -21,8 +23,6 @@
|
|||||||
|
|
||||||
\section{GDBM} \index{GDBM}
|
\section{GDBM} \index{GDBM}
|
||||||
|
|
||||||
Alors là, carrément du vieux truc...
|
|
||||||
|
|
||||||
\begin{quote}
|
\begin{quote}
|
||||||
GDBM - The GNU database manager. Includes dbm and ndbm compatibility.
|
GDBM - The GNU database manager. Includes dbm and ndbm compatibility.
|
||||||
\end{quote}
|
\end{quote}
|
||||||
@ -41,26 +41,31 @@ de bijection relationnelle ?}.
|
|||||||
|
|
||||||
use strict;
|
use strict;
|
||||||
use GDBM_File;
|
use GDBM_File;
|
||||||
|
|
||||||
my $nomdb = "exemple.gdbm";
|
my $nomdb = "exemple.gdbm";
|
||||||
my (%DB, @champs);
|
my (%DB, @champs);
|
||||||
my ($user, $gecos);
|
my ($user, $gecos);
|
||||||
|
|
||||||
open(SOURCE, "< /etc/passwd") or die "source $!";
|
open(SOURCE, "< /etc/passwd") or die "source $!";
|
||||||
tie(%DB, "GDBM_File", $nomdb, GDBM_WRCREAT, 0666) or die "gdbm $!";
|
tie(%DB, "GDBM_File", $nomdb, GDBM_WRCREAT, 0666) or die "gdbm $!";
|
||||||
|
|
||||||
while (<SOURCE>) {
|
while (<SOURCE>) {
|
||||||
@champs = split ":", $_;
|
@champs = split ":", $_;
|
||||||
$user = $champs[0]."\0";
|
$user = $champs[0]."\0";
|
||||||
$gecos = $champs[4]."\0";
|
$gecos = $champs[4]."\0";
|
||||||
$DB{$user} = $gecos;
|
$DB{$user} = $gecos;
|
||||||
}
|
}
|
||||||
|
|
||||||
untie %DB;
|
untie %DB;
|
||||||
close SOURCE;
|
close SOURCE;
|
||||||
0;
|
0;
|
||||||
\end{verbatim}
|
\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}
|
\section{Postgresql}
|
||||||
|
@ -180,12 +180,22 @@ oh surprise, contient votre nom de login.
|
|||||||
|
|
||||||
Et justement, vous avez un programme sous la main que vous suspecter
|
Et justement, vous avez un programme sous la main que vous suspecter
|
||||||
d'avoir un problème relationnel avec cette variable.
|
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
|
version qui va écouter et exfiltrer l'utilisation de cette
|
||||||
fonction.
|
fonction.
|
||||||
|
|
||||||
\lstinputlisting[language=C]{code/debug/spy_getenv.c}
|
\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.
|
Simple et efficace.
|
||||||
|
|
||||||
% ==============================================================
|
% ==============================================================
|
||||||
|
@ -32,6 +32,7 @@ et reçu le petit nom
|
|||||||
de \textsc{gif89a}. Il y a toujours la limitation à 256 couleurs
|
de \textsc{gif89a}. Il y a toujours la limitation à 256 couleurs
|
||||||
et un seul niveau de transparence. Contraintes qui n'étaient pas si
|
et un seul niveau de transparence. Contraintes qui n'étaient pas si
|
||||||
génantes que ça à l'époque vu les terminaux visés.
|
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
|
rajouter l'option \texttt{-loop nnn}\footnote{aka: add Netscape loop
|
||||||
extension to your GIF animation} avec nnn qui est le nombre de
|
extension to your GIF animation} avec nnn qui est le nombre de
|
||||||
boucle que doit faire l'animation. La valeur 0 demandant une
|
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
|
Et ensuite, vouv pouvez voir votre logo en flamme avec la
|
||||||
commande \texttt{animate foo.gif} sur votre super écran
|
commande \texttt{animate foo.gif} sur votre super écran
|
||||||
|
@ -36,7 +36,7 @@ cryptiques pour moi. Donc, on y arrive.
|
|||||||
\end{center}
|
\end{center}
|
||||||
\end{figure}
|
\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
|
de contourner ces petits désagréments, et de rédiger quelques exemples
|
||||||
d'utilisation amusants.
|
d'utilisation amusants.
|
||||||
|
|
||||||
@ -49,7 +49,7 @@ d'utilisation amusants.
|
|||||||
|
|
||||||
\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.
|
de DKBtrace. Mais le raytracing, c'est quoi ?
|
||||||
|
|
||||||
\subsection{Caméra}
|
\subsection{Caméra}
|
||||||
|
|
||||||
@ -72,8 +72,8 @@ lors du calcul de la séquence~:
|
|||||||
#fclose CL
|
#fclose CL
|
||||||
\end{verbatim}
|
\end{verbatim}
|
||||||
|
|
||||||
Et la seconde, l'exploitation, ou plutôt la visualisation
|
Et la seconde étape, l'exploitation, ou plutôt la visualisation
|
||||||
des données~:
|
de ces données avec l'indémodable gnuplot\index{gnuplot}~:
|
||||||
|
|
||||||
\begin{verbatim}
|
\begin{verbatim}
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
@ -137,7 +137,7 @@ initialiser un générateur~:
|
|||||||
|
|
||||||
\texttt{\#declare RND = seed(13.37);}
|
\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.
|
déguste en ce moment même.
|
||||||
Ensuite, pour obtenir le résultat du tirage, on utilise le \textsl{handler}
|
Ensuite, pour obtenir le résultat du tirage, on utilise le \textsl{handler}
|
||||||
que l'on vient d'obtenir~:
|
que l'on vient d'obtenir~:
|
||||||
@ -187,7 +187,7 @@ transform {VIRGINIA}
|
|||||||
|
|
||||||
\section{Avec Fortran}
|
\section{Avec Fortran}
|
||||||
|
|
||||||
plplot
|
plplot\index{plplot} est la piste à explorer.
|
||||||
|
|
||||||
|
|
||||||
% ------------------------------------------------
|
% ------------------------------------------------
|
||||||
|
@ -96,6 +96,8 @@ est la limite\footnote{Comme à peu près tout dans la vie.}
|
|||||||
|
|
||||||
périphérique \texttt{/dev/parport}
|
périphérique \texttt{/dev/parport}
|
||||||
|
|
||||||
|
Question: comment faire du \textsl{bitbanging} ?
|
||||||
|
|
||||||
% -----------------------------------------------------------
|
% -----------------------------------------------------------
|
||||||
|
|
||||||
\section{Disques durs}
|
\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}
|
\section{Interface réseau}\index{NIC}
|
||||||
|
|
||||||
On a parfois besoin de savoir dans quel état est une interface
|
On a parfois besoin de savoir dans quel état est une interface
|
||||||
|
@ -35,7 +35,8 @@ and dlclose().
|
|||||||
\end{quote}
|
\end{quote}
|
||||||
|
|
||||||
Traduit en clair, la fonction \texttt{dlopen} permet de charger
|
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
|
laisser faire le loader (ld.so) automatiquement au lancement
|
||||||
d'un binaire. la fonction \texttt{dlclose} va, elle, vidanger
|
d'un binaire. la fonction \texttt{dlclose} va, elle, vidanger
|
||||||
la zone mémoire dans laquelle est le plugin.
|
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,
|
C'est ici que nous trouverons le code actif de l'exemple,
|
||||||
l'utilité de notre \textsl{usecase} reste à déterminer par nos
|
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}
|
\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
|
Voyons maintenant comment mettre ça en œuvre depuis le programme
|
||||||
principal.
|
principal.
|
||||||
Nous supposerons que le binaire du plugin est dans le répertoire
|
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}
|
\lstinputlisting[language=c]{code/appelant.c}
|
||||||
|
|
||||||
|
@ -50,6 +50,8 @@ et ensuite l'utilisation d'outils
|
|||||||
extérieurs\footnote{Grep, Sed, Awk, BwBasic...}
|
extérieurs\footnote{Grep, Sed, Awk, BwBasic...}
|
||||||
divers. C'est \textsl{très} efficace.
|
divers. C'est \textsl{très} efficace.
|
||||||
|
|
||||||
|
% --------------------------------------------------------------
|
||||||
|
|
||||||
\subsection{Le \textsc{shebang}} \index{shebang}
|
\subsection{Le \textsc{shebang}} \index{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
|
||||||
@ -92,6 +94,20 @@ $
|
|||||||
|
|
||||||
% ==============================================================
|
% ==============================================================
|
||||||
|
|
||||||
|
\section{Structures de contrôle}
|
||||||
|
|
||||||
|
% --------------------------------------------------------------
|
||||||
|
|
||||||
|
\subsection {Les tests}
|
||||||
|
|
||||||
|
Deux éléments sont ils-égaux ?
|
||||||
|
|
||||||
|
% --------------------------------------------------------------
|
||||||
|
|
||||||
|
\subsection {Les boucles}
|
||||||
|
|
||||||
|
% ==============================================================
|
||||||
|
|
||||||
\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
|
||||||
@ -111,35 +127,38 @@ Et comment les utiliser~:
|
|||||||
|
|
||||||
\section{Heredoc}
|
\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}
|
\lstinputlisting{code/shell/heredoc.sh}
|
||||||
|
|
||||||
\begin{verbatim}
|
\begin{verbatim}
|
||||||
tth@redlady:~/Devel/TetaTricks$ code/shell/heredoc.sh
|
tth@redlady:~/Devel/TetaTricks$ code/shell/heredoc.sh
|
||||||
|
|
||||||
1 +--------------------------------------------------------------------+
|
Here Doc
|
||||||
| +** *** + + + + |
|
|
||||||
0.8 |-+.......**..........:.**.......:..........:.........sin(x).*******-|
|
1 +--------------------------------------------------------------------+
|
||||||
| ** : : * : : : : |
|
| +** *** + + + + |
|
||||||
0.6 |-+....**..:..........:....**....:..........:..........:..........:+-|
|
0.8 |-+.......**..........:.**.......:..........:.........sin(x).*******-|
|
||||||
| * : : * : : : : |
|
| ** : : * : : : : |
|
||||||
0.4 |-+.**.....:..........:.......*..:..........:..........:..........:+-|
|
0.6 |-+....**..:..........:....**....:..........:..........:..........:+-|
|
||||||
| * : : * : : : : |
|
| * : : * : : : : |
|
||||||
0.2 |-*........:..........:.........**..........:..........:..........:+-|
|
0.4 |-+.**.....:..........:.......*..:..........:..........:..........:+-|
|
||||||
|* : : * : : : |
|
| * : : * : : : : |
|
||||||
0 |-+........:..........:..........:**........:..........:..........:+-|
|
0.2 |-*........:..........:.........**..........:..........:..........:+-|
|
||||||
| : : : * : : : *|
|
|* : : * : : : |
|
||||||
-0.2 |-+........:..........:..........:..**......:..........:..........:*-|
|
0 |-+........:..........:..........:**........:..........:..........:+-|
|
||||||
| : : : * : : * |
|
| : : : * : : : *|
|
||||||
-0.4 |-+........:..........:..........:.....*....:..........:........**:+-|
|
-0.2 |-+........:..........:..........:..**......:..........:..........:*-|
|
||||||
| : : : * : : * : |
|
| : : : * : : * |
|
||||||
-0.6 |-+........:..........:..........:.......**.:..........:.....**...:+-|
|
-0.4 |-+........:..........:..........:.....*....:..........:........**:+-|
|
||||||
| : : : *: : ** : |
|
| : : : * : : * : |
|
||||||
-0.8 |-+........:..........:..........:..........**.........:..**......:+-|
|
-0.6 |-+........:..........:..........:.......**.:..........:.....**...:+-|
|
||||||
| + + + + *** +** + |
|
| : : : *: : ** : |
|
||||||
-1 +--------------------------------------------------------------------+
|
-0.8 |-+........:..........:..........:..........**.........:..**......:+-|
|
||||||
0 1 2 3 4 5 6
|
| + + + + *** +** + |
|
||||||
|
-1 +--------------------------------------------------------------------+
|
||||||
|
0 1 2 3 4 5 6
|
||||||
\end{verbatim}
|
\end{verbatim}
|
||||||
|
|
||||||
Je pense que l'exemple est assez parlant.
|
Je pense que l'exemple est assez parlant.
|
||||||
|
3
code/.gitignore
vendored
3
code/.gitignore
vendored
@ -19,4 +19,7 @@ plugiciel.so
|
|||||||
send-osc
|
send-osc
|
||||||
thread-demo
|
thread-demo
|
||||||
voirenv
|
voirenv
|
||||||
|
|
||||||
xform/yesyno
|
xform/yesyno
|
||||||
|
|
||||||
|
debug/spy_getenv
|
||||||
|
3
code/R/README.md
Normal file
3
code/R/README.md
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
# R
|
||||||
|
|
||||||
|
Be warned, Only garbage here.
|
@ -1,7 +1,10 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
|
TITLE="Here Doc"
|
||||||
|
|
||||||
gnuplot << __EOC__
|
gnuplot << __EOC__
|
||||||
set term dumb
|
set term dumb
|
||||||
set grid
|
set grid
|
||||||
|
set title "$TITLE"
|
||||||
plot [x=0:pi*2] sin(x)
|
plot [x=0:pi*2] sin(x)
|
||||||
__EOC__
|
__EOC__
|
@ -17,6 +17,10 @@
|
|||||||
%
|
%
|
||||||
% hot to have \begin{quote} in sans serif ?
|
% hot to have \begin{quote} in sans serif ?
|
||||||
%
|
%
|
||||||
|
\makeatletter
|
||||||
|
\def\verbatim@font{\normalfont\ttfamily\small}
|
||||||
|
\def\quote@font{\sffamily}
|
||||||
|
\makeatother
|
||||||
|
|
||||||
\makeindex
|
\makeindex
|
||||||
|
|
||||||
@ -26,7 +30,7 @@
|
|||||||
%------ reglages des 'listings'
|
%------ reglages des 'listings'
|
||||||
\lstset{frame=single} % dessin d'un cadre autour du listing
|
\lstset{frame=single} % dessin d'un cadre autour du listing
|
||||||
\lstset{basicstyle=\ttfamily\small}
|
\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 ?
|
\setcounter{tocdepth}{1} % XXX à regarder un de ces jours ?
|
||||||
\pagestyle{plain}
|
\pagestyle{plain}
|
||||||
@ -36,11 +40,6 @@
|
|||||||
\setitemize[1]{label={\ding{87}}}
|
\setitemize[1]{label={\ding{87}}}
|
||||||
\frenchbsetup{CompactItemize=false}
|
\frenchbsetup{CompactItemize=false}
|
||||||
|
|
||||||
\makeatletter
|
|
||||||
\def\verbatim@font{\normalfont\ttfamily\small}
|
|
||||||
% XXX \def\quote@font{\sffamily}
|
|
||||||
\makeatother
|
|
||||||
|
|
||||||
\title{Tricks pour mon ordinateur}
|
\title{Tricks pour mon ordinateur}
|
||||||
\author{Thierry « tTh » Boudet}
|
\author{Thierry « tTh » Boudet}
|
||||||
|
|
||||||
@ -50,8 +49,6 @@
|
|||||||
% ==============================================================
|
% ==============================================================
|
||||||
\chapter{Introduction}
|
\chapter{Introduction}
|
||||||
|
|
||||||
Un nouveau nouvel ouvrage, en vrac.
|
|
||||||
|
|
||||||
Des notes informelles sur l'utilisation
|
Des notes informelles sur l'utilisation
|
||||||
d'un ordinateur moderne, vous allez en avoir vraiment beaucoup.
|
d'un ordinateur moderne, vous allez en avoir vraiment beaucoup.
|
||||||
Mais elles sont en vrac, et surtout, elles sont reprises
|
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/scripting}
|
||||||
\input{chap/Arduino}
|
\input{chap/Arduino}
|
||||||
\input{chap/Basic}
|
\input{chap/Basic}
|
||||||
|
\input{chap/R} % new octobre 2023
|
||||||
% \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