<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet title="XSL formatting" type="text/xsl" href="http://www.glazman.org/weblog/dotclear/index.php?feed/rss2/xslt" ?><rss version="2.0"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xmlns:wfw="http://wellformedweb.org/CommentAPI/"
  xmlns:content="http://purl.org/rss/1.0/modules/content/"
  xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
  <title>&lt;Glazblog/&gt;</title>
  <link>http://www.glazman.org/weblog/dotclear/index.php?</link>
  <atom:link href="http://www.glazman.org/weblog/dotclear/index.php?feed/rss2" rel="self" type="application/rss+xml"/>
  <description>Un Glazman, un blog, un Glazblog</description>
  <language>en</language>
  <pubDate>Wed, 01 Sep 2010 22:16:30 +0200</pubDate>
  <copyright></copyright>
  <docs>http://blogs.law.harvard.edu/tech/rss</docs>
  <generator>Dotclear</generator>
  
    
  <item>
    <title>Wysiwyg editing is hard #2, let's apply a larger font size</title>
    <link>http://www.glazman.org/weblog/dotclear/index.php?post/2010/08/31/Wysiwyg-editing-is-hard-2-let-s-apply-a-larger-font-size</link>
    <guid isPermaLink="false">urn:md5:3900fecfe01a8b54fa59b144190d7a3e</guid>
    <pubDate>Tue, 31 Aug 2010 12:35:00 +0200</pubDate>
    <dc:creator>glazou</dc:creator>
        <category>Mozilla</category>
            
    <description>    &lt;p&gt;Let's say the user wants to use
a larger font size on the LAST paragraph in the following example:&lt;/p&gt;
&lt;pre style=&quot;max-height: none;&quot;&gt;&amp;lt;style&amp;gt;&lt;br /&gt;  #section p { font-size: larger ! important}&lt;br /&gt;  .warning   { color: red; border: thin solid red }&lt;br /&gt;&amp;lt;/style&amp;gt;&lt;br /&gt;&amp;lt;div id=&quot;section&quot;&amp;gt;&lt;br /&gt;  &amp;lt;p&amp;gt;This is NOT a warning&amp;lt;/p&amp;gt;&lt;br /&gt;  &amp;lt;p class=&quot;warning&quot;&amp;gt;This is a warning&amp;lt;/p&amp;gt;&lt;br /&gt;&amp;lt;/div&amp;gt;&lt;/pre&gt;
&lt;p&gt;We're in a &lt;strong&gt;Wysiwyg&lt;/strong&gt; environment,
the user got the document from an unkown source, places the caret in
the paragraph or selects the whole paragraph, click on some UI thingy
meaning &quot;I want a larger font&quot; and he/she expects a larger font size
for the paragraph, whatever has the editing tool to do for that... The
user has no knowledge of the underlying technology - in our case CSS -
and he/she's the perfect target for Wysiwyg editors. Let's suppose the
editing tool manipulates stylesheets and hates HTML attributes and
inline styles, and that's also our goal.&lt;/p&gt;
&lt;p&gt;First thought and first
problem, we cannot apply &lt;code&gt;font-size:
larger&lt;/code&gt; to the paragraph since
it's already applied... But, wait, how do you know it's already
applied? Just looking at the computed value of font-size, you can't
since that will reply only an absolute value like 18px! So to determine
if and how you
can tweak a given property on a given element, you first need to browse
all the CSS rules applying to your element. In Gecko, you can use the &lt;a href=&quot;http://mxr.mozilla.org/mozilla-central/source/layout/inspector/public/inIDOMUtils.idl&quot;&gt;inIDOMUtils&lt;/a&gt;
DOM Inspector interface and namely its &lt;code&gt;getCSSStyleRules()&lt;/code&gt;
method. Then for each rule applying to the element, you need to check
if the property is applied to the element through that rule and if it
is, compute the specificity of the selector and preserve the rule, the
specificity of the rule and the priority (think !important) of the
declaration in an array. When that's done for all rules, sort the array
according to the CSS Cascade rules... Yep, that's right, you read it
well, you need to recascade yourself the whole thing because the CSS
Object Model has no &lt;code&gt;getCascadedValue()&lt;/code&gt;
method for the time being. Oh and of course, nothing either to compute
the specificity of a given selector...&lt;/p&gt;
&lt;p&gt;Once you have the cascaded the
whole thing, you have the rule applying the current font-size to the
element, its specificity and the priority of the declaration. Of
course, there is a trivial case where no rule applies to the element
for that property and your final data set is empty.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Then the editing tool has no
choice, it must create a rule with a specificity greater than or equal
to the specificity of the rule we found and caring about the priority
of the declaration...&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;If the data set above is
empty or if the rule's specificity is equal to or less than the
specificity of a class selector, AND IF the user says through some UI
dialog we can safely apply the change to all &lt;code&gt;&amp;lt;p
class=&quot;warning&quot;&amp;gt;&lt;/code&gt;, then
we can create a&amp;nbsp;&lt;code&gt;.warning
{ font-size: ...px }&lt;/code&gt; or &lt;code&gt;.warning
{ font-size: ...px !important }&lt;/code&gt;
rule at the end of our stylesheet where ... is a font-size value
greater than the computed value of
font-size on the element. Hey, yeah, you have to compute that value
yourself again &lt;img src=&quot;/weblog/dotclear/themes/glazblog/smilies/sad.png&quot; alt=&quot;:-(&quot; class=&quot;smiley&quot; /&gt; We won't deal with the &lt;code&gt;p.warning&lt;/code&gt; possibility because
it's just impossible to show an average user a dialog asking for
permission to change the styles applied to all paragraph of class
warning and not other elements...&lt;/li&gt;
&lt;li&gt;Else if&amp;nbsp;the rule's
specificity is equal to or less than the specificity of an #ID
selector, we can safely insert a&amp;nbsp;&lt;code&gt;#myNewId
{ font-size: ...px }&lt;/code&gt;
&amp;nbsp;or &lt;code&gt;#myNewId {
font-size: ...px ! important }&lt;/code&gt;
at the end of our stylesheet but please note the editing tool has to
query the user for an ID or select a random - and unreadable - one by
itself. Of course, the font-size computation issue detailed just above
still applies here.&lt;/li&gt;
&lt;li&gt;Else if&amp;nbsp;the rule's
specificity is equal to or less than the specificity of an #ID selector
and a type element selector,&amp;nbsp;we can safely insert a&amp;nbsp;&lt;code&gt;p#myNewId
{ font-size: ...px }&lt;/code&gt; or &lt;code&gt;p#myNewId
{ font-size: ...px ! important }&lt;/code&gt;
at the end of our stylesheet. And the font-size computation and the ID
UI query issues still apply here.&lt;/li&gt;
&lt;li&gt;Else we have the most
complex case: we need to prompt the user for an ID or find a random one
and derive a rule from the selector of the rule we found above adding
an ID simple selector to the last chain of simple selectors in the
selector. In other terms in our case here, create &lt;code&gt;#section &lt;code&gt;p#myN&lt;/code&gt;ewId
{ font-size: larger ! important}&lt;/code&gt;
from&amp;nbsp;&lt;code&gt;#section p {
font-size: larger ! important}&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Woof. Of course, the CSS Object
Model's minimalistic interfaces don't help a lot here and the editing
tool's author will end up writing a lot of code that is already
implemented in the rendering engine, but not exposed. Welcome to my
world &lt;img src=&quot;/weblog/dotclear/themes/glazblog/smilies/smile.png&quot; alt=&quot;:-)&quot; class=&quot;smiley&quot; /&gt;&lt;/p&gt;</description>
    
    
    
          <comments>http://www.glazman.org/weblog/dotclear/index.php?post/2010/08/31/Wysiwyg-editing-is-hard-2-let-s-apply-a-larger-font-size#comment-form</comments>
      <wfw:comment>http://www.glazman.org/weblog/dotclear/index.php?post/2010/08/31/Wysiwyg-editing-is-hard-2-let-s-apply-a-larger-font-size#comment-form</wfw:comment>
      <wfw:commentRss>http://www.glazman.org/weblog/dotclear/index.php?feed/rss2/comments/5215</wfw:commentRss>
      </item>
    
  <item>
    <title>Floating panels question</title>
    <link>http://www.glazman.org/weblog/dotclear/index.php?post/2010/08/28/Floating-panels-question</link>
    <guid isPermaLink="false">urn:md5:4575d8082afac24fbc8dc3d892671109</guid>
    <pubDate>Sat, 28 Aug 2010 10:45:00 +0200</pubDate>
    <dc:creator>glazou</dc:creator>
        <category>Mozilla</category>
            
    <description>    &lt;p&gt;Now we have floating panels in Gecko, I hit a small issue : if two floating panels are visible on screen AND overlap, how do you raise the deepest in z-order??? There seems to be no method to raise a panel above the others. &lt;code&gt;focus()&lt;/code&gt; does not help, moving the panel in its parent's child list hides the panel, I found no method for that in the interfaces. The only workaround I found is to hide and show again the panel but that introduces a bad flickering. Help !&lt;/p&gt;</description>
    
    
    
          <comments>http://www.glazman.org/weblog/dotclear/index.php?post/2010/08/28/Floating-panels-question#comment-form</comments>
      <wfw:comment>http://www.glazman.org/weblog/dotclear/index.php?post/2010/08/28/Floating-panels-question#comment-form</wfw:comment>
      <wfw:commentRss>http://www.glazman.org/weblog/dotclear/index.php?feed/rss2/comments/5214</wfw:commentRss>
      </item>
    
  <item>
    <title>Firefox Panorama</title>
    <link>http://www.glazman.org/weblog/dotclear/index.php?post/2010/08/25/Firefox-Panorama</link>
    <guid isPermaLink="false">urn:md5:85e5644ac840f8c84948ccb78a0f3aeb</guid>
    <pubDate>Wed, 25 Aug 2010 11:11:00 +0200</pubDate>
    <dc:creator>glazou</dc:creator>
        <category>Mozilla</category>
            
    <description>    &lt;p&gt;I spent an hour testing the new Panorama (aka Tab Candy) in the last nightly of Firefox and I have a few thoughts to share about it:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;it's not ironed yet (no tooltips, apparently low accessibility, tabgroup close buttons sometimes unresponsive at least on my Mac and w/o :hover effect) but hey that's a beta so no worries here; I loved the fact you have &quot;magnetic lines&quot; on the panorama viewport to make sure your groups nicely align.&lt;/li&gt;
