<?xml version="1.0"?>
<rss version="2.0" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:media="http://search.yahoo.com/mrss/" xmlns:yt="http://gdata.youtube.com/schemas/2007">
   <channel>
      <title>Django</title>
      <description>Django articles from DjangoZen and Andy McKay&amp;#39;s blog.</description>
      <link>http://pipes.yahoo.com/pipes/pipe.info?_id=a5514987fe5725e64f56db63c8c33186</link>
      <pubDate>Thu, 29 Jul 2010 21:58:36 -0700</pubDate>
      <generator>http://pipes.yahoo.com/pipes/</generator>
      <item>
         <title>Using Arecibo and Django, the easy way</title>
         <link>http://www.agmweb.ca/blog/andy/2268</link>
         <description>&lt;p&gt;So you've got your Django project on the production server. Want an easy way to track the errors in Django? The existing Django package is pretty easy to use, but it doesn't get much simpler than this: add in your Arecibo server to your ADMINS in settings.py.&lt;/p&gt;
&lt;p&gt;When Django emails out those error emails, it will send one to Arecibo. Arecibo will parse it and add it your site. The email address for that is: django-YOUR_PUBLIC_ARECIBO_KEY@yourserver.appspotmail.com. You can try this out right now, the email address for the test server is: &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;mailto:django-sw3tqw35ywq45ws4kqa4ia6yw5q45serws23w351245lk6y@test-areciboapp.appspotmail.com&quot;&gt;django-sw3tqw35ywq45ws4kqa4ia6yw5q45serws23w351245lk6y@test-areciboapp.appspotmail.com&lt;/a&gt;&lt;/p&gt;
&lt;img src=&quot;http://www.agmweb.ca/files/arecibo-email-django-one.png&quot;/&gt;
&lt;p&gt;Becomes:&lt;/p&gt;
&lt;img src=&quot;http://www.agmweb.ca/files/arecibo-email-django.png&quot;/&gt;
&lt;p&gt;To do this we are parsing the email down, which is less accurate than just doing a HTTP post via the API, but its pretty easy to setup.&lt;/p&gt;
&lt;p&gt;Note: the key for the email address for the test server might change, you can find it on the setup pages on the test server. All errors are deleted after one hour on the test server.&lt;/p&gt;</description>
         <guid isPermaLink="false">http://www.agmweb.ca/blog/andy/2268</guid>
         <pubDate>Mon, 21 Jun 2010 11:16:07 -0700</pubDate>
      </item>
      <item>
         <title>Taskqueues in App Engine</title>
         <link>http://www.agmweb.ca/blog/andy/2264</link>
         <description>&lt;p&gt;App Engine has &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://code.google.com/appengine/docs/python/taskqueue/tasks.html&quot;&gt;task queues&lt;/a&gt; as an experimental feature. There's nothing fancy here, it's just a way of queueing something up to be run later.&lt;/p&gt;
&lt;p&gt;We've probably all written a few queues in our time, the task queue is just a continuation of that. Add a URL to be executed a certain point and a scheduler will come along and try all the urls in the queue. For &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://areciboapp.com&quot;&gt;Arecibo&lt;/a&gt; we use this to do the post processing on an error. When an error comes into Arecibo we write it to the datastore quickly, we then add in one task queue that will: figure out the grouping, figure out any notifications, figure out the user agent (surprisingly a bit expensive). That post processing will be done async via the task.&lt;/p&gt;
&lt;p&gt;First thing that I noticed about the queue is that the development server doesn't run the task queue automatically meaning that all my unit tests failed. So here's a way to do it immediately if you are not in production:&lt;/p&gt;
&lt;pre&gt;
if os.environ.get('SERVER_SOFTWARE', '').startswith('Dev'): # send the signal, otherwise we have to clicking buttons # to process the queue send_signal(None, self.id)
else: # enqueue the send notification # if development taskqueue.add(url=reverse(&quot;error-created&quot;, args=[self.id,]))
&lt;/pre&gt;
&lt;p&gt;In Django we've got a URL &quot;error-created&quot; that maps to send_signal. That's a method that first figures out if this object has had send_signal run before. We tell this by the use of a Boolean property on the object. It's a bit annoying to have a property for that, but it could be sent by the task queue multiple times. There might be a cleaner way to cope with that.&lt;/p&gt;
&lt;pre&gt;
def send_signal(request, pk): error = Error.get(pk) if not error.create_signal_sent: error.create_signal_sent = True error.save() error_created.send(sender=error.__class__, instance=error) return HttpResponse(&quot;Signal sent&quot;) return HttpResponse(&quot;Signal not sent&quot;)
&lt;/pre&gt;
&lt;p&gt;It then sends off the custom Django signal, when then triggers all the signal processing we've assigned in Django to that error. Because the view is only going to be executed by the App Engine scheduler, we can just return a simple string.&lt;/p&gt;
&lt;p&gt;The end result is that the unit tests work and it works in production and keeps the load on that initial write nice and low.&lt;/p&gt;</description>
         <guid isPermaLink="false">http://www.agmweb.ca/blog/andy/2264</guid>
         <pubDate>Tue, 08 Jun 2010 12:46:36 -0700</pubDate>
      </item>
      <item>
         <title>Avoiding some generic views</title>
         <link>http://www.agmweb.ca/blog/andy/2257</link>
         <description>&lt;p class=&quot;discreet&quot;&gt;As I wrote this, I realised I seemed to be on a roll with negative blog posts. Sorry, I will get positive again soon, I'm sure.&lt;/p&gt; &lt;p&gt;If you follow through the Django tutorial, you'll get to &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://docs.djangoproject.com/en/dev/intro/tutorial04/&quot;&gt;stage 4&lt;/a&gt; which encourages you to move to generic views. Generic views are a neat way of removing the view part of the equation. Instead of a standard URL &amp;gt; view &amp;gt; template, you have URL &amp;gt; template.&lt;/p&gt; &lt;p&gt;There's &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://docs.djangoproject.com/en/dev/ref/generic-views/&quot;&gt;documentation on all the generic views&lt;/a&gt; and there's quite a few.&lt;/p&gt; &lt;h3&gt;The problem&lt;/h3&gt;
