<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
    <channel>
        <title>Etienne Folio aka Ornthalas</title>
        <description>My web log about computer sciences</description>
        <link>http://www.ornthalas.net/</link>
        <lastBuildDate>Fri, 5 Dec 2008 00:22:27 +0100</lastBuildDate>
	<pubDate>Fri, 5 Dec 2008 00:22:27 +0100</pubDate>
        <item>
	   <title>Some news</title>
	    <description>&lt;p&gt;Well, I have not written anything here since a while ! Quite lots of things happened since my last post.&lt;/p&gt;
&lt;p&gt;I have finished my year at Epita and my report and seminar at the research lab (LRDE) about distance maps in the Olena library. Maybe I will write something about it in the &amp;quot;projects&amp;quot; section someday.&lt;/p&gt;
&lt;p&gt;I have been fond of rubik's cubes too. I bought lots (2x2x2, 3x3x3, 4x4x4, 5x5x5, megaminx, pyraminx, square-1, skewb, skewb-3D, skewb ultimate, polymorphix, pyraminx cristal...) and solved most of them. These logic games seem to be quite addictive.&lt;/p&gt;
&lt;p&gt;I started playing the &amp;quot;classical&amp;quot; guitar too and I recently put some chords and tablatures in the &amp;quot;articles&amp;quot; section.&lt;/p&gt;
&lt;p&gt;The last thing is that I am currently doing a 5-month internship in the New Jersey, near Princeton, at Siemens Corporate Research. I work on brain visualization in medical imaging. That's a quite interesting internship and I'm happy with it.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;</description>
            <pubDate>Sat, 25 Oct 2008 20:00:59 +0200</pubDate>
            <link>http://www.ornthalas.net/notes/212/Some%20news</link>
			<category>notes</category>
        </item>
        <item>
	   <title>Ascii-strips</title>
	    <description>&lt;p class=&quot;center&quot;&gt; &lt;a href=&quot;/data/img/197/annonce_ascii.png&quot;&gt;&lt;img src=&quot;/data/img/197/annonce_ascii_pt.png&quot; alt=&quot;annonce_ascii.png&quot; class=&quot;img&quot; /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;L'adresse :  &lt;a href=&quot;http://ascii.ornthalas.net&quot; class=&quot;external_link&quot;&gt;http://ascii.ornthalas.net&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&lt;/p&gt;</description>
            <pubDate>Thu, 8 May 2008 12:33:53 +0200</pubDate>
            <link>http://www.ornthalas.net/notes/197/Ascii-strips</link>
			<category>notes</category>
        </item>
        <item>
	   <title>Solo Piano Radio</title>
	    <description>&lt;p&gt;Do you listen to music at work? Some people do, some people don't. In a general case, it is advised NOT to listen music at work, because it disturbs your mind and it is a source of distraction. I agree with that for common music.&lt;/p&gt;
&lt;p&gt; &lt;a href=&quot;/data/img/196/piano.png&quot; class=&quot;right&quot;&gt;&lt;img src=&quot;/data/img/196/piano_pt.png&quot; alt=&quot;piano&quot; class=&quot;img&quot; /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;In my case, I have always been surrounded with music. I wonder why I can't support silence over than 2 hours. I  &lt;span class=&quot;underline&quot;&gt;NEED&lt;/span&gt;  music. It is engraved in me, probably since my childhood since I played music for 13 years.&lt;/p&gt;
&lt;p&gt;Fortunately, some kinds of music are compatible with work. These music pieces have the particularity to be heard like a pleasant background noise. They don't bother you when you work and don't monopolize your mind.&lt;/p&gt;
&lt;p&gt;I recently discovered a web radio named  &lt;span class=&quot;italic&quot;&gt;Whisperings&lt;/span&gt; , which broadcasts only solo piano music. It is totally free with a decent quality (64 kbps for piano music is not too bad). I think that the piano music of this web radio is very pleasant and relaxing. I have converted lots of people to this web radio, and now they listen to it every day at work :)&lt;/p&gt;
&lt;p&gt;If you want some extra quality, bigger playlist and support them to keep it online, you can subscribe to a commercial offer (30$ a year).&lt;/p&gt;
&lt;p&gt;The web radio link:  &lt;a href=&quot;http://www.solopianoradio.com/&quot; class=&quot;external_link&quot;&gt;http://www.solopianoradio.com/&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;</description>
            <pubDate>Sun, 20 Apr 2008 16:43:54 +0200</pubDate>
            <link>http://www.ornthalas.net/notes/196/Solo%20Piano%20Radio</link>
			<category>notes</category>
        </item>
        <item>
	   <title>Domain change.</title>
	    <description>&lt;p&gt;I changed the domain of my personal websites. Good bye ouronos.info, hello ornthalas.net.&lt;/p&gt;
&lt;p&gt;Why did I change ? Well, I had some problems with the .info:&lt;/p&gt;
&lt;p&gt; &lt;a href=&quot;/data/img/195/domain.png&quot; class=&quot;right&quot;&gt;&lt;img src=&quot;/data/img/195/domain_pt.png&quot; alt=&quot;domaine&quot; class=&quot;img&quot; /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt; First of all, it was annoying not to te be able to copy/paste an address in MSN Messenger. I know it's ridiculous, but this fact happened often, and it was  &lt;span class=&quot;underline&quot;&gt;very&lt;/span&gt;  annoying.&lt;/li&gt;
&lt;li&gt; The  &lt;span class=&quot;italic&quot;&gt;ouronos&lt;/span&gt;  name wasn't clear for most people. The didn't know how to write it, and where did it come from.  &lt;span class=&quot;italic&quot;&gt;Ornthalas&lt;/span&gt;  is my nickname, well known by my friends, so it is more logical to use a domain with it instead of the mysterious  &lt;span class=&quot;italic&quot;&gt;ouronos&lt;/span&gt; .&lt;/li&gt;
&lt;li&gt; A  &lt;span class=&quot;italic&quot;&gt;.net&lt;/span&gt;  extension if far cooler than a  &lt;span class=&quot;italic&quot;&gt;.info&lt;/span&gt;  ;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;So these are the new addresses you must have in your bookmarks !&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;  &lt;a href=&quot;http://www.ornthalas.net&quot; class=&quot;external_link&quot;&gt;www.ornthalas.net&lt;/a&gt;  / Here !&lt;/li&gt;
&lt;li&gt;  &lt;a href=&quot;http://photo.ornthalas.net&quot; class=&quot;external_link&quot;&gt;photo.ornthalas.net&lt;/a&gt;  / My personal photo website (no XXX in here !).&lt;/li&gt;
&lt;li&gt;  &lt;a href=&quot;http://masterpass.ornthalas.net&quot; class=&quot;external_link&quot;&gt;masterpass.ornthalas.net&lt;/a&gt;  / The website of the Firefox extension I developed in order to increase security about passwords on the Internet.&lt;/li&gt;
&lt;li&gt;  &lt;a href=&quot;http://athalantar.ornthalas.net&quot; class=&quot;external_link&quot;&gt;athalantar.ornthalas.net&lt;/a&gt;  / My 1st-year project.&lt;/li&gt;
&lt;li&gt;  &lt;a href=&quot;http://42capture.ornthalas.net&quot; class=&quot;external_link&quot;&gt;42capture.ornthalas.net&lt;/a&gt;  / My 2nd-year project.&lt;/li&gt;
&lt;li&gt;  &lt;a href=&quot;http://madagascar.ornthalas.net&quot; class=&quot;external_link&quot;&gt;madagascar.ornthalas.net&lt;/a&gt;  / A trip to Madagascar. The web site isn't finished. I wonder if i will end it one day...&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;/p&gt;</description>
            <pubDate>Tue, 18 Mar 2008 10:38:30 +0100</pubDate>
            <link>http://www.ornthalas.net/notes/195/Domain%20change.</link>
			<category>notes</category>
        </item>
        <item>
	   <title>iTerm et les bindings clavier</title>
	    <description>&lt;p&gt;Par défaut, les bindings d'iTerm font n'importe quoi lorsqu'on l'utilise sur un MacBook. Voici comment obtenir les touches Backspace (suppression avant) et Delete (suppression après), en local, en local sous emacs, en SSH et en SSH sous emacs :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt; Allez dans le menu &amp;quot;Manage Profile&amp;quot;&lt;/li&gt;
&lt;li&gt; A gauche de la boite de dialogue, sélectionnez dans &amp;quot;Keyboards Profiles&amp;quot; &amp;quot;xterm (OS X)&amp;quot;&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;center&quot;&gt; &lt;a href=&quot;/data/img/194/iterm_bindings.png&quot;&gt;&lt;img src=&quot;/data/img/194/iterm_bindings_pt.png&quot; alt=&quot;iterm_bindings.png&quot; class=&quot;img&quot; /&gt;&lt;/a&gt;   &lt;a href=&quot;/data/img/194/iterm_binding_del.png&quot;&gt;&lt;img src=&quot;/data/img/194/iterm_binding_del_pt.png&quot; alt=&quot;iterm_binding_del.png&quot; class=&quot;img&quot; /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Déjà, on va corriger le Backspace :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt; Sélectionnez dans la liste la ligne commençant par &amp;quot;delete&amp;quot;&lt;/li&gt;
&lt;li&gt; Cliquez sur bouton crayon sous la liste pour éditer la ligne&lt;/li&gt;
&lt;li&gt; Mettez &amp;quot;8&amp;quot; dans le champ de texte sous le menu déroulant &amp;quot;Action&amp;quot;&lt;/li&gt;
&lt;li&gt; Validez&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Maintenant, on va faire fonctionner le Delete :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt; Cliquez sur &amp;quot;+&amp;quot; sous la liste pour ajouter une entrée&lt;/li&gt;
&lt;li&gt; Dans le menu déroulant &amp;quot;Key&amp;quot;, sélectionnez &amp;quot;del&amp;quot;&lt;/li&gt;
&lt;li&gt; Dans le menu déroulant &amp;quot;Action&amp;quot;, sélectionnez &amp;quot;send hex code&amp;quot;&lt;/li&gt;
&lt;li&gt; Mettez en dessous &amp;quot;4&amp;quot;&lt;/li&gt;
&lt;li&gt; Validez&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Vous pouvez aussi sélectionner dans la liste &amp;quot;Option Key as&amp;quot; sous la liste le bouton radio &amp;quot;+Esc&amp;quot;. Cela vous permettra d'utiliser la touche &amp;quot;alt&amp;quot; comme &amp;quot;Meta&amp;quot; dans Emacs en SSH.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;</description>
            <pubDate>Mon, 3 Mar 2008 00:29:46 +0100</pubDate>
            <link>http://www.ornthalas.net/notes/194/iTerm%20et%20les%20bindings%20clavier</link>
			<category>notes</category>
        </item>
        <item>
	   <title>Héritage conditionnel</title>
	    <description>&lt;p&gt;J'ai eu comme exercice au labo a déterminer comment faire de l'héritage conditionnel en C++. Conditionnel signifiant ayant une condition, j'ai compris un booléen. Certaines personnes m'ont demande d'expliquer ca :&lt;/p&gt;
