<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="http://feeds.feedburner.com/~d/styles/rss2full.xsl" type="text/xsl" media="screen"?><?xml-stylesheet href="http://feeds.feedburner.com/~d/styles/itemcontent.css" type="text/css" media="screen"?><rss 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:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Patrick Altman</title>
	
	<link>http://paltman.com</link>
	<description>Shifting Bits</description>
	<pubDate>Sat, 19 Jul 2008 04:00:18 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6</generator>
	<language>en</language>
			<geo:lat>36.180507</geo:lat><geo:long>-86.60111</geo:long><image><link>http://creativecommons.org/licenses/by-nc-nd/2.0/</link><url>http://creativecommons.org/images/public/somerights20.gif</url><title>Some Rights Reserved</title></image><xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" /><meta xmlns="http://pipes.yahoo.com" name="pipes" content="noprocess" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/PatrickAltman" type="application/rss+xml" /><feedburner:browserFriendly>This is an XML content feed. It is intended to be viewed in a newsreader or syndicated to another site, subject to copyright and fair use.</feedburner:browserFriendly><item>
		<title>Changeset 7967: NFA Branch Merged into Trunk</title>
		<link>http://feeds.feedburner.com/~r/PatrickAltman/~3/339585772/</link>
		<comments>http://paltman.com/2008/07/18/changeset-7967-nfa-branch-merged-into-trunk/#comments</comments>
		<pubDate>Sat, 19 Jul 2008 04:00:10 +0000</pubDate>
		<dc:creator>Patrick Altman</dc:creator>
		
		<category><![CDATA[django]]></category>

		<category><![CDATA[news]]></category>

		<guid isPermaLink="false">http://paltman.com/?p=469</guid>
		<description><![CDATA[I and a host of other folks have been waiting anxiously for this merge for a while now.  Excited to see it happen tonight.

Good job, Brian Rosner et al.
]]></description>
			<content:encoded><![CDATA[<p>I and a host of other folks have been waiting anxiously for <a href="http://code.djangoproject.com/changeset/7967">this merge</a> for a while now.  Excited to see it happen tonight.</p>

<p>Good job, <a href="http://oebfare.com">Brian Rosner</a> et al.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~f/PatrickAltman?a=ZwrNIJ"><img src="http://feeds.feedburner.com/~f/PatrickAltman?i=ZwrNIJ" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/PatrickAltman?a=oH1YFJ"><img src="http://feeds.feedburner.com/~f/PatrickAltman?i=oH1YFJ" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/PatrickAltman?a=BQG1Sj"><img src="http://feeds.feedburner.com/~f/PatrickAltman?i=BQG1Sj" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/PatrickAltman?a=K4D0TJ"><img src="http://feeds.feedburner.com/~f/PatrickAltman?i=K4D0TJ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/PatrickAltman/~4/339585772" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://paltman.com/2008/07/18/changeset-7967-nfa-branch-merged-into-trunk/feed/</wfw:commentRss>
		<creativeCommons:license>http://creativecommons.org/licenses/by-nc-nd/2.0/</creativeCommons:license><feedburner:origLink>http://paltman.com/2008/07/18/changeset-7967-nfa-branch-merged-into-trunk/</feedburner:origLink></item>
		<item><title>Links for 2008-07-16 [del.icio.us]</title><link>http://feeds.feedburner.com/~r/PatrickAltman/~3/337736405/altman</link><pubDate>Thu, 17 Jul 2008 00:00:00 -0500</pubDate><guid isPermaLink="false">http://del.icio.us/altman#2008-07-16</guid><content:encoded><![CDATA[<ul>
<li><a href="http://twitter.com/johnculberson">Twitter / johnculberson</a></li>
<li><a href="http://stream0.org/2008/01/optimised-x264-encoding-with-f.html">Optimised x264 Encoding with FFmpeg - Stream #0</a></li>
<li><a href="http://www.itbroadcastanddigitalcinema.com/ffmpeg_howto.html#Encoding_MPEG-2_I-frame_only_in_Highest_Quality">FFmpeg Howto</a></li>
<li><a href="http://www.bigbuckbunny.org/index.php/about/">Big Buck Bunny   &raquo; About</a></li>
</ul><img src="http://feeds.feedburner.com/~r/PatrickAltman/~4/337736405" height="1" width="1"/>]]></content:encoded><description>&lt;ul&gt;
&lt;li&gt;&lt;a href="http://twitter.com/johnculberson"&gt;Twitter / johnculberson&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://stream0.org/2008/01/optimised-x264-encoding-with-f.html"&gt;Optimised x264 Encoding with FFmpeg - Stream #0&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.itbroadcastanddigitalcinema.com/ffmpeg_howto.html#Encoding_MPEG-2_I-frame_only_in_Highest_Quality"&gt;FFmpeg Howto&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.bigbuckbunny.org/index.php/about/"&gt;Big Buck Bunny   &amp;raquo; About&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description><feedburner:origLink>http://del.icio.us/altman#2008-07-16</feedburner:origLink></item><item><title>Links for 2008-07-16 [del.icio.us]</title><link>http://feeds.feedburner.com/~r/PatrickAltman/~3/337736405/altman</link><pubDate>Thu, 17 Jul 2008 00:00:00 -0500</pubDate><guid isPermaLink="false">http://del.icio.us/altman#2008-07-16</guid><content:encoded><![CDATA[<ul>
<li><a href="http://twitter.com/johnculberson">Twitter / johnculberson</a></li>
<li><a href="http://stream0.org/2008/01/optimised-x264-encoding-with-f.html">Optimised x264 Encoding with FFmpeg - Stream #0</a></li>
<li><a href="http://www.itbroadcastanddigitalcinema.com/ffmpeg_howto.html#Encoding_MPEG-2_I-frame_only_in_Highest_Quality">FFmpeg Howto</a></li>
<li><a href="http://www.bigbuckbunny.org/index.php/about/">Big Buck Bunny   &raquo; About</a></li>
</ul><img src="http://feeds.feedburner.com/~r/PatrickAltman/~4/337736405" height="1" width="1"/>]]></content:encoded><description>&lt;ul&gt;
&lt;li&gt;&lt;a href="http://twitter.com/johnculberson"&gt;Twitter / johnculberson&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://stream0.org/2008/01/optimised-x264-encoding-with-f.html"&gt;Optimised x264 Encoding with FFmpeg - Stream #0&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.itbroadcastanddigitalcinema.com/ffmpeg_howto.html#Encoding_MPEG-2_I-frame_only_in_Highest_Quality"&gt;FFmpeg Howto&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.bigbuckbunny.org/index.php/about/"&gt;Big Buck Bunny   &amp;raquo; About&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description><feedburner:origLink>http://del.icio.us/altman#2008-07-16</feedburner:origLink></item><item><title>Links for 2008-07-15 [del.icio.us]</title><link>http://feeds.feedburner.com/~r/PatrickAltman/~3/336759636/altman</link><pubDate>Wed, 16 Jul 2008 00:00:00 -0500</pubDate><guid isPermaLink="false">http://del.icio.us/altman#2008-07-15</guid><content:encoded><![CDATA[<ul>
<li><a href="http://codebasehq.com/">Codebase - Git repository hosting with source browser, changesets, ticketing &amp; deployment tracking</a></li>
</ul><img src="http://feeds.feedburner.com/~r/PatrickAltman/~4/336759636" height="1" width="1"/>]]></content:encoded><description>&lt;ul&gt;
&lt;li&gt;&lt;a href="http://codebasehq.com/"&gt;Codebase - Git repository hosting with source browser, changesets, ticketing &amp;amp; deployment tracking&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description><feedburner:origLink>http://del.icio.us/altman#2008-07-15</feedburner:origLink></item><item>
		<title>GitHub Enables Markdown Documentation</title>
		<link>http://feeds.feedburner.com/~r/PatrickAltman/~3/335687394/</link>
		<comments>http://paltman.com/2008/07/14/github-enables-markdown-documentation/#comments</comments>
		<pubDate>Tue, 15 Jul 2008 03:11:19 +0000</pubDate>
		<dc:creator>Patrick Altman</dc:creator>
		
		<category><![CDATA[django]]></category>

		<category><![CDATA[git]]></category>

		<guid isPermaLink="false">http://paltman.com/?p=468</guid>
		<description><![CDATA[I have been desiring to have the documentation that I write for my various projects on GitHub render to HTML when using a .markdown extension, just like they support doing for special files like README.markdown.

At first, I thought they&#8217;d eventually get around to it and that is the best I could hope for as surely [...]]]></description>
			<content:encoded><![CDATA[<p>I have been desiring to have the documentation that I write for my various projects on <a href="http://github.com">GitHub</a> render to HTML when using a <code>.markdown</code> extension, just like they support doing for special files like <code>README.markdown</code>.</p>

<p>At first, I thought they&#8217;d eventually get around to it and that is the best I could hope for as surely they are too busy to respond to a non-paying customer like me.  Then I learned they the used the <a href="http://logicalawesome.lighthouseapp.com/projects/8570-github">Lighthouse</a> ticket system to manage their project and took public submissions for features.</p>

<p>Before logging a feature request I did some searching and found <a href="http://logicalawesome.lighthouseapp.com/projects/8570-github/tickets/479-render-marked-up-files-like-readmes">a ticket already</a> out there requesting exactly this same feature that I wanted.  So I just added my own comments to the ticket to give it a +1.</p>

<p>After a little back and forth I learned it was implemented tonight (just a week after my first comment).  Good to see such responsive development.  </p>

<p><a href="http://github.com/paltman/django-aws/tree/master/docs/tags.markdown">An example of this feature</a> can be found in my <a href="http://github.com/paltman/django-aws/">django-aws</a> project which is simple app to provide some template tags to provide Amazon Web Services information a la <a href="http://boto.googlecode.com">boto</a>. </p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~f/PatrickAltman?a=esl6VJ"><img src="http://feeds.feedburner.com/~f/PatrickAltman?i=esl6VJ" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/PatrickAltman?a=gbNSNJ"><img src="http://feeds.feedburner.com/~f/PatrickAltman?i=gbNSNJ" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/PatrickAltman?a=uYHXjj"><img src="http://feeds.feedburner.com/~f/PatrickAltman?i=uYHXjj" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/PatrickAltman?a=Uag9hJ"><img src="http://feeds.feedburner.com/~f/PatrickAltman?i=Uag9hJ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/PatrickAltman/~4/335687394" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://paltman.com/2008/07/14/github-enables-markdown-documentation/feed/</wfw:commentRss>
		<creativeCommons:license>http://creativecommons.org/licenses/by-nc-nd/2.0/</creativeCommons:license><feedburner:origLink>http://paltman.com/2008/07/14/github-enables-markdown-documentation/</feedburner:origLink></item>
		<item>
		<title>Vertical Day: Redefining Politics</title>
		<link>http://feeds.feedburner.com/~r/PatrickAltman/~3/335687395/</link>
		<comments>http://paltman.com/2008/07/14/vertical-day-redefining-politics/#comments</comments>
		<pubDate>Mon, 14 Jul 2008 16:15:01 +0000</pubDate>
		<dc:creator>Patrick Altman</dc:creator>
		
		<category><![CDATA[politics]]></category>

		<guid isPermaLink="false">http://paltman.com/?p=467</guid>
		<description><![CDATA[This is the kind of stuff that we need in politics.  

The Huck PAC is continuing with Mike Huckabee&#8217;s brand of positive, issues-based, politics, in promoting Vertical Day on July 23rd.  Candidates such as John Cornyn, Elizabeth Dole, Lamar Alexander,  Jim Inhofe, Roy Brown, Steve Daines, Gilbert Baker and Bob Clegg, have [...]]]></description>
			<content:encoded><![CDATA[<p>This is the kind of stuff that we need in politics.  </p>

<p>The <a href="http://www.huckpac.com/">Huck PAC</a> is continuing with <a href="http://en.wikipedia.org/wiki/Mike_Huckabee">Mike Huckabee</a>&#8217;s brand of positive, issues-based, politics, in promoting Vertical Day on July 23rd.  Candidates such as <a href="http://www.johncornyn.com/">John Cornyn</a>, <a href="http://www.elizabethdole.org/">Elizabeth Dole</a>, <a href="http://www.lamaralexander.com/">Lamar Alexander</a>,  <a href="http://www.jiminhofe.com/Splash/Default.aspx">Jim Inhofe</a>, <a href="http://www.roybrownformontana.com/">Roy Brown</a>, <a href="http://www.roybrownformontana.com/about_steve_daines.html">Steve Daines</a>, <a href="http://www.senatorgilbertbaker.com/About_Senator_Gilbert_Baker.html">Gilbert Baker</a> and <a href="http://cleggforcongress.com/hu">Bob Clegg</a>, have chosen to participate.  They&#8217;ll blog about issues on July 23rd in a positive manner that promotes good healthy exchange of ideas instead of the typical partisan bickering.</p>

<p>As a coordinated effort on a single day, it should bring a more attention to Vertical Politics than having this effort scattered about.  That being said, it would be nice if this set a tone for encouraging more candidates to seek to solve problems than to merely beat up the other guy for votes.</p>

<p>We have a ton of problems to solve as a nation.  We don&#8217;t have time to deal with the status quo of politics in America.  We need a fundamental shift in attitude and thinking.  I am looking forward to Vertical Day and hopefully one day a Vertical Nation.</p>

<p><a href="http://www.HuckPac.com" title="HuckPac.com"><img src="http://www.huckpac.com/_images/banners/banners_02.gif" width="200" height="75" border="0" alt="HuckPac.com" title="HuckPac.com" /></a></p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~f/PatrickAltman?a=C4cQeJ"><img src="http://feeds.feedburner.com/~f/PatrickAltman?i=C4cQeJ" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/PatrickAltman?a=V1E1DJ"><img src="http://feeds.feedburner.com/~f/PatrickAltman?i=V1E1DJ" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/PatrickAltman?a=19bw7j"><img src="http://feeds.feedburner.com/~f/PatrickAltman?i=19bw7j" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/PatrickAltman?a=GCzZoJ"><img src="http://feeds.feedburner.com/~f/PatrickAltman?i=GCzZoJ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/PatrickAltman/~4/335687395" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://paltman.com/2008/07/14/vertical-day-redefining-politics/feed/</wfw:commentRss>
		<creativeCommons:license>http://creativecommons.org/licenses/by-nc-nd/2.0/</creativeCommons:license><feedburner:origLink>http://paltman.com/2008/07/14/vertical-day-redefining-politics/</feedburner:origLink></item>
		<item><title>Links for 2008-07-13 [del.icio.us]</title><link>http://feeds.feedburner.com/~r/PatrickAltman/~3/334789112/altman</link><pubDate>Mon, 14 Jul 2008 00:00:00 -0500</pubDate><guid isPermaLink="false">http://del.icio.us/altman#2008-07-13</guid><content:encoded><![CDATA[<ul>
<li><a href="http://djangoarcade.com/">djangoarcade.com : games for your django powered site</a></li>
</ul><img src="http://feeds.feedburner.com/~r/PatrickAltman/~4/334789112" height="1" width="1"/>]]></content:encoded><description>&lt;ul&gt;
&lt;li&gt;&lt;a href="http://djangoarcade.com/"&gt;djangoarcade.com : games for your django powered site&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description><feedburner:origLink>http://del.icio.us/altman#2008-07-13</feedburner:origLink></item><item><title>Links for 2008-07-11 [del.icio.us]</title><link>http://feeds.feedburner.com/~r/PatrickAltman/~3/333283670/altman</link><pubDate>Sat, 12 Jul 2008 00:00:00 -0500</pubDate><guid isPermaLink="false">http://del.icio.us/altman#2008-07-11</guid><content:encoded><![CDATA[<ul>
<li><a href="http://code.google.com/p/modwsgi/">modwsgi - Google Code</a></li>
<li><a href="http://www.kottke.org/08/07/iphone-20-update-now-available">iPhone 2.0 update now available (kottke.org)</a></li>
<li><a href="http://www.stone.com/iPhone/Twittelator/">Twittelator - the fun free Twitter Client -  Twittelator</a></li>
</ul><img src="http://feeds.feedburner.com/~r/PatrickAltman/~4/333283670" height="1" width="1"/>]]></content:encoded><description>&lt;ul&gt;
&lt;li&gt;&lt;a href="http://code.google.com/p/modwsgi/"&gt;modwsgi - Google Code&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.kottke.org/08/07/iphone-20-update-now-available"&gt;iPhone 2.0 update now available (kottke.org)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.stone.com/iPhone/Twittelator/"&gt;Twittelator - the fun free Twitter Client -  Twittelator&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description><feedburner:origLink>http://del.icio.us/altman#2008-07-11</feedburner:origLink></item><item><title>Links for 2008-07-10 [del.icio.us]</title><link>http://feeds.feedburner.com/~r/PatrickAltman/~3/332372301/altman</link><pubDate>Fri, 11 Jul 2008 00:00:00 -0500</pubDate><guid isPermaLink="false">http://del.icio.us/altman#2008-07-10</guid><content:encoded><![CDATA[<ul>
<li><a href="http://code.google.com/p/google-code-prettify/">google-code-prettify - Google Code</a></li>
<li><a href="http://byteflow.su/">Byteflow Blog Engine - Trac</a></li>
</ul><img src="http://feeds.feedburner.com/~r/PatrickAltman/~4/332372301" height="1" width="1"/>]]></content:encoded><description>&lt;ul&gt;
&lt;li&gt;&lt;a href="http://code.google.com/p/google-code-prettify/"&gt;google-code-prettify - Google Code&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://byteflow.su/"&gt;Byteflow Blog Engine - Trac&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description><feedburner:origLink>http://del.icio.us/altman#2008-07-10</feedburner:origLink></item><item><title>Links for 2008-07-09 [del.icio.us]</title><link>http://feeds.feedburner.com/~r/PatrickAltman/~3/331417302/altman</link><pubDate>Thu, 10 Jul 2008 00:00:00 -0500</pubDate><guid isPermaLink="false">http://del.icio.us/altman#2008-07-09</guid><content:encoded><![CDATA[<ul>
<li><a href="http://oebfare.com/blog/2008/jun/24/django-code_swarm/">Django code_swarm | oebfare</a></li>
</ul><img src="http://feeds.feedburner.com/~r/PatrickAltman/~4/331417302" height="1" width="1"/>]]></content:encoded><description>&lt;ul&gt;
&lt;li&gt;&lt;a href="http://oebfare.com/blog/2008/jun/24/django-code_swarm/"&gt;Django code_swarm | oebfare&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description><feedburner:origLink>http://del.icio.us/altman#2008-07-09</feedburner:origLink></item><item>
		<title>Ordering Edit Inlines</title>
		<link>http://feeds.feedburner.com/~r/PatrickAltman/~3/331372947/</link>
		<comments>http://paltman.com/2008/07/09/ordering-edit-inlines/#comments</comments>
		<pubDate>Thu, 10 Jul 2008 03:37:06 +0000</pubDate>
		<dc:creator>Patrick Altman</dc:creator>
		
		<category><![CDATA[development]]></category>

		<category><![CDATA[django]]></category>

		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://paltman.com/?p=465</guid>
		<description><![CDATA[In my continued experimentation with the newforms-admin branch of Django, I wanted to figure out how to order fields of an inline.  Looking at the documentation for inlines I saw there was not an ordering field.  

I had thought that there was but it turns out I was just mistaken in the object [...]]]></description>
			<content:encoded><![CDATA[<p><img style="padding-left:10px;" src="http://paltman.com/wp-content/uploads/2008/07/289142843-b04124fd3b-m.jpg" alt="289142843_b04124fd3b_m.jpg" border="0" width="240" height="180" align="right" />In my continued experimentation with the <a href="http://code.djangoproject.com/wiki/NewformsAdminBranch">newforms-admin</a> branch of Django, I wanted to figure out how to order fields of an inline.  Looking at the <a href="http://code.djangoproject.com/browser/django/branches/newforms-admin/docs/admin.txt#L503">documentation for inlines</a> I saw there was not an <code>ordering</code> field.  </p>

<p>I had thought that there was but it turns out I was just mistaken in the object hierarchy.  <code>InlineModelAdmin</code> inherits from <code>BaseModelAdmin</code> the same as <code>ModelAdmin</code> &#8212; I was thinking that <code>InlineModelAdmin</code> inherited from <code>ModelAdmin</code>.</p>

<p>Therefore, I had to determine a way to accomplish this via some spelunking through the code.  At first, I thought I&#8217;d just create my own template by inheriting or copying the <code>tabular.html</code> template.  After looking at it, I determined that I didn&#8217;t want to figure out how to do a <code>regroup</code> on <code>inline<em>admin</em>formset</code> or if even that was the proper way to try to order things in that template.</p>

<p>After a few minutes in the code I realized that I could just subclass <code>BaseInlineFormset</code> and specify the fields that I wanted to order by (in this example I will use <code>start<em>time</em></code> and <code>endtime</code>:</p>

<pre><code>from django.contrib import admin
from django.newforms.models import BaseInlineFormset

class MyOrderedFormset(BaseInlineFormset):
    def get_queryset(self):
        qs = super(SessionInlineFormset, self).get_queryset()
        return qs.order_by('start_time', 'end_time')

class MyOrderedInline(admin.TabularInline):
    model = MyModel
    extra = 1
    formset = MyOrderedFormset
</code></pre>

<p>That&#8217;s it.  Now after that section of inlines are ordered by <code>start<em>time</em></code> and <code>endtime</code>.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~f/PatrickAltman?a=gf7OwJ"><img src="http://feeds.feedburner.com/~f/PatrickAltman?i=gf7OwJ" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/PatrickAltman?a=dicryJ"><img src="http://feeds.feedburner.com/~f/PatrickAltman?i=dicryJ" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/PatrickAltman?a=MGFCQj"><img src="http://feeds.feedburner.com/~f/PatrickAltman?i=MGFCQj" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/PatrickAltman?a=2iXjyJ"><img src="http://feeds.feedburner.com/~f/PatrickAltman?i=2iXjyJ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/PatrickAltman/~4/331372947" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://paltman.com/2008/07/09/ordering-edit-inlines/feed/</wfw:commentRss>
		<creativeCommons:license>http://creativecommons.org/licenses/by-nc-nd/2.0/</creativeCommons:license><feedburner:origLink>http://paltman.com/2008/07/09/ordering-edit-inlines/</feedburner:origLink></item>
		<item>
		<title>Managing Database Changes in Django</title>
		<link>http://feeds.feedburner.com/~r/PatrickAltman/~3/325969082/</link>
		<comments>http://paltman.com/2008/07/03/managing-database-changes-in-django/#comments</comments>
		<pubDate>Thu, 03 Jul 2008 17:24:01 +0000</pubDate>
		<dc:creator>Patrick Altman</dc:creator>
		
		<category><![CDATA[development]]></category>

		<category><![CDATA[django]]></category>

		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://paltman.com/?p=463</guid>
		<description><![CDATA[Introduction

Managing database changes in a team environment working on a django project can be complicated.  I would imagine that there is no one size fits all solution and it would depend on team size and configuration, production database size, etc.

What I will outline here is a solution I developed for a small team that [...]]]></description>
			<content:encoded><![CDATA[<h4>Introduction</h4>

<p><img src="http://paltman.com/wp-content/uploads/2008/07/migration.jpg" alt="migration.jpg" style="margin-left: 10px; " border="0" width="250"  align="right" />Managing database changes in a team environment working on a django project can be complicated.  I would imagine that there is no one size fits all solution and it would depend on team size and configuration, production database size, etc.</p>

<p>What I will outline here is a solution I developed for a small team that I work with on a django based web application.  So far it has worked really well for allowing us to streamline database changes so we can stay in sync, deploy easily, and add small tweaks to the database (indexing, data manipulation, etc.) that is semi-automated.</p>

<p>The idea is based partly on Rails database migrations (though not has sleek and well put together) and a database versioning system that was used on a team that I have worked on previously using MS SQL in a corporate environment and a fairly decent team size.  In one sense it is not nearly as well put together as either of these two solutions, but at the same time, it is pretty much hands off and has been working well for us for a number of months now.</p>

<h4>Why not just use syncdb?</h4>

<p>As nice as <code>python manage.py syncdb</code> is when the project is getting started and is still in early phases, it becomes less and less useful, mostly in handling schema changes.  Since syncdb only creates a model if it doesn&#8217;t already exist in the database, we found ourselves outputting sql with <code>python manage.py sql APP_NAME</code> and then making adhoc <code>ALTER TABLE</code> scripts from the <code>CREATE</code> statements and passing them around to each other and then trying to remember the order to apply them in production.</p>

<p>Furthermore, syncdb left us without a way to alter data, add indexes, remove indexes, etc.  Granted that wasn&#8217;t it&#8217;s intent and I am certainly not trying to beat up syncdb &#8212; it does what it does well.</p>

<h4>The Solution</h4>

<p>In order to address this, it seemed the most natural thing was to have some structured and ordered way to write SQL scripts that were applied in a uniform manner so that it was repeatable.  This way we could run on our development databases, on test databases, and in deployment on production all the same way.</p>

<p>First step to achieve this was to version the database.  This is accomplished with a simple table that will keep track of what it has executed along with some other metadata primarily for reference purposes.</p>

<pre>
CREATE TABLE `versions` (
    `version` VARCHAR(200) NOT NULL, 
    `date_created` DATETIME NOT NULL,
    `sql_executed` LONGTEXT NULL,
    `svn_version` int null
);
</pre>

<p>In order to populate this table and keep versions consistent, the naming scheme of the sql scripts should follow something that lends itself to easy sorting:</p>

<pre>
YYYYMMDD-##.sql
</pre>

<p>where pound signs are zero-padded integers of the changes for the day.  In a team environment, it is probable that two people might be working on a database change at the same time and therefore would be use 01.  Whoever committed first would be able to keep the 01, the other developer would get a conflict message and need to rename his script to 02.</p>

<p>These scripts live in a <code>db/</code> folder in our project.  The name of this folder is not important, but it is important to keep all the sql scripts in a folder not mixed in with other files.</p>

<p>To tie it all together there is s simple python script that gets the list of applied changes from the database, gets a list of files in the current directory in order, filters out the ones that have been applied and then processes the remaining scripts.  In processing the scripts, it opens each script and splits script down into individual statements (splitting on the semicolon).  After execution of an entire script file is complete, the <code>versions</code> table is updated to reflect the applied version.</p>

<p>Running <code>python upgrade.py</code> by itself will simply print to standard output all the statements it plans to execute, so that they can be reviewed.  Running <code>python upgrade.py --execute</code> will actually execute the scripts.</p>

<p>If an error was found in executing a statement, processing stops immediately.</p>

<p>You can find <code>upgrade.py</code> in <a href="http://www.djangosnippets.org/snippets/849/">Django Snippet 849</a>.</p>

<h4>Improvements</h4>

<p>There are lots of improvements to this script that I&#8217;d like to add if I got around to it.    The ones I&#8217;d like to see most is support for &#8220;rollbacks&#8221;.  Comments and suggestions are most welcome!</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~f/PatrickAltman?a=i0TZTJ"><img src="http://feeds.feedburner.com/~f/PatrickAltman?i=i0TZTJ" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/PatrickAltman?a=3Bw4PJ"><img src="http://feeds.feedburner.com/~f/PatrickAltman?i=3Bw4PJ" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/PatrickAltman?a=lx1Vaj"><img src="http://feeds.feedburner.com/~f/PatrickAltman?i=lx1Vaj" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/PatrickAltman?a=QBwtBJ"><img src="http://feeds.feedburner.com/~f/PatrickAltman?i=QBwtBJ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/PatrickAltman/~4/325969082" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://paltman.com/2008/07/03/managing-database-changes-in-django/feed/</wfw:commentRss>
		<creativeCommons:license>http://creativecommons.org/licenses/by-nc-nd/2.0/</creativeCommons:license><feedburner:origLink>http://paltman.com/2008/07/03/managing-database-changes-in-django/</feedburner:origLink></item>
		<item>
		<title>Edit Inline Support for Generic Relations</title>
		<link>http://feeds.feedburner.com/~r/PatrickAltman/~3/322979182/</link>
		<comments>http://paltman.com/2008/06/29/edit-inline-support-for-generic-relations/#comments</comments>
		<pubDate>Mon, 30 Jun 2008 04:12:33 +0000</pubDate>
		<dc:creator>Patrick Altman</dc:creator>
		
		<category><![CDATA[development]]></category>

		<category><![CDATA[django]]></category>

		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://paltman.com/?p=461</guid>
		<description><![CDATA[Introduction

I&#8217;ve recently (past week or so) been digging into the newforms-admin branch of django.  I am really looking forward to this code line getting merged into trunk as there are tons of great work in this branch.  I especially like the separation of the admin code from the models.

Well, I&#8217;ll get to my [...]]]></description>
			<content:encoded><![CDATA[<h4>Introduction</h4>

<p><img src="http://paltman.com/wp-content/uploads/2008/06/234819164-513d775b4c-m.jpg" alt="234819164_513d775b4c_m.jpg" border="0" width="240" height="217" align="right" />I&#8217;ve recently (past week or so) been digging into the <a href="http://code.djangoproject.com/wiki/NewformsAdminBranch">newforms-admin branch of django</a>.  I am really looking forward to this code line getting merged into trunk as there are tons of great work in this branch.  I especially like the separation of the admin code from the models.</p>

<p>Well, I&#8217;ll get to my point.  </p>

<h4>The Problem</h4>

<p>I needed to be able to edit child records in the admin that were children through the use of <a href="http://www.djangoproject.com/documentation/models/generic_relations/">GenericRelations</a>.  I was told <a href="http://code.google.com/p/django-genericadmin/">about a solution on Google Code called django-genericadmin</a>, but it seemed dead and I could not get it to work.</p>

<p>The thing that seemed the closest to working was a patch on <a href="http://code.djangoproject.com/ticket/4667">ticket 4667</a> by Honza Kral and a variation on this patch in the <a href="http://www.djangosnippets.org/snippets/765/">Django Snippet 765</a>.  Neither of these worked for <a href="http://code.djangoproject.com/changeset/7771">r7771 of branches/newforms-admin</a>.</p>

<h4>The Solution</h4>

<p>I put the 765 snippet in a file called <code>generic.py</code> in the root of the django project I was working on and fiddled with it until I got it working.  I ended up needing to change an import, fix some variable names, and change the argument list order in one of the <strong>init</strong> methods.  I also added the <code>can<em>order</em></code> and <code>candelete</code> options to the <code>GenericInlineModelAdmin</code> class.</p>

<p>After I got it working isolated in <code>generic.py</code>, I then added the code to the <code>django/contrib/admin/options.py</code> file and created a <a href="http://code.djangoproject.com/attachment/ticket/4667/4667-generic-edit-inline.patch">new patch (after testing locally of course)</a>.  This patch has since been added to <a href="http://code.djangoproject.com/ticket/4667">ticket 4667</a>.  I also posted the full version that I had running in <code>generic.py</code> in <a href="http://www.djangosnippets.org/snippets/832/">snippet 832</a> in case someone wants to use it without patching their newforms-admin branch.</p>

<h4>Example of How to Use</h4>

<p>In order to get a sense for how to make use of this functionality, imagine you have a songs app that you use to model and record details about songs, you have built this generically so you can reuse it wisely in a number of different projects.  One project in particular has a need to to reference song data.  </p>

<p>You are building a home media inventory system and decide you want to catalog both your albums as well as your DVD collection, however, you want the ability to record what songs exist on both your albums as well as your DVDs as you are a fanatic about soundtracks.</p>

<p>So you have the following models (abbreviated for clarity):</p>

<pre>
# Media Collection App
class Album(models.Model):
    ...

class DVD(models.Model):
    ...

# Song App
class Song(models.Model):
    ...
</pre>

<p>Since you want to enable your <code>Song</code> model to relate to two other models generically, you decide to use Generic Relations like so:</p>

<pre>
from django.contrib.contenttypes.models import ContentType
from django.contrib.contenttypes import generic

class Song(models.Model):
    ...
    content_type = models.ForeignKey(ContentType)
    object_id = models.PositiveIntegerField()
    content_object = generic.GenericForeignKey()
</pre>

<p>and then on the models that you want to have 0 to Many child records that are songs:</p>

<pre>
from myproject.song.models import Song
from django.contrib.contenttypes import generic

class Album(models.Model):
    ...
    songs = generic.GenericRelation(Song)

class DVD(models.Model):
    ...
    songs = generic.GenericRelation(Song)
</pre>

<p>Now that&#8217;s all you need to do if you didn&#8217;t care about editing the data in the admin, however, since that is not the point of the article, here is what you need to do in your <code>admin.py</code> in the app that contains <code>Album</code> and <code>DVD</code>:</p>

<pre>
...
from myproject.song.models import Song
from myproject.generic import GenericTabularInline
### OR ###
### from django.contrib.admin.options import GenericTabularInline

class SongInline(GenericTabularInline):
    model = Song
    extra = 2 
    ct_field_name = 'content_type'
    id_field_name = 'object_id'

class AlbumOptions(admin.ModelAdmin):
    model = Album
    inlines = (SongInline,)

class DVDOptions(admin.ModelAdmin):
    model = DVD
    inlines = (SongInline,)

admin.site.register(Album, AlbumOptions)
admin.site.register(DVD, DVDOptions)
</pre>

<p>Now you should be able to add/remove songs when editing an <code>Album</code> or <code>DVD</code> in your admin.</p>

<p><strong>Update</strong>: Fixed typo in code sample above in setting the GenericForeignKey() &#8212; thanks FunkyBob!</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~f/PatrickAltman?a=ndw1ZI"><img src="http://feeds.feedburner.com/~f/PatrickAltman?i=ndw1ZI" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/PatrickAltman?a=jMkXcI"><img src="http://feeds.feedburner.com/~f/PatrickAltman?i=jMkXcI" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/PatrickAltman?a=tQoJni"><img src="http://feeds.feedburner.com/~f/PatrickAltman?i=tQoJni" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/PatrickAltman?a=Pq0R1I"><img src="http://feeds.feedburner.com/~f/PatrickAltman?i=Pq0R1I" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/PatrickAltman/~4/322979182" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://paltman.com/2008/06/29/edit-inline-support-for-generic-relations/feed/</wfw:commentRss>
		<creativeCommons:license>http://creativecommons.org/licenses/by-nc-nd/2.0/</creativeCommons:license><feedburner:origLink>http://paltman.com/2008/06/29/edit-inline-support-for-generic-relations/</feedburner:origLink></item>
		<item>
		<title>Play Like Tiger, Be Like Rocco</title>
		<link>http://feeds.feedburner.com/~r/PatrickAltman/~3/315869399/</link>
		<comments>http://paltman.com/2008/06/19/play-like-tiger-be-like-rocco/#comments</comments>
		<pubDate>Fri, 20 Jun 2008 02:11:35 +0000</pubDate>
		<dc:creator>Patrick Altman</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://paltman.com/?p=460</guid>
		<description><![CDATA[Sam Davidson writes:


  Because at the end of the day, as much as I want to play like Tiger, 
  I want to be like Rocco.
  
  Here&#8217;s to hoping the drive to be the best doesn&#8217;t compromise the need 
  to be ourselves.


I completely agree and thought that was [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://samdavidson.blogspot.com">Sam Davidson</a> writes:</p>

<blockquote>
  <p>Because at the end of the day, as much as I want to play like Tiger, 
  I want to be like Rocco.</p>
  
  <p>Here&#8217;s to hoping the drive to be the best doesn&#8217;t compromise the need 
  to be ourselves.</p>
</blockquote>

<p>I completely agree and thought that was well put.  <a href="http://samdavidson.blogspot.com/2008/06/tiger-andor-rocco.html">Read the rest of his post</a> to put a little context to that quote.  I admire both qualities &#8212; to be the very best in those things you find yourself doing, as well as, the character of humbleness and complete self-awareness.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~f/PatrickAltman?a=UYvYDI"><img src="http://feeds.feedburner.com/~f/PatrickAltman?i=UYvYDI" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/PatrickAltman?a=PYRJkI"><img src="http://feeds.feedburner.com/~f/PatrickAltman?i=PYRJkI" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/PatrickAltman?a=GBdH1i"><img src="http://feeds.feedburner.com/~f/PatrickAltman?i=GBdH1i" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/PatrickAltman?a=jfNRuI"><img src="http://feeds.feedburner.com/~f/PatrickAltman?i=jfNRuI" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/PatrickAltman/~4/315869399" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://paltman.com/2008/06/19/play-like-tiger-be-like-rocco/feed/</wfw:commentRss>
		<creativeCommons:license>http://creativecommons.org/licenses/by-nc-nd/2.0/</creativeCommons:license><feedburner:origLink>http://paltman.com/2008/06/19/play-like-tiger-be-like-rocco/</feedburner:origLink></item>
		<item>
		<title>Gore the Salesman</title>
		<link>http://feeds.feedburner.com/~r/PatrickAltman/~3/314278357/</link>
		<comments>http://paltman.com/2008/06/17/gore-the-salesman/#comments</comments>
		<pubDate>Wed, 18 Jun 2008 02:53:46 +0000</pubDate>
		<dc:creator>Patrick Altman</dc:creator>
		
		<category><![CDATA[news]]></category>

		<category><![CDATA[politics]]></category>

		<guid isPermaLink="false">http://paltman.com/?p=459</guid>
		<description><![CDATA[I have got to hand it to the man, he is quite the salesman.  He has sold America as well as the world a bill of goods on Man Made Global Warming.  In return for us buying his &#8220;truth&#8221;, he&#8217;s profited over $100 million, picked up a Nobel Peace Prize, and secure himself [...]]]></description>
			<content:encoded><![CDATA[<p>I have got to hand it to the man, he is quite the salesman.  He has sold America as well as the world a bill of goods on Man Made Global Warming.  In return for us buying his &#8220;truth&#8221;, he&#8217;s profited over $100 million, picked up a Nobel Peace Prize, and secure himself board positions on companies that want to show that they are environmentally friendly.  After all, Green is trendy now.</p>

<p>While Gore is raking in the awards and cash, he apparently doesn&#8217;t practice what he is preaching to everyone else.  He was busted last year on his energy consumption levels so he raced out and renovated his house to be more green.  After that investment last year, <a href="http://tennesseepolicy.org/main/article.php?article_id=764">he actually is pulling 10% more energy off the grid than he was before the solar panels</a>.  So much so, it comes out to 20 times the average household.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~f/PatrickAltman?a=Sm4zbI"><img src="http://feeds.feedburner.com/~f/PatrickAltman?i=Sm4zbI" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/PatrickAltman?a=uVy5zI"><img src="http://feeds.feedburner.com/~f/PatrickAltman?i=uVy5zI" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/PatrickAltman?a=djrr7i"><img src="http://feeds.feedburner.com/~f/PatrickAltman?i=djrr7i" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/PatrickAltman?a=9YxgiI"><img src="http://feeds.feedburner.com/~f/PatrickAltman?i=9YxgiI" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/PatrickAltman/~4/314278357" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://paltman.com/2008/06/17/gore-the-salesman/feed/</wfw:commentRss>
		<creativeCommons:license>http://creativecommons.org/licenses/by-nc-nd/2.0/</creativeCommons:license><feedburner:origLink>http://paltman.com/2008/06/17/gore-the-salesman/</feedburner:origLink></item>
		<item>
		<title>Merge Assistance using Subversion</title>
		<link>http://feeds.feedburner.com/~r/PatrickAltman/~3/313905690/</link>
		<comments>http://paltman.com/2008/06/17/merge-assistance-using-subversion/#comments</comments>
		<pubDate>Tue, 17 Jun 2008 16:10:45 +0000</pubDate>
		<dc:creator>Patrick Altman</dc:creator>
		
		<category><![CDATA[development]]></category>

		<guid isPermaLink="false">http://paltman.com/?p=458</guid>
		<description><![CDATA[Until I no longer have to work with Subversion (or subsequent releases of Subversion improve), dealing with merges will remain a hassle.  Oh, branching is super easy (just a simple server side copy command) but for those branches to be worth anything you need to be able to merge efficiently.

Yes, I worked with the [...]]]></description>
			<content:encoded><![CDATA[<p>Until I no longer have to work with <a href="http://subversion.tigris.org/">Subversion</a> (or subsequent releases of Subversion improve), dealing with merges will remain a hassle.  Oh, branching is super easy (just a simple server side copy command) but for those branches to be worth anything you need to be able to merge efficiently.</p>

<p>Yes, I worked with the <a href="http://www.orcaware.com/svn/wiki/Svnmerge.py">svnmerge.py hack</a> for a couple of months, but it was introducing strange merge bugs and just generally left me uncomfortable trusting to do all its magic (relying on certain property values to guide its merge operations).</p>

<p>In light of going back to the old style <code>svn merge</code>, where I relied on comments to tell me the last merge point, I wanted to make sure that the log messages were standardized.  Without some tool to help me do this, I was spending most of the merge time formatting comments and they ended up not being a reliable standard.</p>

<p>Taking advantage of the ability to output Subversion log messages into xml, I wrote a quick python script to generate single line summaries of the revision history:</p>

<pre>
# slfmt.py LOGFILE
from xml.dom.minidom import parse
import sys

doc = parse(sys.argv[1])

revisions = doc.getElementsByTagName('logentry')

for rev in revisions:
    r = rev.getAttribute('revision')
    try:
        msg = rev.getElementsByTagName('msg')[0].childNodes[0].data.split('\n')[0]
        print 'r%s - %s' % (r, msg)
    except IndexError:
        print 'r%s - NO LOG MESSAGE' % r
</pre>

<p>Then I wrapped up several other commands I find myself constantly running into a single bash script:</p>

<pre>
#!/bin/bash
# prepmerge REV BRANCH
REPO_ROOT=REPLACE_WITH_YOURS

svn merge -r$1:HEAD $REPO_ROOT/$2
echo "Merged r$1:HEAD from $2 into "`svn info | grep URL | awk '{ print $2 }'` > .merge-comment
echo "" >> .merge-comment
echo "  svn info:" >> .merge-comment
svn info $REPO_ROOT/$2 | awk '{ print "\t\t"$0 }' >> .merge-comment
echo "  change log:" >> .merge-comment
svn log --xml -r$1:HEAD $REPO_ROOT/$2 > .log.xml
python ~/bin/slfmt.py .log.xml | awk '{ print "\t\t"$0 }' >> .merge-comment
echo "" >> .merge-comment
echo "  files:" >> .merge-comment
svn st | grep -v "?" | awk '{ print "\t\t"$0 }' >> .merge-comment
</pre>

<p>With these two scripts in my ~/bin directory and assuming that my repo follows the standard /trunk, /branches, /tags, model, I can now do merges in three simple steps.  Assuming you would like to merge changes from a branch called <code>experimental</code> from HEAD into trunk, you would need a local working copy of trunk and be in the the root of that local path and then:</p>

<ul>
<li><code>~/bin/prepmerge HEAD branches/experimental</code></li>
<li>review changes, resolve conflicts</li>
<li><code>svn commit -F .merge-comment</code></li>
</ul>

<p>That&#8217;s it.  I am sure there are better/cleaner methods to this, but this now allows me to focus solely on resolving conflicts that emerge instead of fiddling with comments.  Of course, if everything I worked on was on <a href="http://git.or.cz/">git</a>, I wouldn&#8217;t have to fool with these types of scripts.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~f/PatrickAltman?a=J8zpBI"><img src="http://feeds.feedburner.com/~f/PatrickAltman?i=J8zpBI" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/PatrickAltman?a=2AxL9I"><img src="http://feeds.feedburner.com/~f/PatrickAltman?i=2AxL9I" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/PatrickAltman?a=rvFTni"><img src="http://feeds.feedburner.com/~f/PatrickAltman?i=rvFTni" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/PatrickAltman?a=4EonoI"><img src="http://feeds.feedburner.com/~f/PatrickAltman?i=4EonoI" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/PatrickAltman/~4/313905690" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://paltman.com/2008/06/17/merge-assistance-using-subversion/feed/</wfw:commentRss>
		<creativeCommons:license>http://creativecommons.org/licenses/by-nc-nd/2.0/</creativeCommons:license><feedburner:origLink>http://paltman.com/2008/06/17/merge-assistance-using-subversion/</feedburner:origLink></item>
		<item>
		<title>Driving in Hanoi</title>
		<link>http://feeds.feedburner.com/~r/PatrickAltman/~3/312143975/</link>
		<comments>http://paltman.com/2008/06/14/driving-in-hanoi/#comments</comments>
		<pubDate>Sun, 15 Jun 2008 02:48:10 +0000</pubDate>
		<dc:creator>Patrick Altman</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://paltman.com/?p=457</guid>
		<description><![CDATA[This is insane.

            Hanoi crazy night traffic from v!Nc3sl4s on Vimeo.
]]></description>
			<content:encoded><![CDATA[<p>This is insane.</p>

<p><object width="400" height="300">   <param name="allowfullscreen" value="true" />   <param name="allowscriptaccess" value="always" />   <param name="movie" value="http://www.vimeo.com/moogaloop.swf?clip_id=1072440&amp;server=www.vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" />   <embed src="http://www.vimeo.com/moogaloop.swf?clip_id=1072440&amp;server=www.vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="400" height="300"></embed></object><br /><a href="http://www.vimeo.com/1072440?pg=embed&#038;sec=1072440">Hanoi crazy night traffic</a> from <a href="http://www.vimeo.com/vinceslas?pg=embed&#038;sec=1072440">v!Nc3sl4s</a> on <a href="http://vimeo.com?pg=embed&#038;sec=1072440">Vimeo</a>.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~f/PatrickAltman?a=BBHviI"><img src="http://feeds.feedburner.com/~f/PatrickAltman?i=BBHviI" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/PatrickAltman?a=56lcFI"><img src="http://feeds.feedburner.com/~f/PatrickAltman?i=56lcFI" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/PatrickAltman?a=LYpE6i"><img src="http://feeds.feedburner.com/~f/PatrickAltman?i=LYpE6i" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/PatrickAltman?a=T4b4fI"><img src="http://feeds.feedburner.com/~f/PatrickAltman?i=T4b4fI" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/PatrickAltman/~4/312143975" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://paltman.com/2008/06/14/driving-in-hanoi/feed/</wfw:commentRss>
		<creativeCommons:license>http://creativecommons.org/licenses/by-nc-nd/2.0/</creativeCommons:license><feedburner:origLink>http://paltman.com/2008/06/14/driving-in-hanoi/</feedburner:origLink></item>
	</channel>
</rss><!-- Dynamic Page Served (once) in 1.091 seconds --><!-- Cached page served by WP-Cache -->
