<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<feed xmlns="http://www.w3.org/2005/Atom">

	<title>Planet London Python</title>
	<link rel="self" href="http://londonpython.org.uk/atom.xml"/>
	<link href="http://londonpython.org.uk/"/>
	<id>http://londonpython.org.uk/atom.xml</id>
	<updated>2010-03-10T22:22:33+00:00</updated>
	<generator uri="http://www.planetplanet.org/">Planet/2.0 +http://www.planetplanet.org</generator>

	<entry xml:lang="en-US">
		<title type="html">Links for 2010-03-09 [del.icio.us]</title>
		<link href="http://feedproxy.google.com/~r/ForSomeValueOfMagic/~3/pMcf4u47uI8/steve.holden"/>
		<id>http://del.icio.us/steve.holden#2010-03-09</id>
		<updated>2010-03-10T08:00:00+00:00</updated>
		<content type="html">&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.huffingtonpost.com/andy-thayer/court-allows-torture-suit_b_488374.html&quot;&gt;Court Allows Torture Suit Against Rumsfeld&lt;/a&gt;&lt;br /&gt;
Perhaps this will make public officials think twice about putting themselves above the law&lt;/li&gt;
&lt;/ul&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/ForSomeValueOfMagic/~4/pMcf4u47uI8&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</content>
		<author>
			<name>Steve</name>
			<email>noreply@blogger.com</email>
			<uri>http://holdenweb.blogspot.com/</uri>
		</author>
		<source>
			<title type="html">For Some Value of &quot;Magic&quot;</title>
			<subtitle type="html">Python, software, open source, plus odd rants about almost anything</subtitle>
			<link rel="self" href="http://holdenweb.blogspot.com/atom.xml"/>
			<id>tag:blogger.com,1999:blog-496482</id>
			<updated>2010-03-10T08:22:30+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en-us">
		<title type="html">Links for 2010-03-09 [del.icio.us]</title>
		<link href="http://feedproxy.google.com/~r/SmallValuesOfCool/~3/3QEDmLxSTiM/brunns"/>
		<id>http://del.icio.us/brunns#2010-03-09</id>
		<updated>2010-03-10T08:00:00+00:00</updated>
		<content type="html">&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.panic.com/blog/2010/03/the-panic-status-board/&quot;&gt;The Panic Status Board&lt;/a&gt;&lt;br /&gt;
A nice Big Visible status display&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.technologyreview.com/blog/arxiv/24903/?ref=rss&quot;&gt;How to build a superluminal computer&lt;/a&gt;&lt;br /&gt;
Faster than light computing. Awesome. Might even run Ruby at an acceptable speed. ;-)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.beerintheevening.com/pubs/s/51/5173/&quot;&gt;Globe, Covent Garden&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://news.bbc.co.uk/1/hi/sci/tech/8556585.stm&quot;&gt;BBC News - UK Skynet military satellite system extended&lt;/a&gt;&lt;br /&gt;
Skynet? What&amp;#039;s wrong with these people?&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.firstcamelsdale.org/&quot;&gt;First Camelsdale Cubs&lt;/a&gt;&lt;br /&gt;
Steve&amp;#039;s Django/Pinax site.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://redline6561.livejournal.com/362393.html&quot;&gt;Setting up a Mercurial VCS on Ubuntu&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://vagrantup.com/&quot;&gt;Vagrant&lt;/a&gt;&lt;br /&gt;
&amp;quot;Automated creation and provisioning of virtual machines using VirtualBox.&amp;quot; Nice.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.b-list.org/weblog/2006/jun/13/how-django-processes-request/&quot;&gt;How Django processes a request&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content>
		<author>
			<name>Simon Brunning</name>
			<uri>http://www.brunningonline.net/simon/blog/</uri>
		</author>
		<source>
			<title type="html">Small Values of Cool</title>
			<subtitle type="html">Simon Brunning - stuff that I find interesting</subtitle>
			<link rel="self" href="http://feeds.feedburner.com/SmallValuesOfCool"/>
			<id>http://feeds.feedburner.com/SmallValuesOfCool</id>
			<updated>2010-03-10T08:22:16+00:00</updated>
			<rights type="html">Copyright 2010</rights>
		</source>
	</entry>

	<entry>
		<title type="html">Encoding json on Silverlight with System.Json</title>
		<link href="http://feedproxy.google.com/~r/voidspace/~3/Azh7wTTlPww/arch_d7_2010_03_06.shtml"/>
		<id>http://feedproxy.google.com/~r/voidspace/~3/Azh7wTTlPww/arch_d7_2010_03_06.shtml</id>
		<updated>2010-03-10T00:01:49+00:00</updated>
		<content type="html">At the backend of last I year I wrote a blog entry on decoding json on Silverlight. Well, the time has finally come and we're now encoding json to post back to our Django application. ... [292 words]&lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.feedburner.com/~ff/voidspace?a=Azh7wTTlPww:Hizsq9eFCmQ:F7zBnMyn0Lo&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/voidspace?i=Azh7wTTlPww:Hizsq9eFCmQ:F7zBnMyn0Lo&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/voidspace?a=Azh7wTTlPww:Hizsq9eFCmQ:V_sGLiPBpWU&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/voidspace?i=Azh7wTTlPww:Hizsq9eFCmQ:V_sGLiPBpWU&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/voidspace?a=Azh7wTTlPww:Hizsq9eFCmQ:gIN9vFwOqvQ&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/voidspace?i=Azh7wTTlPww:Hizsq9eFCmQ:gIN9vFwOqvQ&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/voidspace?a=Azh7wTTlPww:Hizsq9eFCmQ:dnMXMwOfBR0&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/voidspace?d=dnMXMwOfBR0&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/voidspace/~4/Azh7wTTlPww&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</content>
		<author>
			<name>Fuzzyman</name>
			<uri>http://www.voidspace.org.uk/python/weblog/index.shtml</uri>
		</author>
		<source>
			<title type="html">The Voidspace Techie Blog</title>
			<subtitle type="html">Python Programming, news on the Voidspace Python Projects and all things techie.</subtitle>
			<link rel="self" href="http://feeds.feedburner.com/voidspace"/>
			<id>http://feeds.feedburner.com/voidspace</id>
			<updated>2010-03-10T00:22:07+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en-uk">
		<title type="html">Speed test between django_mongokit and postgresql_psycopg2</title>
		<link href="http://www.peterbe.com/plog/speed-test-between-django_mongokit-and-postgresql_psycopg2"/>
		<id>http://www.peterbe.com/plog/speed-test-between-django_mongokit-and-postgresql_psycopg2</id>
		<updated>2010-03-09T14:38:00+00:00</updated>
		<content type="html">&lt;p&gt;Following on from yesterday's blog about &lt;a href=&quot;http://www.peterbe.com/plog/how-and-why-to-use-django-mongokit&quot;&gt;How and why to use django-mongokit&lt;/a&gt; I extended the exampleproject which is inside the &lt;a href=&quot;http://github.com/peterbe/django-mongokit&quot;&gt;django-mongokit&lt;/a&gt; project with another app called &lt;code&gt;exampleapp_sql&lt;/code&gt; which does the same thing as the &lt;code&gt;exampleapp&lt;/code&gt; but does it with SQL instead. Then I added a very simple &lt;a href=&quot;http://github.com/peterbe/django-mongokit/blob/master/exampleproject/benchmarker/views.py&quot;&gt;benchmarker app&lt;/a&gt; in the same project and wrote three functions:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; One to create 10/100/500/1000 instances of my class&lt;/li&gt;
&lt;li&gt; One to edit one field of all 10/100/500/1000 instances&lt;/li&gt;
&lt;li&gt; One to delete each of the 10/100/500/1000 instances&lt;/li&gt;

