<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-8128983</id><updated>2010-09-05T17:02:57.266+02:00</updated><title type='text'>Francois Guillaume Ribreau</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://blog.fgribreau.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8128983/posts/default?orderby=updated'/><link rel='alternate' type='text/html' href='http://blog.fgribreau.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/8128983/posts/default?start-index=26&amp;max-results=25&amp;orderby=updated'/><author><name>François-Guillaume Ribreau</name><uri>http://www.blogger.com/profile/09541846055227993599</uri><email>noreply@blogger.com</email></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>148</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-8128983.post-2158348099447631282</id><published>2010-06-09T11:26:00.010+02:00</published><updated>2010-08-29T17:40:28.235+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='selector'/><category scheme='http://www.blogger.com/atom/ns#' term='xmpp'/><category scheme='http://www.blogger.com/atom/ns#' term='jquery'/><category scheme='http://www.blogger.com/atom/ns#' term='xpath'/><title type='text'>Trouver le selecteur jQuery d'un élément HTML (Reverse Selector)</title><content type='html'>Je développe depuis quelques heures un module web permettant de "monitorer" de manière générique les mouvements et actions d'un visiteur. L'objectif est de reproduire en temps réel via &lt;span style="font-weight: bold;"&gt;XMPP&lt;/span&gt; toutes ces actions dans un &lt;span style="font-weight: bold;"&gt;autre&lt;/span&gt; navigateur (donc DOM différent).&lt;br /&gt;&lt;br /&gt;Je devais donc trouver un moyen d'identifier un élément de manière unique sur une page, puis de transférer cet "ID" au navigateur - de l'administrateur  par exemple - afin que le module reproduise l'événement.&lt;br /&gt;&lt;br /&gt;Il y a 2 ans (déjà!) j'avais développé une fonction permettant de &lt;a href="http://blog.geekfg.net/2008/12/retrouver-le-chemin-xpath-d-lment-html.html"&gt;trouver le chemin XPath d'un élément html&lt;/a&gt;. Voici une variation afin de trouver un possible &lt;span style="font-weight: bold;"&gt;sélecteur jQuery&lt;/span&gt; pour un unique élément HTML donné (et non à partir d'un $('a.className') car dans ce cas, le selector est simplement un attribut de l'objet jQuery: $('a.className').selector).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;Fork &lt;a href="http://github.com/FGRibreau/jQuery-plugin-getPath"&gt;Reverse jQuery Selector Finder&lt;/a&gt; on  Github&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;[MAJ] XPath ainsi que $('*').index(htmlElement); sont aussi d'autres moyens pour arriver à la même finalité.&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8128983-2158348099447631282?l=blog.fgribreau.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.fgribreau.com/feeds/2158348099447631282/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8128983&amp;postID=2158348099447631282&amp;isPopup=true' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8128983/posts/default/2158348099447631282'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8128983/posts/default/2158348099447631282'/><link rel='alternate' type='text/html' href='http://blog.fgribreau.com/2010/06/trouver-le-selecteur-jquery-dun-element.html' title='Trouver le selecteur jQuery d&apos;un élément HTML (Reverse Selector)'/><author><name>François-Guillaume Ribreau</name><uri>http://www.blogger.com/profile/09541846055227993599</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01541021242297486133'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8128983.post-4180078422019743562</id><published>2009-02-21T00:38:00.002+01:00</published><updated>2010-08-20T12:30:39.296+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='astuce'/><category scheme='http://www.blogger.com/atom/ns#' term='feedback'/><category scheme='http://www.blogger.com/atom/ns#' term='chrome'/><title type='text'>Modifier openWYSIWYG afin qu’il supporte Google Chrome</title><content type='html'>L’outil pour &lt;b&gt;&lt;a href="http://projets.geekfg.net/?/2-comment+ajouter+une+signature+html+sous+gmail.htm"&gt;ajouter sa signature HTML à Gmail&lt;/a&gt;&lt;/b&gt; utilise l’éditeur &lt;a href="http://www.openwebware.com/" rel="nofollow"&gt;openWYSIWYG&lt;/a&gt; que j’apprécie particulièrement pour son côté cross-browser, open-source et son interface très léger. Seulement, même la dernière version ne supporte pas &lt;a href="http://www.google.com/chrome" rel="nofollow"&gt;Google Chrome&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;Après un bref regard sur le code, je me suis aperçu que la vérification de la compatibilité s’effectuait au niveau de la méthode &lt;b&gt;isBrowserCompatible&lt;/b&gt; :&lt;br /&gt;&lt;code&gt;isBrowserCompatible: function() {    &lt;br /&gt;// Validate browser and compatiblity     &lt;br /&gt;if ((navigator.userAgent.indexOf('Safari') != -1 ) || !document.getElementById || !document.designMode){     &lt;br /&gt;//no designMode (Safari lies)     &lt;br /&gt;return false;     &lt;br /&gt;}     &lt;br /&gt;return true;     &lt;br /&gt;},&lt;/code&gt;   &lt;br /&gt;N’ayant pas Safari et ne pouvant donc pas vérifier si oui ou non “Safari lies” j’ai préféré simplement ajouter le support de Chrome tout en laissant le blocage de Safari. Il suffit donc de modifier le test et d'y ajouter l'expression booléen suivante :&lt;br /&gt;&lt;code&gt;if ((navigator.userAgent.indexOf('Safari') != -1 &amp;amp;&amp;amp; &lt;b&gt;navigator.userAgent.indexOf('Chrome') == -1&lt;/b&gt; ) || !document.getElementById || !document.designMode){ &lt;/code&gt;  &lt;br /&gt;&lt;br /&gt;C’est fini ? Eh bien non, après un test cela ne fonctionnait toujours pas, Chrome retournait une erreur &lt;b&gt;Uncaught TypeError: Object #&lt;an htmltextareaelement=""&gt; has no method 'insertAdjacentHTML'&lt;/an&gt;&lt;/b&gt;. Une recherche plus tard, je découvre ce block de code :&lt;br /&gt;&lt;code&gt;/**    &lt;br /&gt;* Emulates insertAdjacentHTML(), insertAdjacentText() and     &lt;br /&gt;* insertAdjacentElement() three functions so they work with Netscape 6/Mozilla     &lt;br /&gt;* by Thor Larholm me@jscript.dk     &lt;br /&gt;*/     &lt;br /&gt;if(typeof HTMLElement!="undefined" &amp;amp;&amp;amp; !HTMLElement.prototype.insertAdjacentElement){ HTMLElement.prototype.insertAdjacentElement = function (where,parsedNode){     &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; HTMLElement.prototype.insertAdjacentElement = function (where,parsedNode) {.. };&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; HTMLElement.prototype.&lt;b&gt;insertAdjacentHTML&lt;/b&gt; = function (where,htmlStr) {…}; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; HTMLElement.prototype.insertAdjacentText = function (where,txtStr) {… };      &lt;br /&gt;}&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Or sous Chrome l’objet &lt;b&gt;HTMLElement&lt;/b&gt; ET sa méthode &lt;b&gt;insertAdjacentElement&lt;/b&gt; existe mais pas la méthode &lt;b&gt;insertAdjacentHTML&lt;/b&gt;. Cette condition n’était donc pas validée. Il suffisait de modifier la condition comme ceci pour que openWYSIWYG supporte Chrome :&lt;br /&gt;&lt;code&gt;if((typeof HTMLElement!="undefined" &amp;amp;&amp;amp; (!HTMLElement.prototype.insertAdjacentElement || &lt;b&gt;!HTMLElement.prototype.insertAdjacentHTML&lt;/b&gt;))){ &lt;/code&gt;  &lt;br /&gt;&lt;u&gt;Remarque:&lt;/u&gt; il est préférable ici de ne pas agir en fonction du navigateur (donc un test sur le user-agent) mais plutôt sur la présence ou non de la fonctionnalité sur le navigateur. En utilisant cette méthode on code ainsi de façon plus générique et les scripts deviennent compatibles (ou inversement) avec les mises à jour des navigateurs.&lt;br /&gt;&lt;br /&gt;Ps : En bon webnaute j’ai proposé cette &lt;a href="http://www.openwebware.com/forum/viewtopic.php?f=1&amp;amp;t=2304" rel="nofollow"&gt;modification sur le forum dédié&lt;/a&gt; afin qu’elle soit intégrée à la prochaine release.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8128983-4180078422019743562?l=blog.fgribreau.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.fgribreau.com/feeds/4180078422019743562/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8128983&amp;postID=4180078422019743562&amp;isPopup=true' title='2 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8128983/posts/default/4180078422019743562'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8128983/posts/default/4180078422019743562'/><link rel='alternate' type='text/html' href='http://blog.fgribreau.com/2009/02/modifier-openwysiwyg-afin-quil-supporte.html' title='Modifier openWYSIWYG afin qu’il supporte Google Chrome'/><author><name>François-Guillaume Ribreau</name><uri>http://www.blogger.com/profile/09541846055227993599</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01541021242297486133'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8128983.post-116551188685613811</id><published>2006-12-07T17:15:00.003+01:00</published><updated>2010-08-14T12:20:58.512+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='vistavatar'/><category scheme='http://www.blogger.com/atom/ns#' term='web 2.0'/><category scheme='http://www.blogger.com/atom/ns#' term='vistarc'/><category scheme='http://www.blogger.com/atom/ns#' term='projet'/><title type='text'>Première apparition de Vistavatar dans la presse</title><content type='html'>Je venais tout juste d'uploader une nouvelle version de Vistavatar, la beta 3.2. Et je me suis dit, "pourquoi ne pas en faire profiter plus de monde ?".&lt;br /&gt;&lt;br /&gt;Je cherche donc un site dans mon Rss Reader qui pourrait comprendre l'utilité d'une telle geekerie, et voici venir &lt;a href="http://www.net-actuality.org/news/4563-vistavatar-mettez-votre-avatar-a-la-mode-vista.html"&gt;Net-actuality&lt;/a&gt;, parfait, exactement le genre de site que j'aime bien lire, alors je prends mon courage à deux main, et je compose une lettre via le formulaire de contact. Plof c'est envoyé.&lt;br /&gt;&lt;br /&gt;Ne voyant point de réponse venir quelques heures plus tard, je me dit alors que Vistavatar dans la presse, ça sera pour une autre fois.&lt;br /&gt;&lt;br /&gt;Les heures passent, et Nitrax (un pseudo-designer et très bonne amis, qui me confectionne de beau et in programmable design) me contact par msn en m'annonçant que Vistavatar est sur &lt;a href="http://www.net-actuality.org/news/4563-vistavatar-mettez-votre-avatar-a-la-mode-vista.html"&gt;Net-actuality&lt;/a&gt;, je me rend sur le site, et que voit-je ??&lt;br /&gt;Un avatar, c'est une petite image que l'on met sur son logiciel de messagerie instantannée ou sur les forums pour se représenter.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: verdana; font-size: 85%;"&gt; Une personne nous a contacté sur notre mail &lt;img alt="" src="http://www.net-actuality.org/images/m-presse/net-actuality.org.gif" /&gt; pour nous faire part d'une application web originale : Vistavatar.&lt;br /&gt;Comme vous avez pu le constater, ce nom de logiciel est composé de Vista, nom du nouveau système d'exploitation de Microsoft, et avatar, bah comme ...euh... avatar ! &lt;img alt="" src="http://www.net-actuality.org/uploads/smil420a77f77532d.gif" /&gt;&lt;br /&gt;&lt;br /&gt;Cette petite application web transforme votre vieux avatar tout moche en avatar avec effets Windows Vista.&lt;br /&gt;Très compliqué à expliquer, voici les célèbres images "avant/après" :&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Avant&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;     &lt;br /&gt;&lt;div align="center" style="font-family: verdana;"&gt;&lt;span style="font-size: 85%;"&gt;&lt;img alt="" src="http://www.net-actuality.org/images/news/06-12-06_0636.png" /&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style="font-family: verdana; font-size: 85%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Après&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;    &lt;br /&gt;&lt;div align="center" style="font-family: verdana;"&gt;&lt;span style="font-size: 85%;"&gt;&lt;img alt="" src="http://www.net-actuality.org/images/news/06-12-06_5442.gif" /&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style="font-family: verdana; font-size: 85%;"&gt;&lt;br /&gt;&lt;br /&gt;Malheureusement, cette application web coute 50.99€ par avatar transformé, et n'accepte que les mandats postaux pour le réglement... mais non, je rigole, c'est gratuit, et le site est on-ne-peut-plus intuitif.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.net-actuality.org/lien.php?url=http://vistarc.net/vistavatar/" target="_blank"&gt;Le site&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.net-actuality.org/lien.php?url=http://www.betatesteur.com/viewtopic.php?t=1622&amp;amp;postdays=0&amp;amp;postorder=asc&amp;amp;start=0&amp;amp;sid=e3558f21409a217bdf08682ec21b8dbc" target="_blank"&gt;Le topic sur le forum du site BetaTesteur.com&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;  &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Je n'ai toujours reçut aucun mail de la part du staff, mais ça valait le coup :).&lt;br /&gt;&lt;br /&gt;Sinon, niveau programmation, et aspect technique, Vistavatar est basé client-side sur &lt;a href="http://mootools.net/"&gt;Moo&lt;/a&gt; (pour la gestion des effets &amp;amp; transition), et server-side, eh bien c'est un engine maison, avec cette bonne librairie GD &amp;amp; Php.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8128983-116551188685613811?l=blog.fgribreau.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.fgribreau.com/feeds/116551188685613811/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8128983&amp;postID=116551188685613811&amp;isPopup=true' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8128983/posts/default/116551188685613811'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8128983/posts/default/116551188685613811'/><link rel='alternate' type='text/html' href='http://blog.fgribreau.com/2006/12/premire-apparition-de-vistavatar-dans.html' title='Première apparition de Vistavatar dans la presse'/><author><name>François-Guillaume Ribreau</name><uri>http://www.blogger.com/profile/09541846055227993599</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01541021242297486133'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8128983.post-109385566588388007</id><published>2004-08-30T10:43:00.002+02:00</published><updated>2010-08-13T14:47:48.033+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='blog'/><title type='text'>Slt tt le monde !!!</title><content type='html'>&lt;span style="color: black;"&gt;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;[[ Le 13 Aout 2010.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: black;"&gt;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;Le message qui suit est mon premier billet sur ce blog de développement. J'avais 15 ans à l'époque. Soyez indulgent ^^ ]]&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: black; font-size: 130%;"&gt;&lt;span style="font-size: 180%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: black; font-size: 130%;"&gt;&lt;span style="font-size: 180%;"&gt;B&lt;span style="color: #cc0000;"&gt;i&lt;/span&gt;&lt;span style="color: #ff6600;"&gt;e&lt;/span&gt;&lt;span style="color: #ffcc33;"&gt;n&lt;/span&gt;&lt;span style="color: #ffcc00;"&gt;v&lt;/span&gt;&lt;span style="color: #33cc00;"&gt;e&lt;/span&gt;&lt;span style="color: #00cccc;"&gt;n&lt;/span&gt;&lt;span style="color: #339999;"&gt;u&lt;/span&gt;&lt;span style="color: #3366ff;"&gt;e&lt;/span&gt; &lt;span style="color: red;"&gt;s&lt;/span&gt;&lt;span style="color: #cc33cc;"&gt;u&lt;/span&gt;&lt;span style="color: #6600cc;"&gt;r&lt;/span&gt;&lt;/span&gt; &lt;span style="font-size: 100%;"&gt;mon blog perso !!!&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Ben , voila après mon site perso (&lt;a href="http://www.persofg.fr.st/"&gt;www.persofg.fr.st&lt;/a&gt;) voici mon blog ;-) , pour l'instant ya pas grand chose , mais ça va venir !&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8128983-109385566588388007?l=blog.fgribreau.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.fgribreau.com/feeds/109385566588388007/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8128983&amp;postID=109385566588388007&amp;isPopup=true' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8128983/posts/default/109385566588388007'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8128983/posts/default/109385566588388007'/><link rel='alternate' type='text/html' href='http://blog.fgribreau.com/2004/08/slt-tt-le-monde.html' title='Slt tt le monde !!!'/><author><name>François-Guillaume Ribreau</name><uri>http://www.blogger.com/profile/09541846055227993599</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01541021242297486133'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8128983.post-109398027623545527</id><published>2004-08-31T21:11:00.002+02:00</published><updated>2010-08-13T14:44:56.535+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='projet'/><title type='text'>Site LP Informatique en ligne !!!</title><content type='html'>Et voila, je suis super content car je viens de finir le site de &lt;a href="http://www.lpinformatique.fr.st/"&gt;LP Informatique&lt;/a&gt; &lt;img src="http://fg.logiciel.free.fr/php/forums/images/smiles/icon_lol.gif" /&gt; !!&lt;br /&gt;&lt;br /&gt;Au début c'était pour améliorer mes connaissance en php/mysql , (eh oui , c'est beau d'avoir des bouquins mais la pratique c'est mieux !!). Quoi au programme ?&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Création d'un panneau d'administration&lt;/strong&gt; :&lt;br /&gt;&lt;ul&gt;&lt;li&gt;ajout/modification/suppression de produit &lt;/li&gt;&lt;li&gt;ajout/modification/suppression de fournisseur&lt;/li&gt;&lt;li&gt;modification offre du mois&lt;/li&gt;&lt;li&gt;compteur du site&lt;/li&gt;&lt;li&gt;programme de sauvegarde&lt;/li&gt;&lt;li&gt;etc ...&lt;/li&gt;&lt;/ul&gt;Un fois cela fait (déja 1 semaine de passé), il manquait quelque chose au site ... Mais quoi?? J'ai donc déposé un tutos sur mon forum de programmation pour savoir quoi ajouté pour que le site soit plus pro et savoir s'l était toujours (j'ai dût modifier pas mal de fois le css et le javascript) compatible avec tous les navigateurs , donc j'ai posté sur &lt;a href="http://www.progforum.net/viewtopic.php?t=573"&gt;progforum&lt;/a&gt; .&lt;br /&gt;&lt;br /&gt;Après quelques commentaires et pas mal de modification voici le résulat &lt;a href="http://www.lpinformatique.fr.st/"&gt;www.lpinformatique.fr.st&lt;/a&gt; !&lt;br /&gt;&lt;br /&gt;Oufff !! Mon premier site d'entreprise enfin terminé ! Au suivant &lt;img src="http://fg.logiciel.free.fr/php/forums/images/smiles/icon_wink.gif" /&gt; &lt;br /&gt;&lt;span style="font-size: 85%;"&gt;PS : N'hésitez pas à poster vos commentaires sur le site ...&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8128983-109398027623545527?l=blog.fgribreau.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.fgribreau.com/feeds/109398027623545527/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8128983&amp;postID=109398027623545527&amp;isPopup=true' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8128983/posts/default/109398027623545527'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8128983/posts/default/109398027623545527'/><link rel='alternate' type='text/html' href='http://blog.fgribreau.com/2004/08/site-lp-informatique-finit.html' title='Site LP Informatique en ligne !!!'/><author><name>François-Guillaume Ribreau</name><uri>http://www.blogger.com/profile/09541846055227993599</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01541021242297486133'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8128983.post-109587860004726139</id><published>2004-09-22T20:21:00.003+02:00</published><updated>2010-08-13T14:42:43.660+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><title type='text'>Création d'un moteur de recherche en php/mysql</title><content type='html'>[[ Nous sommes le 13 Aout 2010, je relis ce message posté le 22 Septembre 2004. J'en ai fait du chemin depuis ce temps là :). ]]&lt;br /&gt;&lt;br /&gt;Eh bien ce n'est pas facile du tout !!!&lt;br /&gt;En effet je croyais créer ce moteur en un jour (ben oui je passe quand même + de 14h devant mon pc )&lt;br /&gt;&lt;br /&gt;Pour l'aspect technique il ne supporte pour l'instant qu'un seul mot clé ... En fait ma requête sql est "&lt;em&gt;&lt;span style="font-size: 85%;"&gt;SELECT * FROM matable WHERE nom OR description LIKE '%" . $motsclef . "%' ORDER BY nom ASC&lt;/span&gt; &lt;/em&gt;"&lt;br /&gt;&lt;br /&gt;Le problème c'est que j'ai (la flemme) de créer une array de &lt;em&gt;$motsclef&lt;/em&gt; enfin voila , cela permet quand même de faire une recherche simple et c'est ce que je voulais :-) .&lt;br /&gt;&lt;br /&gt;Si vous voulez voir le moteur de recherche c'est &lt;a href="http://lpinformatiques.free.fr/rechercher.php"&gt;ici&lt;/a&gt; .&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;PS :&lt;/strong&gt; Essayer de faire "&lt;em&gt;%&lt;/em&gt;" dans le moteur cela affiche tout ...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8128983-109587860004726139?l=blog.fgribreau.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.fgribreau.com/feeds/109587860004726139/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8128983&amp;postID=109587860004726139&amp;isPopup=true' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8128983/posts/default/109587860004726139'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8128983/posts/default/109587860004726139'/><link rel='alternate' type='text/html' href='http://blog.fgribreau.com/2004/09/cration-dun-moteur-de-recherche-en.html' title='Création d&apos;un moteur de recherche en php/mysql'/><author><name>François-Guillaume Ribreau</name><uri>http://www.blogger.com/profile/09541846055227993599</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01541021242297486133'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8128983.post-109764742977427167</id><published>2004-10-13T08:00:00.002+02:00</published><updated>2010-08-13T14:40:36.300+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='projet'/><title type='text'>Site perso de FG version 4 !!!!</title><content type='html'>Voila,&lt;br /&gt;Je suis en train de programmer la version 4 de mon site . Elle est &lt;strong&gt;&lt;span style="color: #ff6666;"&gt;exclusivement programmée en php/msql&lt;/span&gt;&lt;/strong&gt;, j'ai changé l'interface et ajouté des liens j'espère qu'il vous plaira . En attendant vous pouvez voir la version bêta à cette adresse :&lt;br /&gt;&lt;a href="http://fg.logiciel.free.fr/serveur/site3/"&gt;http://fg.logiciel.free.fr/serveur/site3/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;@++&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8128983-109764742977427167?l=blog.fgribreau.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.fgribreau.com/feeds/109764742977427167/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8128983&amp;postID=109764742977427167&amp;isPopup=true' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8128983/posts/default/109764742977427167'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8128983/posts/default/109764742977427167'/><link rel='alternate' type='text/html' href='http://blog.fgribreau.com/2004/10/site-perso-de-fg-version-4.html' title='Site perso de FG version 4 !!!!'/><author><name>François-Guillaume Ribreau</name><uri>http://www.blogger.com/profile/09541846055227993599</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01541021242297486133'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8128983.post-109969775760312979</id><published>2004-11-06T00:35:00.001+01:00</published><updated>2010-08-13T14:39:51.644+02:00</updated><title type='text'>JSDIAPO</title><content type='html'>Je viens de développer une libraire de création de diaporama nommée JSDIAPO , pour moi , il n'y a pas plus simple et plus efficace que ce script (enfin c'est un point de vue perso ;-) . &lt;br /&gt;&lt;br /&gt;Quelques liens : &lt;br /&gt;&lt;a href="http://fg.logiciel.free.fr/index2.php?page=jsdiapo"&gt;Informations&lt;/a&gt; &lt;br /&gt;&lt;a href="http://fg.logiciel.free.fr/index2.php?page=jsdiapo/d%E9monstration"&gt;Démonstration en ligne&lt;/a&gt; &lt;br /&gt;&lt;a href="http://fg.logiciel.free.fr/index2.php?page=jsdiapo/aideenligne"&gt;Aide en ligne&lt;/a&gt; &lt;br /&gt;&lt;a href="http://fg.logiciel.free.fr/index2.php?page=jsdiapo/codesource"&gt;Code source&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;Bien sur il faut préciser que pour l'instant JSDIAPO.lib est marqué "Version bêta 0.2" mais cela n'à rien à voir avec la fiabilité car j'utilise cette librairie pour FGJSDIAPO . &lt;br /&gt;&lt;br /&gt;PS : Pour les devs, créer un diaporama avec JSDIAPO.lib (bouton premier , précédent , suivant , dernier ) , et l'image prend moins de 1min !!! Montre à la main . Essayez-vous verrez &lt;span style="font-weight: bold;"&gt;:-)&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8128983-109969775760312979?l=blog.fgribreau.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.fgribreau.com/feeds/109969775760312979/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8128983&amp;postID=109969775760312979&amp;isPopup=true' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8128983/posts/default/109969775760312979'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8128983/posts/default/109969775760312979'/><link rel='alternate' type='text/html' href='http://blog.fgribreau.com/2004/11/jsdiapo.html' title='JSDIAPO'/><author><name>François-Guillaume Ribreau</name><uri>http://www.blogger.com/profile/09541846055227993599</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01541021242297486133'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8128983.post-109969824522568815</id><published>2004-11-06T00:41:00.001+01:00</published><updated>2010-08-13T14:38:38.784+02:00</updated><title type='text'>Chat avec Olvier Ezratty</title><content type='html'>J'ai parlé avec le directeur de developpement microsoft france !!!&lt;br /&gt;&lt;br /&gt;&lt;u style="color: red; font-weight: bold;"&gt;Pour plus d'information quelques liens :&lt;/u&gt; &lt;br /&gt;&lt;br /&gt;&lt;a href="http://fg.logiciel.free.fr/index2.php?page=actunews&amp;amp;cat_id=3"&gt;La conversation sur fg.logiciel.free.fr.&lt;/a&gt; &lt;br /&gt;&lt;a href="http://solutions.journaldunet.com/itws/041104_chat_ezratty.shtml"&gt;Conversation chat intégral (journaldunet.com)&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8128983-109969824522568815?l=blog.fgribreau.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.fgribreau.com/feeds/109969824522568815/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8128983&amp;postID=109969824522568815&amp;isPopup=true' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8128983/posts/default/109969824522568815'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8128983/posts/default/109969824522568815'/><link rel='alternate' type='text/html' href='http://blog.fgribreau.com/2004/11/chat-avec-olvier-ezratty.html' title='Chat avec Olvier Ezratty'/><author><name>François-Guillaume Ribreau</name><uri>http://www.blogger.com/profile/09541846055227993599</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01541021242297486133'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8128983.post-109969856467049456</id><published>2004-11-06T00:46:00.001+01:00</published><updated>2010-08-13T14:38:03.006+02:00</updated><title type='text'>Preview FGJSDIAPO</title><content type='html'>Hoyé Hoyé brave gens , voici venir &lt;a href="http://fg.logiciel.free.fr/index2.php?page=fgjsdiapo"&gt;FGJSDIAPO&lt;/a&gt;.&amp;nbsp;Le digne  successeur de &lt;a href="http://fg.logiciel.free.fr/index2.php?page=fgxmldiapo"&gt;FGXMLDIAPO&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8128983-109969856467049456?l=blog.fgribreau.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.fgribreau.com/feeds/109969856467049456/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8128983&amp;postID=109969856467049456&amp;isPopup=true' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8128983/posts/default/109969856467049456'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8128983/posts/default/109969856467049456'/><link rel='alternate' type='text/html' href='http://blog.fgribreau.com/2004/11/preview-fgjsdiapo.html' title='Preview FGJSDIAPO'/><author><name>François-Guillaume Ribreau</name><uri>http://www.blogger.com/profile/09541846055227993599</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01541021242297486133'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8128983.post-3249216299235791177</id><published>2010-06-16T07:00:00.003+02:00</published><updated>2010-08-13T10:39:53.194+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='firebug'/><title type='text'>How to make Firebug methods chainable.</title><content type='html'>I just wrote this piece of code (mainly for fun) which let you use &lt;span style="font-weight: bold;"&gt;Firebug methods&lt;/span&gt; with chained calls.&lt;br /&gt;&lt;br /&gt;&lt;script src="http://gist.github.com/439739.js?file=Firebug%20chained%20methods.js"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;Usage:&lt;br /&gt;&lt;br /&gt;&lt;script src="http://gist.github.com/439739.js?file=Firebug%20chained%20methods%20-%20Usage.js"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;Ps: If you want to &lt;span style="font-weight: bold;"&gt;create chainable methods&lt;/span&gt;, just add "return this;" at each methods end. &lt;span style="font-weight: bold;"&gt;makeChainable&lt;/span&gt; is only usefull with already created objects.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8128983-3249216299235791177?l=blog.fgribreau.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.fgribreau.com/feeds/3249216299235791177/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8128983&amp;postID=3249216299235791177&amp;isPopup=true' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8128983/posts/default/3249216299235791177'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8128983/posts/default/3249216299235791177'/><link rel='alternate' type='text/html' href='http://blog.fgribreau.com/2010/06/how-to-make-firebug-methods-chainable.html' title='How to make Firebug methods chainable.'/><author><name>François-Guillaume Ribreau</name><uri>http://www.blogger.com/profile/09541846055227993599</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01541021242297486133'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8128983.post-5327731207626702841</id><published>2010-08-08T21:16:00.001+02:00</published><updated>2010-08-13T01:50:33.568+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='html5'/><category scheme='http://www.blogger.com/atom/ns#' term='canvas'/><title type='text'>[Video] Some experiments with HTML5 Canvas</title><content type='html'>Here is some experiments I've done on a sunday afternoon with an &lt;b&gt;HTML5 Canvas&lt;/b&gt; element and some neat javascript stuff. Enjoy ! &lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;object height="385" width="480"&gt;&lt;param name="movie" value="http://www.youtube.com/v/lq7G1jrowWg&amp;amp;hl=fr_FR&amp;amp;fs=1?rel=0"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/lq7G1jrowWg&amp;amp;hl=fr_FR&amp;amp;fs=1?rel=0" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="385"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8128983-5327731207626702841?l=blog.fgribreau.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.fgribreau.com/feeds/5327731207626702841/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8128983&amp;postID=5327731207626702841&amp;isPopup=true' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8128983/posts/default/5327731207626702841'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8128983/posts/default/5327731207626702841'/><link rel='alternate' type='text/html' href='http://blog.fgribreau.com/2010/08/video-some-experiments-with-html5.html' title='[Video] Some experiments with HTML5 Canvas'/><author><name>François-Guillaume Ribreau</name><uri>http://www.blogger.com/profile/09541846055227993599</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01541021242297486133'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8128983.post-8486414170976413427</id><published>2010-08-10T18:17:00.001+02:00</published><updated>2010-08-12T23:43:28.649+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='jquery'/><title type='text'>jQuery FireEvent - A Plugin for firing real DOM events</title><content type='html'>Or in other words: "How to fire real &lt;b&gt;javascript events&lt;/b&gt;". But why? jQuery has already a trigger method for this kind of need ! If you can't get why you have to use this plugin. Try to inject jQuery on this &lt;a href="http://demos.mootools.net/Fx.Slide%20"&gt;Mootools demo page&lt;/a&gt; and run:&lt;br /&gt;&lt;code&gt;jQuery('#v_toggle').click(); //or .trigger('click')&lt;/code&gt;&lt;br /&gt;Nothing happens... That's because Mootools &amp;amp; jQuery have their own way to create and fire events. They do this way to support bind namespacing, multiple binding ...&lt;br /&gt;&lt;br /&gt;&lt;a href="http://github.com/FGRibreau/jQuery-plugin-fireEvent"&gt;jQuery FireEvent &lt;/a&gt;allows you to fire real DOM events. Now, come back to the Mootools page, inject &lt;a href="http://github.com/FGRibreau/jQuery-plugin-fireEvent"&gt;jQuery fireEvent plugin&lt;/a&gt; and run:&lt;br /&gt;&lt;code&gt;jQuery('#v_toggle').fireEvent('click');&lt;/code&gt;&lt;br /&gt;Even if the &lt;i&gt;v_toggle&lt;/i&gt; element was binded with some Mootools magic, because we're firing a real DOM event, all works great ! This plugin is really useful in high conflicted environment where we can't find if an element was binded by one or more javascript libraries.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://github.com/FGRibreau/jQuery-plugin-fireEvent"&gt;Fork jQuery FireEvent on GitHub&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8128983-8486414170976413427?l=blog.fgribreau.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.fgribreau.com/feeds/8486414170976413427/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8128983&amp;postID=8486414170976413427&amp;isPopup=true' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8128983/posts/default/8486414170976413427'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8128983/posts/default/8486414170976413427'/><link rel='alternate' type='text/html' href='http://blog.fgribreau.com/2010/08/jquery-fireevent-plugin-for-firing-real.html' title='jQuery FireEvent - A Plugin for firing real DOM events'/><author><name>François-Guillaume Ribreau</name><uri>http://www.blogger.com/profile/09541846055227993599</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01541021242297486133'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8128983.post-6294252111593153423</id><published>2010-07-19T01:56:00.001+02:00</published><updated>2010-08-10T18:39:32.819+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='iMovie'/><category scheme='http://www.blogger.com/atom/ns#' term='iPhone'/><title type='text'>iMovie pour iPhone == nul !</title><content type='html'>Il n'y a pas de mots assez fort pour exprimer mon mécontentement vis à vis de iMovie pour iPhone. L'application après 3 jours d'utilisation devient totalement buguée. L'ajout d'un clip au projet empeche la lecture, les transitions ne se lancent plus, le passage d'un clip à un autre ne s'effectue pas (les clips suivants ne sont pas lu). Seul la musique est lancée en arrière plan. Il est possible de redimensionner le dernier clip avec des comportements improbables: réduire le clip au delà de sa taille, entraine la réduction du temps total du projet (et donc la réduction des autres clips)&lt;br /&gt;&lt;br /&gt;Comment Apple peut promouvoir un produit aussi bugué lors d'une keynote? Apple est pour moi une marque représantant la fiabilité... iMovie pour iPhone est tout sauf fiable (Il faut parfois plusieurs démarrages avant qu'il ne daigne se lancer)&lt;br /&gt;&lt;br /&gt;Le chargement de l'applications et des clips dépassent largement les 10secs (4 projets, plus de 160 vidéos).&lt;br /&gt;&lt;br /&gt;Bref, en tant qu'utilisateur je suis extrement irrité par cette application dont les performances et la fiabilitée se rapprochent plus d'une version alpha qu'autre chose.&lt;br /&gt;&lt;br /&gt;J'attends une mise à jour gratuite et une application à la hauteur des produits Apple.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8128983-6294252111593153423?l=blog.fgribreau.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.fgribreau.com/feeds/6294252111593153423/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8128983&amp;postID=6294252111593153423&amp;isPopup=true' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8128983/posts/default/6294252111593153423'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8128983/posts/default/6294252111593153423'/><link rel='alternate' type='text/html' href='http://blog.fgribreau.com/2010/07/imovie-pour-iphone-nul.html' title='iMovie pour iPhone == nul !'/><author><name>François-Guillaume Ribreau</name><uri>http://www.blogger.com/profile/09541846055227993599</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01541021242297486133'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8128983.post-7577138418068964330</id><published>2010-08-02T16:59:00.005+02:00</published><updated>2010-08-02T17:06:34.427+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='apc'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><title type='text'>[Snippet PHP] apc_exists for APC &lt; 3.1.4</title><content type='html'>&lt;h3&gt;Problem:&lt;/h3&gt;&lt;br /&gt;&lt;code&gt;&lt;b&gt;Fatal error&lt;/b&gt;:  Call to undefined function &lt;span style="font-weight: bold;"&gt;apc_exists&lt;/span&gt;() in &lt;b style="font-weight: bold;"&gt;xxxx.php&lt;/b&gt;&lt;span style="font-weight: bold;"&gt; &lt;/span&gt;on line &lt;span style="font-weight: bold;"&gt;xx&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;That's because &lt;span style="font-weight: bold;"&gt;APC&lt;/span&gt; may not be activated or because your &lt;span style="font-weight: bold;"&gt;APC&lt;/span&gt; version is less than &lt;span style="font-weight: bold;"&gt;3.1.4&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Fix:&lt;/h3&gt;&lt;br /&gt;&lt;script src="http://gist.github.com/504765.js?file=APC_exists.php"&gt;&lt;/script&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8128983-7577138418068964330?l=blog.fgribreau.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.fgribreau.com/feeds/7577138418068964330/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8128983&amp;postID=7577138418068964330&amp;isPopup=true' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8128983/posts/default/7577138418068964330'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8128983/posts/default/7577138418068964330'/><link rel='alternate' type='text/html' href='http://blog.fgribreau.com/2010/08/snippet-php-apcexists-for-apc-314.html' title='[Snippet PHP] apc_exists for APC &lt; 3.1.4'/><author><name>François-Guillaume Ribreau</name><uri>http://www.blogger.com/profile/09541846055227993599</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01541021242297486133'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8128983.post-1478032718259027206</id><published>2010-08-02T07:00:00.001+02:00</published><updated>2010-08-02T07:00:01.595+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jquery'/><title type='text'>How to know if $ is jQuery ?</title><content type='html'>Sometime (mostly in highly conflicted environement) you may want to know if &lt;span style="font-weight: bold;"&gt;$&lt;/span&gt; is really a&lt;span style="font-weight: bold;"&gt; jQuery&lt;/span&gt; alias. Because &lt;span style="font-weight: bold;"&gt;$&lt;/span&gt; can be an alias for &lt;span style="font-weight: bold;"&gt;Mootools&lt;/span&gt; too (and of course other libs).&lt;br /&gt;&lt;br /&gt;Here is a way to detect jQuery:&lt;br /&gt;&lt;script src="http://gist.github.com/500901.js?file=Detect_jQuery.js"&gt;&lt;/script&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8128983-1478032718259027206?l=blog.fgribreau.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.fgribreau.com/feeds/1478032718259027206/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8128983&amp;postID=1478032718259027206&amp;isPopup=true' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8128983/posts/default/1478032718259027206'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8128983/posts/default/1478032718259027206'/><link rel='alternate' type='text/html' href='http://blog.fgribreau.com/2010/08/how-to-know-if-is-jquery.html' title='How to know if $ is jQuery ?'/><author><name>François-Guillaume Ribreau</name><uri>http://www.blogger.com/profile/09541846055227993599</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01541021242297486133'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8128983.post-1532807978451504919</id><published>2010-08-02T07:00:00.000+02:00</published><updated>2010-07-30T18:48:14.240+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='profiling'/><category scheme='http://www.blogger.com/atom/ns#' term='firebug'/><title type='text'>How to get the call-stack of a javascript function</title><content type='html'>And to be more precise: How to get the &lt;span style="font-weight: bold;"&gt;call-stack&lt;/span&gt; of a &lt;span style="font-weight: bold;"&gt;Javascript&lt;/span&gt; function everytime she's called without blocking the execution.&lt;br /&gt;&lt;br /&gt;From time to time you may want to see every call-stack of a specific function for profiling concerns.&lt;br /&gt;&lt;br /&gt;Here is a naive approach:&lt;br /&gt;&lt;script src="http://gist.github.com/500850.js?file=naive_code.js"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;When executed in &lt;span style="font-weight: bold;"&gt;firebug&lt;/span&gt;, only 1 Error is shown. We miss the &lt;span style="font-style: italic;"&gt;alert() &lt;/span&gt;and the second call from &lt;span style="font-style: italic;"&gt;doAnotherThing&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Solution? Prefer &lt;span style="font-style: italic;"&gt;console.log&lt;/span&gt; instead of &lt;span style="font-style: italic;"&gt;throw&lt;/span&gt;:&lt;br /&gt;&lt;script src="http://gist.github.com/500850.js?file=Non-blocking-error.js"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;Now our 2 error (with call-stack) appear in Firebug while the &lt;span style="font-style: italic;"&gt;alert('ok')&lt;/span&gt; pop-out as expected.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8128983-1532807978451504919?l=blog.fgribreau.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.fgribreau.com/feeds/1532807978451504919/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8128983&amp;postID=1532807978451504919&amp;isPopup=true' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8128983/posts/default/1532807978451504919'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8128983/posts/default/1532807978451504919'/><link rel='alternate' type='text/html' href='http://blog.fgribreau.com/2010/07/how-to-get-call-stack-of-javascript.html' title='How to get the call-stack of a javascript function'/><author><name>François-Guillaume Ribreau</name><uri>http://www.blogger.com/profile/09541846055227993599</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01541021242297486133'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8128983.post-3636115711321278196</id><published>2010-07-30T17:18:00.004+02:00</published><updated>2010-07-30T18:22:14.897+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='inception'/><category scheme='http://www.blogger.com/atom/ns#' term='geek'/><title type='text'>[Fun] The Inception Code ! (spoiler)</title><content type='html'>While watching Inception I couldn't stop thinking about recursion (a dream in a dream).&lt;br /&gt;And here we are...&lt;br /&gt;&lt;br /&gt;&lt;script src="http://gist.github.com/500804.js?file=Inception%20Code.js"&gt;&lt;/script&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8128983-3636115711321278196?l=blog.fgribreau.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.fgribreau.com/feeds/3636115711321278196/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8128983&amp;postID=3636115711321278196&amp;isPopup=true' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8128983/posts/default/3636115711321278196'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8128983/posts/default/3636115711321278196'/><link rel='alternate' type='text/html' href='http://blog.fgribreau.com/2010/07/fun-inception-code-spoiler.html' title='[Fun] The Inception Code ! (spoiler)'/><author><name>François-Guillaume Ribreau</name><uri>http://www.blogger.com/profile/09541846055227993599</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01541021242297486133'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8128983.post-668539883638797341</id><published>2010-01-09T15:47:00.007+01:00</published><updated>2010-03-29T00:55:43.249+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='css3'/><category scheme='http://www.blogger.com/atom/ns#' term='conference'/><category scheme='http://www.blogger.com/atom/ns#' term='slides'/><category scheme='http://www.blogger.com/atom/ns#' term='html5'/><category scheme='http://www.blogger.com/atom/ns#' term='diaporama'/><title type='text'>Diaporama de ma conférence "Découverte HTML5/CSS3"</title><content type='html'>Voici le diaporama de ma conférence "Découverte HTML5/CSS3" avec une introduction aux bonnes pratiques dans le développement web:&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;div style="width: 425px; text-align: center; opacity: 1 ! important;" id="__ss_2853417"&gt;&lt;a style="margin: 12px 0pt 3px; font: 14px Helvetica,Arial,Sans-serif; display: block; text-decoration: underline;" href="http://www.slideshare.net/FGRibreau/dcouverte-html5css3-2853417" title="Découverte HTML5/CSS3"&gt;Découverte HTML5/CSS3&lt;/a&gt;&lt;br /&gt;&lt;div style="width:100%;text-align:center"&gt;&lt;br /&gt;&lt;object style="margin: 0pt auto; width: 100%; text-align: center; opacity: 1 ! important;" height="355"&gt;&lt;param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=css3-100107141521-phpapp01&amp;amp;stripped_title=dcouverte-html5css3-2853417"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowScriptAccess" value="always"&gt;&lt;embed src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=css3-100107141521-phpapp01&amp;amp;stripped_title=dcouverte-html5css3-2853417" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" style="width: 100%; text-align: center;" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;N'hésitez pas à commenter, mettre en favoris le diaporama sur la page &lt;a href="http://www.slideshare.net/FGRibreau/dcouverte-html5css3-2853417"&gt;slideshare&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8128983-668539883638797341?l=blog.fgribreau.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8128983/posts/default/668539883638797341'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8128983/posts/default/668539883638797341'/><link rel='alternate' type='text/html' href='http://blog.fgribreau.com/2010/01/diaporama-de-ma-conference-decouverte.html' title='Diaporama de ma conférence &quot;Découverte HTML5/CSS3&quot;'/><author><name>François-Guillaume Ribreau</name><uri>http://www.blogger.com/profile/09541846055227993599</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01541021242297486133'/></author></entry><entry><id>tag:blogger.com,1999:blog-8128983.post-376411170428970838</id><published>2010-03-24T12:20:00.008+01:00</published><updated>2010-03-26T19:54:45.715+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='webkit'/><category scheme='http://www.blogger.com/atom/ns#' term='css3'/><category scheme='http://www.blogger.com/atom/ns#' term='spritely'/><title type='text'>Spritely in PURE CSS3</title><content type='html'>(&lt;span style="font-weight: bold;"&gt;Disclaimer&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;:&lt;/span&gt; I've tried in an entirely week-end to animate birds using only CSS3 but without great success... sorry about that).&lt;br /&gt;&lt;br /&gt;1) animate the clouds (#clouds):&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;div style="text-align: left;"&gt;&lt;code&gt;@-webkit-keyframes animClouds{&lt;br /&gt;    0%    {background-position: 0px 102px; }&lt;br /&gt;    100%  {background-position: -1068px 102px; }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;#clouds {&lt;br /&gt;-webkit-animation-name: animClouds;&lt;br /&gt;-webkit-animation-duration: 70s;&lt;br /&gt;-webkit-animation-timing-function: linear;&lt;br /&gt;-webkit-animation-iteration-count: infinite;&lt;br /&gt;&lt;br /&gt;/* is the same as */&lt;br /&gt;-webkit-animation:animClouds 70s linear 0s infinite;&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;2) animate the hills (#hill2 &amp;amp; #hill1):&lt;code&gt;&lt;br /&gt;@-webkit-keyframes animHill2{&lt;br /&gt;      from    {background-position: 0px 258px; }&lt;br /&gt;      to  {background-position: -1110px 258px; }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;@-webkit-keyframes animHill1{&lt;br /&gt;      0%    {background-position: 0px 104px; }&lt;br /&gt;      100%  {background-position: -2220px 104px; }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;#hill2{&lt;br /&gt;  -webkit-animation: animHill2 25s linear 0s infinite;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;#hill1 {&lt;br /&gt;  -webkit-animation: animHill1 25s linear 0s infinite;&lt;br /&gt;}&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;And that's all ! Check the demos here (Safari/Chrome only): &lt;span style="font-weight: bold;font-size:130%;" &gt;&lt;a href="http://projets.geekfg.net/?/10-spritely+in+pure+css3+using+css3+animations+transitions+transform+webkit+only+.htm"&gt;Demo  1&lt;/a&gt; &lt;a href="http://projets.geekfg.net/?/11-spritely+in+pure+css3+using+css3+animations+transforms+webkit+only+.htm"&gt;Demo  2&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="width: 100%; text-align: center;" id="__ss_3542117"&gt;&lt;strong style="display: block; margin: 12px 0pt 4px;"&gt;&lt;a href="http://www.slideshare.net/FGRibreau/approfondissement-css3" title="Approfondissement CSS3"&gt;Approfondissement CSS3&lt;/a&gt;&lt;/strong&gt;&lt;object width="425" height="355"&gt;&lt;param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=css3-100324145556-phpapp01&amp;amp;rel=0&amp;amp;stripped_title=approfondissement-css3"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowScriptAccess" value="always"&gt;&lt;embed src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=css3-100324145556-phpapp01&amp;amp;rel=0&amp;amp;stripped_title=approfondissement-css3" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8128983-376411170428970838?l=blog.fgribreau.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.fgribreau.com/feeds/376411170428970838/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8128983&amp;postID=376411170428970838&amp;isPopup=true' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8128983/posts/default/376411170428970838'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8128983/posts/default/376411170428970838'/><link rel='alternate' type='text/html' href='http://blog.fgribreau.com/2010/03/spritely-in-pure-css3.html' title='Spritely in PURE CSS3'/><author><name>François-Guillaume Ribreau</name><uri>http://www.blogger.com/profile/09541846055227993599</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01541021242297486133'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8128983.post-8351699070369393634</id><published>2010-01-13T13:04:00.010+01:00</published><updated>2010-01-13T15:44:28.335+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jquery'/><title type='text'>jQuery 1.4: What's new &amp; useful</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_m_Z-AShWn4s/S03aCNjcxUI/AAAAAAAAAOQ/yAJ110klCvE/s1600-h/jquery-logo.png"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 186px; height: 186px;" src="http://4.bp.blogspot.com/_m_Z-AShWn4s/S03aCNjcxUI/AAAAAAAAAOQ/yAJ110klCvE/s320/jquery-logo.png" alt="" id="BLOGGER_PHOTO_ID_5426232857584256322" border="0" /&gt;&lt;/a&gt;You may not have noticed but I've &lt;a href="http://twitter.com/FGRibreau"&gt;tweeted&lt;/a&gt; about jQuery 1.4 new features. Here is my selection of the best jQuery 1.4 brand-new methods:&lt;br /&gt;&lt;br /&gt;#jQuery 1.4 .&lt;span style="font-weight: bold;"&gt;delay&lt;/span&gt;( duration, [ queueName ] ) method seems very useful ! &lt;a href="http://api.jquery.com/delay/"&gt;http://api.jquery.com/delay/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;#jQuery 1.4 .&lt;span style="font-weight: bold;"&gt;toArray&lt;/span&gt;(); //helper&lt;br /&gt;&lt;code&gt;toArray: function() { return slice.call( this, 0 ); }&lt;/code&gt; &lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;#jQuery 1.4 .&lt;span style="font-weight: bold;"&gt;prevUntil&lt;/span&gt;() .&lt;span style="font-weight: bold;"&gt;nextUntil&lt;/span&gt;() .&lt;span style="font-weight: bold;"&gt;parentsUntil&lt;/span&gt;() ROCKS! &lt;a href="http://bit.ly/5DDcsv"&gt;http://bit.ly/5DDcsv&lt;/a&gt; //A new way for traversing the DOM :)&lt;br /&gt;&lt;br /&gt;#jQuery 1.4  jQuery.&lt;span style="font-weight: bold;"&gt;noop&lt;/span&gt;() ? I Don't get the point... &lt;a href="http://api.jquery.com/jQuery.noop/"&gt;http://api.jquery.com/jQuery.noop/&lt;/a&gt;&lt;br /&gt;&lt;code&gt;noop: function(){}&lt;/code&gt;&lt;span style="font-weight: bold;"&gt; &lt;/span&gt;&lt;br /&gt;#jQuery 1.4 .&lt;span style="font-weight: bold;"&gt;isEmptyObject&lt;/span&gt;(obj) //helper&lt;br /&gt;&lt;code&gt;isEmptyObject: function( obj ) { for ( var name in obj ) { return false; } return true; }&lt;/code&gt;&lt;span style="font-weight: bold;"&gt; &lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span class="status-body"&gt;&lt;span class="entry-content"&gt;&lt;span style="font-size:78%;"&gt;&lt;span class="status-body"&gt;&lt;span class="meta entry-meta"&gt;&lt;a class="entry-date" rel="bookmark" href="http://twitter.com/FGRibreau/status/7705732151"&gt;&lt;span class="published timestamp" data="{time:'Wed Jan 13 12:03:09 +0000 2010'}"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="tweet"&gt;&lt;br /&gt;Don't forget to follow me on twitter &lt;a href="http://twitter.com/FGRibreau"&gt;@FGRibreau&lt;/a&gt; :)&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8128983-8351699070369393634?l=blog.fgribreau.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.fgribreau.com/feeds/8351699070369393634/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8128983&amp;postID=8351699070369393634&amp;isPopup=true' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8128983/posts/default/8351699070369393634'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8128983/posts/default/8351699070369393634'/><link rel='alternate' type='text/html' href='http://blog.fgribreau.com/2010/01/jquery-14-whats-new-useful.html' title='jQuery 1.4: What&apos;s new &amp; useful'/><author><name>François-Guillaume Ribreau</name><uri>http://www.blogger.com/profile/09541846055227993599</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01541021242297486133'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_m_Z-AShWn4s/S03aCNjcxUI/AAAAAAAAAOQ/yAJ110klCvE/s72-c/jquery-logo.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8128983.post-4136532651565296000</id><published>2009-11-30T19:35:00.008+01:00</published><updated>2009-11-30T21:19:25.508+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='api'/><category scheme='http://www.blogger.com/atom/ns#' term='Kuripotxt'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><category scheme='http://www.blogger.com/atom/ns#' term='sms'/><title type='text'>My (unofficial) Kuripotxt PHP API</title><content type='html'>If you follow me on &lt;a href="http://twitter.com/FGRibreau"&gt;twitter&lt;/a&gt;, you may have seen these tweets :&lt;br /&gt;&lt;blockquote&gt;Kuripotxt.net, my new free #sms gateway #Hijack (flickr) &lt;a href="http://flic.kr/p/7iRJpK"&gt;http://flic.kr/p/7iRJpK&lt;/a&gt; &lt;span style="font-size:78%;"&gt;3:38 PM Nov 28th&lt;/span&gt;&lt;/blockquote&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://www.flickr.com/photos/geekfg/4140224193/" title="Kuripotxt.net, my new free sms gateway #Hijack de geekfg, sur Flickr"&gt;&lt;img src="http://farm3.static.flickr.com/2492/4140224193_c69d7024bb.jpg" alt="Kuripotxt.net, my new free sms gateway #Hijack" height="177" width="500" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;blockquote&gt;Kuripotxt, free sms "api": Hijack Part2 &lt;a href="http://flic.kr/p/7iVJtm"&gt;http://flic.kr/p/7iVJtm&lt;/a&gt; &lt;span style="font-size:78%;"&gt;3:48 PM Nov 28th&lt;/span&gt;&lt;/blockquote&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://www.flickr.com/photos/geekfg/4141004850/" title="Kuripotxt, free sms &amp;quot;api&amp;quot;: Hijack part2 de geekfg, sur Flickr"&gt;&lt;img src="http://farm3.static.flickr.com/2613/4141004850_afd7f38dea.jpg" alt="Kuripotxt, free sms &amp;quot;api&amp;quot;: Hijack part2" height="143" width="500" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;blockquote&gt;Yeah... It works ! (on my blog in less than 1 hour :)&lt;br /&gt;$myGateway = new Kuripotxt();&lt;br /&gt;$myGateway-&gt;sendSms(33600000000,"Hello World"); &lt;span style="font-size:78%;"&gt;16 minutes ago&lt;/span&gt;&lt;/blockquote&gt;&lt;br /&gt;After one hour of development, I am glad to show you a PHP Class for Kuripotxt using the &lt;a href="http://scripts.incutio.com/httpclient/index.php"&gt;HttpClient&lt;/a&gt; library.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Usage:&lt;/span&gt;&lt;br /&gt;&lt;code&gt;include "kuripotxt.class.php";&lt;br /&gt;&lt;br /&gt;$mySender = new Kuripotxt();&lt;br /&gt;//International number format without "+"&lt;br /&gt;$phoneNumber = 33612345678;&lt;br /&gt;$mySender-&gt;sendSms($phoneNumber,'Hello world');//one method&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-size:130%;"&gt;&lt;a href="http://github.com/FGRibreau/Kuripotxt/zipball/master"&gt;[Download ZIP]&lt;/a&gt; &lt;a href="http://github.com/FGRibreau/Kuripotxt/"&gt;[Browse on GitHub]&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8128983-4136532651565296000?l=blog.fgribreau.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.fgribreau.com/feeds/4136532651565296000/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8128983&amp;postID=4136532651565296000&amp;isPopup=true' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8128983/posts/default/4136532651565296000'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8128983/posts/default/4136532651565296000'/><link rel='alternate' type='text/html' href='http://blog.fgribreau.com/2009/11/my-unofficial-kuripotxt-php-api.html' title='My (unofficial) Kuripotxt PHP API'/><author><name>François-Guillaume Ribreau</name><uri>http://www.blogger.com/profile/09541846055227993599</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01541021242297486133'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8128983.post-4807617566513672880</id><published>2009-11-30T10:07:00.002+01:00</published><updated>2009-11-30T10:12:29.285+01:00</updated><title type='text'>[Video] Mon Passage à France 3</title><content type='html'>&lt;object height="300" width="400"&gt;&lt;param name="allowfullscreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=7847169&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=&amp;amp;fullscreen=1"&gt;&lt;embed src="http://vimeo.com/moogaloop.swf?clip_id=7847169&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=&amp;amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" height="300" width="400"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;p&gt;&lt;a href="http://simonrobic.com/"&gt;Simon Robic&lt;/a&gt; et moi même avons été interviewés lundi par France 3 Pays de la Loire. Le reportage a été diffusé jeudi dernier, et le voici en ligne :)&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8128983-4807617566513672880?l=blog.fgribreau.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.fgribreau.com/feeds/4807617566513672880/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8128983&amp;postID=4807617566513672880&amp;isPopup=true' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8128983/posts/default/4807617566513672880'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8128983/posts/default/4807617566513672880'/><link rel='alternate' type='text/html' href='http://blog.fgribreau.com/2009/11/video-mon-passage-france-3.html' title='[Video] Mon Passage à France 3'/><author><name>François-Guillaume Ribreau</name><uri>http://www.blogger.com/profile/09541846055227993599</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01541021242297486133'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8128983.post-6066268897378962337</id><published>2009-03-24T18:18:00.004+01:00</published><updated>2009-11-28T01:27:09.198+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='jquery'/><title type='text'>Gérer les éléments input radio avec jQuery</title><content type='html'>&lt;p&gt;J’ai eu hier une question sur la manipulation des éléments radio en Javascript. La personne voulait vérifier que pour chacun de ses groupes de radio, au moins un radio était sélectionné.&lt;/p&gt;Plusieurs solutions en Javascript “pur” existent sur Internet mais aucune ne semblait simple à appliquer par cette personne. Je propose donc ici quelques &lt;a href="http://fr.wikipedia.org/wiki/Snippet"&gt;snippets&lt;/a&gt; jQuery pour exploiter simplement les éléments Radio.&lt;br /&gt;&lt;p&gt;Nous partirons donc d’une page incluant la librairie jQuery et le code XHTML suivant :&lt;/p&gt;&lt;code&gt;&amp;lt;form action="?" method="get" id="monForm"&amp;gt;&lt;br /&gt;&amp;lt;input type="radio" name="opt1" value="1" checked="checked"  /&amp;gt;&lt;br /&gt;&amp;lt;input type="radio" name="opt1" value="2" /&amp;gt;&lt;br /&gt;&amp;lt;input type="radio" name="opt1" value="3"/&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;input type="radio" name="opt2" value="1" /&amp;gt;&lt;br /&gt;&amp;lt;input type="radio" name="opt2" value="2" checked="checked" /&amp;gt;&lt;br /&gt;&amp;lt;input type="radio" name="opt2" value="3" /&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;input type="radio" name="opt3" value="1" checked="checked" /&amp;gt;&lt;br /&gt;&amp;lt;input type="radio" name="opt3" value="2" /&amp;gt;&lt;br /&gt;&amp;lt;input type="radio" name="opt3" value="3"/&amp;gt;&lt;br /&gt;&amp;lt;/form&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Accéder aux inputs de type radio en jQuery&lt;/h3&gt;Il existe plusieurs façon d’accéder aux inputs de type radio en jQuery, j’ai réalisé quelques tests afin de définir quelles expressions étaient les plus rapides :&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/geekfg/3380619360/" title="Benchmark jQuery de geekfg, sur Flickr"&gt;&lt;img src="http://farm4.static.flickr.com/3613/3380619360_5c2dbb51c1_o.png" alt="Benchmark jQuery" height="209" width="500" /&gt;&lt;/a&gt;&lt;a href="http://www.flickr.com/photos/geekfg/3380619360/" title="Benchmark jQuery de geekfg, sur Flickr"&gt;&lt;br /&gt;&lt;/a&gt;Il en ressort que l’expression &lt;strong&gt;input[type=radio]&lt;/strong&gt; est plus rapide que &lt;strong&gt;input:radio&lt;/strong&gt; (mais est-elle autant générique ?)&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;Le résultat sont très variable lorsque l’on précise un contexte (ici &lt;strong&gt;#monForm&lt;/strong&gt;) et un grand nombre de radio. Je pense donc que les trois dernières expressions &lt;span style="text-decoration: underline;"&gt;ne sont pas à prendre en compte dans l’analyse, du moins pour le moment&lt;/span&gt;. (Je travaille actuellement à améliorer mon outils de Benchmark afin que chacun puisse tester ses propres expressions jQuery).&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;h3&gt;Récupérer tous les inputs radios appartenant à un même groupe&lt;/h3&gt;&lt;p&gt;&lt;code&gt;$('input[type=radio][name=opt1]');//ici retourne 3 éléments input&lt;/code&gt;&lt;/p&gt;&lt;h3&gt;Connaître si un groupe de radio à une valeur&lt;/h3&gt;&lt;p&gt;&lt;code&gt;$('input[type=radio][name=opt1]:checked').length; // Doit être égal à 1 si un radio à été sélectionné dans le groupe de opt1.&lt;/code&gt;&lt;/p&gt;&lt;h3&gt;Vérifier que tous les radios ont été sélectionnés&lt;/h3&gt;&lt;p&gt;&lt;code&gt;$('input[type=radio]:checked').length; // Si au moins un radio est sélectionné pour chaque groupe, ce snippet retourne 3 (dans notre exemple)&lt;/code&gt;&lt;/p&gt;&lt;h3&gt;Récupérer la valeur d’un groupe de radio&lt;/h3&gt;&lt;p&gt;&lt;code&gt;$('input[type=radio][name=opt1]:checked').attr('value'); //Retourne la valeur du radio sélectionné dans le groupe opt1. Retourne vide si aucun radio sélectionné&lt;/code&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8128983-6066268897378962337?l=blog.fgribreau.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.fgribreau.com/feeds/6066268897378962337/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8128983&amp;postID=6066268897378962337&amp;isPopup=true' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8128983/posts/default/6066268897378962337'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8128983/posts/default/6066268897378962337'/><link rel='alternate' type='text/html' href='http://blog.fgribreau.com/2009/03/gerer-les-elements-input-radio-avec.html' title='Gérer les éléments input radio avec jQuery'/><author><name>François-Guillaume Ribreau</name><uri>http://www.blogger.com/profile/09541846055227993599</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01541021242297486133'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8128983.post-6304715308675193242</id><published>2009-10-28T16:48:00.005+01:00</published><updated>2009-10-29T22:54:44.131+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='twitter'/><title type='text'>Lancement des versions localisées de Twitter</title><content type='html'>Billet très rapide pour annoncer le lancement officiel de :&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://twitterangers.com"&gt;Twitter Angers&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://twitterberlin.net/"&gt;Twitter Berlin&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://twitterbordeaux.com/"&gt;Twitter Bordeaux&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://twitterbrest.com/"&gt;Twitter Brest&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://twittercannes.com/"&gt;Twitter Cannes&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://twittergrenoble.com/"&gt;Twitter Grenoble&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://twitterlille.com/"&gt;Twitter Lille&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://twitterlondon.org/"&gt;Twitter London&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://twitterlyon.com/"&gt;Twitter Lyon&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://twittermadrid.com/"&gt;Twitter Madrid&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://twittermarseille.com/"&gt;Twitter Marseille&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://twittermontpellier.com/"&gt;Twitter Montpellier&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://twitternice.com/"&gt;Twitter Nice&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://twitterparis.net/"&gt;Twitter Paris&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://twitterrennes.com/"&gt;Twitter Rennes&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://twitterrome.com/"&gt;Twitter Roma&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://twitterstrasbourg.com/"&gt;Twitter Strasbourg&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://twittertokyo.net/"&gt;Twitter Tokyo&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://twittertoulouse.com/"&gt;Twitter Toulouse&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://twitternyc.net/"&gt;Twitter NYC&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://twitternewyork.org/"&gt;Twitter NewYork&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;J'essayerai d'écrire un autre billet pour donner plus d'informations techniques sur l'architecture des sites.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8128983-6304715308675193242?l=blog.fgribreau.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.fgribreau.com/feeds/6304715308675193242/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8128983&amp;postID=6304715308675193242&amp;isPopup=true' title='1 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8128983/posts/default/6304715308675193242'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8128983/posts/default/6304715308675193242'/><link rel='alternate' type='text/html' href='http://blog.fgribreau.com/2009/10/lancement-des-versions-localises-de.html' title='Lancement des versions localisées de Twitter'/><author><name>François-Guillaume Ribreau</name><uri>http://www.blogger.com/profile/09541846055227993599</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01541021242297486133'/></author><thr:total>1</thr:total></entry></feed>