<?xml version='1.0' encoding='utf-8' ?>
<!--  If you are running a bot please visit this policy page outlining rules you must respect. http://www.livejournal.com/bots/  -->
<rss version='2.0' xmlns:lj='http://www.livejournal.org/rss/lj/1.0/' xmlns:media='http://search.yahoo.com/mrss/' xmlns:atom10='http://www.w3.org/2005/Atom'>
<channel>
  <title>Simon Wistow</title>
  <link>http://deflatermouse.livejournal.com/</link>
  <description>Simon Wistow - LiveJournal.com</description>
  <lastBuildDate>Wed, 04 Mar 2009 18:04:18 GMT</lastBuildDate>
  <generator>LiveJournal / LiveJournal.com</generator>
  <lj:journal>deflatermouse</lj:journal>
  <lj:journalid>10289708</lj:journalid>
  <lj:journaltype>personal</lj:journaltype>
  <atom10:link rel='hub' href='http://pubsubhubbub.appspot.com/' />
  <image>
    <url>http://l-userpic.livejournal.com/51789281/10289708</url>
    <title>Simon Wistow</title>
    <link>http://deflatermouse.livejournal.com/</link>
    <width>100</width>
    <height>73</height>
  </image>

<item>
  <guid isPermaLink='true'>http://deflatermouse.livejournal.com/148975.html</guid>
  <pubDate>Wed, 04 Mar 2009 18:04:18 GMT</pubDate>
  <title>I’ll just shed tears all over the place</title>
  <link>http://deflatermouse.livejournal.com/148975.html</link>
  <description>I have to admit that I haven&apos;t played around with Git much beyond familiarising myself with the commands enough to get by with the various projects I know that are using it. &lt;br /&gt;&lt;br /&gt;That&apos;s not to say I don&apos;t appreciate aspects of its design - it has a certain inherent elegance that seems to invite experimentation and it certainly follows the Unix philosophy of small tools designed to be chained together which also facilitates that. &lt;br /&gt;&lt;br /&gt;But to be honest I&apos;ve just not needed to use it. I use SVN which, for all its flaws (I&apos;ve never really had a complaint about speed to be fair but every time I need to roll back I have to go looking for a blog post I read one time that explains how to do it) does me just fine. When I need to do more distributed work I just fire up the awesome &lt;a href=&quot;http://svk.bestpractical.com/view/HomePage&quot;&gt;SVK&lt;/a&gt; and Bob, is as they say, your Mother&apos;s Brother. &lt;br /&gt;&lt;br /&gt;One of the questions that niggled at me though, especially in the wake of the democratising GitHub, was whether it would encourage siloing.&lt;br /&gt;&lt;br /&gt;Back in the dark days when modem speeds were measured in baud and people still thought Digital Watches were a pretty neat idea there was the NCSA http daemon and Lo! many people maintained various patch sets against it and, when you wanted to run it you went and downloaded the main package and then you downloaded all the patches you wanted and then you tried to apply them, massaging bits here and there where the patch set hadn&apos;t tracked the main app.&lt;br /&gt;&lt;br /&gt;It was, to be frank, a giant pain in the huevos. &lt;br /&gt;&lt;br /&gt;And then came Apache. Literally &quot;A Patchy Webserver&quot; which rekickstarted (is that even a word?) the stalled development of httpd and collected together the various patches. In my opinion this was a good thing - it&apos;s possible some people disagree I suppose - and I fear a return to those early, bad times.&lt;br /&gt;&lt;br /&gt;And what&apos;s this got to do with Git?&lt;br /&gt;&lt;br /&gt;See, Git was designed to help with Linux and Linux doesn&apos;t really have a master code base - it has various trees representing different flavours and patches flow between them like, I dunno, bad ideas at a conspiracy theorists&apos; convention. Or something.&lt;br /&gt;&lt;br /&gt;That model works well for Linux. Maybe. I&apos;ll presume it does. Git eases the pain points expressed by Andrew Morton, the maintainer of the &lt;tt&gt;-mm&lt;/tt&gt; tree, in &lt;a href=&quot;http://kerneltrap.org/Linux/2.6.23-rc6-mm1_This_Just_Isnt_Working_Any_More&quot;&gt;this message&lt;/a&gt; entitled &lt;i&gt;&quot;This Just Isn&apos;t Working Any More&quot;&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;In short, it makes siloing easier.&lt;br /&gt;&lt;br /&gt;And that&apos;s awesome for them. But it&apos;s not what I want for 99.99% of open source projects I use. No matter how good the tools are I don&apos;t want to be spending time tracking fixes and feature patches round various Git repositories and assembling my own custom version. And as a developer I live in fear of someone saying &quot;I know everyone else is running your code perfectly but when *I* run it under FooBar v1.6 with patches from here, here and here then it fails mysteriously&quot;&lt;br /&gt;&lt;br /&gt;I did console myself with the fact that this was a worst case scenario and that it was unlikely to happen for small libraries ... except this morning I was chatting with someone and &lt;br /&gt;&lt;br /&gt;&lt;pre&gt;
17:12  * jerakeen finds that someone has actually fixed the ruby-oauth code to actually
          _work_
17:12 &amp;lt;@jerakeen&amp;gt; assuming you pick the right one of the _27_ forks of the codebase on
                  github.
&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;then later&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;
17:17 &amp;lt;@jerakeen&amp;gt; I forked pelle-oauth a while ago to make my local code actually
                  _work_, because that was important to me
17:17 &amp;lt;@jerakeen&amp;gt; so it was going to get siloed _anyway-
17:17 &amp;lt;@jerakeen&amp;gt; thanks to github, I can tell who else has done what, and where things
                  have gone
17:17 &amp;lt;@muttley&amp;gt; did you push the changes back?
17:18 &amp;lt;@jerakeen&amp;gt; no, not at all. My changes were the equivalent of duct-tape round
                  things. I ripped half of them off from the mailing list, which was 30
                  messages deep in a discussion over what was the Right Way to do it
&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Now to be fair to jerakeen - he&apos;s one of the smartest and most pragmatic programmers I know so I&apos;m pretty sure he doesn&apos;t enjoy the situation but he was forced into it by the prevailing development methodology of the library he wanted to use which ended up that way because the version control tool it uses explicitly encourages it. &lt;br /&gt;&lt;br /&gt;To use an old and overdone meme&lt;br /&gt;&lt;br /&gt;&lt;p align=&quot;center&quot;&gt;&lt;img src=&quot;http://pics.livejournal.com/deflatermouse/pic/00003qc0&quot; /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;I&apos;m hoping this is a one off case and that people are just relearning good development manners after forgetting them when presented with a new shiny, sparkly toy. But the cynic and the pessimist in me died a little inside.</description>
  <comments>http://deflatermouse.livejournal.com/148975.html</comments>
  <category>git</category>
  <category>svn</category>
  <category>silos</category>
  <category>version control</category>
  <category>programming</category>
  <category>svk</category>
  <lj:security>public</lj:security>
  <lj:reply-count>14</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://deflatermouse.livejournal.com/148553.html</guid>
  <pubDate>Wed, 15 Oct 2008 00:58:20 GMT</pubDate>
  <title>If you&apos;re gonna be dumb then you gotta be tough</title>
  <link>http://deflatermouse.livejournal.com/148553.html</link>
  <description>My &lt;a href=&quot;http://deflatermouse.livejournal.com/tag/pubsub&quot;&gt;constant prattling on&lt;/a&gt; about message queues has been going on &lt;a href=&quot;http://deflatermouse.livejournal.com/tag/pubsub&quot;&gt;for a while now&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Since then I&apos;ve been looking long and hard at &lt;a href=&quot;http://www.rabbitmq.com/&quot;&gt;RabbitMQ&lt;/a&gt; and &lt;a href=&quot;http://cwiki.apache.org/qpid/&quot;&gt;QPid&lt;/a&gt;, both of which look hella sexy and very, very promising.&lt;br /&gt;&lt;br /&gt;However, at the moment both still don&apos;t quite pass my &quot;as easy as memcached to set up test&quot;.&lt;br /&gt;&lt;br /&gt;Given that I&apos;ve &lt;strike&gt;been drinking with&lt;/strike&gt; known both the Dopplr and the Flickr team for a while (and borrowed desk space off Dopplr in return for tea every morning and Pho once a week) it&apos;s not surprising that I&apos;ve bent their collective ears about this more than once. &lt;br /&gt;&lt;br /&gt;They&apos;re both big advocates of message queus - witness recent blog post from &lt;a href=&quot;http://code.flickr.com/blog/2008/09/26/flickr-engineers-do-it-offline/&quot;&gt;both&lt;/a&gt; of &lt;a href=&quot;http://blog.dopplr.com/2008/10/10/dopplr-for-developers-its-made-of-messages/&quot;&gt;them&lt;/a&gt;. However something else that I&apos;ve &lt;strike&gt;ranted at&lt;/strike&gt; talked to them about is the concept of premature scaling.&lt;br /&gt;&lt;br /&gt;There are certain semi-best practices that you can do to make web sites scale (both technically and socially). Stuff like sharding for example. Later, if you get really big you&apos;ll maybe want to internationalise. But you obviously don&apos;t want to do all that from the get go when you&apos;re only 1 person working on a VM somewhere on some shared box in a colo. &lt;br /&gt;&lt;br /&gt;So there&apos;s a line somewhere about what you should do upfront and what you should leave till later. It&apos;s a grey area and it&apos;s different for every site but general consensus was that making sure you&apos;re not using auto incrementing primary keys on tables you might want to shard is probably the right thing but leave your i8ln till later (although you always want to keep that sort stuff in mind and gnerally structure your code to make it as easy as possible later).&lt;br /&gt;&lt;br /&gt;Obviously, being me, messaging came up. Now there&apos;s really two types of messaging - one when you want to broadcast an event to an unknown number of listeners (let&apos;s call that PubSub) and one when really you&apos;re just using it to do asynchronous tasks (let&apos;s call that Job Queues). &lt;br /&gt;&lt;br /&gt;PubSub very much falls into the realm of &quot;You don&apos;t need this now&quot; I think. Job Queues on the other hand - they can be very useful. From generating thumbnails to sending notification emails or SMSs - none of this needs to be done to render the page so you might as well shunt it off to be done later when you&apos;re not desperately scrambling to return some HTML to the user as fast as possible.&lt;br /&gt;&lt;br /&gt;LJ uses a system called &lt;a href=&quot;http://search.cpan.org/dist/TheSchwartz/&quot;&gt;TheSchwartz&lt;/a&gt; (the name is actually not one but two semi-elaborate in-jokes) for this stuff. Dopplr uses ActiveMQ I believe and Flickr use their own internal system.&lt;br /&gt;&lt;br /&gt;TheSchwartz is fantastic. It scales for a start. And it runs off a database so it&apos;s easy to set up and admin (since you already presumably have a database running your site).&lt;br /&gt;&lt;br /&gt;Tom Insam (who works at Dopplr and is somewhat of a mad genius even if he does have girly long hair) &lt;a href=&quot;http://jerakeen.org/notes/2008/10/faking-a-message-queue/&quot;&gt;recently pondered&lt;/a&gt; about having a really simple, database backed message queue that used STOMP as its interface. Then, when you got really big, you could switch over transparently to using one of the big boy queues.&lt;br /&gt;&lt;br /&gt;&quot;Hmm,&quot; thinks I, &quot;I wonder how hard it would be to make a STOMP interface to TheSchwartz&quot;&lt;br /&gt;&lt;br /&gt;So I started hacking on a generic STOMP sever with every intention of just do a very simple layer over the top of TheSchwartz.&lt;br /&gt;&lt;br /&gt;Then generic layer took all of, ooh, about 30 minutes to write. &lt;br /&gt;&lt;br /&gt;What I &lt;b&gt;should&lt;/b&gt; have done then is then write TheSchwartz specific layer which would probably have only taken another half an hour or so.&lt;br /&gt;&lt;br /&gt;Instead I started sketching out in my head how you&apos;d write a real proper PubSub message broker. &lt;br /&gt;&lt;br /&gt;A couple of hours later I&apos;d done most of it - only stopping when the dev machine I was testing on suffered a prolonged power outage. &lt;br /&gt;&lt;br /&gt;So &lt;a href=&quot;https://svn.unixbeard.net/simon/Net-Stomp-Server/&quot;&gt;here we go&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;This contains both the generic layer (the simple bit) and the actual broker (the tricky bit).&lt;br /&gt;&lt;br /&gt;How it works is that a Parent server starts up and starts listening. When a new STOMP client connects it fork()s off a child which listens for new STOMP frames and reacts accordingly.&lt;br /&gt;&lt;br /&gt;The clever bit is when a message comes in. The Child serialises the frame and sends it via a socket pair to the Parent. Then parent then sends it back down via another socket pair to all the Children. The Children then decide whether or not to send it to their Client depending on what SUBSCRIBE frames they&apos;ve received. &lt;br /&gt;&lt;br /&gt;Queues (first come, first served) are a bit more complicated than Topic (broadcast) messages though.&lt;br /&gt;&lt;br /&gt;In that case the Parent also creates a semaphore and the Child then tests to see if their the first to decrement it. If they are then they send the message. The last Child to check removes the Semaphore.&lt;br /&gt;&lt;br /&gt;Now, don&apos;t get me wrong - this is very, very alpha quality at the moment - I&apos;m pretty sure the queue implementation is duff and also that it&apos;s liable to fork() bomb your machine at a moment&apos;s notice but it shouldn&apos;t be too hard to clean up.&lt;br /&gt;&lt;br /&gt;However I doubt it will ever be Enterprise class. For a start it&apos;s all memory backed at the moment but even when I write a planned subclass that uses a DB and TheSchwartz for persistence it&apos;s just not careful enough or efficient enough to properly scale. It might still be useful for small sites though but really it&apos;s an intellectual exercise. It is incredibly simple to use though. In most cases just running&lt;pre&gt;
    stomp-broker --daemonize 
