<?xml 
version="1.0" encoding="utf-8"?><?xml-stylesheet title="XSL formatting" type="text/xsl" href="https://blog.roxing.net/spip.php?page=backend.xslt" ?>
<rss version="2.0" 
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:atom="http://www.w3.org/2005/Atom"
>

<channel xml:lang="fr">
	<title>blog.roxing.net</title>
	<link>http://blog.roxing.net/</link>
	<description>weblog roxing.net - astuces spip, php, bash, linux &amp; more</description>
	<language>fr</language>
	<generator>SPIP - www.spip.net</generator>
	<atom:link href="https://blog.roxing.net/spip.php?id_mot=50&amp;page=backend" rel="self" type="application/rss+xml" />

	<image>
		<title>blog.roxing.net</title>
		<url>https://blog.roxing.net/local/cache-vignettes/L144xH37/siteon0-6ddb5.png?1727125340</url>
		<link>http://blog.roxing.net/</link>
		<height>37</height>
		<width>144</width>
	</image>



<item xml:lang="fr">
		<title>keepalive.sh : Relancer une commande en boucle</title>
		<link>https://blog.roxing.net/keepalive-sh-relancer-une-commande-en-boucle</link>
		<guid isPermaLink="true">https://blog.roxing.net/keepalive-sh-relancer-une-commande-en-boucle</guid>
		<dc:date>2016-11-20T09:10:45Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>placido</dc:creator>


		<dc:subject>bash</dc:subject>
		<dc:subject>script</dc:subject>
		<dc:subject>astuce</dc:subject>
		<dc:subject>youtube-dl</dc:subject>

		<description>
&lt;p&gt;Une petite astuce pour relancer en boucle une commande jusqu'&#224; ce que le processus se termine en mani&#232;re attendue :
&lt;br class='autobr' /&gt;
# !/bin/bash # keepalive.sh
&lt;br class='autobr' /&gt;
until $1 ; do echo &#034;Processus termin&#233; avec exit code $ ?. On relance...&#034; &gt;&amp;2 sleep 1 done
&lt;br class='autobr' /&gt;
exit 0 &lt;br class='autobr' /&gt;
&#192; l'usage (une fois que le fichier est dans le $PATH) :
&lt;br class='autobr' /&gt;
keepalive.sh &#034;youtube-dl -f hls-best http://www.tf6.ch/concours-super-menuisier.html&#034; &lt;br class='autobr' /&gt;
Pratique, si le t&#233;l&#233;chargement connait des rat&#233;s, plus besoin de le (&#8230;)&lt;/p&gt;


-
&lt;a href="https://blog.roxing.net/signets" rel="directory"&gt;signets&lt;/a&gt;

/ 
&lt;a href="https://blog.roxing.net/bash" rel="tag"&gt;bash&lt;/a&gt;, 
&lt;a href="https://blog.roxing.net/script-50" rel="tag"&gt;script&lt;/a&gt;, 
&lt;a href="https://blog.roxing.net/astuce" rel="tag"&gt;astuce&lt;/a&gt;, 
&lt;a href="https://blog.roxing.net/youtube-dl" rel="tag"&gt;youtube-dl&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;p&gt;Une petite astuce pour relancer en boucle une commande jusqu'&#224; ce que le processus se termine en mani&#232;re attendue :&lt;/p&gt; &lt;textarea readonly='readonly' cols='40' rows='10' class='spip_cadre spip_cadre_block' dir='ltr'&gt;#!/bin/bash # keepalive.sh until $1; do echo &#034;Processus termin&#233; avec exit code $?. On relance...&#034; &gt;&amp;2 sleep 1 done exit 0&lt;/textarea&gt;
&lt;p&gt;&#192; l'usage (une fois que le fichier est dans le $PATH) :&lt;/p&gt; &lt;textarea readonly='readonly' cols='40' rows='2' class='spip_cadre spip_cadre_block' dir='ltr'&gt;keepalive.sh &#034;youtube-dl -f hls-best http://www.tf6.ch/concours-super-menuisier.html&#034;&lt;/textarea&gt;
&lt;p&gt;Pratique, si le t&#233;l&#233;chargement connait des rat&#233;s, plus besoin de le relancer soi-m&#234;me.&lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>[BASH] Utiliser l'API fontello.com</title>
		<link>https://blog.roxing.net/exemple-api-fontello-bash</link>
		<guid isPermaLink="true">https://blog.roxing.net/exemple-api-fontello-bash</guid>
		<dc:date>2015-10-14T12:35:17Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>placido</dc:creator>


		<dc:subject>design</dc:subject>
		<dc:subject>bash</dc:subject>
		<dc:subject>script</dc:subject>
		<dc:subject>css</dc:subject>
		<dc:subject>font</dc:subject>
		<dc:subject>fontello</dc:subject>
		<dc:subject>webfont</dc:subject>

		<description>&lt;p&gt;&lt;a href=&#034;http://fontello.com&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;Fontello&lt;/a&gt; propose de composer une webfont d'ic&#244;nes sur mesure en piochant parmi plusieurs collections (Font Awesome, Web Symbols, ...) Le service est tr&#232;s bien fait, rapide et simple d'utilisation. Mais vous pouvez gagner encore plus de temps lors de l'ajout d'ic&#244;nes suppl&#233;mentaires an passant directement via l'API.&lt;/p&gt;

