<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">
 
 <title>Jalada</title>
 
 <link href="http://jalada.co.uk/" />
 <updated>2010-07-28T20:17:50+00:00</updated>
 <id>http://jalada.co.uk/</id>
 <author>
   <name>Jalada</name>
   <email>jalada@gmail.com</email>
 </author>

 
 <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/jalada" /><feedburner:info uri="jalada" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry>
   <title>Tweetdeck, Echofon to get User Streams betas</title>
   <link href="http://feedproxy.google.com/~r/jalada/~3/gEWXM5bTbdw/tweetdeck-echofon-userstreams.html" />
   <updated>2010-07-28T00:00:00+00:00</updated>
   <id>http://jalada.co.uk/2010/07/28/tweetdeck-echofon-userstreams</id>
   <content type="html">&lt;p&gt;Twitter &lt;a href='http://groups.google.com/group/twitter-api-announce/browse_thread/thread/f7b3dd8ac9e10395'&gt;have announced&lt;/a&gt; that &lt;a href='http://www.tweetdeck.com/'&gt;Tweetdeck&lt;/a&gt; and &lt;a href='http://www.echofon.com/'&gt;Echofon&lt;/a&gt; are going to be the first mainstream desktop apps to release beta versions of their software that use the new &lt;a href='http://dev.twitter.com/pages/user_streams'&gt;Twitter User Streams&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Twitter User Streams are streams unique to each user on Twitter which provide all the data needed to update a desktop application display in realtime. As it opens up, we will see a lot of applications becoming considerably more responsive, as they will no longer need to poll Twitter for updates at regular intervals; instead users will see new tweets, DMs, etc. in realtime.&lt;/p&gt;

&lt;p&gt;I&amp;#8217;m excited to see this transition to realtime, and I&amp;#8217;m hoping that in the future Twitter will open up User Streams to web apps so that we can implement them on &lt;a href='http://twitterfall.com'&gt;Twitterfall&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Update:&lt;/strong&gt; &lt;a href='http://blog.tweetdeck.com/trialling-twitter-at-the-speed-of-wow'&gt;Tweetdeck have posted&lt;/a&gt; about their new beta and how to get into it. Only 5000 accounts will get access at first, clearly Twitter are taking this very carefully.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/jalada?a=gEWXM5bTbdw:SaHGV1gPxYg:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jalada?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jalada?a=gEWXM5bTbdw:SaHGV1gPxYg:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jalada?i=gEWXM5bTbdw:SaHGV1gPxYg:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jalada?a=gEWXM5bTbdw:SaHGV1gPxYg:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jalada?i=gEWXM5bTbdw:SaHGV1gPxYg:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jalada/~4/gEWXM5bTbdw" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://jalada.co.uk/2010/07/28/tweetdeck-echofon-userstreams.html</feedburner:origLink></entry>
 
 <entry>
   <title>RSSfall 2.0</title>
   <link href="http://feedproxy.google.com/~r/jalada/~3/pU-Ty-NTbW4/rssfall-2-point-0.html" />
   <updated>2010-07-01T00:00:00+00:00</updated>
   <id>http://jalada.co.uk/2010/07/01/rssfall-2-point-0</id>
   <content type="html">&lt;p&gt;A couple of days ago I received an email from Julien Genestoux from &lt;a href='http://superfeedr.com'&gt;Superfeedr&lt;/a&gt; saying they were about to release something cool, and would I be interested in cooking something fun up to demo it. I said I would, and got to work on a new version of RSSfall; &amp;#8217;&lt;a href='http://rssfall.com'&gt;RSSfall 2.0&lt;/a&gt;&amp;#8217;.&lt;/p&gt;

&lt;p&gt;&lt;img src='/img/rssfall2.png' alt='RSSfall 2.0' /&gt;&lt;/p&gt;

&lt;p&gt;RSSfall 2.0 uses &lt;a href='http://blog.superfeedr.com/filter/pubsubhubbub/track/xmpp/track/'&gt;Superfeedr&amp;#8217;s new &amp;#8216;track&amp;#8217; API&lt;/a&gt; that allows people to subscribe to keywords. These keywords are then applied &lt;em&gt;in realtime&lt;/em&gt; to the thousands of new RSS entries Superfeedr is processing every second, and the results are returned using the &lt;a href='http://code.google.com/p/pubsubhubbub/'&gt;PubSubHubbub protocol&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I then combined this API with my Comet server, &lt;a href='http://github.com/jalada/Hydrometeor'&gt;Hydrometeor&lt;/a&gt; to provide an interface for web browsers to receive these realtime updates.&lt;/p&gt;

&lt;p&gt;So far, this is little more than a demo (though there&amp;#8217;s no reason why you can&amp;#8217;t use it to monitor important keywords e.g. your brand). But I&amp;#8217;m really excited to develop this further and see what Superfeedr have in store!&lt;/p&gt;

&lt;p&gt;Superfeedr&amp;#8217;s new API is like Twitter&amp;#8217;s &amp;#8216;Track&amp;#8217; but for RSS, I can see a lot of websites taking advantage of this great new source of data.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/jalada?a=pU-Ty-NTbW4:hLvTRmOaBTU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jalada?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jalada?a=pU-Ty-NTbW4:hLvTRmOaBTU:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jalada?i=pU-Ty-NTbW4:hLvTRmOaBTU:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jalada?a=pU-Ty-NTbW4:hLvTRmOaBTU:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jalada?i=pU-Ty-NTbW4:hLvTRmOaBTU:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jalada/~4/pU-Ty-NTbW4" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://jalada.co.uk/2010/07/01/rssfall-2-point-0.html</feedburner:origLink></entry>
 
 <entry>
   <title>Superfeedrfall</title>
   <link href="http://feedproxy.google.com/~r/jalada/~3/RTuOcf9cm1s/superfeedrfall.html" />
   <updated>2009-12-04T00:00:00+00:00</updated>
   <id>http://jalada.co.uk/2009/12/04/superfeedrfall</id>
   <content type="html">&lt;p&gt;You may have seen &lt;a href='http://rssfall.com'&gt;RSSfall&lt;/a&gt;, which &lt;a href='http://jalada.co.uk/2009/09/10/rssfall-what-realtime-rss-looks-like.html'&gt;I blogged about&lt;/a&gt; a month or so ago. It uses PubSubHubBub (PSHB or PuSH or Hubbub for short) and Comet to stream RSS feed updates to your browser in realtime.&lt;/p&gt;

&lt;p&gt;Someone else working in the realtime RSS space is &lt;a href='http://superfeedr.com'&gt;Superfeedr&lt;/a&gt;. Superfeedr is an API for subscribing to RSS feed updates, a bit like Hubbub.&lt;/p&gt;

&lt;p&gt;So what&amp;#8217;s the point?&lt;/p&gt;

&lt;p&gt;What&amp;#8217;s great about Superfeedr is that they combine polling, Hubbub, rssCloud, and several other &amp;#8216;Helpers&amp;#8217; to stay on top of RSS (for more, read &lt;a href='http://superfeedr.com/technology'&gt;their technology page&lt;/a&gt;). They guarantee that you will receive an update within 15 minutes. In fact, if you don&amp;#8217;t, it&amp;#8217;s free. That&amp;#8217;s how much they believe in their system.&lt;/p&gt;

&lt;p&gt;&lt;a href='http://twitter.com/julien51/'&gt;Julien Genestoux&lt;/a&gt; CEO and founder of Superfeedr contacted me about &lt;a href='http://bit.ly/5Pmp5C'&gt;their competition&lt;/a&gt; to &lt;strong&gt;make something cool&lt;/strong&gt; with their new &amp;#8216;river&amp;#8217; API, which - to be brief - is a way of getting at the stream of data going through Superfeedr. He said he&amp;#8217;d be interested in seeing a Superfeedrfall; RSSfall using their river API.&lt;/p&gt;

&lt;p&gt;Within a couple of hours, I presented a very rough around the edges &lt;strong&gt;&lt;a href='http://rssfall.com/superfeedr'&gt;Superfeedrfall&lt;/a&gt;&lt;/strong&gt;. It looks very similar to RSSfall, but you&amp;#8217;ll notice that you receive a new update every 3 seconds or so (the speed of the stream they made available for the competition).&lt;/p&gt;

&lt;p&gt;&lt;img src='/img/superfeedrfall.png' alt='Superfeedrfall!' /&gt;&lt;/p&gt;

&lt;h2 id='how_does_it_work'&gt;How does it work?&lt;/h2&gt;

&lt;p&gt;I put together a quick piece of Erlang that builds upon some of the code I&amp;#8217;ve written for &lt;a href='http://twitterfall.com'&gt;Twitterfall&lt;/a&gt; but instead connects to Superfeedr rather than Twitter. I then got that to parse and send the results to a &lt;a href='http://github.com/jalada/Hydrometeor'&gt;Hydrometeor&lt;/a&gt; instance for it to send to any subscribers. When you visit Superfeedrfall, you are one of those subscribers, so you receive the update in realtime.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/jalada?a=RTuOcf9cm1s:jMz140UhrPs:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jalada?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jalada?a=RTuOcf9cm1s:jMz140UhrPs:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jalada?i=RTuOcf9cm1s:jMz140UhrPs:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jalada?a=RTuOcf9cm1s:jMz140UhrPs:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jalada?i=RTuOcf9cm1s:jMz140UhrPs:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jalada/~4/RTuOcf9cm1s" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://jalada.co.uk/2009/12/04/superfeedrfall.html</feedburner:origLink></entry>
 
 <entry>
   <title>If you're forgetful, Things iPhone sync is useless</title>
   <link href="http://feedproxy.google.com/~r/jalada/~3/zRh2qpRVQO8/if-youre-forgetful-things-iphone-sync-is-useless.html" />
   <updated>2009-11-23T00:00:00+00:00</updated>
   <id>http://jalada.co.uk/2009/11/23/if-youre-forgetful-things-iphone-sync-is-useless</id>
   <content type="html">&lt;p&gt;&lt;strong&gt;Edit: I got a response from Cultured Code :) great to get such a quick response with a detailed answer.&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Hi,&lt;/p&gt;

