<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>futtta&#039;s blog &#187; Web development</title>
	<atom:link href="http://blog.futtta.be/category/rss-able/technology/internet/web-development/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.futtta.be</link>
	<description>Frank Goossens&#039; Twitterless twaddle</description>
	<lastBuildDate>Tue, 07 Feb 2012 07:42:23 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=</generator>
		<item>
		<title>Toolbox: BrowserMob</title>
		<link>http://blog.futtta.be/2012/01/13/toolbox-browsermob/</link>
		<comments>http://blog.futtta.be/2012/01/13/toolbox-browsermob/#comments</comments>
		<pubDate>Fri, 13 Jan 2012 06:31:10 +0000</pubDate>
		<dc:creator>frank</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[lang:en]]></category>
		<category><![CDATA[performance]]></category>
		<category><![CDATA[Web development]]></category>
		<category><![CDATA[browsermob]]></category>
		<category><![CDATA[neustar web performance]]></category>
		<category><![CDATA[selenium]]></category>

		<guid isPermaLink="false">http://blog.futtta.be/?p=7106</guid>
		<description><![CDATA[A month ago I added BrowserMob to my toolbox. I&#8217;m sure I&#8217;m the last web-guy in the world to discover BrowserMob (or &#8220;Neustar Web Performance&#8221;, as of yesterday), but just in case you don&#8217;t know them either, it is an online service that provides availability- and performance-monitoring for websites and -applications. Great stuff, really; create [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.futtta.be/wp-content/uploads/2012/01/browsermob_chart.png"><img class="alignright size-thumbnail wp-image-7112" title="browsermob monitoring chart example" src="http://blog.futtta.be/wp-content/uploads/2012/01/browsermob_chart-150x150.png" alt="" width="150" height="150" /></a>A month ago I added <a title="browsermob website" href="http://browsermob.com">BrowserMob</a> to my toolbox. I&#8217;m sure I&#8217;m the last web-guy in the world to discover BrowserMob (or &#8220;Neustar Web Performance&#8221;, as of yesterday), but just in case you don&#8217;t know them either, it is an online service that provides availability- and performance-monitoring for websites and -applications.</p>
<p>Great stuff, really; create a simple script by providing a URL, choose what datacenters you want the test to run from, set the interval and there you go. After a couple of minutes you can start gazing at charts &amp; reports or check your mailbox for alerts. You can create more complex tests using a JavaScript-based syntax or you can import Selenium-scripts (hello <a title="download selenium IDE (firefox only)" href="http://seleniumhq.org/download/">Selenium IDE for FireFox</a>). The free account I started out with offers a substantial amount of pageviews/ month (40.000) that tests can generate.</p>
<p>Possibly related twitterless twaddle:<ul>
<li><a href='http://blog.futtta.be/2009/12/11/google-webmaster-tools-irony/' rel='bookmark' title='Google Webmaster Tools Irony'>Google Webmaster Tools Irony</a></li>
<li><a href='http://blog.futtta.be/2011/10/21/whos-re-baking-my-cookies/' rel='bookmark' title='Who&#8217;s re-baking my cookies?'>Who&#8217;s re-baking my cookies?</a></li>
<li><a href='http://blog.futtta.be/2009/03/19/fun-with-rfps-organizing-a-rad-race/' rel='bookmark' title='Fun with RFP&#8217;s: organizing a RAD-race'>Fun with RFP&#8217;s: organizing a RAD-race</a></li>
</ul></p>]]></content:encoded>
			<wfw:commentRss>http://blog.futtta.be/2012/01/13/toolbox-browsermob/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>AddToAny now includes Lockerz tracking</title>
		<link>http://blog.futtta.be/2012/01/09/addtoany-now-includes-lockerz-tracking/</link>
		<comments>http://blog.futtta.be/2012/01/09/addtoany-now-includes-lockerz-tracking/#comments</comments>
		<pubDate>Mon, 09 Jan 2012 11:20:03 +0000</pubDate>
		<dc:creator>frank</dc:creator>
				<category><![CDATA[lang:en]]></category>
		<category><![CDATA[security]]></category>
		<category><![CDATA[Web development]]></category>
		<category><![CDATA[AddToAny]]></category>
		<category><![CDATA[donottrack]]></category>
		<category><![CDATA[drupal]]></category>
		<category><![CDATA[privacy]]></category>
		<category><![CDATA[tracking]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://blog.futtta.be/?p=7092</guid>
		<description><![CDATA[AddToAny, one of the most popular sharing-widgets around, has had 3rd party tracking by Media6degrees for quite some time already. I wasn&#8217;t too happy about that, but it did have the no_3p option to disable this &#8220;functionality&#8221;. Half a year ago however AddToAny was acquired by Lockerz.com and it now includes tracking by Lockerz.com which [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignright size-full wp-image-7100" title="ugly lockerz tab in addtoany (werk aan de winkel pieter)" src="http://blog.futtta.be/wp-content/uploads/2012/01/ugly_lockerz_tab_200.jpg" alt="" width="200" height="175" />AddToAny, one of the most popular sharing-widgets around, has had 3rd party tracking by Media6degrees for quite some time already. I wasn&#8217;t too happy about that, but <a title="AddToAny: removing the “spy” from the share-ware" href="http://blog.futtta.be/2010/02/15/addtoany-removing-the-spy-from-the-share-ware/">it did have the no_3p option to disable this &#8220;functionality&#8221;</a>. Half a year ago however <a title="techcrunch: lockerz acquires addtoany (congrats pat)" href="http://techcrunch.com/2011/07/12/kleiner-backed-lockerz-acquires-social-sharing-platform-addtoany/">AddToAny was acquired by Lockerz.com</a> and it now <a title="comment by runbei on an older post on this blog" href="http://blog.futtta.be/2010/01/22/add-to-any-removed-from-here/#comment-22623">includes tracking by Lockerz.com which cannot be turned off</a> and does not check for navigator.doNotTrack either.</p>
<p>I&#8217;ve contacted the developer (Pat&#8217;s a swell guy, really) and he answered he would look into honoring the DoNotTrack header, which he wrote he&#8217;d love to include in Q1 somewhere. In the mean time, if you have AddToAny on your site, you can already <a title="a2a customize entry: hide the earn tab" href="http://share.lockerz.com/buttons/customize/hide_lockerz_earn_ptz_tab">hide the Lockerz &#8220;Earn&#8221; tab</a>. And if you&#8217;re on WordPress, you could <a title="wp donottrack on wordpress.org (now at 0.5.2)" href="http://blog.futtta.be/lsevent/lifestream-event-2468/">install (or upgrade) WP DoNotTrack</a>, which I&#8217;ve updated to stop the Lockerz tracking (make sure lockerz.com is your blacklist).</p>
<p>If there&#8217;s a Drupalista out there that uses AddToAny and would like to stop Lockerz tracking; I&#8217;d be happy to co-author a <strong>Drupal DoNotTrack module</strong>, do <a title="contact me, seriously!" href="http://blog.futtta.be/contact/">get in touch</a>!</p>
<p>Possibly related twitterless twaddle:<ul>
<li><a href='http://blog.futtta.be/2011/02/17/why-your-wordpress-blog-needs-donottrack/' rel='bookmark' title='Why your WordPress blog needs DoNotTrack'>Why your WordPress blog needs DoNotTrack</a></li>
<li><a href='http://blog.futtta.be/2010/02/15/addtoany-removing-the-spy-from-the-share-ware/' rel='bookmark' title='AddToAny: removing the &#8220;spy&#8221; from the share-ware'>AddToAny: removing the &#8220;spy&#8221; from the share-ware</a></li>
<li><a href='http://blog.futtta.be/2010/01/22/add-to-any-removed-from-here/' rel='bookmark' title='AddToAny removed-from-here'>AddToAny removed-from-here</a></li>
</ul></p>]]></content:encoded>
			<wfw:commentRss>http://blog.futtta.be/2012/01/09/addtoany-now-includes-lockerz-tracking/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Choosing a CDN in a whim</title>
		<link>http://blog.futtta.be/2012/01/06/choosing-a-cdn-in-a-whim/</link>
		<comments>http://blog.futtta.be/2012/01/06/choosing-a-cdn-in-a-whim/#comments</comments>
		<pubDate>Fri, 06 Jan 2012 06:18:52 +0000</pubDate>
		<dc:creator>frank</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[lang:en]]></category>
		<category><![CDATA[performance]]></category>
		<category><![CDATA[Web development]]></category>
		<category><![CDATA[cdn]]></category>
		<category><![CDATA[content delivery network]]></category>
		<category><![CDATA[speed]]></category>

		<guid isPermaLink="false">http://blog.futtta.be/?p=7078</guid>
		<description><![CDATA[I had to look into CDN&#8217;s some time ago, to find a suitable temporary solution for a problem at work. There are a lot of players in this field, Akamai and Amazon (Cloudfront) being market leaders of some sort, but there&#8217;s also Microsoft with their Azure CDN (which we already had some experience with), other [...]]]></description>
			<content:encoded><![CDATA[<p>I had to <strong>look into CDN&#8217;s</strong> some time ago, to find a suitable temporary solution for a problem at work. There are <strong>a lot of players</strong> in this field, Akamai and Amazon (Cloudfront) being market leaders of some sort, but there&#8217;s also Microsoft with their Azure CDN (<a title="Like walking on a fluffy cloud" href="http://blog.futtta.be/2011/05/27/like-walking-on-a-fluffy-cloud/">which we already had some experience with</a>), other big guns such as Rackspace and Level3 and specialized shops such as CacheFly, CDNetworks and NetDNA as well. So <strong>how to choose</strong>?</p>
<table style="float: right; margin-left: 5px;" width="300" border="1" cellspacing="0" cellpadding="3">
<tbody>
<tr>
<td width="140" height="17">Results only relevant for Belgium (and even then &#8230;)</td>
<td width="80">avg. speed (ms) for 64kB</td>
<td width="80">speed delta % from fastest</td>
</tr>
<tr>
<td height="17">softlayer</td>
<td align="right">121.3</td>
<td align="right">100%</td>
</tr>
<tr>
<td height="17">gogrid</td>
<td align="right">123.0</td>
<td align="right">101%</td>
</tr>
<tr>
<td height="17">microsoft azure</td>
<td align="right">132.0</td>
<td align="right">109%</td>
</tr>
<tr>
<td height="17">level3</td>
<td align="right">132.0</td>
<td align="right">109%</td>
</tr>
<tr>
<td height="17">amazon cloudfront</td>
<td align="right">133.3</td>
<td align="right">110%</td>
</tr>
<tr>
<td height="17">maxcdn</td>
<td align="right">136.7</td>
<td align="right">113%</td>
</tr>
<tr>
<td height="17">cotendo</td>
<td align="right">138.7</td>
<td align="right">114%</td>
</tr>
<tr>
<td height="17">cachefly</td>
<td align="right">147.3</td>
<td align="right">121%</td>
</tr>
<tr>
<td height="17">rackspace</td>
<td align="right">156.3</td>
<td align="right">129%</td>
</tr>
<tr>
<td height="17">highwinds</td>
<td align="right">226.3</td>
<td align="right">187%</td>
</tr>
<tr>
<td height="17">voxcast</td>
<td align="right">227.7</td>
<td align="right">188%</td>
</tr>
<tr>
<td height="17">flexiscale</td>
<td align="right">317.3</td>
<td align="right">262%</td>
</tr>
<tr>
<td height="17">amazon s3 eu</td>
<td align="right">417.3</td>
<td align="right">344%</td>
</tr>
<tr>
<td height="17"><del datetime="2012-01-13T14:56:30+00:00">cloudflare<br />
</del>invalid result</td>
<td align="right"><del datetime="2012-01-13T14:56:30+00:00">575.0</del> NA</td>
<td align="right"><del datetime="2012-01-13T14:56:30+00:00">474%</del> NA</td>
</tr>
<tr>
<td height="17">google appspot</td>
<td align="right">668.0</td>
<td align="right">551%</td>
</tr>
<tr>
<td height="17">voxel nl</td>
<td align="right">814.0</td>
<td align="right">671%</td>
</tr>
<tr>
<td height="17">amazon s3 us</td>
<td align="right">932.0</td>
<td align="right">768%</td>
</tr>
<tr>
<td height="17">voxel ny</td>
<td align="right">942.0</td>
<td align="right">776%</td>
</tr>
</tbody>
</table>
<p>Well, if you&#8217;re in a hurry, you could <strong>compare price and features via</strong> <a title="cdnplanet.com" href="http://www.cdnplanet.com/">cdnplanet.com</a>. The info might not always be complete, but it does give you a good first idea and you can always visit the CDN&#8217;s proper site for more details, can&#8217;t you?</p>
<p>After comparing features &amp; pricing, you really should <strong>get an idea of the speed</strong> of these CDN&#8217;s, of their performance relative to your customers. I found this <a title="cloudclimate cdn speed test" href="http://www.cloudclimate.com/cdn-speed-test/">CDN Speed Test on cloudclimate.com</a> very useful; it performs <strong>a live test of approximately 20 CDN providers</strong>, requesting a 64 kilobyte file 10 times for each CDN from within your browser. So if you can get a <strong>sample of your customers to perform that test</strong> and provide you with the results, you&#8217;ll have some very useful information about performance. Together with your overview of features and price, you should be able to make at least a vaguely educated decision, no?</p>
<p>To have an idea about performance for <strong>our market (Belgium)</strong>, I asked some Facebook-friends to provide me with the results of the CDN Speed Test. Most data I received was for Telenet or Skynet/Belgacom, not coincidentally the biggest ISP&#8217;s here. You can see the <strong>aggregated results in that ugly table on the left</strong> (or a couple of paragraphs up, if you&#8217;re subscribed to the RSS-feed).</p>
<p><strong>My conclusion</strong>: as I was looking for a <strong>pay-as-you-go </strong>(no obligations, no monthly fee) CDN for <strong>static files</strong>, with support for <strong>Origin-Pull, HTTPS</strong> and some administration features (for example to purge the cache and watch nice graphs), <strong><a title="a cheap pay-as-you-go CDN with pretty decent features and performance!" href="http://www.maxcdn.com/">MaxCDN</a> fit the picture pretty well</strong>. With a great introductory price ($40 for the first Terabyte and even less if you <a title="$40 too much? well, it can be even less!" href="http://www.maxcdn.com/maxcdncoupon/">find the coupon code</a>) and performance that is at 113% of the fastest competitor, they seem to have found somewhat of a sweet spot for my specific context.</p>
<p>The only problem; I&#8217;ve got to wait for a &#8220;GO&#8221; from some people higher up the food chain. Maybe I should already implement it on my blog, just for the fun of it?</p>
<p>Possibly related twitterless twaddle:<ul>
<li><a href='http://blog.futtta.be/2009/12/11/google-webmaster-tools-irony/' rel='bookmark' title='Google Webmaster Tools Irony'>Google Webmaster Tools Irony</a></li>
<li><a href='http://blog.futtta.be/2010/04/23/high-performance-youtube-embeds/' rel='bookmark' title='High performance YouTube embeds'>High performance YouTube embeds</a></li>
<li><a href='http://blog.futtta.be/2010/11/12/firefox-4-beta007-the-thunderball-weve-been-waiting-for/' rel='bookmark' title='Firefox 4 beta007: the thunderball we’ve been waiting for'>Firefox 4 beta007: the thunderball we’ve been waiting for</a></li>
</ul></p>]]></content:encoded>
			<wfw:commentRss>http://blog.futtta.be/2012/01/06/choosing-a-cdn-in-a-whim/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>It&#8217;s official: you can not track your visitors</title>
		<link>http://blog.futtta.be/2011/12/12/its-official-you-can-not-track-your-visitors/</link>
		<comments>http://blog.futtta.be/2011/12/12/its-official-you-can-not-track-your-visitors/#comments</comments>
		<pubDate>Mon, 12 Dec 2011 20:07:52 +0000</pubDate>
		<dc:creator>frank</dc:creator>
				<category><![CDATA[lang:en]]></category>
		<category><![CDATA[security]]></category>
		<category><![CDATA[Web development]]></category>
		<category><![CDATA[donottrack]]></category>
		<category><![CDATA[privacy]]></category>
		<category><![CDATA[wordpress]]></category>
		<category><![CDATA[wp donottrack]]></category>
		<category><![CDATA[wp-youtube-lyte]]></category>

		<guid isPermaLink="false">http://blog.futtta.be/?p=6978</guid>
		<description><![CDATA[After almost a year of tinkering with my Donottrack-plugin for WordPress, I&#8217;ve requested it to be hosted in the WordPress repositories and uploaded version 0.1.0. So if you&#8217;re using Donottrack on your blog, or if you activated this &#8220;bonus feature&#8221; of WP YouTube Lyte, I propose you give WP DoNotTrack a try and let me [...]]]></description>
			<content:encoded><![CDATA[<p>After almost a year of tinkering with <a title="Coding for the New Year" href="http://blog.futtta.be/2010/12/31/coding-for-the-new-year/">my Donottrack-plugin</a> for WordPress, I&#8217;ve requested it to be hosted in the WordPress repositories and uploaded version 0.1.0. So if you&#8217;re using Donottrack on your blog, or if you activated this &#8220;bonus feature&#8221; of <a title="my other plugin" href="http://wordpress.org/extend/plugins/wp-youtube-lyte/">WP YouTube Lyte</a>, I propose you <a title="wp donottrack releases upon the wordpress masses" href="http://wordpress.org/extend/plugins/wp-donottrack/">give WP DoNotTrack a try</a> and let me know what gives here in the comments or via <a title="contact me! really! :-)" href="http://blog.futtta.be/2009/05/26/mozilla-rethinking-extensions-with-jetpack/">the contact form</a>?</p>
<p>From the readme:</p>
<blockquote><p>WP DoNotTrack stops plugins and themes from adding 3rd party tracking code to your blog to protect your visitor&#8217;s privacy. WP DoNotTrack uses (a slightly modified) version of <a title="jquery aop (but without jquery, really)" href="http://blog.futtta.be/2009/05/26/mozilla-rethinking-extensions-with-jetpack/">jQuery AOP</a> to catch and inspect elements that are about to be added to the DOM and renders these harmless if the black- or whitelist says so.</p>
<p>The current version is blacklist-based and stops tracking by media6degrees and quantserve. This can easily be changed in the javascript though. Future versions will include a WordPress admin-page to change these settings.</p></blockquote>
<p>Possibly related twitterless twaddle:<ul>
<li><a href='http://blog.futtta.be/2010/12/31/coding-for-the-new-year/' rel='bookmark' title='Coding for the New Year'>Coding for the New Year</a></li>
<li><a href='http://blog.futtta.be/2011/12/21/configure-wp-donottrack-to-block-what-you-want/' rel='bookmark' title='Configure WP DoNotTrack to block what you want'>Configure WP DoNotTrack to block what you want</a></li>
<li><a href='http://blog.futtta.be/2011/02/17/why-your-wordpress-blog-needs-donottrack/' rel='bookmark' title='Why your WordPress blog needs DoNotTrack'>Why your WordPress blog needs DoNotTrack</a></li>
</ul></p>]]></content:encoded>
			<wfw:commentRss>http://blog.futtta.be/2011/12/12/its-official-you-can-not-track-your-visitors/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Javascript tip: visualizing DOM events</title>
		<link>http://blog.futtta.be/2011/11/25/javascript-tip-visualizing-dom-events/</link>
		<comments>http://blog.futtta.be/2011/11/25/javascript-tip-visualizing-dom-events/#comments</comments>
		<pubDate>Fri, 25 Nov 2011 12:49:42 +0000</pubDate>
		<dc:creator>frank</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[Web development]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[smoothscroll]]></category>
		<category><![CDATA[visualevent]]></category>

		<guid isPermaLink="false">http://blog.futtta.be/?p=6916</guid>
		<description><![CDATA[At work we were stumped by a simple link that upon clicking didn&#8217;t have the browser request the target page. Our supplier investigated using VisualEvent, a bookmarklet-initiated javasript-tool that goes through a page and visualizes all events on DOM nodes. The developer released VisualEvent 2 a couple of days ago (also on GitHub), which I [...]]]></description>
			<content:encoded><![CDATA[<p>At work we were stumped by a simple link that upon clicking didn&#8217;t have the browser request the target page. Our supplier investigated using <a title="scottish hi-tech: visual event" href="http://www.sprymedia.co.uk/article/Visual+Event">VisualEvent</a>, a bookmarklet-initiated javasript-tool that goes through a page and visualizes all events on DOM nodes. The developer released <a title="VisualEvent v2" href="http://www.sprymedia.co.uk/article/Visual+Event+2">VisualEvent 2</a> a couple of days ago (also <a title="VisualEvent on github, if you prefer not to rely on code living on sprymedia.co.uk" href="http://blog.futtta.be/2011/11/23/you-can-have-my-google-password/">on GitHub</a>), which I played around with for a bit and it really is great for debugging purposes!</p>
<p title="Mathias Bynens, een streekgenoot zelfs!">The <a title="github diff between broken and fixed version" href="https://github.com/mathiasbynens/Smooth-Scrolling-jQuery-Plugin/commit/82ef247287ddfeecf4c2c874a3b14c96e466ec38">culprit for the &#8220;broken&#8221; link by the way was a bug in an old version of SmoothScroll</a><a title="smoothscroll on github" href="https://github.com/mathiasbynens/Smooth-Scrolling-jQuery-Plugin">,</a> a jQuery-plugin by <a title="Mathias Bynens, een streekgenoot zelfs!" href="http://mathiasbynens.be">fellow Belgian Mathias Bynens</a> which ensures smooth scrolling when clicking on a in-page link. The plugin did check if the link was to an anchor on the same page, but it had already prevented the default action before that check was made, resulting in the broken link. The <a title="the most recent version of smoothscroll" href="https://github.com/mathiasbynens/Smooth-Scrolling-jQuery-Plugin/blob/fb8b76df8cbe8e7c9b0e26bb5e999f90eb5b79fc/jquery.smoothscroll.js">current version of the plugin</a> does the check before the default action is prevented, so all is well, your weekend can start. Enjoy!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.futtta.be/2011/11/25/javascript-tip-visualizing-dom-events/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Applying Javascript AOP-magic to stop 3rd party tracking in WordPress</title>
		<link>http://blog.futtta.be/2011/11/16/applying-javascript-aop-magic-to-stop-3rd-party-tracking-in-wordpress/</link>
		<comments>http://blog.futtta.be/2011/11/16/applying-javascript-aop-magic-to-stop-3rd-party-tracking-in-wordpress/#comments</comments>
		<pubDate>Wed, 16 Nov 2011 13:28:44 +0000</pubDate>
		<dc:creator>frank</dc:creator>
				<category><![CDATA[lang:en]]></category>
		<category><![CDATA[Web development]]></category>
		<category><![CDATA[donottrack]]></category>
		<category><![CDATA[insertBefore]]></category>
		<category><![CDATA[privacy]]></category>
		<category><![CDATA[quantcast]]></category>
		<category><![CDATA[wordpress]]></category>
		<category><![CDATA[wp-privacy]]></category>

		<guid isPermaLink="false">http://blog.futtta.be/?p=6843</guid>
		<description><![CDATA[It was always my intention to elaborate on my small donottrack plugin for WordPress, but it was only when Automattic upgraded to the new asynchronous Quantcast code that I was forced to look actually dig in. The new Quantcast-code doesn&#8217;t use the old-fashioned document.write, but inserts the javascript asynchronously with an insertBefore on the parent [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://code.google.com/p/jquery-aop/"><img class="alignright size-full wp-image-6850" title="jquery aop on google code" src="http://blog.futtta.be/wp-content/uploads/2011/11/jquery-aop.png" alt="" width="200" height="46" /></a>It was always my intention to <a title="donottrack announcement, including the new years resolution to work on donottrack" href="http://blog.futtta.be/2010/12/31/coding-for-the-new-year/">elaborate on my small donottrack plugin</a> for WordPress, but it was only when <a title="quantcast sneaks back in wordpress.com stats plugin" href="http://blog.futtta.be/2011/11/07/wp-privacy-quantcast-sneaks-back-in/">Automattic upgraded to the new asynchronous Quantcast code</a> that I was forced to look actually dig in.</p>
<p>The new Quantcast-code doesn&#8217;t use the old-fashioned document.write, but inserts the javascript asynchronously with an insertBefore on the parent of the first script-node (as popularized by the <a title="google analytics async tracking code" href="http://code.google.com/apis/analytics/docs/tracking/asyncTracking.html">asynchronous Google Analytics-code</a>). Variations on this method would include e.g. using appendChild or adding it to head (although that might not exist).</p>
<p>A couple of months ago I experimented with the DomNodeInserted event, but that isn&#8217;t supported by all browsers. And even when it works, I found no consistent way to stop the tracking script (which was already added to the DOM, as the event is triggered after) from being loaded or executed. But last week while searching for a better solution I found a reference to javascript <a title="aop explained on wikipedia" href="http://en.wikipedia.org/wiki/Aspect-oriented_programming">AOP</a> on StackOverflow and after following some links I discovered the <a title="jquery aop (but not that jquery, really)" href="http://code.google.com/p/jquery-aop/">JQuery AOP-plugin</a>.</p>
<p>JQuery AOP allows one to (amongst other things) <a title="jquery aop around" href="http://code.google.com/p/jquery-aop/wiki/Reference#Add_an_advice_around_a_method">add an advice around a method</a>. When the method is called, the advice kicks in before the execution. The advice is a function which can investigate and change the parameters used by the method. And that&#8217;s exactly what <a title="donottrack 0.2.0 download" href="http://wordpress.org/extend/plugins/wp-donottrack/">the current version of DoNotTrack</a> does; it has AOP.around (I&#8217;ve removed the JQuery dependency) catch insertBefore and appendChild, investigates the src-attribute and replaces that value if it points to quantserve.com before allowing the method execution to proceed.</p>
<pre class="brush: jscript; title: ; notranslate">
scriptParent=document.getElementsByTagName('script')[0].parentNode;

aop.around( {target: scriptParent, method: /[insertBefore|appendChild]/},
        function(invocation) {
                if ((typeof(invocation.arguments[0].src)==='string')&amp;&amp;((invocation.arguments[0].tagName.toLowerCase()==='script')||(invocation.arguments[0].tagName.toLowerCase()==='img'))) {
                        if (sanitizer(invocation.arguments[0].src)===true){
                             invocation.arguments[0].src='javascript:return false;';
                        }
                }
                return invocation.proceed();
        }
);
</pre>
<p>I&#8217;m working on a more generic version of an AOP-based WordPress Privacy plugin now. In a first stage it will probably be based on a blacklist, that is editable in the WP Privacy options-screen but at a later date a whitelist-based approach will be added (based on <a title="Quercus PHP on GAE: pining for file handles" href="http://blog.futtta.be/2011/08/27/quercus-php-on-gae-pining-for-file-handles-2/">an integration with webpagetest.org</a>). Let&#8217;s add that to my New Years resolution for 2012, shall we?</p>
<p>Possibly related twitterless twaddle:<ul>
<li><a href='http://blog.futtta.be/2010/12/15/wordpress-com-stats-trojan-horse-for-quantcast-tracking/' rel='bookmark' title='WordPress.com Stats trojan horse for Quantcast tracking'>WordPress.com Stats trojan horse for Quantcast tracking</a></li>
<li><a href='http://blog.futtta.be/2009/01/23/put-your-wordpress-categories-back-in-the-tagcloud/' rel='bookmark' title='Put your WordPress-categories back in the tagcloud'>Put your WordPress-categories back in the tagcloud</a></li>
<li><a href='http://blog.futtta.be/2010/05/25/lovin-the-wordpress-plugin-ecosystem/' rel='bookmark' title='Lovin&#8217; the WordPress plugin ecosystem'>Lovin&#8217; the WordPress plugin ecosystem</a></li>
</ul></p>]]></content:encoded>
			<wfw:commentRss>http://blog.futtta.be/2011/11/16/applying-javascript-aop-magic-to-stop-3rd-party-tracking-in-wordpress/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>WP YouTube Lyte 0.9.0: size matters</title>
		<link>http://blog.futtta.be/2011/11/08/wp-youtube-lyte-0-9-0-size-matters/</link>
		<comments>http://blog.futtta.be/2011/11/08/wp-youtube-lyte-0-9-0-size-matters/#comments</comments>
		<pubDate>Tue, 08 Nov 2011 21:03:22 +0000</pubDate>
		<dc:creator>frank</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[lang:en]]></category>
		<category><![CDATA[tubeken]]></category>
		<category><![CDATA[Web development]]></category>
		<category><![CDATA[donottrack]]></category>
		<category><![CDATA[wordpress]]></category>
		<category><![CDATA[wp-youtube-lyte]]></category>

		<guid isPermaLink="false">http://blog.futtta.be/?p=6711</guid>
		<description><![CDATA[I uploaded a new version of WP YouTube Lyte to the WordPress SVN repository earlier today. The markdown parser seems to be in a bad mood today and the changes in the readme.txt (the changelog, first and foremost) aren&#8217;t visible, so here&#8217;s what&#8217;s new in this release: you can now change player size from the [...]]]></description>
			<content:encoded><![CDATA[<p>I uploaded a new version of <a title="my very own pet project" href="http://wordpress.org/extend/plugins/wp-youtube-lyte/">WP YouTube Lyte</a> to the WordPress SVN repository earlier today. The markdown parser seems to be in a bad mood today and the changes in the <a title="readme.txt as on wordpress svn (trunk)" href="http://plugins.svn.wordpress.org/wp-youtube-lyte/trunk/readme.txt">readme.txt</a> (the changelog, first and foremost) aren&#8217;t visible, so here&#8217;s what&#8217;s new in this release:</p>
<ul>
<li>you can now <strong>change player size from the default one</strong> (as proposed by <a href="http://www.edwardlowen.com/">Edward Owen</a>); httpv&#58;//www.youtube.com/watch?v=_SQkWbRublY#stepSize=-2 or httpv&#58;//youtu.be/_SQkWbRublY#stepSize=+1 will change player size to one of the other available sizes in your choosen format (4:3 or 16:9)</li>
<li>added a smaller 16:9 size and re-arranged player sizes on the options-screen</li>
<li>Bugfix: changed lyte-div ID to force it to be xhtml-compliant (ID&#8217;s can&#8217;t start with a digit, hat tip: Ruben of <a href="http://ytuquelees.net/">ytuquelees.net</a></li>
<li>Bugfix: added version in js-call to avoid caching issues (lyte-min.js?ver=0.8.1) as experienced by some users and reported by <a href="http://www.givemeshred.com/">Ryan of givemeshred.com</a></li>
<li>Upgrade to the &#8220;bonus feature&#8221; to <a href="../2011/11/07/wp-privacy-quantcast-sneaks-back-in/">fix things</a> (consider this beta though)</li>
<li>Languages: added Hebrew (by <a href="http://www.sagive.co.il/">Sagive SEO</a>) and Catalan (by Ruben of <a href="http://ytuquelees.net/">ytuquelees.net</a>) translations and added completed Spanish version (thanks to <a title="Paulino Brener from Social Media Travelers, Your guide to your Social Media journey. We help businesses start or improve their Social Media presence." href="http://socialmediatravelers.com/">Paulino Brener from Social Media Travelers</a>)</li>
<li>tested succesfully on WordPress 3.3 (beta 2)</li>
</ul>
<p>The (slightly smaller) lyte-embedded YouTube video to go with this release: &#8220;She wants&#8221; by <a title="de laatste kutgroep uit engeland? ;-)" href="http://en.wikipedia.org/wiki/Metronomy">Metronomy</a> (very <a title="You know, Japan, the eighties band with David Sylvian" href="http://en.wikipedia.org/wiki/Japan_%28band%29">Japan</a>-esque by the way):</p>
<div class="lyte" id="WYL_ntVV3dTo-qw" style="width:560px;height:315px;"><noscript><a href="http://youtu.be/ntVV3dTo-qw"><img src="http://img.youtube.com/vi/ntVV3dTo-qw/0.jpg" alt="" width="560" height="295" /></a> Embedded with WP YouTube Lyte.</noscript><script type="text/javascript"><!-- 
 (function(){var d=document;var w=window;if(w.addEventListener){w.addEventListener('load', insert, false)}else{w.onload=insert};setTimeout(insert, 1000);function insert(){if(!d.getElementById('lytescr')){lytescr=d.createElement('script');lytescr.async=true;lytescr.id='lytescr';lytescr.src='http://blog.futtta.be/wp-content/plugins/wp-youtube-lyte/lyte/lyte-min.js?wylver=1.0.0';h=d.getElementsByTagName('script')[0];h.parentNode.insertBefore(lytescr, h)}};}()) 
 --></script></div>
<div class="lL">Watch this video <a href="http://youtu.be/ntVV3dTo-qw">on YouTube</a> or on <a href="http://icant.co.uk/easy-youtube/?http://www.youtube.com/watch?v=ntVV3dTo-qw">Easy Youtube</a>.</div>
<p>As always, your feedback is welcome in the comments or via <a title="contact me! really! :-)" href="http://blog.futtta.be/lsevent/lifestream-event-2273/">the contact form</a>!</p>
<p>Possibly related twitterless twaddle:<ul>
<li><a href='http://blog.futtta.be/2011/10/11/wp-youtube-lyte-support-for-playlists-almost-included/' rel='bookmark' title='WP YouTube Lyte; support for playlists (almost) included'>WP YouTube Lyte; support for playlists (almost) included</a></li>
<li><a href='http://blog.futtta.be/2011/04/19/audio-only-youtube-embedding-with-wp-youtube-lyte-0-7/' rel='bookmark' title='Audio-only YouTube embedding with WP YouTube Lyte 0.7'>Audio-only YouTube embedding with WP YouTube Lyte 0.7</a></li>
<li><a href='http://blog.futtta.be/2012/02/04/fiesta-wp-youtube-lyte-reaches-1-0-0/' rel='bookmark' title='Fiesta: WP YouTube Lyte reaches 1.0.0'>Fiesta: WP YouTube Lyte reaches 1.0.0</a></li>
</ul></p>]]></content:encoded>
			<wfw:commentRss>http://blog.futtta.be/2011/11/08/wp-youtube-lyte-0-9-0-size-matters/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>Who&#8217;s re-baking my cookies?</title>
		<link>http://blog.futtta.be/2011/10/21/whos-re-baking-my-cookies/</link>
		<comments>http://blog.futtta.be/2011/10/21/whos-re-baking-my-cookies/#comments</comments>
		<pubDate>Fri, 21 Oct 2011 05:27:38 +0000</pubDate>
		<dc:creator>frank</dc:creator>
				<category><![CDATA[lang:en]]></category>
		<category><![CDATA[security]]></category>
		<category><![CDATA[Web development]]></category>
		<category><![CDATA[automattic secure cookie management]]></category>
		<category><![CDATA[noscript]]></category>
		<category><![CDATA[secure cookie]]></category>
		<category><![CDATA[stupid me]]></category>

		<guid isPermaLink="false">http://blog.futtta.be/?p=6605</guid>
		<description><![CDATA[While tinkering with JavaScript at work for a performance-optimization, we encountered an annoying cookie-related problem. We wanted to check if a certain name/value was present in the cookie and not do &#8220;complicated and unneeded backend stuff&#8221; if it was not. But that didn&#8217;t always work, because in some browsers the cookie had the secure flag [...]]]></description>
			<content:encoded><![CDATA[<p>While tinkering with JavaScript at work for a performance-optimization, we encountered an annoying cookie-related problem. We wanted to check if a certain name/value was present in the cookie and not do &#8220;complicated and unneeded backend stuff&#8221; if it was not. But that didn&#8217;t always work, because in some browsers the cookie had the <a title="cookie with secure flag can only be accessed when in https" href="http://en.wikipedia.org/wiki/HTTP_cookie#Secure_cookie">secure flag set</a> and the JS-check was done while in HTTP.</p>
<p title="noscript faq">It took some time, digging and soul-searching, but it turned out to work fine for all but me. The reason: <a title="previously on blog.futtta.be: noscript" href="http://blog.futtta.be/tag/noscript">NoScript! My favorite Firefox Addon</a> has, so I learned, &#8220;Automatic Secure Cookie Management&#8221; as a countermeasure against <a title="description of gmail https session hijacking on bugtrack" href="http://seclists.org/bugtraq/2007/Aug/70">HTTPS cookie hijacking</a> (by setting cookies &#8220;secure&#8221; if they&#8217;re set in HTTPS and if they contain something resembling a session-id?). And that feature <a title="noscript faq" href="http://noscript.net/faq#qa6_5">indeed can break stuff</a>.</p>
<p>So if you&#8217;re using NoScript and you&#8217;re running into weird cookie-related problems: try with &#8220;Automatic Secure Cookie Management&#8221; turned off, or add the site you&#8217;re on as an exception and you might be good to go.</p>
<p>Possibly related twitterless twaddle:<ul>
<li><a href='http://blog.futtta.be/2010/05/14/web-api-security-basics/' rel='bookmark' title='Web API security basics'>Web API security basics</a></li>
<li><a href='http://blog.futtta.be/2011/08/27/quercus-php-on-gae-pining-for-file-handles-2/' rel='bookmark' title='Quercus PHP on GAE: pining for file handles'>Quercus PHP on GAE: pining for file handles</a></li>
<li><a href='http://blog.futtta.be/2007/08/03/web-20-insecure-bullshit-of-dan-toch-grotendeels/' rel='bookmark' title='Web 2.0 insecure? Bullshit (of dan toch grotendeels en nu ook met update)!'>Web 2.0 insecure? Bullshit (of dan toch grotendeels en nu ook met update)!</a></li>
</ul></p>]]></content:encoded>
			<wfw:commentRss>http://blog.futtta.be/2011/10/21/whos-re-baking-my-cookies/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WP YouTube Lyte 0.8.0 released</title>
		<link>http://blog.futtta.be/2011/10/18/wp-youtube-lyte-0-8-0-released/</link>
		<comments>http://blog.futtta.be/2011/10/18/wp-youtube-lyte-0-8-0-released/#comments</comments>
		<pubDate>Tue, 18 Oct 2011 18:09:46 +0000</pubDate>
		<dc:creator>frank</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[lang:nl]]></category>
		<category><![CDATA[Web development]]></category>
		<category><![CDATA[flash]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[playlist]]></category>
		<category><![CDATA[wp-youtube-lyte]]></category>
		<category><![CDATA[youtube]]></category>

		<guid isPermaLink="false">http://blog.futtta.be/?p=6598</guid>
		<description><![CDATA[Just a quick note confirming the release of WP YouTube Lyte 0.8.0. As previously described, the main new feature is support for embedding YouTube playlists in a high-performance and accessible kind of way that is typical of this plugin. While testing the new feature on different platforms I noticed the playlist-player only comes in Flash, [...]]]></description>
			<content:encoded><![CDATA[<p>Just a quick note confirming the release of WP YouTube Lyte 0.8.0. As <a title="WP YouTube Lyte; support for playlists (almost) included" href="http://blog.futtta.be/2011/10/11/wp-youtube-lyte-support-for-playlists-almost-included/">previously described</a>, the main new feature is support for embedding YouTube playlists in a high-performance and accessible kind of way that is typical of this plugin.</p>
<p>While testing the new feature on different platforms I noticed the playlist-player only comes in Flash, so it does not work on iPads or iPhones. Or &#8220;does not work on them yet&#8221;, as <a title="YouTube API on google groups; jeff posnick confirms playlist player flash only for now" href="http://groups.google.com/group/youtube-api-gdata/tree/browse_frm/thread/adbec924f43688e5/c8b35cbf13fa16d0?rnum=1&amp;_done=%2Fgroup%2Fyoutube-api-gdata%2Fbrowse_frm%2Fthread%2Fadbec924f43688e5%3F#doc_982d6cf1ed8c2e2c">YouTube&#8217;s Jeff Posnick confirmed that support for HTML5 video in the embedded playlist player is on their todo-list</a>.</p>
<p>The plugin is multi-lingual, with the following languages supported:</p>
<ul>
<li>English</li>
<li>Dutch</li>
<li>German</li>
<li>Slovenian</li>
<li>French (only the strings visible for visitors, not those in wp-admin)</li>
<li>Spanish (only those strings visible for visitors for now)</li>
</ul>
<p>Corrections, extra translations, bug reports and feature requests are all welcome feedback, either in the comments here <a title="contact me! really! :-)" href="http://blog.futtta.be/contact/">or via the contact page</a>.</p>
<p>I hope you enjoy the new version!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.futtta.be/2011/10/18/wp-youtube-lyte-0-8-0-released/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>WP YouTube Lyte; support for playlists (almost) included</title>
		<link>http://blog.futtta.be/2011/10/11/wp-youtube-lyte-support-for-playlists-almost-included/</link>
		<comments>http://blog.futtta.be/2011/10/11/wp-youtube-lyte-support-for-playlists-almost-included/#comments</comments>
		<pubDate>Tue, 11 Oct 2011 17:00:59 +0000</pubDate>
		<dc:creator>frank</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[lang:en]]></category>
		<category><![CDATA[tubeken]]></category>
		<category><![CDATA[Web development]]></category>
		<category><![CDATA[hd]]></category>
		<category><![CDATA[playlists]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[wordpress]]></category>
		<category><![CDATA[wp-youtube-lyte]]></category>

		<guid isPermaLink="false">http://blog.futtta.be/?p=6560</guid>
		<description><![CDATA[Work on the next version of WP YouTube Lyte is almost finished. The main new features you can expect in version 0.8.0 are: support for playlists support for HD video (if size of the embedded player is big enough) updated UI elements &#38; player sizes to match new, dark YouTube player style removed support for [...]]]></description>
			<content:encoded><![CDATA[<p>Work on the next version of <a title="wp youtube lyte plugin on wordpress.org" href="http://wordpress.org/extend/plugins/wp-youtube-lyte/">WP YouTube Lyte</a> is almost finished. The main new features you can expect in version 0.8.0 are:</p>
<ul>
<li>support for playlists</li>
<li>support for HD video (if size of the embedded player is big enough)</li>
<li>updated UI elements &amp; player sizes to match new, dark YouTube player style</li>
<li>removed support for legacy YouTube embed code</li>
</ul>
<p>Embedding a playlist will be as simple as adding <em></em></p>
<blockquote><p><em>httpv://www.youtube.com/<strong>playlist?list=&lt;playlist_id&gt;</strong></em>.</p></blockquote>
<p>The result will look like this documentary about Arcade Fire (4 video&#8217;s in <a title="playlist with Arcade Fire documentary" href="http://www.youtube.com/playlist?list=PLA486E741B25F8E00">one playlist</a>):</p>
<div class="lyte playlist" id="WYL_A486E741B25F8E00" style="width:420px;height:236px;"><noscript>Embedded with WP YouTube Lyte.</noscript><script type="text/javascript"><!-- 
 (function(){var d=document;var w=window;if(w.addEventListener){w.addEventListener('load', insert, false)}else{w.onload=insert};setTimeout(insert, 1000);function insert(){if(!d.getElementById('lytescr')){lytescr=d.createElement('script');lytescr.async=true;lytescr.id='lytescr';lytescr.src='http://blog.futtta.be/wp-content/plugins/wp-youtube-lyte/lyte/lyte-min.js?wylver=1.0.0';h=d.getElementsByTagName('script')[0];h.parentNode.insertBefore(lytescr, h)}};}()) 
 --></script></div>
<div class="lL">Watch this playlist <a href="http://www.youtube.com/playlist?list=PLA486E741B25F8E00">on YouTube</a></div>
<p>Now off to testing this blogpost with an embedded playlist in all browsers I can get my hands on. Your feedback (off course) <a title="contact me! really! :-)" href="http://blog.futtta.be/contact/">is always welcome</a> as well! If all goes as planned I&#8217;ll push 0.8.0 to the wordpress svn later this week.</p>
<p>Possibly related twitterless twaddle:<ul>
<li><a href='http://blog.futtta.be/2011/10/18/wp-youtube-lyte-0-8-0-released/' rel='bookmark' title='WP YouTube Lyte 0.8.0 released'>WP YouTube Lyte 0.8.0 released</a></li>
<li><a href='http://blog.futtta.be/2011/04/19/audio-only-youtube-embedding-with-wp-youtube-lyte-0-7/' rel='bookmark' title='Audio-only YouTube embedding with WP YouTube Lyte 0.7'>Audio-only YouTube embedding with WP YouTube Lyte 0.7</a></li>
<li><a href='http://blog.futtta.be/2010/06/16/embedding-html5-youtube-video-with-wp-youtube-lyte/' rel='bookmark' title='Embedding HTML5 YouTube video with WP YouTube Lyte'>Embedding HTML5 YouTube video with WP YouTube Lyte</a></li>
</ul></p>]]></content:encoded>
			<wfw:commentRss>http://blog.futtta.be/2011/10/11/wp-youtube-lyte-support-for-playlists-almost-included/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

