un debut assez timide...

This commit is contained in:
tth 2020-09-27 17:15:15 +02:00
commit 21b246c244
12 changed files with 772 additions and 0 deletions

11
.gitignore vendored Normal file
View File

@ -0,0 +1,11 @@
log.*
main.aux
main.idx
main.ilg
main.ind
main.log
main.pdf
main.toc

17
Makefile Normal file
View File

@ -0,0 +1,17 @@
# exemples du bouquin
ex_curses: ex_curses.c Makefile
gcc -Wall $< -o $@ -lncurses
TOTAR = chap/*.tex chap/*.png *.tex *.c Makefile *.sh *.awk
tarball: $(TOTAR)
date >> tarball
ls $(TOTAR) | sed 's/^/Ordinateur\//' > MANIFEST
( cd .. ; tar zcvf livre_ordinateur.tar.gz `cat Ordinateur/MANIFEST` )

4
README.md Normal file
View File

@ -0,0 +1,4 @@
# TetaTricks
Astuces diverses...

BIN
chap/alsamixer.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

36
chap/backups.tex Normal file
View File

@ -0,0 +1,36 @@
\chapter{Backups}
\index{backup}
% ===============================================================
\section{Geb...}
Si tu fais tous tes tgz d'un coup, puis les copie, tous d'un coup, les
copier juste après les avoir générés permettrait d'éviter de les relire
(et potentiellement de paralléliser)
Si les fichiers sont gros (trop pour tenir en ram), et changent tous
les jours, scp à la place d'rsync sera vraisemblablement plus performant
(pas de comparaison de checksum sources / destinations, d'autant plus
important si c'est sur des répertoires entiers)
Je suppose que tu n'utilises pas rsync -z ? Sinon, il ne sert
vraisemblablement à rien, les fichiers étant déjà compréssés.
Si tu gzip plusieurs Go à chaque fois, et a plusieurs cores, pigz
(https://zlib.net/pigz/) devrait etre plus performant que gzip (tu peux
le ln -s / dpkg --divert à la place de gzip), le gain est quasi linéaire
par rapport au nombre de cores.
gzip, comme pigz permettent de régler le niveau de compression.
Généralement diminuer celui-ci raisonnablement impacte peu la taille des
fichiers générés mais énormément les temps dexécution (et peut être la
mémoire).
La réactivité de ton système s'en ressent elle si tu lances tes
scripts à coup de nice -n10 ( / -n15 / -n20 ) sans que cela augmente
trop les temps de backup ?
Quid de juste rsync sur ton serveur et faire les tgz à l'autre bout
(tu profiteras ainsi pleinement du coté incrémental d'rsync) ?

81
chap/dino.tex Normal file
View File

@ -0,0 +1,81 @@
% ==============================================================
% TRUCS DE VIEUX
\chapter{trucs de dino}
Je vais, dans ce chapitre, parler de choses que les moins de vingt
ans ne peuvent pas connaitre. Des choses qui existaient
\textsl{bien avant} le Web\index{www} !
% ==============================================================
\section{inetd}
\index{inetd}\label{inetd}
Aussi connu sous le nom de « superserveur Internet », ce démon
a fait ses premiers pas dans l'Unix 4.3BSD
et depuis est maintenant remplacé par
\texttt{xinetd}\index{xinetd},
décrit en page \pageref{xinetd}.
Inetd a pour but de gérer l'accès à des services réseaux,
qui peuvent être internes ou externes. Un service interne
est entièrement géré par Inetd : on y trouve par exempme
daytime qui permet de connaitre l'heure qu'il est à
l'autre bout du monde :
\begin{verbatim}
tth@plop:~$ grep daytime /etc/inetd.conf
daytime stream tcp nowait root internal
tth@plop:~$ nc uind.cispeo.fr daytime
29 JUL 2014 21:10:30 CEST
\end{verbatim}
Dans ce cas, c'est directement Inetd qui répond. Mais il sait
faire une autre chose, bien plus constructive :
toujours répondre à
un appel venant du grand Ternet, mais maintenanr nous allons
déléguer le traitement de la demande à un
autre participant.
Il ne reste plus qu'à le mettre en œuvre, en réutilisant
un exemple très ancien\footnote{Août 1998, lors d'une
réunion du CULTe, à Toulouse}, et très simple à
comprendre.
\subsection{qotd}
\index{qotd}
Le protocole « Quote Of The Day » (\texttt{qotd}) a été
normalise dans le \texttt{rfc865}, écrit en 1983 par John Postel.
Une rapide implémentation du moteur de quote peut être codée en Shell :
\index{fortune}
\begin{lstlisting}[language=sh]
#!/bin/sh
/usr/games/fortune -a -n 500
\end{lstlisting}
Maintenant, il nous faut dire à Inetd d'appeler ce moteur
chaque fois qu'une connection tcp entrante arrive sur le
port 17.
% ==============================================================
\section{gopher}
\index{gopher}
Sur le port 70.
\begin{quote}
The Internet Gopher(tm) software and documentation is copyright (c)
1991, 1992, 1993, 1994 by the University of Minnesota.
\end{quote}
% ==============================================================

100
chap/gadgets.tex Normal file
View File

@ -0,0 +1,100 @@
\chapter{Gadgets}
% ===============================================================
\section{Fortune}
\index{fortune}
Un rapide petit exemple, avant de passer aux choses techniques :
\begin{verbatim}
tth@plop:~$ fortune
You will outgrow your usefulness.
tth@plop:~$ fortune
Future looks spotty. You will spill soup in late evening.
tth@plop:~$ fortune
You are deeply attached to your friends and acquaintances.
tth@plop:~$
\end{verbatim}
Bref, vous voyez le principe : c'est un machin à raconter des
trucs plus ou
moins aléatoires\footnote{et jamais revenus, il faut bien le
préciser.}. Il y a tout un tas d'options intéressantes,
la principale étant \texttt{-o} pour avoir les fortunes
offensives\index{porn} qui peuvent choquer les âmes
sensibles.
Nous allons donc maintenant
le plier à notre volonté en créant nous même le contenu adéquat.
Pour cela, nous devons tout d'abord préparer un fichier texte
contenant tous nos aphorismes, séparés par une ligne
contenant uniquement le caractère \texttt{\%}.
Ensuite, il faut utiliser \texttt{strfile}\index{strfile} qui
va préparer une version indexée de notre fichier texte afin
qu'il soit utilisable par fortune.
Le pendant graphique est \texttt{xcowsay}.
% ===============================================================
\section{/usr/games/}
On trouvera dans ce répertoire une collections de jeux anciens,
dont certains datent d'une époque où la \texttt{vt102} était
un terminal de luxe.
Certains remontent même à l'antique Unix de Berkeley\index{BSD}.
Et quelques-uns d'entre eux sont devenus, au fil du temps, de
grands classiques.
\subsection{les générateurs}
\index{morse}\index{ppt}
Les décideurs pressés seront heureux de pouvoir enrichir leurs
PointPuissant\index{beamer} avec de très écoles-anciennes messages
cryptiques avec ces quelques outils ergonomiques et pipelinables
avec d'autres fidèles serviteurs.
\begin{verbatim}
tth@plop $ morse -s we make porn | tr '\n' ' ' ; echo
.-- . -- .- -.- . .--. --- .-. -. ...-.-
tth@plop $ ppt we make porn | tr 'o' '*'
___________
| *** .***|
| ** .* *|
| * . |
| ** *.* *|
| ** . *|
| ** *. **|
| ** .* *|
| * . |
| *** . |
| ** *.***|
| *** . * |
| ** *.** |
___________
\end{verbatim}
Certains esprits ouverts pensent que
\texttt{fortune}\index{fortune} est aussi un
générateur de données futilement complexes.
D'autres songent à MXDoctor\index{emacs} ou Camélia.
\subsection{Les animations}
Ahem, là, c'est délicat, parce que je ne sais pas
vraiment\footnote{Enfin, si, j'essaye de confectionner
un soft pour fabriquer des flipbooks à partir de portnawak}
d'animation imprimable.
% ===============================================================

202
chap/son.tex Normal file
View File

@ -0,0 +1,202 @@
\chapter{Son}
\label{Son}
%------------------------------------------------------------------
\section{ALSA}
\index{ALSA}
ALSA, \textit{Advanced Linux Sound Architecture}, gère
à peu près correctement les entrées/sorties sonores
d'une machine Linux, aussi bien en audio qu'en
\textsc{midi}\footnote{Voir page \pageref{MIDI}
pour en savoir plus.}.
Nous allons faire le tour de quelques outils associés.
En premier, le « centre de contrôle »,
\texttt{alsamixer}, dont la qualitée de l'interface
en Curses\index{curses} est époustouflante :
\begin{figure}[h]
\begin{center}
\includegraphics[scale=0.50]{chap/alsamixer}
\caption{Alsamixer}
\end{center}
\end{figure}
Ensuite, nous avons \texttt{aplay} et \texttt{arecord},
qui permettent d'écouter et d'enregistrer les sets de
James Lewis\footnote{Que ça, c'est de la noise !}.
\subsection{arecord}
Si vous avez plusieurs cartes son, la sélection du
\textsl{device} est assez piégeuse~: ce n'est pas
l'option \texttt{-l} qui vous donnera la bonne piste,
mais \texttt{-L} à utiliser.
\subsection{Le reste}
Et quand on regarde par la lorgnette du programmeur, on découvre
rapidement que l'utilisation d'ALSA n'est pas si simple que
ça, essentiellement à cause d'une documentation spartiate.
Heurensement, pour certains domaines, il existe des
surcouches plus simple d'emploi : \texttt{libao}\index{libao}
pour les sorties
sonores, XXX\index{XXX} pour le reste.
%------------------------------------------------------------------
\section{pulseaudio}
\index{pulseaudio}
\label{pulseaudio}
On avait pourtant dit « \textbf{pas de trolls} », mais il va quand
même falloir y passer : ce machin prétenduement
\textsl{michu compliant}\index{Michu}
a parfois, voire même souvent, tendance à se mettre en travers
du chemin des honnètes gens.
%------------------------------------------------------------------
\section{Jack}
\index{Jack}
Jack Audio Connection Kit : ce sous-système\footnote{Dans le monde
Linux, on aime bien les sous-systèmes pour le son.} est
destiné avant tout aux professionnels de la musique.
Je vais attendre le retour de mon spécialiste préféré pour
lui laisser le soin d'en parler.
Jack peut aussi servir de source sonore pour
darkice\index{darkice}, lequel pourra feeder un
Icecast\index{icecast}
%------------------------------------------------------------------
\section{libsndfile}
\label{libsndfile}
\index{libsndfile}
Libsndfile est essentiellement une très complète bibliothèque
de lecture/écriture de fichiers sons.
Elle permet de gérer facilement un nombre
considérable de formats de fichiers\footnote{Mais ceci est une autre
histoire, que nous verrons peut-être un de ces jours\dots}.
Par contre, elle arrive avec une floppée d'outils en ligne de
commande, dont certains sont assez performants.
Citons, entre autres, \texttt{sndfile-resample} qui est un
convertisseur de
fréquence d'échantillonage très performant.
%------------------------------------------------------------------
\section{libao}
\label{libao}
\index{libao}
C'est une bibliothèque de fonctions pour gérer les sorties sonores
d'une application
(\textsl{Libao is a cross-platform audio library that allows programs
to output audio using a simple API on a wide variety of platforms.}).
Elle supporte une grande variété de formats.
\lstinputlisting[language=C]{ao_example.c}
%------------------------------------------------------------------
\section{Ladspa}
\index{ladspa}
Ladspa, mais c'est quoi ? C'est l'acronyme de
« Linux Audio Developers Simple Plugin API », ou, en français :
« machin avancé ».
La commande \texttt{listplugins}, comme son nom l'indique, fournit
la liste de tous les plugins accessibles.
%------------------------------------------------------------------
\section{Sox}
\index{Sox} \label{Sox}
Sox est le « couteau suisse » des manipulateurs de données
sonores. Sa documentation étant assez ésotérique, je vais
faire comme d'hab' : présenter des exemples.
\subsection{Conversions}
Nous avons un process quelconque qui nous délivre des données
en format texte, tel que celles-ci, deux valeurs par ligne,
normalisées dans l'intervalle $]-1,1[$, et nous voulons obtenir
un .Wav vanille.
\begin{verbatim}
0.286498189155 0.33310689881
0.0500751550941 -0.326965910932
-0.01317994812 -0.392365740013
-0.353560435178 -0.018978716441
\end{verbatim}
Voici comment faire dans un contexte de \textit{Makefile} :
\begin{verbatim}
random.wav: random.dat Makefile
@echo " conversion " $< $@
sox --rate 44100 $< $@
\end{verbatim}
\subsection{Génération}
play -n synth sine 480 sine 620 remix 1-2 fade 0 0.5 delay 0.5 repeat 5
\subsection{Traitements}
\texttt{sox --norm source.wav normal.wav} pour normaliser un son.
\texttt{sox left.wav right.wav -M stereo.wav} pour combiner deux
voies mono en un fichier stéréo. \texttt{-M} est l'abréviation
de \texttt{--combine merge}.
%------------------------------------------------------------------
\section{espeak}
\index{espeak}
Logiciel de synthèse vocale.
\begin{verbatim}
tth@plop:~/RADIO$ espeak --voices=fr
Pty Language Age/Gender VoiceName File Other Langs
5 fr M french fr
7 fr M french-mbrola-1 mb/mb-fr1
7 fr F french-mbrola-4 mb/mb-fr4
5 fr-be M french (Belgium) fr-be
\end{verbatim}
%------------------------------------------------------------------
\section{Pour finir...}
En conclusion, le son avec Linux, c'est un peu la grande foire.
On arrive parfois même à y voir du
XML\index{XML} dedans et c'est en page \pageref{icecast2}
pour les courageux. On peut aussi carrément utiliser un langage
spécialisé comme \textit{liquidsoap}\index{liquidsoap}.
%------------------------------------------------------------------

201
chap/streaming.tex Normal file
View File

@ -0,0 +1,201 @@
%
% new 24 juillet 2014 - Mixart Myrys
%
\chapter{streaming}
\label{streaming}
\index{streaming}
Avertissement : pour le moment\footnote{En juillet 2014}, nous
n'allons nous pencher que sur la diffusion de flux audios, avec
des encodages libres comme \textsl{ogg} ou \textsl{speex}.
Tout simplement parce que le monde de la vidéo est un gigantesque
foutoir de codecs, de containers, de brevets logiciels et
d'incompatiblités diverses et variées.
%-------------------------------------------------------------
\section{icecast2}
\index{icecast2}
\label{icecast2}
\begin{quote}
Icecast, the project, is a collection of programs and libraries for
streaming audio over the Internet. This includes:
Icecast, the program that streams audio data to listeners,
libshout, a library for communicating with Icecast servers and
IceS\index{ices}, a program that sends audio data to Icecast servers
\end{quote}
Icecast est, semble-t-il, \textbf{le} serveur de stream de référence.
Il se configure facilement avec des fichiers en XML\index{XML}.
Première approche d'une ergonomie différente, vous êtes avertis.
\textsl{more to come...}
%-------------------------------------------------------------
\section{idjc}
\index{idjc}
\begin{quote}
Internet DJ Console is an Internet radio application for making a
live radio show or podcast. Features include two main media players
with a crossfader, a jingle player, microphone signal processing
(compressor and noise gate)
\end{quote}
%-------------------------------------------------------------
\section{liquidsoap}
\index{liquidsoap}
\begin{quote}
Liquidsoap is an extensible and flexible audio stream generator, mainly
used for streaming to a shoutcast/icecast server.
It is also possible
to output in a file, to speakers or as raw PCM stream.
liquidsoap can
perform any audio processing, mixing streams together,
applying filters, generating sound procedurally,
there is no limit but your imagination.
Input files can be accessed through the network, using samba,
ftp or speech synthesis.
The system features lots of programming operators, including user
requests, time-based selection, sum...
\end{quote}
Un étonnant langage de script pour gérer tous ces octets musicaux
en les promenant un peu dans tous les sens, la possibilité
de commander Savonet avec un simple telnet\index{telnet}.
Vite, un exemple d'utilisation, vous créez un fichier texte avec
cez quelques lignes dedans et vous le sauvez sous le nom
\texttt{savon.liq} :
\begin{verbatim}
set("log.file.path","/tmp/savon.log")
set("log.stdout",true)
output.icecast (%vorbis,
host = "10.20.0.23",
port = 1984,
password = "hopla!",
mount = "savon.ogg",
single("loveme.ogg"))
\end{verbatim}
Avec ce petit programme, nous pouvons envoyer en boucle un fichier
Ogg vers notre serveur.
Les deux premières lignes permettent de voir et d'enregistrer les
diverses actions.
Et la grosse instruction \texttt{output.icecast}
envoie la musique dans votre serveur
Icecast2 en passant les paramètres nécessaires.
\subsection{10.20.0.23}
Maintenant, voyons un exemple plus complet et plus réaliste,
largement inspiré d'un tutoriel de la documentation officielle,
et qui deviendra un de ces jours la base de Radio-Myrys :
\begin{verbatim}
set("log.file.path", "/tmp/savon.log")
set("log.stdout", false)
default = single("loveme.ogg")
openbsd = playlist(mode="random", "files/openbsd.pls")
others = playlist(mode="random", "files/others.pls")
jingles = playlist( "files/jingles.pls")
radio = fallback([ switch([({ 5h-11h }, openbsd),
({ 11h-5h }, others)]),
default])
radio = random(weights=[1,12],[ jingles, radio ])
output.icecast( %vorbis,
host = "localhost",
port = 1984,
password = "hopla!",
mount = "savon.ogg",
radio)
\end{verbatim}
Ah bah oui, ça commence à être robuste, mais en fait c'est
assez simple à comprendre, et un peu plus compliqué à mettre
en œuvre.
On se retrouve vite face à un problème classique :
les différences de niveau sonore entre les divers morceaux.
Et comme on veut avancer sur d'autres choses, on rache un
petit bout de Bash avec de la poudre verte dedans :
\begin{verbatim}
#!/bin/bash/
echo "que faire ?"
\end{verbatim}
Cette poudre verte pourrait bien être \texttt{vorbisgain(1)}\dots
\subsection{rotation des playlists}
\begin{verbatim}
pl2014 = playlist("2014")
pl2013 = playlist("2013")
...
jingles = playlist("jingles")
s = rotate([pl2014, pl2013, ..., jingles])
output.icecast(..., s)
\end{verbatim}
\subsection{trucs divers}
Que signifie ce message : \textbf{That source is fallible.} ?
Par exemple, que le fichier que vous aviez soigneusement
désigné comme \texttt{default} n'existe plus sur le disque.
Comment envoyer vers plusieurs icecasts ? Bah c'est très facile :
il suffit de mettre plusieurs "blocs" \texttt{output.icecast} à
la suite les uns des autres ;)
%====================================================================
\section{Source clients}
\label{sourceclients}
%-------------------------------------------------------------
\subsection{Ezstream}
\begin{quote}
Ezstream is an audio and video streaming client which feeds any
icecast server with audio data and metadata from a standard input
without reencoding. It thus requires very little CPU resources. Some
playlists can be looped and composed with MP3, Ogg Vorbis or Ogg
Theora media files.
\end{quote}
%-------------------------------------------------------------
\subsection{darkice}
\index{darkice}
\begin{quote}
DarkIce as a live audio streamer. It records audio from an audio
interface (e.g. sound card), encodes it and sends it to a streaming server.
\end{quote}
%-------------------------------------------------------------
\subsection{VLC}
\index{vlc}
%====================================================================
%-------------------------------------------------------------

10
go.sh Executable file
View File

@ -0,0 +1,10 @@
#!/bin/bash
pdflatex main
makeindex main
pdflatex main
date >> log.toto

106
main.tex Normal file
View File

@ -0,0 +1,106 @@
\documentclass[a4paper,11pt,openany]{book}
\usepackage[francais]{babel}
\usepackage[utf8]{inputenc}
\usepackage{xspace}
\usepackage{makeidx}
\usepackage{graphicx}
\usepackage{listings}
\makeindex
\setlength \parindent {2em}
% XXX \setlength \parskip {0.333em}
%------ reglages des 'listings'
\lstset{frame=single} % dessin d'un cadre autour du listing
\lstset{basicstyle=\ttfamily\small}
\lstset{aboveskip=1em,belowskip=1em}
\makeatletter
\def\verbatim@font{\normalfont\ttfamily\small}
\makeatother
\title{Utiliser pleinement mon ordinateur}
\author{Thierry (aka tTh) Boudet}
\begin{document}
\maketitle
% ==============================================================
\chapter{Introduction}
Un nouveau nouvel ouvrage, en vrac, complètement coronavraqué.
Des notes informelles sur l'utilisation
d'un ordinateur moderne, vous allez en avoir vraiment beaucoup.
Mais elles sont en vrac.
Tout cette ouvrage a été écrit avec mousepad et \LaTeX{}
selon la méthode éprouvée dite
de «~La~Rache~», essentiellement sur une machine Debian/amd64.
Your mileage may vary\dots
% ==============================================================
{
\setlength \parskip {0pt}
\tableofcontents
}
% ==============================================================
% \input{chap/textes}
% \input{chap/editeurs}
% \input{chap/X11}
\input{chap/son}
% \input{chap/musique}
% \input{chap/puredata}
% \input{chap/MIDI}
\input{chap/backups}
% \input{chap/processing}
% \input{chap/video}
% \input{chap/webcam}
% \input{chap/SCSI}
\input{chap/dino}
% \input{chap/MINITEL}
% \input{chap/threads}
% \input{chap/dosbox}
% \input{chap/photos}
% \input{chap/reseau}
% \input{chap/IRC}
% \input{chap/Usenet}
% \input{chap/DNS}
% \input{chap/ssh}
% \input{chap/hardware}
\input{chap/streaming}
\input{chap/gadgets}
% \input{chap/slang}
% \input{chap/curses}
% \input{chap/WiFi}
% \input{chap/GIT}
% \input{chap/divers}
% \input{chap/peer2peer}
% ==============================================================
\chapter{On est bientôt arrivé ?}
Non, la route est longue, mais la voie est libre.
\printindex
% ==============================================================
\end{document}

4
numberlines.awk Executable file
View File

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