<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xml:base="http://pilgrim.maleo.net/"><id>http://pilgrim.maleo.net/</id><title>pilgrim[.maleo.net]</title><updated>2009-01-07T16:27:51+01:00</updated><link rel="self" href="http://pilgrim.maleo.net/weblog.atom"></link><entry><id>urn:md5:1b49b9c1bb93926205804db5c19accec</id><title><![CDATA[Meilleurs voeux 2009]]></title><updated>2009-01-07T16:27:51+01:00</updated><author><name>David Duret</name></author><link href="2009/01/meilleurs-voeux-2009" rel="alternate" title="Meilleurs voeux 2009"/><summary type="html">&lt;p&gt;La nouvelle année est là, avec son lot de "Bonne année", "Bonne santé", etc et aussi ses bonnes résolutions. Voyons voir si je peux jouer aussi.&lt;/p&gt;</summary><published>2009-01-07T16:25:49+01:00</published><category term="general" label="Général"/><content type="html"><![CDATA[<p>La nouvelle année est là, avec son lot de "Bonne année", "Bonne santé", etc et aussi ses bonnes résolutions. Voyons voir si je peux jouer aussi.</p>

<p>Je vous souhaite tout d'abord à vous, mes chers lecteurs et lectrices une très bonne année et une très bonne santé. Qu'elle vous apporte tout ce que vous souhaitez que ce soit au niveau personnel qu'au niveau professionnel !</p>

<p>Je suis ne suis pas du genre à avoir des (bonnes) résolutions mais ça peut être pratique d'en prévoir quelques unes, histoire de les relire plus tard et de voir ce qui a été fait ou pas. A relire <a href="http://pilgrim.maleo.net/2005/12/predictions-et-bonnes-resolutions-pour-2006">mes résolutions pour l'année 2006</a>, je me dit que, finalement, il n'y a pas eu grand chose de fait...</p>

<p>Cette année pourtant, j'ai quand même des choses en tête et je vais essayer, je dis bien essayer, de faire en sorte qu'elles se réalisent :</p>

<ul>
    <li>Concernant ma société, Maléo Interactive, il faut que je m'occupe un peu (beaucoup) de sa visibilité et que je me fasse plus et mieux voir : un logo - je n'en ai toujours pas - , un site web - un vrai avec des choses dedans, qui indique au client ce que je sais faire et ce qu'il peut attendre de moi - et de la relation client - dépliant autour de chez moi, inscription sur les annuaires de freelance, plus de visibiilité, quoi !</li>
    <li>Du point de vue de ce blog, j'aimerais avoir un rythme de publication un peu plus soutenu et pas un billet tous les 6 mois, il faudrait aussi que je retouche un peu le moteur de publication (remettre le moteur de recherche interne, disparu à cause d'un conflit PHP4/5 avec la classe NuSoap utilisée, avoir un mode brouillon pour les billets que je prépare mais que je ne souhaite pas publier sur le moment, revoir un peu le design qui, même s'il me plait toujours, pourrait être un peu mieux, je pense principalement à l'agencement des données dans les pages, etc.)</li>
    <li>J'ai aussi deux ou trois projets web personnels à mettre en place, je vous en parlerai plus en détail si j'arrive un jour à les rendre concret, ce qu'il manque, comme bien souvent, c'est du temps (mais aussi de la motivation, un bon coup de pied au derrière !)</li>
    <li>D'un point de vue plus personnel, ma fille s'étant mise à la flûte traversière, j'ai ressorti ma vieille flûte à bec du collège pour l'accompagner avec mes modestes connaissances mais j'aimerais refaire un peu de musique et c'est l'occasion (j'avais pris des cours de guitare étant jeune et continué un peu par la suite mais j'ai plutôt tout perdu, sniff), j'aimerais aussi essayer la cornemuse ou le biniou (je suis assez fan de musique du monde et principalement traditionnelle, celtique ou irlandaise, ...)</li>
    <li>J'aimerais un nouveau VTT, un beau Trek, pour remplacer mon MBK qui me suit depuis plus d'une quizaine d'année. Je dis remplacer mais je ne "jetterais" pas l'ancien qui a toujours des choses à dire et à faire :-) Espérons que Maléo Interactive tourne bien et me permettre de pouvoir réaliser ce rêve qui est là depuis de nombreuses années...</li>
</ul>

<p>Voilà quelques résolutions qui me tiennent à coeur, il doit y en avoir d'autres qui ne me viennent pas à l'esprit mais que j'espère pouvoir faire aussi. Et pas de remarques désobligeantes concernant tous les projets que j'ai en tête depuis tout le temps de ceux qui me connaissent bien et qui savent comment ça va se terminer... :-)</p>

