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

<channel>
	<title>John McCollum</title>
	<atom:link href="http://johnmc.co/llum/feed/" rel="self" type="application/rss+xml" />
	<link>http://johnmc.co/llum</link>
	<description>Muddling through since 1980</description>
	<lastBuildDate>Sat, 11 Sep 2010 11:59:14 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Logitech Trackman Review</title>
		<link>http://johnmc.co/llum/logitech-trackman-review/</link>
		<comments>http://johnmc.co/llum/logitech-trackman-review/#comments</comments>
		<pubDate>Sat, 11 Sep 2010 11:59:14 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[general]]></category>
		<category><![CDATA[mouse]]></category>
		<category><![CDATA[review]]></category>

		<guid isPermaLink="false">http://johnmc.co/llum/?p=247</guid>
		<description><![CDATA[The Logitech Trackman Wheel Trackball Mouse (to give it its full, silly title) is an entry level trackball input device. I recently picked one up in an attempt to combat some soreness I&#8217;d been experiencing in the wrist area after a long day&#8217;s work! I chose this device because it was competitively priced (just £24.99 [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fjohnmc.co%2Fllum%2Flogitech-trackman-review%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fjohnmc.co%2Fllum%2Flogitech-trackman-review%2F&amp;style=normal" height="61" width="50" /><br />
			</a>
		</div>
<p><img class="alignleft" title="Logitech Trackman" src="http://johnmc.co/llum/wp-content/uploads/2010/09/trackman.jpg" alt="Logitech Trackman" width="203" height="190" />The Logitech Trackman Wheel Trackball Mouse (to give it its full, silly title) is an entry level trackball input device. I recently picked one up in an attempt to combat some soreness I&#8217;d been experiencing in the wrist area after a long day&#8217;s work!</p>
<p>I chose this device because it was competitively priced (just <a href="http://www.play.com/PC/PCs/4-/6109331/Logitech-Trackman-Wheel-Trackball-Mouse/Product.html">£24.99 from play.com</a>) and I didn&#8217;t want to spend any more than that without knowing how I would react to a different type of input device.<span id="more-247"></span>The mouse plugged straight into a USB port and &#8216;just worked&#8217; out of the box. I use it at work on an  Ubuntu machine, and there was no faffing around with drivers or anything like that &#8211; just plug and play.</p>
<p>The mouse is nice and big, and to me, it&#8217;s comfortable to use. I have pretty big hands (stop sniggering at the back!) and I feel like my hand is just resting on it while I use it. I&#8217;ve noticed a significant lessening of wrist pain and fatigue after using this mouse.</p>
<p>I&#8217;ve been using a standard mouse for around twenty years now &#8211; about two-thirds of my life &#8211; so I was initially a little concerned about how long it would take to get used a trackball mouse.</p>
<p>My first instinct when using the Trackman was to turn up the mouse speed. In particular, you might feel there&#8217;s a little more effort required in moving the mouse around if you&#8217;re using two or more monitors.</p>
<p>I also found that for the first week or so, my pointing and clicking accuracy was lower than usual, so allow yourself some time to acclimatise. However, it became second nature to me pretty quickly after that. In fact, it feels weird going home to use a &#8216;normal&#8217; mouse now!</p>
<p>If you&#8217;re looking for something a little bit different, or you&#8217;re concerned about aching arms, you could do a lot worse than this mouse.</p>
]]></content:encoded>
			<wfw:commentRss>http://johnmc.co/llum/logitech-trackman-review/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Nominations open in the Packt Open Source Awards 2010</title>
		<link>http://johnmc.co/llum/nominations-open-in-the-packt-open-source-awards-2010/</link>
		<comments>http://johnmc.co/llum/nominations-open-in-the-packt-open-source-awards-2010/#comments</comments>
		<pubDate>Thu, 02 Sep 2010 21:11:32 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[web development]]></category>
		<category><![CDATA[open-source]]></category>

		<guid isPermaLink="false">http://johnmc.co/llum/?p=230</guid>
		<description><![CDATA[Nominations are available in the following categories: Open Source CMS Award Hall of Fame CMS Most Promising Open Source Project Open Source E-commerce Applications Open Source JavaScript Libraries Open Source Graphics Software You don&#8217;t have to vote in all categories; this year, I&#8217;ll be voting in three: Open Source CMS Award For this award, I&#8217;ll [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fjohnmc.co%2Fllum%2Fnominations-open-in-the-packt-open-source-awards-2010%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fjohnmc.co%2Fllum%2Fnominations-open-in-the-packt-open-source-awards-2010%2F&amp;style=normal" height="61" width="50" /><br />
			</a>
		</div>
<p><a href="http://www.packtpub.com/open-source-awards-home/nominations"><img class="alignnone" title="Packt open source awards 2010" src="http://johnmc.co/llum/wp-content/uploads/2010/09/nominate.jpg" alt="" width="479" height="59" /></a><br />
<a href="http://www.packtpub.com/open-source-awards-home/nominations"></a></p>
<p><a href="http://www.packtpub.com/open-source-awards-home/nominations">Nominations</a> are available in the following categories:</p>
<ul>
<li>Open Source CMS Award</li>
<li>Hall of Fame CMS</li>
<li>Most Promising Open Source Project</li>
<li>Open Source E-commerce Applications</li>
<li>Open Source JavaScript Libraries</li>
<li>Open Source Graphics Software</li>
</ul>
<p>You don&#8217;t have to vote in all categories; this year, I&#8217;ll be voting in three:</p>
<p><span id="more-230"></span></p>
<h3><span style="font-weight: normal;">Open Source CMS Award</span></h3>
<p>For this award, I&#8217;ll be voting for <a href="http://www.cmsmadesimple.org/">CMS Made Simple</a>.</p>
<p>At work we use a variety of CMS depending on the client&#8217;s needs, amongst them Joomla!, Drupal and CMS Made Simple. CMSMS has an extremely smooth learning curve; we&#8217;ve seen time and time again that even the least technical people can use it with ease. We have <em>never </em>needed to give anyone a second training session on CMSMS! (If only we could say the same about Joomla! <img src='http://johnmc.co/llum/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> )</p>
<h3>Most Promising Open Source Project</h3>
<p>I&#8217;ll be voting for <a href="http://nodejs.org/">node.js</a> for this one. We&#8217;re starting to see some really exciting and interesting demonstrations of the power of this framework, and I&#8217;ll be keenly watching its development.</p>
<h3>Open Source JavaScript Libraries</h3>
<p>I have to vote for <a href="http://jquery.com/">jQuery</a> for this one. It&#8217;s no exaggeration to say that jQuery has transformed the web; it has certainly transformed the way I write JavaScript, and it makes my life easier on a day to day basis.</p>
<p>These days I&#8217;m enjoying MooTools more and more, and I intend to use it for as many projects as I can, but I&#8217;m not quite there with it yet.</p>
<p>Feel free to share your votes in the comments!</p>
]]></content:encoded>
			<wfw:commentRss>http://johnmc.co/llum/nominations-open-in-the-packt-open-source-awards-2010/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>My 10k AEA app</title>
		<link>http://johnmc.co/llum/my-10k-aea-app/</link>
		<comments>http://johnmc.co/llum/my-10k-aea-app/#comments</comments>
		<pubDate>Sun, 22 Aug 2010 07:33:02 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://johnmc.co/llum/?p=225</guid>
		<description><![CDATA[I recently wrote an entry for 10k Apart, the competition to create a web app in 10k or less. You can see my entry here. The code comes in at about 8k all in, and I have to thank my colleague Allan for the graphics!]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fjohnmc.co%2Fllum%2Fmy-10k-aea-app%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fjohnmc.co%2Fllum%2Fmy-10k-aea-app%2F&amp;style=normal" height="61" width="50" /><br />
			</a>
		</div>
<p>I recently wrote an entry for 10k Apart, the competition to create a web app in 10k or less. You can <a href="http://10k.aneventapart.com/Entry/227">see my entry here</a>.</p>
<p><a href="http://johnmc.co/llum/wp-content/uploads/2010/08/poker-ss.png"><img class="size-full wp-image-226 alignnone" title="poker-ss" src="http://johnmc.co/llum/wp-content/uploads/2010/08/poker-ss.png" alt="" width="300" height="200" /></a></p>
<p>The code comes in at about 8k all in, and I have to thank my colleague <a href="http://twitter.com/todd_unctious">Allan</a> for the graphics!</p>
]]></content:encoded>
			<wfw:commentRss>http://johnmc.co/llum/my-10k-aea-app/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A new domain and a new host</title>
		<link>http://johnmc.co/llum/a-new-domain-and-a-new-host/</link>
		<comments>http://johnmc.co/llum/a-new-domain-and-a-new-host/#comments</comments>
		<pubDate>Sun, 15 Aug 2010 08:14:48 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[general]]></category>
		<category><![CDATA[hosting]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[vps]]></category>

		<guid isPermaLink="false">http://johnmc.co/llum/?p=219</guid>
		<description><![CDATA[There are big changes afoot! I have a new domain (loving the new URLs!), new hosting, and a bit of a change of colours on the blog. Hosting has been moved from 2mhost to Linode. 2mhost has always worked well for me. I initially joined them because they provided cheap PHP5 hosting at a time [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fjohnmc.co%2Fllum%2Fa-new-domain-and-a-new-host%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fjohnmc.co%2Fllum%2Fa-new-domain-and-a-new-host%2F&amp;style=normal" height="61" width="50" /><br />
			</a>
		</div>
<p>There are big changes afoot!</p>
<p>I have a new domain (loving the new URLs!), new hosting, and a bit of a change of colours on the blog.</p>
<p><span id="more-219"></span>Hosting has been moved from <a href="http://www.2mhost.com/">2mhost</a> to <a href="http://www.linode.com/?r=5dc5f28983afe106ebce09fb81e73333dc4d6255">Linode</a>. 2mhost has always worked well for me. I initially joined them because they provided cheap PHP5 hosting at a time when this was far from commonplace, but for me, their uptime and support has been excellent &#8211; far better than I would have expected from their price point.</p>
<p>I made the change to a VPS solely because I wanted more flexibility, and Linode have so far been excellent for me. They offer a wide choice of Linux distros (I went for Ubuntu 10.4), full shell access, and a managed backup solution for very, very reasonable rates. There&#8217;s even an <a href="http://www.androlib.com/android.application.com-linode-android-CDCw.aspx">android app</a> to help you manage your account!</p>
<p>I would happily recommend both hosts at this time.</p>
<p>Please <a href="http://johnmc.co/llum/contact/">let me know</a> if you come across any 404s or gremlins lurking here after the site move!</p>
<p>(Disclosure: link to Linode contains my referral number. But rest assured, if I fall out with them, I&#8217;ll be posting that here too!)</p>
]]></content:encoded>
			<wfw:commentRss>http://johnmc.co/llum/a-new-domain-and-a-new-host/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Disable CSRF protection for Django 1.2</title>
		<link>http://johnmc.co/llum/disable-csrf-protection-for-django-1-2/</link>
		<comments>http://johnmc.co/llum/disable-csrf-protection-for-django-1-2/#comments</comments>
		<pubDate>Mon, 05 Jul 2010 21:05:30 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Django]]></category>
		<category><![CDATA[web development]]></category>
		<category><![CDATA[CSRF]]></category>
		<category><![CDATA[security]]></category>

		<guid isPermaLink="false">http://johnmccollum.co.uk/?p=198</guid>
		<description><![CDATA[One of the major changes to Django 1.2 was the automatic switching-on of CSRF protection. I ran into some problems today, hitting the following error. Forbidden (403) CSRF verification failed. Request aborted. There were a couple of issues at play here. Firstly, I was using django.contrib.auth.views.login to log my users in. Even if you don&#8217;t [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fjohnmc.co%2Fllum%2Fdisable-csrf-protection-for-django-1-2%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fjohnmc.co%2Fllum%2Fdisable-csrf-protection-for-django-1-2%2F&amp;style=normal" height="61" width="50" /><br />
			</a>
		</div>
<p>One of the major changes to <a href="http://docs.djangoproject.com/en/dev/releases/1.2/">Django 1.2</a> was the automatic switching-on of CSRF protection. I ran into some problems today, hitting the following error.<br />
<pre><pre>Forbidden (403)
CSRF verification failed. Request aborted.</pre></pre><br />
<span id="more-198"></span>There were a couple of issues at play here. Firstly, I was using django.contrib.auth.views.login to log my users in. Even if you don&#8217;t have the CSRF middleware switched on, these views are protected.  Secondly, users were logging in from a different, non-Django sub-domain, so generating Django-compatible CSRF tokens wasn&#8217;t really an option.</p>
<p>Thirdly, the Django site in question was a relatively small, internal, non-client facing site.</p>
<p>With all that in mind, I took the decision to turn off Django&#8217;s CSRF protection.  I had to dig a bit to find this information, so hopefully it helps someone else.</p>
<p><strong>You probably shouldn&#8217;t do this: CSRF protection is a good thing!</strong></p>
<p>Implementing the following as middleware will do the trick.<br />
<pre><pre>class disableCSRF:
&nbsp;&nbsp;&nbsp;&nbsp;def process_request(self, request):
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;setattr(request, &#039;_dont_enforce_csrf_checks&#039;, True)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return None</pre></pre></p>
]]></content:encoded>
			<wfw:commentRss>http://johnmc.co/llum/disable-csrf-protection-for-django-1-2/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Book Review: Django 1.1 Testing and Debugging</title>
		<link>http://johnmc.co/llum/book-review-django-1-1-testing-and-debugging/</link>
		<comments>http://johnmc.co/llum/book-review-django-1-1-testing-and-debugging/#comments</comments>
		<pubDate>Thu, 03 Jun 2010 19:15:27 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Django]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[book review]]></category>

		<guid isPermaLink="false">http://johnmccollum.co.uk/?p=187</guid>
		<description><![CDATA[A wealth of tools are available to debug and test Django applications, but knowing when and how to use these resources can intimidate the new user. Django 1.1 Testing and Debugging, by Karen M. Tracey, aims to walk the user through the process of creating a web application from scratch, ensuring that the resulting code is [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fjohnmc.co%2Fllum%2Fbook-review-django-1-1-testing-and-debugging%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fjohnmc.co%2Fllum%2Fbook-review-django-1-1-testing-and-debugging%2F&amp;style=normal" height="61" width="50" /><br />
			</a>
		</div>
<p><a href="http://johnmccollum.co.uk/wp-content/uploads/2010/06/7566_MockupCover3.jpg"><img class="alignleft size-full wp-image-192" title="7566_MockupCover" src="http://johnmccollum.co.uk/wp-content/uploads/2010/06/7566_MockupCover3.jpg" alt="" width="200" height="247" /></a>A wealth of tools are available to debug and test Django applications, but knowing when and how to use these resources can intimidate the new user. <a href="https://www.packtpub.com/django-1-1-testing-and-debugging/book">Django 1.1 Testing and Debugging</a>, by Karen M. Tracey, aims to walk the user through the process of creating a web application from scratch, ensuring that the resulting code is bug-free and ready for production.In a way, Django makes it deceptively easy to write a dynamic web application. With a few lines of code, you can have an fully functional application up and running in a short space of time, and complex applications take less time than ever to develop. Inevitably, though, bugs will creep in to the development process, and the professional developer will want to make sure that their application is as bug-free as possible before launching.</p>
<p>The book opens with a simple question: &#8220;How do you know when code you have written is working as intended?&#8221; The answer, of course, is that you test it. But if you&#8217;re not a cowboy coder, you&#8217;ll want to leverage the full power of Django&#8217;s automated testing framework for best results. In the course of this book, the author develops a full web application, from start to finish, and describes how each section would be tested and debugged.<span id="more-187"></span>The author&#8217;s intended audience for this book is perhaps one that is relatively new to Django. Ideally, the reader will have a functioning installation of Django, will have worked through at least the tutorial, and may well have written a couple of applications. This book would also be excellent for someone migrating to Python from another language, or moving into <a href="http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller">MVC</a> frameworks for the first time. Crucially, the book doesn&#8217;t just explain how to test, it also explains when and what to test too, so it serves as an ideal introduction into testing in general. There are many code examples and screenshots, and each line of code is fully explained.</p>
<p>The book kicks off with an examination of doctests and unit tests. Their relative pros and cons are explained in some depth, and the author does a great job in this section of discussing exactly what you should be testing, initially beginning with data models. She then moves on to more advanced unit testing strategies and applications, such as testing views and customizations of the admin area.</p>
<p>One of Python&#8217;s greatest strengths is its ecosystem, and the following chapters cover some of the other tools you might want to integrate into your project. Django-coverage provides reporting on how much of your code is covered by tests, and Twill is a package that essentially replaces Django&#8217;s test client to provide enhanced functionality — particularly for working with forms. Both packages have fully explained and in-depth examples to work through. (Code downloads are available at <a href="http://www.packtpub.com/">Packt Publishing</a>&#8216;s web site for the terminally lazy!)</p>
<p>With the testing section of the book complete, the author moves on to the debugging section of the book. Starting with the very basics (setting up Django in debug mode), the book then takes a detailed look at the Django debug page. This is something that I could see being useful for many new users — the debug page contains a wealth of information (and not all of it is always entirely relevant, if not outright misleading), so learning to understand this page is crucial to your success as a Djangonaut.</p>
<p>The book then takes a tour of the excellent <a href="http://github.com/robhudson/django-debug-toolbar">django-debug-toolbar</a>, before moving on to what was, for me, the most valuable chapter of the book: &#8220;When you don&#8217;t know even know what to log: Using Debuggers.&#8221; This chapter introduces the <a href="http://docs.python.org/library/pdb.html">PDB</a> (Python Debugger) library.</p>
<p>Like many others, I suppose, Django was my first introduction to Python. For that reason, my knowledge of the standard library is perhaps not as strong as it could be. For me, learning about the different ways of using the debugger was the highlight of the book, and something that will probably change the way I develop with Django.</p>
<p>The book concludes, of course, by taking the application into a production environment. And in line with the latest advice, that means setting up the site using Apache and mod_wsgi. In keeping with the theme of the book, the most common issues in deployment are identified and resolved.</p>
<p>This book weighs in at over four hundred pages, and its greatest strength is its wide scope. Although the basics of testing in Django are easy to understand, it&#8217;s another thing entirely to see an entire application built from the ground up with testing at the forefront. As I mentioned before, the focus is as much on developing a testing and debugging strategy as it is on the technical aspects.</p>
<p>From a more technical point of view, the subject matter ranges from beginner to advanced. From writing the most basic doctests to debugging multi-process race conditions, the difficulty level increases incrementally, and no important details are skirted over. The prose is well-written and easy to read throughout.</p>
<p>If I had one gripe about the book, it would be that in places, it goes into a little too much detail. There&#8217;s a section on using the Django web site (the bug tracker, the mailing list etc.) that I could have done without entirely. Although it might be useful for some users, the site is pretty self-explanatory and doesn&#8217;t really warrant the attention it gets, in my opinion.</p>
<p>You shouldn&#8217;t let that put you off though — this really is an excellent exploration of the topic. In addition, Packt Publishing will make a donation to the Django project for every book sold, so in purchasing this book, you&#8217;ll be indirectly helping the project financially too.</p>
<p>This book is worth a place on any Django developer&#8217;s bookshelf.</p>
]]></content:encoded>
			<wfw:commentRss>http://johnmc.co/llum/book-review-django-1-1-testing-and-debugging/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Special offers on Plone books</title>
		<link>http://johnmc.co/llum/special-offers-on-plone-books/</link>
		<comments>http://johnmc.co/llum/special-offers-on-plone-books/#comments</comments>
		<pubDate>Fri, 28 May 2010 19:32:08 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[content management systems]]></category>
		<category><![CDATA[books]]></category>
		<category><![CDATA[offer]]></category>
		<category><![CDATA[plone]]></category>

		<guid isPermaLink="false">http://johnmccollum.co.uk/?p=183</guid>
		<description><![CDATA[I&#8217;ve always meant to take a closer look at Plone. It has an excellent reputation for being a robust, scalable, secure CMS used by all sorts of organisations, large and small. The lack of cheap, shared hosting had put me off in the past, but that&#8217;s really no excuse for not checking out a great [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fjohnmc.co%2Fllum%2Fspecial-offers-on-plone-books%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fjohnmc.co%2Fllum%2Fspecial-offers-on-plone-books%2F&amp;style=normal" height="61" width="50" /><br />
			</a>
		</div>
<p>I&#8217;ve always meant to take a closer look at <a href="http://plone.org/">Plone</a>. It has an excellent reputation for being a robust, scalable, secure CMS used by all sorts of organisations, large and small. The lack of cheap, shared hosting had put me off in the past, but that&#8217;s really no excuse for not checking out a great CMS (particularly with the rise of cheap virtual private servers.)<span id="more-183"></span>My favourite publisher, <a href="http://www.packtpub.com">Packt</a>, have a couple of new books out for Plone (<a href="http://www.packtpub.com/plone-3-3-products-development-cookbook/book">Plone 3 Products Development Cookbook</a> and <a href="http://www.packtpub.com/plone-3-3-multimedia-website/book">Plone 3 Multimedia</a>.) Their books are always really well written and there&#8217;s the added incentive of 20-30% off at the moment! On top of that, they&#8217;re doing a running a prize draw, with Amazon and iTunes vouchers as prizes, to anyone buying these books in the first two weeks of release!</p>
<p><a href="http://www.packtpub.com/article/plone-campaign-may-2010">You can check out the promotion here.</a></p>
]]></content:encoded>
			<wfw:commentRss>http://johnmc.co/llum/special-offers-on-plone-books/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The easiest way to implement __iter__() for a python object</title>
		<link>http://johnmc.co/llum/the-easiest-way-to-implement-__iter__-for-a-python-object/</link>
		<comments>http://johnmc.co/llum/the-easiest-way-to-implement-__iter__-for-a-python-object/#comments</comments>
		<pubDate>Thu, 27 May 2010 21:04:07 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[generator]]></category>
		<category><![CDATA[iterator]]></category>

		<guid isPermaLink="false">http://johnmccollum.co.uk/?p=177</guid>
		<description><![CDATA[If you want to iterate over an object in Python, the simplest (and most Pythonic?) way is to use a generator. A nice simple example to demonstrate the utility and power of this technique: class Foo(object): &#160;&#160;&#160;&#160;def __init__(self): &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;self.mylist = [1,2,3,4,5] &#160;&#160;&#160;&#160; &#160;&#160;&#160;&#160;def __iter__(self): &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;for i in self.mylist: &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;yield i You can then do: &#62;&#62;&#62; [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fjohnmc.co%2Fllum%2Fthe-easiest-way-to-implement-__iter__-for-a-python-object%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fjohnmc.co%2Fllum%2Fthe-easiest-way-to-implement-__iter__-for-a-python-object%2F&amp;style=normal" height="61" width="50" /><br />
			</a>
		</div>
<p>If you want to iterate over an object in Python, the simplest (and most Pythonic?) way is to use a <a href="http://docs.python.org/glossary.html#term-generator">generator</a>. A nice simple example to demonstrate the utility and power of this technique:</p>
<p><pre><code>
class Foo(object):
&nbsp;&nbsp;&nbsp;&nbsp;def __init__(self):
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.mylist = [1,2,3,4,5]
&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;def __iter__(self):
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for i in self.mylist:
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;yield i
</code></pre></p>
<p>You can then do:<br />
<pre><code>
&gt;&gt;&gt; f = Foo()
&gt;&gt;&gt; for i in f:
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; print i
1
2
3
4
5
</code></pre></p>
<p>Concise, clear, and functional. <img src='http://johnmc.co/llum/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://johnmc.co/llum/the-easiest-way-to-implement-__iter__-for-a-python-object/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Installing drivers for HTC Desire</title>
		<link>http://johnmc.co/llum/installing-drivers-for-htc-desire/</link>
		<comments>http://johnmc.co/llum/installing-drivers-for-htc-desire/#comments</comments>
		<pubDate>Sun, 23 May 2010 21:44:23 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[drivers]]></category>
		<category><![CDATA[mobile]]></category>

		<guid isPermaLink="false">http://johnmccollum.co.uk/?p=174</guid>
		<description><![CDATA[I recently treated myself to a shiny new HTC Desire &#8211; partly to learn more about Android development, and partly because, well, I wanted one.  :) It&#8217;s a great piece of kit, and I would wholeheartedly recommend it. I wanted to debug apps on the handset rather than the simulator, but like many others, I had [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fjohnmc.co%2Fllum%2Finstalling-drivers-for-htc-desire%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fjohnmc.co%2Fllum%2Finstalling-drivers-for-htc-desire%2F&amp;style=normal" height="61" width="50" /><br />
			</a>
		</div>
<p>I recently treated myself to a shiny new HTC Desire &#8211; partly to learn more about Android development, and partly because, well, I wanted one.  :) It&#8217;s a great piece of kit, and I would wholeheartedly recommend it.</p>
<p>I wanted to debug apps on the handset rather than the simulator, but like many others, I had big problems installing drivers under Vista (32 bit). The solution, for me, was to install <a href="http://www.htc.com/www/support.aspx">HTC Sync</a>.</p>
<p>After a good hour of struggling, this installed in minutes and solved all of my problems. Hopefully this saves someone else some time!</p>
]]></content:encoded>
			<wfw:commentRss>http://johnmc.co/llum/installing-drivers-for-htc-desire/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Stop talking about Web 2.0, start listening to your users</title>
		<link>http://johnmc.co/llum/stop-talking-about-web-2-0-start-listening-to-your-users/</link>
		<comments>http://johnmc.co/llum/stop-talking-about-web-2-0-start-listening-to-your-users/#comments</comments>
		<pubDate>Sat, 17 Apr 2010 08:38:17 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[web development]]></category>
		<category><![CDATA[web 2.0]]></category>

		<guid isPermaLink="false">http://johnmccollum.co.uk/?p=154</guid>
		<description><![CDATA[Lately I&#8217;ve been getting an awful lot of requests for &#8216;Web 2.0&#8242; features. I&#8217;ve always hated the term for a number of reasons. Web 2.0 was supposed to mark a paradigm shift in the way web sites operated. It promised interactivity and community in an age where sites were static. While we certainly see more [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fjohnmc.co%2Fllum%2Fstop-talking-about-web-2-0-start-listening-to-your-users%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fjohnmc.co%2Fllum%2Fstop-talking-about-web-2-0-start-listening-to-your-users%2F&amp;style=normal" height="61" width="50" /><br />
			</a>
		</div>
<p>Lately I&#8217;ve been getting an awful lot of requests for &#8216;Web 2.0&#8242; features. I&#8217;ve always hated the term for a number of reasons.</p>
<p>Web 2.0 was supposed to mark a paradigm shift in the way web sites operated. It promised interactivity and community in an age where sites were static. While we certainly see more of that these days, you also have to remember that these philosophies have been central to the web for many, many years. Amazon was founded in 1994 and Ebay in 1995, and both sites heavily featured user-generated content, even in the early days. In fact Tim Berners Lee described Web 2.0 as:</p>
<blockquote><p>&#8230;people to people. But that was what the Web was supposed to be all along.</p></blockquote>
<p>Certainly, there&#8217;s a look and feel associated with Web 2.0, largely dictated by emerging technologies and limitations of the day. Some of the most representative Web 2.0 technologies, Javascript (created in 1995) and AJAX (1999) have been around for over a decade now. In Interweb years, that&#8217;s an age! In fact, a lot of what was erroneously described as AJAX was simply good ol&#8217; fashioned DHTML, re-packaged and re-branded for a new audience.</p>
<p>My biggest beef with Web 2.0 is that it&#8217;s frequently used as just another point on the checklist of requests, without any thought as to what such features actually are, or whether they&#8217;re appropriate for the site and audience. As in, &#8220;we need the site to be usable, accessible and Web 2.0&#8243;. As such, the term is completely meaningless! Much better to find out from your users what features they actually need, and go from there.</p>
<p>I&#8217;ve even been asked if I can &#8220;do&#8221; Web 2.0. I usually answer that any features are possible given the right budget. Whether or not you want to give them a label of Web 2.0 is up to you!</p>
<p>I guess the take home message for this article is exactly as the title of this article says: stop paying lip service to a marketing term, find out what your users <em>really</em> need, and implement it.</p>
]]></content:encoded>
			<wfw:commentRss>http://johnmc.co/llum/stop-talking-about-web-2-0-start-listening-to-your-users/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