&lt;li&gt;this is not a criticism but I find pretty amazing that we're moving back to some kind of UI/UX Opera offered long ago on Windows with their MDI desktop browser. With real zoom being available in Gecko, the Panorama view could be live... I mean the current canvas screenshots could be real live zoomed-out browser and then we have almost MDI again.&lt;/li&gt;
&lt;li&gt;no journalist noticed but the Panorama view is not a XUL view. It's based on &lt;a href=&quot;http://mxr.mozilla.org/mozilla-central/source/browser/base/content/tabview/tabview.html?force=1&quot;&gt;HTML&lt;/a&gt;. It's one of the first times a major, shipped-in-the-browser and differenciating new feature of Firefox is entirely based on HTML from a UI perspective and not on XUL. This is very nice. Very nice but it has a bad side effect related to extensibility, because the current extensibility system in Mozilla (hear overlays) does not apply here. Creating then an add-on adding specific stuff to the Panorama view itself seems to be harder than expected.&lt;/li&gt;
&lt;li&gt;at first glance, having the app suddenly turning into a big grey area w/o menubar or toolbars or decorations feels really weird. I really wondered if it was a bug. The next item proposes a way to fix that issue.&lt;/li&gt;
&lt;li&gt;I think the UX could be improved in particular now we have canvas, CSS transitions and &lt;a href=&quot;http://hacks.mozilla.org/2010/08/mozelement/&quot;&gt;super powerful effects&lt;/a&gt;. The transition normalview-to-Panorama could be smoother with a better dissolution of menubar/toolbars and expansion of tabs into tab thumbnails ; probably requires a lot of work but would make the whole think better understandable, in particular the fact you see only one Tab Group at a time. Similarly, the panorama-to-normal transition is not smooth enough; that's partly because zooming from 0.1 to 1 blurs things a lot but that's also because reflows are not fluid enough and only one viewport expands and not the chrome. The selected tab could also expand while the rest of the Panorama view dissolves. Anyway, I'm just thinking out loud here but the fluidity of the whole thing can be improved and that would really help the user understand what's going on.&lt;/li&gt;
&lt;li&gt;I do like the concept a lot. I have mixed feelings about it though because after an hour using it and having six Tab Groups set up, I ended up having too many times to go back to the Panorama View w/o really needing it. The Panorama View then becomes &lt;em&gt;de facto&lt;/em&gt; a focal point of the application and I'm not sure this is desirable. This is a browser after all and Panorama is only, IMHO, a helper feature. It can sound like a minor comment but I don't think it is since Panorama drastically changes the gravity center of the whole app and this the kind of things average users are easily lost with. Here are a few ideas (again, thinking out loud here) to possibly fix that issue or at least decrease its importance (these ideas are not mutually exclusive):&lt;br /&gt;&lt;ul&gt;&lt;li&gt;add an option/UI allowing to directly cycle not only between the currently shown tabs but between tab groups (if it already exists, I did not find it, sorry)&lt;/li&gt;
&lt;li&gt;offer the choice (hear a pref) between show-only-one-tab-group-in-normal-view and show-all-tabs-anyway-in-normal-view ; with the latter, Panorama is only a supplementary enhanced tab list not interfering with a browser behaviour users have been dealing with for years.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;</description>
    
    
    
          <comments>http://www.glazman.org/weblog/dotclear/index.php?post/2010/08/25/Firefox-Panorama#comment-form</comments>
      <wfw:comment>http://www.glazman.org/weblog/dotclear/index.php?post/2010/08/25/Firefox-Panorama#comment-form</wfw:comment>
      <wfw:commentRss>http://www.glazman.org/weblog/dotclear/index.php?feed/rss2/comments/5213</wfw:commentRss>
      </item>
    
  <item>
    <title>France.fr, soyons un peu geeks...</title>
    <link>http://www.glazman.org/weblog/dotclear/index.php?post/2010/08/19/Francefr-soyons-un-peu-geeks</link>
    <guid isPermaLink="false">urn:md5:554eec8c4a13aedc064b7d92c2f81b66</guid>
    <pubDate>Thu, 19 Aug 2010 11:47:00 +0200</pubDate>
    <dc:creator>glazou</dc:creator>
        <category>Franchouillardises</category>
            
    <description>    &lt;p&gt;En bon amateur de palmipède sous toutes ses formes, gastronomiques et écrites, j'ai bien entendu pris un plaisir soutenu à la lecture du Canard Enchaîné d'hier et plus particulièrement de sa page 3 qui a sorti quelques chiffres croustillants sur le nouveau &lt;a href=&quot;http://www.france.fr&quot;&gt;www.france.fr&lt;/a&gt;. Ayant visité la chose, et passée la première émotion de voir un pop-over  ECRIT EN FLASH présentant des excuses pour le foirage majuscule du 14 juillet dernier, je me suis demandé ce que la bête avait dans le ventre. Editorialement je veux dire. Combien de contenus différents. Quelle masse d'information. Tout ça quoi...&lt;/p&gt;
