<?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>Mitch Fournier</title>
	<atom:link href="http://mitchfournier.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://mitchfournier.com</link>
	<description>Builder.</description>
	<lastBuildDate>Thu, 12 Aug 2010 17:30:09 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Customizing Django Comments: Remove Unwanted Fields</title>
		<link>http://mitchfournier.com/2010/08/12/customizing-django-comments-remove-unwanted-fields/</link>
		<comments>http://mitchfournier.com/2010/08/12/customizing-django-comments-remove-unwanted-fields/#comments</comments>
		<pubDate>Thu, 12 Aug 2010 17:30:09 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[comments]]></category>
		<category><![CDATA[django]]></category>

		<guid isPermaLink="false">http://mitchfournier.com/?p=31</guid>
		<description><![CDATA[I recently added comments to a new Django site that I'm working on (Wantbox.com = craigslist[::-1] + stack overflow). As I explored Django's comments framework, I realized that recreating another comment app was a waste of my time and my end product would be far less feature rich than Django's bundled commenting system. Below are my modifications which allowed me to quickly and easily twist Django comments into what I needed.]]></description>
			<content:encoded><![CDATA[<p>I recently added comments to a new Django site that I&#8217;m working on (<a title="Wantbox - Post what you want, get what you need." href="http://wantbox.com">Wantbox.com</a> = craigslist[::-1] + stack overflow). Comments pose an interesting problem as they can have a number of &#8220;parents&#8221;. In my case, the parent might be a user&#8217;s &#8220;Want&#8221; a respondent&#8217;s &#8220;Have&#8221; or possibly another &#8220;Comment.&#8221;</p>
<p>In the process of researching the best way to architect Wantbox&#8217;s comments app, I read about &#8220;<a title="Stack Overflow" href="http://stackoverflow.com/questions/416007/how-can-i-define-a-polymorphic-relation-between-models-in-django">polymorphic associations</a>&#8220;, &#8220;<a title="Google Books" href="http://books.google.com/books?id=7ZAk0YiKQV0C&amp;pg=PA110&amp;lpg=PA110&amp;dq=%22exclusive+arc%22+database&amp;source=bl&amp;ots=AySKYnaiZZ&amp;sig=_MszKkpWbIvQ80sKZgXehIdLgGQ&amp;hl=en&amp;ei=vCJkTL61DYSglAfuhdz5CQ&amp;sa=X&amp;oi=book_result&amp;ct=result&amp;resnum=2&amp;ved=0CBkQ6AEwAQ#v=onepage&amp;q=%22exclusive%20arc%22%20database&amp;f=false">exclusive arcs</a>&#8221; and Django&#8217;s <a title="Django Docs" href="http://docs.djangoproject.com/en/dev/ref/contrib/contenttypes/">ContentType</a> framework. Using this knowledge, I contemplated recreating the comment wheel, since I wanted my comment form to just be a simple &#8220;Stack Overflow-type&#8221; comment-only field and not the larger &#8220;WordPress-type&#8221; name/email/website/comment.</p>
<p>As I explored Django&#8217;s <a title="Django Docs" href="http://docs.djangoproject.com/en/dev/ref/contrib/comments/">comments</a> framework deeper, I realized that recreating another comment app was a waste of my time and my end product would be far less feature rich than Django&#8217;s bundled commenting system. Below are my modifications which allowed me to quickly and easily twist Django comments into what I needed.</p>
<p><strong>My Django Comment Modifications:</strong></p>
<p>To customize the default comment form and comment list display, I created a &#8220;comments&#8221; directory in my root &#8220;templates&#8221; directory and simply overrode the two default comment templates &#8220;form.html&#8221; and &#8220;list.html&#8221;.</p>
<p><strong>My custom &#8220;/templates/comments/form.html&#8221;:</strong></p>
<pre>{% load comments i18n %}
{% if user.is_authenticated %}
   &lt;form action="{% comment_form_target %}" method="post"&gt;
        {% csrf_token %}
        {% if next %}&lt;input name="next" type="hidden" value="{{ next }}" /&gt;{% endif %}
        {% for field in form %}
            {% if field.is_hidden %}
                {{ field }}
            {% else %}
                {% if field.name != "name" and field.name != "email" and field.name != "url" %}
                    {% if field.errors %}{{ field.errors }}{% endif %}
                    {{ field }}
                {% endif %}
            {% endif %}
        {% endfor %}
        &lt;input class="submit-post" name="post" type="submit" value="{% trans " /&gt;
   &lt;/form&gt;
{% else %}
    I'm sorry, but you must be &lt;a href="javascript:alert('send to login page')"&gt;logged in&lt;/a&gt; to submit comments.
{% endif %}
</pre>
<p>Which is only slightly different from the default Django comments form.html, primarily suppressing the display of the not-wanted and not-required &#8220;name&#8221;, &#8220;email&#8221; and &#8220;url&#8221; input fields.</p>
<p><strong>My custom &#8220;/templates/comments/list.html&#8221;:</strong></p>
<pre>&lt;div class="comment_start"&gt;&lt;/div&gt;
{% for comment in comment_list %}
   &lt;div class="comment"&gt;
      {{ comment.comment }}
      (from &lt;a href="javascript:alert('show user profile/stats')"&gt;{{ comment.user }}&lt;/a&gt; - {{ comment.submit_date|timesince }} ago)
   &lt;/div&gt;
{% endfor %}
</pre>
<p>In the template where I want to invoke the comments form, I first call <code>{% load comments %}</code> and then <code>{% render_comment_form for [object] %}</code> to show the form, or <code>{% render_comment_list for [object] %}</code> to generate a list of the comments on the object (replace [object] with your appropriate object name). So easy.</p>
<p>This solution is working great for me, and still giving me all the other &#8220;free&#8221; stuff that comes with django comments (moderation, flagging, feeds, polymorphic associations, helpful template tags, etc&#8230;). The moral of this story: don&#8217;t recreate the wheel when an hour or two of research can give it to you for free.</p>
<p><strong>NOTE:</strong> This blog post is based on my Stack Overflow answer to <a title="Stack Overflow &gt; Ignacio" href="http://stackoverflow.com/users/3086/ignacio">Ignacio&#8217;s</a> question &#8220;<a title="Stack Overflow" href="http://stackoverflow.com/questions/2393237/how-to-extend-the-comments-framework-django-by-removing-unnecesary-fields/3421386#3421386">How to extend the comments framework (django) by removing unnecesary fields?</a>&#8220;</p>


<div class="shr-bookmarks shr-bookmarks-expand shr-bookmarks-spaced shr-bookmarks-bg-knowledge">
<ul class="socials">
		<li class="shr-facebook">
			<a href="http://www.facebook.com/share.php?v=4&amp;src=bm&amp;u=http://mitchfournier.com/2010/08/12/customizing-django-comments-remove-unwanted-fields/&amp;t=Customizing+Django+Comments%3A+Remove+Unwanted+Fields" class="external" title="Share this on Facebook">Share this on Facebook</a>
		</li>
		<li class="shr-twitter">
			<a href="http://twitter.com/home?status=Customizing+Django+Comments%3A+Remove+Unwanted+Fields+-+http://bit.ly/8Xsgvl&amp;source=shareaholic" class="external" title="Tweet This!">Tweet This!</a>
		</li>
		<li class="shr-stumbleupon">
			<a href="http://www.stumbleupon.com/submit?url=http://mitchfournier.com/2010/08/12/customizing-django-comments-remove-unwanted-fields/&amp;title=Customizing+Django+Comments%3A+Remove+Unwanted+Fields" class="external" title="Stumble upon something good? Share it on StumbleUpon">Stumble upon something good? Share it on StumbleUpon</a>
		</li>
		<li class="shr-reddit">
			<a href="http://reddit.com/submit?url=http://mitchfournier.com/2010/08/12/customizing-django-comments-remove-unwanted-fields/&amp;title=Customizing+Django+Comments%3A+Remove+Unwanted+Fields" class="external" title="Share this on Reddit">Share this on Reddit</a>
		</li>
		<li class="shr-digg">
			<a href="http://digg.com/submit?phase=2&amp;url=http://mitchfournier.com/2010/08/12/customizing-django-comments-remove-unwanted-fields/&amp;title=Customizing+Django+Comments%3A+Remove+Unwanted+Fields" class="external" title="Digg this!">Digg this!</a>
		</li>
		<li class="shr-delicious">
			<a href="http://delicious.com/post?url=http://mitchfournier.com/2010/08/12/customizing-django-comments-remove-unwanted-fields/&amp;title=Customizing+Django+Comments%3A+Remove+Unwanted+Fields" class="external" title="Share this on del.icio.us">Share this on del.icio.us</a>
		</li>
		<li class="shr-googlebuzz">
			<a href="http://www.google.com/buzz/post?url=http://mitchfournier.com/2010/08/12/customizing-django-comments-remove-unwanted-fields/&amp;imageurl=" class="external" title="Post on Google Buzz">Post on Google Buzz</a>
		</li>
		<li class="shr-yahoobuzz">
			<a href="http://buzz.yahoo.com/submit/?submitUrl=http://mitchfournier.com/2010/08/12/customizing-django-comments-remove-unwanted-fields/&amp;submitHeadline=Customizing+Django+Comments%3A+Remove+Unwanted+Fields&amp;submitSummary=I%20recently%20added%20comments%20to%20a%20new%20Django%20site%20that%20I%27m%20working%20on%20%28Wantbox.com%20%3D%20craigslist%5B%3A%3A-1%5D%20%2B%20stack%20overflow%29.%20As%20I%20explored%20Django%27s%20comments%20framework%2C%20I%20realized%20that%20recreating%20another%20comment%20app%20was%20a%20waste%20of%20my%20time%20and%20my%20end%20product%20would%20be%20far%20less%20feature%20rich%20than%20Django%27s%20bundled%20commenting%20system.%20Below%20are%20my%20modifications%20which%20allowed%20me%20to%20quickly%20and%20easily%20twist%20Django%20comments%20into%20what%20I%20needed.&amp;submitCategory=science&amp;submitAssetType=text" class="external" title="Buzz up!">Buzz up!</a>
		</li>
</ul>
<div style="clear:both;"></div>
</div>

]]></content:encoded>
			<wfw:commentRss>http://mitchfournier.com/2010/08/12/customizing-django-comments-remove-unwanted-fields/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Django 1.2 Tutorials: Django by Example</title>
		<link>http://mitchfournier.com/2010/07/20/django-1-2-tutorials-django-by-example/</link>
		<comments>http://mitchfournier.com/2010/07/20/django-1-2-tutorials-django-by-example/#comments</comments>
		<pubDate>Tue, 20 Jul 2010 14:57:25 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[django]]></category>
		<category><![CDATA[tuturial]]></category>

		<guid isPermaLink="false">http://mitchfournier.com/?p=36</guid>
		<description><![CDATA[A few Django 1.2 tutorials by andreai.avk covering topics like Django admin customization, comment notification and moderation, thumbnail creation, searching and filtering, and automated testing. Current demos include a To-Do App, a Simple Blog, a Photo Organizing and Sharing App and a Simple Forum.]]></description>
			<content:encoded><![CDATA[<p>Looking for some good <a title="Django tutorial" href="http://lightbird.net/dbe/index.html">Django 1.2 tutorials</a>? Check out <a title="Django by Example" href="http://lightbird.net/dbe/index.html">Django by Example</a> by &#8220;andreai.avk&#8221;. I just discovered them myself via the <a title="Django users | Google Groups" href="http://groups.google.com/group/django-users">django-users</a> group on googlegroups.com.</p>
<p>When I searched a few months ago for good (and current) Django tutorials, I never ran across this site. Hopefully adding a couple links will help bump it up the Google rankings. The <a title="Django tutorial: Simple Blog" href="http://lightbird.net/dbe/blog.html">simple blog</a> tutorial is currently ranked #103 for the search &#8220;django 1.2 tutorials&#8221;, but no other page from the site is in the top 500.</p>
<p>Topics covered include: Django admin customization, comment notification and moderation, thumbnail creation, searching and filtering, and automated testing. Current demos include a <a title="Django Tutorial: Todo List App" href="http://lightbird.net/dbe/todo_list.html">To-Do App</a>, a <a title="Django tutorial: Simple Blog" href="http://lightbird.net/dbe/blog.html">Simple Blog</a>, a <a title="Django Tutorial: Photo Organizing and Sharing App" href="http://lightbird.net/dbe/photo.html">Photo Organizing and Sharing App</a> and a <a title="Django Tutorial: a Simple Forum" href="http://lightbird.net/dbe/forum1.html">Simple Forum</a>.</p>
<p>Let the link juice trickle.</p>


<div class="shr-bookmarks shr-bookmarks-expand shr-bookmarks-spaced shr-bookmarks-bg-knowledge">
<ul class="socials">
		<li class="shr-facebook">
			<a href="http://www.facebook.com/share.php?v=4&amp;src=bm&amp;u=http://mitchfournier.com/2010/07/20/django-1-2-tutorials-django-by-example/&amp;t=Django+1.2+Tutorials%3A+Django+by+Example" class="external" title="Share this on Facebook">Share this on Facebook</a>
		</li>
		<li class="shr-twitter">
			<a href="http://twitter.com/home?status=Django+1.2+Tutorials%3A+Django+by+Example+-+http://bit.ly/9tZo06&amp;source=shareaholic" class="external" title="Tweet This!">Tweet This!</a>
		</li>
		<li class="shr-stumbleupon">
			<a href="http://www.stumbleupon.com/submit?url=http://mitchfournier.com/2010/07/20/django-1-2-tutorials-django-by-example/&amp;title=Django+1.2+Tutorials%3A+Django+by+Example" class="external" title="Stumble upon something good? Share it on StumbleUpon">Stumble upon something good? Share it on StumbleUpon</a>
		</li>
		<li class="shr-reddit">
			<a href="http://reddit.com/submit?url=http://mitchfournier.com/2010/07/20/django-1-2-tutorials-django-by-example/&amp;title=Django+1.2+Tutorials%3A+Django+by+Example" class="external" title="Share this on Reddit">Share this on Reddit</a>
		</li>
		<li class="shr-digg">
			<a href="http://digg.com/submit?phase=2&amp;url=http://mitchfournier.com/2010/07/20/django-1-2-tutorials-django-by-example/&amp;title=Django+1.2+Tutorials%3A+Django+by+Example" class="external" title="Digg this!">Digg this!</a>
		</li>
		<li class="shr-delicious">
			<a href="http://delicious.com/post?url=http://mitchfournier.com/2010/07/20/django-1-2-tutorials-django-by-example/&amp;title=Django+1.2+Tutorials%3A+Django+by+Example" class="external" title="Share this on del.icio.us">Share this on del.icio.us</a>
		</li>
		<li class="shr-googlebuzz">
			<a href="http://www.google.com/buzz/post?url=http://mitchfournier.com/2010/07/20/django-1-2-tutorials-django-by-example/&amp;imageurl=" class="external" title="Post on Google Buzz">Post on Google Buzz</a>
		</li>
		<li class="shr-yahoobuzz">
			<a href="http://buzz.yahoo.com/submit/?submitUrl=http://mitchfournier.com/2010/07/20/django-1-2-tutorials-django-by-example/&amp;submitHeadline=Django+1.2+Tutorials%3A+Django+by+Example&amp;submitSummary=A%20few%20Django%201.2%20tutorials%20by%20andreai.avk%20covering%20topics%20like%20Django%20admin%20customization%2C%20comment%20notification%20and%20moderation%2C%20thumbnail%20creation%2C%20searching%20and%20filtering%2C%20and%20automated%20testing.%20Current%20demos%20include%20a%20To-Do%20App%2C%20a%20Simple%20Blog%2C%20a%20Photo%20Organizing%20and%20Sharing%20App%20and%20a%20Simple%20Forum.&amp;submitCategory=science&amp;submitAssetType=text" class="external" title="Buzz up!">Buzz up!</a>
		</li>
</ul>
<div style="clear:both;"></div>
</div>

]]></content:encoded>
			<wfw:commentRss>http://mitchfournier.com/2010/07/20/django-1-2-tutorials-django-by-example/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Django Documentation for the iPhone</title>
		<link>http://mitchfournier.com/2010/07/15/django-documentation-for-the-iphone/</link>
		<comments>http://mitchfournier.com/2010/07/15/django-documentation-for-the-iphone/#comments</comments>
		<pubDate>Thu, 15 Jul 2010 06:08:55 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[django]]></category>
		<category><![CDATA[documentation]]></category>
		<category><![CDATA[iphone]]></category>

		<guid isPermaLink="false">http://mitchfournier.com/?p=32</guid>
		<description><![CDATA[A better way of adding the Django documentation to your iPhone, iPod Touch or other mobile browser.]]></description>
			<content:encoded><![CDATA[<p>Have you ever searched the App Store for Django apps? Don&#8217;t bother, as of this post there is only one that will come up: <em>Django Documentation</em>. Since it was only 99 cents, I bought it a few weeks back and I wouldn&#8217;t recommend that you do the same. It is simply the online <a title="Django 1.2 Docs" href="http://docs.djangoproject.com/en/1.2/">Django documentation</a> &#8220;formatted&#8221; for the iPhone and iPod Touch.</p>
<p>Guess what? If you use your iPhone to browse to the Django documentation page with your free Mobile Safari app you&#8217;ll also get the Django documentation &#8220;formatted&#8221; for you iPhone or iPod Touch, and you&#8217;ll also get the ability to bookmark pages, easily go forward and back in your page history and zoom in and out on text.</p>
<p>For the past couple weeks I&#8217;ve had the paid app sitting side-by-side with a Safari bookmark on my iPhone:<br />
<a href="http://mitchfournier.com/wp-content/uploads/2010/07/photo.png"></a><a href="http://mitchfournier.com/wp-content/uploads/2010/07/iphone-sm.png"><img class="alignnone size-full wp-image-34" title="iPhone icons" src="http://mitchfournier.com/wp-content/uploads/2010/07/iphone-sm.png" alt="" width="426" height="263" /><br />
</a><span style="font-size: 10px;">Paid app on far right, standard bookmark to the left of it, new bookmark to the left of that</span></p>
<p>My only problem with adding the Safari bookmark to the home screen? The ugly default icon it creates. For some reason, it *really* bothers me. Sure, it&#8217;s an accurate representation of the page it bookmarks, but it doesn&#8217;t make for a very good icon.</p>
<p>What I have done &#8212; and you can see it immediately to the left of the Safari bookmark &#8212; is create a front page to the standard Django docs so when you bookmark it, it makes a presentable icon suitable for the iPhone. The downside is that when you click on this icon, you go to that front page and then have to click the huge &#8220;dj&#8221; button to get to the docs. For me, however, this is worth it. <span style="text-decoration: line-through;"><br />
</span></p>
<p>If you care about the appearance of your iPhone icons and want to have the Django docs on your own phone, do the following:</p>
<ol>
<li>open Mobile Safari</li>
<li>browse to <a href="http://be73.com">http://be73.com</a></li>
<li>click the &#8220;+&#8221; icon on the bottom of the screen</li>
<li>click the &#8220;Add to Home Screen&#8221; button</li>
<li>click &#8220;Add&#8221;</li>
</ol>
<p>Done. May my fellow <a href="http://www.mayoclinic.com/health/obsessive-compulsive-disorder/DS00189/DSECTION=symptoms">OCD</a> suffers rest easily tonight.</p>
<p><strong>UPDATE:</strong> In the comments Phillip Bosch points out that I can use a more standard &lt;link rel=&#8221;apple-touch-icon&#8221; href=&#8221;django-icon.png&#8221;&gt; to produce an even better icon. Using this, I have iframed the django docs, so clicking on the icon goes directly there while still producing a nice iPhone/touch-friendly icon. Thanks Phillip!</p>


<div class="shr-bookmarks shr-bookmarks-expand shr-bookmarks-spaced shr-bookmarks-bg-knowledge">
<ul class="socials">
		<li class="shr-facebook">
			<a href="http://www.facebook.com/share.php?v=4&amp;src=bm&amp;u=http://mitchfournier.com/2010/07/15/django-documentation-for-the-iphone/&amp;t=Django+Documentation+for+the+iPhone" class="external" title="Share this on Facebook">Share this on Facebook</a>
		</li>
		<li class="shr-twitter">
			<a href="http://twitter.com/home?status=Django+Documentation+for+the+iPhone+-+http://bit.ly/deYV75&amp;source=shareaholic" class="external" title="Tweet This!">Tweet This!</a>
		</li>
		<li class="shr-stumbleupon">
			<a href="http://www.stumbleupon.com/submit?url=http://mitchfournier.com/2010/07/15/django-documentation-for-the-iphone/&amp;title=Django+Documentation+for+the+iPhone" class="external" title="Stumble upon something good? Share it on StumbleUpon">Stumble upon something good? Share it on StumbleUpon</a>
		</li>
		<li class="shr-reddit">
			<a href="http://reddit.com/submit?url=http://mitchfournier.com/2010/07/15/django-documentation-for-the-iphone/&amp;title=Django+Documentation+for+the+iPhone" class="external" title="Share this on Reddit">Share this on Reddit</a>
		</li>
		<li class="shr-digg">
			<a href="http://digg.com/submit?phase=2&amp;url=http://mitchfournier.com/2010/07/15/django-documentation-for-the-iphone/&amp;title=Django+Documentation+for+the+iPhone" class="external" title="Digg this!">Digg this!</a>
		</li>
		<li class="shr-delicious">
			<a href="http://delicious.com/post?url=http://mitchfournier.com/2010/07/15/django-documentation-for-the-iphone/&amp;title=Django+Documentation+for+the+iPhone" class="external" title="Share this on del.icio.us">Share this on del.icio.us</a>
		</li>
		<li class="shr-googlebuzz">
			<a href="http://www.google.com/buzz/post?url=http://mitchfournier.com/2010/07/15/django-documentation-for-the-iphone/&amp;imageurl=" class="external" title="Post on Google Buzz">Post on Google Buzz</a>
		</li>
		<li class="shr-yahoobuzz">
			<a href="http://buzz.yahoo.com/submit/?submitUrl=http://mitchfournier.com/2010/07/15/django-documentation-for-the-iphone/&amp;submitHeadline=Django+Documentation+for+the+iPhone&amp;submitSummary=A%20better%20way%20of%20adding%20the%20Django%20documentation%20to%20your%20iPhone%2C%20iPod%20Touch%20or%20other%20mobile%20browser.&amp;submitCategory=science&amp;submitAssetType=text" class="external" title="Buzz up!">Buzz up!</a>
		</li>
</ul>
<div style="clear:both;"></div>
</div>

]]></content:encoded>
			<wfw:commentRss>http://mitchfournier.com/2010/07/15/django-documentation-for-the-iphone/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Show a Custom 403 Forbidden Error Page in Django</title>
		<link>http://mitchfournier.com/2010/07/12/show-a-custom-403-forbidden-error-page-in-django/</link>
		<comments>http://mitchfournier.com/2010/07/12/show-a-custom-403-forbidden-error-page-in-django/#comments</comments>
		<pubDate>Mon, 12 Jul 2010 13:46:45 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[403]]></category>
		<category><![CDATA[django]]></category>
		<category><![CDATA[middleware]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://mitchfournier.com/?p=29</guid>
		<description><![CDATA[Creating a custom 404 Page Not Found error page is so easy in Django (all you do is put your own template named &#8220;404.html&#8221; at the root of your templates directory) that I naturally assumed doing the same for a 403 Forbidden error page would be just as easy. Unfortunately it is not. After searching [...]]]></description>
			<content:encoded><![CDATA[<p>Creating a custom 404 Page Not Found error page is so easy in Django (all you do is put your own template named &#8220;404.html&#8221; at the root of your templates directory) that I naturally assumed doing the same for a 403 Forbidden error page would be just as easy. Unfortunately it is not.</p>
<p>After searching around for quite a while last night, I found bits and pieces that I have modified slightly and republished below in a unambiguous step-by-step tutorial (see the &#8220;Source and Other Resources&#8221; section at the end of the post for a few of the source posts).</p>
<p>The method posted below leverages some custom Django middleware code. Please, if you have a better, more elegant solution I&#8217;d love to hear about it in the comments.</p>
<p><strong>Create the Middleware</strong></p>
<ol>
<li>Create a directory at the root of your project called &#8220;middleware&#8221;</li>
<li>Add a file named &#8220;__init__.py&#8221; to this directory</li>
<li>Create a file named &#8220;http.py&#8221; in this directory with the following contents:</li>
<pre style="padding-left: 30px;">from django.conf import settings
from django.http import HttpResponseForbidden
from django.template import RequestContext,Template,loader,TemplateDoesNotExist
from django.utils.importlib import import_module

"""
# Middleware to allow the display of a 403.html template when a
# 403 error is raised.
"""

class Http403(Exception):
    pass

class Http403Middleware(object):
    def process_exception(self, request, exception):
        from http import Http403

        if not isinstance(exception, Http403):
            # Return None so django doesn't re-raise the exception
            return None

        try:
            # Handle import error but allow any type error from view
            callback = getattr(import_module(settings.ROOT_URLCONF),'handler403')
            return callback(request,exception)
        except (ImportError,AttributeError):
            # Try to get a 403 template
            try:
                # First look for a user-defined template named "403.html"
                t = loader.get_template('403.html')
            except TemplateDoesNotExist:
                # If a template doesn't exist in the projct, use the following hardcoded template
                t = Template("""{% load i18n %}
                 &lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
                        "http://www.w3.org/TR/html4/strict.dtd"&gt;
                 &lt;html&gt;
                 &lt;head&gt;
                     &lt;title&gt;{% trans "403 ERROR: Access denied" %}&lt;/title&gt;
                 &lt;/head&gt;
                 &lt;body&gt;
                     &lt;h1&gt;{% trans "Access Denied (403)" %}&lt;/h1&gt;
                     {% trans "We're sorry, but you are not authorized to view this page." %}
                 &lt;/body&gt;
                 &lt;/html&gt;""")

            # Now use context and render template
            c = RequestContext(request, {
                  'message': exception.message
             })

            return HttpResponseForbidden(t.render(c))
</pre>
<li>You should now have this:
<ul>
<li>/myproject/middleware/
<ul>
<li>__init__.py</li>
<li>http.py</li>
</ul>
</li>
</ul>
</li>
</ol>
<p><strong>Modify Your Project&#8217;s &#8220;settings.py&#8221;</strong></p>
<ol>
<li>Add &#8221; &#8216;myproject.middleware.http.Http403Middleware&#8217;, &#8221; to your MIDDLEWARE_CLASSES</li>
</ol>
<p><strong>Create a Custom &#8220;403.html&#8221; page</strong></p>
<ol>
<li>Put it at the root of your template directory</li>
<li>Sample content: (note: assumes you&#8217;ve already defined a &#8220;base.html&#8221; template)</li>
</ol>
<pre style="padding-left: 30px;">{% extends "base.html" %}
{% block title %} | Access Denied{% endblock %}

{% block content %}
&lt;h1&gt;Access Denied&lt;/h1&gt;
&lt;span&gt;We're sorry, but you are not authorized to view this page (Error: 403)&lt;/span&gt;
{% endblock content %}
</pre>
<p><strong>Raise a 403 Error</strong></p>
<ol>
<li>In the file where you want to raise the 403 add this at the top: (I used it in my project&#8217;s &#8220;view.py&#8221; file)</li>
<pre style="padding-left: 30px;">from myproject.middleware.http import Http403</pre>
<li>Raise the 403</li>
<pre style="padding-left: 30px;">if request.user.id != object.user.id:
    raise Http403</pre>
</ol>
<p>That&#8217;s it, you now have a Django template to handle 403 Forbidden errors. I&#8217;m sure there&#8217;s a way for your front-end, production web server to do the same, but I haven&#8217;t explored that yet.</p>
<p><strong>Source and Other Resources</strong></p>
<ol>
<li>A middleware solution is <a href="http://chronosbox.org/blog/manipulando-erros-http-403-permissao-negada-no-django?lang=en">here</a> (HT <a href="http://chronosbox/">Felipe  &#8216;chronos&#8217; Prenholato</a>)</li>
<li>A middleware solution is <a title="Creating a custom Http403 exception  in Django" href="http://theglenbot.com/creating-a-custom-http403-exception-in-django">here</a> (HT <a title="The Glenbot" href="http://posterous.com/people/4aLC26nurSHT">Glen Zangirolami</a>)</li>
<li>A potential decorator solution is <a title="django snippets" href="http://djangosnippets.org/snippets/254/">here</a> (HT <a href="http://djangosnippets.org/users/Magus/">Magus</a>)</li>
</ol>


<div class="shr-bookmarks shr-bookmarks-expand shr-bookmarks-spaced shr-bookmarks-bg-knowledge">
<ul class="socials">
		<li class="shr-facebook">
			<a href="http://www.facebook.com/share.php?v=4&amp;src=bm&amp;u=http://mitchfournier.com/2010/07/12/show-a-custom-403-forbidden-error-page-in-django/&amp;t=Show+a+Custom+403+Forbidden+Error+Page+in+Django" class="external" title="Share this on Facebook">Share this on Facebook</a>
		</li>
		<li class="shr-twitter">
			<a href="http://twitter.com/home?status=Show+a+Custom+403+Forbidden+Error+Page+in+Django+-+http://bit.ly/9r7iqV&amp;source=shareaholic" class="external" title="Tweet This!">Tweet This!</a>
		</li>
		<li class="shr-stumbleupon">
			<a href="http://www.stumbleupon.com/submit?url=http://mitchfournier.com/2010/07/12/show-a-custom-403-forbidden-error-page-in-django/&amp;title=Show+a+Custom+403+Forbidden+Error+Page+in+Django" class="external" title="Stumble upon something good? Share it on StumbleUpon">Stumble upon something good? Share it on StumbleUpon</a>
		</li>
		<li class="shr-reddit">
			<a href="http://reddit.com/submit?url=http://mitchfournier.com/2010/07/12/show-a-custom-403-forbidden-error-page-in-django/&amp;title=Show+a+Custom+403+Forbidden+Error+Page+in+Django" class="external" title="Share this on Reddit">Share this on Reddit</a>
		</li>
		<li class="shr-digg">
			<a href="http://digg.com/submit?phase=2&amp;url=http://mitchfournier.com/2010/07/12/show-a-custom-403-forbidden-error-page-in-django/&amp;title=Show+a+Custom+403+Forbidden+Error+Page+in+Django" class="external" title="Digg this!">Digg this!</a>
		</li>
		<li class="shr-delicious">
			<a href="http://delicious.com/post?url=http://mitchfournier.com/2010/07/12/show-a-custom-403-forbidden-error-page-in-django/&amp;title=Show+a+Custom+403+Forbidden+Error+Page+in+Django" class="external" title="Share this on del.icio.us">Share this on del.icio.us</a>
		</li>
		<li class="shr-googlebuzz">
			<a href="http://www.google.com/buzz/post?url=http://mitchfournier.com/2010/07/12/show-a-custom-403-forbidden-error-page-in-django/&amp;imageurl=" class="external" title="Post on Google Buzz">Post on Google Buzz</a>
		</li>
		<li class="shr-yahoobuzz">
			<a href="http://buzz.yahoo.com/submit/?submitUrl=http://mitchfournier.com/2010/07/12/show-a-custom-403-forbidden-error-page-in-django/&amp;submitHeadline=Show+a+Custom+403+Forbidden+Error+Page+in+Django&amp;submitSummary=Creating%20a%20custom%20404%20Page%20Not%20Found%20error%20page%20is%20so%20easy%20in%20Django%20%28all%20you%20do%20is%20put%20your%20own%20template%20named%20%22404.html%22%20at%20the%20root%20of%20your%20templates%20directory%29%20that%20I%20naturally%20assumed%20doing%20the%20same%20for%20a%20403%20Forbidden%20error%20page%20would%20be%20just%20as%20easy.%20Unfortunately%20it%20is%20not.%0D%0A%0D%0AAfter%20searchin&amp;submitCategory=science&amp;submitAssetType=text" class="external" title="Buzz up!">Buzz up!</a>
		</li>
</ul>
<div style="clear:both;"></div>
</div>

]]></content:encoded>
			<wfw:commentRss>http://mitchfournier.com/2010/07/12/show-a-custom-403-forbidden-error-page-in-django/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Getting Started with virtualenv (Isolated Python Environments)</title>
		<link>http://mitchfournier.com/2010/06/25/getting-started-with-virtualenv-isolated-python-environments/</link>
		<comments>http://mitchfournier.com/2010/06/25/getting-started-with-virtualenv-isolated-python-environments/#comments</comments>
		<pubDate>Fri, 25 Jun 2010 17:35:42 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[django]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[virtualenv]]></category>

		<guid isPermaLink="false">http://mitchfournier.com/?p=27</guid>
		<description><![CDATA[Like South, virtualenv is a helper utility that I put off using for too long. Looking back, it is so easy to get up and running (just like South, see below) that there is no reason for you to hold off like I did. In a nutshell, virtualenv is a tool for creating isolated Python [...]]]></description>
			<content:encoded><![CDATA[<p>Like <a title="South - Intelligent schema migrations" href="http://south.aeracode.org/">South</a>, <a title="virtualenv - Isolated Python environments" href="http://pypi.python.org/pypi/virtualenv">virtualenv</a> is a helper utility that I put off using for too long. Looking back, it is so easy to get up and running (just like South, <a title="Getting Started with South (Django Database Migrations)" href="http://mitchfournier.com/?p=25">see below</a>) that there is no reason for you to hold off like I did.</p>
<p>In a nutshell, virtualenv is a tool for creating isolated Python environments. This is particularly useful if you host multiple Django projects on a single dev box. As an example, virtualenv allows you to easily work on one site built on Django 1.1 and django-registration 0.7  and another one built on Django 1.2 with django-registration 0.8.</p>
<p>It is also invaluable if you want to deploy a Django project to a shared host where you don&#8217;t have root access to the main &#8220;site-packages&#8221; directory. Once you create a virtualenv for your project, an isolated copy of Python and &#8220;site-packages&#8221; is created which you own and can write to.</p>
<p><strong>Basic virtualenv Start-up Steps</strong></p>
<ol>
<li>sudo pip install virtualenv<br />
<span style="color: #999999;">(or, </span>sudo easy_install virtualenv<span style="color: #999999;"> if you don&#8217;t use pip)</span><br />
<span style="color: #999999;">(or, </span>easy_install &#45;&#45;install-dir ~/site-packages/ virtualenv<span style="color: #999999;"> on a shared host)</span></li>
<li>mkdir ~/virtualenvs  <span style="color: #999999;"> (a directory for your isolated environments)</span></li>
<li>virtualenv ~/virtualenvs/mysite.com &#45;&#45;no-site-packages<br />
<span style="color: #999999;">(&#45;&#45;no-site-packages isolates your environment from the main site-packages directory)</span></li>
<li>cd ~/virtualenvs/mysite.com/bin</li>
<li>source activate  <span style="color: #999999;">(activates your new environment)</span></li>
</ol>
<p>That&#8217;s it, you now have a dedicated Python environment for your mysite.com project with it&#8217;s own &#8220;site-packages&#8221; directory (~/virtualenvs/mysite.com/lib/python2.5/site-packages/) where you can install any version of Django or Django app without messing with your other projects. To exit your virtualenv just type &#8220;deactivate&#8221;.</p>
<p><strong>A helper alias:</strong></p>
<ol>
<li>vi ~/.bash_aliases
<pre>alias ams='source ~/virtualenvs/mysite.com/bin/activate'
</pre>
</li>
<li>source ~/.bash_aliases  <span style="color: #999999;">(to activate the aliases)</span></li>
</ol>
<p>Now you can run &#8220;ams&#8221; to quickly <strong>a</strong>ctivate your &#8220;<strong>m</strong>y<strong>s</strong>ite.com&#8221; environment. For more in-depth information, check out the virtualenv <a title="python.org" href="http://pypi.python.org/pypi/virtualenv">documentation</a> or a <a title="A PRIMER ON VIRTUALENV" href="http://iamzed.com/2009/05/07/a-primer-on-virtualenv/">couple</a> <a title="Working with virtualenv" href="http://www.arthurkoziel.com/2008/10/22/working-virtualenv/">other</a> informative blog posts.</p>
<p>Debian 5<br />
Python 2.5.2<br />
virtualenv 1.4.9</p>


<div class="shr-bookmarks shr-bookmarks-expand shr-bookmarks-spaced shr-bookmarks-bg-knowledge">
<ul class="socials">
		<li class="shr-facebook">
			<a href="http://www.facebook.com/share.php?v=4&amp;src=bm&amp;u=http://mitchfournier.com/2010/06/25/getting-started-with-virtualenv-isolated-python-environments/&amp;t=Getting+Started+with+virtualenv+%28Isolated+Python+Environments%29" class="external" title="Share this on Facebook">Share this on Facebook</a>
		</li>
		<li class="shr-twitter">
			<a href="http://twitter.com/home?status=Getting+Started+with+virtualenv+%28Isolated+Python+Environments%29+-+http://bit.ly/d54iPg&amp;source=shareaholic" class="external" title="Tweet This!">Tweet This!</a>
		</li>
		<li class="shr-stumbleupon">
			<a href="http://www.stumbleupon.com/submit?url=http://mitchfournier.com/2010/06/25/getting-started-with-virtualenv-isolated-python-environments/&amp;title=Getting+Started+with+virtualenv+%28Isolated+Python+Environments%29" class="external" title="Stumble upon something good? Share it on StumbleUpon">Stumble upon something good? Share it on StumbleUpon</a>
		</li>
		<li class="shr-reddit">
			<a href="http://reddit.com/submit?url=http://mitchfournier.com/2010/06/25/getting-started-with-virtualenv-isolated-python-environments/&amp;title=Getting+Started+with+virtualenv+%28Isolated+Python+Environments%29" class="external" title="Share this on Reddit">Share this on Reddit</a>
		</li>
		<li class="shr-digg">
			<a href="http://digg.com/submit?phase=2&amp;url=http://mitchfournier.com/2010/06/25/getting-started-with-virtualenv-isolated-python-environments/&amp;title=Getting+Started+with+virtualenv+%28Isolated+Python+Environments%29" class="external" title="Digg this!">Digg this!</a>
		</li>
		<li class="shr-delicious">
			<a href="http://delicious.com/post?url=http://mitchfournier.com/2010/06/25/getting-started-with-virtualenv-isolated-python-environments/&amp;title=Getting+Started+with+virtualenv+%28Isolated+Python+Environments%29" class="external" title="Share this on del.icio.us">Share this on del.icio.us</a>
		</li>
		<li class="shr-googlebuzz">
			<a href="http://www.google.com/buzz/post?url=http://mitchfournier.com/2010/06/25/getting-started-with-virtualenv-isolated-python-environments/&amp;imageurl=" class="external" title="Post on Google Buzz">Post on Google Buzz</a>
		</li>
		<li class="shr-yahoobuzz">
			<a href="http://buzz.yahoo.com/submit/?submitUrl=http://mitchfournier.com/2010/06/25/getting-started-with-virtualenv-isolated-python-environments/&amp;submitHeadline=Getting+Started+with+virtualenv+%28Isolated+Python+Environments%29&amp;submitSummary=Like%20South%2C%20virtualenv%20is%20a%20helper%20utility%20that%20I%20put%20off%20using%20for%20too%20long.%20Looking%20back%2C%20it%20is%20so%20easy%20to%20get%20up%20and%20running%20%28just%20like%20South%2C%20see%20below%29%20that%20there%20is%20no%20reason%20for%20you%20to%20hold%20off%20like%20I%20did.%0D%0A%0D%0AIn%20a%20nutshell%2C%20virtualenv%20is%20a%20tool%20for%20creating%20isolated%20Python%20environments.%20This%20&amp;submitCategory=science&amp;submitAssetType=text" class="external" title="Buzz up!">Buzz up!</a>
		</li>
</ul>
<div style="clear:both;"></div>
</div>

]]></content:encoded>
			<wfw:commentRss>http://mitchfournier.com/2010/06/25/getting-started-with-virtualenv-isolated-python-environments/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Getting Started with South (Django Database Migrations)</title>
		<link>http://mitchfournier.com/2010/06/23/getting-started-with-south-django-database-migrations/</link>
		<comments>http://mitchfournier.com/2010/06/23/getting-started-with-south-django-database-migrations/#comments</comments>
		<pubDate>Wed, 23 Jun 2010 06:01:11 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[django]]></category>
		<category><![CDATA[migrations]]></category>
		<category><![CDATA[south]]></category>
		<category><![CDATA[syncdb]]></category>

		<guid isPermaLink="false">http://mitchfournier.com/?p=25</guid>
		<description><![CDATA[The very bare bones steps to getting up and running with South for your Django database migrations.]]></description>
			<content:encoded><![CDATA[<p>If you have worked on a project in Django, you have undoubtedly discovered that &#8216;syncdb&#8217; is great at turning your &#8216;models.py&#8217; files into real database tables but not so great at taking your modified models and altering your database with the new definitions. In fact, the Django documentation is pretty <a title="syncdb" href="http://docs.djangoproject.com/en/dev/ref/django-admin/#syncdb">clear</a> about this: &#8220;Syncdb will not alter existing tables&#8221;!</p>
<p><a href="http://south.aeracode.org/">South</a> is a Django project which solves this problem by providing &#8220;consistent, easy-to-use, database-agnostic migrations for Django applications.&#8221; Below are the most basic steps for getting South up and running in your project.</p>
<p><strong>INSTALLING SOUTH</strong></p>
<ol>
<li>pip install south    <span style="color: #999999;"> (if you&#8217;re lucky, otherwise <a title="Installing South" href="http://south.aeracode.org/docs/installation.html">RTFM</a>)</span></li>
<li>add &#8216;south&#8217; to your project&#8217;s INSTALLED_APPS</li>
<li>run &#8216;syncdb&#8217;    <span style="color: #999999;"> (before you create your own models)</span></li>
<li><span style="color: #999999;"><span style="color: #000000;"><strong>note</strong>: this is the last time you&#8217;ll run &#8216;syncdb&#8217;</span><br />
</span></li>
</ol>
<p><strong>YOUR FIRST MIGRATION</strong></p>
<ol>
<li>create a new app and create your initial &#8216;models.py&#8217; file for it</li>
<li>add your app to your project&#8217;s INSTALLED_APPS</li>
<li>run &#8216;python manage.py schemamigration myapp &#8211;initial&#8217;     <span style="color: #999999;"> (creates your initial migration, note: those are two <span style="text-decoration: line-through;">dashes</span> hyphens before initial)</span></li>
<li>run &#8216;python manage.py migrate myapp&#8217;     <span style="color: #999999;">(uses this initial migration to create your app&#8217;s DB tables)</span></li>
</ol>
<p><strong>MIGRATING A CHANGED MODEL</strong></p>
<ol>
<li>modify your app&#8217;s models.py file    <span style="color: #999999;">(e.g., add a new column somewhere)</span></li>
<li>run &#8216;python manage.py schemamigration myapp &#8211;auto&#8217;    <span style="color: #999999;">(creates a new migration, note: those are two <span style="text-decoration: line-through;">dashes</span> hyphens before auto)</span></li>
<li>run &#8216;python manage.py migrate myapp&#8217;    <span style="color: #999999;">(applies this new migration)</span></li>
</ol>
<p>That&#8217;s it, the very bare bones steps to getting up and running with South. Obviously you&#8217;ll either need to run these commands in the same directory as &#8216;manage.py&#8217; or change the commands to point to it.</p>
<p>One last thing&#8230;</p>
<p><strong>AN OPTIONAL SHELL FUNCTION TO HELP OUT</strong></p>
<ol>
<li>vi ~/.bash_aliases   <span style="color: #999999;"> (there&#8217;s probably a better home for this, but this is where I put mine)</span></li>
<li>add:
<pre style="padding-left: 30px;">function mig() {
    python manage.py schemamigration "$@" --auto;
    python manage.py migrate "$@";
}</pre>
</li>
<li>source .bash_aliases    <span style="color: #999999;">(to activate the changes)</span></li>
<li>now you can run &#8216;mig myapp&#8217; whenever you change the model for &#8216;myapp&#8217;</li>
</ol>
<p>If you want to be able to run this shell function anywhere, put the full path to your project&#8217;s &#8216;manage.py&#8217; file in the function body. Otherwise, you&#8217;ll have to run it in the same directory as the relevant &#8216;manage.py&#8217;.</p>
<p>For South&#8217;s more advanced goodness, check out the <a title="South documentation" href="http://south.aeracode.org/docs/index.html">documentation</a>.</p>
<p>South 0.7<br />
Django 1.2.1<br />
Python 2.5.2.</p>


<div class="shr-bookmarks shr-bookmarks-expand shr-bookmarks-spaced shr-bookmarks-bg-knowledge">
<ul class="socials">
		<li class="shr-facebook">
			<a href="http://www.facebook.com/share.php?v=4&amp;src=bm&amp;u=http://mitchfournier.com/2010/06/23/getting-started-with-south-django-database-migrations/&amp;t=Getting+Started+with+South+%28Django+Database+Migrations%29" class="external" title="Share this on Facebook">Share this on Facebook</a>
		</li>
		<li class="shr-twitter">
			<a href="http://twitter.com/home?status=Getting+Started+with+South+%28Django+Database+Migrations%29+-+http://bit.ly/ap3mOd&amp;source=shareaholic" class="external" title="Tweet This!">Tweet This!</a>
		</li>
		<li class="shr-stumbleupon">
			<a href="http://www.stumbleupon.com/submit?url=http://mitchfournier.com/2010/06/23/getting-started-with-south-django-database-migrations/&amp;title=Getting+Started+with+South+%28Django+Database+Migrations%29" class="external" title="Stumble upon something good? Share it on StumbleUpon">Stumble upon something good? Share it on StumbleUpon</a>
		</li>
		<li class="shr-reddit">
			<a href="http://reddit.com/submit?url=http://mitchfournier.com/2010/06/23/getting-started-with-south-django-database-migrations/&amp;title=Getting+Started+with+South+%28Django+Database+Migrations%29" class="external" title="Share this on Reddit">Share this on Reddit</a>
		</li>
		<li class="shr-digg">
			<a href="http://digg.com/submit?phase=2&amp;url=http://mitchfournier.com/2010/06/23/getting-started-with-south-django-database-migrations/&amp;title=Getting+Started+with+South+%28Django+Database+Migrations%29" class="external" title="Digg this!">Digg this!</a>
		</li>
		<li class="shr-delicious">
			<a href="http://delicious.com/post?url=http://mitchfournier.com/2010/06/23/getting-started-with-south-django-database-migrations/&amp;title=Getting+Started+with+South+%28Django+Database+Migrations%29" class="external" title="Share this on del.icio.us">Share this on del.icio.us</a>
		</li>
		<li class="shr-googlebuzz">
			<a href="http://www.google.com/buzz/post?url=http://mitchfournier.com/2010/06/23/getting-started-with-south-django-database-migrations/&amp;imageurl=" class="external" title="Post on Google Buzz">Post on Google Buzz</a>
		</li>
		<li class="shr-yahoobuzz">
			<a href="http://buzz.yahoo.com/submit/?submitUrl=http://mitchfournier.com/2010/06/23/getting-started-with-south-django-database-migrations/&amp;submitHeadline=Getting+Started+with+South+%28Django+Database+Migrations%29&amp;submitSummary=The%20very%20bare%20bones%20steps%20to%20getting%20up%20and%20running%20with%20South%20for%20your%20Django%20database%20migrations.&amp;submitCategory=science&amp;submitAssetType=text" class="external" title="Buzz up!">Buzz up!</a>
		</li>
</ul>
<div style="clear:both;"></div>
</div>

]]></content:encoded>
			<wfw:commentRss>http://mitchfournier.com/2010/06/23/getting-started-with-south-django-database-migrations/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Aptana Studio and &#8220;Undefined variable from import: DoesNotExist&#8221;</title>
		<link>http://mitchfournier.com/2010/06/18/aptana-studio-and-undefined-variable-from-import-doesnotexist/</link>
		<comments>http://mitchfournier.com/2010/06/18/aptana-studio-and-undefined-variable-from-import-doesnotexist/#comments</comments>
		<pubDate>Fri, 18 Jun 2010 18:38:04 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Aptana]]></category>
		<category><![CDATA[django]]></category>
		<category><![CDATA[DoesNotExist]]></category>
		<category><![CDATA[IDE]]></category>
		<category><![CDATA[PyDev]]></category>

		<guid isPermaLink="false">http://mitchfournier.com/?p=22</guid>
		<description><![CDATA[Teaching Aptana Studio about DoesNotExist]]></description>
			<content:encoded><![CDATA[<p>In my journey from Java hacker to a Django developer, I&#8217;ve test driven a bunch of Python IDEs (ranging from true dev tools like Aptana, Eclipse/PyDev, PyCharm to simple editors like Notepad++).</p>
<p>Recent I was adding some django-profile code I found via Scot Hacker&#8217;s very helpful &#8220;<a title="django=profiles missing manual" href="http://birdhouse.org/blog/2009/06/27/django-profiles/">django-profiles: The Missing Manual</a>&#8220;. When I added this bit of code for a custom form object:</p>
<pre><span style="color: #0000ff;">    def __init__(self, *args, **kwargs):
        super(ProfileForm, self).__init__(*args, **kwargs)
        try:
            self.fields['email'].initial = self.instance.user.email
        except User.<span style="color: red; text-decoration: underline;">DoesNotExist</span>:
            pass</span>
</pre>
<p>Aptana would call out &#8220;DoesNotExist&#8221; with the error: &#8220;Undefined variable from import: DoesNotExist&#8221;. Thanks to Google and the DjangoBot I learned that this is because &#8220;DoesNotExist&#8221; is added by the metaclass.</p>
<p>Here&#8217;s the fix</p>
<ol>
<li>Open up Aptana Studio (I&#8217;m v2.0.3 btw)</li>
<li>Open Window &gt; Preferences &gt; PyDev &gt; Editor &gt; Code Analysis</li>
<li>Select the &#8220;Undefined&#8221; tab</li>
<li>Add DoesNotExist at the end of the &#8220;Consider the following names as globals&#8221; list</li>
<li>Apply and restart</li>
</ol>
<p>Error gone. In the immortal words of <a title="@ubernostrum" href="http://twitter.com/ubernostrum">ubernostrum</a>: &#8220;Bah. It&#8217;s not like metaclasses are *that* hard to statically figure out.&#8221; I&#8217;ll take your word for that, James.</p>


<div class="shr-bookmarks shr-bookmarks-expand shr-bookmarks-spaced shr-bookmarks-bg-knowledge">
<ul class="socials">
		<li class="shr-facebook">
			<a href="http://www.facebook.com/share.php?v=4&amp;src=bm&amp;u=http://mitchfournier.com/2010/06/18/aptana-studio-and-undefined-variable-from-import-doesnotexist/&amp;t=Aptana+Studio+and+%22Undefined+variable+from+import%3A+DoesNotExist%22" class="external" title="Share this on Facebook">Share this on Facebook</a>
		</li>
		<li class="shr-twitter">
			<a href="http://twitter.com/home?status=Aptana+Studio+and+%22Undefined+variable+from+import%3A+DoesNotExist%22+-+http://bit.ly/bDrWc0&amp;source=shareaholic" class="external" title="Tweet This!">Tweet This!</a>
		</li>
		<li class="shr-stumbleupon">
			<a href="http://www.stumbleupon.com/submit?url=http://mitchfournier.com/2010/06/18/aptana-studio-and-undefined-variable-from-import-doesnotexist/&amp;title=Aptana+Studio+and+%22Undefined+variable+from+import%3A+DoesNotExist%22" class="external" title="Stumble upon something good? Share it on StumbleUpon">Stumble upon something good? Share it on StumbleUpon</a>
		</li>
		<li class="shr-reddit">
			<a href="http://reddit.com/submit?url=http://mitchfournier.com/2010/06/18/aptana-studio-and-undefined-variable-from-import-doesnotexist/&amp;title=Aptana+Studio+and+%22Undefined+variable+from+import%3A+DoesNotExist%22" class="external" title="Share this on Reddit">Share this on Reddit</a>
		</li>
		<li class="shr-digg">
			<a href="http://digg.com/submit?phase=2&amp;url=http://mitchfournier.com/2010/06/18/aptana-studio-and-undefined-variable-from-import-doesnotexist/&amp;title=Aptana+Studio+and+%22Undefined+variable+from+import%3A+DoesNotExist%22" class="external" title="Digg this!">Digg this!</a>
		</li>
		<li class="shr-delicious">
			<a href="http://delicious.com/post?url=http://mitchfournier.com/2010/06/18/aptana-studio-and-undefined-variable-from-import-doesnotexist/&amp;title=Aptana+Studio+and+%22Undefined+variable+from+import%3A+DoesNotExist%22" class="external" title="Share this on del.icio.us">Share this on del.icio.us</a>
		</li>
		<li class="shr-googlebuzz">
			<a href="http://www.google.com/buzz/post?url=http://mitchfournier.com/2010/06/18/aptana-studio-and-undefined-variable-from-import-doesnotexist/&amp;imageurl=" class="external" title="Post on Google Buzz">Post on Google Buzz</a>
		</li>
		<li class="shr-yahoobuzz">
			<a href="http://buzz.yahoo.com/submit/?submitUrl=http://mitchfournier.com/2010/06/18/aptana-studio-and-undefined-variable-from-import-doesnotexist/&amp;submitHeadline=Aptana+Studio+and+%22Undefined+variable+from+import%3A+DoesNotExist%22&amp;submitSummary=Teaching%20Aptana%20Studio%20about%20DoesNotExist&amp;submitCategory=science&amp;submitAssetType=text" class="external" title="Buzz up!">Buzz up!</a>
		</li>
</ul>
<div style="clear:both;"></div>
</div>

]]></content:encoded>
			<wfw:commentRss>http://mitchfournier.com/2010/06/18/aptana-studio-and-undefined-variable-from-import-doesnotexist/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>New Django site: polurls.com</title>
		<link>http://mitchfournier.com/2010/04/13/new-django-site-polurls-com/</link>
		<comments>http://mitchfournier.com/2010/04/13/new-django-site-polurls-com/#comments</comments>
		<pubDate>Tue, 13 Apr 2010 02:53:54 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[django]]></category>
		<category><![CDATA[launch]]></category>
		<category><![CDATA[politics]]></category>
		<category><![CDATA[polurls]]></category>

		<guid isPermaLink="false">http://mitchfournier.wordpress.com/?p=14</guid>
		<description><![CDATA[Two of my great passions (OK&#8230;obsessions) are web tech and politics. It was just a matter of time before I mashed them together. Recently, I&#8217;ve been diving head first into Django, looking to complement my Java-based toolset &#8212; honed via ParentShack.com and Sharenik.com &#8212; with some Python/Django ones. Last week I launched polurls.com, a political [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://polurls.com/media/img/US-purple.gif" alt="polurls | the political blog aggregator" width="82" height="50" align="right" />Two of my great passions (OK&#8230;obsessions) are  web tech and politics. It was just a matter of time before I mashed them  together.</p>
<p>Recently, I&#8217;ve been diving head first into Django, looking to  complement my Java-based toolset &#8212; honed via <a title="Free birth  announcements" href="http://parentshack.com/">ParentShack.com</a> and <a title="Free video cards" href="http://sharenik.com/">Sharenik.com</a> &#8212; with some  Python/Django ones.</p>
<p>Last week I launched polurls.com, a <a title="the political blog  aggregator" href="http://polurls.com/">political  blog aggregator</a> which is not only my first live Django site but  also the spawn of my politics and tech love. Think of it as the <a title="the mother of all aggregators" href="http://popurls.com/">popurls</a> of politics. A site which  aggregates left-leaning political blogs on <a title="The liberal  political blog aggregator" href="http://polurls.com/blue/">polurls.com/blue</a>, right-leaning  blogs on <a title="the conservative political blog aggregator" href="http://polurls.com/red">polurls.com/red</a> and the whole spectrum of political blogs on <a title="the political  blog aggregator" href="http://polurls.com/purple/">polurls.com/purple</a>.</p>
<p>My hope is that by showing conservative, progressive and centrist  blogs side-by-side that polurls visitors will get a truly  balanced take  on the latest political news.</p>
<p>I&#8217;ve already found the site to be a very quick and <a href="http://www.facebook.com/photo.php?pid=63073&amp;id=106871146014877">interesting</a> way to scan the latest political news. I&#8217;m eating my own dog food and  loving the taste!</p>
<p>I&#8217;d love feedback either in the comments or on twitter (<a href="http://twitter.com/mfournier">@mfournier</a> or <a href="http://twitter.com/polurls">@polurls</a>).</p>


<div class="shr-bookmarks shr-bookmarks-expand shr-bookmarks-spaced shr-bookmarks-bg-knowledge">
<ul class="socials">
		<li class="shr-facebook">
			<a href="http://www.facebook.com/share.php?v=4&amp;src=bm&amp;u=http://mitchfournier.com/2010/04/13/new-django-site-polurls-com/&amp;t=New+Django+site%3A+polurls.com" class="external" title="Share this on Facebook">Share this on Facebook</a>
		</li>
		<li class="shr-twitter">
			<a href="http://twitter.com/home?status=New+Django+site%3A+polurls.com+-+http://bit.ly/aTAP4M&amp;source=shareaholic" class="external" title="Tweet This!">Tweet This!</a>
		</li>
		<li class="shr-stumbleupon">
			<a href="http://www.stumbleupon.com/submit?url=http://mitchfournier.com/2010/04/13/new-django-site-polurls-com/&amp;title=New+Django+site%3A+polurls.com" class="external" title="Stumble upon something good? Share it on StumbleUpon">Stumble upon something good? Share it on StumbleUpon</a>
		</li>
		<li class="shr-reddit">
			<a href="http://reddit.com/submit?url=http://mitchfournier.com/2010/04/13/new-django-site-polurls-com/&amp;title=New+Django+site%3A+polurls.com" class="external" title="Share this on Reddit">Share this on Reddit</a>
		</li>
		<li class="shr-digg">
			<a href="http://digg.com/submit?phase=2&amp;url=http://mitchfournier.com/2010/04/13/new-django-site-polurls-com/&amp;title=New+Django+site%3A+polurls.com" class="external" title="Digg this!">Digg this!</a>
		</li>
		<li class="shr-delicious">
			<a href="http://delicious.com/post?url=http://mitchfournier.com/2010/04/13/new-django-site-polurls-com/&amp;title=New+Django+site%3A+polurls.com" class="external" title="Share this on del.icio.us">Share this on del.icio.us</a>
		</li>
		<li class="shr-googlebuzz">
			<a href="http://www.google.com/buzz/post?url=http://mitchfournier.com/2010/04/13/new-django-site-polurls-com/&amp;imageurl=" class="external" title="Post on Google Buzz">Post on Google Buzz</a>
		</li>
		<li class="shr-yahoobuzz">
			<a href="http://buzz.yahoo.com/submit/?submitUrl=http://mitchfournier.com/2010/04/13/new-django-site-polurls-com/&amp;submitHeadline=New+Django+site%3A+polurls.com&amp;submitSummary=Two%20of%20my%20great%20passions%20%28OK...obsessions%29%20are%20%20web%20tech%20and%20politics.%20It%20was%20just%20a%20matter%20of%20time%20before%20I%20mashed%20them%20%20together.%0D%0A%0D%0ARecently%2C%20I%27ve%20been%20diving%20head%20first%20into%20Django%2C%20looking%20to%20%20complement%20my%20Java-based%20toolset%20--%20honed%20via%20ParentShack.com%20and%20Sharenik.com%20--%20with%20some%20%20Python%2FDj&amp;submitCategory=science&amp;submitAssetType=text" class="external" title="Buzz up!">Buzz up!</a>
		</li>
</ul>
<div style="clear:both;"></div>
</div>

]]></content:encoded>
			<wfw:commentRss>http://mitchfournier.com/2010/04/13/new-django-site-polurls-com/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Specify a custom manager for the Django admin interface</title>
		<link>http://mitchfournier.com/2010/03/12/specify-a-custom-manager-for-the-django-admin-interface/</link>
		<comments>http://mitchfournier.com/2010/03/12/specify-a-custom-manager-for-the-django-admin-interface/#comments</comments>
		<pubDate>Fri, 12 Mar 2010 10:08:37 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[django]]></category>
		<category><![CDATA[django admin]]></category>
		<category><![CDATA[django managers]]></category>

		<guid isPermaLink="false">http://mitchfournier.wordpress.com/?p=11</guid>
		<description><![CDATA[As I was running through the weblog example in James Bennett&#8217;s excellent &#8220;Practical Django Projects (2nd Ed)&#8221; book I ran across a problem. In the book, we are asked to create a custom manager for the Entry model. Instead of pulling all entries, the custom manager only pull the entries that have been marked as [...]]]></description>
			<content:encoded><![CDATA[<p>As I was running through the weblog example in <a title="@ubernostrum" href="http://twitter.com/ubernostrum">James Bennett&#8217;s</a> excellent &#8220;<a title="Amazon" href="http://www.amazon.com/dp/1430219386/">Practical Django  Projects (2nd Ed)&#8221;</a> book I ran across a problem. In the book, we are  asked to create a custom manager for the Entry model. Instead of pulling  all entries, the custom manager only pull the entries that have been  marked as LIVE (and ignores the ones that are marked HIDDEN or DRAFT).</p>
<p>This custom manager is set as the _default_manager (by defining it  first in the Entry class), which is fine, except for the fact that the  Django admin interface &#8220;defaults&#8221; to using the default manager of a  class. In the admin, I want to see and edit ALL objects, not just the  live ones.</p>
<p>To further complicate things, we create a custom tag that takes any  type of content and displays the most recent elements of it. This tag is  model agnostic and so uses the _default_manager of the model that it is  looking at. So, for the Entry model, the default manager needs to  remain the custom one which shows only LIVE results.</p>
<p>Luckily, there is a fairly simple way to tell the admin interface to  not use the default manager. Simply change your <em>ModelAdmin</em> class in you <em>admin.py</em> file from something like this:</p>
<pre>class EntryAdmin(admin.ModelAdmin):
    prepopulated_fields = { 'slug': ['title'] }</pre>
<p>To something like this:</p>
<pre>class EntryAdmin(admin.ModelAdmin):
     prepopulated_fields = { 'slug': ['title'] }
     def queryset(self, request):
         return Entry.objects</pre>
<p>And make sure that your Entry model has its managers defined thusly:</p>
<pre># Give the Entry model two managers. NOTE: the first one is the default!
live = LiveEntryManager()   # _default_manager #
objects = models.Manager()</pre>
<p>Now everywhere that you use <em>Entry.live.all()</em> or <em>Entry._default_manager.all()</em> You&#8217;ll pull only the LIVE results while the admin interface will show  all of the LIVE, DRAFT and HIDDEN results.</p>
<p>(Let me know in the comments any unspeakable horrors this solution  might stir up <img src='http://mitchfournier.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>


<div class="shr-bookmarks shr-bookmarks-expand shr-bookmarks-spaced shr-bookmarks-bg-knowledge">
<ul class="socials">
		<li class="shr-facebook">
			<a href="http://www.facebook.com/share.php?v=4&amp;src=bm&amp;u=http://mitchfournier.com/2010/03/12/specify-a-custom-manager-for-the-django-admin-interface/&amp;t=Specify+a+custom+manager+for+the+Django+admin+interface" class="external" title="Share this on Facebook">Share this on Facebook</a>
		</li>
		<li class="shr-twitter">
			<a href="http://twitter.com/home?status=Specify+a+custom+manager+for+the+Django+admin+interface+-+http://bit.ly/dj5VGG&amp;source=shareaholic" class="external" title="Tweet This!">Tweet This!</a>
		</li>
		<li class="shr-stumbleupon">
			<a href="http://www.stumbleupon.com/submit?url=http://mitchfournier.com/2010/03/12/specify-a-custom-manager-for-the-django-admin-interface/&amp;title=Specify+a+custom+manager+for+the+Django+admin+interface" class="external" title="Stumble upon something good? Share it on StumbleUpon">Stumble upon something good? Share it on StumbleUpon</a>
		</li>
		<li class="shr-reddit">
			<a href="http://reddit.com/submit?url=http://mitchfournier.com/2010/03/12/specify-a-custom-manager-for-the-django-admin-interface/&amp;title=Specify+a+custom+manager+for+the+Django+admin+interface" class="external" title="Share this on Reddit">Share this on Reddit</a>
		</li>
		<li class="shr-digg">
			<a href="http://digg.com/submit?phase=2&amp;url=http://mitchfournier.com/2010/03/12/specify-a-custom-manager-for-the-django-admin-interface/&amp;title=Specify+a+custom+manager+for+the+Django+admin+interface" class="external" title="Digg this!">Digg this!</a>
		</li>
		<li class="shr-delicious">
			<a href="http://delicious.com/post?url=http://mitchfournier.com/2010/03/12/specify-a-custom-manager-for-the-django-admin-interface/&amp;title=Specify+a+custom+manager+for+the+Django+admin+interface" class="external" title="Share this on del.icio.us">Share this on del.icio.us</a>
		</li>
		<li class="shr-googlebuzz">
			<a href="http://www.google.com/buzz/post?url=http://mitchfournier.com/2010/03/12/specify-a-custom-manager-for-the-django-admin-interface/&amp;imageurl=" class="external" title="Post on Google Buzz">Post on Google Buzz</a>
		</li>
		<li class="shr-yahoobuzz">
			<a href="http://buzz.yahoo.com/submit/?submitUrl=http://mitchfournier.com/2010/03/12/specify-a-custom-manager-for-the-django-admin-interface/&amp;submitHeadline=Specify+a+custom+manager+for+the+Django+admin+interface&amp;submitSummary=As%20I%20was%20running%20through%20the%20weblog%20example%20in%20James%20Bennett%27s%20excellent%20%22Practical%20Django%20%20Projects%20%282nd%20Ed%29%22%20book%20I%20ran%20across%20a%20problem.%20In%20the%20book%2C%20we%20are%20%20asked%20to%20create%20a%20custom%20manager%20for%20the%20Entry%20model.%20Instead%20of%20pulling%20%20all%20entries%2C%20the%20custom%20manager%20only%20pull%20the%20entries%20that%20have%20b&amp;submitCategory=science&amp;submitAssetType=text" class="external" title="Buzz up!">Buzz up!</a>
		</li>
</ul>
<div style="clear:both;"></div>
</div>

]]></content:encoded>
			<wfw:commentRss>http://mitchfournier.com/2010/03/12/specify-a-custom-manager-for-the-django-admin-interface/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Make Firefox look (and act) like Google Chrome</title>
		<link>http://mitchfournier.com/2010/03/08/make-firefox-look-and-act-like-google-chrome/</link>
		<comments>http://mitchfournier.com/2010/03/08/make-firefox-look-and-act-like-google-chrome/#comments</comments>
		<pubDate>Mon, 08 Mar 2010 05:33:17 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[browsers]]></category>
		<category><![CDATA[chrome]]></category>
		<category><![CDATA[firefox]]></category>

		<guid isPermaLink="false">http://mitchfournier.wordpress.com/?p=8</guid>
		<description><![CDATA[I love almost everything about Google&#8217;s Chrome browser: the startup speed, the clean and simple interface, the javascript processing speed, the extensions (especially not having to reboot when you add extensions!) and the tabs-as-processes. What I don&#8217;t love, however, is the lack of a built-in master password mechanism for hiding and protecting all of my [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.parentshack.com/USERDATA/Mitch/files/chrome-logo.jpg" alt="Chrome logo" width="100" height="97" align="left" />I love almost everything about  Google&#8217;s Chrome browser: the startup speed, the clean and simple  interface, the javascript processing speed, the extensions (especially  not having to reboot when you add extensions!) and the  tabs-as-processes.</p>
<p>What I don&#8217;t love, however, is the lack of a built-in master password  mechanism for hiding and protecting all of my most sensitive site  credentials. A quick visit to &#8220;Options &gt; Personal Stuff &gt; Show  saved passwords&#8221; and you&#8217;ll see all the typical passwords I use at my  favorite sites.</p>
<p>I do use LastPass, but my Firefox experience tells me that relying on  extensions to provide the required core functionality can result in  frustration around browser update time. Granted, I&#8217;m using a bunch of  Firefox extensions to mimic Chrome, but these are just for cosmetics. If  any of them go at my next update, it&#8217;s not the end of my browsing  world.</p>
<p>My secondary concerns with Chrome are its more bloated RAM use and  its lack of a good LeechBlock alternative for keeping me on task. I  could probably live with these, however, but I can&#8217;t live with the  master password oversight.</p>
<p>So until Chrome has a master password, I&#8217;ve customized Firefox to  look and act like it:</p>
<p><img src="http://www.parentshack.com/USERDATA/Mitch/files/ff-chrome.2.jpg" alt="FF as Chrome" width="448" height="104" /></p>
<hr />
<ol>
<li>Get and install the &#8220;Chromifox Basic&#8221; theme for Firefox:<br />
<a href="https://addons.mozilla.org/en-US/firefox/addon/8782">https://addons.mozilla.org/en-US/firefox/addon/8782</a></li>
<li>Get and install the &#8220;Omnibar&#8221; extension:<br />
<a href="https://addons.mozilla.org/en-US/firefox/addon/8823">https://addons.mozilla.org/en-US/firefox/addon/8823</a></li>
<li>Get and install the &#8220;Tiny Menu&#8221; extension:<br />
<a href="https://addons.mozilla.org/en-US/firefox/addon/1455">https://addons.mozilla.org/en-US/firefox/addon/1455</a></li>
<li>Get and install the &#8220;Toolbar Buttons&#8221; extension:<br />
<a href="https://addons.mozilla.org/en-US/firefox/addon/2377">https://addons.mozilla.org/en-US/firefox/addon/2377</a></li>
<li>Restart Firefox</li>
<li>Right click on your Firefox menubar and click &#8220;customize&#8221;. Move the  newly minimized menu to the far right, add toolbar buttons for &#8220;Toggle  the Bookmark Toolbar&#8221; | &#8220;Open Add-ons Manager&#8221; | &#8220;Print this page&#8221; and  move the new &#8220;omnibar&#8221; to the right of the forward/back/reload buttons</li>
<li>Optionally, remove the excessive location bar icons (RSS, bookmark  star) by creating a userChrome.css file (located here in my Windows 7  install:  C:\Users\Mitch\AppData\Roaming\Mozilla\Firefox\Profiles\vggf8vt5.default\chrome)  and adding the following:
<pre>/* Remove the Bookmark star from the location bar */
#star-button {
display: none !important; }

/* Remove the feed button from the location bar */
#feed-button {
display: none !important;}</pre>
</li>
<li>Restart Firefox again</li>
</ol>
<p>Voila! Many of the benefits of Chrome, all in the feature-rich  (aka: master password containing) container of Firefox!</p>


<div class="shr-bookmarks shr-bookmarks-expand shr-bookmarks-spaced shr-bookmarks-bg-knowledge">
<ul class="socials">
		<li class="shr-facebook">
			<a href="http://www.facebook.com/share.php?v=4&amp;src=bm&amp;u=http://mitchfournier.com/2010/03/08/make-firefox-look-and-act-like-google-chrome/&amp;t=Make+Firefox+look+%28and+act%29+like+Google+Chrome" class="external" title="Share this on Facebook">Share this on Facebook</a>
		</li>
		<li class="shr-twitter">
			<a href="http://twitter.com/home?status=Make+Firefox+look+%28and+act%29+like+Google+Chrome+-+http://bit.ly/9I5mSf&amp;source=shareaholic" class="external" title="Tweet This!">Tweet This!</a>
		</li>
		<li class="shr-stumbleupon">
			<a href="http://www.stumbleupon.com/submit?url=http://mitchfournier.com/2010/03/08/make-firefox-look-and-act-like-google-chrome/&amp;title=Make+Firefox+look+%28and+act%29+like+Google+Chrome" class="external" title="Stumble upon something good? Share it on StumbleUpon">Stumble upon something good? Share it on StumbleUpon</a>
		</li>
		<li class="shr-reddit">
			<a href="http://reddit.com/submit?url=http://mitchfournier.com/2010/03/08/make-firefox-look-and-act-like-google-chrome/&amp;title=Make+Firefox+look+%28and+act%29+like+Google+Chrome" class="external" title="Share this on Reddit">Share this on Reddit</a>
		</li>
		<li class="shr-digg">
			<a href="http://digg.com/submit?phase=2&amp;url=http://mitchfournier.com/2010/03/08/make-firefox-look-and-act-like-google-chrome/&amp;title=Make+Firefox+look+%28and+act%29+like+Google+Chrome" class="external" title="Digg this!">Digg this!</a>
		</li>
		<li class="shr-delicious">
			<a href="http://delicious.com/post?url=http://mitchfournier.com/2010/03/08/make-firefox-look-and-act-like-google-chrome/&amp;title=Make+Firefox+look+%28and+act%29+like+Google+Chrome" class="external" title="Share this on del.icio.us">Share this on del.icio.us</a>
		</li>
		<li class="shr-googlebuzz">
			<a href="http://www.google.com/buzz/post?url=http://mitchfournier.com/2010/03/08/make-firefox-look-and-act-like-google-chrome/&amp;imageurl=" class="external" title="Post on Google Buzz">Post on Google Buzz</a>
		</li>
		<li class="shr-yahoobuzz">
			<a href="http://buzz.yahoo.com/submit/?submitUrl=http://mitchfournier.com/2010/03/08/make-firefox-look-and-act-like-google-chrome/&amp;submitHeadline=Make+Firefox+look+%28and+act%29+like+Google+Chrome&amp;submitSummary=I%20love%20almost%20everything%20about%20%20Google%27s%20Chrome%20browser%3A%20the%20startup%20speed%2C%20the%20clean%20and%20simple%20%20interface%2C%20the%20javascript%20processing%20speed%2C%20the%20extensions%20%28especially%20%20not%20having%20to%20reboot%20when%20you%20add%20extensions%21%29%20and%20the%20%20tabs-as-processes.%0A%0AWhat%20I%20don%27t%20love%2C%20however%2C%20is%20the%20lack%20of%20a%20built-in%20&amp;submitCategory=science&amp;submitAssetType=text" class="external" title="Buzz up!">Buzz up!</a>
		</li>
</ul>
<div style="clear:both;"></div>
</div>

]]></content:encoded>
			<wfw:commentRss>http://mitchfournier.com/2010/03/08/make-firefox-look-and-act-like-google-chrome/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