<p>Et vous, quelles sont les vôtres ?</p>]]></content><slash:comments>0</slash:comments></entry><entry><id>urn:md5:7e04c3007a1625f5cf3f7c60a0100d54</id><title><![CDATA[hexa2rgb() pour manipuler les couleurs]]></title><updated>2008-12-18T21:41:36+01:00</updated><author><name/></author><link href="2008/12/hexa2rgb-pour-manipuler-les-couleurs" rel="alternate" title="hexa2rgb() pour manipuler les couleurs"/><summary type="html">&lt;p&gt;Ayant de besoin de spécifier de manière simple une couleur en entrée d'une fonction qui nécessite d'avoir les 3 composantes (rouge, vert, bleu) séparées, j'ai cherché une telle fonction sur le net et j'ai fini par créer la mienne, mélange de tout ce que j'ai pu trouver.&lt;/p&gt;</summary><published>2008-12-18T21:36:33+01:00</published><category term="php" label="PHP"/><content type="html"><![CDATA[<p>Ayant de besoin de spécifier de manière simple une couleur en entrée d'une fonction qui nécessite d'avoir les 3 composantes (rouge, vert, bleu) séparées, j'ai cherché une telle fonction sur le net et j'ai fini par créer la mienne, mélange de tout ce que j'ai pu trouver.</p>

<p>Pour un script de création de vignettes, j'ai besoin de passer une couleur de fond à GD, cette couleur de fond servant de remplissage par défaut si l'image d'origine n'a pas le même ratio que la vignette finale. GD, au niveau de sa fonction imagecolorallocate() par ex, attend la couleur sur 3 paramètres, que sont le rouge, vert et bleu.</p>

<p>Mais dans ma logique de toujours faire au plus simple pour les utilisateurs finaux (ici des développeurs utilisant mon script mais pas forcément des développeurs chevronnés), le plus logique m'a paru de demander une couleur au format hexa, format le plus utilisé sur le web que ce soit pour le HTML, les CSS ou autre ; le bon vieux <code>#000000</code> pour le noir par ex. Ce code donnant d'ailleurs, en RGB, les valeurs suivantes : R = 0, G = 0, B = 0.</p>

<p>La fonction est d'ailleurs toute simple d'utilisation mais j'ai repris/amélioré deux points par rapport à ce que j'ai pu trouver (la fonction ci-après existe peut-être déjà mais je ne suis pas tombé dessus) :</p>

<ul>
    <li>Les valeurs d'entrée peuvent être indifféremment <code>#000000</code>, <code>#000</code>, <code>000000</code> ou <code>000</code>, l'équivalence se fait automatiquement avant de faire le processus de conversion</li>
    <li>Les valeurs de sorties peuvent être de deux types : un "bête" tableau contenant respectivement le rouge, le vert et le bleu ou alors un tableau associatif avec "red", "green" et "blue" pour les clés de ce tableau</li>
</ul>

<p>Mais mieux qu'un long discours, voici la fonction qui comme toujours est très certainement <em>améliorable</em> :</p>

<pre>
function hexa2rgb ( $hexa, $indexed = FALSE ) {

    $hexa = trim($hexa, '#');
    
    if ( strlen($hexa) == 3 ) {
        $hexa = str_repeat($hexa{0}, 2).
                str_repeat($hexa{1}, 2).
                str_repeat($hexa{2}, 2);
    } // endif
    
    $int = hexdec($hexa);
    
    $result = array(
        'red'   =&gt; 0xFF &amp; ( $int &gt;&gt; 0x10 ),
        'green' =&gt; 0xFF &amp; ( $int &gt;&gt; 0x8 ),
        'blue'  =&gt; 0xFF &amp; $int
    );
    
    return $indexed ? $result : array_values($result);

} // end of 'hexa2rgb()'
</pre>

<p>L'utilisation est toute simple, voici quelques exemples :</p>

<ul>
    <li><code>list($r, $g, $b) = hexa2rgb('#cc0000');</code></li>
    <li><code>$color = hexa2rgb('#cc0000'); echo $color['red'];</code></li>
</ul>

<p>Comme d'habitude, n'hésitez pas à faire vos remarques sur cette fonction, vos corrections ou améliorations seront toujours les bienvenues :-)</p>]]></content><slash:comments>1</slash:comments></entry><entry><id>urn:md5:66c0d18310e457426eafe76a212d4c5b</id><title><![CDATA[Dead or alive ?]]></title><updated>2008-12-18T18:41:15+01:00</updated><author><name>David Duret</name></author><link href="2008/12/dead-or-alive" rel="alternate" title="Dead or alive ?"/><summary type="html">&lt;p&gt;Avec plus de 10 mois de silence sur ce blog, je tiens à vous rassurer, vous mes lecteurs (ou ce qu'il en reste, peut-être). Je n'ai pas abandonné l'aventure, j'ai juste été un peu occupé ailleurs mais j'ai aussi été un peu flemmard pour poster des choses ici.&lt;/p&gt;</summary><category term="general" label="Général"/><published>2008-12-18T18:41:15+01:00</published><content type="html"><![CDATA[<p>Avec plus de 10 mois de silence sur ce blog, je tiens à vous rassurer, vous mes lecteurs (ou ce qu'il en reste, peut-être). Je n'ai pas abandonné l'aventure, j'ai juste été un peu occupé ailleurs mais j'ai aussi été un peu flemmard pour poster des choses ici.</p>