&lt;p&gt;Et comme je suis un bon geek qui se respecte, j'ai passé quelques minutes à écrire les outils automatisant tout ça &lt;img src=&quot;/weblog/dotclear/themes/glazblog/smilies/smile.png&quot; alt=&quot;:-)&quot; class=&quot;smiley&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Commençons par l'aspiration du site. Evidemment un petit coup de &lt;code&gt;wget -m&lt;/code&gt; a largement suffi à obtenir une copie locale de france.fr. Pour faire bonne mesure, j'ai viré de cette copie-miroir les traductions anglaise, italienne, allemande et espagnole, et j'ai regardé uniquement les documents francophones. Oui, mais combien y en a-t-il ?&lt;/p&gt;
&lt;pre style=&quot;max-height: none;&quot;&gt;for i in `find . -type f`; do file $i; done|grep HTML |wc&lt;br /&gt;     &lt;strong&gt;404&lt;/strong&gt;    1616   32929&lt;/pre&gt;
&lt;p&gt;Je n'y crois pas &lt;img src=&quot;/weblog/dotclear/themes/glazblog/smilies/smile.png&quot; alt=&quot;:-)&quot; class=&quot;smiley&quot; /&gt; Il y a 404 documents HTML &lt;img src=&quot;/weblog/dotclear/themes/glazblog/smilies/smile.png&quot; alt=&quot;:-)&quot; class=&quot;smiley&quot; /&gt; &lt;a href=&quot;http://fr.wikipedia.org/wiki/Erreur_HTTP_404&quot;&gt;J'en ai explosé de rire&lt;/a&gt;, dites donc...&lt;/p&gt;
&lt;p&gt;Pour déterminer, même approximativement, la taille du contenu utile de ces documents, j'en ai regardé quelques-uns pour trouver les éléments &quot;maîtres&quot;, c'est-à-dire ceux contenant la partie réellement utile à l'usager sans tenir compte de la navigation et tout ça. J'ai donc écrit le bout de code suivant, que je fournis ici uniquement pour démontrer la méthodologie utilisée. Le tout est encapsulé dans une extension à Firefox écrite en 2 minutes pour la circonstance (je tiens le XPI à disposition de qui le souhaiterait).&lt;/p&gt;
&lt;pre&gt;var gUI = {};&lt;br /&gt;&lt;br /&gt;// juste un utilitaire&lt;br /&gt;function GetUIElements()&lt;br /&gt;{&lt;br /&gt;  var elts = document.querySelectorAll(&quot;*[id]&quot;);&lt;br /&gt;  for (var i = 0; i &amp;lt; elts.length; i++)&lt;br /&gt;  {&lt;br /&gt;    var elt = elts.item(i);&lt;br /&gt;    gUI[ elt.getAttribute(&quot;id&quot;) ] = elt;&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;// le startup commence ici&lt;br /&gt;function Startup()&lt;br /&gt;{&lt;br /&gt;  GetUIElements();&lt;br /&gt;&lt;br /&gt;  // détecter la fin de chargement de chaque document&lt;br /&gt;  gUI.iframe.addEventListener(&quot;pageshow&quot;, onIframeLoaded, false);&lt;br /&gt;  // démarrer le chargement avec le premier document du tableau&lt;br /&gt;  LoadFranceFr();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;var gIndex = 1;&lt;br /&gt;var gLength = 0;&lt;br /&gt;&lt;br /&gt;function LoadFranceFr()&lt;br /&gt;{&lt;br /&gt;  gUI.iframe.setAttribute(&quot;src&quot;, &quot;file:///Users/glazou/france.fr/www.france.fr/&quot; + kDOCUMENTS[gIndex-1]);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;function onIframeLoaded(aEvent)&lt;br /&gt;{&lt;br /&gt;  var src = gUI.iframe.getAttribute(&quot;src&quot;);&lt;br /&gt;  var doc = gUI.iframe.contentDocument;&lt;br /&gt;&lt;br /&gt;  var articles_list = doc.getElementById(&quot;articles_list&quot;);&lt;br /&gt;  var article_wrapper = doc.querySelector(&quot;.article_wrapper&quot;);&lt;br /&gt;  var maincontent = doc.getElementById(&quot;main-content&quot;);&lt;br /&gt;&lt;br /&gt;  var contentElt = articles_list || article_wrapper || maincontent;&lt;br /&gt;  if (contentElt) {&lt;br /&gt;    var row = document.createElement(&quot;row&quot;);&lt;br /&gt;    row.setAttribute(&quot;align&quot;, &quot;center&quot;);&lt;br /&gt;    var label0 = document.createElement(&quot;label&quot;);&lt;br /&gt;    label0.setAttribute(&quot;value&quot;, gIndex);&lt;br /&gt;    var label1 = document.createElement(&quot;label&quot;);&lt;br /&gt;    label1.setAttribute(&quot;value&quot;, src.substr(src.lastIndexOf(&quot;/&quot;) +1));&lt;br /&gt;    var label2 = document.createElement(&quot;label&quot;);&lt;br /&gt;    var length = contentElt.textContent.length;&lt;br /&gt;    label2.setAttribute(&quot;value&quot;, length);&lt;br /&gt;    row.appendChild(label0);&lt;br /&gt;    row.appendChild(label1);&lt;br /&gt;    row.appendChild(label2);&lt;br /&gt;    gUI.summaryRows.insertBefore(row, gUI.summaryRows.firstChild);&lt;br /&gt;&lt;br /&gt;    gLength += length;&lt;br /&gt;    gUI.totalLabel.setAttribute(&quot;value&quot;, gLength);&lt;br /&gt;  }&lt;br /&gt;  else {&lt;br /&gt;    var row = document.createElement(&quot;row&quot;);&lt;br /&gt;    row.setAttribute(&quot;align&quot;, &quot;center&quot;);&lt;br /&gt;    row.className = &quot;wrong&quot;;&lt;br /&gt;    var label0 = document.createElement(&quot;label&quot;);&lt;br /&gt;    label0.setAttribute(&quot;value&quot;, gIndex);&lt;br /&gt;    var label1 = document.createElement(&quot;label&quot;);&lt;br /&gt;    label1.setAttribute(&quot;value&quot;, src.substr(src.lastIndexOf(&quot;/&quot;) +1));&lt;br /&gt;    var label2 = document.createElement(&quot;label&quot;);&lt;br /&gt;    label2.setAttribute(&quot;value&quot;, &quot;&quot;);&lt;br /&gt;    row.appendChild(label0);&lt;br /&gt;    row.appendChild(label1);&lt;br /&gt;    row.appendChild(label2);&lt;br /&gt;    gUI.summaryRows.insertBefore(row, gUI.summaryRows.firstChild);&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  gIndex++;&lt;br /&gt;  if (gIndex &amp;lt; kDOCUMENTS.length)&lt;br /&gt;    LoadFranceFr();&lt;br /&gt;}&lt;/pre&gt;
&lt;p&gt;Dans ce code, &lt;code&gt;kDOCUMENTS&lt;/code&gt; est un tableau dont les éléments sont les URLs locaux des 404 documents pré-cités. Le code ci-dessus va charger chaque document dans un iframe XUL, attendre patiemment que ce chargement soit effectué, trouver le contenu utile, déterminer sa taille par un &lt;code&gt;elt.textContent.length&lt;/code&gt; (oui je sais c'est très généreux, ça compte des flopées d'espaces), agréger les résultats et passer au document suivant tant qu'il y en a. Et voila le résultat :&lt;/p&gt;
&lt;p class=&quot;imgContainer&quot;&gt;&lt;a href=&quot;http://www.glazman.org/weblog/dotclear/public/TC/francefrSink.png&quot;&gt;&lt;img alt=&quot;France.fr sink&quot; src=&quot;http://www.glazman.org/weblog/dotclear/public/TC/francefrSink-s.png&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Bien entendu, mes chiffres sont des approximations, un ordre de magnitude. On pourra toujours arguer du fait qu'il y a un peu de contenu dans les barres de navigation ou a contrario qu'il y a des listes de liens redondantes avec la navigation dans le contenu utile. Quoiqu'il en soit, www.france.fr c'est donc en gros 400 documents totalisant environ 520 000 caractères.&lt;/p&gt;
&lt;p&gt;Si les chiffres du Canard Enchaîné sont exacts - et je ne doute pas qu'ils le soient - www.france.fr est donc pour 4 000 000€ un des sites les plus chers de France depuis la création du Web. Chaque document unique du site aura &lt;em&gt;in fine&lt;/em&gt; coûté 10 000€ (hors traductions) ! Chaque caractère utile du site aura lui coûté presque 7,70€ (hors traductions également). (&lt;em&gt;Nota bene: tout cela est sous réserve du bon fonctionnement de mon aspiration du site ; si les chiffres réels peuvent être un peu différents, l'ordre de magnitude lui ne saurait énormément varier&lt;/em&gt;)&lt;/p&gt;
&lt;p&gt;Encore bravo au SIG, Service d'Information du Gouvernement, et son patron Thierry Saussez. Mes plus chaleureuses et sincères félicitations aux prestataires qui sont intervenus pour eux. C'est du Grand Art, des deux côtés.&lt;/p&gt;</description>
    
    
    
          <comments>http://www.glazman.org/weblog/dotclear/index.php?post/2010/08/19/Francefr-soyons-un-peu-geeks#comment-form</comments>
      <wfw:comment>http://www.glazman.org/weblog/dotclear/index.php?post/2010/08/19/Francefr-soyons-un-peu-geeks#comment-form</wfw:comment>
      <wfw:commentRss>http://www.glazman.org/weblog/dotclear/index.php?feed/rss2/comments/5212</wfw:commentRss>
      </item>
    
  <item>
    <title>Fifteen</title>
    <link>http://www.glazman.org/weblog/dotclear/index.php?post/2010/08/16/Fifteen</link>
    <guid isPermaLink="false">urn:md5:344e82c4a7cfb4ed30e19f2b7c02b1d1</guid>
    <pubDate>Mon, 16 Aug 2010 11:21:00 +0200</pubDate>
    <dc:creator>glazou</dc:creator>
        <category>Microsoftisms</category>
            
    <description>    &lt;p&gt;Today, Microsoft Internet Explorer is precisely 15 years old. Wooooohooo !!!!&lt;/p&gt;</description>
    
    
    
      </item>
    
  <item>
    <title>He's really Woerth it...</title>
    <link>http://www.glazman.org/weblog/dotclear/index.php?post/2010/08/16/He-s-really-Woerth-it</link>
    <guid isPermaLink="false">urn:md5:05f931d3f126ae8b2aa34a4e96be6c99</guid>
    <pubDate>Mon, 16 Aug 2010 10:03:00 +0200</pubDate>
    <dc:creator>glazou</dc:creator>
        <category>Franchouillardises</category>
            
    <description>    &lt;p&gt;&lt;a href=&quot;http://www.20minutes.fr/article/588365/politique-eric-woerth-affirmait-a-sa-banque-ne-vivre-qu-avec-112-euros-par-mois&quot;&gt;Nom de Zeus&lt;/a&gt;... Ce ne sont plus des casseroles, c'est la batterie de cuisine au grand complet !&lt;/p&gt;</description>
    
    
    
      </item>
    
  <item>
    <title>Le grand foutoir du site de la Présidence tournante de l'Union Européenne...</title>
    <link>http://www.glazman.org/weblog/dotclear/index.php?post/2010/08/12/Le-grand-foutoir-du-site-de-la-Presidence-tournante-de-l-Union-Europeenne</link>
    <guid isPermaLink="false">urn:md5:a835116a90cbb2c463eea5d0b3e024c2</guid>
    <pubDate>Thu, 12 Aug 2010 17:57:00 +0200</pubDate>
    <dc:creator>glazou</dc:creator>
        <category>General</category>
            
    <description>    &lt;table style=&quot;font-size: smaller; text-align: left; border-collapse: collapse;&quot; border=&quot;1&quot; cellpadding=&quot;2&quot; cellspacing=&quot;2&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;année&lt;br /&gt;