&lt;p&gt;Here's the conversation that goes on in #django IRC about once every day or so. Abbreviated, its normally more long winded than this.&lt;/p&gt; &lt;p&gt;&lt;b&gt;djangodood:&lt;/b&gt; can I pass parameters to a query in templates?&lt;/p&gt;
&lt;p&gt;&lt;b&gt;others:&lt;/b&gt; no&lt;/p&gt;
&lt;p&gt;&lt;b&gt;djangodood:&lt;/b&gt; well how do I do this then? I tried doing it in urls.py and that didn't work&lt;/p&gt;
&lt;p&gt;&lt;b&gt;others:&lt;/b&gt; do it in your view&lt;/p&gt;
&lt;p&gt;...usually a break of a few minutes.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;djangodood:&lt;/b&gt; but I want to use my generic views&lt;/p&gt;
&lt;p&gt;&lt;b&gt;others&lt;/b&gt; bang heads on table&lt;/p&gt; &lt;p&gt;Logic for a template should be done mostly in the view. If its very model specific, doing it in the model might make sense. But the key is keep the template as simple as possible. The templating language reinforces this by not allowing parameters.&lt;/p&gt; &lt;p&gt;Using generic views for things like object_list gives you a problem, you need to put the logic somewhere, so you either try pushing it up into urls.py or down into the template. We all know why the template is the wrong place (hopefully). So then urls.py starts to get really complicated. If you urls.py is full of logic for the view, wouldn't it just be better to push that back into a view?&lt;/p&gt; &lt;p&gt;In practice I've found using generic views that a few things will happen: 1) I write a pile of generic views, 2) my urls.py gets complicated and then 3) as the site gets more complicated I have to start removing generic views. In a non-trivial site, the generic views quickly get removed.&lt;/p&gt; &lt;h3&gt;What does make sense&lt;/h3&gt; &lt;p&gt;The &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://docs.djangoproject.com/en/dev/ref/generic-views/#django-views-generic-simple-direct-to-template&quot;&gt;direct_to_template&lt;/a&gt; or the &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://docs.djangoproject.com/en/dev/ref/generic-views/#django-views-generic-simple-redirect-to&quot;&gt;redirect_to&lt;/a&gt; make sense to me. These generic views don't involve passing any new data to the templates, different querysets or parsed data - that means most of the time they work just fine.&lt;/p&gt; &lt;p&gt;Writing a wrapper that uses the generic view, as &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.b-list.org/weblog/2006/nov/16/django-tips-get-most-out-generic-views/&quot;&gt;James Bennet shows&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;In the tutorial, the generic views seem to say &quot;hey skip writing this bit of Python&quot;. Chances are you'll be better off just writing that bit of Python as you'll need to go back to it. And it will stop you trying to do too much work in the template.&lt;/p&gt;</description>
         <guid isPermaLink="false">http://www.agmweb.ca/blog/andy/2257</guid>
         <pubDate>Wed, 21 Apr 2010 04:05:23 -0700</pubDate>
      </item>
      <item>
         <title>Running Django admin separately</title>
         <link>http://www.agmweb.ca/blog/andy/2253</link>
         <description>&lt;img src=&quot;http://farm1.static.flickr.com/196/502452945_4ad5e6eb7f_m.jpg&quot; class=&quot;photo&quot;&gt;&lt;p&gt;Django admin is great for administrating a site, but chances are you won't want to run that on your &quot;big serious production site&quot; for a few reasons.&lt;/p&gt; &lt;h3&gt;Setting up&lt;/h3&gt; &lt;p&gt;This is pretty easy to do, all your apps will be stored in source control (or something more exotic) so pull those apps down. Leave out the apps you don't need. Perhaps you've got a public facing specific app that pulls in public specific things, sets up context processor or specific auth. backends, all things you don't need in the admin site.&lt;/p&gt; &lt;p&gt;This could be set up on the same server, or on a different server as long as it can reach the database.&lt;/p&gt; &lt;h3&gt;Security&lt;/h3&gt; &lt;p&gt;There's no limit to the number of password attempts on the admin site. So you could dictionary attack the admin site if you really wanted to get in. Moving it to a separate instance isn't necessarily more secure, unless you set up an appropriate policy.&lt;/p&gt; &lt;p&gt;For example: all requests to admin.yoursite.com are internal only, or restricted by IP. Those sorts of policies are very easy for system admins to setup and maintain.&lt;/p&gt; &lt;p&gt;Knowing that pretty much no matter what the end user does, they can't access django-admin is a big comfort.&lt;/p&gt; &lt;h3&gt;Performance&lt;/h3&gt; &lt;p&gt;Admin can be a bit slow if some queries aren't optimized, you'd be really annoyed if someone browsing the admin site took down your public site. Likewise the public facing site might have options that are unnecessary on the admin (such as the afore mentioned context processors).&lt;/p&gt; &lt;p&gt;At DjangoSki I was chatting to Jakob about this and found we've both also run admin on ready-only database slaves. So it's not really an admin, just a data browsing site.&lt;/p&gt; &lt;h3&gt;Configuration&lt;/h3&gt; &lt;p&gt;For a big site you will likely have quite a few things in front of a site. Your media is likely on a CDN. You've likely got a load balancer and a caching server in there. All things that make your site go nice and fast. You don't need any of those for the admin. Again, route the requests differently.&lt;/p&gt; &lt;h3&gt;Different Apps&lt;/h3&gt; &lt;p&gt;There's apps that you might want to run on one instance and not the other. At one time I ran a SQL logging app on the public site over a few hours to track down some performance, that was a public specific app. It was easy to turn that on the public site and not have to worry about logging admin queries.&lt;/p&gt; &lt;p&gt;You don't even have to limit yourself to just one admin. If you really, really, wanted to, you could have multiple admins, each accessing different apps. Django admin will only allow you to admin apps you have INSTALLED_APPS, so if you really wanted to you could have one admin for group X that only accessed app X. However if you creating lots of admins, you'll probably find better ways to do that.&lt;/p&gt; &lt;p&gt;Setting up admin to run separately is pretty easy and I'd fully recommend it for any project of a serious size.&lt;/p&gt;</description>
         <guid isPermaLink="false">http://www.agmweb.ca/blog/andy/2253</guid>
         <pubDate>Tue, 30 Mar 2010 11:58:11 -0700</pubDate>
      </item>
      <item>
         <title>Django-lawnchair</title>
         <link>http://www.agmweb.ca/blog/andy/2250</link>
         <description>&lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://brianleroux.github.com/lawnchair/&quot;&gt;Lawnchair&lt;/a&gt; is a library that provides a client side JSON store and that's really cool. Since I'm going to be using this quite a bit in some of our applications, I started to build out some of the common uses into a library. This makes working with django models on the client side a little bit easier.&lt;/p&gt; &lt;p&gt;At the moment django-lawnchair contains a few utilities to do some work on the server, but to be honest, not to much. I'm hoping I can integrate django-piston a bit to make writing that easier.&lt;/p&gt; &lt;p&gt;There's a bit more on the client side of things, using django-lawnchair.js you can instantiate a database like this:&lt;/p&gt; &lt;pre&gt;var todos = new djangochair('/todo/list');&lt;/pre&gt; &lt;p&gt;Grabbing all the objects for a model (in this case Todo objects), populating the local database (or whatever backend store you choose) is as simple as:&lt;/p&gt; &lt;pre&gt;todos.remote_get(add_row);&lt;/pre&gt; &lt;p&gt;...as each Todo is added to the DB, the callback &lt;code&gt;add_row&lt;/code&gt; will be called.&lt;/p&gt; &lt;img src=&quot;http://www.agmweb.ca/files/django-lawnchair-1.png&quot;&gt; &lt;p&gt;Users can interact with the objects. Each time you change a model in the local DB, we change the state. You can the push all the changed objects to Django:&lt;/p&gt; &lt;pre&gt;todos.updated(function(r) { todos.remote_save(r); });&lt;/pre&gt; &lt;p&gt;This will iterate through each changed object and push them to the server, where they will be saved. Got deleted objects?&lt;/p&gt; &lt;pre&gt;todos.deleted(function(r) { todos.remote_delete(r, function(r) { todos.purge(r.key); });
});&lt;/pre&gt; &lt;p&gt;...and so on. There's a lot to do in this area, handling errors, handling syncing problems and so on. The library doesn't do much of that yet, it's trying to set a base line for this stuff. As we build this out for some applications, we'll be fleshing these cases out.&lt;/p&gt; &lt;p&gt;This is in a &quot;works on my machine&quot; state at: &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://github.com/andymckay/django-lawnchair&quot;&gt;http://github.com/andymckay/django-lawnchair&lt;/a&gt;.&lt;/p&gt;</description>
         <guid isPermaLink="false">http://www.agmweb.ca/blog/andy/2250</guid>
         <pubDate>Thu, 25 Mar 2010 05:49:37 -0700</pubDate>
      </item>
      <item>
         <title>Creating a ModelForm dynamically</title>
         <link>http://www.agmweb.ca/blog/andy/2249</link>
         <description>&lt;p&gt;A simple short snippet for creating a ModelForm for an object dynamically. This is a useful library function to validate data and save changes to a model without having to declare a form:&lt;/p&gt;
