urn:sha1:28710b0366a67626b0e88cbe63a1580e4c239b5aWebnauteMes impressions sur le web, les standards et autre…2021-02-02T20:16:22+01:00Copyright (c) 2021, Aurélien Maille (Licence Attribution-NonCommercial 2.5 de Creative Commons)http://creativecommons.org/licenses/by-nc/2.5/urn:sha1:b5483b05d92551a2071c73988c05b5a3e8d96972L’UEFI et son ancêtre le BIOS2017-12-19T16:56:43+01:002017-12-19T16:56:43+01:00
<p>Un excellent article sur le fonctionnement du <abbr>BIOS</abbr> et de l’<abbr>UEFI</abbr> (en anglais) :
<a href="https://www.happyassassin.net/2014/01/25/uefi-boot-how-does-that-actually-work-then/"><q lang="en">UEFI boot: how does that actually work, then?</q></a></p>
urn:sha1:6fcd3f09c8d37a7dde60c9b3f748ca30176a828dPasser en IPv6 sur free avec Debian2014-11-08T20:38:14+01:002014-11-08T20:38:14+01:00
<p>Je suis aussi passé en IPv6 sur ma connexion personnelle. Je n’étais pas spécialement pressé, craignant un impact sur la qualité de la connexion, notamment au niveau des résolutions DNS, mais les choses se sont apparemment améliorées sur ce plan-là, grâce à un algorithme nommé <a href="http://en.wikipedia.org/wiki/Happy_Eyeballs"><q>Happy Eyeballs</q></a>.</p>
<p>Pour l’instant donc, je n’ai pas vu de quelconque dégradation de la connexion. Je vais donc détailler de manière très succinte la procédure que j’ai suivie, et qui a quand même impliqué de consulter de la documentation et des articles, pour bien comprendre où je mettais les pieds. En fait, j’ai passé la journée d’hier là-dessus (en plus du billet précédent).</p>
<p>D’abord, rendez-vous sur ce site très bien fait : <a href="http://ipv6-test.com/">ipv6-test.com</a>. En principe, vous allez obtenir une note dégueulasse si vous êtes en IPV4 (<a href="http://test-ipv6.com/">autre site</a> très bien fait et avec plus d’informations techniques).</p>
<p>Ensuite, connectez-vous à l’interface de la freebox puis allez dans <q>Paramètres de la freebox</q> - <q>mode avancé</q> - <q>Configuration ipv6</q> et cochez la case <q>Activer l’IPv6</q>. Ça, c’est pour la freebox révolution. Pour la freebox v5, je sais que la procédure est un peu différente et nécessitera un redémarrage de la box pour que le changement soit pris en compte. Voyez ce site qui montre en image la procédure sus-dite, et aussi celle pour la freebox v5 : <a href="http://aide.ma-freebox.fr/ipv6.html">aide.ma-freebox.fr/ipv6.html</a>.</p>
<p>La freebox route maintenant les paquets utilisant le protocole IPv6. Il faut s’assurer que Linux soit capable de traiter correctement ces paquets. Si comme moi, vous avez désactivé IPv6 au niveau du système, il est temps de faire l’opération inverse.</p>
<dl>
<dt>Grub</dt>
<dd>Éditez le fichier <samp>/etc/default/grub</samp> et retirez <kbd>ipv6.disable=1</kbd> de la ligne de boot dans la variable <code>GRUB_CMDLINE_LINUX</code>. Ensuite, on lance la commande <kbd>update-grub</kbd>, puis on redémarre la bête.</dd>
<dt>sysctl</dt>
<dd>Retirez la ligne <kbd>net.ipv6.conf.all.disable_ipv6 = 1</kbd> ou équivalent. Cela a pu être fait dans <samp>/etc/sysctl.conf</samp> ou dans un sous-fichier de configuration dans <samp>/etc/sysctl.d/</samp>, ou peut-être aussi dans <samp>/etc/rc.local</samp>, mais j’ai des doutes.</dd>
<dt>module ipv6 (pas sur debian ou le module ipv6 est compilé en dur dans le noyau)</dt>
<dd>Vérifiez que le chargement du module ipv6 n’est pas bloqué dans <samp>/etc/modprobe.conf</samp> ou dans la sous-configuration présente dans <samp>/etc/modprobe.d/</samp>. Cherchez les occurences de <q>net-pf-10</q> ou <q>ipv6</q></dd>
</dl>
<p>Dans le cas de sysctl, une commande <kbd>sysctl -p && service network-manager restart</kbd> devrait suffire au lieu d’un redémarrage complet.</p>
<p>Une fois que c’est fait, lancez la commande <kbd>ifconfig</kbd> pour vérifier que votre interface réseau dispose bien de ses adresses IPv6. Les lignes commençant par <samp>adr inet6:</samp> sont celles qui nous intéressent. Vous devez en avoir au moins deux, une adresse IPv6 locale dite dans le <q>scope lien-local</q> et une autre dans le <q>scope global</q>, celle qui est utilisée sur Internet.</p>
<p>Si vous n’avez toujours pas de connectivité IPv6, cela peut aussi être dù à une désactivation dans la configuration de NetworkManager donc vérifiez aussi ce point.</p>
<p>Si vous retournez sur <a href="http://ipv6-test.com/">ipv6-test.com</a>, votre note devrait avoir sensiblement augmenté. Vous êtes bien connecté en utilisant le protocole IPv6 et les résolutions DNS se font correctement. Au début, j’avais IPv4 comme choix par défaut pour le navigateur, et une erreur dans le cas de figure <q>DNS6 + IP6</q>, mais ça c’est résolu par la suite.</p>
<p>Vous aurez sans doute aussi un avertissement concernant le <q>SLAAC</q>. Le <q>SLAAC</q> est la procédure dite <q>d’auto-configuration sans état</q> permettant à une machine de s’auto-configurer au sein d’un sous-réseau ipv6, de s’attribuer elle-même une IP, bref, de se passer de serveur DHCP. C’est une des grandes améliorations de l’IPv6 par rapport à son précédesseur.</p>
<p>Le problème ici est que la machine utilise l’adresse MAC de votre interface réseau pour créer cette IP, ce qui signifie que cette IP identifie du point de vue matériel la machine à laquelle elle est liée. Cela peut poser des problèmes de confidentialité.</p>
<p>Si vous êtes sensible à cette problématique, vous pouvez activer le mécanisme consistant à générer aléatoirement la partie locale de l’adresse IP qui sera rattachée à votre interface. Pour cela, il faut activer cette fonctionnalité dans Linux, car ce n’est pas le cas par défaut.</p>
<p>Créez un fichier à l’emplacement <samp>/etc/sysctl.d/10-ipv6-privacy.conf</samp> avec le contenu suivant :</p>
<pre><samp>net.ipv6.conf.all.use_tempaddr=2
net.ipv6.conf.default.use_tempaddr=2
net.ipv6.conf.eth0.use_tempaddr=2 # adaptez le nom de l'interface si besoin</samp></pre>
<p>Éditez également la configuration de votre connexion configurée dans NetworkManager. Il faut le faire manuellement car l’interface ne nous donne pas d’accès à l’option que l’on veut mettre en place. Le fichier à éditer est <samp>/etc/NetworkManager/system-connections/Votre_connexion</samp>. Votre section <q>ipv6</q> doit comporter la ligne <samp>ip6-privacy=2</samp>, comme ceci :</p>
<pre><samp>[ipv6]
method=auto
ip6-privacy=2</samp></pre>
<p>Redémarrez la connexion réseau et retournez voir sur <a href="http://ipv6-test.com/">ipv6-test.com</a> et ça devrait être un quasi 20/20. Il n’y qu'une chose qu’on ne peut pas corriger pour l’instant, c’est le reverse DNS sur votre préfixe IPv6. Free n’offre pas encore cette possibilité, donc on ne peut pas faire de résolution inverse sur notre IPv6, là où en IPv4, on obtient de base (pour les abonnés free) un nom d’hôte tel quel <samp>a0017-1-votre_ipv4.fbx.proxad.net</samp>.</p>
<p>Pensez également à activer le pare-feu (c’est pas déjà le cas ??). Utilisez par exemple ufw (vérifiez <samp>/etc/default/ufw</samp> et IPV6=yes) et interdisez les connexions entrantes par défaut (c'est le cas dans la config par défaut il me semble), puis autorisez tel ou tel port, au cas par cas, en utilisant les règles par défaut d’ufw si elles suffisent. En ajoutant vos propres règles s’il le faut. Dans mon cas :</p>
<pre><samp>nog bobe # ufw status
Status: active
To Action From
-- ------ ----
Sopcast ALLOW Anywhere
xDeluge ALLOW Anywhere
49200 ALLOW 192.168.1.0/24
xDeluge (v6) ALLOW Anywhere (v6)
Sopcast (v6) ALLOW Anywhere (v6)
49200 ALLOW 2001:db8::/64</samp></pre>
<p>Vérifiez d’ailleurs que les services que vous activez (ssh, postfix, ...) sont bien ipv6-aware. Dans mon cas, j’avais ajouté <samp>AddressFamily inet</samp> dans la config du client ssh et <samp>inet_protocols ipv4</samp> dans celle de postfix :D</p>
<p>Bon, maintenant, si vous voulez vous attribuer une IP fixe, éditez de nouveau le fichier de configuration de votre connexion <samp>/etc/NetworkManager/system-connections/Votre_connexion</samp>. Votre section <q>ipv6</q> doit doit ressembler à ça :</p>
<pre><samp>[ipv6]
method=manual
address1=2001:db8::b0be/64
ip6-privacy=2</samp></pre>
<p>address1 doit contenir le préfixe IPv6 fourni par free suivi par les 4 blocs 16 bits composant la partie locale de votre adresse (contracté ici en <samp>::b0be</samp> :D) puis <samp>/64</samp> qui précise la longueur du préfixe (4 x 16 bits).</p>
<p>le mot de la fin : une extension firefox pour vider le cache dns du navigateur pour le site sur lequel on se trouve. Par effet de bord, cela permet de savoir si le site en question a été accédé en ipv6 ou en ipv4. <a href="https://addons.mozilla.org/fr/firefox/addon/dns-flusher/">DNS flusher</a>.</p>
urn:sha1:8352f7b25eb763ca00576480c30dc6330333281eIPV6 ready2014-11-07T23:49:28+01:002014-11-07T23:49:28+01:00
<p>Les domaines webnaute.net et phpcodeur.net sont maintenant joignables en ipv6.</p>
<p>Le serveur bénéficiant déjà d'une connectivité ipv6 (hébergement gandi), il m'a suffi d'ajouter les entrées AAAA dans les zones DNS. Une opération très simple donc. Du coup, je trouve dommage que gandi ne fasse pas mention de ce simple ajout à faire dans la page d'édition du fichier de zone. Cela accentuerait le nombre de sites proposant un accès en ipv6, ce qui ne peut être que positif pour la migration vers ce protocole.</p>
urn:sha1:a161b8131715970ab7be02b48d57aa8ce8f3f3a0Webnaute de retour2010-10-30T17:11:34+02:002010-10-30T17:11:34+02:00
<p>Après plusieurs jours d’absence, Webnaute.net est de nouveau en ligne. Le serveur sur lequel était hébergé le site, ainsi que mes dépôts SVN, n’était plus disponible pour d’obscures raisons de non-paiement de la location de l’emplacement dans le centre de données (le serveur appartient à un parent, je ne faisais qu’occuper les lieux).</p>
<p>J’avais une copie des fichiers du site, ainsi qu’un backup des dépôts svn, par contre, le trac wanewsletter ne sera pas à jour jusqu’à ce que je récupère mes données, même s’il ne manque pas grand chose. Me manque également les 2 ou 3 derniers billets publiés ici (déjà que j’en produis pas beaucoup ^^).</p>
<p>Désolé pour ceux qui souhaitaient télécharger hmupdater pour hordes, wanewsletter, ou wamailer. Désolé aussi pour les quelques utilisateurs du script twinpedia-hordes.</p>
<p>Le tout est désormais hébergé sur une part GANDI, avec l’objectif à court terme de trouver un hébergement ailleurs (14€30, c’est 14€30 de plus que ce que je payais avant vous comprenez ^^).</p>
urn:sha1:9259bc8c6a3c7598893bef079d7f9fd3cb16f4dcTrac en français2010-09-23T18:27:13+02:002010-09-23T18:27:13+02:00
<p>Vu que j’ai galéré comme un con pour passer Trac 0.12 en français et que la page <a href="http://trac.edgewall.org/wiki/TracL10N">TracL10N</a> du Wiki officiel est imbuvable, petit récapitulatif concis :</p>
<ul>
<li>Installer <strong>d’abord</strong> <a href="http://babel.edgewall.org/" hreflang="en">Babel</a>. Concrètement, cela se traduit par un <samp>easy_install Babel</samp> en ligne de commande, mais il y a d’autres méthodes d’installation.</li>
<li>Installer <strong>ensuite</strong> <a href="http://trac.edgewall.org/" hreflang="en">Trac</a> avec <samp>easy_install trac</samp> <em>ou</em> en récupérant l’archive Tarball, la détarrer dans un répertoire puis <samp>python setup.py install</samp> en se positionnant dans le répertoire trac-* nouvellement créé (Je botte en touche si vous installez Trac avec un .deb/via apt).</li>
<li><strong>Redémarrer Apache</strong>. Ce point est important. J’ai crisé pendant un quart d’heure devant mon écran à me demander pourquoi trac me servait tantôt les pages en français, tantôt en anglais ^^ — Apparemment, sur certaines instances d’Apache, le trac non localisé répondait à ma requête et sur d’autres, c’est le trac avec la localisation installée qui répondait.<br >
Cela vaut si on utilise Trac avec le mod_python ou — je suppose — avec le mod_wsgi.</li>
</ul>
urn:sha1:267426383f112cf6025fe032318a8e3286ced870Apt-Proxy et limitation d’accès2007-04-07T19:43:22+02:002007-04-07T19:46:36+02:00
<p>Je m’occupe d’une dizaine de serveurs, tous sur debian etch. J’ai décidé d’installer apt-proxy sur l’un d’eux pour rendre plus rapide les mises à jours (les serveurs sont dans la même baie). Ne serait-ce que par principe, ça m’évite également de surcharger inutilement les serveurs debian.</p>
<p>J’ai souhaité limiter l’accès au serveur proxy aux serveurs concernés, tous possédant une IP dans un sous-réseau logique. Je me suis donc tourné vers Netfilter. J’ai créé deux scripts, <em>if-pre-up.sh</em> et <em>if-post-down.sh</em>, que j’ai placés dans <samp>/etc/apt-proxy/</samp>.
Voilà d’abord le script <em>if-pre-up.sh</em> :</p>
<pre><code>#!/bin/sh -e
# Written by bobe
if [ ! "$IFACE" = "eth0" ]; then
exit 0
fi
iptables -N aptProxy
iptables -A INPUT -i eth0 -p tcp --dport 9999 -j aptProxy
iptables -A aptProxy -s xxx.xxx.xxx.xxx/28 -j ACCEPT
iptables -A aptProxy -j DROP
exit 0</code></pre>
<p>Et le script <em>if-post-down.sh</em> :</p>
<pre><code>#!/bin/sh -e
# Written by bobe
if [ ! "$IFACE" = "eth0" ]; then
exit 0
fi
iptables -D INPUT -i eth0 -p tcp --dport 9999 -j aptProxy
iptables -F aptProxy
iptables -X aptProxy
exit 0</code></pre>
<p>Il suffit ensuite de donner les droits d’exécution et de créer les liens nécessaires dans <samp>/etc/network/</samp> :</p>
<pre><samp># chmod a+x if-pre-up.sh if-post-down.sh
# ln -s /etc/apt-proxy/if-pre-up.sh /etc/network/if-pre-up.d/apt-proxy
# ln -s /etc/apt-proxy/if-post-down.sh /etc/network/if-post-down.d/apt-proxy</samp></pre>
<p>Ce billet est aussi l’occasion de ranimer un peu ce blog mourant.
Je vais essayer de m’en occuper plus souvent désormais ;-)</p>
urn:sha1:be90b358b7e9050568a73bab84c6cca50c8209a4Ibiza2006-08-29T23:23:01+02:002006-08-29T23:36:18+02:00
<p>J’ai passé les six derniers jours en Espagne. Au menu, descente en voiture (à partir de Cognac) jusqu’au sud de Valence puis prise du ferry pour Ibiza et retour à Valence dans la nuit de dimanche à lundi. Enfin, retour en voiture lundi dans la journée. Au total, pas loin de 3000 bornes sur les six jours… Crevant (et encore, je ne conduis pas).</p>
<p>On s’est pris tuile sur tuile, un truc de dingue. Je ferai un compte-rendu plus détaillé ces prochains jours (et quelques photos).</p>
urn:sha1:fb8a8cf20b6c87a6d12177bc833077c6af090efbWamailer et OpenPGP2006-08-13T17:07:28+02:002006-08-13T17:07:28+02:00
<p>J’ai terminé cette nuit l’implémentation d’OpenPGP/MIME dans Wamailer.
L’<a href="http://fr.php.net/manual/fr/ref.gnupg.php" hreflang="fr">extension gnupg</a> de
<abbr title="PHP: Hypertext Preprocessor" lang="en">PHP</abbr> étant considérée
comme expérimentale, les opérations de signature et de chiffrement sont faites en exécutant des commandes
systèmes à destination du programme GnuPG.</p>
<p>Je ne sais ce qu’il en est du support d’OpenPGP/MIME dans la plupart des clients mail, mais je suppose qu’il doit
être largement supporté, vu la relative facilité avec laquelle j’ai appréhendé le principe des clés et implémenté
OpenPGP/MIME dans Wamailer.</p>
<p>J’ai aussi mis à jour la page de garde du wiki et ajouté la page <a href="http://dev.webnaute.net/wamailer/trac/wiki/OpenPgp">OpenPgp</a>
pour fournir des explications et exemples.</p>
<ul>
<li><a href="http://dev.webnaute.net/wamailer/trac/">Zone de développement de Wamailer</a></li>
<li><a href="http://www.gnupg.org/" hreflang="en">Site officiel de GnuPG</a></li>
<li><a href="http://www.faqs.org/rfcs/rfc3156" hreflang="en">La RFC 3156 sur le format OpenPGP/MIME de sécurisation des emails</a></li>
</ul>
urn:sha1:c1f781af522e74a1804266ccf3c6900b4c94d4cbMise à jour de XHTML22006-07-27T15:04:18+02:002006-08-05T20:06:16+02:00
<p>Le <abbr title="Word Wide Web Consortium" lang="en">W3C</abbr> a publié hier une mise à jour de <a href="http://www.w3.org/TR/xhtml2/">XHTML 2.0</a>. Je mets à jour ce billet dès que j’aurai trouvé une liste des changements.</p>
<ins datetime="2006-08-05T20:06:16+02:00" title="Ajouté le samedi 5 août 2006 à 20h06"><p>Au temps pour moi, le lien vers le fichier diff était sur la page que j’ai liée.</p></ins>
<ul>
<li><a href="http://www.w3.org/TR/2006/WD-xhtml2-20060726/">XHTML 2.0 : <span lang="en">Working Draft</span> du 26 juillet 2006</a></li>
<li><a href="http://www.w3.org/TR/2006/WD-xhtml2-20060726/xhtml2-diff.html">Changements avec la version précédente</a></li>
</ul>
urn:sha1:3de70aaf602418372d2f3b7db668dfe93abf0e37Signets et mots-clés2006-07-03T03:11:42+02:002006-07-03T03:15:37+02:00
<p>Une fonctionnalité non mise en avant dans Firefox est la possibilité de définir des mots clés qui vont permettre
d’appeller une <abbr title="Uniform Resource Locator" lang="en">URL</abbr> en fonction d’un paramètre.</p>
<p>Par exemple, ouvrez le gestionnaire de signets (<q lang="en">Organize Bookmarks…</q> quoi…)
et créez un nouveau signet avec dans le champ <q lang="en">location</q>
<kbd>https://bugzilla.mozilla.org/show_bug.cgi?id=%s</kbd> et dans le champ <q lang="en">keyword</q> <kbd>mozbug</kbd>.</p>
<p>Et voilà ! Il vous suffit de taper <kbd>mozbug 15000</kbd> dans la barre d’adresse pour accéder
au bug n°15000 de Mozilla :¬)</p>
<p>Perso, je n’ai que trois signets de ce genre actuellement :</p>
<table>
<thead>
<tr>
<th>Mot-clé</th>
<th><abbr>URL</abbr></th>
</tr>
</thead>
<tbody>
<tr>
<td>mozbug</td>
<td>https://bugzilla.mozilla.org/show_bug.cgi?id=%s</td>
</tr>
<tr>
<td>rfc</td>
<td>http://www.faqs.org/rfcs/rfc%s.html</td>
</tr>
<tr>
<td>php</td>
<td>http://fr.php.net/%s</td>
</tr>
</tbody>
</table>
<p><em>Geek d’un jour, geek toujours</em> :D</p>
<p><abbr title="Post Scriptum" lang="la">P.S</abbr> : Je me demande s’il est possible de combiner plusieurs paramètres avec un mot-clé ? J’en demande peut-être beaucoup là…</p>
urn:sha1:882c14dca2dfbb299b2cfa1b3757ce63209080dcSQL et structure arborescente2006-05-23T18:22:34+02:002006-05-23T18:23:26+02:00
<p>Dans le cadre d’un projet que je développe en ce moment, j’ai besoin de stocker un arbre dans une base de
données, c’est à dire un groupe d’éléments reliés par une relation de type parent-enfant. Plusieurs solutions existent :</p>
<h3>Les listes adjacentes</h3>
<p>C’est la méthode la plus naturelle et celle à laquelle j’ai d’abord penser.
Le principe est tout simplement d’associer à chaque nœud l’identifiant du nœud parent.
On peut ensuite extraire nos données de différentes façons avec des auto-jointures
(voir le lien vers mysql en fin de billet).</p>
<p>Le problème est que cela n’est pas applicable si la profondeur de l’arbre n’est pas fixée. Il faut alors en passer
par une routine récursive (en PHP dans mon cas) pour construire l’arbre et travailler dessus.
C’est bourrin, c’est coûteux…</p>
<h3>Les ensembles imbriquées ou <q>représentation intervallaire</q></h3>
<p>Moins facile à appréhender, cette technique offre en revanche une bien plus grande facilité pour lire tout ou
partie de l’arbre. La plupart des opérations de lecture ne nécessitent qu’une requête
<abbr title="Structured Query Language" lang="en">SQL</abbr> !</p>
<p>Le principe est d’assigner à chaque élément deux bornes, les descendants de cet élément étant englobés dans
l’interval créé par ces deux bornes. Je me permets de copier ici la représentation visuelle en tranche donnée dans l’article de SQLpro, ça permet de tout de suite se faire une bonne idée du mécanisme :</p>
<img src="http://blog.webnaute.net/2006/05/23/SQL_et_structure_arborescente/images/Tree.gif" alt="Représentation sous forme de tranches englobantes du mécanisme des ensembles imbriqués">
<p>Je ne m’attarde pas sur les requêtes <abbr>SQL</abbr> à utiliser pour consulter un tel arbre, consultez
l’excellent article <a href="http://sql.developpez.com/arborescence/" hreflang="fr"><q>Gestion d'arbres par
représentation intervallaire</q></a> pour en savoir plus.</p>
<p>Ici, donc, pas besoin de récursivité, la lecture est simple et claire. Mais les choses se gâtent dès qu’on souhaite
effectuer des changements sur notre arbre. Souhaite t-on ajouter un élément dans notre arbre ?
Paf, trois requêtes ! Une pour décaler les bornes droite, une autre pour décaler les bornes gauches, et enfin, la requête pour insérer le nouvel élément. Et si plusieurs modifications peuvent potentiellement survenir quasiment
au même moment, ne pas utiliser les transactions, et donc, dans le cas de MySQL, les tables innoDB, serait plutôt hasardeux.</p>
<h3>Autres idées</h3>
<p>Comme autre technique, il y en a une qui consiste à stocker carrément le chemin canonisé d’un élément à la racine.
Pas super élégant et viable seulement pour des petits arbrisseaux ;¬)</p>
<p>J’ai vaguement pensé à stocker la structure de l’arbre sous forme <abbr title="eXtensible Markup Language" lang="en">XML</abbr>, elle-même stockée dans la base de données, mais là comme ça, sans
creuser l’idée, je me dis que les performances ne seront pas vraiment au rendez-vous.
Qu’en penses-tu toi, visiteur perdu sur mon journal ? Et si tu as d’autres idées pour gérer un arbre,
n’hésite pas ;¬)</p>
<ul>
<li><a href="http://dev.mysql.com/tech-resources/articles/hierarchical-data.html" hreflang="en" lang="en">
Managing Hierarchical Data in MySQL</a></li>
<li><a href="http://sql.developpez.com/arborescence/" hreflang="fr">Une référence : Gestion d’arbres par représentation intervallaire</a></li>
<li><a href="http://www.dbazine.com/oracle/or-articles/tropashko4" hreflang="en" lang="en">Trees in SQL: Nested Sets and Materialized Path</a></li>
<li><a href="http://pear.php.net/package/DB_NestedSet" hreflang="en"><abbr title="PHP Extension and Application Repository" lang="en">PEAR</abbr> : Paquet DB_NestedSet</a></li>
<li><a href="http://www.evolt.org/article/Four_ways_to_work_with_hierarchical_data/17/4047/index.html" hreflang="en" lang="en">Four ways to work with hierarchical data</a></li>
</ul>
urn:sha1:9ce01bcc2d174464577576f2badba2e0e5e999adKiff la force2006-05-19T19:05:36+02:002006-05-19T19:05:36+02:00
<img src="http://blog.webnaute.net/2006/05/19/Kiff_la_force/images/kiff_la_force.jpg" alt="Kiff la force">
urn:sha1:4194d149e1929b2acff4721df3c064de609eebf1Un cookie pas si récalcitrant2006-05-17T22:52:13+02:002006-05-17T22:53:32+02:00
<p>Errata concernant mon <a href="http://blog.webnaute.net/2006/05/02/Cookie_r%C3%A9calcitrant/">précédent
billet sur le sujet</a>.</p>
<p>D’abord, en envoyant un cookie avec pour domaine de validité <samp>.example.com</samp>, celui-ci sera
viable également sur <samp>example.com</samp>. L’extension <q lang="en">View Cookies</q>
de Firefox m’a induit en erreur.</p>
<p>Il semble que seuls les cookies dont le domaine de validité matche exactement le
domaine courant soient affichés par cette extension, les cookies avec un domaine de validité de type
<samp>.example.com</samp> valides sur plusieurs sous-domaines ne sont pas du tout affichés.
Un coup d’œil à liveHttpHeaders ou avec <code>print_r($_COOKIE);</code> montre qu’ils sont bien actifs.</p>
<p>Ensuite, concernant le nombre minimum de caractères point dans le domaine de validité, celui-ci doit contenir
au moins un point "embarqué" (x.y est bon, .y ou x. ne l’est pas) et la partie précédent le domaine de validité du cookie
dans le nom d’hôte courant ne doit pas contenir de point. Example : le cookie avec le domaine de validité
<samp>.foo.com</samp> sera valide sur <samp>foo.com</samp> et n’importe quel sous-domaine
<samp>*.foo.com</samp> où * est une chaîne ne contenant pas de caractère point. Donc le cookie n’est pas
valable sur <samp>*.bar.foo.com</samp>.</p>
<p>Au vu de ces règles (extraites de la RFC 2965), je ne vois plus ce qui empêche en principe d’émettre un cookie
avec un domaine de validité tel que <samp>.co.uk</samp> et qui serait valable par exemple sur
<samp>blah.co.uk</samp>. Ce billet est donc sujet à une mise à jour ultérieure, quand j’aurais éclairci ce point :¬)</p>
<ul>
<li><a href="http://www.faqs.org/rfcs/rfc2965" hreflang="en">RFC 2965 - <abbr>HTTP</abbr> State Management Mechanism</a></li>
</ul>
urn:sha1:edc60050a5607dc6eadbf5ac7f6926ca8daacb51Liens en vrac2006-05-16T00:29:14+02:002006-05-16T00:29:14+02:00
<p>Quelques liens rapides :</p>
<dl>
<dt><a href="http://blog.thinkphp.de/archives/44-More-PHP-power-on-the-command-line.html" hreflang="en"><abbr title="PHP: Hypertext Preprocessor" lang="en">PHP</abbr> en mode interactif</a></dt>
<dd>Connaissais pas… Ça a l’air interessant</dd>
<dt><a href="http://olivier.ramonat.free.fr/svn_trac_buildbot/svn_trac_buildbot_fr.html" hreflang="fr">Installation de SubVersion, Trac et BuildBot</a></dt>
<dd>Un article sur la façon d’installer et configurer ce trio de logiciel. Je ne connaissais pas la possibilité de SubVersion d’exécuter divers scripts avant ou après un commit</dd>
<dt><a href="http://jay.bertrand.free.fr/blog/index.php?/archives/27-Installer-Subversion-sous-Debian.html" hreflang="fr">Installation et configuration de SubVersion</a></dt>
<dd>Encore un article sur l’installation et la configuration de SubVersion (sur une debian) que j’avais en réserve depuis quelques temps</dd>
</dl>
urn:sha1:537f4ea0e738305889f3b972dc10a2ee0ae12ae7Un cookie récalcitrant2006-05-02T19:39:15+02:002006-05-02T19:50:09+02:00
<p>Je viens de passer une demi-heure sur un problème à la con. La réponse servira peut-être à d’autres personnes :</p>
<p>L’attribut <code>domain</code> d’un cookie ne peut cibler qu’un sous-domaine (le nom complet doit
comporter au moins deux points, par exemple <samp>www.example.com</samp>). Pour que le cookie soit
actif sur tous les sous-domaines, n’indiquez pas de sous-domaine (mais laissez le point en tête) :
<samp>.example.com</samp><br>
Problème : <samp>example.com</samp> ne fait pas partie des heureux élus.</p>
<p>Compte tenu de l’obligation d’indiquer un nom de domaine comportant au moins deux points, toute
tentative d’envoyer un cookie sur la racine d’un domaine (<samp>example.com</samp>) en précisant
le domaine dans la fonction <code>setcookie()</code> sera vouée à l’échec. La seule solution est de
ne pas préciser le domaine de validité du cookie (= cookie valable uniquement sur <samp>example.com</samp> dans notre cas).</p>
<p>D’après la spécification, cette limitation est là pour éviter des émissions de cookie dans des domaines
de validité tels que <samp>.com</samp> ou encore <samp>.co.uk</samp>.<br>
je lis d’ailleurs à l’instant que le nombre de caractères points minimum est porté à trois si l’extension du domaine
n’est pas dans la liste des extensions "spéciales" : "COM", "EDU", "NET", "ORG", "GOV", "MIL", et "INT".</p>
<ul>
<li><a href="http://wp.netscape.com/newsref/std/cookie_spec.html" hreflang="en">Persistent client state <abbr title="Hyper Text Transfer Protocol" lang="en">HTTP</abbr> cookies</a></li>
<li><a href="http://www.faqs.org/rfcs/rfc2965" hreflang="en">RFC 2965 - <abbr>HTTP</abbr> State Management Mechanism</a></li>
</ul>