&lt;/th&gt;
&lt;th&gt;URL&lt;br /&gt;
&lt;/th&gt;
&lt;th&gt;Langues&lt;br /&gt;
&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2005&lt;/td&gt;
&lt;td&gt;www.eu2005.lu&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2006&lt;/td&gt;
&lt;td&gt;www.eu2005.at&lt;br /&gt;
www.eu2006.fi&lt;/td&gt;
&lt;td&gt;3&lt;br /&gt;
2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2007&lt;/td&gt;
&lt;td&gt;www.eu2007.de&lt;br /&gt;
www.eu2007.pt (serveur en rade)&lt;/td&gt;
&lt;td&gt;3&lt;br /&gt;
-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2008&lt;/td&gt;
&lt;td&gt;www.eu2008.si&lt;br /&gt;
www.eu2008.fr&lt;/td&gt;
&lt;td&gt;3&lt;br /&gt;
6&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2009&lt;/td&gt;
&lt;td&gt;www.eu2009.cz&lt;br /&gt;
&lt;strong&gt;www.se2009.eu&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;3&lt;br /&gt;
3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2010&lt;/td&gt;
&lt;td&gt;www.eu2010.es&lt;br /&gt;
&lt;strong&gt;www.eutrio.be&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;6 (dont catalan, basque et
gallego...)&lt;br /&gt;
4&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Sans commentaire...&lt;/p&gt;</description>
    
    
    
      </item>
    
  <item>
    <title>developer.mozilla.org</title>
    <link>http://www.glazman.org/weblog/dotclear/index.php?post/2010/08/09/developermozillaorg</link>
    <guid isPermaLink="false">urn:md5:dbfd7f519d8250605f6c5848288580f9</guid>
    <pubDate>Mon, 09 Aug 2010 10:10:00 +0200</pubDate>
    <dc:creator>glazou</dc:creator>
        <category>Mozilla</category>
            
    <description>    &lt;p&gt;It's now the seventh day in a row that Search on &lt;a href=&quot;https://developer.mozilla.org&quot;&gt;developer.mozilla.org&lt;/a&gt; is horked. And since I came back seven days ago from my summer vacation, it could be even older than that... So to search on devmo, I now have to ask Google for &quot;MDC %s&quot; where %s is my query and the results are not always optimal &lt;img src=&quot;/weblog/dotclear/themes/glazblog/smilies/sad.png&quot; alt=&quot;:-(&quot; class=&quot;smiley&quot; /&gt; Urgh.&lt;/p&gt;</description>
    
    
    
      </item>
    
  <item>
    <title>Wysiwyg editing is hard #1</title>
    <link>http://www.glazman.org/weblog/dotclear/index.php?post/2010/08/06/Wysiwyg-editing-is-hard-1</link>
    <guid isPermaLink="false">urn:md5:7dc1b1be2419f0fdd7b1cf332e3fa4d0</guid>
    <pubDate>Fri, 06 Aug 2010 12:30:00 +0200</pubDate>
    <dc:creator>glazou</dc:creator>
        <category>Nvu</category>
            
    <description>    &lt;p&gt;You probably never asked yourself about it, but how complicated is
