<?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/'>
<channel>
  <title>Neil de Carteret</title>
  <link>http://n3dst4.livejournal.com/</link>
  <description>Neil de Carteret - LiveJournal.com</description>
  <lastBuildDate>Mon, 25 Feb 2008 22:46:55 GMT</lastBuildDate>
  <generator>LiveJournal / LiveJournal.com</generator>
  <lj:journal>n3dst4</lj:journal>
  <lj:journaltype>personal</lj:journaltype>
  <image>
    <url>http://p-userpic.livejournal.com/62152405/7914502</url>
    <title>Neil de Carteret</title>
    <link>http://n3dst4.livejournal.com/</link>
    <width>100</width>
    <height>100</height>
  </image>

<item>
  <guid isPermaLink='true'>http://n3dst4.livejournal.com/69384.html</guid>
  <pubDate>Mon, 25 Feb 2008 22:46:55 GMT</pubDate>
  <title>Stiffles?</title>
  <link>http://n3dst4.livejournal.com/69384.html</link>
  <description>It turns out that for years, I&apos;ve been spelling &quot;stifle&quot; incorrectly. Now that I look at it, I&apos;ve been writing &quot;stiffle&quot;. What the hell is that all about? Is it rude?</description>
  <comments>http://n3dst4.livejournal.com/69384.html</comments>
  <lj:security>public</lj:security>
</item>
<item>
  <guid isPermaLink='true'>http://n3dst4.livejournal.com/69308.html</guid>
  <pubDate>Sun, 24 Feb 2008 17:16:12 GMT</pubDate>
  <title>Penn Jillette is still on the Internet</title>
  <link>http://n3dst4.livejournal.com/69308.html</link>
  <description>Penn Jillette has been doing an occasional video blog since he stopped doing radio.&lt;br /&gt;&lt;br /&gt;I was sad when Penn Jillette (the loud half of Penn &amp;amp; Teller, or as he puts it, more han half by volume) stopped doing his excellent daily hour-long radio show. He&apos;s a stark-staring libertarian, a good critical thinker, and an excellent entertainer. I don&apos;t like the concept of role models, but if I had one, it would be Penn Jillette. I have even been told I look like him, which is fine, but not deliberate.&lt;br /&gt;&lt;br /&gt;So now that the radio show has stopped, Sony have given him a bunch of cameras and instructions to do a video blog called &lt;i&gt;Penn Says&lt;/i&gt;, which is just pure, undiluted Penn:&amp;nbsp; &lt;a href=&quot;http://crackle.com/c/Penn_Says&quot;&gt;&lt;b&gt;http://crackle.com/c/Penn_Says&lt;/b&gt;&lt;br /&gt;&lt;/a&gt;</description>
  <comments>http://n3dst4.livejournal.com/69308.html</comments>
  <lj:security>public</lj:security>
</item>
<item>
  <guid isPermaLink='true'>http://n3dst4.livejournal.com/69062.html</guid>
  <pubDate>Sat, 23 Feb 2008 18:27:01 GMT</pubDate>
  <title>Alt Rock</title>
  <link>http://n3dst4.livejournal.com/69062.html</link>
  <description>Two american alt rock numbers of pure glory.&lt;br /&gt;First, Butthole Surfers &lt;b&gt;&lt;i&gt;Pepper&lt;/i&gt;&lt;/b&gt;. I missed this when it was current and only heard it recently:&lt;br /&gt;&lt;lj-embed id=&quot;15&quot; /&gt;&lt;br /&gt;Secondly, The Flys &lt;b&gt;&lt;i&gt;Got You (Where I Want You)&lt;/i&gt;&lt;/b&gt;. I don&apos;t know when it came out, but I love it. It shares a dark, maleficent tenderness with &lt;i&gt;Polly &lt;/i&gt;by Nirvana, and, also like that song, it&apos;s from the point of view of a rapist.&lt;br /&gt;&lt;lj-embed id=&quot;17&quot; /&gt;</description>
  <comments>http://n3dst4.livejournal.com/69062.html</comments>
  <lj:security>public</lj:security>
</item>
<item>
  <guid isPermaLink='true'>http://n3dst4.livejournal.com/68687.html</guid>
  <pubDate>Sat, 23 Feb 2008 18:10:24 GMT</pubDate>
  <title>Gigantically irritating Photoshop annoyances</title>
  <link>http://n3dst4.livejournal.com/68687.html</link>
  <description>I&apos;ve been using Photoshop since 6.0 and I&apos;ve only just noticed this really annoying thing: if you have caps lock on, your paintbrush pointer turns into a useless little crosshair. &lt;br /&gt;&lt;a href=&quot;http://pics.livejournal.com/n3dst4/pic/0000sz0t/&quot;&gt;&lt;img width=&quot;373&quot; height=&quot;195&quot; border=&quot;0&quot; alt=&quot;&quot; src=&quot;http://pics.livejournal.com/n3dst4/pic/0000sz0t&quot; /&gt;&lt;/a&gt;&lt;br /&gt;The thing is, there&apos;s also an option to do that, so obviously the first thing I did was go and make sure it was set correctly. Then I restarted Photoshop. Then I tried using it a bit because I really needed to get a certain piece of work done.&lt;br /&gt;&lt;br /&gt;It was only by fluke that I happened to tap capslock with my pinkie by accident and noticed the pointer fix itself. What is this feature for? I can&apos;t imagine a situation where it would be better to have a generic cursor than a circle that will show you how big the brush is going to come out. Unless you&apos;re using really huge brushes and can&apos;t see the edges, maybe.&lt;br /&gt;&lt;br /&gt;Almost as annoying is the fact that you can&apos;t scroll off the edges of a picture, for example to grab the handles of a shape which extends off the canvas:&lt;br /&gt;&lt;a href=&quot;http://pics.livejournal.com/n3dst4/pic/0000t7th/&quot;&gt;&lt;img width=&quot;389&quot; height=&quot;408&quot; border=&quot;0&quot; alt=&quot;&quot; src=&quot;http://pics.livejournal.com/n3dst4/pic/0000t7th&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I love Photoshop to bits and feel much better for having ranted a little.</description>
  <comments>http://n3dst4.livejournal.com/68687.html</comments>
  <lj:security>public</lj:security>
</item>
<item>
  <guid isPermaLink='true'>http://n3dst4.livejournal.com/68416.html</guid>
  <pubDate>Wed, 13 Feb 2008 18:45:55 GMT</pubDate>
  <title>My love - hate relationship with Radiohead</title>
  <link>http://n3dst4.livejournal.com/68416.html</link>
  <description>In 1997, I sold my copy of &lt;i&gt;Pablo Honey&lt;/i&gt; because apart from &lt;i&gt;Creep&lt;/i&gt;, I didn&apos;t think there were any decent songs on it.&lt;br /&gt;&lt;br /&gt;Okay, I was wrong&lt;i&gt;. You &lt;/i&gt;is fantastic too, as is &lt;i&gt;Stop Whispering&lt;/i&gt;. Oh, and &lt;i&gt;Anyone Can Play Guitar&lt;/i&gt;.&lt;br /&gt;&lt;br /&gt;Actually, it&apos;s a pretty awesome album. But somehow in 1997 it just didn&apos;t speak to me, and so I never listened to The Bends or OK Computer properly.&lt;br /&gt;&lt;br /&gt;Last week I found I had &lt;i&gt;Karma Police&lt;/i&gt; stuck in my head at work, and the only way to get a song out of your head is to listen to it properly, so I did. And then I listened to Radiohead&apos;s entire back catalogue on continuous loop for about 72 hours.&lt;br /&gt;&lt;br /&gt;I still don&apos;t quite get &lt;i&gt;Kid A&lt;/i&gt; or &lt;i&gt;Amnesiac&lt;/i&gt;, but I suspect that they will make more sense aftera&amp;nbsp; few listens, and I&apos;m saving &lt;i&gt;In Rainbows&lt;/i&gt;, but I&apos;m getting there.&lt;br /&gt;&lt;br /&gt;Makes me wonder how many bands there are that I don&apos;t pay attention to because their songs aren&apos;t instantly catchy.</description>
  <comments>http://n3dst4.livejournal.com/68416.html</comments>
  <lj:security>public</lj:security>