&lt;p&gt;Pour l'exercice, afin de comprendre, j'utilise trois classes :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt; TopLeft&lt;/li&gt;
&lt;li&gt; TopRight&lt;/li&gt;
&lt;li&gt; Bottom&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Evidemment,  &lt;span class=&quot;bold&quot;&gt;Bottom&lt;/span&gt;  herite de l'une des deux autres, selon une condition.&lt;/p&gt;
&lt;p&gt;Voici le code correspondant aux deux classes du dessus :&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;code&quot;&gt;&lt;ol&gt;&lt;li style=&quot;color: #183a43;&quot;&gt;&lt;div style=&quot;font-family: 'Courier New', Courier, monospace; font-weight: normal;&quot;&gt;&lt;span style=&quot;color: #ffa800;&quot;&gt;# include &amp;lt;iostream&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;color: #183a43;&quot;&gt;&lt;div style=&quot;font-family: 'Courier New', Courier, monospace; font-weight: normal;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;color: #183a43;&quot;&gt;&lt;div style=&quot;font-family: 'Courier New', Courier, monospace; font-weight: normal;&quot;&gt;&lt;span style=&quot;color: #2f892f;&quot;&gt;class&lt;/span&gt; TopLeft&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;color: #183a43;&quot;&gt;&lt;div style=&quot;font-family: 'Courier New', Courier, monospace; font-weight: normal;&quot;&gt;&lt;span style=&quot;color: #2f892f;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;color: #183a43;&quot;&gt;&lt;div style=&quot;font-family: 'Courier New', Courier, monospace; font-weight: normal;&quot;&gt;&lt;span style=&quot;color: #2f892f;&quot;&gt;protected&lt;/span&gt;:&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;color: #183a43;&quot;&gt;&lt;div style=&quot;font-family: 'Courier New', Courier, monospace; font-weight: normal;&quot;&gt;&amp;nbsp; &amp;nbsp; TopLeft&lt;span style=&quot;color: #2f892f;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #2f892f;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;color: #183a43;&quot;&gt;&lt;div style=&quot;font-family: 'Courier New', Courier, monospace; font-weight: normal;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #2f892f;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;color: #183a43;&quot;&gt;&lt;div style=&quot;font-family: 'Courier New', Courier, monospace; font-weight: normal;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; std::&lt;span style=&quot;color: #2f892f;&quot;&gt;cout&lt;/span&gt; &amp;lt;&amp;lt; &lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;top left&amp;quot;&lt;/span&gt; &amp;lt;&amp;lt; std::&lt;span style=&quot;color: #006600;&quot;&gt;endl&lt;/span&gt;;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;color: #183a43;&quot;&gt;&lt;div style=&quot;font-family: 'Courier New', Courier, monospace; font-weight: normal;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #2f892f;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;color: #183a43;&quot;&gt;&lt;div style=&quot;font-family: 'Courier New', Courier, monospace; font-weight: normal;&quot;&gt;&lt;span style=&quot;color: #2f892f;&quot;&gt;&amp;#125;&lt;/span&gt;;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;color: #183a43;&quot;&gt;&lt;div style=&quot;font-family: 'Courier New', Courier, monospace; font-weight: normal;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;color: #183a43;&quot;&gt;&lt;div style=&quot;font-family: 'Courier New', Courier, monospace; font-weight: normal;&quot;&gt;&lt;span style=&quot;color: #2f892f;&quot;&gt;class&lt;/span&gt; TopRight&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;color: #183a43;&quot;&gt;&lt;div style=&quot;font-family: 'Courier New', Courier, monospace; font-weight: normal;&quot;&gt;&lt;span style=&quot;color: #2f892f;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;color: #183a43;&quot;&gt;&lt;div style=&quot;font-family: 'Courier New', Courier, monospace; font-weight: normal;&quot;&gt;&lt;span style=&quot;color: #2f892f;&quot;&gt;protected&lt;/span&gt;:&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;color: #183a43;&quot;&gt;&lt;div style=&quot;font-family: 'Courier New', Courier, monospace; font-weight: normal;&quot;&gt;&amp;nbsp; &amp;nbsp; TopRight&lt;span style=&quot;color: #2f892f;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #2f892f;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;color: #183a43;&quot;&gt;&lt;div style=&quot;font-family: 'Courier New', Courier, monospace; font-weight: normal;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #2f892f;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;color: #183a43;&quot;&gt;&lt;div style=&quot;font-family: 'Courier New', Courier, monospace; font-weight: normal;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; std::&lt;span style=&quot;color: #2f892f;&quot;&gt;cout&lt;/span&gt; &amp;lt;&amp;lt; &lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;top right&amp;quot;&lt;/span&gt; &amp;lt;&amp;lt; std::&lt;span style=&quot;color: #006600;&quot;&gt;endl&lt;/span&gt;;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;color: #183a43;&quot;&gt;&lt;div style=&quot;font-family: 'Courier New', Courier, monospace; font-weight: normal;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #2f892f;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;color: #183a43;&quot;&gt;&lt;div style=&quot;font-family: 'Courier New', Courier, monospace; font-weight: normal;&quot;&gt;&lt;span style=&quot;color: #2f892f;&quot;&gt;&amp;#125;&lt;/span&gt;;&lt;/div&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Jusque la rien de méchant. Ensuite pour faire l'héritage conditionnel, j'utilise un  &lt;span class=&quot;italic&quot;&gt;trait&lt;/span&gt; . Un  &lt;span class=&quot;italic&quot;&gt;trait&lt;/span&gt;  est une notion permettant un abstraction totale vis-a-vis des types, et est défini dans une classe prévue a cet effet. J'ai nomme ce  &lt;span class=&quot;italic&quot;&gt;trait&lt;/span&gt;   &lt;span class=&quot;bold&quot;&gt;Selector&lt;/span&gt;  pour les besoins de l'exercice. Voici le code correspondant :&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;code&quot;&gt;&lt;ol&gt;&lt;li style=&quot;color: #183a43;&quot;&gt;&lt;div style=&quot;font-family: 'Courier New', Courier, monospace; font-weight: normal;&quot;&gt;template&amp;lt;bool C, &lt;span style=&quot;color: #2f892f;&quot;&gt;typename&lt;/span&gt; T, &lt;span style=&quot;color: #2f892f;&quot;&gt;typename&lt;/span&gt; U&amp;gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;color: #183a43;&quot;&gt;&lt;div style=&quot;font-family: 'Courier New', Courier, monospace; font-weight: normal;&quot;&gt;&lt;span style=&quot;color: #3c4a8c;&quot;&gt;struct&lt;/span&gt; Selector&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;color: #183a43;&quot;&gt;&lt;div style=&quot;font-family: 'Courier New', Courier, monospace; font-weight: normal;&quot;&gt;&lt;span style=&quot;color: #2f892f;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;color: #183a43;&quot;&gt;&lt;div style=&quot;font-family: 'Courier New', Courier, monospace; font-weight: normal;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #3c4a8c;&quot;&gt;typedef&lt;/span&gt; T type;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;color: #183a43;&quot;&gt;&lt;div style=&quot;font-family: 'Courier New', Courier, monospace; font-weight: normal;&quot;&gt;&lt;span style=&quot;color: #2f892f;&quot;&gt;&amp;#125;&lt;/span&gt;;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;color: #183a43;&quot;&gt;&lt;div style=&quot;font-family: 'Courier New', Courier, monospace; font-weight: normal;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;color: #183a43;&quot;&gt;&lt;div style=&quot;font-family: 'Courier New', Courier, monospace; font-weight: normal;&quot;&gt;template&amp;lt;typename T, &lt;span style=&quot;color: #2f892f;&quot;&gt;typename&lt;/span&gt; U&amp;gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;color: #183a43;&quot;&gt;&lt;div style=&quot;font-family: 'Courier New', Courier, monospace; font-weight: normal;&quot;&gt;&lt;span style=&quot;color: #3c4a8c;&quot;&gt;struct&lt;/span&gt; Selector&amp;lt;false, T, U&amp;gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;color: #183a43;&quot;&gt;&lt;div style=&quot;font-family: 'Courier New', Courier, monospace; font-weight: normal;&quot;&gt;&lt;span style=&quot;color: #2f892f;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;color: #183a43;&quot;&gt;&lt;div style=&quot;font-family: 'Courier New', Courier, monospace; font-weight: normal;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #3c4a8c;&quot;&gt;typedef&lt;/span&gt; U type;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;color: #183a43;&quot;&gt;&lt;div style=&quot;font-family: 'Courier New', Courier, monospace; font-weight: normal;&quot;&gt;&lt;span style=&quot;color: #2f892f;&quot;&gt;&amp;#125;&lt;/span&gt;;&lt;/div&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Ici, je définis donc une classe templatée  &lt;span class=&quot;bold&quot;&gt;Selector&lt;/span&gt; , que je spécialise juste en dessous dans le cas ou le booléen passé en premier paramètre vaut  &lt;span class=&quot;italic&quot;&gt;false&lt;/span&gt; . Selon la spécialisation, je définis le type  &lt;span class=&quot;italic&quot;&gt;type&lt;/span&gt;  comme étant soit le 2e paramètre, soit le 3e.&lt;/p&gt;
&lt;p&gt;Il ne reste plus qu'a faire la classe  &lt;span class=&quot;bold&quot;&gt;Bottom&lt;/span&gt;  :&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;code&quot;&gt;&lt;ol&gt;&lt;li style=&quot;color: #183a43;&quot;&gt;&lt;div style=&quot;font-family: 'Courier New', Courier, monospace; font-weight: normal;&quot;&gt;template&amp;lt;bool B&amp;gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;color: #183a43;&quot;&gt;&lt;div style=&quot;font-family: 'Courier New', Courier, monospace; font-weight: normal;&quot;&gt;&lt;span style=&quot;color: #2f892f;&quot;&gt;class&lt;/span&gt; Bottom: &lt;span style=&quot;color: #2f892f;&quot;&gt;public&lt;/span&gt; Selector&amp;lt;B, TopLeft, TopRight&amp;gt;::&lt;span style=&quot;color: #006600;&quot;&gt;type&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;color: #183a43;&quot;&gt;&lt;div style=&quot;font-family: 'Courier New', Courier, monospace; font-weight: normal;&quot;&gt;&lt;span style=&quot;color: #2f892f;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;color: #183a43;&quot;&gt;&lt;div style=&quot;font-family: 'Courier New', Courier, monospace; font-weight: normal;&quot;&gt;&lt;span style=&quot;color: #2f892f;&quot;&gt;public&lt;/span&gt;:&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;color: #183a43;&quot;&gt;&lt;div style=&quot;font-family: 'Courier New', Courier, monospace; font-weight: normal;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #3c4a8c;&quot;&gt;typedef&lt;/span&gt; Selector&amp;lt;B, TopLeft, TopRight&amp;gt;::&lt;span style=&quot;color: #006600;&quot;&gt;type&lt;/span&gt; parent;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;color: #183a43;&quot;&gt;&lt;div style=&quot;font-family: 'Courier New', Courier, monospace; font-weight: normal;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;color: #183a43;&quot;&gt;&lt;div style=&quot;font-family: 'Courier New', Courier, monospace; font-weight: normal;&quot;&gt;&amp;nbsp; &amp;nbsp; Bottom&lt;span style=&quot;color: #2f892f;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #2f892f;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;color: #183a43;&quot;&gt;&lt;div style=&quot;font-family: 'Courier New', Courier, monospace; font-weight: normal;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; : parent&lt;span style=&quot;color: #2f892f;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #2f892f;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;color: #183a43;&quot;&gt;&lt;div style=&quot;font-family: 'Courier New', Courier, monospace; font-weight: normal;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #2f892f;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;color: #183a43;&quot;&gt;&lt;div style=&quot;font-family: 'Courier New', Courier, monospace; font-weight: normal;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #2f892f;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;color: #183a43;&quot;&gt;&lt;div style=&quot;font-family: 'Courier New', Courier, monospace; font-weight: normal;&quot;&gt;&lt;span style=&quot;color: #2f892f;&quot;&gt;&amp;#125;&lt;/span&gt;;&lt;/div&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Je définis les deux types du dessus pour l'héritage, et je ne garde donc que le booléen B comme paramètre important a définir lors de l'appel :&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;code&quot;&gt;&lt;ol&gt;&lt;li style=&quot;color: #183a43;&quot;&gt;&lt;div style=&quot;font-family: 'Courier New', Courier, monospace; font-weight: normal;&quot;&gt;&lt;span style=&quot;color: #3c4a8c;&quot;&gt;int&lt;/span&gt; main&lt;span style=&quot;color: #2f892f;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #2f892f;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;color: #183a43;&quot;&gt;&lt;div style=&quot;font-family: 'Courier New', Courier, monospace; font-weight: normal;&quot;&gt;&lt;span style=&quot;color: #2f892f;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;color: #183a43;&quot;&gt;&lt;div style=&quot;font-family: 'Courier New', Courier, monospace; font-weight: normal;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #2f892f;&quot;&gt;new&lt;/span&gt; Bottom&amp;lt;&lt;span style=&quot;color: #cc66cc;&quot;&gt;1&lt;/span&gt; == &lt;span style=&quot;color: #cc66cc;&quot;&gt;1&lt;/span&gt;&amp;gt;&lt;span style=&quot;color: #2f892f;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #2f892f;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;color: #183a43;&quot;&gt;&lt;div style=&quot;font-family: 'Courier New', Courier, monospace; font-weight: normal;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #2f892f;&quot;&gt;new&lt;/span&gt; Bottom&amp;lt;&lt;span style=&quot;color: #cc66cc;&quot;&gt;1&lt;/span&gt; == &lt;span style=&quot;color: #cc66cc;&quot;&gt;0&lt;/span&gt;&amp;gt;&lt;span style=&quot;color: #2f892f;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #2f892f;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;color: #183a43;&quot;&gt;&lt;div style=&quot;font-family: 'Courier New', Courier, monospace; font-weight: normal;&quot;&gt;&lt;span style=&quot;color: #2f892f;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Ce qui renvoie bien :&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;code&quot;&gt;&amp;gt;./a.out&lt;br /&gt;
top left&lt;br /&gt;
top right&lt;/div&gt;&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Ce type d'héritage multiple est rarement utilise, mais c'est un bon petit exercice pour débuter l'apprentissage de la spécialisation de templates.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;</description>
            <pubDate>Tue, 19 Feb 2008 00:40:44 +0100</pubDate>
            <link>http://www.ornthalas.net/notes/192/H%C3%A9ritage%20conditionnel</link>
			<category>notes</category>
        </item>
        <item>
	   <title>Petite expression rationnelle</title>
	    <description>&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;code&quot;&gt;@(?:(?:&amp;quot;.*?[^\\]&amp;quot;)|(?:'.*?[^\\]')|(?:`.*?[^\\]`))|(?:\#((?:(?:&amp;quot;.*?[^\\]&amp;quot;)|(?:'.*?[^\\]')|&lt;br /&gt;
(?:`.*?[^\\]`)|[^&amp;quot;'`])+?)\#)@&lt;/div&gt;&lt;p&gt;&lt;/p&gt;
&lt;p class=&quot;center&quot;&gt; &lt;a href=&quot;/data/img/191/omfg.png&quot;&gt;&lt;img src=&quot;/data/img/191/omfg_pt.png&quot; alt=&quot;omfg.png&quot; class=&quot;img&quot; /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Ceci est une  &lt;span class=&quot;italic&quot;&gt;petite&lt;/span&gt;  expression rationnelle PERL que j'ai construit hier avec Quentin alors qu'on travaillait sur une bibliothèque SQL pour notre moteur web. Nous devions matcher tout bloc de code compris entre les tokens '#' et '#', mais ne pas compter les '#' qui apparaitraient dans des strings (et ce a l'intérieur ou a l'extérieur des blocs '# ... #'), sachant qu'une string est entourée de quotes, double-quotes ou backquotes, qui peuvent contenir ces mêmes caractères backslashés.&lt;/p&gt;
&lt;p&gt;Par exemple, ceci devait matcher :&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;code&quot;&gt;texte avant #une 'pomme\'verte#ou rouge' a croquer# texte après&lt;/div&gt;&lt;p&gt;&lt;/p&gt;
&lt;p&gt;et renvoyer :&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;code&quot;&gt;une 'pomme\'verte#ou rouge' a croquer&lt;/div&gt;&lt;p&gt;&lt;/p&gt;
&lt;p&gt;En effet, le diese du milieu est dans une string, qui va de  &lt;span class=&quot;italic&quot;&gt;&amp;quot;pomme&amp;quot;&lt;/span&gt;  à  &lt;span class=&quot;italic&quot;&gt;&amp;quot;rouge&amp;quot;&lt;/span&gt; , et ne doit pas être compté comme caractère de fin de bloc.&lt;/p&gt;
&lt;p&gt;Voici le code php qui nous a permis de créer cette expression :&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;code&quot;&gt;&lt;ol&gt;&lt;li style=&quot;color: #183a43;&quot;&gt;&lt;div style=&quot;font-family: 'Courier New', Courier, monospace; font-weight: normal;&quot;&gt;&lt;span style=&quot;color: #3c4a8c;&quot;&gt;$spl&lt;/span&gt; = &lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;(?:'.*?[^&lt;span style=&quot;color: #6b6b6b;&quot;&gt;\\&lt;/span&gt;&lt;span style=&quot;color: #6b6b6b;&quot;&gt;\\&lt;/span&gt;]')&amp;quot;&lt;/span&gt;; &lt;span style=&quot;color: #ffa800; font-style: italic;&quot;&gt;// string between simple quotes&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;color: #183a43;&quot;&gt;&lt;div style=&quot;font-family: 'Courier New', Courier, monospace; font-weight: normal;&quot;&gt;&lt;span style=&quot;color: #3c4a8c;&quot;&gt;$dbl&lt;/span&gt; = &lt;span style=&quot;color: #ff0000;&quot;&gt;'(?:&amp;quot;.*?[^&lt;span style=&quot;color: #6b6b6b;&quot;&gt;\\&lt;/span&gt;&lt;span style=&quot;color: #6b6b6b;&quot;&gt;\\&lt;/span&gt;]&amp;quot;)'&lt;/span&gt;; &lt;span style=&quot;color: #ffa800; font-style: italic;&quot;&gt;// string between double quotes&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;color: #183a43;&quot;&gt;&lt;div style=&quot;font-family: 'Courier New', Courier, monospace; font-weight: normal;&quot;&gt;&lt;span style=&quot;color: #3c4a8c;&quot;&gt;$bck&lt;/span&gt; = &lt;span style=&quot;color: #ff0000;&quot;&gt;'(?:`.*?[^&lt;span style=&quot;color: #6b6b6b;&quot;&gt;\\&lt;/span&gt;&lt;span style=&quot;color: #6b6b6b;&quot;&gt;\\&lt;/span&gt;]`)'&lt;/span&gt;; &lt;span style=&quot;color: #ffa800; font-style: italic;&quot;&gt;// string between back quotes&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;color: #183a43;&quot;&gt;&lt;div style=&quot;font-family: 'Courier New', Courier, monospace; font-weight: normal;&quot;&gt;&lt;span style=&quot;color: #3c4a8c;&quot;&gt;$string&lt;/span&gt; = &lt;span style=&quot;color: #3c4a8c;&quot;&gt;$spl&lt;/span&gt;.&lt;span style=&quot;color: #ff0000;&quot;&gt;'|'&lt;/span&gt;.&lt;span style=&quot;color: #3c4a8c;&quot;&gt;$dbl&lt;/span&gt;.&lt;span style=&quot;color: #ff0000;&quot;&gt;'|'&lt;/span&gt;.&lt;span style=&quot;color: #3c4a8c;&quot;&gt;$bck&lt;/span&gt;; &lt;span style=&quot;color: #ffa800; font-style: italic;&quot;&gt;// a string block&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;color: #183a43;&quot;&gt;&lt;div style=&quot;font-family: 'Courier New', Courier, monospace; font-weight: normal;&quot;&gt;&lt;span style=&quot;color: #3c4a8c;&quot;&gt;$diese&lt;/span&gt; = &lt;span style=&quot;color: #ff0000;&quot;&gt;'&lt;span style=&quot;color: #6b6b6b;&quot;&gt;\#&lt;/span&gt;((?:'&lt;/span&gt;.&lt;span style=&quot;color: #3c4a8c;&quot;&gt;$string&lt;/span&gt;.&lt;span style=&quot;color: #ff0000;&quot;&gt;'|[^&amp;quot;&lt;span style=&quot;color: #6b6b6b;&quot;&gt;\'&lt;/span&gt;`])+?)&lt;span style=&quot;color: #6b6b6b;&quot;&gt;\#&lt;/span&gt;'&lt;/span&gt;; &lt;span style=&quot;color: #ffa800; font-style: italic;&quot;&gt;// a # ... # block&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;color: #183a43;&quot;&gt;&lt;div style=&quot;font-family: 'Courier New', Courier, monospace; font-weight: normal;&quot;&gt;&lt;span style=&quot;color: #2f892f;&quot;&gt;preg_match_all&lt;/span&gt;&lt;span style=&quot;color: #2f892f;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;'@(?:'&lt;/span&gt;.&lt;span style=&quot;color: #3c4a8c;&quot;&gt;$string&lt;/span&gt;.&lt;span style=&quot;color: #ff0000;&quot;&gt;')|(?:'&lt;/span&gt;.&lt;span style=&quot;color: #3c4a8c;&quot;&gt;$diese&lt;/span&gt;.&lt;span style=&quot;color: #ff0000;&quot;&gt;')@'&lt;/span&gt;, &lt;span style=&quot;color: #3c4a8c;&quot;&gt;$content&lt;/span&gt;, &lt;span style=&quot;color: #3c4a8c;&quot;&gt;$matches&lt;/span&gt;, PREG_OFFSET_CAPTURE&lt;span style=&quot;color: #2f892f;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;/div&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Sympa, non ?&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;</description>
            <pubDate>Sun, 17 Feb 2008 10:56:40 +0100</pubDate>
            <link>http://www.ornthalas.net/notes/191/Petite%20expression%20rationnelle</link>
			<category>notes</category>
        </item>
        <item>
	   <title>MySQL ne demarre pas automatiquement sous Mac OSX</title>
	    <description>&lt;p&gt;J'ai depuis quelques mois un ordinateur Macintosh (un MacBook pour les intéressés) et je souhaite évidemment travailler dessus. Parmi mes besoins, il y a MySQL. Seulement, le package d'installation fait n'importe quoi au niveau du démarrage automatique de MySQL...&lt;/p&gt;
&lt;p&gt;A titre indicatif, il s'agit dans mon cas de la version 5.0.51, même si ce problème a l'air d'affecter de plus anciennes versions.&lt;/p&gt;
&lt;p&gt;En effet, on peut lire dans la documentation que le package  &lt;span class=&quot;italic&quot;&gt;MySQLStartupItem.pkg&lt;/span&gt;  doit installer son contenu dans  &lt;span class=&quot;italic&quot;&gt;/Library/StartupItems/MySQLCOM&lt;/span&gt; , ce qui permet au système de démarrer automatiquement le serveur MySQL. Seulement, après installation, il n'y a rien dans  &lt;span class=&quot;italic&quot;&gt;/Library/StatupItems&lt;/span&gt;  qui puisse ressembler a un dossier  &lt;span class=&quot;italic&quot;&gt;MYSQLCOM&lt;/span&gt; .&lt;/p&gt;
&lt;p&gt;Le fait est que le programme copie bizarrement le dossier dans  &lt;span class=&quot;italic&quot;&gt;/usr/local&lt;/span&gt; . Il suffit donc de le déplacer :&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;&lt;div class=&quot;code&quot;&gt;&amp;gt; sudo mv /usr/local/MySQLCOM /Library/StartupItems&lt;br /&gt;
Password:&lt;/div&gt;&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Puis il ne reste plus qu'a lancer le serveur.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;code&quot;&gt;&amp;gt; sudo /Library/StartupItems/MySQLCOM/MySQLCOM start&lt;br /&gt;
Starting MySQL database server&lt;/div&gt;&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;</description>
            <pubDate>Wed, 13 Feb 2008 14:11:27 +0100</pubDate>
            <link>http://www.ornthalas.net/notes/190/MySQL%20ne%20demarre%20pas%20automatiquement%20sous%20Mac%20OSX</link>
			<category>notes</category>
        </item>
        <item>
	   <title>PHP, file_put_contents et permission denied ?</title>
	    <description>&lt;p&gt;J'ai récemment découvert quelques comportements étranges de PHP. Entre autres, j'ai eu affaire a une série de &amp;quot;permission denied&amp;quot; particulièrement persistante, lorsque je voulais enregistrer des fichiers ou créer des dossiers. Pour éviter que ce problème rende chauve d'autres que moi, voici l'explication :&lt;/p&gt;
&lt;p&gt;Tout d'abord, posons les points sur les i, voici la liste des idioties que je n'ai PAS faites :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt; Ne pas avoir vérifié quel est l'utilisateur réel d'Apache (et donc de PHP) a l'aide d'un simple  &lt;span class=&quot;italic&quot;&gt;phpinfo()&lt;/span&gt; , en regardant la ligne &amp;quot; &lt;span class=&quot;italic&quot;&gt;User/Group&lt;/span&gt; &amp;quot;.&lt;/li&gt;
&lt;li&gt; Ne pas mettre les droits d'écriture pour l'utilisateur d'Apache ( &lt;span class=&quot;italic&quot;&gt;www&lt;/span&gt;  sur ma machine) sur le dossier dans lequel on veut écrire.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Mais alors pourquoi encore ces warnings persistants ?&lt;/p&gt;
&lt;p&gt;L'erreur a été de mettre dans un destructeur de classe une écriture de fichier (et accessoirement une création de dossier) et de laisser l'objet en question se détruire tout seul lors de la sortie du script. PHP trouve cela suspect, et envoie un joli warning !&lt;/p&gt;
&lt;p&gt;La solution est de détruire soi même manuellement l'objet incrimine avec une affectation a  &lt;span class=&quot;italic&quot;&gt;null&lt;/span&gt;  pour faire disparaitre ce warning encombrant.&lt;/p&gt;
&lt;p&gt;Voici un petit code explicatif :&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;code&quot;&gt;&lt;ol&gt;&lt;li style=&quot;color: #183a43;&quot;&gt;&lt;div style=&quot;font-family: 'Courier New', Courier, monospace; font-weight: normal;&quot;&gt;&lt;span style=&quot;color: #2f892f;&quot;&gt;class&lt;/span&gt; Test&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;color: #183a43;&quot;&gt;&lt;div style=&quot;font-family: 'Courier New', Courier, monospace; font-weight: normal;&quot;&gt;&lt;span style=&quot;color: #2f892f;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;color: #183a43;&quot;&gt;&lt;div style=&quot;font-family: 'Courier New', Courier, monospace; font-weight: normal;&quot;&gt;&amp;nbsp; &lt;span style=&quot;color: #2f892f;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #2f892f;&quot;&gt;function&lt;/span&gt; __construct&lt;span style=&quot;color: #2f892f;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #2f892f;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;color: #183a43;&quot;&gt;&lt;div style=&quot;font-family: 'Courier New', Courier, monospace; font-weight: normal;&quot;&gt;&amp;nbsp; &lt;span style=&quot;color: #2f892f;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;color: #183a43;&quot;&gt;&lt;div style=&quot;font-family: 'Courier New', Courier, monospace; font-weight: normal;&quot;&gt;&amp;nbsp; &lt;span style=&quot;color: #2f892f;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;color: #183a43;&quot;&gt;&lt;div style=&quot;font-family: 'Courier New', Courier, monospace; font-weight: normal;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;color: #183a43;&quot;&gt;&lt;div style=&quot;font-family: 'Courier New', Courier, monospace; font-weight: normal;&quot;&gt;&amp;nbsp; &lt;span style=&quot;color: #2f892f;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #2f892f;&quot;&gt;function&lt;/span&gt; __destruct&lt;span style=&quot;color: #2f892f;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #2f892f;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;color: #183a43;&quot;&gt;&lt;div style=&quot;font-family: 'Courier New', Courier, monospace; font-weight: normal;&quot;&gt;&amp;nbsp; &lt;span style=&quot;color: #2f892f;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;color: #183a43;&quot;&gt;&lt;div style=&quot;font-family: 'Courier New', Courier, monospace; font-weight: normal;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #2f892f;&quot;&gt;file_put_contents&lt;/span&gt;&lt;span style=&quot;color: #2f892f;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;'test.txt'&lt;/span&gt;, &lt;span style=&quot;color: #ff0000;&quot;&gt;'tralala'&lt;/span&gt;&lt;span style=&quot;color: #2f892f;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;color: #183a43;&quot;&gt;&lt;div style=&quot;font-family: 'Courier New', Courier, monospace; font-weight: normal;&quot;&gt;&amp;nbsp; &lt;span style=&quot;color: #2f892f;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;color: #183a43;&quot;&gt;&lt;div style=&quot;font-family: 'Courier New', Courier, monospace; font-weight: normal;&quot;&gt;&lt;span style=&quot;color: #2f892f;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;color: #183a43;&quot;&gt;&lt;div style=&quot;font-family: 'Courier New', Courier, monospace; font-weight: normal;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;color: #183a43;&quot;&gt;&lt;div style=&quot;font-family: 'Courier New', Courier, monospace; font-weight: normal;&quot;&gt;&lt;span style=&quot;color: #3c4a8c;&quot;&gt;$test&lt;/span&gt; = &lt;span style=&quot;color: #2f892f;&quot;&gt;new&lt;/span&gt; Test&lt;span style=&quot;color: #2f892f;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #2f892f;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;/div&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Ceci provoque :&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;code&quot;&gt;Warning: file_put_contents(test.txt) [function.file-put-contents]: failed to open stream: Permission denied in test.php on line 9&lt;/div&gt;&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Pour éviter le souci, donc, il faut ajouter cette dernière ligne a la fin du script :&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;color: #3c4a8c;&quot;&gt;$test&lt;/span&gt; = &lt;span style=&quot;color: #2f892f;&quot;&gt;null&lt;/span&gt;;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;
&lt;p&gt;...et le warning disparait !&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;</description>
            <pubDate>Mon, 11 Feb 2008 16:30:28 +0100</pubDate>
            <link>http://www.ornthalas.net/notes/189/PHP%2C%20file_put_contents%20et%20permission%20denied%20%3F</link>
			<category>notes</category>
        </item>
        <item>
	   <title>New website</title>
	    <description>&lt;p&gt;Here is the new ouronos.info website. Well, why a new website ?&lt;/p&gt;
&lt;p&gt;First I had to change the design. The old one became ugly to me, and I had a vicerous need to create some new. After lots of trials, no one was good enough to me. I finally made this one, not too bad I think, but with a very good advantage: its genericity. I will be able to create very easily in the future new designs using this one for a base.&lt;/p&gt;
&lt;p&gt;I didn't have time to create a new website. I had ambitions about generic engine in PHP, advanced wiki text inputs, lots of capabilities... and no time to realize them all. Additionnaly, I had lots of work at school with hard 80~105 h work weeks.&lt;/p&gt;
&lt;p&gt;Christmas approaching, I started to search for a job, for next summer. Yes, I'm searching about a job starting August 08 to February 09, abroad (so not in France), except if I find something reaaa~ly interesting here. With this in mind, I had to renew my resume, actualize my projects, etc... I thought that renew my website was part of this work, so I decided to use some of my free time during my Christmas vacation to do it.&lt;/p&gt;
&lt;p&gt;Well, this website is coded like a wiki, and has a blog/news module for these notes. I think it's the best suited for what I want to put here. So the category Notes is... for everyday's notes, not only about IT; Articles: I'm thinking about articles to write here, just let me some time for them; Projects for explanations and links about my IT projects; Resume, Links and Contacts: nothing to explain.&lt;/p&gt;
&lt;p&gt;I will not write here only in French (as you can see), because I want that foreign people can read it, and because I want to improve my English (and perhaps other languages).&lt;/p&gt;
&lt;p&gt;This website is of course still in development because I want more capabilities for writing, but of course I will only update its code if I need a new functionnality.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;</description>
            <pubDate>Wed, 28 Nov 2007 19:35:22 +0100</pubDate>
            <link>http://www.ornthalas.net/notes/35/New%20website</link>
			<category>notes</category>
        </item>
        <item>
	   <title>Bistromathique</title>
	    <description>&lt;p&gt;Nous avons planché sur plusieurs projets en langage C depuis le début de l'année, mais un seul a réellement retenu mon attention : il s'agit de la Bistromathique. Qu'est ce que cela ? Il s'agit d'une calculatrice capable de travailler sur des grandes bases (ici on a implémenté jusqu'à la base 249) et sur des nombres entiers signés potentiellement infinis (nous nous sommes limités à une expression ayant pour taille maximale 4 294 967 295 caractères).&lt;/p&gt;
&lt;p&gt;J'ai commencé par travailler sur une représentation en tableaux de caractères (tableaux d'entiers 8 bits non signés : des unsigned char* sur archi 32 bits), en implémentant l'addition, la soustraction et la multiplication scolaire, ainsi qu'un algorithme proche de celui de Knuth pour la division et le modulo. J'ai utilisé les tableaux en Big Endian pour faciliter les opérations commençant sur les poids faibles, et pour éliminer rapidement les 0 non-significatifs. De plus, le décalage à gauche étant plus souvent utilisé que le décalage à droite, cette représentation de chiffres était doublement intéressante.&lt;/p&gt;
&lt;p class=&quot;center&quot;&gt; &lt;a href=&quot;/data/img/92/calculatrice.png&quot;&gt;&lt;img src=&quot;/data/img/92/calculatrice_pt.png&quot; alt=&quot;calculatrice.png&quot; class=&quot;img&quot; /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Ma première grosse optimisation a été de récupérer les buffers déjà alloués pour les stocker dans une chaine de buffers vides. Mine de rien, j'ai multiplié par au moins 50 la vitesse de ma bistro avec cette astuce ! En effet, j'allouais pour chaque opérande de mon expression, ce qui faisait des milliers de mallocs ! Grâce à cette technique, sans même me casser la tête à trier les buffers vides dans la liste chainée, je suis descendu entre 10 et 25 mallocs sur tout le programme ! (Mes tests étaient composés d'expressions de 10 Mo et d'opérandes de 1 ko à 10 ko.)&lt;/p&gt;
&lt;p&gt;J'ai ensuite transformé le programme pour qu'il utilise des tableaux d'entiers 32 bits non signés (unsigned long* ou unsigned int* sur archi 32 bits) et j'ai adapté l'addition et la soustraction. Voyant que les résultats étaient plus lents sur ceux-ci, j'ai abandonné cette voie de recherche (mauvaise pioche, j'aurais du continuer) : en effet, cette implémentation nécessite 3 parcours linéaires pour les additions et soustractions, mais accélère considérablement les multiplications !&lt;/p&gt;
&lt;p&gt;Ensuite, pour accélérer ma multiplication, j'ai travaillé sur l'algorithme de Karatsuba. Malgré mes efforts sur la gestion mémoire, je n'ai pas pu empêcher l'allocation de deux structures de nombres et des chaines de caractères les accompagnant à chaque récursion de l'algorithme, ce qui a multiplié par 12 le nombre d'appels systèmes de mon programme sur mes tests. La conséquence de cela a été qu'en utilisant Karatsuba plutôt que la multiplication naïve, je doublais le temps de calcul.&lt;/p&gt;
&lt;p&gt;Pressé par le temps, je me suis rabattu sur une optimisation de la multiplication naïve en utilisant seulement pour elle la représentation en tableaux d'unsigned long. Le gros point faible est qu'à chaque multiplication, je fais trois conversions : deux pour passer les deux opérandes en unsigned long*, et une pour repasser le résultat en unsigned char*. Malgré cela, mes résultats sur la multiplication naïve on été fulgurants (division par 9 à 18 du temps de calcul)&lt;/p&gt;
&lt;p&gt;J'ai ensuite été contraint à rendre mon travail, timeout projet oblige.&lt;/p&gt;
&lt;p class=&quot;center&quot;&gt; &lt;a href=&quot;/data/img/92/insert brain here.png&quot;&gt;&lt;img src=&quot;/data/img/92/insert brain here_pt.png&quot; alt=&quot;insert brain here.png&quot; class=&quot;img&quot; /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Mes idées restantes si j'avais encore eu du temps :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt; Repasser entièrement sur des tableaux d'unsigned long, tellement plus rapides pour les opérations complexes (multiplication, division et modulo).&lt;/li&gt;
&lt;li&gt; Retravailler Karatsuba notamment en allouant sur la pile plutôt que sur le tas à l'aide des tableaux dynamiques apportés par le C99 auquel nous avions droit&lt;/li&gt;
&lt;li&gt; Trouver une astuce pour calculer rapidement l'heuristique de mon algorithme de Knuth modifié avec la nouvelle représentation des nombres.&lt;/li&gt;
&lt;li&gt; Pouvoir gérer l'expression originale comme un buffer utilisable, donc pour cela déterminer les parties d'expression traitées pour utiliser cet espace mémoire obsolète : celui-ci était alloué à 10 Mo minimum, ca aurait été un gain considérable !&lt;/li&gt;
&lt;li&gt; Permettre deux représentations de nombres en parallèle avec conversion éventuelle selon le type d'opération à effectuer pour accélérer les calculs type addition/soustraction seulement lorsque les opérandes viennent de l'expression originale)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Au final, je peux dire que ce projet m'a énormément appris, tant sur la gestion mémoire que sur de nouveaux algos (parseur LL d'expression mathématique, Karatsuba, Knuth...) ou sur l'expérience du debug (maintenant je ne peux plus travailler sans Valgrind tellement c'est utile).&lt;/p&gt;
&lt;p&gt; &lt;span class=&quot;italic&quot;&gt; &lt;span class=&quot;underline&quot;&gt;Note&lt;/span&gt;  : Je ne peux pas donner le code source ici, simplement parce que d'autres épitéens ont des chances de tomber sur cette page alors qu'ils ont le projet a coder. Si certaines personnes veulent voir mon travail, qu'elles me contactent.&lt;/span&gt; &lt;/p&gt;
&lt;p&gt;&lt;/p&gt;</description>
            <pubDate>Mon, 29 Oct 2007 18:42:12 +0100</pubDate>
            <link>http://www.ornthalas.net/notes/92/Bistromathique</link>
			<category>notes</category>
        </item>
        <item>
	   <title>IE6 et le PNG transparent</title>
	    <description>&lt;p&gt;Tout web-développeur a déjà été confronté à ce problème : IE6 ne gére pas la transparence des PNG. De multiples solutions ont été inventées pour essayer d'y remédier.&lt;/p&gt;