-
&lt;a href="https://blog.roxing.net/billets" rel="directory"&gt;billets&lt;/a&gt;

/ 
&lt;a href="https://blog.roxing.net/design" rel="tag"&gt;design&lt;/a&gt;, 
&lt;a href="https://blog.roxing.net/bash" rel="tag"&gt;bash&lt;/a&gt;, 
&lt;a href="https://blog.roxing.net/script-50" rel="tag"&gt;script&lt;/a&gt;, 
&lt;a href="https://blog.roxing.net/css" rel="tag"&gt;css&lt;/a&gt;, 
&lt;a href="https://blog.roxing.net/font" rel="tag"&gt;font&lt;/a&gt;, 
&lt;a href="https://blog.roxing.net/fontello" rel="tag"&gt;fontello&lt;/a&gt;, 
&lt;a href="https://blog.roxing.net/webfont" rel="tag"&gt;webfont&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;p&gt;Allons directement dans le vif du sujet en cr&#233;ant un fichier&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Makefile&lt;/strong&gt;&lt;br class='autobr' /&gt;
&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;chmod +x Makefile&lt;/code&gt; pour le rendre ex&#233;cutable quelque part en amont de votre projet :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;bash&#034; class='spip_code spip_code_block language-bash' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;# Makefile FONT_DIR ?= ./css/icons PROJECT_NAME ?= projet_foo FONTELLO_HOST ?= http://fontello.com fontopen: @if test ! `which curl` ; then \ echo 'Install curl first.' &gt;&amp;2 ; \ exit 128 ; \ fi curl --silent --show-error --fail --output .fontello \ --form &#034;config=@${FONT_DIR}/config.json&#034; \ ${FONTELLO_HOST} x-www-browser ${FONTELLO_HOST}/`cat .fontello` fontsave: @if test ! `which unzip` ; then \ echo 'Install unzip first.' &gt;&amp;2 ; \ exit 128 ; \ fi @if test ! -e .fontello ; then \ echo 'Run `make fontopen` first.' &gt;&amp;2 ; \ exit 128 ; \ fi rm -rf .fontello.src .fontello.zip curl --silent --show-error --fail --output .fontello.zip \ ${FONTELLO_HOST}/`cat .fontello`/get unzip .fontello.zip -d .fontello.src rm -rf ${FONT_DIR}/* mv `find ./.fontello.src -maxdepth 3 \( -name &#034;config.json&#034; -o -name &#034;*.woff&#034; -o -name &#034;*.ttf&#034; -o -name &#034;*.svg&#034; -o -name &#034;*.eot&#034; \) ` ${FONT_DIR} mv `find ./.fontello.src -maxdepth 3 -name &#034;${PROJECT_NAME}-codes.css&#034;` ${FONT_DIR}/codes.scss rm -rf .fontello.src .fontello.zip &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 class=&#034;spip&#034;&gt;Passons rapidement le script en revue&lt;/h2&gt;
&lt;p&gt;Tout d'abord, on doit &#233;diter le script pour renseigner 2 informations :&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; &lt;strong&gt;FONT_DIR&lt;/strong&gt;, qui est l'emplacement du dossier qui va recevoir les &#233;l&#233;ments issus de fontetto (.ttf, .woff. css, .css, ...), relativement au fichier Makefile. Personnellement j'ai choisi un dossier &#034;icons&#034; d&#233;di&#233; &#224; cela, et distinct des polices (webfonts) compl&#232;tes qui elles sont dans un autre dossier &#034;fonts&#034;.&lt;/li&gt;&lt;li&gt; &lt;strong&gt;PROJECT_NAME&lt;/strong&gt; qui d&#233;signe le nom du projet.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;A pr&#233;sent, direction &lt;a href=&#034;http://fontello.com&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;fontello.com&lt;/a&gt; o&#249; vous pouvez commencer &#224; composer votre webfont personnalis&#233;e &lt;strong&gt;projet_foo&lt;/strong&gt;. Enregistrez (bouton en haut &#224; droite), t&#233;l&#233;chargez le .zip et r&#233;cup&#233;rez le fichier config.json (qui est le seul qui nous int&#233;resse) et copiez le dans le dossier FONT_DIR.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&#192; l'usage&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&#192; partir de maintenant, l'ajout ou modification d'ic&#244;nes va se faire en un clin d'oeil via 2 commandes successives, issues du fichier &lt;i&gt;Makefile&lt;/i&gt; :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;make fontopen&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;inspecte le fichier &lt;i&gt;config.json&lt;/i&gt; et ouvre le navigateur avec les param&#232;tres d'&#233;dition sauvegard&#233;s.&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;make fontsave&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;r&#233;cup&#232;re la version mise &#224; jour du projet_foo en &#233;crasant les anciens fichiers.&lt;/p&gt;
&lt;p&gt;Pour ma part, c'est surtout le fichier &lt;i&gt;projet_foo-codes.css&lt;/i&gt; avec les codes qui m'importe (voir et modifier au besoin la ligne 32) ; c'est pourquoi je renomme en &lt;i&gt;codes.scss&lt;/i&gt; pour l'appeler ult&#233;rieurement dans la compilation SASS.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_ps'&gt;&lt;p&gt;Ultime remarque, si vous constatez un probl&#232;me d'affichage des ic&#244;nes apr&#232;s une mise &#224; jour, essayer de changer le param&#232;tre en fin d'url dans la d&#233;claration css font-face.&lt;/p&gt; &lt;textarea readonly='readonly' cols='40' rows='7' class='spip_cadre spip_cadre_block' dir='ltr'&gt;@font-face { font-family: 'projet_foo'; src: url('icons/projet_foo.eot?248676'); /* ... */ }&lt;/textarea&gt; &lt;p&gt;devenant par exemple :&lt;/p&gt; &lt;textarea readonly='readonly' cols='40' rows='7' class='spip_cadre spip_cadre_block' dir='ltr'&gt;@font-face { font-family: 'projet_foo'; src: url('icons/projet_foo.eot?1039286'); /* ... */ }&lt;/textarea&gt; &lt;p&gt;C'est un d&#233;sagr&#233;ment d&#251; aux navigateurs, qui allouent un cache sp&#233;cifique pour les webfonts.&lt;/p&gt;&lt;/div&gt;
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>youtube-dl + vlcopen</title>
		<link>https://blog.roxing.net/youtube-dl-vlcopen</link>
		<guid isPermaLink="true">https://blog.roxing.net/youtube-dl-vlcopen</guid>
		<dc:date>2015-04-07T19:52:19Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>placido</dc:creator>


		<dc:subject>bash</dc:subject>
		<dc:subject>script</dc:subject>
		<dc:subject>linux</dc:subject>
		<dc:subject>vlc</dc:subject>
		<dc:subject>openbox</dc:subject>
		<dc:subject>youtube-dl</dc:subject>
		<dc:subject>youtube</dc:subject>

		<description>&lt;p&gt;S'affranchir efficacement de flash pour lire les vid&#233;os directement dans VLC&lt;/p&gt;