&lt;p&gt;Thank you for your inquiry.&lt;/p&gt;

&lt;p&gt;As you can imagine, wifi sync was only a first step. We are already working on a multiple Mac and iPhone over-the-air syncing solution. That&amp;#8217;s the most requested feature currently. At present I can&amp;#8217;t give you a time frame, though, when this is going to be ready.&lt;/p&gt;

&lt;p&gt;When Push Notifications come to Things touch in version 1.5 Things will be able to update the application badge icon without launching the application itself.&lt;/p&gt;

&lt;p&gt;Best, Roman&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr /&gt;&lt;img src='/img/things-1.png' alt='Things for iPhone screenshot' style='float:left; margin-right:1em; padding-top:1em' /&gt;
&lt;p&gt;I&amp;#8217;m forgetful. That&amp;#8217;s why I bought the wonderful &lt;a href='http://culturedcode.com/things/'&gt;Things for Mac&lt;/a&gt; and &lt;a href='http://culturedcode.com/things/iphone/'&gt;iPhone&lt;/a&gt; by Cultured Code. One nice feature is that if your iPhone and Mac are on the same network, the two will sync whenever you run the iPhone application, no third-party slow web-based system required. The problem is it&amp;#8217;s completely useless if you&amp;#8217;re forgetful, because you&amp;#8217;ll forget to sync when you&amp;#8217;ve added new items. And let&amp;#8217;s face it, if you&amp;#8217;ve bought Things, that&amp;#8217;s probably you.&lt;/p&gt;

&lt;p&gt;There are a couple of use cases where the Things iPhone sync doesn&amp;#8217;t work, and there are really simple ways to fix them.&lt;/p&gt;
&lt;h2 style='clear:both'&gt;Zzzz...Oh! I just remembered...&lt;/h2&gt;
&lt;p&gt;When I&amp;#8217;m in bed, my mind has a tendency to remember things I need to do tomorrow, or come up with new ideas for &lt;a href='http://twitterfall.com'&gt;Twitterfall&lt;/a&gt;. You&amp;#8217;d think I could just fire up Things on my iPhone, quickly jot it down, and thanks to the wonders of iPhone sync it would transfer to my iMac humming away the other side of the room ready to remind me when I get up in the morning?&lt;/p&gt;

&lt;p&gt;But no.&lt;/p&gt;

&lt;p&gt;Even though when I load Things it immediately syncs with my iMac, it takes &lt;em&gt;quitting and restarting Things&lt;/em&gt; once I&amp;#8217;ve added the item before it&amp;#8217;ll be on my iMac as well. This is because Things only syncs on launch. 20 seconds ago the application spoke to my Mac, chances are it is still there now, so why not sync the new item too?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Solution: If Things has just synced, when I add a todo item, &lt;em&gt;sync it straight away&lt;/em&gt;. Then I can get back to sleep.&lt;/strong&gt;&lt;/p&gt;

&lt;h2 id='out_and_about'&gt;Out and about&lt;/h2&gt;

&lt;p&gt;I&amp;#8217;m a university student. When I go onto campus I often remember things I need to do when I get back to the house, so I note them down on my iPhone. However like I said, I&amp;#8217;m forgetful. By the time I get back I&amp;#8217;ve forgotten I even wrote those items down on. I understand it can&amp;#8217;t sync over the air with my Mac while I&amp;#8217;m out, but what if my iPhone could remind me by setting the Badge icon for Things as just what is in my inbox - which is where I keep items I&amp;#8217;ve written during the day? That way I&amp;#8217;ll see it next time I use my phone.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Solution: Give me the option of &lt;em&gt;just&lt;/em&gt; showing what is in my &amp;#8216;Inbox&amp;#8217; on the iPhone badge icon to remind me I need to sync.&lt;/strong&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;Both these solutions sound pretty trivial to me, and would really help my workflow. Now I just need to forward this blog post to the guys at Cultured Code :-)&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/jalada?a=zRh2qpRVQO8:k1VVFzZ1Emg:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jalada?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jalada?a=zRh2qpRVQO8:k1VVFzZ1Emg:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jalada?i=zRh2qpRVQO8:k1VVFzZ1Emg:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jalada?a=zRh2qpRVQO8:k1VVFzZ1Emg:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jalada?i=zRh2qpRVQO8:k1VVFzZ1Emg:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jalada/~4/zRh2qpRVQO8" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://jalada.co.uk/2009/11/23/if-youre-forgetful-things-iphone-sync-is-useless.html</feedburner:origLink></entry>
 
 <entry>
   <title>Core i7 27" iMac Impressions</title>
   <link href="http://feedproxy.google.com/~r/jalada/~3/qBqJPHuT5mM/27-core-i7-imac-impressions.html" />
   <updated>2009-11-21T00:00:00+00:00</updated>
   <id>http://jalada.co.uk/2009/11/21/27-core-i7-imac-impressions</id>
   <content type="html">&lt;p&gt;I&amp;#8217;ve been waiting for Apple to refresh their iMac product line for ages. On the 20th October it finally happened and by the 21st October a Core i7 27&amp;#8221; iMac with 4GB RAM and a 1TB hard drive had my name on it.&lt;/p&gt;

&lt;p&gt;After nearly a month of waiting, my iMac finally arrived.&lt;/p&gt;

&lt;p&gt;&lt;img src='/img/imac-shot.jpg' alt='My Shiny iMac' /&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href='/img/imac-size-1.jpg'&gt;No&lt;/a&gt; &lt;a href='/img/imac-size-2.jpg'&gt;photo&lt;/a&gt; of the 27&amp;#8221; iMac can quite convey just how large this thing is. It&amp;#8217;s massive. I keep sitting back and going &amp;#8216;Wow, it really is huge&amp;#8217;. I&amp;#8217;ve used dual/triple/quadruple/&lt;a href='http://www.flickr.com/photos/jalada/3063437879/in/set-72157602360308047/'&gt;quintuple&lt;/a&gt; before, but there&amp;#8217;s something different about having it all in one large workspace. I can keep &lt;a href='http://twitterfall.com'&gt;Twitterfall&lt;/a&gt;, IRC, this blog post, a web browser, and a chat window all open and visible at once. Sure, I can do that with multiple monitors. But having everything within one environment definitely feels &amp;#8216;cleaner&amp;#8217;. It&amp;#8217;s a lot more natural to throw windows around one big space than several big spaces.&lt;/p&gt;