&lt;p&gt;Deux problèmes se posent :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt; La gestion des images (balises &amp;lt;img&amp;gt;)&lt;/li&gt;
&lt;li&gt; La gestion des fonds (propriété CSS background-image)&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;center&quot;&gt; &lt;a href=&quot;/data/img/94/kill ie.png&quot;&gt;&lt;img src=&quot;/data/img/94/kill ie_pt.png&quot; alt=&quot;kill ie&quot; class=&quot;img&quot; /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Pour le problème des images, le script de  &lt;a href=&quot;http://homepage.ntlworld.com/bobosola/pnghowto.htm&quot; class=&quot;external_link&quot;&gt;ce site web&lt;/a&gt;  fonctionne à merveille. Pour le problème des fonds de blocs, c'est une autre paire de manches... IE6 ne peut pas gérer les PNG transparents avec répétition (c'est impossible à corriger), mais tous les scripts que j'ai pu dénicher sur internet appliquent soit au cas par cas une règle (celle du filtre DirectX), soit de manière généraliste ce filtre sur toute image PNG (empêchant de la même façon l'utilisation de PNG non-transparents comme image répétitive).&lt;/p&gt;
&lt;p&gt;Pour pallier à cela, j'ai donc codé un petit script à poser dans votre code, qui se chargera de gérer tous les fonds transparents non-répétés :&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;code&quot;&gt;&lt;ol&gt;&lt;li style=&quot;color: #183a43;&quot;&gt;&lt;div style=&quot;font-family: 'Courier New', Courier, monospace; font-weight: normal;&quot;&gt;&lt;span style=&quot;color: #000066;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;navigator.&lt;span style=&quot;color: #006600;&quot;&gt;platform&lt;/span&gt; == &lt;span style=&quot;color: #3366CC;&quot;&gt;&amp;quot;Win32&amp;quot;&lt;/span&gt; &amp;amp;&amp;amp; navigator.&lt;span style=&quot;color: #006600;&quot;&gt;appName&lt;/span&gt; == &lt;span style=&quot;color: #3366CC;&quot;&gt;&amp;quot;Microsoft Internet Explorer&amp;quot;&lt;/span&gt; &amp;amp;&amp;amp; window.&lt;span style=&quot;color: #006600;&quot;&gt;attachEvent&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;color: #183a43;&quot;&gt;&lt;div style=&quot;font-family: 'Courier New', Courier, monospace; font-weight: normal;&quot;&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;color: #183a43;&quot;&gt;&lt;div style=&quot;font-family: 'Courier New', Courier, monospace; font-weight: normal;&quot;&gt;&amp;nbsp; &amp;nbsp; window.&lt;span style=&quot;color: #006600;&quot;&gt;attachEvent&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #3366CC;&quot;&gt;&amp;quot;onload&amp;quot;&lt;/span&gt;, alphaBackgrounds&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;color: #183a43;&quot;&gt;&lt;div style=&quot;font-family: 'Courier New', Courier, monospace; font-weight: normal;&quot;&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;color: #183a43;&quot;&gt;&lt;div style=&quot;font-family: 'Courier New', Courier, monospace; font-weight: normal;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;color: #183a43;&quot;&gt;&lt;div style=&quot;font-family: 'Courier New', Courier, monospace; font-weight: normal;&quot;&gt;&lt;span style=&quot;color: #003366;&quot;&gt;function&lt;/span&gt; alphaBackgrounds&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;color: #183a43;&quot;&gt;&lt;div style=&quot;font-family: 'Courier New', Courier, monospace; font-weight: normal;&quot;&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;color: #183a43;&quot;&gt;&lt;div style=&quot;font-family: 'Courier New', Courier, monospace; font-weight: normal;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #000066;&quot;&gt;for&lt;/span&gt; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;i = &lt;span style=&quot;color: #CC0000;&quot;&gt;0&lt;/span&gt;; i &amp;lt; document.&lt;span style=&quot;color: #006600;&quot;&gt;all&lt;/span&gt;.&lt;span style=&quot;color: #006600;&quot;&gt;length&lt;/span&gt;; i++&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;color: #183a43;&quot;&gt;&lt;div style=&quot;font-family: 'Courier New', Courier, monospace; font-weight: normal;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;color: #183a43;&quot;&gt;&lt;div style=&quot;font-family: 'Courier New', Courier, monospace; font-weight: normal;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #003366;&quot;&gt;var&lt;/span&gt; dai = document.&lt;span style=&quot;color: #006600;&quot;&gt;all&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#91;&lt;/span&gt;i&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#93;&lt;/span&gt;;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;color: #183a43;&quot;&gt;&lt;div style=&quot;font-family: 'Courier New', Courier, monospace; font-weight: normal;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #003366;&quot;&gt;var&lt;/span&gt; bg = dai.&lt;span style=&quot;color: #006600;&quot;&gt;currentStyle&lt;/span&gt;.&lt;span style=&quot;color: #006600;&quot;&gt;backgroundImage&lt;/span&gt;;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;color: #183a43;&quot;&gt;&lt;div style=&quot;font-family: 'Courier New', Courier, monospace; font-weight: normal;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #000066;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;bg &amp;amp;&amp;amp; bg.&lt;span style=&quot;color: #006600;&quot;&gt;match&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #3366CC;&quot;&gt;'/&lt;span style=&quot;color: #000099;&quot;&gt;\.&lt;/span&gt;png&amp;quot;|&lt;span style=&quot;color: #000099;&quot;&gt;\'&lt;/span&gt;&lt;span style=&quot;color: #000099;&quot;&gt;\)&lt;/span&gt;$/i'&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt; != &lt;span style=&quot;color: #003366;&quot;&gt;null&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;color: #183a43;&quot;&gt;&lt;div style=&quot;font-family: 'Courier New', Courier, monospace; font-weight: normal;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;color: #183a43;&quot;&gt;&lt;div style=&quot;font-family: 'Courier New', Courier, monospace; font-weight: normal;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #003366;&quot;&gt;var&lt;/span&gt; mypng = bg.&lt;span style=&quot;color: #006600;&quot;&gt;substring&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #CC0000;&quot;&gt;5&lt;/span&gt;, bg.&lt;span style=&quot;color: #006600;&quot;&gt;length&lt;/span&gt; - &lt;span style=&quot;color: #CC0000;&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;color: #183a43;&quot;&gt;&lt;div style=&quot;font-family: 'Courier New', Courier, monospace; font-weight: normal;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #000066;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;dai.&lt;span style=&quot;color: #006600;&quot;&gt;currentStyle&lt;/span&gt;.&lt;span style=&quot;color: #006600;&quot;&gt;backgroundRepeat&lt;/span&gt; == &lt;span style=&quot;color: #3366CC;&quot;&gt;'no-repeat'&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;color: #183a43;&quot;&gt;&lt;div style=&quot;font-family: 'Courier New', Courier, monospace; font-weight: normal;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;color: #183a43;&quot;&gt;&lt;div style=&quot;font-family: 'Courier New', Courier, monospace; font-weight: normal;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; dai.&lt;span style=&quot;color: #006600;&quot;&gt;style&lt;/span&gt;.&lt;span style=&quot;color: #006600;&quot;&gt;filter&lt;/span&gt; = &lt;span style=&quot;color: #3366CC;&quot;&gt;&amp;quot;progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled=true, src='&amp;quot;&lt;/span&gt;+mypng+&lt;span style=&quot;color: #3366CC;&quot;&gt;&amp;quot;', sizingMethod='crop')&amp;quot;&lt;/span&gt;;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;color: #183a43;&quot;&gt;&lt;div style=&quot;font-family: 'Courier New', Courier, monospace; font-weight: normal;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; dai.&lt;span style=&quot;color: #006600;&quot;&gt;style&lt;/span&gt;.&lt;span style=&quot;color: #006600;&quot;&gt;backgroundImage&lt;/span&gt; = &lt;span style=&quot;color: #3366CC;&quot;&gt;'none'&lt;/span&gt;;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;color: #183a43;&quot;&gt;&lt;div style=&quot;font-family: 'Courier New', Courier, monospace; font-weight: normal;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;color: #183a43;&quot;&gt;&lt;div style=&quot;font-family: 'Courier New', Courier, monospace; font-weight: normal;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;color: #183a43;&quot;&gt;&lt;div style=&quot;font-family: 'Courier New', Courier, monospace; font-weight: normal;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;color: #183a43;&quot;&gt;&lt;div style=&quot;font-family: 'Courier New', Courier, monospace; font-weight: normal;&quot;&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Comme vous pouvez le voir (ou pas), il faut que l'image PNG à traiter possède la propriété CSS background-repeat: &amp;quot;no-repeat&amp;quot; pour fonctionner. Cela permet d'éviter de dégommer tous les fonds PNG non-transparents qui pourraient se répéter.&lt;/p&gt;
&lt;p&gt;Une inclusion de ceci entre les balises &amp;lt;head&amp;gt;, newpngfix.js étant le fichier contenant le script ci-dessus, et c'est gagné :)&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;code&quot;&gt;&lt;ol&gt;&lt;li style=&quot;color: #183a43;&quot;&gt;&lt;div style=&quot;font-family: 'Courier New', Courier, monospace; font-weight: normal;&quot;&gt;&lt;span style=&quot;color: #00bbdd;&quot;&gt;&amp;lt;!--[if gte IE 5.5]&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;color: #183a43;&quot;&gt;&lt;div style=&quot;font-family: 'Courier New', Courier, monospace; font-weight: normal;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #00bbdd;&quot;&gt;&amp;lt;![if lt IE 7]&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;color: #183a43;&quot;&gt;&lt;div style=&quot;font-family: 'Courier New', Courier, monospace; font-weight: normal;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;lt;script&lt;/span&gt; &lt;span style=&quot;color: #000066;&quot;&gt;defer&lt;/span&gt; &lt;span style=&quot;color: #000066;&quot;&gt;type&lt;/span&gt;=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;text/javascript&amp;quot;&lt;/span&gt; &lt;span style=&quot;color: #000066;&quot;&gt;src&lt;/span&gt;=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;newpngfix.js&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;color: #183a43;&quot;&gt;&lt;div style=&quot;font-family: 'Courier New', Courier, monospace; font-weight: normal;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;lt;script&lt;/span&gt; &lt;span style=&quot;color: #000066;&quot;&gt;defer&lt;/span&gt; &lt;span style=&quot;color: #000066;&quot;&gt;type&lt;/span&gt;=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;text/javascript&amp;quot;&lt;/span&gt; &lt;span style=&quot;color: #000066;&quot;&gt;src&lt;/span&gt;=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;pngfix.js&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;color: #183a43;&quot;&gt;&lt;div style=&quot;font-family: 'Courier New', Courier, monospace; font-weight: normal;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #00bbdd;&quot;&gt;&amp;lt;![endif]&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;color: #183a43;&quot;&gt;&lt;div style=&quot;font-family: 'Courier New', Courier, monospace; font-weight: normal;&quot;&gt;&lt;span style=&quot;color: #00bbdd;&quot;&gt;&amp;lt;![endif]--&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;
&lt;p&gt;A propos,  &lt;a href=&quot;http://www.ornthalas.net/notes/93/photo.ornthalas.net&quot; class=&quot;external_link&quot;&gt;photo.ornthalas.net&lt;/a&gt;  fonctionne maintenant sous IE6 :) Pas sous IE5.5 : y'a des problèmes d'alignement, et je vais pas me faire chier pour les utilisateurs de windows 98, faut pas déconner non plus.&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;</description>
            <pubDate>Mon, 3 Sep 2007 15:46:45 +0200</pubDate>
            <link>http://www.ornthalas.net/notes/94/IE6%20et%20le%20PNG%20transparent</link>
			<category>notes</category>
        </item>
        <item>
	   <title>CSS dotNetsoul</title>
	    <description>&lt;p&gt;J'ai refait la feuille de style de dotNetSoul, car elle était vraiment nulle.&lt;/p&gt;
