<?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>2008-12-18T21:41:36+01:00</updated><link rel="self" href="http://pilgrim.maleo.net/weblog.atom"></link><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: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><entry><id>urn:md5:e8a36a81cd79a4dcdd767ca662894ad8</id><title><![CDATA[Où trouver d'anciennes versions des logiciels web ?]]></title><updated>2008-02-05T04:50:34-08:00</updated><author><name>David Duret</name></author><link href="2008/02/ou-trouver-d-anciennes-versions-des-logiciels-web" rel="alternate" title="Où trouver d'anciennes versions des logiciels web ?"/><summary type="html">&lt;p&gt;Dans le développement web, il nous arrive d'être confronté à un "vieux" serveur, un serveur sur lequelle se trouve de vieilles versions de Apache, MySQL ou PHP qui ne se comportent pas forcément comme les suivantes (je pense surtout à PHP...). Voici une série de liens qui pourra vous être utile si vous êtes confrontés à ce cas.&lt;/p&gt;</summary><published>2008-02-05T04:50:34-08:00</published><category term="developpement-web" label="Développement Web"/><category term="logiciels" label="Logiciels"/><content type="html"><![CDATA[<p>Dans le développement web, il nous arrive d'être confronté à un "vieux" serveur, un serveur sur lequelle se trouve de vieilles versions de Apache, MySQL ou PHP qui ne se comportent pas forcément comme les suivantes (je pense surtout à PHP...). Voici une série de liens qui pourra vous être utile si vous êtes confrontés à ce cas.</p>

<h3>"AMP", archives officielles</h3>

<ul>
    <li>Apache : <a href="http://archive.apache.org/dist/httpd/">http://archive.apache.org/dist/httpd/</a></li>
    <li>MySQL : <a href="http://downloads.mysql.com/archives.php">http://downloads.mysql.com/archives.php</a></li>
    <li>PHP : <a href="http://museum.php.net/">http://museum.php.net/</a></li>
</ul>

<h3>Côté client, les navigateurs</h3>

<p>Côté client, il peut être utile - très utile - de tester dans les versions antérieures des navigateurs, notament pour Internet Explorer : <a href="http://tredosoft.com/Multiple_IE">Multiple IE</a>.</p>

<p>L'utilisation de versions "portables" de certains logiciels peut aussi être d'une grande utilité (pas besoin d'installation) pour les tester, voir à ce propos le site <a href="http://portableapps.com/" hreflang="en">PortableApps.com</a> et principalement la <a href="http://portableapps.com/apps/internet/firefox_portable" title="Mozilla Firefox, Portable Edition" hreflang="en">page dédiée à Firefox</a> avec un lien vers <a href="https://sourceforge.net/project/showfiles.php?group_id=152554&package_id=168825" hreflang="en">toutes les versions portables précédentes</a>.</p>

<p>Pour information, j'avais déjà évoqué le sujet de l'environnement multiple dans les articles précédents :</p>

<ul>
    <li><a href="http://pilgrim.maleo.net/2006/11/tester-php6-facilement-avec-zazouminiwebserver">Tester PHP6 facilement avec ZazouMiniWebServer</a></li>
    <li><a href="http://pilgrim.maleo.net/2006/01/firefox-107-et-firefox-15-en-parallele">Firefox 1.0.7 et Firefox 1.5 en parallèle</a></li>
    <li><a href="http://pilgrim.maleo.net/2005/12/plusieurs-versions-de-php-sur-un-meme-serveur">Plusieurs versions de PHP sur un même serveur</a></li>
    <li><a href="http://pilgrim.maleo.net/2005/11/mysql-4-et-mysql-5-en-parallele-sous-windows">MySQL 4 et MySQL 5 en parallèle sous Windows</a></li>
    <li><a href="http://pilgrim.maleo.net/2004/06/internet-explorer-3x-4x-5x-et-6x-sur-une-meme-machine">Internet Explorer 3.x, 4.x, 5.x et 6.x sur une même machine</a></li>
</ul>

<p>N'hésitez pas à compléter cette liste avec vos propres ressources.</p>]]></content><slash:comments>2</slash:comments></entry><entry><id>urn:md5:3b5067531e8206ee15b204a44c65e2bb</id><title><![CDATA[2008, année charnière]]></title><updated>2008-01-18T03:51:52-08:00</updated><author><name>David Duret</name></author><link href="2008/01/2008-annee-charniere" rel="alternate" title="2008, année charnière"/><summary type="html">&lt;p&gt;Loin des (bonnes) résolutions que l'on formulent chaque année et que l'on fait connaître à tout va mais qui ne sont guère tenues, je vais vous parler de mes projets pour cette nouvelle année ou plutôt de &lt;strong&gt;mon&lt;/strong&gt; projet : passer du statut de salarié au statut de travailleur indépendant.&lt;/p&gt;</summary><category term="general" label="Général"/><published>2008-01-18T03:51:52-08:00</published><content type="html"><![CDATA[<p>Loin des (bonnes) résolutions que l'on formulent chaque année et que l'on fait connaître à tout va mais qui ne sont guère tenues, je vais vous parler de mes projets pour cette nouvelle année ou plutôt de <strong>mon</strong> projet : passer du statut de salarié au statut de travailleur indépendant.</p>

<p>Ca fait un moment que ça me travaille, que ça me titille mais je n'ai jamais osé prendre la décision et passer le cap. C'est chose faite maintenant, j'ai démissionné fin 2007 et j'attaque normalement au mois de février (c'est à dire très bientôt). J'officierai dans le développement de sites internet/extranet/intranet que ce soit au niveau client que serveur et voir pour faire d'autres choses à côté de ça, je n'ai pas encore d'idées précises mais ça viendra, vous serez tenu au courant :)</p>

<p>Je n'avais jamais trop creusé le domaine de la création d'entreprise malgré ce souhait récurrent et là, maintenant que je suis dedans, je me rend compte que c'est un vrai parcours du combattant ! Par quoi commencer, qui rencontrer, où se renseigner, c'est vraiement la jungle...</p>

<p>J'ai finalement commencé par faire une réunion d'information sur la création/reprise d'entreprise à la CCI (Chambre de Commerce et d'Industrie) qui donne des pistes et informations pour bien mener son projet. Je continue la semaine prochaine avec un stage de 5 jours sur la création d'entreprise, nous verrons comment choisir ses statuts juridique, fiscal, les protections sociales, etc.</p>

<p>Pour le moment, je vous souhaite à toutes et tous une <em>excellente année 2008</em>, faîtes en sorte que vos propres projets puissent se faire, qu'ils soient petits ou grands, du moment qu'ils vous apportent satisfation et bonheur !...</p>]]></content><slash:comments>2</slash:comments></entry></feed>

