commit
21b246c244
@ -0,0 +1,11 @@ |
||||
|
||||
log.* |
||||
|
||||
main.aux |
||||
main.idx |
||||
main.ilg |
||||
main.ind |
||||
main.log |
||||
main.pdf |
||||
main.toc |
||||
|
@ -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` )
|
||||
|
||||
|
||||
|
||||
|
After Width: | Height: | Size: 2.3 KiB |
@ -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) ? |
@ -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} |
||||
|
||||
|
||||
|
||||
% ============================================================== |
||||
|
@ -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. |
||||
|
||||
|
||||
% =============================================================== |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -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}. |
||||
|
||||
|
||||
%------------------------------------------------------------------ |
||||
|
@ -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} |
||||
|
||||
|
||||
%==================================================================== |
||||
|
||||
|
||||
%------------------------------------------------------------- |
||||
|
@ -0,0 +1,10 @@ |
||||
#!/bin/bash |
||||
|
||||
|
||||
pdflatex main |
||||
makeindex main |
||||
pdflatex main |
||||
|
||||
date >> log.toto |
||||
|
||||
|
@ -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} |
||||
|
||||
|
||||
|
@ -0,0 +1,4 @@ |
||||
#!/usr/bin/awk -f |
||||
|
||||
{ printf "%5d\t%s\n", NR, $0; } |
||||
|
Loading…
Reference in new issue