&lt;p&gt;Déjà que le logiciel vole vraiment pas haut, en plus la feuille de style de base est illisible. On se demande si la personne qui a codé le logiciel ne travaillait pas sur un écran en 640x480...&lt;/p&gt;
&lt;p&gt;Ca peut en intéresser certains, donc  &lt;a href=&quot;http://partage.ornthalas.net/public/dotNetSoul.css&quot; class=&quot;external_link&quot;&gt;la voici&lt;/a&gt; , à placer dans votre dossier d'install (typiquement dans C:\Program Files\dotNetSoul\Styles).&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;</description>
            <pubDate>Sun, 2 Sep 2007 00:35:12 +0200</pubDate>
            <link>http://www.ornthalas.net/notes/95/CSS%20dotNetsoul</link>
			<category>notes</category>
        </item>
        <item>
	   <title>photo.ornthalas.net</title>
	    <description>&lt;p&gt; &lt;a href=&quot;/data/img/93/photo-ornthalas-net.png&quot; class=&quot;right&quot;&gt;&lt;img src=&quot;/data/img/93/photo-ornthalas-net_pt.png&quot; alt=&quot;photo.ornthalas.net&quot; class=&quot;img&quot; /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Je viens de réaliser à la vitesse éclair un site web de photographies (en deux jours seulement, entrecoupés de périodes de vie sociale et de révisions de maths). Ce site est un recueil des photos que je considère comme étant parmi mes meilleurs clichés.&lt;/p&gt;
