Warning: Cannot modify header information - headers already sent by (output started at /home/guillon/guillon.dreamhosters.com/include/statistics.php:40) in /home/guillon/guillon.dreamhosters.com/feeds/journal-atom1.php on line 7
Sébastien Guillon Sébastien Guillon est un développeur web & webdesigner parisien, qui écrit aussi un Journal web qui n’intéresse que lui. 2006-10-19T23:26:23Z tag:sebastienguillon.com,2005:7 http://sebastienguillon.com/images/logo-atom.png Sébastien Guillon http://sebastienguillon.com/a-propos Copyright © 2005‑2006 Sébastien Guillon. Tous droits réservés. <xhtml:div> exemple de fil RSS iTunes corrigé </xhtml:div> tag:sebastienguillon.com,2006-10-19:/journal/2006/10/exemple-de-fil-rss-itunes-corrige 2006-10-19T23:26:23Z 2006-10-19T23:26:23Z Sébastien http://sebastienguillon.com

L’exemple de flux RSS iTunes proposé par Apple est invalide dans sa version française. Notez bien que la version originale anglaise est valide mais génère des avertissements avec le validateur de flux du W3C

La validation de flux RSS ne passionne pas les foules mais les erreurs de l’exemple français peuvent rendre le fil inexploitable par iTunes elle-même… et les débutants se cassent les dents sur cet exemple buggé.

Voici donc plus bas la version corrigée de cet exemple de flux RSS iTunes, mais tout d’abord une rapide explication des problèmes rencontrés.

  1. En premier lieu l’élément copyright contient des esperluettes (caractères réservés en XML) non transformées en entités (&amp;) et le document XML est de fait mal formé. Ce point est pourtant rappelé dans le document : « Podcasting et iTunes?: Caract?ristiques techniques » (sic). Apple a visiblement du mal avec les codages de caractères.
  2. La deuxième source d’erreurs vient des fautes de traduction : les noms de catégories ont été traduits alors qu’il s’agit de mots-clés qui seront interprêtés par l’analyseur XML.

Une fois ces erreurs corrigées, le flux est valide mais produit encore un avertissement : un élément recommandé (<itunes:explicit>) est toujours absent de l’exemple. Ajoutez-le dans l’élément channel et le flux est parfaitement valide. Pensez bien a coder le fichier en UTF-8, en conformité avec l’information de codage contenue dans la déclaration XML.

L’exemple français corrigé

<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" version="2.0">