&lt;/pre&gt;&lt;br /&gt;should be enough.&lt;br /&gt;&lt;br /&gt;Tomorrow though, I&apos;ll finish off the far more useful STOMP interface to TheSchwartz during our weekly Hack Days and make it as easy to install and run. &lt;br /&gt;&lt;br /&gt;The title of this post refers both to the fact that the Job Queue might be useful despite being so simple and also to the fact that I&apos;m a dumbass for not doing the useful thing first and fiddling round with the intellectual geejaw instead.&lt;br /&gt;&lt;br /&gt;Oh, and it&apos;s catchy Roger Alan Wade &lt;a href=&quot;http://www.youtube.com/watch?v=8n_5JeFEipc&quot;&gt;song&lt;/a&gt; used, appropriately, for Jackass.</description>
  <comments>http://deflatermouse.livejournal.com/148553.html</comments>
  <category>perl</category>
  <category>pubsub</category>
  <category>batshit hacks</category>
  <category>programming</category>
  <category>theschwartz</category>
  <lj:security>public</lj:security>
  <lj:reply-count>7</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://deflatermouse.livejournal.com/148231.html</guid>
  <pubDate>Tue, 23 Sep 2008 19:58:58 GMT</pubDate>
  <title>Sometimes, you get what you need</title>
  <link>http://deflatermouse.livejournal.com/148231.html</link>
  <description>Someone sent me a link to this post entitled &quot;&lt;i&gt;&lt;a href=&quot;http://elliotth.blogspot.com/2008/09/desktop-linux-suckage-wheres-our-steve.html&quot;&gt;Desktop Linux suckage: where&apos;s our Steve Jobs?&lt;/a&gt;&lt;/i&gt;&quot; and it tickled something in my booze shattered brain. Actually, it tickled three thoughts. Sometimes I wonder if my brain works entirely in parallel because it tends to operate as either off or a screaming cascade of constantly collapsing and expanding thoughtwaveforms. It occurs to me that that this is very much a &lt;a href=&quot;http://runme.org/project/+forkbomb/&quot;&gt;fork bomb&lt;/a&gt;. And that if my brain does run in parallel then I can guarantee it has &lt;a href=&quot;http://cache.daylife.com/imageserve/02lVe72320a2J/340x.jpg&quot;&gt;race conditions&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;So, the three somewhat related thoughts were:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;When the Gnu project started up people said that it couldn&apos;t do more than replace Unix utilities. Then there was &lt;tt&gt;emacs&lt;/tt&gt; and people said that that was the very limit of the ability of free software teams to work on apps. Then the Linux kernel came along and people said &lt;i&gt;&quot;Well, fine but you can&apos;t produce enterprise class Desktop apps&quot;&lt;/i&gt; and then OpenOffice got made and now people have conceded that particular point but have pointed out that it&apos;s all well and good but the fundamental model of Free and Open Source Software (i.e that there&apos;s an itch a programmer wants to scratch) pretty-much precludes having a usability person in the mix from the start and that this means that free software will always look fucking gash. History tells us not to underestimate the ability of open projects to evolve. &lt;font size=&quot;2&quot;&gt;&lt;b&gt;Note:&lt;/b&gt; this history is truncated, inaccurate and intended only for illustrative purposes only&lt;/font&gt;&lt;/li&gt; &lt;br /&gt;&lt;br /&gt;&lt;li&gt;Despite the horrifically broken app building model utilising the unholy trinity of AJAX, HTML and HTTP we seemed to have hit a fairly happy center ground between UI designers and programmers. If someone had proposed a programming language in which, in order to create a GUI app you had to use one scripting language on the front end, another language on the backed, do everything using largely stateless function calls and then create your GUI, which has no standard widget set, by dynamically generating a verbose, textual markup language by concatenating strings together ... you&apos;d have quite rightly bitch slapped like they talked dirty about your daughter. It&apos;s like people took the worst features of X, Swing and a whole host of other GUI ideas, threw away the good bits stuck it all together using peanut butter.  &lt;br /&gt;&lt;br /&gt;Yet that&apos;s the state we&apos;re in at the moment and weirdly it&apos;s working out quite well -  we&apos;re getting pretty looking web apps and the trolls doing the backend and the eloi doing the pretty bits need the minimum of contact. Hell, with mashups &lt;i&gt;et al&lt;/i&gt; they need never even meet. Frabulous joy! &lt;br /&gt;&lt;br /&gt;Interestingly we seem to have wended our way into a situation quite close to the original MVC model (i.e &lt;b&gt;not&lt;/b&gt; what &lt;a href=&quot;http://wardley.org/computers/web/mvc.html&quot;&gt;Web Framework people call MVC&lt;/a&gt;) and also, rather fascinatingly, sort of what Microsoft wanted with VB and COM.&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;In making Linux and the other free Unixen ubiquitous on the Server we may just have killed apps on the Desktop. Which I guess means that Linux on the Desktop becomes obsolete. Which I suppose means we win after all. Maybe.&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;</description>
  <comments>http://deflatermouse.livejournal.com/148231.html</comments>
  <category>mvc</category>
  <category>desktop</category>
  <category>linux</category>
  <category>programming</category>
  <category>ajax</category>
  <category>free software</category>
  <lj:security>public</lj:security>
  <lj:reply-count>10</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://deflatermouse.livejournal.com/148161.html</guid>
  <pubDate>Tue, 02 Sep 2008 18:09:53 GMT</pubDate>
  <title>This is a call to all my past resignations</title>
  <link>http://deflatermouse.livejournal.com/148161.html</link>
  <description>My building, like many here in the fair City O&apos; Fog, has a door entry system which calls a phone number - I can then buzz the door open using the &lt;strike&gt;hash&lt;/strike&gt; &lt;strike&gt;pound&lt;/strike&gt; octothorpe key. This is handy because even when I&apos;m not home I can let people in. Or if I forget my keys then at least I don&apos;t have to wait around outside.&lt;br /&gt;&lt;br /&gt;The disadvantage is that I have to have reception. Ironically the worst place for reception is in the apartment. Also, quite often either I or my flat mate are abroad so if you phone one of us then it might well be silly-o-clock where we are.&lt;br /&gt;&lt;br /&gt;So what I want is use something like Grand Central or maybe an install of &lt;a href=&quot;http://www.asterisk.org/&quot;&gt;Asterisk&lt;/a&gt; or &lt;a href=&quot;http://docs.adhearsion.com/&quot;&gt;Adhearsion&lt;/a&gt; set up with a phone number that calls multiple mobile phones when we&apos;re buzzed. &lt;br /&gt;&lt;br /&gt;However, there could also be a motion detector (or something that detected our phones connecting to the wireless) in the apartment so that it would also add the land line.&lt;br /&gt;&lt;br /&gt;Furthermore it could check our &lt;a href=&quot;http://dopplr.com&quot;&gt;Dopplr&lt;/a&gt; feeds and work out if either of us were out of the country and then remove them from the &quot;to call&quot; list.&lt;br /&gt;&lt;br /&gt;Because, you know, having a door entry system you have to debug rather than just fricking work sounds like a wonderful idea.</description>
  <comments>http://deflatermouse.livejournal.com/148161.html</comments>
  <category>door entry</category>
  <category>telephony</category>
  <category>crazy ideas</category>
  <category>grand central</category>
  <category>hacking</category>
  <lj:security>public</lj:security>
  <lj:reply-count>4</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://deflatermouse.livejournal.com/147877.html</guid>
  <pubDate>Thu, 28 Aug 2008 22:01:55 GMT</pubDate>
  <title>Pretend Best Friend</title>
  <link>http://deflatermouse.livejournal.com/147877.html</link>
  <description>The latest &lt;a href=&quot;http://kottke.org/08/08/fake-following&quot;&gt;buzz&lt;/a&gt; on the hyper insular echo-chamber-nets is &lt;a href=&quot;http://www.techcrunch.com/2008/08/06/an-evolving-cultural-curiosity-we-need-a-fake-follow/&quot;&gt;Fake Following&lt;/a&gt;. Shiny! Fresh! A ground breaking new paradigm leveraging social synergies in a cross mind share mashup or something! &lt;br /&gt;&lt;br /&gt;Hauntingly familiar to be to being able to do the same thing with &quot;&lt;a href=&quot;http://www.livejournal.com/support/faqbrowse.bml?faqid=219&quot;&gt;Default View&lt;/a&gt;&quot; on LJ though.&lt;br /&gt;&lt;br /&gt;I have to admit though, I do like the idea of a &quot;&lt;a href=&quot;http://www.43folders.com/2008/08/26/pause-button&quot;&gt;pause&lt;/a&gt;&quot; button though, even if it&apos;s just a nicer UI for the same thing.</description>
  <comments>http://deflatermouse.livejournal.com/147877.html</comments>
  <category>social software</category>
  <category>sarcasm</category>
  <category>everything new is old again</category>
  <lj:security>public</lj:security>
  <lj:reply-count>4</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://deflatermouse.livejournal.com/147575.html</guid>
  <pubDate>Sat, 14 Jun 2008 00:21:14 GMT</pubDate>
  <title>Say what you mean</title>
  <link>http://deflatermouse.livejournal.com/147575.html</link>
  <description>So a &lt;a href=&quot;http://deflatermouse.livejournal.com/130947.html&quot;&gt;while back&lt;/a&gt; I mentioned using &lt;a href=&quot;http://www.knowledgesearch.org/papers.html&quot;&gt;Contextual Network Graphs&lt;/a&gt; as translation tools then said nothing more about it.&lt;br /&gt;&lt;br /&gt;Then at Google I/O I saw a &lt;a href=&quot;http://www.youtube.com/watch?v=qsan-GQaeyk&quot;&gt;talk by Jeff Dean&lt;/a&gt; that talked about sort of similar ideas to do with a statistical approach to machine translation (the relevant stuff starts at 40:53).&lt;br /&gt;&lt;br /&gt;So my idea was this.&lt;br /&gt;&lt;br /&gt;You take a corpus of text in a given language, the larger the better, and every time two words appear next to each other you either create a link between them or make the link between them stronger (depending on whether you&apos;ve seen that juxtaposition before).&lt;br /&gt;&lt;br /&gt;Then you do it again with another language. Then you analyse the two graphs too look for similar patterns. An easy way to do this would be to take a word that you know is the same in both languages and energise it in both graphs and then list the resulting energised nodes in both.&lt;br /&gt;&lt;br /&gt;So, for example, you might know have a corpus in both English and French with the phrases &quot;dog sled&quot;, &quot;dog house&quot;, &quot;dog food&quot;, &quot;dog catcher&quot;, &quot;dog end&quot; in the respective languages and you happen to know that &quot;dog&quot; in French is &quot;chien&quot;. So you activate the &quot;dog&quot; and &quot;chien&quot; nodes with same amount energy in both graphs, wait a for the energy spread to settle and then list the energised noes and compare the fact that &quot;house&quot; has a residual energy of (completely arbitarily) 0.0034 and that &quot;maison&quot; has a residual energy of 0.0032. Which gives you a probability that the two words are the same.&lt;br /&gt;&lt;br /&gt;You do that with a few other words and then you end up with a bunch of statistics about which words are the same. Do that with a large enough corpus and you have a list of words you know each with a list of words in the foreign language that it might be (with the probabilities that they&apos;re the same) - hell you can even find out the probabilities of what they mean in different contexts (by activating the energy of the surrounding words) so that you can know that &quot;free&quot; can mean &quot;gratuit&quot; or &quot;libre&quot; depending on the context.&lt;br /&gt;&lt;br /&gt;Now, this obviously has several flaws in it but when I did a rough and ready test a few years back I was pleasantly surprised by the results. And I&apos;m kind of gratitifed that Google&apos;s approach doesn&apos;t appear to be completely unsimilar.</description>
  <comments>http://deflatermouse.livejournal.com/147575.html</comments>
  <category>statistical translation</category>
  <category>cngs</category>
  <category>contextual network graphs</category>
  <category>machine translation</category>
  <category>cng</category>
  <lj:security>public</lj:security>
  <lj:reply-count>1</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://deflatermouse.livejournal.com/147238.html</guid>
  <pubDate>Thu, 22 May 2008 20:58:13 GMT</pubDate>
  <title>Pheltup</title>
  <link>http://deflatermouse.livejournal.com/147238.html</link>
  <description>It would appear that &lt;a href=&quot;http://www.pheltup.com/&quot;&gt;Pheltup&lt;/a&gt; is running off the same technology that the stillborn &lt;a href=&quot;http://deflatermouse.livejournal.com/tag/flume&quot;&gt;Flume&lt;/a&gt; did. I believe it was originally called &quot;Smoke and Mirrors&quot; but has been renamed &quot;Bullshitr&quot; for marketing purposes.&lt;br /&gt;&lt;br /&gt;As &lt;a href=&quot;http://www.ntk.net/&quot;&gt;NTK&lt;/a&gt; used to say ... injokes for outcasts. &lt;br /&gt;&lt;br /&gt;Completely unrelated observation: it&apos;s not attractive when &lt;a href=&quot;http://twitter.com/Mike_FTW&quot;&gt;grown men&lt;/a&gt; giggle.</description>
  <comments>http://deflatermouse.livejournal.com/147238.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>1</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://deflatermouse.livejournal.com/146993.html</guid>
  <pubDate>Tue, 22 Apr 2008 19:18:30 GMT</pubDate>
  <title>Abrasive words slurred with obtuse thought</title>
  <link>http://deflatermouse.livejournal.com/146993.html</link>
  <description>I got &lt;a href=&quot;http://en.wikipedia.org/wiki/Joe_job&quot;&gt;joe-jobbed&lt;/a&gt; again recently and it reminded me of this mini-essay I wrote about 3 years ago about a more ... extreme solution to spam.&lt;br /&gt;&lt;br /&gt;&lt;a name=&quot;cutid1&quot;&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Whilst cleaning out my inbox this morning and once again pondering whether to give up my current address as too tainted I decided to cheer myself up by pondering the death of members of the Spamhaus Top 10&lt;br /&gt;&lt;br /&gt;        &lt;a href=&quot;http://www.spamhaus.org/statistics/spammers.lasso&quot;&gt;http://www.spamhaus.org/statistics/spammers.lasso&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Spam is all about economics. It costs virtually nothing and if only one in 10,000 people buy into your product then you&apos;re quids in.&lt;br /&gt;&lt;br /&gt;Spam costs the United States alone 10 billion dollars including lost productivity and the additional equipment, software, and manpower needed to combat the problem according to Wikipedia. My financial burder isn&apos;t huge but spam definitely costs me time.&lt;br /&gt;&lt;br /&gt;However, whilst we&apos;re sitting on the wrong side of that economic equation it&apos;s never going to stop.&lt;br /&gt;&lt;br /&gt;You can implement filters and various other countermeasures but as &lt;a href=&quot;http://www.nytimes.com/2006/05/21/business/yourmoney/21spam.html?_r=1&amp;amp;oref=slogin&quot;&gt;this article&lt;/a&gt; shows, there are just too many ways to circumvent them so you&apos;re always going to be in an arms race.&lt;br /&gt;&lt;br /&gt;Various people have come up with solutions. These range from completely rearchitecting the Email Infrastructure (see, for example DJB&apos;s &lt;a href=&quot;http://cr.yp.to/im2000.html&quot;&gt;Intenet Mail 2000&lt;/a&gt;) or piggybacking on top of the current infrastructure such as charging for email (to tip that profitability equation back our way) which would almost certainly kill off much of Net Culture as we know it.&lt;br /&gt;&lt;br /&gt;They all largely fall foul of one of the laws of Spam Kookery:&lt;br /&gt;&lt;br /&gt;        &lt;a href=&quot;http://www.rhyolite.com/anti-spam/you-might-be.html&quot;&gt;http://www.rhyolite.com/anti-spam/you-might-be.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Moreover, all those problems solve the problem client side. They put the onus on us, the victim. UNNACCEPTABLE! Why should we have to put up with it? It&apos;s not our fault.&lt;br /&gt;&lt;br /&gt;Hence stuff like the CAN-SPAM act which, err, fails. You just move to Russia or somewhere. The Internet knows no boundaries and in Soviet Russia Spam eats you. Or something.&lt;br /&gt;&lt;br /&gt;So what can we do? Well we can seize the spammers&apos; assets but that&apos;s hard. It&apos;s easier and more convenient to hide your wealth than it is to hide yourself.&lt;br /&gt;&lt;br /&gt;So, get a little creative. In a brutal sense. First off though, I would like to point out (to the NSA and future law enforcement officers - Hello! - if anything else) that I&apos;m not actually planning on doing this. I just bored and more than a little grumpy today and such economic thought trains help soothe troubled brow. &lt;br /&gt;&lt;br /&gt;The central premise of this solution is such - the threat of assassination is cheap and a fairly effective deterrent. Therefore we publish an open letter stating that we will shortly be assassinating a selection of spammers.&lt;br /&gt;&lt;br /&gt;Those threatened (say the top 10 spammers world wide) would fall into three categories. This assume that all of them thought the threat to their life credible which may, by necessity, require a pre-emptive strike against, say, the top three plus a couple of smaller fish to seed the entire field with paranoia. A nasty and vicious measure but regrettably necessary in this grisly tableau I&apos;m laying out for you.&lt;br /&gt;&lt;br /&gt;The first category, and the simplest, would be those that would stop all activities immediately. This is the desired result since we haven&apos;t had to actually do anything.&lt;br /&gt;&lt;br /&gt;The second would go into hiding but continue to spam anyway. This is undesirable but how many people are willing to completely subjugate their life in that way for profit? Hopefully a small amount.&lt;br /&gt;&lt;br /&gt;The third would get protection.&lt;br /&gt;&lt;br /&gt;Close protection costs vary wildly but for a competent team in a high risk situation with a morally dubious customer the costs can be around 30,000 US dollars a month if not more.&lt;br /&gt;&lt;br /&gt;Chris &quot;Rizler&quot; Smith was indicted for spamming in 2005 and it was claimed he was making 2 million USD a month gross. Even assuming 50% costs (unlikely) 30,000 a month is, if not peanuts then a reasonable amount for a spammer to pay.&lt;br /&gt;&lt;br /&gt;This, I&apos;ll confess, is not what I was expecting when i first started writing this. Of course it doesn&apos;t take into account the fact that whilst continuous close protection may well  be economically viable, the constant threat of assassination is almost certainly unacceptable? That said, more than one despot puts up with a similar level of threat not to mention drug dealers.&lt;br /&gt;&lt;br /&gt;Unfortunately, even if spammers did leave the industry then there plenty of people who would fill their spot.&lt;br /&gt;&lt;br /&gt;I suspect this is somehow related to an interesting paradox in betting which I&apos;m trying to find a cite for to confirm that I&apos;m remembering right. Essentially it works like this:&lt;br /&gt;&lt;br /&gt;You offer someone a 100% chance to take 50 pounds or 50% chance to take 110 pounds. Probability dictates that that you should take the second bet but people will almost uniformly take the first.&lt;br /&gt;&lt;br /&gt;Paradoxically however if you force people to chose between 100% chance of losing 50 pounds or at 50% chance of losing 110 pounds then they&apos;ll choose the second even though the first becomes the better bet.&lt;br /&gt;&lt;br /&gt;In searching for definitive example of this I came across Ellsberg&apos;s Paradox which is marginally related and quite interesting:&lt;br /&gt;&lt;br /&gt;        &lt;a href=&quot;http://everything2.com/index.pl?node_id=1251265&quot;&gt;http://everything2.com/index.pl?node_id=1251265&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;So, the threat of assassination probably isn&apos;t an economic deterrent to spamming and probably won&apos;t be an emotional deterrent either - the rewards are too good. However the money&apos;s only good whilst people click on the links and buy the herbal pills and fake college degrees and what not. A friend of mine pointed out an alternative&lt;br /&gt;&lt;br /&gt;&lt;i&gt;&quot;i&apos;ve always felt that actually the problem lies with educating the user. remove the people dumb enough to pay for products solicited by spam and you remove the root of the problem, rather than the cause of it.&lt;br /&gt;&lt;br /&gt;a few high profile executions of people stupid enough to purchase from spam emails would mean that the press gets involved and publishes enough information to stop that 1 in 10000 from buying something from those spammers.&lt;br /&gt;&lt;br /&gt;of course finding these fools is a bit tricker, you then need to become a spammer yourself in the hope of harvesting some fools yourself, and of course you&apos;d have to become a fairly big spammer to net the right number of people within an easy to reach vicinity (although 2 million a month goes a long way to making that easier).  hell you should already have a billing and delivery address for the intended victim.&lt;br /&gt;&lt;br /&gt;once the market has fallen out from under them the spammers will not be getting 1 in 1 million - making their operations a lot less successful, initially i guess this will lead to an increase of spam, but after a few months of no returns i&apos;m assuming that they will give up.&quot;&lt;/i&gt; &lt;br /&gt;&lt;br /&gt;His suggested solution was to send out spam for incredibly cheap pills but substitute the Viagra for, say, Strychnine - a plan which has a certain poetic charm.</description>
  <comments>http://deflatermouse.livejournal.com/146993.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>4</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://deflatermouse.livejournal.com/146800.html</guid>
  <pubDate>Tue, 08 Apr 2008 20:39:06 GMT</pubDate>
  <title>You don&apos;t really want it any more from me</title>
  <link>http://deflatermouse.livejournal.com/146800.html</link>
  <description>People use Excel a lot. Abuse is possibly a better way of putting it. In fact they abuse the whole of the office suite - you&apos;ve all received the three word reply wrapped up in a Word document or the PowerPoint document that just has a bunch of images in it.&lt;br /&gt;&lt;br /&gt;The difference is that some of the Excel abuses are actually pretty clever. There&apos;s those quizzes that get emailed around - guess the lyric, solve the puzzle. But even beyond that you get the Finance and Ad booking departments that run off a single shared Excel spreadsheet of such breathtaking utility that you kind of have to step back and gasp. &lt;br /&gt;&lt;br /&gt;It&apos;s so horrible! Yet so beautiful! It does everything for them - it tracks bookings and various sales stats and shows past performance and projects future trends. Sure, the programmer in you is recoiling in absolute horror - this isn&apos;t programming, this is a crime against compilers. Forget spaghetti code or lasagne code. This is macaroni baked with Velveeta. Yet like Mac&apos;n&apos;Cheez[tm] it works. It&apos;s delicious. It&apos;s a remarkably sophisticated app that does exactly what they want and does it fast.&lt;br /&gt;&lt;br /&gt;And they wrote it. The sales people wrote it. These people who seem to look down on programmers and who won&apos;t update the HTML for the copy on the web page because &amp;quot;I was never very good at maths at school&amp;quot;. &lt;br /&gt;&lt;br /&gt;I&apos;m being flippant of course. And despite some occasional minor differences, I&apos;ve always got on with the biz dev teams in the companies I&apos;ve worked for which is why it&apos;s sometimes baffled me that they won&apos;t even touch, say, HTML.&lt;br /&gt;&lt;br /&gt;The problem, I think, is familiarity. We know that the amount of damage they could do with HTML is minimal. Except, well, if they leave out a single character then maybe the whole page is blank. It&apos;s not a big deal to us - we know it&apos;s not hard and that anything is easy to fix but that&apos;s beside the point. We&apos;re familiar with HTML, with the Web stack. They&apos;re not. In much the same way we&apos;re not familiar with (plucks bogus example completely out of thin air) filling in form 64-8 for authorisation of a VAT agent.&lt;br /&gt;&lt;br /&gt;Yet they&apos;re familiar with Excel. And not just as a spreadsheet - as an environment. They know what makes it tick, what its capabilities and quirks are and how to make it dance in a way that you and I may never.   &lt;br /&gt;&lt;br /&gt;I&apos;m kind of reminded of &lt;a href=&quot;http://www.dnalounge.com/backstage/log/2001/04.html&quot;&gt;this quote&lt;/a&gt; about welders&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;i&gt;&lt;quote&gt;&amp;quot;One of the unexpected things about watching the steel guys work is how the solidity of metal means nothing to them. Most people think of metal as something hard and inflexible, but welders don&apos;t. Which should be obvious in hindsight, I guess. But, for example, they have these saw-horses that are made of tube steel. And I can see how that came about: they needed some saw-horses; they had some steel. It took them 30 seconds to make them. And, an example with the stairs: the legs of the stairs&apos; landing platform have big threaded bolts for feet, to fine-tune the height of the legs for levelling. And there are these steel tube sleeves that go around the legs, that drop down and cover the bolts. So when they were moving this platform in, they had to flip it over, and they didn&apos;t want the sleeves to fall off while they did this. Now to me, that job calls for duct tape. To them: they welded the sleeves in place, then de-welded them when they needed them to move again.&amp;quot;&lt;/quote&gt;&lt;/i&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;When you step back and look at it - Excel is a programming language. But not in the way that you and I think about it - with source code and a compiler and a execute/debug cycle. It&apos;s a cell based programming language where data and code are intermixed but never mistaken for each other. It&apos;s self modifying but easily observable. Changes are implemented trivially and immediately. And in parallel. Whilst most programmers have been struggling to get to grips with functional programming and Monads our brethren at the other end of the office have been doing it for years. And their IDE is better than any of ours. Hell it even has visual data and code dependency tracking:&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;img alt=&quot;&quot; src=&quot;http://www.gamasutra.com/db_area/images/feature/3563/figure10.png&quot; /&gt;&lt;/center&gt;&lt;br /&gt;&lt;br /&gt;Think I&apos;m joking? Take a look at this article about building a &lt;a href=&quot;http://www.gamasutra.com/view/feature/3563/microsoft_excel_revolutionary_3d_.php&quot;&gt;3D Engine in Excel&lt;/a&gt;. A 3D Engine with multiple rendering backends. And, if we try and shoe horn conventional programming metrics in it does it in 30 lines (and 24 columns) of &apos;code&apos;. Including comments. &lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;img alt=&quot;&quot; src=&quot;http://www.gamasutra.com/db_area/images/feature/3563/figure81.png&quot; /&gt;&lt;/center&gt; &lt;br /&gt;&lt;br /&gt;To be honest I&apos;m being a little light hearted here but actually my point is kind of serious. There&apos;s a &lt;a href=&quot;http://www.lexemetech.com/2008/03/disks-have-become-tapes.html&quot;&gt;new wave of programming paradigms&lt;/a&gt; - Map/Reduce, asynchronous execution, grid computing, sharded and column orientated databases and others. These aren&apos;t new ideas, especially in the academic world      , but they&apos;re gaining more widespread acceptance. A cell, or to look at it slightly differently, a node based approach makes a lot of sense for a bunch of them.&lt;br /&gt;&lt;br /&gt;At my previous job we were used to dealing with huge quantities of data a day. Our rendering farm sat on the list of the worlds top supercomputers. We dealt with parallelism all the time - from Renderman to pixel and vertex shaders. We did our compositing using a program called Shake  which is entirely node based.   &lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;img src=&quot;http://pics.livejournal.com/deflatermouse/pic/0000494e&quot;&gt;&lt;/center&gt;&lt;br /&gt;  &lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;img src=&quot;http://pics.livejournal.com/deflatermouse/pic/00005har&quot;&gt;&lt;/center&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Shake&apos;s kind of interesting (apart from Apple&apos;s slightly comical attempts to dissuade people from using it on Linux) - it&apos;s a very different way of doing image creation than what most people are used to. I watched with amusement the blogosphere cooing over the price drop for OS X and then giggled when they fired it up for the first time and didn&apos;t know what the hell to do with it. But my co-workers who &lt;i&gt;really&lt;/i&gt; knew how to drive it used it all the time - need to put a mountain behind the crusaders. Use Shake. Need to create a facsimile of a bustling medieval London Bridge using nothing but a background plate of somewhere in Prague, some smoke elements and some video of a pigeon from outside. Use Shake. Need to create an icon for that new Shake node you just wrote ... use Shake. &lt;br /&gt;&lt;br /&gt;It&apos;s the same familiarity as the Excel users and the welders. &lt;br /&gt;&lt;br /&gt;We ended up writing a Node based programming language called Ripple that automatically went and deployed itself over the farm. It self balanced, passed variables and sorted out the DAG. You just strung nodes together and ran the script and tied into &lt;a href=&quot;http://renderman.pixar.com/products/tools/alfred.html&quot;&gt;Alfred&lt;/a&gt; if you wanted a visual feedback and/or to reprioritise or delete tasks.  If you wanted new functionality then you just wrote a new node type - we had nodes that did everything from skinning and compositing to generating dailies and emailing people. It was, to be frank, pretty cool.&lt;br /&gt;&lt;br /&gt;I&apos;ve been lead to believe that several of the major banks have node based languages which do things like complex price matching or constantly take input from the market, ripple changes down through the DAG and give pretty much immediate access to the level of exposure that the bank. Want more capacity? Just chuck more servers in - it should just all work. &lt;br /&gt;&lt;br /&gt;There&apos;s no real conclusion to this other than - parallel, grid based computing looks like it should be hard but it&apos;s coming, it has significant advantages once you can get your head round it and as long as the tools are good it might actually turn out to be a better way to program.</description>
  <comments>http://deflatermouse.livejournal.com/146800.html</comments>
  <category>waffling</category>
  <category>excel</category>
  <category>programming</category>
  <category>dag</category>
  <category>shake</category>
  <category>ripple</category>
  <category>node based computing</category>
  <category>3d engines</category>
  <lj:security>public</lj:security>
  <lj:reply-count>5</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://deflatermouse.livejournal.com/146660.html</guid>
  <pubDate>Thu, 27 Mar 2008 22:56:38 GMT</pubDate>
  <title>Who,  when, where, whatever</title>
  <link>http://deflatermouse.livejournal.com/146660.html</link>
  <description>I was trying to think of something I could do to play around with &lt;a href=&quot;http://deflatermouse.livejournal.com/146409.html&quot;&gt;FireEagle&lt;/a&gt; and came up with something which both tickles my development fancy and also is so incredibly insular San Francisco navelgazing Wanking2.0 that I kind of feel &lt;b&gt;compelled&lt;/b&gt; to do it. &lt;br /&gt;&lt;br /&gt;So, and excuse the hand waving here, the way it would work is this:&lt;ol&gt;&lt;br /&gt;&lt;li&gt;You&apos;d purchase a cheapo RFID reader from somewhere - the ones from &lt;a href=&quot;http://www.thinkgeek.com/gadgets/security/907a/&quot;&gt;ThinkGeek&lt;/a&gt;, &lt;a href=&quot;http://www.phidgetsusa.com/RFID_Reader_tags.asp&quot;&gt;Phidget&lt;/a&gt; and &lt;a href=&quot;http://www.parallax.com/Store/Microcontrollers/BASICStampModules/tabid/134/ProductID/114/Default.aspx?SortField=ProductName%2cProductName&quot;&gt;Parallax&lt;/a&gt; all look good.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Hook it up to a computer and run TheSoftware which, as yet, exists only in my brain. You will tell TheSoftware what the physical location of your card reader is.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Swipe your brand new card which will prompt you to register yourself with a remote, centralised service.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;This service will prompt you to give it FireEagle access.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;From this point on whenever you swipe your card over the reader TheSoftware will inform the centralised service which will, in turn, tell FireEagle.&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;In and of itself this is not very useful but if you had a reader at work then you could swipe in  there in the morning and then swipe in at home at the end of the day (or if you work somewhere suitably large then put multiple readers around the place). And then if your friends started getting RFID readers and installing them in &lt;i&gt;their&lt;/i&gt; homes then when you went round there you&apos;d be able to easily let FireEagle know where you were. Hell if you could persuade your favourite bars and &lt;a href=&quot;http://www.dnalounge.com/&quot;&gt;clubs&lt;/a&gt; to do it then you could do it there. Hook it up to your &lt;a href=&quot;http://www.readwriteweb.com/archives/social_graph_concepts_and_issues.php&quot;&gt;Social Graph&lt;/a&gt; and then you can easily work out where all your friends are.&lt;br /&gt;&lt;br /&gt;Then of course the data can be subpoenaed by the Government to prove that you&apos;re a terr&apos;ist or something.</description>
  <comments>http://deflatermouse.livejournal.com/146660.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>3</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://deflatermouse.livejournal.com/146409.html</guid>
  <pubDate>Thu, 27 Mar 2008 22:36:06 GMT</pubDate>
  <title>We didn&apos;t start the Fire</title>
  <link>http://deflatermouse.livejournal.com/146409.html</link>
  <description>Yahoo! recently released &lt;a href=&quot;http://fireeagle.yahoo.net&quot;&gt;FireEagle&lt;/a&gt; and jolly nice it was too - I&apos;ve hooked it up to my Dopplr account and I have an idea of what to do with it of which more later.&lt;br /&gt;&lt;br /&gt;However things were a bit confusing - there was a &lt;tt&gt;Net::FireEagle&lt;/tt&gt; on CPAN by Aaron Straup Cope yet also a &lt;tt&gt;Net::FireEagle::Client&lt;/tt&gt; linked to on the FireEagle page itself and they weren&apos;t really that much alike.&lt;br /&gt;&lt;br /&gt;Because all of SF is a seething cabal I asked around and found that the CPAN version was an early version based on the old version of the API. And the &lt;tt&gt;::Client&lt;/tt&gt; version was somewhat lacking in things like, well, documentation. Or comments. Also it wasn&apos;t on CPAN which makes it somewhat of a second class citizen in the Perl world.&lt;br /&gt;&lt;br /&gt;So after a bit, I ended up taking over the both of them. I renamed &lt;tt&gt;::Client&lt;/tt&gt; to just &lt;tt&gt;Net::FireEagle&lt;/tt&gt;, adding CPAN scaffolding, refactored the hell out of it, wrote a load of docs and some (very basic) tests and a nifty little command line script which also serves as an example of how to do the Auth Dance[tm] (which reminds me - the OAuth Auth Dance is much nicer than the Google, Flickr and especially Facebook one).&lt;br /&gt;&lt;br /&gt;And lo the updated version now resides on CPAN. It even has a &lt;a href=&quot;http://blog.dave.org.uk/2008/03/fireeagle.html&quot;&gt;user&lt;/a&gt;.</description>
  <comments>http://deflatermouse.livejournal.com/146409.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>6</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://deflatermouse.livejournal.com/146040.html</guid>
  <pubDate>Mon, 24 Mar 2008 18:33:48 GMT</pubDate>
  <title>My life in Non-Tweets</title>
  <link>http://deflatermouse.livejournal.com/146040.html</link>
  <description>&lt;p&gt;Since I don&amp;#39;t have, and refuse to ever get, a Twitter account I have decided to summarise this weekend in the style of &lt;a href=&quot;http://www.loudtwitter.com/&quot;&gt;LoudTwitter&lt;/a&gt; because, yes goddammit I &lt;strong&gt;AM&lt;/strong&gt; that geeky.&lt;/p&gt;&lt;div style=&quot;text-align: left&quot;&gt;&lt;ul&gt;&lt;li&gt;&lt;em&gt;Friday night&lt;/em&gt; French Laundry &lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;em&gt;Saturday afternoon &lt;/em&gt;A Luau complete with a pit baked pig&lt;/li&gt;&lt;li&gt;&lt;em&gt;Saturday night&lt;/em&gt; Awesome ice cream with two completely random new friends on the way to ...&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;em&gt;Saturday night (again)&lt;/em&gt; ... a house warming party where it turns out that the two random new friends who were just giving me a lift knew someone at the party.&lt;/li&gt;&lt;li&gt;&lt;em&gt;Saturday night (even later, more Sunday morning)&lt;/em&gt; Watch second half of Malaysian Grand Prix at &lt;a href=&quot;http://www.overtimesf.blogspot.com/&quot;&gt;Overtime&lt;/a&gt; on 7th and Harrison&lt;/li&gt;&lt;li&gt;&lt;em&gt;Sunday morning&lt;/em&gt; Tool hire, DIY, ladders, drilling&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;em&gt;Sunday afternoon&lt;/em&gt; the &lt;a href=&quot;http://www.flickr.com/search/?q=byobw&amp;amp;s=rec&quot;&gt;Big Wheel race&lt;/a&gt; down Vermont. Hilarity and Panda Bears ensued.&lt;/li&gt;&lt;li&gt;&lt;em&gt;Sunday evening&lt;/em&gt; post BYOBW pizza and beers and Jesus Camp at &lt;a href=&quot;http://ydnar.vox.com/&quot; class=&quot;enclosure-inline-user&quot; at:enclosure=&quot;inline-user&quot; at:user-xid=&quot;6p00b8ea0674f2dece&quot; at:screen-name=&quot;ydnar&quot; at:delegate=&quot;people-connect&quot; at:user-pic=&quot;http://up2.vox.com/6a00b8ea0674f2dece00e398d580160001-75si&quot;&gt;ydnar&apos;s&lt;/a&gt;.&lt;/li&gt;&lt;/ul&gt;Automatically shipped by &lt;a href=&quot;http://thegestalt.org/simon/pics/il_fait_froid.jpg&quot;&gt;My Hands&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;
    
  
                &lt;center&gt;&lt;img src=&quot;http://a4.vox.com/6a00b8ea0719f71bc000e398e913940005-500pi&quot; /&gt;&lt;br /&gt;  Sixers (and Jesus) on Vermont&lt;/center&gt;&lt;br /&gt;