&lt;p&gt;As you can see from the second photo I opted for an Apple Wired Keyboard, so I can&amp;#8217;t comment on what the wireless one is like. From what I can tell it&amp;#8217;s very similar to the old one. Both have the same action as a MacBook (the white clamshell, not the unibody MacBook Pros, which are slightly different) and both are nice to type on.&lt;/p&gt;

&lt;p&gt;The Magic Mouse is interesting. I like it, though I&amp;#8217;ll see how my wrist likes it after extended use before committing myself to it. No problems with the bluetooth, &lt;strike&gt;though it doesn't work in Window unless there's a sneaky trick I don't know about to get it to work&lt;/strike&gt; [&lt;strong&gt;Edit:&lt;/strong&gt; &lt;a href='http://lloydsparkes.co.uk'&gt;Sparkesinator&lt;/a&gt; has pointed out that released &lt;a href='http://support.apple.com/kb/HT3934'&gt;an update for Bluetooth in Windows&lt;/a&gt; which adds support for the Magic Mouse, thanks!] I just plug in a spare USB mouse anyway. If you&amp;#8217;re unsure about the Magic Mouse I suggest trying it out first to see how it feels, it&amp;#8217;s certainly different to ordinary mice.&lt;/p&gt;

&lt;p&gt;The Core i7 is understandably extremely fast. In my unscientific test HandBrake reported &lt;strong&gt;20 minutes to encode a 1.5 hour long film on default settings&lt;/strong&gt;. I haven&amp;#8217;t done any other benchmarks, I&amp;#8217;ll leave that to people better versed in the art. The Core i7 has the same &lt;a href='http://en.wikipedia.org/wiki/Hyper-threading'&gt;Hyper-threading&lt;/a&gt; technology as the old P4s, meaning OS X (and Windows) see an &lt;a href='/img/imac-8-cores.png'&gt;8-core machine&lt;/a&gt;. Rest assured it&amp;#8217;s very fast, and based on benchmarks I&amp;#8217;ve seen it&amp;#8217;s worth paying the (relatively) small amount to upgrade from a Core i5 to a Core i7.&lt;/p&gt;