<channel>
	<itunes:explicit>no</itunes:explicit>
	<title>Tout sur tout</title>
	<link>http://www.exemple.com/podcasts/tout/index.html</link>
	<language>fr-fr</language>
	<copyright>℗ &amp; © 2005 Jean Dupont &amp; Cie</copyright>
	<itunes:subtitle>Une émission sur tout</itunes:subtitle>
	<itunes:author>Jean Dupont</itunes:author>
	<itunes:summary>Tout sur tout est une émission sur tout. Chaque semaine, nous explorons un sujet connu et l'approfondissons autant que possible. Retrouvez notre podcast sur l'iTunes Music Store</itunes:summary>
	<description>Tout sur tout est une émission sur tout. Chaque semaine, nous explorons un sujet connu et l'approfondissons autant que possible. Recherchez notre podcast sur iTunes Store</description>
	<itunes:owner>
	<itunes:name>Jean Dupont</itunes:name>
	<itunes:email>jean.dupont@exemple.com</itunes:email>
	</itunes:owner>
	<itunes:image href="http://exemple.com/podcasts/tout/ToutSurTout.jpg" />
	<itunes:category text="Technology">
	<itunes:category text="Gadgets"/>
	</itunes:category>
	<itunes:category text="TV &amp; Film"/>

	<item>
		<title>Epicez votre vie</title>
		<itunes:author>Jean Dupont</itunes:author>
		<itunes:subtitle>Les condiments en bref</itunes:subtitle>
		<itunes:summary>Cette semaine nous parlons des salières et des poivriers et comparons leur débit, les matériaux utilisés et l'aspect général. Rejoignez-nous !</itunes:summary>
		<enclosure url="http://exemple.com/podcasts/tout/ToutsurToutEpisode3.m4a" length="8727310" type="audio/x-m4a" />
		<guid>http://exemple.com/podcasts/archive/aae20050615.m4a</guid>
		<pubDate>Wed, 15 Jun 2005 19:00:00 GMT</pubDate>
		<itunes:duration>7:04</itunes:duration>
		<itunes:keywords>sel, poivre, distributeur, attrayant</itunes:keywords>
	</item>

	<item>
		<title>Pleins feux sur les clés à douille</title>
		<itunes:author>Jeanne Dupont</itunes:author>
		<itunes:subtitle>Comparer les clés à douille en s'amusant !</itunes:subtitle>
		<itunes:summary>Cette semaine nous parlons des clés à douille utilisant le système métrique et les anciennes clés anglaises. Lesquelles sont les meilleures ? Avez-vous vraiment besoin des deux ? Toutes les réponses à vos questions sont là.</itunes:summary>
		<enclosure url="http://exemple.com/podcasts/tout/ToutSurToutEpisode2.mp3" length="5650889" type="audio/mpeg" />
		<guid>http://exemple.com/podcasts/archive/aae20050608.mp3</guid>
		<pubDate>Wed, 8 Jun 2005 19:00:00 GMT</pubDate>
		<itunes:duration>4:34</itunes:duration>
		<itunes:keywords>métrique, douille, clés, outil</itunes:keywords>
	</item>

	<item>
		<title>Gauche contre Droite</title>
		<itunes:author>Divers</itunes:author>
		<itunes:subtitle>Gauche ou Droite ? La boussole s'affole !</itunes:subtitle>
		<itunes:summary>Cette semaine nous nous intéressons aux personne de gauche vivant dans une région de droite. Ou l'inverse.</itunes:summary>
		<enclosure url="http://exemple.com/podcasts/tout/ToutSurToutEpisode1.mp3" length="4989537" type="audio/mpeg" />
		<guid>http://exemple.com/podcasts/archive/aae20050601.mp3</guid>
		<pubDate>Wed, 1 Jun 2005 19:00:00 GMT</pubDate>
		<itunes:duration>3:59</itunes:duration>
		<itunes:keywords>politique, gauche, droite, région</itunes:keywords>
	</item>
</channel>
</rss>
<xhtml:div> Logo au format SVG </xhtml:div> tag:sebastienguillon.com,2006-09-03:/journal/2006/09/logo-au-format-svg 2006-09-05T07:19:20Z 2006-09-05T07:19:20Z Sébastien http://sebastienguillon.com

SVG (Scalable Vector Graphics) est un langage de balises basé sur XML (un « dialecte » XML) permettant de créer des graphiques vectoriels.

De nombreux logiciels [1] proposent d’exporter vos créations au format SVG (Illustrator) ou même de travailler entièrement en SVG/XML (l’excellent Inkscape), mais puisque SVG est un langage de balises, un simple éditeur de texte (capable de gérer utf-8 tout de même) suffit.

Pour apprendre ce langage j’ai commencé par créer une version vectorielle de mon logo en SVG. À l’aide d’un tutorial et de la spécification SVG 1.1 du W3C je suis parvenu à ce résultat :

Mon logo au format SVG

Il y a probablement des dizaines de façons de parvenir au même rendu (et peut-être beaucoup plus facilement) mais cette version est la première qui ait vraiment fonctionné et elle reste assez simple pour une édition « manuelle ».

Vous aurez besoin d’un navigateur moderne pour afficher correctement le logo : Opera 9 et Firefox 1.5 supportent SVG nativement, Safari est en bonne voie.