&lt;/ol&gt;&lt;br /&gt;[&lt;a href=&quot;http://www.peterbe.com/plog/speed-test-between-django_mongokit-and-postgresql_psycopg2&quot;&gt;325 more words&lt;/a&gt;]</content>
		<author>
			<name>Peter Bengtsson</name>
			<uri>http://www.peterbe.com</uri>
		</author>
		<source>
			<title type="html">Peterbe.com</title>
			<subtitle type="html">Peter Bengtssons's personal homepage about little things that concern him.</subtitle>
			<link rel="self" href="http://www.peterbe.com/rss.xml?oc=Python&amp;oc=Zope"/>
			<id>http://www.peterbe.com/rss.xml?oc=Python&amp;oc=Zope</id>
			<updated>2010-03-10T22:22:14+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en-US">
		<title type="html">Links for 2010-03-08 [del.icio.us]</title>
		<link href="http://feedproxy.google.com/~r/ForSomeValueOfMagic/~3/81Wh-mD2Fxo/steve.holden"/>
		<id>http://del.icio.us/steve.holden#2010-03-08</id>
		<updated>2010-03-09T08:00:00+00:00</updated>
		<content type="html">&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.alternet.org/story/145943/15_reasons_why_we_need_a_revolt_in_this_country&quot;&gt;15 Reasons Why We Need a Revolt in This Country&lt;/a&gt;&lt;br /&gt;
Quite.&lt;/li&gt;
&lt;/ul&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/ForSomeValueOfMagic/~4/81Wh-mD2Fxo&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</content>
		<author>
			<name>Steve</name>
			<email>noreply@blogger.com</email>
			<uri>http://holdenweb.blogspot.com/</uri>
		</author>
		<source>
			<title type="html">For Some Value of &quot;Magic&quot;</title>
			<subtitle type="html">Python, software, open source, plus odd rants about almost anything</subtitle>
			<link rel="self" href="http://holdenweb.blogspot.com/atom.xml"/>
			<id>tag:blogger.com,1999:blog-496482</id>
			<updated>2010-03-10T08:22:30+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en-us">
		<title type="html">Links for 2010-03-08 [del.icio.us]</title>
		<link href="http://feedproxy.google.com/~r/SmallValuesOfCool/~3/_2g6vx5rbKs/brunns"/>
		<id>http://del.icio.us/brunns#2010-03-08</id>
		<updated>2010-03-09T08:00:00+00:00</updated>
		<content type="html">&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.wimbledonguardian.co.uk/news/5046943.Work_to_start_on_most_hated_building_in_Colliers_Wood_/?ref=rss&quot;&gt;Work to start on most hated building in Colliers Wood?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Yo_La_Tengo&quot;&gt;Yo La Tengo&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content>
		<author>
			<name>Simon Brunning</name>
			<uri>http://www.brunningonline.net/simon/blog/</uri>
		</author>
		<source>
			<title type="html">Small Values of Cool</title>
			<subtitle type="html">Simon Brunning - stuff that I find interesting</subtitle>
			<link rel="self" href="http://feeds.feedburner.com/SmallValuesOfCool"/>
			<id>http://feeds.feedburner.com/SmallValuesOfCool</id>
			<updated>2010-03-10T08:22:16+00:00</updated>
			<rights type="html">Copyright 2010</rights>
		</source>
	</entry>

	<entry xml:lang="en-uk">
		<title type="html">How and why to use django-mongokit (aka. Django to MongoDB)</title>
		<link href="http://www.peterbe.com/plog/how-and-why-to-use-django-mongokit"/>
		<id>http://www.peterbe.com/plog/how-and-why-to-use-django-mongokit</id>
		<updated>2010-03-08T11:00:00+00:00</updated>
		<content type="html">&lt;p&gt;&lt;a href=&quot;http://www.peterbe.com/plog/how-and-why-to-use-django-mongokit/mongo2django.png&quot;&gt;&lt;img src=&quot;http://www.peterbe.com/plog/how-and-why-to-use-django-mongokit/display-thumbnail/mongo2django.png&quot; alt=&quot;How and why to use django-mongokit&quot; class=&quot;floatright&quot; border=&quot;1&quot; /&gt;&lt;/a&gt;
Here I'm going to explain how to combine
&lt;a href=&quot;http://www.djangoproject.com/&quot;&gt;Django&lt;/a&gt; and
&lt;a href=&quot;http://www.mongodb.org/display/DOCS/Home&quot;&gt;MongoDB&lt;/a&gt; using
&lt;a href=&quot;http://bitbucket.org/namlook/mongokit/wiki/Home&quot;&gt;MongoKit&lt;/a&gt; and
&lt;a href=&quot;http://github.com/peterbe/django-mongokit&quot;&gt;django-mongokit&lt;/a&gt;. &lt;/p&gt;
&lt;p&gt;MongoDB is a document store built for high speed and high concurrency
with a very good redundancy story. It's an alternative to relational
databases (e.g. MySQL) that is what Django is tightly coupled with in
it's ORM (Object Relation Mapping) and what it's called now is ODM
(Object Document Mapping) in lack of a better acronym. That's where
MongoKit comes in. It's written in Python and it connects to the
MongoDB database using a library called
&lt;a href=&quot;http://api.mongodb.org/python/1.4%2B/index.html&quot;&gt;pymongo&lt;/a&gt; and it turns
data from the MongoDB and turns it into instances of classes you have
defined. MongoKit has nothing to do with Django. That's where
django-mongokit comes in. Written by yours truly.&lt;/p&gt;&lt;br /&gt;[&lt;a href=&quot;http://www.peterbe.com/plog/how-and-why-to-use-django-mongokit&quot;&gt;1551 more words&lt;/a&gt;]</content>
		<author>
			<name>Peter Bengtsson</name>
			<uri>http://www.peterbe.com</uri>
		</author>
		<source>
			<title type="html">Peterbe.com</title>
			<subtitle type="html">Peter Bengtssons's personal homepage about little things that concern him.</subtitle>
			<link rel="self" href="http://www.peterbe.com/rss.xml?oc=Python&amp;oc=Zope"/>
			<id>http://www.peterbe.com/rss.xml?oc=Python&amp;oc=Zope</id>
			<updated>2010-03-10T22:22:14+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en-US">
		<title type="html">Links for 2010-03-07 [del.icio.us]</title>
		<link href="http://feedproxy.google.com/~r/ForSomeValueOfMagic/~3/GED8Iqec5N8/steve.holden"/>
		<id>http://del.icio.us/steve.holden#2010-03-07</id>
		<updated>2010-03-08T08:00:00+00:00</updated>
		<content type="html">&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://blogs.discovermagazine.com/badastronomy/2008/09/08/ten-things-you-dont-know-about-the-earth/&quot;&gt;Ten things you don&amp;rsquo;t know about the Earth&lt;/a&gt;&lt;br /&gt;
Interesting stuff&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.developer.com/open/article.php/3868471/article.htm&quot;&gt;The Top 10 jQuery Plugins for the JavaScript-Weary&lt;/a&gt;&lt;br /&gt;
More good jQuery stuff&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.aboyandhiscomputer.com/Greetings_from_Idiot_America.html&quot;&gt;Greetings from Idiot America&lt;/a&gt;&lt;br /&gt;
Truer by the day&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.jazzradio.com/classicjazz&quot;&gt;Classic Jazz on JazzRadio.com&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/ForSomeValueOfMagic/~4/GED8Iqec5N8&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</content>
		<author>
			<name>Steve</name>
			<email>noreply@blogger.com</email>
			<uri>http://holdenweb.blogspot.com/</uri>
		</author>
		<source>
			<title type="html">For Some Value of &quot;Magic&quot;</title>
			<subtitle type="html">Python, software, open source, plus odd rants about almost anything</subtitle>
			<link rel="self" href="http://holdenweb.blogspot.com/atom.xml"/>
			<id>tag:blogger.com,1999:blog-496482</id>
			<updated>2010-03-10T08:22:30+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en-US">
		<title type="html">Links for 2010-03-06 [del.icio.us]</title>
		<link href="http://feedproxy.google.com/~r/ForSomeValueOfMagic/~3/raG8ZIzweI0/steve.holden"/>
		<id>http://del.icio.us/steve.holden#2010-03-06</id>
		<updated>2010-03-07T08:00:00+00:00</updated>
		<content type="html">&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.nytimes.com/2010/03/07/technology/07reboot.html&quot;&gt;New York Isn&amp;rsquo;t Silicon Valley, and That&amp;rsquo;s Why They Like It&lt;/a&gt;&lt;br /&gt;
Interesting discussion of the high-tech startup scene in New York&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://bibletastic.com/zombieslarge.html&quot;&gt;Zombie Invasion! - Bibletastic.com&lt;/a&gt;&lt;br /&gt;
Well, this strikes me as funny though I regret it may offend some of my friends&lt;/li&gt;
&lt;/ul&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/ForSomeValueOfMagic/~4/raG8ZIzweI0&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</content>
		<author>
			<name>Steve</name>
			<email>noreply@blogger.com</email>
			<uri>http://holdenweb.blogspot.com/</uri>
		</author>
		<source>
			<title type="html">For Some Value of &quot;Magic&quot;</title>
			<subtitle type="html">Python, software, open source, plus odd rants about almost anything</subtitle>
			<link rel="self" href="http://holdenweb.blogspot.com/atom.xml"/>
			<id>tag:blogger.com,1999:blog-496482</id>
			<updated>2010-03-10T08:22:30+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en-us">
		<title type="html">Links for 2010-03-05 [del.icio.us]</title>
		<link href="http://feedproxy.google.com/~r/SmallValuesOfCool/~3/ZTBwP9DNPQM/brunns"/>
		<id>http://del.icio.us/brunns#2010-03-05</id>
		<updated>2010-03-06T08:00:00+00:00</updated>
		<content type="html">&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.buzzfeed.com/mathieus/what-would-a-childs-drawing-look-like-if-it-8q4&quot;&gt;Children&amp;rsquo;s Drawings Painted Realistically&lt;/a&gt;&lt;br /&gt;
Eeeek!&lt;/li&gt;
&lt;/ul&gt;</content>
		<author>
			<name>Simon Brunning</name>
			<uri>http://www.brunningonline.net/simon/blog/</uri>
		</author>
		<source>
			<title type="html">Small Values of Cool</title>
			<subtitle type="html">Simon Brunning - stuff that I find interesting</subtitle>
			<link rel="self" href="http://feeds.feedburner.com/SmallValuesOfCool"/>
			<id>http://feeds.feedburner.com/SmallValuesOfCool</id>
			<updated>2010-03-10T08:22:16+00:00</updated>
			<rights type="html">Copyright 2010</rights>
		</source>
	</entry>

	<entry xml:lang="en">
		<title type="html">Fun and (adventure) games at the London Python Dojo</title>
		<link href="http://ramblings.timgolden.me.uk/2010/03/05/fund-and-adventure-games-at-the-london-python-dojo/"/>
		<id>http://ramblings.timgolden.me.uk/2010/03/05/fund-and-adventure-games-at-the-london-python-dojo/</id>
		<updated>2010-03-05T13:16:26+00:00</updated>
		<content type="html">&lt;p&gt;Just saw a &lt;a href=&quot;http://twitter.com/renedudfield&quot;&gt;tweet from Rene&lt;/a&gt; saying that he&amp;#8217;d enjoyed last night&amp;#8217;s Dojo at Fry-IT. I did, too, and for much the same reasons: the small group format makes for a more engaged, friendlier evening. We were carrying on with our not-so-spectacular text adventure game built in previous weeks. Altho&amp;#8217; there had been discussion about different groups working on separate pieces which would then come together, I think our eventual choice for all groups to work on the same thing was the right one. As Nicholas &amp;#8212; Dojo organiser and former teacher :) &amp;#8212; pointed out (correctly): if you&amp;#8217;ve all been working on the same piece of code and the same structures, it&amp;#8217;s much easier to follow the show-and-tell at the end.&lt;/p&gt;
&lt;p&gt;In the spirit of previous Dojos, which had been very much led by TDD-aware people, I&amp;#8217;d got all test-y in our group and we spent way more time in generating meaningful tests than launching into functional code. (As well as reworking the crufty parser which everyone had to cope with). As far as I can tell, *none* of the other groups were testing. Just goes to show&amp;#8230; testing really does slow you down for no nett gain ;)&lt;/p&gt;
&lt;p&gt;It was definitely interesting to see the different styles &amp;#038; approaches adopted by the different groups. As well as their attitude to the source material: most were &amp;#8220;respectful&amp;#8221; of the descriptions and objects supplied (by Bruce &amp;#038; John) but others simply hacked them about to suit their requirements. And one off-the-wall group simply made up their own thing, generating random monsters doing random things. As far as I could tell.&lt;/p&gt;
&lt;p&gt;Although this format worked well, I think varying from time to time is good &amp;#8212; as we have been doing &amp;#8212; not least because different approaches suit different people and we want people to keep coming! Thanks as always to Nicholas and Fry-IT for organising / hosting / feeding. Pictures are &lt;a href=&quot;http://divvyshot.com/event/IsJtx/&quot;&gt;up here&lt;/a&gt;. (Apparently that site&amp;#8217;s Django driven, in case it makes you any more likely to click on the link&amp;#8230;)&lt;/p&gt;</content>
		<author>
			<name>Tim Golden</name>
			<uri>http://ramblings.timgolden.me.uk</uri>
		</author>
		<source>
			<title type="html">Moderate Realism » Tech</title>
			<subtitle type="html">The ramblings of Tim Golden</subtitle>
			<link rel="self" href="http://ramblings.timgolden.me.uk/category/tech/feed"/>
			<id>http://ramblings.timgolden.me.uk/category/tech/feed</id>
			<updated>2010-03-05T16:22:09+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en-US">
		<title type="html">Links for 2010-03-04 [del.icio.us]</title>
		<link href="http://feedproxy.google.com/~r/ForSomeValueOfMagic/~3/c9eCBra8iI8/steve.holden"/>
		<id>http://del.icio.us/steve.holden#2010-03-04</id>
		<updated>2010-03-05T08:00:00+00:00</updated>
		<content type="html">&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.geekchix.org/blog/2010/01/03/a-collection-of-printable-sketch-templates-and-sketch-books-for-wireframing/&quot;&gt;Printable Sketch Templates and Sketch Books for Wireframing&lt;/a&gt;&lt;br /&gt;
Useful designer tools&lt;/li&gt;
&lt;/ul&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/ForSomeValueOfMagic/~4/c9eCBra8iI8&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</content>
		<author>
			<name>Steve</name>
			<email>noreply@blogger.com</email>
			<uri>http://holdenweb.blogspot.com/</uri>
		</author>
		<source>
			<title type="html">For Some Value of &quot;Magic&quot;</title>
			<subtitle type="html">Python, software, open source, plus odd rants about almost anything</subtitle>
			<link rel="self" href="http://holdenweb.blogspot.com/atom.xml"/>
			<id>tag:blogger.com,1999:blog-496482</id>
			<updated>2010-03-10T08:22:30+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en-us">
		<title type="html">Links for 2010-03-04 [del.icio.us]</title>
		<link href="http://feedproxy.google.com/~r/SmallValuesOfCool/~3/aVXXJoNCXfY/brunns"/>
		<id>http://del.icio.us/brunns#2010-03-04</id>
		<updated>2010-03-05T08:00:00+00:00</updated>
		<content type="html">&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://eis-blog.ucsc.edu/2010/02/space-invaders-enterprise-edition/&quot;&gt;Space Invaders, Enterprise Edition&lt;/a&gt;&lt;br /&gt;
Funny. I mean, this is a joke, right?&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://daringfireball.net/2010/03/this_apple_htc_patent_thing&quot;&gt;Daring Fireball: This Apple-HTC Patent Thing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://orestis.gr/blog/2010/03/04/promise-pattern/&quot;&gt;The promise pattern&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://agiletesting.blogspot.com/2010/03/automated-deployment-systems-push-vs.html&quot;&gt;Automated deployment systems: push vs. pull&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://jt400.sourceforge.net/&quot;&gt;JTOpen&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://simple.sourceforge.net/home.php&quot;&gt;Simple&lt;/a&gt;&lt;br /&gt;
XML serialization and configuration framework for Java&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://phet.colorado.edu/sims/my-solar-system/my-solar-system_en.html&quot;&gt;My Solar System&lt;/a&gt;&lt;br /&gt;
Fun!&lt;/li&gt;
&lt;/ul&gt;</content>
		<author>
			<name>Simon Brunning</name>
			<uri>http://www.brunningonline.net/simon/blog/</uri>
		</author>
		<source>
			<title type="html">Small Values of Cool</title>
			<subtitle type="html">Simon Brunning - stuff that I find interesting</subtitle>
			<link rel="self" href="http://feeds.feedburner.com/SmallValuesOfCool"/>
			<id>http://feeds.feedburner.com/SmallValuesOfCool</id>
			<updated>2010-03-10T08:22:16+00:00</updated>
			<rights type="html">Copyright 2010</rights>
		</source>
	</entry>

	<entry xml:lang="en">
		<title type="html">What do we use Python for at work?</title>
		<link href="http://ramblings.timgolden.me.uk/2010/03/04/what-do-we-use-python-for-at-work/"/>
		<id>http://ramblings.timgolden.me.uk/2010/03/04/what-do-we-use-python-for-at-work/</id>
		<updated>2010-03-04T16:44:52+00:00</updated>
		<content type="html">&lt;p&gt;Not uncommonly, I suspect, Python was introduced here at work in stealth mode: it wasn&amp;#8217;t on the list of products starting with &amp;#8220;MS&amp;#8221; which we genreally use, but it got the job done and the management has been pragmatic enough to accept its use to the extent that it&amp;#8217;s now installed on the baseline image for company PCs and laptops.&lt;/p&gt;
&lt;p&gt;So what do we do with it? Well, a surprising amount when I start to enumerate it. As is often the case, quite a few of the uses are of the &amp;#8220;glue&amp;#8221; style: creating an easy bridge between two other pieces of software, one of which is often the operating system. As an example I years ago wrote a (tiny) piece of code to enumerate the installed printers and pipe them out to a file. Our in-house business app calls the Python and picks up the result to display to the user as a pick list. That&amp;#8217;s just one example among many others, some of which are so small that I tend to forget that they exist until some bizarre corner case arises which means I have to revisit the code. They just work and go on working.&lt;/p&gt;
&lt;p&gt;A by no means exhaustive list of Python Pieces off the top of my head:&lt;/p&gt;
&lt;p&gt;* That list of printers&lt;br /&gt;
* The startup wrapper for our main business app&lt;br /&gt;
* sql2xl &amp;#8212; provider of data to the masses (and indirectly responsible for a world of Frankensheets, I&amp;#8217;m afraid).&lt;br /&gt;
* Sales Boards - our Pygame-driven availability-visualisation app&lt;br /&gt;
* reports - a compact module combining simple dialogs and sql2xl&lt;br /&gt;
* screengrabber - capture parts of the screen to save to the database&lt;br /&gt;
* imageviewer - simple pygame-based image display&lt;br /&gt;
* convert images provided by our customers to thumbnails and place them on a replicating database for our handheld scanners&lt;br /&gt;
* convert a batch of Word docs to PDF &amp;#038; PCL&lt;br /&gt;
* simple manipulation of DXF maps to add our internal site ids&lt;br /&gt;
* absolutely loads of occasional AD / filesystem / WMI scripts for the sysadmins&lt;br /&gt;
* the internal contacts / portraits webpage&lt;br /&gt;
* web-based password reset for our HR system&lt;br /&gt;
* web front-end, mail ingest and alerting (a la &lt;a href=&quot;http://pypi.python.org/pypi/roundup&quot;&gt;Roundup&lt;/a&gt;, I admit) for our Helpdesk system&lt;/p&gt;
&lt;p&gt;.. and a whole slew of other stuff which pretty much exists to demonstrate just how versatile Python is :)&lt;/p&gt;</content>
		<author>
			<name>Tim Golden</name>
			<uri>http://ramblings.timgolden.me.uk</uri>
		</author>
		<source>
			<title type="html">Moderate Realism » Tech</title>
			<subtitle type="html">The ramblings of Tim Golden</subtitle>
			<link rel="self" href="http://ramblings.timgolden.me.uk/category/tech/feed"/>
			<id>http://ramblings.timgolden.me.uk/category/tech/feed</id>
			<updated>2010-03-05T16:22:09+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en">
		<title type="html">Breathing life into the active_directory module</title>
		<link href="http://ramblings.timgolden.me.uk/2010/03/04/breathing-life-into-the-active_directory-module/"/>
		<id>http://ramblings.timgolden.me.uk/2010/03/04/breathing-life-into-the-active_directory-module/</id>
		<updated>2010-03-04T16:35:18+00:00</updated>
		<content type="html">&lt;p&gt;For a long time I&amp;#8217;ve not been able to give my &lt;a href=&quot;http://timgolden.me.uk/python/active_directory.html&quot;&gt;active_directory module&lt;/a&gt; the attention it&amp;#8217;s needed, in spite of several people helpfully providing patches to, eg, escape slashes in monikers, bind to the Global Catalog and do other useful things. However&amp;#8230; the need to do various things with it at work plus some questions from interested users has resulted in a flurry of housekeeping and &amp;#8212; hopefully &amp;#8212; improvements. It&amp;#8217;s not done yet but, assuming I can sustain the effort, you should see the result in a few days time.&lt;/p&gt;
&lt;p&gt;As with much of my stuff, the functionality I implement and the time I spend on it is largely a function of what the sysadmins here at work want me to for them (and how much else I can squeeze in at the same time). Just at the moment there are several initiatives to claw back wasted disc space and do other housekeeping exercises. So I get to allocate some time to my projects. Let&amp;#8217;s see how long it lasts&amp;#8230;&lt;/p&gt;</content>
		<author>
			<name>Tim Golden</name>
			<uri>http://ramblings.timgolden.me.uk</uri>
		</author>
		<source>
			<title type="html">Moderate Realism » Tech</title>
			<subtitle type="html">The ramblings of Tim Golden</subtitle>
			<link rel="self" href="http://ramblings.timgolden.me.uk/category/tech/feed"/>
			<id>http://ramblings.timgolden.me.uk/category/tech/feed</id>
			<updated>2010-03-05T16:22:09+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">The all new and improved unittest: unittest2</title>
		<link href="http://feedproxy.google.com/~r/voidspace/~3/nSk1RqOgJ0M/arch_d7_2010_02_27.shtml"/>
		<id>http://feedproxy.google.com/~r/voidspace/~3/nSk1RqOgJ0M/arch_d7_2010_02_27.shtml</id>
		<updated>2010-03-04T13:43:29+00:00</updated>
		<content type="html">At PyCon I gave a talk on some of the new features that are coming to unittest. unittest is the Python standard library testing framework. ... [346 words]&lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.feedburner.com/~ff/voidspace?a=nSk1RqOgJ0M:aBj6rNqmQms:F7zBnMyn0Lo&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/voidspace?i=nSk1RqOgJ0M:aBj6rNqmQms:F7zBnMyn0Lo&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/voidspace?a=nSk1RqOgJ0M:aBj6rNqmQms:V_sGLiPBpWU&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/voidspace?i=nSk1RqOgJ0M:aBj6rNqmQms:V_sGLiPBpWU&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/voidspace?a=nSk1RqOgJ0M:aBj6rNqmQms:gIN9vFwOqvQ&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/voidspace?i=nSk1RqOgJ0M:aBj6rNqmQms:gIN9vFwOqvQ&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/voidspace?a=nSk1RqOgJ0M:aBj6rNqmQms:dnMXMwOfBR0&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/voidspace?d=dnMXMwOfBR0&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/voidspace/~4/nSk1RqOgJ0M&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</content>
		<author>
			<name>Fuzzyman</name>
			<uri>http://www.voidspace.org.uk/python/weblog/index.shtml</uri>
		</author>
		<source>
			<title type="html">The Voidspace Techie Blog</title>
			<subtitle type="html">Python Programming, news on the Voidspace Python Projects and all things techie.</subtitle>
			<link rel="self" href="http://feeds.feedburner.com/voidspace"/>
			<id>http://feeds.feedburner.com/voidspace</id>
			<updated>2010-03-10T00:22:07+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">New Release: ConfigObj 4.7.2</title>
		<link href="http://feedproxy.google.com/~r/voidspace/~3/xSn3L-dZMRQ/arch_d7_2010_02_27.shtml"/>
		<id>http://feedproxy.google.com/~r/voidspace/~3/xSn3L-dZMRQ/arch_d7_2010_02_27.shtml</id>
		<updated>2010-03-04T12:28:07+00:00</updated>
		<content type="html">A new version of ConfigObj has just been released: 4.7.2 This is a bugfix release with several important bugfixes. It is recommended that all users of ConfigObj 4.7 update. ... [447 words]&lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.feedburner.com/~ff/voidspace?a=xSn3L-dZMRQ:Kno80G4pVJU:F7zBnMyn0Lo&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/voidspace?i=xSn3L-dZMRQ:Kno80G4pVJU:F7zBnMyn0Lo&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/voidspace?a=xSn3L-dZMRQ:Kno80G4pVJU:V_sGLiPBpWU&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/voidspace?i=xSn3L-dZMRQ:Kno80G4pVJU:V_sGLiPBpWU&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/voidspace?a=xSn3L-dZMRQ:Kno80G4pVJU:gIN9vFwOqvQ&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/voidspace?i=xSn3L-dZMRQ:Kno80G4pVJU:gIN9vFwOqvQ&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/voidspace?a=xSn3L-dZMRQ:Kno80G4pVJU:dnMXMwOfBR0&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/voidspace?d=dnMXMwOfBR0&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/voidspace/~4/xSn3L-dZMRQ&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</content>
		<author>
			<name>Fuzzyman</name>
			<uri>http://www.voidspace.org.uk/python/weblog/index.shtml</uri>
		</author>
		<source>
			<title type="html">The Voidspace Techie Blog</title>
			<subtitle type="html">Python Programming, news on the Voidspace Python Projects and all things techie.</subtitle>
			<link rel="self" href="http://feeds.feedburner.com/voidspace"/>
			<id>http://feeds.feedburner.com/voidspace</id>
			<updated>2010-03-10T00:22:07+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en">
		<title type="html">The promise pattern</title>
		<link href="http://orestis.gr/blog/2010/03/04/promise-pattern/"/>
		<id>http://orestis.gr/blog/2010/03/04/promise-pattern/</id>
		<updated>2010-03-04T08:14:35+00:00</updated>
		<content type="html">&lt;p&gt;After reading my &lt;a href=&quot;http://foolish-assertions.blogspot.com/2010/03/joy-of-self.html&quot;&gt;William Reade's post about a small path library&lt;/a&gt; he wrote to tame a build script, I thought I'd share a cool trick that has helped me greatly in the current project - the promise pattern.
&lt;/p&gt;
&lt;p&gt;The code itself is greatly simple:
&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;class FilePromise(object):

    def __init__(self, filename, basepath=None):
        self.basepath = basepath
        self.filename = filename

    def fetch(self):
        filepath = self.filename
        if self.basepath is not None:
            filepath = os.path.join(self.basepath, filepath)
        return open(filepath)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;The cool thing about this is not the code itself, but the amazing flexibility it offers your code when instead of working with paths and files, you work with promises. All you need to do to support arbitrary data sources is create a class with a &lt;code&gt;filename&lt;/code&gt; attribute (which might not make sense in some cases, but is useful for debugging) and a &lt;code&gt;fetch&lt;/code&gt; method that will return a file-like object. 
&lt;/p&gt;
&lt;p&gt;I have so far implemented additional promises that:
&lt;/p&gt;
&lt;ul&gt;
 &lt;li&gt;
     Fetch files from a CouchDB database
 &lt;/li&gt;

 &lt;li&gt;
     Decode embedded images in SVG 
 &lt;/li&gt;

 &lt;li&gt;
     Crop and resize images (well not yet really, but plan to)
 &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Why not use a path element like William does? In my case, I really do not care about the file system, I just care about contents. A promise also can easily be replaced for testing reasons - just create a small MemoryPromise that will return data passed in the constructor as a StringIO.
&lt;/p&gt;
&lt;p&gt;Why not pass around a file-like object? Two reasons - it's hard to debug (how do you print that?) but mainly, the &lt;code&gt;fetch&lt;/code&gt; method might be expensive, and should be run near the point the contents will be used, not at construction time.  Also, the intent of the code becomes clearer this way, I think.
&lt;/p&gt;
&lt;p&gt;The idea is stolen from Cocoa's drag-and-drop system, where a drag source can either supply the drag data directly to the drop target, or provide a promise the target will follow-up, if it's expensive to provide the data up-front. Hopefully Apple will not sue me. In drag-and-drop a lot of times a drag is initiated but not completed (user changes his mind) so this way an expensive calculation is avoided.
&lt;/p&gt;
&lt;p&gt;Something I haven't yet considered is how to embed this in an async program. Presumably an AsyncPromise fetch will return a deferred that will fire when the data is ready. The client code needs to be expecting this though. I've seen twisted's &lt;code&gt;maybeDeferred&lt;/code&gt; for this kind of pattern, I'll follow up if I can do this.
&lt;/p&gt;




&lt;a href=&quot;http://orestis.gr/blog/2010/03/04/promise-pattern/#comments&quot;&gt;Comments&lt;/a&gt;</content>
		<author>
			<name>Orestis Markou</name>
			<uri>http://orestis.gr/tags/python/</uri>
		</author>
		<source>
			<title type="html">Posts tagged with python</title>
			<subtitle type="html">Posts tagged with python</subtitle>
			<link rel="self" href="http://orestis.gr/feeds/tag/python/"/>
			<id>http://orestis.gr/feeds/tag/python/</id>
			<updated>2010-03-10T22:22:21+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en-US">
		<title type="html">Links for 2010-03-03 [del.icio.us]</title>
		<link href="http://feedproxy.google.com/~r/ForSomeValueOfMagic/~3/GfusUuVHUXQ/steve.holden"/>
		<id>http://del.icio.us/steve.holden#2010-03-03</id>
		<updated>2010-03-04T08:00:00+00:00</updated>
		<content type="html">&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://creativenerds.co.uk/freebies/25-free-must-download-design-programs/&quot;&gt;25 Free Must Download Design Programs&lt;/a&gt;&lt;br /&gt;
Some goodies here&lt;/li&gt;
&lt;/ul&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/ForSomeValueOfMagic/~4/GfusUuVHUXQ&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</content>
		<author>
			<name>Steve</name>
			<email>noreply@blogger.com</email>
			<uri>http://holdenweb.blogspot.com/</uri>
		</author>
		<source>
			<title type="html">For Some Value of &quot;Magic&quot;</title>
			<subtitle type="html">Python, software, open source, plus odd rants about almost anything</subtitle>
			<link rel="self" href="http://holdenweb.blogspot.com/atom.xml"/>
			<id>tag:blogger.com,1999:blog-496482</id>
			<updated>2010-03-10T08:22:30+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en-us">
		<title type="html">Links for 2010-03-03 [del.icio.us]</title>
		<link href="http://feedproxy.google.com/~r/SmallValuesOfCool/~3/W9st1A0MHXE/brunns"/>
		<id>http://del.icio.us/brunns#2010-03-03</id>
		<updated>2010-03-04T08:00:00+00:00</updated>
		<content type="html">&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.guardian.co.uk/commentisfree/2010/mar/03/national-stereotypes-fashion-figure-skating&quot;&gt;National stereotypes are thriving &amp;ndash; at least in fashion and figure skating&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content>
		<author>
			<name>Simon Brunning</name>
			<uri>http://www.brunningonline.net/simon/blog/</uri>
		</author>
		<source>
			<title type="html">Small Values of Cool</title>
			<subtitle type="html">Simon Brunning - stuff that I find interesting</subtitle>
			<link rel="self" href="http://feeds.feedburner.com/SmallValuesOfCool"/>
			<id>http://feeds.feedburner.com/SmallValuesOfCool</id>
			<updated>2010-03-10T08:22:16+00:00</updated>
			<rights type="html">Copyright 2010</rights>
		</source>
	</entry>

	<entry>
		<title type="html">An Awesome PyCon</title>
		<link href="http://feedproxy.google.com/~r/voidspace/~3/4NZULgvAl6I/arch_d7_2010_02_27.shtml"/>
		<id>http://feedproxy.google.com/~r/voidspace/~3/4NZULgvAl6I/arch_d7_2010_02_27.shtml</id>
		<updated>2010-03-04T00:07:07+00:00</updated>
		<content type="html">As always PyCon was awesome, I had a great time catching up with old friends and making some new friends. The conference wasn't bad either... ... [876 words]&lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.feedburner.com/~ff/voidspace?a=4NZULgvAl6I:BpfF7RXAS3w:F7zBnMyn0Lo&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/voidspace?i=4NZULgvAl6I:BpfF7RXAS3w:F7zBnMyn0Lo&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/voidspace?a=4NZULgvAl6I:BpfF7RXAS3w:V_sGLiPBpWU&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/voidspace?i=4NZULgvAl6I:BpfF7RXAS3w:V_sGLiPBpWU&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/voidspace?a=4NZULgvAl6I:BpfF7RXAS3w:gIN9vFwOqvQ&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/voidspace?i=4NZULgvAl6I:BpfF7RXAS3w:gIN9vFwOqvQ&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/voidspace?a=4NZULgvAl6I:BpfF7RXAS3w:dnMXMwOfBR0&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/voidspace?d=dnMXMwOfBR0&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/voidspace/~4/4NZULgvAl6I&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</content>
		<author>
			<name>Fuzzyman</name>
			<uri>http://www.voidspace.org.uk/python/weblog/index.shtml</uri>
		</author>
		<source>
			<title type="html">The Voidspace Techie Blog</title>
			<subtitle type="html">Python Programming, news on the Voidspace Python Projects and all things techie.</subtitle>
			<link rel="self" href="http://feeds.feedburner.com/voidspace"/>
			<id>http://feeds.feedburner.com/voidspace</id>
			<updated>2010-03-10T00:22:07+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en-us">
		<title type="html">Links for 2010-03-02 [del.icio.us]</title>
		<link href="http://feedproxy.google.com/~r/SmallValuesOfCool/~3/rDx_mFIVIQc/brunns"/>
		<id>http://del.icio.us/brunns#2010-03-02</id>
		<updated>2010-03-03T08:00:00+00:00</updated>
		<content type="html">&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://jacobian.org/writing/tohell/&quot;&gt;To hell with web standards&lt;/a&gt;&lt;br /&gt;
&amp;quot;Secret W3C member lists? Anonymous holds? What is this, the Senate?&lt;br /&gt;
&lt;br /&gt;
Some might say this is Adobe’s fault.&lt;br /&gt;
&lt;br /&gt;
Bullshit: what possible purpose could secret lists and anonymous holds offer except to allow — no, to condone — this behavior. The process allows this kind of action; I blame the process.&amp;quot;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://dustin.github.com/2010/02/28/running-processes.html#osx&quot;&gt;Running Processes&lt;/a&gt;&lt;br /&gt;
&amp;quot;Run this program, and restart it if it falls over.&amp;quot; Nice.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.technologyreview.com/blog/arxiv/24876/?ref=rss&quot;&gt;Why Elastic Wings Are The Key To Flapping Flight&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.oreillynet.com/pub/a/oreilly/java/news/javaxslt_0801.html&quot;&gt;Top Ten Java and XSLT Tips&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://onjava.com/pub/a/onjava/excerpt/java_xslt_ch5/index.html?page=4&quot;&gt;XSLT Processing with Java - O'Reilly Media&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://oreilly.com/catalog/javaxslt/chapter/ch05.html&quot;&gt;Java and XSLT: Chapter 5: XSLT Processing with Java&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.edankert.com/transforms/xslt.invoke-java.html&quot;&gt;Call Java methods from within XSLT&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content>
		<author>
			<name>Simon Brunning</name>
			<uri>http://www.brunningonline.net/simon/blog/</uri>
		</author>
		<source>
			<title type="html">Small Values of Cool</title>
			<subtitle type="html">Simon Brunning - stuff that I find interesting</subtitle>
			<link rel="self" href="http://feeds.feedburner.com/SmallValuesOfCool"/>
			<id>http://feeds.feedburner.com/SmallValuesOfCool</id>
			<updated>2010-03-10T08:22:16+00:00</updated>
			<rights type="html">Copyright 2010</rights>
		</source>
	</entry>

	<entry xml:lang="en-us">
		<title type="html">Links for 2010-03-01 [del.icio.us]</title>
		<link href="http://feedproxy.google.com/~r/SmallValuesOfCool/~3/mLY6darLQAE/brunns"/>
		<id>http://del.icio.us/brunns#2010-03-01</id>
		<updated>2010-03-02T08:00:00+00:00</updated>
		<content type="html">&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://exogen.github.com/nose-achievements/&quot;&gt;Unit Test Achievements&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://bitbucket.org/garybernhardt/expecter-gadget/&quot;&gt;Expecter Gadget&lt;/a&gt;&lt;br /&gt;
&amp;quot;Better expectations (assertions) for Python&amp;quot;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://simonwillison.net/2010/Feb/28/johnny/&quot;&gt;Johnny Cache&lt;/a&gt;&lt;br /&gt;
&amp;quot;Clever twist on ORM-level caching for Django.&amp;quot;&lt;/li&gt;
&lt;/ul&gt;</content>
		<author>
			<name>Simon Brunning</name>
			<uri>http://www.brunningonline.net/simon/blog/</uri>
		</author>
		<source>
			<title type="html">Small Values of Cool</title>
			<subtitle type="html">Simon Brunning - stuff that I find interesting</subtitle>
			<link rel="self" href="http://feeds.feedburner.com/SmallValuesOfCool"/>
			<id>http://feeds.feedburner.com/SmallValuesOfCool</id>
			<updated>2010-03-10T08:22:16+00:00</updated>
			<rights type="html">Copyright 2010</rights>
		</source>
	</entry>

	<entry xml:lang="en-uk">
		<title type="html">Massive improvement on sorting a fat list</title>
		<link href="http://www.peterbe.com/plog/massive-improvement-on-sorting-a-fat-list"/>
		<id>http://www.peterbe.com/plog/massive-improvement-on-sorting-a-fat-list</id>
		<updated>2010-02-28T15:00:00+00:00</updated>
		<content type="html">&lt;p&gt;&lt;a href=&quot;http://www.issuetrackerproduct.com/Download#IssueTrackerMassContainer&quot;&gt;IssueTrackerMassContainer&lt;/a&gt; is a simple Zope product that is used to put a bunch of &lt;a href=&quot;http://www.issuetrackerproduct.com/&quot;&gt;IssueTrackerProduct&lt;/a&gt; instances into. It doesn't add much apart from a nice looking dashboard that lists all recent issues and then with an AJAX poll it keeps updating automatically. &lt;/p&gt;
&lt;p&gt;But what it was doing was it recursively put together &lt;strong&gt;all&lt;/strong&gt; issues across all issue trackers, sorting them and then returning only the first 20. Fine, but once the numbers start to add up it can become a vast sort operation to deal with. &lt;/p&gt;
&lt;p&gt;In my local development copy of &lt;strong&gt;814&lt;/strong&gt; issues, by the use of &lt;a href=&quot;http://code.google.com/p/pympler/&quot;&gt;pympler&lt;/a&gt; and &lt;code&gt;time()&lt;/code&gt; I was able to go from &lt;strong&gt;7 Mb&lt;/strong&gt; taking &lt;strong&gt;2 seconds&lt;/strong&gt; down to using only &lt;strong&gt;8 Kb&lt;/strong&gt; and taking &lt;strong&gt;0.05 seconds&lt;/strong&gt;.&lt;/p&gt;&lt;br /&gt;[&lt;a href=&quot;http://www.peterbe.com/plog/massive-improvement-on-sorting-a-fat-list&quot;&gt;409 more words&lt;/a&gt;]</content>
		<author>
			<name>Peter Bengtsson</name>
			<uri>http://www.peterbe.com</uri>
		</author>
		<source>
			<title type="html">Peterbe.com</title>
			<subtitle type="html">Peter Bengtssons's personal homepage about little things that concern him.</subtitle>
			<link rel="self" href="http://www.peterbe.com/rss.xml?oc=Python&amp;oc=Zope"/>
			<id>http://www.peterbe.com/rss.xml?oc=Python&amp;oc=Zope</id>
			<updated>2010-03-10T22:22:14+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en">
		<title type="html">Synchronizing Slides &amp;amp; Audio For A Screencast</title>
		<link href="http://feedproxy.google.com/~r/Magpiebrain/~3/bj3QoKGY5AQ/"/>
		<id>http://www.magpiebrain.com/?p=816</id>
		<updated>2010-02-27T15:28:51+00:00</updated>
		<content type="html">&lt;p&gt;At a recent ThoughtWorks techy meetup, we recorded a couple of videos for internal use. One of them involved someone speaking to slides. The problem was that we had no projector, and our flip camera wasn&amp;#8217;t really up to doing a great job of filming the screen. So the problem I was faced with was the best way to synchronize the audio track from the video to the slides. &lt;/p&gt;
&lt;p&gt;What follows is a far from efficient workflow that allowed me to sync the audio track with the slides. The only constraint was my skills, and the fact that I only had freeware software and whatever came with the mac (iLife 08).&lt;/p&gt;
&lt;h3&gt;0. Convert Flip AVI -&gt; mp4&lt;/h3&gt;
&lt;p&gt;I&amp;#8217;m not sure if I needed to do this, but I figured the OSX tools would play nicer with m4v than with the avi&amp;#8217;s from the Flip. I didn&amp;#8217;t have the Flip software installed. I used &lt;a href=&quot;http://handbrake.fr/&quot;&gt;Handbrake&lt;/a&gt; to convert the video.&lt;/p&gt;
&lt;h3&gt;1. Import into GarageBand to rip out the audio track&lt;/h3&gt;
&lt;p&gt;I probably could of done this via Handbrake, but it was fairly easy to do in &lt;a href=&quot;http://www.apple.com/ilife/garageband/&quot;&gt;GarageBand&lt;/a&gt;. I imported the video, selected the video track, and removed it.&lt;/p&gt;
&lt;h3&gt;2. Convert the Keynote slides to Images&lt;/h3&gt;
&lt;p&gt;Given that I was in GarageBand, I figured I&amp;#8217;d create a podcast, using the Keynote slides as artwork for the podcast. Exporting the slides as JPEG is a simple job &amp;#8211; I chose to have Keynote create one image for each stage in a transition. I then imported the JPEGs into Aperture so I could access them via GarageBand&amp;#8217;s media browser.&lt;/p&gt;
&lt;h3&gt;3. Add the artwork to the podcast&lt;/h3&gt;
&lt;p&gt;You&amp;#8217;ll need to make sure the Podcast track and the media browser is visible. Then, it&amp;#8217;s a simple matter of dragging in the relevant slide in sync with the audio track. The UI is pretty intuitive.&lt;/p&gt;
&lt;h3&gt;4. Export the podcast&lt;/h3&gt;
&lt;p&gt;Now it gets trickier. At this point, GarageBand thinks we have an audio, rather than video, podcast. I tried exporting into iTunes, but just got an audio track &amp;#8211; I&amp;#8217;m sure the artwork would show up on my iPhone, but I want a movie for uploading to our internal video hosting service (we have Google apps, so get Google Video). &lt;/p&gt;
&lt;p&gt;What I ended up doing was exporting to &lt;a href=&quot;http://www.apple.com/ilife/iweb/&quot;&gt;iWeb&lt;/a&gt;, exporting out the resulting Podcast site, then grabbing the resulting quicktime movie. This quicktime movie was almost what I wanted &amp;#8211; a video, with the audio track from the flip, with synchronized slides. But I wanted to do a couple more things &amp;#8211; namely I wanted to split the presentation into two parts (5-10min videos are easier for people to digest than a single 20min presentation), and add some additional titles.&lt;/p&gt;
&lt;h3&gt;5. Split and add titles&lt;/h3&gt;
&lt;p&gt;Luckily, &lt;a href=&quot;http://www.apple.com/ilife/imovie/&quot;&gt;iMovie&lt;/a&gt; can handle this. I&amp;#8217;m fairly sure it was able to directly import the quicktime movie. Adding the titles is a little fiddly, far worse is the simple task of splitting the movie itself. I hope to try iMove 09 soon to see if this is improved.&lt;/p&gt;
&lt;p&gt;It was at this point I realised I had an issue &amp;#8211; namely that the artwork you embed in podcasts via GarageBand is limited to a square, 300&amp;#215;300 pixel dimensions. This led to some clipping of the slides. If I have to use this workflow again, I&amp;#8217;ll make sure to export square slides from keynote in the first place.&lt;/p&gt;
&lt;h3&gt;6. Export and upload&lt;/h3&gt;
&lt;p&gt;Which is finally where things got easy. &lt;/p&gt;
&lt;h3&gt;Notes&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;The GarageBand project was &lt;em&gt;massive&lt;/em&gt;. The two resulting videos from iMovie were less than 15MB &amp;#8211; the GarageBand project which just contained the slides and the audio track was over 450MB.&lt;/li&gt;
&lt;li&gt;I&amp;#8217;d love to find a better option for syncing the artwork &amp;#8211; being limited to 300&amp;#215;300 pixels is a pain, especially when I&amp;#8217;m uploading to a video hosting service capable of much higher quality widescreen playback.&lt;/li&gt;
&lt;li&gt;I like the power of iMovie, but I dislike the UI intensely. I&amp;#8217;d love to be able to increase/decrease clip selection using the keyboard for more control.&lt;/li&gt;
&lt;li&gt;For some reason Google Video too &lt;em&gt;ages&lt;/em&gt; to process the two small videos &amp;#8211; significantly larger videos uploaded afterwards were available within a few minutes. It is possible that the small, squashed size of the movie gave the transcoding a problem, or it may just of been a transient glitch, but I ended up having to wait overnight for them to finally be available.&lt;/li&gt;
&lt;li&gt;I&amp;#8217;d love to know of a better workflow using free/cheap software, so please get in touch if you have any ideas!&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.feedburner.com/~ff/Magpiebrain?a=bj3QoKGY5AQ:zJw9kKqEtRk:yIl2AUoC8zA&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/Magpiebrain?d=yIl2AUoC8zA&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/Magpiebrain?a=bj3QoKGY5AQ:zJw9kKqEtRk:7Q72WNTAKBA&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/Magpiebrain?d=7Q72WNTAKBA&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/Magpiebrain?a=bj3QoKGY5AQ:zJw9kKqEtRk:D7DqB2pKExk&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/Magpiebrain?i=bj3QoKGY5AQ:zJw9kKqEtRk:D7DqB2pKExk&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/Magpiebrain?a=bj3QoKGY5AQ:zJw9kKqEtRk:dnMXMwOfBR0&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/Magpiebrain?d=dnMXMwOfBR0&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;</content>
		<author>
			<name>Sam Newman</name>
			<uri>http://www.magpiebrain.com</uri>
		</author>
		<source>
			<title type="html">Magpiebrain</title>
			<subtitle type="html">The blog of Sam Newman</subtitle>
			<link rel="self" href="http://feeds.feedburner.com/Magpiebrain"/>
			<id>http://feeds.feedburner.com/Magpiebrain</id>
			<updated>2010-02-27T16:22:04+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en-US">
		<title type="html">Small Python from Synapse is a Big Deal</title>
		<link href="http://feedproxy.google.com/~r/ForSomeValueOfMagic/~3/HAnAbNpnTro/small-python-from-synapse-is-big-deal.html"/>
		<id>tag:blogger.com,1999:blog-496482.post-8984371707857259913</id>
		<updated>2010-02-25T06:49:13+00:00</updated>
		<content type="html">The guys from Synapse didn't appear to be at PyCon this year, but they impressed me last year with their hacking of the &quot;Easy Button&quot; to tweet on Twitter when the button was pressed.&lt;br /&gt;
&lt;br /&gt;
It seems they are still impressing people, as they have just been awarded a &lt;a href=&quot;http://www.marketwire.com/press-release/Synapses-SNAP-Named-Product-of-the-Year-by-SmartGridTMCnetcom-1121463.htm&quot;&gt;&lt;i&gt;SmartGrid.TMCnet.com Product of the Year &lt;/i&gt;award&lt;/a&gt;. Congratulations to them - I am sure they will be a significant Python user in future.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/496482-8984371707857259913?l=holdenweb.blogspot.com&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;&lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.feedburner.com/~ff/ForSomeValueOfMagic?a=HAnAbNpnTro:Auh1QMwz_R8:yIl2AUoC8zA&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/ForSomeValueOfMagic?d=yIl2AUoC8zA&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/ForSomeValueOfMagic?a=HAnAbNpnTro:Auh1QMwz_R8:Jy2wSXVWK38&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/ForSomeValueOfMagic?i=HAnAbNpnTro:Auh1QMwz_R8:Jy2wSXVWK38&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/ForSomeValueOfMagic/~4/HAnAbNpnTro&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</content>
		<author>
			<name>Steve</name>
			<email>noreply@blogger.com</email>
			<uri>http://holdenweb.blogspot.com/</uri>
		</author>
		<source>
			<title type="html">For Some Value of &quot;Magic&quot;</title>
			<subtitle type="html">Python, software, open source, plus odd rants about almost anything</subtitle>
			<link rel="self" href="http://holdenweb.blogspot.com/atom.xml"/>
			<id>tag:blogger.com,1999:blog-496482</id>
			<updated>2010-03-10T08:22:30+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en-US">
		<title type="html">Links for 2010-02-22 [del.icio.us]</title>
		<link href="http://feedproxy.google.com/~r/ForSomeValueOfMagic/~3/3rKtt7YBrsE/steve.holden"/>
		<id>http://del.icio.us/steve.holden#2010-02-22</id>
		<updated>2010-02-23T08:00:00+00:00</updated>
		<content type="html">&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://github.com/jacobian/django-deployment-workshop&quot;&gt;jacobian's django-deployment-workshop&lt;/a&gt;&lt;br /&gt;
Django Deployment Workshop&lt;/li&gt;
&lt;/ul&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/ForSomeValueOfMagic/~4/3rKtt7YBrsE&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</content>
		<author>
			<name>Steve</name>
			<email>noreply@blogger.com</email>
			<uri>http://holdenweb.blogspot.com/</uri>
		</author>
		<source>
			<title type="html">For Some Value of &quot;Magic&quot;</title>
			<subtitle type="html">Python, software, open source, plus odd rants about almost anything</subtitle>
			<link rel="self" href="http://holdenweb.blogspot.com/atom.xml"/>
			<id>tag:blogger.com,1999:blog-496482</id>
			<updated>2010-03-10T08:22:30+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en">
		<title type="html">pycon as seen from across the Tweet</title>
		<link href="http://ramblings.timgolden.me.uk/2010/02/22/pycon-as-seen-from-across-the-tweet/"/>
		<id>http://ramblings.timgolden.me.uk/2010/02/22/pycon-as-seen-from-across-the-tweet/</id>
		<updated>2010-02-22T10:20:42+00:00</updated>
		<content type="html">&lt;p&gt;That was an interesting experience: I (re)started using Twitter a couple of weeks ago, for no particular reason except that it seemed to be an increasingly significant backchannel of information around Python, meaning that useful information passes through it which is then assumed or referred to in other forums [*] such as the Python mailing lists or people&amp;#8217;s blog posts.&lt;/p&gt;
&lt;p&gt;But by fortunate coincidence that meant that I was able to watch the #pycon Twitter stream and get a more immediate flavour of the conference than I would have by following later blog posts. Obviously it was quite fun watching people try to get their questions on the screen for Guido&amp;#8217;s keynote speech (took me a while to realise what was going on&amp;#8230;). &lt;/p&gt;
&lt;p&gt;Throughout the conference you get a mixture of the very immediate (&amp;#8221;Has anyone got a Mac VGA Adapter for Room C?&amp;#8221;), the impending (&amp;#8221;BoF Session for Ruby Enthusiasts in the downstairs toilets&amp;#8221;), the infinitely retweeted (&amp;#8221;Unladen Swallow&amp;#8230;.&amp;#8221;), the humorously overheard (&amp;#8221;OH: OK; Yak shaved&amp;#8221;), the running-joke (&amp;#8221;Bring goat food to the Testing Sprint&amp;#8221;), the contentious (&amp;#8221;We were more diverse&amp;#8230;&amp;#8221;), the you-had-to-be-there (&amp;#8221;Looks like @djangopony was left unattended&amp;#8221;), the gratitude (&amp;#8221;Thanks to everyone&amp;#8230;&amp;#8221;) and of course the plain exhausted (&amp;#8221;Back home now after #pycon&amp;#8221;).&lt;/p&gt;
&lt;p&gt;I obviously didn&amp;#8217;t follow everything in real time, not least because of the time difference: I do have other things to do with my time :) But it was enjoyable watching other people enjoy themselves and feeling at least a spectator to an Occasion in the Python year. Now all I&amp;#8217;ve got to do is find time to catch up with slides, video presentations, and A Little Bit of Python.&lt;/p&gt;
&lt;p&gt;[*] Note to pedants: seems to me that &amp;#8220;forum&amp;#8221; has become an English word by adoption which means that you can justifiably form its plural by adding an &amp;#8220;s&amp;#8221;. If I were talking about meeting places of the Ancient World I might argue for the more classical &amp;#8220;fora&amp;#8221;.&lt;/p&gt;</content>
		<author>
			<name>Tim Golden</name>
			<uri>http://ramblings.timgolden.me.uk</uri>
		</author>
		<source>
			<title type="html">Moderate Realism » Tech</title>
			<subtitle type="html">The ramblings of Tim Golden</subtitle>
			<link rel="self" href="http://ramblings.timgolden.me.uk/category/tech/feed"/>
			<id>http://ramblings.timgolden.me.uk/category/tech/feed</id>
			<updated>2010-03-05T16:22:09+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en-US">
		<title type="html">#PyCon on Twitter ... or wait for posts like these.</title>
		<link href="http://feedproxy.google.com/~r/ForSomeValueOfMagic/~3/_Ko7PjJx0pU/john-graves-new-zealand-reader-wrote-in.html"/>
		<id>tag:blogger.com,1999:blog-496482.post-6621735295308540900</id>
		<updated>2010-02-20T02:37:47+00:00</updated>
		<content type="html">John Graves, a New Zealand reader, wrote in to let me know:&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;Plug for PyConPads
&lt;a class=&quot;moz-txt-link-freetext&quot; href=&quot;http://bit.ly/dgBcpA&quot;&gt;http://bit.ly/dgBcpA&lt;/a&gt;

Plug for PyCon 2010 Slides
&lt;a class=&quot;moz-txt-link-freetext&quot; href=&quot;http://bit.ly/dASBF7&quot;&gt;http://bit.ly/dASBF7&lt;/a&gt;

By the way, New Zealand had a very successful Kiwi PyCon last November:
&lt;a class=&quot;moz-txt-link-freetext&quot; href=&quot;http://nz.pycon.org/&quot;&gt;http://nz.pycon.org/&lt;/a&gt;&lt;/pre&gt;&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span&gt;Thanks, John. Hope this gives the links a little extra publicity.&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/pre&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/496482-6621735295308540900?l=holdenweb.blogspot.com&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;&lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.feedburner.com/~ff/ForSomeValueOfMagic?a=_Ko7PjJx0pU:-13FPAUqkIA:yIl2AUoC8zA&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/ForSomeValueOfMagic?d=yIl2AUoC8zA&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/ForSomeValueOfMagic?a=_Ko7PjJx0pU:-13FPAUqkIA:Jy2wSXVWK38&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/ForSomeValueOfMagic?i=_Ko7PjJx0pU:-13FPAUqkIA:Jy2wSXVWK38&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/ForSomeValueOfMagic/~4/_Ko7PjJx0pU&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</content>
		<author>
			<name>Steve</name>
			<email>noreply@blogger.com</email>
			<uri>http://holdenweb.blogspot.com/</uri>
		</author>
		<source>
			<title type="html">For Some Value of &quot;Magic&quot;</title>
			<subtitle type="html">Python, software, open source, plus odd rants about almost anything</subtitle>
			<link rel="self" href="http://holdenweb.blogspot.com/atom.xml"/>
			<id>tag:blogger.com,1999:blog-496482</id>
			<updated>2010-03-10T08:22:30+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en">
		<title type="html">Async needs syntax support</title>
		<link href="http://orestis.gr/blog/2010/02/19/async-needs-syntax-support/"/>
		<id>http://orestis.gr/blog/2010/02/19/async-needs-syntax-support/</id>
		<updated>2010-02-19T20:51:06+00:00</updated>
		<content type="html">&lt;p&gt;OH: &amp;quot;async won't take hold until it sucks less.&amp;quot; It cannot suck less because we are writing async code in languages designed to be procedural, given that you read them top-to-bottom.
&lt;/p&gt;
&lt;p&gt;I am starting to get more familiar with Twisted and it is indeed very powerful. Even if I don't like it, I will never do any network or async stuff using threads any more. Other libraries may be nicer for web but when you want a variety of protocols Twisted is the only game in town.
&lt;/p&gt;
&lt;p&gt;The thing is, Python is a procedural language. You write commands top-to-bottom, and they are executed as such. When you want to encapsulate things running in parallel, or at a later time, you put them in a function and register that. There are more things you want to do - block until all results have come in, or fail early if one result fails and so on.
&lt;/p&gt;
&lt;p&gt;The best way to visualise this is to use some kind of visual support - think arrows flowing around and whatnot - but it will be clunky and hard to implement, and mind you us Vim users will hate it (of course there's going to be an emacs plugin soon ;).
&lt;/p&gt;
&lt;p&gt;So I don't think async will start to suck less soon, because the basic way we get to interact with it is just the wrong approach. I've no idea what a better approach would be though.
&lt;/p&gt;




&lt;a href=&quot;http://orestis.gr/blog/2010/02/19/async-needs-syntax-support/#comments&quot;&gt;Comments&lt;/a&gt;</content>
		<author>
			<name>Orestis Markou</name>
			<uri>http://orestis.gr/tags/python/</uri>
		</author>
		<source>
			<title type="html">Posts tagged with python</title>
			<subtitle type="html">Posts tagged with python</subtitle>
			<link rel="self" href="http://orestis.gr/feeds/tag/python/"/>
			<id>http://orestis.gr/feeds/tag/python/</id>
			<updated>2010-03-10T22:22:21+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en-US">
		<title type="html">A Python 3 Idiom?</title>
		<link href="http://feedproxy.google.com/~r/ForSomeValueOfMagic/~3/dCEUEWSXf4k/python-3-idiom.html"/>
		<id>tag:blogger.com,1999:blog-496482.post-4093076572069936866</id>
		<updated>2010-02-18T00:04:59+00:00</updated>
		<content type="html">A while ago I wrote a short Python 3 snippet as &lt;a href=&quot;http://holdenweb.blogspot.com/2009/05/factory-functions.html&quot;&gt;an introduction to a post about factory functions&lt;/a&gt;. Second thoughts are proverbially the best, and I realised that in the following code:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span class=&quot;k&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;powers&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;):&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;    return&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;a&lt;/span&gt;

&lt;span class=&quot;n&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;square&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;cube&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;powers&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;10&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;print&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;square&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;cube&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;
the last two lines could be refactored as:&lt;br /&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span class=&quot;k&quot;&gt;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;print&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;*powers(10)&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;
This technique is ineffective in Python 2, where &lt;b&gt;print&lt;/b&gt; is a statement and the syntax would be invalid.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/496482-4093076572069936866?l=holdenweb.blogspot.com&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;&lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.feedburner.com/~ff/ForSomeValueOfMagic?a=dCEUEWSXf4k:oOWUzaVMBvY:yIl2AUoC8zA&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/ForSomeValueOfMagic?d=yIl2AUoC8zA&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/ForSomeValueOfMagic?a=dCEUEWSXf4k:oOWUzaVMBvY:Jy2wSXVWK38&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/ForSomeValueOfMagic?i=dCEUEWSXf4k:oOWUzaVMBvY:Jy2wSXVWK38&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/ForSomeValueOfMagic/~4/dCEUEWSXf4k&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</content>
		<author>
			<name>Steve</name>
			<email>noreply@blogger.com</email>
			<uri>http://holdenweb.blogspot.com/</uri>
		</author>
		<source>
			<title type="html">For Some Value of &quot;Magic&quot;</title>
			<subtitle type="html">Python, software, open source, plus odd rants about almost anything</subtitle>
			<link rel="self" href="http://holdenweb.blogspot.com/atom.xml"/>
			<id>tag:blogger.com,1999:blog-496482</id>
			<updated>2010-03-10T08:22:30+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en-US">
		<title type="html">Customer Hostility</title>
		<link href="http://feedproxy.google.com/~r/ForSomeValueOfMagic/~3/pekMSRQhjjk/customer-unfriendliness.html"/>
		<id>tag:blogger.com,1999:blog-496482.post-5997528934485647541</id>
		<updated>2010-02-17T07:54:24+00:00</updated>
		<content type="html">Seth Godin is right: the world is full of commercial dinosaurs, due to expire shortly. And I will be happy to dance on their graves.&lt;br /&gt;
&lt;br /&gt;
I have written before about the rigors of modern day travel, and the travel industry (or a large part of it) appears to be doing its best to discourage people from traveling. Part of it, of course, is the TSA and its associated stupidities, but I will not again go into the irrationality of spending billions of dollars to make what is already the safest mode of transport in the world even safer (assuming that the TSA is indeed living up to that dubious claim, which I frankly doubt -- otherwise why aren't they shouting from the rooftops about the number of plots they have foiled?)&lt;br /&gt;
&lt;br /&gt;
So today, for &quot;convenience&quot; I am flying to Atlanta. To minimize the airport hassle I have already checked in on-line, and paid $23 for the privilege of checking a bag. Assuming the charge on the way back is the same, this will amount to just over 24% of the price I have already paid for the ticket.&lt;br /&gt;
&lt;br /&gt;
I have always disliked unbundling, ever since I argued in Sun against Eric Schmidt's proposal that Sun unbundle the C compiler from what was then SunOS. Since I was a minion and Eric was a big-shot you can guess how that one went (though Sun's eventual fate makes me glad that I sold my stock at $28). I suppose that's why I'm a socialist: while it may not give each user of a service the absolute lowest possible cost, it's much more efficient to spread the load around. If the rich weren't so mean, the poor could enjoy better lives. Sorry, where was I?&lt;br /&gt;
&lt;br /&gt;
Oh, right. So, I have got through the security theater (doubly inconvenient this trip, since I am carrying two laptops) and I decide that, to conserve battery, I will find a venue that allows me to plug my power brick in. What do I find? Each and every establishment in the newly-refurbished Dulles airport appears to have been designed specifically to exclude any possibility that the on-line traveler such as myself&amp;nbsp; might steal a few joules at their expense.&lt;br /&gt;
&lt;br /&gt;
So, for the record, let me squeak this into the ears of any future airport Eric Schmidts who might be reading. If you provide power and wifi (assuming, of course, that your license from the airport doesn't force you to make your customers rely on the airport's crappy facilities) in your establishment, and advertise that fact, I will support your business in preference to the short-sighted idiots who insist on trying to milk me dry whenever I come into contact with them.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot;&gt;&lt;a href=&quot;http://3.bp.blogspot.com/_JT1n2tt-4Wg/S3rJdOk2u_I/AAAAAAAAAWc/hd1icZoWA_Q/s1600-h/VerizonStupidity.png&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://3.bp.blogspot.com/_JT1n2tt-4Wg/S3rJdOk2u_I/AAAAAAAAAWc/hd1icZoWA_Q/s320/VerizonStupidity.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
So now we come to Verizon Wireless. Having finally found a place quiet enough that I can plug into the power without creating a trip hazard (which, believe me, would be impossible when the airport was anything like busy), and to avoid whatever extortionate rates the airport authority might choose to charge, I plug in my cellular broadband card and fire up the Internet,only to be confronted by a dialog box telling me that I can upgrade. Upgrades are always good, right? Well, yes, but ... here's the dialog box, at the left.&lt;br /&gt;
&lt;br /&gt;
Call me picky if you like, but this seems to me like the ultmate failure in quality assurance. I have to wonder how many pairs of eyeballs scrutinized this dialog box before it went into production, and how come none of the owners of said eyeballs thought to ask the question &quot;What 'Update' button&quot;? I am imagining that each scrutineer, supposing they notice any discrepancy at all between the text in the dialog box and the reality they were presented with, thought to themselves (consciously or otherwise) &quot;Well, clearly they mean the 'Download' button&quot;. To which my immediate response is that they cannot possibly be geeks. I am a geek, and believe me I am intimately familiar with all the shit that can land on your head in short order when you make that kind of dumb-assed assumption. So being a geek, I decline to either &quot;Download&quot;, or &quot;Update&quot; or whatever kind of trouble it is that Verizon would like to get into.&lt;br /&gt;
&lt;br /&gt;
Next I am presented with an opportunity to &quot;view my account&quot;. Now I actually have two accounts with Verizon Wireless, one of which seems to be uncomfortably and inextricably intertwined with my home-based FIOS account. So I am impressed to see both a &quot;register&quot; link &lt;i&gt;and&lt;/i&gt; a pulldown that allows me to select &quot;Business Account&quot; rather than &quot;Personal Account&quot;. Which I do before clicking the &quot;register&quot; link, whereupon I am presented with a form that asks me for quite a bit of information including both my Employer Identification Number (EIN) and my Dun and Bradstreet number.&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://4.bp.blogspot.com/_JT1n2tt-4Wg/S3rJh5G84lI/AAAAAAAAAWk/3ViuKm3qeLM/s1600-h/MoreVerizonStupidity.png&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://4.bp.blogspot.com/_JT1n2tt-4Wg/S3rJh5G84lI/AAAAAAAAAWk/3ViuKm3qeLM/s320/MoreVerizonStupidity.png&quot; /&gt;&lt;/a&gt;Being in an airport, I figure I have done pretty well to produce the former, and I happily fill in the other fields, only to be presented with the message shown at the left. Now, this is telling me a number of things I don't particularly like.&lt;br /&gt;
&lt;br /&gt;
First off, there is something &quot;invalid&quot; about my company name. But of course I am left to &lt;i&gt;guess&lt;/i&gt; what; it would clearly be far too easy to provide any description of the rules that are declaring my company name to be invalid.&lt;br /&gt;
&lt;br /&gt;
Next I am informed that the Tax ID is invalid. I discover by reading the form (not the error message) that this is because I have failed to put a dash between the second and third digits, but apparently the programming monkeys who have put this application together have never thought about maybe, hey, just throwing anything that isn't a digit away. Even though only the digits in this particular identifier carry any meaning. Give me a break.&lt;br /&gt;
&lt;br /&gt;
There is a similar problem with the telephone number, though in this case the programmers have taken the trouble to tell me exactly how the number needs to be formatted (thank you!). I especially like the double period at the end of that line, which implies that not only do I have to put dashes after the third and sixth digits, I also have to put a period at the end of it. This reminds me of many interactions where people have asked me my telephone number and I have replied &quot;eight hundred dash four nine four dash nine one one nine&quot;. Not. This is getting quite cussworthy, but I am restraining myself.&lt;br /&gt;
&lt;br /&gt;
Now the message about the email address again throws me into confusion, since I have (as a look at the form clearly shows) entered my email address one hundred percent correctly. username@domain.com, just like I always type it. So again I am left to guess exactly what about my email address the Verizon system has chosen to declare &quot;invalid&quot;. The f-bomb is now hanging in the air, poised like the sword of Damocles above a web site that has clearly been programmed by monkeys, and not even monkeys with brains.&lt;br /&gt;
&lt;br /&gt;
Lastly, just in case I didn't understand that I should have put that oh-so-important dash between the second and third digits, I am presented with a message that my &quot;Federal Tax ID&quot; was incorrect, as though the form has requested two separate tax IDs (which, by the way, it hasn't).&lt;br /&gt;
&lt;br /&gt;
At this point my almost-forty-three years of programming experience, integrally connected to my geek identity, makes me want to scream &quot;WHAT IS WRONG WITH THESE PEOPLE? DON'T THEY WANT MY [expletive deleted] BUSINESS?&quot;. I swear, at this moment, if there was a button I could click with the label &quot;Consign VerizonWireless and all its employees to hell&quot; I would click it whether or not there was the slightest chance that the click would have any positive effect. It would just make me feel better. I am trying to interact with a corporate entity (which due to a strange and to my mind totally obsolescent notion of law has most of the legal rights of an individual) that doesn't give two hoots what its customers think about it or how infuriating its systems are to use.&lt;br /&gt;
&lt;br /&gt;
At this stage I realize I am not complaining just as a programmer, or even just as a web systems designer, I am complaining as a human being. Where, I ask myself, is the VerizonWireless Quality Assurance department in all this? (They must have one: no corporation of that size can possibly have failed to consider the liability implications of not doing). Did anyone actually take the time to interact with this application and deliberately provide &quot;invalid&quot; answers to determine whether the systems response would be considered reasonable by a human being?&lt;br /&gt;
&lt;br /&gt;
I swear, sometimes, I truly believe that top-level corporate managers' ultimate dream is a system that requires no human intervention at all. If this really is the case then I have to explain (and will do so, given access to the Verizon top level management and a sock full of wet sand, in explicit detail) that they are a long way from reaching their goal.&lt;br /&gt;
&lt;br /&gt;
Sure, we all understand (even those of use who aren't lucky enough to hold stock in public corporations) that a publicly-owned business has a duty to be cost-efficient. We also understand that in a capitalist world we are likely to be forced to interact with entities that don't always choose to employ human labor to interact with its human customers. But in the final analysis, if I personally can choose to pay a few percent more to deal with a business that bothers to pay someone to listen to my problems and help me get my confusion sorted out, I will always take that option.&lt;br /&gt;
&lt;br /&gt;
That is why, being the bloody-minded socialist that I am, I usually choose to stand in line at the supermarket checkout rather than take the option of the &quot;self-service&quot; checkout. I don't &lt;i&gt;want&lt;/i&gt; to serve myself. I want the companies I deal with to pay someone to help me, and I want to be sure that my own business always presents a human face to its human customers. All Holden Web's customers are corporations, but it's their employees that I have to satisfy.&lt;br /&gt;
&lt;br /&gt;
So, if you happen to be a Verizon Wireless stockholder, please ask some awkward questions at the next stockholders meeting. This laziness should be stomped on quickly, and hard.&lt;br /&gt;
&lt;br /&gt;
If you happen to be in the IT industry, please make sure you don't phone it in by producing this kind of shabby excuse for a human interface.&lt;br /&gt;
&lt;br /&gt;
And now I am in Atlanta, and things feel better.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/496482-5997528934485647541?l=holdenweb.blogspot.com&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;&lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.feedburner.com/~ff/ForSomeValueOfMagic?a=pekMSRQhjjk:mTSCDmdofug:yIl2AUoC8zA&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/ForSomeValueOfMagic?d=yIl2AUoC8zA&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/ForSomeValueOfMagic?a=pekMSRQhjjk:mTSCDmdofug:Jy2wSXVWK38&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/ForSomeValueOfMagic?i=pekMSRQhjjk:mTSCDmdofug:Jy2wSXVWK38&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/ForSomeValueOfMagic/~4/pekMSRQhjjk&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</content>
		<author>
			<name>Steve</name>
			<email>noreply@blogger.com</email>
			<uri>http://holdenweb.blogspot.com/</uri>
		</author>
		<source>
			<title type="html">For Some Value of &quot;Magic&quot;</title>
			<subtitle type="html">Python, software, open source, plus odd rants about almost anything</subtitle>
			<link rel="self" href="http://holdenweb.blogspot.com/atom.xml"/>
			<id>tag:blogger.com,1999:blog-496482</id>
			<updated>2010-03-10T08:22:30+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en-US">
		<title type="html">Software QA Rant</title>
		<link href="http://feedproxy.google.com/~r/ForSomeValueOfMagic/~3/r35iXTNWQUI/software-qa-rant.html"/>
		<id>tag:blogger.com,1999:blog-496482.post-8544046717112911852</id>
		<updated>2010-02-17T07:43:39+00:00</updated>
		<content type="html">Don't want to publish the whole thing on the Python feed, but &lt;a href=&quot;http://holdenweb.blogspot.com/2010/02/customer-unfriendliness.html&quot;&gt;this post&lt;/a&gt; applies equally to Python users if you have the time to read it ...&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/496482-8544046717112911852?l=holdenweb.blogspot.com&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;&lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.feedburner.com/~ff/ForSomeValueOfMagic?a=r35iXTNWQUI:XjTuOdnK9-0:yIl2AUoC8zA&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/ForSomeValueOfMagic?d=yIl2AUoC8zA&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/ForSomeValueOfMagic?a=r35iXTNWQUI:XjTuOdnK9-0:Jy2wSXVWK38&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/ForSomeValueOfMagic?i=r35iXTNWQUI:XjTuOdnK9-0:Jy2wSXVWK38&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/ForSomeValueOfMagic/~4/r35iXTNWQUI&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</content>
		<author>
			<name>Steve</name>
			<email>noreply@blogger.com</email>
			<uri>http://holdenweb.blogspot.com/</uri>
		</author>
		<source>
			<title type="html">For Some Value of &quot;Magic&quot;</title>
			<subtitle type="html">Python, software, open source, plus odd rants about almost anything</subtitle>
			<link rel="self" href="http://holdenweb.blogspot.com/atom.xml"/>
			<id>tag:blogger.com,1999:blog-496482</id>
			<updated>2010-03-10T08:22:30+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en">
		<title type="html">QCon London</title>
		<link href="http://feedproxy.google.com/~r/Magpiebrain/~3/voCdkn62vlA/"/>
		<id>http://www.magpiebrain.com/?p=787</id>
		<updated>2010-02-16T21:12:20+00:00</updated>
		<content type="html">&lt;p&gt;&lt;a href=&quot;http://www.magpiebrain.com/wp-content/uploads/2010/02/Screen-shot-2010-02-16-at-08.07.11.png&quot;&gt;&lt;img src=&quot;http://www.magpiebrain.com/wp-content/uploads/2010/02/Screen-shot-2010-02-16-at-08.07.11.png&quot; alt=&quot;&quot; title=&quot;QCon Logo&quot; width=&quot;259&quot; height=&quot;101&quot; class=&quot;alignleft size-full wp-image-786&quot; /&gt;&lt;/a&gt; I&amp;#8217;ve been invited to speak on colleague &lt;a href=&quot;http://blog.chris-read.net/&quot;&gt;Chris Read&amp;#8217;s&lt;/a&gt; track at &lt;a href=&quot;http://qconlondon.com/&quot;&gt;QCon London&lt;/a&gt; this March. The track itself is chock full of a number of experienced proffesionals (including two ex-colleagues) so I fully intend to raise my game accordingly. We&amp;#8217;re lucky enough to have Michael T. Nygard speaking too, author of perhaps the best book written for software developers in years in the form of &lt;a href=&quot;http://www.pragprog.com/titles/mnee/release-it&quot;&gt;Release It!&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The track &amp;#8211; &amp;#8220;&lt;a href=&quot;http://qconlondon.com/london-2010/tracks/show_track.jsp?trackOID=331&quot;&gt;Dev and Ops &amp;#8211; a Single Team&lt;/a&gt;&amp;#8221; &amp;#8211; attempts to address many of the issues software professionals have in getting their software live. It will cover many aspects, both on the hardcore technical and on the softer people side. Hopefully it will provide lots of useful information you can take back to your own teams.&lt;/p&gt;
&lt;p&gt;My talk &amp;#8211; &lt;a href=&quot;http://qconlondon.com/london-2010/presentation/From+Dev+to+Production%3A+Better+Living+through+Build+Pipelines+and+Teamwork&quot;&gt;From Dev To Production&lt;/a&gt;- will be giving an overview of build pipelines, and how they can be used to get the whole delivery team focused on the end objective &amp;#8211; shipping quality software as quickly as possible. It draws on some of my recent writing on &lt;a href=&quot;http://www.magpiebrain.com/category/development/build-and-deployment/build-and-deployment-patterns/&quot;&gt;build patterns&lt;/a&gt;, and a wealth of knowledge built up inside ThoughtWorks over the past few years.&lt;/p&gt;
&lt;p&gt;My experience of QCon SF last year was excellent &amp;#8211; I can thoroughly recommend it to any IT professional involved in shipping software. If you haven&amp;#8217;t got your ticket already, &lt;a href=&quot;https://secure.trifork.com/london-2010/registration/&quot;&gt;go get them now&lt;/a&gt; before the prices go up!&lt;/p&gt;
&lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.feedburner.com/~ff/Magpiebrain?a=voCdkn62vlA:dP5CEv5xOvU:yIl2AUoC8zA&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/Magpiebrain?d=yIl2AUoC8zA&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/Magpiebrain?a=voCdkn62vlA:dP5CEv5xOvU:7Q72WNTAKBA&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/Magpiebrain?d=7Q72WNTAKBA&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/Magpiebrain?a=voCdkn62vlA:dP5CEv5xOvU:D7DqB2pKExk&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/Magpiebrain?i=voCdkn62vlA:dP5CEv5xOvU:D7DqB2pKExk&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/Magpiebrain?a=voCdkn62vlA:dP5CEv5xOvU:dnMXMwOfBR0&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/Magpiebrain?d=dnMXMwOfBR0&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;</content>
		<author>
			<name>Sam Newman</name>
			<uri>http://www.magpiebrain.com</uri>
		</author>
		<source>
			<title type="html">Magpiebrain</title>
			<subtitle type="html">The blog of Sam Newman</subtitle>
			<link rel="self" href="http://feeds.feedburner.com/Magpiebrain"/>
			<id>http://feeds.feedburner.com/Magpiebrain</id>
			<updated>2010-02-27T16:22:04+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en">
		<title type="html">Struggling with Test Driven Clojure</title>
		<link href="http://feedproxy.google.com/~r/Magpiebrain/~3/aIG6RoNyxKU/"/>
		<id>http://www.magpiebrain.com/?p=790</id>
		<updated>2010-02-16T20:56:50+00:00</updated>
		<content type="html">&lt;p&gt;&lt;a href=&quot;http://www.magpiebrain.com/2010/02/16/struggling-with-test-driven-clojure/3383144624_0d3b5c53c9/&quot; rel=&quot;attachment wp-att-789&quot;&gt;&lt;img src=&quot;http://www.magpiebrain.com/wp-content/uploads/2010/02/3383144624_0d3b5c53c9-150x150.jpg&quot; alt=&quot;&quot; title=&quot;Puzzled&quot; width=&quot;150&quot; height=&quot;150&quot; class=&quot;alignright  size-thumbnail wp-image-789&quot; /&gt;&lt;/a&gt; I&amp;#8217;ve recently been working on a Clojure application that I hope to open source soon. It&amp;#8217;s been my first experience of using Clojure, and is almost certainly one of the most thought provking things I&amp;#8217;ve done in a long while. One of the things that is still causing me issues is how to go about TDDing Clojure applications &amp;#8211; or rather functional programs in general. &lt;/p&gt;
&lt;p&gt;My natural inclination &amp;#8211; for many reasons &amp;#8211; is to use TDD as my process of choice for developing my code. Beyond its use as a design tool, it&amp;#8217;s having a saftey net to catch me if I screw something up. It allows me to be a little more brave, and drastically reduces the cycle between changing some code and being happy that it works. I&amp;#8217;m used to that saftey net &amp;#8211; I feel lost without it.&lt;/p&gt;
&lt;p&gt;Stuart Halloway said during his Clojure talk at Qcon SF that despite being a TDD fan he finds it hard to TDD in a new language, and I get exactly what he means. A big part of it is that you&amp;#8217;re getting to grips with the idioms, capabilities, libraries and tools associated with your new language &amp;#8211; and a lack of this knowledge is going to impact on your ability to write good tests, let alone worry about implementing them.&lt;/p&gt;
&lt;p&gt;Typically, when learning a new language I try and write a small application that has a real world need. &lt;a href=&quot;http://code.google.com/p/bigvisiblewall/&quot;&gt;BigVisibleWall&lt;/a&gt; was my attempt to learn Scala &amp;#8211; but it had a real goal. With BigVisibleWall, as with my current Clojure project, I started by implementing the system by just writing the production code. I&amp;#8217;m pushing the limits of my knowledge constantly, attempting to understand the size and shape of the solution space that I find myself in with this new tool. Once I got BigVisibleWall working with a small set of features, I broke it down and rewrote it TDD style &amp;#8211; at that point, I had enough Scala (and I mean *just* enough) to be able to do this without it feeling like I was wading through treacle.&lt;/p&gt;
&lt;p&gt;I consciously decided to follow the same pattern with my Clojure project. Code the main logic, get it running, then break it down and rewrite it piece by piece using TDD. But then I hit a problem &amp;#8211; Scala and Java are similar enough languages that my programming style didn&amp;#8217;t have to change much from one to the other. Therefore the way I structured the code and thought about TDD didn&amp;#8217;t have to shift much. In both cases I was driving the design of an Object Oriented system. With Clojure though it wasn&amp;#8217;t just the language which was different, it was so many of the underlying concepts were different. Put simply, I really don&amp;#8217;t know where to begin.&lt;/p&gt;
&lt;p&gt;My first instinct is to start decomposing functions, passing in stubs to the functions under test. But this just feels like I&amp;#8217;m trying to shoehorn IOC-type patterns into a functional program. But what am I left with &amp;#8211; testing large combinations of functions? That feels wrong too.&lt;/p&gt;
&lt;p&gt;So what about you lot out there in blogland? Any other OO types trying to make the switch and encountering the same issues? Or any FP practitioners for whom TDD is second nature? Or does TDD just not fit with FP after all?&lt;/p&gt;
&lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.feedburner.com/~ff/Magpiebrain?a=aIG6RoNyxKU:-HQ8FXtutUY:yIl2AUoC8zA&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/Magpiebrain?d=yIl2AUoC8zA&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/Magpiebrain?a=aIG6RoNyxKU:-HQ8FXtutUY:7Q72WNTAKBA&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/Magpiebrain?d=7Q72WNTAKBA&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/Magpiebrain?a=aIG6RoNyxKU:-HQ8FXtutUY:D7DqB2pKExk&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/Magpiebrain?i=aIG6RoNyxKU:-HQ8FXtutUY:D7DqB2pKExk&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/Magpiebrain?a=aIG6RoNyxKU:-HQ8FXtutUY:dnMXMwOfBR0&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/Magpiebrain?d=dnMXMwOfBR0&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;</content>
		<author>
			<name>Sam Newman</name>
			<uri>http://www.magpiebrain.com</uri>
		</author>
		<source>
			<title type="html">Magpiebrain</title>
			<subtitle type="html">The blog of Sam Newman</subtitle>
			<link rel="self" href="http://feeds.feedburner.com/Magpiebrain"/>
			<id>http://feeds.feedburner.com/Magpiebrain</id>
			<updated>2010-02-27T16:22:04+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en-gb">
		<title type="html">Some questions about the &quot;blocking&quot; of HTML5</title>
		<link href="http://simonwillison.net/2010/Feb/16/html5/"/>
		<id>http://simonwillison.net/2010/Feb/16/html5/</id>
		<updated>2010-02-16T09:11:21+00:00</updated>
		<content type="html">&lt;ol&gt;
&lt;li&gt;When people say that the publication of HTML5 &quot;blocked&quot; by Larry Masinter's &quot;formal objection&quot;, what exactly do they mean?
&lt;/li&gt;
&lt;li&gt;Why does the private w3c-archive mailing list exist? Why can't anyone reveal what happens on there? What are the consequences for doing so? Who gets to be on that list in the first place?
&lt;/li&gt;
&lt;li&gt;Can anyone raise a &quot;formal objection&quot;?&lt;/li&gt;
&lt;li&gt;Is anyone calling for the HTML Working Group to be &quot;rechartered&quot;? If so, what does that involve?&lt;/li&gt;
&lt;li&gt;If there are concerns about the inclusion of Canvas 2D in the specification, why were these not resolved earlier?&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Some &lt;a href=&quot;http://simonwillison.net/tags/html5%2Badobe/&quot;&gt;background reading&lt;/a&gt;. I was planning to fill in answers as they arrive, but I screwed up the moderation of the comments and got flooded with detailed responses - I strongly recommend &lt;a href=&quot;http://simonwillison.net/2010/Feb/16/html5/#comments&quot;&gt;reading the comments&lt;/a&gt;.&lt;/p&gt;

&lt;!-- &lt;p&gt;&lt;a href=&quot;http://simonwillison.net/2010/Feb/16/html5/#comments&quot;&gt;&lt;img src=&quot;http://simonwillison.net/2010/Feb/16/html5/badge.png&quot; alt=&quot;Number of comments&quot;&gt;&lt;/a&gt;&lt;/p&gt; --&gt;</content>
		<author>
			<name>Simon Willison</name>
			<uri>http://simonwillison.net/</uri>
		</author>
		<source>
			<title type="html">Simon Willison's Weblog Entries</title>
			<subtitle type="html">PHP, XML, CSS and general web development</subtitle>
			<link rel="self" href="http://feeds.simonwillison.net/swn-entries"/>
			<id>http://simonwillison.net/</id>
			<updated>2010-03-10T06:22:21+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en">
		<title type="html">Clojure on App Engine – my take</title>
		<link href="http://feedproxy.google.com/~r/Magpiebrain/~3/Nrq7NVPtGJA/"/>
		<id>http://www.magpiebrain.com/?p=777</id>
		<updated>2010-02-14T12:32:23+00:00</updated>
		<content type="html">&lt;p&gt;I&amp;#8217;ve been working on a couple of spare time projects, both of which I hope to release more formally in the next few weeks. One of them involves development of a simple web application for deployment on &lt;a href=&quot;http://code.google.com/appengine/&quot;&gt;Google App Engine&lt;/a&gt;. As part of the development, I had to modify an existing open source Clojure API &amp;#8211; my changes are now available for all.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://github.com/duelinmarkers/appengine-clj&quot;&gt;&lt;code&gt;appengine-clj&lt;/code&gt;&lt;/a&gt; was written by ThoughtWorks colleague John Hume. It provides some Clojure-esque wrappers over Google App Engine&amp;#8217;s user authentication and low level datastore API. John outlines his use of the library in a &lt;a href=&quot;http://elhumidor.blogspot.com/2009/04/clojure-on-google-appengine.html&quot;&gt;highly useful post&lt;/a&gt; on using &lt;a href=&quot;http://github.com/weavejester/compojure&quot;&gt;Compojure&lt;/a&gt; &amp;#038; Clojure on the App Engine &amp;#8211; it was this post which helped immensely in getting started myself.&lt;/p&gt;
&lt;p&gt;There were a couple of minor issues with the latest version of John&amp;#8217;s API which stopped me from being able to use it for my latest project &amp;#8211; so I created a fork to make the changes I wanted. First, a general issue. I love projects which make checkout and build easy and bullet-proof. For me, that means check in the build tool &amp;#038; all dependencies. I know this is a contentious point &amp;#8211; I may well write a post on it later. The other issue is that since the 1.2 version of the SDK some of the APIs have changed a little, so I updated the datastore testing macro accordingly.&lt;/p&gt;
&lt;p&gt;My Clojure skills are highly limited, and the modest modifications are probably botched, but nonetheless it seems to work. My fork can be found &lt;a href=&quot;http://github.com/snewman/appengine-clj&quot;&gt;on GitHub&lt;/a&gt;.&lt;/p&gt;
&lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.feedburner.com/~ff/Magpiebrain?a=Nrq7NVPtGJA:ImaTvr8U55w:yIl2AUoC8zA&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/Magpiebrain?d=yIl2AUoC8zA&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/Magpiebrain?a=Nrq7NVPtGJA:ImaTvr8U55w:7Q72WNTAKBA&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/Magpiebrain?d=7Q72WNTAKBA&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/Magpiebrain?a=Nrq7NVPtGJA:ImaTvr8U55w:D7DqB2pKExk&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/Magpiebrain?i=Nrq7NVPtGJA:ImaTvr8U55w:D7DqB2pKExk&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/Magpiebrain?a=Nrq7NVPtGJA:ImaTvr8U55w:dnMXMwOfBR0&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/Magpiebrain?d=dnMXMwOfBR0&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;</content>
		<author>
			<name>Sam Newman</name>
			<uri>http://www.magpiebrain.com</uri>
		</author>
		<source>
			<title type="html">Magpiebrain</title>
			<subtitle type="html">The blog of Sam Newman</subtitle>
			<link rel="self" href="http://feeds.feedburner.com/Magpiebrain"/>
			<id>http://feeds.feedburner.com/Magpiebrain</id>
			<updated>2010-02-27T16:22:04+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en-US">
		<title type="html">New Python Class Available</title>
		<link href="http://feedproxy.google.com/~r/ForSomeValueOfMagic/~3/N4BjONyFM20/new-python-class-available.html"/>
		<id>tag:blogger.com,1999:blog-496482.post-5242435667200342208</id>
		<updated>2010-02-12T17:32:30+00:00</updated>
		<content type="html">I am happy to announce that the O'Reilly School of Technology have made the &lt;a href=&quot;http://www.oreillyschool.com/courses/python1/&quot;&gt;first of four Python classes&lt;/a&gt; available on their &lt;a href=&quot;http://www.oreillyschool.com/&quot;&gt;interactive teaching system&lt;/a&gt;. Students passing all four modules will be eligible to receive a Certificate for Professional Development from the University of Illinois' Office of Continuing Education.&lt;br /&gt;
&lt;br /&gt;
The PSF has discussed certification schemes in the past, and the general feeling of the membership appeared to be against them. This may be true for high-level personnel and those with advanced degrees, but we should remember that Python will also be increasingly used by technicians and others whose formal educational background does not include a training in computer programming. I feel that a university-approved certification will be helpful at that level.&lt;br /&gt;
&lt;br /&gt;
While many certifications aren't that meritorious, if a scheme requires proper practical experience and the training includes mentoring by live instructors or advisers rather than just the passing of a multiple-choice examination it can have some real value.&lt;br /&gt;
&lt;br /&gt;
Time will tell, but I believe we will have passed a milestone once a university-accredited Python certification scheme is available. All I have to do now is write the other three courses ...&lt;br /&gt;
&lt;br /&gt;
&lt;span&gt;&lt;span&gt;[NOTE: the author of this blog will receive royalties based on the number of students taking the classes mentioned in this article]&lt;/span&gt;&lt;/span&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/496482-5242435667200342208?l=holdenweb.blogspot.com&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;&lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.feedburner.com/~ff/ForSomeValueOfMagic?a=N4BjONyFM20:5eGntct7v5Y:yIl2AUoC8zA&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/ForSomeValueOfMagic?d=yIl2AUoC8zA&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/ForSomeValueOfMagic?a=N4BjONyFM20:5eGntct7v5Y:Jy2wSXVWK38&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/ForSomeValueOfMagic?i=N4BjONyFM20:5eGntct7v5Y:Jy2wSXVWK38&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/ForSomeValueOfMagic/~4/N4BjONyFM20&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</content>
		<author>
			<name>Steve</name>
			<email>noreply@blogger.com</email>
			<uri>http://holdenweb.blogspot.com/</uri>
		</author>
		<source>
			<title type="html">For Some Value of &quot;Magic&quot;</title>
			<subtitle type="html">Python, software, open source, plus odd rants about almost anything</subtitle>
			<link rel="self" href="http://holdenweb.blogspot.com/atom.xml"/>
			<id>tag:blogger.com,1999:blog-496482</id>
			<updated>2010-03-10T08:22:30+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en-US">
		<title type="html">Choose Python</title>
		<link href="http://feedproxy.google.com/~r/ForSomeValueOfMagic/~3/lMtO07cDc2A/choose-python.html"/>
		<id>tag:blogger.com,1999:blog-496482.post-5372457644149557948</id>
		<updated>2010-02-12T10:27:05+00:00</updated>
		<content type="html">Ethan Furman linked to &lt;a href=&quot;http://www1.american.edu/academic.depts/cas/econ/faculty/isaac/choose_python.pdf&quot;&gt;this &quot;Choose Python&quot; poster&lt;/a&gt; on comp.lang.python. While some of the humor might not mean much to people who &lt;i&gt;haven't&lt;/i&gt; chosen Python yet it certainly gave me a smile on a cold, grey morning.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span&gt;[EDIT: as you can see in the comments design credit should go to Tim Lesher] &lt;/span&gt;&lt;/b&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/496482-5372457644149557948?l=holdenweb.blogspot.com&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;&lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.feedburner.com/~ff/ForSomeValueOfMagic?a=lMtO07cDc2A:Tl3Lynl86P4:yIl2AUoC8zA&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/ForSomeValueOfMagic?d=yIl2AUoC8zA&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/ForSomeValueOfMagic?a=lMtO07cDc2A:Tl3Lynl86P4:Jy2wSXVWK38&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/ForSomeValueOfMagic?i=lMtO07cDc2A:Tl3Lynl86P4:Jy2wSXVWK38&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/ForSomeValueOfMagic/~4/lMtO07cDc2A&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</content>
		<author>
			<name>Steve</name>
			<email>noreply@blogger.com</email>
			<uri>http://holdenweb.blogspot.com/</uri>
		</author>
		<source>
			<title type="html">For Some Value of &quot;Magic&quot;</title>
			<subtitle type="html">Python, software, open source, plus odd rants about almost anything</subtitle>
			<link rel="self" href="http://holdenweb.blogspot.com/atom.xml"/>
			<id>tag:blogger.com,1999:blog-496482</id>
			<updated>2010-03-10T08:22:30+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en-US">
		<title type="html">Ubuntu 9.10 Wireless on Dell Precision M6300</title>
		<link href="http://feedproxy.google.com/~r/ForSomeValueOfMagic/~3/W_qLUpoauxs/ubuntu-910-wireless-on-dell-precision.html"/>
		<id>tag:blogger.com,1999:blog-496482.post-4517549318346587018</id>
		<updated>2010-02-12T10:16:49+00:00</updated>
		<content type="html">For reasons too complex to go into (they involve a talking penguin) I have just installed Ubuntu 9.10 (Karmic) 32-bit on the laptop I was talking about when I wrote &lt;a href=&quot;http://holdenweb.blogspot.com/2009/06/ubuntu-904-wireless-on-dell-precision.html&quot;&gt;this post last June&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Whether it's the change to 32-bit or the change to Karmic I do not know, but I am happy to report that everything works like a dream: I just had to install the BroadCom proprietary driver (boo! - I wish companies like Nvidias and BroadCom would cooperate more fully with the open source world) and suddenly I could disconnect the wires and away I went. This post is being made from the very laptop about which I complained so bitterly eight months ago.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/496482-4517549318346587018?l=holdenweb.blogspot.com&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;&lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.feedburner.com/~ff/ForSomeValueOfMagic?a=W_qLUpoauxs:g_hDDWSqInc:yIl2AUoC8zA&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/ForSomeValueOfMagic?d=yIl2AUoC8zA&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/ForSomeValueOfMagic?a=W_qLUpoauxs:g_hDDWSqInc:Jy2wSXVWK38&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/ForSomeValueOfMagic?i=W_qLUpoauxs:g_hDDWSqInc:Jy2wSXVWK38&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/ForSomeValueOfMagic/~4/W_qLUpoauxs&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</content>
		<author>
			<name>Steve</name>
			<email>noreply@blogger.com</email>
			<uri>http://holdenweb.blogspot.com/</uri>
		</author>
		<source>
			<title type="html">For Some Value of &quot;Magic&quot;</title>
			<subtitle type="html">Python, software, open source, plus odd rants about almost anything</subtitle>
			<link rel="self" href="http://holdenweb.blogspot.com/atom.xml"/>
			<id>tag:blogger.com,1999:blog-496482</id>
			<updated>2010-03-10T08:22:30+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en">
		<title type="html">The future is tree shaped</title>
		<link href="http://phildawes.net/blog/2010/02/10/future-tree-shaped/"/>
		<id>http://phildawes.net/blog/2010/02/10/future-tree-shaped/</id>
		<updated>2010-02-10T16:22:16+00:00</updated>
		<content type="html">&lt;p&gt;Have been thinking and reading more about parallelism recently. This &lt;a href=&quot;http://research.sun.com/projects/plrg/Publications/ICFPAugust2009Steele.pdf&quot;&gt;set of slides from Guy Steele&lt;/a&gt; distilled a lot for me.&lt;/p&gt;

&lt;p&gt;In order to realise parallel hardware performance we need to optimize our programs for computational bandwidth rather than latency. In terms of programming this means deprecating accumulation (cons, fold, streams, sequences) and favouring divide-and-conquer. This suggests a move to trees as the fundamental abstract building block for data.&lt;/p&gt;</content>
		<author>
			<name>Phil Dawes</name>
			<uri>http://phildawes.net/blog/</uri>
		</author>
		<source>
			<title type="html">Phil Dawes Stuff</title>
			<subtitle type="html">The latest entries of Phil Dawes Stuff</subtitle>
			<link rel="self" href="http://www.phildawes.net/blog/feed/"/>
			<id>http://www.phildawes.net/blog/feed/</id>
			<updated>2010-02-10T16:22:16+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en">
		<title type="html">Fix for ConceptNet error “Settings cannot be imported, because environment variable DJANGO_SETTINGS_MODULE is undefined”</title>
		<link href="http://ianozsvald.com/2010/02/10/fix-for-conceptnet-error-settings-cannot-be-imported-because-environment-variable-django_settings_module-is-undefined/"/>
		<id>http://ianozsvald.com/?p=838</id>
		<updated>2010-02-10T03:11:29+00:00</updated>
		<content type="html">&lt;p&gt;If you&amp;#8217;re using &lt;a href=&quot;http://conceptnet.media.mit.edu/&quot;&gt;ConceptNet&lt;/a&gt; and you see:&lt;/p&gt;
&lt;pre&gt;ImportError: Settings cannot be imported, because environment variable
DJANGO_SETTINGS_MODULE is undefined.&lt;/pre&gt;
&lt;p&gt;then the fix is simple (I&amp;#8217;ve been hacking away at an idea whilst at &lt;a href=&quot;http://iuiconf.org/&quot;&gt;IUI2010&lt;/a&gt; &amp;#8211; thanks &lt;a href=&quot;http://torg.media.mit.edu/rob/index.php/Main_Page&quot;&gt;Rob&lt;/a&gt; for the fix).&lt;/p&gt;
&lt;p&gt;To replicate the error run:&lt;/p&gt;
&lt;pre&gt;from csc.nl import get_nl&lt;/pre&gt;
&lt;pre&gt;en_nl = get_nl('en')&lt;/pre&gt;
&lt;pre&gt;en_nl.is_stopword('the')&lt;/pre&gt;
&lt;p&gt;The fix is to run:&lt;/p&gt;
&lt;pre&gt;import csc.conceptnet.models&lt;/pre&gt;
&lt;p&gt;which sets up Django, the call is_stopword again and all is fine.&lt;/p&gt;
&lt;hr /&gt;
Ian produces professional screencasts (&lt;a href=&quot;http://procasts.co.uk/examples.html&quot; title=&quot;Professional screencast production&quot;&gt;ProCasts&lt;/a&gt;), writes &lt;a href=&quot;http://TheScreencastingHandbook.com&quot; title=&quot;Screencasting Tutorial eBook&quot;&gt;The Screencasting Handbook&lt;/a&gt;, programs Python, researches Artificial Intelligence (&lt;a href=&quot;http://morconsulting.com&quot; title=&quot;Artificial Intelligence consultant&quot;&gt;Mor Consulting&lt;/a&gt;) and is also a sea-side dweller and consumer of fine coffees.</content>
		<author>
			<name>Ian Ozsvald</name>
			<uri>http://ianozsvald.com</uri>
		</author>
		<source>
			<title type="html">Entrepreneurial Geekiness » Python</title>
			<subtitle type="html">My thoughts on screencasting, ProCasts and high-tech entrepreneurship</subtitle>
			<link rel="self" href="http://ianozsvald.com/category/python/feed/"/>
			<id>http://ianozsvald.com/category/python/feed/</id>
			<updated>2010-03-10T00:22:36+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en-US">
		<title type="html">One More Day to Register for PyCon on the Web</title>
		<link href="http://feedproxy.google.com/~r/ForSomeValueOfMagic/~3/pz_D_lq6IMs/one-more-day-to-register-for-pycon-on.html"/>
		<id>tag:blogger.com,1999:blog-496482.post-2804147528035981106</id>
		<updated>2010-02-09T19:47:23+00:00</updated>
		<content type="html">Incredible though it seems, PyCon tutorials start a week tomorrow!&lt;br /&gt;
&lt;br /&gt;
If you are planning to attend and want to &lt;a href=&quot;http://us.pycon.org/2010/register/&quot;&gt;register at pre-conference prices&lt;/a&gt; you have just over 24 hours to do so!&lt;br /&gt;
&lt;br /&gt;
PyCon is &lt;i&gt;the&lt;/i&gt; place to learn about new and existing Python features and  meet Python personalities. Register now while you still have chance to save money!&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/496482-2804147528035981106?l=holdenweb.blogspot.com&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;&lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.feedburner.com/~ff/ForSomeValueOfMagic?a=pz_D_lq6IMs:_WFaVMV7Wjc:yIl2AUoC8zA&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/ForSomeValueOfMagic?d=yIl2AUoC8zA&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/ForSomeValueOfMagic?a=pz_D_lq6IMs:_WFaVMV7Wjc:Jy2wSXVWK38&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/ForSomeValueOfMagic?i=pz_D_lq6IMs:_WFaVMV7Wjc:Jy2wSXVWK38&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/ForSomeValueOfMagic/~4/pz_D_lq6IMs&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</content>
		<author>
			<name>Steve</name>
			<email>noreply@blogger.com</email>
			<uri>http://holdenweb.blogspot.com/</uri>
		</author>
		<source>
			<title type="html">For Some Value of &quot;Magic&quot;</title>
			<subtitle type="html">Python, software, open source, plus odd rants about almost anything</subtitle>
			<link rel="self" href="http://holdenweb.blogspot.com/atom.xml"/>
			<id>tag:blogger.com,1999:blog-496482</id>
			<updated>2010-03-10T08:22:30+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">A Little Bit of Python Episode 4: A Pre-PyCon Special</title>
		<link href="http://feedproxy.google.com/~r/voidspace/~3/haqRGUvJPHo/arch_d7_2010_02_06.shtml"/>
		<id>http://feedproxy.google.com/~r/voidspace/~3/haqRGUvJPHo/arch_d7_2010_02_06.shtml</id>
		<updated>2010-02-08T00:13:48+00:00</updated>
		<content type="html">A Little Bit of Python is an occasional podcast on Python related topics with myself, Brett Cannon, Jesse Noller, Steve Holden and Andrew Kuchling. The website is in progress and apparently nearly ready, thanks to Jesse and various other people who we will thank as soon as it is done. ... [233 words]&lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.feedburner.com/~ff/voidspace?a=haqRGUvJPHo:ndLyoYShnt0:F7zBnMyn0Lo&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/voidspace?i=haqRGUvJPHo:ndLyoYShnt0:F7zBnMyn0Lo&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/voidspace?a=haqRGUvJPHo:ndLyoYShnt0:V_sGLiPBpWU&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/voidspace?i=haqRGUvJPHo:ndLyoYShnt0:V_sGLiPBpWU&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/voidspace?a=haqRGUvJPHo:ndLyoYShnt0:gIN9vFwOqvQ&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/voidspace?i=haqRGUvJPHo:ndLyoYShnt0:gIN9vFwOqvQ&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/voidspace?a=haqRGUvJPHo:ndLyoYShnt0:dnMXMwOfBR0&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/voidspace?d=dnMXMwOfBR0&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/voidspace/~4/haqRGUvJPHo&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</content>
		<author>
			<name>Fuzzyman</name>
			<uri>http://www.voidspace.org.uk/python/weblog/index.shtml</uri>
		</author>
		<source>
			<title type="html">The Voidspace Techie Blog</title>
			<subtitle type="html">Python Programming, news on the Voidspace Python Projects and all things techie.</subtitle>
			<link rel="self" href="http://feeds.feedburner.com/voidspace"/>
			<id>http://feeds.feedburner.com/voidspace</id>
			<updated>2010-03-10T00:22:07+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">ConfigObj 4.7.1 (and how to test warnings)</title>
		<link href="http://feedproxy.google.com/~r/voidspace/~3/PnQC1BTECdQ/arch_d7_2010_02_06.shtml"/>
		<id>http://feedproxy.google.com/~r/voidspace/~3/PnQC1BTECdQ/arch_d7_2010_02_06.shtml</id>
		<updated>2010-02-07T23:52:41+00:00</updated>
		<content type="html">I hate doing releases. I haven't managed to automate the whole process (I should probably work on that), although setup.py sdist upload certainly helps. ... [290 words]&lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.feedburner.com/~ff/voidspace?a=PnQC1BTECdQ:xn9nyhK9vdM:F7zBnMyn0Lo&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/voidspace?i=PnQC1BTECdQ:xn9nyhK9vdM:F7zBnMyn0Lo&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/voidspace?a=PnQC1BTECdQ:xn9nyhK9vdM:V_sGLiPBpWU&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/voidspace?i=PnQC1BTECdQ:xn9nyhK9vdM:V_sGLiPBpWU&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/voidspace?a=PnQC1BTECdQ:xn9nyhK9vdM:gIN9vFwOqvQ&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/voidspace?i=PnQC1BTECdQ:xn9nyhK9vdM:gIN9vFwOqvQ&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/voidspace?a=PnQC1BTECdQ:xn9nyhK9vdM:dnMXMwOfBR0&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/voidspace?d=dnMXMwOfBR0&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/voidspace/~4/PnQC1BTECdQ&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</content>
		<author>
			<name>Fuzzyman</name>
			<uri>http://www.voidspace.org.uk/python/weblog/index.shtml</uri>
		</author>
		<source>
			<title type="html">The Voidspace Techie Blog</title>
			<subtitle type="html">Python Programming, news on the Voidspace Python Projects and all things techie.</subtitle>
			<link rel="self" href="http://feeds.feedburner.com/voidspace"/>
			<id>http://feeds.feedburner.com/voidspace</id>
			<updated>2010-03-10T00:22:07+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">Discover 0.3.2 and the load_tests protocol</title>
		<link href="http://feedproxy.google.com/~r/voidspace/~3/DsxgXf9syDo/arch_d7_2010_02_06.shtml"/>
		<id>http://feedproxy.google.com/~r/voidspace/~3/DsxgXf9syDo/arch_d7_2010_02_06.shtml</id>
		<updated>2010-02-07T23:25:47+00:00</updated>
		<content type="html">discover is a test discovery module for the standard library unittest test framework. Test discovery is built into unittest in Python 2.7 and 3.2. ... [335 words]&lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.feedburner.com/~ff/voidspace?a=DsxgXf9syDo:gsXaetyeZ-k:F7zBnMyn0Lo&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/voidspace?i=DsxgXf9syDo:gsXaetyeZ-k:F7zBnMyn0Lo&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/voidspace?a=DsxgXf9syDo:gsXaetyeZ-k:V_sGLiPBpWU&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/voidspace?i=DsxgXf9syDo:gsXaetyeZ-k:V_sGLiPBpWU&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/voidspace?a=DsxgXf9syDo:gsXaetyeZ-k:gIN9vFwOqvQ&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/voidspace?i=DsxgXf9syDo:gsXaetyeZ-k:gIN9vFwOqvQ&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/voidspace?a=DsxgXf9syDo:gsXaetyeZ-k:dnMXMwOfBR0&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/voidspace?d=dnMXMwOfBR0&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/voidspace/~4/DsxgXf9syDo&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</content>
		<author>
			<name>Fuzzyman</name>
			<uri>http://www.voidspace.org.uk/python/weblog/index.shtml</uri>
		</author>
		<source>
			<title type="html">The Voidspace Techie Blog</title>
			<subtitle type="html">Python Programming, news on the Voidspace Python Projects and all things techie.</subtitle>
			<link rel="self" href="http://feeds.feedburner.com/voidspace"/>
			<id>http://feeds.feedburner.com/voidspace</id>
			<updated>2010-03-10T00:22:07+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en">
		<title type="html">Another Day, Another Dojo</title>
		<link href="http://ramblings.timgolden.me.uk/2010/02/05/another-day-another-dojo/"/>
		<id>http://ramblings.timgolden.me.uk/2010/02/05/another-day-another-dojo/</id>
		<updated>2010-02-05T09:57:36+00:00</updated>
		<content type="html">&lt;p&gt;My first Dojo of 2010 yesterday, as I missed the January one (which is a shame as it sounded like fun). This was a return to the conventional Dojo style with pair-programming at the front, the task being to merge the Adventure Game efforts from the previous month&amp;#8217;s team-by-team effort. But first, a commercial break&amp;#8230; Jonathan Hartley advertised the upcoming &lt;a href=&quot;http://www.pyweek.org/&quot;&gt;PyWeek competition&lt;/a&gt; and demonstrated &lt;a href=&quot;http://code.google.com/p/brokenspell/&quot;&gt;his team&amp;#8217;s previous effort&lt;/a&gt; as well as the amusingly literal &lt;a href=&quot;http://www.pyweek.org/e/MurderCrow/&quot;&gt;Murder of Crows&lt;/a&gt; entry.&lt;/p&gt;
&lt;p&gt;Meanwhile, back at the Dojo&amp;#8230; Nicholas started off partly to set things up for people (like me, his co-pilot) who hadn&amp;#8217;t been there the month before. As we moved through the programming pairs, we did manage to get a working codeset together by merging the location-parsing code from one team with the &lt;a href=&quot;http://docs.python.org/library/cmd.html&quot;&gt;cmd&lt;/a&gt;-based loop from another. But it was clear that things were moving slowly and that the audience was somewhat disengaged&amp;#8230;&lt;/p&gt;
&lt;p&gt;So we finished off with a broad discussion of ways ahead, of what might work better, and of whether the artificial nature of the Dojo setting meant that people couldn&amp;#8217;t &amp;#8220;show off&amp;#8221;, so to speak, their natural coding style &amp;#8212; and ability. Michael G and others made a few cogent suggestions to the effect that smaller teams would work better but with some kind of DVCS (git seemed to be the front-runner) to assist the teams in collaborating. And it seemed that at least one team should be creatives, rather than coders.&lt;/p&gt;
&lt;p&gt;I enjoyed it, as ever, but it _is_ difficult to keep 20+ people in a medium-sized room totally engaged. Even with the best will in the world, it&amp;#8217;s hard to read code on a screen from some distance back. This was one of the reasons why a team-based approach met with broad approval. Also it is a little dispiriting when you&amp;#8217;re doing your best up front but half your &amp;#8220;audience&amp;#8221; is otherwise engaged.&lt;/p&gt;
&lt;p&gt;The point about how &amp;#8220;natural&amp;#8221; you should be in the Dojo was interesting. Everyone has a different way of coding, of approaching a problem, of looking for information and so on. Dave[*], the last pilot, mentioned that he&amp;#8217;d normally take much longer sizing a problem up but that having a time limit forced him into action sooner. But you&amp;#8217;re up there with a limit of 10 minutes, probably on someone else&amp;#8217;s machine, maybe on an &amp;#8220;alien&amp;#8221; operating system. You&amp;#8217;re fumbling with running up a command prompt; you&amp;#8217;re not sure how to bring up the Python docs; the keyboard shortcuts which your fingers remember don&amp;#8217;t work &amp;#8212; or worse, do something else entirely! We did discuss each person bringing up his own laptop, although that has obvious drawbacks of getting the projector to switch smoothly and so on. It was out of this discussion that the move towards a team-based approach next time arose.&lt;/p&gt;
&lt;p&gt;TJG&lt;/p&gt;
&lt;p&gt;[*] Dave, incidentally, was the programmer of the BBC version of the &lt;a href=&quot;http://en.wikipedia.org/wiki/Graphic_Adventure_Creator&quot;&gt;Graphics Adventure Creator&lt;/a&gt; &amp;#8212; did you know that?&lt;/p&gt;</content>
		<author>
			<name>Tim Golden</name>
			<uri>http://ramblings.timgolden.me.uk</uri>
		</author>
		<source>
			<title type="html">Moderate Realism » Tech</title>
			<subtitle type="html">The ramblings of Tim Golden</subtitle>
			<link rel="self" href="http://ramblings.timgolden.me.uk/category/tech/feed"/>
			<id>http://ramblings.timgolden.me.uk/category/tech/feed</id>
			<updated>2010-03-05T16:22:09+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en">
		<title type="html">It Certification Considered Useless</title>
		<link href="http://feedproxy.google.com/~r/Magpiebrain/~3/Zw2-FHYsA-A/"/>
		<id>http://www.magpiebrain.com/?p=761</id>
		<updated>2010-02-02T21:38:16+00:00</updated>
		<content type="html">&lt;p&gt;&lt;a href=&quot;http://www.magpiebrain.com/wp-content/uploads/2010/02/93819794_6a49dc085c_b.jpg&quot;&gt;&lt;img src=&quot;http://www.magpiebrain.com/wp-content/uploads/2010/02/93819794_6a49dc085c_b-150x150.jpg&quot; alt=&quot;&quot; title=&quot;Scroll&quot; width=&quot;150&quot; height=&quot;150&quot; class=&quot;alignright size-thumbnail wp-image-763&quot; /&gt;&lt;/a&gt; A few years ago, I was sharing a drink with a friend of mine. He was about to become a fully qualified architect. In the UK, one cannot call themselves an architect without having carried out the full, three part course, which takes at least seven years. Typically, as the course involves working in the industry, architects often took more than seven years to complete their &amp;#8216;part three&amp;#8217; &amp;#8211; my friend completing it in the minimum possible time made him one of the youngest qualified architects in the country. As he was about to be fully qualified, he was explaining the need to get indemnity insurance, as his opinion as a qualified architect made him liable for the quality of advice given, even advice given informally down at the pub.&lt;/p&gt;
&lt;p&gt;There has been a short history of various individuals, companies and professional bodies within IT attempting to define and issue certification. By and large, they have not caught on. There is no belief that software delivered by &amp;#8216;certified&amp;#8217; individuals is any better than that developed by uncertified individuals. Nor is there any evidence that in terms of getting jobs that certification counts for anything other than in specific, narrow (mostly vendor specific) technical domains &amp;#8211; something that few serious software professional would consider worthwhile. &lt;/p&gt;
&lt;p&gt;So, in general, why does certification exist? Societal pressure determines where certification is essential. It is important that key individuals in positions of power are properly vetted &amp;#8211; and recognised &amp;#8211; for the role they play in society. Which is why there are laws governing who can call themselves a lawyer, architect, engineer, surveyor. Which is why certified profesionals have responsibility placed upon them regarding the veracity of information and quality services they provide as a member of that profession. &lt;/p&gt;
&lt;p&gt;In terms of architecture &amp;#8211; in similar terms to medical doctors for example &amp;#8211; society has deemed the roles they play as being important enough that certification carries with it legally enforceable expectations regarding their competency. With this responsibility, comes recognition &amp;#8211; and a clear understanding as to how the profession is valued by society as a whole.&lt;/p&gt;
&lt;p&gt;Certification in the land of IT is not being driven by a need for society to ensure that we are doing our jobs properly &amp;#8211; to ensure that only competent individuals call themselves &amp;#8216;programmers&amp;#8217;, &amp;#8217;sysadmins&amp;#8217; or whatever. Nor is it being driven by a societal desire to recognise our contribution to society as as a whole. It is being driven by IT itself &amp;#8211; at best as a misguided attempt to recognise an ability in a certain set of skill, at worst as a way of generating money. As such, certification in the world of IT is a toothless concept, lacking in any sense of legitimacy, and distracts us from the more worthy goal of understanding how we contribute to the world around us, and how we grow competency to the point where we can even consider ourselves a profession at all. &lt;/p&gt;
&lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.feedburner.com/~ff/Magpiebrain?a=Zw2-FHYsA-A:j0mGMhvlbCE:yIl2AUoC8zA&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/Magpiebrain?d=yIl2AUoC8zA&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/Magpiebrain?a=Zw2-FHYsA-A:j0mGMhvlbCE:7Q72WNTAKBA&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/Magpiebrain?d=7Q72WNTAKBA&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/Magpiebrain?a=Zw2-FHYsA-A:j0mGMhvlbCE:D7DqB2pKExk&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/Magpiebrain?i=Zw2-FHYsA-A:j0mGMhvlbCE:D7DqB2pKExk&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/Magpiebrain?a=Zw2-FHYsA-A:j0mGMhvlbCE:dnMXMwOfBR0&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/Magpiebrain?d=dnMXMwOfBR0&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;</content>
		<author>
			<name>Sam Newman</name>
			<uri>http://www.magpiebrain.com</uri>
		</author>
		<source>
			<title type="html">Magpiebrain</title>
			<subtitle type="html">The blog of Sam Newman</subtitle>
			<link rel="self" href="http://feeds.feedburner.com/Magpiebrain"/>
			<id>http://feeds.feedburner.com/Magpiebrain</id>
			<updated>2010-02-27T16:22:04+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">Interview with Pardus Linux</title>
		<link href="http://feedproxy.google.com/~r/voidspace/~3/V0hUHx2WObw/arch_d7_2010_01_30.shtml"/>
		<id>http://feedproxy.google.com/~r/voidspace/~3/V0hUHx2WObw/arch_d7_2010_01_30.shtml</id>
		<updated>2010-02-02T10:28:52+00:00</updated>
		<content type="html">I recently did an interview on Python with the Pardus Linux magazine. Pardus Linux is a distribution developed in Turkey (by the Turkish National Research Institute of Electronics and Cryptology) with the goal of being usable by &amp;quot;normal&amp;quot; people rather than just geeks. ... [3716 words]&lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.feedburner.com/~ff/voidspace?a=V0hUHx2WObw:mxAxteqQU2A:F7zBnMyn0Lo&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/voidspace?i=V0hUHx2WObw:mxAxteqQU2A:F7zBnMyn0Lo&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/voidspace?a=V0hUHx2WObw:mxAxteqQU2A:V_sGLiPBpWU&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/voidspace?i=V0hUHx2WObw:mxAxteqQU2A:V_sGLiPBpWU&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/voidspace?a=V0hUHx2WObw:mxAxteqQU2A:gIN9vFwOqvQ&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/voidspace?i=V0hUHx2WObw:mxAxteqQU2A:gIN9vFwOqvQ&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/voidspace?a=V0hUHx2WObw:mxAxteqQU2A:dnMXMwOfBR0&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/voidspace?d=dnMXMwOfBR0&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/voidspace/~4/V0hUHx2WObw&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</content>
		<author>
			<name>Fuzzyman</name>
			<uri>http://www.voidspace.org.uk/python/weblog/index.shtml</uri>
		</author>
		<source>
			<title type="html">The Voidspace Techie Blog</title>
			<subtitle type="html">Python Programming, news on the Voidspace Python Projects and all things techie.</subtitle>
			<link rel="self" href="http://feeds.feedburner.com/voidspace"/>
			<id>http://feeds.feedburner.com/voidspace</id>
			<updated>2010-03-10T00:22:07+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en">
		<title type="html">Thief Level : Week 2</title>
		<link href="http://tartley.com/?p=1002"/>
		<id>http://tartley.com/?p=1002</id>
		<updated>2010-02-01T13:20:31+00:00</updated>
		<content type="html">&lt;p&gt;This week I spent a little while considering the backstory of the level, and now have at least a rudimentary scenario: Garrett the thief is taking an opportunistic foray into the local Shope of Curiosities, having heard that their prize exhibit, the McGuffin of Antioc, has been removed from its high-security public display, in order to be cleaned or maintained somewhere on-site.&lt;/p&gt;
&lt;p&gt;On top of this, I&amp;#8217;ve been refining the layout of the museum building, starting with the two-storey entrance hall, complete with a balcony running round it:&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://tartley.com/wp-content/uploads/2010/02/w02-sketch-entrance.jpg&quot;&gt;&lt;img class=&quot;alignnone size-full wp-image-1003&quot; title=&quot;w02-sketch-entrance&quot; src=&quot;http://tartley.com/wp-content/uploads/2010/02/w02-sketch-entrance.jpg&quot; alt=&quot;sketch of museum's two-storey main entrance hall&quot; width=&quot;623&quot; height=&quot;416&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Plus, I&amp;#8217;ve been planning the possible routes a thief might take to get from one room to another. Generally, the conventional paths &amp;#8211; in through the main entrance and up the stairs and down the corridor &amp;#8211; will be blocked by guards. So the player has to clamber up the outside of the building, explore the roof, dangle from a rope, pick a lock, find a key in the janitor&amp;#8217;s quarters, which opens all the windows, and ledges outside a couple of windows lead somewhere interesting, etc.  I don&amp;#8217;t want it to turn into a key fetch quest, but at the same time, I don&amp;#8217;t want the player to be able to simply waltz all through the whole building. I&amp;#8217;ve tried to engineer a single interesting primary route through the building, with the possibility of a few minor variations so players feel like they can exercise some freedom and decision making.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://tartley.com/wp-content/uploads/2010/02/w02-sketch-ground-floor.jpg&quot;&gt;&lt;img class=&quot;alignnone size-full wp-image-1005&quot; title=&quot;w02-sketch-ground-floor&quot; src=&quot;http://tartley.com/wp-content/uploads/2010/02/w02-sketch-ground-floor.jpg&quot; alt=&quot;sketch of ground floor&quot; width=&quot;669&quot; height=&quot;444&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Having done all that, I&amp;#8217;m now quite happy that my plans are sufficient to produce a small but adequate level. I&amp;#8217;ll aim to get that complete, and any fancy window dressing I can layer on top will be a bonus.&lt;/p&gt;
&lt;p&gt;I completed the modelling of all the rooms in the building, and doorframes inbetween them. I applied some quick floorboard textures to differentiate the floors and ceilings from the walls. Here you can see the view from the main entrance, looking into the two-storey entrance hall, with the balcony around it visible up on the next level:&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://tartley.com/wp-content/uploads/2010/02/w02-main-entrance.jpg&quot;&gt;&lt;img class=&quot;alignnone size-full wp-image-1006&quot; title=&quot;w02-main-entrance&quot; src=&quot;http://tartley.com/wp-content/uploads/2010/02/w02-main-entrance.jpg&quot; alt=&quot;main entraince with floorboards&quot; width=&quot;640&quot; height=&quot;480&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;And the view while approaching the top of the stairs, looking down over the balcony. There will be a railing when it&amp;#8217;s done:&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://tartley.com/wp-content/uploads/2010/02/w02-top-of-stairs-balcony.jpg&quot;&gt;&lt;img class=&quot;alignnone size-full wp-image-1007&quot; title=&quot;w02-top-of-stairs-balcony&quot; src=&quot;http://tartley.com/wp-content/uploads/2010/02/w02-top-of-stairs-balcony.jpg&quot; alt=&quot;Approaching the top of the stairs&quot; width=&quot;640&quot; height=&quot;480&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Thanks heaps to Qolelis for a comment with a tip about textures on stairways, to rotate the texture 90 degrees on each stair&amp;#8217;s vertical rise. I only just saw that, but will definitely apply it this week.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Update&lt;/strong&gt;: I feel a bit self-concious that I&amp;#8217;m creating the bare minimum that could qualify to be a Thief level. There is not yet a lively, engaging backstory to the level, complete with colorful characters, cleverly intertwined with the canon of the original game.&lt;/p&gt;
&lt;p&gt;Similarly, the mechanical contents of my level are as simple as possible. I haven&amp;#8217;t stretched myself, thinking of imaginative locations or motives for Garrett to explore. I do not plan to have any clever special objects or custom scripting in my level, defining dramatic changing mission objectives as the player reveals new information. It&amp;#8217;s a very straightforward &amp;#8216;get into a building, steal the loot, and get out&amp;#8217;.&lt;/p&gt;
&lt;p&gt;Partly this is very deliberate &amp;#8211; I want the level to be as minimal as it can possibly be, so as keep it achievable. But also, this is partly in response to my feeling that being creative is hard, especially when under pressure. Right now I feel as though I have enough to worry about just getting to grips with the minutia of the level editor. I almost feel as if I need to become comfortable with that before I can relax enough to get creative with it.&lt;/p&gt;
&lt;p&gt;This isn&amp;#8217;t entirely unexpected. Clearly one cannot do great work on one&amp;#8217;s first attempt. But at the same time, I don&amp;#8217;t want to just &amp;#8216;give up&amp;#8217; on the creative aspects. I want to do as good a job as I can do, under the constraints of a small, straightforward &amp;#8216;first time&amp;#8217; level done in a reasonable timeframe. So maybe I just need to keep iterating. Embelish the dramatic backstory little by little, see what occurs to me as I go on. Look for some flash of inspiration as I bury myself in the process. Fair enough. Baby steps.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Update 2:&lt;/strong&gt; I created a quick TODO list, as a first approximation of how much work there is to be done. I ended up with a list of 67 mandatory items (eg. Add doors inside each door frame; First pass at lighting; Add balcony railing.) In addition I have 18 optional items (eg. Add carpets and rugs; Hide moss arrows in the garden; Entrance hall main exhibit.) The screenshots above represent about six completed items (eg. Dromed tutorials; first floor rooms; doorways and arches between rooms; staircase.) So at the current rate, it&amp;#8217;s roughly 28 weeks of work, which is double or triple what I&amp;#8217;d planned on. Hopefully my rate of completing items will increase substantially as I get into the groove. I&amp;#8217;ll have to monitor this going forward, and slash scope if I can&amp;#8217;t drastically accelerate.&lt;/p&gt;</content>
		<author>
			<name>Jonathan Hartley</name>
			<uri>http://tartley.com</uri>
		</author>
		<source>
			<title type="html">tartley.com</title>
			<subtitle type="html">A website dedicated to oneself has been described as the greatest act of hubris. Welcome aboard.</subtitle>
			<link rel="self" href="http://tartley.com/?feed=rss2"/>
			<id>http://tartley.com/?feed=rss2</id>
			<updated>2010-03-10T12:22:06+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">A Little Bit of Python Episode 3</title>
		<link href="http://feedproxy.google.com/~r/voidspace/~3/ee0vjKVUcqA/arch_d7_2010_01_30.shtml"/>
		<id>http://feedproxy.google.com/~r/voidspace/~3/ee0vjKVUcqA/arch_d7_2010_01_30.shtml</id>
		<updated>2010-01-30T21:00:06+00:00</updated>
		<content type="html">A Little Bit of Python is an occasional podcast on Python related topics with myself, Brett Cannon, Jesse Noller, Steve Holden and Andrew Kuchling. We still don't have our own website although that is due to land any day now. ... [172 words]&lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.feedburner.com/~ff/voidspace?a=ee0vjKVUcqA:wMTde1ykrWQ:F7zBnMyn0Lo&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/voidspace?i=ee0vjKVUcqA:wMTde1ykrWQ:F7zBnMyn0Lo&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/voidspace?a=ee0vjKVUcqA:wMTde1ykrWQ:V_sGLiPBpWU&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/voidspace?i=ee0vjKVUcqA:wMTde1ykrWQ:V_sGLiPBpWU&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/voidspace?a=ee0vjKVUcqA:wMTde1ykrWQ:gIN9vFwOqvQ&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/voidspace?i=ee0vjKVUcqA:wMTde1ykrWQ:gIN9vFwOqvQ&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/voidspace?a=ee0vjKVUcqA:wMTde1ykrWQ:dnMXMwOfBR0&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/voidspace?d=dnMXMwOfBR0&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/voidspace/~4/ee0vjKVUcqA&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</content>
		<author>
			<name>Fuzzyman</name>
			<uri>http://www.voidspace.org.uk/python/weblog/index.shtml</uri>
		</author>
		<source>
			<title type="html">The Voidspace Techie Blog</title>
			<subtitle type="html">Python Programming, news on the Voidspace Python Projects and all things techie.</subtitle>
			<link rel="self" href="http://feeds.feedburner.com/voidspace"/>
			<id>http://feeds.feedburner.com/voidspace</id>
			<updated>2010-03-10T00:22:07+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en">
		<title type="html">TypeError: object.__init__() takes no parameters</title>
		<link href="http://freshfoo.com/blog/object__init__takes_no_parameters"/>
		<id>http://freshfoo.com/blog/2010/01/30/object__init__takes_no_parameters</id>
		<updated>2010-01-30T19:07:00+00:00</updated>
		<content type="html">&lt;p&gt;At my employer we are in the process of migrating from Python 2.4 to
2.6. When running some existing code under Python 2.6 we started
getting DeprecationWarnings about &amp;quot;object.__new__() takes no
parameters&amp;quot; and &amp;quot;object.__init__() takes no parameters&amp;quot;.&lt;/p&gt;
&lt;p&gt;A simple example that triggers the warning:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span class=&quot;k&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;MyClass&lt;/span&gt;(&lt;span class=&quot;nb&quot;&gt;object&lt;/span&gt;):

    &lt;span class=&quot;k&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;__new__&lt;/span&gt;(&lt;span class=&quot;n&quot;&gt;cls&lt;/span&gt;, &lt;span class=&quot;n&quot;&gt;a&lt;/span&gt;, &lt;span class=&quot;n&quot;&gt;b&lt;/span&gt;):
        &lt;span class=&quot;k&quot;&gt;print&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;'MyClass.__new__'&lt;/span&gt;, &lt;span class=&quot;n&quot;&gt;a&lt;/span&gt;, &lt;span class=&quot;n&quot;&gt;b&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;super&lt;/span&gt;(&lt;span class=&quot;n&quot;&gt;MyClass&lt;/span&gt;, &lt;span class=&quot;n&quot;&gt;cls&lt;/span&gt;).&lt;span class=&quot;n&quot;&gt;__new__&lt;/span&gt;(&lt;span class=&quot;n&quot;&gt;cls&lt;/span&gt;, &lt;span class=&quot;n&quot;&gt;a&lt;/span&gt;, &lt;span class=&quot;n&quot;&gt;b&lt;/span&gt;)

    &lt;span class=&quot;k&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;__init__&lt;/span&gt;(&lt;span class=&quot;bp&quot;&gt;self&lt;/span&gt;, &lt;span class=&quot;n&quot;&gt;a&lt;/span&gt;, &lt;span class=&quot;n&quot;&gt;b&lt;/span&gt;):
        &lt;span class=&quot;k&quot;&gt;print&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;'MyClass.__init__'&lt;/span&gt;, &lt;span class=&quot;n&quot;&gt;a&lt;/span&gt;, &lt;span class=&quot;n&quot;&gt;b&lt;/span&gt;
        &lt;span class=&quot;nb&quot;&gt;super&lt;/span&gt;(&lt;span class=&quot;n&quot;&gt;MyClass&lt;/span&gt;, &lt;span class=&quot;bp&quot;&gt;self&lt;/span&gt;).&lt;span class=&quot;n&quot;&gt;__init__&lt;/span&gt;(&lt;span class=&quot;n&quot;&gt;a&lt;/span&gt;, &lt;span class=&quot;n&quot;&gt;b&lt;/span&gt;)

&lt;span class=&quot;n&quot;&gt;obj&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;MyClass&lt;/span&gt;(&lt;span class=&quot;mi&quot;&gt;6&lt;/span&gt;, &lt;span class=&quot;mi&quot;&gt;7&lt;/span&gt;)
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;This gives:&lt;/p&gt;
&lt;pre class=&quot;literal-block&quot;&gt;
$ python2.4 simple-warning.py
MyClass.__new__ 6 7
MyClass.__init__ 6 7

$ python2.6 simple-warning.py
MyClass.__new__ 6 7
simple-warning.py:5: DeprecationWarning: object.__new__() takes no parameters
  return super(MyClass, cls).__new__(cls, a, b)
MyClass.__init__ 6 7
simple-warning.py:9: DeprecationWarning: object.__init__() takes no parameters
  super(MyClass, self).__init__(a, b)
&lt;/pre&gt;
&lt;p&gt;It turns out that a &lt;a class=&quot;reference external&quot; href=&quot;http://svn.python.org/view?view=rev&amp;amp;revision=54539&quot;&gt;change to Python&lt;/a&gt; for 2.6 (and 3) means that
object.__new__ and object.__init__ no longer take arguments - a
TypeError is raised when arguments are passed. To avoid breaking too
much pre-existing code, there is a special case that will cause a
DeprecationWarning instead of TypeError if both __init__ and __new__
are overridden. This is the case we were running into with our code at
work.&lt;/p&gt;
&lt;p&gt;The reason for this change seems to make enough sense: object doesn't
do anything with arguments to __init__ and __new__ so it shouldn't
accept them. Raising an error when arguments are passed highlights
code where the code might be doing the wrong thing.&lt;/p&gt;
&lt;p&gt;Unfortunately this change also breaks Python's multiple inheritance in
a fairly serious way when cooperative &lt;a class=&quot;reference external&quot; href=&quot;http://docs.python.org/library/functions.html#super&quot;&gt;super&lt;/a&gt; calls are used. Looking
at the &lt;a class=&quot;reference external&quot; href=&quot;http://bugs.python.org/issue1683368&quot;&gt;ticket&lt;/a&gt; for this change, this issue was thought about but
perhaps the implications were not fully understood. Given that using
super with multiple inheritance is common and &amp;quot;correct&amp;quot; practice, it
would seem that this change to Python is a step backwards.&lt;/p&gt;
&lt;a href=&quot;http://freshfoo.com/blog/object__init__takes_no_parameters&quot;&gt;Read more...&lt;/a&gt;</content>
		<author>
			<name>Menno Smits</name>
			<email>menno AT freshfoo DOT com</email>
			<uri>http://freshfoo.com/blog</uri>
		</author>
		<source>
			<title type="html">Menno's Musings</title>
			<subtitle type="html">software | life | whatever</subtitle>
			<link rel="self" href="http://freshfoo.com/blog/index.atom"/>
			<id>http://freshfoo.com/blog/index.atom</id>
			<updated>2010-03-10T22:22:26+00:00</updated>
			<rights type="html">Copyright 2009 Menno Smits</rights>
		</source>
	</entry>

	<entry xml:lang="en">
		<title type="html">rst_break plugin for PyBlosxom</title>
		<link href="http://freshfoo.com/blog/rst_break-plugin"/>
		<id>http://freshfoo.com/blog/2010/01/30/rst_break-plugin</id>
		<updated>2010-01-30T15:29:00+00:00</updated>
		<content type="html">&lt;p&gt;I just scratched an itch by writing a small plugin for PyBlosxom that
allows the &lt;a class=&quot;reference external&quot; href=&quot;http://pyblosxom.sourceforge.net/registry/text/rst.html&quot;&gt;rst&lt;/a&gt; (&lt;a class=&quot;reference external&quot; href=&quot;http://docutils.sourceforge.net/rst.html&quot;&gt;reStructured Text&lt;/a&gt;) and &lt;a class=&quot;reference external&quot; href=&quot;http://pyblosxom.sourceforge.net/registry/display/readmore.html&quot;&gt;readmore&lt;/a&gt; plugins to work
together &lt;a class=&quot;footnote-reference&quot; href=&quot;http://freshfoo.com/blog/index.atom#id2&quot; id=&quot;id1&quot;&gt;[1]&lt;/a&gt;. It defines a reST &amp;quot;break&amp;quot; directive which gets transformed
into the breakpoint string the readmore plugin looks out for. This
allows for &amp;quot;Read more...&amp;quot; breaks to be inserted in for reST based
articles.&lt;/p&gt;
&lt;p&gt;For further information see the &lt;a class=&quot;reference external&quot; href=&quot;http://freshfoo.com/code/&quot;&gt;Code&lt;/a&gt; page here and at the top of the
&lt;a class=&quot;reference external&quot; href=&quot;http://freshfoo.com/hg/pyblosxom-plugins/trunk/raw-file/9afdcd2bf738/rst_break/rst_break.py&quot;&gt;plugin&lt;/a&gt; itself.&lt;/p&gt;
&lt;table class=&quot;docutils footnote&quot; frame=&quot;void&quot; id=&quot;id2&quot; rules=&quot;none&quot;&gt;
&lt;colgroup&gt;&lt;col class=&quot;label&quot; /&gt;&lt;col /&gt;&lt;/colgroup&gt;
&lt;tbody valign=&quot;top&quot;&gt;
&lt;tr&gt;&lt;td class=&quot;label&quot;&gt;&lt;a class=&quot;fn-backref&quot; href=&quot;http://freshfoo.com/blog/index.atom#id1&quot;&gt;[1]&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Yes, the audience for this plugin is probably tiny!&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;</content>
		<author>
			<name>Menno Smits</name>
			<email>menno AT freshfoo DOT com</email>
			<uri>http://freshfoo.com/blog</uri>
		</author>
		<source>
			<title type="html">Menno's Musings</title>
			<subtitle type="html">software | life | whatever</subtitle>
			<link rel="self" href="http://freshfoo.com/blog/index.atom"/>
			<id>http://freshfoo.com/blog/index.atom</id>
			<updated>2010-03-10T22:22:26+00:00</updated>
			<rights type="html">Copyright 2009 Menno Smits</rights>
		</source>
	</entry>

	<entry xml:lang="en">
		<title type="html">Howto bundle binary dependancies with py2exe, et al.</title>
		<link href="http://tartley.com/?p=997"/>
		<id>http://tartley.com/?p=997</id>
		<updated>2010-01-27T22:26:00+00:00</updated>
		<content type="html">&lt;p&gt;Hey. I notice that &lt;a href=&quot;https://lists.sourceforge.net/lists/listinfo/py2exe-users&quot;&gt;py2exe-users&lt;/a&gt; has a recent question that seems to be about how to correctly bundle the required Microsoft C runtime DLL with executables generated from Python scripts.&lt;/p&gt;
&lt;p&gt;Last month I updated the py2exe wiki tutorial to cover this issue, as best as I was able. Since people are still asking questions about it, I figured I&amp;#8217;d promote that change a little.&lt;/p&gt;
&lt;p&gt;Check out the new, revamped &lt;a href=&quot;http://www.py2exe.org/index.cgi/Tutorial&quot;&gt;py2exe tutorial page&lt;/a&gt;!&lt;/p&gt;
&lt;p&gt;That is all.&lt;/p&gt;</content>
		<author>
			<name>Jonathan Hartley</name>
			<uri>http://tartley.com</uri>
		</author>
		<source>
			<title type="html">tartley.com</title>
			<subtitle type="html">A website dedicated to oneself has been described as the greatest act of hubris. Welcome aboard.</subtitle>
			<link rel="self" href="http://tartley.com/?feed=rss2"/>
			<id>http://tartley.com/?feed=rss2</id>
			<updated>2010-03-10T12:22:06+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en-US">
		<title type="html">iPad Name Already in Use</title>
		<link href="http://feedproxy.google.com/~r/ForSomeValueOfMagic/~3/qL9CTG9Gnis/ipad-name-already-in-use.html"/>
		<id>tag:blogger.com,1999:blog-496482.post-2351009357040710050</id>
		<updated>2010-01-27T14:41:24+00:00</updated>
		<content type="html">One thing that Apple appears to have lost sight of in all the thrills of &lt;a href=&quot;http://www.macworld.com/article/145938/2010/01/tabletannouncement1.html&quot;&gt;announcing their new tablet computer&lt;/a&gt; is that Widgetaria, presumably an Apple business partner, &lt;a href=&quot;http://www.apple.com/downloads/dashboard/business/ipad.html&quot;&gt;already promotes software called iPad&lt;/a&gt;. I wonder if they care?&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/496482-2351009357040710050?l=holdenweb.blogspot.com&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;&lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.feedburner.com/~ff/ForSomeValueOfMagic?a=qL9CTG9Gnis:ndEhSEEDrIU:yIl2AUoC8zA&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/ForSomeValueOfMagic?d=yIl2AUoC8zA&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/ForSomeValueOfMagic?a=qL9CTG9Gnis:ndEhSEEDrIU:Jy2wSXVWK38&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/ForSomeValueOfMagic?i=qL9CTG9Gnis:ndEhSEEDrIU:Jy2wSXVWK38&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/ForSomeValueOfMagic/~4/qL9CTG9Gnis&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</content>
		<author>
			<name>Steve</name>
			<email>noreply@blogger.com</email>
			<uri>http://holdenweb.blogspot.com/</uri>
		</author>
		<source>
			<title type="html">For Some Value of &quot;Magic&quot;</title>
			<subtitle type="html">Python, software, open source, plus odd rants about almost anything</subtitle>
			<link rel="self" href="http://holdenweb.blogspot.com/atom.xml"/>
			<id>tag:blogger.com,1999:blog-496482</id>
			<updated>2010-03-10T08:22:30+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en">
		<title type="html">pyCUDA on Windows and Mac for super-fast Python math using CUDA</title>
		<link href="http://ianozsvald.com/2010/01/26/pycuda-on-windows-and-mac-for-super-fast-python-math-using-cuda/"/>
		<id>http://ianozsvald.com/?p=820</id>
		<updated>2010-01-26T13:01:22+00:00</updated>
		<content type="html">&lt;p&gt;I&amp;#8217;ve just started to play with &lt;a href=&quot;http://mathema.tician.de/software/pycuda&quot;&gt;pyCUDA&lt;/a&gt; which lets you run parallel math operations on a &lt;a href=&quot;http://en.wikipedia.org/wiki/CUDA&quot;&gt;CUDA&lt;/a&gt;-compliant NVidia graphics card through Python.&lt;/p&gt;
&lt;p&gt;CUDA stands for Compute Unified Device Architecture &amp;#8211; it is an architecture that lets us program the Graphics Processing Unit (GPU) on a high powered graphics card to do scientific or graphical math calculations rather than the usual texture processing for games.  In essence it is a mini supercomputer that is specialised just for fast math operations &amp;#8211; if you can figure out how to use it.&lt;/p&gt;
&lt;p&gt;The goal is to off-load the CPU-intensive calculations for two of my clients (a physics company and a flood modelling company) to achieve 10* to 100* speed-ups using commodity graphics cards.&lt;/p&gt;
&lt;p&gt;pyCUDA makes it easy to interactively program a CUDA device rather than hitting C++ code with the slow write/compile/debug loop.  Recent MacBooks (mine was bought in January 2009) have NVidia cards with CUDA-compatible devices built-in (mine is a &lt;a href=&quot;http://en.wikipedia.org/wiki/GeForce_9_Series#9400M_G.5B37.5D&quot;&gt;9400M&lt;/a&gt;).  For my desktop computer I have a &lt;a href=&quot;http://en.wikipedia.org/wiki/GeForce_9_Series#GeForce_9800_GT&quot;&gt;9800 GT&lt;/a&gt; (costing £100).&lt;/p&gt;
&lt;p&gt;It turns out that this is bleeding-edge stuff &amp;#8211; getting pyCUDA compiled on my MacBook and Win XP machine took &lt;a href=&quot;http://tiker.net/pipermail/pycuda_tiker.net/2010-January/000857.html&quot;&gt;some&lt;/a&gt; &lt;a href=&quot;http://tiker.net/pipermail/pycuda_tiker.net/2010-January/000866.html&quot;&gt;time&lt;/a&gt; (forum posts for Mac and Windows issues) thankfully the group is helpful and the &lt;a href=&quot;http://wiki.tiker.net/PyCuda&quot;&gt;wiki&lt;/a&gt; has an installation section for Windows, Mac and Linux and some reasonable &lt;a href=&quot;http://documen.tician.de/pycuda/index.html&quot;&gt;documentation&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Right now I&amp;#8217;ve got as far as running some of the demo code on my MacBook (showing a 5* speed-up over the CPU) and my desktop (showing a 30* speed-up over the CPU).  I&amp;#8217;ll report more as I progress.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Update&lt;/strong&gt; &amp;#8211; pyCUDA works inside &lt;a href=&quot;http://ipython.scipy.org/&quot;&gt;IPython&lt;/a&gt; too, lovely.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Update&lt;/strong&gt; &amp;#8211; I don&amp;#8217;t have OpenGL working for gl_interop.py but as noted &lt;a href=&quot;http://www.mail-archive.com/pycuda@tiker.net/msg00586.html&quot;&gt;here &lt;/a&gt; you need &amp;#8220;CUDA_ENABLE_GL = True&amp;#8221; in siteconf.py and you need &lt;a href=&quot;http://pyopengl.sourceforge.net/&quot;&gt;PyOpenGL&lt;/a&gt; installed.  When rebuilding my MSVC threw a hissy fit, it isn&amp;#8217;t essential to my work so I&amp;#8217;m skipping this demo.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Update&lt;/strong&gt; &amp;#8211; I&amp;#8217;ve submitted a patch and two examples to the wiki (&lt;a href=&quot;http://wiki.tiker.net/PyCuda/Examples/SimpleSpeedTest&quot;&gt;SimpleSpeedTest&lt;/a&gt;, &lt;a href=&quot;http://wiki.tiker.net/PyCuda/Examples/Mandelbrot&quot;&gt;Mandelbrot&lt;/a&gt;). I get 200* speed-ups on the speed test (using a for loop on a sin() calculation) and 5 to 20* speed-up on Mandelbrots (it seems to scale very well vs numpy with increasing dimensions).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Update&lt;/strong&gt; &amp;#8211; There are lots of interesting papers for CUDA surfacing like this one showing a &lt;a href=&quot;http://gpgpu.org/2010/02/10/acoustic-likelihoods-in-speech-recognition&quot;&gt;3* speed-up for voice recognition&lt;/a&gt; tasks (using CPU and GPU together) and yet another way to &lt;a href=&quot;http://gpgpu.org/2010/02/28/lattice-boltzmann-shallow-water-equations&quot;&gt;improve fluid dynamic simulations&lt;/a&gt;. This Tom&amp;#8217;s 3D article gives a &lt;a href=&quot;http://www.tomshardware.com/reviews/future-3d-graphics,2560.html&quot;&gt;great write-up&lt;/a&gt; (starting with the history of audio cards) on where 3D is right now and how NVidia is beating ATI for scientific computing.&lt;/p&gt;
&lt;hr /&gt;
Ian produces professional screencasts (&lt;a href=&quot;http://procasts.co.uk/examples.html&quot; title=&quot;Professional screencast production&quot;&gt;ProCasts&lt;/a&gt;), writes &lt;a href=&quot;http://TheScreencastingHandbook.com&quot; title=&quot;Screencasting Tutorial eBook&quot;&gt;The Screencasting Handbook&lt;/a&gt;, programs Python, researches Artificial Intelligence (&lt;a href=&quot;http://morconsulting.com&quot; title=&quot;Artificial Intelligence consultant&quot;&gt;Mor Consulting&lt;/a&gt;) and is also a sea-side dweller and consumer of fine coffees.</content>
		<author>
			<name>Ian Ozsvald</name>
			<uri>http://ianozsvald.com</uri>
		</author>
		<source>
			<title type="html">Entrepreneurial Geekiness » Python</title>
			<subtitle type="html">My thoughts on screencasting, ProCasts and high-tech entrepreneurship</subtitle>
			<link rel="self" href="http://ianozsvald.com/category/python/feed/"/>
			<id>http://ianozsvald.com/category/python/feed/</id>
			<updated>2010-03-10T00:22:36+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en">
		<title type="html">Creating a Level for Thief 2</title>
		<link href="http://tartley.com/?p=958"/>
		<id>http://tartley.com/?p=958</id>
		<updated>2010-01-25T13:50:26+00:00</updated>
		<content type="html">&lt;p&gt;After &lt;a href=&quot;http://tartley.com/?p=956&quot;&gt;Sinister Ducks&lt;/a&gt;, my &lt;a href=&quot;http://www.gamedevlessons.com/&quot;&gt;videogame creation mentor&lt;/a&gt; suggested that I create a mod for an existing game, in order to distance myself a little from the programming aspects of creating a game, and instead spend a little time considering the gameplay and the art and the music from the perspective of the user. Sounds like useful advice.&lt;/p&gt;
&lt;p&gt;So, the last couple of weeks I&amp;#8217;ve been working through the &lt;a href=&quot;http://www.jasonotto.net/tutorials/CompleteTut.htm&quot;&gt;tutorials&lt;/a&gt; for &lt;a href=&quot;http://en.wikipedia.org/wiki/DromEd&quot;&gt;DromEd&lt;/a&gt;, the notoriously cranky level editor for vintage sneak-em-up &lt;a href=&quot;http://en.wikipedia.org/wiki/Thief:_The_Dark_Project&quot;&gt;Thief: The Dark Project&lt;/a&gt;. (Specifically for the sequel, &lt;a href=&quot;http://en.wikipedia.org/wiki/Thief_II:_The_Metal_Age&quot;&gt;Thief 2: The Metal Age&lt;/a&gt;, which has a slightly improved engine and editor.) I chose this for three reasons:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Released in 1998, &lt;em&gt;Thief&lt;/em&gt; is old enough that the assets are simple &lt;a href=&quot;http://www.mobygames.com/game/windows/thief-ii-the-metal-age/screenshots/gameShotId,7666/&quot;&gt;low-fidelity geometry and bitmaps&lt;/a&gt;. These are easy enough for me to create and edit, plus if I intersperse existing game assets with my own shoddy creations, there won&amp;#8217;t be a tremendously jarring disparity in apparent quality.&lt;/li&gt;
&lt;li&gt;Even though &lt;em&gt;Thief&lt;/em&gt; is ten years old and the company that created it long gone, there&amp;#8217;s still &lt;a href=&quot;http://www.ttlg.com/&quot;&gt;a thriving community&lt;/a&gt; of amateur afficionados, churning out &lt;a href=&quot;http://www.ttlg.com/forums/showthread.php?p=1508201&quot;&gt;new missions&lt;/a&gt; at the rate of several per month, many of which are of exceedingly high quality &amp;#8211; in some cases exceeding that of the original game. I&amp;#8217;ll be in good company, will have some meaningful feedback, and will have forums to turn to when I get into difficulties.&lt;/li&gt;
&lt;li&gt;Last but not least, &lt;em&gt;Thief&lt;/em&gt; is one of my favourite games of all time. The emphasis on sneaking around and avoiding confrontation suits my sensibilities. Your protagonist, Garrett, is a marvellous, mercenary character. Best of all, in &lt;em&gt;Thief 1&lt;/em&gt;, it reveals unexpected depth halfway through &amp;#8211; the player&amp;#8217;s expectations of a succession of simple heists takes a strange twist when the powerful storyline reveals itself.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Having finished the tutorials, this weekend I broke ground on creating my own level, or &amp;#8216;fan-mission&amp;#8217; (FM), in the parlance:&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://tartley.com/../wp-content/uploads/2010/01/dromed-sm.png&quot;&gt;&lt;img title=&quot;dromed-sm&quot; src=&quot;http://tartley.com/../wp-content/uploads/2010/01/dromed-sm.png&quot; alt=&quot;Designing a Thief2 Level in DromEd&quot; width=&quot;643&quot; height=&quot;502&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I&amp;#8217;m using the DromEd Toolkit, which is DromEd with some third-party patches and bugfixes applied to it. My first impressions with DromEd are that it&amp;#8217;s very clunky and ugly, and startlingly lacking in documentation. I&amp;#8217;ve taken to dipping into the configuration files to see what keyboard commands exist to experiment with. There are a bewildering variety of binary patches to modify the executable in various exciting ways, and forum posts about it, although helpful and prolific, seem fragmentary and rife with broken links. I&amp;#8217;ve still no idea whether I ought to be using &lt;em&gt;Dromed Delux&lt;/em&gt; instead, nor where I should get that from. It&amp;#8217;s a glorious chaotic riot, and it&amp;#8217;s a little intimidating.&lt;/p&gt;
&lt;p&gt;Still, having said that, the binary patches have all worked fine for me, and the more I use the editor, the more it&amp;#8217;s starting to grow on me.&lt;/p&gt;
&lt;p&gt;I&amp;#8217;m setting my FM in a museum. There&amp;#8217;s already an existing museum mission out there, but as opposed to its marble-halled austerity, I&amp;#8217;m imagining this will be more like the cramped, cosy, wood-panneled chaotic collection of something like the wonderful &lt;a href=&quot;http://www.britishtours.com/360/soane-museum.html&quot;&gt;Sir John Soane&amp;#8217;s Museum&lt;/a&gt; in London.&lt;/p&gt;
&lt;p&gt;So progress as of week 1 looks like this: I&amp;#8217;ve carved out some very basic geometry to form a stocky museum building. Here you can just about make out a hole in the brick facade that will form the front entrance. This is not the entrance that the player will likely be using:&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://tartley.com/wp-content/uploads/2010/01/front-entrance.jpg&quot;&gt;&lt;img class=&quot;alignnone size-full wp-image-991&quot; title=&quot;front-entrance&quot; src=&quot;http://tartley.com/wp-content/uploads/2010/01/front-entrance.jpg&quot; alt=&quot;&quot; width=&quot;640&quot; height=&quot;480&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This is all very crude thus far &amp;#8211; with repeating textures on large surfaces, and plain uniform lighting. There are a complete set of mostly rectangular ground-floor rooms, with interconnecting doorways. The highlight of my modelling to date is this stairway leading up to the (otherwise nonexistant) next floor.&lt;br /&gt;
&lt;span&gt;&lt;span&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://tartley.com/wp-content/uploads/2010/01/stairway.jpg&quot;&gt;&lt;img class=&quot;alignnone size-full wp-image-992&quot; title=&quot;stairway&quot; src=&quot;http://tartley.com/wp-content/uploads/2010/01/stairway.jpg&quot; alt=&quot;&quot; width=&quot;640&quot; height=&quot;480&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I&amp;#8217;m not so happy with the wood texture I chose &amp;#8211; I&amp;#8217;ll go back and look for something more uniform. But I am happy with the way the stairs flair out at the bottom. I realised in the process of creating this that this makes it possible to fit a flight of stairs into a smaller space than would otherwise be possible, by allowing the bottom few steps to gracefully project out into the corridor.&lt;/p&gt;
&lt;p&gt;Having finished this last night, I then dreamed about geometric operations on three dimensional spaces, which I think is a good sign.&lt;/p&gt;</content>
		<author>
			<name>Jonathan Hartley</name>
			<uri>http://tartley.com</uri>
		</author>
		<source>
			<title type="html">tartley.com</title>
			<subtitle type="html">A website dedicated to oneself has been described as the greatest act of hubris. Welcome aboard.</subtitle>
			<link rel="self" href="http://tartley.com/?feed=rss2"/>
			<id>http://tartley.com/?feed=rss2</id>
			<updated>2010-03-10T12:22:06+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en">
		<title type="html">Build Pattern: Chained Continuous Build</title>
		<link href="http://feedproxy.google.com/~r/Magpiebrain/~3/DJ6uLSdAglg/"/>
		<id>http://www.magpiebrain.com/?p=744</id>
		<updated>2010-01-24T18:22:36+00:00</updated>
		<content type="html">&lt;p&gt;&lt;a href=&quot;http://www.magpiebrain.com/wp-content/uploads/2010/01/pipeline-flickr-Stuck-in-Customs.jpg&quot;&gt;&lt;img class=&quot;alignleft size-thumbnail wp-image-694&quot; title=&quot;The Steam Pipeline&quot; src=&quot;http://www.magpiebrain.com/wp-content/uploads/2010/01/pipeline-flickr-Stuck-in-Customs-150x150.jpg&quot; alt=&quot;Pipeline from Flickr user Stuck in Customs&quot; width=&quot;150&quot; height=&quot;150&quot; /&gt;&lt;/a&gt; One of the problems quickly encountered when any new team adopts a Continuous Build is that builds become slow. Enforcing a &lt;a title=&quot;Magpiebrain: Build Pattern: Build Time Limit&quot; href=&quot;http://www.magpiebrain.com/2010/01/16/build-pattern-build-time-limit/&quot;&gt;Build Time Limit&lt;/a&gt; can help, but ultimately if all of your Continuous Build runs as one big monolithic block, there are limits to what you can do to decrease build times.&lt;/p&gt;
&lt;p&gt;One of the main issues is that you don&amp;#8217;t get fast feedback to tell you when there is an issue &amp;#8211; by breaking up a monolithic build you can gain fast feedback without reducing code coverage, and often without any complex setup.&lt;/p&gt;
&lt;p&gt;In a &lt;strong&gt;Chained Continuous Build&lt;/strong&gt;, multiple build stages are chained together in a flow. The goal is for the earlier stages to provide the fastest feedback possible, so that build breakages can be detected early. For example, a simple flow might first compile the software and run the unit tests, with the next stage running the slower end-to-end tests.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.magpiebrain.com/wp-content/uploads/2010/01/Simple.gif&quot;&gt;&lt;img class=&quot;aligncenter size-full wp-image-748&quot; title=&quot;Simple Build Chain&quot; src=&quot;http://www.magpiebrain.com/wp-content/uploads/2010/01/Simple.gif&quot; alt=&quot;&quot; width=&quot;294&quot; height=&quot;94&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;With the chain, a downstream stage only runs if the previous stage passed &amp;#8211; so in the above example, the end-to-end stage only runs if the build-and-test stage passes. &lt;/p&gt;
&lt;h3&gt;Handling Breaks&lt;/h3&gt;
&lt;p&gt;As with a Continuous Build you need to have a clear escalation process by which the whole team understands what to do in case of a break. Most teams I have worked with tend to stick to the rule of downing tools to fix the build if any part of the Continuous Build is red &amp;#8211; which is strongly recommended. It is important that if you do decide to split your continuous build into a chain that you don&amp;#8217;t let the team ignore builds that happen further along the chain.&lt;/p&gt;
&lt;h3&gt;Build Artifacts Once vs Rebuild&lt;/h3&gt;
&lt;p&gt;It is strongly suggested that you build the required artifacts once, and pass them along the chain. Rebuilding artifacts takes time &amp;#8211; and the whole point of a chained build is to improve feedback. Additionally getting into the habit of building an artifact once, and once only, will help when you start considering creating a proper Build Pipeline (see below).&lt;/p&gt;
&lt;h3&gt;And Build Pipelines&lt;/h3&gt;
&lt;p&gt;Note that a chained build is not necessarily the same thing as a Build Pipeline. A Chained Continuous Build simply represents one or more Continuous Builds in series, whereas a Build Pipeline fully models all the stages a software artifact moves from development right through to production. One or more Chained Continuous Builds may form part of a Build Pipeline, and a simplistic Build Pipeline might not represent anything other than Chained Continuous Builds, but Build Pipelines will often incorporate activities more varied than compilation or test running.&lt;/p&gt;
&lt;h3&gt;Fast Feedback vs Fast Total Build Time&lt;/h3&gt;
&lt;p&gt;One thing to note is that by breaking a big build up into smaller sections to improve fast feedback, counterintuitively you may well end up increasing overall build time. The time to build and pass artifacts from one stage to another adds time, as does dispatching calls to build processes further down the chain. This balance has to be considered &amp;#8211; consider being conservative in the splits you make, and always keep an eye on the total duration of your build chain.&lt;/p&gt;
&lt;h3&gt;Tool Support&lt;/h3&gt;
&lt;p&gt;Tooling can be complex. Simple straight-line chains can be relatively easily build using most continuous build systems. For example a common approach is to have one build check in some artifact which is the trigger point for another Continuos Build to run. Such approaches have the downside that the chain isn&amp;#8217;t explicitly modelled, and reporting of the current state of the chain ends up having to be jury rigged, typically through custom dashboards. More complex still is dealing with branching chains.&lt;/p&gt;
&lt;p&gt;Continuous Build systems have got more mature of late, with many of them supporting simple Chained Continuous Builds out of the box. &lt;a title=&quot;TeamCity Build Chains and Enhanced Build Dependencies support&quot; href=&quot;http://www.jetbrains.com/teamcity/features/continuous_integration.html#Build_Chains_and_Enhanced_Build_Dependencies&quot;&gt;TeamCity&lt;/a&gt;, &lt;a title=&quot;Hudson Downstream-Ext Plugin&quot; href=&quot;http://wiki.hudson-ci.org/display/HUDSON/Downstream-Ext+Plugin&quot;&gt;Hudson&lt;/a&gt; and &lt;a title=&quot;Cruise Features&quot; href=&quot;http://www.thoughtworks-studios.com/cruise-release-management/features-benefits&quot;&gt;Cruise&lt;/a&gt; and others all have some form of (varying) support. Cruise probably has the best support for running stages in parallel (caveat: Cruise is written by ThoughtWorks, the company I currently work for), and has some of the better support for visualising the chains, but given the way all of these tools are moving expect support in this area to get much better over time.&lt;/p&gt;
&lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.feedburner.com/~ff/Magpiebrain?a=DJ6uLSdAglg:4HxRdOEDqWo:yIl2AUoC8zA&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/Magpiebrain?d=yIl2AUoC8zA&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/Magpiebrain?a=DJ6uLSdAglg:4HxRdOEDqWo:7Q72WNTAKBA&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/Magpiebrain?d=7Q72WNTAKBA&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/Magpiebrain?a=DJ6uLSdAglg:4HxRdOEDqWo:D7DqB2pKExk&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/Magpiebrain?i=DJ6uLSdAglg:4HxRdOEDqWo:D7DqB2pKExk&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/Magpiebrain?a=DJ6uLSdAglg:4HxRdOEDqWo:dnMXMwOfBR0&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/Magpiebrain?d=dnMXMwOfBR0&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;</content>
		<author>
			<name>Sam Newman</name>
			<uri>http://www.magpiebrain.com</uri>
		</author>
		<source>
			<title type="html">Magpiebrain</title>
			<subtitle type="html">The blog of Sam Newman</subtitle>
			<link rel="self" href="http://feeds.feedburner.com/Magpiebrain"/>
			<id>http://feeds.feedburner.com/Magpiebrain</id>
			<updated>2010-02-27T16:22:04+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en">
		<title type="html">IMAPClient 0.5.2</title>
		<link href="http://freshfoo.com/blog/IMAPClient-0.5.2"/>
		<id>http://freshfoo.com/blog/2010/01/24/IMAPClient-0.5.2</id>
		<updated>2010-01-24T17:58:00+00:00</updated>
		<content type="html">&lt;p&gt;IMAPClient 0.5.2 has just been released. This release fixes 2 bugs
(&lt;a class=&quot;reference external&quot; href=&quot;http://imapclient.freshfoo.com/ticket/28&quot;&gt;#28&lt;/a&gt; and &lt;a class=&quot;reference external&quot; href=&quot;http://imapclient.freshfoo.com/ticket/33&quot;&gt;#33&lt;/a&gt;).  Much thanks to Fergal Daly and Mark Eichin for
reporting these bugs.&lt;/p&gt;
&lt;p&gt;Install from the &lt;a class=&quot;reference external&quot; href=&quot;http://freshfoo.com/projects/IMAPClient/IMAPClient-0.5.2.tar.gz&quot;&gt;tarball&lt;/a&gt; or &lt;a class=&quot;reference external&quot; href=&quot;http://freshfoo.com/projects/IMAPClient/IMAPClient-0.5.2.zip&quot;&gt;zip&lt;/a&gt; or upgrade using easy_install or pip.&lt;/p&gt;</content>
		<author>
			<name>Menno Smits</name>
			<email>menno AT freshfoo DOT com</email>
			<uri>http://freshfoo.com/blog</uri>
		</author>
		<source>
			<title type="html">Menno's Musings</title>
			<subtitle type="html">software | life | whatever</subtitle>
			<link rel="self" href="http://freshfoo.com/blog/index.atom"/>
			<id>http://freshfoo.com/blog/index.atom</id>
			<updated>2010-03-10T22:22:26+00:00</updated>
			<rights type="html">Copyright 2009 Menno Smits</rights>
		</source>
	</entry>

	<entry xml:lang="en-US">
		<title type="html">Register for PyCon, or the Kitten Gets It</title>
		<link href="http://feedproxy.google.com/~r/ForSomeValueOfMagic/~3/8Gx0-qhOqIo/register-for-pycon-or-kitten-gets-it.html"/>
		<id>tag:blogger.com,1999:blog-496482.post-7848115737773799437</id>
		<updated>2010-01-22T21:14:47+00:00</updated>
		<content type="html">&lt;div class=&quot;separator&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;separator&quot;&gt;&lt;a href=&quot;http://1.bp.blogspot.com/_JT1n2tt-4Wg/S0UxVwTiXuI/AAAAAAAAAWM/hwfxAOUdusc/s1600-h/kitten2.jpg&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://1.bp.blogspot.com/_JT1n2tt-4Wg/S0UxVwTiXuI/AAAAAAAAAWM/hwfxAOUdusc/s640/kitten2.jpg&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;separator&quot;&gt;&lt;span&gt;&lt;i&gt;Just sayin', it might be better if you planned to attend the conference. &lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;separator&quot;&gt;&lt;br /&gt;
&lt;/div&gt;It's not that I like harming innocent small furry creatures, it's just that there are still thousands of Python users and potential Python users who still don't know what excellent value for money the conference is, or how much fun you can have there.&lt;br /&gt;
&lt;br /&gt;
PyCon is in Atlanta this year, and despite the parlous state of the world economy there's a chance that it will be the biggest Python event ever. But hey, we all know that size isn't everything.&lt;br /&gt;
&lt;br /&gt;
Although I was notionally on the program committee, and did at least register my opinions of the talks I was allocated by the submissions scheme, I (yet again) didn't manage to make a single meeting due to pressure of other business.&amp;nbsp; I'm actually not too unhappy about that, given the incredibly difficult task that the committee had to perform in order to ... well, I was going to say &quot;sort the wheat from the chaff&quot;, but in fact there was so little chaff that wouldn't really be an appropriate analogy.&lt;br /&gt;
&lt;br /&gt;
A number of people have blogged already about &lt;i&gt;Five PyCon Talks You Must Not Miss&lt;/i&gt;, but since there's still a few hours to get in at the early bird rate I thought I'd throw out my list of unmissables from &lt;a href=&quot;http://us.pycon.org/2010/conference/talks/&quot;&gt;the extensive list of talks&lt;/a&gt;. How's that for arrogance?&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;&lt;b&gt;A Short Pinax Tutorial&lt;/b&gt;, Danny Greenfeld&lt;/i&gt;. I have heard Danny speak at local Python user groups. If I had time I would be attending the half day Pinax tutorial that he and James Tauber are giving, but this is the second best way to find out how to get started with Pinax.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;i&gt;What Every Developer Should Know About Database Scalability&lt;/i&gt;&lt;/b&gt;,&lt;i&gt;&lt;b&gt; &lt;/b&gt;Jonathan Ellis&lt;/i&gt;. This one will be straight from the horse's mouth - it's always worth hearing Jonathan's summaries of his immense practical experience.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;i&gt;IronPython Tooling&lt;/i&gt;&lt;/b&gt;&lt;i&gt;, Dino E Viehland&lt;/i&gt;. As a Windows user who has hardly touched IronPython so far I am interested in finding out what my options are. Nobody is likely to know better than Dino, who is probably the most prominent member of the Microsoft development team.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;i&gt;Scaling Python Webapps from Zero to 50 Million Users - A Top-Down Approach&lt;/i&gt;&lt;/b&gt;&lt;i&gt;, Jinal Jhaveri&lt;/i&gt;. Although I haven't heard Jinal speak before I can't resist the lure of hearing what someone with really high-volume Python web experience has to say. &lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;i&gt;Why Not Run All Your Tests All the Time? A Study of Continuous Integration Systems&lt;/i&gt;&lt;/b&gt;&lt;i&gt;, Titus C Brown&lt;/i&gt;. Ever since I hear Titus' tutorial (with Grig Gheorghiu) on testing a couple of year's ago I've wanted to hear what he has to say about CI. This is my chance.&lt;br /&gt;
&lt;br /&gt;
Alas, five talks isn't anywhere near enough to encompass everything I want to hear, and I am also keenly anticipating &lt;i&gt;Turtles All The Way Down: Demystifying Deferreds&lt;/i&gt;, &lt;i&gt;Decorators, and Declarations&lt;/i&gt;, &lt;i&gt;Pay Only for What You Eat: A Tour of the Repoze.BFG Repository and Philosophy&lt;/i&gt;, &lt;i&gt;On The Subject Of Source Code&lt;/i&gt;, &lt;i&gt;Python's Dusty Corners&lt;/i&gt;, &lt;i&gt;Debating 'til Dawn: Topics to Keep You Up All Night&lt;/i&gt;, &lt;i&gt;Powerful Pythonic Patterns&lt;/i&gt; and &lt;i&gt;Tests and Testability&lt;/i&gt;.&amp;nbsp; This is going to be a knockout conference even before you consider all the amazing things that will be happening in Open Space.&lt;br /&gt;
&lt;br /&gt;
You really have to be there. And you'll be helping to save a poor kitten that never did anyone any harm in its life!&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/496482-7848115737773799437?l=holdenweb.blogspot.com&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;&lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.feedburner.com/~ff/ForSomeValueOfMagic?a=8Gx0-qhOqIo:dwm1Ovb0MBI:yIl2AUoC8zA&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/ForSomeValueOfMagic?d=yIl2AUoC8zA&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/ForSomeValueOfMagic?a=8Gx0-qhOqIo:dwm1Ovb0MBI:Jy2wSXVWK38&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/ForSomeValueOfMagic?i=8Gx0-qhOqIo:dwm1Ovb0MBI:Jy2wSXVWK38&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/ForSomeValueOfMagic/~4/8Gx0-qhOqIo&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</content>
		<author>
			<name>Steve</name>
			<email>noreply@blogger.com</email>
			<uri>http://holdenweb.blogspot.com/</uri>
		</author>
		<source>
			<title type="html">For Some Value of &quot;Magic&quot;</title>
			<subtitle type="html">Python, software, open source, plus odd rants about almost anything</subtitle>
			<link rel="self" href="http://holdenweb.blogspot.com/atom.xml"/>
			<id>tag:blogger.com,1999:blog-496482</id>
			<updated>2010-03-10T08:22:30+00:00</updated>
		</source>
	</entry>

</feed>