</item>
<item>
  <guid isPermaLink='true'>http://n3dst4.livejournal.com/68132.html</guid>
  <pubDate>Fri, 08 Feb 2008 19:44:30 GMT</pubDate>
  <title>Merry Christmas and happy easter</title>
  <link>http://n3dst4.livejournal.com/68132.html</link>
  <description>I&apos;ve found out what those gibberish spams that don&apos;t seems to be selling anything are for: they&apos;re designed to poison spam filters&apos; corpuses.&lt;br /&gt;&lt;br /&gt;The idea is this: there&apos;s too much spam, so you write a program that filters it out, known, oddly enough, as a spam filter. Trouble is, spam doesn&apos;t come conveniently marked as such, so you need some pretty hairy techniques to try and recognise it.&lt;br /&gt;&lt;br /&gt;There are various techniques, and one of the most popular starting points is called Bayesian filtering. I won&apos;t go into the maths here, but basically it&apos;s a statistical system which you &quot;prime&quot; by showing it a load of spam and saying &quot;hey, filter, this stuff is evil - I want you to get rid of it&quot;, and then a load of real email (sometimes called ham, by analogy with spam) and saying &quot;this is the good stuff. I want to keep it.&quot;&lt;br /&gt;&lt;br /&gt;The Bayesian filter then attempts to work out phrases, patterns, and styles which distinguish spam from ham. Done right, it works well. My GMail account gets fewer than ten spams a week in the inbox, but several hundred a day go straight into the spam bucket.&lt;br /&gt;&lt;br /&gt;Yes, you read it right - several hundred. And in the three years I&apos;ve had my GMail account, I&apos;ve had one false positive (that I&apos;ve been aware of, admittedly).&lt;br /&gt;&lt;br /&gt;If you want to gauge how impressive it is that a computer can do that kind of filtering, think of it liike this: imagine you&apos;re describing to a small child who has absolutely no grasp of context or the outside world, how to tell the difference between a trustworthy adult and a potential child-molester.&lt;br /&gt;&lt;br /&gt;Difficult, huh? That&apos;s why we tell children, whose brains are millions of times more powerful than any computer, &lt;i&gt;don&apos;t talk to strangers&lt;/i&gt;. Kids just can&apos;t make that kind of quality judgement. So it&apos;s a feat of science that computers can, fairly reliably, distinguish spam from ham.&lt;br /&gt;&lt;br /&gt;That sidetrack aside, for these filters to work, they need to be fed a large quantity of ham and spam to get them &quot;primed&quot;. Also, systems like GMail are paying attention when you click &quot;Report Spam&quot;: when you do that, the mail gets fed into the filter as an example of spam. When enough people do that, the spam starts getting blocked. It also takes some of your emails that you don&apos;t report as spam, and feeds them into the filter as examples of ham (the filter needs example of both spam and ham so it can establish the differences).&lt;br /&gt;&lt;br /&gt;The collection of emails used as examples of spam and ham is known as the &lt;b&gt;corpus&lt;/b&gt;, from the latin, meaning &quot;body&quot;.&lt;br /&gt;&lt;br /&gt;These gibberish emails, which are composed of gramatically sound English (or whatever language), get reported as spam, and end up in the spam corpus, which gets diluted with random crap. &lt;br /&gt;&lt;br /&gt;In other words, by sending spams that only look like spam because they have no useful content, the spammers weaken the filters&apos; ability to tell the one from the other.&lt;br /&gt;&lt;br /&gt;Luckily, collaborative systems like GMail pretty quickly filter out even the gibberish mails.</description>
  <comments>http://n3dst4.livejournal.com/68132.html</comments>
  <lj:security>public</lj:security>
</item>
<item>
  <guid isPermaLink='true'>http://n3dst4.livejournal.com/67844.html</guid>
  <pubDate>Mon, 19 Nov 2007 20:24:07 GMT</pubDate>
  <title>Catch-up post</title>
  <link>http://n3dst4.livejournal.com/67844.html</link>
  <description>Crap, I&apos;ve done lots on the past month and now I&apos;m stuggling to remember what it all was.&lt;br /&gt;&lt;br /&gt;Well, there was October Gameforce, at the new venue, which is smaller than the old one but better decorated and they do food. After standing around chatting with Angus waiting for my usual bunch of no-shows to arrive, I sat down with Mike and couple of other and played... oh jeez, I can&apos;t remember. All I know is it ended with the longest game of Puerto Rico *ever*.&lt;br /&gt;&lt;br /&gt;The weekend after that I had the delightful experience of watching Simon play Portal. It&apos;s the sort of game that once you&apos;ve done a section, it seems utterly obvious and you just want to scream &quot;No! You idiot! You *obviously* have to put the portal at 45 degrees and throw a cube off the ledge! Duh!&quot; &lt;br /&gt;&lt;br /&gt;The weekend after that is a complete blank. Seriously. I have no recollection whatsoever. If anyone can remember where I was or what I was doing, please let me know. It&apos;s a little worrying.&lt;br /&gt;&lt;br /&gt;Last weekend the main event was seeing the Sex Pistols at Brixton Academy. Lowrider Dave asked me how it was ajust now and I described it thus:&lt;br /&gt;&lt;blockquote&gt;The performance was great. Lydon is still completely manic and the playing was really tight.&lt;br /&gt;&lt;br /&gt;Trouble is, no-one&apos;s afraid of a 51-year-old property developer, no matter how manic.&lt;br /&gt;&lt;br /&gt;Also, when he&apos;s yelling &quot;No future, no future for meeee&quot;, I was thinking, &quot;You sang that 30 years ago. There obviously was a future. What is this song supposed to mean now?&quot;&lt;br /&gt;&lt;br /&gt;So it&apos;s basically a retro-punk stage show performed by the Sex Pistols, not an actual punk gig. But it was still cool.&lt;br /&gt;&lt;/blockquote&gt;And this weekend, I&apos;ve been mostly playing Crysis, and yesterday was George&apos;s birthday do at the Ealing Park Tavern, which was very nice and 6 out of 9 of us had roast beef. Huzzah.&lt;br /&gt;</description>
  <comments>http://n3dst4.livejournal.com/67844.html</comments>
  <lj:security>public</lj:security>
</item>
<item>
  <guid isPermaLink='true'>http://n3dst4.livejournal.com/67782.html</guid>
  <pubDate>Mon, 15 Oct 2007 17:30:10 GMT</pubDate>
  <title>This Cake is Great</title>
  <link>http://n3dst4.livejournal.com/67782.html</link>
  <description>This is a bit of a surprise. Valve software announced a while ago that the latest episode of their Half-Life series would be released in a bundle with the sequel to the multiplayer classic Team Fortress, and a weird-looking first-person puzzle game called Portal. Given that puzzlers aren&apos;t really my bag but the videos looked cool, I played it first. It&apos;s only five hours long, and that&apos;s if you&apos;re as crap at puzzles as me, but it&apos;s perfectly constructed and huge fun. &lt;br /&gt;&lt;br /&gt;Here, I&apos;ve just used portals to get energy from the red, three-pointed power emitter to the power socket just to my left, and then portalled over to a platform which travels along the beam of white energy. Note the sinister observation room to the right. The glass is only distorted from the outside, but that&apos;s something you find out later in the game.&lt;br /&gt;&lt;a href=&quot;http://pics.livejournal.com/n3dst4/pic/0000rq3d/&quot;&gt;&lt;img width=&quot;320&quot; height=&quot;200&quot; border=&quot;0&quot; alt=&quot;&quot; src=&quot;http://pics.livejournal.com/n3dst4/pic/0000rq3d/s320x240&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;And then it gets better. Just when you&apos;re nodding your head and deciding that some puzzlers can be fun, the whole gameplay shifts up a gear, the plot (yes, it&apos;s a puzzle game with a plot) blossoms like a hydra. Then you reach the final puzzle, which makes everything that came before it look like Tetris, and then the game ends, at which point something ten times more awesome than everything so far happens. &lt;br /&gt;&lt;br /&gt;And you&apos;re left staring at the empty computer screen with a lump in your throat, adrenaline washing round your brain, emotionally and intellectually wrung out. Valve have tricked you. They lured you in by saying this is a little puzzle game with an interesting gameplay mechanic, and then they suckerpunch you with the best gaming experience you have ever had. And it&apos;s all over in five hours.&lt;br /&gt;&lt;br /&gt;Seemingly without trying, this pint-sized,&amp;nbsp; funny-looking, not-quite-an-FPS, not-just-a-puzzler game has strolled into the all time top ten and taken a seat in the VIP area alongside Deus Ex, Half-Life, and System Shock 2.&lt;br /&gt;&lt;br /&gt;The cake, incidentally, &lt;i&gt;is not a lie.&lt;/i&gt; My companion cube told me so, before I killed him. I&apos;ll miss that little guy.</description>
  <comments>http://n3dst4.livejournal.com/67782.html</comments>
  <lj:security>public</lj:security>