the deletion of the selection in a markup-based Wysiwyg editor? In one
single word: complicated.... I will try below to make you understand
what a Wysiwyg markup-based editor does when you hit the delete key.&lt;/p&gt;
&lt;p&gt;Let's take a simple example :&lt;/p&gt;
&lt;pre style=&quot;max-height: none;&quot;&gt;&amp;lt;h1&amp;gt;aa[aa&amp;lt;/h1&amp;gt;&lt;br /&gt;&amp;lt;ul&amp;gt;&lt;br /&gt; &amp;lt;li&amp;gt;bbbb&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;ul&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;li&amp;gt;cc]cc&amp;lt;/li&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;li&amp;gt;dddd&amp;lt;/li&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;/ul&amp;gt;&lt;br /&gt; &amp;lt;/li&amp;gt;&lt;br /&gt; &amp;lt;li&amp;gt;eeee&amp;lt;/li&amp;gt;&lt;br /&gt;&amp;lt;/ul&amp;gt;&lt;/pre&gt;
&lt;p&gt;The selection is everything between the square brackets (included).
Now the user hits the delete key. The natural algo for that is the
following one (I'm not saying it's the only one; see
DOMRange.extractContents to see another one):&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;find all the &quot;visible&quot; nodes in the various ranges (here we have
only one range) of the selection. A &quot;visible&quot; node is a text node or an
empty element.&lt;/li&gt;
&lt;li&gt;split the start and end nodes of each range of the selection if
necessary, for instance if these nodes are text nodes and the selection
splits the nodes in two nodes of non-zero length.&lt;/li&gt;
&lt;li&gt;for each visible node in each range of the selection, remove the
node and remove recursively all the parents if they are &quot;removable&quot;. A
&quot;removable&quot; parent is an empty element or, depending on its tag name,
an element containing only text nodes made of whitespaces (/s in
regexps); some elements are explicitely not &quot;removable&quot;, body for
instance.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;This method is enough for the test case above and here's the
expected result:&lt;/p&gt;
&lt;pre style=&quot;max-height: none;&quot;&gt;&amp;lt;h1&amp;gt;aa&amp;lt;/h1&amp;gt;&lt;br /&gt;&amp;lt;ul&amp;gt;&lt;br /&gt; &amp;lt;li&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;ul&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;li&amp;gt;cc&amp;lt;/li&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;li&amp;gt;dddd&amp;lt;/li&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;/ul&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;lt;/li&amp;gt;&lt;br /&gt; &amp;lt;li&amp;gt;eeee&amp;lt;/li&amp;gt;&lt;br /&gt;&amp;lt;/ul&amp;gt;&lt;/pre&gt;
&lt;p&gt;But now imagine we have some markup that requires merging after the
deletion of the selection. Here's one:&lt;/p&gt;
&lt;pre style=&quot;max-height: none;&quot;&gt;&amp;lt;ul&amp;gt;&lt;br /&gt; &amp;lt;li&amp;gt;aaaa&amp;lt;/li&amp;gt;&lt;br /&gt; &amp;lt;li&amp;gt;bb[bb&amp;lt;/li&amp;gt;&lt;br /&gt;&amp;lt;/ul&amp;gt;&lt;br /&gt;&amp;lt;ul&amp;gt;&lt;br /&gt; &amp;lt;li&amp;gt;cc]cc&amp;lt;/li&amp;gt;&lt;br /&gt; &amp;lt;li&amp;gt;dddd&amp;lt;/li&amp;gt;&lt;br /&gt;&amp;lt;/ul&amp;gt;&lt;/pre&gt;
&lt;p&gt;What the user really expects here when the selection is deleted is
the merging of the two ULs into one single list. We need then to
improve a bit our algo above...&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;find all the &quot;visible&quot; nodes in the various ranges (here we have
only one range) of the selection. A &quot;visible&quot; node is a text node or an
empty element.&lt;/li&gt;
&lt;li&gt;split the start and end nodes of each range of the selection if
necessary, for instance if these nodes are text nodes and the selection
splits the nodes in two nodes of non-zero length.&lt;/li&gt;
&lt;li&gt;traverse all ranges in our selection and preserve a list of all
nodes traversed with the traversal direction (start, up, down, next)&lt;/li&gt;
&lt;/ol&gt;
Let's have an example here, and let's reuse the first example at the
top of this article wih a h1 followed by a ul. The list of traversed
nodes is then:&lt;br /&gt;
&lt;table style=&quot;text-align: left; width: 250px; margin-right: auto; margin-left: auto;&quot; border=&quot;1&quot; cellpadding=&quot;2&quot; cellspacing=&quot;2&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th style=&quot;vertical-align: top;&quot;&gt;node&lt;br /&gt;
&lt;/th&gt;
&lt;th style=&quot;vertical-align: top;&quot;&gt;direction&lt;br /&gt;
&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;vertical-align: top;&quot;&gt;&quot;aa&quot;&lt;br /&gt;
&lt;/td&gt;
&lt;td style=&quot;vertical-align: top;&quot;&gt;start&lt;br /&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;vertical-align: top;&quot;&gt;h1&lt;br /&gt;
&lt;/td&gt;
&lt;td style=&quot;vertical-align: top;&quot;&gt;up&lt;br /&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;vertical-align: top;&quot;&gt;ul&lt;br /&gt;
&lt;/td&gt;
&lt;td style=&quot;vertical-align: top;&quot;&gt;next&lt;br /&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;vertical-align: top;&quot;&gt;li&lt;br /&gt;
&lt;/td&gt;
&lt;td style=&quot;vertical-align: top;&quot;&gt;down&lt;br /&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;vertical-align: top;&quot;&gt;&quot;bbbb&quot;&lt;br /&gt;
&lt;/td&gt;
&lt;td style=&quot;vertical-align: top;&quot;&gt;down&lt;br /&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;vertical-align: top;&quot;&gt;ul&lt;br /&gt;
&lt;/td&gt;
&lt;td style=&quot;vertical-align: top;&quot;&gt;next&lt;br /&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;vertical-align: top;&quot;&gt;li&lt;br /&gt;
&lt;/td&gt;
&lt;td style=&quot;vertical-align: top;&quot;&gt;down&lt;br /&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;vertical-align: top;&quot;&gt;&quot;cc&quot;&lt;br /&gt;
&lt;/td&gt;
&lt;td style=&quot;vertical-align: top;&quot;&gt;down&lt;br /&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;For our examples of two adjacent lists, the list of traversed nodes
is:&lt;/p&gt;
&lt;table style=&quot;text-align: left; width: 250px; margin-right: auto; margin-left: auto;&quot; border=&quot;1&quot; cellpadding=&quot;2&quot; cellspacing=&quot;2&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th style=&quot;vertical-align: top;&quot;&gt;node&lt;br /&gt;
&lt;/th&gt;
&lt;th style=&quot;vertical-align: top;&quot;&gt;direction&lt;br /&gt;
&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;vertical-align: top;&quot;&gt;&quot;bb&quot;&lt;br /&gt;
&lt;/td&gt;
&lt;td style=&quot;vertical-align: top;&quot;&gt;start&lt;br /&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;vertical-align: top;&quot;&gt;li&lt;br /&gt;
&lt;/td&gt;
&lt;td style=&quot;vertical-align: top;&quot;&gt;up&lt;br /&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;vertical-align: top;&quot;&gt;ul&lt;br /&gt;
&lt;/td&gt;
&lt;td style=&quot;vertical-align: top;&quot;&gt;up&lt;br /&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;vertical-align: top;&quot;&gt;ul&lt;br /&gt;
&lt;/td&gt;
&lt;td style=&quot;vertical-align: top;&quot;&gt;next&lt;br /&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;vertical-align: top;&quot;&gt;li&lt;br /&gt;
&lt;/td&gt;
&lt;td style=&quot;vertical-align: top;&quot;&gt;down&lt;br /&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;vertical-align: top;&quot;&gt;&quot;cc&quot;&lt;br /&gt;
&lt;/td&gt;
&lt;td style=&quot;vertical-align: top;&quot;&gt;down&lt;br /&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;But that's not all... There can be non-significant text nodes in the
DOM between elements, like a carriage return between the two ULs. So to
make sure we correctly merge during our deletion, the third step of our
algo should be this one:&lt;/p&gt;
&lt;ol start=&quot;4&quot;&gt;
&lt;li&gt;for each node being an element and having a direction &quot;next&quot; in
the list of traversed nodes above, find the previous &quot;visible&quot; sibling,
discarding text nodes containing only white spaces if the element is a
block. If the previous visible sibling is also an element and of same
type than the reference node, and if these elements are &quot;mergeable&quot;,
then append all the children of the reference node to the previous
visible node's children and delete the reference node. Two &quot;mergeable&quot;
elements are for instance two paragraphs, or two h1 elements, or two dl
elements; two inline text elements like span or strong are also
mergable if&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The rest of the algo is similar to what we did for the h1/ul example
above:&lt;/p&gt;
&lt;ol start=&quot;5&quot;&gt;
&lt;li&gt;for each visible node in each range of the selection, remove the
node and remove recursively all the parents if they are &quot;removable&quot;. A
&quot;removable&quot;
parent is an empty element or, depending on its tag name, an element
containing only text nodes made of whitespaces (/s in regexps); some
elements are explicitelynot &quot;removable&quot;, body for instance. &lt;/li&gt;
&lt;/ol&gt;
And then result is:&lt;br /&gt;
&lt;pre style=&quot;max-height: none;&quot;&gt;&amp;lt;ul&amp;gt;&lt;br /&gt; &amp;lt;li&amp;gt;aaaa&amp;lt;/li&amp;gt;&lt;br /&gt; &amp;lt;li&amp;gt;bb&amp;lt;/li&amp;gt;&lt;br /&gt; &amp;lt;li&amp;gt;cc&amp;lt;/li&amp;gt;&lt;br /&gt; &amp;lt;li&amp;gt;dddd&amp;lt;/li&amp;gt;&lt;br /&gt;&amp;lt;/ul&amp;gt;&lt;/pre&gt;&lt;p&gt;Next time, we'll dive into some high-level functions like indentations or list creation.&lt;/p&gt;</description>
    
    
    
      </item>
    
  <item>
    <title>Idée de caricature</title>
    <link>http://www.glazman.org/weblog/dotclear/index.php?post/2010/08/05/Idee-de-caricature</link>
    <guid isPermaLink="false">urn:md5:a9facc1ed7237aeb6378c8377907f92a</guid>
    <pubDate>Thu, 05 Aug 2010 13:50:00 +0200</pubDate>
    <dc:creator>glazou</dc:creator>
        <category>Franchouillardises</category>
            
    <description>    &lt;p&gt;Sarkozy, Hortefeux et Lefebvre discutent. Sarkozy dit &quot;Le Conseil Constitutionnel va censurer car tous les français sont égaux&quot;, Hortefeux surenchérit &quot;Encore un coup de Chirac...&quot; pendant que Lefebvre a un geste à la Eureka! et dit &quot;il faut donc restreindre la déchéance aux non-français !&quot;.&lt;/p&gt;</description>
    
    
    
      </item>
    
  <item>
    <title>Scanner de négatifs Silvercrest</title>
    <link>http://www.glazman.org/weblog/dotclear/index.php?post/2010/07/31/Scanner-de-negatifs-Silvercrest</link>
    <guid isPermaLink="false">urn:md5:2aeda00975831beb1fc80623bd61020c</guid>
    <pubDate>Sat, 31 Jul 2010 11:27:00 +0200</pubDate>
    <dc:creator>glazou</dc:creator>
        <category>General</category>
            
    <description>    &lt;p&gt;De passage dans le LIDL à côté de chez moi, je suis tombé sur un scanner de négatifs de la marque SilverCrest (une LIDLerie) à 39.99€. Comme LIDL ne fait aucune difficulté pour rembourser sous une semaine si on n'est pas content d'un produit et et comme j'ai des milliers de négatifs en souffrance, je me suis laissé tenter.&lt;/p&gt;