&lt;pre&gt;
from django import forms def model_to_modelform(model): meta = type('Meta', (), { &quot;model&quot;:model, }) modelform_class = type('modelform', (forms.ModelForm,), {&quot;Meta&quot;: meta}) return modelform_class
&lt;/pre&gt;
&lt;p&gt;Based on &quot;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.b-list.org/weblog/2008/nov/09/dynamic-forms/&quot;&gt;So you want a dynamic form&lt;/a&gt;&quot;.&lt;/p&gt;</description>
         <guid isPermaLink="false">http://www.agmweb.ca/blog/andy/2249</guid>
         <pubDate>Wed, 24 Mar 2010 10:39:54 -0700</pubDate>
      </item>
      <item>
         <title>Django query analyzer</title>
         <link>http://www.agmweb.ca/blog/andy/2247</link>
         <description>&lt;p&gt;One of the things I wanted to work on at the &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://clearwind.ca/djangoski&quot;&gt;DjangoSki sprints&lt;/a&gt; was a django query analyzer.&lt;/p&gt;
&lt;p&gt;The basic premise is that I want to create an easy way for users to experiment with and play with the ORM to produce the queries that they want. If you are new to Django, figuring out the ORM is one the first things you will need to tackle and it can be a little opaque. There's some ways to play with it at the shell, or use the debug toolbar, but these can be a little limited and unhelpful to newbies.&lt;/p&gt;
&lt;p&gt;The main interface would ideally be a series of options introspected from the model. Choose a model, choose a query manager, then add in multiple filter queries. This would not be able to capture everything and you'd always need an opt out clause of a text area where you can enter anything you want.&lt;/p&gt;
&lt;p&gt;This is pretty similar to the GUI's you'll get with most SQL servers, its just the Django ORM layer on top of it.&lt;/p&gt;
&lt;p&gt;Sadly I didn't get much chance apart from some time on Thursday afternoon. But a whole bunch of other people did including Stefan Tjarks, &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://twitter.com/robhudson&quot;&gt;Rob Hudson&lt;/a&gt; and Nick Fitzgerald. These guys did some great work on the project despite my vague handwaving about what the project should be. Fortunately after the conference I got a chance to do a few hours works and got to this stage:&lt;/p&gt;
&lt;img src=&quot;http://www.agmweb.ca/files/django-query-analyzer-part-one.png&quot;/&gt;
&lt;p&gt;The introspection code is there, just need to get around to pulling it altogether on the front end so that we've got a nice way. But I think for a newbie this can be a very useful way to play with the ORM and see what comes out and how those little changes to the code can make substantial changes to the SQL.&lt;/p&gt;
&lt;p&gt;The code is very rough and has been messed around by me from that original hard work by Rob, Stefan and Nick - but it's at: &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://github.com/andymckay/django-query-analyzer&quot;&gt;http://github.com/andymckay/django-query-analyzer&lt;/a&gt;&lt;/p&gt;</description>
         <guid isPermaLink="false">http://www.agmweb.ca/blog/andy/2247</guid>
         <pubDate>Thu, 18 Mar 2010 11:35:11 -0700</pubDate>
      </item>
      <item>
         <title>DjangoSki checklist</title>
         <link>http://www.agmweb.ca/blog/andy/2244</link>
         <description>&lt;p&gt;Sadly Matt Berg won't be able to make it DjangoSki. Far too busy at the moment in Uganda working on the next version of Child Count. That's a shame, we'll get him next year when he's had time to catch up on his skiing a bit ;).&lt;/p&gt;