Living in San Francisco really doesn&amp;#39;t suck.
&lt;p&gt;Originally posted on &lt;a href=&quot;http://deflatermouse.vox.com/library/post/my-life-in-non-tweets.html&quot;&gt;deflatermouse.vox.com&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</description>
  <comments>http://deflatermouse.livejournal.com/146040.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>2</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://deflatermouse.livejournal.com/145902.html</guid>
  <pubDate>Tue, 18 Mar 2008 23:19:24 GMT</pubDate>
  <title>By the way, I tried to say</title>
  <link>http://deflatermouse.livejournal.com/145902.html</link>
  <description>WRT &lt;a href=&quot;http://deflatermouse.livejournal.com/145533.html&quot;&gt;my last post&lt;/a&gt; I think I managed to spectacularly avoid saying the most important thing in my head which was this ...&lt;br /&gt;&lt;br /&gt;I don&apos;t think that&apos;s anything fundamentally wrong with any of the PubSub systems in existence at the moment. However most of them seem to have escaped from or are inspired by the kind of messaging you need at banks and other financial type institutions. This is great and many of the design goals are the same but they&apos;re designed to be complicated and complete from the get go. And this works for them.&lt;br /&gt;&lt;br /&gt;However I want something more like Memcached or Rails or similar - you install it out of the box and it Just Works[tm] and for 80% of people that&apos;ll probably suffice modulo some trivial tweaking.&lt;br /&gt;&lt;br /&gt;Then there will be another 10-15% of people who can take that base and after some simple to moderate modifications make it do what they want. &lt;br /&gt;&lt;br /&gt;There may even be a further 1% who can make it go even further but, at this point, it&apos;s diminishing returns and really if things were changed to make things easier for them it would compromise how simple things are for the 80%. And to be frank, the 1% would probably be better off with something designed from the start to do what they want.&lt;br /&gt;&lt;br /&gt;Not everyone wants Oracle - some people are just happy with SQLite and MySQL. Hell some people are more than happy with BerkeleyDB. &lt;br /&gt;&lt;br /&gt;And that&apos;s a good thing.</description>
  <comments>http://deflatermouse.livejournal.com/145902.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>3</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://deflatermouse.livejournal.com/145533.html</guid>
  <pubDate>Tue, 18 Mar 2008 22:23:31 GMT</pubDate>
  <title>Standing in Line</title>
  <link>http://deflatermouse.livejournal.com/145533.html</link>
  <description>For years the default website stack has been something similar to the classic LAMP stack - originally &quot;Linux, Apache, MySQL, Perl&quot; but now really meaning &quot;Free Unix, Free Web server, Free Database and Free Web Language&quot; or just &quot;OS, Web server, Database, Language&quot; to be even more general and friendly to the Windows people out there.&lt;br /&gt;&lt;br /&gt;Relatively recently we&apos;ve started to see that we should add another layer - a Cache. To be honest, from what I can see, &lt;a href=&quot;http://www.danga.com/memcached/&quot;&gt;Memcached&lt;/a&gt; has pretty much got this sewn up by virtue of being awesome although there are other technologies like &lt;a href=&quot;http://www.php.net/apc&quot;&gt;APC&lt;/a&gt;. So I&apos;d like to coin a new phrase - the CLAMP stack for Caching LAMP. I can&apos;t find a reference to it so I&apos;m going claim it as mine. MINE. MUHAHAHAHAHAAH. Maybe in the future it will make me famous. Maybe. &lt;i&gt;*cough*&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;Even more recently I think there&apos;s been a need for some sort of new layer. &lt;br /&gt;&lt;a name=&quot;cutid1&quot;&gt;&lt;/a&gt;&lt;br /&gt;At 6A we use &lt;a href=&quot;http://search.cpan.org/~bradfitz/TheSchwartz-1.04/lib/TheSchwartz.pm&quot;&gt;TheSchwartz&lt;/a&gt; as a reliable asynchronous job manager - you sling a job onto the queue and at some point in the future it will get done and you don&apos;t have to think about it. Twitter has recently released &lt;a href=&quot;http://en.wikipedia.org/wiki/Starling_%28software%29&quot;&gt;Starling&lt;/a&gt; which does similar and, in a nice bit of circularity, speaks the Memcached protocol. &lt;br /&gt;&lt;br /&gt;I also know of at least 4 or 5 other big places with similar bits of software and at least one of those is built on a PubSub messaging system. &lt;br /&gt;&lt;br /&gt;When I was at Yahoo! we had a really successful &lt;a href=&quot;http://www.tibco.com/software/messaging/rendezvous/default.jsp&quot;&gt;TibCo Rendezvous&lt;/a&gt; a-like for doing both asynchronous jobs (in this case publishing news pages and baking hundreds of run time templates from language agnostic seed templates) and for more traditional PubSub tasks such as broadcasting messages without really caring who&apos;s listening.&lt;br /&gt;&lt;br /&gt;I like PubSub messaging systems. No, I love them. Or, rather I love the &lt;i&gt;idea&lt;/i&gt; of them. In practice I&apos;ve had mixed results especially with &lt;a href=&quot;http://activemq.apache.org/&quot;&gt;ActiveMQ&lt;/a&gt; which, in my experience anyway, had far too many rough edges, to many cool and quirky features when I all I really wanted was bullet proof basic functionality. And by basic I mean - high availability, fault tolerance, reliable messaging, queues, topics and some sort of message selectors (I have to admit, I did like ActiveMQ&apos;s ability to have SQL like message selectors as well as glob/path based ones even if I did get bitten by some quirks). &lt;br /&gt;&lt;br /&gt;The cool thing about PubSub systems is that when you start using them you end up finding uses for them everywhere.&lt;br /&gt;&lt;br /&gt;But the problem is that all the open source ones kind of suck. &lt;br /&gt;&lt;br /&gt;I don&apos;t mean that to diss the implementations out there it&apos;s just that they&apos;re trying to do too much for what I actually want them to do. &lt;br /&gt;&lt;br /&gt;One of the reasons that Memcached has been so successful is that it does one thing and does it well. It&apos;s incredibly easy to set up so that you can integrate it into your app from a very early stage. Then, as your app gets bigger, you just add more Memcached servers and update your config. With &lt;a href=&quot;http://www.spiteful.com/2008/03/17/programmers-toolbox-part-3-consistent-hashing/&quot;&gt;Consistent Hashing&lt;/a&gt; you can have a virtually downtime free system in a way that moistens the gussets of the kind of people who habitually use phrases like Enterprise Class Turnkey Systems without sniggering and/or dying a little inside.&lt;br /&gt;&lt;br /&gt;So what I want from a basic queue is &lt;br /&gt;&lt;ul&gt;&lt;li&gt; Reliable / Guaranteed Delivery &lt;/li&gt;&lt;li&gt; High Availability / Failover &lt;/li&gt;&lt;li&gt; Optional Ordered Delivery  &lt;/li&gt;&lt;li&gt; Incredibly easy to set up &lt;/li&gt;&lt;li&gt; Language independent &lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;from the &quot;would be nice&quot; pile&lt;br /&gt;&lt;ul&gt;&lt;li&gt; Selectors of some kind &lt;/li&gt;&lt;li&gt; Ability to tune reliability vs performance &lt;/li&gt;&lt;li&gt; Retroactive consumers  &lt;/li&gt;&lt;li&gt; Topics / Broadcast messages &lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;What I actually want out of this is a kind of de facto standard like Memcached or Apache or whatever that&apos;s so simple to understand and use that it changes the way people develop their apps such that they just start with the assumption that some of their processing is going to be done asynchronously and build it in right from the start. &lt;br /&gt;&lt;br /&gt;This means that, in the future, when their site starts to get much bigger the async stuff makes it really easy to scale. Then, at a later stage, they can decide that they want to start broadcasting events - so that their Atom Update Stream, Logging server and notification Server just learn about a new post without their web app backend having to know about any of them. Later, when they add a Search Index, they don&apos;t have to change anything else. All these things should be almost trivial.&lt;br /&gt;&lt;br /&gt;I&apos;ve been thinking about this on and off for, oooooh, about 6 years but really only thinking seriously about it for the last few months, Basically I&apos;ve been trying to mull stuff over in my head to get the shape of the problem. It&apos;s still somewhat indistinct - there&apos;s a fine line between sufficiently featureful and over engineered, between reuse of existing technology and not adding any extra value.&lt;br /&gt;&lt;br /&gt;I think the requirements I specified above are the right feature list - for me at least. And, after bending the ears of several much smarter people than I they seem to be roughly in the right ball park.&lt;br /&gt;&lt;br /&gt;I&apos;m also leaning towards having multiple pluggable back ends with a sensible default. This seems like a good compromise between simplicity, flexibility and &apos;future proofing&apos;.&lt;br /&gt;&lt;br /&gt;I&apos;m umming and ahhing about having pluggable protocol adaptors. No two protocols are exactly the same so you&apos;re almost always going to have a lossy conversion which seems like a bad thing to encourage. On the other hand it helps with adoption and fitting in with existing Ecosystems. So it ought to support one, some or all of  &lt;a href=&quot;http://en.wikipedia.org/wiki/Advanced_Message_Queuing_Protocol&quot;&gt;AMQP&lt;/a&gt;, &lt;a href=&quot;http://stomp.codehaus.org/&quot;&gt;STOMP&lt;/a&gt;, the &lt;a href=&quot;http://code.sixapart.com/svn/memcached/trunk/server/doc/protocol.txt&quot;&gt;Memcached protocol&lt;/a&gt; or its own home-brewed affair.&lt;br /&gt;&lt;br /&gt;I&apos;m not the first person to think about this by a long shot - I really like what Audrey and Jesse did with &lt;a href=&quot;http://search.cpan.org/~audreyt/IPC-PubSub-0.27/&quot;&gt;IPC::PubSub&lt;/a&gt; for example - and I really need to spend some serious quality time it as well as with with &lt;a href=&quot;http://www.rabbitmq.com/&quot;&gt;RabbitMQ&lt;/a&gt;, &lt;a href=&quot;http://www.spread.org/&quot;&gt;Spread&lt;/a&gt;, &lt;a href=&quot;http://cwiki.apache.org/qpid/&quot;&gt;QPid&lt;/a&gt; and probably &lt;a href=&quot;http://activemq.apache.org/&quot;&gt;ActiveMQ&lt;/a&gt; as well if only to see if they&apos;d be good candidates for being back ends for a start.&lt;br /&gt;&lt;br /&gt;It&apos;s weird - I&apos;m kind of desperate for someone to come up to me and say that this is a stupid idea. Or that it&apos;s not needed. Or not doable. Or that&apos;s someone else has done it. I think that&apos;s why I&apos;ve been telling people about it so that they&apos;ll talk me out of it because, I think deep down, I don&apos;t want to get drawn into it - probably out of a combination of laziness, fear of failure and fear of the kind of success wherein suddenly something kind of consumes your life. &lt;br /&gt;&lt;br /&gt;It&apos;s also possible I&apos;m just over thinking things and that I should shut the hell up and JFDI. &lt;br /&gt;&lt;br /&gt;Which is probably more likely.</description>
  <comments>http://deflatermouse.livejournal.com/145533.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>9</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://deflatermouse.livejournal.com/145396.html</guid>
  <pubDate>Thu, 14 Feb 2008 17:30:26 GMT</pubDate>
  <title>What Do I Do Now?</title>
  <link>http://deflatermouse.livejournal.com/145396.html</link>
  <description>I&apos;m a little discombobulated at the moment for various reasons but this idea popped in to my head and I have no idea how stupid it is. What better to test than to fling it the internet like so much poop and see if it sticks.&lt;br /&gt;&lt;br /&gt;Imagine if sites had a &lt;br /&gt;&lt;br /&gt;&lt;tt&gt;&amp;lt;meta name=&quot;searchurl&quot; value=&quot;&lt;a href=&quot;http://example.com/search?query=%q&quot;&gt;http://example.com/search?query=%q&lt;/a&gt;&quot; /&amp;gt;&lt;/tt&gt;&lt;sup&gt;&lt;a href=&quot;#foot1&quot;&gt;[1]&lt;/a&gt;&lt;/sup&gt;&lt;br /&gt;&lt;br /&gt;tag in their headers. This would allow agents to autodiscover and utilise a site&apos;s search engine if one was available simply by substituting &lt;tt&gt;%q&lt;/tt&gt; for a url encoded query. There could even be a &lt;tt&gt;type=&quot;...&quot;&lt;/tt&gt; attribute that gave the mime type of the results - Atom would be good. Although that could just as easily be done with &lt;tt&gt;Accept&lt;/tt&gt; headers and the other standard mechanisms for negotiating types.&lt;br /&gt;&lt;br /&gt;Search engines could even use it to get better results from stuff like shopping and review sites.&lt;br /&gt;&lt;br /&gt;Of course there&apos;s a possibility (nay, a probability even) that it&apos;d be co-opted by spammers and also you have to ask yourself - why would sites provide this as a service and who would want to use it anyway so it&apos;s probably one for the &quot;WTF were you thinking&quot; file but hey ho.&lt;br /&gt;&lt;br /&gt;I need more tea.&lt;br /&gt;&lt;br /&gt;&lt;sup&gt;&lt;a name=&quot;foot1&quot;&gt;[1]&lt;/a&gt;&lt;/sup&gt; Although it occurs to me that&lt;br /&gt;&lt;br /&gt;&lt;tt&gt; &amp;lt;link rel=&quot;alternative&quot; name=&quot;search&quot; href=&quot;...&quot; /&amp;gt;&lt;/tt&gt;&lt;br /&gt;&lt;br /&gt;might work even better.</description>
  <comments>http://deflatermouse.livejournal.com/145396.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>4</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://deflatermouse.livejournal.com/145080.html</guid>
  <pubDate>Wed, 13 Feb 2008 09:41:27 GMT</pubDate>
  <title>Anytime, anyplace, anywhere</title>
  <link>http://deflatermouse.livejournal.com/145080.html</link>
  <description>There are tonnes of JSON modules on CPAN. Why do it one way right when you can do it a hundred ways wrong? &lt;tt&gt;&lt;a href=&quot;http://search.cpan.org/dist/JSON-Any&quot;&gt;JSON::Any&lt;/a&gt;&lt;/tt&gt; mitigates some of these problems by abstracting away the interface so that you can use &lt;tt&gt;JSON&lt;/tt&gt;, &lt;tt&gt;JSON::XS&lt;/tt&gt;, &lt;tt&gt;JSON::Syck&lt;/tt&gt;, &lt;tt&gt;JSON::DWIM&lt;/tt&gt; ...&lt;br /&gt;&lt;br /&gt;Annoyingly &lt;tt&gt;&lt;a href=&quot;http://search.cpan.org/dist/JSON-XS&quot;&gt;JSON::XS&lt;/a&gt;&lt;/tt&gt; completely changed its API between versions 1 and 2. &lt;tt&gt;JSON::Any&lt;/tt&gt; dropped support for JSON::XS 1.x and now only supports 2.x. &lt;br /&gt;&lt;br /&gt;Until now. &lt;a href=&quot;http://thegestalt.org/simon/perl/json-any-xs.patch&quot;&gt;This patch&lt;/a&gt; feels somewhat dirty but, meh, what the hell, it works.</description>
  <comments>http://deflatermouse.livejournal.com/145080.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>4</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://deflatermouse.livejournal.com/144892.html</guid>
  <pubDate>Wed, 13 Feb 2008 08:54:16 GMT</pubDate>
  <title>Stuck in the Middle with You</title>
  <link>http://deflatermouse.livejournal.com/144892.html</link>
  <description>Yesterday got me thinking - I think it was the combination of the impromptu burlesque show at the flower shop, the gig, the pint, the synchronicity and the conversation but for whatever reason it got me thinking about &lt;a href=&quot;http://deflatermouse.livejournal.com/144433.html&quot;&gt;Shelf again&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Shelf is people orientated - it makes heavy use of the address book and finds connections between what you&apos;re doing now and people you know. Which is fine. But it could be cooler.&lt;br /&gt;&lt;br /&gt;Instead of just have a person as an initial seed for the clues how about other things? Starting simply - how about urls? &lt;br /&gt;&lt;br /&gt;There&apos;s already information out there about urls - for a start there&apos;s whether it&apos;s owned by someone you know. Or its stats from Alexa. Maybe its PageRank value. Then there&apos;s when you last visited it and how often you&apos;ve visited it and what&apos;s changed since then. And whether you del.icio.us-ed it or Duggit or whatever. And whether it was mentioned in any of your RSS or Twitter feeds or emails. You could add notes to annotate it.&lt;br /&gt;&lt;br /&gt;The next natural step is your friends - what have they said? Have they added notes? When did they last visit it (ignoring the glaring privacy concerns for the moment)? Where did they go next? Hell, throw it open to everyone. What has the rest of the world got to say about this? Suddenly every page has comments whether they like it or not. And notes and errata. It&apos;s a Web! It&apos;s a Wiki! It&apos;s a Dessert Wax and a Floor Topping!&lt;br /&gt;&lt;br /&gt;And then there&apos;s places. You&apos;re looking at a museum or a gallery and it tells you what pubs and restaurants are nearby. And if any of your friends will be close by. Show you photos from the location. Throw in a map. Maybe some historical information or local trivia. Great for when you&apos;re sitting at your desk but even better when you&apos;re actually out on the street and you look down at your iBlackickreo95 and it&apos;s using Cell location or GPS to work out where you are.&lt;br /&gt;&lt;br /&gt;Listening to music? Album covers, lyrics, other albums, recommendations. Films? Stuff from IMDB - the actors, what else they&apos;ve been in, awards, trivia, more recommendations from my friends.&lt;br /&gt;&lt;br /&gt;Nurse! Come quick! I think the restraints are coming loose.</description>
  <comments>http://deflatermouse.livejournal.com/144892.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>6</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://deflatermouse.livejournal.com/144433.html</guid>
  <pubDate>Tue, 05 Feb 2008 12:48:07 GMT</pubDate>
  <title>You wrote a book about yourself</title>
  <link>http://deflatermouse.livejournal.com/144433.html</link>
  <description>I&apos;ve been thinking about latent meta data for a long time. A &lt;b&gt;long&lt;/b&gt; time. Partly that&apos;s because it&apos;s such a large and vague topic - the amount of data is large and meta covers everything that you can infer about it. &lt;br /&gt;&lt;br /&gt;In this case I&apos;ve been thinking about how we can write tools to help us understand all the personal data we have knocking around. We have mountains of emails and contacts and web surfing history and conversations and other miscellania and the more we get the harder it is to organise yet perversely there are more rich informational pickings to sift over. &lt;br /&gt;&lt;br /&gt;I&apos;ve written apps that listen on IRC and try and build a view of the world based on what&apos;s said. I&apos;ve written stuff that indexes email corpuses and helps you rotate the data about any point. I&apos;ve written secretarial bots that act as stenographers and note takers and who do calculations and lookups and go fetch things without you having to context switch, without you having to even ask in some cases, just like a really good PA should. I&apos;ve written things that crawl Wikipedia and infer and answer questions.&lt;br /&gt;&lt;br /&gt;I&apos;ve talked (ranted, really) about this sort of software alot to my friends,  sometimes to the long suffering &lt;a href=&quot;http://jerakeen.org&quot;&gt;Tom Insam&lt;/a&gt; who seems to bear the brunt of more than his fair share of my insane ravings and half baked ideas. &lt;br /&gt;&lt;br /&gt;One of the things I got excited about was &lt;a href=&quot;http://en.wikipedia.org/wiki/Beagle_%28software%29&quot;&gt;Beagle&lt;/a&gt; (&lt;i&gt;née&lt;/i&gt; &lt;a href=&quot;http://nat.org/dashboard/&quot;&gt;Dashboard&lt;/a&gt;), the Gnome program that allows you to search all your information from a single interface. I liked its novel use of Clue Packets but in some ways it felt stale - unlike Dashboard you had to go type something in whereas Dashboard would infer from what you were doing. Something about that bothered me - it wasn&apos;t new enough I suppose. It was just an evolution of Windows Search and Sherlock and Spotlight. I want a PA, not a reticent knowitall in the corner I have to coax answers out of. &lt;br /&gt;&lt;br /&gt;Because he&apos;s not a whiny bitch like me and because he seems to have more JFDI than is humanely possible, Tom competely ignored all my frothing and has since come up with his own system - &lt;a href=&quot;http://jerakeen.org/code/shelf/&quot;&gt;Shelf&lt;/a&gt; - which has been getting some &lt;a href=&quot;http://radar.oreilly.com/archives/2008/01/continuous_cont.html&quot;&gt;heavy weight coverage&lt;/a&gt; recently. It harkens back to the Dashboard model and uses polling to workout what you&apos;re doing in what apps and heads from there. It&apos;s, to be frank, pretty sweet.&lt;br /&gt;&lt;br /&gt;But I&apos;m still not totally satisfied and it boils down to this. I get distracted enough - I have IMs and IRC and emails and feeds and phones &lt;a href=&quot;http://www.randsinrepose.com/archives/2003/07/10/nadd.html&quot;&gt;going all the time&lt;/a&gt; and I have to be careful because suddenly it&apos;s 3 hours later and the cursor is still blink accusatorily on the blank editor. &lt;br /&gt;&lt;br /&gt;What I actually want is something more Exposé like - I want to hit a key combination and everything that Shelf knows about the current context it can gracefully swoosh up in an achingly translucent overlay. The app can then either continuously scan what I&apos;m doing or, for lower spec machines, it can just do its mojo on demand. This also solves the problem that, if you&apos;re running the &lt;a href=&quot;http://jerakeen.org/blog/2008/02/shelf-and-the-google-social-api/&quot;&gt;Social Graph plugin&lt;/a&gt;  it doesn&apos;t need to send &lt;b&gt;every&lt;/b&gt; url you&apos;re looking at to Google (which, in and of itself is part of a wider Seperation of Personas theme of which more sometime in the future). &lt;br /&gt;&lt;br /&gt;But not everyone&apos;s like me so seperate the frontend and the backend. That way I can have my Exposé mechanism and info junkies can mainline clues and we&apos;ll all be happy. Apps could subsume the functionality giving richer integration through a common broker.&lt;br /&gt;&lt;br /&gt;Hell for those who just &lt;b&gt;need&lt;/b&gt; to know what&apos;s going on in the same way Britney needs the limelight, you could make a meta app that streams their Shelf clues, and Twitter streams and RSS feeds and access logs and email notifications and Calendar updates in some sort of context firehose that you get to drink from. Throw in some special self-referential sauce so that it understands itself and Oh look Dave Winer&apos;s accessing my site and now he&apos;s written a Twitter about it and someone else has written a blog post about it and 3 of my friends have commented defending me and ... &lt;br /&gt;&lt;br /&gt;It&apos;s the sort of &lt;a href=&quot;http://en.wikipedia.org/wiki/Intertwingularity&quot;&gt;Intertwingularity&lt;/a&gt; that gives Ted Nelson a full on chubby.</description>
  <comments>http://deflatermouse.livejournal.com/144433.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://deflatermouse.livejournal.com/144372.html</guid>
  <pubDate>Tue, 18 Dec 2007 23:54:45 GMT</pubDate>
  <title>If you don&apos;t want to then you could at least pretend</title>
  <link>http://deflatermouse.livejournal.com/144372.html</link>
  <description>So, after writing my &lt;a href=&quot;http://deflatermouse.livejournal.com/143581.html&quot;&gt;little rant on pseudo schemas&lt;/a&gt; someone sent me this rather breathless piece:&lt;br /&gt;&lt;br /&gt;&lt;i&gt;&quot;Though the new feature is strangely undocumented by Apple, users have discovered that Mail now supports a system of URLs (yes, URLs can do more than point to porn) that allow you to link specific messages in other applications. For example, you could include links to a couple Mail messages from coworkers alongside notes, pictures, and web links in OmniOutliner or Yojimbo documents. This opens up a whole new productivity world, allowing you to bring your e-mail into other applications that aren&apos;t specifically designed to integrate with Leopard&apos;s Mail.&quot;&lt;/i&gt;&lt;br /&gt;&lt;p align=&quot;right&quot;&gt;-&lt;a href=&quot;http://arstechnica.com/journals/apple.ars/2007/12/17/new-url-features-can-make-your-e-mail-productive-again&quot;&gt;New Url Features can make your email productive again&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;And it got me thinking about a post I wrote a while back about &lt;a href=&quot;http://deflatermouse.livejournal.com/140172.html&quot;&gt;Facebook being how &apos;normal&apos; people think email &lt;b&gt;should&lt;/b&gt; work&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;So, to revise my previous position slightly - I think it&apos;s becoming clear that we need some sort of hybrid protocol+action schema. I&apos;m still of the opinion that these pseudo protocols are bad and detrimental in the long run and that it&apos;s better to deal with it now rather than deal with a schema-soup in the long run.</description>
  <comments>http://deflatermouse.livejournal.com/144372.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://deflatermouse.livejournal.com/143926.html</guid>
  <pubDate>Tue, 18 Dec 2007 22:39:12 GMT</pubDate>
  <title>I done wrong and I want to suffer for my sins</title>
  <link>http://deflatermouse.livejournal.com/143926.html</link>
  <description>It gets worse. These all work now:&lt;pre&gt;
    print four.pounds.&quot;\n&quot;;               # prints &quot;4.00&quot;
    print four.pounds.five.&quot;\n&quot;;          # prints &quot;4.05&quot;
    print four.pounds.fifty.&quot;\n&quot;;         # prints &quot;4.50&quot;
    print four.pounds.fifty.five.&quot;\n&quot;;    # prints &quot;4.55&quot;

    print fifty.pence.&quot;\n&quot;;               # prints &quot;0.50&quot;
    print fifty.five.pence.&quot;\n&quot;;          # prints &quot;0.55&quot;
    print four.pounds.fifty.pence.&quot;\n&quot;;   # prints &quot;4.55&quot;
    print four.pounds.and.fifty.p.&quot;\n&quot;;   # prints &quot;4.50&quot;

    print fifty.cents.&quot;\n&quot;;               # prints &quot;0.50&quot;
    print fifty.five.cents.&quot;\n&quot;;          # prints &quot;0.55&quot;
    print four.dollars.fifty.cents.&quot;\n&quot;;  # prints &quot;4.50&quot;&lt;/pre&gt;&lt;br /&gt;Must. Stop. Crack. Making. Me. Go. Blind.</description>
  <comments>http://deflatermouse.livejournal.com/143926.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>4</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://deflatermouse.livejournal.com/143752.html</guid>
  <pubDate>Tue, 18 Dec 2007 18:01:45 GMT</pubDate>
  <title>Young, dumb, don&apos;t see a problem</title>
  <link>http://deflatermouse.livejournal.com/143752.html</link>
  <description>I&apos;ve been occasionally reading the O&apos;Reilly Beautiful Code blog which accompanies the book of the same name. I have to admit I haven&apos;t agreed with all of it - some of it reads similarly to occasional posts I see scattered around the Interweb by Pattern Language zealots who haven&apos;t quite grasped that what they&apos;re doing is only because their chosen language is broken. It&apos;s not wrong &lt;i&gt;per se&lt;/i&gt; it&apos;s just that, well, can a best-practices work around ever be considered beautiful.&lt;br /&gt;&lt;br /&gt;Either way, I was pointed at this post this morning about &lt;a href=&quot;http://beautifulcode.oreillynet.com/2007/12/the_cardinality_of_a_fluent_in.php&quot;&gt;The Cardinality of a Fluent Interface&lt;/a&gt;. Again, I wasn&apos;t entirely sure I agreed but I was sufficently intrigued to start hacking around.&lt;br /&gt;&lt;br /&gt;My first attempt yielded something surprisingly elegant (despite using a couple of mildly egregious hacks such as abusing an overload of the concatenation operator) which allowed you to do things like&lt;pre&gt;
    one.hundred
    twenty.two