&lt;p&gt;Installation très simple, logiciel plutôt simple à utiliser même s'il n'est pas beau. Ne marche que sous Windaube et pas Mac OS X mais bon, à ce prix-là... Tout ce qu'il faut pour les néga et les diapos. Mais malgré toutes mes tentatives de réglages, le scan génère des lignes sombres horizontales franchement pénibles et rendant le scanner peu utilisable. J'ai donc demandé le remboursement du produit, que je ne recommande à personne malgré son prix fort attractif. Voila.&lt;/p&gt;</description>
    
    
    
      </item>
    
  <item>
    <title>Halte au politiquement correct de la Sarkozie</title>
    <link>http://www.glazman.org/weblog/dotclear/index.php?post/2010/07/27/Halte-au-politiquement-correct-de-la-Sarkozie</link>
    <guid isPermaLink="false">urn:md5:aa8510306e069ba2ca5e569baf5e8d52</guid>
    <pubDate>Tue, 27 Jul 2010 09:50:00 +0200</pubDate>
    <dc:creator>glazou</dc:creator>
        <category>Franchouillardises</category>
            
    <description>    &lt;p&gt;Je suis rentré en région parisienne depuis 48h que j'en ai déjà marre de Sarko et ses sbires et surtout de leur impact sur notre vie quotidienne... Résumons un peu :&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;un braqueur sur-armé et portant gilet pare-balles prend les poulets pour cible avec du gros calibre&lt;/li&gt;