Notes

  1. SVG Implementation and Resource Directory répertorie des logiciels supportant SVG [retour]
  • <xhtml:div> Agents utilisateurs et <code>Content-Type</code> </xhtml:div> tag:sebastienguillon.com,2006-04-21:/journal/2006/04/agents-utilisateurs-et-content-type 2006-04-24T04:08:05Z 2006-04-24T04:08:05Z Sébastien http://sebastienguillon.com

    Dans un récent article, Content-Type is dead, Ian Hickson fait le point sur l’en-tête HTTP Content-Type [1] et sur la façon dont il est réellement exploité (ou pas) par les agent utilisateurs [2].

    Pour ceux qui ne comprennent pas l’anglais, le constat est que Content-Type est mort ; les navigateurs ignorent dans une large mesure ce paramètre et ont tendance à recourir à des méthodes empiriques de détection en essayant d’analyser le contenu au lieu de respecter la déclaration de Content-Type.

    Ian a mis en ligne un ensemble de fichiers de test pour que chacun puisse se faire son opinion.

    Voici donc, présentés dans le tableau ci-dessous, le résultat de mes tests effectués sous Windows XP Pro SP2 français, avec la première page de test. Les résultats de tests avec d’autres navigateurs et systèmes sont les bienvenus (en particulier Safari).

    Tests du comportement de différents agents utilisateurs en fonction du paramètre HTTP Content-Type
      IE 6.0 Firefox 1.5 Opera 8.54
    Échec
    Le type MIME du fichier *, n’est pas reconnu ou pas respecté.
    Réussite
    Le navigateur reconnaît correctement le type MIME du fichier *.

    * déclaré dans l’en-tête HTTP Content-Type

    001.txt Échec Échec. Type détecté : Document texte (au lieu de application/x-hixie-test) Réussite
    002.png Échec. (affiché comme un fichier texte mais le type détecté est Image PNG) Réussite Réussite
    003.html Réussite Réussite Réussite
    004.src Réussite (Type de fichier inconnu) Échec Réussite
    005.html Réussite Réussite Réussite
    006.html Échec Réussite Réussite
    007.dmg.gz Échec Réussite Réussite
    008.html Échec Échec Échec
    008.png Échec Échec. Type détecté : « PNG file » (au lieu de application/x-hixie-test) Échec
    009 Réussite Réussite Réussite
    010.png Échec Échec. Type détecté : « PNG file » (au lieu de application/x-hixie-test) Échec
    011.bat Échec Réussite Réussite
    012.pl Réussite Réussite Réussite
    013.html Réussite Réussite Réussite
    014.html Échec Réussite Réussite
    015.png Réussite (Type de fichier inconnu) Échec. Type détecté : « Document texte » (au lieu de application/x-hixie-test) Réussite
    016.rss Échec Réussite Réussite
    017.rss Réussite (après un bref affichage du message d’échec) Réussite (après un bref affichage du message d’échec) Réussite (sans affichage du contenu HTML)
    018.rss Échec Réussite Réussite

    Réactions sur le sujet

    Notes :

    1. HTTP 1.1 – 14.17 Content-Type

      The Content-Type entity-header field indicates the media type of the entity-body sent to the recipient or, in the case of the HEAD method, the media type that would have been sent had the request been a GET.

      [retour]
    2. HTTP 1.1 – 7.2.1 Type

      Any HTTP/1.1 message containing an entity-body SHOULD include a Content-Type header field defining the media type of that body. If and only if the media type is not given by a Content-Type field, the recipient MAY attempt to guess the media type via inspection of its content and/or the name extension(s) of the URI used to identify the resource.

      [retour]
    <xhtml:div> freelance.com - il est temps de travailler autrement </xhtml:div> tag:sebastienguillon.com,2006-04-21:/journal/2006/04/freelance-com-il-est-temps-de-travailler-autrement 2006-04-22T00:11:42Z 2006-04-22T00:11:42Z Sébastien http://sebastienguillon.com

    Vu ce jour sur freelance.com :

    Le navigateur que vous utilisez n est pas compatible avec nos applications. Utilisez un des liens suivants pour télécharger un navigateur compatible : Netscape, Internet Explorer

    Ben voyons.

    La tagline de freelance.com est il est temps de travailler autrement. Vous avez une bonne chance pouvoir lire cette devise si vous avez de bons yeux et si vous utilisez un navigateur visuel, en affichant les images.

    Cette devise s’applique probablement plus aux utilisateurs du site qu’à son concepteur/responsable, qui continue à ignorer les standards du web, les bonnes pratiques, les mesures d’accessibilité, bref qui n’a probablement pas travaillé autrement depuis de nombreuses années.

    Je ne sais pas quelles applications de freelance.com sont incompatibles avec Opera (version 8.54), mais le plus intéressant est que si je choisis d’identifier Opera comme Internet Explorer, mon navigateur est soudain reconnu comme Opera, et le message est un peu plus adapté, quoique, en fait, pas du tout :

    Nos applications ne tournent pas encore sous Opera Utilisez un des liens suivants pour télécharger un navigateur compatible : Netscape Internet Explorer

    Le browser sniffing est une mauvaise pratique, il est temps (depuis très longtemps) de l’abandonner. Un des problèmes du browser sniffing est que vous devez en permanence mettre à jour votre code (JavaScript en l’occurence), sinon vous vous exposez vraiment au ridicule (vu sous Netscape 4.7) :

    Vous n utilisez pas la dernière version de Netscape 4. Pour une plus grande stabilité, utilisez la version 4.79 or 6

    Un petit tuyau de débutant en JavaScript pour le webmaster de freelance.com : il est possible d’échapper une apostrophe en JavaScript. Cependant l’idéal est toujours d’utiliser de véritables apostrophes typographiques ce qui résout instantanément le problème.

    Je n’ai rien en particulier contre freelance.com, il doit y avoir des milliers de sites professionnels aussi mal codés et qui se satisfont de n’accepter qu’une partie de leur public (marché) potentiel. Mais leur tagline ridicule m’a donné envie d’en savoir plus… ils ont donc une bonne accroche, c’est déjà ça.

    <xhtml:div> Début de la journée sans CSS </xhtml:div> tag:sebastienguillon.com,2006-04-04:/journal/2006/04/debut-de-la-journee-sans-css 2006-04-04T21:54:23Z 2006-04-04T21:54:23Z Sébastien http://sebastienguillon.com

    Après quelques réglages liés au fonctionnement de mes multiples feuilles de styles, je commence une longue journée (48 heures) sans CSS.

    Pour comprendre de quoi il retourne, lisez Déshabillez votre site pendant une journée et suivez les liens pour en savoir plus.

    Vous pouvez cependant retrouver les différentes feuilles de styles dans le menu habituel.

    Tout événement digne de ce nom (et tout particulièrement dans le domaine des standards du web) doit avoir sa polémique, lisez les réticences, un peu excessives à mon avis, de Sébastien Billard.

    La discussion se poursuit chez Monique, où elle s'ouvre par une bonne explication du sens de cette journée.

    <xhtml:div> Déshabillez votre site pendant une journée </xhtml:div> tag:sebastienguillon.com,2006-04-01:/journal/2006/04/deshabillez-votre-site-pendant-une-journee 2006-04-01T20:59:19Z 2006-04-01T20:59:19Z Sébastien http://sebastienguillon.com

    Dustin Diaz lance le premier Annual CSS Naked Day (« journée de nudité CSS »).

    Rien de véritablement érotique, mais ça peut exciter les obsédés de la sémantique, dont je suis.

    Le mot d’ordre est de libérer votre site web de son carcan de CSS et de l’exposer dans toute sa nudité sémantique, pendant toute une journée, le mercredi 5 avril 2006.

    L’objectif est de promouvoir les standards du web et la sémantique. Un site bien conçu doit en effet ne rien perdre de sa cohérence et de sa lisibilité lorsqu’il est dépouillé de sa couche de présentation : les styles CSS.

    Si vous avez bien respecté le principe de séparation entre structure et présentation ça ne devrait poser aucun problème, votre site devrait rester parfaitement utilisable. Quelques commentaires HTML autour des éléments link qui incluent les différentes feuilles de styles et le tour est joué.

    En anglais dans le texte, les quelques lignes que j’ai paraphrasées :

    This is merely to see if you’re up to the challenge to put your website on the line. […]

    The fact of the matter is, if you’re writing good solid markup to begin with, it shouldn’t be all that bad anyway. It will be a test case to see how usable your website is to others without a “design.”

    Vous sentez-vous prêts à relever le défi ? En tout cas Sébastien Guillon (.com) sera nu le mercredi 5 avril prochain.

    – Via Monique Brunel (Blog Webatou), via Rémi Prévost (Effair).

    <xhtml:div> Contre DADVSI, signez la pétition </xhtml:div> tag:sebastienguillon.com,2006-03-22:/journal/2006/03/contre-dadvsi-signez-la-petition 2006-03-22T15:03:49Z 2006-03-22T15:03:49Z Sébastien http://sebastienguillon.com

    Malgré toutes ma bonne volonté pour ne pas polluer ce journal avec de la politique hors sujet, il m’est difficile de résister quand un certain M. Glazman tend aux citoyens une perche si parfaite.

    La loi DADVSI a fini par passer mais elle ne satisfait personne à part quelques députés paresseux bien contents de passer à autre chose.

    Merci donc à Daniel Glazman d’avoir mis en place cette, nouvelle, pétition Contre DADVSI que j’ai signée et que je vous invite également à signer si vous pensez, comme moi, que la loi DADVSI est une arnaque et qu’elle porte atteinte à vos libertés.

    Intitulé de la pétition Contre DADVSI

    Je réalise des copies à usage privé de mes DVD, je craque les DRM de mes fichiers pour pouvoir les passer sur mon lecteur MP3, je télécharge depuis Internet. J’ai une copie d’un code DeCSS. J’ai un logiciel de P2P. Et je n’ai pas l’intention d’arrêter parce que rien de tout cela n’était jusqu’à présent illégal.

    La portée ambiguë de cette loi fait en effet planer des doutes quant à la parfaite légalité de ces pratiques et programmes/logiciels.

    J'utilise le client Bittorrent Azureus pour télécharger et redistribuer des logiciels (Opera, Linux Ubuntu…), je contourne les protections de certains DVD pour pouvoir les lire sur mon PC quand mon vieux lecteur de salon les refuse, etc. et je n’ai pas l’intention d’arrêter parce que rien de tout cela n’était jusqu’à présent illégal.

    <xhtml:div> Convertir MacRoman en UTF-8 </xhtml:div> tag:sebastienguillon.com,2006-03-03:/journal/2006/03/convertir-macroman-en-utf-8 2006-03-18T03:57:21Z 2006-03-18T03:57:21Z Sébastien http://sebastienguillon.com

    J’ai récemment été confronté à cette nécessité, or PHP ne gère pas MacRoman et tout le monde ne peut pas utiliser iconv (cas des hébergements mutualisés peu flexibles).

    Voici donc une fonction en PHP qui permet d’encoder du texte supposé être en MacRoman vers de l’UTF-8.

    Elle utilise la fonction PHP strtr(). J’ai fait le choix du tableau associatif pour pouvoir plus facilement détecter les bugs et contrôler individuellement les conversions. Je ne sais pas si ça irait plus vite avec deux chaînes, et je n’ai pas l’intention de tester. Mais si vous avez un avis sur la question, vous pouvez laisser un commentaire.

    MacRoman comporte quelques ligatures (Æ, æ, Œ, œ, fi et fl), la fonction permet en option de les délier. Cette option a deux niveaux pour permettre de ne délier que les ligatures purement typographiques (fi et fl)).

    Pour que cette fonction puisse être utilisée en toute sécurité dans des documents (X)HTML, les caractères interdits ou litigieux sont convertis en espaces ou supprimés (cas du logo Apple – xF0 – absent d’Unicode).

    Les points x09 (tabulation), x0A (line feed) et x0D (carriage return) sont conservés car compatibles à la fois avec Unicode et (X)HTML.

    Si j’ai le temps, je ferai une page permettant d’exploiter cette fonction avec un formulaire et éventuellement un upload de fichier.

    Un grand merci à Olivier Miakinen, pour ses conseils éclairés et sa patience.

    Ressources

    <xhtml:div> Arte vod </xhtml:div> tag:sebastienguillon.com,2006-03-03:/journal/2006/03/arte-vod 2006-03-03T16:29:28Z 2006-03-03T16:29:28Z Sébastien http://sebastienguillon.com

    Arte vod est un service d’Arte qui permet de télécharger les programmes de la chaîne en toute légalité.

    Curieux de découvrir ce service en-ligne, quelle ne fut pas ma déception de tomber sur ce message :

    arte vod : Pour profiter pleinement des fonctionnalités avancées du site vous devez utiliser Internet explorer. La compatibilité avec les navigateurs Firefox, Mozilla, Safari ainsi que la portabilité sous Mac seront mises en oeuvre dans les prochaines semaines. Merci pour votre compréhension. L’équipe www.artevod.com

    Il faut dire que la détection était drastique :

    <script language="JavaScript" type="text/javascript">
    if ( browser != "Internet Explorer" )
    {
    	window.location.replace( './pages/pageFirefox.html' );
    }
    </script>

    Était, car le code est à présent commenté et on peut donc finalement entrer sur le site avec Opera ou Firefox. Je suppose qu’il ont attendu de se faire bien engueuler par les utilisateurs de Firefox et de Mac avant de faire ce petit changement.

    Ce comportement est symptomatique d’une nouvelle formule de la guerre des navigateurs : si vous n’utilisez pas Internet Explorer, c’est donc que vous utilisez Firefox, si vous n’êtes pas sous Windows, c’est donc que vous êtes sous Mac. Les autres navigateurs ne comptent pas, les autres systèmes ne comptent pas.

    Au fait, pourquoi une telle rigueur, quelles sont ces fonctionnalités avancées qui rendaient l’utilisation d’un navigateur obsolète indispensable ? Il s’agit tout simplement des previews au format Windows Media Player, et rien d’autre. Pas très malin de refuser l’accès (et donc la vente) à une partie des utilisateurs pour une raison si futile…

    Je rappelle qu’on n’est pas sensé développer pour le web des sites et applications en fonction d’un ou deux agents utilisateurs particuliers mais qu’il s’agit de viser l’interopérabilité la plus grande grâce aux standards du web. Il ne sert à rien d’utiliser un joli DOCTYPE XHTML 1.0 Strict si c’est pour refouler la moitié (rêvons un peu) des utilisateurs à l’entrée.

    Ça va finir par rentrer un jour ?

    <xhtml:div> Ce DOCTYPE est-il valide ? </xhtml:div> tag:sebastienguillon.com,2006-02-22:/journal/2006/02/ce-doctype-est-il-valide 2006-02-22T21:38:15Z 2006-02-22T21:38:15Z Sébastien http://sebastienguillon.com

    Considérez le DOCTYPE suivant :

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

    Il présente visiblement un dilemme : l’identifiant public (FPI) fait référence au XHTML 1.1, alors que l’URL de l’identifiant SYSTEM renvoit vers la DTD du XHTML 1.0 transitional. Il ne fait évidemment pas partie des DTD recommandées par le W3C.

    Pourquoi le validateur ne voit pas cette erreur

    Le validateur du W3C ne lit pas la DTD quand il reconnaît un identifiant public (en l’occurence -//W3C//DTD XHTML 1.1//EN). Il va donc ici chercher la DTD correspondant au XHTML 1.1 et si le document est valide pour cette DTD, il sera déclaré valide, quelle que soit la DTD définie dans l’identifiant public. exemple.

    C’est un problème connu, et qui a une contrepartie: lorsque l’identifiant public n’est pas reconnu, l’identifiant système est recherché. S’il correspond à ne DTD valide, le document est validé avec celle-ci et le validateur ne vérifie pas si l’identifiant public correspond. Cette bizarrerie ne date pas d’hier, et permet toujours de faire dire au validateur à peu près ce qu’on veut (à condition ici de servir le document avec un type MIME correct).

    Réponse ?

    Il n’existe pas à ma connaissance d’outil pour valider les DOCTYPE, je ne sais même pas si l’idée à un sens, mais il est évident que déclarer un identifiant public différent de l’identifiant système est une aberration, les deux étant sensés se référer à la même DTD.