<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE rss PUBLIC "-//Netscape Communications//DTD RSS 0.91//EN" "http://my.netscape.com/publish/formats/rss-0.91.dtd">
<rss version="0.91">
<channel>
	<title>Billets / Maraumax.Fr</title>
	<link>http://www.maraumax.fr/</link>
	<description>Derniers billets du blog / Maraumax.Fr</description>
	<language>en-us</language>
	<item>
		<title>PostgreSQL : Utiliser ON CONFLICT et RETURNING</title>
		<link>http://www.maraumax.fr/billets-76-postgresql-utiliser-on-conflict-et-returning.html</link>
		<description><![CDATA[Catégorie : Développement<br />
Ajouté le : Thu, 11 Aug 2022 14:55:00 +0200<br />
Description : <p>Dans le cadre de l'utilisation d'une query postgre <code>INSERT ON CONFLICT</code> vous avez peut-être tenté d'utiliser <code>RETURNING</code> afin de par exemple retourner l'id original de l'élément qui créer le conflict.</p><p>Prenons la table &quot;customers&quot; suivante :</p><div class="codebox"><div class="incqbox"><pre class="text" style="font-family:monospace;">id	name	email	        date
1	Maxime	maxime@test.fr	2022/08/11
2	Goodie	goodie@test.fr	2022/08/11</pre></div></div><p>Nous avons évidement une contrainte unique sur l'email customers. Si l'on souhaite jouer cette requête nous allons avoir une erreur :</p><div class="codebox"><div class="incqbox"><pre class="sql" style="font-family:monospace;"><span style="color: #993333; font-weight: bold;">INSERT</span> <span style="color: #993333; font-weight: bold;">INTO</span> customers <span style="color: #66cc66;">&#40;</span>email<span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">VALUES</span> <span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'maxime@test.fr'</span><span style="color: #66cc66;">&#41;</span>;
ERROR:  duplicate <span style="color: #993333; font-weight: bold;">KEY</span> value violates <span style="color: #993333; font-weight: bold;">UNIQUE</span> constraint <span style="color: #ff0000;">&quot;customers_email_key&quot;</span>
DETAIL:  <span style="color: #993333; font-weight: bold;">KEY</span> <span style="color: #66cc66;">&#40;</span>email<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">=</span><span style="color: #66cc66;">&#40;</span>maxime@test<span style="color: #66cc66;">.</span>fr<span style="color: #66cc66;">&#41;</span> already <span style="color: #993333; font-weight: bold;">EXISTS</span><span style="color: #66cc66;">.</span></pre></div></div><p>Nous utilisons donc la clause &quot;ON CONFLICT&quot; pour éviter d'avoir cette erreur et souhaitons retourner l'id du customer.</p><p>Notre première id serait d'utiliser cette requête :</p><div class="codebox"><div class="incqbox"><pre class="sql" style="font-family:monospace;"><span style="color: #993333; font-weight: bold;">INSERT</span> <span style="color: #993333; font-weight: bold;">INTO</span> customers <span style="color: #66cc66;">&#40;</span>email<span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">VALUES</span> <span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'maxime@test.fr'</span><span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">ON</span> CONFLICT <span style="color: #66cc66;">&#40;</span>email<span style="color: #66cc66;">&#41;</span> DO NOTHING RETURNING id;
 id 
<span style="color: #808080; font-style: italic;">----</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">0</span> rows<span style="color: #66cc66;">&#41;</span></pre></div></div><p>Seulement comme vous le voyez nous n'avons aucun résultat.</p><p><strong>La solution</strong> : il faut bien utiliser un <strong>DO UPDATE SET</strong> en n'effectuant aucune modification pour avoir nos résultats.</p><div class="codebox"><div class="incqbox"><pre class="sql" style="font-family:monospace;"><span style="color: #993333; font-weight: bold;">INSERT</span> <span style="color: #993333; font-weight: bold;">INTO</span> customers <span style="color: #66cc66;">&#40;</span>email<span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">VALUES</span> <span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'maxime@test.fr'</span><span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">ON</span> CONFLICT <span style="color: #66cc66;">&#40;</span>username<span style="color: #66cc66;">&#41;</span> DO <span style="color: #993333; font-weight: bold;">UPDATE</span> <span style="color: #993333; font-weight: bold;">SET</span> email<span style="color: #66cc66;">=</span>EXCLUDED<span style="color: #66cc66;">.</span>email RETURNING id;
 id 
<span style="color: #808080; font-style: italic;">----</span>
   <span style="color: #cc66cc;">1</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">1</span> row<span style="color: #66cc66;">&#41;</span></pre></div></div><p>Vous noterez l'utilisation de EXCLUDED qui est la valeur originale de l'insert, donc pas de modification et nos récupérons bien notre id <img src="img/smilies/smile.png" alt="smile" class="no-style smilies" /></p>]]></description>
	</item>
	<item>
		<title>Jouer gratuitement à Command &amp; Conquer</title>
		<link>http://www.maraumax.fr/billets-73-jouer-gratuitement-command-conquer.html</link>
		<description><![CDATA[Catégorie : Jeux-Vidéos<br />
Ajouté le : Mon, 18 Sep 2017 16:32:24 +0200<br />
Description : <p><img src="http://www.maraumax.fr/medias/Billets/openra-logo.jpg" alt="http://www.maraumax.fr/medias/Billets/openra-logo.jpg" style="display: block; margin:0 auto;" /></p><p>Il y a plus de 10 ans maintenant est né un projet assez ambitieux de développer le jeu de stratégie en temps réel <strong>Command &amp; Conquer</strong> afin qu'il soit compatible sur les dernières versions de système d'exploitation.</p><p>Cette version, open source et gratuite vous permet de jouer à Tiberian Dawn, Red Alert et Dune 2000. Au fil du temps de nombreux ajouts sont effectués, le jeux en réseau, de nouveaux éditeurs de map, gestion des mods...</p><p>J'ai beaucoup joué à cette re-masterisation que ce soit en local ou en lan, il y avait un certain temps quelques crash sous linux mais rien à signaler désormais !</p><p>Et la petite musique d'intro <em>Hell March</em> :<br /><a href="https://www.youtube.com/watch?v=3HUWUtTZvK4"><img src="http://img.youtube.com/vi/3HUWUtTZvK4/0.jpg" alt="http://img.youtube.com/vi/3HUWUtTZvK4/0.jpg" style="display: block; margin:0 auto;" /></a></p><p><br /><a href="http://www.openra.net/">Site Officiel</a></p>]]></description>
	</item>
	<item>
		<title>Récupérer le discriminator lors de l'utilisation d'un groupe avec JMS Serializer</title>
		<link>http://www.maraumax.fr/billets-72-recuperer-le-discriminator-lors-de-l-utilisation-d-un-groupe-avec-jms-serializer.html</link>
		<description><![CDATA[Catégorie : Développement<br />
Ajouté le : Fri, 28 Jul 2017 16:29:17 +0200<br />
Description : <p>Il existe actuellement un cas particulier avec JMS Serializer : si vous souhaitez récupérer vos attributs en spécifiant un groupe, vous perdrez le discriminator.</p><p><img src="http://www.maraumax.fr/medias/Billets/jms-discriminator.png" alt="http://www.maraumax.fr/medias/Billets/jms-discriminator.png" style="display: block; margin:0 auto;" /><br />Pour palier à ce problème vous devez ajouter le groupe <em>Default</em> en plus de vos / votre groupe(s). Notez que les attributs sans groupe se retrouvent automatiquement dans <em>Default</em>, vous pouvez dans ce cas leurs attribuer un groupe vide.</p><p>Merci à Micael pour le bug et la capture <img src="img/smilies/smile.png" alt="smile" class="no-style smilies" /></p><p>Source : <a href="https://github.com/schmittjoh/JMSSerializerBundle/issues/506">Github</a></p>]]></description>
	</item>
	<item>
		<title>Prestahop : import d'images sur un hébergement mutualisé OVH</title>
		<link>http://www.maraumax.fr/billets-71-prestahop-import-d-images-sur-un-hebergement-mutualise-ovh.html</link>
		<description><![CDATA[Catégorie : Développement<br />
Ajouté le : Tue, 07 Jun 2016 16:50:09 +0200<br />
Description : <p><img src="http://www.maraumax.fr/medias/Billets/prestashop_web_design.png" alt="http://www.maraumax.fr/medias/Billets/prestashop_web_design.png" style="float: right; margin: 0 0 1em 1em;" />Après avoir passé de nombreuses <del>minutes</del> heures sur l'import prestashop et en consultant les différents forums j'ai faillit désespérer ! Mais finalement en allant voir un peu le code source et à coup de var_dump j'ai compris l'origine de mon soucis d'import. Enfin...</p><p>A chaque import j'avais l'erreur suivante :</p><blockquote><div class="incqbox"><p>Erreur lors de la copie de l'image: ../import/toto.jpg</p></div></blockquote><p>Avant toute chose je suis sur la version <strong>1.6</strong> de prestahop donc faites attention à la votre car le problème est peut-être différent. Pensez lors de vos tentatives d'import à avoir qu'un seul produit et image dans votre CSV dans un premier temps afin de gagnez en vitesse <img src="img/smilies/wink.png" alt="wink" class="no-style smilies" /> Surtout quand vous effectuez une bonne dizaine voir centaine de tentatives.</p><p>En regardant dans le fichier <em>classes/Tools.php</em> avec la fonction static <em>copy()</em> je me suis rendu compte que Prestashop ajoutait un slash en début de chaine source si il n'y en avait pas. Si bien que mes dossiers relatifs n'étaient pas correcte. Par exemple <ins>../images/toto.jpg</ins> était transformé en <ins><strong>/</strong>../images/toto.jpg</ins> et forcément ça fonctionne moins bien...</p><p>J'en suis arrivé à la conclusion suivante : il faut partir de la racine de l'hébergement. Ainsi chez OVH pour obtenir le chemin complet, voici la structure à respecter :</p><blockquote><div class="incqbox"><p>/home/prestashop/www/imgs/toto.jpg<br />prestashop = votre login FTP OVH<br />imgs = un dossier crée à la racine du répertoire FTP</p></div></blockquote><p>Il vous suffit ensuite de reprendre ce chemin complet dans votre fichier d'import et vos images fonctionnerons parfaitement !</p><p>Merci a la communauté prestashop pour leurs différentes pistes.</p>]]></description>
	</item>
	<item>
		<title>Firefox : supprimer &quot;Se rendre sur&quot; de la barre d'adresse</title>
		<link>http://www.maraumax.fr/billets-70-firefox-supprimer-se-rendre-sur-de-la-barre-d-adresse.html</link>
		<description><![CDATA[Catégorie : Software<br />
Ajouté le : Mon, 11 Jan 2016 11:37:18 +0100<br />
Description : <p>Depuis la version 43 de Firefox, vous avez surement remarque (puisque vous êtes ici) qu'une nouvelle option s'affiche lorsque vous tapez vos mots clés directement dans la barre d'adresse.</p><p><img src="http://www.maraumax.fr/medias/Billets/firefox-se-rendre-sur.png" alt="http://www.maraumax.fr/medias/Billets/firefox-se-rendre-sur.png" style="display: block; margin:0 auto;" /></p><p>Cette option permet de se rendre sur le domaine correspondant, seulement vous utilisez peut-être comme moi cet espace de recherche pour retrouver votre historique.</p><p>Pour supprimer cette ligne, rendez-vous dans <strong>about:config</strong> puis passez à false la clé suivante :</p><div class="codebox"><div class="incqbox"><pre class="text" style="font-family:monospace;"># Recherchez
browser.urlbar.unifiedcomplete</pre></div></div><p>La suggestion est automatiquement retirée de votre recherche !</p>]]></description>
	</item>
	<item>
		<title>Easy-Thumb.Net - Version 2</title>
		<link>http://www.maraumax.fr/billets-69-easy-thumb.net-version-2.html</link>
		<description><![CDATA[Catégorie : Web<br />
Ajouté le : Tue, 22 Sep 2015 11:15:14 +0200<br />
Description : <p><strong>Easy-Thumb</strong> est un service que j'ai crée en 2009 déjà ! Le service assez simple en soit permet aux webmasters d'afficher des miniatures de site sur leurs services, principalement des annuaires.</p><p>J'ai commencé il y a pas mal de mois a reprendre entièrement la partie serveur qui s'occupe de traiter les thumbs afin de le rendre plus rapide et efficace. Après pas mal de temps de tests je suis assez content du résultat : rapidité et souplesse sont au rendez-vous ! En effet l'ancien système permettait de générer environ 5000 thumbs en une journée du coup lorsque l'on atteint le million de vignettes la mise à jour des anciennes images était loins d'être mensuel ! (les créations étaient prioritaires, heureusement)</p><p>Désormais le service peut générer autant de thumbs que nécessaire grâce aux nouvelles offres de cloud : si la file d'attente est trop importante alors de nouvelles instances vont démarrer pour réduire les délais.</p><p>Sur cette nouvelle version les coûts sont beaucoup plus importants que l'ancienne a cause de ce système d'instances à la demande justement mais aussi au CDN. Je propose donc une offre &quot;premium&quot; permettant de profiter de quelques suppléments qui n'étaient pas sur l'ancienne version que vous pouvez retrouver sur ce tableau :<br /><img src="http://www.maraumax.fr/medias/Billets/easythumb-premium.png" alt="http://www.maraumax.fr/medias/Billets/easythumb-premium.png" style="display: block; margin:0 auto;" /></p><p>Ce qui est (je pense) intéressant ce sont les options full pour capturer une page entière et la possibilité de choisir le type de vue : bureau, mobile ou tablette.</p><p>Voici un exemple de vignettes en version desktop et mobile :<br /><img src="http://www.maraumax.fr/medias/Billets/easythumb-screenshot.png" alt="http://www.maraumax.fr/medias/Billets/easythumb-screenshot.png" style="display: block; margin:0 auto;" /></p><p>N'hésitez pas à me proposer des idées d'améliorations et à tester le service premium qui est offert durant 10 jours !</p><p><a href="https://www.easy-thumb.net/">Visiter Easy-Thumb</a> !</p>]]></description>
	</item>
	<item>
		<title>Installer dashing sur un Raspberry Pi</title>
		<link>http://www.maraumax.fr/billets-68-installer-dashing-sur-un-raspberry-pi.html</link>
		<description><![CDATA[Catégorie : Software<br />
Ajouté le : Mon, 21 Sep 2015 11:29:45 +0200<br />
Description : <p><img src="http://www.maraumax.fr/medias/tutoriels/dashing/thumb.png" alt="http://www.maraumax.fr/medias/tutoriels/dashing/thumb.png" style="float: right; margin: 0 0 1em 1em;" />Ca fait un moment que j'utilise dashing au travail pour surveiller quelques services et prestataires. Voici un petit tutoriel pour installer sur un raspberry pi le dashboard Dashing.</p><p><a href="http://www.maraumax.fr/pages-7-installation-de-dashing-sur-un-raspberry-pi.html">Installer dashing sur un raspberry pi</a></p>]]></description>
	</item>
	<item>
		<title>Utiliser Font Awesome avec Assetic sous Symfony2</title>
		<link>http://www.maraumax.fr/billets-67-utiliser-font-awesome-avec-assetic-sous-symfony2.html</link>
		<description><![CDATA[Catégorie : Développement<br />
Ajouté le : Mon, 09 Mar 2015 16:02:19 +0100<br />
Description : <p>Je me suis récement mis à développer avec Symfony2 qui utilise Assetic pour gérer les ressources. J'ai un peu galéré pour mettre en place Font-Awesome dans mon projet à cause d'<a href="https://github.com/kriswallsmith/assetic/issues/53">un bug</a> d'Assetic en dev qui ne génère pas correctement l'url des fichiers importés. Concrètement lors de l'utilisation d'un @import css dans votre projet, le système de ré-écriture permettant de &quot;fixer&quot; les urls ne fonctionne pas.</p><p>Après quelques recherches je suis tombé sur le bundle <a href="FkrCssURLRewrite">https://github.com/fkrauthan/FkrCssURLRewriteBundle</a> qui est censé corriger ce bug mais ça n'a rien changé chez moi... J'ai fini par utiliser un CDN !</p><p>Mais je suis finalement tombé sur une solution toute simple qui consiste à utiliser l'option <em>output</em> de Assetic pour générer les urls que l'on souhaite à savoir &quot;fonts/*.ext&quot;</p><p>Il suffit juste de rajouter les quelques lignes suivantes dans le <em>assets</em> de Assetic :</p><div class="codebox"><div class="incqbox"><pre class="css" style="font-family:monospace;">        font-awesome-otf<span style="color: #00AA00;">:</span>
            inputs<span style="color: #00AA00;">:</span> <span style="color: #ff0000;">'%kernel.root_dir%/../vendor/fortawesome/font-awesome/fonts/FontAwesome.otf'</span>
            output<span style="color: #00AA00;">:</span> <span style="color: #ff0000;">'fonts/FontAwesome.otf'</span>
        font-awesome-eot<span style="color: #00AA00;">:</span>
            inputs<span style="color: #00AA00;">:</span> <span style="color: #ff0000;">'%kernel.root_dir%/../vendor/fortawesome/font-awesome/fonts/fontawesome-webfont.eot'</span>
            output<span style="color: #00AA00;">:</span> <span style="color: #ff0000;">'fonts/fontawesome-webfont.eot'</span>
        font-awesome-svg<span style="color: #00AA00;">:</span>
            inputs<span style="color: #00AA00;">:</span> <span style="color: #ff0000;">'%kernel.root_dir%/../vendor/fortawesome/font-awesome/fonts/fontawesome-webfont.svg'</span>
            output<span style="color: #00AA00;">:</span> <span style="color: #ff0000;">'fonts/fontawesome-webfont.svg'</span>
        font-awesome-ttf<span style="color: #00AA00;">:</span>
            inputs<span style="color: #00AA00;">:</span> <span style="color: #ff0000;">'%kernel.root_dir%/../vendor/fortawesome/font-awesome/fonts/fontawesome-webfont.ttf'</span>
            output<span style="color: #00AA00;">:</span> <span style="color: #ff0000;">'fonts/fontawesome-webfont.ttf'</span>
        font-awesome-woff<span style="color: #00AA00;">:</span>
            inputs<span style="color: #00AA00;">:</span> <span style="color: #ff0000;">'%kernel.root_dir%/../vendor/fortawesome/font-awesome/fonts/fontawesome-webfont.woff'</span>
            output<span style="color: #00AA00;">:</span> <span style="color: #ff0000;">'fonts/fontawesome-webfont.woff'</span></pre></div></div><p>Les ressources sont désormais disponibles via le chemin défini dans <em>output</em> et ça fonctionne enfin correctement !</p><p><a href="http://stackoverflow.com/a/24777989">Source</a></p>]]></description>
	</item>
	<item>
		<title>Débugguer un coredump Apache/Php avec GDB</title>
		<link>http://www.maraumax.fr/billets-66-debugguer-un-coredump-apache-php-avec-gdb.html</link>
		<description><![CDATA[Catégorie : Software<br />
Ajouté le : Wed, 19 Nov 2014 11:47:05 +0100<br />
Description : <p>J'ai mis quelque temps avant de me lancer dans l'analyse des coredump remontés dans mes logs apaches. La méthode est assez complexe et longue, je vous propose donc un petit &quot;how-to&quot; pour analyser les dump de Apache / Php.</p><p>Voici un exemple de log dans apache2 :</p><div class="codebox"><div class="incqbox"><pre class="text" style="font-family:monospace;"># Log Apache error.log
[Wed Nov 19 10:07:56 2014] [notice] child pid 22204 exit signal Bus error (7), possible coredump in /etc/apache2
[Wed Nov 19 10:12:28 2014] [notice] child pid 22664 exit signal Bus error (7), possible coredump in /etc/apache2</pre></div></div><p>Pas la peine de vous rendre dans /etc/apache2 car malgré ce qui est indiqué il n'y a aucune infos dans la dossier en question surement due aux droits du dossier.</p><p>Pour analyser le fichier généré nous allons devoir compliler apache2 et php avec les options de débug. Dans mon cas je travaille sur des instances EC2, je vous déconseille fortement de faire ces manipulations sur un serveur de prod. Si jamais vous n'avez pas d'autres serveur / machine sous la main, vous pouvez cependant relancer le second serveur apache sur un autre port en conservant votre version &quot;prod&quot;.</p><p><span style="font-size: larger;">Compilation de Apache2</span></p><p>Téléchargez dans les archives d'apache la version exactement de votre serveur. Pour connaitre votre version :</p><div class="codebox"><div class="incqbox"><pre class="text" style="font-family:monospace;">apache2 -v
Server version: Apache/2.2.22 (Ubuntu)
Server built:   Jul 22 2014 14:35:25</pre></div></div><p>Les archives sont disponibles à <a href="http://archive.apache.org/dist/httpd/">cette adresse</a>. J'ai donc téléchargé l'archive httpd-2.2.22.tar.gz.</p><div class="codebox"><div class="incqbox"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># On se rend dans notre répertoire</span>
<span style="color: #7a0874; font-weight: bold;">cd</span>
&nbsp;
<span style="color: #666666; font-style: italic;"># On télécharge l'archive</span>
<span style="color: #c20cb9; font-weight: bold;">wget</span> http:<span style="color: #000000; font-weight: bold;">//</span>archive.apache.org<span style="color: #000000; font-weight: bold;">/</span>dist<span style="color: #000000; font-weight: bold;">/</span>httpd<span style="color: #000000; font-weight: bold;">/</span>httpd-2.2.22.tar.gz
&nbsp;
<span style="color: #666666; font-style: italic;"># On extrait l'archive et on rentre dans le dossier</span>
<span style="color: #c20cb9; font-weight: bold;">tar</span> xvzf httpd-2.2.22.tar.gz <span style="color: #000000; font-weight: bold;">&amp;&amp;</span> <span style="color: #7a0874; font-weight: bold;">cd</span> httpd-2.2.22
&nbsp;
<span style="color: #666666; font-style: italic;"># On définit les paramètres de compilation pour débugger</span>
<span style="color: #7a0874; font-weight: bold;">export</span> <span style="color: #007800;">CFLAGS</span>=<span style="color: #ff0000;">&quot;-DBIG_SECURITY_HOLE -g&quot;</span>
&nbsp;
<span style="color: #666666; font-style: italic;"># On lance la configuration, j'ai ajouté les mods rewrite et ssl</span>
.<span style="color: #000000; font-weight: bold;">/</span>configure <span style="color: #660033;">--enable-so</span> \
  <span style="color: #660033;">--enable-rewrite</span> <span style="color: #660033;">--enable-ssl</span> <span style="color: #660033;">--enable-mods-shared</span>=<span style="color: #ff0000;">'rewrite ssl'</span>
&nbsp;
<span style="color: #666666; font-style: italic;"># On compile !</span>
<span style="color: #c20cb9; font-weight: bold;">make</span> <span style="color: #000000; font-weight: bold;">&amp;&amp;</span> <span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">make</span> <span style="color: #c20cb9; font-weight: bold;">install</span></pre></div></div><p>Apache2 est désormais installé dans la répertoire&nbsp; /usr/local/apache2/ avec les différents dossiers comme bin, conf, logs...</p><p>Si jamais le module htaccess n'est pas chargé, on ajoute la ligne dans le httpd.conf</p><div class="codebox"><div class="incqbox"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># Activation du module rewrite</span>
<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;LoadModule rewrite_module modules/mod_rewrite.so&quot;</span> <span style="color: #000000; font-weight: bold;">&gt;&gt;</span> <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span><span style="color: #7a0874; font-weight: bold;">local</span><span style="color: #000000; font-weight: bold;">/</span>apache2<span style="color: #000000; font-weight: bold;">/</span>conf<span style="color: #000000; font-weight: bold;">/</span>httpd.conf</pre></div></div><p>Vous pouvez désormais démarer / arrêter apache2 :</p><div class="codebox"><div class="incqbox"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># Démarrage</span>
<span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span><span style="color: #7a0874; font-weight: bold;">local</span><span style="color: #000000; font-weight: bold;">/</span>apache2<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>httpd <span style="color: #660033;">-k</span> start
&nbsp;
<span style="color: #666666; font-style: italic;"># Vérification</span>
<span style="color: #c20cb9; font-weight: bold;">ps</span> aux <span style="color: #000000; font-weight: bold;">|</span><span style="color: #c20cb9; font-weight: bold;">grep</span> apache2
root     <span style="color: #000000;">27836</span>  <span style="color: #000000;">0.0</span>  <span style="color: #000000;">0.1</span> <span style="color: #000000;">220232</span>  <span style="color: #000000;">8392</span> ?        Ss   Nov19   <span style="color: #000000;">0</span>:02 <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span><span style="color: #7a0874; font-weight: bold;">local</span><span style="color: #000000; font-weight: bold;">/</span>apache2<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>httpd <span style="color: #660033;">-k</span> start
root     <span style="color: #000000;">27838</span>  <span style="color: #000000;">0.0</span>  <span style="color: #000000;">0.8</span> <span style="color: #000000;">275316</span> <span style="color: #000000;">64452</span> ?        S    Nov19   <span style="color: #000000;">0</span>:<span style="color: #000000;">38</span> <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span><span style="color: #7a0874; font-weight: bold;">local</span><span style="color: #000000; font-weight: bold;">/</span>apache2<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>httpd <span style="color: #660033;">-k</span> start
root     <span style="color: #000000;">27839</span>  <span style="color: #000000;">0.0</span>  <span style="color: #000000;">0.8</span> <span style="color: #000000;">276164</span> <span style="color: #000000;">65088</span> ?        S    Nov19   <span style="color: #000000;">0</span>:<span style="color: #000000;">32</span> <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span><span style="color: #7a0874; font-weight: bold;">local</span><span style="color: #000000; font-weight: bold;">/</span>apache2<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>httpd <span style="color: #660033;">-k</span> start
root     <span style="color: #000000;">27840</span>  <span style="color: #000000;">0.0</span>  <span style="color: #000000;">0.1</span> <span style="color: #000000;">222608</span> <span style="color: #000000;">11728</span> ?        S    Nov19   <span style="color: #000000;">0</span>:<span style="color: #000000;">37</span> <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span><span style="color: #7a0874; font-weight: bold;">local</span><span style="color: #000000; font-weight: bold;">/</span>apache2<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>httpd <span style="color: #660033;">-k</span> start
&nbsp;
<span style="color: #666666; font-style: italic;"># Arrêt</span>
<span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span><span style="color: #7a0874; font-weight: bold;">local</span><span style="color: #000000; font-weight: bold;">/</span>apache2<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>httpd <span style="color: #660033;">-k</span> start</pre></div></div><p>Si vous n'avez pas d'erreurs c'est que cette première partie s'est bien passée.</p><p><span style="font-size: larger;">Compilation de PHP</span></p><p>L'installation de PHP est semblable à apache2, il y a juste quelques configuration à faire dans le httpd.conf en plus.</p><p>Téléchargez votre version de PHP depuis le <a href="http://museum.php.net/php5/">museum</a>. J'utilise actuellement la version php-5.3.10.tar.gz. On passe ensuite à la compilation !</p><div class="codebox"><div class="incqbox"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># Quelques paquets nécessaire</span>
<span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">apt-get</span> <span style="color: #c20cb9; font-weight: bold;">install</span> libbz2-dev libpng12-dev libmysqlclient15-dev
&nbsp;
<span style="color: #666666; font-style: italic;"># Change de répertoire</span>
<span style="color: #7a0874; font-weight: bold;">cd</span>
&nbsp;
<span style="color: #666666; font-style: italic;"># Téléchargement de l'archive</span>
<span style="color: #c20cb9; font-weight: bold;">wget</span> http:<span style="color: #000000; font-weight: bold;">//</span>museum.php.net<span style="color: #000000; font-weight: bold;">/</span>php5<span style="color: #000000; font-weight: bold;">/</span>php-5.3.10.tar.gz
&nbsp;
<span style="color: #666666; font-style: italic;"># Extraction</span>
<span style="color: #c20cb9; font-weight: bold;">tar</span> xvzf php-5.3.10.tar.gz <span style="color: #000000; font-weight: bold;">&amp;&amp;</span> <span style="color: #7a0874; font-weight: bold;">cd</span> php-5.3.10
&nbsp;
<span style="color: #666666; font-style: italic;"># Configure</span>
.<span style="color: #000000; font-weight: bold;">/</span>configure \
<span style="color: #660033;">--with-pear</span>=<span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>share<span style="color: #000000; font-weight: bold;">/</span>php \
<span style="color: #660033;">--with-bz2</span> \
<span style="color: #660033;">--with-curl</span> \
<span style="color: #660033;">--with-gd</span> \
<span style="color: #660033;">--enable-calendar</span> \
<span style="color: #660033;">--enable-mbstring</span> \
<span style="color: #660033;">--enable-bcmath</span> \
<span style="color: #660033;">--enable-sockets</span> \
<span style="color: #660033;">--with-libxml-dir</span>=<span style="color: #000000; font-weight: bold;">/</span>usr \
<span style="color: #660033;">--with-mysqli</span> \
<span style="color: #660033;">--with-mysql</span> \
<span style="color: #660033;">--with-openssl</span>=<span style="color: #000000; font-weight: bold;">/</span>usr \
<span style="color: #660033;">--with-regex</span>=php \
<span style="color: #660033;">--with-zlib</span> \
<span style="color: #660033;">--enable-debug</span> \
<span style="color: #660033;">--with-gettext</span> \
<span style="color: #660033;">--with-libdir</span>=<span style="color: #000000; font-weight: bold;">/</span>lib<span style="color: #000000; font-weight: bold;">/</span>x86_64-linux-gnu \
<span style="color: #660033;">--with-apxs2</span>=<span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span><span style="color: #7a0874; font-weight: bold;">local</span><span style="color: #000000; font-weight: bold;">/</span>apache2<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>apxs
&nbsp;
<span style="color: #666666; font-style: italic;"># Compilation</span>
<span style="color: #c20cb9; font-weight: bold;">make</span> <span style="color: #000000; font-weight: bold;">&amp;&amp;</span> <span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">make</span> <span style="color: #c20cb9; font-weight: bold;">install</span></pre></div></div><p>PHP est désormais installé, il reste désormais quelques configuration à effectuer pour qu'il soit pris en compte !</p><div class="codebox"><div class="incqbox"><pre class="bash" style="font-family:monospace;"> <span style="color: #666666; font-style: italic;"># Création du php.ini</span>
<span style="color: #c20cb9; font-weight: bold;">cp</span> php.ini-development <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span><span style="color: #7a0874; font-weight: bold;">local</span><span style="color: #000000; font-weight: bold;">/</span>lib<span style="color: #000000; font-weight: bold;">/</span>php.ini
&nbsp;
<span style="color: #666666; font-style: italic;"># Chargement du module pour apache (vérifiez s'il n'est pas déjà chargé)</span>
<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;LoadModule php5_module modules/libphp5.so&quot;</span> <span style="color: #000000; font-weight: bold;">&gt;&gt;</span> <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span><span style="color: #7a0874; font-weight: bold;">local</span><span style="color: #000000; font-weight: bold;">/</span>apache2<span style="color: #000000; font-weight: bold;">/</span>conf<span style="color: #000000; font-weight: bold;">/</span>httpd.conf</pre></div></div><p>On ajoute ensuite les 3 lignes suivantes pour dire à apache d'interpréter le PHP :</p><div class="codebox"><div class="incqbox"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># Dans votre httpd.conf</span>
<span style="color: #000000; font-weight: bold;">&lt;</span>FilesMatch \.php$<span style="color: #000000; font-weight: bold;">&gt;</span>
    SetHandler application<span style="color: #000000; font-weight: bold;">/</span>x-httpd-php
<span style="color: #000000; font-weight: bold;">&lt;/</span>FilesMatch<span style="color: #000000; font-weight: bold;">&gt;</span></pre></div></div><p>A ce stade vous devriez pouvoir démarer apache avec php ! Pour tester, créez un fichier /usr/local/apache2/htdocs/info.php :</p><div class="codebox"><div class="incqbox"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
&nbsp;
<a href="http://www.php.net/phpinfo"><span style="color: #990000;">phpinfo</span></a><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div><p>Vous devriez accèder aux infos de php via http://votreip/info.php !</p><p><span style="font-size: larger;">Analyse du coredump</span></p><p>Avant d'analyser le coredump et faut configurer le système pour qu'il le crée.</p><p>Il faut dans un premier temps définir la taille maximum des fichiers core (par défaut à 0) :</p><div class="codebox"><div class="incqbox"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># Ulimit</span>
<span style="color: #7a0874; font-weight: bold;">ulimit</span> <span style="color: #660033;">-c</span> unlimited
&nbsp;
<span style="color: #666666; font-style: italic;"># Vérification</span>
<span style="color: #7a0874; font-weight: bold;">ulimit</span> <span style="color: #660033;">-a</span> <span style="color: #000000; font-weight: bold;">|</span><span style="color: #c20cb9; font-weight: bold;">grep</span> core
core <span style="color: #c20cb9; font-weight: bold;">file</span> <span style="color: #c20cb9; font-weight: bold;">size</span>          <span style="color: #7a0874; font-weight: bold;">&#40;</span>blocks, -c<span style="color: #7a0874; font-weight: bold;">&#41;</span> unlimited</pre></div></div><p>Nous allons ensuite créer un répertoire pour recevoir les fichiers et indiquer à apache ou les créer :</p><div class="codebox"><div class="incqbox"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># Création du dossier</span>
<span style="color: #c20cb9; font-weight: bold;">mkdir</span> <span style="color: #000000; font-weight: bold;">/</span>tmp<span style="color: #000000; font-weight: bold;">/</span>apache
&nbsp;
<span style="color: #666666; font-style: italic;"># Droits</span>
<span style="color: #c20cb9; font-weight: bold;">chmod</span> <span style="color: #000000;">777</span> <span style="color: #000000; font-weight: bold;">/</span>tmp<span style="color: #000000; font-weight: bold;">/</span>apache
&nbsp;
<span style="color: #666666; font-style: italic;"># Et on indique le répertoire à apache</span>
<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;CoreDumpDirectory /tmp/apache&quot;</span> <span style="color: #000000; font-weight: bold;">&gt;&gt;</span> <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span><span style="color: #7a0874; font-weight: bold;">local</span><span style="color: #000000; font-weight: bold;">/</span>apache2<span style="color: #000000; font-weight: bold;">/</span>conf<span style="color: #000000; font-weight: bold;">/</span>httpd.conf
&nbsp;
<span style="color: #666666; font-style: italic;"># On redémarre apache</span>
<span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span><span style="color: #7a0874; font-weight: bold;">local</span><span style="color: #000000; font-weight: bold;">/</span>apache2<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>httpd <span style="color: #660033;">-k</span> start
<span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span><span style="color: #7a0874; font-weight: bold;">local</span><span style="color: #000000; font-weight: bold;">/</span>apache2<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>httpd <span style="color: #660033;">-k</span> stop</pre></div></div><p>Il reste plus qu'a attendre le coredump !</p><div class="codebox"><div class="incqbox"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># Wait and see</span>
<span style="color: #c20cb9; font-weight: bold;">tail</span> <span style="color: #660033;">-f</span> <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span><span style="color: #7a0874; font-weight: bold;">local</span><span style="color: #000000; font-weight: bold;">/</span>apache2<span style="color: #000000; font-weight: bold;">/</span>logs<span style="color: #000000; font-weight: bold;">/</span>error_log</pre></div></div><p>Dés que vous avez l'erreur, vous pouvez arrêter apache. Rendez vous ensuite dans le répertoire /tmp/apache et vous devriez avoir le fichier &quot;core&quot;.</p><p>Il nous reste à télécharger le fichier .gdbinit de PHP permettant de rendre &quot;lisible&quot; votre coredump ! Vous pouvez retrouver celui correspondant à votre version via le <a href="https://github.com/php/php-src/releases">github</a>. La version pour php 5.3.10 est disponible à <a href="https://github.com/php/php-src/blob/e4afa14812d10da7413096c742470fb0582ebc95/.gdbinit">cette adresse</a>.</p><div class="codebox"><div class="incqbox"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># Changement de répertoire</span>
<span style="color: #7a0874; font-weight: bold;">cd</span>
&nbsp;
<span style="color: #666666; font-style: italic;"># Téléchargement (prenez bien le format raw)</span>
<span style="color: #c20cb9; font-weight: bold;">wget</span> https:<span style="color: #000000; font-weight: bold;">//</span>raw.githubusercontent.com<span style="color: #000000; font-weight: bold;">/</span>php<span style="color: #000000; font-weight: bold;">/</span>php-src<span style="color: #000000; font-weight: bold;">/</span>e4afa14812d10da7413096c742470fb0582ebc95<span style="color: #000000; font-weight: bold;">/</span>.gdbinit</pre></div></div><p>Ensuite on install gdb :</p><div class="codebox"><div class="incqbox"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># GDB</span>
<span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">apt-get</span> <span style="color: #c20cb9; font-weight: bold;">install</span> <span style="color: #c20cb9; font-weight: bold;">gdb</span></pre></div></div><p>Et maintenant on peut enfin analyser le coredump :</p><div class="codebox"><div class="incqbox"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># Répertoire</span>
<span style="color: #7a0874; font-weight: bold;">cd</span>
&nbsp;
<span style="color: #666666; font-style: italic;"># On exécute gdb avec le processus apache et le coredump</span>
<span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">gdb</span> <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span><span style="color: #7a0874; font-weight: bold;">local</span><span style="color: #000000; font-weight: bold;">/</span>apache2<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>httpd <span style="color: #000000; font-weight: bold;">/</span>tmp<span style="color: #000000; font-weight: bold;">/</span>apache<span style="color: #000000; font-weight: bold;">/</span>core</pre></div></div><p>Vous allez ensuite obtenir la dernière étape de l'erreur :</p><div class="codebox"><div class="incqbox"><pre class="text" style="font-family:monospace;">Program terminated with signal 7, Bus error.
#0  0x00007f5b64bf8aab in lex_scan (zendlval=0x7fff2a324488) at Zend/zend_language_scanner.l:1797
1797            int bprefix = (yytext[0] != '\'') ? 1 : 0;</pre></div></div><p>pour obtenir la pile vous pouvez utiliser la commande bt, le détail complet avec bt full. Pour analyser le coredump via php utilisez zbacktrace.</p><p>Dans mon cas j'ai obtenu l'erreur suivante :</p><div class="codebox"><div class="incqbox"><pre class="text" style="font-family:monospace;">(gdb) zbacktrace
[0x01a3ed28] load() /home/www/projet/includes/classes/Cache.class.php:58
[0x01a3eb98] load() /home/www/projet/includes/classes/Cache.class.php:28
[0x01a3d2b0] __construct() /home/www/projet/includes/common.php:63
[0x01a20e60] ??? /home/www/projet/includes/ajax.php:4</pre></div></div><p>Il s'agissait d'un require sur un fichier cache qui était supprimé en cours de lecture a cause d'une mauvaise condition sur la date de mise à jour du cache.</p><p>En espérent avoir été utile, n'hésitez pas à consulter les liens suivants ou a poster un commentaire !<br /><a href="http://httpd.apache.org/docs/2.2/fr/install.html">Compilation de apache2</a><br /><a href="http://php.net/manual/fr/install.unix.apache2.php">Compilation de PHP</a></p>]]></description>
	</item>
	<item>
		<title>Extension Intl avec Wamp</title>
		<link>http://www.maraumax.fr/billets-65-extension-intl-avec-wamp.html</link>
		<description><![CDATA[Catégorie : Software<br />
Ajouté le : Tue, 03 Jun 2014 13:59:55 +0200<br />
Description : <p>Si comme moi vous souhaitez faire fonctionner l'entension PHP intl sous wamp, vous devez suivre les deux étapes suivantes :</p><p><span style="font-size: larger;">Activer l'extension via Wamp</span></p><p>Cliquez simplement sur l'icône du logiciel puis allez dans <strong>PHP</strong>, <strong>Extensions PHP</strong> et cochez <strong>php_intl</strong> afin d'activer l'extension. (ou décommentez la ligne php_intl.dll dans le php.ini)</p><p><img src="http://www.maraumax.fr/medias/Billets/wamp_intl.jpg" alt="http://www.maraumax.fr/medias/Billets/wamp_intl.jpg" style="display: block; margin:0 auto;" /></p><p><span style="font-size: larger;">Copier les DLL manquantes</span></p><p>Rendez-vous ensuite dans le répertoire <ins>wamp/bin/php/php*version*/</ins> et copier les dll ayant la structure <strong>icu****.dll</strong> dans le répertoire :<br /><ins>wamp/bin/apache/Apache*version*/bin</ins></p><p>Redémarrez ensuite wamp et votre extenstion devrait être activée !</p><p><img src="http://www.maraumax.fr/medias/Billets/phpinfo_intl.jpg" alt="http://www.maraumax.fr/medias/Billets/phpinfo_intl.jpg" style="display: block; margin:0 auto;" /></p><p style="text-align: center;"><span style="color: #444444">Extrait de phpinfo()</span></p>]]></description>
	</item>
	<item>
		<title>L'hébergeur qui sent bon la lavande</title>
		<link>http://www.maraumax.fr/billets-64-l-hebergeur-qui-sent-bon-la-lavande.html</link>
		<description><![CDATA[Catégorie : Web<br />
Ajouté le : Sun, 02 Mar 2014 12:55:54 +0100<br />
Description : <p>Ou pas. Il semblerait que cet hébergeur gratuit rencontre actuellement quelques problèmes d'hébergement.</p><p><img src="http://www.maraumax.fr/medias/Billets/cigales.jpg" alt="http://www.maraumax.fr/medias/Billets/cigales.jpg" style="display: block; margin:0 auto;" /></p><p>En espérent un retour à la normal assez vite pour que les utilisateurs puissent au moins récupérer leurs sites <img src="img/smilies/wink.png" alt="wink" class="no-style smilies" /></p><p>Plus d'infos sur <a href="http://www.lescigales.org/">Les Cigales</a>.</p>]]></description>
	</item>
	<item>
		<title>Mettre à jour un dépôt SVN avec un tag / une branche</title>
		<link>http://www.maraumax.fr/billets-63-mettre-jour-un-depot-svn-avec-un-tag-une-branche.html</link>
		<description><![CDATA[Catégorie : Développement<br />
Ajouté le : Wed, 26 Feb 2014 19:29:18 +0100<br />
Description : <p>Depuis peu je me suis mis à créer des tags svn pour les différentes versions d'un site internet. C'est très pratique et ça permet de revenir facilement en arrière et / ou d'apporter une modification précise à une version sans avoir à créer des patchs.</p><p>Après avoir crée une branche dans le répertoire tags de votre svn, il vous suffit d'exécuter la commande suivante :<br /><code>svn switch http://svn.votre-site.fr/monprojet/tags/v1.2.3 /home/www/monprojet</code></p><p>Le dernière paramètre, si vous est dans le dossier du projet n'est pas obligatoire. La version de votre dépot est automatiquement mise à jour avec les bonnes révisions.</p><p>Petit point important si vous créer votre branche en utilisant la révision 150 alors que vous êtes actuellement à la révision 180 alors la révision de votre tag seras la 181. Le résultat de svn info seras donc 181. Pour obtenir la révision correspondante utilisez la commande suivante :<br /><code>svn log --verbose --stop-on-copy http://svn.votre-site.fr/monprojet/tags/v1.2.3/</code></p><p>Le résultat seras le suivant :</p><div class="codebox"><div class="incqbox"><pre class="txt" style="font-family:monospace;">Chemins modifiés :
   A /tags/v1.2.3 (de /trunk/www:150)</pre></div></div><p>Pour plus de détails, n'hésitez pas à faire un tour sur la documentation de <a href="http://svnbook.red-bean.com/en/1.0/re27.html">svn switch</a>.</p>]]></description>
	</item>
	<item>
		<title>Envoyer des SMS gratuitement</title>
		<link>http://www.maraumax.fr/billets-62-envoyer-des-sms-gratuitement.html</link>
		<description><![CDATA[Catégorie : Web<br />
Ajouté le : Thu, 07 Feb 2013 15:17:03 +0100<br />
Description : <p><img src="http://www.maraumax.fr/medias/Billets/envoyersmsgratuit.png" alt="http://www.maraumax.fr/medias/Billets/envoyersmsgratuit.png" style="float: left; margin: 0 1em 1em 0;" />Je vous présente mon dernier projet, <a href="http://www.envoyer-sms-gratuit.net/">Envoyer SMS Gratuit</a> qui comme son nom l'indique permet d'envoyer gratuitement des SMS depuis votre ordinateur. Le service est entièrement gratuit, anonyme et ne nécessite pas d'inscription !</p><p><span style="font-size: larger;">Comment envoyer un SMS ?</span><br />Rien de plus simple ! Renseignez simplement le destinataire et votre message, vous avez alors peut-être besoin de cliquer sur une ou deux publicités pour activer le bouton de validation et votre SMS est directement expédié.</p><p><span style="font-size: larger;">Comment est financé le service</span><br />Le service est actuellement financé grâce aux publicités que vous devez cliquer afin de confirmer le formulaire. Ces publicités sont diffusées par des régies publicitaires à l'incentive tel que <a href="https://www.easy-ads.net/">Easy-Ads</a>.</p><p><span style="font-size: larger;">Fonctionnalités</span><br />Les fonctionnalités du site sont très basiques et le resteron probablement. Vous pouvez envoyer des sms, consulter le statut des messages expédiés mais aussi les réponses de vos destinataires.<br />Je rajouterais probablement la possibilité d'envoyer des messages différés mais pas de &quot;grosses fonctionnalités&quot; afin de conserver un service très simple et toujours sans inscription.</p><p>Cependant n'hésitez pas si vous avez quelque chose à me proposer !</p><p><a href="http://www.envoyer-sms-gratuit.net">Envoyer SMS Gratuit</a></p>]]></description>
	</item>
	<item>
		<title>Tuer des processus MySQL de façon sélective</title>
		<link>http://www.maraumax.fr/billets-61-tuer-des-processus-mysql-de-facon-selective.html</link>
		<description><![CDATA[Catégorie : Software<br />
Ajouté le : Thu, 06 Dec 2012 16:21:41 +0100<br />
Description : <p><img src="http://www.maraumax.fr/medias/Billets/mysql-shell.jpg" alt="http://www.maraumax.fr/medias/Billets/mysql-shell.jpg" style="float: right; margin: 0 0 1em 1em;" />J'ai récemment eu besoin de killer tous les processus MySQL d'un utilisateur pour permettre une modification de table tranquillement. MySQL ne propose pas de commande pratique pour le faire et il est impossible d'ajouter des conditions à la commande <a href="http://dev.mysql.com/doc/refman/5.0/en/kill.html">kill</a>.</p><p>Connectez vous à votre serveur MySQL et exécutez les commandes suivantes en utilisant vos conditions évidemment.</p><div class="codebox"><div class="incqbox"><pre class="mysql" style="font-family:monospace;"><span style="color: #808080; font-style: italic;"># Création d'un fichier temporaire sous la forme &quot;kill id;&quot;</span>
<a href="http://search.mysql.com/search?site=refman-51&amp;q=SELECT&amp;lr=lang_en"><span style="color: #990099; font-weight: bold;">select</span></a> <a href="http://dev.mysql.com/doc/refman/5.1/en/string-functions.html"><span style="color: #000099;">concat</span></a><span style="color: #FF00FF;">&#40;</span><span style="color: #008000;">'KILL '</span><span style="color: #000033;">,</span>id<span style="color: #000033;">,</span><span style="color: #008000;">';'</span><span style="color: #FF00FF;">&#41;</span> <a href="http://search.mysql.com/search?site=refman-51&amp;q=FROM&amp;lr=lang_en"><span style="color: #990099; font-weight: bold;">from</span></a> information_schema.processlist <a href="http://search.mysql.com/search?site=refman-51&amp;q=WHERE&amp;lr=lang_en"><span style="color: #990099; font-weight: bold;">where</span></a> <a href="http://dev.mysql.com/doc/refman/5.1/en/information-functions.html"><span style="color: #000099;">user</span></a><span style="color: #CC0099;">=</span><span style="color: #008000;">'root'</span> <a href="http://dev.mysql.com/doc/refman/5.1/en/non-typed-operators.html"><span style="color: #CC0099; font-weight: bold;">and</span></a> <a href="http://search.mysql.com/search?site=refman-51&amp;q=TIME&amp;lr=lang_en"><span style="color: #999900; font-weight: bold;">time</span></a> <span style="color: #CC0099;">&gt;</span> <span style="color: #008080;">200</span> <a href="http://search.mysql.com/search?site=refman-51&amp;q=INTO&amp;lr=lang_en"><span style="color: #990099; font-weight: bold;">into</span></a> <a href="http://search.mysql.com/search?site=refman-51&amp;q=OUTFILE&amp;lr=lang_en"><span style="color: #990099; font-weight: bold;">outfile</span></a> <span style="color: #008000;">'/tmp/kill.tmp'</span><span style="color: #000033;">;</span>
<span style="color: #808080; font-style: italic;"># On importe le fichier contenant nos commandes</span>
source <span style="color: #CC0099;">/</span>tmp<span style="color: #CC0099;">/</span><a href="http://search.mysql.com/search?site=refman-51&amp;q=KILL&amp;lr=lang_en"><span style="color: #990099; font-weight: bold;">kill</span></a>.tmp<span style="color: #000033;">;</span></pre></div></div><p>Dans cet exemple, je récupère les IDs de tous les processus de l'utilisateur root lancés depuis plus de 200 secondes. N'hésitez pas à regarder la structure de la table processlist avec la commande suivante :</p><div class="codebox"><div class="incqbox"><pre class="mysql" style="font-family:monospace;"><span style="color: #808080; font-style: italic;"># Afficha la structure de la table des processus</span>
<a href="http://search.mysql.com/search?site=refman-51&amp;q=DESCRIBE&amp;lr=lang_en"><span style="color: #990099; font-weight: bold;">describe</span></a> information_schema.processlist<span style="color: #000033;">;</span></pre></div></div><p>Bon killing à vous !</p>]]></description>
	</item>
	<item>
		<title>Forcer le HTTPS avec un Load Balancer chez Amazon</title>
		<link>http://www.maraumax.fr/billets-60-forcer-le-https-avec-un-load-balancer-chez-amazon.html</link>
		<description><![CDATA[Catégorie : Software<br />
Ajouté le : Fri, 09 Nov 2012 11:05:27 +0100<br />
Description : <p><img src="http://www.maraumax.fr/medias/Billets/amazon-web-services.png" alt="http://www.maraumax.fr/medias/Billets/amazon-web-services.png" style="float: left; margin: 0 1em 1em 0;" />Amazon permet de configurer son service Load Balancing pour gérer le chiffrement de votre site et renvoyer du HTTP sur vos instances. Cette solution permet de décharger votre serveur WEB mais impossible d'utiliser la variable &quot;SERVER_PORT&quot; dans vos conditions car le serveur répond uniquement sur le port 80. Logique !</p><p>La solution est plus ou moins indiquée dans la <a href="http://aws.amazon.com/fr/documentation/elasticloadbalancing/">documentation</a> d'amazon et c'est en place depuis le <a href="http://aws.amazon.com/releasenotes/7778622769836370">27 octobre 2010</a>.</p><p>Il faut donc utiliser le header <strong>X-Forwarded-Proto</strong> qui contient le protocole du client renvoyé par le load balancer. Et voici deux petites lignes permettant de forcer le https à votre client :</p><div class="codebox"><div class="incqbox"><pre class="apache" style="font-family:monospace;"><span style="color: #00007f;">RewriteEngine</span> <span style="color: #0000ff;">On</span>
<span style="color: #00007f;">RewriteCond</span> %{HTTP:X-Forwarded-Proto} !https
<span style="color: #00007f;">RewriteRule</span> !/status https://%{SERVER_NAME}%{REQUEST_URI} [R=<span style="color: #ff0000;">301</span>,L]</pre></div></div><p>La première ligne active le mod rewrite, la seconde vérifie si le protocole est donc différent de https et dans ce cas la troisième ligne effectue une redirection 301 vers le même domaine en excluant le cas ou vous consultez le server status !</p>]]></description>
	</item>
	<item>
		<title>Problème avec Pure Ftp Mysql et Inetd</title>
		<link>http://www.maraumax.fr/billets-59-probleme-avec-pure-ftp-mysql-et-inetd.html</link>
		<description><![CDATA[Catégorie : Software<br />
Ajouté le : Thu, 16 Aug 2012 12:47:04 +0200<br />
Description : <p>Inetd est un démon très avantageux qui active automatiquement un service lorsqu'un client tente de s'y connecter. Il permet donc d'allouer des ressources uniquement quand c'est nécessaire. Suite à une mise à jour des paquets un serveur Debian, je me suis retrouvé avec une erreur lors de la connexion au ftp.</p><blockquote><div class="incqbox"><p>Can't exec &quot;/usr/sbin/pure-ftpd&quot;: No such file or directory at /usr/sbin/pure-ftpd-wrapper line 174.</p></div></blockquote><p>Cette erreur apparaît car inetd a mal été configuré avec pure ftp mysql. Pour la corriger il suffit d'éditer les quelques premières lignes du fichier <em>/usr/sbin/pure-ftpd-wrapper</em>.</p><p>Remplacez les trois lignes suivantes :</p><div class="codebox"><div class="incqbox"><pre class="bash" style="font-family:monospace;">my <span style="color: #007800;">$daemon</span> = <span style="color: #ff0000;">'/usr/sbin/pure-ftpd'</span>;
my <span style="color: #000000; font-weight: bold;">@</span>capabilities = <span style="color: #000000; font-weight: bold;">@</span>ARGV;
&nbsp;
<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #007800;">$ARGV</span><span style="color: #7a0874; font-weight: bold;">&#91;</span><span style="color: #000000;">0</span><span style="color: #7a0874; font-weight: bold;">&#93;</span><span style="color: #7a0874; font-weight: bold;">&#41;</span> <span style="color: #7a0874; font-weight: bold;">&#123;</span>
<span style="color: #007800;">$daemon</span> = <span style="color: #ff0000;">&quot;<span style="color: #007800;">$daemon</span>-<span style="color: #007800;">$ARGV</span>[0]&quot;</span>;
<span style="color: #7a0874; font-weight: bold;">&#125;</span></pre></div></div><p>Par ceci :</p><div class="codebox"><div class="incqbox"><pre class="bash" style="font-family:monospace;">my <span style="color: #007800;">$daemon</span> = <span style="color: #ff0000;">'/usr/sbin/pure-ftpd-mysql'</span>;
my <span style="color: #000000; font-weight: bold;">@</span>capabilities = <span style="color: #000000; font-weight: bold;">@</span>ARGV;
&nbsp;
<span style="color: #666666; font-style: italic;">#if ($ARGV[0]) {</span>
<span style="color: #666666; font-style: italic;">#$daemon = &quot;$daemon-$ARGV[0]&quot;;</span>
<span style="color: #666666; font-style: italic;">#}</span></pre></div></div><p>On a donc remplacer le chemin du démon et commenté les quelques lignes qui normalement auraient du ajouter &quot;-mysql&quot; au nom du démon.</p><p>Vous pouvez ensuite redémarrer inetd, et tout devrait à nouveau fonctionner !<br /><code>/etc/init.d/openbsd-inetd restart</code></p><p>En espérant vous avoir rendu service !</p>]]></description>
	</item>
	<item>
		<title>Créer des miniatures de vidéos à la volée</title>
		<link>http://www.maraumax.fr/billets-58-creer-des-miniatures-de-videos-la-volee.html</link>
		<description><![CDATA[Catégorie : Développement<br />
Ajouté le : Tue, 10 Jul 2012 17:22:11 +0200<br />
Description : <p>Pour un projet qui devrait voir le jour dans les prochaines semaines / mois j'ai eu besoin de réaliser un script permettant de générer des vidéos à la volée.</p><p>J'ai donc travaillé sur un script qui est assez simple au final. Pour l'utiliser vous devez disposer de ffmpeg sur votre serveur.</p><p>Pour l'installer lancez simplement la commande suivante :</p><div class="codebox"><div class="incqbox"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">apt-get</span> update
<span style="color: #c20cb9; font-weight: bold;">apt-get</span> <span style="color: #c20cb9; font-weight: bold;">install</span> <span style="color: #c20cb9; font-weight: bold;">ffmpeg</span></pre></div></div><p>Et voici le script, nommez la captures.sh par exemple :</p><div class="codebox"><div class="incqbox"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">#! /bin/bash</span>
&nbsp;
<span style="color: #666666; font-style: italic;">#--- Paramètres</span>
&nbsp;
<span style="color: #007800;">videowaitdir</span>=<span style="color: #000000; font-weight: bold;">/</span>home<span style="color: #000000; font-weight: bold;">/</span>www<span style="color: #000000; font-weight: bold;">/</span>videos<span style="color: #000000; font-weight: bold;">/</span>
<span style="color: #007800;">capturedir</span>=<span style="color: #000000; font-weight: bold;">/</span>home<span style="color: #000000; font-weight: bold;">/</span>www<span style="color: #000000; font-weight: bold;">/</span>videos<span style="color: #000000; font-weight: bold;">/</span>screens<span style="color: #000000; font-weight: bold;">/</span>
&nbsp;
<span style="color: #007800;">numberscreens</span>=<span style="color: #000000;">10</span>
&nbsp;
<span style="color: #666666; font-style: italic;">#--- Traitement des vidéos</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">for</span> video <span style="color: #000000; font-weight: bold;">in</span> <span style="color: #000000; font-weight: bold;">`</span><span style="color: #c20cb9; font-weight: bold;">ls</span> <span style="color: #007800;">$videowaitdir</span><span style="color: #000000; font-weight: bold;">`</span>; <span style="color: #000000; font-weight: bold;">do</span>
	<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #660033;">-f</span> <span style="color: #007800;">$videowaitdir</span><span style="color: #007800;">$video</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span>; <span style="color: #000000; font-weight: bold;">then</span>
		<span style="color: #007800;">duration</span>=<span style="color: #000000; font-weight: bold;">`</span><span style="color: #c20cb9; font-weight: bold;">ffmpeg</span> <span style="color: #660033;">-i</span> <span style="color: #007800;">$videowaitdir</span><span style="color: #007800;">$video</span> <span style="color: #000000;">2</span><span style="color: #000000; font-weight: bold;">&gt;&amp;</span><span style="color: #000000;">1</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">grep</span> <span style="color: #ff0000;">&quot;Duration:&quot;</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">awk</span> <span style="color: #ff0000;">'{print $2}'</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">tr</span> <span style="color: #660033;">-d</span> , <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">cut</span> <span style="color: #660033;">-d</span> . <span style="color: #660033;">-f</span> <span style="color: #000000;">1</span><span style="color: #000000; font-weight: bold;">`</span>
&nbsp;
		<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #660033;">-z</span> <span style="color: #ff0000;">&quot;<span style="color: #007800;">$duration</span>&quot;</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span> <span style="color: #000000; font-weight: bold;">||</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #ff0000;">&quot;<span style="color: #007800;">$duration</span>&quot;</span> = <span style="color: #ff0000;">&quot;00:00:00&quot;</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span>
		<span style="color: #000000; font-weight: bold;">then</span>
			<span style="color: #7a0874; font-weight: bold;">continue</span>
		<span style="color: #000000; font-weight: bold;">fi</span>
&nbsp;
		<span style="color: #007800;">h</span>=<span style="color: #000000; font-weight: bold;">`</span><span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #007800;">$duration</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">cut</span> <span style="color: #660033;">-d</span> : <span style="color: #660033;">-f</span> <span style="color: #000000;">1</span><span style="color: #000000; font-weight: bold;">`</span>
		<span style="color: #007800;">m</span>=<span style="color: #000000; font-weight: bold;">`</span><span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #007800;">$duration</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">cut</span> <span style="color: #660033;">-d</span> : <span style="color: #660033;">-f</span> <span style="color: #000000;">2</span><span style="color: #000000; font-weight: bold;">`</span>
		<span style="color: #007800;">s</span>=<span style="color: #000000; font-weight: bold;">`</span><span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #007800;">$duration</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">cut</span> <span style="color: #660033;">-d</span> : <span style="color: #660033;">-f</span> <span style="color: #000000;">3</span><span style="color: #000000; font-weight: bold;">`</span>
&nbsp;
		<span style="color: #007800;">totaltime</span>=$<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #007800;">$h</span>+<span style="color: #007800;">$m</span>+<span style="color: #007800;">$s</span><span style="color: #7a0874; font-weight: bold;">&#41;</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>
&nbsp;
		<span style="color: #007800;"><span style="color: #000000; font-weight: bold;">time</span></span>=$<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #007800;">$totaltime</span><span style="color: #000000; font-weight: bold;">/</span><span style="color: #007800;">$numberscreens</span><span style="color: #7a0874; font-weight: bold;">&#41;</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>
&nbsp;
		<span style="color: #000000; font-weight: bold;">for</span><span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #007800;">i</span>=<span style="color: #000000;">0</span>;i<span style="color: #000000; font-weight: bold;">&lt;</span>=<span style="color: #007800;">$numberscreens</span>;i++<span style="color: #7a0874; font-weight: bold;">&#41;</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>
		<span style="color: #000000; font-weight: bold;">do</span>
			<span style="color: #007800;">t</span>=$<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #007800;">$time</span><span style="color: #000000; font-weight: bold;">*</span><span style="color: #007800;">$i</span>+<span style="color: #007800;">$time</span><span style="color: #7a0874; font-weight: bold;">&#41;</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>
&nbsp;
			<span style="color: #c20cb9; font-weight: bold;">ffmpeg</span> <span style="color: #660033;">-y</span> <span style="color: #660033;">-i</span> <span style="color: #007800;">$videowaitdir</span><span style="color: #007800;">$video</span> <span style="color: #660033;">-f</span> mjpeg <span style="color: #660033;">-ss</span> <span style="color: #007800;">$t</span> <span style="color: #660033;">-vframes</span> <span style="color: #000000;">1</span> <span style="color: #660033;">-s</span> 640x480 <span style="color: #660033;">-an</span> <span style="color: #007800;">$capturedir</span><span style="color: #007800;">$video</span>.<span style="color: #007800;">$i</span>.jpg
		<span style="color: #000000; font-weight: bold;">done</span>
	<span style="color: #000000; font-weight: bold;">fi</span>
<span style="color: #000000; font-weight: bold;">done</span></pre></div></div><p>Modifiez simplement les deux premières variables qui sont :<br /><strong>videowaitdir</strong> : répertoire des vidéos<br /><strong>capturedir</strong> : répertoire des miniatures</p><p>Vous avez aussi une variable <strong>numberscreens</strong> qui détermine le nombre de screens à faire de la vidéo.</p><p>N'oubliez pas de modifier les permissions pour exécuter le bash :<br /><code>chmod +x captures.sh</code><br />Le script est assez simple à comprendre, on liste les vidéos du dossier, on utilise ffmpeg pour récupérer le temps de la vidéo et on détermine à quels moments on doit faire les screens.</p><p>N'hésitez pas si vous avez des suggestions.</p>]]></description>
	</item>
	<item>
		<title>Consulter les message du boot sur Debian</title>
		<link>http://www.maraumax.fr/billets-57-consulter-les-message-du-boot-sur-debian.html</link>
		<description><![CDATA[Catégorie : Software<br />
Ajouté le : Thu, 05 Jul 2012 09:52:03 +0200<br />
Description : <p>J'ai récement eu besoin de consulter les messages retournés par les services lors du boot sur Debian mais impossible de trouver quoi que ce soit dans les fichiers de logs.</p><p>Après quelques recherche il s'est avéré qu'il faut activer une option pour loger les sorties dans un fichier.</p><p>Pour les activer, ouvrez le fichier :<br /><code>/etc/default/bootlogd</code></p><p>Puis remplacez la valeur de <strong>BOOTLOGD_ENABLE</strong> par <strong>Yes</strong>.</p><div class="codebox"><div class="incqbox"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># Run bootlogd at startup ?</span>
<span style="color: #007800;">BOOTLOGD_ENABLE</span>=Yes</pre></div></div><p>Vous pouvez désormais consulter les logs du boot dans le fichier <br /><code>/var/log/boot</code></p><p>Et voici un exemple de contenu :</p><blockquote><div class="incqbox"><p>Thu Jul&nbsp; 5 15:05:08 2012: Configuring network interfaces...done.<br />Thu Jul&nbsp; 5 15:05:09 2012: Cleaning up temporary files....<br />Thu Jul&nbsp; 5 15:05:09 2012: Setting sensors limits.<br />Thu Jul&nbsp; 5 15:05:09 2012: Setting kernel variables ...done.<br />Thu Jul&nbsp; 5 15:05:09 2012: INIT: Entering runlevel: 2<br />Thu Jul&nbsp; 5 15:05:09 2012: Using makefile-style concurrent boot in runlevel 2.<br />Thu Jul&nbsp; 5 15:05:09 2012: Starting enhanced syslogd: rsyslogd.</p></div></blockquote><p>En espérant que ça vous permettre de résoudre vos soucis !</p>]]></description>
	</item>
	<item>
		<title>Installer Red5 sur Debian Squeeze</title>
		<link>http://www.maraumax.fr/billets-55-installer-red5-sur-debian-squeeze.html</link>
		<description><![CDATA[Catégorie : Software<br />
Ajouté le : Fri, 04 May 2012 16:37:33 +0200<br />
Description : <p><img src="http://www.maraumax.fr/medias/Billets/tutoriels/red5-logo.png" alt="http://www.maraumax.fr/medias/Billets/tutoriels/red5-logo.png" style="float: left; margin: 0 1em 1em 0;" />Aujourd'hui c'est un tutoriel pour installer Red5, un équivalent de Flash Media Server de Adobe. J'utilise red5 dans le cadre d'un projet de publication de vidéo et audio en streaming.</p><p>J'utilisais jusqu'à aujourd'hui la version 0.9.1 disponible sur les dépôts Debian, mais je rencontrait quelques soucis donc j'ai préféré passer la dernière version 1.0 RC.</p><p>J'en ai profité pour écrire un petit tutoriel vous permettant d'effectuer cette installation. Je partagerais probablement quelques codes flash pour publier des flux vidéo (webcam) en utilisant red5 un jour !</p><p><span style="font-size: larger;"><a href="http://www.maraumax.fr/pages-5-installer-red5-sur-debian-squeeze.html">Installer Red5 sur Debian Squeeze</a></span></p>]]></description>
	</item>
	<item>
		<title>Créer des onglets personnalisés sur Android</title>
		<link>http://www.maraumax.fr/billets-54-creer-des-onglets-personnalises-sur-android.html</link>
		<description><![CDATA[Catégorie : Développement<br />
Ajouté le : Mon, 30 Apr 2012 14:44:04 +0200<br />
Description : <p><img src="http://www.maraumax.fr/medias/Billets/tutoriels/preview-onglets.png" alt="http://www.maraumax.fr/medias/Billets/tutoriels/preview-onglets.png" style="float: right; margin: 0 0 1em 1em;" />Vous souhaitez créer des onglets personnalisés dans votre application Android ? Je viens de créer un tutoriel permettant de modifier l'aspect par défaut des onglets afin de créer des onglets plus esthétiques et moins importants en taille.</p><p>Le tutoriel est assez simple et consiste à créer une vue à partir d'un fichier xml pour chaque onglet. Dans mon exemple j'ai simplement ajouté du texte dans cette vue, mais vous pouvez évidemment ajouter &quot;ce que vous souhaitez&quot; mais si c'est pour mettre un texte et une image autant ne pas vous embêter et utiliser le layout de base d'Android.</p><p>Vous pouvez télécharger les sources du tutoriel à la fin, n'hésitez pas à montrer le résultat de vos modifications et pourquoi les différents fichiers XML afin de donner des exemples pour les autres visiteurs.</p><p><span style="font-size: larger;"><a href="http://www.maraumax.fr/pages-4-creer-des-onglets-personnalises-sur-android.html">Créer des onglets personnalisés sur Android</a></span></p>]]></description>
	</item>
</channel>
</rss>