&lt;li&gt;ceux-ci, ne goutant que fort peu la cuisine au plomb, répliquent&lt;/li&gt;
&lt;li&gt;le braqueur prend un bastos dans une des rares zones non protégées de son corps, la tête, et ça lui est un peu fatal...&lt;/li&gt;
&lt;li&gt;le quartier d'origine du braqueur s'enflamme, on tire à de multiples reprises sur les poulets, on met même &lt;a href=&quot;http://www.liberation.fr/societe/0101649068-grenoble-des-mesures-pour-proteger-les-policiers-menaces-apres-la-fusillade&quot;&gt;un contrat sur eux&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;On croit rêver tout de même... Un braqueur chevronné se fait buter en pleine action violente et son quartier se rebelle ? Là, Hortefeux et Sarko sont bien gentils, peut-être trop gentils, parce que j'ai la très nette impression que le sentiment général de la population est plutôt &quot;faites encercler le quartier par les FuMaCo, les dragons parachutistes et le GIGN et videz-le à coups de trique&quot;. Que l'approbation serait générale si une opération de très grosse envergure visait ce quartier. Comment donc la République a-t-elle pu en arriver là, laisser de telles zones de non-droit total se développer ?&lt;/p&gt;
&lt;p&gt;Mais dans le même temps, Hortefeux et Sarkozy continuent à se prendre les pieds dans le plat en se mêlant de choses qu'ils feraient bien de laisser passer, pour ne pas dire laisser pisser :&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;une des pubs actuelles pour les volailles de Loué montre un flic seul et souriant, en tenue ancienne à képi, avec la mention &quot;Poulet de Loué élevé en liberté&quot; et un tas d'autres flics plutôt stressés sortant de l'arrière d'un véhicule type panier-à-salade avec la mention &quot;d'autres poulets&quot;. La légende générale est 'Un bon poulet est un poulet libre&quot;. L'image est plutôt marrante, pas vulgaire, pas dénigrante. On sourit, mais on ne se moque pas. Rien à dire.&lt;/li&gt;
&lt;li&gt;cela fait DES SIECLES que la police (de Paris d'abord, de l'ensemble du pays ensuite) est surnommée &quot;les poulets&quot; parce que la Préfecture de Police de Paris est construite sur le très ancien marché à la volaille de la capitale&lt;/li&gt;
&lt;li&gt;des dizaines de bouquins, dont ceux de Frédéric Dard, ont fait des milliers de jeux de mots parfois douteux sur la maison Poulaga et les Poulets. Audiard et consorts ont consommé du Poulet à haute dose.&lt;/li&gt;
&lt;li&gt;mais non, &lt;a href=&quot;http://www.liberation.fr/societe/0101648357-la-pub-pour-les-poulets-fache-les-policiers&quot;&gt;le Ministre et ses Poulets râlent&lt;/a&gt; !?!?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;En Sarkozye, l'humour n'a plus droit de citer, et Desproges aurait été embastillé avec Le Luron. Sous couvert d'un focus sécuritaire, la satire devient un exercice mis à l'index. L'humour pas méchant est désormais tout simplement déplacé. Comme une poupée vaudou, quoi. La Police de la Pensée n'est pas loin et cela me révulse.&lt;/p&gt;
&lt;p&gt;Stop !&lt;/p&gt;</description>
    
    
    
      </item>
    
  <item>
    <title>Zoé Shepard</title>
    <link>http://www.glazman.org/weblog/dotclear/index.php?post/2010/07/26/Zoe-Shepard</link>
    <guid isPermaLink="false">urn:md5:579c66cf0abefd688e8ed1aa9deef02d</guid>
    <pubDate>Mon, 26 Jul 2010 15:15:00 +0200</pubDate>
    <dc:creator>glazou</dc:creator>
        <category>Franchouillardises</category>
            
    <description>    &lt;p&gt;Je viens de dévorer en une journée &lt;a href=&quot;http://www.amazon.fr/Absolument-d%C3%A9-bor-d%C3%A9e-comment-mois-Quand-fonctionnaire/dp/2226206027&quot;&gt;&quot;Absolument dé-bor-dée !&quot; de Zoé Shepard&lt;/a&gt; et je dois dire que j'ai adoré. Tout d'abord j'ai beaucoup ri. J'ai fortement apprécié le rapport de &lt;em&gt;whistleblower&lt;/em&gt; sans concession (si ce n'est les changements de noms). Le tableau qu'elle brosse est effarant, consternifiant dirait Tristant Nitot, pire que celui que &lt;a href=&quot;http://fr.wikipedia.org/wiki/Bonjour_paresse&quot;&gt;Corinne Maier&lt;/a&gt; ou moi-même avons pu dresser de la R&amp;amp;D d'Electricité de France. Je recommande chaleureusement ce livre, ne serait-ce que pour aider un peu l'auteur qui risque une suspension de deux ans sans solde par le Conseil Régional d'Aquitaine (encore qu'il semble qu'une suspension de ce type aussi longue soit illégale).&lt;/p&gt;
&lt;p&gt;Un détail important : Zoé Shepard et son livre seraient probablement passés inaperçus sans la connerie sans limite de son employeur. Comme dans le cas de &quot;Bonjour Paresse&quot; de Corinne Maier, c'est l'énorme publicité offerte par l'action légale contre l'auteur qui a assuré son succés. Encore bravo au responsable de la communication et au président du conseil régional d'Aquitaine pour une décision non seulement complètement con mais surtout contre-productive. Félicitations à l'éditeur de Zoé Shepard qui a du se dire qu'avec des andouilles de cet acabit, la plainte était garantie et donc la pub avec.&lt;/p&gt;</description>
    
    
    
      </item>
    
  <item>
    <title>La meilleure de l'année</title>
    <link>http://www.glazman.org/weblog/dotclear/index.php?post/2010/06/30/La-meilleure-de-l-annee</link>
    <guid isPermaLink="false">urn:md5:df72ac875f24e1b688a864c23c32dbfc</guid>
    <pubDate>Wed, 30 Jun 2010 18:00:00 +0200</pubDate>
    <dc:creator>glazou</dc:creator>
        <category>Franchouillardises</category>
            
    <description>    &lt;p&gt;&lt;img alt=&quot;Because I'm Woerth it&quot; src=&quot;http://www.glazman.org/weblog/dotclear/public/TC/Eric_WOERTH.jpg&quot; /&gt;&lt;/p&gt;