&lt;p&gt;Very fortunate to have Brian Leroux, a self described &quot;software hack&quot; from &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://nitobi.com&quot;&gt;Nitobi&lt;/a&gt; coming to speak in Matt's place. Brian works on mobile apps and things like PhoneGap, XUI and Lawnchair.&lt;/p&gt;
&lt;p&gt;Checklist for DjangoSki:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Laptop&lt;/li&gt;
&lt;li&gt;Passport (for any non-Canadians that is) &lt;li&gt;Skis / snowboards and gear&lt;/li&gt;
&lt;li&gt;Hot tub gear&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We have a few sprint topics planned &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://code.djangoproject.com/wiki/DjangoSki&quot;&gt;on the wiki&lt;/a&gt;, but if you've got your own, please come ready with those ideas.&lt;/p&gt;</description>
         <guid isPermaLink="false">http://www.agmweb.ca/blog/andy/2244</guid>
         <pubDate>Fri, 19 Feb 2010 04:20:37 -0800</pubDate>
      </item>
      <item>
         <title>Faster or lazier pagination</title>
         <link>http://www.djangozen.com/blog/faster-or-lazier-pagination</link>
         <description>Or how to avoid slow counts in Postgres</description>
         <guid isPermaLink="false">http://www.djangozen.com/blog/faster-or-lazier-pagination</guid>
         <pubDate>Fri, 05 Feb 2010 02:00:00 -0800</pubDate>
      </item>
      <item>
         <title>New DjangoSki speakers</title>
         <link>http://www.agmweb.ca/blog/andy/2242</link>
         <description>&lt;p&gt;Pleased to say that DjangoSki picked up a couple of good speakers.&lt;/p&gt; &lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://term.ie&quot;&gt;Andy Smith&lt;/a&gt; is a developer at Google, where he works on Google App Engine. He'll be speaking on Google App Engine and how to develop apps for it. Also he'll be talking about the status of non-relational backends for App Engine. A handy person to be sprinting with.&lt;/p&gt; &lt;p&gt;Michael Richardson is one of the brains behind &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://urbanairship.com/&quot;&gt;Urban Airship&lt;/a&gt; and &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://bacn.com&quot;&gt;Bac'n.com&lt;/a&gt;. He'll talk about django-piston and building an API in Django which Urban Airship use to do cool things for the iPhone.&lt;/p&gt; &lt;p&gt;Also pleased to note that &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://rob.cogit8.org/&quot;&gt;Rob Hudson&lt;/a&gt; is making his way up from Portland. Rob is the writer and maintainer of Django Debug Toolbar. Possibly the most useful debug tool you'll ever use in Django. As a connoisseur of fine Portland beer, I hope you'll be buying him a beer.&lt;/p&gt;</description>
         <guid isPermaLink="false">http://www.agmweb.ca/blog/andy/2242</guid>
         <pubDate>Tue, 02 Feb 2010 16:36:59 -0800</pubDate>
      </item>
      <item>
         <title>Django Documentation iPhone app updated</title>
         <link>http://www.agmweb.ca/blog/andy/2239</link>
         <description>&lt;p&gt;A new version of the Django documentation iPhone app has been pushed to iTunes. Updates are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Updated to 1.2 alpha 1 documentation&lt;/li&gt;
&lt;li&gt;App now remembers the page you were last on and re-opens it at the start.&lt;/li&gt;
&lt;li&gt;Code samples when page is rotated widen.&lt;/li&gt;
&lt;li&gt;Some copyright notices added.&lt;/li&gt;
&lt;/ul&gt;</description>
         <guid isPermaLink="false">http://www.agmweb.ca/blog/andy/2239</guid>
         <pubDate>Mon, 11 Jan 2010 15:54:23 -0800</pubDate>
      </item>
      <item>
         <title>The power of Q</title>
         <link>http://www.djangozen.com/blog/the-power-of-q</link>
         <description>Q objects are a great tool in Django</description>
         <guid isPermaLink="false">http://www.djangozen.com/blog/the-power-of-q</guid>
         <pubDate>Fri, 08 Jan 2010 05:01:50 -0800</pubDate>
      </item>
      <item>
         <title>Send someone from a charity to DjangoSki</title>
         <link>http://www.agmweb.ca/blog/andy/2238</link>
         <description>&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.flickr.com/photos/aslakr/42658940/&quot; style=&quot;float:right;padding:1em;&quot;&gt;&lt;img src=&quot;http://farm1.static.flickr.com/25/42658940_f5c9bc0d93_m.jpg&quot;/&gt;&lt;/a&gt;