&lt;p&gt;Le site est régulièrement mis à jour, notamment grâce au fait que j'utilise maintenant Photoshop Lightroom pour retoucher et classer mes photos. En effet, une fois retouchées, les photos sélectionnées sont envoyées par le logiciel sur le site, qui se charge ensuite de tout.&lt;/p&gt;
&lt;p&gt;J'ai essayé de concevoir un design très léger, sobre, sur des teintes de gris pour laisser aux photographies la gamme de couleurs, et donc renforcer leur impact aux yeux du visiteur. N'hésitez pas à me dire ce que vous en pensez !&lt;/p&gt;
&lt;p&gt;L'adresse :  &lt;a href=&quot;http://photo.ornthalas.net/&quot; class=&quot;external_link&quot;&gt;http://photo.ornthalas.net/&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&lt;/p&gt;</description>
            <pubDate>Mon, 20 Aug 2007 21:43:54 +0200</pubDate>
            <link>http://www.ornthalas.net/notes/93/photo.ornthalas.net</link>
			<category>notes</category>
        </item>
        <item>
	   <title>Décensurer MSN Messenger</title>
	    <description>&lt;p&gt;Deux solutions :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt; La première ne fonctionne qu'avec les liens : il faut remplacer tous les &amp;quot;.info&amp;quot; en &amp;quot;.%69nfo&amp;quot;. Ainsi, le lien affichera &amp;quot;.%69nfo&amp;quot; mais le message passera quand même et si on clique dessus ce sera la bonne adresse qui s'ouvrira.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt; &lt;a href=&quot;/data/img/96/msn fucker.png&quot; class=&quot;right&quot;&gt;&lt;img src=&quot;/data/img/96/msn fucker_pt.png&quot; alt=&quot;MSN Fucker&quot; class=&quot;img&quot; /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt; La deuxième consiste à utiliser  &lt;a href=&quot;http://msn.voxar.net/&quot; class=&quot;external_link&quot;&gt;une extension&lt;/a&gt;  pour  &lt;a href=&quot;http://www.msgpluslive.fr/&quot; class=&quot;external_link&quot;&gt;Messenger Plus&lt;/a&gt;  (pour Windows Live Messenger donc) qui réécrit les mots bloqués par le protocole afin que le message soit bien reçu par son destinataire. Les liens ne fonctionnent pas mais au moins tout est automatique. La liste des mots bloqués est mise à jour régulièrement et est téléchargeable  &lt;a href=&quot;http://msn.voxar.net/banned.txt&quot; class=&quot;external_link&quot;&gt;ici&lt;/a&gt; . C'est incroyable que tant de mots soient blacklistés !!&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;/p&gt;</description>
            <pubDate>Tue, 14 Aug 2007 18:50:12 +0200</pubDate>
            <link>http://www.ornthalas.net/notes/96/D%C3%A9censurer%20MSN%20Messenger</link>
			<category>notes</category>
        </item>
        <item>
	   <title>Censure supplémentaire de MSN Messenger ?</title>
	    <description>&lt;p&gt;On le savait déjà, Microsoft censurait le contenu des messages envoyés via MSN Messenger. Les messages contenant des mots comme :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt; download.php?&lt;/li&gt;
