<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10frenchfull.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;CEMBQ3k7fSp7ImA9WhRUGEs.&quot;"><id>tag:blogger.com,1999:blog-8128983</id><updated>2012-01-29T19:40:52.705+01:00</updated><category term="windows seven" /><category term="amqp" /><category term="astuce" /><category term="cli" /><category term="c/c++" /><category term="ecmascript" /><category term="sms" /><category term="html5" /><category term="spritely" /><category term="vistarc" /><category term="firebug" /><category term="iMovie" /><category term="api" /><category term="pdo" /><category term="vistavatar" /><category term="chrome" /><category term="c#" /><category term="firefox" /><category term="test" /><category term="audio" /><category term="hackathon" /><category term="css" /><category term="web 2.0" /><category term="bookmarklet" /><category term="rss" /><category term="peerguardian" /><category term="xpath" /><category term="comparatif" /><category term="inception" /><category term="xss" /><category term="Kuripotxt" /><category term="tv" /><category term="promethee" /><category term="playframework" /><category term="xhtml" /><category term="ginger" /><category term="opera" /><category term="vb.net" /><category term="ebuzzing" /><category term="epsi" /><category term="xml" /><category term="ciel" /><category term="preg" /><category term="xmpp" /><category term="webdav" /><category term="plurkcounter" /><category term="css3" /><category term="language" /><category term="geek" /><category term="diaporama" /><category term="wordpress" /><category term="WEBO" /><category term="1and1" /><category term="android" /><category term="dojo" /><category term="iPhone" /><category term="cross-domain" /><category term="flickr" /><category term="digg" /><category term="projet" /><category term="netvibes" /><category term="mac" /><category term="dropbox" /><category term="dsl" /><category term="ovh" /><category term="dev" /><category term="selector" /><category term="orange" /><category term="feedburner" /><category term="gd" /><category term="plugins" /><category term="widget" /><category term="prototype" /><category term="json" /><category term="google" /><category term="yui" /><category term="slides" /><category term="reverse-engineering" /><category term="javascript" /><category term="apple" /><category term="123People" /><category term="buzzparadise" /><category term="github" /><category term="social" /><category term="gadget" /><category term="conference" /><category term="curl" /><category term="web2day" /><category term="preg_replace" /><category term="doyoubuzz" /><category term="node" /><category term="php js" /><category term="excel" /><category term="feedback" /><category term="webkit" /><category term="monnuage" /><category term="domaine" /><category term="debounce" /><category term="spyware" /><category term="nodejs" /><category term="projets" /><category term="rabbitmq" /><category term="windows" /><category term="forever" /><category term="plazu" /><category term="access" /><category term="canvas" /><category term="algorithme" /><category term="apache" /><category term="mootools" /><category term="growl" /><category term="stage" /><category term="vba" /><category term="hack" /><category term="del.icio.us" /><category term="snippet" /><category term="extensions" /><category term="basic" /><category term="tool" /><category term="php" /><category term="ajax" /><category term="hebergement" /><category term="domainfinder" /><category term="preg_replace_callback" /><category term="blog" /><category term="ascii" /><category term="google chrome" /><category term="vb" /><category term="jquery" /><category term="vb6" /><category term="blogger" /><category term="plurk" /><category term="sql" /><category term="matrix" /><category term="twitter" /><category term="gam3r" /><category term="htaccess" /><category term="stage2008" /><category term="n-gram" /><category term="apc" /><category term="profiling" /><category term="gmail" /><category term="foursquare" /><category term="systeme" /><category term="casio" /><title>Francois Guillaume Ribreau</title><subtitle type="html" /><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://blog.fgribreau.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://blog.fgribreau.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;redirect=false&amp;v=2" /><author><name>François-Guillaume Ribreau</name><uri>http://www.blogger.com/profile/09541846055227993599</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="24" src="http://3.bp.blogspot.com/_m_Z-AShWn4s/TH9mJPB9T-I/AAAAAAAAAPY/RK9yZT8DA2M/S220/2009_shooting_medium.png" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>137</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/geekfg" /><feedburner:info uri="geekfg" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:emailServiceId>geekfg</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><feedburner:feedFlare href="http://www.newsgator.com/ngs/subscriber/subext.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2Fgeekfg" src="http://www.newsgator.com/images/ngsub1.gif">Subscribe with NewsGator</feedburner:feedFlare><feedburner:feedFlare href="http://www.bloglines.com/sub/http://feeds.feedburner.com/geekfg" src="http://www.bloglines.com/images/sub_modern11.gif">Subscribe with Bloglines</feedburner:feedFlare><feedburner:feedFlare href="http://www.netvibes.com/subscribe.php?url=http%3A%2F%2Ffeeds.feedburner.com%2Fgeekfg" src="http://www.netvibes.com/img/add2netvibes.gif">Subscribe with Netvibes</feedburner:feedFlare><feedburner:feedFlare href="http://fusion.google.com/add?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2Fgeekfg" src="http://buttons.googlesyndication.com/fusion/add.gif">Subscribe with Google</feedburner:feedFlare><feedburner:feedFlare href="http://add.my.yahoo.com/content?lg=fr&amp;url=http%3A%2F%2Ffeeds.feedburner.com%2Fgeekfg" src="http://us.i1.yimg.com/us.yimg.com/i/us/my/bn/intatm_fr_1.gif">Subscribe with Mon Yahoo!</feedburner:feedFlare><entry gd:etag="W/&quot;D0ICSH04eip7ImA9WhRUFUU.&quot;"><id>tag:blogger.com,1999:blog-8128983.post-1960474139667720164</id><published>2012-01-26T14:46:00.000+01:00</published><updated>2012-01-26T14:46:09.332+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-26T14:46:09.332+01:00</app:edited><title>[Twitter Unofficial API] Getting the tweet's number of favorites, RTs and replies</title><content type="html">I was updating an internal tool we use at &lt;a href="http://brin.gr/"&gt;brin.gr&lt;/a&gt; while suddenly I needed a way to find the number of times a specific tweet has been favorited. The Search API results didn't include this information even with&amp;nbsp;&lt;i&gt;include_entities&lt;/i&gt; set to&amp;nbsp;&lt;i&gt;true&lt;/i&gt;.&lt;br /&gt;
&lt;br /&gt;
I knew there was an API for that since the official web &amp;amp; mobile app are able to show this. So after a little network monitoring I finally found the endpoint:&lt;br /&gt;
&lt;br /&gt;
&lt;code&gt;https://api.twitter.com/i/statuses/[tweet.id]/activity/summary.json&lt;/code&gt;&lt;br /&gt;
Note: the request must be done via OAuth.&amp;nbsp;Sample payload:&lt;br /&gt;
&lt;pre&gt;&lt;code&gt;{
   "favoriters":[113682166],
   "favoriters_count":"1",
   "repliers":[],
   "repliers_count":"0",
   "retweeters_count":"1",
   "retweeters":[113682166]
}&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8128983-1960474139667720164?l=blog.fgribreau.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/geekfg?a=3uM9Tc-lEOQ:nIxWKty35-s:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/geekfg?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/geekfg?a=3uM9Tc-lEOQ:nIxWKty35-s:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/geekfg?i=3uM9Tc-lEOQ:nIxWKty35-s:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/geekfg?a=3uM9Tc-lEOQ:nIxWKty35-s:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/geekfg?i=3uM9Tc-lEOQ:nIxWKty35-s:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/geekfg/~4/3uM9Tc-lEOQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.fgribreau.com/feeds/1960474139667720164/comments/default" title="Publier les commentaires" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8128983&amp;postID=1960474139667720164&amp;isPopup=true" title="0 commentaires" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8128983/posts/default/1960474139667720164?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8128983/posts/default/1960474139667720164?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/geekfg/~3/3uM9Tc-lEOQ/twitter-unofficial-api-getting-tweets.html" title="[Twitter Unofficial API] Getting the tweet's number of favorites, RTs and replies" /><author><name>Francois-Guillaume Ribreau</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="24" src="http://2.bp.blogspot.com/-Lpi6HeYfHeE/Tu3FlD8ewYI/AAAAAAAAACE/ApkOjxPPCgQ/s220/2009_shooting_medium.png" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.fgribreau.com/2012/01/twitter-unofficial-api-getting-tweets.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A04HSXg7fSp7ImA9WhRXEE4.&quot;"><id>tag:blogger.com,1999:blog-8128983.post-134224649741131133</id><published>2011-12-15T11:33:00.001+01:00</published><updated>2011-12-16T13:52:18.605+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-16T13:52:18.605+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="rabbitmq" /><category scheme="http://www.blogger.com/atom/ns#" term="cli" /><category scheme="http://www.blogger.com/atom/ns#" term="amqp" /><category scheme="http://www.blogger.com/atom/ns#" term="nodejs" /><category scheme="http://www.blogger.com/atom/ns#" term="forever" /><category scheme="http://www.blogger.com/atom/ns#" term="dsl" /><title>Forever-WebUI, Node-AMQP-dsl &amp; Node-AMQP-tool</title><content type="html">I released three library/tool/cli this last months:&amp;nbsp;&lt;a href="https://github.com/FGRibreau/forever-webui"&gt;Forever-WebUI&lt;/a&gt;, &lt;a href="https://github.com/FGRibreau/node-amqp-dsl"&gt;Node-amqp-dsl&lt;/a&gt; &amp;amp;&amp;nbsp;&lt;a href="https://github.com/FGRibreau/node-amqp-tool"&gt;Node-amqp-tool&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Let's start with &lt;b&gt;Forever-WebUI&lt;/b&gt;.&amp;nbsp;I use forever at &lt;a href="http://brin.gr/"&gt;Brin.gr&lt;/a&gt;&amp;nbsp;for managing node processes&amp;nbsp;but I've always found the workflow slow when wanting to restart multiple scripts. So I developed a web interface that lists all running scripts and allow the user to browse logs, restart or stop scripts.&lt;br /&gt;
&lt;br /&gt;
&lt;code&gt;npm install forever-webui &amp;amp;&amp;amp; node node_modules/forever-webui/app.js&lt;/code&gt;&lt;br /&gt;
Note: if someone here knows how to update a backbone collection's view&amp;nbsp;&lt;a href="https://github.com/FGRibreau/forever-webui/blob/master/public/appjs/AppView.js#L27"&gt;without having to remove the entire list&lt;/a&gt;&amp;nbsp;and adding again one by one each view&amp;nbsp;&lt;a href="https://github.com/FGRibreau/forever-webui/issues?sort=created&amp;amp;direction=desc&amp;amp;state=open"&gt;feel free to enlight me&lt;/a&gt;&amp;nbsp;;)&lt;br /&gt;
&lt;br /&gt;
Next &lt;b&gt;Node-AMQP-dsl&lt;/b&gt; &amp;amp;&amp;nbsp;&lt;b&gt;Node-AMQP-tool&lt;/b&gt;:&amp;nbsp;Brin.gr rely&amp;nbsp;heavily&amp;nbsp;on RabbitMQ and as usual when using the same tool everyday the little annoying things quickly become a nightmare. So AMQP-dsl is a &lt;a href="http://en.wikipedia.org/wiki/Fluent_interface"&gt;fluent interface&lt;/a&gt; for &lt;a href="https://github.com/postwait/node-amqp"&gt;node-AMQP&lt;/a&gt;&amp;nbsp;(more &lt;a href="https://github.com/FGRibreau/node-amqp-dsl/tree/master/examples"&gt;examples&lt;/a&gt; on Github) ...&lt;br /&gt;
&lt;br /&gt;
&lt;script src="https://gist.github.com/1480547.js?file=blog_amqpdsl.coffee"&gt;
&lt;/script&gt;
&lt;br /&gt;
And &lt;b&gt;AMQP-tool&lt;/b&gt; is a simple CLI to easily import &amp;amp; export AMQP queue. For example, exporting 5000 messages from a queue into a file is easy as:&lt;br /&gt;
&lt;br /&gt;
&lt;code&gt;amqp-tool --host rabbitmq.local -u user -p azerty -q queuetest --count 5000 --export &amp;gt; dump.json&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8128983-134224649741131133?l=blog.fgribreau.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/geekfg?a=en1TIFExTl8:JWQ0JLv8bRo:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/geekfg?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/geekfg?a=en1TIFExTl8:JWQ0JLv8bRo:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/geekfg?i=en1TIFExTl8:JWQ0JLv8bRo:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/geekfg?a=en1TIFExTl8:JWQ0JLv8bRo:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/geekfg?i=en1TIFExTl8:JWQ0JLv8bRo:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/geekfg/~4/en1TIFExTl8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.fgribreau.com/feeds/134224649741131133/comments/default" title="Publier les commentaires" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8128983&amp;postID=134224649741131133&amp;isPopup=true" title="0 commentaires" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8128983/posts/default/134224649741131133?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8128983/posts/default/134224649741131133?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/geekfg/~3/en1TIFExTl8/forever-webui-node-amqp-dsl-node-amqp.html" title="Forever-WebUI, Node-AMQP-dsl &amp; Node-AMQP-tool" /><author><name>François-Guillaume Ribreau</name><uri>http://www.blogger.com/profile/09541846055227993599</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="24" src="http://3.bp.blogspot.com/_m_Z-AShWn4s/TH9mJPB9T-I/AAAAAAAAAPY/RK9yZT8DA2M/S220/2009_shooting_medium.png" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.fgribreau.com/2011/12/forever-webui-node-amqp-dsl-node-amqp.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEcARHc6fip7ImA9WhRSGUQ.&quot;"><id>tag:blogger.com,1999:blog-8128983.post-5438755669352831196</id><published>2011-11-07T14:25:00.002+01:00</published><updated>2011-11-22T21:00:45.916+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-22T21:00:45.916+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="javascript" /><category scheme="http://www.blogger.com/atom/ns#" term="ecmascript" /><title>Voyage au coeur de JavaScript (ECMAScript 3)</title><content type="html">&lt;div style="text-align: center;"&gt;
&lt;a href="http://fgribreau.com/articles/voyage-au-coeur-de-javascript.html"&gt;&lt;img border="0" height="320" src="http://3.bp.blogspot.com/-oVMCBtZGrTs/TrfZPbHEr5I/AAAAAAAAAVE/zbxmxr2vgiY/s320/js.png" width="320" /&gt;&lt;/a&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;a href="http://fgribreau.com/articles/voyage-au-coeur-de-javascript.html"&gt;Voyage au coeur de JavaScript (ECMAScript 3)&lt;/a&gt; est une traduction de l'excellent article &lt;b&gt;JavaScript. The Core&lt;/b&gt; de Dmitry Soshnikov.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8128983-5438755669352831196?l=blog.fgribreau.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/geekfg?a=oNfL_hGztCM:4KQpS_eRtNA:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/geekfg?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/geekfg?a=oNfL_hGztCM:4KQpS_eRtNA:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/geekfg?i=oNfL_hGztCM:4KQpS_eRtNA:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/geekfg?a=oNfL_hGztCM:4KQpS_eRtNA:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/geekfg?i=oNfL_hGztCM:4KQpS_eRtNA:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/geekfg/~4/oNfL_hGztCM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.fgribreau.com/feeds/5438755669352831196/comments/default" title="Publier les commentaires" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8128983&amp;postID=5438755669352831196&amp;isPopup=true" title="0 commentaires" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8128983/posts/default/5438755669352831196?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8128983/posts/default/5438755669352831196?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/geekfg/~3/oNfL_hGztCM/fr-voyage-au-coeur-de-javascript.html" title="Voyage au coeur de JavaScript (ECMAScript 3)" /><author><name>François-Guillaume Ribreau</name><uri>http://www.blogger.com/profile/09541846055227993599</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="24" src="http://3.bp.blogspot.com/_m_Z-AShWn4s/TH9mJPB9T-I/AAAAAAAAAPY/RK9yZT8DA2M/S220/2009_shooting_medium.png" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-oVMCBtZGrTs/TrfZPbHEr5I/AAAAAAAAAVE/zbxmxr2vgiY/s72-c/js.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.fgribreau.com/2011/11/fr-voyage-au-coeur-de-javascript.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D04EQ3o8cSp7ImA9WhdSGEo.&quot;"><id>tag:blogger.com,1999:blog-8128983.post-4429055981562049654</id><published>2011-07-28T19:57:00.001+02:00</published><updated>2011-07-28T19:58:22.479+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-28T19:58:22.479+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="monnuage" /><title>Test de l'application iPhone MonNuage</title><content type="html">En réalité, il s'agit d'un test interactif, &lt;a href="http://fgribreau.com/monnuage/"&gt;accessible ici&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;PS: La partie interactive est un Proof of Concept testé sous Chrome 12 &amp;amp; Firefox 5 (plusieurs propriétés CSS3 sont requises). Le code sera bientôt disponible sur Github avec la documentation adéquate.&lt;/i&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8128983-4429055981562049654?l=blog.fgribreau.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/geekfg?a=kG4ska3jjLU:nM95aTVv1ik:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/geekfg?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/geekfg?a=kG4ska3jjLU:nM95aTVv1ik:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/geekfg?i=kG4ska3jjLU:nM95aTVv1ik:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/geekfg?a=kG4ska3jjLU:nM95aTVv1ik:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/geekfg?i=kG4ska3jjLU:nM95aTVv1ik:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/geekfg/~4/kG4ska3jjLU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.fgribreau.com/feeds/4429055981562049654/comments/default" title="Publier les commentaires" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8128983&amp;postID=4429055981562049654&amp;isPopup=true" title="0 commentaires" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8128983/posts/default/4429055981562049654?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8128983/posts/default/4429055981562049654?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/geekfg/~3/kG4ska3jjLU/test-de-lapplication-iphone-monnuage.html" title="Test de l'application iPhone MonNuage" /><author><name>François-Guillaume Ribreau</name><uri>http://www.blogger.com/profile/09541846055227993599</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="24" src="http://3.bp.blogspot.com/_m_Z-AShWn4s/TH9mJPB9T-I/AAAAAAAAAPY/RK9yZT8DA2M/S220/2009_shooting_medium.png" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.fgribreau.com/2011/07/test-de-lapplication-iphone-monnuage.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEIGQHY4eSp7ImA9WhdTGUU.&quot;"><id>tag:blogger.com,1999:blog-8128983.post-8707906862027966175</id><published>2011-07-18T11:48:00.000+02:00</published><updated>2011-07-18T11:48:41.831+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-18T11:48:41.831+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="n-gram" /><category scheme="http://www.blogger.com/atom/ns#" term="nodejs" /><category scheme="http://www.blogger.com/atom/ns#" term="language" /><title>[Week-end Project] Nodejs language detection library using n-gram</title><content type="html">&lt;a href="https://github.com/FGRibreau/node-language-detect"&gt;&lt;b&gt;Node-language-detect&lt;/b&gt;&lt;/a&gt; is a NodeJS port of the PEAR package &lt;a href="http://pear.php.net/package/Text_LanguageDetect"&gt;Text_LanguageDetect&lt;/a&gt;&amp;nbsp;by&amp;nbsp;Nicholas Pisarro.&lt;br /&gt;
&lt;br /&gt;
&lt;script src="https://gist.github.com/1089021.js?file=LanguageDetect_Example.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-8707906862027966175?l=blog.fgribreau.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/geekfg?a=QQRuEaRSiwY:cXl-FjuOUqI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/geekfg?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/geekfg?a=QQRuEaRSiwY:cXl-FjuOUqI:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/geekfg?i=QQRuEaRSiwY:cXl-FjuOUqI:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/geekfg?a=QQRuEaRSiwY:cXl-FjuOUqI:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/geekfg?i=QQRuEaRSiwY:cXl-FjuOUqI:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/geekfg/~4/QQRuEaRSiwY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.fgribreau.com/feeds/8707906862027966175/comments/default" title="Publier les commentaires" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8128983&amp;postID=8707906862027966175&amp;isPopup=true" title="0 commentaires" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8128983/posts/default/8707906862027966175?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8128983/posts/default/8707906862027966175?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/geekfg/~3/QQRuEaRSiwY/week-end-project-nodejs-language.html" title="[Week-end Project] Nodejs language detection library using n-gram" /><author><name>François-Guillaume Ribreau</name><uri>http://www.blogger.com/profile/09541846055227993599</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="24" src="http://3.bp.blogspot.com/_m_Z-AShWn4s/TH9mJPB9T-I/AAAAAAAAAPY/RK9yZT8DA2M/S220/2009_shooting_medium.png" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.fgribreau.com/2011/07/week-end-project-nodejs-language.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUEEQH08eCp7ImA9WhZbFUs.&quot;"><id>tag:blogger.com,1999:blog-8128983.post-3543728360902943701</id><published>2011-06-20T13:00:00.001+02:00</published><updated>2011-06-20T13:00:01.370+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-06-20T13:00:01.370+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="css3" /><category scheme="http://www.blogger.com/atom/ns#" term="doyoubuzz" /><category scheme="http://www.blogger.com/atom/ns#" term="css" /><title>DoYouBuzz - Redesign with custom css2 &amp; css3</title><content type="html">Just another experiment with CSS2/CSS3. This time I've redesign my &lt;a href="http://www.doyoubuzz.com/francois-guillaume-ribreau/"&gt;DoYouBuzz CV&lt;/a&gt;&amp;nbsp;(best rendered in Google Chrome). I couldn't edit the HTML so every modifications was done using pure css.&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: center;"&gt;&lt;iframe allowfullscreen="" frameborder="0" height="390" src="http://www.youtube.com/embed/qsJxyjF9-7s?rel=0" width="480"&gt;&lt;/iframe&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: left;"&gt;PS: The 2 external fonts (google font) should be loaded before the custom css (currently they're loaded directly from the custom css file). So the animation might be buggy when the cv is loaded&amp;nbsp;for the first time&amp;nbsp;on Google Chrome or Safari.&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-3543728360902943701?l=blog.fgribreau.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/geekfg?a=qb5-kTMeRTA:3E6qj2G1Oxo:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/geekfg?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/geekfg?a=qb5-kTMeRTA:3E6qj2G1Oxo:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/geekfg?i=qb5-kTMeRTA:3E6qj2G1Oxo:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/geekfg?a=qb5-kTMeRTA:3E6qj2G1Oxo:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/geekfg?i=qb5-kTMeRTA:3E6qj2G1Oxo:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/geekfg/~4/qb5-kTMeRTA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.fgribreau.com/feeds/3543728360902943701/comments/default" title="Publier les commentaires" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8128983&amp;postID=3543728360902943701&amp;isPopup=true" title="0 commentaires" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8128983/posts/default/3543728360902943701?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8128983/posts/default/3543728360902943701?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/geekfg/~3/qb5-kTMeRTA/doyoubuzz-redesign-with-custom-css2.html" title="DoYouBuzz - Redesign with custom css2 &amp; css3" /><author><name>François-Guillaume Ribreau</name><uri>http://www.blogger.com/profile/09541846055227993599</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="24" src="http://3.bp.blogspot.com/_m_Z-AShWn4s/TH9mJPB9T-I/AAAAAAAAAPY/RK9yZT8DA2M/S220/2009_shooting_medium.png" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://img.youtube.com/vi/qsJxyjF9-7s/default.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.fgribreau.com/2011/06/doyoubuzz-redesign-with-custom-css2.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkUBQnk6fip7ImA9WhZbFUs.&quot;"><id>tag:blogger.com,1999:blog-8128983.post-8060074434583003299</id><published>2011-06-20T07:00:00.002+02:00</published><updated>2011-06-20T13:10:53.716+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-06-20T13:10:53.716+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="foursquare" /><category scheme="http://www.blogger.com/atom/ns#" term="web2day" /><category scheme="http://www.blogger.com/atom/ns#" term="hackathon" /><title>Hackathon - Projet Big Brother</title><content type="html">Le vendredi 17 juin se déroulait à &lt;a href="http://twitternantes.com/"&gt;Nantes&lt;/a&gt;&amp;nbsp;&lt;i&gt;l'événement annuel régional de l'économie numérique et des acteurs du web &lt;/i&gt;j'ai nommé le &lt;a href="http://www.web2day-nantes.org/"&gt;Web2Day&lt;/a&gt; ! Evénement&amp;nbsp;auquel&amp;nbsp;j'ai eu la chance de pouvoir participer et&amp;nbsp;notamment&amp;nbsp;au &lt;a href="http://guestlistapp.com/events/57360"&gt;Hackathon&lt;/a&gt; (malgré mon arrivée 30 minutes en retard -__-).&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://fgribreau.com/bigbrother/"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-pV0tyaRJv-0/Tf5GR1vXFuI/AAAAAAAAATM/sBFR2rxEpIQ/s1600/bigbrother.gif" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
Malheureusement les groupes étaient déjà constitué, j'ai donc dû développer en solo. Par chance j'avais déjà une petite idée !&lt;br /&gt;
&lt;blockquote&gt;Une web app pour être alerté lorsque quelqu'un check-in (via foursquare) à un endroit. L'utilisateur peut alors surveiller plusieurs endroits en même temps.&lt;/blockquote&gt;Son utilisation est très simple:&lt;br /&gt;
&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;Ouvrir &lt;a href="http://fgribreau.com/bigbrother/"&gt;Big Brother&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Autoriser Big Brother sur Foursquare&lt;/li&gt;
&lt;li&gt;Ajouter des endroits à surveiller (entreprises concurrentes ? Magasins concurrents ? &lt;strike&gt;appartement d'un(e) ex/ennemi&amp;nbsp;:) ?&lt;/strike&gt;)&lt;/li&gt;
&lt;li&gt;L'application vérifiera toutes les minutes s'il existe de nouveaux check-in pour les endroits à surveiller.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Si oui, une notification HTML5 (Chrome uniquement pour le moment) s'affichera sur le bureau.&lt;/li&gt;
&lt;/ol&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;Le tout repose sur &lt;b&gt;Google Map&lt;/b&gt;, &lt;b&gt;Foursquare&lt;/b&gt;, &lt;b&gt;jQuery&lt;/b&gt;, &lt;b&gt;HTML5 LocalStorage&lt;/b&gt; (permet d'enregistrer les points à surveiller entre 2 rechargements de page) et &lt;a href="http://blog.fgribreau.com/2011/02/growl-mac-pour-lapi-de-notification.html"&gt;&lt;b&gt;HTML5 Notification API&lt;/b&gt;&lt;/a&gt; (que j'aurai d'ailleurs pu lier à mon &lt;a href="http://blog.fgribreau.com/2011/02/growl-mac-pour-lapi-de-notification.html"&gt;Proof Of Concept Growl&lt;/a&gt; pour plus d'effet).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;Après deux bonnes heures de développement Big Brother fut enfin fonctionnel. S'ensuivit un pitch en *anglais* devant un jury composé, entre autre, de &lt;a href="http://www.wait-till-i.com/"&gt;Chris Heilmann&lt;/a&gt;. Après délibération Big Brother à été sélectionné et m'a permis de remporter un &lt;a href="http://www.karotz.com/home"&gt;Karotz&lt;/a&gt; (anciennement Nabaztag).&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-m9_PALDRjpo/Tf5Np15O74I/AAAAAAAAATQ/xvk0qCsXCRI/s1600/b5106cca30cf62d2b167653390eaf71b.jpeg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="213" src="http://3.bp.blogspot.com/-m9_PALDRjpo/Tf5Np15O74I/AAAAAAAAATQ/xvk0qCsXCRI/s320/b5106cca30cf62d2b167653390eaf71b.jpeg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
Cerise sur le gateau, le service sur lequel je travaille actuellement (&amp;nbsp;&lt;a href="http://brin.gr/"&gt;Brin.gr&lt;/a&gt;&amp;nbsp;), avec&amp;nbsp;&lt;a href="http://twitter.com/simonrobic"&gt;@SimonRobic&lt;/a&gt;,&amp;nbsp;a&amp;nbsp;été élu&amp;nbsp;&lt;a href="http://www.simonrobic.com/blog/2011/06/18/brin-gr-elu-coup-de-coeur-des-pitch-du-web2day-mon-pitch-en-video/"&gt;"coup de coeur" des pitch par le Jury&lt;/a&gt;, c'est très motivant pour la suite !&lt;br /&gt;
&lt;br /&gt;
Je terminerai ce billet par un grand merci à tout ceux qui ont, de près ou de loin, permis à la Web2Day d'avoir eu lieu.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8128983-8060074434583003299?l=blog.fgribreau.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/geekfg?a=FzwjDBkkBOU:zA4EYMRiHZ4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/geekfg?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/geekfg?a=FzwjDBkkBOU:zA4EYMRiHZ4:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/geekfg?i=FzwjDBkkBOU:zA4EYMRiHZ4:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/geekfg?a=FzwjDBkkBOU:zA4EYMRiHZ4:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/geekfg?i=FzwjDBkkBOU:zA4EYMRiHZ4:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/geekfg/~4/FzwjDBkkBOU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.fgribreau.com/feeds/8060074434583003299/comments/default" title="Publier les commentaires" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8128983&amp;postID=8060074434583003299&amp;isPopup=true" title="0 commentaires" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8128983/posts/default/8060074434583003299?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8128983/posts/default/8060074434583003299?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/geekfg/~3/FzwjDBkkBOU/hackathon-projet-big-brother.html" title="Hackathon - Projet Big Brother" /><author><name>François-Guillaume Ribreau</name><uri>http://www.blogger.com/profile/09541846055227993599</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="24" src="http://3.bp.blogspot.com/_m_Z-AShWn4s/TH9mJPB9T-I/AAAAAAAAAPY/RK9yZT8DA2M/S220/2009_shooting_medium.png" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-pV0tyaRJv-0/Tf5GR1vXFuI/AAAAAAAAATM/sBFR2rxEpIQ/s72-c/bigbrother.gif" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.fgribreau.com/2011/06/hackathon-projet-big-brother.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUYEQH4_eyp7ImA9WhZbEEg.&quot;"><id>tag:blogger.com,1999:blog-8128983.post-7040883923116886692</id><published>2011-06-14T15:11:00.000+02:00</published><updated>2011-06-14T15:11:41.043+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-06-14T15:11:41.043+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="javascript" /><category scheme="http://www.blogger.com/atom/ns#" term="cross-domain" /><title>xImg - A JavaScript Cross-domain data sending library</title><content type="html">Sometimes cross-domain communication can be aweful in older browsers. &lt;a href="https://github.com/FGRibreau/xImg"&gt;xImg&lt;/a&gt; is a small lib which aims to provide a simple api in order to send cross-domain datas using HTTP GET request. xImg gracefully handles&amp;nbsp;&lt;a href="http://support.microsoft.com/kb/208427/en-us"&gt;Internet Explorer HTTP GET 2,083 characters max url length&lt;/a&gt;&amp;nbsp;and split datas into smaller packet if needed.&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: center;"&gt;&lt;a href="https://github.com/FGRibreau/xImg"&gt;Fork xImg - A JavaScript Cross-domain data sending library on Github&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8128983-7040883923116886692?l=blog.fgribreau.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/geekfg?a=-gE8vvFcPsM:NQoUrx2HS_A:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/geekfg?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/geekfg?a=-gE8vvFcPsM:NQoUrx2HS_A:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/geekfg?i=-gE8vvFcPsM:NQoUrx2HS_A:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/geekfg?a=-gE8vvFcPsM:NQoUrx2HS_A:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/geekfg?i=-gE8vvFcPsM:NQoUrx2HS_A:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/geekfg/~4/-gE8vvFcPsM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.fgribreau.com/feeds/7040883923116886692/comments/default" title="Publier les commentaires" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8128983&amp;postID=7040883923116886692&amp;isPopup=true" title="0 commentaires" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8128983/posts/default/7040883923116886692?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8128983/posts/default/7040883923116886692?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/geekfg/~3/-gE8vvFcPsM/ximg-javascript-cross-domain-data.html" title="xImg - A JavaScript Cross-domain data sending library" /><author><name>François-Guillaume Ribreau</name><uri>http://www.blogger.com/profile/09541846055227993599</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="24" src="http://3.bp.blogspot.com/_m_Z-AShWn4s/TH9mJPB9T-I/AAAAAAAAAPY/RK9yZT8DA2M/S220/2009_shooting_medium.png" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.fgribreau.com/2011/06/ximg-javascript-cross-domain-data.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0MESX45fyp7ImA9WhZbFU0.&quot;"><id>tag:blogger.com,1999:blog-8128983.post-4986241812995626195</id><published>2011-05-21T12:36:00.003+02:00</published><updated>2011-06-19T18:36:48.027+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-06-19T18:36:48.027+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="WEBO" /><title>[IRL] Week-End Blogueurs de l'Ouest à Saint Jean de Monts</title><content type="html">&lt;iframe allowfullscreen="" frameborder="0" height="390" src="http://www.youtube.com/embed/Z8TxQrgqdtM?rel=0&amp;amp;hd=1" width="640"&gt;&lt;/iframe&gt;&lt;br /&gt;
&lt;br /&gt;
Il y a 2 semaines, &lt;a href="http://www.netvibes.com/blogueursdelouest"&gt;les&amp;nbsp;blogueuses et&amp;nbsp;blogueurs de l'Ouest&lt;/a&gt; ont été invités à passer un Week-end à &lt;a href="http://www.saint-jean-de-monts.com/"&gt;Saint Jean de Mont (Vendée)&lt;/a&gt;. J'ai eu la chance d'en faire partie. La vidéo ci-dessus résume très bien les activités du Week-end. Au programme:&amp;nbsp;&lt;a href="http://www.saint-jean-de-monts.com/base-nautique-char-a-voile.html"&gt;char à voile&lt;/a&gt;, &lt;a href="http://www.saint-jean-de-monts.com/arbre-et-aventure.html"&gt;accro-branche&lt;/a&gt;, &lt;a href="http://www.simonrobic.com/blog/"&gt;dîner spectacle&lt;/a&gt;, &lt;a href="http://www.saint-jean-de-monts.com/nl-casino.html"&gt;casino&lt;/a&gt;, &lt;a href="http://www.saint-jean-de-monts.com/golf.html"&gt;golf&lt;/a&gt;. Bref, &lt;b&gt;que du plaisir !&amp;nbsp;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Envie d'en savoir plus ? Retrouvez les comptes rendus chez&lt;br /&gt;
@Autruche_blog&amp;nbsp;&lt;a href="http://www.l-autruche.com/2011/05/webo-day-1.html"&gt;#WEBO : Day 1&lt;/a&gt;&amp;nbsp;&lt;a href="http://www.l-autruche.com/2011/05/webo-day-2.html"&gt;#WEBO : Day 2&lt;/a&gt;&lt;br /&gt;
@LeEvasblog&amp;nbsp;&lt;a href="http://evasblog.illustrateur.org/2011/05/10/i-%E2%9D%A4-st-jean-de-monts/"&gt;I ❤ St Jean de Monts&lt;/a&gt;&lt;br /&gt;
@Pinupapple&amp;nbsp;&lt;a href="http://pin-upapple.blogspot.com/2011/05/weekend-des-blogueurs-de-louest-saint.html"&gt;Weekend des Blogueurs de l'Ouest à Saint Jean de Monts&lt;/a&gt;&lt;br /&gt;
@DessousDeMarine&amp;nbsp;&lt;a href="http://www.lesdessousdemarine.com/2011/05/13/webo/"&gt;#WEBO&lt;/a&gt;&lt;br /&gt;
@Enabis &amp;nbsp;&lt;a href="http://enabis.tumblr.com/post/5672073642/si-mes-souvenirs-sont-bons"&gt;Si mes souvenirs sont bons&lt;/a&gt;&amp;nbsp;&lt;a href="http://www.blogger.com/"&gt;&lt;span id="goog_2094155841"&gt;&lt;/span&gt;#WEBO : le deuxième jour&lt;/a&gt;&lt;br /&gt;
@EloFoutrement&amp;nbsp;&lt;a href="http://lafoutrementplusquevous.blogspot.com/2011/05/webo-un-jour-webo-toujours.html"&gt;WEBO un jour WEBO toujours...&lt;/a&gt;&lt;br /&gt;
@Mindalicious_b&amp;nbsp;&lt;a href="http://www.mindalicious.fr/archive/2011/05/12/les-blogueurs-de-l-ouest-se-la-jouent-colonie-de-vacances-a.html"&gt;Les Blogueurs de L'Ouest se la jouent colonie de vacances à Saint Jean de Monts&lt;/a&gt;&lt;br /&gt;
@SimonRobic&amp;nbsp;&lt;a href="http://www.simonrobic.com/blog/2011/05/21/bdo-compte-rendu-du-weekend-a-saint-jean-de-monts-webo/"&gt;[BDO] Compte rendu du Weekend à Saint Jean de Monts #webo&lt;/a&gt;&lt;br /&gt;
@Dot_com&amp;nbsp;&lt;a href="http://blog.sebastienonillon.com/2011/05/week-end-entre-blogueurs-a-saint-jean-de-monts-12/"&gt;Week-end entre blogueurs à Saint Jean de Monts&lt;/a&gt;&lt;br /&gt;
&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;
Ce week-end a aussi été l'occasion pour l'équipe de nous présenter le site &lt;a href="http://www.meshistoiresdevacances.com/"&gt;Mes Histoires de Vacances&lt;/a&gt;&amp;nbsp;(réalisé par &lt;a href="http://www.inside.intuiti.net/site-collaboratif-pour-saint-jean-de-monts/"&gt;Intuitlab&lt;/a&gt;) regroupant &lt;a href="http://www.meshistoiresdevacances.com/2011/05/09/talkie-walkie/"&gt;quantité&lt;/a&gt; &lt;a href="http://www.meshistoiresdevacances.com/2011/05/03/la-honte/"&gt;de&lt;/a&gt; &lt;a href="http://www.meshistoiresdevacances.com/2011/05/03/choupi/"&gt;souvenirs&lt;/a&gt; à Saint Jean de Monts.&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;Encore &lt;b&gt;un grand MERCI&lt;/b&gt; à toute l'équipe de Saint Jean de Mont pour nous avoir si&amp;nbsp;gentiment&amp;nbsp;accueilli&amp;nbsp;notamment&amp;nbsp;&lt;a href="http://twitter.com/DelphineMougel/"&gt;Delphine&lt;/a&gt;, &lt;a href="http://twitter.com/Mae_v_a"&gt;Maeva&lt;/a&gt;, Xavier et &lt;a href="http://twitter.com/marnaud_sjdm/" rel="nofollow"&gt;Michel&lt;/a&gt;&amp;nbsp;ainsi qu'à&amp;nbsp;&lt;a href="http://twitter.com/#!/nicolas2dianous"&gt;Nicolas&lt;/a&gt;&amp;nbsp;de&amp;nbsp;&lt;a href="http://www.monnuage.fr/"&gt;MonNuage&lt;/a&gt;&amp;nbsp;pour l'organisation sans faille.&lt;br /&gt;
&lt;br /&gt;
&lt;object height="480" width="640"&gt; &lt;param name="flashvars" value="offsite=true&amp;lang=en-us&amp;page_show_url=%2Fphotos%2Fsimonrobic%2Fsets%2F72157626564021847%2Fshow%2Fwith%2F5707849217%2F&amp;page_show_back_url=%2Fphotos%2Fsimonrobic%2Fsets%2F72157626564021847%2Fwith%2F5707849217%2F&amp;set_id=72157626564021847&amp;jump_to=5707849217"&gt;&lt;/param&gt;&lt;param name="movie" value="http://www.flickr.com/apps/slideshow/show.swf?v=71649"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;embed type="application/x-shockwave-flash" src="http://www.flickr.com/apps/slideshow/show.swf?v=71649" allowFullScreen="true" flashvars="offsite=true&amp;lang=en-us&amp;page_show_url=%2Fphotos%2Fsimonrobic%2Fsets%2F72157626564021847%2Fshow%2Fwith%2F5707849217%2F&amp;page_show_back_url=%2Fphotos%2Fsimonrobic%2Fsets%2F72157626564021847%2Fwith%2F5707849217%2F&amp;set_id=72157626564021847&amp;jump_to=5707849217" width="640" height="480"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;
&lt;br /&gt;
Si vous avez des questions concernant vos futures vacances à Saint Jean de Monts n'hésitez pas à contacter l'équipe via&amp;nbsp;&lt;a href="http://twitter.com/stjeandemonts/"&gt;Twitter&lt;/a&gt;&amp;nbsp;ou&amp;nbsp;&lt;a href="https://www.facebook.com/agenda.saintjeandemonts"&gt;Facebook&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8128983-4986241812995626195?l=blog.fgribreau.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/geekfg?a=zcY75iDqeHc:7vaVB9nECmM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/geekfg?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/geekfg?a=zcY75iDqeHc:7vaVB9nECmM:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/geekfg?i=zcY75iDqeHc:7vaVB9nECmM:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/geekfg?a=zcY75iDqeHc:7vaVB9nECmM:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/geekfg?i=zcY75iDqeHc:7vaVB9nECmM:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/geekfg/~4/zcY75iDqeHc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.fgribreau.com/feeds/4986241812995626195/comments/default" title="Publier les commentaires" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8128983&amp;postID=4986241812995626195&amp;isPopup=true" title="0 commentaires" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8128983/posts/default/4986241812995626195?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8128983/posts/default/4986241812995626195?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/geekfg/~3/zcY75iDqeHc/irl-weekend-blogueurs-de-louest-saint.html" title="[IRL] Week-End Blogueurs de l'Ouest à Saint Jean de Monts" /><author><name>François-Guillaume Ribreau</name><uri>http://www.blogger.com/profile/09541846055227993599</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="24" src="http://3.bp.blogspot.com/_m_Z-AShWn4s/TH9mJPB9T-I/AAAAAAAAAPY/RK9yZT8DA2M/S220/2009_shooting_medium.png" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://img.youtube.com/vi/Z8TxQrgqdtM/default.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.fgribreau.com/2011/05/irl-weekend-blogueurs-de-louest-saint.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0MAQ3s-eSp7ImA9WhZWEUk.&quot;"><id>tag:blogger.com,1999:blog-8128983.post-5599406555906557857</id><published>2011-05-11T22:24:00.000+02:00</published><updated>2011-05-11T22:24:02.551+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-05-11T22:24:02.551+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="playframework" /><title>PlayFramework MVC2.NET DisplayForModel template tag</title><content type="html">&lt;blockquote&gt;The template tag &lt;b&gt;DisplayForModel&lt;/b&gt;&amp;nbsp;returns the HTML markup of each property of a specified model. It can create html forms and supports error validation and model validation.&lt;/blockquote&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://github.com/FGRibreau/Playframework-DisplayForModel"&gt;PlayFramework DisplayForModel&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8128983-5599406555906557857?l=blog.fgribreau.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/geekfg?a=1zOixhOa2tQ:6NlVqyyuqLs:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/geekfg?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/geekfg?a=1zOixhOa2tQ:6NlVqyyuqLs:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/geekfg?i=1zOixhOa2tQ:6NlVqyyuqLs:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/geekfg?a=1zOixhOa2tQ:6NlVqyyuqLs:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/geekfg?i=1zOixhOa2tQ:6NlVqyyuqLs:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/geekfg/~4/1zOixhOa2tQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.fgribreau.com/feeds/5599406555906557857/comments/default" title="Publier les commentaires" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8128983&amp;postID=5599406555906557857&amp;isPopup=true" title="0 commentaires" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8128983/posts/default/5599406555906557857?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8128983/posts/default/5599406555906557857?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/geekfg/~3/1zOixhOa2tQ/playframework-mvc2net-displayformodel.html" title="PlayFramework MVC2.NET DisplayForModel template tag" /><author><name>François-Guillaume Ribreau</name><uri>http://www.blogger.com/profile/09541846055227993599</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="24" src="http://3.bp.blogspot.com/_m_Z-AShWn4s/TH9mJPB9T-I/AAAAAAAAAPY/RK9yZT8DA2M/S220/2009_shooting_medium.png" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.fgribreau.com/2011/05/playframework-mvc2net-displayformodel.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkUCQn0zfCp7ImA9WhZRFEk.&quot;"><id>tag:blogger.com,1999:blog-8128983.post-5161071184053696726</id><published>2011-04-10T15:57:00.003+02:00</published><updated>2011-04-10T16:04:23.384+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-04-10T16:04:23.384+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="iPhone" /><category scheme="http://www.blogger.com/atom/ns#" term="canvas" /><title>Simple iPhone Particles App</title><content type="html">&lt;b&gt;iPhone Particles&lt;/b&gt; is a simple app which use the HTML5 Canvas element for rendering.&lt;br /&gt;
It has been tested on Chrome &amp;amp; iPhone 4. iPhone Particles supports click, mousemove and touchmove events.&amp;nbsp;Test it&amp;nbsp;on&amp;nbsp;&lt;a href="http://fgribreau.com/Particles/"&gt;fgribreau.com/Particles&lt;/a&gt;&amp;nbsp;and&amp;nbsp;&lt;a href="http://github.com/FGRibreau/iPhone-Particles"&gt;fork it 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-5161071184053696726?l=blog.fgribreau.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/geekfg?a=PQHq_nQXSoI:ggmTvL3qLUY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/geekfg?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/geekfg?a=PQHq_nQXSoI:ggmTvL3qLUY:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/geekfg?i=PQHq_nQXSoI:ggmTvL3qLUY:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/geekfg?a=PQHq_nQXSoI:ggmTvL3qLUY:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/geekfg?i=PQHq_nQXSoI:ggmTvL3qLUY:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/geekfg/~4/PQHq_nQXSoI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.fgribreau.com/feeds/5161071184053696726/comments/default" title="Publier les commentaires" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8128983&amp;postID=5161071184053696726&amp;isPopup=true" title="0 commentaires" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8128983/posts/default/5161071184053696726?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8128983/posts/default/5161071184053696726?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/geekfg/~3/PQHq_nQXSoI/simple-iphone-particles-app-using-html5.html" title="Simple iPhone Particles App" /><author><name>François-Guillaume Ribreau</name><uri>http://www.blogger.com/profile/09541846055227993599</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="24" src="http://3.bp.blogspot.com/_m_Z-AShWn4s/TH9mJPB9T-I/AAAAAAAAAPY/RK9yZT8DA2M/S220/2009_shooting_medium.png" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.fgribreau.com/2011/04/simple-iphone-particles-app-using-html5.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUMAQnYyeyp7ImA9WhZTE0U.&quot;"><id>tag:blogger.com,1999:blog-8128983.post-4748299854064171274</id><published>2011-03-17T19:37:00.002+01:00</published><updated>2011-03-17T19:44:03.893+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-03-17T19:44:03.893+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="jquery" /><category scheme="http://www.blogger.com/atom/ns#" term="debounce" /><title>jQuery-debounceargs - Debounce call while saving each arguments</title><content type="html">&lt;a href="http://github.com/FGRibreau/jquery-plugin-debounceArgs"&gt;jQuery DeboungeArgs&lt;/a&gt; helps you debounce function call while saving arguments. In an RIA environment it may be useful if you want to group http requests to the database.&lt;br /&gt;
&lt;br /&gt;
&lt;script src="https://gist.github.com/874862.js"&gt;
 
&lt;/script&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: center;"&gt;&lt;a href="http://github.com/FGRibreau/jquery-plugin-debounceArgs"&gt;jQuery DebounceArgs on GitHub&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8128983-4748299854064171274?l=blog.fgribreau.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/geekfg?a=7bbyd4B0XA8:x23tFwWDgJI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/geekfg?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/geekfg?a=7bbyd4B0XA8:x23tFwWDgJI:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/geekfg?i=7bbyd4B0XA8:x23tFwWDgJI:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/geekfg?a=7bbyd4B0XA8:x23tFwWDgJI:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/geekfg?i=7bbyd4B0XA8:x23tFwWDgJI:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/geekfg/~4/7bbyd4B0XA8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.fgribreau.com/feeds/4748299854064171274/comments/default" title="Publier les commentaires" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8128983&amp;postID=4748299854064171274&amp;isPopup=true" title="0 commentaires" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8128983/posts/default/4748299854064171274?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8128983/posts/default/4748299854064171274?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/geekfg/~3/7bbyd4B0XA8/jquery-debounceargs-debounce-call-while.html" title="jQuery-debounceargs - Debounce call while saving each arguments" /><author><name>François-Guillaume Ribreau</name><uri>http://www.blogger.com/profile/09541846055227993599</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="24" src="http://3.bp.blogspot.com/_m_Z-AShWn4s/TH9mJPB9T-I/AAAAAAAAAPY/RK9yZT8DA2M/S220/2009_shooting_medium.png" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.fgribreau.com/2011/03/jquery-debounceargs-debounce-call-while.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0EFQH8-eip7ImA9Wx9aEEs.&quot;"><id>tag:blogger.com,1999:blog-8128983.post-8752688798839397537</id><published>2011-03-02T12:33:00.000+01:00</published><updated>2011-03-02T12:33:31.152+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-03-02T12:33:31.152+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="mac" /><category scheme="http://www.blogger.com/atom/ns#" term="peerguardian" /><title>Comment faire fonctionner PeerGuardian2 sur Mac OS X</title><content type="html">Je viens de découvrir que &lt;a href="http://phoenixlabs.org/pgosx/"&gt;PeerGuardian2&lt;/a&gt; était disponible pour MacOSX. Le problème est qu'il&lt;b&gt; ne fonctionne pas&lt;/b&gt; une fois installé.&lt;br /&gt;
&lt;br /&gt;
Après quelques recherches sur Google, j'ai trouvé qu'il était possible de faire fonctionner PG2 à la condition de lancer deux exécutables se trouvant dans le dossier &lt;i&gt;PeerGuardian.app/Contents/Ressources/&lt;/i&gt; à chaque démarrage de la machine. Voici donc un petit tutoriel permettant d'automatiser tout ça:&lt;br /&gt;
&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;Installer &lt;a href="http://phoenixlabs.org/pgosx/"&gt;PeerGuardian2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Lancer un &lt;b&gt;terminal&lt;/b&gt; et copier/coller les lignes suivantes puis fermer le terminal.&lt;script src="https://gist.github.com/850789.js?file=peerguardian_macos.sh"&gt;
&lt;/script&gt;&lt;/li&gt;
&lt;li&gt;Lancer &lt;b&gt;Préférences Système&lt;/b&gt; &amp;gt; &lt;b&gt;Comptes&lt;/b&gt; &amp;gt; onglet &lt;b&gt;Ouverture&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;Clic sur &lt;b&gt;+&lt;/b&gt; sélectionner &lt;b&gt;PeerGuardian_loader.app &lt;/b&gt;puis&lt;b&gt; ajouter&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;Clic sur &lt;b&gt;+&lt;/b&gt; sélectionner &lt;b&gt;PeerGuardian_logger.app &lt;/b&gt;puis&lt;b&gt; ajouter&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;Fermer les &lt;b&gt;Préférences Systeme&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;Lancer &lt;b&gt;PeerGuardian&lt;/b&gt;,&lt;/li&gt;
&lt;li&gt;Clic menu &lt;b&gt;File &lt;/b&gt;&amp;gt;&lt;b&gt; List Manager&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;Le &lt;b&gt;List Manager&lt;/b&gt; devrait contenir plusieurs listes d'adresses IP à bloquer &lt;/li&gt;
&lt;/ol&gt;&lt;br /&gt;
Maintenant plus besoin de se soucier de &lt;b&gt;PeerGuardian&lt;/b&gt;, les processus seront automatiquement lancés au chargement du système.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8128983-8752688798839397537?l=blog.fgribreau.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/geekfg?a=btnKjppRLFA:A5xP_UcGPbM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/geekfg?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/geekfg?a=btnKjppRLFA:A5xP_UcGPbM:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/geekfg?i=btnKjppRLFA:A5xP_UcGPbM:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/geekfg?a=btnKjppRLFA:A5xP_UcGPbM:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/geekfg?i=btnKjppRLFA:A5xP_UcGPbM:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/geekfg/~4/btnKjppRLFA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.fgribreau.com/feeds/8752688798839397537/comments/default" title="Publier les commentaires" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8128983&amp;postID=8752688798839397537&amp;isPopup=true" title="0 commentaires" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8128983/posts/default/8752688798839397537?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8128983/posts/default/8752688798839397537?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/geekfg/~3/btnKjppRLFA/comment-faire-fonctionner-peerguardian2.html" title="Comment faire fonctionner PeerGuardian2 sur Mac OS X" /><author><name>François-Guillaume Ribreau</name><uri>http://www.blogger.com/profile/09541846055227993599</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="24" src="http://3.bp.blogspot.com/_m_Z-AShWn4s/TH9mJPB9T-I/AAAAAAAAAPY/RK9yZT8DA2M/S220/2009_shooting_medium.png" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.fgribreau.com/2011/03/comment-faire-fonctionner-peerguardian2.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkMFR3s4eip7ImA9Wx9bFk4.&quot;"><id>tag:blogger.com,1999:blog-8128983.post-8702246377924535169</id><published>2011-02-25T10:19:00.001+01:00</published><updated>2011-02-25T11:40:16.532+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-02-25T11:40:16.532+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="extensions" /><category scheme="http://www.blogger.com/atom/ns#" term="node" /><category scheme="http://www.blogger.com/atom/ns#" term="growl" /><category scheme="http://www.blogger.com/atom/ns#" term="nodejs" /><category scheme="http://www.blogger.com/atom/ns#" term="mac" /><category scheme="http://www.blogger.com/atom/ns#" term="google chrome" /><title>Growl Mac pour l'API de notification Google Chrome (poc)</title><content type="html">&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="color: white;"&gt;Extension Google Chrome Growl pour les notifications web&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Peut-être avez-vous vu passé ce tweet:&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-olXGlxWFyg8/TWdZjnsoMqI/AAAAAAAAAQ8/bDt1r5WwjnE/s1600/L27r.Screen+shot+2011-02-25+at+08-20-02.png" style="background-color: white; border: 0px !important;" /&gt;&lt;/div&gt;Je comprends tout à fait que le staff en charge de Chrome ne souhaite pas développer des extensions spécifiquement pour Mac (ou Windows ou Linux). Mais même si Growl n'est pas intégré en natif sous Mac, il est dommage de ne pas en profiter lorsqu'il est présent sur la machine. L'autre raison de cette non implémentation est que Growl ne gère pas les notifications de type HTML alors que ce type de notification est possible via l'API &lt;i&gt;Web Notification&lt;/i&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; float: right; text-align: center;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-dkNlpjj7JwQ/TWdo4XrbRcI/AAAAAAAAARA/SHcx9NB88FY/s1600/128.png" style="background-color: white; border: 0px !important;" /&gt;&lt;/div&gt;Enfin si aucune extension Google Chrome pour Growl Mac n'existe c'est parce qu'&lt;b&gt;il est impossible d'appeler un exécutable &lt;/b&gt;(dans notre cas &lt;i&gt;Growlnotify&lt;/i&gt;) &lt;b&gt;depuis une extension (&lt;/b&gt;pour des raisons de sécurité bien évidement).&lt;br /&gt;
&lt;br /&gt;
Il faudrait donc&amp;nbsp;pouvoir exécuter un exécutable&amp;nbsp;depuis une extension Google Chrome. Une solution possible est de communiquer via&amp;nbsp;&lt;b&gt;websocket avec un serveur NodeJS local&lt;/b&gt; qui se chargera d'exécuter Growlnotify:&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;img border="0" src="http://yuml.me/diagram/scruffy/class/%23%20Cool%20UML%20Diagram,%20%5BGoogle%20Chrome%5D%3C-%3E%5BExtension%20ChromeGrowl%20(websocket)%5D,%20%5BExtension%20ChromeGrowl%20(websocket)%5D%3C-%3E%5BNode%20Server%20(websocket)%5D,%20%5BNode%20Server%20(websocket)%5D%3C-%3E%5BGrowlNotify%5D" style="background-color: white; border: 0px !important;" /&gt;&lt;/div&gt;&lt;br /&gt;
L'extension &lt;i&gt;ChromeGrowl&lt;/i&gt; surcharge la méthode&amp;nbsp;&lt;b&gt;&lt;span style="font-family: 'courier new', monospace;"&gt;createNotification&lt;/span&gt;&lt;/b&gt; ainsi que &lt;b&gt;&lt;span style="font-family: 'courier new', monospace;"&gt;createHTMLNotification&lt;/span&gt;&lt;/b&gt; de l'API de notification. Voici l'extension en action:&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: center;"&gt;&lt;iframe frameborder="0" height="400" src="http://player.vimeo.com/video/20343199?title=0&amp;amp;byline=0&amp;amp;portrait=0" width="100%"&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: left;"&gt;Le support de&amp;nbsp;&lt;b&gt;&lt;span style="font-family: 'courier new', monospace;"&gt;createHTMLNotification&lt;/span&gt;&lt;/b&gt;&amp;nbsp;est pour le moment quasiment inexistant car dans la majorité des cas une requête &lt;u&gt;cross-domain&lt;/u&gt; est requise. La solution serait d'envoyer l'url au serveur node qui téléchargerait le contenu puis après analyse afficherait le plus d'informations possible via Growl.&lt;br /&gt;
&lt;br /&gt;
Le code est disponible sur mon GitHub &lt;a href="http://github.com/FGRibreau/Growl-Chrome-Notification"&gt;Chrome-Growl-Notification&lt;/a&gt;. Il &lt;b&gt;s'agit d'un proof of concept &lt;/b&gt;réalisé en quelques heures&amp;nbsp;n'hésitez pas à le&lt;b&gt; forker pour l'améliorer ou corriger de possibles bugs&lt;/b&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;EDIT:&lt;/b&gt;&amp;nbsp;Je viens de découvrir qu'il faut payer une &lt;i&gt;taxe&lt;/i&gt; de 5$ pour pouvoir publier des plugins sur le Google Chrome Extensions Directory. Je ne compte pas verser le moindre $ pour un petit POC, néanmoins si l'envie vous en dit vous pouvez toujours&amp;nbsp;&lt;a href="http://projets.geekfg.net/?/8-twitter-recommendation-power-indicator.htm"&gt;faire un don&lt;/a&gt;&amp;nbsp;:).&lt;br /&gt;
&lt;br /&gt;
Sources:&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.chromium.org/developers/design-documents/desktop-notifications/api-specification"&gt;API Notification (chromium)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://dev.w3.org/2006/webapi/WebNotifications/publish/"&gt;Web Notifications (W3C)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8128983-8702246377924535169?l=blog.fgribreau.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/geekfg?a=kKk1nF4Yl60:o3MKWWSiTTU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/geekfg?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/geekfg?a=kKk1nF4Yl60:o3MKWWSiTTU:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/geekfg?i=kKk1nF4Yl60:o3MKWWSiTTU:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/geekfg?a=kKk1nF4Yl60:o3MKWWSiTTU:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/geekfg?i=kKk1nF4Yl60:o3MKWWSiTTU:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/geekfg/~4/kKk1nF4Yl60" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.fgribreau.com/feeds/8702246377924535169/comments/default" title="Publier les commentaires" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8128983&amp;postID=8702246377924535169&amp;isPopup=true" title="0 commentaires" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8128983/posts/default/8702246377924535169?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8128983/posts/default/8702246377924535169?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/geekfg/~3/kKk1nF4Yl60/growl-mac-pour-lapi-de-notification.html" title="Growl Mac pour l'API de notification Google Chrome (poc)" /><author><name>François-Guillaume Ribreau</name><uri>http://www.blogger.com/profile/09541846055227993599</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="24" src="http://3.bp.blogspot.com/_m_Z-AShWn4s/TH9mJPB9T-I/AAAAAAAAAPY/RK9yZT8DA2M/S220/2009_shooting_medium.png" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-olXGlxWFyg8/TWdZjnsoMqI/AAAAAAAAAQ8/bDt1r5WwjnE/s72-c/L27r.Screen+shot+2011-02-25+at+08-20-02.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.fgribreau.com/2011/02/growl-mac-pour-lapi-de-notification.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ak4NRX4zfip7ImA9Wx9VFEU.&quot;"><id>tag:blogger.com,1999:blog-8128983.post-5009560648972021461</id><published>2011-01-31T08:37:00.001+01:00</published><updated>2011-01-31T16:49:54.086+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-01-31T16:49:54.086+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="css3" /><category scheme="http://www.blogger.com/atom/ns#" term="gam3r" /><title>[Video] My work on Gam3r, CSS3 Goodness</title><content type="html">I've done some work lately on the&amp;nbsp;&lt;a href="http://gam3r.fr/"&gt;Gam3r's&lt;/a&gt; design adding some CSS3 goodness. Here is a quick video summary.&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: center;"&gt;&lt;iframe frameborder="0" height="300" src="http://player.vimeo.com/video/19365673?portrait=0" width="400"&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8128983-5009560648972021461?l=blog.fgribreau.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/geekfg?a=0-flYwdTfLs:SkCt7vEVGq8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/geekfg?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/geekfg?a=0-flYwdTfLs:SkCt7vEVGq8:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/geekfg?i=0-flYwdTfLs:SkCt7vEVGq8:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/geekfg?a=0-flYwdTfLs:SkCt7vEVGq8:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/geekfg?i=0-flYwdTfLs:SkCt7vEVGq8:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/geekfg/~4/0-flYwdTfLs" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.fgribreau.com/feeds/5009560648972021461/comments/default" title="Publier les commentaires" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8128983&amp;postID=5009560648972021461&amp;isPopup=true" title="0 commentaires" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8128983/posts/default/5009560648972021461?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8128983/posts/default/5009560648972021461?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/geekfg/~3/0-flYwdTfLs/video-my-work-on-gam3r-css3-goodness.html" title="[Video] My work on Gam3r, CSS3 Goodness" /><author><name>François-Guillaume Ribreau</name><uri>http://www.blogger.com/profile/09541846055227993599</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="24" src="http://3.bp.blogspot.com/_m_Z-AShWn4s/TH9mJPB9T-I/AAAAAAAAAPY/RK9yZT8DA2M/S220/2009_shooting_medium.png" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.fgribreau.com/2011/01/video-my-work-on-gam3r-css3-goodness.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEYDQXo7fip7ImA9Wx9WF0Q.&quot;"><id>tag:blogger.com,1999:blog-8128983.post-4597941052991010889</id><published>2011-01-23T14:59:00.004+01:00</published><updated>2011-01-23T16:22:50.406+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-01-23T16:22:50.406+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="javascript" /><title>Javascript: $=-[$=[]],$$=$/$+(!$+{})</title><content type="html">After having read&amp;nbsp;&lt;a href="http://adamcecc.blogspot.com/2011/01/javascript.html" rel="nofollow"&gt;this post&lt;/a&gt; yesterday. I feel like that was my turn to put my 2 cents. After some tests, I &lt;a href="http://twitter.com/#!/FGRibreau/status/28847125173374979" rel="nofollow"&gt;tweeted&lt;/a&gt; the javascript code below which return "boNjour":&lt;br /&gt;
&lt;code&gt;$=-[$=[]],$$=$/$+(!$+{}),_=-~-~-~$,__=$$[(_*_)+~$],$$[_*_]+__+$$[$]+$$[-~(_*_)]+__+$$[_+-~-~$]+$$[_+-~$]&lt;/code&gt;&lt;br /&gt;
&lt;h1&gt;How ? Where are the letters ?&lt;/h1&gt;The first statement is:&lt;br /&gt;
&lt;code&gt;$ = -[$=[]];&lt;br /&gt;
$ == 0&lt;/code&gt;&lt;br /&gt;
With this &lt;b&gt;$&lt;/b&gt; I can get all the letters I want for the word "&lt;b&gt;bonjour"&lt;/b&gt; thanks to the second statement:&lt;br /&gt;
&lt;code&gt;$$ = &amp;nbsp;$/$+(!$+{});&lt;br /&gt;
$$ == "NaNtrue[object Object]"&lt;/code&gt;&lt;br /&gt;
&lt;h1&gt;$/$+(!$+{}) ?&lt;/h1&gt;First of all, I wanted an &lt;b&gt;n:&lt;/b&gt;&lt;br /&gt;
&lt;code&gt;$/$ == 0/0 == NaN&lt;br /&gt;
typeof($/$) == "number"&lt;/code&gt;&lt;br /&gt;
Next an&amp;nbsp;&lt;b&gt;u &lt;/b&gt;&amp;amp;&amp;nbsp;&lt;b&gt;r&lt;/b&gt;:&lt;br /&gt;
&lt;code&gt;$ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;== 0;&lt;br /&gt;
!$ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; == true&lt;br /&gt;
typeof(!$) == "boolean"&lt;/code&gt;&lt;br /&gt;
And finally the &lt;b&gt;b o j:&lt;/b&gt;&lt;br /&gt;
&lt;code&gt;true+{} == "true[object Object]" // Thanks to type coercion&lt;br /&gt;
!$+{} &amp;nbsp; == "true[object Object]"&lt;/code&gt;&lt;br /&gt;
Then, I needed to convert&amp;nbsp;&lt;b&gt;NaN&lt;/b&gt; (a number) to a string. Which is easy with javascript's type coercion:&lt;br /&gt;
&lt;code&gt;number + string = string&lt;/code&gt;&lt;br /&gt;
So:&lt;br /&gt;
&lt;code&gt;$/$ + (!$+{}) == "NaNtrue[object Object]"&lt;br /&gt;
$$ = $/$ + (!$+{});&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
The last statement of the code do the following:&lt;br /&gt;
&lt;code&gt;$$[9]+$$[8]+$$[0]+$$[10]+$$[8]+$$[5]+$$[4] == "boNjour"&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;h1&gt;But... where are the numbers ?&lt;/h1&gt;The &lt;b&gt;NOT&lt;/b&gt; operator is the anwser !&lt;br /&gt;
&lt;quote&gt;&lt;i&gt;The ~ operator in JavaScript means -(N+1) so -~ = +1&lt;br /&gt;
if $ = 0 then -~-~-~$ = 3&lt;/i&gt;&lt;/quote&gt;&lt;br /&gt;
&lt;br /&gt;
Remember, we already have 0 (with &lt;b&gt;$&lt;/b&gt;):&lt;br /&gt;
&lt;code&gt;$ == 0&lt;/code&gt;&lt;br /&gt;
I started with a 3, because 3*3 = &lt;b&gt;9&lt;/b&gt;, (3*3)-1 = &lt;b&gt;8&lt;/b&gt;, (3*3)+1 = &lt;b&gt;10&lt;/b&gt;, (3+(1+1)) = &lt;b&gt;5&lt;/b&gt; and 3+1 = &lt;b&gt;4&lt;/b&gt;. We can get all these numbers by playing around with $ &amp;amp; ~ :&lt;br /&gt;
&lt;code&gt;-~-~-~0 == -~-~-~$ == 3&lt;br /&gt;
_ = -~-~-~$&lt;/code&gt;&lt;br /&gt;
Let's do it !&lt;br /&gt;
&lt;code&gt;_*_ == 9&lt;br /&gt;
$$[_*_] == "b";&lt;/code&gt;&lt;br /&gt;
&lt;b&gt;o&lt;/b&gt; is used 2 times so it has his own variable &lt;b&gt;__&lt;/b&gt; in order to reduce the code's length:&lt;br /&gt;
&lt;code&gt;(_*_)+~$ == 9 + -1 == 8&lt;br /&gt;
__ = $$[(_*_)+~$];&lt;br /&gt;
__ == "o";&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;$$[0] == "N";&lt;br /&gt;
$$[$] == "N";&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;1 + (_*_) = 1 + 9 = 10 //With N=9, -(N+1) = -10 so&lt;br /&gt;
~9 == -10&lt;br /&gt;
-~(_*_) == 10&lt;br /&gt;
$$[-~(_*_)] == "j";&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;3 + (1+1) = 3 + -~-~0 = 5&lt;br /&gt;
_ + -~-~$ == 5&lt;br /&gt;
$$[_+-~-~$] == "u";&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;3 + 1 == 4&lt;br /&gt;
_ + -~$ == 4  // N=0, -(-(N+1)) = -(-1) = 1&lt;br /&gt;
$$[_+-~$] == "r";&lt;/code&gt;&lt;br /&gt;
And here we are:&lt;br /&gt;
&lt;code&gt;$$[_*_]+__+$$[$]+$$[-~(_*_)]+__+$$[_+-~-~$]+$$[_+-~$] == "boNjour";&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
Your turn now :)&lt;br /&gt;
&lt;br /&gt;
[Edit]&amp;nbsp;Some converters already exists:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://discogscounter.getfreehosting.co.uk/js-noalnum_com.php" rel="nofollow"&gt;Convert JavaScript to strings only containing »[]()+!&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://utf-8.jp/public/aaencode.html"&gt;Encode JavaScript to Japanese style emoticons&lt;/a&gt;&lt;br /&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8128983-4597941052991010889?l=blog.fgribreau.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/geekfg?a=5bYOg1FHkJM:vLdfPvJu74E:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/geekfg?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/geekfg?a=5bYOg1FHkJM:vLdfPvJu74E:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/geekfg?i=5bYOg1FHkJM:vLdfPvJu74E:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/geekfg?a=5bYOg1FHkJM:vLdfPvJu74E:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/geekfg?i=5bYOg1FHkJM:vLdfPvJu74E:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/geekfg/~4/5bYOg1FHkJM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.fgribreau.com/feeds/4597941052991010889/comments/default" title="Publier les commentaires" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8128983&amp;postID=4597941052991010889&amp;isPopup=true" title="0 commentaires" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8128983/posts/default/4597941052991010889?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8128983/posts/default/4597941052991010889?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/geekfg/~3/5bYOg1FHkJM/javascript.html" title="Javascript: $=-[$=[]],$$=$/$+(!$+{})" /><author><name>François-Guillaume Ribreau</name><uri>http://www.blogger.com/profile/09541846055227993599</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="24" src="http://3.bp.blogspot.com/_m_Z-AShWn4s/TH9mJPB9T-I/AAAAAAAAAPY/RK9yZT8DA2M/S220/2009_shooting_medium.png" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.fgribreau.com/2011/01/javascript.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUcMQn49eSp7ImA9Wx9XFko.&quot;"><id>tag:blogger.com,1999:blog-8128983.post-2728887266352521179</id><published>2011-01-10T16:43:00.008+01:00</published><updated>2011-01-10T17:31:23.061+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-01-10T17:31:23.061+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="123People" /><title>[MAJ] 123PeopleRemover, lancement du projet et réponse de 123People</title><content type="html">&lt;div style="text-align: center;"&gt;Pour suivre l'état du projet, rendez-vous sur le &lt;a href="http://twitter.com/FGRibreau"&gt;Twitter @FGRibreau&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;h1&gt;Le lancement&lt;/h1&gt;Hier soir (le 9 Janvier 2011) fut lancé &lt;a href="http://projets.geekfg.net/?/14-123people-remover-supprimer-son-profil-de-123people.htm"&gt;123People Remover&lt;/a&gt;. Je ne présenterai pas 123People ici, si vous ne connaissez pas ce &lt;i&gt;service&lt;/i&gt;&amp;nbsp;une recherche google vous éclairera.&amp;nbsp;&lt;b&gt;123People Remover&lt;/b&gt;&amp;nbsp;automatise la procédure ci-dessous disponible sur la &lt;a href="http://www.123people.fr/page/reputation"&gt;page réputation de 123People&lt;/a&gt;:&lt;br /&gt;
&lt;blockquote&gt;Cependant, sur demande, nous pouvons à tout moment et sans délai restreindre les liens concernant explicitement votre personne. Nous vous encourageons donc à nous faire parvenir tous les liens pertinents afin de les enlever de notre moteur de recherche.&lt;br /&gt;
&lt;br /&gt;
Pour identifier les liens qui vous concernent explicitement:&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;Recherchez votre Prénom et Nom sur 123people;&lt;/li&gt;
&lt;li&gt;Cliquez sur chaque lien vous concernant explicitement;&lt;/li&gt;
&lt;li&gt;Copiez le lien indiqué dans la trame grise sur la page suivante; (pour les images copier le lien affiché sous l'image après avoir cliqué dessus)&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Envoyez-nous le ou les liens vous concernant pour les enlever de notre moteur de recherche, conforme aux lois autrichiennes sur la Protection des Données Privées.&lt;/li&gt;
&lt;/ol&gt;&lt;/blockquote&gt;A cause de cette astreignante procédure, l'idée d'un service tel que &lt;b&gt;123People Remover&lt;/b&gt; m'est venue à l'esprit. Un dimanche après-midi de développement intensif plus tard, le service est en ligne. Mais seulement après quelques heures de&amp;nbsp;fonctionnement:&lt;br /&gt;
- 123People refuse de valider&amp;nbsp;l'intégralité&amp;nbsp;des demandes des utilisateurs&lt;br /&gt;
- 123People bloque le service (sans doute un bloquage par ip)&lt;br /&gt;
&lt;ul&gt;&lt;/ul&gt;&lt;br /&gt;
&lt;div&gt;Le second problème n'en est pas un. J'avais effectivement anticipé ce problème et nous pouvons mettre à disposition à tout moment le code de la partie serveur. Permettant ainsi à la communauté de créer des miroirs accessible depuis &lt;b&gt;123People Remover&lt;/b&gt; via JSONP.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;Concernant le premier problème, 123People refuse nos demandes de suppression et s'explique:&lt;/div&gt;&lt;div&gt;&lt;blockquote&gt;Cher M. Ribreau,&lt;br /&gt;
&lt;br /&gt;
Nous avons bien pris connaissance de votre email et nous vous en remercions. Cependant votre demande n’a pas pu être traitée par notre équipe de service à la clientèle car cet email a été généré avec l’aide d’un script automatisé.&lt;br /&gt;
&lt;br /&gt;
Veuillez lire cet email attentivement, suivez les instructions and envoyez-nous le ou les liens vous concernant explicitement. 123people ne crée pas de profils et il n’est pas possible de restreindre l’affichage des liens concernant une tierce personne (pouvant porter le même patronyme).&lt;br /&gt;
&lt;br /&gt;
Nous attachons une grande importance à répondre aux besoins de nos utilisateurs conformément à la loi autrichienne sur la Protection des Données Privées et aux autres directives de l’Union Européenne.&lt;br /&gt;
&lt;br /&gt;
123people est un moteur de recherche de personnes en temps réel, qui, au moment de votre demande, rassemble les informations associées au patronyme que vous recherchez, dès lors que ces données sont publiques et libres d´accès à tous. Avec 123people il vous est enfin possiblede surveiller et de contrôler votre identité numérique de manière simple et claire.&lt;br /&gt;
&lt;br /&gt;
Veuillez prendre en compte qu’123people est une aide technique pour faciliter la recherche d’informations relatives aux patronymes. Nous ne pouvons pas garantir que les informations trouvées sur le web appartiennent à une seule personne. Plus le patronyme est courant, ex : "Jacques Dupont", plus le résultat de la recherche sera imprécis.&lt;br /&gt;
&lt;br /&gt;
Nous suivons les directives très strictes de la loi autrichienne sur la Protection des Données Privées étant donné que notre siège est à Vienne, Autriche. Nous ne stockons aucunes données et ne créons pas de profils. Cela signifie que nous ne sommes pas en mesure de distinguer et de séparer les différentes personnes affichées dans nos résultats de recherche, mais uniquement entre leurs noms.&lt;br /&gt;
&lt;br /&gt;
À chaque résultat de recherche il y a un certain degré d'imprécision, les résultats sont rarement attribuable à une seule et unique personne. Comme nous utilisons une technologie de recherche automatisée, nous ne pouvons pas garantir que les résultats soient à 100% précis. Nous comptons sur le "facteur humain", l'utilisateur, pour l’affectation définitive de l'information trouvée et l'évaluation de leur pertinence.&lt;br /&gt;
&lt;br /&gt;
Pour ne plus apparaître sur 123people le plus simple serait de restreindre ou d’éditer le contenu de la source d’origine. Il disparaitra par la suite d’123people et des autres moteurs de recherche. Un petit symbole à côté du lien vous indique la source d’origine et vous permet d’identifier celle-ci. Veuillez prendre contact avec les opérateurs respectifs car la suppression de ces données est hors de notre sphère de compétence.&lt;br /&gt;
&lt;br /&gt;
Cependant, sur demande, nous pouvons à tout moment et sans délai restreindre les liens concernant explicitement votre personne. Nous vous encourageons donc à nous faire parvenir tous les liens pertinents afin de les enlever de notre moteur de recherche.&lt;br /&gt;
&lt;br /&gt;
Nota Bene : nous pouvons seulement restreindre les liens *vous* concernant explicitement.&lt;br /&gt;
&lt;br /&gt;
Pour identifier les liens qui vous concernent explicitement:&lt;br /&gt;
&lt;br /&gt;
1. Recherchez votre Prénom et Nom sur 123people;&lt;br /&gt;
&lt;br /&gt;
2. Cliquez sur chaque lien vous concernant explicitement;&lt;br /&gt;
&lt;br /&gt;
3. Copiez le lien indiqué dans la trame grise sur la page suivante; (pour les images copier le lien affiché sous l'image après avoir cliqué dessus)&lt;br /&gt;
&lt;br /&gt;
4. Envoyez-nous le ou les liens vous concernant pour les enlever de notre moteur de recherche, conforme aux lois autrichiennes sur la Protection des Données Privées.&lt;br /&gt;
&lt;br /&gt;
Pour plus de détails et screenshots (capture d’images) sur comment restreindre un lien, veuillez consulter la page suivante: http://www.123people.fr/page/reputation.&lt;br /&gt;
&lt;br /&gt;
Nous restreindrons par la suite vos liens sur notre site pour qu’ils n’apparaissent plus lors d’une recherche ultérieure. Veuillez prendre en compte que vos données publiques ne seront pas effacées de leurs sources d’origine. Les contenus seront toujours trouvables par d’autres moteurs de recherche.&lt;br /&gt;
&lt;br /&gt;
De par le monde plus de 40 millions d’internautes utilisent nos services. 123people a aidé de nombreuses personnes à identifier l’étendue de leur trace numérique. Nous sommes heureux de voir de plus en plus de personnes utiliser notre service pour retrouver des amis et membres de leur famille ou pour créer de nouveaux contacts d’affaires.&lt;br /&gt;
&lt;br /&gt;
Nous sommes à votre entière disposition pour tout renseignement complémentaire.&lt;br /&gt;
&lt;br /&gt;
Cordialement,&lt;br /&gt;
&lt;br /&gt;
Txxxxx Pxxxxx&lt;br /&gt;
&lt;br /&gt;
Customer Service Specialist&lt;/blockquote&gt;&lt;br /&gt;
A l'instant où j'écris ces lignes Numérama vient de publier l'article:&amp;nbsp;&lt;a href="http://www.numerama.com/magazine/17789-123people-bloque-un-outil-qui-facilite-le-retrait-d-informations-personnelles.html"&gt;123People bloque un outil qui facilite le retrait d'informations personnelles&lt;/a&gt;. &lt;br /&gt;
&lt;br /&gt;
&lt;h1&gt;Discussion avec un responsable chez 123People&lt;/h1&gt;Quelques heures plus tard, j'ai pu entretenir un début de conversation avec le "Team Leader of Social Media and Internet Marketing" chez 123People. Voici l'intégralité de la conversation:&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote&gt;Dear Mr.Ribrerau,&lt;br /&gt;
&lt;br /&gt;
my name is L. S. and I work at 123people as the Teamleader for Social Media and Internet Marketing.&lt;br /&gt;
&lt;br /&gt;
This morning we spotted a twitter storm regarding your "123people remover" and we got several emails to our customer service department, originating from your tool.&lt;br /&gt;
&lt;br /&gt;
Unfortunately, we cannot process those emails for several reasons including legal liability and data protection guidelines. We abide to several rules before restricting any links from our service, which, at the moment, makes it impossible for us to accept any emails originating from an automated service like yours.&lt;br /&gt;
&lt;br /&gt;
We are committed to helping our customers and providing them with the best 123people experience. Our customer service agents are very active and specifically trained to reply to any customer request as soon as possible. Any inquiry is generally answered within 48hours.&lt;br /&gt;
&lt;br /&gt;
Of course we understand that for some customers the link restriction procedure can be a bit tricky and your script shows that there is an interest in tools that can help them to get through the process more easily.&lt;br /&gt;
&lt;br /&gt;
I think it would be interesting to further discuss this topic, as we have specific needs and procedures to follow whenever we get a link removal request. In cases whereby we cannot meet those requirements, we are forced to reject the request.&lt;br /&gt;
&lt;br /&gt;
We are currently working on several solutions to help our customers to get through the process more easily, and the interest that your script is showing is an interesting demonstration of this need. If there's anything I can do to prove our commitment to our customers, don't hesitate to contact me.&lt;br /&gt;
&lt;br /&gt;
I really hope to hear from you soon,&lt;br /&gt;
&lt;br /&gt;
Best regards,&lt;br /&gt;
&lt;br /&gt;
L. S.&lt;/blockquote&gt;Je&amp;nbsp;répondis&amp;nbsp;donc de façon très succinte. Sachant "&lt;i&gt;We abide to several rules before restricting any links&lt;/i&gt;" j'ai donc demandé l'intégralité de ces règles afin que le service puisse être fonctionnel en proposant même de formater l'email spécifiquement afin de&amp;nbsp;faciliter&amp;nbsp;le travail du staff de 123People.&amp;nbsp;Voici sa réponse:&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote&gt;Mr. Ribreau,&lt;br /&gt;
&lt;br /&gt;
this is not a matter of my coworkers' work or reduced email, is a matter of freedom of search.&lt;br /&gt;
&lt;br /&gt;
We find only publicly available information performing a realtime search, therefore the best and only way to make any information not to appear on 123people is to remove the information from the source.&lt;br /&gt;
&lt;br /&gt;
The same respect for people that want to restrict information regarding themselves is deserved by people that want their information to be found.&lt;br /&gt;
&lt;br /&gt;
There are two fundamental rights to consider:&lt;br /&gt;
&lt;br /&gt;
The right to be found: we need to hand-process every link restriction request to be sure that it is a licit request. If we allow anyone to remove a link just because of his name is part of the request we could allow some kind of "homonym censorship" where Mr. John Smith, actor, is requesting the restriction of Mr John Smith, plumber, just because he wants to be the only popular one.&lt;br /&gt;
&lt;br /&gt;
The right to search: we are a search engine and we want our customer to freely search online information. We are not publishing nor storing any private information. All the information found on our service is real time searched and includes only publicly available content. Our customers have the right to search the infos they want to find. If we allow anyone to restrict any link we are limiting our customers' right of search.&lt;br /&gt;
&lt;br /&gt;
We ask our users to send us those specific links that are explicitly referring to their own person.&lt;br /&gt;
&lt;br /&gt;
For this reason we cannot accept any automated third party script to automatically handle our results to compile a list of links, without any warranty that the service is not mangling the data, is not inserting malicious links, is not taking responsibility of the links provided to the users.&lt;br /&gt;
&lt;br /&gt;
At the same time we are not going to allow any third party service to use our computational power to extract data without our prior agreement. This is not how we work and it cannot be accepted.&lt;br /&gt;
&lt;br /&gt;
We want to provide the best service to our customers, that includes providing the best customer service, the best search experience, abiding all the rules to be compliant with the law.&lt;br /&gt;
&lt;br /&gt;
We are also going to protect our service and our customers with the same integrity and strength we demonstrated so far.&lt;br /&gt;
&lt;br /&gt;
We really appreciate the effort and the interest in this topic you demonstrate creating your tool. We would be also interested in any significant suggestion you could provide to improve the customer service procedure accordingly to the constraints we need to keep in consideration.&lt;br /&gt;
&lt;br /&gt;
Best regards,&lt;br /&gt;
&lt;br /&gt;
L. S.&lt;/blockquote&gt;&lt;br /&gt;
&lt;h1&gt;Mise à jour, le 10 Janvier 2011 à 17h&lt;/h1&gt;&lt;a href="http://twitter.com/#%21/iNem0o/status/24488460836413441"&gt;Plusieurs&lt;/a&gt; &lt;a href="http://twitter.com/#%21/MarcAurel_/status/24492008659750912"&gt;utilisateurs&lt;/a&gt; ont vu leurs demandes validées car ils avaient auparavant effectués un tri dans les urls fournies par 123People Remover. Lorsque le service sera de nouveau disponible (car oui... il le sera !) vous pourrez visualiser rapidement le contenu d'un lien et l'ajouter ou non à l'email.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8128983-2728887266352521179?l=blog.fgribreau.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/geekfg?a=7Bu7HPX5elY:f_7emxCeeeE:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/geekfg?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/geekfg?a=7Bu7HPX5elY:f_7emxCeeeE:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/geekfg?i=7Bu7HPX5elY:f_7emxCeeeE:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/geekfg?a=7Bu7HPX5elY:f_7emxCeeeE:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/geekfg?i=7Bu7HPX5elY:f_7emxCeeeE:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/geekfg/~4/7Bu7HPX5elY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.fgribreau.com/feeds/2728887266352521179/comments/default" title="Publier les commentaires" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8128983&amp;postID=2728887266352521179&amp;isPopup=true" title="0 commentaires" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8128983/posts/default/2728887266352521179?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8128983/posts/default/2728887266352521179?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/geekfg/~3/7Bu7HPX5elY/123peopleremover-lancement-du-projet-et.html" title="[MAJ] 123PeopleRemover, lancement du projet et réponse de 123People" /><author><name>François-Guillaume Ribreau</name><uri>http://www.blogger.com/profile/09541846055227993599</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="24" src="http://3.bp.blogspot.com/_m_Z-AShWn4s/TH9mJPB9T-I/AAAAAAAAAPY/RK9yZT8DA2M/S220/2009_shooting_medium.png" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.fgribreau.com/2011/01/123peopleremover-lancement-du-projet-et.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkQFQH86fip7ImA9Wx9QFUk.&quot;"><id>tag:blogger.com,1999:blog-8128983.post-2925854244392375786</id><published>2010-12-27T22:49:00.003+01:00</published><updated>2010-12-28T14:51:51.116+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-12-28T14:51:51.116+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="javascript" /><category scheme="http://www.blogger.com/atom/ns#" term="iPhone" /><category scheme="http://www.blogger.com/atom/ns#" term="android" /><title>[Edit] Trickle clone (free iPhone/Android web app)</title><content type="html">Yesterday night while I was reading some news on my iPhone I discovered &lt;a href="http://trickleapp.com/"&gt;Trickle&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;object class="BLOGGER-youtube-video" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" data-thumbnail-src="http://3.gvt0.com/vi/GMS3ZLx15Vs/0.jpg" height="266" width="320"&gt;&lt;param name="movie" value="http://www.youtube.com/v/GMS3ZLx15Vs&amp;fs=1&amp;source=uds" /&gt;&lt;param name="bgcolor" value="#FFFFFF" /&gt;&lt;embed width="320" height="266" src="http://www.youtube.com/v/GMS3ZLx15Vs&amp;fs=1&amp;source=uds" type="application/x-shockwave-flash"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;br /&gt;
I was wondering if I would be able to develop a basic HTML5/Javascript clone in less than 3 hours. Alright, I was.&lt;br /&gt;
&lt;div style="text-align: center;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: center;"&gt;Test &lt;b&gt;Trickle-clone&lt;/b&gt; on your iPhone using this url: &lt;a href="http://fgribreau.com/trickle/"&gt;http://fgribreau.com/trickle/&amp;nbsp;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;Disclaimer: This app is only a proof of concept, your iPhone may explose, burn, die...&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: left;"&gt;&lt;b&gt;[Update]&lt;/b&gt; Trickle seems to work on Android Too.&lt;br /&gt;
&lt;b&gt;[Update 28 Dec.]&lt;/b&gt;&lt;i&gt; &lt;/i&gt;The source code is now &lt;a href="https://github.com/FGRibreau/Trickle-clone"&gt;available on my GitHub&lt;/a&gt;.&amp;nbsp; &lt;i&gt;&lt;br /&gt;
&lt;/i&gt;&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-2925854244392375786?l=blog.fgribreau.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/geekfg?a=pTVYm118vE8:_5rrOPuGZK4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/geekfg?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/geekfg?a=pTVYm118vE8:_5rrOPuGZK4:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/geekfg?i=pTVYm118vE8:_5rrOPuGZK4:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/geekfg?a=pTVYm118vE8:_5rrOPuGZK4:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/geekfg?i=pTVYm118vE8:_5rrOPuGZK4:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/geekfg/~4/pTVYm118vE8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.fgribreau.com/feeds/2925854244392375786/comments/default" title="Publier les commentaires" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8128983&amp;postID=2925854244392375786&amp;isPopup=true" title="0 commentaires" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8128983/posts/default/2925854244392375786?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8128983/posts/default/2925854244392375786?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/geekfg/~3/pTVYm118vE8/trickle-clone-free-iphone-web-app.html" title="[Edit] Trickle clone (free iPhone/Android web app)" /><author><name>François-Guillaume Ribreau</name><uri>http://www.blogger.com/profile/09541846055227993599</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="24" src="http://3.bp.blogspot.com/_m_Z-AShWn4s/TH9mJPB9T-I/AAAAAAAAAPY/RK9yZT8DA2M/S220/2009_shooting_medium.png" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.fgribreau.com/2010/12/trickle-clone-free-iphone-web-app.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkQDSH8ycCp7ImA9Wx9SEU8.&quot;"><id>tag:blogger.com,1999:blog-8128983.post-6206736784759749813</id><published>2010-11-30T14:39:00.000+01:00</published><updated>2010-11-30T14:39:39.198+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-11-30T14:39:39.198+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="jquery" /><title>How to get the jQuery's data of an iframe child element</title><content type="html">Since jQuery has his own way of handling data storage, getting data via &lt;b&gt;jQuery.data&lt;/b&gt;() from an iframe child element will always return an empty object if the data was set using the iframe's jQuery.&lt;br /&gt;
&lt;br /&gt;
&lt;script src="https://gist.github.com/721290.js?file=jQuery%20iFrame.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-6206736784759749813?l=blog.fgribreau.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/geekfg?a=aka62NdmHcQ:zF1CL52NrEQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/geekfg?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/geekfg?a=aka62NdmHcQ:zF1CL52NrEQ:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/geekfg?i=aka62NdmHcQ:zF1CL52NrEQ:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/geekfg?a=aka62NdmHcQ:zF1CL52NrEQ:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/geekfg?i=aka62NdmHcQ:zF1CL52NrEQ:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/geekfg/~4/aka62NdmHcQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.fgribreau.com/feeds/6206736784759749813/comments/default" title="Publier les commentaires" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8128983&amp;postID=6206736784759749813&amp;isPopup=true" title="0 commentaires" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8128983/posts/default/6206736784759749813?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8128983/posts/default/6206736784759749813?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/geekfg/~3/aka62NdmHcQ/how-to-get-jquerys-data-of-iframe-child.html" title="How to get the jQuery's data of an iframe child element" /><author><name>François-Guillaume Ribreau</name><uri>http://www.blogger.com/profile/09541846055227993599</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="24" src="http://3.bp.blogspot.com/_m_Z-AShWn4s/TH9mJPB9T-I/AAAAAAAAAPY/RK9yZT8DA2M/S220/2009_shooting_medium.png" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.fgribreau.com/2010/11/how-to-get-jquerys-data-of-iframe-child.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUcMQnk7eip7ImA9Wx5XEkU.&quot;"><id>tag:blogger.com,1999:blog-8128983.post-4572999980758342023</id><published>2010-09-12T12:24:00.000+02:00</published><updated>2010-09-12T12:24:43.702+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-09-12T12:24:43.702+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="plugins" /><category scheme="http://www.blogger.com/atom/ns#" term="jquery" /><title>jQuery AttributeObserver - Observe HTML elements attribute change</title><content type="html">With &lt;a href="http://github.com/FGRibreau/jQuery-plugin-attributeObserver"&gt;jQuery AttributeObserver&lt;/a&gt; you can bind a callback that will be triggered when an element's attribute value change, and... that's it.&lt;br /&gt;
&lt;br /&gt;
&lt;script src="http://gist.github.com/575971.js?file=AttributeObserver.Proto.js"&gt;
&lt;/script&gt;&lt;br /&gt;
&lt;div style="text-align: center;"&gt;&lt;a href="http://github.com/FGRibreau/jQuery-plugin-attributeObserver/"&gt;Fork jQuery AttributeObserver on GitHub&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8128983-4572999980758342023?l=blog.fgribreau.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/geekfg?a=RHT6YwIDWG0:M0PWrMPFYk0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/geekfg?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/geekfg?a=RHT6YwIDWG0:M0PWrMPFYk0:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/geekfg?i=RHT6YwIDWG0:M0PWrMPFYk0:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/geekfg?a=RHT6YwIDWG0:M0PWrMPFYk0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/geekfg?i=RHT6YwIDWG0:M0PWrMPFYk0:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/geekfg/~4/RHT6YwIDWG0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.fgribreau.com/feeds/4572999980758342023/comments/default" title="Publier les commentaires" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8128983&amp;postID=4572999980758342023&amp;isPopup=true" title="0 commentaires" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8128983/posts/default/4572999980758342023?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8128983/posts/default/4572999980758342023?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/geekfg/~3/RHT6YwIDWG0/jquery-attributeobserver-observe-html.html" title="jQuery AttributeObserver - Observe HTML elements attribute change" /><author><name>François-Guillaume Ribreau</name><uri>http://www.blogger.com/profile/09541846055227993599</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="24" src="http://3.bp.blogspot.com/_m_Z-AShWn4s/TH9mJPB9T-I/AAAAAAAAAPY/RK9yZT8DA2M/S220/2009_shooting_medium.png" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.fgribreau.com/2010/09/jquery-attributeobserver-observe-html.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0MESXg_cSp7ImA9Wx5SFkk.&quot;"><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><app:edited xmlns:app="http://www.w3.org/2007/app">2010-08-12T23:43:28.649+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="javascript" /><category scheme="http://www.blogger.com/atom/ns#" term="jquery" /><title>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;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/geekfg?a=ompVxaMI390:aXCOAFc6UQk:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/geekfg?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/geekfg?a=ompVxaMI390:aXCOAFc6UQk:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/geekfg?i=ompVxaMI390:aXCOAFc6UQk:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/geekfg?a=ompVxaMI390:aXCOAFc6UQk:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/geekfg?i=ompVxaMI390:aXCOAFc6UQk:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/geekfg/~4/ompVxaMI390" height="1" width="1"/&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="http://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?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8128983/posts/default/8486414170976413427?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/geekfg/~3/ompVxaMI390/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:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="24" src="http://3.bp.blogspot.com/_m_Z-AShWn4s/TH9mJPB9T-I/AAAAAAAAAPY/RK9yZT8DA2M/S220/2009_shooting_medium.png" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.fgribreau.com/2010/08/jquery-fireevent-plugin-for-firing-real.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUcHQns9cCp7ImA9Wx5SFkg.&quot;"><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><app:edited xmlns:app="http://www.w3.org/2007/app">2010-08-13T01:50:33.568+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="html5" /><category scheme="http://www.blogger.com/atom/ns#" term="canvas" /><title>[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;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/geekfg?a=EqLGAAGSrQ0:E8eLxVz2xEU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/geekfg?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/geekfg?a=EqLGAAGSrQ0:E8eLxVz2xEU:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/geekfg?i=EqLGAAGSrQ0:E8eLxVz2xEU:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/geekfg?a=EqLGAAGSrQ0:E8eLxVz2xEU:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/geekfg?i=EqLGAAGSrQ0:E8eLxVz2xEU:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/geekfg/~4/EqLGAAGSrQ0" height="1" width="1"/&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="http://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?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8128983/posts/default/5327731207626702841?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/geekfg/~3/EqLGAAGSrQ0/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:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="24" src="http://3.bp.blogspot.com/_m_Z-AShWn4s/TH9mJPB9T-I/AAAAAAAAAPY/RK9yZT8DA2M/S220/2009_shooting_medium.png" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.fgribreau.com/2010/08/video-some-experiments-with-html5.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0INRXo5fyp7ImA9Wx5TF0s.&quot;"><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><app:edited xmlns:app="http://www.w3.org/2007/app">2010-08-02T17:06:34.427+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="apc" /><category scheme="http://www.blogger.com/atom/ns#" term="php" /><title>[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;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/geekfg?a=ln60BNTEIuU:1KMwRz2nQ2U:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/geekfg?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/geekfg?a=ln60BNTEIuU:1KMwRz2nQ2U:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/geekfg?i=ln60BNTEIuU:1KMwRz2nQ2U:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/geekfg?a=ln60BNTEIuU:1KMwRz2nQ2U:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/geekfg?i=ln60BNTEIuU:1KMwRz2nQ2U:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/geekfg/~4/ln60BNTEIuU" height="1" width="1"/&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="http://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?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8128983/posts/default/7577138418068964330?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/geekfg/~3/ln60BNTEIuU/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:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="24" src="http://3.bp.blogspot.com/_m_Z-AShWn4s/TH9mJPB9T-I/AAAAAAAAAPY/RK9yZT8DA2M/S220/2009_shooting_medium.png" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.fgribreau.com/2010/08/snippet-php-apcexists-for-apc-314.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0UEQHsyfSp7ImA9Wx5TF08.&quot;"><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><app:edited xmlns:app="http://www.w3.org/2007/app">2010-08-02T07:00:01.595+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="jquery" /><title>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;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/geekfg?a=5u76OBNLMfo:sIZ8ESKCk84:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/geekfg?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/geekfg?a=5u76OBNLMfo:sIZ8ESKCk84:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/geekfg?i=5u76OBNLMfo:sIZ8ESKCk84:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/geekfg?a=5u76OBNLMfo:sIZ8ESKCk84:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/geekfg?i=5u76OBNLMfo:sIZ8ESKCk84:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/geekfg/~4/5u76OBNLMfo" height="1" width="1"/&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="http://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?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8128983/posts/default/1478032718259027206?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/geekfg/~3/5u76OBNLMfo/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:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="24" src="http://3.bp.blogspot.com/_m_Z-AShWn4s/TH9mJPB9T-I/AAAAAAAAAPY/RK9yZT8DA2M/S220/2009_shooting_medium.png" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.fgribreau.com/2010/08/how-to-know-if-is-jquery.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkMNRXw_eCp7ImA9Wx5TFU0.&quot;"><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><app:edited xmlns:app="http://www.w3.org/2007/app">2010-07-30T18:48:14.240+02:00</app:edited><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>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;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/geekfg?a=DkP5X85dW6M:9Z5sMrTCSTI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/geekfg?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/geekfg?a=DkP5X85dW6M:9Z5sMrTCSTI:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/geekfg?i=DkP5X85dW6M:9Z5sMrTCSTI:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/geekfg?a=DkP5X85dW6M:9Z5sMrTCSTI:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/geekfg?i=DkP5X85dW6M:9Z5sMrTCSTI:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/geekfg/~4/DkP5X85dW6M" height="1" width="1"/&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="http://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?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8128983/posts/default/1532807978451504919?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/geekfg/~3/DkP5X85dW6M/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:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="24" src="http://3.bp.blogspot.com/_m_Z-AShWn4s/TH9mJPB9T-I/AAAAAAAAAPY/RK9yZT8DA2M/S220/2009_shooting_medium.png" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.fgribreau.com/2010/07/how-to-get-call-stack-of-javascript.html</feedburner:origLink></entry></feed>