</item>
<item>
  <guid isPermaLink='true'>http://n3dst4.livejournal.com/67544.html</guid>
  <pubDate>Mon, 15 Oct 2007 16:01:00 GMT</pubDate>
  <title>New PC</title>
  <link>http://n3dst4.livejournal.com/67544.html</link>
  <description>I got my new PC a couple of weeks ago, and I suppose I ought to blog it for the record. It&apos;s:&lt;br /&gt;&lt;br /&gt;An Intel Core 2 Duo E6750 (that&apos;s two cores at 2.66 GHz with 4MB of L2 cache)&lt;br /&gt;2GB (2x1GB) of PC2-6400 DDR RAM&lt;br /&gt;A Leadtek Nvidia GeForce 8800GTS 640MB&lt;br /&gt;A Gigabyte P35C DS3R mobo&lt;br /&gt;&lt;br /&gt;So it can do this:&lt;br /&gt;&lt;a href=&quot;http://download.n3dst4.com/bioshock%20screens/dental-hallway.jpg&quot;&gt;&lt;img width=&quot;320&quot; height=&quot;200&quot; border=&quot;0&quot; alt=&quot;&quot; src=&quot;http://pics.livejournal.com/n3dst4/pic/0000q668/s320x240&quot; /&gt;&lt;/a&gt;&lt;br /&gt;(1920x1200, 278K JPEG)&lt;br /&gt;&lt;br /&gt;at 60fps.&lt;br /&gt;&lt;br /&gt;My old Iiyama monitor, circa 1999, threw it&apos;s last senile fit and died. It had been playing up occasionally (blowing fuses or refusing to power on) and finally it just conked out entirely. So, the next day, I jumped on the train to Tottenham Court Road, walked up and down it twice (that&apos;s a lot of walking), and finally settled on a 24&quot; widescreen Samsung 245b from the Micro Anvika in the street opposite Goodge Street. It&apos;s £370 RRP, and being ex-demo it was £320, which is an amzing price for a 24&quot; LCD. Except it&apos;s really obvious what a cheap panel it is - huge colour gradient between top and bottom, which can&apos;t be improved by moving your point of view. In retrospect, I should have gone for a smaller, but higher-quality screen.&amp;nbsp; But what I really want is something the same size, but not totally cheap-ass. So that&apos;s one for the list, right after &quot;a pony&quot; and &quot;a house with a pool in zone 1&quot;.</description>
  <comments>http://n3dst4.livejournal.com/67544.html</comments>
  <lj:security>public</lj:security>