&lt;p&gt;Thanks to sponsorship from the Python Software Foundation we've got some &lt;b&gt;free&lt;/b&gt; tickets to give away to people from charities or non-profits.&lt;/p&gt;
&lt;p&gt;Do you know someone who uses Django in a charity? Or are you at a charity? Do you use Django or want to learn about it? Like skiing, snowboarding or just hanging out in Whistler? Then nominate someone, or yourself. We've got a limited number of tickets and time is short - so hop to it.&lt;/p&gt;
&lt;p&gt;&lt;del&gt;Fill out the form here&lt;/del&gt;.&lt;/p&gt;
&lt;p&gt;&lt;i&gt;Note: the image isn't relevant, but was one of the first hits on Flickr for ticket. It's much colder in Whistler.&lt;/i&gt;&lt;/p&gt; &lt;p&gt;&lt;b&gt;Update:&lt;/b&gt; people chosen and contacted.&lt;/p&gt;</description>
         <guid isPermaLink="false">http://www.agmweb.ca/blog/andy/2238</guid>
         <pubDate>Wed, 06 Jan 2010 03:31:06 -0800</pubDate>
      </item>
      <item>
         <title>DjangoSki change of hotel</title>
         <link>http://www.agmweb.ca/blog/andy/2237</link>
         <description>&lt;p&gt;Over the Christmas holidays the DjangoSki changed location from one hotel in Whistler to another. This was the reason for the registration and hotel information going offline over the Christmas holidays. We've got a new hotel sorted out and the conference will be at the new location, a few minutes down the road.&lt;/p&gt; &lt;p&gt;So we went for plan B, one of the other hotels. It's a good hotel with other benefits for example: they don't mind external food coming in, a kitchenette in the room, washer and dryer etc. In fact this hotel is directly on the Creekside chair. You can go directly from the conference room, walk to the hot tub, past the barbeque to the chair lift (or some combination of that).&lt;/p&gt; &lt;p&gt;The reason? During the process of sorting out the contract with the original hotel the contract changed quite dramatically against us. We proceeded hoping that the pre-registration numbers would solve that problem. As it turned out it wasn't enough and the amount of money that we were putting up for the conference was so large to be a really, really big concern for us. A conference is a risk, but we are a small company and the risk was too large.&lt;/p&gt; &lt;p&gt;We are sorry about the inconvenience and there's no more changes now, it's full on to the finish line of a great conference in Whistler. We think we've contacted everyone involved who's booked a room, but if this does affect you, then please &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;mailto:andy@clearwind.ca&quot;&gt;contact us immediately&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Details are up on the &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://clearwind.ca/djangoski&quot;&gt;DjangoSki website&lt;/a&gt; of the Legends hotel.&lt;/p&gt;</description>
         <guid isPermaLink="false">http://www.agmweb.ca/blog/andy/2237</guid>
         <pubDate>Sat, 02 Jan 2010 14:31:57 -0800</pubDate>
      </item>
      <item>
         <title>DjangoSki Registration is now open</title>
         <link>http://www.agmweb.ca/blog/andy/2236</link>
         <description>&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.flickr.com/photos/friviere/3205554193/&quot;&gt;&lt;img src=&quot;http://www.agmweb.ca/files/3205554193_efc3c8d4c3_m.jpg&quot; style=&quot;float:right;&quot;&gt;&lt;/a&gt;
&lt;p&gt;Registration is now open for DjangoSki. Early bird tickets are on a simple first come, first served basis and &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.clearwind.ca/djangoski/register.html&quot;&gt;registration is here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;With our three keynotes set up and all the hairy contracts signed away, all that's left for us to do is plan the rest of the conference. And let it snow, snow and snow so that we've got a good base of snow ready for the conference.&lt;/p&gt;
&lt;p&gt;The next date to worry about is in about 3 weeks time, which is the deadline for any scheduled talks. We've got a couple of interesting case study talks lined up and still looking for some good introductory talks eg: Introduction to Django, Pinax, Django-CMS and so on.&lt;/p&gt;
&lt;p&gt;Been putting quite a few posts about DjangoSki up, sorry about that. It's very exciting for me and been quite a bit of work. Normal business of ignoring the blog and going back to Twitter will resume shortly.&lt;/p&gt;</description>
         <guid isPermaLink="false">http://www.agmweb.ca/blog/andy/2236</guid>
         <pubDate>Thu, 03 Dec 2009 14:56:47 -0800</pubDate>
      </item>
      <item>
         <title>Matt Berg keynote, call for speakers for DjangoSki</title>
         <link>http://www.agmweb.ca/blog/andy/2235</link>
         <description>&lt;p&gt;For our final keynote I'm pleased to say that &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.clearwind.ca/djangoski/keynotes.html&quot;&gt;Matt Berg&lt;/a&gt; will be speaking at &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.clearwind.ca/djangoski&quot;&gt;DjangoSki&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Matt Berg is the ICT Coordinator on the &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.millenniumvillages.org/&quot;&gt;Millenium Villages Project&lt;/a&gt; at Columbia University. As part of that project he's been building technical systems in developing countries. He's involved with &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.rapidsms.org/&quot;&gt;RapidSMS&lt;/a&gt; and projects include work in Kenya, South Senegal, Malawi and Rwanda that help children with malaria and malnutrition. And it's all using open source software and Django.&lt;/p&gt;
