<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	>

<channel>
	<title>Graceful Exits &#187; quickies</title>
	<atom:link href="http://www.jpstacey.info/blog/category/quickies/www.jpstacey.info/blog/category/quickies/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.jpstacey.info/blog</link>
	<description>Garbage collection, in a very real sense</description>
	<pubDate>Tue, 30 Sep 2008 20:10:32 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6.2</generator>
	<language>en</language>
			<item>
		<title>Background HTTP fetching and cacheing in ASP/VBScript</title>
		<link>http://www.jpstacey.info/blog/2008/09/22/background-http-fetching-and-cacheing-in-aspvbscript/</link>
		<comments>http://www.jpstacey.info/blog/2008/09/22/background-http-fetching-and-cacheing-in-aspvbscript/#comments</comments>
		<pubDate>Mon, 22 Sep 2008 19:25:07 +0000</pubDate>
		<dc:creator>jps</dc:creator>
		
		<category><![CDATA[enterprise]]></category>

		<category><![CDATA[quickies]]></category>

		<category><![CDATA[software]]></category>

		<category><![CDATA[.net]]></category>

		<category><![CDATA[application]]></category>

		<category><![CDATA[asp]]></category>

		<category><![CDATA[aspx]]></category>

		<category><![CDATA[cache]]></category>

		<category><![CDATA[dotnet]]></category>

		<category><![CDATA[http]]></category>

		<category><![CDATA[msxml2]]></category>

		<category><![CDATA[serverxmlhttp]]></category>

		<category><![CDATA[vbscript]]></category>

		<guid isPermaLink="false">http://www.jpstacey.info/blog/?p=162</guid>
		<description><![CDATA[Getting ASP to embrace Web 1.1 is as easy, and as pretty, as you'd imagine.]]></description>
			<content:encoded><![CDATA[<p>We&#8217;ve recently had to integrate code with a large ASP application, which provided me with certain opinion-forming revelations about how the other half live. Part of this integration required us to write some ASP, an unexpected and un-wished-for surprise in itself. We had to generate livery in our own application&#8212;to make webpages from both sites consistent&#8212;and expose it to ASP via a HTTP call over the wire. The ASP application could then cache it, to avoid the extra per-page overhead of a HTTP call plus dynamic generation.</p>
<p>I provide below some reasonably solid HTTP fetching and cacheing in ASP/VBScript. I hesitate to add &#8220;because almost everything I found on the web was rubbish&#8221; because that would show hubris in the face of me having just had to sanitize the code, quite likely introducing typos along the way. These code samples also come with no warranty and no likelihood of me answering awkward questions about them. To invoke the fetcher/cacher, put the following in your currently executed VBScript file:</p>
<blockquote class="code"><p>
&lt;% Dim strUrl, strUrlKey, objWinHttp<br />
strUrlKey = &#8220;top_menus&#8221; %&gt;<br />
&lt;!&#8211; #include file=&#8221;fetch.inc&#8221; &#8211;&gt;<br />
. . .<br />
&lt;% strUrlKey = &#8220;side_menus&#8221; %&gt;<br />
&lt;!&#8211; #include file=&#8221;fetch.inc&#8221; &#8211;&gt;<br />
. . .<br />
&lt;% strUrlKey = &#8220;footer&#8221; %&gt;<br />
&lt;!&#8211; #include file=&#8221;fetch.inc&#8221; &#8211;&gt;
</p></blockquote>
<p>Some notes on this below, but here is the actual fetcher/cacher to put in <code>fetch.inc</code> and bring it in with the above:</p>
<blockquote class="code"><p>
&lt;%<br />
&#8216; @description remote calls to get livery<br />
&#8216;<br />
&#8216; @param strUrl might need to be Dim-defined in wrapping file<br />
&#8216; @param strUrlKey must be Dim-defined and set to a particular<br />
&#8216;&nbsp;&nbsp;&nbsp;livery identifier in wrapping file  - also appends it to the URL<br />
&#8216;&nbsp;&nbsp;&nbsp;query string that it gets<br />
&#8216; @returns HTML on standard output<br />
<br />
strUrl = &#8220;http://example.com/?livery=&#8221; &#038; strUrlKey<br />
<br />
&#8216; Cache timeout is 60 minutes<br />
&#8216; Application(foo) fails gracefully if key foo does not exist<br />
If DateDiff(&#8221;n&#8221;, Application(strUrl &#038; &#8220;.LastModified&#8221;), Now()) >= 60 Then<br />
&nbsp;&nbsp;&#8217; If cache expired, get the page<br />
&nbsp;&nbsp;Set objWinHttp = CreateObject(&#8221;Msxml2.ServerXMLHTTP&#8221;)<br />
&nbsp;&nbsp;&#8217; Turn error handling on<br />
&nbsp;&nbsp;On Error Resume Next<br />
<br />
&nbsp;&nbsp;&#8217; Timeouts will now be handled<br />
&nbsp;&nbsp;objWinHttp.open &#8220;GET&#8221;, strUrl, False<br />
&nbsp;&nbsp;objWinHttp.send<br />
<br />
&nbsp;&nbsp;&#8217; If no error, trust content<br />
&nbsp;&nbsp;If Err.number = 0 Then<br />
&nbsp;&nbsp;&nbsp;&nbsp;&#8217; Lock the application scope and insert page and cache date<br />
&nbsp;&nbsp;&nbsp;&nbsp;Application.Lock()<br />
&nbsp;&nbsp;&nbsp;&nbsp;Application(strUrlKey) = objWinHttp.responseText<br />
&nbsp;&nbsp;&nbsp;&nbsp;Application(strUrlKey &#038; &#8220;.LastModified&#8221;) = Now()<br />
&nbsp;&nbsp;&nbsp;&nbsp;Application.UnLock()<br />
&nbsp;&nbsp;End If<br />
<br />
&nbsp;&nbsp;&#8217; Turn error handling off<br />
&nbsp;&nbsp;On Error Goto 0<br />
<br />
End If<br />
<br />
&#8216; Regardless, read from the application<br />
Response.Write(Application(strUrlKey))<br />
<br />
&#8216; Tear down object<br />
Set objWinHttp = Nothing<br />
%></p></blockquote>
<p>The <code>Dim</code> statements before the <code>&lt;!--include--&gt;</code> make it all a real pain in the arse. Some server configurations will arbitrarily interpret and run ASP files without <code>Dim</code>s; some won&#8217;t. And you can only ever <code>Dim</code> a variable once in a particular variable scope, or everything dies horribly; you have to keep track of whether or not a variable has already been declared, pretty much <em>by eye</em>.</p>
<p>Depending on your server, you might also not have access to the particular DLL that provides <code>Msxml2.ServerXMLHTTP</code>. If that&#8217;s the case, then there are other possible ways of making the HTTP call out there on the web: it&#8217;s just that the Graceful Exits bouncer isn&#8217;t letting them through the door.</p>
<p>Now, if you&#8217;ll excuse me, I need a shower.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jpstacey.info/blog/2008/09/22/background-http-fetching-and-cacheing-in-aspvbscript/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Improving REST performance is all about negotiation</title>
		<link>http://www.jpstacey.info/blog/2008/09/04/improving-rest-performance-is-all-about-negotiation/</link>
		<comments>http://www.jpstacey.info/blog/2008/09/04/improving-rest-performance-is-all-about-negotiation/#comments</comments>
		<pubDate>Thu, 04 Sep 2008 09:31:50 +0000</pubDate>
		<dc:creator>jps</dc:creator>
		
		<category><![CDATA[efficiency]]></category>

		<category><![CDATA[formats]]></category>

		<category><![CDATA[layers]]></category>

		<category><![CDATA[network]]></category>

		<category><![CDATA[quickies]]></category>

		<category><![CDATA[standards]]></category>

		<category><![CDATA[architecture]]></category>

		<category><![CDATA[resource]]></category>

		<category><![CDATA[rest]]></category>

		<category><![CDATA[royfielding]]></category>

		<category><![CDATA[roytfielding]]></category>

		<category><![CDATA[state]]></category>

		<category><![CDATA[understandable]]></category>

		<guid isPermaLink="false">http://www.jpstacey.info/blog/?p=200</guid>
		<description><![CDATA[Ceci n'est pas un obj&#233;t... nécessairement.]]></description>
			<content:encoded><![CDATA[<blockquote><p>
Web architects must understand that resources are just consistent mappings from an identifier to some set of views on server-side state. If one view doesn’t suit your needs, then feel free to create a different resource that provides a better view (for any definition of “better”). These views need not have anything to do with how the information is stored on the server, or even what kind of state it ultimately reflects. It just needs to be understandable (and actionable) by the recipient.
</p></blockquote>
<p>&#8212; Roy Fielding on <a href="http://roy.gbiv.com/untangled/2008/paper-tigers-and-hidden-dragons" >creating new resources for REST architectures</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jpstacey.info/blog/2008/09/04/improving-rest-performance-is-all-about-negotiation/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Random ordering of query results in Django</title>
		<link>http://www.jpstacey.info/blog/2008/09/03/random-ordering-of-query-results-in-django/</link>
		<comments>http://www.jpstacey.info/blog/2008/09/03/random-ordering-of-query-results-in-django/#comments</comments>
		<pubDate>Wed, 03 Sep 2008 11:31:06 +0000</pubDate>
		<dc:creator>jps</dc:creator>
		
		<category><![CDATA[framework]]></category>

		<category><![CDATA[quickies]]></category>

		<category><![CDATA[subtleties]]></category>

		<category><![CDATA[django]]></category>

		<category><![CDATA[orderby]]></category>

		<category><![CDATA[ordering]]></category>

		<category><![CDATA[queryset]]></category>

		<category><![CDATA[random]]></category>

		<category><![CDATA[randomly]]></category>

		<category><![CDATA[results]]></category>

		<guid isPermaLink="false">http://www.jpstacey.info/blog/?p=199</guid>
		<description><![CDATA[Those who can, Google; those who can't, teach Google.]]></description>
			<content:encoded><![CDATA[<p>In Django, when you have a queryset&#8212;a set of objects returned by an object manager, as yet not evaluated to actual objects&#8212;and you want them ordered randomly, set your order_by parameter to be a string of a single question mark:</p>
<blockquote class="code"><p>
>>> from mysite.models import Country<br />
>>> Country.objects.order_by(&#8217;?')<br />
>>> Country.objects.filter(continent=&#8217;Europe&#8217;).order_by(&#8217;?')
</p></blockquote>
<p>The objects should then be iterable in a random order.</p>
<p>Astonishingly, the <a href="http://www.djangoproject.com/documentation/models/ordering/" >existing documentation</a> has very little Google juice, <em>unless</em> you search for &#8220;randomly&#8221; rather than &#8220;random&#8221;. Otherwise, at most you get <a href="http://code.djangoproject.com/browser/django/trunk/django-docs/db-api.txt?rev=2" >db-api.txt telling you about using ordering tuples when you build your model</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jpstacey.info/blog/2008/09/03/random-ordering-of-query-results-in-django/feed/</wfw:commentRss>
		</item>
		<item>
		<title>No more SMSes from Twitter in the UK</title>
		<link>http://www.jpstacey.info/blog/2008/08/14/no-more-smses-from-twitter-in-the-uk/</link>
		<comments>http://www.jpstacey.info/blog/2008/08/14/no-more-smses-from-twitter-in-the-uk/#comments</comments>
		<pubDate>Thu, 14 Aug 2008 09:05:55 +0000</pubDate>
		<dc:creator>jps</dc:creator>
		
		<category><![CDATA[business]]></category>

		<category><![CDATA[network]]></category>

		<category><![CDATA[quickies]]></category>

		<category><![CDATA[cessation]]></category>

		<category><![CDATA[mobile]]></category>

		<category><![CDATA[moblog]]></category>

		<category><![CDATA[operator]]></category>

		<category><![CDATA[service]]></category>

		<category><![CDATA[sms]]></category>

		<category><![CDATA[software]]></category>

		<category><![CDATA[twitter]]></category>

		<category><![CDATA[uk]]></category>

		<guid isPermaLink="false">http://www.jpstacey.info/blog/?p=194</guid>
		<description><![CDATA[If you're twittering from the UK and wondering what happened to SMS push: it isn't merely down; it's gone.]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.twitter.com/2008/08/changes-for-some-sms-usersgood-and-bad.html" >Twitter are no longer delivering outbound SMSes over the UK number</a>. A real shame, and while it&#8217;s hard not to begrudge the mobile networks their cut, operators in the UK are notoriously expensive. If Ofcom weren&#8217;t so legislatively toothless and ministers so technologically clueless then maybe we&#8217;d still have a system that Canada, India and the US are still enjoying. Other moblogging systems are available, of course, if you&#8217;re willing to buy new kit to replace an already functional infrastructure.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jpstacey.info/blog/2008/08/14/no-more-smses-from-twitter-in-the-uk/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Firefox/Sage bookmarks to Google Reader import</title>
		<link>http://www.jpstacey.info/blog/2008/07/17/firefoxsage-bookmarks-to-google-reader-import/</link>
		<comments>http://www.jpstacey.info/blog/2008/07/17/firefoxsage-bookmarks-to-google-reader-import/#comments</comments>
		<pubDate>Thu, 17 Jul 2008 19:04:54 +0000</pubDate>
		<dc:creator>jps</dc:creator>
		
		<category><![CDATA[formats]]></category>

		<category><![CDATA[import/export]]></category>

		<category><![CDATA[projects]]></category>

		<category><![CDATA[quickies]]></category>

		<category><![CDATA[bookmarks]]></category>

		<category><![CDATA[DTD]]></category>

		<category><![CDATA[export]]></category>

		<category><![CDATA[firefox]]></category>

		<category><![CDATA[google]]></category>

		<category><![CDATA[import]]></category>

		<category><![CDATA[opml]]></category>

		<category><![CDATA[reader]]></category>

		<category><![CDATA[sage]]></category>

		<category><![CDATA[standard]]></category>

		<category><![CDATA[transform]]></category>

		<category><![CDATA[xml]]></category>

		<category><![CDATA[xslt]]></category>

		<guid isPermaLink="false">http://www.jpstacey.info/blog/?p=186</guid>
		<description><![CDATA[When OPML is OPML but it isn't OPML]]></description>
			<content:encoded><![CDATA[<p>Want to migrate your RSS bookmarks from Firefox (or its RSS-reading addon, Sage) to Google Reader? I did, just now.</p>
<p>Christopher Hinze has written a great <a href="https://addons.mozilla.org/en-US/firefox/addon/2625" >Firefox addon that exports bookmarks to OPML 1.0</a>. Unfortunately, OPML is a bit of an <a href="http://www.opml.org/spec1" >anything-goes specification</a>. So although Hinze&#8217;s plugin produces valid OPML, it isn&#8217;t the same sort of valid OPML that Google Reader expects. Google Reader, in fact, gags and chokes on Hinze&#8217;s OPML, and refuses to import it.</p>
<p>The main problem is that the &lt;outline/&gt; element, the basic hierarchical building block for OPML, <a href="http://www.opml.org/spec1#limits" >will take <em>any attributes</em></a>. What does that mean in practice? Well, here&#8217;s what Hinze&#8217;s export produces:</p>
<blockquote class="code"><p>
&lt;outline text=&#8221;Coding&#8221;><br />
&nbsp;&nbsp;&lt;outline type=&#8221;link&#8221; text=&#8221;Joel on Software&#8221; url=&#8221;http://www.joelonsoftware.com/rss.xml&#8221;   /><br />
&lt;/outline>
</p></blockquote>
<p>and here&#8217;s the result of Google Reader exporting its own store of RSS bookmarks:</p>
<blockquote class="code"><p>
&lt;outline title=&#8221;Coding&#8221; text=&#8221;Coding&#8221;><br />
&nbsp;&nbsp;&lt;outline text=&#8221;drupal.org - Community plumbing&#8221;<br />
&nbsp;&nbsp;&nbsp;&nbsp;title=&#8221;drupal.org - Community plumbing&#8221; type=&#8221;rss&#8221;<br />
&nbsp;&nbsp;&nbsp;&nbsp;xmlUrl=&#8221;http://drupal.org/node/feed&#8221; htmlUrl=&#8221;http://drupal.org&#8221;/><br />
&lt;/outline>
</p></blockquote>
<p>To a computer, these are fundamentally two different data formats: the URLs are stored in different attributes, and there are attributes on each that either have different values or are not present on the other. Someone did a <a href="http://static.userland.com/gems/radiodiscuss/opmlDtd.txt" >DTD for OPML</a>: looking at those two apparently analogous fragments above you have to ask yourself why they bothered.</p>
<p>Help is at hand, though. This sort of problem is bread and butter to XSLT, and <a href="/applications/google/ff2gr_opml.xsl" >here&#8217;s an XSL transform for converting Firefox OPML to Google Reader OPML</a>. If you have <code>xsltproc</code> installed on your system, you would type:</p>
<blockquote class="code"><p>
xsltproc http://www.jpstacey.info/applications/google/ff2gr_opml.xsl bookmarks.opml > fixed_bookmarks.opml
</p></blockquote>
<p>Or download the XSLT&#8212;it&#8217;s released under GPL2&#8212;and run it locally, changing that URL there to a local file location.</p>
<p>One thing to note: the XSLT will remove an outline wrapped around your bookmarks with title &#8220;Sage Feeds&#8221; (case-sensitive). So you can export that branch of your bookmarks, and the XSLT will strip the wrapper off and you <em>won&#8217;t</em> import a load of bookmarks tagged &#8220;Sage Feeds&#8221;. If you don&#8217;t like this behaviour then either rename your Sage bookmark container, or learn XSLT: it won&#8217;t kill you.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jpstacey.info/blog/2008/07/17/firefoxsage-bookmarks-to-google-reader-import/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Hardy Heron and the Dell Precision M4300</title>
		<link>http://www.jpstacey.info/blog/2008/07/16/hardy-heron-and-the-dell-precision-m4300/</link>
		<comments>http://www.jpstacey.info/blog/2008/07/16/hardy-heron-and-the-dell-precision-m4300/#comments</comments>
		<pubDate>Wed, 16 Jul 2008 19:16:10 +0000</pubDate>
		<dc:creator>jps</dc:creator>
		
		<category><![CDATA[hardware]]></category>

		<category><![CDATA[projects]]></category>

		<category><![CDATA[quickies]]></category>

		<category><![CDATA[software]]></category>

		<category><![CDATA[alsa]]></category>

		<category><![CDATA[dell]]></category>

		<category><![CDATA[display]]></category>

		<category><![CDATA[hardy]]></category>

		<category><![CDATA[heron]]></category>

		<category><![CDATA[install]]></category>

		<category><![CDATA[laptop]]></category>

		<category><![CDATA[linux]]></category>

		<category><![CDATA[m4300]]></category>

		<category><![CDATA[nvidia]]></category>

		<category><![CDATA[precision]]></category>

		<category><![CDATA[sound]]></category>

		<category><![CDATA[ubuntu]]></category>

		<category><![CDATA[upgrade]]></category>

		<guid isPermaLink="false">http://www.jpstacey.info/blog/?p=184</guid>
		<description><![CDATA[Summary: it just works.]]></description>
			<content:encoded><![CDATA[<p>In brief: the problems discussed <a href="http://www.jpstacey.info/blog/2008/01/07/the-full-sensory-experience-of-linux-on-a-dell-m4300-sound-vision-and-tinfoil-hat-microwaves/" >here</a> and <a href="http://www.jpstacey.info/blog/2007/08/28/laptop-and-linux-the-fixes-for-a-dell-precision-m4300/" >here</a> go away under the most recent <a href="http://www.ubuntu.com/" >Ubuntu</a> release, Hardy Heron, which I can generally recommend.</p>
<p>Alsa seems stable and graphics support is present from installation onwards. Enabling fancier 3D compiz effects requires the nvidia-glx-new package; compiz spots this, however and prompts for installation. All very smooth. Wireless works; my VoIP headset works; but I haven&#8217;t yet tested Bluetooth.</p>
<p>The only problem was in upgrading from Gutsy: my previous peregrinations had rendered my hybrid distribution shafted and incapable of upgrade. This isn&#8217;t a problem, though, if one has installed the /home directory (and in my case the /music one too) on a separate partition: the Ubuntu Live CD will blat the root partition with Heron, but leave the other partitions alone if you so require. Don&#8217;t resize any of your partitions during installation, though, or you&#8217;ll lose everything. Everything!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jpstacey.info/blog/2008/07/16/hardy-heron-and-the-dell-precision-m4300/feed/</wfw:commentRss>
		</item>
		<item>
		<title>The Mashup Song</title>
		<link>http://www.jpstacey.info/blog/2008/07/09/the-mashup-song/</link>
		<comments>http://www.jpstacey.info/blog/2008/07/09/the-mashup-song/#comments</comments>
		<pubDate>Wed, 09 Jul 2008 11:45:26 +0000</pubDate>
		<dc:creator>jps</dc:creator>
		
		<category><![CDATA[hacking]]></category>

		<category><![CDATA[law]]></category>

		<category><![CDATA[network]]></category>

		<category><![CDATA[non-programming]]></category>

		<category><![CDATA[quickies]]></category>

		<category><![CDATA[bonny]]></category>

		<category><![CDATA[filk]]></category>

		<category><![CDATA[legal]]></category>

		<category><![CDATA[mashup]]></category>

		<category><![CDATA[song]]></category>

		<guid isPermaLink="false">http://www.jpstacey.info/blog/?p=181</guid>
		<description><![CDATA[I am Richard Stallman for the Web 2.0 Generation. Fear me. I mean, pity me.]]></description>
			<content:encoded><![CDATA[<p>Inspired by the title of <a href="http://yro.slashdot.org/yro/08/07/08/1245204.shtml" >the relevant Slashdot article</a>, to the tune of <cite>My Bonny</cite>:</p>
<blockquote><p>
Your mashup is probably legal.<br />
Your mashup is probably sound.<br />
Your mashup is probably legal,<br />
So pass all that data around!</p>
<p>Stuff here<br />
Stuff there<br />
And something mashed up in between (be-tween!)<br />
Stuff here<br />
Stuff there<br />
And something mashed up in between</p>
<p>Your mashup is probably legal;<br />
You could monetize it as well!<br />
But though I contend it&#8217;s all legal,<br />
Remember I-A-N-A-L!</p>
<p>[<i>Repeat chorus</i>]
</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.jpstacey.info/blog/2008/07/09/the-mashup-song/feed/</wfw:commentRss>
		</item>
		<item>
		<title>OpenTech 2008 was a blast</title>
		<link>http://www.jpstacey.info/blog/2008/07/06/opentech-2008-was-a-blast/</link>
		<comments>http://www.jpstacey.info/blog/2008/07/06/opentech-2008-was-a-blast/#comments</comments>
		<pubDate>Sun, 06 Jul 2008 19:19:20 +0000</pubDate>
		<dc:creator>jps</dc:creator>
		
		<category><![CDATA[conferences]]></category>

		<category><![CDATA[quickies]]></category>

		<category><![CDATA[lowcost]]></category>

		<category><![CDATA[notcon]]></category>

		<category><![CDATA[opentech]]></category>

		<category><![CDATA[opentech2008]]></category>

		<category><![CDATA[speakers]]></category>

		<category><![CDATA[success]]></category>

		<category><![CDATA[unconference]]></category>

		<guid isPermaLink="false">http://www.jpstacey.info/blog/?p=178</guid>
		<description><![CDATA[I went to OT2008; I came back. I did not die, and nor did I dance. It was great fun, but more details to follow.]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been back from <a href="http://www.ukuug.org/events/opentech2008/" >OpenTech 2008</a> for a day now, but what with popping by the Cowley Road carnival haven&#8217;t had a chance to produce a coherent post about it. Suffice it to say, though, that it was a great experience: thanks to all the organizers for such a fantastic event, and for little or no entrance fee. The cheap ULU student bar was also a treat at the end of a hard day&#8217;s, um, conferencering.</p>
<p>The session I comp&egrave;red went reasonably well: I can&#8217;t say my elegant prose exactly sparkled, and I occasionally found myself getting into the subjects being discussed so much that I forgot to flash the &#8220;X minutes left&#8221; warning signs. With that in mind, thanks are due to speakers Ben, Steven, Roo and Nick for both their talks and their patience. Hopefully there&#8217;ll be some area for speakers to upload their slides etc. soon, so I can link their names through to it when that happens.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jpstacey.info/blog/2008/07/06/opentech-2008-was-a-blast/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Embracing minimalism</title>
		<link>http://www.jpstacey.info/blog/2008/06/30/embracing-minimalism/</link>
		<comments>http://www.jpstacey.info/blog/2008/06/30/embracing-minimalism/#comments</comments>
		<pubDate>Mon, 30 Jun 2008 12:47:34 +0000</pubDate>
		<dc:creator>jps</dc:creator>
		
		<category><![CDATA[design]]></category>

		<category><![CDATA[news]]></category>

		<category><![CDATA[projects]]></category>

		<category><![CDATA[quickies]]></category>

		<category><![CDATA[software]]></category>

		<category><![CDATA[alpha]]></category>

		<category><![CDATA[minimalism]]></category>

		<category><![CDATA[pilgrim]]></category>

		<category><![CDATA[straightedge]]></category>

		<category><![CDATA[theme]]></category>

		<category><![CDATA[tomayko]]></category>

		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://www.jpstacey.info/blog/?p=170</guid>
		<description><![CDATA[Graceful Exits goes straight-edge with Straight Edge, a minimalist theme written by yours truly.]]></description>
			<content:encoded><![CDATA[<p>After re-reading <a href="http://www.jpstacey.info/blog/2008/06/22/rss-feeds-keep-them-well-hidden/" >my earlier post</a>, which was in general agreement with Pilgrim and Tomayko&#8217;s minimalism, I decided to practise what I had preached and write a minimalist theme implementing some of the applications of the principles of minimalism. </p>
<p>It&#8217;s called Straight Edge, and I&#8217;ve switched to it today. Once I&#8217;ve finished alpha-testing it I&#8217;ll write more about it, and offer it for download if anyone&#8217;s interested.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jpstacey.info/blog/2008/06/30/embracing-minimalism/feed/</wfw:commentRss>
		</item>
		<item>
		<title>logging.debug(&#8221;if only I&#8217;d known&#8221;)</title>
		<link>http://www.jpstacey.info/blog/2008/05/22/loggingdebugif-only-id-known/</link>
		<comments>http://www.jpstacey.info/blog/2008/05/22/loggingdebugif-only-id-known/#comments</comments>
		<pubDate>Thu, 22 May 2008 20:36:43 +0000</pubDate>
		<dc:creator>jps</dc:creator>
		
		<category><![CDATA[quickies]]></category>

		<category><![CDATA[debugging]]></category>

		<category><![CDATA[django]]></category>

		<category><![CDATA[googlejuice]]></category>

		<category><![CDATA[logging]]></category>

		<category><![CDATA[simon]]></category>

		<category><![CDATA[willison]]></category>

		<guid isPermaLink="false">http://www.jpstacey.info/blog/2008/05/22/loggingdebugif-only-id-known/</guid>
		<description><![CDATA[logging.debug("if only I'd known") logging.debug("if only I'd known") /* is there any way to turn this off? */ logging.debug("if only I'd known") ....]]></description>
			<content:encoded><![CDATA[<p>I wish Simon Willison had <a href="http://simonwillison.net/2008/May/22/debugging/" >written about Django logging and debugging</a> earlier than today. That way I wouldn&#8217;t have used the slightly daft solution I describe in the comments.</p>
<p>Of course, <em>much</em> earlier than today, and he&#8217;d have had to have written it before giving the talk that it was based on, which might sound a bit demanding on my part. But hey! I don&#8217;t make the rules.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jpstacey.info/blog/2008/05/22/loggingdebugif-only-id-known/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
