<?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>Jabbering Giraffe &#187; django</title>
	<atom:link href="http://happygiraffe.net/blog/tag/django/feed/" rel="self" type="application/rss+xml" />
	<link>http://happygiraffe.net/blog</link>
	<description></description>
	<lastBuildDate>Tue, 07 Feb 2012 20:49:34 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
<atom:link rel="hub" href="http://pubsubhubbub.appspot.com"/><atom:link rel="hub" href="http://superfeedr.com/hubbub"/>		<item>
		<title>django &amp; appengine</title>
		<link>http://happygiraffe.net/blog/2011/04/14/django-appengine/</link>
		<comments>http://happygiraffe.net/blog/2011/04/14/django-appengine/#comments</comments>
		<pubDate>Thu, 14 Apr 2011 07:50:31 +0000</pubDate>
		<dc:creator>Dominic Mitchell</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[appengine]]></category>
		<category><![CDATA[django]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://happygiraffe.net/blog/?p=1703</guid>
		<description><![CDATA[Last night I went to j4amie&#8216;s brightonpy talk Python and Django for PHP Refugees (slides). It was a really good talk, though I knew most of the Python stuff. The django intro was great however. What I was really interested &#8230; <a href="http://happygiraffe.net/blog/2011/04/14/django-appengine/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Last night I went to <a href="http://twitter.com/j4amie">j4amie</a>&#8216;s <a href="http://brightonpy.org/">brightonpy</a> talk <em>Python and Django for PHP Refugees</em> (<a href="http://j4mie.github.com/python-and-django-for-php-refugees/">slides</a>).  It was a really good talk, though I knew most of the Python stuff.  The django intro was great however.</p>
<p>What I was really interested in was using Django together with appengine.  I&#8217;ve used appengine before with the builtin <a href="http://code.google.com/appengine/docs/python/tools/webapp/">webapp framework</a>.  Whilst it&#8217;s good, it&#8217;s simplistic and I found myself building layers on top quickly.</p>
<p>Looking through the docs, the first thing I see is <a href="http://code.google.com/appengine/articles/django.html">Running Django on Google App Engine</a>.  But this says that the builtin django is obsolete and I should be using <a href="http://www.allbuttonspressed.com/projects/django-nonrel">django-nonrel</a>.  There is further documentation on this, <a href="http://code.google.com/appengine/articles/django-nonrel.html">Running Pure Django Projects on Google App Engine</a>.  This approach is interesting.  It&#8217;s encouraging you to not be <em>appengine</em> specific, the way that you are with webapp&#8217;s default setup.</p>
<p>django-nonrel is made up of several components; you should start by looking at <a href="http://www.allbuttonspressed.com/projects/djangoappengine">djangoappengine</a>.  You&#8217;ll need to download all five components.</p>
<ul>
<li><a href="http://bitbucket.org/wkornewald/django-nonrel/get/tip.zip">django-nonrel</a>
<li><a href="http://bitbucket.org/wkornewald/djangoappengine/get/tip.zip">djangoappengine</a>
<li> <a href="http://bitbucket.org/wkornewald/djangotoolbox/get/tip.zip">djangotoolbox</a>
<li> <a href="http://bitbucket.org/wkornewald/django-dbindexer/get/tip.zip">django-dbindexer</a>
<li> <a href="http://bitbucket.org/wkornewald/django-testapp/get/tip.zip">django-testapp</a> (strictly, this is optional, but it&#8217;s a good idea for referring to)
</ul>
<p>You&#8217;ll also need the <a href="http://code.google.com/p/googleappengine/downloads/list">appengine SDK</a> in case you don&#8217;t have it.</p>
<p>Once you&#8217;ve downloaded everything, import the necessary bits into a project you made with the appengine SDK.</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">%</span> <span style="color: #7a0874; font-weight: bold;">pwd</span>
<span style="color: #000000; font-weight: bold;">/</span>Users<span style="color: #000000; font-weight: bold;">/</span>dom<span style="color: #000000; font-weight: bold;">/</span>work
<span style="color: #000000; font-weight: bold;">%</span> <span style="color: #c20cb9; font-weight: bold;">cp</span> <span style="color: #660033;">-r</span> <span style="color: #007800;">$APPENGINE_SDK</span><span style="color: #000000; font-weight: bold;">/</span>new_project_template hellodjango
<span style="color: #000000; font-weight: bold;">%</span> <span style="color: #7a0874; font-weight: bold;">cd</span> hellodjango
<span style="color: #000000; font-weight: bold;">%</span> <span style="color: #c20cb9; font-weight: bold;">mv</span> ~<span style="color: #000000; font-weight: bold;">/</span>Downloads<span style="color: #000000; font-weight: bold;">/</span>wkornewald-django-nonrel-c73e6ca3843d<span style="color: #000000; font-weight: bold;">/</span>django .
<span style="color: #000000; font-weight: bold;">%</span> <span style="color: #c20cb9; font-weight: bold;">mv</span> ~<span style="color: #000000; font-weight: bold;">/</span>Downloads<span style="color: #000000; font-weight: bold;">/</span>wkornewald-djangotoolbox-f79fecb60e6d<span style="color: #000000; font-weight: bold;">/</span>djangotoolbox .
<span style="color: #000000; font-weight: bold;">%</span> <span style="color: #c20cb9; font-weight: bold;">mv</span> ~<span style="color: #000000; font-weight: bold;">/</span>Downloads<span style="color: #000000; font-weight: bold;">/</span>wkornewald-django-dbindexer-48589f5faad4<span style="color: #000000; font-weight: bold;">/</span>dbindexer . 
<span style="color: #000000; font-weight: bold;">%</span> <span style="color: #c20cb9; font-weight: bold;">mv</span> ~<span style="color: #000000; font-weight: bold;">/</span>Downloads<span style="color: #000000; font-weight: bold;">/</span>wkornewald-djangoappengine-f9175cf4c8bd djangoappengine
<span style="color: #000000; font-weight: bold;">%</span> <span style="color: #c20cb9; font-weight: bold;">ls</span> <span style="color: #660033;">-l</span>
total <span style="color: #000000;">24</span>
-rwxr-x---<span style="color: #000000; font-weight: bold;">@</span>  <span style="color: #000000;">1</span> dom  <span style="color: #000000;">5000</span>   <span style="color: #000000;">106</span> <span style="color: #000000;">13</span> Apr <span style="color: #000000;">12</span>:09 app.yaml<span style="color: #000000; font-weight: bold;">*</span>
drwxr-xr-x<span style="color: #000000; font-weight: bold;">@</span> <span style="color: #000000;">12</span> dom  <span style="color: #000000;">5000</span>   <span style="color: #000000;">408</span> <span style="color: #000000;">13</span> Apr <span style="color: #000000;">12</span>:<span style="color: #000000;">43</span> dbindexer<span style="color: #000000; font-weight: bold;">/</span>
drwxr-xr-x<span style="color: #000000; font-weight: bold;">@</span> <span style="color: #000000;">18</span> dom  <span style="color: #000000;">5000</span>   <span style="color: #000000;">612</span> <span style="color: #000000;">13</span> Apr <span style="color: #000000;">12</span>:<span style="color: #000000;">33</span> django<span style="color: #000000; font-weight: bold;">/</span>
drwxr-xr-x<span style="color: #000000; font-weight: bold;">@</span> <span style="color: #000000;">23</span> dom  <span style="color: #000000;">5000</span>   <span style="color: #000000;">782</span> <span style="color: #000000;">13</span> Apr <span style="color: #000000;">12</span>:<span style="color: #000000;">43</span> djangoappengine<span style="color: #000000; font-weight: bold;">/</span>
drwxr-xr-x<span style="color: #000000; font-weight: bold;">@</span> <span style="color: #000000;">15</span> dom  <span style="color: #000000;">5000</span>   <span style="color: #000000;">510</span> <span style="color: #000000;">13</span> Apr <span style="color: #000000;">12</span>:<span style="color: #000000;">43</span> djangotoolbox<span style="color: #000000; font-weight: bold;">/</span>
<span style="color: #660033;">-rwxr-x---</span>   <span style="color: #000000;">1</span> dom  <span style="color: #000000;">5000</span>   <span style="color: #000000;">472</span> <span style="color: #000000;">24</span> Mar <span style="color: #000000;">23</span>:<span style="color: #000000;">38</span> index.yaml<span style="color: #000000; font-weight: bold;">*</span>
<span style="color: #660033;">-rwxr-x---</span>   <span style="color: #000000;">1</span> dom  <span style="color: #000000;">5000</span>  <span style="color: #000000;">1002</span> <span style="color: #000000;">24</span> Mar <span style="color: #000000;">23</span>:<span style="color: #000000;">38</span> main.py<span style="color: #000000; font-weight: bold;">*</span></pre></div></div>

<p>You&#8217;ll have to bundle all of this with your app.  You may want to delete some bits of <code>django/contrib</code> that you don&#8217;t use.</p>
<p>Now, how to get started with my app?  I&#8217;ll need to create a django <em>project</em>.  Normally I use the installed <code>django-admin.py</code>.  In this case, I&#8217;d like to use the version I&#8217;ve imported to my project.</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">%</span> <span style="color: #007800;">PYTHONPATH</span>=. django<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>django-admin.py 
Usage: django-admin.py subcommand <span style="color: #7a0874; font-weight: bold;">&#91;</span>options<span style="color: #7a0874; font-weight: bold;">&#93;</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span>args<span style="color: #7a0874; font-weight: bold;">&#93;</span>
…
<span style="color: #000000; font-weight: bold;">%</span> <span style="color: #007800;">PYTHONPATH</span>=. django<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>django-admin.py startproject hellodjango
<span style="color: #000000; font-weight: bold;">%</span> <span style="color: #c20cb9; font-weight: bold;">mv</span> hellodjango<span style="color: #000000; font-weight: bold;">/*</span> .
<span style="color: #000000; font-weight: bold;">%</span></pre></div></div>

<p>So now how do I hook that up to <code>app.yaml</code>?  There&#8217;s no documentation, but there is a test app.  And that contains the magic snippet:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">handlers:
- url: <span style="color: #000000; font-weight: bold;">/</span>.<span style="color: #000000; font-weight: bold;">*</span>
  script: djangoappengine<span style="color: #000000; font-weight: bold;">/</span>main<span style="color: #000000; font-weight: bold;">/</span>main.py</pre></div></div>

<p>Now, how do I run this?  The appengine launcher I&#8217;m using has a “play” button.  My first attempt broke, because I&#8217;d made the app in the <code>hellodjango</code> directory, the settings contained a reference to <code>hellodjango.urls</code>, which should be just <code>urls</code>.  With that fixed, I get an “It worked!” page.  Result!</p>
<p>The <code>dev_appserver.py</code> approach (aka the play button) worked for me, but the djangoappengine docs say to use <code>./manage.py runserver</code>, so I&#8217;ll do that.</p>
<p>Now, I have an empty app.  Let&#8217;s add in a minimal hello world view.  First, I create <code>views.py</code></p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;"><span style="color: #ff7700;font-weight:bold;">from</span> django.<span style="color: black;">http</span> <span style="color: #ff7700;font-weight:bold;">import</span> HttpResponse
&nbsp;
<span style="color: #ff7700;font-weight:bold;">def</span> home<span style="color: black;">&#40;</span>request<span style="color: black;">&#41;</span>:
  <span style="color: #ff7700;font-weight:bold;">return</span> HttpResponse<span style="color: black;">&#40;</span><span style="color: #483d8b;">'&lt;h1&gt;Hello World&lt;/h1&gt;'</span><span style="color: black;">&#41;</span></pre></div></div>

<p>And then adjust <code>urls.py</code> to point to it.</p>

<div class="wp_syntax"><div class="code"><pre class="html" style="font-family:monospace;">from django.conf.urls.defaults import patterns, include, url
&nbsp;
import views
&nbsp;
urlpatterns = patterns('',
  url(r'^$', views.home, name='home'),
)</pre></div></div>

<p>I now see the <em>Hello World!</em> displayed in my browser.  I&#8217;d like to get a nice template working.  I&#8217;ll update my views to look like this:</p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;"><span style="color: #ff7700;font-weight:bold;">from</span> django.<span style="color: black;">shortcuts</span> <span style="color: #ff7700;font-weight:bold;">import</span> render
&nbsp;
<span style="color: #ff7700;font-weight:bold;">def</span> home<span style="color: black;">&#40;</span>request<span style="color: black;">&#41;</span>:
  <span style="color: #ff7700;font-weight:bold;">return</span> render<span style="color: black;">&#40;</span>request, <span style="color: #483d8b;">'home.html'</span><span style="color: black;">&#41;</span></pre></div></div>

<p><code>templates/home.html</code> is as you would expect.</p>

<div class="wp_syntax"><div class="code"><pre class="html" style="font-family:monospace;">&lt;h1&gt;Hello World!&lt;/h1&gt;</pre></div></div>

<p>The final piece of the puzzle: how does django know where to find the template?  In settings.py, there&#8217;s a <em>TEMPLATE_DIRS</em> setting.</p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;">TEMPLATE_DIRS = <span style="color: black;">&#40;</span>
  <span style="color: #dc143c;">os</span>.<span style="color: black;">path</span>.<span style="color: black;">join</span><span style="color: black;">&#40;</span><span style="color: #dc143c;">os</span>.<span style="color: black;">path</span>.<span style="color: black;">dirname</span><span style="color: black;">&#40;</span>__file__<span style="color: black;">&#41;</span>, <span style="color: #483d8b;">'templates'</span><span style="color: black;">&#41;</span>,
<span style="color: black;">&#41;</span></pre></div></div>

<p>At this point, you&#8217;re using regular django, and should be able to use the regular docs to carry on.  Although, please read the list of <a href="http://www.allbuttonspressed.com/projects/djangoappengine#supported-and-unsupported-features">djangoappengine caveats</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://happygiraffe.net/blog/2011/04/14/django-appengine/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Django&#039;s Pony</title>
		<link>http://happygiraffe.net/blog/2008/09/16/djangos-pony/</link>
		<comments>http://happygiraffe.net/blog/2008/09/16/djangos-pony/#comments</comments>
		<pubDate>Tue, 16 Sep 2008 06:12:44 +0000</pubDate>
		<dc:creator>Dominic Mitchell</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[django]]></category>

		<guid isPermaLink="false">http://happygiraffe.net/blog/?p=1389</guid>
		<description><![CDATA[I love _why. Don&#8217;t forget to read the comments. Update: As _why removed himself from the internet, I&#8217;ve made a local copy of the image. We miss you, _why.]]></description>
			<content:encoded><![CDATA[<p>I love <a href="http://hackety.org/">_why</a>.</p>
<p><a href="http://hackety.org/2008/09/15/documentsRevealDjangoPonyTailOfLies.html"><img src="http://happygiraffe.net/blog/wp-content/uploads/2008/09/pony-magic.png" alt="Documents Reveal Django Pony, Caught In Tail Of Lies" title="pony-magic" width="480" height="454" class="size-full wp-image-1640" /></a></p>
<p>Don&#8217;t forget to read the comments.</p>
<p>Update: As _why removed himself from the internet, I&#8217;ve made a local copy of the image.  <a href="http://ejohn.org/blog/eulogy-to-_why/">We miss you, _why</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://happygiraffe.net/blog/2008/09/16/djangos-pony/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Web Frameworks Evening</title>
		<link>http://happygiraffe.net/blog/2005/11/19/web-frameworks-evening/</link>
		<comments>http://happygiraffe.net/blog/2005/11/19/web-frameworks-evening/#comments</comments>
		<pubDate>Sat, 19 Nov 2005 23:35:00 +0000</pubDate>
		<dc:creator>Dominic Mitchell</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[catalyst]]></category>
		<category><![CDATA[django]]></category>
		<category><![CDATA[london]]></category>
		<category><![CDATA[rails]]></category>

		<guid isPermaLink="false">http://happygiraffe.net/2005/11/19/web-frameworks-evening/</guid>
		<description><![CDATA[On thursday, I attended the London Web Frameworks evening, basically because of the large london.pm contingent. There were three speakers for the evening: Matt Trout on Catalyst; Simon Willison showing off Django and Matt Biddulph exploring Rails. All this was &#8230; <a href="http://happygiraffe.net/blog/2005/11/19/web-frameworks-evening/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>On thursday, I attended the <a href="http://blog.unixdaemon.net/cgi-bin/blosxom.pl/events/frameworks_2005_11_annoucement.html">London Web Frameworks</a> evening, basically because of the large <a href="http://london.pm.org/">london.pm</a> contingent.  There were three speakers for the evening: <a href="http://www.trout.me.uk/">Matt Trout</a> on <a href="http://catalyst.perl.org/">Catalyst</a>; <a href="http://simon.incutio.com/">Simon Willison</a> showing off <a href="http://www.djangoproject.com/">Django</a> and <a href="http://www.hackdiary.com/">Matt Biddulph</a> exploring <a href="http://www.rubyonrails.org/">Rails</a>.  All this was happening in the large lecture theatre (really!  That&#8217;s its name!) at the University of  Westminster.</p>
<p>First up was Matt Trout.  He pointed out that there are over 120 <a href="http://search.cpan.org/search?query=Catalyst&#38;mode=dist"><span class="caps">CPAN</span> modules</a> covering Catalyst, and only 25 minutes for the presentation, so he skipped a few.  <img src='http://happygiraffe.net/blog/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />   Catalyst is billed as an &#8220;Elegant <span class="caps">MVC</span> web framework.&#8221;  In practise, it seems to be somewhat Rails-like (it has the standalone web servers, the testing stuff and the generator scripts), apart from the fact that it&#8217;s more or less completely agnostic about the Model and View bits (and the environment in which it runs).  And it likes plugins.  A lot.</p>
<p>For the Model stuff, the most popular plugins are <a href="http://search.cpan.org/dist/Class-DBI/">Class::DBI</a> and <a href="http://search.cpan.org/dist/DBIx-Class/">DBIx::Class</a>.  But there are more, including stuff like <span class="caps">LDAP</span>, Subversion and Plucene.</p>
<p>The views are a similiar situation.  The most common plugin is <a href="http://tt2.org/">Template Toolkit</a>, but there&#8217;s also support for <a href="http://www.masonhq.com/">Mason</a> and <a href="http://search.cpan.org/dist/HTML-Template/"><span class="caps">HTML</span>::Template</a>, as well as a lot of other less used stuff, including <a href="http://search.cpan.org/dist/PHP/"><span class="caps">PHP</span></a>!</p>
<p>Again for authorization and authentication, there are plugins for pretty much anything that you would want: Databases, <span class="caps">LDAP</span>, PAM, Radius, Samba.  The list goes on.  Apparently, Catalyst has its own internal implementation of Roles and ACLs, but Matt didn&#8217;t go into much detail on that.  When it comes to deployment, there are plugins for every option (Catalyst calls them Engines): Apache, Apache2, FastCGI, and a standalone server using <span class="caps">HTTP</span>::Daemon.</p>
<p>Probably the most important plugin mentioned was Config::YAML, which lets you configure the site using textual config files.</p>
<p>Other good points include the nice use of subroutine attributes and excellent testing support.  And the packaging support making it very easy to distribute your applications.</p>
<p>Second was Simon Willison.  Django is a relatively new Open Source project, but it&#8217;s been in development for about two years.  It seems to be more designed around <span class="caps">CMS</span> needs, although it&#8217;s pretty flexible.  Simon was a co-creator on his placement year.  It was originally designed for running <a href="http://www.lawrence.com/">lawrence.com</a>, an entertainment site for a small university town in Kansas.</p>
<p>Much of Django appears to have parallel evolution with Rails.  They&#8217;re about the same age and they seem to have more-or-less independently arrived at the same solution.</p>
<p>Django philosophy: Less code; Loose coupling; Explicit over implicit (very pythonic); Consistency; Efficient <span class="caps">SQL</span> (raw <span class="caps">SQL</span> is encouraged where it provides benefits); Cool URLs.</p>
<p>Interestingly, Django implements its own <span class="caps">ORM</span>, instead of using something like <a href="http://sqlobject.org/">SQLObject</a>.  As part of this, it does all the schema definition in Python, so it should be readily portable between databases.  Apparently it already does the usual suspects: MySQL, PostgreSQL, SQLite.</p>
<p>One tiny feature which I really like is the ability to raise an <span class="caps">HTTP</span> status as an exception.</p>
<p>The templating language they use is something that was written specifically for Django.  Apparently it was &#8220;inspired by <a href="http://smarty.php.net/">Smarty</a>&#8221; which in turn was inspired by Template Toolkit.  How the wheels turn&#8230;</p>
<p>They have this feature called &#8220;Middleware&#8221;, which basically looks like stackable input/output filters.</p>
<p>The Django people are really big on getting the community involved in the design.  They&#8217;ve already had a lot of translations and a large refactoring of the admin screens from the community.  Because the deployment of Django is so small at this stage, they&#8217;re quite willing to break backwards compatibility if you can argue a good case.</p>
<p>Simon went on to give a fantastic demo of the admin interface for lawrence.com.  It&#8217;s very slick indeed, with lots of Ajax and JavaScript goodness.  Only one thing caused an <span class="caps">SQL</span> error, which isn&#8217;t bad for a live demo.  <img src='http://happygiraffe.net/blog/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>Lastly, Matt Biddulph came up to talk about Rails.  This was particularly interesting because unlike the other two people, he&#8217;s not a rails developer at all, he&#8217;s a rails user.  And only for 3 months at that.  This gave him a very good perspective on it, as opposed to &#8220;it&#8217;s all shiny!&#8221;  He also acknowledged how good the Rails people are at marketing&#8212;nearly everybody in the audience knew something about it.</p>
<p>Rather than specific technical details, he talked more about the Rails philosophy.  Stuff like &#8220;Convention over Configuration&#8221; and Rails being &#8220;Opinionated Software.&#8221;  He came up with the phrase &#8220;The golden path&#8221;&#8212;which is how to develop in a Rails like manner.  It&#8217;s possible to stray from it, but your life gets harder.  Rails is very well integrated, with a clear direction.</p>
<p>Bits that he noted as being particularly useful:  The Generators, which help point you in the right direction.  The ease of Ajax integration.  The really useful console and breakpointer scripts (which I wish I had in Perl for work).</p>
<p>He also outlined some good &#8220;Gotchas&#8221; for Rails.  Stuff like the pluralisation sometimes being surprising&#8212;&#8220;try adding or removing an S if something doesn&#8217;t work.&#8221;  The fact that Rails lazy loading can lead to some really inefficient <span class="caps">SQL</span>.  Generally, Rails can be quite slow (compared to MySQL).  And Ruby in the templates, which could end up being very chaotic (although he did point at <a href="http://home.leetsoft.com/liquid">Liquid</a> as a new and better alternative).</p>
<p>Matt had a demo app with him&#8212;the <span class="caps">BBC</span> Programme Catalogue.  This is a new interface to all the <span class="caps">BBC</span>&#8217;s programme metadata.  The <span class="caps">BBC</span> librarians have been maintaining this enourmous amount of information for <em>years</em>, and it&#8217;s now getting a shiny new web frontend.  Did you know it takes 8 hours for a single person to fill in the data for a single episode of <a href="http://news.bbc.co.uk/1/hi/programmes/newsnight/default.stm">Newsnight</a>?  Incredible.  Anyway, he&#8217;s done an incredible job of getting all that data into Rails.  The interface is still sucky, but will get a makeover before being released to the hounds^Wpublic early next year.  I can&#8217;t wait to get my hands on that data.</p>
<p>After that, there was really only time for one question.  Muttley piped up with &#8220;What do each one of you guys want to steal from each other?&#8221;  Djangos admin screen&#8217;s were the main ones.  Generally, they all feel that they would steal any useful features that they could from each other.  Isn&#8217;t cross fertilisation great?</p>
<p>Unfortunately, I had to rush off afterwards to catch a train.  Otherwise I would have enjoyed going to the pub with them all to talk over the bits some more.  Anyway, my thanks to Dean Wilson for organising all this.  Great to hear about things going on out there.  See you all next weekend at the <a href="http://london.pm.org/lpw/">London Perl Workshop</a>, I guess!</p>
]]></content:encoded>
			<wfw:commentRss>http://happygiraffe.net/blog/2005/11/19/web-frameworks-evening/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