&lt;p&gt;source : &lt;a href=&quot;http://twitter.com/kwyxz/status/17422788794&quot;&gt;@kwyxz&lt;/a&gt;&lt;/p&gt;</description>
    
    
    
      </item>
    
  <item>
    <title>France Inter demain matin</title>
    <link>http://www.glazman.org/weblog/dotclear/index.php?post/2010/06/30/France-Inter-demain-matin</link>
    <guid isPermaLink="false">urn:md5:1d46318454e6b206120aa41ce8572b17</guid>
    <pubDate>Wed, 30 Jun 2010 17:16:00 +0200</pubDate>
    <dc:creator>glazou</dc:creator>
        <category>General</category>
            
    <description>    &lt;p&gt;Je serai l'invité de Guillaume Erner demain matin à 9h00 dans son émission en direct sur France Inter. Sujet : Apple... Les podcasts sont en général disponibles après l'émission.&lt;/p&gt;</description>
    
    
    
      </item>
    
  <item>
    <title>Premier Atelier Git Attitude samedi 10/07/2010 à Paris</title>
    <link>http://www.glazman.org/weblog/dotclear/index.php?post/2010/06/30/Premier-Atelier-Git-Attitude-samedi-10/07/2010-a-Paris</link>
    <guid isPermaLink="false">urn:md5:f34880d905b4f611d597a33e98eeb559</guid>
    <pubDate>Wed, 30 Jun 2010 14:52:00 +0200</pubDate>
    <dc:creator>glazou</dc:creator>
        <category>General</category>
            
    <description>    &lt;p&gt;Je crois que le titre dit tout ; c'est vraiment pas cher, c'est utile, c'est bô, chaque inscription sauve un bébé phoque. &lt;a href=&quot;http://blog.git-attitude.fr/&quot;&gt;Foncez-y&lt;/a&gt;.&lt;/p&gt;</description>
    
    
    
      </item>
    
  <item>
    <title>Utilise ça...</title>
    <link>http://www.glazman.org/weblog/dotclear/index.php?post/2010/06/30/Utilise-ca</link>
    <guid isPermaLink="false">urn:md5:15070a3b53a19b9cad135a5984289884</guid>
    <pubDate>Wed, 30 Jun 2010 14:33:00 +0200</pubDate>
    <dc:creator>glazou</dc:creator>
        <category>General</category>
            
    <description>    &lt;p&gt;Utilise.ca m'a fait l'honneur de m'interviewer récemment. &lt;a href=&quot;http://danielglazman.utilise.ca/&quot;&gt;C'est en ligne depuis quelques minutes&lt;/a&gt;.&lt;/p&gt;</description>
    
    
    
      </item>
    
  <item>
    <title>/bin/sleep</title>
    <link>http://www.glazman.org/weblog/dotclear/index.php?post/2010/06/30/bin/sleep</link>
    <guid isPermaLink="false">urn:md5:95337fd1597da0b4c495d43a0900331e</guid>
    <pubDate>Wed, 30 Jun 2010 09:14:00 +0200</pubDate>
    <dc:creator>glazou</dc:creator>
        <category>Glazblog</category>
            
    <description>    &lt;p&gt;Comments are closed for three weeks on the glazblog.&lt;/p&gt;</description>
    
    
    
      </item>
    
  <item>
    <title>An Update on CSS 2.1</title>
    <link>http://www.glazman.org/weblog/dotclear/index.php?post/2010/06/29/An-Update-on-CSS-21</link>
    <guid isPermaLink="false">urn:md5:6d3d3a20762210f4ad3827e8e05fb18d</guid>
    <pubDate>Tue, 29 Jun 2010 22:22:00 +0200</pubDate>
    <dc:creator>glazou</dc:creator>
        <category>CSS and style</category>
            
    <description>    &lt;p&gt;So where are we (that &quot;we&quot; meaning the CSS Working Group) on CSS 2.1? In short, we're making fast and excellent progress:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;we are currently resolving the last outstanding issues ; almost all our weekly conference calls are entirely dedicated to CSS 2.1&lt;/li&gt;
&lt;li&gt;the Test Suite is near completion ; the Working Group has decided, given the size of the Test Suite, that it's not realistic to review individually all tests before saying the Test Suite is completed. We will declare the Test Suite ready for implementation reports and will fix individual bugs when reported buggy by testers, browser vendors, the community, whoever. On a more personal note, I think it's the only reasonable way of dealing with a Test Suite that contains thousands and thousands of tests, some of them rather complex not only to write but also to understand when you read them. Otherwise, the review and validation process of all these tests alone will take ages...&lt;/li&gt;
&lt;li&gt;given the recent changes in the spec - we resolved a lot of issues some of them pretty complicated - we may have to go back to Last Call Working Draft and then back to CR again. That's not a problem and can be relatively fast.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.w3.org/TR/2009/CR-CSS2-20090908/#crec&quot;&gt;the current CR exit criteria&lt;/a&gt; - that we don't plan to change - are very clear (see conditions 4 and 5). The CR period could be a bit long though; we'll see.&lt;/li&gt;
&lt;li&gt;the Test Suite and the CR should be available at same time and that time should be, as planned by the WG, after the summer. That should leave us enough time to reach Proposed Recommendation before the end of the year, as expected.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To the people who &lt;em&gt;could&lt;/em&gt; complain about the duration of this process and the time needed to make this spec appear as a REC, let me say that we have a lot, really a lot of work here. The WG focuses almost solely on CSS 2.1 at this time and that's not recent. 2.1 &lt;strong&gt;must&lt;/strong&gt; be released as a Web Standard because that's one of the current cornerstones of the architecture of the World Wide Web. We cannot make the next steps, CSS 3 even module by module, happen without 2.1 before.&lt;/p&gt;
&lt;p&gt;In summary, we're on track. As expected. No reason to worry.&lt;/p&gt;
&lt;p&gt;Thanks.&lt;/p&gt;
&lt;p&gt;Daniel Glazman, W3C CSS Working Group, Co-chair&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Update&lt;/strong&gt;: reposted on &lt;a href=&quot;http://www.w3.org/QA/2010/06/an_update_on_css_21.html&quot;&gt;W3C blog&lt;/a&gt;.&lt;/p&gt;</description>
    
    
    
      </item>
    
  <item>
    <title>Dream...</title>
    <link>http://www.glazman.org/weblog/dotclear/index.php?post/2010/06/29/Dream</link>
    <guid isPermaLink="false">urn:md5:96294549e2cbbe800f953e7cbabc420b</guid>
    <pubDate>Tue, 29 Jun 2010 10:57:00 +0200</pubDate>
    <dc:creator>glazou</dc:creator>
        <category>General</category>
            
    <description>    &lt;p&gt;If there is a browser feature I would like to see appear some day, it's the following one: when I want to listen to a radio or watch a TV channel that reflects real-time its broadcast through a flash plugin in a web page (for example &lt;a href=&quot;http://france-info.com/&quot;&gt;http://france-info.com/&lt;/a&gt;), I need to keep the browser running and a tab for that page. I'd love to see a trivial UI way to &quot;detach&quot; the running flash player and make it a totally independent (and of course closeable) window...&lt;/p&gt;</description>
    
    
    
      </item>
    
</channel>
</rss>