&lt;p&gt;Not only does Matt do interesting work that is helping people right now, but he passionately believes that he can use Django and other technologies to make a difference. His passion and dedication is infectious, as you'll find out.&lt;/p&gt;
&lt;p&gt;We have room for other speakers at the conference, so we'd like to call for other speakers to submit proposals to speak at the conference. Please &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://spreadsheets.google.com/viewform?hl=en&amp;formkey=dFU0cG9xV0hUSnY4WE9OWjlkRHVLcHc6MA&quot;&gt;apply here&lt;/a&gt; or see &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.clearwind.ca/djangoski/keynotes.html#pre&quot;&gt;details here&lt;/a&gt;.&lt;/p&gt;</description>
         <guid isPermaLink="false">http://www.agmweb.ca/blog/andy/2235</guid>
         <pubDate>Wed, 02 Dec 2009 15:53:42 -0800</pubDate>
      </item>
      <item>
         <title>Jacob Kaplan-Moss keynote at DjangoSki</title>
         <link>http://www.agmweb.ca/blog/andy/2234</link>
         <description>&lt;p&gt;We are excited to announce that Jacob Kaplan-Moss will be giving one of the keynote talks at &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://clearwind.ca/djangoski&quot;&gt;DjangoSki&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;It's almost impossible to be around Django and not know who &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://jacobian.org/&quot;&gt;Jacob&lt;/a&gt; is. He's one of the original &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://docs.djangoproject.com/en/dev/internals/committers/#internals-committers&quot;&gt;founders of Django&lt;/a&gt;, is on the &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.djangoproject.com/foundation/&quot;&gt;foundation board&lt;/a&gt;, is the &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://en.wikipedia.org/wiki/Benevolent_Dictator_For_Life&quot;&gt;co-BDFL of Django&lt;/a&gt; and is the co-author of &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://apress.com/book/view/143021936x&quot;&gt;The Definitive Guide to Django&lt;/a&gt;. Let's face it, if it's got something to do with Django, Jacob has had some influence on it. Currently Jacob works at &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.revsys.com/&quot;&gt;Revolution Systems&lt;/a&gt; where he gets to do lots more Django.&lt;/p&gt;
&lt;p&gt;After missing Jacob at DjangoCon in Portland, it will be certainly good to have him around in Whistler. Perhaps even get some sprinting on Django 1.2 (which will be out a few days after DjangoSki). Jacob writes a &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://jacobian.org/&quot;&gt;great blog&lt;/a&gt; and is a great speaker.&lt;/p&gt;</description>
         <guid isPermaLink="false">http://www.agmweb.ca/blog/andy/2234</guid>
         <pubDate>Mon, 30 Nov 2009 15:31:45 -0800</pubDate>
      </item>
      <item>
         <title>Djangopeople JSON parser</title>
         <link>http://www.agmweb.ca/blog/andy/2233</link>
         <description>&lt;p&gt;I bet you've always wanted to parse your &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://djangopeople.net&quot;&gt;djangopeople.net&lt;/a&gt; account into JSONP so you can use it somewhere else on the web. Well your wait is over: &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://djangopeople-jsonp.appspot.com&quot;&gt;djangopeople-jsonp.appspot.com&lt;/a&gt; will do just. Some examples of some &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://djangopeople-jsonp.appspot.com/?name=jacobian&amp;callback=callback&quot;&gt;famous&lt;/a&gt; and &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://djangopeople-jsonp.appspot.com/?name=andymckay&amp;callback=callback&quot;&gt;not so famous&lt;/a&gt; Django &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://djangopeople-jsonp.appspot.com/?name=simon&amp;callback=callback&quot;&gt;people&lt;/a&gt;. (and of course &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://djangopeople-jsonp.appspot.com/?name=mr-nobody&amp;callback=callback&quot;&gt;mr nobody&lt;/a&gt;).&lt;/p&gt;</description>
         <guid isPermaLink="false">http://www.agmweb.ca/blog/andy/2233</guid>
         <pubDate>Fri, 27 Nov 2009 16:59:22 -0800</pubDate>
      </item>
      <item>
         <title>David Ascher keynote at DjangoSki</title>
         <link>http://www.agmweb.ca/blog/andy/2232</link>
         <description>&lt;p&gt;We are pleased to announce the first keynote speaker for &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://clearwind.ca/djangoski&quot;&gt;DjangoSki&lt;/a&gt; is David Ascher.&lt;/p&gt;
&lt;p&gt;David Ascher is the CEO of &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.mozillamessaging.com/en-US/about/staff/&quot;&gt;Mozilla Messaging&lt;/a&gt;. He's been involved with
Python for many years and has dabbled around in Django too. He co-authored &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.amazon.com/Learning-Python-Second-Mark-Lutz/dp/0596002815&quot;&gt;Learning Python&lt;/a&gt; and worked on &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.activestate.com/komodo&quot;&gt;Komodo&lt;/a&gt; whilst at ActiveState (where he became the CTO).
Most recently Mozilla Messaging released the rather cool &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://labs.mozilla.com/raindrop&quot;&gt;Raindrop&lt;/a&gt;, which is written in Python.&lt;/p&gt;
&lt;p&gt;David has done some great talks at Python conferences in the past, providing thought provoking and entertaining talks. We think he can ski too,
but we'll find that out.&lt;/p&gt;
&lt;p&gt;We would also like to thank our first sponsor for DjangoSki, &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://openroad.ca/&quot;&gt;OpenRoad Communications&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;If you would like to sponsor DjangoSki and get your company in front of key Djangoers whilst supporting a great conference, &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;mailto:sales@clearwind.ca&quot;&gt;contact ClearWind&lt;/a&gt;. For more information on the DjangoSki conference, go to &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://djangoski.com&quot;&gt;djangoski.com&lt;/a&gt;.&lt;/p&gt;</description>
         <guid isPermaLink="false">http://www.agmweb.ca/blog/andy/2232</guid>
         <pubDate>Fri, 27 Nov 2009 09:10:18 -0800</pubDate>
      </item>
      <item>
         <title>Django Documentation iPhone App</title>
         <link>http://www.agmweb.ca/blog/andy/2231</link>
         <description>&lt;img src=&quot;http://static.clearwind.ca/images/documentation-app-one.png&quot; style=&quot;float:right;padding:1em;&quot;/&gt;
