<?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; code</title>
	<atom:link href="http://doesnotvalidate.com/tag/code/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>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>Wordpress: Get Posts By Custom Field Values</title>
		<link>http://doesnotvalidate.com/2009/wordpress-get-posts-by-custom-fields/</link>
		<comments>http://doesnotvalidate.com/2009/wordpress-get-posts-by-custom-fields/#comments</comments>
		<pubDate>Sun, 04 Jan 2009 00:07:42 +0000</pubDate>
		<dc:creator>Dane</dc:creator>
				<category><![CDATA[left]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[custom fields]]></category>
		<category><![CDATA[Dane Hesseldahl]]></category>
		<category><![CDATA[Web Development]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://doesnotvalidate.com/?p=726</guid>
		<description><![CDATA[Thought Wordpress nerds might find this useful, a function to retrieve a list of posts by passing in a custom filed key=>value pair, with an optional count parameter.
Just drop this in your &#8220;functions.php&#8221;:


function getPostsByMeta&#40;$key, $value, $count = -1&#41;
&#123;
    global $wpdb;
&#160;
    $sql = &#34;SELECT DISTINCT wp_posts.post_title,
    wp_posts.ID [...]]]></description>
			<content:encoded><![CDATA[<p>Thought Wordpress nerds might find this useful, a function to retrieve a list of posts by passing in a custom filed key=>value pair, with an optional count parameter.<br />
<br/>Just drop this in your &#8220;functions.php&#8221;:<br />
<br/></p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">function</span> getPostsByMeta<span style="color: #009900;">&#40;</span><span style="color: #000088;">$key</span><span style="color: #339933;">,</span> <span style="color: #000088;">$value</span><span style="color: #339933;">,</span> <span style="color: #000088;">$count</span> <span style="color: #339933;">=</span> <span style="color: #339933;">-</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">global</span> <span style="color: #000088;">$wpdb</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #000088;">$sql</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;SELECT DISTINCT wp_posts.post_title,
    wp_posts.ID FROM <span style="color: #006699; font-weight: bold;">$wpdb-&gt;posts</span>,
    <span style="color: #006699; font-weight: bold;">$wpdb-&gt;postmeta</span> 
    WHERE <span style="color: #006699; font-weight: bold;">$wpdb-&gt;posts</span>.ID = <span style="color: #006699; font-weight: bold;">$wpdb-&gt;postmeta</span>.post_id 
    AND <span style="color: #006699; font-weight: bold;">$wpdb-&gt;posts</span>.post_status = 'publish' 
    AND <span style="color: #006699; font-weight: bold;">$wpdb-&gt;postmeta</span>.meta_key = '<span style="color: #006699; font-weight: bold;">$key</span>' 
    AND <span style="color: #006699; font-weight: bold;">$wpdb-&gt;postmeta</span>.meta_value = '<span style="color: #006699; font-weight: bold;">$value</span>' 
    ORDER BY post_date DESC&quot;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #000088;">$sql</span> <span style="color: #339933;">.=</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$count</span> <span style="color: #339933;">!=</span> <span style="color: #339933;">-</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span> ? <span style="color: #0000ff;">&quot; LIMIT &quot;</span><span style="color: #339933;">.</span><span style="color: #000088;">$count</span> <span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;&quot;</span> <span style="color: #339933;">;</span> 
&nbsp;
    <span style="color: #b1b100;">return</span> <span style="color: #000088;">$wpdb</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">get_results</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$sql</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>and then you can use it like this:<br />
<br/></p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;">$news_home = getPostsByMeta('_tb_post_section', 'News', 3); 
&nbsp;
<span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">foreach</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$news_home</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$news</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">:</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>
    &lt;!-- OUTPUT TEMPLATED HTML --&gt;
<span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">endforeach</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://doesnotvalidate.com/2009/wordpress-get-posts-by-custom-fields/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Files from Wordcamp Session</title>
		<link>http://doesnotvalidate.com/2008/files-from-wordcamp-session/</link>
		<comments>http://doesnotvalidate.com/2008/files-from-wordcamp-session/#comments</comments>
		<pubDate>Sun, 28 Sep 2008 00:53:05 +0000</pubDate>
		<dc:creator>Dane</dc:creator>
				<category><![CDATA[left]]></category>
		<category><![CDATA[#wordcampdx]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[Web Development]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://doesnotvalidate.com/?p=360</guid>
		<description><![CDATA[Here are the files from my presentation today at Wordcamp Portland.
PDF of my Keynote
Email Update Plugin Files
&#8230;. trust me.  I have a lot more to say about Wordcamp, but I&#8217;ll have to get to it tomorrow &#8211; I&#8217;m exhausted.  That was a LONG day. 
]]></description>
			<content:encoded><![CDATA[<p>Here are the files from my presentation today at Wordcamp Portland.</p>
<p><a href='http://doesnotvalidate.com/wp-content/uploads/wordcamp_plugin_preso.pdf'>PDF of my Keynote</a></p>
<p><a href='http://doesnotvalidate.com/wp-content/uploads/email_updates.zip'>Email Update Plugin Files</a></p>
<p><br/>&#8230;. trust me.  I have a lot more to say about Wordcamp, but I&#8217;ll have to get to it tomorrow &#8211; I&#8217;m exhausted.  That was a LONG day. </p>
]]></content:encoded>
			<wfw:commentRss>http://doesnotvalidate.com/2008/files-from-wordcamp-session/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Electrolux Virtual Kitchen</title>
		<link>http://doesnotvalidate.com/2008/project-electrolux-virtual-kitchen/</link>
		<comments>http://doesnotvalidate.com/2008/project-electrolux-virtual-kitchen/#comments</comments>
		<pubDate>Tue, 23 Sep 2008 15:48:04 +0000</pubDate>
		<dc:creator>Dane</dc:creator>
				<category><![CDATA[left]]></category>
		<category><![CDATA[Actionscript]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[Dane Hesseldahl]]></category>
		<category><![CDATA[electrolux]]></category>
		<category><![CDATA[flash]]></category>
		<category><![CDATA[portfolio]]></category>
		<category><![CDATA[projects]]></category>
		<category><![CDATA[struck creative]]></category>

		<guid isPermaLink="false">http://doesnotvalidate.com/?p=137</guid>
		<description><![CDATA[
URL: http://www.electroluxappliances.com/node58.aspx
AGENCY: Struck Creative / DDB-NY
LAUNCH: January 2008
ROLE: Lead Developer
I relied heavily upon Arthur Debert&#8217;s Bulk Loader to create this video and audio heavy media site.  Media files load in the background and you view other content, to create as seemless an experience as possible.
]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.electroluxappliances.com/node58.aspx" target="_blank"><img src="http://doesnotvalidate.com/wp-content/uploads/virtual_kitchen.jpg" alt="" title="virtual_kitchen"  class="alignnone size-full wp-image-138" /></a></p>
<p><br/><strong>URL: </strong><a href='http://www.electroluxappliances.com/node58.aspx' target="_blank">http://www.electroluxappliances.com/node58.aspx</a><br />
<strong>AGENCY: </strong><a href='http://www.struckcreative.com' target="_blank">Struck Creative</a> / <a href='http://www.ddb.com/'>DDB-NY</a><br />
<strong>LAUNCH: </strong>January 2008<br />
<strong>ROLE: </strong>Lead Developer</p>
<p><br/>I relied heavily upon Arthur Debert&#8217;s <a href='http://code.google.com/p/bulk-loader/' target="_blank">Bulk Loader</a> to create this video and audio heavy media site.  Media files load in the background and you view other content, to create as seemless an experience as possible.</p>
]]></content:encoded>
			<wfw:commentRss>http://doesnotvalidate.com/2008/project-electrolux-virtual-kitchen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>GM USED CAR AMBUSH</title>
		<link>http://doesnotvalidate.com/2008/gm-used-car-ambush/</link>
		<comments>http://doesnotvalidate.com/2008/gm-used-car-ambush/#comments</comments>
		<pubDate>Tue, 23 Sep 2008 00:59:47 +0000</pubDate>
		<dc:creator>Dane</dc:creator>
				<category><![CDATA[left]]></category>
		<category><![CDATA[Actionscript]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[flash]]></category>
		<category><![CDATA[portfolio]]></category>
		<category><![CDATA[project]]></category>
		<category><![CDATA[Struck]]></category>
		<category><![CDATA[Web Development]]></category>
		<category><![CDATA[work]]></category>

		<guid isPermaLink="false">http://doesnotvalidate.com/?p=84</guid>
		<description><![CDATA[
URL: http://www.usedcarambush.com/
AGENCY: STRUCK Creative
LAUNCH: July 2008
ROLE: Lead Developer / Technical Architect
This was the last project that I worked on at STRUCK before I left for NEMO.  The site is built entirely in ActionScript3 and I personally built the Papervision 3D powered van interior, and the media queue and streaming system. 
]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.usedcarambush.com/" target="_blank"><img src="http://doesnotvalidate.com/wp-content/uploads/uca.jpg" alt="" title="uca" width="460" height="298" class="alignnone size-full wp-image-85" /></a></p>
<p><br/><strong>URL: </strong><a href='http://www.usedcarambush.com/' target="_blank">http://www.usedcarambush.com/</a><br />
<strong>AGENCY: </strong><a href='http://www.struckcreative.com' target="_blank">STRUCK Creative</a><br />
<strong>LAUNCH: </strong>July 2008<br />
<strong>ROLE: </strong>Lead Developer / Technical Architect</p>
<p><br/>This was the last project that I worked on at STRUCK before I left for NEMO.  The site is built entirely in ActionScript3 and I personally built the Papervision 3D powered van interior, and the media queue and streaming system. </p>
]]></content:encoded>
			<wfw:commentRss>http://doesnotvalidate.com/2008/gm-used-car-ambush/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>HP + VOODOODNA</title>
		<link>http://doesnotvalidate.com/2008/hp-voodoodna/</link>
		<comments>http://doesnotvalidate.com/2008/hp-voodoodna/#comments</comments>
		<pubDate>Mon, 22 Sep 2008 17:06:17 +0000</pubDate>
		<dc:creator>Dane</dc:creator>
				<category><![CDATA[left]]></category>
		<category><![CDATA[Actionscript]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[Dane Hesseldahl]]></category>
		<category><![CDATA[flash]]></category>
		<category><![CDATA[HP]]></category>
		<category><![CDATA[portfolio]]></category>
		<category><![CDATA[projects]]></category>
		<category><![CDATA[Web Development]]></category>
		<category><![CDATA[work]]></category>

		<guid isPermaLink="false">http://doesnotvalidate.com/?p=88</guid>
		<description><![CDATA[
URL: http://www.hp.com/voodoodna/
AGENCY: NEMO
LAUNCH: June 2008
ROLE: Lead Developer / Technical Architect
]]></description>
			<content:encoded><![CDATA[<p><a href="http://h20435.www2.hp.com/#/HOME/" target="_blank"><img src="http://doesnotvalidate.com/wp-content/uploads/vdna.jpg" alt="" title="vdna" width="460" height="343" class="alignnone size-full wp-image-89" /></a></p>
<p><br/><strong>URL: </strong><a href='http://www.hp.com/voodoodna/'>http://www.hp.com/voodoodna/</a><br />
<strong>AGENCY: </strong><a href='http://www.nemohq.com'>NEMO</a><br />
<strong>LAUNCH: </strong>June 2008<br />
<strong>ROLE: </strong>Lead Developer / Technical Architect</p>
]]></content:encoded>
			<wfw:commentRss>http://doesnotvalidate.com/2008/hp-voodoodna/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Wi-Life</title>
		<link>http://doesnotvalidate.com/2008/the-wi-life/</link>
		<comments>http://doesnotvalidate.com/2008/the-wi-life/#comments</comments>
		<pubDate>Sun, 21 Sep 2008 22:19:12 +0000</pubDate>
		<dc:creator>Dane</dc:creator>
				<category><![CDATA[left]]></category>
		<category><![CDATA[Actionscript]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[flash]]></category>
		<category><![CDATA[portfolio]]></category>
		<category><![CDATA[projects]]></category>
		<category><![CDATA[Yahoo Maps]]></category>

		<guid isPermaLink="false">http://doesnotvalidate.com/?p=173</guid>
		<description><![CDATA[
URL: http://thewilife.urbandaddy.com/
AGENCY: Left Fields Labs
LAUNCH: August 2008
ROLE: Lead Developer
TECHNOLOGIES: Flash
Flash based site for UrbanDaddy and Sony to help travelers locate Wi-Fi hot-spots in San Francisco and New York.  ActionScript 3 that integrates with the flash-based Yahoo Maps API.
]]></description>
			<content:encoded><![CDATA[<p><a href="http://thewilife.urbandaddy.com/"><img src="http://doesnotvalidate.com/wp-content/uploads/wilife.jpg" alt="" title="wilife" width="460" height="368" class="alignnone size-full wp-image-174" /></a></p>
<p><br/><strong>URL: </strong><a href='http://utah.travel/'>http://thewilife.urbandaddy.com/</a><br />
<strong>AGENCY: </strong><a href='http://www.leftfieldlabs.com/'>Left Fields Labs</a><br />
<strong>LAUNCH: </strong>August 2008<br />
<strong>ROLE: </strong>Lead Developer<br />
<strong>TECHNOLOGIES: </strong>Flash</p>
<p><br/>Flash based site for <a href='http://www.urbandaddy.com/'>UrbanDaddy</a> and <a href='http://www.sony.com'>Sony</a> to help travelers locate Wi-Fi hot-spots in San Francisco and New York.  ActionScript 3 that integrates with the flash-based Yahoo Maps API.</p>
]]></content:encoded>
			<wfw:commentRss>http://doesnotvalidate.com/2008/the-wi-life/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>I&#8217;M SPEAKING AT WORDCAMP PDX</title>
		<link>http://doesnotvalidate.com/2008/im-speaking-at-wordcamp-pdx/</link>
		<comments>http://doesnotvalidate.com/2008/im-speaking-at-wordcamp-pdx/#comments</comments>
		<pubDate>Sun, 21 Sep 2008 18:08:52 +0000</pubDate>
		<dc:creator>Dane</dc:creator>
				<category><![CDATA[left]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[portland]]></category>
		<category><![CDATA[Web Development]]></category>
		<category><![CDATA[wordcamp portland]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://doesnotvalidate.com/?p=115</guid>
		<description><![CDATA[
I am speaking this Saturday September 27th @ WordCamp Portland.
I&#8217;ll be talking about extending the functionality of Wordpress by writing custom plug-ins, and creating your own administration menus &#038; functionality.
Registration is still open but they&#8217;re capping attendence at 150, and I hear that they&#8217;re pretty close &#8211; so if you wanna go register now.
]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.wordcampportland.org" target="_blank"><img src="http://doesnotvalidate.com/wp-content/uploads/wordcamp.jpg" alt="" title="wordcamp" width="460" height="134" class="alignnone size-full wp-image-116" /></a><br />
I am speaking this Saturday September 27th @ <a href='http://www.wordcampportland.org/'>WordCamp Portland</a>.</p>
<p><br/>I&#8217;ll be talking about extending the functionality of Wordpress by writing custom plug-ins, and creating your own administration menus &#038; functionality.</p>
<p><br/><a href='http://www.wordcampportland.org/register/' target='_blank'>Registration is still open</a> but they&#8217;re capping attendence at 150, and I hear that they&#8217;re pretty close &#8211; so if you wanna go register now.</p>
]]></content:encoded>
			<wfw:commentRss>http://doesnotvalidate.com/2008/im-speaking-at-wordcamp-pdx/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>GRANT SKINNER ON AS3 RESOURCE MANAGEMENT</title>
		<link>http://doesnotvalidate.com/2008/grant-skinner-on-as3-resource-management/</link>
		<comments>http://doesnotvalidate.com/2008/grant-skinner-on-as3-resource-management/#comments</comments>
		<pubDate>Sun, 21 Sep 2008 17:45:08 +0000</pubDate>
		<dc:creator>Dane</dc:creator>
				<category><![CDATA[left]]></category>
		<category><![CDATA[Actionscript]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[Garbage Collection]]></category>
		<category><![CDATA[Grant Skinner]]></category>
		<category><![CDATA[Resource Management]]></category>
		<category><![CDATA[Web Development]]></category>

		<guid isPermaLink="false">http://doesnotvalidate.com/?p=109</guid>
		<description><![CDATA[This is an oldie but a goodie &#8211; Grant Skinner gives the straight dope on Garbage Collection and resource management in ActionSctipt 3.  Topics that are all too often overlooked.
While on the subject you might also want to check out his articlce Understanding the DELETE Keyword.
]]></description>
			<content:encoded><![CDATA[<p>This is an oldie but a goodie &#8211; <a href='http://gskinner.com/blog/archives/2006/06/as3_resource_ma.html' target="_blank">Grant Skinner gives the straight dope on Garbage Collection and resource management in ActionSctipt 3</a>.  Topics that are all too often overlooked.<br />
<br/>While on the subject you might also want to check out his articlce <a href='http://gskinner.com/blog/archives/2006/06/understanding_t.html'>Understanding the DELETE Keyword</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://doesnotvalidate.com/2008/grant-skinner-on-as3-resource-management/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