-
&lt;a href="https://blog.roxing.net/billets" rel="directory"&gt;billets&lt;/a&gt;

/ 
&lt;a href="https://blog.roxing.net/bash" rel="tag"&gt;bash&lt;/a&gt;, 
&lt;a href="https://blog.roxing.net/script-50" rel="tag"&gt;script&lt;/a&gt;, 
&lt;a href="https://blog.roxing.net/gnu-linux" rel="tag"&gt;linux&lt;/a&gt;, 
&lt;a href="https://blog.roxing.net/vlc" rel="tag"&gt;vlc&lt;/a&gt;, 
&lt;a href="https://blog.roxing.net/openbox-85" rel="tag"&gt;openbox&lt;/a&gt;, 
&lt;a href="https://blog.roxing.net/youtube-dl" rel="tag"&gt;youtube-dl&lt;/a&gt;, 
&lt;a href="https://blog.roxing.net/youtube" rel="tag"&gt;youtube&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;p&gt;Vous le savez comme moi, flash c'est le mal. Et voici LA solution qui vous fera franchir le pas d'un bannissement (esp&#233;rons permanent) du vil greffon sans pour autant faire une croix sur les vid&#233;os des plateformes d'h&#233;bergement (youtube, dailymotion, vimeo, etc).&lt;/p&gt;
&lt;p&gt;Cela consiste en l'emploi coordonn&#233; de &lt;strong&gt;deux scripts&lt;/strong&gt; qui vont vous permettre de lire directement une vid&#233;o distante dans votre lecteur habituel (VLC, mplayer ou autre).&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;1) Installation de youtube-dl&lt;/h2&gt;
&lt;p&gt;Sous GNU-Linux, la m&#233;thode que je trouve la plus simple est de passer par le gestionnaire d'environnement python pip.&lt;/p&gt; &lt;textarea readonly='readonly' cols='40' rows='2' class='spip_cadre spip_cadre_block' dir='ltr'&gt;sudo apt-get install python-pip
sudo pip install youtube-dl&lt;/textarea&gt;
&lt;p&gt;Veillez &#224; mettre &#224; jour l'application de temps en temps, car les plugins de gestion par plateforme sont nombreux et les modifications fr&#233;quentes.&lt;/p&gt; &lt;textarea readonly='readonly' cols='40' rows='2' class='spip_cadre spip_cadre_block' dir='ltr'&gt;sudo pip install -U youtube-dl&lt;/textarea&gt;&lt;h2 class=&#034;spip&#034;&gt;2) Lancement illico gr&#226;ce &#224; vlcopen.sh&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#034;https://github.com/rg3/youtube-dl&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;youtude-dl&lt;/a&gt; est un super logiciel, efficace dans bien des situations, mais son utilisation en ligne de commande s'av&#232;re &#224; la longue un peu r&#233;dhibitoire pour une utilisation en tant que simple utilisateur.&lt;/p&gt;
&lt;p&gt;D'o&#249; le recours &#224; un second script, mis &#224; disposition par &lt;a href=&#034;https://gist.github.com/swarminglogic/0cd2f6d55390243e693b&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;swarminglogic&lt;/a&gt;,qui va apporter un peu de souplesse d'utilisation et ouvrir la vid&#233;o encore plus vite que si vous y aviez acc&#233;d&#233;e directement depuis la page youtube, gr&#226;ce &#224; un raccourci clavier.&lt;/p&gt; &lt;textarea readonly='readonly' cols='40' rows='95' class='spip_cadre spip_cadre_block' dir='ltr'&gt;#!/bin/bash if [ $# -eq 1 ] ; then path=$1
else clipboard=$(xclip -selection clipboard -o) if [ $(&lt;&lt;&lt;$clipboard grep -P &#034;^http&#034;) ] ; then path=$clipboard else if [ -t 1 ] ; then echo &#034;Bad clipboard path: $clipboard&#034; &gt;&amp;2 else notify-send &#034;Bad clipboard path: $clipboard&#034; fi exit 1 fi
fi #$1 processid, $2 tempdir $3 logfile
function cleanup { echo &#034;-------------------------------------------&#034; echo &#034;Cleaning up&#034; kill -9 $1 &amp;&gt; /dev/null if [ -n &#034;$2&#034; ] ; then rm $2/* ; fi if [ -n &#034;$2&#034; ] ; then rmdir $2 ; fi if [ -n &#034;$3&#034; ] ; then rm $3 ; fi
} echo &#034;Opening $path&#034;
tmpvlcopen=/tmp/vlcopen/
[ ! -d $tmpvlcopen ] &amp;&amp; mkdir $tmpvlcopen
tmpdir=$(mktemp -d --tmpdir=$tmpvlcopen) # If the tmpdir path doesn't include &#034;/tmp/vlcopen&#034; something went bad!
if [ &#034;${tmpdir/$tmpvlcopen}&#034; = &#034;$tmpdir&#034; ] ; then echo &#034;Aborting: failed to create proper temporary directories&#034; &gt;&amp;2 exit 1
fi cd $tmpdir
echo &#034;Temporary directory: $tmpdir&#034;
echo &#034;Getting video: $path&#034;
downloadlog=$(tempfile)
(youtube-dl --restrict-filenames --no-part &#034;$path&#034; &amp;&gt; $downloadlog)&amp;
processId=$!
echo &#034;ProcessID: $processId&#034;
echo &#034;Waiting for file creation&#034; count=0
while [ $(ls -1 | wc -l) -eq 0 ] ; do # check if process is done. if ! kill -0 $processId &amp;&gt;/dev/null ; then if [ -t 1 ] ; then echo &#034;-------------------------------------------&#034;&gt;&amp;2 echo &#034;Error: youtube-dl finished without output.&#034; &gt;&amp;2 echo &#034;Error: Bad URL?&#034; &gt;&amp;2 echo &#034;---------------- Download Log -------------&#034;&gt;&amp;2 cat $downloadlog &gt;&amp;2 else notify-send &#034;Bad URL: $path $(cat $downloadlog)&#034; fi cleanup $processId &#034;$tmpdir&#034; &#034;$downloadlog&#034; exit 0 fi sleep 0.5 ((count++)) if [ $count -eq 20 ] ; then if [ -t 1 ] ; then echo &#034;Timed out&#034; &gt;&amp;2 else notify-send &#034;Timed out&#034; fi exit 0 fi
done sleep 0.1
echo &#034;Opening file: $(ls -1 | head -n 1)&#034;
vlc &#034;$(ls -1 | head -n 1)&#034; &amp;&gt;/dev/null
cleanup $processId &#034;$tmpdir&#034; &#034;$downloadlog&#034;&lt;/textarea&gt;
&lt;p&gt;Ce script se comporte comme une capsule pour youtube-dl. Il va analyser le contenu du presse-papier, et s'il d&#233;tecte une url prise en charge, va cr&#233;er un r&#233;pertoire temporaire, y t&#233;l&#233;charger la vid&#233;o, l'ouvrir avec VLC apr&#232;s quelques instants et supprimer automatiquement tous les fichiers temporaires &#224; la fermeture.&lt;/p&gt;
&lt;p&gt;Il suffit d'enregistrer le script (sous le nom vlcopen.sh par exemple) dans un r&#233;pertoire inclus dans votre &lt;i&gt;$PATH&lt;/i&gt;, le rendre ex&#233;cutable (&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;chmod +x vlcopen.sh&lt;/code&gt;) et d'associer un raccourci clavier &#224; son ex&#233;cution.&lt;/p&gt;
&lt;p&gt;Typiquement sous openbox, j'ai rajout&#233; une section comme suit &#224; mon rc.xml.&lt;/p&gt; &lt;textarea readonly='readonly' cols='40' rows='9' class='spip_cadre spip_cadre_block' dir='ltr'&gt;&lt;keybind key=&#034;W-y&#034;&gt; &lt;action name=&#034;Execute&#034;&gt; &lt;startupnotify&gt; &lt;enabled&gt;true&lt;/enabled&gt; &lt;name&gt;vlcopen&lt;/name&gt; &lt;/startupnotify&gt; &lt;command&gt;vlcopen.sh&lt;/command&gt; &lt;/action&gt;
&lt;/keybind&gt;&lt;/textarea&gt;
&lt;p&gt;D&#232;s lors, dans les faits, lorsque je veux regarder une vid&#233;o, je fais un&lt;i&gt; clic-droit &gt; copier l'url de la page&lt;/i&gt; soit sur la page courante, soit sur le lien &#224; analyser, puis &lt;kbd&gt;super&lt;/kbd&gt; + &lt;kbd&gt;y&lt;/kbd&gt; (oui j'ai choisi &lt;kbd&gt;y&lt;/kbd&gt; pour &#034;youtube&#034; mais &#224; vous d'adapter au besoin), et voil&#224; !&lt;/p&gt;
&lt;p&gt;Seul b&#233;mol, si la vid&#233;o est longue et que vous &#234;tes impatient, vous ne pourrez pas avancer directement la lecture &#224; un point qui n'a pas encore &#233;t&#233; t&#233;l&#233;charg&#233;.&lt;/p&gt;&lt;/div&gt;
		&lt;div class="hyperlien"&gt;Voir en ligne : &lt;a href="https://gist.github.com/swarminglogic/0cd2f6d55390243e693b" class="spip_out"&gt;github.com/swarminglogic&lt;/a&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Synchroniser un clavier apple aluminium bluetooth en dual boot (OS X - Gnu/Linux)</title>
		<link>https://blog.roxing.net/synchroniser-un-clavier-apple-aluminium-bluetooth</link>
		<guid isPermaLink="true">https://blog.roxing.net/synchroniser-un-clavier-apple-aluminium-bluetooth</guid>
		<dc:date>2015-03-18T01:40:01Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>placido</dc:creator>


		<dc:subject>script</dc:subject>
		<dc:subject>linux</dc:subject>
		<dc:subject>OS-X</dc:subject>
		<dc:subject>sync</dc:subject>
		<dc:subject>bluetooth</dc:subject>

		<description>
&lt;p&gt;Dans le cadre d'une installation en dual boot MAC OS / Debian, il peut s'av&#233;rer fastidieux de synchroniser ses p&#233;riph&#233;riques bluetooth avec un identifiant commun entre les syst&#232;mes. &lt;br class='autobr' /&gt;
La marche &#224; suivre consiste &#224; op&#233;rer la synchronisation sous OS X, puis booter sous GNU/Linux, monter la partition OS X, par exemple :
&lt;br class='autobr' /&gt;
sudo mount -t hfsplus /dev/sda2 /media/OSX/ &lt;br class='autobr' /&gt;
Puis &#224; ex&#233;cuter ce script [1] :
&lt;br class='autobr' /&gt;
# !/bin/sh # sync-bt-os.sh cd /var/lib/bluetooth for i in * ; do cd &#034;$i&#034; plutil (&#8230;)&lt;/p&gt;


-
&lt;a href="https://blog.roxing.net/billets" rel="directory"&gt;billets&lt;/a&gt;

/ 
&lt;a href="https://blog.roxing.net/script-50" rel="tag"&gt;script&lt;/a&gt;, 
&lt;a href="https://blog.roxing.net/gnu-linux" rel="tag"&gt;linux&lt;/a&gt;, 
&lt;a href="https://blog.roxing.net/os-x" rel="tag"&gt;OS-X&lt;/a&gt;, 
&lt;a href="https://blog.roxing.net/sync" rel="tag"&gt;sync&lt;/a&gt;, 
&lt;a href="https://blog.roxing.net/bluetooth" rel="tag"&gt;bluetooth&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;p&gt;Dans le cadre d'une installation en dual boot MAC OS / Debian, il peut s'av&#233;rer fastidieux de synchroniser ses p&#233;riph&#233;riques bluetooth avec un identifiant commun entre les syst&#232;mes.&lt;/p&gt;
&lt;p&gt;La marche &#224; suivre consiste &#224; op&#233;rer la synchronisation sous OS X, puis booter sous GNU/Linux, monter la partition OS X, par exemple :&lt;br class='autobr' /&gt;
&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;sudo mount -t hfsplus /dev/sda2 /media/OSX/&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Puis &#224; ex&#233;cuter ce script&lt;span class=&#034;spip_note_ref&#034;&gt; [&lt;a href=&#034;#nb2-1&#034; class=&#034;spip_note&#034; rel=&#034;appendix&#034; title=&#034;Il vous faudra probablement installer le paquet plutil, via apt par exemple.&#034; id=&#034;nh2-1&#034;&gt;1&lt;/a&gt;]&lt;/span&gt; :&lt;/p&gt; &lt;textarea readonly='readonly' cols='40' rows='18' class='spip_cadre spip_cadre_block' dir='ltr'&gt;#!/bin/sh # sync-bt-os.sh cd /var/lib/bluetooth for i in *; do cd &#034;$i&#034; plutil -i /media/OSX/private/var/root/Library/Preferences/blued.plist -o /dev/stdout | perl -0777 -MMIME::Base64 -ne 's|\s||g; $s = $_; while ($s =~ m|&lt;key&gt;(..-..-..-..-..-..)&lt;/key&gt;&lt;data&gt;(.*?)&lt;/data&gt;|g) { $mac = uc($1); $key = uc(unpack(&#034;H*&#034;,reverse decode_base64($2))); $mac =~ s/-/:/g; $pinlength = 6; $pinlength = 4 if $mac eq &#034;C4:2C:03:A0:C7:20&#034;; print &#034;$mac $key 0 $pinlength\n&#034;; }' | tee linkkeys cd .. done service bluetooth restart&lt;/textarea&gt;&lt;/div&gt;
		&lt;hr /&gt;
		&lt;div class='rss_notes'&gt;&lt;div id=&#034;nb2-1&#034;&gt;
&lt;p&gt;&lt;span class=&#034;spip_note_ref&#034;&gt;[&lt;a href=&#034;#nh2-1&#034; class=&#034;spip_note&#034; title=&#034;Notes 2-1&#034; rev=&#034;appendix&#034;&gt;1&lt;/a&gt;] &lt;/span&gt;Il vous faudra probablement installer le paquet &lt;a href=&#034;https://packages.debian.org/wheezy/libplist-utils&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;plutil&lt;/a&gt;, via apt par exemple.&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>[BASH] Liste des variables</title>
		<link>https://blog.roxing.net/bash-liste-des-variables</link>
		<guid isPermaLink="true">https://blog.roxing.net/bash-liste-des-variables</guid>
		<dc:date>2015-02-14T12:53:41Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Pierrox</dc:creator>


		<dc:subject>bash</dc:subject>
		<dc:subject>shell</dc:subject>
		<dc:subject>script</dc:subject>
		<dc:subject>linux</dc:subject>

		<description>&lt;p&gt;Aide m&#233;moire listant toutes les variables # !shell utiles pour l'&#233;criture de # !scripts .&lt;/p&gt;

-
&lt;a href="https://blog.roxing.net/administration-systeme" rel="directory"&gt;administration syst&#232;me&lt;/a&gt;

/ 
&lt;a href="https://blog.roxing.net/bash" rel="tag"&gt;bash&lt;/a&gt;, 
&lt;a href="https://blog.roxing.net/shell" rel="tag"&gt;shell&lt;/a&gt;, 
&lt;a href="https://blog.roxing.net/script-50" rel="tag"&gt;script&lt;/a&gt;, 
&lt;a href="https://blog.roxing.net/gnu-linux" rel="tag"&gt;linux&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;h2 class=&#034;spip&#034;&gt;Manipulation de variables simples&lt;/h2&gt;&lt;table class=&#034;table spip&#034;&gt;
&lt;tbody&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td&gt;&lt;code class='bash spip_code spip_code_inline' dir='ltr'&gt;var=val&lt;/code&gt;&lt;br class='autobr' /&gt;
&lt;code class='bash spip_code spip_code_inline' dir='ltr'&gt;var=&#034;a b&#034;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;affectation de la variable &#034;var&#034;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_even even'&gt;
&lt;td&gt;&lt;code class='bash spip_code spip_code_inline' dir='ltr'&gt;$var&lt;/code&gt; &lt;br class='autobr' /&gt; &lt;code class='bash spip_code spip_code_inline' dir='ltr'&gt;${var}&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;contenu de la variable &#034;var&#034;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td&gt;&lt;code class='bash spip_code spip_code_inline' dir='ltr'&gt;${#var}&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;longueur de la variable &#034;var&#034;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_even even'&gt;
&lt;td&gt;&lt;code class='bash spip_code spip_code_inline' dir='ltr'&gt;${var:-valeur}&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;affectation conditionnelle, si &#034;var&#034; non d&#233;fini alors var = valeur&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td&gt;&lt;code class='bash spip_code spip_code_inline' dir='ltr'&gt;export var&lt;/code&gt; &lt;br class='autobr' /&gt; &lt;code class='bash spip_code spip_code_inline' dir='ltr'&gt;declare -x var&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;exportation de la variable &#034;var&#034; vers les shells fils&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_even even'&gt;
&lt;td&gt;&lt;code class='bash spip_code spip_code_inline' dir='ltr'&gt;set&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;affichage de l'ensemble des variables d&#233;finies dans le shell&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td&gt;&lt;code class='bash spip_code spip_code_inline' dir='ltr'&gt;unset var&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;suppression de la variable &#034;var&#034;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;h2 class=&#034;spip&#034;&gt;Tableaux&lt;/h2&gt;&lt;table class=&#034;table spip&#034;&gt;
&lt;tbody&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td&gt;&lt;code class='bash spip_code spip_code_inline' dir='ltr'&gt;tab[0]=val&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;affectation du premier enregistrement du tableau &#034;tab&#034;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_even even'&gt;
&lt;td&gt;&lt;code class='bash spip_code spip_code_inline' dir='ltr'&gt;${tab[0]}&lt;/code&gt;&lt;br class='autobr' /&gt;
&lt;code class='bash spip_code spip_code_inline' dir='ltr'&gt;$tab&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;contenu du premier enregistrement du tableau &#034;tab&#034;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td&gt;&lt;code class='bash spip_code spip_code_inline' dir='ltr'&gt;${tab[11]}&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;contenu du douzi&#232;me enregistrement du tableau &#034;tab&#034;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_even even'&gt;
&lt;td&gt;&lt;code class='bash spip_code spip_code_inline' dir='ltr'&gt;${tab[*]}&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;ensemble des enregistrements du tableau &#034;tab&#034;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td&gt;&lt;code class='bash spip_code spip_code_inline' dir='ltr'&gt;${#tab[11]}&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;longueur du douzi&#232;me enregistrement du tableau &#034;tab&#034;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_even even'&gt;
&lt;td&gt;&lt;code class='bash spip_code spip_code_inline' dir='ltr'&gt;${#tab[*]}&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;nombre d'enregistrements du tableau &#034;tab&#034;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td&gt;&lt;code class='bash spip_code spip_code_inline' dir='ltr'&gt;${!tab[@]}&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;liste des clefs ( Index ) du tableau &#034;tab&#034;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;h2 class=&#034;spip&#034;&gt;Param&#232;tres positionnels et arguments&lt;/h2&gt;&lt;table class=&#034;table spip&#034;&gt;
&lt;tbody&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td&gt;&lt;code class='bash spip_code spip_code_inline' dir='ltr'&gt;$0&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;nom du script&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_even even'&gt;
&lt;td&gt;&lt;code class='bash spip_code spip_code_inline' dir='ltr'&gt;$1&lt;/code&gt; &lt;code class='bash spip_code spip_code_inline' dir='ltr'&gt;$2&lt;/code&gt; ... &lt;code class='bash spip_code spip_code_inline' dir='ltr'&gt;${10}&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;param&#232;tres positionnels (1, 2 et 10)&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td&gt;&lt;code class='bash spip_code spip_code_inline' dir='ltr'&gt;$#&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;nombre de param&#232;tres positionnels&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_even even'&gt;
&lt;td&gt;&lt;code class='bash spip_code spip_code_inline' dir='ltr'&gt;$*&lt;/code&gt;&lt;br class='autobr' /&gt; &lt;code class='bash spip_code spip_code_inline' dir='ltr'&gt;$@&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;ensemble des param&#232;tres positionnels, &#233;quivalant &#224; $1 $2 ... $&lt;i&gt;n&lt;/i&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;h2 class=&#034;spip&#034;&gt;Variables sp&#233;ciales&lt;/h2&gt;&lt;table class=&#034;table spip&#034;&gt;
&lt;tbody&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td&gt;&lt;code class='bash spip_code spip_code_inline' dir='ltr'&gt;$$&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;PID du shell courant&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_even even'&gt;
&lt;td&gt;&lt;code class='bash spip_code spip_code_inline' dir='ltr'&gt;$!&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;PID du dernier travail lanc&#233; en arri&#232;re plan&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td&gt;&lt;code class='bash spip_code spip_code_inline' dir='ltr'&gt;$?&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;code retour de la derni&#232;re commande&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_even even'&gt;
&lt;td&gt;&lt;code class='bash spip_code spip_code_inline' dir='ltr'&gt;${PIPESTATUS[0]}&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;code retour de la premi&#232;re commande d'un pipe&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;h2 class=&#034;spip&#034;&gt;Variables d'environnement&lt;/h2&gt;&lt;table class=&#034;table spip&#034;&gt;
&lt;tbody&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td&gt;&lt;code class='bash spip_code spip_code_inline' dir='ltr'&gt;$HOME&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;chemin du r&#233;pertoire personnel de l'utilisateur&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_even even'&gt;
&lt;td&gt;&lt;code class='bash spip_code spip_code_inline' dir='ltr'&gt;$OLDPWD&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;chemin du r&#233;pertoire pr&#233;c&#233;dent&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td&gt;&lt;code class='bash spip_code spip_code_inline' dir='ltr'&gt;$PATH&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;liste des chemins de recherche des commandes ex&#233;cutables&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_even even'&gt;
&lt;td&gt;&lt;code class='bash spip_code spip_code_inline' dir='ltr'&gt;$PPID&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;PID du processus p&#232;re du shell&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td&gt;&lt;code class='bash spip_code spip_code_inline' dir='ltr'&gt;$PS1&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;invite principale du shell&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_even even'&gt;
&lt;td&gt;&lt;code class='bash spip_code spip_code_inline' dir='ltr'&gt;$PS2&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;invite secondaire du shell&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td&gt;&lt;code class='bash spip_code spip_code_inline' dir='ltr'&gt;$PS3&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;invite de la structure shell &#034;select&#034;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_even even'&gt;
&lt;td&gt;&lt;code class='bash spip_code spip_code_inline' dir='ltr'&gt;$PS4&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;invite de l'option shell de d&#233;bogage &#034;xtrace&#034;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td&gt;&lt;code class='bash spip_code spip_code_inline' dir='ltr'&gt;$PWD&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;chemin du r&#233;pertoire courant&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_even even'&gt;
&lt;td&gt;&lt;code class='bash spip_code spip_code_inline' dir='ltr'&gt;$RANDOM&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;nombre entier al&#233;atoire compris entre 0 et 32767&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td&gt;&lt;code class='bash spip_code spip_code_inline' dir='ltr'&gt;$REPLY&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;variable par d&#233;faut de la commande &#034;read&#034; et de la structure shell &#034;select&#034;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_even even'&gt;
&lt;td&gt;&lt;code class='bash spip_code spip_code_inline' dir='ltr'&gt;$SECONDS&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;nombre de secondes &#233;coul&#233;es depuis le lancement du shell&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>[SPIP] comment organiser ses fonctions javascript</title>
		<link>https://blog.roxing.net/organiser-ses-fonctions-javascript</link>
		<guid isPermaLink="true">https://blog.roxing.net/organiser-ses-fonctions-javascript</guid>
		<dc:date>2014-07-01T13:55:29Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>placido</dc:creator>


		<dc:subject>spip</dc:subject>
		<dc:subject>script</dc:subject>
		<dc:subject>javascript</dc:subject>
		<dc:subject>snippet</dc:subject>

		<description>&lt;p&gt;un snippet qui propose une structure de d&#233;part pour organiser ses fonctions javascript, et g&#233;rer facilement certains &#233;v&#233;nements &lt;em&gt;(ex. : scroll, resize, callback de spip ...)&lt;/em&gt;&lt;/p&gt;

-
&lt;a href="https://blog.roxing.net/signets" rel="directory"&gt;signets&lt;/a&gt;

/ 
&lt;a href="https://blog.roxing.net/spip-49" rel="tag"&gt;spip&lt;/a&gt;, 
&lt;a href="https://blog.roxing.net/script-50" rel="tag"&gt;script&lt;/a&gt;, 
&lt;a href="https://blog.roxing.net/javascript" rel="tag"&gt;javascript&lt;/a&gt;, 
&lt;a href="https://blog.roxing.net/snippet" rel="tag"&gt;snippet&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;textarea readonly='readonly' cols='40' rows='82' class='spip_cadre spip_cadre_block' dir='ltr'&gt;var App = function () { var fn1 = function() { } var fn2 = function() { } var fn3 = function() { } //########################## // Surveiller le scroll var spyScroll = function() { var scrollticker; $(window).on('scroll',function() { //Clear Timeout if one is pending if(scrollticker) { window.clearTimeout(scrollticker); scrollticker = null; } scrollticker=window.setTimeout(function(){ App.scroll(); }, 2500); // timeout }); } // Surveiller le resize var spyResize = function() { var resizeticker; window.onresize = function() { // Clear Timeout if one is pending window.clearTimeout(resizeticker); resizeticker=window.setTimeout(function(){ App.resize(); }, 2500); // timeout }; } // suivre ajaxcallback de spip var spySpipAjax = function() { if (typeof onAjaxLoad == 'function') { onAjaxLoad(App.reboot); } } //########################## return { //Attention &#224; l'ordre d'appel des modules init: function () { fn1(); fn2(); fn3(); // les fonctions &#034;espions&#034; spySpipAjax(); spyScroll(); spyResize(); }, // ici les fonctions &#034;ajaxcallback proof&#034; reboot: function () { fn2(); }, // ici les fonctions qui r&#233;agissent au scroll scroll: function () { fn3(); }, // ici les fonctions qui r&#233;agissent au resize screen resize: function () { fn3(); } }; }(); //go ! $(function(){App.init();});&lt;/textarea&gt;&lt;/div&gt;
		&lt;div class='rss_ps'&gt;&lt;p&gt;mis &#224; jour le 21 f&#233;vrier 2016&lt;/p&gt;&lt;/div&gt;
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Rechercher des lignes dans un fichier en php</title>
		<link>https://blog.roxing.net/rechercher-des-lignes-dans-un-fichier-en-php</link>
		<guid isPermaLink="true">https://blog.roxing.net/rechercher-des-lignes-dans-un-fichier-en-php</guid>
		<dc:date>2012-12-05T11:20:00Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Pierrox</dc:creator>


		<dc:subject>php</dc:subject>
		<dc:subject>script</dc:subject>

		<description>&lt;p&gt;2 M&#233;thodes en php pour recherche des lignes qui correspondent a un pattern.&lt;/p&gt;

-
&lt;a href="https://blog.roxing.net/billets" rel="directory"&gt;billets&lt;/a&gt;

/ 
&lt;a href="https://blog.roxing.net/php" rel="tag"&gt;php&lt;/a&gt;, 
&lt;a href="https://blog.roxing.net/script-50" rel="tag"&gt;script&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;h2 class=&#034;spip&#034;&gt;M&#233;thode 1 - Rapide &amp; gourmande en m&#233;moire sur de gros fichiers&lt;/h2&gt;&lt;div class=&#034;precode&#034;&gt;&lt;pre class='php spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt; $tab = file('/path/fichier.txt'); $pattern = &#034;/recherche/i&#034;; $line = preg_grep($pattern, $tab); print_r($line); //affiche les lignes qui contiennent le mot recherche&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 class=&#034;spip&#034;&gt; M&#233;thode 2 - Plus lent mais moins gourmand &lt;/h2&gt;&lt;div class=&#034;precode&#034;&gt;&lt;pre class='php spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;$fh = fopen('/path/fichier.txt', 'r') or die($php_errormsg); while (!feof($fh)) { $line = fgets($fh, 4096); if (preg_match($pattern, $line)) { $result[ ] = $line; } } fclose($fh); print_r($result)&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>



</channel>

</rss>
