<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Kenneth's Picnic</title>
	
	<link>http://kenneth.kufluk.com/blog</link>
	<description>Welcome to Kenneth's Picnic.  Put your feet up and admire the stars over London.</description>
	<lastBuildDate>Sun, 07 Mar 2010 21:56:54 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/KennethKufluk" /><feedburner:info uri="kennethkufluk" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>Losing face with IE8</title>
		<link>http://feedproxy.google.com/~r/KennethKufluk/~3/MPFY3wQKnds/</link>
		<comments>http://kenneth.kufluk.com/blog/2010/02/losing-face-with-ie8/#comments</comments>
		<pubDate>Tue, 23 Feb 2010 13:38:45 +0000</pubDate>
		<dc:creator>Kenneth</dc:creator>
				<category><![CDATA[Projects]]></category>
		<category><![CDATA[bug]]></category>
		<category><![CDATA[font-face]]></category>
		<category><![CDATA[ie8]]></category>
		<category><![CDATA[iframe]]></category>

		<guid isPermaLink="false">http://kenneth.kufluk.com/blog/?p=355</guid>
		<description><![CDATA[I&#8217;ve discovered a bug in IE8.
It&#8217;s definitely a browser bug, as I shall demonstrate.
If you are using @font-face for your main site, and for your iframe, then you may find that the font-face is removed and replaced with arial or helvetica when the iframe is removed from the page.  This is a common effect [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve discovered a bug in IE8.<br />
It&#8217;s definitely a browser bug, as I shall demonstrate.</p>
<p>If you are using @font-face for your main site, and for your iframe, then you may find that the font-face is removed and replaced with arial or helvetica when the iframe is removed from the page.  This is a common effect of modal iframe lightbox systems, like shadowbox or thickbox.</p>
<p>My assumption is that the iframe is &#8217;stealing&#8217; the font-face EOT file, and killing references to it when the iframe is removed.  This affects the main page.</p>
<p>In tests, I&#8217;ve found that this effect depends on both the cache and the element with focus when the iframe is removed.  This dependance (especially on the cache) makes this effect quite hard to reliably reproduce.  </p>
<p>Interestingly, the effect does not cause a repaint of the page.  You need to scroll or move a window over the top to cause a repaint, revealing the unstyled text.  Note also that it is the font rendering that has changed, but not the letter positioning &#8211; causing our &#8216;unstyled&#8217; font to look even worse than plain text.</p>
<p>As promised, a demo:<br />
You&#8217;ll need IE8.  You want this page to be cached (try refresh, but not ctrl-refresh, with cache status as automatic).  Note that the &#8216;kill frame&#8217; link below does not return false.</p>
<div id="ie8-demo-text">This text is styled</div>
<p><iframe id="ie8-test" src="/ie8-iframe-demo.html"></iframe><br />
<a href="#" onclick="$('#ie8-test').remove();">Click this link to kill the iframe.</a><br />
Now resize the window to try and trigger a repaint.<br />
(This effect is quite unreliable, so you may need to refresh and kill a few times to see it happen.  If you just can&#8217;t <a href="/ie8-iframe-bug.png">Click here for a screenshot</a>)</p>
<p>My workaround solution is to reload the main page stylesheet after the box is closed.<br />
Hardly pretty, but it should work.  I&#8217;ll leave it to the hardcore CSS/JS fraternity to try and reload the font-face lines themselves.</p>
<p>Add an ID to your stylesheet tag:</p>
<pre class="brush: php">
&lt;link id=&quot;main-css&quot; rel=&quot;stylesheet&quot; type=&quot;text/css&quot; href=&quot;/css/styles.css&quot; /&gt;
</pre>
<p>Then, after your box closes, reload it:</p>
<pre class="brush: php">
document.getElementById(&#039;main-css&#039;).href=document.getElementById(&#039;main-css&#039;).href;
//or in jQuery
$(&#039;#main-css&#039;)[0].href=$(&#039;#main-css&#039;)[0].href;
</pre>
<p>Additional:<br />
Make sure your iframe doctype matches the container.  It&#8217;s possible that if they don&#8217;t match, then only one will show the fonts.</p>
<img src="http://feeds.feedburner.com/~r/KennethKufluk/~4/MPFY3wQKnds" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://kenneth.kufluk.com/blog/2010/02/losing-face-with-ie8/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://kenneth.kufluk.com/blog/2010/02/losing-face-with-ie8/</feedburner:origLink></item>
		<item>
		<title>Man walks down the street</title>
		<link>http://feedproxy.google.com/~r/KennethKufluk/~3/A0fBfrFNsmE/</link>
		<comments>http://kenneth.kufluk.com/blog/2010/02/man-walks-down-the-street/#comments</comments>
		<pubDate>Sat, 13 Feb 2010 18:49:52 +0000</pubDate>
		<dc:creator>Kenneth</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Physics & Astronomy]]></category>

		<guid isPermaLink="false">http://kenneth.kufluk.com/blog/?p=350</guid>
		<description><![CDATA[Man walks down the street.  Takes him ten minutes every morning.
One day, his watch breaks and starts running fast.  It takes twice as long, according to the watch.  Completing the same distance took twenty minutes.  He buys a new watch.
The following week, some wanker at the council moves his tube station [...]]]></description>
			<content:encoded><![CDATA[<p>Man walks down the street.  Takes him ten minutes every morning.</p>
<p>One day, his watch breaks and starts running fast.  It takes twice as long, according to the watch.  Completing the same distance took twenty minutes.  He buys a new watch.</p>
<p>The following week, some wanker at the council moves his tube station 400 yards further away.  According to his new watch, the journey again takes twice as long as usual:  twenty minutes.  The man blames cheap foreign imports, and buys a new watch.</p>
<p>I have a grid in three dimensions.  It&#8217;s held together with wires, will balls at the joints.  Each wire is 10cm long.</p>
<p>The next day, I measure my grid with a ruler.  Each wire is now 20cms long.  But none of the balls look any further apart.  I buy a new ruler.</p>
<p>I throw away my grid and buy a new one.  It&#8217;s bigger.</p>
<p>A lot bigger.</p>
<p>My grid has balls one light-year apart.  Each ball is held in a rigid cubic system as before.  My grid extends to infinity in all six directions:  up, down, to the left, to the right, in front, and behind.  Infinitely.</p>
<p>I know what you&#8217;re thinking:  &#8220;You must have huge balls&#8221;.  But I don&#8217;t like to brag.</p>
<p>I measure the distance along the wires between the balls, not with a ruler, but with light and a stopwatch.  A ball sends out light, and I time exactly one year before the light reaches the next ball.  That&#8217;s one light-year.</p>
<p>All over the grid, it always takes one year for light to reach the next ball.</p>
<p>The next day, a fine summer&#8217;s day in 1665, Newton invents gravity.  This does not go unnoticed.</p>
<p>Each one of my balls has a large mass, and so a strong gravitational pull.  Each ball attracts every other ball around it, not just the nearest, but all of them.  It&#8217;s quite a shock to my grid, but my grid still hangs together.  I rush out and measure my wires again.  To my relief, each wire, measured by pulses of light, is exactly one light-year long.</p>
<p>All is well and good, and my grid holds steady.  Of course, it does not collapse in on itself, because it extends infinitely in every direction.  As each ball pulls those around it, they are equally pulled away by those more distant.  Each ball has an equal pull on its left and its right.</p>
<p>For 250-odd years, my grid hangs together, perfectly happily.  Occasionally I step outside to admire my balls (steady), by the light of the moon.</p>
<p>In 1915, some bloke called Einstein completes his General Theory of Relativity.  In it, he invents several fundamental principles.  Mass-energy equivalence, for example, as shown by the famous equation e=mc^2.  Woo.<br />
Something else he does is change gravitational theory.  Newton is now proved wrong, for gravity is not a force, it is a distortion of space and time caused by masses.</p>
<p>I have to admit, this funny-looking bloke has me scared.  I rush out to check on my beautiful, infinite, gleaming grid and see whether it has been affected.  And I find some disturbing results.</p>
<p>Near each of my massive balls (by which I mean, my balls with mass), there are some weird effects happening.  Close to the surface of each mass, I find that <em>time is running more slowly</em>.</p>
<p>I dig out my trusty stopwatch and wait for the light.  A ball emits light, and the light travels more slowly than usual near the ball.  Further from the ball it picks up speed as it moves along the wire away from the ball, but then slows again as it gets near the other ball.  In total, my stopwatch shows that two years have passed.</p>
<p>Shit.  The bastard&#8217;s only gone and ruined my grid.  I go back inside to sit down and have a calming cup of tea.</p>
<p>Edwin Hubble catches my attention in 1929.  He&#8217;s spent ten years looking closely at my grid, and he&#8217;s found something more peculiar still.  He watches as many balls as he can, from the one ball he&#8217;s sat on.  He&#8217;s been looking at the light beams all over my grid and he&#8217;s worked out that <strong>my grid is expanding</strong>.</p>
<p>I&#8217;m incredulous.  &#8220;Where would it expand to?&#8221;  I ask, &#8220;It&#8217;s infinite, FFS.&#8221;  But the arrogant fool is insistent.  Look at the evidence, he says.</p>
<p>The distances, as measured by light, between each ball, are getting further apart.  Ipso facto, the grid is getting bigger.  I have a quick check, and he&#8217;s right.  A beam of light now takes 3 years to get from one ball to another.</p>
<p>But if I&#8217;m honest, those balls look a bit smaller.  They&#8217;ve taken some of the mass that was hanging between the balls, and they&#8217;ve pulled it in.  They&#8217;ve squeezed themslves together.  Effectively, they&#8217;ve become bigger and denser masses,  I wasn&#8217;t expecting that.  With tighter, more compact masses, the light travel time is more affected by the gravity, and so it takes longer to get between the balls.</p>
<p>But my grid is still the same size.  Or is it?</p>
<p>Did my watch break, or did someone move the tube station? </p>
<img src="http://feeds.feedburner.com/~r/KennethKufluk/~4/A0fBfrFNsmE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://kenneth.kufluk.com/blog/2010/02/man-walks-down-the-street/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://kenneth.kufluk.com/blog/2010/02/man-walks-down-the-street/</feedburner:origLink></item>
		<item>
		<title>Long polling Comet</title>
		<link>http://feedproxy.google.com/~r/KennethKufluk/~3/mCoSH8ay63s/</link>
		<comments>http://kenneth.kufluk.com/blog/2010/02/long-polling-comet/#comments</comments>
		<pubDate>Fri, 05 Feb 2010 16:14:53 +0000</pubDate>
		<dc:creator>Kenneth</dc:creator>
				<category><![CDATA[Work]]></category>
		<category><![CDATA[comet]]></category>

		<guid isPermaLink="false">http://kenneth.kufluk.com/blog/?p=346</guid>
		<description><![CDATA[I&#8217;ve been working on a long-polling comet client from Amix at Plurk, who uses it to monitor messages on the server.  While he simply provides it as a &#8217;solution&#8217;, not detailing the hurdles he overcame to get there, it&#8217;s clear that there&#8217;s some thought gone into it.
http://amix.dk/blog/post/19489#Comet-long-polling-for-all-browsers-using-ScriptCommunicator
The script requires you to set a variable [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been working on a long-polling comet client from Amix at Plurk, who uses it to monitor messages on the server.  While he simply provides it as a &#8217;solution&#8217;, not detailing the hurdles he overcame to get there, it&#8217;s clear that there&#8217;s some thought gone into it.<br />
<a href="http://amix.dk/blog/post/19489#Comet-long-polling-for-all-browsers-using-ScriptCommunicator">http://amix.dk/blog/post/19489#Comet-long-polling-for-all-browsers-using-ScriptCommunicator</a></p>
<p>The script requires you to set a variable in your jsonp response.  The script checks whether that variable is true after the jsonp loads.  If true, your json has loaded.  If not, something has gone wrong.</p>
<p>So, if your jsonp looks like this:<br />
callback({blah:&#8221;blah&#8221;});<br />
You&#8217;ll need to revise it to this:<br />
callback({blah:&#8221;blah&#8221;});ScriptCommunicator.callback_called = true;</p>
<p>On the jQuery forums, John Resig said he isn&#8217;t enamoured with this approach since it means adapting the jsonp response, and if you&#8217;re using jsonp then you&#8217;re probably not in control of the feed.  It&#8217;s a fair point, but you could simply add the callback_called variable into the callback function instead.</p>
<p>Plus, if you&#8217;re running Comet long-polling, it&#8217;s better to use a different domain for your comet feed, to prevent tying up threads in the browser.  So jsonp is needed.</p>
<p>The &#8220;difficult&#8221; part of the process is knowing when to run the second script, that checks the callback_called value.  Amix uses a variety of methods for different browsers to achieve this.</p>
<p>In Firefox (default case) -> create two script tags using document.createElement, and attach them to the body.</p>
<p>In IE -> use the onreadystatechange event to call onSuccess, and then detect errors there, based on the readyState (somewhat illogical).</p>
<p>In Safari/Chrome -> write two script tags out with document.writeln.  Presumably, this is intended for use with an iframe, though that&#8217;s not clear.  OOTB, no webkit browsers receive data.</p>
<p>Having tried to hack the script to make the Safari browsers use the same method as Firefox, I&#8217;ve found that Safari&#8217;s caching kicked in and failed to load new scripts from the server (though this could be my fault for not changing the script name each time).</p>
<p>Looking back at Plurk, the comet scripts are indeed in an iframe, so I think this script probably needs some more input before it&#8217;s going to work for anyone else.  Hopefully, Amix (or someone) will put together a demo page and make any necessary fixes to the script when making that work.</p>
<p>It&#8217;s a very useful function/tool/script.  Thanks Amix.</p>
<img src="http://feeds.feedburner.com/~r/KennethKufluk/~4/mCoSH8ay63s" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://kenneth.kufluk.com/blog/2010/02/long-polling-comet/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://kenneth.kufluk.com/blog/2010/02/long-polling-comet/</feedburner:origLink></item>
		<item>
		<title>The importance of paging</title>
		<link>http://feedproxy.google.com/~r/KennethKufluk/~3/Fa7yqrh5oC8/</link>
		<comments>http://kenneth.kufluk.com/blog/2010/01/the-importance-of-paging/#comments</comments>
		<pubDate>Sun, 31 Jan 2010 17:14:05 +0000</pubDate>
		<dc:creator>Kenneth</dc:creator>
				<category><![CDATA[Projects]]></category>

		<guid isPermaLink="false">http://kenneth.kufluk.com/blog/?p=339</guid>
		<description><![CDATA[Something the iPhone brought us was amazing scrolling.  I&#8217;m not a fan of the pinch-zoom, but the flick-to-scroll has been an outstanding innovation.  Macbook users will know about the two-finger scroll (which still sounds somewhat riské).  We got hooked on scrolling long before that of course, when the wheel on the mouse [...]]]></description>
			<content:encoded><![CDATA[<p>Something the iPhone brought us was amazing scrolling.  I&#8217;m not a fan of the pinch-zoom, but the flick-to-scroll has been an outstanding innovation.  Macbook users will know about the two-finger scroll (which still sounds somewhat riské).  We got hooked on scrolling long before that of course, when the wheel on the mouse came out.</p>
<p>Before the mouse wheel we worried about page folds.  Would the naive mums trying Netscape 4 for the first time understand that there was more information there, just out of sight?  Jakob Nielsen and his army of acolytes made you employ a usability expert to blow your budget stressing over the issue.</p>
<p>Scrolling is a non-issue now.  Vertically, I mean.  Horizontal scrolling is right out.  It&#8217;s a no-go, confined to designers&#8217; CVs to show just how radical and out-of-the-box they can imagine.</p>
<p>Paging is another issue.  Frankly it&#8217;s a bitch.  Why should I wait for a page reload, when I can flicky-scroll?  Newspapers do it to make sure you&#8217;re seeing enough adverts.  Tutorials do it to make sure you&#8217;re not overwhelmed by learning more than one thing at once.  And we hate it.  It sucks.</p>
<p>But now the iPad is on the scene.  That changes things a bit.</p>
<p>The iPad has a fixed screen resolution for us.  And the screen is sufficiently bigger than the iPod for us to start thinking that columns might be necessary.  The New York Times has their application on there.  Columns and pages.</p>
<p>Columns are useless without paging.  Who wants to read all the way down (scroll, scroll, scroll), then have to go all the way back tot he top to continue reading?  Paging and columns go hand-in-hand.</p>
<p>A horizontal scroll is still nasty, but maybe there&#8217;s a place for paging now.  Not page-reloading.  But nice, simple paging.  Flicking through a paperback is still the best search function.  If the iPad Safari lets us have the nice paging function that other apps use, our web apps will be awesomely integrated*.</p>
<p>So how about it?  A spot of new CSS and a old-school page transition, for the new world of iPad.</p>
<p>CSS3 has columns, but no paging.  We need both, and we need it soon.  It could be the new flicky-scroll.</p>
<p>Until then of course, you can just play with my new <a href="http://code.google.com/p/js-columns/">js-columns newspaper columns plugin</a>.</p>
<p>*  One could argue that in fact Apple intentionally do not encourage web apps, because they&#8217;d rather lock developers into their app environment.  Why else would the accelerometer still be inaccessible from JavaScript?  Why else wouldn&#8217;t bookmarks appear in your home screens?  Not being cynical.  Just saying.</p>
<img src="http://feeds.feedburner.com/~r/KennethKufluk/~4/Fa7yqrh5oC8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://kenneth.kufluk.com/blog/2010/01/the-importance-of-paging/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://kenneth.kufluk.com/blog/2010/01/the-importance-of-paging/</feedburner:origLink></item>
		<item>
		<title>The App Store</title>
		<link>http://feedproxy.google.com/~r/KennethKufluk/~3/ewyyuxcLrKY/</link>
		<comments>http://kenneth.kufluk.com/blog/2010/01/the-app-store/#comments</comments>
		<pubDate>Sun, 31 Jan 2010 14:55:11 +0000</pubDate>
		<dc:creator>Kenneth</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://kenneth.kufluk.com/blog/?p=335</guid>
		<description><![CDATA[I was amused by a comment I overheard in the office last week, just after the announcement of the iPad.  It went something like this:
People will buy the iPad instead of a MacBook because the iPad has Applications.
My initial reaction was &#8220;how daft&#8221;.  A laptop running MacOSX, or Windows, has access to billions [...]]]></description>
			<content:encoded><![CDATA[<p>I was amused by a comment I overheard in the office last week, just after the announcement of the iPad.  It went something like this:</p>
<blockquote><p>People will buy the iPad instead of a MacBook because the iPad has Applications.</p></blockquote>
<p>My initial reaction was &#8220;how daft&#8221;.  A laptop running MacOSX, or Windows, has access to billions of application, built through the ages.  It&#8217;s ridiculous to think that there could be more applications available to a souped-up mobile phone.</p>
<p>But it immediately struck me that he had a point.  Shareware died in the land of sophisticated web browsers, and the proliferation of viruses and spamware.  Thinking back, they were awful.  &#8220;Proper&#8221; software, like Office or Photoshop is priced beyond the realm of individuals.</p>
<p>Really, I can&#8217;t believe that we missed it for so long.  What people wanted was a safe, reliable, place where they could spend pocket money on little apps that were beautifully built.  They found it in the App store.  And you know what?  I think Apple underestimated it too.  Otherwise there would be an App Store for MacBooks.</p>
<ul>
<li>So there&#8217;s a review process, hated by developers.  But equally, there&#8217;s no spamware.</li>
<li>There&#8217;s no multi-tasking.  But equally, there&#8217;s no battery intensive, memory-hogging, background-running daemons.</li>
<li>Apps costs money.  But Apple already has your card details from signing you up to iTunes.  They had a micro-payments model, beating Facebook and Paypal (whose customers have been begging for one) by miles.  £1.50?  That&#8217;s only half a pint these days.  No problem.</li>
</ul>
<p>In the land of the laptop, the only competitor (excluding webapps and shareware), is the widgets.  We have widgets for weather, clocks, telling the time, calendars, weather forecasts, clocks, and the weather.  Handy.</p>
<p>It&#8217;s here that I&#8217;d like to see the App Store.  Why can&#8217;t I drop an iPhone app onto my dashboard (or sidebar)?</p>
<blockquote><p>The iWork for iPad apps are $10 each and will be available at the iTunes App Store.</p></blockquote>
<img src="http://feeds.feedburner.com/~r/KennethKufluk/~4/ewyyuxcLrKY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://kenneth.kufluk.com/blog/2010/01/the-app-store/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://kenneth.kufluk.com/blog/2010/01/the-app-store/</feedburner:origLink></item>
		<item>
		<title>Typekit</title>
		<link>http://feedproxy.google.com/~r/KennethKufluk/~3/ByGkhdW3eXA/</link>
		<comments>http://kenneth.kufluk.com/blog/2010/01/typekit/#comments</comments>
		<pubDate>Tue, 19 Jan 2010 15:37:51 +0000</pubDate>
		<dc:creator>Kenneth</dc:creator>
				<category><![CDATA[Work]]></category>

		<guid isPermaLink="false">http://kenneth.kufluk.com/blog/?p=327</guid>
		<description><![CDATA[It&#8217;s not often I write a blog post just about a new tech.  For good reason:  there&#8217;s always someone out there prepared to dedicate a bit of time to a full tutorial on implementation, pros and cons.
I&#8217;d just like to mention Typekit because it&#8217;s not what I thought it was, and I&#8217;m quite impressed with [...]]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s not often I write a blog post just about a new tech.  For good reason:  there&#8217;s always someone out there prepared to dedicate a bit of time to a full tutorial on implementation, pros and cons.</p>
<p>I&#8217;d just like to mention Typekit because it&#8217;s not what I thought it was, and I&#8217;m quite impressed with what it is.</p>
<p>I&#8217;d assumed <a href="http://typekit.com" target="_blank">Typekit</a> was a solution to the technological problem of including new fonts on webpages.  Along similar lines to Cufon and sIFR.</p>
<p>For those who don&#8217;t know, including fonts is a problem because modern browsers haven&#8217;t agreed on a way to distribute fonts with web pages.  IE, oddly, had this solved ages ago, but since MS is so unfashionable at present, it has been largely ignored.</p>
<p>Cufon lets you use a new font by replacing text with little &lt;canvas&gt; image elements.  Ingenious, but quite silly as you have to create loads of these little elements on the fly.  SIFR does the same thing, but using Flash.  Indeed, we once used sIFR for the Cannes Film Festival website.  I remember a very long page-render time&#8230;</p>
<p>I&#8217;d assumed Typekit was going to be similar.  Basically, I&#8217;m wrong.</p>
<p><strong>Typekit is a solution for font licensing</strong>.  It&#8217;s always been a pain to get the right licenses for fonts.  Often the licenses you buy are both extortionately priced and not licensed to web distribution.  (This is because the way you provide a font to a web page is easily hijacked, and the font can be stolen).</p>
<p>Typekit provides access to their sensibly-sized library of fonts on a variety of subscription schemes.  Once signed up, including the fonts is a simple matter of a few lines of JavaScript.</p>
<p>Technically, Typekit uses the @font-face download rules.  This means it supports a limited number of browsers.  But it also supports IE, using the EOT font format (IE&#8217;s system attempts to prevent hijacking of fonts too).  So it&#8217;s not bad.</p>
<p>Downsides are that the iPhone is not supported, as mobile Safari doesn&#8217;t seem to support @font-face.  Of course, the non-JavaScript browsers out there don&#8217;t see the new fonts (but they&#8217;ve asked for a lesser experience, so who cares).  Also, there can be a FOUC (Flash of Unstyled Content) as the page loads the first time.</p>
<p>Once request I&#8217;d make to the Typekit team is the ability to support two sites on the Tester pack.  One for my simple blog, one for active development.  I know you want me to pay, but my commitment to fonts for personal use is not so great, and since you add your logo, it&#8217;s only an advert for yourselves anyway isn&#8217;t it.</p>
<p>In summary, I think it&#8217;s a great idea.  I see Typekit as the Spotify of fonts.</p>
<img src="http://feeds.feedburner.com/~r/KennethKufluk/~4/ByGkhdW3eXA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://kenneth.kufluk.com/blog/2010/01/typekit/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://kenneth.kufluk.com/blog/2010/01/typekit/</feedburner:origLink></item>
		<item>
		<title>4 easy fixes for Apple to make iTunes better</title>
		<link>http://feedproxy.google.com/~r/KennethKufluk/~3/XUynQXLCPW8/</link>
		<comments>http://kenneth.kufluk.com/blog/2009/12/4-easy-fixes-for-apple-to-make-itunes-better/#comments</comments>
		<pubDate>Sun, 20 Dec 2009 20:25:23 +0000</pubDate>
		<dc:creator>Kenneth</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Ranting]]></category>

		<guid isPermaLink="false">http://kenneth.kufluk.com/blog/?p=318</guid>
		<description><![CDATA[1) I expect you to manage my files.  Maintain a list of my purchased files and let me download them whenever I want.  Why am I expected to keep backups?  It&#8217;s just weird.
2) I expect you to allow me to deauthorize a computer remotely.  For example, I&#8217;ve just lost my hard [...]]]></description>
			<content:encoded><![CDATA[<p>1) I expect you to <strong>manage my files</strong>.  Maintain a list of my purchased files and let me download them whenever I want.  Why am I expected to keep backups?  It&#8217;s just weird.</p>
<p>2) I expect you to allow me to deauthorize a computer remotely.  For example, I&#8217;ve just lost my hard disc.  How do I deauthorize it?  You tell me I&#8217;ve got 5 out of my 5 computers authorized.  Ok, which ones?  Unlike 1975, five is not a big number of computers.  How about <strong>automatically deauthorizing a computer after 12 months</strong>?</p>
<p>3) I expect you to tell me that I can&#8217;t play HD films on a non-approved TV BEFORE I buy it.  Or, to be honest, never.  I&#8217;ve never heard of such <strong>ridiculous bullshit</strong>.  I&#8217;m not about to go and buy a new TV, just because it doesn&#8217;t have your DRM built in.<br />
The discussion here has 8 pages, and the last one says &#8220;Apple Support has no idea this problem exists.&#8221;<br />
<a href="http://discussions.apple.com/thread.jspa?messageID=8472731">http://discussions.apple.com/thread.jspa?messageID=8472731</a></p>
<p>4) If I tell you I own an MP3 I expect you to <strong>trust me</strong>.  Allow me to copy and transfer it like any other file.</p>
<p>We like our iPods, we love our iPhones, and when our wives aren&#8217;t looking, we might secretly give our MacBooks a cuddle.  But no-one likes iTunes.  And not because it&#8217;s a bad idea.  It&#8217;s just clunky and unusable.</p>
<p>If I were the EU, I would consider Apple bundling iTunes in the same light as Windows bundling Internet Explorer.  Let&#8217;s start the fine running at €1m/day and start talking openness.</p>
<img src="http://feeds.feedburner.com/~r/KennethKufluk/~4/XUynQXLCPW8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://kenneth.kufluk.com/blog/2009/12/4-easy-fixes-for-apple-to-make-itunes-better/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://kenneth.kufluk.com/blog/2009/12/4-easy-fixes-for-apple-to-make-itunes-better/</feedburner:origLink></item>
		<item>
		<title>Leaving Digitas</title>
		<link>http://feedproxy.google.com/~r/KennethKufluk/~3/yfy-AMIhgaw/</link>
		<comments>http://kenneth.kufluk.com/blog/2009/12/leaving-digitas/#comments</comments>
		<pubDate>Sun, 20 Dec 2009 15:19:24 +0000</pubDate>
		<dc:creator>Kenneth</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Work]]></category>

		<guid isPermaLink="false">http://kenneth.kufluk.com/blog/?p=313</guid>
		<description><![CDATA[I&#8217;ve been at Digitas for five years.  Five years.  As I&#8217;ve recently learned, that&#8217;s about thirty-five dog years.  Which is about four years older than I am now.
Here, I&#8217;ve worked on websites for Hewlett Packard, the Cannes Film Festival, Persil, Nicquitin, General Motors, Opel, Vauxhall, Sega&#8217;s TotalWar,  Nakheel and the Palm [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been at Digitas for <span style="font-size: x-large;">five</span> years.  <em><span style="font-size: xx-large;">Five years.</span></em>  As I&#8217;ve recently learned, that&#8217;s about <span style="font-size: x-large;">thirty-five</span> <span style="text-decoration: underline;"><span style="font-size: x-large;">dog years</span></span>.  Which is about <span style="font-size: x-large;">four</span> years older than I am now.</p>
<p>Here, I&#8217;ve worked on websites for <span style="font-size: x-large;">Hewlett Packard</span>, the <span style="font-size: x-large;">Cannes Film Festival</span>, <span style="font-size: large;">Persil</span>, Nicquitin, <span style="font-size: x-large;">General Motors</span>, Opel, Vauxhall, <span style="font-size: x-large;">Sega</span>&#8217;s <span style="font-size: large;">TotalWar</span>, <span style="font-size: x-large;"> Nakheel</span> and the <span style="font-size: x-large;">Palm Jumeirah</span>, <span style="font-size: x-large;">Bayer</span>&#8217;s <span style="font-size: large;">Xarelto</span>, MSD&#8217;s Propecia, <span style="font-size: x-large;">Procter &amp; Gamble</span>, <span style="font-size: x-large;">Eukanuba</span>, <span style="font-size: x-large;">Digitas of course</span>, and a few sites so cool, I still <em>can&#8217;t tell you about them</em>.<br />
That&#8217;s <span style="text-decoration: underline;"><span style="font-size: xx-large;">not a bad record</span></span>.<br />
Estimates suggest that <em>on average*</em>, I have been involved with more than <span style="font-size: x-large;">seventeen percent</span> of <em><span style="text-decoration: underline;"> your household purchases</span></em> , and although I have a three-percent chance of <em>killing you with a car</em>, there&#8217;s an extra <span style="font-size: xx-large;"> four percent chance </span> of <em><span style="font-size: xx-large;">saving your life</span></em> after an operation.</p>
<p>Somehow I&#8217;ve been sent to Brussels, Warsaw, Geneva, <strong>Minsk</strong>, Basle, Kiev, Zurich, Paris and <strong>Bangalore</strong>.</p>
<p><span style="font-size: xx-large;">Ninety-two</span> of my <em><span style="font-size: large;"> facebook friends</span></em>, I met through Digitas.  That&#8217;s <span style="font-size: x-large;"> sixty-one percent</span>.</p>
<p>Since I joined Digitas, I&#8217;ve started and finished a<em> </em><em><span style="font-size: large;"> three-year degree</span></em> in Physical Science, with a <span style="font-size: xx-large;"> two:one</span>. I&#8217;ve got married, and<em> </em><em><span style="font-size: xx-large;"> twenty-five percent</span></em> of my guests were from Digitas. I&#8217;ve run <span style="font-size: xx-large;"> twenty-six point one</span> miles in the London marathon, and they helped me raise <em><span style="font-size: xx-large;"> three-hundred</span></em><em> </em><em><span style="font-size: xx-large;"> pounds</span></em><span style="font-size: xx-large;"> </span> for the NSPCC.</p>
<p>I loved working here.<br />
I wish them all a great 2010.</p>
<p><span style="font-size: x-large;">Kenneth</span></p>
<p><span style="font-size: small;">* some estimates may be approximate to the point of complete fiction.</span></p>
<img src="http://feeds.feedburner.com/~r/KennethKufluk/~4/yfy-AMIhgaw" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://kenneth.kufluk.com/blog/2009/12/leaving-digitas/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://kenneth.kufluk.com/blog/2009/12/leaving-digitas/</feedburner:origLink></item>
		<item>
		<title>Amazon RDS is the worst idea since god invented taxes</title>
		<link>http://feedproxy.google.com/~r/KennethKufluk/~3/yhGacrB5qnM/</link>
		<comments>http://kenneth.kufluk.com/blog/2009/12/amazon-rds-is-the-worst-idea-since-god-invented-taxes/#comments</comments>
		<pubDate>Sat, 12 Dec 2009 20:09:30 +0000</pubDate>
		<dc:creator>Kenneth</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Ranting]]></category>

		<guid isPermaLink="false">http://kenneth.kufluk.com/blog/?p=305</guid>
		<description><![CDATA[Ok, so the headline of this article is probably a little OTT.  But I&#8217;ve just had one of the most annoying, and expensive, experiences working with Amazon&#8217;s hosting.
Actually, it&#8217;s really only annoying because it was expensive.
What happened was this:  I moved a sizeable set of sites over from my previous standard hosting to [...]]]></description>
			<content:encoded><![CDATA[<p>Ok, so the headline of this article is probably a little OTT.  But I&#8217;ve just had one of the most annoying, and expensive, experiences working with Amazon&#8217;s hosting.</p>
<p>Actually, it&#8217;s really only annoying because it was expensive.</p>
<p>What happened was this:  I moved a sizeable set of sites over from my previous standard hosting to the Amazon EC2 set.  It was LAMP based, but I&#8217;m not going to tell you which site, because it was built a long time ago and hasn&#8217;t had enough TLC recently.</p>
<p>The site was suffering from some pretty terrible response times.  Using a <em>top</em> to find the slow process seemed to give me no clues at all, and yet the cloudwatch service was showing consistently high CPU usage.</p>
<p>The site is database driven, and that work is quite intensive.  Each page on the site executes several queries, and there is a chatroom which drums the database on a regular basis.  But the site doesn&#8217;t do much else.  And so my culprit was obvious: the database.</p>
<p>I&#8217;d read about Amazon RDS and it seemed the perfect solution.  There&#8217;s no denying that my database is relational, it&#8217;s almost the textbook relational example, and so RDS beat Simple DB any day of the week.  It was cool to have my own EC2 instance running MySQL, but really, Amazon can be a bit complicated with backups and storage.  The thought of carefree backups, and a consistent long-running database as I toggled between application servers definitely appealed.  I have a new site to roll out?  Easy.  I run a new server in parallel, and switch the IP across when it&#8217;s tested.  Dream scenario, right?</p>
<p>And so it seemed.  The cost seemed a little high, but I had high hopes for the performance, and it was still less than our (3 year old) prior hosting.  I followed the Amazon online setup guide together with someone&#8217;s step-by-step tutorial (since sadly the console did not support RDS yet). </p>
<p>Except that it wasn&#8217;t much faster.  &#8220;Shit&#8221;, I thought.  That was a waste of time.  But that&#8217;s ok &#8211; I now can toggle between different instances of application server, and figure out the problem there without worrying about the database at all.  The site was fast enough to leave it running for a week to &#8220;bed in&#8221;.</p>
<p>One week later, a spring in my step, time to get working on the application.  This is working out well.  Database still intact, Cloudwatch says CPU load still high, so the blame must be with the PHP not the MySQL.  Ok, fair enough.  And a quick check of the running costs, gives me $400, not bad for the &#8230;</p>
<p>No, wait, go back to that bit again.</p>
<p>Four <em>hundred</em> dollars?  A <em>WEEK</em>?</p>
<p>WHAT. THE. DUCK.</p>
<p>That&#8217;s over twenty grand a year.  Sucre.<br />
My fingers have rarely moved as fast as they did to get that server switched back.</p>
<p>So what happened?<br />
It turned out that I&#8217;d been charged for the bandwidth between the app server and the database.  And in that week, I&#8217;d racked up a terabyte of data.  That sounds like a lot, but like I say, this was a DB-heavy site.  And actually, you never really look at the bandwidth to your DB do you?  It&#8217;s not what I would consider &#8220;external bandwidth&#8221;, which is what Amazon charge for.</p>
<p>After a very stressful couple of hours, I had a medium size instance (high cpu) running, with a clean Ubuntu install and Apache PHP MySQL on top.  Performance was back to proper levels (so the PHP just needed another processor), and the costs were back down.  </p>
<p>I sent a message to Amazon asking what had happened, and whether I could have my money back.  Answer: not on your nelly.  You used the bandwidth, you pay the price.</p>
<p>I protest.  &#8220;Come on&#8221;, I say, &#8220;I&#8217;m not sure what happened here&#8221;.  I&#8217;m a loyal customer and they could at least be generous on this.  A bit of faith in the newly-subscribed.  Better than that, I paid up and reserved an instance to demostrate my commitment.  Just drop the week&#8217;s charges, I asked.</p>
<p>My question was passed to management.  Not on your nelly, they said.  You used the bandwidth, you pay the price.  Your bandwidth was cross continent, they say.</p>
<p>AHHHHHHHHH.</p>
<p>Now I get it.  My servers were naturally in Europe.  Obviously I&#8217;d omitted the step of putting my RDS instance in Europe too, and it had defaulted to the US.  Bollocks.  I moved 1TB of data across the ocean because of a silly oversight.</p>
<p>Of course, it would&#8217;ve been nice if the setup commands had mentioned this.<br />
It would&#8217;ve been nice if they had added RDS to the console, so I could see this (seriously, they can develop a distributed database system, but haven&#8217;t got the time for a bit of HTML?)<br />
It would&#8217;ve been much better if they&#8217;d alerted me as I switched from a $1,000 setup to a $20,000 setup.<br />
Not much to ask.</p>
<p>And really, it&#8217;s not much to ask for my $400 back.  Ok, so I got it wrong.  But where&#8217;s the love?</p>
<img src="http://feeds.feedburner.com/~r/KennethKufluk/~4/yhGacrB5qnM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://kenneth.kufluk.com/blog/2009/12/amazon-rds-is-the-worst-idea-since-god-invented-taxes/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://kenneth.kufluk.com/blog/2009/12/amazon-rds-is-the-worst-idea-since-god-invented-taxes/</feedburner:origLink></item>
		<item>
		<title>2009: This year I have …</title>
		<link>http://feedproxy.google.com/~r/KennethKufluk/~3/bY9fseZzfTU/</link>
		<comments>http://kenneth.kufluk.com/blog/2009/11/2009-this-year-i-have/#comments</comments>
		<pubDate>Thu, 19 Nov 2009 22:13:48 +0000</pubDate>
		<dc:creator>Kenneth</dc:creator>
				<category><![CDATA[Personal]]></category>

		<guid isPermaLink="false">http://kenneth.kufluk.com/blog/?p=285</guid>
		<description><![CDATA[This year I have &#8230;

Got married!!!
Been to Hawaii on Honeymoon
Flown over an active volcano in a helicopter
Been to my brother&#8217;s wedding in a barn
Been to my friend&#8217;s wedding in a hotel
Graduated from a second BSc (in silly robes)
Submitted a Chrome Experiment (fireworks)
Rebuilt the company&#8217;s website
Left my job for bigger and better things
Painted the bathroom (no [...]]]></description>
			<content:encoded><![CDATA[<p>This year I have &#8230;</p>
<ul>
<li>Got married!!!</li>
<li>Been to Hawaii on Honeymoon</li>
<li>Flown over an active volcano in a helicopter</li>
<li>Been to my brother&#8217;s wedding in a barn</li>
<li>Been to my friend&#8217;s wedding in a hotel</li>
<li>Graduated from a second BSc (in silly robes)</li>
<li>Submitted a <a href="http://www.chromeexperiments.com/detail/js-fireworks/">Chrome Experiment</a> (fireworks)</li>
<li>Rebuilt the <a href="http://www.digitas.com">company&#8217;s website</a></li>
<li>Left my job for bigger and better things</li>
<li>Painted the bathroom (no more green!)</li>
<li>Been assaulted and robbed</li>
<li>Given my auntie a <a href="http://www.dotsonline.co.uk">cool new website</a> and POS system</li>
<li>Gone to Wales, Hawaii, Holland, Minsk and Brussels</li>
<li>Run a <a href="http://kenneth.kufluk.com/blog/2009/10/hackday-review/">successful hack day</a></li>
<li>Sold <a href="http://www.eukanuba.com">dog food</a>, <a href="http://www.visa.co.uk">credit cards</a>, <a href="http://www.propecia.com">hair-loss cures</a>, <a href="http://www.vauxhall.co.uk">cars</a>, banners, and clever things I can&#8217;t talk about.</li>
<li>Won an <a href="http://www.medadnews.com/News/Index.cfm?articleid=667508">award</a> for last year&#8217;s work.</li>
</ul>
<p>Next year I&#8217;m planning to:</p>
<ul>
<li> Learn Polish (at last!)</li>
<li>Pass my driving test</li>
<li>Have a lot more <em>fun</em> coding</li>
</ul>
<p>Compare to last year&#8217;s effort here:<br />
<a href="http://kenneth.kufluk.com/blog/2008/12/this-year-i-have/">http://kenneth.kufluk.com/blog/2008/12/this-year-i-have/</a></p>
<p>How was your 2009?  And what do you have planned for 2010?</p>
<img src="http://feeds.feedburner.com/~r/KennethKufluk/~4/bY9fseZzfTU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://kenneth.kufluk.com/blog/2009/11/2009-this-year-i-have/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://kenneth.kufluk.com/blog/2009/11/2009-this-year-i-have/</feedburner:origLink></item>
	</channel>
</rss>
