commit 21b246c24446fe10e179c6b4475eff5fbc93aaeb Author: tth Date: Sun Sep 27 17:15:15 2020 +0200 un debut assez timide... diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..71247d2 --- /dev/null +++ b/.gitignore @@ -0,0 +1,11 @@ + +log.* + +main.aux +main.idx +main.ilg +main.ind +main.log +main.pdf +main.toc + diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..adc9ace --- /dev/null +++ b/Makefile @@ -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` ) + + + + diff --git a/README.md b/README.md new file mode 100644 index 0000000..27d815d --- /dev/null +++ b/README.md @@ -0,0 +1,4 @@ +# TetaTricks + +Astuces diverses... + diff --git a/chap/alsamixer.png b/chap/alsamixer.png new file mode 100644 index 0000000..46f5143 Binary files /dev/null and b/chap/alsamixer.png differ diff --git a/chap/backups.tex b/chap/backups.tex new file mode 100644 index 0000000..6721c46 --- /dev/null +++ b/chap/backups.tex @@ -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 d’exé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) ? diff --git a/chap/dino.tex b/chap/dino.tex new file mode 100644 index 0000000..c064d31 --- /dev/null +++ b/chap/dino.tex @@ -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} + + + +% ============================================================== + diff --git a/chap/gadgets.tex b/chap/gadgets.tex new file mode 100644 index 0000000..f104e69 --- /dev/null +++ b/chap/gadgets.tex @@ -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. + + +% =============================================================== + + + + + + diff --git a/chap/son.tex b/chap/son.tex new file mode 100644 index 0000000..2519435 --- /dev/null +++ b/chap/son.tex @@ -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}. + + +%------------------------------------------------------------------ + diff --git a/chap/streaming.tex b/chap/streaming.tex new file mode 100644 index 0000000..85980ac --- /dev/null +++ b/chap/streaming.tex @@ -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} + + +%==================================================================== + + +%------------------------------------------------------------- + diff --git a/go.sh b/go.sh new file mode 100755 index 0000000..2138ce8 --- /dev/null +++ b/go.sh @@ -0,0 +1,10 @@ +#!/bin/bash + + +pdflatex main +makeindex main +pdflatex main + +date >> log.toto + + diff --git a/main.tex b/main.tex new file mode 100644 index 0000000..b0c5bff --- /dev/null +++ b/main.tex @@ -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} + + + diff --git a/numberlines.awk b/numberlines.awk new file mode 100755 index 0000000..300455f --- /dev/null +++ b/numberlines.awk @@ -0,0 +1,4 @@ +#!/usr/bin/awk -f + +{ printf "%5d\t%s\n", NR, $0; } +