&lt;li&gt; gallery.php?&lt;/li&gt;
&lt;li&gt; profile.php?&lt;/li&gt;
&lt;li&gt; .scr&lt;/li&gt;
&lt;li&gt; .pif&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;n'étaient purement et simplement jamais envoyés.&lt;/p&gt;
&lt;p&gt;Eh bien, la nouveauté de la semaine, c'est que MSN blackliste maintenant le mot&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt; .info&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Incroyablement, il devient impossible d'envoyer des adresses de sites comportant cette extension, et par la même, l'adresse de ce blog !! Cela m'a mis la puce à l'oreille. Non ce n'était pas mon MSN Messenger qui déconnait, des copains ont testé aussi ! Non ce n'est pas dû au client Messenger, les échanges entre Gaim provoquent les même résultats !&lt;/p&gt;
&lt;p class=&quot;center&quot;&gt; &lt;a href=&quot;/data/img/167/grr.png&quot;&gt;&lt;img src=&quot;/data/img/167/grr_pt.png&quot; alt=&quot;grr.png&quot; class=&quot;img&quot; /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Encore la censure des &amp;quot;download.php?&amp;quot; etc... ne m'embêtait pas (mais reste scandaleuse), autant la censure du &amp;quot;.info&amp;quot; m'embête au plus haut point ! Dire qu'on ne peut pas se passer de MSN car tout le monde l'utilise maintenant... Ca donne envie de cracher (plus si gratuitement que ca) sur Microsoft.&lt;/p&gt;
&lt;p&gt;Le plus marrant, c'est que personne n'a visiblement remarqué cette absence monstrueuse des &amp;quot;.info&amp;quot; dans les messages, mes recherches Google sur le sujet restant infructueuses... Quelqu'un a-t-il des infos la dessus ?&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;</description>
            <pubDate>Sun, 5 Aug 2007 19:07:37 +0200</pubDate>
            <link>http://www.ornthalas.net/notes/167/Censure%20suppl%C3%A9mentaire%20de%20MSN%20Messenger%20%3F</link>
			<category>notes</category>
        </item>
        <item>
	   <title>Masterpass v1.2</title>
	    <description>&lt;p&gt;Au programme de la version 1.2 :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt; L'ajout de la possibilité de passer d'un champ  &lt;span class=&quot;italic&quot;&gt;text&lt;/span&gt;  à un champ  &lt;span class=&quot;italic&quot;&gt;password&lt;/span&gt;  : en gros, si un site a mis un champ de type  &lt;span class=&quot;italic&quot;&gt;text&lt;/span&gt;  dans lequel on peut lire ce qu'on écrit pour entrer son mot de passe, on a la possibilité de le transformer en champ  &lt;span class=&quot;italic&quot;&gt;password&lt;/span&gt; , donc avec un contenu remplacé par des étoiles, et la possibilité de générer un mot de passe dedans.&lt;/li&gt;
&lt;li&gt; Il est maintenant possible de générer des logins ! Cela permet de s'inscrire rapidement et anonymement sur un site. Exemple flagrant : l'inscription bidon pour télécharger un logiciel.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;/p&gt;</description>
            <pubDate>Sun, 5 Aug 2007 18:14:02 +0200</pubDate>
            <link>http://www.ornthalas.net/notes/98/Masterpass%20v1.2</link>
			<category>notes</category>
        </item>
        <item>
	   <title>Masterpass v1.1</title>
	    <description>&lt;p&gt;Quelques nouveautés à l'ordre du jour sur Masterpass :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt; Tout d'abord, j'ai continué le développement et ai achevé la version 1.1. Celle-ci contient notamment la possibilité de générer des mots de passe pour des hostname différents de celui de la page sur laquelle vous êtes. Cela peut être utile dans le cas de sites se connectant sur une même base de données mais avec des hostnames différents.&lt;/li&gt;
&lt;li&gt; J'ai aussi un peu revu la localisation. Les traductions sont meilleures, l'extension est disponible également en anglais.&lt;/li&gt;
&lt;li&gt; J'ai envoyé mon extension sur  &lt;a href=&quot;http://addons.mozilla.org/&quot; class=&quot;external_link&quot;&gt;addons.mozilla.org&lt;/a&gt; , elle est actuellement dans le bac a sable, en cours de tests.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Il faudra vraiment que je designe la page principale, ainsi que je la complète et traduise. En tout cas ca aurait l'air plus sérieux, car là ca craint. J'attends toujours des commentaires... (ne désespérons pas...)&lt;/p&gt;
&lt;p&gt; &lt;span class=&quot;italic&quot;&gt;EDITION :&lt;/span&gt; &lt;/p&gt;
&lt;p&gt;Ca y est, j'ai craqué, j'ai designé la page officielle de Masterpass à la sauce Mozilla. Ca vaut le coup, même si ca a été long a faire. J'en ai profité pour améliorer la description de l'extension : j'avais écrit l'ancienne sous l'émotion, et ca bafouillait un peu.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;</description>
            <pubDate>Sat, 4 Aug 2007 09:31:09 +0200</pubDate>
            <link>http://www.ornthalas.net/notes/99/Masterpass%20v1.1</link>
			<category>notes</category>
        </item>
        <item>
	   <title>Extension Firefox Masterpass</title>
	    <description>&lt;p&gt;Je viens de coder ma première extension Firefox !!&lt;/p&gt;
&lt;p&gt;Il s'agit d'une extension qui permet de générer des mots de passe.&lt;/p&gt;
&lt;p&gt;Globalement à quoi ca sert ? Ca permet d'avoir pour chaque site visité un mot de passe compliqué et différent des autres. Il est généré. Pour que l'extension puisse retrouver les mots de passe, il faut lui donner un mot de passe nommé Masterpass, le mot de passe général, qui sert a générer tous les autres. Désormais, vous n'aurez plus qu'à retenir un seul mot de passe sur le web, ce sera votre Masterpass !&lt;/p&gt;
&lt;p&gt;Lors de l'inscription sur un site (ou lors de l'identification), il suffit de faire un clic droit dans le champ &amp;quot;password&amp;quot; (ou mot de passe) -&amp;gt; &amp;quot;Générer un mot de passe&amp;quot;. Si Firefox ne connait pas votre Masterpass, il vous le demandera, puis il génèrera un mot de passe propre à votre Masterpass et au site et remplira le champ.&lt;/p&gt;
&lt;p&gt;Si vous n'utilisez pas Firefox un jour (quelle idée ? Parti dépanner quelqu'un qui ne l'a pas installé ?), vous pouvez malgré tout récupérer vos mots de passe sur le site de Masterpass :  &lt;a href=&quot;http://masterpass.ornthalas.net/&quot; class=&quot;external_link&quot;&gt;http://masterpass.ornthalas.net/&lt;/a&gt; .&lt;/p&gt;
&lt;p&gt;Votre Masterpass n'est jamais enregistré nulle part en mémoire physique. A la fermeture de Firefox, il disparaitra, tout simplement.&lt;/p&gt;
&lt;p&gt;L'avantage sur les autres systèmes de génération de mots de passe est que l'algorithme pour retrouver ses mots de passe à partir du Masterpass est très simple (une ligne de code : un md5 tronqué). Bien sur, de part l'algorithme, les mots de passe sont sécurisés et il est impossible de retrouver votre Masterpass.&lt;/p&gt;
&lt;p&gt;Voila, soyez indulgents, c'est ma première extension Firefox. Je l'ai codée en deux jours, pas plus de 5h par jour :) J'attends vos commentaires et suggestions !&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;</description>
            <pubDate>Fri, 3 Aug 2007 23:10:45 +0200</pubDate>
            <link>http://www.ornthalas.net/notes/101/Extension%20Firefox%20Masterpass</link>
			<category>notes</category>
        </item>
        <item>
	   <title>Itunes avec QuickTime Alternative</title>
	    <description>&lt;p&gt;Les utilisateurs de Windows le savent bien, la firme de la pomme se fout de leur gueule en leur fournissant un QuickTime Player absolument a chier, digne d'être classé dans les 3 pires bouses informatiques de l'humanité, aux cotés d'AOL et de Real Player.&lt;/p&gt;
&lt;p&gt;Heureusement, pour lire les vidéos .mov, il existe QuickTime Alternative. Je vais pas blablater plus longtemps la dessus, tout le monde le connait, sinon Google ! Le truc intéressant serait d'installer iTunes SANS installer QuickTime Player qui a pourtant bien l'air obligatoire, de façon à avoir un iTunes bien plus léger.&lt;/p&gt;
&lt;p&gt;La solution pour la dernière version d'iTunes au moment ou j'écris ce billet (la version 7) est la suivante :&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt; Téléchargez et installez QuickTime Alternative&lt;/li&gt;
&lt;li&gt; Téléchargez le pack iTunes+QuickTime (enfin, vous avez pas le choix en fait)&lt;/li&gt;
&lt;li&gt; Avec WinRAR ou un autre utilitaire de décompression, décompressez le .exe qui est en fait une archive autoextractible !&lt;/li&gt;
&lt;li&gt; Dans le dossier ainsi créé contenant les 5 .msi nécessaires à l'installation : AppleMobileDeviceSupport.msi, AppleSoftwareUpdate.msi, iTunes.msi, iTunesSetupAdmin.msi et QuickTime.msi, supprimez ce dernier (puisqu'on en veut pas).&lt;/li&gt;
&lt;li&gt; Ouvrez une console cmd (avec les privilèges admin si vous êtes sous Vista)&lt;/li&gt;
&lt;li&gt; Tapez&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;code&quot;&gt;msiexec.exe /i iTunes.msi&lt;/div&gt;&lt;p&gt;&lt;/p&gt;
&lt;p&gt;et validez :)&lt;/p&gt;
&lt;p&gt;Il va un peu râler durant l'installation, c'est pas grave laissez le ronchonner. Une fois installé, tout marche !&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;</description>
            <pubDate>Fri, 3 Aug 2007 10:00:12 +0200</pubDate>
            <link>http://www.ornthalas.net/notes/102/Itunes%20avec%20QuickTime%20Alternative</link>
			<category>notes</category>
        </item>
        <item>
	   <title>VAIO audio driver</title>
	    <description>&lt;p&gt;J'ai été amené cette semaine à formater un ordinateur portable VAIO VGN-FE11S.&lt;/p&gt;
&lt;p&gt;D'abord, il a fallu sauvegarde le contenu de C:\Drivers, qui contenait une copie de sauvegarde de tous les drivers du VAIO. Si je n'avais pas fait ca, j'étais bon pour retélécharger les 71 Mo de drivers sur le site de VAIO, ce qui aurait été assez embêtant compte tenu du fait que la ou je suis, le téléchargement est limité.&lt;/p&gt;
&lt;p&gt;Après formatage complet (supprimant aussi la partition de sauvegarde-machin-inutile de VAIO) et réinstall d'XP, la réinstallation des drivers s'est faite sans trop de problème (via le Gestionnaire de périphériques).&lt;/p&gt;
&lt;p&gt;La où il y a eu problème, c'est que le driver audio a refusé de s'installer, en me crachant le message &amp;quot;périphérique non détecté&amp;quot;. Pas sympa. J'ai pas mal cherché sur le net. Beaucoup de monde galère la dessus.&lt;/p&gt;
&lt;p&gt;Finalement la solution est la suivante : Il faut télécharger le correctif KB835221 de Microsoft pour que Windows prenne en charge le son &amp;quot;top-de-la-mort-qui-tue-nouvelle-génération&amp;quot;. Bien évidemment, le site de Microsoft est tellement mal fait qu'on ne peut pas facilement télécharger ce satané correctif. Voici un  &lt;a href=&quot;http://couponmeister.com/blog/HD_Audio/KB835221.exe&quot; class=&quot;external_link&quot;&gt;lien&lt;/a&gt;  (je sais pas si il restera longtemps en ligne), sinon googelisez à mort sur le nom du correctif pour trouver une page alternative de téléchargement.&lt;/p&gt;
&lt;p&gt;Une fois le correctif installé, l'install des drivers fonctionne, et le son aussi :)&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;</description>
            <pubDate>Fri, 3 Aug 2007 09:50:54 +0200</pubDate>
            <link>http://www.ornthalas.net/notes/103/VAIO%20audio%20driver</link>
			<category>notes</category>
        </item>
        <item>
	   <title>Astuce MySQL : Accélérer le calcul du nombre de pages</title>
	    <description>&lt;p&gt;Je travaille actuellement sur un script que tout programmeur PHP a eu à faire un jour : sélectionner des données dans une base (un gros SELECT) et couper les résultats sur plusieurs pages. Quasiment tout le monde utilise deux requêtes : une qui récupère les données avec la clause LIMIT qui va bien, et une autre qui calcule le nombre de résultats de la requête sans le LIMIT. Ca fait chercher 2 fois les infos à MySQL, c'est moche et sur des grosses tables ca peut être assez lent.&lt;/p&gt;
&lt;p&gt;La solution consiste à insérer l'option &amp;quot;SQL_CALC_FOUND_ROWS&amp;quot; dans votre première requête ! Par exemple :&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;code&quot;&gt;mysql&amp;gt; SELECT SQL_CALC_FOUND_ROWS mes_champs_a_selectionner FROM ma_table WHERE ma_condition LIMIT ma_limite;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;
&lt;p&gt;On obtient les données de la page demandée (par la clause LIMIT). Reste à savoir le nombre de résultats total, qui a déjà été calculé par MySQL grace à la fameuse option :&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;code&quot;&gt;mysql&amp;gt; SELECT FOUND_ROWS();&lt;/div&gt;&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Et voila, cette deuxième requête sera quasi-instantanée. Pas mal non ? ;)&lt;/p&gt;
&lt;p&gt; &lt;span class=&quot;italic&quot;&gt;Note: ceci ne marche qu'à partir de MySQL 4.1&lt;/span&gt; &lt;/p&gt;
&lt;p&gt;&lt;/p&gt;</description>
            <pubDate>Sat, 9 Jun 2007 09:59:35 +0200</pubDate>
            <link>http://www.ornthalas.net/notes/104/Astuce%20MySQL%20%3A%20Acc%C3%A9l%C3%A9rer%20le%20calcul%20du%20nombre%20de%20pages</link>
			<category>notes</category>
        </item>
        <item>
	   <title>MySQL et le cache</title>
	    <description>&lt;p&gt;Pour ceux qui utilisent MySQL comme système de base de données, sachez qu'il possède un cache. Ce cache permet de multiplier par 238% le temps d'exécution des requêtes d'après la doc de MySQL. Ce cache ne fonctionne bien sur que sur des requetes strictement identiques, mais c'est déjà ca pour accélérer nos scripts :)&lt;/p&gt;