&lt;/pre&gt;A slight bit of hackery later and it could also do&lt;pre&gt;
    six.hundred.and.fifty
&lt;/pre&gt;Making it do&lt;pre&gt;
    four.point.zero
    point.five
    three.point.one.four
    one.nine.zero.four
&lt;/pre&gt;Required changing the object from the oddly satisfying bless scalar to a more complicated blessed hash and the internals got a lot uglier. I was initially skeptical that I could make it do both &lt;tt&gt;nine.point.five.five&lt;/tt&gt; - which is arguably the correct english way to say it - and &lt;tt&gt;nine.point.fifty.five&lt;/tt&gt; - which is semantically also correct (albeit clumsy and ugly) and useful for currency - but then I suddenly had a flash of inspiration and hacked in the two line change. &lt;br /&gt;&lt;br /&gt;Currently it&apos;s labouring under the name &lt;a href=&quot;https://svn.unixbeard.net/simon/Acme-Numbers/&quot;&gt;Acme::Numbers&lt;/a&gt; and not on CPAN but feel free to have a look and suggest new test case.</description>
  <comments>http://deflatermouse.livejournal.com/143752.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>4</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://deflatermouse.livejournal.com/143581.html</guid>
  <pubDate>Thu, 13 Dec 2007 21:44:58 GMT</pubDate>
  <title>What Shall We Do Now?</title>
  <link>http://deflatermouse.livejournal.com/143581.html</link>
  <description>You&apos;ve probably noticed, because you&apos;re a bright and observant lot with more than a large streak of geekiness, that there&apos;s been a proliferation of custom url protocol schema such as &lt;tt&gt;webcal://&lt;/tt&gt;. Apple is especially guilty of this in much the way that they&apos;re often especially guilty of &lt;a href=&quot;http://en.wikipedia.org/wiki/Bonjour_%28software%29&quot;&gt;muddying the technical waters&lt;/a&gt;. They tend to get away with it because even usually sensible, standards oriented people think they&apos;re so gosh darn pretty.&lt;br /&gt;&lt;br /&gt;I&apos;m going to stick my neck out here and say &lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;h1&gt;&quot;STOP DOING THAT! YOU&apos;RE WRONG!&quot;&lt;/h1&gt;&lt;/center&gt;&lt;br /&gt;&lt;br /&gt;The protocol part of the schema is for the protocol, ffs. I don&apos;t actually care whether the &lt;tt&gt;.ics&lt;/tt&gt; file you&apos;re serving me comes via HTTP, FTP or Gopher but I at least need to know what protocol to use. You might argue that I should default to HTTP but it&apos;s not exactly a huge stretch to imagine that, one day, HTTP might be replaced as the great circle of life continues. Hakuna Matata. Especially if we start having more mobile orientated protocols.&lt;br /&gt;&lt;br /&gt;If only we had some way of saying what type the file was. Oh wait! We ALREADY FUCKING DO. It&apos;s called MIME types and they work just fine, thank you very much.&lt;br /&gt;&lt;br /&gt;There are two objections to MIME types as far as I can tell:&lt;ol&gt;&lt;br /&gt;&lt;li&gt;&lt;i&gt;It&apos;s hard to configure handlers for them&lt;/i&gt;&lt;br /&gt;I concede this may be true but a) that&apos;s a UI problem, not a protocol problem and b) it&apos;s no more difficult than having to configure a handler for a new pseudo protocol, especially since most browsers don&apos;t have UIs to configure protocol handlers and even if they did now we have to have &lt;b&gt;two (2)&lt;/b&gt; different UIs (or one confusing UI) to handle MIME type &lt;b&gt;and&lt;/b&gt; protocol handler set up).[&lt;a href=&quot;#note1&quot;&gt;*&lt;/a&gt;].&lt;/li&gt; &lt;br /&gt;&lt;li&gt;&lt;i&gt;Configuring MIME types is a server problem and sometimes I don&apos;t have access to my server config or don&apos;t know how to set things up. Waaah waaah waaah.&lt;/i&gt;&lt;br /&gt;I concede that this would be a problem IF THE HTML 4.0 SPECIFICATION WHICH HAS BEEN AROUND SINCE 1998 DIDN&apos;T HAVE &lt;a href=&quot;http://www.w3.org/TR/html401/struct/links.html#adef-type-A&quot;&gt;A WAY TO SPECIFY THEM IN THE HTML&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;That&apos;s not to say that there isn&apos;t room for improvement - for example you can&apos;t paste a link into an email and then specify the mime type (although perhaps some pseudo protocol like &lt;tt&gt;http+text/calendar://&lt;/tt&gt; ought to be defined) however that said I wish people would stick to the standards - they&apos;re there for a reason and &quot;because the URLs look prettier this way&quot; isn&apos;t a valid reason to ignore them.&lt;br /&gt;&lt;br /&gt;(I am fully expecting now someone to come and point out that this is all allowed under some RFC and that I&apos;m wrong in which case I will concede gracefully and commit seppuku)&lt;br /&gt;&lt;br /&gt;&lt;font size=&quot;1&quot;&gt;&lt;a name=&quot;note_1&quot;&gt;[*]&lt;/a&gt;Although I&apos;m aware that browser have ways of configuring what mail client to use with &lt;tt&gt;mail://&lt;/tt&gt;&lt;/font&gt;</description>
  <comments>http://deflatermouse.livejournal.com/143581.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>10</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://deflatermouse.livejournal.com/143237.html</guid>
  <pubDate>Sun, 09 Dec 2007 22:33:01 GMT</pubDate>
  <title>Everybody knows what you&apos;ve been through</title>
  <link>http://deflatermouse.livejournal.com/143237.html</link>
  <description>A repost of a review I did on the &lt;a href=&quot;http://london.pm.org/reviews/programming_collective_intelligence.html&quot;&gt;London.pm Website&lt;/a&gt; of the new &lt;a href=&quot;http://www.oreilly.com/catalog/9780596529321/index.html&quot;&gt;O&apos;Reilly Book&lt;/a&gt; &quot;Programming Collective Intelligence&quot;.&lt;br /&gt;&lt;br /&gt;&lt;a name=&quot;cutid1&quot;&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The field of data mining is a tricky one to write about. For a start what you&apos;re mining depends on the nature of your business and the shape of the data - there is no one-size-fits-all technique, no off the shelf, drag and drop solution.&lt;br /&gt;&lt;br /&gt;Secondly some of the techniques require some pretty tricksy maths and even if you do understand them then once they&apos;re applied you still have to interpret the results and tweak the multitude of input variables. Building a data mining tool - from a search engine to a &lt;a href=&quot;http://en.wikipedia.org/wiki/Collaborative_Filtering&quot;&gt;collaborative filter&lt;/a&gt; to a &lt;a href=&quot;http://en.wikipedia.org/wiki/Genetic_Algorithm&quot;&gt;genetic algorithm&lt;/a&gt; - is an art as much as a science or engineering problem.&lt;br /&gt;&lt;br /&gt;So all that said, you should buy this book.&lt;br /&gt;&lt;br /&gt;Reading it will help you understand why I just said all that. But it will also give you a bunch more techniques in your mental toolbox so that when you&apos;re looking at a problem you can think &quot;Ooooh! I remembering reading about some problem like that&quot; and then you can go pick up the book again and use it as a reference manual rather than reading it from cover to cover.&lt;br /&gt;&lt;br /&gt;And there&apos;s a goodly number of techniques to pick up and there&apos;s a lot to cover - there are chapters on collaborative filtering and recommendation systems, clustering and group discovery, search and ranking techniques, document filtering, &lt;a href=&quot;http://en.wikipedia.org/wiki/Bayesian_inference&quot;&gt;Bayesian classification&lt;/a&gt;, &lt;a href=&quot;http://en.wikipedia.org/wiki/Kernel_Method&quot;&gt;kernel methods&lt;/a&gt; and &lt;a href=&quot;http://en.wikipedia.org/wiki/Support_Vector_Machine&quot;&gt;support-vector machines&lt;/a&gt;, and genetic algorithms, amongst others.&lt;br /&gt;&lt;br /&gt;Each chapter gives an overview of the problem domain, gives an example problem and then walks the reader through a simple solution. The problems with the solution are then highlighted and various enhancements are shown.&lt;br /&gt;&lt;br /&gt;The techniques are demonstrated in Python - although they are all clear, understandable and perfectly legible to any competent programmer, especially a scripting language programmer. Just enough detail is covered to give you a solid grounding without getting you bogged down.&lt;br /&gt;&lt;br /&gt;In summary - this is well worth your 20 quid, even more so if you can get your company to pay for it. If you&apos;re working with existing data this may spark off an inspiration that will let you add some new features or up your accuracy. Or if you&apos;re presented with a problem this book may give you techniques that will help you solve it without having to work everything out from first principles. It&apos;s well written manual that&apos;ll handily expand your repertoire.</description>
  <comments>http://deflatermouse.livejournal.com/143237.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>2</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://deflatermouse.livejournal.com/142857.html</guid>
  <pubDate>Wed, 28 Nov 2007 18:04:12 GMT</pubDate>
  <title>For  your consideration</title>
  <link>http://deflatermouse.livejournal.com/142857.html</link>
  <description>For some reason I imagine this appealing most to &lt;span class=&apos;ljuser ljuser-name_aca&apos; lj:user=&apos;aca&apos; style=&apos;white-space: nowrap;&apos;&gt;&lt;a href=&apos;http://aca.livejournal.com/profile&apos;&gt;&lt;img src=&apos;http://l-stat.livejournal.com/img/userinfo.gif&apos; alt=&apos;[info]&apos; width=&apos;17&apos; height=&apos;17&apos; style=&apos;vertical-align: bottom; border: 0; padding-right: 1px;&apos; /&gt;&lt;/a&gt;&lt;a href=&apos;http://aca.livejournal.com/&apos;&gt;&lt;b&gt;aca&lt;/b&gt;&lt;/a&gt;&lt;/span&gt; and &lt;span class=&apos;ljuser ljuser-name_easterbunny&apos; lj:user=&apos;easterbunny&apos; style=&apos;white-space: nowrap;&apos;&gt;&lt;a href=&apos;http://easterbunny.livejournal.com/profile&apos;&gt;&lt;img src=&apos;http://l-stat.livejournal.com/img/userinfo.gif&apos; alt=&apos;[info]&apos; width=&apos;17&apos; height=&apos;17&apos; style=&apos;vertical-align: bottom; border: 0; padding-right: 1px;&apos; /&gt;&lt;/a&gt;&lt;a href=&apos;http://easterbunny.livejournal.com/&apos;&gt;&lt;b&gt;easterbunny&lt;/b&gt;&lt;/a&gt;&lt;/span&gt; ...&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;lj-embed id=&quot;2&quot; /&gt;</description>
  <comments>http://deflatermouse.livejournal.com/142857.html</comments>
  <category>album covers</category>
  <category>music</category>
  <category>hilarity ensued</category>
  <lj:security>public</lj:security>
  <lj:reply-count>2</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://deflatermouse.livejournal.com/142757.html</guid>
  <pubDate>Wed, 28 Nov 2007 16:53:12 GMT</pubDate>
  <title>The clock ticks life away</title>
  <link>http://deflatermouse.livejournal.com/142757.html</link>
  <description>In a burst of insomnia last night I finished off my &lt;a href=&quot;http://deflatermouse.livejournal.com/142319.html&quot;&gt;personal calendar&lt;/a&gt; refactoring and uploaded it to &lt;a href=&quot;http://search.cpan.org/dist/OurCal&quot;&gt;CPAN&lt;/a&gt;. I&apos;m actually pretty pleased with the results - it&apos;s pretty modular and clean and should be easy to extend to do something like read hCalendar off web pages or syndication feeds or produce hCalendar infused feeds itself or read and write to Google Calendar. Writing mod_perl 1 or 2 handlers should be a doddle too. Or integrating it with Memcached. There are a couple of things I&apos;d like to do to it still - make installation easier for example and do a proper user management page but, for now,  I figured I&apos;d just release and add those later.&lt;br /&gt;&lt;br /&gt;That wasn&apos;t quite enough to send me off to the land of nod though so I wrote &lt;a href=&quot;http://search.cpan.org/dist/Cal-DAV&quot;&gt;Cal::DAV&lt;/a&gt; which is, err, a CalDAV client in Perl. &lt;br /&gt;&lt;br /&gt;It&apos;s actually a pretty thin wrapper round &lt;a href=&quot;http://search.cpan.org/dist/Data-ICal&quot;&gt;Data::ICal&lt;/a&gt; and &lt;a href=&quot;http://search.cpan.org/dist/HTTP-DAV&quot;&gt;HTTP::DAV&lt;/a&gt; but at the very least it should stand as an entry point for anybody who searches for &quot;CalDav + perl&quot; and it&apos;s actually pretty much a drop in replacement for &lt;tt&gt;Data::ICal&lt;/tt&gt;.&lt;br /&gt;&lt;br /&gt;I had a slight problem in that the CalDAV server I was testing against (the &lt;a href=&quot;http://trac.calendarserver.org/projects/calendarserver&quot;&gt;Darwin Calendar Server&lt;/a&gt; from OSX) seemed to allow me to modify and delete files on the remote server but didn&apos;t seem to let me create new ones (either by uploading or by copying or moving existing files) and returned a &lt;tt&gt;403 Forbidden&lt;/tt&gt;).&lt;br /&gt;&lt;br /&gt;I couldn&apos;t see anything wrong with the permissions (it happened even with the moral equivalent of a doing it as &lt;tt&gt;root&lt;/tt&gt;) and it happened with two different CalDAV clients (dave and cadaver) so I&apos;m pretty sure it&apos;s not just my code. I&apos;m pretty stumped so if someone else out there is running a Darwin Server or could give me access on another type of CalDAV server then that&apos;d be much appreciated.&lt;br /&gt; &lt;br /&gt;Weirdly enough that didn&apos;t send me to sleep either so I finished off a book on &lt;a href=&quot;http://www.amazon.co.uk/dp/190413291X/&quot;&gt;the Foreign Legion&lt;/a&gt;, read &lt;a href=&quot;http://www.amazon.co.uk/dp/159307414X/&quot;&gt;The Last Temptation&lt;/a&gt; and got halfway through a book on &lt;a href=&quot;http://www.amazon.co.uk/dp/0007219946/&quot;&gt;the state &lt;br /&gt;of British food&lt;/a&gt; before I conked out and woke up at 7:30 with the light still on.</description>
  <comments>http://deflatermouse.livejournal.com/142757.html</comments>
  <category>caldav</category>
  <category>calendar</category>
  <category>calendaring</category>
  <category>just let it rest simon for the love of g</category>
  <category>programming</category>
  <category>nerd fest</category>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
</channel>
</rss>