&lt;p&gt;We've released iPhone app that contains all the Django documentation. Basically we took the documentation, reformatted it a bit to try and fit on the iPhone and then pushed it all into PhoneGap. Unfortunately there was then a 5 week wait as Apple thought about approving it.&lt;/p&gt;
&lt;p&gt;The app has just now been approved and is on the &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://itunes.apple.com/us/app/django-documentation/id336551222?mt=8&amp;uo=6&quot;&gt;app store&lt;/a&gt;. There's more information on the &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.clearwind.ca/apps/django-documentation.html&quot;&gt;Clearwind site, here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;There's a few things we'd like to improve like: reducing the memory footprint, remembering the last page and indexing in spotlight. I'm not sure how many of those things will be possible, but we'll keep the app to date with the latest docs.&lt;/p&gt;
&lt;p&gt;And the best thing is, 30 cents out of every app sale goes to the Django Software Foundation.&lt;/p&gt;</description>
         <guid isPermaLink="false">http://www.agmweb.ca/blog/andy/2231</guid>
         <pubDate>Tue, 24 Nov 2009 14:54:29 -0800</pubDate>
      </item>
      <item>
         <title>Javascript inline forms outside of contrib.admin</title>
         <link>http://www.djangozen.com/blog/ajax-inline-forms-outside-of-contrib.admin</link>
         <description>This recipe follows on from the last two and shows how to do the addition of inline fields to a model form, outside of contrib.admin.</description>
         <guid isPermaLink="false">http://www.djangozen.com/blog/ajax-inline-forms-outside-of-contrib.admin</guid>
         <pubDate>Mon, 23 Nov 2009 13:50:22 -0800</pubDate>
      </item>
      <item>
         <title>Announcing DjangoSki Conference</title>
         <link>http://www.agmweb.ca/blog/andy/2230</link>
         <description>&lt;p&gt;I am very excited to announce the &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://clearwind.ca/djangoski/&quot;&gt;DjangoSki Conference&lt;/a&gt; in Whistler, March 2nd-4th 2010.&lt;/p&gt;
&lt;p&gt;This is a conference that combines my favourite web application framework with one of my favourite sports, skiing. If you are going to run a conference, may as well do it somewhere with style right? The conference is slightly unusual in that it's styled a bit after an unconference. There are several keynote talks we are lining up and some introductory talks, but the rest of the conference is up to the attendees.&lt;/p&gt;
&lt;p&gt;Each day will have sprints or ad-hoc talks created by the attendees. The real goal is to focus on the things I find enjoyable about a conference - meeting people and learning. Sprints are the ideal way to learn from other people. I'm not &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://ericholscher.com/blog/2009/nov/16/you-should-stay-sprints/&quot;&gt;alone in this&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Details will follow as we get registration and keynotes organized.&lt;/p&gt;
&lt;p&gt;So if you are planning a ski holiday this year and do Django, the choice has just become a whole lot easier. Come to Whistler and have a damn good time.&lt;/p&gt;</description>
         <guid isPermaLink="false">http://www.agmweb.ca/blog/andy/2230</guid>
         <pubDate>Thu, 19 Nov 2009 15:44:58 -0800</pubDate>
      </item>
      <item>
         <title>Adding Javascript to contrib.admin inline fields</title>
         <link>http://www.djangozen.com/blog/adding-ajax-to-contrib.admin-inline-fields</link>
         <description>This recipe follows on from the last by adding Javascript to the inline fields of a model in the contrib.admin.</description>
         <guid isPermaLink="false">http://www.djangozen.com/blog/adding-ajax-to-contrib.admin-inline-fields</guid>
         <pubDate>Mon, 16 Nov 2009 12:08:10 -0800</pubDate>
      </item>
      <item>
         <title>Setting up inline forms in contrib.admin</title>
         <link>http://www.djangozen.com/blog/setting-up-inline-forms-in-contrib.admin</link>
         <description>This recipe covers how to set up inline forms in contrib admin and how to show foreign keys in those inline forms.</description>
         <guid isPermaLink="false">http://www.djangozen.com/blog/setting-up-inline-forms-in-contrib.admin</guid>
         <pubDate>Sun, 08 Nov 2009 02:47:14 -0800</pubDate>
      </item>
      <item>
         <title>Announcing Django Training</title>
         <link>http://www.agmweb.ca/blog/andy/2227</link>
         <description>&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.flickr.com/photos/keepitsurreal/3297046750/sizes/l/&quot;&gt;&lt;img src=&quot;http://farm4.static.flickr.com/3652/3297046750_5c5e741682_m.jpg&quot; style=&quot;float:right;padding:1em;&quot;/&gt;&lt;/a&gt;
