<?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>does not validate &#187; django</title>
	<atom:link href="http://doesnotvalidate.com/tag/django/feed/" rel="self" type="application/rss+xml" />
	<link>http://doesnotvalidate.com</link>
	<description>Just another WordPress weblog</description>
	<lastBuildDate>Fri, 02 Jul 2010 06:31:14 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>SAROFSKY CORP. WEBSITE</title>
		<link>http://doesnotvalidate.com/2009/sarofsky-corp-website/</link>
		<comments>http://doesnotvalidate.com/2009/sarofsky-corp-website/#comments</comments>
		<pubDate>Tue, 12 May 2009 14:47:32 +0000</pubDate>
		<dc:creator>Dane</dc:creator>
				<category><![CDATA[left]]></category>
		<category><![CDATA[CMS]]></category>
		<category><![CDATA[Dane Hesseldahl]]></category>
		<category><![CDATA[django]]></category>
		<category><![CDATA[portfolio]]></category>

		<guid isPermaLink="false">http://doesnotvalidate.com/?p=924</guid>
		<description><![CDATA[A few weeks ago welikesmall and I launched a new site for Sarofsky Corp. a design driven production house based out of Chicago, IL.  They do amazing video work &#8211; I&#8217;m a big fan of theirs.
The site is running a 100% custom Django based CMS that allows users to easily upload new projects, including [...]]]></description>
			<content:encoded><![CDATA[<p>A few weeks ago <a href='http://www.welikesmall.com' target="_blank">welikesmall</a> and I launched a new site for Sarofsky Corp. a design driven production house based out of Chicago, IL.  They do amazing video work &#8211; I&#8217;m a big fan of theirs.</p>
<p><br/>The site is running a 100% custom Django based CMS that allows users to easily upload new projects, including production stills, multiple videos, downloadable media and other information.  It also includes an externally embeddable Flash video player that I wrote which allows users of the site to embed videos anywhere they want.</p>
<p><br/>I did all of the development work &#8211; which utilizes both heavy Python scripting on the backend, but also quite a bit of jQuery work on the front-end.  I ended up using SWFObject 1.5 because when I used 2.0 it wouldn&#8217;t allow me to effectively clear out an asynchronously loaded SWF and replace it with static content.  Odd.</p>
<p><br/>You can see this site @ <a href="http://www.sarofsky.com">http://www.sarofsky.com</a>.</p>
<p><a href="http://doesnotvalidate.com/wp-content/uploads/sarofsky1.jpg"><img class="alignnone size-medium wp-image-925" title="sarofsky1" src="http://doesnotvalidate.com/wp-content/uploads/sarofsky1-460x329.jpg" alt="" width="460" height="329" /></a></p>
<p><a href="http://doesnotvalidate.com/wp-content/uploads/sarofsky2.jpg"><img class="alignnone size-medium wp-image-926" title="sarofsky2" src="http://doesnotvalidate.com/wp-content/uploads/sarofsky2-460x329.jpg" alt="" width="460" height="329" /></a></p>
<p><a href="http://doesnotvalidate.com/wp-content/uploads/sarofsky4.jpg"><img class="alignnone size-medium wp-image-927" title="sarofsky4" src="http://doesnotvalidate.com/wp-content/uploads/sarofsky4-460x329.jpg" alt="" width="460" height="329" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://doesnotvalidate.com/2009/sarofsky-corp-website/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>ODOPOD.COM = COMM ARTS WEB PICK OF THE DAY</title>
		<link>http://doesnotvalidate.com/2009/odopodcom-comm-arts-web-pick-of-the-day/</link>
		<comments>http://doesnotvalidate.com/2009/odopodcom-comm-arts-web-pick-of-the-day/#comments</comments>
		<pubDate>Wed, 15 Apr 2009 19:23:18 +0000</pubDate>
		<dc:creator>Dane</dc:creator>
				<category><![CDATA[left]]></category>
		<category><![CDATA[Awards]]></category>
		<category><![CDATA[Comm Arts]]></category>
		<category><![CDATA[django]]></category>
		<category><![CDATA[odopod]]></category>
		<category><![CDATA[portfolio]]></category>
		<category><![CDATA[Web Development]]></category>

		<guid isPermaLink="false">http://doesnotvalidate.com/?p=915</guid>
		<description><![CDATA[This is pretty exciting for me, and I think that after all of the hard work we put into that site the entire team at Odopod deserves a hearty congratulations&#8230; I&#8217;m really glad to see this site receiving the recognition that it deserves.


&#8220;Built to grow, on an easy-to-use content management system with tagged projects, and [...]]]></description>
			<content:encoded><![CDATA[<p>This is pretty exciting for me, and I think that after all of the hard work we put into that site the entire team at Odopod deserves a hearty congratulations&#8230; I&#8217;m really glad to see this site receiving the recognition that it deserves.</p>
<p><br/><a href="http://www.commarts.com/web-sites/odopod.html"><img src="http://doesnotvalidate.com/wp-content/uploads/odopod_commarts-460x345.jpg" alt="" title="odopod_commarts" width="460" height="345" class="alignnone size-medium wp-image-916" /></a></p>
<p><br/>
<div style='background-color: #cccccc; padding: 10px; font-style: italic;'>&#8220;Built to grow, on an easy-to-use content management system with tagged projects, and designed on a strict 16-pixel grid, this redesign is a clear showcase of the studio&#8217;s work.&#8221;</div>
<p><br/>Also &#8211; it&#8217;s nice to see the CMS getting some of the attention &#8211; although I&#8217;m biased &#8211; because I wrote this one.</p>
]]></content:encoded>
			<wfw:commentRss>http://doesnotvalidate.com/2009/odopodcom-comm-arts-web-pick-of-the-day/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Recent Launches</title>
		<link>http://doesnotvalidate.com/2009/recent-launches/</link>
		<comments>http://doesnotvalidate.com/2009/recent-launches/#comments</comments>
		<pubDate>Fri, 27 Feb 2009 22:50:08 +0000</pubDate>
		<dc:creator>Dane</dc:creator>
				<category><![CDATA[left]]></category>
		<category><![CDATA[django]]></category>
		<category><![CDATA[portfolio]]></category>
		<category><![CDATA[Web Development]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://doesnotvalidate.com/?p=869</guid>
		<description><![CDATA[In the past few months I&#8217;ve launched a few projects &#8211; I&#8217;m planning an in-depth post about each of them, but for now here&#8217;s some images and links.

feliciaday.com

odopod.com
]]></description>
			<content:encoded><![CDATA[<p>In the past few months I&#8217;ve launched a few projects &#8211; I&#8217;m planning an in-depth post about each of them, but for now here&#8217;s some images and links.</p>
<p><br/><a href="http://www.feliciaday.com"><img src="http://doesnotvalidate.com/wp-content/uploads/picture-2-460x320.png" alt="" title="picture-2" width="460" height="320" class="alignnone size-medium wp-image-870" /></a><br />
<a href="http://www.feliciaday.com">feliciaday.com</a></p>
<p><br/><a href="http://odopod.com"><img src="http://doesnotvalidate.com/wp-content/uploads/125726543749a493d72f19f-414x600.png" alt="" title="odopod.com" width="414" height="600" class="alignnone size-medium wp-image-874" /></a><br />
<a href="http://www.odopod.com">odopod.com</a></p>
]]></content:encoded>
			<wfw:commentRss>http://doesnotvalidate.com/2009/recent-launches/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>RESIZING TRANSPARENT IMAGES WITH DJANGO + PIL</title>
		<link>http://doesnotvalidate.com/2009/resizing-transparent-images-with-django-pil/</link>
		<comments>http://doesnotvalidate.com/2009/resizing-transparent-images-with-django-pil/#comments</comments>
		<pubDate>Mon, 02 Feb 2009 00:59:46 +0000</pubDate>
		<dc:creator>Dane</dc:creator>
				<category><![CDATA[left]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[django]]></category>
		<category><![CDATA[PIL]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Web Development]]></category>

		<guid isPermaLink="false">http://doesnotvalidate.com/?p=828</guid>
		<description><![CDATA[I can&#8217;t seem to get sorl thumbnail to play nice with transparent PNGs, it keeps adding weird black and grey backgrounds because it&#8217;s doesn&#8217;t maintain the alpha channel in it&#8217;s output.


Python&#8217;s PIL Module uses different versions of the Image.save() method depending on the format of the image being saved.  sorl thumbnail uses the following [...]]]></description>
			<content:encoded><![CDATA[<p>I can&#8217;t seem to get <a href="http://code.google.com/p/sorl-thumbnail/" target="_blank">sorl thumbnail</a> to play nice with transparent PNGs, it keeps adding weird black and grey backgrounds because it&#8217;s doesn&#8217;t maintain the alpha channel in it&#8217;s output.</p>
<div style="text-align: center; padding: 10px;"><img style="margin-right: 60px;" src="http://comixapp.webfactional.com/assets/gfx/logotest1.png" alt="" /><br />
<img src="http://comixapp.webfactional.com/assets/gfx/logotest2.png" alt="" /></div>
<p><a href="http://www.pythonware.com/library/pil/handbook/format-png.htm">Python&#8217;s PIL Module</a> uses different versions of the <a href="http://www.pythonware.com/library/pil/handbook/image.htm" target="_blank">Image.save()</a> method depending on the format of the image being saved.  <a href="http://code.google.com/p/sorl-thumbnail/">sorl thumbnail</a> uses the following call when it creates the final image output:<br />
<br/></p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;">im.<span style="color: black;">save</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span>.<span style="color: black;">dest</span>, quality=<span style="color: #008000;">self</span>.<span style="color: black;">quality</span><span style="color: black;">&#41;</span></pre></div></div>

<p>This call utilizes a parameter call <em>quality</em> which, according to the documentation is only available on JPEGs.  Even changing the <em>THUMBNAIL_EXTENSION</em> in my settings.py file to &#8220;png&#8221; still didn&#8217;t make it maintain the alpha channel the way I had expected it to. <a href="http://code.google.com/p/sorl-thumbnail/issues/detail?id=56">Bug 56</a> is currently open for this issue at the <a href="http://code.google.com/p/sorl-thumbnail/" target="_blank">sorl thumbnail project home</a>.<br />
<br/><strong>The solution</strong><br />
<br/>I wanted to setup a way to pull the images off of the transparency resize them and then drop them on an opaque background of it&#8217;s own independent size.<br />
<br/>So the first thing I did was to load in an image via PIL:</p>
<div style="text-align: center; padding: 20px;"><img src="http://comixapp.webfactional.com/assets/gfx/nike-sb_logo.png" alt="" /></div>
<p><br/></p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;">im = Image.<span style="color: #008000;">open</span><span style="color: black;">&#40;</span>filename<span style="color: black;">&#41;</span></pre></div></div>

<p>So now that we&#8217;ve got our image we need to create the opaque background for it&#8230; right now we&#8217;ll just use a solid black one.  Use the following PIL method call to create a background at an identical size to the original image:</p>
<div style="text-align: center; padding: 20px;"><img src="http://comixapp.webfactional.com/assets/gfx/logotest4.png" alt="" /></div>
<p><br/></p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;">bg = Image.<span style="color: #dc143c;">new</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'RGBA'</span>, im.<span style="color: black;">size</span>, <span style="color: black;">&#40;</span><span style="color: #ff4500;">0</span>, <span style="color: #ff4500;">0</span>, <span style="color: #ff4500;">0</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span></pre></div></div>

<p>At this point I&#8217;ve got two images, <strong>im</strong> the logo file and <strong>bg</strong> the opaque black background. Using the PIL <em>paste</em> method I can stick there two together.</p>
<p><br/></p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;">bg.<span style="color: black;">paste</span><span style="color: black;">&#40;</span>im<span style="color: black;">&#41;</span></pre></div></div>

<p>which gives us the following image:</p>
<div style="text-align: center; padding: 10px;"><img src="http://comixapp.webfactional.com/assets/gfx/logotest3.png" alt="" /></div>
<p>If you&#8217;re like me, you&#8217;re like &#8211; &#8220;WHAT THE HELL?!?! I just pasted a transparent PNG on a black background, why is it all white???&#8221;  The answer is because you didn&#8217;t tell Python to maintain the alpha channel when it pasted.<br />
<br/>The way that PIL deals with transparency when saving or pasting PNGs (that have a mode of &#8220;RGBA&#8221; or &#8220;P&#8221;) is to allow for a &#8220;transparency&#8221; parameter which is an integer from 0 &#8211; 255 which is sort of like a transparency tolerance for that image, and represents the &#8220;opaqueness&#8221; of the pixels to maintain transparency for.  Since this is different for every image what we need to do is just maintain the value of the PNG we&#8217;re working with.<br />
<br/><em>Note:</em> that if you paste an &#8220;RGBA&#8221; image (WE ARE!), the alpha band is ignored in a paste. You can work around this by using the same image as both source image and mask &#8211; like we have below.  More information at the <a href="http://www.pythonware.com/library/pil/handbook/image.htm" target="_blank">PIL Handbook</a><br />
<br/>Change the paste call to look like this:<br />
<br/></p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;">bg.<span style="color: black;">paste</span><span style="color: black;">&#40;</span>im, <span style="color: black;">&#40;</span><span style="color: #ff4500;">0</span>, <span style="color: #ff4500;">0</span><span style="color: black;">&#41;</span>, im<span style="color: black;">&#41;</span></pre></div></div>

<p>which produces this:</p>
<div style="text-align: center; padding: 20px;"><img src="http://comixapp.webfactional.com/assets/gfx/logotest5.png" alt="" /></div>
<p><span id="more-828"></span></p>
<p>This call has two additional parameters.  The first is is either a 2-tuple giving the upper left corner, a 4-tuple defining the left, upper, right, and lower pixel coordinate, or None (same as (0, 0)) for image we&#8217;re pasting in &#8211; for this we&#8217;re pasting it in at (0,0) &#8211; and the second is transparency value &#8211; which we&#8217;re just telling them use the the value from <strong>im</strong>.<br />
<br/>Although close this still isn&#8217;t quite right.  There are a bunch of extra transparent pixels which create the strips of blank vertical space on the top and bottom of the image&#8230; lets get rid of them.</p>
<p><br/>Add the following code right below the first image.open call like this:<br />
<br/></p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;">im = Image.<span style="color: #008000;">open</span><span style="color: black;">&#40;</span>filename<span style="color: black;">&#41;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">#convert to black and white</span>
invert = ImageChops.<span style="color: black;">invert</span><span style="color: black;">&#40;</span>im<span style="color: black;">&#41;</span>
bw = im.<span style="color: black;">convert</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;1&quot;</span><span style="color: black;">&#41;</span>
bw = bw.<span style="color: #008000;">filter</span><span style="color: black;">&#40;</span>ImageFilter.<span style="color: black;">MedianFilter</span><span style="color: black;">&#41;</span>
&nbsp;
<span style="color: #808080; font-style: italic;"># add a white bg and do a difference</span>
diffbg = Image.<span style="color: #dc143c;">new</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;1&quot;</span>, im.<span style="color: black;">size</span>, <span style="color: #ff4500;">255</span><span style="color: black;">&#41;</span>
diff = ImageChops.<span style="color: black;">difference</span><span style="color: black;">&#40;</span>bw, diffbg<span style="color: black;">&#41;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">#use the difference to create a bounding box</span>
bbox = diff.<span style="color: black;">getbbox</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">#crop to that bounding box</span>
<span style="color: #ff7700;font-weight:bold;">if</span> bbox:
      im = im.<span style="color: black;">crop</span><span style="color: black;">&#40;</span>bbox<span style="color: black;">&#41;</span></pre></div></div>

<p>and we get just the non-transparent parts of the original:</p>
<div style="text-align: center; padding: 20px;"><img src="http://comixapp.webfactional.com/assets/gfx/logotest6.png" alt="" /></div>
<p>The next step is to be able to dynamically control the color of the opaque background. In order to do this we need to accept a new parameter which should be a hex color value encased in quotes.  Change the line where you create the bg image to look like this (where <em>bgcolor</em> is the quoted hex color string):<br />
<br/></p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;">bg = Image.<span style="color: #dc143c;">new</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'RGBA'</span>, im.<span style="color: black;">size</span>, ImageColor.<span style="color: black;">getcolor</span><span style="color: black;">&#40;</span>bgcolor<span style="color: black;">&#91;</span><span style="color: #ff4500;">1</span>:-<span style="color: #ff4500;">1</span><span style="color: black;">&#93;</span>, <span style="color: #483d8b;">'RGB'</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span></pre></div></div>

<p>So if we passed the string &#8220;#FF0000&#8243; as bgcolor we get this:</p>
<div style="text-align: center; padding: 20px;"><img src="http://comixapp.webfactional.com/assets/gfx/logotest7.png" alt="" /></div>
<p>Which is rad.  Now we want to pass in two different size values.  The first one is a maximum width / maximum height tuple for the logo.  Thsi value will be used to re-size the logo according to it&#8217;s aspect ratio to one of these maximum values.  The second value is also a tuple and is the absolute width and height of the background image.  Change your function to accept these 2 new parameters &#8211; I&#8217;m writing a custom Django Template tag which I will share at the end.</p>
<p><br/>Now change the line where you create the bg image, with these two lines of code where logo_width and logo_height are the integer values of your logo size tuple, and the same for bg_width and bg_height:<br />
<br/></p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;">im.<span style="color: black;">thumbnail</span><span style="color: black;">&#40;</span><span style="color: black;">&#91;</span>logo_width, logo_height<span style="color: black;">&#93;</span>, Image.<span style="color: black;">ANTIALIAS</span><span style="color: black;">&#41;</span>
bg = Image.<span style="color: #dc143c;">new</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'RGBA'</span>, <span style="color: black;">&#40;</span>bg_width,bg_height,<span style="color: black;">&#41;</span>, ImageColor.<span style="color: black;">getcolor</span><span style="color: black;">&#40;</span>bgcolor<span style="color: black;">&#91;</span><span style="color: #ff4500;">1</span>:-<span style="color: #ff4500;">1</span><span style="color: black;">&#93;</span>, <span style="color: #483d8b;">'RGB'</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span></pre></div></div>

<div style="text-align: center; padding: 20px;"><img src="http://comixapp.webfactional.com/assets/gfx/logotest8.png" alt="" /></div>
<p>So now we&#8217;ve got independent sizes, lets center the logo in the background.  Replace the paste call from before with this code<br />
<br/></p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;">image_width, image_height = im.<span style="color: black;">size</span>
xpos = <span style="color: black;">&#40;</span>bg_width/<span style="color: #ff4500;">2</span><span style="color: black;">&#41;</span> - <span style="color: black;">&#40;</span>image_width/<span style="color: #ff4500;">2</span><span style="color: black;">&#41;</span>
ypos = <span style="color: black;">&#40;</span>bg_height/<span style="color: #ff4500;">2</span><span style="color: black;">&#41;</span> - <span style="color: black;">&#40;</span>image_height/<span style="color: #ff4500;">2</span><span style="color: black;">&#41;</span>
&nbsp;
bg.<span style="color: black;">paste</span><span style="color: black;">&#40;</span>im, <span style="color: black;">&#40;</span>xpos, ypos<span style="color: black;">&#41;</span>, im<span style="color: black;">&#41;</span></pre></div></div>

<p>so if we call the function like with the following parameters:</p>
<div style="margin: 20px 0; padding: 30px; background-color: #eeeeee;"><strong>background-color</strong> = &#8220;#FF0000&#8243;<br />
<strong>logo_size</strong> = [200x200]<br />
<strong>bg_size</strong> = [200x200]</div>
<p>produces this image:</p>
<div style="text-align: left; padding: 20px 0;"><img src="http://comixapp.webfactional.com/assets/gfx/logotest9.png" alt="" /></div>
<p>and calling it with these parameters:</p>
<div style="margin: 20px 0; padding: 30px; background-color: #eeeeee;"><strong>background-color</strong> = &#8220;#FF0000&#8243;<br />
<strong>logo_size</strong> = [200x200]<br />
<strong>bg_size</strong> = [400x300]</div>
<p>produces this image:</p>
<div style="text-align: left; padding: 20px 0;"><img src="http://comixapp.webfactional.com/assets/gfx/logotest10.png" alt="" /></div>
<p>and finally(!) calling the function with these parameters:</p>
<div style="margin: 20px 0; padding: 30px; background-color: #eeeeee;"><strong>background-color</strong> = &#8220;#000000&#8243;<br />
<strong>logo_size</strong> = [100x100]<br />
<strong>bg_size</strong> = [200x200]</div>
<p>produces this image:</p>
<div style="text-align: left; padding: 10px 0;"><img src="http://comixapp.webfactional.com/assets/gfx/logotest12.png" alt="" /></div>
]]></content:encoded>
			<wfw:commentRss>http://doesnotvalidate.com/2009/resizing-transparent-images-with-django-pil/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Rebus Farms</title>
		<link>http://doesnotvalidate.com/2008/rebus-farms/</link>
		<comments>http://doesnotvalidate.com/2008/rebus-farms/#comments</comments>
		<pubDate>Mon, 22 Sep 2008 23:10:09 +0000</pubDate>
		<dc:creator>Dane</dc:creator>
				<category><![CDATA[left]]></category>
		<category><![CDATA[django]]></category>
		<category><![CDATA[flash]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[portfolio]]></category>
		<category><![CDATA[projects]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[welikesmall]]></category>

		<guid isPermaLink="false">http://doesnotvalidate.com/?p=254</guid>
		<description><![CDATA[
URL: http://www.rebusfarms.com
AGENCY: Freelance
LAUNCH: August, 2008
ROLE: Lead Developer
TECHNOLOGIES: Flash, Python + Django, XHTML + CSS, jQuery
]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.rebusfarms.com/" target="_blank"><img src="http://doesnotvalidate.com/wp-content/uploads/rebus.jpg" alt="" title="rebus farms launches" width="460" height="371" class="alignnone size-full wp-image-97" /></a></p>
<p><strong>URL:</strong> <a href='http://www.rebusfarms.com' target="_blank">http://www.rebusfarms.com</a><br />
<strong>AGENCY:</strong> Freelance<br />
<strong>LAUNCH:</strong> August, 2008<br />
<strong>ROLE:</strong> Lead Developer<br />
<strong>TECHNOLOGIES:</strong> Flash, Python + Django, XHTML + CSS, jQuery</p>
]]></content:encoded>
			<wfw:commentRss>http://doesnotvalidate.com/2008/rebus-farms/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>UTAH OFFICE OF TOURISM</title>
		<link>http://doesnotvalidate.com/2008/utah-office-of-tourism/</link>
		<comments>http://doesnotvalidate.com/2008/utah-office-of-tourism/#comments</comments>
		<pubDate>Sun, 21 Sep 2008 22:10:46 +0000</pubDate>
		<dc:creator>Dane</dc:creator>
				<category><![CDATA[left]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[Dane Hesseldahl]]></category>
		<category><![CDATA[django]]></category>
		<category><![CDATA[flash]]></category>
		<category><![CDATA[portfolio]]></category>
		<category><![CDATA[projects]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Struck]]></category>
		<category><![CDATA[Web Development]]></category>

		<guid isPermaLink="false">http://doesnotvalidate.com/?p=166</guid>
		<description><![CDATA[
URL: http://utah.travel/
AGENCY: Struck Creative
LAUNCH: March 2008
ROLE: Lead Developer
TECHNOLOGIES: Flash, Python + Django
Flash based site I did while at Struck for the Utah Office of Tourism.  The data is all dynamic and is pulled from a Django based CMS that allow the client to update the content at any time.
]]></description>
			<content:encoded><![CDATA[<p><a href="http://utah.travel/"><img src="http://doesnotvalidate.com/wp-content/uploads/utah.jpg" alt="" title="utah" width="460" height="301" class="alignnone size-full wp-image-167" /></a></p>
<p><br/><strong>URL: </strong><a href='http://utah.travel/'>http://utah.travel/</a><br />
<strong>AGENCY: </strong><a href='http://www.struckcreative.com'>Struck Creative</a><br />
<strong>LAUNCH: </strong>March 2008<br />
<strong>ROLE: </strong>Lead Developer<br />
<strong>TECHNOLOGIES: </strong>Flash, Python + Django</p>
<p><br/>Flash based site I did while at Struck for the Utah Office of Tourism.  The data is all dynamic and is pulled from a Django based CMS that allow the client to update the content at any time.</p>
]]></content:encoded>
			<wfw:commentRss>http://doesnotvalidate.com/2008/utah-office-of-tourism/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PYTHON: BACKUP TO S3</title>
		<link>http://doesnotvalidate.com/2008/python-backup-to-s3/</link>
		<comments>http://doesnotvalidate.com/2008/python-backup-to-s3/#comments</comments>
		<pubDate>Sun, 21 Sep 2008 17:37:54 +0000</pubDate>
		<dc:creator>Dane</dc:creator>
				<category><![CDATA[left]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[django]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[S3]]></category>
		<category><![CDATA[Simon Willision]]></category>

		<guid isPermaLink="false">http://doesnotvalidate.com/?p=102</guid>
		<description><![CDATA[Djangonaut Simon Willison has published a simple Python-based S3 backup script.
&#8220;One simple strategy for backing up a server to S3: a single backup_to_s3 function which takes your S3 authentication details plus three (optional) dictionaries specifying directories, files and commands to be backed up.&#8221;


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
backup_to_s3&#40;
    access_key = 'your-access-key',
    secret_access_key = 'your-secret-access-key',
 [...]]]></description>
			<content:encoded><![CDATA[<p>Djangonaut <a href='http://simonwillison.net/' target="_blank">Simon Willison</a> has published a <a href="http://simonwillison.net/static/2008/backup_to_s3.py.txt">simple Python-based S3 backup script</a>.<br />
<br/><em>&#8220;One simple strategy for backing up a server to S3: a single backup_to_s3 function which takes your S3 authentication details plus three (optional) dictionaries specifying directories, files and commands to be backed up.&#8221;</em><br />
<br/></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
</pre></td><td class="code"><pre class="python" style="font-family:monospace;">backup_to_s3<span style="color: black;">&#40;</span>
    access_key = <span style="color: #483d8b;">'your-access-key'</span>,
    secret_access_key = <span style="color: #483d8b;">'your-secret-access-key'</span>,
    bucket = <span style="color: #483d8b;">'your-backup-bucket'</span>,
    directories = <span style="color: black;">&#123;</span>
        <span style="color: #483d8b;">'svnroot'</span>: <span style="color: #483d8b;">'/var/svnroot'</span>,
        <span style="color: #483d8b;">'www'</span>: <span style="color: #483d8b;">'/var/www'</span>,
    <span style="color: black;">&#125;</span>,
    <span style="color: #dc143c;">commands</span> = <span style="color: black;">&#123;</span>
        <span style="color: #483d8b;">'test.sql'</span>: <span style="color: #483d8b;">'mysqldump -u root test'</span>,
    <span style="color: black;">&#125;</span>,
    files = <span style="color: black;">&#123;</span>
        <span style="color: #483d8b;">'passwd'</span>: <span style="color: #483d8b;">'/etc/passwd'</span>,
    <span style="color: black;">&#125;</span>
<span style="color: black;">&#41;</span></pre></td></tr></table></div>

]]></content:encoded>
			<wfw:commentRss>http://doesnotvalidate.com/2008/python-backup-to-s3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>REBUS FARMS LAUNCHES!</title>
		<link>http://doesnotvalidate.com/2008/rebus-farms-launches/</link>
		<comments>http://doesnotvalidate.com/2008/rebus-farms-launches/#comments</comments>
		<pubDate>Sun, 21 Sep 2008 17:20:40 +0000</pubDate>
		<dc:creator>Dane</dc:creator>
				<category><![CDATA[left]]></category>
		<category><![CDATA[Dane Hesseldahl]]></category>
		<category><![CDATA[django]]></category>
		<category><![CDATA[Freelance]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[portfolio]]></category>
		<category><![CDATA[projects]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[rebus farms]]></category>
		<category><![CDATA[Web Development]]></category>

		<guid isPermaLink="false">http://doesnotvalidate.com/?p=96</guid>
		<description><![CDATA[
I worked with the guys over in SLC @ welikesmall to create a Python + Django powered CMS driven site for the Chicago-based production company Rebus Farms.  With the magic of jQuery, I was able to make an effective single-page portfolio site to showcase their video work.
]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.rebusfarms.com/" target="_blank"><img src="http://doesnotvalidate.com/wp-content/uploads/rebus.jpg" alt="" title="rebus farms launches" width="460" height="371" class="alignnone size-full wp-image-97" /></a><br />
I worked with the guys over in SLC @ <a href='http://www.welikesmall.com/'>welikesmall</a> to create a Python + Django powered CMS driven site for the Chicago-based production company <a href="http://www.rebusfarms.com/" target="_blank">Rebus Farms</a>.  With the magic of <a href='http://jquery.com/' target='_blank'>jQuery</a>, I was able to make an effective single-page portfolio site to showcase their video work.</p>
]]></content:encoded>
			<wfw:commentRss>http://doesnotvalidate.com/2008/rebus-farms-launches/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>FLICKR is for KTTNS!</title>
		<link>http://doesnotvalidate.com/2008/flickr-is-for-kttns/</link>
		<comments>http://doesnotvalidate.com/2008/flickr-is-for-kttns/#comments</comments>
		<pubDate>Wed, 17 Sep 2008 22:51:09 +0000</pubDate>
		<dc:creator>Dane</dc:creator>
				<category><![CDATA[left]]></category>
		<category><![CDATA[django]]></category>
		<category><![CDATA[flickr]]></category>
		<category><![CDATA[video]]></category>

		<guid isPermaLink="false">http://doesnotvalidate.com/?p=32</guid>
		<description><![CDATA[
Cal Henderson (the fellow who has kept Flickr from crashing all these years) presenting at djangocon, on the subject of “Why I Hate Django”.
]]></description>
			<content:encoded><![CDATA[<p><object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/i6Fr65PFqfk&#038;color1=0xb1b1b1&#038;color2=0xcfcfcf&#038;hl=en&#038;fs=1"></param><param name="allowFullScreen" value="true"></param><embed src="http://www.youtube.com/v/i6Fr65PFqfk&#038;color1=0xb1b1b1&#038;color2=0xcfcfcf&#038;hl=en&#038;fs=1" type="application/x-shockwave-flash" allowfullscreen="true" width="425" height="344"></embed></object><br />
<br/><a href='http://www.flickr.com/photos/bees'>Cal Henderson</a> (the fellow who has kept Flickr from crashing all these years) presenting at <a href='http://www.djangocon.org/'>djangocon</a>, on the subject of “Why I Hate Django”.</p>
]]></content:encoded>
			<wfw:commentRss>http://doesnotvalidate.com/2008/flickr-is-for-kttns/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