&lt;p&gt;Pour voir s'il est activé, faites ceci :&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;code&quot;&gt;mysql&amp;gt; show variables like 'query%';&lt;br /&gt;
------------------------------------------&lt;br /&gt;
| Variable_name &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| Value &amp;nbsp; |&lt;br /&gt;
|----------------------------------------|&lt;br /&gt;
| query_alloc_block_size &amp;nbsp; &amp;nbsp; &amp;nbsp; | 8192 &amp;nbsp; &amp;nbsp;|&lt;br /&gt;
| query_cache_limit &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| 1048576 |&lt;br /&gt;
| query_cache_min_res_unit &amp;nbsp; &amp;nbsp; | 4096 &amp;nbsp; &amp;nbsp;|&lt;br /&gt;
| query_cache_size &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | 0 &amp;nbsp; &amp;nbsp; &amp;nbsp; |&lt;br /&gt;
| query_cache_type &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | ON &amp;nbsp; &amp;nbsp; &amp;nbsp;|&lt;br /&gt;
| query_cache_wlock_invalidate | OFF &amp;nbsp; &amp;nbsp; |&lt;br /&gt;
| query_prealloc_size &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| 8192 &amp;nbsp; &amp;nbsp;|&lt;br /&gt;
------------------------------------------&lt;/div&gt;&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Bien que la variable query_cache_type soit sur ON, query_cache_size est à zéro, ce qui se traduit dans les faits par un cache de requêtes désactivé. Mettre query_cache_type sur ON (mise en cache de toutes les requêtes SELECT sauf celles avec le mot-clé SQL_NO_CACHE) ou DEMAND (mise en cache des requêtes avec le mot-clé SQL_CACHE uniquement) et affecter à la variable query_cache_size une valeur supérieure à zéro a pour effet d'activer le cache de requêtes.&lt;/p&gt;
&lt;p&gt;Soit par exemple dans ce cas :&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;code&quot;&gt;SET global query_cache_size = 250000000;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Et voila, ce n'est pas bien compliqué !&lt;/p&gt;
&lt;p&gt;Plus d'infos sur  &lt;a href=&quot;http://maximilian.developpez.com/mysql/queryCache/&quot; class=&quot;external_link&quot;&gt;le cache de MySQL&lt;/a&gt; .&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;</description>
            <pubDate>Sat, 9 Jun 2007 09:39:13 +0200</pubDate>
            <link>http://www.ornthalas.net/notes/105/MySQL%20et%20le%20cache</link>
			<category>notes</category>
        </item>
        <item>
	   <title>Le japonais sous Windows</title>
	    <description>&lt;p&gt;Voila, l'information complète est tellement éparpillée sur le net et tellement difficile a synthétiser que j'ai décidé de faire part de mes trouvailles ici :&lt;/p&gt;
&lt;h2&gt;Lire le japonais&lt;/h2&gt;
&lt;p&gt;Déjà, avant d'écrire, il faut pouvoir lire le japonais. Pour cela, il faut activer le support des langues orientales dans Windows.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt; Ouvrir &amp;quot; &lt;span class=&quot;italic&quot;&gt;Démarrer&lt;/span&gt; &amp;quot;&lt;/li&gt;
&lt;li&gt; Choisir &amp;quot; &lt;span class=&quot;italic&quot;&gt;Panneau de configuration&lt;/span&gt; &amp;quot;&lt;/li&gt;
&lt;li&gt; Choisir &amp;quot; &lt;span class=&quot;italic&quot;&gt;Options régionales, date, heure et langue&lt;/span&gt; &amp;quot; (si ça n'apparaît pas, cliquer sur &amp;quot; &lt;span class=&quot;italic&quot;&gt;Basculer vers l'affichage des catégories&lt;/span&gt; &amp;quot; dans la colonne de gauche)&lt;/li&gt;
&lt;li&gt; Choisir &amp;quot; &lt;span class=&quot;italic&quot;&gt;Ajouter d'autres langues&lt;/span&gt; &amp;quot;&lt;/li&gt;
&lt;li&gt; Cocher &amp;quot; &lt;span class=&quot;italic&quot;&gt;Installer les fichiers pour les langues d'Extrême-Orient&lt;/span&gt; &amp;quot; (Il faut avoir au moins 230 Mo d'espace libre)&lt;/li&gt;
&lt;li&gt; Appliquer et redémarrer le pc (il vous sera surement demandé le CD de Windows).&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;Gérer le japonais sur Internet&lt;/h2&gt;
&lt;p&gt;Pour lire sur des pages web, il faut que la page que vous visitez utilise un encodage de caractère étendu : l'Unicode ; donc si le site ne le gère pas, il n'affichera pas de japonais. Si vous concevez des pages web, attention donc à l'Unicode.&lt;/p&gt;
&lt;h2&gt;Ecrire en Japonais&lt;/h2&gt;
&lt;p&gt;Pour écrire en japonais sous Windows, on utilise généralement Microsoft IME, un composant interne à Windows. Pour l'utiliser, il suffit d'ajouter dans les préférences régionales et linguistiques le japonais dans la liste des claviers utilisés : &amp;quot;Panneau de configuration&amp;quot; -&amp;gt; &amp;quot;Clavier&amp;quot; -&amp;gt; &amp;quot;Langue&amp;quot; -&amp;gt; &amp;quot;Ajouter&amp;quot;, et là on peut choisir le japonais dans la liste.&lt;/p&gt;
&lt;p&gt;le Japonais devient donc accessible via la barre de langues. Dans celle-ci, il faut sélectionner &amp;quot;Hiragana&amp;quot; ou &amp;quot;Full width katakana&amp;quot; dans le menu IME de la barre des langues pour pouvoir écrire en japonais (en hiraganas ou en katakanas). Une fois arrivé ici, vous devrez choisir entre écrire en &amp;quot;romanji input&amp;quot; (par exemple : &amp;quot;t&amp;quot;+&amp;quot;q&amp;quot; -&amp;gt; た), ou en &amp;quot;kana input&amp;quot; (&amp;quot;a&amp;quot; -&amp;gt; &amp;quot;た&amp;quot;).&lt;/p&gt;
&lt;h2&gt;Le romanji input&lt;/h2&gt;
&lt;p&gt;Il faut écrire comme on le prononce nous, occidentaux. Par exemple : &amp;quot;わたし&amp;quot; s'écrira &amp;quot;watashi&amp;quot;, Microsoft IME traduisant automatiquement au fur et à mesure que vous écrivez.&lt;/p&gt;
&lt;h3&gt;azerty ? qwerty ?&lt;/h3&gt;
&lt;p&gt;Mais Microsoft IME, conçue pour des américains, suppose par défaut que votre clavier est un clavier QWERTY. Quand vous tapez &amp;quot;konnitiha&amp;quot;, vous risquez d'obtenir à la place &amp;quot;konnitihq&amp;quot;. Malheureusement bien que ce soit possible, le seul moyen d'arriver à corriger cela est d'aller modifier le contenu de la base de registre. Pour exécuter l'éditeur de registre, taper &amp;quot;regedit&amp;quot; dans Démarrer/Exécuter.&lt;/p&gt;
&lt;p&gt;Aller dans :&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;code&quot;&gt;HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\KeyboardLayouts\00000411&lt;/div&gt;&lt;p&gt;&lt;/p&gt;
&lt;p&gt;ou selon votre version de Windows dans :&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;code&quot;&gt;HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\KeyboardLayouts\E0010411&lt;/div&gt;&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Il faut changer la valeur &amp;quot; &lt;span class=&quot;italic&quot;&gt;layout file&lt;/span&gt; &amp;quot; en &amp;quot; &lt;span class=&quot;italic&quot;&gt;kbdfr.kbd&lt;/span&gt; &amp;quot;, puis redémarrer.&lt;/p&gt;
&lt;h3&gt;Table des conversions&lt;/h3&gt;
&lt;p&gt;Pour voir les conversions (par exemple si vous ne trouvez pas comment faire un petit  &lt;span class=&quot;italic&quot;&gt;tsu&lt;/span&gt; ), vous pouvez la trouver dans les préférences de l'IME. Pour y aller, faites un clic droit sur la barre des langues -&amp;gt; &amp;quot; &lt;span class=&quot;italic&quot;&gt;Settings&lt;/span&gt; &amp;quot; -&amp;gt; &amp;quot; &lt;span class=&quot;italic&quot;&gt;Properties&lt;/span&gt; &amp;quot; sur &amp;quot; &lt;span class=&quot;italic&quot;&gt;Microsoft IME&lt;/span&gt; &amp;quot; -&amp;gt; onglet &amp;quot; &lt;span class=&quot;italic&quot;&gt;Editing&lt;/span&gt; &amp;quot; -&amp;gt; bouton &amp;quot;'Advanced &lt;span class=&quot;italic&quot;&gt;&amp;quot; à coté de &amp;quot;&lt;/span&gt; Key Template &lt;span class=&quot;italic&quot;&gt;&amp;quot; -&amp;gt; onglet &amp;quot;&lt;/span&gt; Romaji-Kana conversion''&amp;quot;&lt;/p&gt;
&lt;h2&gt;Le kana input&lt;/h2&gt;
&lt;p&gt;Il s'agit du mode d'entrée des claviers japonais. Il est donc fort conseillé d'avoir pour cela un clavier japonais, un clavier remappé en japonais (avec des autocollants) ou de savoir par cœur la disposition des caractères japonais. Ce mode est fortement conseillé aux occidentaux qui veulent apprendre le japonais sur ordinateur, le romanji input empêchant les progrès de lecture apportés par le kana input. De plus, le kana input est à terme beaucoup plus rapide à utiliser que le romanji input : une touche = un kana, alors qu'en romanji input, 2 ou 3 touches = 1 kana...&lt;/p&gt;
&lt;p&gt;Pour utiliser le kana input, faites un clic droit sur la barre des langues -&amp;gt; &amp;quot;Settings&amp;quot; -&amp;gt; &amp;quot;Properties&amp;quot; sur &amp;quot;Microsoft IME&amp;quot; -&amp;gt; onglet &amp;quot;General&amp;quot; -&amp;gt; passer &amp;quot;Input method&amp;quot; à &amp;quot;Kana Input&amp;quot;.&lt;/p&gt;
&lt;h3&gt;La touche wo (を)&lt;/h3&gt;
&lt;p&gt;Le clavier japonais a plus de touches que le clavier français ou américain. En remappant un clavier pour le transformer en japonais, vous pourrez réattribuer 25 caractères sur les 26 existants (pas de chance). Le &amp;quot;wo&amp;quot; (を) se retrouve donc à la trappe... Mais heureusement, on peut encore y accéder :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;  &lt;span class=&quot;bold&quot;&gt;Shift + 0&lt;/span&gt;  pour le &amp;quot;wo&amp;quot; (を)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Switcher entre les hiraganas, les katakanas et le qwerty&lt;/h3&gt;
&lt;p&gt;Eh oui, c'est chiant et fastidieux de cliquouiller sur la barre de langues tout le temps pour changer d'alphabet. Les japonais se font pas chier avec ça : ils ont un clavier ayant une touche spéciale pour ça ! Heureusement, des raccourcis claviers existent pour nous ;)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;  &lt;span class=&quot;bold&quot;&gt;Ctrl + Maj-Lock&lt;/span&gt;  pour passer en Hiraganas&lt;/li&gt;
&lt;li&gt;  &lt;span class=&quot;bold&quot;&gt;Alt + Maj-Lock&lt;/span&gt;  pour passer en Katakanas&lt;/li&gt;
&lt;li&gt;  &lt;span class=&quot;bold&quot;&gt;Alt + ²&lt;/span&gt;  pour switcher entre le qwerty et le dernier mode utilisé (hiraganas ou katakanas)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ils auraient pu prévoir que nous français, avions une touche supplémentaire : la touche &amp;quot;&amp;lt;&amp;gt;&amp;quot;, et nous la mapper en touche &amp;quot;wo&amp;quot; (を) ou en bascule hiras-katas...&lt;/p&gt;
&lt;h3&gt;Switcher entre les langues&lt;/h3&gt;
&lt;p&gt;Pour passer de l'azerty au japonais (voire à d'autres mappings si vous en avez installés d'autres), vous pouvez utiliser le raccourci clavier suivant :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;  &lt;span class=&quot;bold&quot;&gt;Alt +Shift&lt;/span&gt;  pour basculer de langue&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;/p&gt;</description>
            <pubDate>Sat, 28 Apr 2007 17:08:30 +0200</pubDate>
            <link>http://www.ornthalas.net/notes/110/Le%20japonais%20sous%20Windows</link>
			<category>notes</category>
        </item>
        <item>
	   <title>Impression à partir de Firefox</title>
	    <description>&lt;p&gt;Aujourd'hui, j'ai été confronté à un problème :&lt;/p&gt;
