<?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 Universe</title>
	
	<link>http://kenneth.kufluk.com/blog</link>
	<description>The guy with the unreadable blog.</description>
	<lastBuildDate>Tue, 27 Dec 2011 16:53:50 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<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>2011: This year I have…</title>
		<link>http://feedproxy.google.com/~r/KennethKufluk/~3/PYkn7Ri6En4/</link>
		<comments>http://kenneth.kufluk.com/blog/2011/12/2011-this-year-i-have/#comments</comments>
		<pubDate>Tue, 27 Dec 2011 16:53:50 +0000</pubDate>
		<dc:creator>Kenneth</dc:creator>
				<category><![CDATA[Personal]]></category>

		<guid isPermaLink="false">http://kenneth.kufluk.com/blog/?p=990</guid>
		<description><![CDATA[My annual End of Year update. See previous years: 2010, 2009 and 2008. Last year I said I&#8217;d: Run another marathon. Write some more. Enjoy my new job and life in SF. Well, I&#8217;ll score that a two out of &#8230; <a href="http://kenneth.kufluk.com/blog/2011/12/2011-this-year-i-have/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>My annual End of Year update.  See previous years: <a href="http://kenneth.kufluk.com/blog/2010/12/2010-this-year-i-have/">2010</a>, <a href="http://kenneth.kufluk.com/blog/2009/11/2009-this-year-i-have/">2009</a> and <a href="http://kenneth.kufluk.com/blog/2008/12/this-year-i-have/">2008</a>.</p>
<p>Last year I said I&#8217;d:<br />
<uL></p>
<li>Run another <a href="http://www.thesfmarathon.com/">marathon</a>.</li>
<li>Write some more.</li>
<li>Enjoy my new job and life in SF.</li>
</ul>
<p>Well, I&#8217;ll score that a two out of three. Yes, I ran the marathon, but I stopped halfway (oh, the hills!); I didn&#8217;t really blog any more; but yes I enjoyed life in SF. Sometimes life makes things difficult, but my amazing wife and I got through it together.</p>
<p>We started the year in an empty apartment, sleeping on the floor, not knowing anyone in the city.  By the end, I feel we&#8217;ve settled in and started to make friends.</p>
<p>This year I have:<span id="more-990"></span></p>
<ul>
<li>Had cataract surgery. (again)</li>
<li>Passed my Driving Test. (again)</li>
<li>Been visited by both mothers and both brothers.</li>
<li>Launched a Follow Button and Web Intents.</li>
<li>Tinkered with various aspects of twitter.com.</li>
<li>Seen Buzz Aldrin, Snoop Dogg, Lady Gaga, and various others come in to the office to see where we work, and thank us.</li>
<li>Been given free pretzels, trainers, earplugs, ice-cream, online music and books, just because I work at Twitter.</li>
<li>Not been in a plane.</li>
<li>Not been to England.</li>
<li>Had but a single weekend away, on the other side of the bay.</li>
<li>Become a dad. <img src='http://kenneth.kufluk.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </li>
</ul>
<p>Next year I plan to:</p>
<ul>
<li>Take it easy.</li>
<li>Enjoy my <ins datetime="2011-12-26T04:54:04+00:00">new life and job</ins> <del datetime="2011-12-26T04:54:04+00:00">new job and life</del> in SF.</li>
</ul>
<p>And I think that&#8217;s enough for 2012.</p>
<img src="http://feeds.feedburner.com/~r/KennethKufluk/~4/PYkn7Ri6En4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://kenneth.kufluk.com/blog/2011/12/2011-this-year-i-have/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://kenneth.kufluk.com/blog/2011/12/2011-this-year-i-have/</feedburner:origLink></item>
		<item>
		<title>Five things you don’t know</title>
		<link>http://feedproxy.google.com/~r/KennethKufluk/~3/sGrzrmQ_VpE/</link>
		<comments>http://kenneth.kufluk.com/blog/2011/12/five-things-you-dont-know/#comments</comments>
		<pubDate>Thu, 01 Dec 2011 05:27:58 +0000</pubDate>
		<dc:creator>Kenneth</dc:creator>
				<category><![CDATA[Projects]]></category>

		<guid isPermaLink="false">http://kenneth.kufluk.com/blog/?p=982</guid>
		<description><![CDATA[&#8230; until you have a baby. They come prefilled with poo They have very sharp fingernails They don&#8217;t just sleep and cry &#8211; they spend a lot of time awake They spend an inordinate amount of time and energy straining &#8230; <a href="http://kenneth.kufluk.com/blog/2011/12/five-things-you-dont-know/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>&#8230; until you have a baby.</p>
<ul>
<li>They come <a href="http://en.wikipedia.org/wiki/Meconium">prefilled with poo</a></li>
<li>They have very sharp fingernails</li>
<li>They don&#8217;t just sleep and cry &#8211; they spend a lot of time awake</li>
<li>They spend an inordinate amount of time and energy straining to fart</li>
<li>Adults have very big peculiar heads</li>
</ul>
<img src="http://feeds.feedburner.com/~r/KennethKufluk/~4/sGrzrmQ_VpE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://kenneth.kufluk.com/blog/2011/12/five-things-you-dont-know/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://kenneth.kufluk.com/blog/2011/12/five-things-you-dont-know/</feedburner:origLink></item>
		<item>
		<title>News</title>
		<link>http://feedproxy.google.com/~r/KennethKufluk/~3/Yf41Op8ST7Y/</link>
		<comments>http://kenneth.kufluk.com/blog/2011/11/news/#comments</comments>
		<pubDate>Wed, 02 Nov 2011 02:03:00 +0000</pubDate>
		<dc:creator>Kenneth</dc:creator>
				<category><![CDATA[Personal]]></category>

		<guid isPermaLink="false">http://kenneth.kufluk.com/blog/?p=979</guid>
		<description><![CDATA[I&#8217;m happy to announce the release of a project we&#8217;ve been working on for a while now: a new little human. This project has turned out to be far more complicated than I ever imagined it could be, and so &#8230; <a href="http://kenneth.kufluk.com/blog/2011/11/news/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m happy to announce the release of a project we&#8217;ve been working on for a while now: a new little human.</p>
<p>This project has turned out to be far more complicated than I ever imagined it could be, and so during development, my wife and I agreed to keep our news offline until the launch.</p>
<p>Now we&#8217;ve hit 1.0, and we&#8217;ve come to like the privacy.  So we&#8217;re going to keep this one to ourselves, and enjoy ourselves without needing to overshare all the details all over Facebook and Twitter.</p>
<p>We&#8217;ve discovered a new respect for everyone who&#8217;s been through this development cycle before.  Parents are heroes.</p>
<p>Let me know by email if you want to know more.</p>
<img src="http://feeds.feedburner.com/~r/KennethKufluk/~4/Yf41Op8ST7Y" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://kenneth.kufluk.com/blog/2011/11/news/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://kenneth.kufluk.com/blog/2011/11/news/</feedburner:origLink></item>
		<item>
		<title>The old grey bar</title>
		<link>http://feedproxy.google.com/~r/KennethKufluk/~3/n2x1iI1WF4g/</link>
		<comments>http://kenneth.kufluk.com/blog/2011/08/the-old-grey-bar/#comments</comments>
		<pubDate>Mon, 22 Aug 2011 03:35:44 +0000</pubDate>
		<dc:creator>Kenneth</dc:creator>
				<category><![CDATA[Ranting]]></category>

		<guid isPermaLink="false">http://kenneth.kufluk.com/blog/?p=967</guid>
		<description><![CDATA[I have a secret confession to make. It may shock you. You may start rethinking our past conversations in a new light. You may also sink into denial, call me a hypocrite, call me a liar. That&#8217;s ok, but hear &#8230; <a href="http://kenneth.kufluk.com/blog/2011/08/the-old-grey-bar/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I have a secret confession to make. It may shock you. You may start rethinking our past conversations in a new light. You may also sink into denial, call me a hypocrite, call me a liar. That&#8217;s ok, but hear me out.<span id="more-967"></span></p>
<p>The truth is, I&#8217;m a Microsoft fan.</p>
<p>Yes, I know I&#8217;m typing this on a Macbook Pro. Yes, I know I&#8217;m surrounded by Apple computers, iPads, iPods, and probably soon, an iPhone.</p>
<p>I can <em>understand</em> why you don&#8217;t believe me.</p>
<p>But, you see, I worked in the <em>nineties</em>. Back then, we had Netscape 4, an Internet browser so <em>unbelievably</em> atrocious I&#8217;m still in therapy for it. In comparison, Internet Explorer 4 was a dream. Five was better, and six more reliable still. Without Internet Explorer, I&#8217;m convinced the Internet would still be a hyped-up academic side-project.</p>
<p>And there&#8217;s more. Windows 95 was an <em>excellent</em> operating system. It was possible for me, a seventeen year old geek, to run a small office network, build a networked database system and roll out email, all with simple icons and a mouse. Yes, I could&#8217;ve done that on OS/2 (which I ran on my home computer for some years), but it was always clear that Windows was to be the future.</p>
<p>Microsoft Word was <em>awesome</em>. And those squiggly-lined spellchecks? Perfect. Excel was and is the only spreadsheet system worth knowing. Google Spreadsheet don&#8217;t reinvent this wheel, they copy copy copy.</p>
<p>Windows 2000 and XP followed Windows 95 with bulletproof reliability. You didn&#8217;t have to reboot for a week. At least. Once you turned off the stupid green and blue bars, and went back to the familiar windows grey, they were indistinguishable from Windows 95, but for new features (better Internet support), new tools, and more reliability.</p>
<p>I&#8217;ve loved Microsoft.  They&#8217;ve helped me make a career in computing.  But now I&#8217;m a Mac user.</p>
<p>In fact, I&#8217;ve recently installed OSX Lion. You know what&#8217;s new? Nothing.</p>
<p>Yeah yeah yeah, I&#8217;ve got a few changed mouse gestures, a few new icons, and a new icon for maximize, because someone at Apple won&#8217;t admit that the existing green plus button doesn&#8217;t work.</p>
<p>But you know what? I love it.</p>
<p>Yep, they gave me nothing, I paid very little for it, and I&#8217;m chuffed.  And my next computer will be an Apple.</p>
<p>Microsoft had a dream in the nineties, to put a computer in every home. They did that. How cool is it, that they did that? How many corporations achieve a goal like that?</p>
<p>But somewhere along the way, they fell from the path. They stopped promoting PCs, and started selling operating systems. They started selling software.</p>
<p>Suddenly I needed a reason to upgrade my operating system, and a choice of six editions to choose from. I needed more memory, and a new computer, not because I wanted to do more stuff, but because the windows are all sparkly glass.</p>
<p>I was prompted to write this article because I read a blog post from someone who recently switched to a Mac from a PC.  I do feel his pain &#8211; it&#8217;s actually not an easy switch. I hated it, my wife hated it. But he actually complained that the grey bar at the top looked dated.</p>
<p>And that&#8217;s where the marketers listen.  But the truth is, he was still switching to a Mac. He was upgrading to a fast, responsive, reliable experience. A computer you take from the box and feel joy for the next week as you find delightful new features.</p>
<p>But the marketer believes you want a sparkly new spanglebar because you told him you did. It&#8217;ll become a priority for launch.</p>
<p>Microsoft shows us that we should <em>stop listening to our customers</em>, and start trusting our skilled, talented designers, where &#8216;design&#8217; encompasses aesthetics, direction, purpose and technical build. You don&#8217;t want a sparkly spanglebar, you want nothing.</p>
<p>Each successive upgrade of the Window taskbar has confused me. The same can be said for the horrible Office ribbon. Both are solutions for problems that simply never existed.</p>
<p>Windows became like that software you get with your printer. It gets in your way, not out of it. But that doesn&#8217;t need to be so.</p>
<p>What I&#8217;d like to see most from Microsoft is <em>nothing</em>. Chuck out the chintz, fix some big bugs, improve what&#8217;s there. Be our rock solid base that others can build great apps on. Show me some PCs of the same quality as my Mac. Tempt me back, I dare you.</p>
<img src="http://feeds.feedburner.com/~r/KennethKufluk/~4/n2x1iI1WF4g" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://kenneth.kufluk.com/blog/2011/08/the-old-grey-bar/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://kenneth.kufluk.com/blog/2011/08/the-old-grey-bar/</feedburner:origLink></item>
		<item>
		<title>The whole shebang</title>
		<link>http://feedproxy.google.com/~r/KennethKufluk/~3/f7jmZFpsGP0/</link>
		<comments>http://kenneth.kufluk.com/blog/2011/07/the-whole-hashbang/#comments</comments>
		<pubDate>Sat, 23 Jul 2011 21:44:38 +0000</pubDate>
		<dc:creator>bob</dc:creator>
				<category><![CDATA[Projects]]></category>

		<guid isPermaLink="false">http://kenneth.kufluk.com/blog/?p=949</guid>
		<description><![CDATA[My colleagues have been amicably bickering, online and offline, about the use of hashbangs. Ben Cherry explains that HashBangs are necessary, though not pretty, temporary workarounds to the lack of pushState support, which is part of the HTML5 spec. http://www.adequatelygood.com/2011/2/Thoughts-on-the-Hashbang &#8230; <a href="http://kenneth.kufluk.com/blog/2011/07/the-whole-hashbang/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>My colleagues have been amicably bickering, online and offline, about the use of hashbangs.</p>
<p>Ben Cherry explains that HashBangs are necessary, though not pretty, temporary workarounds to the lack of pushState support, which is part of the HTML5 spec.<br />
<a href="http://www.adequatelygood.com/2011/2/Thoughts-on-the-Hashbang">http://www.adequatelygood.com/2011/2/Thoughts-on-the-Hashbang</a></p>
<p>Dan Webb explains that this temporary workaround goes against the fundamental rule that &#8220;cool URIs don&#8217;t change&#8221;, and that they are bad for the web in general.<br />
<a href="http://danwebb.net/2011/5/28/it-is-about-the-hashbangs">http://danwebb.net/2011/5/28/it-is-about-the-hashbangs</a></p>
<p>When we discuss this sort of thing, we&#8217;re talking about the web in general, not about any Twitter pages, URLs, sites or strategy. Our personal sites are for personal opinions.<span id="more-949"></span></p>
<p>Dan and Ben have strong points, but I think the Internet is sufficiently large as to accommodate a variety of architectures. While building one way may simply be better, for excellent reasons, than another way, one is often forced to choose the lesser route due to external constraints.</p>
<p>New Twitter is a good example: a clientside application built using JavaScript. Besides the obvious UI upgrade, there was also a desire to reduce the load on our servers, and leverage our own API. This enabled us to concentrate resources on scaling and bugfixing the API in the backend (good for everyone), while letting frontend developers iterate quickly against an agreed specification. It was a win-win architecture.</p>
<p>The result is an application which needs to allow navigation without server calls. Thus the hashbang in the URL. It&#8217;s a necessary consequence of the requirements of the project.</p>
<p>Dan does raise some excellent points that the hashbangs cause problems. Returning to a hypothetical example, we might still have reasons not to rearchitect back to the classical page-request method. So we should address the problems Dan raises directly.</p>
<p><strong>1 Spiders should execute JavaScript</strong></p>
<p>There&#8217;s essentially no reason why a spider shouldn&#8217;t be executing some form of JavaScript. It&#8217;s mature enough. We&#8217;re using JavaScript to write out our content, and so the spider should be able to execute our JavaScript before it evaluates our DOM for content. It merely needs to know when the page is ready for this to happen.</p>
<p><strong>2 Ajax pages need a &#8216;Page Loaded&#8217; event</strong></p>
<blockquote><p>Spiders and search indexers can and do sometimes implement JavaScript runtimes. However, even in this case there’s no well recognised way to say ‘this is a redirect’ or ‘this content is not found’ in a way that non-humans will understand.</p></blockquote>
<p>We just need this specification. Let us have a way to signal HTTP response code equivalents like 404, 500 and &#8220;Page complete&#8221; through manipulation of the DOM with JavaScript.</p>
<p><strong>3 Hashbangs are a fallback</strong></p>
<p>The <a href="http://code.google.com/web/ajaxcrawling/docs/getting-started.html">original hashbang proposal</a> from Google aliases hashbanged urls to _escaped_fragment_ querystring parameters, allowing it to read the content of hashbanged urls as a server-side rendered page. I don&#8217;t believe this is a good system.</p>
<p>For a start, our linked URLs should be &#8216;cool&#8217;. It is only JavaScript that should add the hashbang, in browsers that need it. For example:</p>
<pre>&lt;a href="/kpk"&gt;Kenneth&lt;/a&gt;
&lt;script&gt;if ($.browser.msie) $('a').click(function(){location.hash='!'+this.href;return false});&lt;/script&gt;</pre>
<p>When Google reads this link, it should request &#8216;/kpk&#8217;. As our page is a clientside app, the server will respond with a redirect to &#8216;/&#8217;, then a pushState back to &#8216;/kpk&#8217;, before rendering the content to the DOM. If we can then trigger a &#8216;page loaded&#8217; event, Google can start reading our content.</p>
<p><strong>4 Hashbangs should be invisible</strong></p>
<p>A hashbang is a temporary workaround for the lack of pushState. While our links should only be hashbanged for the non-pushState browsers, Google may still find a hashbang in a URL. As such, Google should regard it as invisible. The URL it saves should be the URL without a hashbang.</p>
<p>For example,<br />
Spider finds link to http://twitter.com/#!kpk<br />
Spider saves link as http://twitter.com/kpk<br />
Spider finds link to http://twitter.com/#!kpk/mentions?page=10<br />
Spider saves link as http://twitter.com/kpk/mentions?page=10</p>
<p>This lets us switch to Cool URLs with pushState when and where it becomes available. It lets us use canonical urls. And should we choose to revert to a client/server model later on, we are able to do so.</p>
<p><strong>5 Hashbangs should be eternally supported</strong></p>
<blockquote><p>Once you hashbang, you can&#8217;t go back.</p></blockquote>
<p>Once a URL is made visible, you should be committed to maintaining that link forever. Fortunately, hashbanged URLs are easy to replace, if they&#8217;ve been designed invisibly. If you don&#8217;t use hashbangs anymore, just render them invisible with this script on your homepage:</p>
<pre>&lt;script&gt;if (location.hash.charAt(1)=='!') location.replace(location.hash.substr(2));&gt;&lt;/script&gt;</pre>
<p>&nbsp;</p>
<p>So, in summary, I suggest we (or rather, Google, as the authority over content reading) should accept the clientside application on its own terms, rather than as an alias to a server-side application. For while the client-server model has certain inherent advantages, there will still be occasions when a clientside application is more appropriate.</p>
<p>We can support that by changing the rules on interpreting hashbangs, and by introducing a DOM element controlled by JavaScript that describes the page status.</p>
<p><script type="text/javascript">// <![CDATA[
if (location.hash.charAt(1)=='!') location.replace(location.hash.substr(2));>
// ]]&gt;</script></p>
<img src="http://feeds.feedburner.com/~r/KennethKufluk/~4/f7jmZFpsGP0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://kenneth.kufluk.com/blog/2011/07/the-whole-hashbang/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://kenneth.kufluk.com/blog/2011/07/the-whole-hashbang/</feedburner:origLink></item>
		<item>
		<title>“the nerdiest thing I’ve seen all day”</title>
		<link>http://feedproxy.google.com/~r/KennethKufluk/~3/MBDot87wiuQ/</link>
		<comments>http://kenneth.kufluk.com/blog/2011/07/the-nerdiest-thing-ive-seen-all-day/#comments</comments>
		<pubDate>Tue, 19 Jul 2011 04:12:26 +0000</pubDate>
		<dc:creator>Kenneth</dc:creator>
				<category><![CDATA[Projects]]></category>

		<guid isPermaLink="false">http://kenneth.kufluk.com/blog/?p=945</guid>
		<description><![CDATA[In between the hours spent coding the hardcore JavaScript behind New Twitter, I like to put together fun little JavaScript demos. They get shown, if they&#8217;re good enough, on the screens around the office. Today&#8217;s is a tribute to the &#8230; <a href="http://kenneth.kufluk.com/blog/2011/07/the-nerdiest-thing-ive-seen-all-day/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>In between the hours spent coding the hardcore JavaScript behind New Twitter, I like to put together fun little JavaScript demos. They get shown, if they&#8217;re good enough, on the screens around the office.</p>
<p>Today&#8217;s is a tribute to the almighty Matrix. <span id="more-945"></span>Although they sadly never made any sequels, and the effects have been copied so often they now seem cliché, it was an outstanding film of its time.</p>
<p>So here it is: a Twitter List timeline, shown as a Matrixy matrix:<br />
<a href="http://kenneth.kufluk.com/matrix/"> http://kenneth.kufluk.com/matrix/</a></p>
<p>Initially, I wanted to have the tweets scrolling down the page using CSS animations. Sadly, my machine got completely overwhelmed with only a few streams. I would&#8217;ve turned to my friend the canvas, but our display screens are something like 1900&#215;800 and slow, which makes full-screen canvas too jerky. So I just rendered a large set of absolutely positioned divs, one for each character.</p>
<p>Reading the text is a bit tricky. I supposed that in an ideal world, the tweets would stream upwards, but I didn&#8217;t want to deviate so far from the original. And so the tweets stream down the screen, and are mostly unreadable. I have tried reversing the text, but that simply makes them harder to read. English is not a language designed for reading bottom to top.</p>
<p>The image in the background is taken from a png. I draw it to a hidden canvas, but draw it scaled to the same dimensions (pixels) as the grid (characters). Then, I work out the visibility (brightness+opacity) of each (now-pixellated) pixel. This is added to the &#8220;bg_opacity&#8221; property of the grid cell, which is combined with the opacity of the current character to give the effect.</p>
<p>It&#8217;s quite easy to swap out the list and the image, and to tune the character size, just by editing variables at the top of the script.</p>
<p>The code is, naturally, on Github:<br />
<a href="https://github.com/kennethkufluk/Twitter-Matrix"> https://github.com/kennethkufluk/Twitter-Matrix</a></p>
<p>Have a play, have a tinker. Let me know how I could improve the effect, and improve the performance.</p>
<p><strong>Update:</strong></p>
<p>I jiggled the code around a bit.  Instead of absolutely positioning each character, and setting their content and opacity each time, I now insert a row of characters at a time.  The row has spans for setting each char&#8217;s opacity.  The bird image is now a translucent canvas overlay.</p>
<p>Performance is significantly better, and you can use Inspector without crashing the browser, but the layering doesn&#8217;t seem to work reliably in Chrome.  I&#8217;m not sure why.  So sometimes you just don&#8217;t see the bird.</p>
<p>And when you see super-wide Unicode characters, it can upset the grid a bit.  I haven&#8217;t worried about that.</p>
<p><strong>Update 2</strong></p>
<p>I took away &#8220;-webkit-transform-style: preserve-3d;&#8221; from the body tag, and the z-indexed layers now work properly.</p>
<img src="http://feeds.feedburner.com/~r/KennethKufluk/~4/MBDot87wiuQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://kenneth.kufluk.com/blog/2011/07/the-nerdiest-thing-ive-seen-all-day/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://kenneth.kufluk.com/blog/2011/07/the-nerdiest-thing-ive-seen-all-day/</feedburner:origLink></item>
		<item>
		<title>It’s not me, it’s you.</title>
		<link>http://feedproxy.google.com/~r/KennethKufluk/~3/RWH9cJGp8Bc/</link>
		<comments>http://kenneth.kufluk.com/blog/2011/07/its-not-me-its-you/#comments</comments>
		<pubDate>Sat, 09 Jul 2011 04:58:18 +0000</pubDate>
		<dc:creator>Kenneth</dc:creator>
				<category><![CDATA[Personal]]></category>

		<guid isPermaLink="false">http://kenneth.kufluk.com/blog/?p=930</guid>
		<description><![CDATA[Before I get started, I want to make absolutely clear that this is really all your fault. You are entirely at fault here, and I take no responsibility whatsoever for your actions. First up, you&#8217;ve also got a savings account. &#8230; <a href="http://kenneth.kufluk.com/blog/2011/07/its-not-me-its-you/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Before I get started, I want to make absolutely clear that this is really all your fault. You are entirely at fault here, and I take no responsibility whatsoever for your actions.<span id="more-930"></span></p>
<p>First up, you&#8217;ve also got a savings account. That&#8217;s money you&#8217;ve put away &#8211; you&#8217;re quite proud of that. But the truth? You failed. You spent it.</p>
<p>Because you&#8217;ve borrowed money on a credit card. You don&#8217;t realize how daft it is that you pay a huge amount of interest to the bank each year, because it&#8217;s only a tenner or so each month, so you don&#8217;t notice how it adds up.</p>
<blockquote><p>£ 178m is paid in personal interest in the UK every day.</p></blockquote>
<p>Effectively, you&#8217;ve borrowed money on your credit card from the bank, and then you put that money back in the bank. You&#8217;ve developed an ingenious scheme for giving money to banks.</p>
<blockquote><p>Average household debt in the UK is about £ 8,076 (excluding mortgages).</p></blockquote>
<p>Spend your &#8220;savings&#8221; on paying off your debt. Be honest with yourself. Because nobody made you borrow that money, on that credit card of yours. That was you.</p>
<p>This is just an example of the way that you, you personally, got us into the economic mess we find ourselves in.</p>
<p>You see, there&#8217;s really only two ways to make money: work and risk. Obviously you can earn money through your job, that&#8217;s real money. And then you can invest or gamble your money to increase that sum.</p>
<p>An investment in property is generally considered a low-risk investment. With low risk comes small reward. You won&#8217;t make much money, but you&#8217;re also unlikely to lose much. If you live in the house you own, you also reduce the risk that your rent will fluctuate. A sound investment.</p>
<p>But property still obeys the laws of supply and demand. When there&#8217;s problems in the stock market, many investors will sell their shares to invest in property, reducing their exposure to an unpredictable stock market. This demand drives property prices up, which makes property investments seem even more attractive. And of course, this brings yet more investment.</p>
<p>After a few years, your house has doubled in value. On paper, you&#8217;re in the money. Naturally you want that feel of that green between your fingers. So you remortgage your house, getting cash out now. In return, you&#8217;ve got a low rate on a loan.</p>
<p>But wait, where did that money come from? You had a property, and now you&#8217;ve got property and a big wad of cash. That cash didn&#8217;t appear from nowhere &#8211; you didn&#8217;t win the lottery. What happened was that you exchanged cash for increased risk on your property.</p>
<p>You took that cash and bought another property. Buy-to-let they call it. You get a mortgage on a house, and pay that mortgage off with the rent you receive from the tenant. After twenty years, you&#8217;ll basically have a free house.</p>
<p>Again, this house has simply come at the cost of increased exposure to risk. Your buy-to-let is only feasible if the rent income is greater than the mortgage costs. Those costs are dependent on the mortgage interest rate. Also, you assume your property will increase in value.</p>
<p>If there is increased confidence in the stock market, investors will tend to reduce their investments in property to find greater flexibility and returns from stocks and shares.</p>
<p>Supply and demand comes into effect once again. As demand drops, so will prices, albeit slowly. You might find yourself in negative equity as the property value drops lower than the amount you borrowed to buy it. With low demand, you&#8217;ll have difficulty selling up. Should rent demand drop or mortgage rates increase during this period, you, and millions like you, will be in huge trouble.</p>
<blockquote><p>331 people every day of the year will be declared insolvent or bankrupt. This is equivalent to 1 person every 60 seconds during a working day.</p></blockquote>
<p>And of course, huge trouble doesn&#8217;t work out well for the banks either. Foreclosing on a loan means cancelling the repayment of a huge percentage of the debt. As they do so, tax revenues drop, and the whole country falls into difficulties. That is why the governments are spending billions to prop up the property values and keep interest rates down.</p>
<blockquote><p>£ 20.71m of loans is written off each day by banks &amp; building societies.</p></blockquote>
<p>Yup, it&#8217;s all for you. We&#8217;ve put ourselves into twenty years of debt because we can&#8217;t let you go bankrupt. I didn&#8217;t do that. You did that.</p>
<p>And the bankers of course. They did that. But how they did that, and why they did that, are because of you.</p>
<p>You see, investment bankers basically gamble with money. However, they&#8217;ve found a clever way to cheat the system, because they don&#8217;t gamble with their own money. They gamble with other people&#8217;s money, and take a percentage of the winnings. When they lose, they don&#8217;t actually lose a dime.</p>
<p>So whose money do they risk? Pension funds, on the whole. These investment giants are big movers on the stock market. The managers of pension funds are paid reasonably well for their jobs &#8211; &#8220;reasonable&#8221;, based on the standard market rate. The standard rate is based on the pay of the famous &#8220;fat cat&#8221; company directors, whose pay is decided by themselves, but must be confirmed by their shareholders at the annual AGM. Of course, it is the pension funds who are the biggest shareholders, represented by the pension fund managers themselves, and so executive pay rises are rarely disputed.</p>
<blockquote><p>The value of assets held in UK-funded pensions was £ 1.92 trillion in 2009 (138 per cent of GDP).</p></blockquote>
<p>The Pension Fund is a curious animal in that regard. The money in your pension is your money. Earned by you, saved by you. The only problem is that you can&#8217;t get your hands on it, and you have no influence over the investments it makes. You get no say at the company meetings where your pension is invested. You can&#8217;t refuse to pay bonuses to your fund managers in a year where your pension halved in value. It is money without worth.</p>
<p>Your pension is one area where you let everybody down. It&#8217;s your money paying the bankers, the fat cats, the expenses bills in swanky wine bars. You did that. I didn&#8217;t.</p>
<p>You see, the truth is that you don&#8217;t need a pension. Invest instead in bricks and mortar. Something you can see and feel and touch and trust. A property investment is the exact opposite of a pension fund &#8211; for the majority of the time, you get all the control, but the money is invested by the bank.</p>
<p>All you have to do is leave it be. When property prices rocket, don&#8217;t get carried away. Just smile smugly to yourself with your paper riches and just keep steadily paying your mortgage. When prices drop again, you&#8217;ll still have a roof over your head. When you&#8217;re eighty, then sell it and move on. It&#8217;s only a house, but there&#8217;s money in those bricks. Real money, money you worked for.</p>
<p>Voting with your feet like this is the best way to take control. Stop whinging that you didn&#8217;t get a say. This was actually your fault all along. Let&#8217;s learn your lessons from this debacle of yours, and grow up.</p>
<p>Finally, a suggestion for the manifesto. Because you see, a property is not quite like a pension. A pension has tax exemptions and employer matching, designed to help you put money away for the future, to stop you from frittering it away like so many credit cards.</p>
<p>Let us treat our house like our pension. Give us the same benefits as pensions, with the same lockins, but put us in control.</p>
<p>Because money is all about control. And I intend to hang on to mine.<br />
<br/></p>
<p><a href="http://www.creditaction.org.uk/helpful-resources/debt-statistics.html">http://www.creditaction.org.uk/helpful-resources/debt-statistics.html</a><br />
<a href="http://www.statistics.gov.uk/cci/nugget.asp?id=1282">http://www.statistics.gov.uk/cci/nugget.asp?id=1282</a></p>
<img src="http://feeds.feedburner.com/~r/KennethKufluk/~4/RWH9cJGp8Bc" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://kenneth.kufluk.com/blog/2011/07/its-not-me-its-you/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<feedburner:origLink>http://kenneth.kufluk.com/blog/2011/07/its-not-me-its-you/</feedburner:origLink></item>
		<item>
		<title>Living in America</title>
		<link>http://feedproxy.google.com/~r/KennethKufluk/~3/Uxu5v2VlgDE/</link>
		<comments>http://kenneth.kufluk.com/blog/2011/05/living-in-america/#comments</comments>
		<pubDate>Sun, 01 May 2011 02:28:44 +0000</pubDate>
		<dc:creator>Kenneth</dc:creator>
				<category><![CDATA[Personal]]></category>

		<guid isPermaLink="false">http://kenneth.kufluk.com/blog/?p=898</guid>
		<description><![CDATA[We have been here for nearly six months now. This is what we&#8217;ve learned: Eggs American eggs are white.  There are thousands of egg-polishers employed to shine them up.  This may seem silly, but they break more easily into two &#8230; <a href="http://kenneth.kufluk.com/blog/2011/05/living-in-america/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>We have been here for nearly six months now.<br />
This is what we&#8217;ve learned:<span id="more-898"></span></p>
<p><strong>Eggs</strong></p>
<p>American eggs are white.  There are thousands of egg-polishers employed to shine them up.  This may seem silly, but they break more easily into two halves, and just look nicer.  It is surprisingly difficult to find free-range eggs though, and this is sad.</p>
<p><strong>Grids</strong></p>
<p>I&#8217;m sold.  All cities should be made on grids. It&#8217;s just so much easier to navigate.  While we don&#8217;t have so many numbers streets and avenues as Manhattan, it&#8217;s still much easier to get around.  Please bulldoze Europe and start again.</p>
<p><strong>Tube</strong></p>
<p>There&#8217;s an underground system here called the BART.  It runs, but I don&#8217;t take it.  We live close enough to the action not to need it, and for this I&#8217;m eternally grateful.  While I&#8217;m sure the London Underground is a very clever system for moving millions of people from A to B and back to A again, it is also a sweaty smelly dirty hellhole which the average Londoner spends 2 unpaid hours a day in.</p>
<p><strong>Weather</strong></p>
<p>It&#8217;s not so much that the weather is better here (especially recently), but there is more <em>light</em>.  It doesn&#8217;t get so dark in the winter, and the roads are so big that the sky just seems overwhelmingly huge.  It&#8217;s not that the sky is bluer (though it probably is), but I can see so much more of it.</p>
<p><strong>Fat</strong></p>
<p>Americans are not fat.  Not in San Francisco anyway.  Sure, you&#8217;ll find a few living mountains in Las Vegas, but I&#8217;d say the average San Franciscan is 10% thinner than the average Londoner (whatever that is).</p>
<p><strong>Breakfast</strong></p>
<p>The English Breakfast is internationally agreed to be the finest breakfast in the world.  But here you can also have pancakes, french toast, bottomless coffee, crispy bacon, maple syrup and a hundred other options, leaving the typical English Breakfast looking like a greasy pile of swill.  Breakfasts here are taken seriously, and are a big deal.</p>
<p><strong>Tips</strong></p>
<p>Seems a bit funny to tip in a bar the first few times.  But it&#8217;s the done thing.  In London, you&#8217;re often served by a non-English speaking miserable mope, if they can be bothered.  In America, the service is usually friendly, courteous and helpful.  I wonder if there&#8217;s a connection?</p>
<p><strong>ID</strong></p>
<p>So they ID everywhere.  It&#8217;s not personal.  Carry ID, flash a card, get over it.  In London, you only get ID&#8217;ed if the bar staff don&#8217;t like the look of you.  It&#8217;s inconsistent and infuriating.</p>
<p><strong>Brands</strong></p>
<p>It&#8217;s hard to get by in your first few months because everything from washing powder to face cream is branded differently.  What&#8217;s good and what&#8217;s not?  Who&#8217;s the Colgate and who&#8217;s the Crest?  You don&#8217;t know.  But really, it never mattered anyway, did it?</p>
<p><strong>Beer</strong></p>
<p>The beer here is tasty, cool, refreshing and generally excellent.  There is hardly any Budweiser to be seen, nor the typical English Carling, Carlsberg, Fosters, Stella or any of the other weak-tasting identical lagers.</p>
<p>So what do we miss about London?  The tube, the fireplace, the pubs, the gardens?<br />
Not really.</p>
<p>Just our family and friends.  Hopefully they&#8217;ll come to visit.</p>
<img src="http://feeds.feedburner.com/~r/KennethKufluk/~4/Uxu5v2VlgDE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://kenneth.kufluk.com/blog/2011/05/living-in-america/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		<feedburner:origLink>http://kenneth.kufluk.com/blog/2011/05/living-in-america/</feedburner:origLink></item>
		<item>
		<title>Making friends and influencing people</title>
		<link>http://feedproxy.google.com/~r/KennethKufluk/~3/yMg-0D9nUl0/</link>
		<comments>http://kenneth.kufluk.com/blog/2011/03/making-friends-and-influencing-people/#comments</comments>
		<pubDate>Tue, 22 Mar 2011 17:11:41 +0000</pubDate>
		<dc:creator>Kenneth</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://kenneth.kufluk.com/blog/?p=888</guid>
		<description><![CDATA[My last post caused a bit of a stir. I was kindof annoyed after hopping around the internet looking for the best workaround for a particularly niggly (and obscure) browser bug, and so popped onto the old blog for a &#8230; <a href="http://kenneth.kufluk.com/blog/2011/03/making-friends-and-influencing-people/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>My last post caused a bit of a stir.  I was kindof annoyed after hopping around the internet looking for the best workaround for a particularly niggly (and obscure) browser bug, and so popped onto the old blog for a bit of a rant.</p>
<p>That&#8217;s not unusual.  My ranting blog category is essentially my life&#8217;s work. No matter how the article starts, I get to the end thinking, yep, that&#8217;s a rant alright.<span id="more-888"></span></p>
<p>For that and many other reasons, this blog does not get a whole lot of traffic.  OK, so the distracting background which crashes most browsers is another good reason.  But the annoying background is only there because I&#8217;m not seriously expecting anyone to read the content.</p>
<p>But this one got out.  Maybe because I&#8217;m now working at Twitter, instead of being a freelance hick.  Maybe I just struck a nerve.  Maybe it was the reddit comments and the &#8220;just look at this idiot&#8221; tweets.</p>
<p>I got comments from Paul and Chris, advocates at Mozilla, and from Chris at PromoteJS.</p>
<p>Either way, traffic has spiked massively.  Here&#8217;s my graph from the last year to that blog post:<br />
<img src="http://kenneth.kufluk.com/blog/wp-content/uploads/2011/03/Screen-shot-2011-03-22-at-09.53.16.png" alt="" title="Winning Visit Stats" width="661" height="168" class="alignright size-full wp-image-889" /></p>
<p>If that trend continues, I should be hitting a million visits a day by the end of the month.</p>
<p>It&#8217;s pretty clear what to do from here: monetize.  I&#8217;m going to be writing a lot more abusive posts here, mostly about totally blameless not-for-profit community efforts.  I&#8217;ll also be introducing a sign-up system, a paywall and Facebook comments.</p>
<p>I&#8217;ll have t-shirts, an iPhone app, celebrity endorsements and a spinning flaming logo.</p>
<p>My plan is to IPO after three years, or sell out to AOL.</p>
<p><strong>2 weeks later</strong><br />
<img src="http://kenneth.kufluk.com/blog/wp-content/uploads/2011/03/Screen-shot-2011-03-22-at-10.05.03.png" alt="" title="A mere blip" width="660" height="161" class="alignright size-full wp-image-890" /></p>
<p>Dreams crushed.<br />
Ah well.  Maybe I&#8217;ll just have to start writing better blog posts instead.</p>
<img src="http://feeds.feedburner.com/~r/KennethKufluk/~4/yMg-0D9nUl0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://kenneth.kufluk.com/blog/2011/03/making-friends-and-influencing-people/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://kenneth.kufluk.com/blog/2011/03/making-friends-and-influencing-people/</feedburner:origLink></item>
		<item>
		<title>“Promote JS”</title>
		<link>http://feedproxy.google.com/~r/KennethKufluk/~3/9PQDYKAdkTE/</link>
		<comments>http://kenneth.kufluk.com/blog/2011/02/why-i-dont-promote-js/#comments</comments>
		<pubDate>Fri, 18 Feb 2011 04:21:07 +0000</pubDate>
		<dc:creator>Kenneth</dc:creator>
				<category><![CDATA[Ranting]]></category>

		<guid isPermaLink="false">http://kenneth.kufluk.com/blog/?p=880</guid>
		<description><![CDATA[This post was originally published as &#8220;Why I don&#8217;t Promote JS&#8220;, a misinformed ranting diatribe on the merits of Mozilla&#8217;s SEO. After a few corrections from Mozilla and PromoteJS in the comments below, I&#8217;ve decided to revise it. I&#8217;ve had &#8230; <a href="http://kenneth.kufluk.com/blog/2011/02/why-i-dont-promote-js/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><em>This post was originally published as &#8220;<a href="http://liveweb.waybackmachine.org/http://kenneth.kufluk.com/blog/2011/02/why-i-dont-promote-js/">Why I don&#8217;t Promote JS</a>&#8220;, a misinformed ranting diatribe on the merits of Mozilla&#8217;s SEO.  After a few corrections from Mozilla and PromoteJS in the comments below, I&#8217;ve decided to revise it.</em></p>
<p>I&#8217;ve had mixed feelings about last year&#8217;s effort by <a href="http://promotejs.com/">PromoteJS</a> to push MDC to become the top result in Google for <a href="https://developer.mozilla.org/en/javascript">JavaScript reference</a>.  While I like the idea of having a <em>really good</em> reference online, which is easily searchable, there were some issues with the effort.</p>
<ul>
<li>It is tied to Mozilla.  I thought a better effort might be an independent site.</li>
<li>The SEO effort seemed odd.</li>
<li>While the articles are now the best available, there are still frustrations with using the site itself.</li>
</ul>
<p>I&#8217;m going to hit each of these in turn, and because I don&#8217;t like reading heavy articles on the web, I&#8217;m going to try and do it all with bullet points.<span id="more-880"></span></p>
<p><strong>Ties to Mozilla</strong></p>
<ul>
<li>Why not simply create an independent site?</li>
</ul>
<p>Of course, everyone&#8217;s built an independent documentation site.  Without serious backing, they tend to fail.<br />
With MDC,</p>
<ul>
<li>It&#8217;s a wiki, everyone can edit it.</li>
<li>Other browser vendors are involved in writing the docs.</li>
<li>There&#8217;s an investment of time and money that doesn&#8217;t depend on a sole owner.</li>
</ul>
<p><strong>Odd SEO Effort</strong><br />
There&#8217;s an ongoing SEO effort promoting the MDC docs.  The aim is to drive MDC up the rankings at Google et al.  Having worked with a fair few &#8220;SEO Consultants&#8221; in my time, I tend to approach such efforts with scepticism.  In this particular case, the SEO effort, creating sensible links back to the site from quality tech sites around the web, makes perfect sense, especially when using the WordPress plugin to link JavaScript keywords.  But the MDC site itself has SEO flaws:</p>
<ul>
<li>Often two pages with similar titlebars or content (<a href="http://www.google.com/search?q=mdc%20getelementbyid">example</a>) are pages for different languages.  This drives me crazy.  MSDN has historically suffered from this too.</li>
<li>PromoteJS and MDC are on separate domains.  There&#8217;d be better results from joining domains.</li>
</ul>
<p>It turns out that PromoteJS is a completely independent effort.  As such, it can&#8217;t join domains, or fix trivial issues like titlebars.  Thus the odd SEO behaviour.  I wonder if the PromoteJS guy could brief MDC on some improvements.</p>
<p>The PromoteJS guys also promote other, quality resources.  That&#8217;s neat.</p>
<p><strong>Frustrations with the site</strong><br />
The primary cause of stress when developing is still the differences between implementations.  Often in MDC, you have to hunt through the text to find that sort of information, or it doesn&#8217;t appear.</p>
<p>Also, I rarely arrive at the &#8220;right&#8221; method to use.  The navigation between sections is still well hidden, and you either have to click breadcrumbs back up the tree, or head back to Google where you run the risk of hopping into the XUL reference by accident.</p>
<p><strong>Ideas</strong><br />
So here&#8217;s some suggestions for the MDC:</p>
<ul>
<li>First thing I ever want to see: browser support table.  Every page.</li>
<li>Put &#8220;JavaScript&#8221; first in your title bar.  Or DOM.  Or XUL.</li>
<li>Search box.  Somewhere obvious.  jQuery&#8217;s search is great.</li>
<li>How about a Green/Red flag showing:  &#8220;Can I use it now?&#8221;</li>
<li>Maybe links to the HTML5 polyfills on GitHub provided for backwards compatibility?</li>
<li>It&#8217;s a wiki?  Can we make that clearer?</li>
<li>Maybe some discussions underneath.  Like php.net.  Like jQuery.  Like MSDN.  I know they&#8217;re not ideal, but sometimes they give us pointers to new methods or patterns, or they point out bugs we didn&#8217;t know about.</li>
<li>Create an algorithmic link between associated documents, and use keyword autolinking like PromoteJS.</li>
<li>Don&#8217;t use a name like MDC (democratic opposition party in Zimbabwe) and drain their Google juice.</li>
</ul>
<p>We can&#8217;t really add these through the wiki-editing, since they&#8217;re structurally built into the site.</p>
<p>A few simple tweaks and MDC could be the ultimate resource win.</p>
<p><i>Comments below refer to the original article.</i></p>
<img src="http://feeds.feedburner.com/~r/KennethKufluk/~4/9PQDYKAdkTE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://kenneth.kufluk.com/blog/2011/02/why-i-dont-promote-js/feed/</wfw:commentRss>
		<slash:comments>15</slash:comments>
		<feedburner:origLink>http://kenneth.kufluk.com/blog/2011/02/why-i-dont-promote-js/</feedburner:origLink></item>
	</channel>
</rss>