</item>
<item>
  <guid isPermaLink='true'>http://n3dst4.livejournal.com/67143.html</guid>
  <pubDate>Wed, 03 Oct 2007 19:57:13 GMT</pubDate>
  <title>The loco parentes</title>
  <link>http://n3dst4.livejournal.com/67143.html</link>
  <description>(The title is a &lt;a href=&quot;http://en.wikipedia.org/wiki/In_loco_parentis&quot;&gt;Latin&lt;/a&gt;/&lt;a href=&quot;http://www.urbandictionary.com/define.php?term=loco&quot;&gt;Spanish&lt;/a&gt; joke, for all you poor non-classically-educated types)&lt;br /&gt;&lt;br /&gt;Mum and Dad came up to London last week to see what all the hullabaloo is about. Tuesday evening was my first opportunity to demonstrate my new-found cookery skills to my mother, who has been subliminally teaching me everything I know about cookery since I was old enough to peer over the kitchen counter and watch cheese being grated/tomatoes being sliced/mince pies being pressed. I made a Moroccan chicken tagine (aka a slightly curryish casserole) which seemed to go down well, although I supect that Mum was going to be nice about whatever I&apos;d made, regardless.&lt;br /&gt;&lt;br /&gt;Wednesday we minicabbed, trained, and taxied our way to the British Museum and observed the &lt;a href=&quot;http://en.wikipedia.org/wiki/Terracotta_Army&quot;&gt;Terracotta Army&lt;/a&gt;, or at least a detachment of it. After seeing the photos of the archaeological digs with thousands of in-tact soldiers showing, it was easy to be disappointed with the two dozen or so figures on show here; but I forced myself to think about their antiquity, the level of detail on every one, and the fact that these priceless objects had been shipped from China so that there were but a train ride away for me. Then it impossible not to be impressed and even awestruck by what I was seeing.&lt;br /&gt;&lt;br /&gt;That afternoon, we went to the &lt;a href=&quot;http://en.wikipedia.org/wiki/Globe_theatre&quot;&gt;Globe Theatre&lt;/a&gt; to see &lt;a href=&quot;http://en.wikipedia.org/wiki/Love%27s_labour%27s_lost&quot;&gt;Love&apos;s Labour&apos;s Lost&lt;/a&gt;. It was my second visit but Mum &amp;amp; Dad&apos;s first. Weirdly, we were seated in exactly the same bit of the theatre that I&apos;d been in with Stuart and Karen in June. LLL is described by a character in one of Jasper Fforde&apos;s novels as having been made up of parts left over from Shakespeare&apos;s other plays, which is a fair description. There are nobles, comical servants, and false identities aplenty, and the players really played it up until it was laugh-a-minute, which was good because you&apos;re practically outdoors at the Globe and it was absolutely freezing. Probably not as memorable a performance as Othello, but great entertainment.&lt;br /&gt;&lt;br /&gt;Thursday we crawled along the north half M25 and went to &lt;a href=&quot;http://www.waddesdon.org.uk/&quot;&gt;Waddesdon Manor&lt;/a&gt;. I&apos;ll let you read the link for details; it&apos;s not really my bag. Not because of the property itself, which is magnificent, but because it&apos;s run by the National Trust, so the inside is dimly lit and utterly devoid of life or personality. The best bit (for me) was the Aviary, which quite apart from being an elegant cast-iron structure in itself, houses some beautiful exotic birds hopping about and squeaking. I felt like they were the first living thing I&apos;d seen all day..&lt;br /&gt;&lt;br /&gt;Friday was mostly spent at the &lt;a href=&quot;http://www.swindon.gov.uk/leisure-shoppingoutletcentre&quot;&gt;Great Western Railway Sheds Shopping Oulet&lt;/a&gt;. Recommended. Go, if you haven&apos;t been before. It&apos;s an ever-changing multi-mall of bargain outlets, completely different from any other mall I&apos;ve ever been in. I bought all sorts of goodies, and my Mum got all kinds of generous and started buying me even more things. None of it was more than 2/3rds it&apos;s RRP, and the bedsheets I got were less than 1/3rd price.&amp;nbsp; And if you want to feel like you&apos;ve improved your mind while you&apos;re there, there&apos;s a museum of the Great Western Railway next door, which is so engaging and lively it made Waddesdon look like a maths textbook.&lt;br /&gt;&lt;br /&gt;I&apos;ll leave you with a snippet from the beginning of LLL. Ferdinand (King of Navarre) has just persuaded his friends to sign an oth that they&apos;ll spend three years with him studying, fasting, and having no contact with women:
&lt;blockquote&gt;
  &lt;b&gt;LONGAVILLE&lt;/b&gt;
  &lt;blockquote&gt; 
    You swore to that, Biron, and to the rest.
  &lt;/blockquote&gt;
  &lt;b&gt;BIRON&lt;/b&gt;
  &lt;blockquote&gt; 
    By yea and nay, sir, then I swore in jest.
    What is the end of study? let me know.
  &lt;/blockquote&gt;
  &lt;b&gt;FERDINAND&lt;/b&gt;
  &lt;blockquote&gt; Why, that to know, which else we should not know.
  &lt;/blockquote&gt;
  &lt;b&gt;BIRON&lt;/b&gt;
  &lt;blockquote&gt;
  Things hid and barr&apos;d, you mean, from common sense?
  &lt;/blockquote&gt;
  &lt;b&gt;FERDINAND&lt;/b&gt;
  &lt;blockquote&gt;
  Ay, that is study&apos;s godlike recompense.
  &lt;/blockquote&gt;
&lt;/blockquote&gt;
I love Shakespeare.&lt;br /&gt;</description>
  <comments>http://n3dst4.livejournal.com/67143.html</comments>
  <lj:security>public</lj:security>
</item>
<item>
  <guid isPermaLink='true'>http://n3dst4.livejournal.com/67030.html</guid>
  <pubDate>Mon, 24 Sep 2007 18:02:02 GMT</pubDate>
  <title>Lolgordon Brown</title>
  <link>http://n3dst4.livejournal.com/67030.html</link>
  <description>&lt;img alt=&quot;&quot; src=&quot;http://download.n3dst4.com/art/o_hai_i_fixed_ur_country.jpg&quot; /&gt;</description>
  <comments>http://n3dst4.livejournal.com/67030.html</comments>
  <lj:security>public</lj:security>
</item>
<item>
  <guid isPermaLink='true'>http://n3dst4.livejournal.com/66711.html</guid>
  <pubDate>Sun, 23 Sep 2007 21:18:48 GMT</pubDate>
  <title>Happy Equinox</title>
  <link>http://n3dst4.livejournal.com/66711.html</link>
  <description>It was the equinox today. From here on in, daylight will only happen when you&apos;re at work.&lt;br /&gt;&lt;br /&gt;Also, I just made a saucepanful of &lt;b&gt;&lt;a href=&quot;http://www.bbcgoodfood.com/recipes/2824/chicken-with-braised-celery-and-cider.jsp&quot;&gt;this&lt;/a&gt;&lt;/b&gt;. It was quite tasty.</description>
  <comments>http://n3dst4.livejournal.com/66711.html</comments>
  <lj:security>public</lj:security>
</item>
<item>
  <guid isPermaLink='true'>http://n3dst4.livejournal.com/66320.html</guid>
  <pubDate>Fri, 21 Sep 2007 20:22:26 GMT</pubDate>
  <title>This is why JavaScript gets a Bad Name</title>
  <link>http://n3dst4.livejournal.com/66320.html</link>
  <description>Do you know why programming in Perl, Python, or Ruby is so much more fun than programming in VB, ColdFusion, or PHP?&lt;br /&gt;&lt;br /&gt;It&apos;s quality of the community. Not the size. &lt;i&gt;The quality.&lt;br /&gt;&lt;a name=&quot;cutid1&quot;&gt;&lt;/a&gt;&lt;br /&gt;&lt;/i&gt;I&apos;ve written all six of those languages in production, and they are all roughly equivalent in capability. They all have their problems, too: VB and PHP are hampered by poor design decisions, ColdFusion is verbose yet inexpressive, Perl is getting a bit long in the tooth, Ruby is slow, and Python has a stick up its ass.&lt;br /&gt;&lt;br /&gt;But the difference is this: when I Google for a problem in VB, CF, or PHP, I get hundreds of results from sites with names like &quot;devmaster.com&quot; and &quot;awesomescripts.com&quot;. All of these sites are laden with Flash adverts and written by incompetent clowns who I wouldn&apos;t trust to write a &quot;Hello World&quot; correctly.&lt;br /&gt;&lt;br /&gt;Perl, Python and Ruby, on the other hand, probably have fewer lines of text devoted to them on the web, but what lines there are of a much higher quality. Fewer adverts, more brainpower.&lt;br /&gt;&lt;br /&gt;This is what in some circles is known as the signal-to-noise ratio.&lt;br /&gt;&lt;br /&gt;What I&apos;m coming round to is that JavaScript has a foot firmly planted in both camps at the moment. Its role as the de facto client-side language of the web means that hordes of useless twunts have latched onto it and excreted thousands of badly written &quot;code snippets&quot;. But at the same time, some very intelligent people have also recognised that it&apos;s a beautiful, expressive language and deserves to be treated as such.&lt;br /&gt;&lt;br /&gt;For today&apos;s practical class, we&apos;ll take the following question: How can you refer to &quot;this&quot; inside a function passed to setTimeout()?&lt;br /&gt;&lt;br /&gt;For example:&lt;br /&gt;&lt;pre&gt;
// This constructor takes a DOM element and creates an object on which 
// you can call .notify(msg), which fills the element with the message,
// and then 10 second later, blanks it out.
function Notifier(element)
    {
    this.elem = element;
    this.notify = function(msg)
        {
        this.elem.innerHTML = msg;
        setTimeout(function() // anonymous function starts here
            {
            this.elem.innerHTML = &quot;&quot;;
            }, 10000);
        }
    }
&lt;/pre&gt;&lt;br /&gt;Except that doesn&apos;t work, because when the anonymous function is called, &lt;b&gt;&lt;code&gt;this&lt;/code&gt;&lt;/b&gt; has gone out of scope, so &lt;b&gt;&lt;code&gt;this.elem&lt;/code&gt;&lt;/b&gt; doesn&apos;t exist.&lt;br /&gt;&lt;br /&gt;If you try to Google for the answer (feel free), you get a particularly clueless code site which says:&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;The trick is to retain a reference to &apos;this&apos; by the use of a global variable&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;Followed by a 32-line version of the following:&lt;br /&gt;&lt;pre&gt;
// FOR THE LOVE OF GOSH, DON&apos;T ACTUALLY DO THIS!
var myStupidGlobal;
function Notifier(id)
    {
    this.elem = getElementById(id);
    this.notify = function(msg)
        {
        this.elem.innerHTML = msg;
        myStupidGlobal = this
        setTimeout(function() // anonymous function
            {
            myStupidGlobal.elem.innerHTML = &quot;&quot;;
            }, 10000);
        }
    }
&lt;/pre&gt;&lt;br /&gt;CONCURRENCY, YOU BLOODY IDIOT. JavaScript is an incredibly thread-friendly language. Plonking something into global context is just asking for collision when another instance of the same class changes its value before the timeout has run.&lt;br /&gt;&lt;br /&gt;It&apos;s exemplary of a sort of ignorant, ham-fisted programmer, the sort to whom it hasn&apos;t even occurred that just maybe, JavaScript&apos;s language designers &lt;i&gt;had already thought of that and done something about it&lt;/i&gt;.&lt;br /&gt;&lt;br /&gt;The answer, as you will find on the second page of search results, is to make a closure: a function which refers to a variable outside its own scope and thus hangs onto a persistent reference to it. All you need to do is assign &lt;code&gt;this&lt;/code&gt; to a &lt;code&gt;var&lt;/code&gt; just before setting the timeout.&lt;br /&gt;&lt;pre&gt;
// Use a local var like this to create a closure
function Notifier(id)
    {
    this.elem = getElementById(id);
    this.notify = function(msg)
        {
        this.elem.innerHTML = msg;
        var myNiceLocal = this;
        setTimeout(function() // anonymous function
            {
            myNiceLocal.elem.innerHTML = &quot;&quot;;
            }, 10000);
        }
    }
&lt;/pre&gt;&lt;br /&gt;Now your callback function gets squirrelled away with a nice safe reference to the object which created it, which won&apos;t get clobbered by some other drunken gorilla of an object running the same method.&lt;br /&gt;</description>
  <comments>http://n3dst4.livejournal.com/66320.html</comments>
  <category>programming</category>
  <category>web</category>
  <category>javascript</category>
  <lj:security>public</lj:security>
</item>
<item>
  <guid isPermaLink='true'>http://n3dst4.livejournal.com/66176.html</guid>
  <pubDate>Mon, 17 Sep 2007 17:11:38 GMT</pubDate>
  <title>What&apos;s up with Del.icio.us?</title>
  <link>http://n3dst4.livejournal.com/66176.html</link>
  <description>I&apos;ve been finding &lt;a href=&quot;http://del.icio.us&quot;&gt;del.icio.us&lt;/a&gt; painfully slow for a while, to the point of not even being able to post links. How&apos;s everyone else finding it?&amp;nbsp;</description>
  <comments>http://n3dst4.livejournal.com/66176.html</comments>
  <lj:security>public</lj:security>
</item>
<item>
  <guid isPermaLink='true'>http://n3dst4.livejournal.com/65898.html</guid>
  <pubDate>Sun, 16 Sep 2007 11:18:06 GMT</pubDate>
  <title>Oy Vey</title>
  <link>http://n3dst4.livejournal.com/65898.html</link>
  <description>I&apos;ve just received the Penguin Book of Hebrew Verse as my book for the Blog a Penguin&amp;nbsp; Classic project.&amp;nbsp; &lt;br /&gt;&lt;ul&gt;&lt;li&gt;It&apos;s in Hebrew. I don&apos;t speak Hebrew.&lt;/li&gt;&lt;li&gt;There are translations, but they don&apos;t scan or rhyme or represent anything other than literal meaning.&lt;/li&gt;&lt;li&gt;It&apos;s (predominantly) religious. I am not not.&lt;/li&gt;&lt;li&gt;It&apos;s 600 pages long.&lt;/li&gt;&lt;/ul&gt;Wish me luck.</description>
  <comments>http://n3dst4.livejournal.com/65898.html</comments>
  <lj:security>public</lj:security>
</item>
<item>
  <guid isPermaLink='true'>http://n3dst4.livejournal.com/65601.html</guid>
  <pubDate>Sat, 15 Sep 2007 14:18:41 GMT</pubDate>
  <title>A round-up of JavaScript development tools</title>
  <link>http://n3dst4.livejournal.com/65601.html</link>
  <description>Not so very long ago, client-side web programming in JavaScript was painful. There were no debuggers, no way to add instrumentation other than alert(&quot;Bing bong!&quot;), no frameworks, and no tool-chain except &lt;a href=&quot;http://www.vim.org/&quot;&gt;your favourite text editor&lt;/a&gt; and a browser.&lt;br /&gt;&lt;br /&gt;But now we have JavaScript consoles in &lt;a href=&quot;http://www.opera.com/&quot;&gt;Opera &lt;/a&gt;and &lt;a href=&quot;http://www.mozilla.com/en-US/firefox/?from=getfirefox&quot;&gt;FireFox&lt;/a&gt;, plus &lt;a href=&quot;http://www.getfirebug.com/lite.html&quot;&gt;Firebug Lite&lt;/a&gt; for everything else. Then there&apos;s full-fat &lt;a href=&quot;http://www.getfirebug.com/&quot;&gt;Firebug &lt;/a&gt;for DOM wrangling, XHR inspection, profiling and debugging, and the &lt;a href=&quot;http://chrispederick.com/work/web-developer/&quot;&gt;Web Developer Toolbar &lt;/a&gt;for tweaking, poking and prodding.&amp;nbsp; Even MS are on the case with the &lt;a href=&quot;https://www.microsoft.com/downloads/details.aspx?familyid=E59C3964-672D-4511-BB3E-2D5E1DB91038&amp;amp;displaylang=en&quot;&gt;IE Developer Toolbar &lt;/a&gt;(which is a bit like the FireFox WDT plus a DOM inspector), and the &lt;a href=&quot;http://msdn2.microsoft.com/en-us/library/aa189846(office.10).aspx&quot;&gt;MS Script Editor &lt;/a&gt;(which is part of Office, for some unknown MS reason).&lt;br /&gt;&lt;br /&gt;Also, today I found &lt;a href=&quot;http://www.jslint.com/&quot;&gt;JSLint&lt;/a&gt;. It&apos;s hardly new, but somehow it had never reached my radar before. If you&apos;ve use lint, the C code nanny, you&apos;ll know what to expect: it pulls a fine-toothed comb through your code and picks out all those things which might not actually stop your code from running, but which are Bad anyway, like undeclared variables, missing semicolons etc.&lt;br /&gt;&lt;br /&gt;I think the crassly-named Web 2.0 movement is having some great effects here - people are waking up to the fact that JS is actually a really nice, powerful, dynamic language, not just a toy syntax for DOM fiddling. Having functions as first-class objects really shows that the designers were thinking about expressiveness when they wrote it. Of course, it took some time for the libraries to catch up, but now we have a plethora of fantastic and mostly open source frameworks.&amp;nbsp; Shining brightest among them at the moment is &lt;a href=&quot;http://jquery.com/&quot;&gt;JQuery&lt;/a&gt;, which takes the concept of anonymous delegation with JS functions and turns it into your main paradigm.&lt;br /&gt;&lt;br /&gt;The JQuery-based JS code I&apos;ve just written is about 150 lines, across 6 functions. Would you care to guess how many local variables there are in that lot? The answer is three. That may not be a very useful metric on its own, but it&apos;s deeply indicative of how much JQuery lets you write code in the order you need it, so you don&apos;t have to keep swathes of local variables hanging around for later use.&lt;br /&gt;&lt;br /&gt;I&apos;m going to round this off by offering some big love to Apple&apos;s &lt;a href=&quot;http://www.apple.com/safari/download/&quot;&gt;Safari for Windows beta&lt;/a&gt;. Safari looks gorgeous, even in Windows, and yet it has the snappiest rendering engine and JS interpreter in existence. Seriously. I&apos;m running FireFox 2.0, IE6, IE7, Opera, and Safari side-by-side on the same Windows XP machine for compatibility testing, and Safari is just spanking the opposition for performance. It also hasn&apos;t put a foot wrong with rendering yet. Best of all, WebCore and JavaScriptCore (the bits of Safari which are so fast) are open source. If they release a Linux build, I&apos;ll switch to Safari as my day-to-day browser in a heartbeat.</description>
  <comments>http://n3dst4.livejournal.com/65601.html</comments>
  <lj:security>public</lj:security>
</item>
<item>
  <guid isPermaLink='true'>http://n3dst4.livejournal.com/65529.html</guid>
  <pubDate>Sat, 15 Sep 2007 11:31:00 GMT</pubDate>
  <title>Brokeback Bus</title>
  <link>http://n3dst4.livejournal.com/65529.html</link>
  <description>The bus driver on the 346 bus back from work on Wednesday was obviously very angry about something, because was throwing the bus round like an MX-5.&amp;nbsp; The difference is that MX-5s typically don&apos;t have twenty people standing up in them.&lt;br /&gt;&lt;br /&gt;I was standing with my back against the window, holding on to the hand-rail above me. Psycho Bus Driver hammers round a mini-roundabout, causing some squeaks of astonishment as everybody is thrown to the left. He realises&amp;nbsp; he&apos;s about to crash into someone&apos;s garden and suddenly straightens up, throwing us all back to the right. At this point, because of where I was, my lumbar region connected with the hand-rail behind me quite forcibly. &lt;br /&gt;&lt;br /&gt;It was a bit jarring, but I only had two more stops before home, so I was just glad to be off. My back was a bit sore that evening but I didn&apos;t really dwell on it. But Thursday morning, when I tried to get out of bed, I found I couldn&apos;t. The pain was astonishing. I had to flop onto the floor and walk my hands up the wall just to get onto my feet.&lt;br /&gt;&lt;br /&gt;I&apos;ve had back pain before - I used to get it all the time after I&apos;d spent a while working at a bad desk. But this was the worst back pain I&apos;ve ever had. I managed to make a coffee, then went to the bathroom only to find that I was almost incapable of lowering myself onto the pot. This, I thought to myself, is what it must be like to be very old.&lt;br /&gt;&lt;br /&gt;I called in sick, dropped a cocktail of painkillers, and spent the rest of the day trying to find a posture that would alleviate the pain for more than a few minutes at a time.&lt;br /&gt;&lt;br /&gt;I suppose I should have gone to see a doctor and then sued the crap out of Arriva (the bus company), but unfortunately I don&apos;t think like that.</description>
  <comments>http://n3dst4.livejournal.com/65529.html</comments>
  <lj:security>public</lj:security>
</item>
<item>
  <guid isPermaLink='true'>http://n3dst4.livejournal.com/65185.html</guid>
  <pubDate>Mon, 10 Sep 2007 19:49:13 GMT</pubDate>
  <title>MS Evil</title>
  <link>http://n3dst4.livejournal.com/65185.html</link>
  <description>Excuse me while I put aside years of professional conduct, tolerance, and maturity, and get something off my chest:&lt;br /&gt;&lt;br /&gt;&lt;i&gt;&lt;b&gt;Jesus fucking christ, I hate Microsoft so much. They are unmitigated turds of the worst kind.&lt;/b&gt;&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;I originally wrote a long rant here about monopoly abuse, complacency, and criminal incompetence, but instead I&apos;ll just leave a link which will be a godsend for anyone trying to support IE6 and 7:&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://tredosoft.com/Multiple_IE&quot;&gt;Multiple IE&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;It installs standalone versions of any of IE 3, 4, 5, 5.5 and 6, so you can have your office-policy-mandated IE7 and still support the unwashed masses with their six-years-old browser technology.&amp;nbsp; Yay!</description>
  <comments>http://n3dst4.livejournal.com/65185.html</comments>
  <lj:security>public</lj:security>
</item>
<item>
  <guid isPermaLink='true'>http://n3dst4.livejournal.com/64908.html</guid>
  <pubDate>Fri, 07 Sep 2007 21:38:16 GMT</pubDate>
  <title>Staying In</title>
  <link>http://n3dst4.livejournal.com/64908.html</link>
  <description>I haven&apos;t blogged recently because I&apos;ve been up to my eyeballs in various projects for friends - retouching some photos which had gone pink or green with age, designing a site, Something Commercial Which Cannot Be Mentioned for Someone Who Cannot Be Named, and, in the gaps, hacking on my Django/Python app. For me.&lt;br /&gt;&lt;br /&gt;I&apos;d share one of the photos, but frankly, at a glance they look like 70&apos;s vintage porn and I&apos;d hate to make my blog NSFW on that account.&lt;br /&gt;&lt;br /&gt;The design work is interesting because unlike most of the things I&apos;ve done before, my &quot;client&quot; has fairly strong design opinions, so we&apos;ve been through several iterations while I try to find a design that matches what he has in his little head.&lt;br /&gt;&lt;br /&gt;&quot;Doofus&quot;, the killer personal task management application, is languishing a little but I should be able to have a good solid hack on it tomorrow. It&apos;s looking good. It&apos;s how Google would do a to-do list, and I can thank JQuery and Django for that ability.&lt;br /&gt;&lt;br /&gt;So I&apos;ve spent this evening in working on items (2) and (3),&amp;nbsp; but it&apos;s only half ten, I have a big bottle of Leffe Blonde, and I&apos;m listening to &lt;b&gt;Peter Bjorn And John feat. Victoria Bergsman: &lt;/b&gt;&lt;i&gt;&lt;b&gt;Young Folks&lt;/b&gt;&lt;/i&gt;, which is just about the best new record I&apos;ve heard in years. It has that soulful pop indie vibe that Scandinavians are so good at. It&apos;s so good, in fact, you can have it right now. Enjoy:&lt;br /&gt;&lt;br /&gt;&lt;lj-embed id=&quot;14&quot; /&gt;</description>
  <comments>http://n3dst4.livejournal.com/64908.html</comments>
  <lj:security>public</lj:security>
</item>
<item>
  <guid isPermaLink='true'>http://n3dst4.livejournal.com/64641.html</guid>
  <pubDate>Wed, 29 Aug 2007 20:33:17 GMT</pubDate>
  <title>Who&apos;s up for a bank robbery?</title>
  <link>http://n3dst4.livejournal.com/64641.html</link>
  <description>I need more time and more money.&lt;br /&gt;&lt;br /&gt;I came home this evening fully intending to get a stack of paperwork out of the way and then sit down for several hours serious programming. Instead, the paperwork took hours (I&apos;m still proving to people that I exist and live in the UK) and by the end I felt so drained that I stared at my IDE for ten minutes, corrected some indentation, committed the change, and then closed it.&lt;br /&gt;&lt;br /&gt;Conversely, when I got to work this morning I was full of beans and could have hacked solidly for hours, but all I had to work on was a bloody design document that had to be made 18.2% more boring.&lt;br /&gt;&lt;br /&gt;And I want to buy a new PC, but it looks like young Master Card is going to pay for it. Awfully generous fellow.</description>
  <comments>http://n3dst4.livejournal.com/64641.html</comments>
  <lj:security>public</lj:security>
</item>
<item>
  <guid isPermaLink='true'>http://n3dst4.livejournal.com/64277.html</guid>
  <pubDate>Mon, 27 Aug 2007 13:43:04 GMT</pubDate>
  <title>Just finished Bioshock</title>
  <link>http://n3dst4.livejournal.com/64277.html</link>
  <description>It came on Friday morning, I installed it on Friday evening, Simon and I started it on Saturday morning, and I finished it a couple of hours ago (Monday morning).&lt;br /&gt;&lt;br /&gt;Wow. It&apos;s a true successor to System Shock 2. Expansive, decaying structure filled with barking mad former inhabitants gibbering to themselves in a broken parody of their former lives. If you remember SS2&apos;s bad guys muttering insanities to themselves (&quot;little ones need lots of food...&quot;), you&apos;ll love the lines that Bioshock&apos;s &quot;splicers&quot; come out with: a guy dressed as a doctor, holding a vicious knife, stalks after me, shouting, &quot;Nurse! Help me find this patient!&quot;. When he finds me, he slashes the knife at me, screaming, &quot;Hold still! It&apos;s just a simple procedure!&quot; &lt;br /&gt;&lt;br /&gt;&lt;a name=&quot;cutid1&quot;&gt;&lt;/a&gt;&lt;div class=&quot;ljcut&quot; text=&quot;Read more...&quot;&gt;Many of Looking Glass / Irrational Games favourite elements are there, including hackable security cameras and turrets. On several occasions, the best way to deal with a situation is to hack the security over to your side, lay a few mines and retreat to safety while carnage ensues. In addition to land mines, you can use your crossbow to plant electrified tripwires, and a plasmid gives you the ability to create whirlwind booby traps that slam helpless victims into the ceiling and drop them again.&lt;br /&gt;&lt;br /&gt;Plasmid: Bioshock&apos;s answer to magic and character development is direct genetic modification. You acquire psychic abilities from vending machines (don&apos;t laugh, it works), and in general the abilities you gain are used to stun or incapacitate bad guys so you can open up with the artillery, rather than doing damage themselves.&amp;nbsp; You can fine-tune your character to certain types of action, but you can store unused plasmids and swap them back in later on, so there&apos;s no sense of making a character-defining decision early on. Compare that to SS2, where before you&apos;ve even started, you&apos;re asked to choose between combat, engineering and psychic training.&lt;br /&gt;&lt;br /&gt;The writing is top notch, but doesn&apos;t really shine until about three-quarters of the way through. As noted in other reviews, there are three words that would spoil the whole thing for you, so I won&apos;t put them here. Suffice to say that once you&apos;ve played Bioshock, those three words will be etched into your memory as one of the all-time great moment of gaming, alongside the start of Half-Life and the end of Deus Ex.&amp;nbsp; Really, it&apos;s that good. &lt;br /&gt;&lt;br /&gt;Big Daddies and Little Sisters. The only inhabitants of Bioshock who won&apos;t try to kill you on sight. The Big Daddies are huge, ogreish, diving-suit clad protectors of the creepy, glowing-eyed Little Sisters, who scamper round finding corpses and extracting genetic juice from them. Left alone, they will ignore you. Step too close to a Little Sister, and the accompanying Big Daddy will bellow at you and brandish his weapon threateningly. So you don&apos;t need to fight them. Except, you do, because Little Sisters are the only source of Adam, the chemical currency used to purchase genetic upgrades. &lt;br /&gt;&lt;br /&gt;So to advance, you have to tangle with a Big Daddy, and take it down, leaving the Little Sister sobbing uncontrollably at the corpse&apos;s side, crying, &quot;Mr. Bubble? Mr. Bubbles, why won&apos;t you move?&quot;&lt;br /&gt;&lt;br /&gt;Then you can choose to squeeze all the Adam out of the Little Sister, leaving her as dead as her protector, or you can save her, killing the genetic slug that makes her act like a Little Sister and turning her back into a normal little girl. If you do that, you get a little Adam, and some bonus power-ups in gratitude. To be honest, it&apos;s not a KotOR-style moral dilemma.&lt;br /&gt;&lt;br /&gt;Let me now throw in a few more points of excellence, in case I hadn&apos;t made it clear how great this game is: &lt;br /&gt;&lt;br /&gt;(1) Upgradeable weapons. Turn your sporting shotgun into a rapid-fire assault weapon that fires exploding shells .&lt;br /&gt;(2) Fire, ice, water, and electricity all work exactly as you would expect. Set a splicer on fire, wait for them to jump into water (to extinguish the flames), then electrify the water. Gets a laugh every time.&lt;br /&gt;(3) Befriend a Big Daddy, and watch it charge into combat for you&lt;br /&gt;(4) As above, and then start a fight with another Big Daddy. Take a seat and watch the show.&lt;br /&gt;(5) There&apos;s a camera. You can take pictures with it. Enough said.&lt;br /&gt;&lt;br /&gt;Now, would you kindly stop trying to work out what those three words are and just play Bioshock as soon as possible?&lt;/div&gt;</description>
  <comments>http://n3dst4.livejournal.com/64277.html</comments>
  <lj:security>public</lj:security>
</item>
<item>
  <guid isPermaLink='true'>http://n3dst4.livejournal.com/64078.html</guid>
  <pubDate>Wed, 22 Aug 2007 17:26:49 GMT</pubDate>
  <title>Mostly gaming</title>
  <link>http://n3dst4.livejournal.com/64078.html</link>
  <description>Our SLA Industries campaign moved on to part two on Saturday with another all-dayer game. Impressively, my non-combat-oriented business-trained dude got three human kills, which was nice. I&apos;ve also been making more use of Reality Fold, often with comedic side effects.&lt;br /&gt;&lt;br /&gt;Gameforce on Sunday was sans Angus, who&apos;s off at GenCon, so we had a run-what-you-brung day. We started with &lt;a href=&quot;http://boardgamegeek.com/game/18258&quot;&gt;Mission: Red Planet&lt;/a&gt;, then &lt;a href=&quot;http://boardgamegeek.com/game/25552&quot;&gt;Final Straw&lt;/a&gt;, &lt;a href=&quot;http://boardgamegeek.com/game/19237&quot;&gt;Ca$h and Gun$&lt;/a&gt; and finally &lt;a href=&quot;http://boardgamegeek.com/game/30869&quot;&gt;Jenseits von Theben&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Last night (tuesday) I played &lt;a href=&quot;http://www.educationallearninggames.com/honor-of-the-samurai-card-game.asp&quot;&gt;Honor of the Samurai&lt;/a&gt; with some of the RPG group, and somehow won through doing everything in my power to cripple the other players before seizing the Shoguncy* and then flukily avoiding assassination for four turns.&lt;br /&gt;&lt;br /&gt;Meanwhile, when I haven&apos;t been playing games I&apos;ve been hacking on a little Django app (at an average rate of 30 minutes a day) and am growing increasingly impressed with Python&apos;s right-first-time factor and Django&apos;s object and template model.&lt;br /&gt;&lt;br /&gt;Oh, and Bioshock will be out on Friday! Woohoo!&lt;br /&gt;&lt;br /&gt;* Shoguncy?</description>
  <comments>http://n3dst4.livejournal.com/64078.html</comments>
  <lj:security>public</lj:security>
</item>
<item>
  <guid isPermaLink='true'>http://n3dst4.livejournal.com/63836.html</guid>
  <pubDate>Sun, 12 Aug 2007 18:57:55 GMT</pubDate>
  <title>Python, Django, doctest and TDD</title>
  <link>http://n3dst4.livejournal.com/63836.html</link>
  <description>I&apos;ve had a weekend of uninterrupted hacking, which has allowed me to make major progress on a model mixin for &lt;a href=&quot;http://www.djangoproject.com/&quot;&gt;Django&lt;/a&gt; which provides &lt;a href=&quot;http://dev.mysql.com/tech-resources/articles/hierarchical-data.html&quot;&gt;nested set&lt;/a&gt;-like facilities.&lt;br /&gt;&lt;br /&gt;Any readers of this blog who are programmers and also Monty Python fans (hi Kuba) should love &lt;a href=&quot;http://python.org/&quot;&gt;Python.&lt;/a&gt; I think I&apos;ve blogged it before, but basically, it&apos;s a dynamically typed, object oriented programming langauge, with the cleanest and most readable syntax of any language I know. And it&apos;s officially okay to quote Monty Python in your comments. How cool is that?&lt;br /&gt;&lt;a name=&quot;cutid1&quot;&gt;&lt;/a&gt;&lt;div class=&quot;ljcut&quot; text=&quot;Read on for details of model mixins and the cutest unit testing system ever&quot;&gt;Django is a web application framework written in and for Python, with an ORM, request dispatcher and templating system. yes, Python has about a bajillion web frameworks, but Django is one of the most mature and sensibly designed. And it&apos;s very loosely coupled, so you can always swap out the bits you don&apos;t like.&lt;br /&gt;&lt;br /&gt;What my mixin does is allow you to treat objects from your object model as nodes in a tree. Behind the scenes, the backing table is organised as a nested set, but apart from nominating some columns, you don&apos;t need to know the mechanics.&lt;br /&gt;&lt;br /&gt;For example, if I had a table of staff members represented by a Person class:&lt;br /&gt;&lt;br /&gt;&lt;font color=&quot;#000080&quot;&gt;class Person(models.Model):&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; name = models.CharField(max_length=100)&lt;br /&gt;  &amp;nbsp;&amp;nbsp;&amp;nbsp; phone = models.CharField(max_length=100)&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;I could add my mixin and two columns:&lt;br /&gt;&lt;br /&gt; &lt;font color=&quot;#000080&quot;&gt;class Person(NestedSet, models.Model):&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; name = models.CharField(max_length=100)&lt;br /&gt;  &amp;nbsp;&amp;nbsp;&amp;nbsp; phone = models.CharField(max_length=100)&lt;br /&gt;  &amp;nbsp;&amp;nbsp;&amp;nbsp; lft = models.IntegerField()&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; rgt = models.IntegerField()&lt;br /&gt;&lt;/font&gt;&lt;br /&gt;And now I can treat the model as an org chart:&lt;br /&gt;&lt;br /&gt;&lt;font color=&quot;#000080&quot;&gt;Person.objects.get(pk=12).parent()&amp;nbsp; # Get employee 12&apos;s boss&lt;br /&gt; Person.objects.get(pk=36).children()&amp;nbsp; # Immediate subordinates of employee 36&lt;br /&gt;Person.objects.get(pk=5).move_to(last_child_of(Person.objects.get(pk=9)))&amp;nbsp; # Employee 5 and all his/her staff now work for employee 9&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;Yes, that class declaration above does use multiple inheritance, which should make Java and C# developers cringe :-D&lt;br /&gt;&lt;br /&gt;In writing the automated tests for NestedSet, I discovered doctest. If you write unit tests, doctest will make you wet yourself in pleasure so much you&apos;ll have to swim home. Here&apos;s how it works: Python has an interactive interpreter, so you can just run up python and type stuff into it. For example, here&apos;s me showing off a few language features in an interactive session (my machine is called ernold):&lt;br /&gt;&lt;br /&gt;&lt;font color=&quot;#000080&quot;&gt;ned@ernold:~$ python&lt;br /&gt;Python 2.5.1 (r251:54863, May&amp;nbsp; 2 2007, 16:56:35) &lt;br /&gt;[GCC 4.1.2 (Ubuntu 4.1.2-0ubuntu4)] on linux2&lt;br /&gt;Type &quot;help&quot;, &quot;copyright&quot;, &quot;credits&quot; or &quot;license&quot; for more information.&lt;br /&gt;&lt;b&gt;&amp;gt;&amp;gt;&amp;gt; 5+3&lt;/b&gt;&lt;br /&gt;8&lt;br /&gt;&lt;b&gt;&amp;gt;&amp;gt;&amp;gt; &quot;BADGER &quot; * 8&lt;br /&gt;&lt;/b&gt;&apos;BADGER BADGER BADGER BADGER BADGER BADGER BADGER BADGER &apos;&lt;br /&gt;&lt;b&gt;&amp;gt;&amp;gt;&amp;gt; [x**2 for x in range(1,11)]&lt;/b&gt;&lt;br /&gt;[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;My commands are after the &quot;&amp;gt;&amp;gt;&amp;gt;&quot; marks. Python prints the return value of each statement after it.&lt;br /&gt;&lt;br /&gt;So a lot of python writers use dumps of interactive sessions to demonstrate the use of a particular function in their comments. You might see a function called add() commented like this:&lt;br /&gt;&lt;br /&gt;&lt;font color=&quot;#000080&quot;&gt;&quot;&quot;&quot;&lt;br /&gt;Adds two numbers together and returns the result.&lt;br /&gt;&lt;br /&gt;&amp;gt;&amp;gt;&amp;gt; add(1,2)&lt;br /&gt;3&lt;br /&gt;&amp;gt;&amp;gt;&amp;gt; add(5, -10)&lt;br /&gt;-5&lt;br /&gt;&amp;gt;&amp;gt;&amp;gt; # only two arguments!&lt;br /&gt;&amp;gt;&amp;gt;&amp;gt; add(2,4,6,8)&lt;br /&gt;Traceback (most recent call last):&lt;br /&gt;&amp;nbsp; File &quot;&amp;lt;stdin&amp;gt;&quot;, line 1, in &amp;lt;module&amp;gt;&lt;br /&gt;TypeError: add() takes exactly 2 arguments (4 given)&lt;br /&gt;&amp;gt;&amp;gt;&amp;gt; # two shall be the number of the counting!&lt;br /&gt;&lt;/font&gt;&lt;font color=&quot;#000080&quot;&gt;&amp;gt;&amp;gt;&amp;gt; add(42)&lt;br /&gt; &lt;/font&gt;&lt;font color=&quot;#000080&quot;&gt;Traceback (most recent call last):&lt;br /&gt;&amp;nbsp; File &quot;&amp;lt;stdin&amp;gt;&quot;, line 1, in &amp;lt;module&amp;gt;&lt;br /&gt;TypeError: add() takes exactly 2 arguments (1 given)&lt;br /&gt;&quot;&quot;&quot;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;It&apos;s quite a concise way of demonstrating how to use the (rather limited) function, and shows what you can and can&apos;t do.&lt;br /&gt; &lt;br /&gt; So some absolute genius said, &quot;Why don&apos;t we just look for &amp;gt;&amp;gt;&amp;gt; markers in docstrings* and run them as tests?&quot;&lt;br /&gt;&lt;br /&gt;And that&apos;s what doctest is. It goes through your modules, and when it finds &amp;gt;&amp;gt;&amp;gt; in a docstring, it tries to run whatever comes after it. It compares the stringified return value to what follows the &amp;gt;&amp;gt;&amp;gt; line, and if it matches, it stays quiet. If it doesn&apos;t match, it bleats about it.&lt;br /&gt;&lt;br /&gt;The documentation on doctest describes it as &quot;executable comments&quot; or &quot;literate testing&quot;, depending how you structure your work. It&apos;s absolutely brilliant.&lt;br /&gt;&lt;br /&gt;The first few lines from my NestedSet test harness class are this:&lt;br /&gt;&lt;br /&gt;&lt;font color=&quot;#800000&quot;&gt;&lt;font color=&quot;#000080&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &quot;&quot;&quot;This dummy class is just to test NestedSet&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;gt;&amp;gt;&amp;gt; print SimpleTree.objects.get(pk=1).pretty()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 4&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;gt;&amp;gt;&amp;gt; SimpleTree().insert_as(last_child_of=SimpleTree.objects.get(pk=4))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;gt;&amp;gt;&amp;gt; print SimpleTree.objects.get(pk=1).pretty()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 4&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 5&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3&lt;/font&gt;&lt;br /&gt;&lt;/font&gt;&lt;br /&gt;It works as documentation (you can see what I&apos;m doing to the tree model and follow along at home), and it can be run as a test. Thus guaranteeing that the docs never get out of date with the API.&lt;br /&gt;&lt;br /&gt;My next awesome discovery/decision is test-driven development, also known as TDD. Which is, very simply, where you write the automated tests first, and then start to hack on the solution until the tests all pass. Now that I have a suite of tests against NestedSet, I&apos;m going to copy it and use it for AdjacencyTree and MaterialisedPathTree, so I can run full tests against them as I go, rather than once everything is in place.&lt;br /&gt;&lt;br /&gt;*: docstrings are special comment markers (actually strings in void context) which can be found and used programatically. They&apos;re a little like Java&apos;s /** */ comments but cleverer.&lt;/div&gt;</description>
  <comments>http://n3dst4.livejournal.com/63836.html</comments>
  <category>django</category>
  <lj:security>public</lj:security>
</item>
<item>
  <guid isPermaLink='true'>http://n3dst4.livejournal.com/63673.html</guid>
  <pubDate>Sun, 12 Aug 2007 18:16:39 GMT</pubDate>
  <title>Cricket</title>
  <link>http://n3dst4.livejournal.com/63673.html</link>
  <description>180-6, ho ho. India&apos;s still going to win, though, despite that performance and their weird decision to not enforce follow-on. Highlight of the test so far: even though it was against England, Tendulkar&apos;s first ball casual chip-wrapper-throwing-away technique removing a very surprised Pietersen.&lt;br /&gt;&lt;br /&gt;&lt;font size=&quot;1&quot;&gt;Psst, cricket fans: am I doing it right?&lt;/font&gt;</description>
  <comments>http://n3dst4.livejournal.com/63673.html</comments>
  <lj:security>public</lj:security>
</item>
<item>
  <guid isPermaLink='true'>http://n3dst4.livejournal.com/63324.html</guid>
  <pubDate>Sun, 05 Aug 2007 20:18:39 GMT</pubDate>
  <title>Daft Punk: Interstella 5555</title>
  <link>http://n3dst4.livejournal.com/63324.html</link>
  <description>Let me start by thanking my homie KAHNYAY for fucking the otherwise excellent track Harder, Better, Faster, Stronger by Daft Punk and thus making me dig it out and listen to it several times to undo the damage he would otherwise have done to my musical recollection.&lt;br /&gt;&lt;br /&gt;In doing so, I came to watch Interstella 5555, the anime film film of Daft Punk&apos;s Discovery album, from which the track is taken. It&apos;s great. It&apos;s perfect for the euro-dance feel of the music, but touching, funny, and simple at the same time.&lt;br /&gt;&lt;br /&gt;As a public service, here&apos;s the original track, with the original video, taken from Interstella 5555:&lt;br /&gt;&lt;lj-embed id=&quot;13&quot; /&gt;&lt;br /&gt;Also, a very funny &lt;a href=&quot;http://youtube.com/watch?v=K2cYWfq--Nw&quot;&gt;hand jive video of it&lt;/a&gt;&lt;br /&gt;And an &lt;a href=&quot;http://youtube.com/watch?v=wQVEPFzkhaM&quot;&gt;a capella version&lt;/a&gt;!</description>
  <comments>http://n3dst4.livejournal.com/63324.html</comments>
  <lj:security>public</lj:security>
</item>
</channel>
</rss>
