<?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>Red Robot Studios</title>
	<atom:link href="http://www.redrobotstudios.com/blog/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.redrobotstudios.com/blog</link>
	<description>Web development company specialising in Django development for clients around the world</description>
	<lastBuildDate>Wed, 03 Mar 2010 12:08:43 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Don&#8217;t delete an image file when deleting a Django model instance</title>
		<link>http://www.redrobotstudios.com/blog/2010/03/02/dont-delete-image-file-when-deleting-django-model-instance/</link>
		<comments>http://www.redrobotstudios.com/blog/2010/03/02/dont-delete-image-file-when-deleting-django-model-instance/#comments</comments>
		<pubDate>Tue, 02 Mar 2010 09:54:22 +0000</pubDate>
		<dc:creator>Scott Barnham</dc:creator>
				<category><![CDATA[Django]]></category>

		<guid isPermaLink="false">http://www.redrobotstudios.com/blog/?p=55</guid>
		<description><![CDATA[If you have a Django model with a FileField or ImageField, when you delete the model instance, the associated file or image is also deleted.  In most cases this is desirable and keeps things tidy, but I had a situation recently where the image file should not be deleted when the model was deleted. [...]]]></description>
			<content:encoded><![CDATA[<p>If you have a Django model with a <code>FileField</code> or <code>ImageField</code>, when you delete the model instance, the associated file or image is also deleted.  In most cases this is desirable and keeps things tidy, but I had a situation recently where the image file should not be deleted when the model was deleted.  Here&#8217;s a simple way to override the default behaviour.</p>
<h3>Custom file storage</h3>
<p>Django uses storage classes to determine how files are read and written.  Normally, the data is just written as files to disk, but there are other possibilities such as storing on remote servers.</p>
<p>It&#8217;s easy to write a <a href="http://docs.djangoproject.com/en/dev/howto/custom-file-storage/">custom file storage</a> class to override the behaviour of the default <code>FileStorageSystem</code>.  In this case, we only need to change the <code>delete</code> method so it does not delete the file.</p>
<p>In custom.py</p>
<pre>from django.core.files import storage

class NoDeleteFileStorage(storage.FileSystemStorage):
    def delete(self, name):
        pass</pre>
<p>We can then <a href="http://docs.djangoproject.com/en/1.1/topics/files/#file-storage">use the custom file storage</a> by making an instance and passing it to the <code>ImageField</code>.</p>
<p>In models.py</p>
<pre>from custom import NoDeleteFileStorage

ndfs = NoDeleteFileStorage()

class ImageInstance(models.Model):
    image = models.ImageField(storage=ndfs, ...)</pre>
<p>It&#8217;s as simple as that!  Custom file storage has some interesting possibilities.  With it you can handle how files are named or integrate with some caching or <a href="http://en.wikipedia.org/wiki/Content_Delivery_Network">CDN</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.redrobotstudios.com/blog/2010/03/02/dont-delete-image-file-when-deleting-django-model-instance/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Web or Native: Mobile Application Decisions</title>
		<link>http://www.redrobotstudios.com/blog/2010/02/20/web-or-native-mobile-application-decisions/</link>
		<comments>http://www.redrobotstudios.com/blog/2010/02/20/web-or-native-mobile-application-decisions/#comments</comments>
		<pubDate>Sat, 20 Feb 2010 09:07:02 +0000</pubDate>
		<dc:creator>Andrew Gleave</dc:creator>
				<category><![CDATA[mobile]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[web app]]></category>

		<guid isPermaLink="false">http://www.redrobotstudios.com/blog/?p=69</guid>
		<description><![CDATA[Since the debut of the iPhone in 2007, mobile computing has really taken off and we’re now at the start of a trend which will shape the future of computing, and one that will likely have a greater effect on people’s day-to-day lives than the internet experience of today.
Mobile phones have had the ability to [...]]]></description>
			<content:encoded><![CDATA[<p>Since the debut of the iPhone in 2007, mobile computing has really taken off and we’re now at the start of a trend which will shape the future of computing, and one that will likely have a greater effect on people’s day-to-day lives than the internet experience of today.</p>
<p>Mobile phones have had the ability to use the internet in a primitive way for 15 years or so, but it wasn’t until Apple released the <a href="http://www.tuaw.com/2007/10/17/apple-we-plan-to-have-an-iphone-sdk-in-developers-hands-in-fe/">iPhone <acronym title="A set of tools that allows for the creation of applications platform or system">SDK</acronym> in 2008</a> and the subsequent development frenzy that ensued, that the surge in mobile internet use really began.</p>
<p style="text-align: center;"><a href="http://www.redrobotstudios.com/blog/wp-content/uploads/2010/02/iphone.jpg"><img class="aligncenter size-full wp-image-91" title="Apple's iPhone whetted users' appetite for apps" src="http://www.redrobotstudios.com/blog/wp-content/uploads/2010/02/iphone.jpg" alt="" width="389" height="287" /></a></p>
<p>Today&#8217;s smartphones transcend simply retrieving email, sending SMSs and making calls and instead enable users to transform their phone in to whatever they want: a <a href="http://itunes.apple.com/us/app/the-sims-3/id317904170?mt=8">gaming machine</a>, a <a href="http://itunes.apple.com/gb/app/tomtom-u-k-ireland/id326067542?mt=8">sat nav</a>, or a <a href="http://itunes.apple.com/gb/app/sleep-cycle-alarm-clock/id320606217?mt=8">sleep cycle alarm clock</a>; all with the download of an application. This shift has fundamentally altered the way consumers think about what a phone <em>is</em> and how they use it, so much so, that often its function as a phone becomes secondary.</p>
<p>The current darling of this revolution is Apple’s iPhone which currently has about 140,000 applications on its <a href="http://www.apple.com/iphone/apps-for-iphone/">App Store</a>, and with over <a href="http://www.apple.com/pr/library/2010/01/05appstore.html">3 billion downloads</a> is easily the most developed marketplace for mobile applications. In fact, stats gathered at the end of 2009 showed Apple captured <a href="http://arstechnica.com/apple/news/2010/01/apple-responsible-for-994-of-mobile-app-sales-in-2009.ars" target="_blank">99.4% of the mobile application market</a>!</p>
<p>Apple aren&#8217;t the only ones driving this push in to mobile application use. Google, Nokia, Palm, RIM (with their Blackberry) and  Microsoft all have their own platform, all offering similar features, but all mostly incompatible.</p>
<p>So with apps being a hot (and potentially lucrative) market and a number of competing platforms to choose from, how do you go about developing and deploying mobile applications?</p>
<p>It boils down to two choices:</p>
<ul>
<li>A native application – A native application is one which is installed and runs on the device and is developed using the device’s <acronym title="A set of tools that allows for the creation of applications platform or system">SDK</acronym>. Native applications only run on one platform so you need to develop a different application for each platform. Once built, the app can be sold on its respective  marketplace such as the <a href="http://www.apple.com/iphone/apps-for-iphone/">App Store</a>, <a href="http://www.android.com/market/">Android Marketplace</a> or <a href="http://www.ovi.com/services/">Nokia’s Ovi store</a>.</li>
<li>A mobile web app – A mobile app is a web-based application which runs in the browser of the device. There’s no special deployment necessary, it only requires a browser to use it. The goal is to build a web app which is usable by most, if not all, of the different types of device. However, in practice this isn&#8217;t particularity easy – yet.</li>
</ul>
<p>Actually, if you just require a mobile version of your site, you have the option of doing nothing and hoping that your site is useable enough as it is for users browsing on their mobile device. This depends on how your site was built and the browser which is being used, so there could be a large number of users who may get a less than ideal experience.</p>
<p>Both web and native apps have their pros and cons and the choice often comes down to what you want the app to do, and what your users will expect.</p>
<h3 id="going_native">Going Native</h3>
<div id="attachment_94" class="wp-caption aligncenter" style="width: 378px"><a href="http://www.redrobotstudios.com/blog/wp-content/uploads/2010/02/markets.png"><img class="size-full wp-image-94 " title="markets" src="http://www.redrobotstudios.com/blog/wp-content/uploads/2010/02/markets.png" alt="" width="368" height="136" /></a><p class="wp-caption-text">The Apple&#39;s App Store and Google&#39;s Android Marketplace are only two of a number of outlets for native applications</p></div>
<p>Developing a native application will provide benefits in its performance and tight integration with all the device’s features and <acronym title="An interface implemented by a software program to enable interaction with other software, much in the same way that a user interface facilitates interaction between humans and computers">APIs</acronym>. A native application will give your users the best experience by taking full advantage of the full capabilities of the device.</p>
<p>Advantages like :</p>
<ul>
<li>They can use all of the device’s features such as its camera, GPS, compass, file system etc.</li>
<li>They can be sold through a marketplace such as the App Store or Android Marketplace</li>
<li>They have superior performance compared with a typical web app</li>
<li>Don’t necessarily need to be connected to a 3G or WiFi network to function *</li>
<li>They’re not running in a browser so there’s no restriction on the types of application that can be developed</li>
</ul>
<p><em>*Improvements brought in with HTML5 will help web apps in some respect on this point.</em></p>
<p>Because a native app isn’t restricted to running in a browser they can do some pretty intensive things such as an augmented reality app to show you <a href="http://www.youtube.com/watch?v=b64_16K2e08">a data overlay on top of live video</a> or full <a href="http://itunes.apple.com/us/app/crash-bandicoot-nitro-kart-3d/id285005463?mt=8">full 3D games</a>. Neither of which would currently be possible with a web app.</p>
<p>But there are downsides, too:</p>
<ul>
<li>Typically higher development cost and longer lead time.</li>
<li>Very little portability across platform – if you want your app to run on both the iPhone and Android it means building two separate versions.</li>
</ul>
<p>So if you want to do anything that takes full advantage of a device’s capabilities, or do anything custom or unique, you’re likely looking at a native app. However, the issue of building and deploying to many different devices mean the overall cost can be high.</p>
<p>And this is where web-apps can really start to look like a great alternative: A web-based app should be able to run on any device with a browser, right?</p>
<p>Well, sort of.</p>
<h3 id="the_changing_landscape_of_the_mobile_web">The Mobile Web</h3>
<p>Everything which you interact with on the internet (except the most basic of web pages) is a web app in one form or another: Facebook, Twitter, Flickr, your favourite blog – all in a broad sense are web apps.</p>
<p>The major advantage of web apps are that they can be used wherever you are, from any computer, via almost any browser. No downloading, no software updates and no uninstalling – just open a browser window, type the URL and hit Enter. Add that to fact that all devices have a web browser means that you have a potentially large number of users who are already familiar with how to get to and use your app.</p>
<p>However web development for mobile devices is still developing and it can be difficult to do things which would be straightforward in a native application. John Gruber has a great article on building <a href="http://daringfireball.net/2009/11/iphone_web_apps_alternative">iPhone Web Apps as an Alternative to the App Store</a> which covers the topic nicely.</p>
<p>Even though currently it’s not possible to build a web app that will do everything a native app does, for some situations a mobile app is perfect. There’s some great work going in with <a href="http://www.jqtouch.com/">jQTouch</a> which is a tool that makes it easier to build  mobile web apps for both the iPhone and Android, that look and feel more like a native application. There&#8217;s also <a href="http://phonegap.com/">PhoneGap</a>, which enables a web app to be packaged up and deployed as a native application for the iPhone, Blackberry and Android and sold on their respective marketplace / store.</p>
<p>With these types of tools emerging, and the devices themselves becoming more powerful, it’s not long before web apps become the choice for a larger proportion of mobile applications. The fact that Apple (iPhone), Google (Android), Palm (Pre), Nokia and <a href="http://www.businessweek.com/news/2010-02-16/rim-to-debut-new-blackberry-web-browser-to-compete-with-iphone.html">just announced RIM</a> (Blackberry) are all backing the open source <a href="http://webkit.org/">WebKit</a> engine to power their web browsers, it&#8217;s a major step in getting a consistent experience across multiple devices.  Knowing that an app will look and perform the same manner on all these devices is the Holy Grail of web development: write once, run anywhere.</p>
<div id="attachment_96" class="wp-caption aligncenter" style="width: 225px"><a href="http://www.redrobotstudios.com/blog/wp-content/uploads/2010/02/icon-gold.png"><img class="size-full wp-image-96" title="icon-gold" src="http://www.redrobotstudios.com/blog/wp-content/uploads/2010/02/icon-gold.png" alt="" width="215" height="174" /></a><p class="wp-caption-text">The Webkit browser engine which powers a lot of modern smartphone browsers</p></div>
<p>Add to this <a href="http://diveintohtml5.org/">HTML5</a> and the rapid development of browser technology and we’re closely approaching the point where we can use standard web technologies to build advanced mobile applications. In the next couple of years most, if not all, mobile platforms will have support for the following advanced features all of which will drasticly change both what web apps are capable of and what users will expect from them:</p>
<ul>
<li>Pure web-based 3D graphics via <a href="http://webkit.org/blog/603/webgl-now-available-in-webkit-nightlies/">WebGL</a> – enabling 3D games and modelling</li>
<li>Standardised 2D graphics and animation – slick animation and graphics are trademarks of native applications&#8217; rich interfaces</li>
<li>Standardised video and audio support – no more plugins to watch movies or listen to streaming music</li>
<li>Communication improvements</li>
<li>Geolocation support &#8211; enable the browser to access your location</li>
<li>Local storage and SQL databases – meaning data can be stored within the web application itself so you don’t always require an internet connection to use it. <a href="http://docs.google.com/support/bin/answer.py?hl=en&amp;answer=92254">Google Apps</a> provide this features already using Google Gears.</li>
<li>Manifests and offline resource caching – movies and photos are still accessible even if you go offline</li>
</ul>
<p>The future is looking bright for mobile web app development, and as the tools and browser technology get better, development will shift from native to web-based applications. The overall trend is that the &#8220;Internet is the platform&#8221; that all applications rely on – and not just the mobile ones.</p>
<blockquote><p>&#8220;…development for a platform is a distraction. It’s taking our eyes off the ball, and ignoring the bigger shift that’s happening beneath our feet.&#8221;</p></blockquote>
<p><cite><a href="http://factoryjoe.com/blog/2009/08/01/steve-jobs-hates-the-appstore/">Chris Messina</a> – <em>Referring to the fact that we should be developing for the web rather than for a single platform.</em></cite></p>
<p>These types of device and the market for mobile applications in general is still young and it’s going to take a while for the game to play out. Native mobile applications, with their superior performance, slickness and better capabilities are going to be the choice for demanding or cutting edge applications – at least for the forseable future – but one thing you can bank on is that the web isn’t going anywhere. The web is the inevitable platform, and that means that we&#8217;ll see huge growth in web-based apps in the coming years.</p>
<p><em>Andrew Gleave is the lead developer of <a href="http://www.redrobotstudios.com/mobile-development/">iPhone and mobile apps</a> at Red Robot Studios.  Considering developing a mobile app?  <a href="http://www.redrobotstudios.com/contact/">Contact Red Robot Studios</a> to see how we can help.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.redrobotstudios.com/blog/2010/02/20/web-or-native-mobile-application-decisions/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Custom web, Django and mobile development</title>
		<link>http://www.redrobotstudios.com/blog/2010/02/08/custom-web-django-and-mobile-development/</link>
		<comments>http://www.redrobotstudios.com/blog/2010/02/08/custom-web-django-and-mobile-development/#comments</comments>
		<pubDate>Mon, 08 Feb 2010 10:04:15 +0000</pubDate>
		<dc:creator>Scott Barnham</dc:creator>
				<category><![CDATA[Company]]></category>
		<category><![CDATA[services]]></category>

		<guid isPermaLink="false">http://www.redrobotstudios.com/blog/?p=50</guid>
		<description><![CDATA[We started Red Robot Studios in 2008 to develop web-based apps using great technologies like Django. Since then we&#8217;ve learned an enormous amount about what it takes to build and deploy large-scale web applications, and as we&#8217;ve developed and released our own sites and apps, we&#8217;ve increasingly been approached by people who want us to work with [...]]]></description>
			<content:encoded><![CDATA[<p>We started Red Robot Studios in 2008 to develop web-based apps using great technologies like Django. Since then we&#8217;ve learned an enormous amount about what it takes to build and deploy large-scale web applications, and as we&#8217;ve developed and released our own sites and apps, we&#8217;ve increasingly been approached by people who want us to work with them to help them build great sites and services.</p>
<p>We&#8217;re still going to be building and releasing our own projects but have also decided to offer our development service to clients as well. We have some excellent clients already and will be accepting work from new clients.</p>
<p>Our aim is not just to provide a normal development service but to help our clients achieve their goals. We want to help and advise based on our experience and go the extra mile to provide <strong>really great</strong> development services to all our clients.</p>
<p>Our main focus is <a href="http://www.redrobotstudios.com/django-development/">Django development</a>, <a href="http://www.redrobotstudios.com/mobile-development/">iPhone and mobile development</a>, but we are well experienced in many other areas including things as diverse as WordPress plugins, Facebook apps and Firefox extensions. We&#8217;d love to hear about your great idea, so <a href="http://www.redrobotstudios.com/contact/">get in touch</a>!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.redrobotstudios.com/blog/2010/02/08/custom-web-django-and-mobile-development/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Requiring https for certain paths in Django</title>
		<link>http://www.redrobotstudios.com/blog/2010/02/06/requiring-https-for-certain-paths-in-django/</link>
		<comments>http://www.redrobotstudios.com/blog/2010/02/06/requiring-https-for-certain-paths-in-django/#comments</comments>
		<pubDate>Sat, 06 Feb 2010 12:03:25 +0000</pubDate>
		<dc:creator>Scott Barnham</dc:creator>
				<category><![CDATA[Django]]></category>

		<guid isPermaLink="false">http://www.redrobotstudios.com/blog/?p=45</guid>
		<description><![CDATA[A while ago I wrote about Securing Django with SSL.  Here&#8217;s a small addition.
Some paths need https
If you&#8217;re using SSL it makes sense for certain parts of the site to require a secure connection.  For example, the admin section.
Previously I shared the secure_required decorator which forces requests to use https for specific views. [...]]]></description>
			<content:encoded><![CDATA[<p>A while ago I wrote about <a href="http://www.redrobotstudios.com/blog/2009/02/18/securing-django-with-ssl/">Securing Django with SSL</a>.  Here&#8217;s a small addition.</p>
<h3>Some paths need https</h3>
<p>If you&#8217;re using SSL it makes sense for certain parts of the site to require a secure connection.  For example, the admin section.</p>
<p>Previously I shared the <a href="http://www.redrobotstudios.com/blog/2009/02/18/securing-django-with-ssl/">secure_required</a> decorator which forces requests to use https for specific views.  This works ok, but if you know an entire section of the site under a given path (e.g. <code>/admin/</code>) should be secure, it&#8217;s hassle to have to add the decorator to each view.</p>
<p>You can require secure connections over https using webserver config or using Django itself.</p>
<h3>Requiring https using Nginx</h3>
<p>In your Nginx config file under the section for the unsecure http/port 80 server you can specify a location path and redirect all requests to it to https instead.</p>
<pre>server {
    listen 10.10.10.10:80;
    server_name example.com;
...
    location /admin {
        # force admin to use https
        rewrite (.*) https://example.com/$1 permanent;
    }
...
}
</pre>
<p>Apache and other web servers can have a similar configuration.</p>
<p>If you can configure it in the web server, that&#8217;s more efficient because the request can be redirected by the server, without having to contact your Django project.  However, it should be fairly rare for requests to be redirected like this so it&#8217;s not a big performance issue and sometimes it&#8217;s easier to handle things in Django.</p>
<h3>Requiring https using Django middleware</h3>
<p>In Django it&#8217;s easy to write <a href="http://docs.djangoproject.com/en/dev/topics/http/middleware/">custom middleware</a> which gets called before each request reaches a view.</p>
<p>Here&#8217;s a small piece of middleware which checks if the request is over http to a path we want to be secure and if so redirects to the same path but over https.</p>
<pre>from django.http import HttpResponsePermanentRedirect
from django.conf import settings

class SecureRequiredMiddleware(object):
    def __init__(self):
        self.paths = getattr(settings, 'SECURE_REQUIRED_PATHS')
        self.enabled = self.paths and getattr(settings, 'HTTPS_SUPPORT')

    def process_request(self, request):
        if self.enabled and not request.is_secure():
            for path in self.paths:
                if request.get_full_path().startswith(path):
                    request_url = request.build_absolute_uri(request.get_full_path())
                    secure_url = request_url.replace('http://', 'https://')
                    return HttpResponsePermanentRedirect(secure_url)
        return None</pre>
<p>In <code>settings.py</code></p>
<pre>MIDDLEWARE_CLASSES = (
...
    'myproject.middleware.SecureRequiredMiddleware',
)

HTTPS_SUPPORT = True
SECURE_REQUIRED_PATHS = (
    '/admin/',
    '/accounts/',
    '/management/',
)
</pre>
<p><code>SECURE_REQUIRED_PATHS</code> is a list or tuple of paths that should be secure.  Any request to a path which starts with one of these will be required to use https.</p>
<p><code>HTTPS_SUPPORT</code> is a custom setting to make it easier to use this on your dev server without SSL support.  Set it to <code>True</code> in the settings for the live server and <code>False</code> in the settings for the dev server.</p>
<p>So there we go, an easy way to require secure https requests for certain parts of your Django site.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.redrobotstudios.com/blog/2010/02/06/requiring-https-for-certain-paths-in-django/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Find Nearby Developers on Djangogigs</title>
		<link>http://www.redrobotstudios.com/blog/2009/06/23/find-nearby-developers-on-djangogigs/</link>
		<comments>http://www.redrobotstudios.com/blog/2009/06/23/find-nearby-developers-on-djangogigs/#comments</comments>
		<pubDate>Tue, 23 Jun 2009 08:46:47 +0000</pubDate>
		<dc:creator>Scott Barnham</dc:creator>
				<category><![CDATA[Djangogigs]]></category>

		<guid isPermaLink="false">http://www.redrobotstudios.com/blog2/?p=30</guid>
		<description><![CDATA[Djangogigs is a very successful job board we run for web developers who use the Django framework.  A few jobs and freelance gigs are added each week and there is a large directory of developers available&#160;for&#160;hire.
Finding&#160;Django&#160;Developers
As the number of developers increases, it becomes harder to find the person you are looking for.  A [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://djangogigs.com/">Djangogigs</a> is a very successful job board we run for web developers who use the <a href="http://www.djangoproject.com/">Django framework</a>.  A few jobs and freelance gigs are added each week and there is a large directory of developers available&nbsp;for&nbsp;hire.</p>
<h3>Finding&nbsp;Django&nbsp;Developers</h3>
<p>As the number of developers increases, it becomes harder to find the person you are looking for.  A while ago we added filtering by country, but for large countries such as the US, there are still way too many developer profiles to look through.  We now have nearly 700 <a href="http://djangogigs.com/developers/">Django developers</a> on the site and needed to find a&nbsp;better&nbsp;way.
</p>
<p>The solution we chose was <a href="http://en.wikipedia.org/wiki/Geocoding">geocoding</a> the location of each developer so that we can find developers who are close to a given location.  Ignoring the technical stuff, it&#8217;s very easy to use.  <strong>Just type in the name of your town or city and get back a list of developers who are nearby</strong>.</p>
<p>We&#8217;re confident this will make it much easier to find Django developers and may add other search options in future.  As always, we&#8217;re happy to hear <a href="http://getsatisfaction.com/redrobotstudios/products/redrobotstudios_djangogigs">your feedback</a>.
</p>
<h3>Follow us&nbsp;on&nbsp;Twitter</h3>
<p>We&#8217;ve also added a <a href="http://twitter.com/djangogigs">Djangogigs Twitter account</a> which you can follow to see the latest gigs as they&nbsp;are&nbsp;added.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.redrobotstudios.com/blog/2009/06/23/find-nearby-developers-on-djangogigs/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Even Easier Job Boards</title>
		<link>http://www.redrobotstudios.com/blog/2009/06/09/even-easier-job-boards/</link>
		<comments>http://www.redrobotstudios.com/blog/2009/06/09/even-easier-job-boards/#comments</comments>
		<pubDate>Tue, 09 Jun 2009 13:00:51 +0000</pubDate>
		<dc:creator>Andrew Gleave</dc:creator>
				<category><![CDATA[Easy Job Boards]]></category>

		<guid isPermaLink="false">http://www.redrobotstudios.com/blog2/?p=28</guid>
		<description><![CDATA[Easy Job Boards, our simple–to-use hosted job board application, has just been updated and we&#8217;ve completely removed the requirement that you create an account before you are able to create a&#160;job&#160;board.
We wanted to make it as simple as possible for people to create a job board, and that means doing something about the need for [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.easyjobboards.com/">Easy Job Boards</a>, our simple–to-use hosted job board application, has just been updated and we&#8217;ve completely removed the requirement that you create an account before you are able to create a&nbsp;job&nbsp;board.</p>
<p>We wanted to make it as simple as possible for people to <a href="http://www.easyjobboards.com/boards/add/?nosignup">create a job board</a>, and that means doing something about the need for you to already have an account before being able to try out&nbsp;the&nbsp;service.
</p>
<p>We considered integrating <a href="http://openid.net/">OpenID</a> with our registration system &#8211; <em>which we may implement at some point</em> – but decided that it would be far nicer if we could do away with the user having to provide any details&nbsp;at&nbsp;all.
</p>
<p>You can now just go straight to the <a href="http://www.easyjobboards.com/boards/add/?nosignup">create a job board</a>  page, give your board a name, and that&#8217;s it – your own job board created in record time, and you haven&#8217;t even needed to give your&nbsp;email&nbsp;address!
</p>
<p>If you decide that you want to give your job board a proper spin and publish your board and its jobs live on the internet, you can then create an account and start a 14-day&nbsp;free&nbsp;trial.
</p>
<p>Hopefully, by leaving the requirement to register until the last moment, it helps newcomers get a feel for their job board quickly, and with&nbsp;minimum&nbsp;fuss.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.redrobotstudios.com/blog/2009/06/09/even-easier-job-boards/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Easy Job Boards: Now with themes, colours and roles</title>
		<link>http://www.redrobotstudios.com/blog/2009/03/26/easy-job-boards-now-with-themes-colours-and-roles/</link>
		<comments>http://www.redrobotstudios.com/blog/2009/03/26/easy-job-boards-now-with-themes-colours-and-roles/#comments</comments>
		<pubDate>Thu, 26 Mar 2009 17:36:05 +0000</pubDate>
		<dc:creator>Andrew Gleave</dc:creator>
				<category><![CDATA[Easy Job Boards]]></category>

		<guid isPermaLink="false">http://www.redrobotstudios.com/blog2/?p=25</guid>
		<description><![CDATA[We have just released the first major update to Easy Job Boards since its launch and have introduced a number of&#160;requested&#160;features:


     Custom Themes and Styles and user-defined job roles  – Enabling users to choose custom colours and themes for their board and to add custom job roles so jobs can [...]]]></description>
			<content:encoded><![CDATA[<p>We have just released the first major update to <a href="http://www.easyjobboards.com/">Easy Job Boards</a> since its launch and have introduced a number of&nbsp;requested&nbsp;features:</p>
<ul>
<li>
     <a href="http://www.easyjobboards.com/blog/2009/03/13/job-roles-and-themes-now-available/">Custom Themes and Styles and user-defined job roles</a>  – Enabling users to choose custom colours and themes for their board and to add custom job roles so jobs can be categorized for easy browsing&nbsp;and&nbsp;filtering.
 </li>
<li>
     <a href="http://www.easyjobboards.com/blog/2009/02/10/custom-domains-now-available/">Custom domain support</a> &#8211; You can now specify a custom domain for a job board so if you own newyorkaccountancyjobs.com, you can now run a job board directly from that address. Or, if you already have a company website, you can use a jobs subdomain&nbsp;like&nbsp;jobs.mycompany.com
 </li>
</ul>
<p>To keep up to date with the changes and improvements we&#8217;re making to Easy Job Boards, check out the <a href="http://www.easyjobboards.com/blog/">Easy Job Boards blog</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.redrobotstudios.com/blog/2009/03/26/easy-job-boards-now-with-themes-colours-and-roles/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Securing Django with SSL</title>
		<link>http://www.redrobotstudios.com/blog/2009/02/18/securing-django-with-ssl/</link>
		<comments>http://www.redrobotstudios.com/blog/2009/02/18/securing-django-with-ssl/#comments</comments>
		<pubDate>Wed, 18 Feb 2009 11:56:08 +0000</pubDate>
		<dc:creator>Scott Barnham</dc:creator>
				<category><![CDATA[Django]]></category>

		<guid isPermaLink="false">http://www.redrobotstudios.com/blog2/?p=42</guid>
		<description><![CDATA[When we built the centralized authentication system for Red Robot Studios we wanted all authentication and account resources to be available solely over&#160;https.

This article covers some tips and tricks we discovered while building the app, and how you can use Django to get fine-grained control as to which resources are available&#160;securely.

Why bother with&#160;security?
We all know [...]]]></description>
			<content:encoded><![CDATA[<p>When we built the centralized authentication system for <a href="http://www.redrobotstudios.com/">Red Robot Studios</a> we wanted all authentication and account resources to be available solely over&nbsp;https.
</p>
<p>This article covers some tips and tricks we discovered while building the app, and how you can use Django to get fine-grained control as to which resources are available&nbsp;securely.
</p>
<h3>Why bother with&nbsp;security?</h3>
<p>We all know that data sent over http is cleartext and can potentially be read on any network between the client and server.  But the risk feels pretty minimal and many sites don&#8217;t bother using <span class="caps">SSL</span> to encrypt sensitive traffic.  For online banking and ecommerce, you&#8217;d be crazy not to use it, but for other sites, why&nbsp;bother?</p>
<p>The chances of your http requests being snooped upon by an <span class="caps">ISP</span>, intermediate networks or your hosting company seem minimal.  But one potentially big risk is users accessing your website on an open wireless&nbsp;network.
</p>
<p>For example, perhaps your user has an unsecured wireless home or office network or maybe they use wireless networks in coffee shops and airports: It&#8217;s really easy in this situation for sensitive requests to be snooped&nbsp;upon.
</p>
<p>The data on your website may not be sensitive, but if you use Django&#8217;s admin or authentication frameworks, two important bits of information are passed as&nbsp;cleartext.
</p>
<p>When a user logs in, their username and password is posted in cleartext.  Assuming login is successful, each subsequent request includes a cookie containing the <code>sessionid</code>. The <code>sessionid</code> is just a random string, but if you know the <code>sessionid</code> of a user, it is trivial to hijack the session and have the same access to the website as that user does until they log&nbsp;out.</p>
<h3>Encrypting login&nbsp;sessions</h3>
<p>If you want to be sure user credentials and sessions cannot be compromised by eavesdroppers, you need to use <span class="caps">SSL</span> encryption.  Install an <span class="caps">SSL</span> certificate on the server so that traffic is encrypted end-to-end between client and&nbsp;server.
</p>
<p>You probably don&#8217;t want the whole site to be secure because it will be a lot slower and significantly increase the load on your servers.  Instead, you can be selective about which parts of the site should use https instead of http.  If you want user sessions to be secure, you should make sure that logging in and all parts of the site that require a logged-in user use&nbsp;https.</p>
<h3><span class="caps">SSL</span></h3>
<p>Standard <span class="caps">SSL</span> certificates are pretty cheap these days – under $20 per year.  We go some from <a href="http://www.rapidsslonline.com/">RapidSSLOnline</a>.  Each secure site needs its own <span class="caps">IP</span> address, so if you&#8217;re hosting multiple sites using virtual hosting, you&#8217;ll need to look in to getting some dedicated&nbsp;IPs.
</p>
<p>There are lots of guides to installing <span class="caps">SSL</span> certificates and configuring web servers such as Apache, Lighttpd and Nginx, so I won&#8217;t cover that&nbsp;here.
</p>
<h3>Making Django sessions&nbsp;secure</h3>
<p>Django uses cookies for its sessions.  When a cookie is set, you can specify that it be a secure cookie, meaning it is only ever passed over https and not in http requests.  We can tell Django to use secure cookies for sessions by adding a setting to <code>settings.py</code>
</p>
<pre><code>SESSION_COOKIE_SECURE = True
</code></pre>
<p>If you set Django to use secure cookies then try to log in over http you will get the&nbsp;error</p>
<blockquote><p><span class="dquo">&#8220;</span>Looks like your browser isn&#8217;t configured to accept cookies. Please enable cookies, reload this page, and try&nbsp;again.&#8221;
</p>
</blockquote>
<p>This happens because Django sets the cookie, but it&#8217;s a secure cookie, so when the page loads over http, Django can&#8217;t see the cookie and so assumes cookies are disabled in your&nbsp;browser.
</p>
<h3>Requiring https for&nbsp;admin</h3>
<p>To avoid this cookie warning and make sure you only ever pass your admin credentials over https, you can configure your web server so that any http requests are redirected to&nbsp;https.</p>
<p>For example, in Nginx it would look&nbsp;like:
</p>
<pre><code>server {
    server_name example.com;
    location /admin {
        # force admin to use https
        rewrite (.*) https://example.com/$1 permanent;
    }
...
}
</code></pre>
<p>In Apache, something&nbsp;like:
</p>
<pre><code>&lt;Location /admin&gt;
    RewriteRule (.*) https://example.com/$1 [L,R=301]
    ...
&lt;/Location&gt;
</code></pre>
<p>Of course, these bits of config should go in the http config, not the https config or you will cause infinite&nbsp;redirects!
</p>
<h3>Requiring https for certain&nbsp;views</h3>
<p>If all the logged-in parts of your site are in a certain path (e.g. /accounts/ and /members/) you can configure your web server in the same way to require https for these&nbsp;locations.
</p>
<p>If certain views require https (e.g. <code>/members/bert/</code> is public but <code>/members/bert/edit/</code> requires login), you may want to check <code>request.is_secure()</code> in those views.  A neat way to do it is with a decorator which can also redirect any http requests to&nbsp;https.</p>
<pre><code>from django.conf import settings
from django.http import HttpResponseRedirect

def secure_required(view_func):
    """Decorator makes sure URL is accessed over https."""
    def _wrapped_view_func(request, *args, **kwargs):
        if not request.is_secure():
            if getattr(settings, 'HTTPS_SUPPORT', True):
                request_url = request.build_absolute_uri(request.get_full_path())
                secure_url = request_url.replace('http://', 'https://')
                return HttpResponseRedirect(secure_url)
        return view_func(request, *args, **kwargs)
    return _wrapped_view_func
</code></pre>
<p>Then on your&nbsp;view:
</p>
<pre><code>@secure_required
@login_required
def edit_member(request, slug):
    ...
</code></pre>
<h3>Moving between http and https&nbsp;pages</h3>
<p>It&#8217;s normal to use full path URLs like <code>/accounts/login/</code> and <code>/blog/</code>.  Bear in mind that if you are accessing the site over https and follow one of these links, you will also access them over https.  If you want to be explicit, you need to specify the protocol and domain in the links, e.g. <strong>https</strong>://example.com/accounts/login/ and <strong>http</strong>://example.co/blog/&nbsp;.</p>
<p>For $20 and a bit of config, you can secure logged-in sessions on your site and protect yourself and your users from being compromised by eavesdroppers.  There are still plenty of sites where this is overkill, but you can see now how easy it is to secure your Django site with&nbsp;<span class="caps">SSL</span>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.redrobotstudios.com/blog/2009/02/18/securing-django-with-ssl/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Djangogigs and Red Robot Studios</title>
		<link>http://www.redrobotstudios.com/blog/2009/01/26/djangogigs-and-red-robot-studios/</link>
		<comments>http://www.redrobotstudios.com/blog/2009/01/26/djangogigs-and-red-robot-studios/#comments</comments>
		<pubDate>Mon, 26 Jan 2009 14:09:15 +0000</pubDate>
		<dc:creator>Andrew Gleave</dc:creator>
				<category><![CDATA[Djangogigs]]></category>

		<guid isPermaLink="false">http://www.redrobotstudios.com/blog2/?p=22</guid>
		<description><![CDATA[Djangogigs is the primary job board for developers who use the Django web development framework and are looking for freelance or&#160;permanent&#160;work.
It was launched in September 2007 and was designed to give employers and developers a central  location to list and respond to job listings, and quickly became popular within the&#160;Django&#160;community.

Since then, we&#8217;ve had about [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://djangogigs.com/">Djangogigs</a> is the primary job board for developers who use the <a href="http://www.djangoproject.com/">Django web development framework</a> and are looking for freelance or&nbsp;permanent&nbsp;work.</p>
<p>It was <a href="http://www.tangerinesmash.com/writings/2007/sep/26/djangogigscom-idea-release-6-hours/">launched</a> in September 2007 and was designed to give employers and developers a central  location to list and respond to job listings, and quickly became popular within the&nbsp;Django&nbsp;community.
</p>
<p>Since then, we&#8217;ve had about 550 gigs and nearly 800 developers submitted to the site. And even during the downturn in the job market, we&#8217;re still getting a similar number of gig submissions as last year – good news for&nbsp;django&nbsp;developers.
</p>
<p>Since Scott and I formed <a href="http://www.redrobotstudios.com/">Red Robot Studios</a> last year, we wanted to take Djangogigs under the Red Robot Studios banner and take some time to add long-awaited features. Between setting up the company and releasing <a href="http://www.easyjobboards.com/">easyjobboards</a>, this is the first chance we&#8217;ve had to dedicate some time to djangogigs and add some much-requested features.   This is only the tip of the iceberg and we want to grow and improve the site to help fulfil the community&#8217;s needs and make it more useful&nbsp;to&nbsp;all.</p>
<h4>New&nbsp;Features</h4>
<ul>
<li>
     Gigs can now be edited&nbsp;and&nbsp;removed
 </li>
<li>
     We&#8217;ve given the interface a refreshed and made it clearer and&nbsp;more&nbsp;consistent
 </li>
<li>
     You can now use <a href="http://daringfireball.net/projects/markdown/syntax">Markdown</a> syntax to structure gig and&nbsp;developer&nbsp;descriptions
 </li>
<li>
     Added dynamic address and location lookup by integrating with&nbsp;Google&nbsp;maps
 </li>
<li>
     Lots of internal improvements to how gigs and developers are approved&nbsp;and&nbsp;managed
 </li>
</ul>
<p>We&#8217;ve also moved to a faster server and added a feedback widget to help and encourage people to get&nbsp;in&nbsp;touch.
</p>
<p>Since we&#8217;ve integrated with the <a href="http://maps.google.com/">Google Maps</a> API, the location details of gigs and developers is now in a common format which will allow us to split, cluster, map and filter listings, making it easier to find what you&#8217;re looking for. For example, we will be able to provide fine-grain control: just jobs in San Francisco, and conversely filter by continent&nbsp;or&nbsp;country. </p>
<p>We&#8217;ve only added initial support for this (at the country level), but we&#8217;d love to <a href="http://getsatisfaction.com/redrobotstudios/products/redrobotstudios_djangogigs">hear what you would find useful</a>.
</p>
<p>We have lots planned for the future, and intend to integrate parts of our <a href="http://www.easyjobboards.com/">easy-to-use job board application</a> in to djangogigs in&nbsp;the&nbsp;future.
</p>
<p>We&#8217;d especially like to hear your feedback as to what you think needs to be improved upon to make the site more useful to both developers&nbsp;and&nbsp;employers.</p>
<p>You can send all <a href="http://getsatisfaction.com/redrobotstudios/products/redrobotstudios_djangogigs">feedback, issues or suggestions</a> to us at our support page along with anything else you&#8217;d like us&nbsp;to&nbsp;address.
</p>
<p>Thanks for&nbsp;your&nbsp;support.
</p>
<p>Andrew and Scott<br />
   The guys from Red&nbsp;Robot&nbsp;Studios</p>
]]></content:encoded>
			<wfw:commentRss>http://www.redrobotstudios.com/blog/2009/01/26/djangogigs-and-red-robot-studios/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Easy Job Boards Rebrand</title>
		<link>http://www.redrobotstudios.com/blog/2009/01/02/easy-job-boards-rebrand/</link>
		<comments>http://www.redrobotstudios.com/blog/2009/01/02/easy-job-boards-rebrand/#comments</comments>
		<pubDate>Fri, 02 Jan 2009 17:52:56 +0000</pubDate>
		<dc:creator>Scott Barnham</dc:creator>
				<category><![CDATA[Easy Job Boards]]></category>

		<guid isPermaLink="false">http://www.redrobotstudios.com/blog2/?p=17</guid>
		<description><![CDATA[We launched our hosted job board product a couple of months ago under the name “Fuselagejobs”.  Much as we liked the name and plane logo, it&#8217;s not obvious from the name that it&#8217;s an easy way to have your own&#160;job&#160;board.
Today we changed to easyjobboards.com with a fresh new logo and more obvious domain name. [...]]]></description>
			<content:encoded><![CDATA[<p>We launched our hosted job board product a couple of months ago under the name “Fuselagejobs”.  Much as we liked the name and plane logo, it&#8217;s not obvious from the name that it&#8217;s an easy way to have your own&nbsp;job&nbsp;board.</p>
<p>Today we changed to <a href="http://www.easyjobboards.com/">easyjobboards.com</a> with a fresh new logo and more obvious domain name.  We hope this will be much clearer to people who are looking for a hosted job board solution.  We chose “easy” to emphasise one of our key goals: make it easy for non-technical folks to start and run a&nbsp;job&nbsp;board.
</p>
<p>We have many improvements in the pipeline and we&#8217;d love to hear <a href="http://getsatisfaction.com/redrobotstudios/products/redrobotstudios_easyjobboards">your suggestions</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.redrobotstudios.com/blog/2009/01/02/easy-job-boards-rebrand/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