&lt;p&gt;Je dois développer pour un client un site web générant des codes barres et lui donner la possibilité de les imprimer facilement (c'est à dire en un clic) avec Firefox via son imprimante à étiquettes répondant au doux nom de  &lt;span class=&quot;italic&quot;&gt;« TSC_TTP-245 »&lt;/span&gt; .&lt;/p&gt;
&lt;p&gt;Pour cela, j'ai généré des images de codes barres avec PHP, et affiché l'image à imprimer dans une nouvelle page vide sans marges. Mais le problème c'est comment imprimer sans devoir faire  &lt;span class=&quot;italic&quot;&gt;Fichier &amp;gt; Imprimer&lt;/span&gt; , puis redéfinir toutes les options d'impression, et ceci à chaque fois ? De plus, des en-têtes et bas de pages s'incrustaient dans l'impression, ce qui est hors de question.&lt;/p&gt;
&lt;p&gt;Après de fastidieuses recherches, voici la solution que j'ai trouvée :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt; aller dans la barre d'adresses de Firefox&lt;/li&gt;
&lt;li&gt; taper  &lt;span class=&quot;bold&quot;&gt;about:config&lt;/span&gt;  pour aller dans les préférences avancées&lt;/li&gt;
&lt;li&gt; puis on modifie les valeurs :&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Je définis l'imprimante par défaut :&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;code&quot;&gt;print.use_global_printsettings -&amp;gt; true&lt;br /&gt;
print.print_printer -&amp;gt; TSC TTP-245&lt;/div&gt;&lt;p&gt;&lt;/p&gt;
&lt;p&gt;On enlève les notes d'en-tête et de bas de page :&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;code&quot;&gt;print.printer_TSC_TTP-245.print_footercenter -&amp;gt; &lt;br /&gt;
print.printer_TSC_TTP-245.print_footerleft -&amp;gt; &lt;br /&gt;
print.printer_TSC_TTP-245.print_footerright -&amp;gt; &lt;br /&gt;
print.printer_TSC_TTP-245.print_headercenter -&amp;gt; &lt;br /&gt;
print.printer_TSC_TTP-245.print_headerleft -&amp;gt; &lt;br /&gt;
print.printer_TSC_TTP-245.print_headerright -&amp;gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;
&lt;p&gt;On enlève les marges&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;code&quot;&gt;print.printer_TSC_TTP-245.print_margin_bottom -&amp;gt; 0&lt;br /&gt;
print.printer_TSC_TTP-245.print_margin_left -&amp;gt; 0&lt;br /&gt;
print.printer_TSC_TTP-245.print_margin_right -&amp;gt; 0&lt;br /&gt;
print.printer_TSC_TTP-245.print_margin_top -&amp;gt; 0&lt;/div&gt;&lt;p&gt;&lt;/p&gt;
&lt;p&gt;On définit la taille de l'impression (pour moi je voulais imprimer exactement 98 x 33 mm)&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;code&quot;&gt;print.printer_TSC_TTP-245.print_paper_data -&amp;gt; 0&lt;br /&gt;
print.printer_TSC_TTP-245.print_paper_height -&amp;gt; 33,00&lt;br /&gt;
print.printer_TSC_TTP-245.print_paper_size -&amp;gt; 0&lt;br /&gt;
print.printer_TSC_TTP-245.print_paper_size_type -&amp;gt; 0&lt;br /&gt;
print.printer_TSC_TTP-245.print_paper_size_unit -&amp;gt; 0&lt;br /&gt;
print.printer_TSC_TTP-245.print_paper_width -&amp;gt; 98,00&lt;/div&gt;&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Il ne faut pas que l'image se redimensionne toute seule, le site doit y faire attention. On met donc :&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;code&quot;&gt;print.printer_TSC_TTP-245.print_shrink_to_fit -&amp;gt; false&lt;/div&gt;&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Sachant que TSC_TTP-245 est définie par défaut, je en veux pas que la boite de dialogue d'impression s'affiche à chaque fois : qu'elle imprime directement sans confirmation ! Pour cela, on ajoute une nouvelle valeur booléenne à la liste :&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;code&quot;&gt;print.always_print_silent -&amp;gt; true&lt;/div&gt;&lt;p&gt;&lt;/p&gt;
&lt;p&gt;En enfin, voici la page d'impression :&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;code&quot;&gt;&lt;ol&gt;&lt;li style=&quot;color: #183a43;&quot;&gt;&lt;div style=&quot;font-family: 'Courier New', Courier, monospace; font-weight: normal;&quot;&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;lt;html&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;color: #183a43;&quot;&gt;&lt;div style=&quot;font-family: 'Courier New', Courier, monospace; font-weight: normal;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;lt;head&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;color: #183a43;&quot;&gt;&lt;div style=&quot;font-family: 'Courier New', Courier, monospace; font-weight: normal;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;lt;title&amp;gt;&lt;/span&gt;&lt;/span&gt;Print page&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;lt;/title&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;color: #183a43;&quot;&gt;&lt;div style=&quot;font-family: 'Courier New', Courier, monospace; font-weight: normal;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;lt;style&lt;/span&gt; &lt;span style=&quot;color: #000066;&quot;&gt;type&lt;/span&gt;=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;text/css&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;color: #183a43;&quot;&gt;&lt;div style=&quot;font-family: 'Courier New', Courier, monospace; font-weight: normal;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; body&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;color: #183a43;&quot;&gt;&lt;div style=&quot;font-family: 'Courier New', Courier, monospace; font-weight: normal;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;color: #183a43;&quot;&gt;&lt;div style=&quot;font-family: 'Courier New', Courier, monospace; font-weight: normal;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; padding: 0;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;color: #183a43;&quot;&gt;&lt;div style=&quot;font-family: 'Courier New', Courier, monospace; font-weight: normal;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; margin: 0;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;color: #183a43;&quot;&gt;&lt;div style=&quot;font-family: 'Courier New', Courier, monospace; font-weight: normal;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;color: #183a43;&quot;&gt;&lt;div style=&quot;font-family: 'Courier New', Courier, monospace; font-weight: normal;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;lt;/style&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;color: #183a43;&quot;&gt;&lt;div style=&quot;font-family: 'Courier New', Courier, monospace; font-weight: normal;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;lt;script&lt;/span&gt; &lt;span style=&quot;color: #000066;&quot;&gt;language&lt;/span&gt;=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;Javascript&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;color: #183a43;&quot;&gt;&lt;div style=&quot;font-family: 'Courier New', Courier, monospace; font-weight: normal;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; function print_page()&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;color: #183a43;&quot;&gt;&lt;div style=&quot;font-family: 'Courier New', Courier, monospace; font-weight: normal;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;color: #183a43;&quot;&gt;&lt;div style=&quot;font-family: 'Courier New', Courier, monospace; font-weight: normal;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; window.print();&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;color: #183a43;&quot;&gt;&lt;div style=&quot;font-family: 'Courier New', Courier, monospace; font-weight: normal;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; self.close();&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;color: #183a43;&quot;&gt;&lt;div style=&quot;font-family: 'Courier New', Courier, monospace; font-weight: normal;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;color: #183a43;&quot;&gt;&lt;div style=&quot;font-family: 'Courier New', Courier, monospace; font-weight: normal;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;color: #183a43;&quot;&gt;&lt;div style=&quot;font-family: 'Courier New', Courier, monospace; font-weight: normal;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;lt;/head&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;color: #183a43;&quot;&gt;&lt;div style=&quot;font-family: 'Courier New', Courier, monospace; font-weight: normal;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;lt;body&lt;/span&gt; &lt;span style=&quot;color: #000066;&quot;&gt;onLoad&lt;/span&gt;=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;print_page();&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;color: #183a43;&quot;&gt;&lt;div style=&quot;font-family: 'Courier New', Courier, monospace; font-weight: normal;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;lt;img&lt;/span&gt; &lt;span style=&quot;color: #000066;&quot;&gt;src&lt;/span&gt;=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;img.php?type=EAN13&amp;amp;amp;code=9782218048690&amp;quot;&lt;/span&gt; /&lt;span style=&quot;color: #000000;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;color: #183a43;&quot;&gt;&lt;div style=&quot;font-family: 'Courier New', Courier, monospace; font-weight: normal;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;color: #183a43;&quot;&gt;&lt;div style=&quot;font-family: 'Courier New', Courier, monospace; font-weight: normal;&quot;&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;lt;/html&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Et voila, ça fonctionne parfaitement ! Dès qu'on appellera la page &amp;quot;print.php&amp;quot; avec  &lt;span class=&quot;italic&quot;&gt;target=_blank&lt;/span&gt; , celle-ci s'ouvrira dans une nouvelle fenêtre, imprimera le bon code barre et se refermera.&lt;/p&gt;
&lt;p&gt;On peut dire que Firefox n'a pas simplifié la tâche en ne documentant absolument pas la chose (surtout la valeur  &lt;span class=&quot;italic&quot;&gt;print_paper_size&lt;/span&gt;  qui m'a fait perdre un temps fou)&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;</description>
            <pubDate>Thu, 22 Mar 2007 12:55:41 +0100</pubDate>
            <link>http://www.ornthalas.net/notes/108/Impression%20%C3%A0%20partir%20de%20Firefox</link>
			<category>notes</category>
        </item>
        <item>
	   <title>FreeMind</title>
	    <description>&lt;p&gt; &lt;span class=&quot;bold&quot;&gt;Freemind&lt;/span&gt;  est un logiciel d’édition et de consultation de « cartes heuristiques » (ou encore « cartes mentales », « mindmaps »...).&lt;/p&gt;
&lt;p&gt;Ce n’est pas un éditeur de texte à proprement parler, et n’est pas forcément adapté pour gérer des textes très longs et « monoblocs » comme un article, un mémoire ou un rapport. Ce n’est donc pas un équivalent ou un concurrent de Word par exemple. Cependant, ce logiciel témoigne d’une nouvelle manière d’aborder l’écriture de documents électroniques.&lt;/p&gt;
&lt;p&gt;Plus que le contenu, qui reste tout de même le plus important, c’est la mise en forme des textes qui est ici totalement repensée, afin de mettre en exergue une hiérarchie, un plan, ou tout simplement pour obtenir une visualisation plus intuitive et plus complexe que le simple système de titres et sous-titres des traitements de textes.&lt;/p&gt;
&lt;p&gt;La carte heuristique a de nombreuses applications potentielles dans des domaines personnels, éducatifs et professionnels. Ses possibilités incluent :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt; la prise de notes ;&lt;/li&gt;
&lt;li&gt; la remise en forme de ces notes ;&lt;/li&gt;
&lt;li&gt; la préparation d'un exposé ;&lt;/li&gt;
&lt;li&gt; le remue-méninges (alias brainstorming) ;&lt;/li&gt;
&lt;li&gt; l'aide au résumé ;&lt;/li&gt;
&lt;li&gt; la structuration d'un projet ;&lt;/li&gt;
&lt;li&gt; la révision et clarification d'idées ;&lt;/li&gt;
&lt;li&gt; l'identification de mots clefs ;&lt;/li&gt;
&lt;li&gt; la visualisation d'organisation complexe d'idées ;&lt;/li&gt;
&lt;li&gt; l'aide à l'apprentissage mnémotechnique...&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;La carte heuristique est utilisée par les étudiants comme les hommes d'affaires, et son idée est exposée dans certains cours de management.&lt;/p&gt;
&lt;p&gt;L’interface de FreeMind se présente sous la forme d’une immense page blanche dans laquelle on peut insérer des petits modules de texte qu'on hiérarchise en notes parentes et en notes filles. Ainsi, idées, commentaires ou remarques sont organisées dans un organigramme aux multiples branches et sous-branches qui témoignent des relations logiques entre eux. Une image étant souvent plus explicite que des mots (surtout dans le cas de FreeMind), voyez-donc une des utilisations que j'en fais :&lt;/p&gt;
&lt;p&gt; &lt;span class=&quot;italic&quot;&gt;Plus d'infos :&lt;/span&gt; &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;  &lt;a href=&quot;http://fr.wikipedia.org/wiki/Carte_heuristique&quot; class=&quot;external_link&quot;&gt; &lt;span class=&quot;italic&quot;&gt;Carte heuristique&lt;/span&gt;  sur Wikipedia&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;  &lt;a href=&quot;http://freemind.sourceforge.net/&quot; class=&quot;external_link&quot;&gt;Page officielle de FreeMind&lt;/a&gt;   (pour télécharger, notamment)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;/p&gt;</description>
            <pubDate>Thu, 1 Mar 2007 23:25:18 +0100</pubDate>
            <link>http://www.ornthalas.net/notes/109/FreeMind</link>
			<category>notes</category>
        </item>
        <item>
	   <title>Ouverture de Ouronos.info</title>
	    <description>&lt;p&gt;J'ai enfin ouvert mon blog, &amp;quot;propulsé par DotClear&amp;quot;.&lt;/p&gt;
&lt;p&gt;Quand j'aurai le temps, je ferai peut être une version codée maison de ce blog, mais ce n'est pas a l'ordre du jour, j'ai trop de travail. J'ai quand même customisé le thème d'origine pour le mettre plus à mon gout ;)&lt;/p&gt;
&lt;p&gt; &lt;span class=&quot;italic&quot;&gt;Edit :&lt;/span&gt;  Le site n'est bien évidemment plus à l'heure d'aujourd'hui propulsé par Dotclear. J'ai fait un truc a ma sauce.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;</description>
            <pubDate>Thu, 30 Mar 2006 18:42:15 +0200</pubDate>
            <link>http://www.ornthalas.net/notes/106/Ouverture%20de%20Ouronos.info</link>
			<category>notes</category>
        </item>
    </channel>
</rss>