&lt;p&gt;I'm pleased to announce that in January 2010 I'll be running &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://clearwind.ca/training&quot;&gt;Django Training&lt;/a&gt; in Vancouver. The four day training covers all the things you need to know about getting Django up and running. The training is very hands-on - a bit of talking and then a bit of writing code.&lt;/p&gt;
&lt;p&gt;Since it's in Vancouver in the winter, we also thought we'd throw in a nights skiing up &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.cypressmountain.com/index.asp&quot;&gt;Cypress Mountain&lt;/a&gt; (where the Olympic free-style skiing and snowboarding will be held). After many years of skiing I still consider myself quite an amateur, so that will be another opportunity for me to learn from you.&lt;/p&gt;
&lt;p&gt;After several years of Plone training, I'm really looking forward to doing some Django training. Hope to &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;mailto:training@clearwind.ca&quot;&gt;see you here&lt;/a&gt;.&lt;/p&gt;</description>
         <guid isPermaLink="false">http://www.agmweb.ca/blog/andy/2227</guid>
         <pubDate>Sun, 25 Oct 2009 05:46:50 -0700</pubDate>
      </item>
      <item>
         <title>Tuning the count method on a queryset</title>
         <link>http://www.djangozen.com/blog/tuning-the-count-method-on-a-queryset</link>
         <description>Some alternate ways to manipulate the pagination of Django query sets.</description>
         <guid isPermaLink="false">http://www.djangozen.com/blog/tuning-the-count-method-on-a-queryset</guid>
         <pubDate>Sat, 17 Oct 2009 16:18:35 -0700</pubDate>
      </item>
      <item>
         <title>First things to do on a Django project...</title>
         <link>http://www.djangozen.com/blog/first-things-to-do-on-a-django-project..</link>
         <description>Call them best practices if you like, but here's the things I do when starting a new Django project.</description>
         <guid isPermaLink="false">http://www.djangozen.com/blog/first-things-to-do-on-a-django-project..</guid>
         <pubDate>Thu, 03 Sep 2009 14:12:49 -0700</pubDate>
      </item>
      <item>
         <title>Serving multiple templates</title>
         <link>http://www.djangozen.com/blog/serving-multiple-templates</link>
         <guid isPermaLink="false">http://www.djangozen.com/blog/serving-multiple-templates</guid>
         <pubDate>Tue, 28 Jul 2009 13:21:03 -0700</pubDate>
      </item>
      <item>
         <title>The lack of magic in Django</title>
         <link>http://www.djangozen.com/blog/rails-and-magic</link>
         <description>...or why Rails and Zope 2 were too magical.</description>
         <guid isPermaLink="false">http://www.djangozen.com/blog/rails-and-magic</guid>
         <pubDate>Sat, 25 Jul 2009 01:12:05 -0700</pubDate>
      </item>
      <item>
         <title>Forms, forms, forms</title>
         <link>http://www.djangozen.com/blog/forms-forms-forms</link>
         <description>Some questions answered about Django forms.</description>
         <guid isPermaLink="false">http://www.djangozen.com/blog/forms-forms-forms</guid>
         <pubDate>Tue, 21 Jul 2009 15:42:37 -0700</pubDate>
      </item>
      <item>
         <title>Features of a good Django plugin</title>
         <link>http://www.djangozen.com/blog/features-of-a-good-django-plugin-1</link>
         <description>Well, my opinion on them anyway.</description>
         <guid isPermaLink="false">http://www.djangozen.com/blog/features-of-a-good-django-plugin-1</guid>
         <pubDate>Wed, 08 Jul 2009 14:44:49 -0700</pubDate>
      </item>
      <item>
         <title>Read only fields in models</title>
         <link>http://www.djangozen.com/blog/read-only-fields-in-models</link>
         <description>Supposing you have a field in your model and you don't want it to be changed, ever.</description>
         <guid isPermaLink="false">http://www.djangozen.com/blog/read-only-fields-in-models</guid>
         <pubDate>Thu, 18 Jun 2009 15:43:12 -0700</pubDate>
      </item>
      <item>
         <title>djapp.org</title>
         <link>http://www.djangozen.com/blog/djapp.org</link>
         <description>Another site listing django plugins</description>
         <guid isPermaLink="false">http://www.djangozen.com/blog/djapp.org</guid>
         <pubDate>Mon, 08 Jun 2009 15:56:25 -0700</pubDate>
      </item>
      <item>
         <title>Class based views</title>
         <link>http://www.djangozen.com/blog/class-based-views</link>
         <description>We discussed these at a recent Vancouver Django (May 2009) meetup and it was also a pattern I used on a recent project.</description>
         <guid isPermaLink="false">http://www.djangozen.com/blog/class-based-views</guid>
         <pubDate>Sun, 31 May 2009 14:24:30 -0700</pubDate>
      </item>
      <item>
         <title>Useful Django API's</title>
         <link>http://www.djangozen.com/blog/useful-django-apis</link>
         <description>Two useful Django API's that I've found today.</description>
         <guid isPermaLink="false">http://www.djangozen.com/blog/useful-django-apis</guid>
         <pubDate>Mon, 18 May 2009 17:18:56 -0700</pubDate>
      </item>
      <item>
         <title>Job board added</title>
         <link>http://www.djangozen.com/blog/job-board-added</link>
         <description>As promised the site now has a job board</description>
         <guid isPermaLink="false">http://www.djangozen.com/blog/job-board-added</guid>
         <pubDate>Fri, 08 May 2009 10:55:29 -0700</pubDate>
      </item>
      <item>
         <title>Caching and signals</title>
         <link>http://www.djangozen.com/blog/caching-and-signals</link>
         <description>Adding in cached objects on signals</description>
         <guid isPermaLink="false">http://www.djangozen.com/blog/caching-and-signals</guid>
         <pubDate>Tue, 05 May 2009 04:00:30 -0700</pubDate>
      </item>
      <item>
         <title>Django, Malnutrition, SMS and Kenya</title>
         <link>http://www.djangozen.com/blog/11-days-in-kenya</link>
         <description>How I ended up doing one of most interesting and important projects I've been involved with.</description>
         <guid isPermaLink="false">http://www.djangozen.com/blog/11-days-in-kenya</guid>
         <pubDate>Tue, 28 Apr 2009 15:59:45 -0700</pubDate>
      </item>
      <item>
         <title>Turning off django signals</title>
         <link>http://www.djangozen.com/blog/turning-off-django-signals</link>
         <description>While I'm on the subject, how to turn off signals that you don't want on.</description>
         <guid isPermaLink="false">http://www.djangozen.com/blog/turning-off-django-signals</guid>
         <pubDate>Sat, 11 Apr 2009 01:36:57 -0700</pubDate>
      </item>
      <item>
         <title>Signal vs overriding save</title>
         <link>http://www.djangozen.com/blog/signal-vs-overriding-save</link>
         <description>I'm a big fan of signals and wonder why people are so adverse to using them, preferring overriding save instead.</description>
         <guid isPermaLink="false">http://www.djangozen.com/blog/signal-vs-overriding-save</guid>
         <pubDate>Tue, 07 Apr 2009 04:33:09 -0700</pubDate>
      </item>
   </channel>
</rss>
<!-- fe7.pipes.sp1.yahoo.com uncompressed/chunked Thu Jul 29 21:58:35 PDT 2010 -->