&lt;p&gt;I tried to install Windows XP in Boot Camp so I could try out some games. I installed it successfully but discovered that the audio drivers (Cirrus Logic HD) have problems with the inbuilt microphone, causing it to distort and slow down. After a bit of a struggle, I managed to get Windows 7 installed in Boot Camp (I might post my own instructions sometime, but in the meantime Google around if you&amp;#8217;re trying to do this yourself) and discovered that the audio works perfectly there. I imagine it would be the same for Windows Vista.&lt;/p&gt;

&lt;p&gt;On the gaming side, I&amp;#8217;ve tried out &lt;a href='http://www.aiononline.com/'&gt;Aion&lt;/a&gt;, GRID, Mass Effect, and Mirror&amp;#8217;s Edge in Windows so far, and the performance was stunning. In Aion the HD 4850 performs admirably, pushing out between 30 and 100 FPS (mostly around 50) at &lt;strong&gt;the native resolution of 2560x1440&lt;/strong&gt;. Aion is based on the 5 year old &lt;a href='http://en.wikipedia.org/wiki/CryEngine'&gt;CryEngine&lt;/a&gt; but it still impressed me, and it looked amazing on the 27&amp;#8221; monitor. Grid, Mass Effect, and Mirror&amp;#8217;s Edge also performed well at the native resolution with everything turned up fairly high (except antialiasing, which was a performance killer). I preferred playing them all at a lower resolution however because performance was that little bit better, and it negated a lot of need for antialiasing (running at lower resolutions naturally blurs the image slightly). The iMac is definitely no slouch in the graphics department, though you&amp;#8217;re always going to be able to build a better gaming PC for cheaper (maybe not with a 27&amp;#8221; display though).&lt;/p&gt;

&lt;p&gt;Overall, I&amp;#8217;m extremely impressed with all aspects of the iMac and can&amp;#8217;t really find fault with it. I could moan about missing functionality like no Blu-Ray, no adaptors (yet) for using the Mini-DisplayPort input, no SSD option, lack of upgradeable parts, and so on. But for what it is, the 27&amp;#8221; iMac really is a brilliant piece of computing equipment.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/jalada?a=qBqJPHuT5mM:uli7-auNDiA:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jalada?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jalada?a=qBqJPHuT5mM:uli7-auNDiA:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jalada?i=qBqJPHuT5mM:uli7-auNDiA:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jalada?a=qBqJPHuT5mM:uli7-auNDiA:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jalada?i=qBqJPHuT5mM:uli7-auNDiA:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jalada/~4/qBqJPHuT5mM" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://jalada.co.uk/2009/11/21/27-core-i7-imac-impressions.html</feedburner:origLink></entry>
 
 <entry>
   <title>Weird font corruption on Aion at high resolutions?</title>
   <link href="http://feedproxy.google.com/~r/jalada/~3/-apU6kP25mw/weird-font-corruption-on-aion-at-high-resolutions.html" />
   <updated>2009-11-20T00:00:00+00:00</updated>
   <id>http://jalada.co.uk/2009/11/20/weird-font-corruption-on-aion-at-high-resolutions</id>
   <content type="html">&lt;p&gt;While trying to get Aion working on my 27&amp;#8221; iMac, I noticed that the fonts looked a bit odd, almost as if they had little chunks taken out of them. I hunted around online for a solution but to no avail.&lt;/p&gt;

&lt;p&gt;Turns out, at really high resolutions (though the same may apply to low resolutions depending on your font DPI settings I guess) the font just really isn&amp;#8217;t meant to be scaled up that much (Aion increases the font size the larger the resolution). Simple go into the Game Options and turn down the &amp;#8216;UI Size&amp;#8217;. I put mine all the way down to 0.8 or so and it&amp;#8217;s still all pretty large, and with the added bonus of the fonts not looking weird :)&lt;/p&gt;

&lt;p&gt;There are still a couple of odd exceptions where the font isn&amp;#8217;t quite right, but on the whole it looks a lot nicer.&lt;/p&gt;

&lt;p&gt;As an aside, Aion runs really well on the new Core i7 iMacs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Screenshot to come soon so you know what I mean&amp;#8230;&lt;/strong&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/jalada?a=-apU6kP25mw:hr7bJjCGMJU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jalada?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jalada?a=-apU6kP25mw:hr7bJjCGMJU:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jalada?i=-apU6kP25mw:hr7bJjCGMJU:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jalada?a=-apU6kP25mw:hr7bJjCGMJU:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jalada?i=-apU6kP25mw:hr7bJjCGMJU:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jalada/~4/-apU6kP25mw" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://jalada.co.uk/2009/11/20/weird-font-corruption-on-aion-at-high-resolutions.html</feedburner:origLink></entry>
 
 <entry>
   <title>Using Jekyll and Git to Blog</title>
   <link href="http://feedproxy.google.com/~r/jalada/~3/hggb3r-B6JE/using-jekyll-and-git-to-blog.html" />
   <updated>2009-11-16T00:00:00+00:00</updated>
   <id>http://jalada.co.uk/2009/11/16/using-jekyll-and-git-to-blog</id>
   <content type="html">&lt;p&gt;I&amp;#8217;ve been using &lt;a href='http://posterous.com'&gt;Posterous&lt;/a&gt; for a few months now as a blog, and found some of the features really handy. It was nice composing my blog posts by email, and the simplicity of the service as a whole was really nice. Then I tried to write a blog post about &lt;a href='/2009/10/23/Installing-ubuntu-with-a-graphical-installer-using-tftp-dhcpd-and-nfs.html'&gt;netbooting the Ubuntu Live CD&lt;/a&gt; and it all went wrong. Posterous isn&amp;#8217;t all that friendly about code snippets, and it inserted newlines and incorrect symbols all over the place. I&amp;#8217;m a Computer Science student (see the &lt;a href='/lectures/'&gt;lecture notes&lt;/a&gt;?) and I like computers, so I&amp;#8217;m going to be writing blogs posts that include code. This made me see the light - I spent more time fixing that blog post than I did writing it. I want the barrier to entry to posting on my blog to be as small as possible. I needed to try something different.&lt;/p&gt;

&lt;p&gt;I turned back to &lt;a href='http://wordpress.org'&gt;WordPress&lt;/a&gt; which I had used for quite some time, and very quickly I was reminded of why I stopped using it; I saw the memory usage on my server skyrocket, and a security fix was released the very next day. That wasn&amp;#8217;t an option either.&lt;/p&gt;

&lt;p&gt;I&amp;#8217;d heard a bit about just using static files to create a blog which sounded interesting (certainly fixed my &amp;#8216;memory usage&amp;#8217; issue) and investigated further. I came across &lt;a href='http://wiki.github.com/mojombo/jekyll'&gt;Jekyll&lt;/a&gt; which is written by the guy who co-founded &lt;a href='http://github.com'&gt;github&lt;/a&gt;. Github themselves use it to generate &lt;a href='http://pages.github.com'&gt;github pages&lt;/a&gt;. It seemed pretty interesting, so I &lt;a href='http://github.com/jalada/jalada.github.com'&gt;forked&lt;/a&gt; a &lt;a href='http://tom.preston-werner.com/'&gt;blog that uses it&lt;/a&gt; (happens to be the guy who wrote it) and adapted it for my needs. Note that at the moment the designs are quite similar, I&amp;#8217;m hoping to alter this over time so my blog is a little more unique.&lt;/p&gt;

&lt;p&gt;It&amp;#8217;s been a lot of fun to use, and due to the way it&amp;#8217;s designed it really complements a blog structure, with anything else you need. For example I&amp;#8217;m using it to store my lecture notes (which I write in Markdown already where I can) and thanks to Jekyll using the &lt;a href='http://www.liquidmarkup.org/'&gt;Liquid templating engine&lt;/a&gt; it&amp;#8217;s easy to generate the &amp;#8216;dynamic content&amp;#8217; necessary to give access to your content.&lt;/p&gt;

&lt;p&gt;Jekyll works really well with a version control system too. I&amp;#8217;m using git with github, and all the source is available on &lt;a href='http://github.com/jalada/jalada.github.com'&gt;my github&lt;/a&gt;. This means that I can get to my blog from anywhere, keep a copy of it (and run a copy of it) locally, and use hooks to automatically update the live version of my blog if I wish. Feel free to take a look at the code and use any of it yourself.&lt;/p&gt;

&lt;p&gt;Any comments on the new system much appreciated. It&amp;#8217;s a work in progress and I may alter things as time goes on.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/jalada?a=hggb3r-B6JE:Z7z_0g-9oW0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jalada?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jalada?a=hggb3r-B6JE:Z7z_0g-9oW0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jalada?i=hggb3r-B6JE:Z7z_0g-9oW0:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jalada?a=hggb3r-B6JE:Z7z_0g-9oW0:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jalada?i=hggb3r-B6JE:Z7z_0g-9oW0:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jalada/~4/hggb3r-B6JE" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://jalada.co.uk/2009/11/16/using-jekyll-and-git-to-blog.html</feedburner:origLink></entry>
 
 <entry>
   <title>Installing Ubuntu with a graphical installer using tftp, dhcpd, and nfs</title>
   <link href="http://feedproxy.google.com/~r/jalada/~3/Rt7Ct7S5XQ0/Installing-ubuntu-with-a-graphical-installer-using-tftp-dhcpd-and-nfs.html" />
   <updated>2009-10-23T00:00:00+00:00</updated>
   <id>http://jalada.co.uk/2009/10/23/Installing-ubuntu-with-a-graphical-installer-using-tftp-dhcpd-and-nfs</id>
   <content type="html">&lt;p&gt;If you have the facilities, it&amp;#8217;s really handy to install Ubuntu using Ubuntu&amp;#8217;s nice install environment without having to burn any CDs. Just download the ISO and use it in conjunction with some server stuff and boot any computer off the network to get a fully interactive graphical installation, just as if you&amp;#8217;d put in the CD. I also have a gigabit network, so this is a lot faster than using a CD drive.&lt;/p&gt;

&lt;p&gt;Without further ado, here is how to do it, in brief. I&amp;#8217;m using another Ubuntu machine for the server stuff, other distros may vary:&lt;/p&gt;

&lt;h2 id='install_a_tftp_server'&gt;Install a TFTP server&lt;/h2&gt;

&lt;p&gt;I use tftpd-hpa (which is the name of the package in the Ubuntu repositories). Make sure it&amp;#8217;s all set up OK and is running. I think the configuration defaults to using /var/lib/tftpboot, so that&amp;#8217;s the path I&amp;#8217;m going to refer to in these instructions.&lt;/p&gt;

&lt;h2 id='download_the_appropriate_netboottargz'&gt;Download the appropriate netboot.tar.gz&lt;/h2&gt;

&lt;p&gt;You can find these netboot.tar.gz files on the Ubuntu website. Make sure you get the right one for your architecture and Ubuntu release. Extract it to /var/lib/tftpboot.&lt;/p&gt;

&lt;h2 id='download_the_ubuntu_desktop_iso_for_your_architecture'&gt;Download the Ubuntu Desktop ISO for your architecture.&lt;/h2&gt;

&lt;h2 id='make_it_available_via_nfs'&gt;Make it available via NFS&lt;/h2&gt;

&lt;p&gt;First, you&amp;#8217;re going to need to install NFS if you haven&amp;#8217;t already. I think the package is nfs-kernel-server. Then pick somewhere to mount the ISO; I use /srv/ubuntu. If you want to use that too the command is:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;sudo mount -o loop /path/to/ubuntu-desktop.iso /srv/ubuntu  &lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Once you&amp;#8217;ve mounted it, you need to make sure the computer you&amp;#8217;re going to install Ubuntu onto can reach it. You do this by configuring NFS using the /etc/exports file. My /etc/exports file looks like this:&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;/srv/ubuntu (ro,insecure,all_squash)  
&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;I know very little about NFS, but that sounds good enough to me. Restart NFS with sudo /etc/init.d/nfs-kernel-server restart. If you have any way of checking it&amp;#8217;s available, do so. I personally check by trying to mount nfs://my_server/srv/ubuntu on my Mac.&lt;/p&gt;

&lt;h2 id='grab_some_files_off_the_iso'&gt;Grab some files off the ISO&lt;/h2&gt;

&lt;p&gt;In order to boot into the LiveCD environment, the computer you are netbooting is going to need the kernel off the ISO. If you&amp;#8217;ve been following along exactly and are installing Karmic Koala, these files are /srv/ubuntu/casper/vmlinuz and /srv/ubuntu/casper/initrd.lz. Older versions of Ubuntu may use initrd.gz instead, I&amp;#8217;m not sure. It doesn&amp;#8217;t matter either way. Copy these two files to somewhere in /var/lib/tftpboot. I make a directory called /var/lib/tftpboot/ubuntu-desktop and put them in there.&lt;/p&gt;

&lt;h2 id='add_the_option_to_boot_this_kernel_when_your_computer_netboots'&gt;Add the option to boot this kernel when your computer netboots&lt;/h2&gt;

&lt;p&gt;In /var/lib/tftpboot/pxelinux.cfg/default, add the following lines (change any paths/server names if yours don&amp;#8217;t match). Note I used my server IP address in the &amp;#8216;nfsroot&amp;#8217; parameter because I&amp;#8217;m not sure if this thing can do DNS resolution or not. Also note the line-breaks here for readability:&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;LABEL live-karmic
kernel ubuntu-desktop/vmlinuz  
append root=/dev/nfs boot=casper netboot=nfs \
  nfsroot=my.server.ip.address:/srv/ubuntu \
  initrd=ubuntu-desktop/initrd.lz quiet splash --
&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;My pxelinux.cfg/default file looks like this. Again, beware of line breaks:&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;include ubuntu-installer/amd64/boot-screens/menu.cfg  
default ubuntu-installer/amd64/boot-screens/vesamenu.c32  

LABEL live  
kernel ubuntu-desktop/casper/vmlinuz  
append initrd=ubuntu-desktop/casper/initrd.gz boot=casper \
	netboot=nfs nfsroot=192.168.0.3:/srv/ubuntu --  
	
prompt 30  
timeout 30
&lt;/pre&gt;
&lt;/div&gt;
&lt;h2 id='set_up_dhcpd_to_tell_the_computer_to_netboot'&gt;Set up dhcpd to tell the computer to netboot&lt;/h2&gt;

&lt;p&gt;In your dhcpd configuration file, make a client section for the computer you want to netboot. Add filename=&amp;#8221;/pxelinux.0&amp;#8221; to this section. The section for the computer I wanted to netboot looked like this:&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;host ccube {  
  option host-name &amp;quot;ccube.haven.network&amp;quot;;  
  hardware ethernet DE:AD:BE:EF:DE:AD;  
  fixed-address 192.168.0.5;  
  filename &amp;quot;/pxelinux.0&amp;quot;;  
}
&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Don&amp;#8217;t forget to restart dhcpd.&lt;/p&gt;

&lt;h2 id='profit'&gt;Profit!&lt;/h2&gt;

&lt;p&gt;Set your computer to boot off the network, and watch the Ubuntu LiveCD environment boot before your very eyes!&lt;/p&gt;

&lt;p&gt;These are very rough guidelines, not intended to walk you through every baby step involved in netbooting into this environment. I assumed that if you want to do this, you probably already know a fair bit about Linux. There is more information about netbooting available all over the web. Just Google &amp;#8216;Ubuntu netboot&amp;#8217;.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/jalada?a=Rt7Ct7S5XQ0:FV0_uooPDhk:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jalada?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jalada?a=Rt7Ct7S5XQ0:FV0_uooPDhk:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jalada?i=Rt7Ct7S5XQ0:FV0_uooPDhk:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jalada?a=Rt7Ct7S5XQ0:FV0_uooPDhk:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jalada?i=Rt7Ct7S5XQ0:FV0_uooPDhk:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jalada/~4/Rt7Ct7S5XQ0" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://jalada.co.uk/2009/10/23/Installing-ubuntu-with-a-graphical-installer-using-tftp-dhcpd-and-nfs.html</feedburner:origLink></entry>
 
 <entry>
   <title>Google Wave issues</title>
   <link href="http://feedproxy.google.com/~r/jalada/~3/90sPxsNCdUE/google-wave-issues.html" />
   <updated>2009-10-07T00:00:00+00:00</updated>
   <id>http://jalada.co.uk/2009/10/07/google-wave-issues</id>
   <content type="html">&lt;p&gt;&lt;img src='/img/google-wave-issues-1.png' alt='Screenshot of Unsynced Waves error' /&gt;&lt;/p&gt;

&lt;p&gt;Looks like Google Wave is having lots of issues today. Their servers are probably having issues due to the number of new people who have &lt;a href='http://search.twitter.com/search?q=got+google+wave+invite'&gt;got Google Wave invites today&lt;/a&gt; (&lt;a href='http://twitter.com/jalada/status/4678682492'&gt;including me&lt;/a&gt;). The &lt;a href='http://www.google.com/support/forum/p/wave/label?lid=6309a2057d43d9be&amp;amp;hl=en'&gt;help forum&lt;/a&gt; confirms that many others are experiencing the same issues.&lt;/p&gt;

&lt;p&gt;Once things quieten down, I&amp;#8217;ll be able to properly test it. For now I&amp;#8217;ve only had one successful experience with Google Wave (I had a chat with &lt;a href='http://twitter.com/jongretar'&gt;@jongretar&lt;/a&gt; about using &lt;a href='http://medevyoujane.com/blog/2008/12/18/erlang-web-development-frameworks.html'&gt;Erlang Web Development Frameworks&lt;/a&gt; and authenticated REST APIs), the rest has been littered with trying to archive waves, or get the site to load at all.&lt;/p&gt;

&lt;p&gt;This is pre-beta obviously, and the technology is definitely impressive. But it&amp;#8217;ll be more impressive once Google can handle it.&lt;/p&gt;

&lt;p&gt;So if you feel like you&amp;#8217;re missing out without a Google Wave invite, don&amp;#8217;t worry. Right now you&amp;#8217;re not missing out at all.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/jalada?a=90sPxsNCdUE:lSTJKQj19cE:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jalada?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jalada?a=90sPxsNCdUE:lSTJKQj19cE:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jalada?i=90sPxsNCdUE:lSTJKQj19cE:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jalada?a=90sPxsNCdUE:lSTJKQj19cE:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jalada?i=90sPxsNCdUE:lSTJKQj19cE:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jalada/~4/90sPxsNCdUE" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://jalada.co.uk/2009/10/07/google-wave-issues.html</feedburner:origLink></entry>
 
 <entry>
   <title>Google Attempts to Explain what a Web Browser is</title>
   <link href="http://feedproxy.google.com/~r/jalada/~3/b1uUluCjhc8/google-attempts-to-explain-what-a-web-browser-is.html" />
   <updated>2009-10-06T00:00:00+00:00</updated>
   <id>http://jalada.co.uk/2009/10/06/google-attempts-to-explain-what-a-web-browser-is</id>
   <content type="html">&lt;object height='344' width='425'&gt;&lt;param name='movie' value='http://www.youtube.com/v/o4MwTvtyrUQ&amp;color1=0xb1b1b1&amp;color2=0xcfcfcf&amp;hl=en&amp;feature=player_embedded&amp;fs=1' /&gt;&lt;param name='allowFullScreen' value='true' /&gt;&lt;param name='allowScriptAccess' value='always' /&gt;&lt;embed src='http://www.youtube.com/v/o4MwTvtyrUQ&amp;color1=0xb1b1b1&amp;color2=0xcfcfcf&amp;hl=en&amp;feature=player_embedded&amp;fs=1' allowfullscreen='true' allowScriptAccess='always' type='application/x-shockwave-flash' height='344' width='425' /&gt;&lt;/object&gt;
&lt;p&gt;&lt;a href='http://mashable.com/2009/10/06/what-browser/'&gt;This article from Mashable&lt;/a&gt; is about Google&amp;#8217;s video explaining what a browser is, but I hadn&amp;#8217;t seen the interviews Google did &lt;em&gt;asking&lt;/em&gt; people what a browser is. From their responses, I think a reasonable percentage of these people got confused because the questions probably went something like this: &amp;#8216;Hi I&amp;#8217;m Scott from &lt;strong&gt;Google&lt;/strong&gt;, what&amp;#8217;s a browser?&amp;#8217; Because people went into &amp;#8216;I haven&amp;#8217;t got a clue about computers&amp;#8217;-mode, so latched on to the name Google. Particularly when then asked &amp;#8216;What browser do you use?&amp;#8217;.&lt;/p&gt;

&lt;p&gt;Funny anyway.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/jalada?a=b1uUluCjhc8:BIrUBFlkuXc:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jalada?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jalada?a=b1uUluCjhc8:BIrUBFlkuXc:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jalada?i=b1uUluCjhc8:BIrUBFlkuXc:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jalada?a=b1uUluCjhc8:BIrUBFlkuXc:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jalada?i=b1uUluCjhc8:BIrUBFlkuXc:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jalada/~4/b1uUluCjhc8" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://jalada.co.uk/2009/10/06/google-attempts-to-explain-what-a-web-browser-is.html</feedburner:origLink></entry>
 
 <entry>
   <title>RSSFall - what Realtime RSS looks like</title>
   <link href="http://feedproxy.google.com/~r/jalada/~3/wgHLW21BcDE/rssfall-what-realtime-rss-looks-like.html" />
   <updated>2009-09-10T00:00:00+00:00</updated>
   <id>http://jalada.co.uk/2009/09/10/rssfall-what-realtime-rss-looks-like</id>
   <content type="html">&lt;p&gt;&lt;img src='/img/rssfall-1.png' alt='RSSFall screenshot' /&gt;&lt;/p&gt;

&lt;p&gt;As some of you may know, I&amp;#8217;m the lead developer at &lt;a href='http://twitterfall.com'&gt;Twitterfall&lt;/a&gt; - a site for viewing tweets in a realtime manner. Twitterfall is something of a demonstration and experiment; although it is a fully featured product that people use every day it helped me learn about the emerging realtime web and how to develop for it.&lt;/p&gt;

&lt;p&gt;Some of you may also know about the recent flurry of activity surrounding two new technologies: &lt;a href='http://code.google.com/p/pubsubhubbub/'&gt;Pubsubhubbub&lt;/a&gt;, and &lt;a href='http://rsscloud.org/'&gt;rssCloud&lt;/a&gt;. Both technologies do more or less the same thing from a consumer standpoint and their implementations aren&amp;#8217;t much different either. Pubsubhubbub and rssCloud make RSS realtime.&lt;/p&gt;

&lt;p&gt;Over the past few weeks I&amp;#8217;ve been researching the most popular of these two technologies at the time: Pubsubhubbub. And today I&amp;#8217;m ready to show off some of what I have been working on.&lt;/p&gt;

&lt;p&gt;It&amp;#8217;s called &lt;a href='http://rssfall.com'&gt;RSSFall&lt;/a&gt;, and it shows you what realtime RSS looks like. Updates fall from the top of the page (much like Twitterfall) as soon as we receive them. It may take a few minutes for you to receive a new entry from the &lt;a href='http://rssfall.com/sources.txt'&gt;feeds we&amp;#8217;re monitoring&lt;/a&gt;, so keep the page up for a few minutes and watch the news come in.&lt;/p&gt;

&lt;p&gt;Obviously right now RSSFall isn&amp;#8217;t much more than a visual demonstration of how realtime RSS can be. But I&amp;#8217;ve got plenty of plans for this technology and can&amp;#8217;t wait to show you what I&amp;#8217;ve got in store. Plus, if you&amp;#8217;re a company interested in the new realtime RSS technologies and want to investigate into integrating them onto your website or any other area, get in touch using the contact link on the page.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/jalada?a=wgHLW21BcDE:7jV7fJV1UXk:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jalada?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jalada?a=wgHLW21BcDE:7jV7fJV1UXk:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jalada?i=wgHLW21BcDE:7jV7fJV1UXk:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jalada?a=wgHLW21BcDE:7jV7fJV1UXk:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jalada?i=wgHLW21BcDE:7jV7fJV1UXk:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jalada/~4/wgHLW21BcDE" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://jalada.co.uk/2009/09/10/rssfall-what-realtime-rss-looks-like.html</feedburner:origLink></entry>
 
 <entry>
   <title>Lifehacker performs Browser Speed Tests</title>
   <link href="http://feedproxy.google.com/~r/jalada/~3/a7eA2IFLdeA/lifehacker-performs-browser-speed-tests.html" />
   <updated>2009-09-03T00:00:00+00:00</updated>
   <id>http://jalada.co.uk/2009/09/03/lifehacker-performs-browser-speed-tests</id>
   <content type="html">&lt;p&gt;&lt;img src='/img/lifehacker-browser-speed-tests-1.jpg' alt='Lifehacker Speed Test chart' /&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href='http://lifehacker.com/5352195/browser-speed-tests-chrome-40-and-opera-10-take-on-all-challengers'&gt;Lifehacker have done various speed tests&lt;/a&gt; against the latest versions of Google Chrome, Mozilla Firefox, and Opera and also compared the results to their last round of testing. Results match up with my previous results between Chrome and Opera, but more interestingly the development version of Google Chrome (seen in the graph above as 4.0.203.2) performs significantly worse in some areas than Chrome 2.0 which is the current stable version.&lt;/p&gt;

&lt;p&gt;Is Google Chrome bloating out by adding new features? Or is it just missing a few optimisations because it&amp;#8217;s the development version? It&amp;#8217;s interesting to see that Firefox performs better in memory management than any other browser considering its reputation for being a memory hog.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/jalada?a=a7eA2IFLdeA:yonz1c_82ok:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jalada?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jalada?a=a7eA2IFLdeA:yonz1c_82ok:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jalada?i=a7eA2IFLdeA:yonz1c_82ok:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jalada?a=a7eA2IFLdeA:yonz1c_82ok:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jalada?i=a7eA2IFLdeA:yonz1c_82ok:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jalada/~4/a7eA2IFLdeA" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://jalada.co.uk/2009/09/03/lifehacker-performs-browser-speed-tests.html</feedburner:origLink></entry>
 
 <entry>
   <title>Twitter Tracking Links again?</title>
   <link href="http://feedproxy.google.com/~r/jalada/~3/hJBcl6CXINA/twitter-tracking-links-again.html" />
   <updated>2009-09-02T00:00:00+00:00</updated>
   <id>http://jalada.co.uk/2009/09/02/twitter-tracking-links-again</id>
   <content type="html">&lt;p&gt;On August 25th Techcrunch noticed that &lt;a href='http://www.techcrunch.com/2009/08/25/twitter-wants-to-track-your-clicks/'&gt;Twitter appeared to be tracking outbound clicks&lt;/a&gt; on their web interface, but that the redirects seemed to disappear after the downtime afterwards.&lt;/p&gt;

&lt;p&gt;It looks like the links are back, I was just using Twitter.com and noticed the outbound links, which are of the format:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;link_click_count?url=http%3A%2F%2Fis.gd%2F2OoZi
  &amp;amp;linkType=web&amp;amp;tweetId=3720272969&amp;amp;userId=15620813&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;plus an authenticity token. Looks like they&amp;#8217;re tracking the link, where it&amp;#8217;s come from, what tweet it&amp;#8217;s come from, and the userId of the user that clicked it (in this case &lt;a href='http://twitter.com/users/show.xml?id=15620813'&gt;me&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;It&amp;#8217;ll be interesting to see if this sticks around, and I bet it&amp;#8217;s part of the analytics service they might be providing to paying customers. I&amp;#8217;m not sure how it will stand up to &lt;a href='http://bit.ly'&gt;bit.ly&lt;/a&gt; analytics (which of course, &lt;a href='http://www.readwriteweb.com/archives/twitter_crowns_bitly_as_the_king_of_short_links_he.php'&gt;they blessed&lt;/a&gt;) especially as bit.ly analytics will work on any service, not just the web-based interface. They could also use this to muscle in on &lt;a href='http://tweetmeme.com'&gt;Tweetmeme&lt;/a&gt;, and they could track links by clicks rather than retweets and extend their trending topics system to include trending links, though how accurate this would be at determining popularity when it would largely depend on the number of followers (clicking takes a lot less effort than retweeting) is questionable.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/jalada?a=hJBcl6CXINA:pVBQYr6dJ_Y:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jalada?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jalada?a=hJBcl6CXINA:pVBQYr6dJ_Y:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jalada?i=hJBcl6CXINA:pVBQYr6dJ_Y:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jalada?a=hJBcl6CXINA:pVBQYr6dJ_Y:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jalada?i=hJBcl6CXINA:pVBQYr6dJ_Y:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jalada/~4/hJBcl6CXINA" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://jalada.co.uk/2009/09/02/twitter-tracking-links-again.html</feedburner:origLink></entry>
 
 <entry>
   <title>Is my Server Back Up yet?</title>
   <link href="http://feedproxy.google.com/~r/jalada/~3/F7kqaxZwb7A/is-my-server-back-up-yet.html" />
   <updated>2009-08-19T00:00:00+00:00</updated>
   <id>http://jalada.co.uk/2009/08/19/is-my-server-back-up-yet</id>
   <content type="html">&lt;p&gt;While waiting for one of the Twitterfall servers to come back online after &lt;a href='http://iwi.gandibar.net/post/2009/08/19/Incident-on-Air-Conditioning-in-Datacentres'&gt;an air conditioning failure in the datacentre&lt;/a&gt;, &lt;a href='http://x5315.com/'&gt;x5315&lt;/a&gt; and I realised that instead of keeping an eye on a ping command, we could be told when the server was back online with this really simple (Mac-compatible) command line:&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;ping -o server &lt;span class='o'&gt;&amp;amp;&amp;amp;&lt;/span&gt; say &lt;span class='s2'&gt;&amp;quot;the server is back up&amp;quot;&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Also, if you use Prowl on your iPhone, you could use something like this instead:&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;ping -o server &lt;span class='o'&gt;&amp;amp;&amp;amp;&lt;/span&gt; curl -q --insecure &lt;span class='se'&gt;\&lt;/span&gt;
&lt;span class='s2'&gt;&amp;quot;https://prowl.weks.net/publicapi/add?apikey=YOURAPIKEY&amp;amp;application=Server Monitor&amp;amp;event=The server is back up&amp;amp;description=Server up&amp;quot;&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;And when the server is back up, you&amp;#8217;ll get a push notification on your iPhone.&lt;/p&gt;

&lt;p&gt;Simple, but handy.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/jalada?a=F7kqaxZwb7A:lGQbAwZKFHQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jalada?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jalada?a=F7kqaxZwb7A:lGQbAwZKFHQ:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jalada?i=F7kqaxZwb7A:lGQbAwZKFHQ:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jalada?a=F7kqaxZwb7A:lGQbAwZKFHQ:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jalada?i=F7kqaxZwb7A:lGQbAwZKFHQ:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jalada/~4/F7kqaxZwb7A" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://jalada.co.uk/2009/08/19/is-my-server-back-up-yet.html</feedburner:origLink></entry>
 
 <entry>
   <title>A Twitter Bookmarklet that Doesn't Suck</title>
   <link href="http://feedproxy.google.com/~r/jalada/~3/cl_4z9E_OR0/a-twitter-bookmarklet-that-doesn%27t-suck.html" />
   <updated>2009-08-16T00:00:00+00:00</updated>
   <id>http://jalada.co.uk/2009/08/16/a-twitter-bookmarklet-that-doesn't-suck</id>
   <content type="html">&lt;p&gt;I&amp;#8217;ve tried a few Twitter bookmarklets in the past. Some don&amp;#8217;t shorten the URL, some require you to either hand over your credentials or log in via oAuth (boring!), some don&amp;#8217;t take the title from the page you are on.&lt;/p&gt;

&lt;p&gt;So I&amp;#8217;ve decided to make my own based on what I like doing. It was really easy (literally a few lines of PHP and Javascript), and it&amp;#8217;s really simple to use. Here&amp;#8217;s why it doesn&amp;#8217;t suck:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;It tries to shorten the URL using &lt;a href='http://is.gd/'&gt;is.gd&lt;/a&gt;&lt;/strong&gt;. If it fails for some reason it&amp;#8217;ll just resort to using the unshortened URL. is.gd has a really simple API; I know &lt;a href='http://bit.ly/'&gt;bit.ly&lt;/a&gt; would be more useful, but I&amp;#8217;ve never used the bit.ly API. Maybe one day, I made this in 10 minutes after all.&lt;/li&gt;

&lt;li&gt;&lt;strong&gt;It uses a nice tweet format&lt;/strong&gt;. It puts the title, and the shortened URL, into a nice format of &amp;#8220;Reading &amp;#8216;title&amp;#8217; URL&amp;#8221;.&lt;/li&gt;

&lt;li&gt;&lt;strong&gt;You don&amp;#8217;t have to give me your password&lt;/strong&gt;. It doesn&amp;#8217;t use any fancy automatic posting that requires you to give over your credentials, it just takes you to the Twitter home page (provided you are logged in, if not then it will log you in through Twitter as normal) with the status filled in, so you can add your own comment or whatever.&lt;/li&gt;

&lt;li&gt;&lt;strong&gt;It opens in a new window&lt;/strong&gt;, so you can close it afterwards.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There might be some bugs, let me know if you spot anything or have any ideas.&lt;/p&gt;

&lt;p&gt;&lt;a href='/bookmarklet.html'&gt;Go here for installation instructions&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For reference, the syntax is:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;http://twitterfall.com/bookmarklet.php?url=URL&amp;amp;title=TITLE&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Simple.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/jalada?a=cl_4z9E_OR0:bw72tetZ4UM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jalada?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jalada?a=cl_4z9E_OR0:bw72tetZ4UM:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jalada?i=cl_4z9E_OR0:bw72tetZ4UM:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jalada?a=cl_4z9E_OR0:bw72tetZ4UM:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jalada?i=cl_4z9E_OR0:bw72tetZ4UM:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jalada/~4/cl_4z9E_OR0" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://jalada.co.uk/2009/08/16/a-twitter-bookmarklet-that-doesn%27t-suck.html</feedburner:origLink></entry>
 
 <entry>
   <title>Javascript Aho-Corasick String Search Algorithm</title>
   <link href="http://feedproxy.google.com/~r/jalada/~3/upvfWOHae_E/javascript-aho-corasick-string-search-algorithm.html" />
   <updated>2009-08-01T00:00:00+00:00</updated>
   <id>http://jalada.co.uk/2009/08/01/javascript-aho-corasick-string-search-algorithm</id>
   <content type="html">&lt;p&gt;For the new Twitterfall Exclusions filter, we needed something that would efficiently search tweets for multiple substrings. The simplest solution would be to search through the tweet multiple times for each string, but this is dumb and inefficient, especially when you may have several tweets per second falling down. The next solution would be to craft a regular expression and use that, but that seemed inefficient to us and we&amp;#8217;re computer scientists and we were sure there would be a better way.&lt;/p&gt;

&lt;p&gt;After doing a bit of research, I stumbled across the &lt;a href='http://en.wikipedia.org/wiki/Aho-Corasick_algorithm'&gt;Aho-Corasick algorithm&lt;/a&gt;, which is a string search algorithm that matches all patterns in a dictionary &amp;#8216;at once&amp;#8217; by constructing a trie with sets of links from each node representing a string to the node corresponding to the longest proper suffix. It sounded like just what we needed.&lt;/p&gt;

&lt;p&gt;I couldn&amp;#8217;t find a Javascript implementation of the entire string search algorithm, so I combined &lt;a href='http://notdennisbyrne.blogspot.com/2008/12/javascript-trie-implementation.html'&gt;Dennis Bryne&amp;#8217;s Trie implementation&lt;/a&gt; and my own code to produce a Javascript implementation of this useful string search algorithm, great for filters. This is the string search function, which you can then combine with the Trie implementation on the afore-mentioned link.&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;span class='c'&gt;// Aho-Corasick String Search Algorithm&lt;/span&gt;
&lt;span class='c'&gt;// @author Jalada http://jalada.co.uk&lt;/span&gt;
&lt;span class='c'&gt;// Arguments:&lt;/span&gt;
&lt;span class='c'&gt;//   trie - a Trie as per http://is.gd/1Y9FT&lt;/span&gt;
&lt;span class='c'&gt;//   s - string to be searched&lt;/span&gt;
&lt;span class='k'&gt;function&lt;/span&gt; &lt;span class='nx'&gt;ahoCorasick&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nx'&gt;trie&lt;/span&gt;&lt;span class='o'&gt;,&lt;/span&gt; &lt;span class='nx'&gt;s&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt; &lt;span class='p'&gt;{&lt;/span&gt;
	&lt;span class='c'&gt;// Start at the root.&lt;/span&gt;
	&lt;span class='k'&gt;var&lt;/span&gt; &lt;span class='nx'&gt;current&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='nx'&gt;trie&lt;/span&gt;&lt;span class='o'&gt;;&lt;/span&gt;
	&lt;span class='c'&gt;// Nothing in state at the moment&lt;/span&gt;
	&lt;span class='k'&gt;var&lt;/span&gt; &lt;span class='nx'&gt;state&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='s2'&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span class='o'&gt;;&lt;/span&gt;
	&lt;span class='c'&gt;// Split the string&lt;/span&gt;
	&lt;span class='k'&gt;var&lt;/span&gt; &lt;span class='nx'&gt;split&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='nx'&gt;s&lt;/span&gt;&lt;span class='p'&gt;.&lt;/span&gt;&lt;span class='nx'&gt;split&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='s2'&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span class='p'&gt;);&lt;/span&gt;
	&lt;span class='k'&gt;var&lt;/span&gt; &lt;span class='nx'&gt;j&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='mi'&gt;0&lt;/span&gt;&lt;span class='o'&gt;;&lt;/span&gt;
	&lt;span class='c'&gt;// We return everywhere in this loop.&lt;/span&gt;
	&lt;span class='k'&gt;while&lt;/span&gt; &lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='mi'&gt;1&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt; &lt;span class='p'&gt;{&lt;/span&gt;
		&lt;span class='k'&gt;for&lt;/span&gt; &lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nx'&gt;i&lt;/span&gt;&lt;span class='o'&gt;=&lt;/span&gt;&lt;span class='nx'&gt;j&lt;/span&gt;&lt;span class='o'&gt;;&lt;/span&gt; &lt;span class='nx'&gt;i&lt;/span&gt;&lt;span class='o'&gt;&amp;lt;&lt;/span&gt;&lt;span class='nx'&gt;split&lt;/span&gt;&lt;span class='p'&gt;.&lt;/span&gt;&lt;span class='nx'&gt;length&lt;/span&gt;&lt;span class='o'&gt;;&lt;/span&gt; &lt;span class='nx'&gt;i&lt;/span&gt;&lt;span class='o'&gt;++&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt; &lt;span class='p'&gt;{&lt;/span&gt;
			&lt;span class='k'&gt;var&lt;/span&gt; &lt;span class='nx'&gt;r&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='nx'&gt;current&lt;/span&gt;&lt;span class='p'&gt;.&lt;/span&gt;&lt;span class='nx'&gt;hasChild&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nx'&gt;split&lt;/span&gt;&lt;span class='p'&gt;[&lt;/span&gt;&lt;span class='nx'&gt;i&lt;/span&gt;&lt;span class='p'&gt;]);&lt;/span&gt;
			&lt;span class='c'&gt;// Does this character exist in the children of where we&lt;/span&gt;
			&lt;span class='c'&gt;//are in the trie?&lt;/span&gt;
			&lt;span class='k'&gt;if&lt;/span&gt; &lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nx'&gt;r&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt; &lt;span class='p'&gt;{&lt;/span&gt;
				&lt;span class='c'&gt;// If so, append to the state, and traverse to&lt;/span&gt;
				&lt;span class='c'&gt;// that child&lt;/span&gt;
				&lt;span class='nx'&gt;state&lt;/span&gt; &lt;span class='o'&gt;+=&lt;/span&gt; &lt;span class='nx'&gt;split&lt;/span&gt;&lt;span class='p'&gt;[&lt;/span&gt;&lt;span class='nx'&gt;i&lt;/span&gt;&lt;span class='p'&gt;];&lt;/span&gt;
				&lt;span class='nx'&gt;current&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='nx'&gt;r&lt;/span&gt;&lt;span class='o'&gt;;&lt;/span&gt;
				&lt;span class='c'&gt;// Have we found a word now?&lt;/span&gt;
				&lt;span class='k'&gt;if&lt;/span&gt; &lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nx'&gt;trie&lt;/span&gt;&lt;span class='p'&gt;.&lt;/span&gt;&lt;span class='nx'&gt;getWordCount&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nx'&gt;state&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt; &lt;span class='o'&gt;!=&lt;/span&gt; &lt;span class='mi'&gt;0&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt; &lt;span class='p'&gt;{&lt;/span&gt;
					&lt;span class='k'&gt;return&lt;/span&gt; &lt;span class='kc'&gt;true&lt;/span&gt;&lt;span class='o'&gt;;&lt;/span&gt;
				&lt;span class='p'&gt;}&lt;/span&gt;
			&lt;span class='p'&gt;}&lt;/span&gt; &lt;span class='k'&gt;else&lt;/span&gt; &lt;span class='p'&gt;{&lt;/span&gt;
				&lt;span class='c'&gt;// If not, go back to where we started to match,&lt;/span&gt;
				&lt;span class='c'&gt;//reduce i, and empty the state&lt;/span&gt;
				&lt;span class='nx'&gt;current&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='nx'&gt;trie&lt;/span&gt;&lt;span class='o'&gt;;&lt;/span&gt;
				&lt;span class='nx'&gt;i&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='nx'&gt;i&lt;/span&gt; &lt;span class='o'&gt;-&lt;/span&gt; &lt;span class='nx'&gt;state&lt;/span&gt;&lt;span class='p'&gt;.&lt;/span&gt;&lt;span class='nx'&gt;length&lt;/span&gt;&lt;span class='o'&gt;;&lt;/span&gt;
				&lt;span class='nx'&gt;state&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='s2'&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span class='o'&gt;;&lt;/span&gt;
			&lt;span class='p'&gt;}&lt;/span&gt;
		&lt;span class='p'&gt;}&lt;/span&gt;
		&lt;span class='c'&gt;// Reached the end of the string&lt;/span&gt;
		&lt;span class='k'&gt;if&lt;/span&gt; &lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nx'&gt;state&lt;/span&gt; &lt;span class='o'&gt;==&lt;/span&gt; &lt;span class='s2'&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt; &lt;span class='p'&gt;{&lt;/span&gt;
			&lt;span class='c'&gt;// Just found nothing&lt;/span&gt;
			&lt;span class='k'&gt;return&lt;/span&gt; &lt;span class='kc'&gt;false&lt;/span&gt;&lt;span class='o'&gt;;&lt;/span&gt;
		&lt;span class='p'&gt;}&lt;/span&gt; &lt;span class='k'&gt;else&lt;/span&gt; &lt;span class='p'&gt;{&lt;/span&gt;
			&lt;span class='c'&gt;// Was in the middle of finding something, so possibly&lt;/span&gt;
			&lt;span class='c'&gt;//missed something, so go back to check.&lt;/span&gt;
			&lt;span class='nx'&gt;current&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='nx'&gt;trie&lt;/span&gt;&lt;span class='o'&gt;;&lt;/span&gt;
			&lt;span class='nx'&gt;j&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='nx'&gt;i&lt;/span&gt; &lt;span class='o'&gt;-&lt;/span&gt; &lt;span class='nx'&gt;state&lt;/span&gt;&lt;span class='p'&gt;.&lt;/span&gt;&lt;span class='nx'&gt;length&lt;/span&gt; &lt;span class='o'&gt;+&lt;/span&gt; &lt;span class='mi'&gt;1&lt;/span&gt;&lt;span class='o'&gt;;&lt;/span&gt;
			&lt;span class='nx'&gt;state&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='s2'&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span class='o'&gt;;&lt;/span&gt;
		&lt;span class='p'&gt;}&lt;/span&gt;
	&lt;span class='p'&gt;}&lt;/span&gt;
&lt;span class='p'&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;I haven&amp;#8217;t had much of a chance to make sure this is the most efficient way of coding this algorithm. But it seems to work fine, and in some rough testing I did it seemed 3-5x faster than a regular expression of the syntax /This|That|The other|Whatever/ in the circumstances I tested. If you use this, and find a way of improving on it, be sure to let me know so we can include it back in Twitterfall :-)&lt;/p&gt;

&lt;p&gt;Feel free to use this Javascript code. I&amp;#8217;m releasing it under the MIT License.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/jalada?a=upvfWOHae_E:L0HTwODPYhQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jalada?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jalada?a=upvfWOHae_E:L0HTwODPYhQ:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jalada?i=upvfWOHae_E:L0HTwODPYhQ:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jalada?a=upvfWOHae_E:L0HTwODPYhQ:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jalada?i=upvfWOHae_E:L0HTwODPYhQ:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jalada/~4/upvfWOHae_E" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://jalada.co.uk/2009/08/01/javascript-aho-corasick-string-search-algorithm.html</feedburner:origLink></entry>
 
 
</feed>