<p>Pour résumer, et comme <a href="/2008/01/2008-annee-charniere">je l'avais annoncé</a>, cette année a été la création et le lancement de mon entreprise cette année (l'immatriculation officielle date du 5 mars) : <strong>Maléo Interactive</strong>. Maléo Interactive propose donc de la "création de sites internet", raccourci qui indique tout de même que je fais tout type de développement web, du site vitrine à l'application web complète, ce que j'ai fais les 9 années précédentes dans deux sociétés différentes.</p>

<p>L'année écoulée s'est plutôt bien passée puisque je suis toujours à mon compte avec des projets effectués et des projets à venir. Tout n'est pas simple et l'administration (ou les administrations) ne sont pas forcément là pour nous simplifier la tâche mais après ces quelques mois d'activité, je peux vous dire que je suis heureux de ma situation même si on voit bien qu'il y a des creux dans l'activité, crise ou pas crise...</p>

<p>Je reviendrai plus tard sur tout ce qui tourne autour de ma société, ce billet étant plus pour vous annoncer mon "retour", je n'ai pas chaumé niveau code ces derniers mois et j'ai plein de choses à partager.</p>

<p>Stay tuned!</p>]]></content><slash:comments>3</slash:comments></entry><entry><id>urn:md5:9954b0c865ed6afd0cfb2472c71c4923</id><title><![CDATA[Fonction mail() : envoyer un sujet avec des accents]]></title><updated>2008-02-08T01:21:19-08:00</updated><author><name/></author><link href="2008/02/fonction-mail-envoyer-un-sujet-avec-des-accents" rel="alternate" title="Fonction mail() : envoyer un sujet avec des accents"/><summary type="html">&lt;p&gt;Dans le cadre d'une application web, on peut être amené à envoyer des mails de notification simples et dans ce cas l'utilisation de la fonction &lt;code&gt;mail()&lt;/code&gt; de PHP peut tout à fait suffir. Mais que faire dans le cas où le sujet doit comporter des accents sachant que la fonction utilise - si je ne me trompe pas - un charset anglon-saxon par défault&lt;/p&gt;</summary><published>2008-02-08T01:21:19-08:00</published><category term="php" label="PHP"/><content type="html"><![CDATA[<p>Dans le cadre d'une application web, on peut être amené à envoyer des mails de notification simples et dans ce cas l'utilisation de la fonction <code>mail()</code> de PHP peut tout à fait suffir. Mais que faire dans le cas où le sujet doit comporter des accents sachant que la fonction utilise - si je ne me trompe pas - un charset anglon-saxon par défault.</p>

<p>En cherchant sur Internet, comme toujours, j'ai trouvé une solution simple qui m'a satisfaite, je vous la livre telle quelle :</p>

<pre>
// Message
$recipient = 'you@example.com';
$subject = '=?UTF-8?B?'.base64_encode('Sujet : éèàïî').'?=';
$sender = '&quot;=?UTF-8?B?'.base64_encode('Nom : éèàïî').'?=&quot; &lt;me@example.com&gt;';
$body = 'Corps du message avec des accents aussi : éèàïî';

// Entêtes du message
$headers = array();
$headers[] = 'From: '.$sender;
$headers[] = 'Content-Type: text/plain; charset=UTF-8; format=flowed;';
$headers[] = 'MIME-Version: 1.0';
$headers[] = 'Content-Transfer-Encoding: 8bit';
$headers = join(&quot;\n&quot;, $headers);

// Envoi du mail
mail($recipient, $subject, $body, $headers);
</pre>

<p>Ce code utilise l'UTF-8, c'est l'encodage par défaut de tout mon code en général que ca soit pour les fichiers, la base de données ou le "Content-Type" envoyé au navigateur. L'UTF-8 permet de faire des applications qui acceptent et utilisent n'importe quel caractère de n'importe quelle langue et sera en plus l'encodage par défaut pour le PHP6 à venir ce qui est une bonne chose.</p>

<p>Bien sûr, il faut mettre dans dans une fonction pour une meilleure factorisation, si je laisse ce code tel quel, c'est pour mieux en comprendre le mécanisme. Une visite de la documentation de la <a href="http://fr3.php.net/manual/fr/function.mail.php" title="PHP : mail" hreflang="fr">fonction mail()</a> et des commentaires associés apportent de meilleures solutions. On y voit par exemple l'utilisation d'un code tel que celui-ci :</p>

<pre>$subject= mb_encode_mimeheader($subject,"UTF-8", "B", "\n");</pre>

<p>Je n'ai pas poussé mes investigations plus loin à ce niveau mais la lecture de la documentation de la fonction <a href="http://php.net/manual/en/function.mb-encode-mimeheader.php" title="PHP : mb_encode_mimeheader" hreflang="fr">mb_encode_mimeheader()</a> ne pourrait être que bénéfique.</p>

<p>Bon, après si votre application doit faire beaucoup d'envoi de mail (notification mais aussi newsletter, pourquoi pas), il vaut mieux passer par une classe spécifique qui gèrera tous les aspects technique comme celui que nous venons de voir de manière transparente. Je vous conseille l'utilisation de la classe <a href="http://www.phpguru.org/static/htmlMimeMail5.html" title="HTML Mime Mail 5" hreflang="en">HTML Mime Mail</a> de <a href="http://www.phpguru.org/" title="phpguru.org - Free PHP, Javascript and C# code" hreflang="en">phpguru.org</a> mais il en existe d'autres comme <a href="http://pear.php.net/package/Mail" title="PEAR::Mail" hreflang="en">PEAR::Mail</a> ou <a href="http://phpmailer.codeworxtech.com/" title="PHP Mailer - PHP Email Class" hreflang="en">PHP Mailer</a>.</p>]]></content><slash:comments>1</slash:comments></entry><entry><id>urn:md5:0edab00917c9062b184b4d5aa643b187</id><title><![CDATA[Extraire des fichiers d'un installeur .msi]]></title><updated>2008-02-07T01:17:18-08:00</updated><author><name>David Duret</name></author><link href="2008/02/extraire-des-fichiers-d-un-installeur-msi" rel="alternate" title="Extraire des fichiers d'un installeur .msi"/><summary type="html">&lt;p&gt;J'ai eu récemment le besoin d'extraire des fichiers d'une archive .msi (Microsoft Installer) sans installer le logiciel correspondant (il ne me fallait qu'un fichier en particulier). Après avoir fait quelques recherches, voici ce qu'il en résulte.&lt;/p&gt;</summary><published>2008-02-07T01:15:37-08:00</published><category term="logiciels" label="Logiciels"/><content type="html"><![CDATA[<p>J'ai eu récemment le besoin d'extraire des fichiers d'une archive <code>.msi</code> (Microsoft Installer) sans installer le logiciel correspondant (il ne me fallait qu'un fichier en particulier). Après avoir fait quelques recherches, voici ce qu'il en résulte.</p>

<p>Je me suis tout d'abord tourné vers mon logiciel de compression <a href="http://www.7-zip.org/" title="7-zip" hreflang="en">7-zip</a> qui indique sur sa page d'accueil :</p>

<blockquote cite="http://www.7-zip.org/" title="7-zip">
    <p>Unpacking only: RAR, CAB, ISO, ARJ, LZH, CHM, <strong>MSI</strong>, WIM, Z, CPIO, RPM, DEB and NSIS</p>
</blockquote>

<p>Mais en faisant le test, j'ai eu plein de fichiers bizarres et tout en retrouvant certains fichiers connus, ils n'étaient pas nommés correctement et cette série de fichiers n'était donc pas utilisables. Peut-être ai-je fait une fausse manipulation...</p>

<p>Toujours est-il que j'ai fait une recherche sur Internet et que je suis tombé sur l'article « <a href="http://www.myitforum.com/articles/6/view.asp?id=10253" title="VBS Script To Extract A Specified MSI File To A Specified Location" hreflang="en">VBS Script To Extract A Specified MSI File To A Specified Location</a> » qui répond tout à fait à mon besoin : un script VBScript est donné qui vous demande de sélectionner le fichier <code>.msi</code>, un répertoire de destination et qui extrait tous les fichiers dans ce répertoire, on ne peut rêver mieux, j'ai enfin mon fichier !</p>

<p>En fait, en dehors du fait que le script donne une interface à l'opération, la chose la plus interessante est la ligne de commande utilisée :</p>

<pre>msiexec.exe /a &lt;fichier source&gt; /qn TargetDir=&lt;répertoire de destination&gt;</pre>

<p>Il est facile ensuite de se faire un script plus simple (en VBS, batch, PHP CLI) pour que d'un clic droit de la souris, on puisse extraire les fichiers dans un sous-répertoire nommé à partir du nom du fichier, qui se lance ? :-)</p>]]></content><slash:comments>0</slash:comments></entry></feed>
