<?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>[Be el o ge]</title>
	<atom:link href="http://blog.project-sierra.de/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.project-sierra.de</link>
	<description>I &#9829; The Web</description>
	<lastBuildDate>Sun, 04 Dec 2011 18:08:55 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>C#: Get URL of HTTP Redirect</title>
		<link>http://blog.project-sierra.de/archives/2132</link>
		<comments>http://blog.project-sierra.de/archives/2132#comments</comments>
		<pubDate>Sun, 04 Dec 2011 18:08:55 +0000</pubDate>
		<dc:creator>Stefan Siebel</dc:creator>
				<category><![CDATA[C#]]></category>

		<guid isPermaLink="false">http://blog.project-sierra.de/?p=2132</guid>
		<description><![CDATA[This is one of those snippets that might be useful someday: HttpWebRequest webRequest = &#40;HttpWebRequest&#41;WebRequest.Create&#40;&#34;http://this.domain.com/someThingThatRespondsWithRedirect&#34;&#41;; webRequest.AllowAutoRedirect = false; HttpWebResponse response = &#40;HttpWebResponse&#41;webRequest.GetResponse&#40;&#41;; string redirectUrl = response.Headers.Get&#40;&#34;Location&#34;&#41;&#41;; Typically browsers or the default http request class of your favorite programming language redirect &#8230; <a href="http://blog.project-sierra.de/archives/2132">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[
<!-- google_ad_section_start -->
<!--INFOLINKS_ON-->
<p><p>This is one of those snippets that might be useful someday:</p>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;">HttpWebRequest webRequest <span style="color: #008000;">=</span> <span style="color: #008000;">&#40;</span>HttpWebRequest<span style="color: #008000;">&#41;</span>WebRequest<span style="color: #008000;">.</span><span style="color: #0000FF;">Create</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;http://this.domain.com/someThingThatRespondsWithRedirect&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
webRequest<span style="color: #008000;">.</span><span style="color: #0000FF;">AllowAutoRedirect</span> <span style="color: #008000;">=</span> <span style="color: #0600FF; font-weight: bold;">false</span><span style="color: #008000;">;</span>
HttpWebResponse response <span style="color: #008000;">=</span> <span style="color: #008000;">&#40;</span>HttpWebResponse<span style="color: #008000;">&#41;</span>webRequest<span style="color: #008000;">.</span><span style="color: #0000FF;">GetResponse</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
<span style="color: #6666cc; font-weight: bold;">string</span> redirectUrl <span style="color: #008000;">=</span> response<span style="color: #008000;">.</span><span style="color: #0000FF;">Headers</span><span style="color: #008000;">.</span><span style="color: #0000FF;">Get</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;Location&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span></pre></div></div>

<p>Typically browsers or the default http request class of your favorite programming language redirect you automatically in case they receive a HTTP Redirect status code. Typically that&#8217;s exactly what you want.<br />
Last week however I ran into a situation in which I didn&#8217;t want the redirect to happen.<br />
Since the code was written in VBScript / ASP, I first tried to accomplish it there. No chance. Good thing that I don&#8217;t have to rely entirely on VBScript. The C# WebRequest class has an attribute that allows to explicitly turn off the automatic redirect. You can read the Redirect-URL from the response header. </p>

<!--INFOLINKS_OFF-->
<!-- google_ad_section_end -->
<p><a class="a2a_button_delicious" href="http://www.addtoany.com/add_to/delicious?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F2132&amp;linkname=C%23%3A%20Get%20URL%20of%20HTTP%20Redirect" title="Delicious" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/delicious.png" width="16" height="16" alt="Delicious"/></a><a class="a2a_button_twitter" href="http://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F2132&amp;linkname=C%23%3A%20Get%20URL%20of%20HTTP%20Redirect" title="Twitter" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/twitter.png" width="16" height="16" alt="Twitter"/></a><a class="a2a_button_facebook" href="http://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F2132&amp;linkname=C%23%3A%20Get%20URL%20of%20HTTP%20Redirect" title="Facebook" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/facebook.png" width="16" height="16" alt="Facebook"/></a><a class="a2a_button_linkedin" href="http://www.addtoany.com/add_to/linkedin?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F2132&amp;linkname=C%23%3A%20Get%20URL%20of%20HTTP%20Redirect" title="LinkedIn" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/linkedin.png" width="16" height="16" alt="LinkedIn"/></a><a class="a2a_button_reddit" href="http://www.addtoany.com/add_to/reddit?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F2132&amp;linkname=C%23%3A%20Get%20URL%20of%20HTTP%20Redirect" title="Reddit" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/reddit.png" width="16" height="16" alt="Reddit"/></a><a class="a2a_button_slashdot" href="http://www.addtoany.com/add_to/slashdot?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F2132&amp;linkname=C%23%3A%20Get%20URL%20of%20HTTP%20Redirect" title="Slashdot" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/slashdot.png" width="16" height="16" alt="Slashdot"/></a><a class="a2a_button_technorati_favorites" href="http://www.addtoany.com/add_to/technorati_favorites?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F2132&amp;linkname=C%23%3A%20Get%20URL%20of%20HTTP%20Redirect" title="Technorati Favorites" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/technorati.png" width="16" height="16" alt="Technorati Favorites"/></a><a class="a2a_button_digg" href="http://www.addtoany.com/add_to/digg?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F2132&amp;linkname=C%23%3A%20Get%20URL%20of%20HTTP%20Redirect" title="Digg" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/digg.png" width="16" height="16" alt="Digg"/></a><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F2132&amp;title=C%23%3A%20Get%20URL%20of%20HTTP%20Redirect" id="wpa2a_2"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.project-sierra.de/archives/2132/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Bye Bye MacPorts, Homebrew here we go</title>
		<link>http://blog.project-sierra.de/archives/2120</link>
		<comments>http://blog.project-sierra.de/archives/2120#comments</comments>
		<pubDate>Sun, 12 Jun 2011 20:30:14 +0000</pubDate>
		<dc:creator>Stefan Siebel</dc:creator>
				<category><![CDATA[OSX]]></category>

		<guid isPermaLink="false">http://blog.project-sierra.de/?p=2120</guid>
		<description><![CDATA[Having bought my iMac in September 2010, I&#8217;m still pretty new to Mac OS X. One of the first things I did back then was to install MacPorts in order to install e.g. the Gimp, Ruby and a couple of &#8230; <a href="http://blog.project-sierra.de/archives/2120">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[
<!-- google_ad_section_start -->
<!--INFOLINKS_ON-->
<p><p><img src="http://blog.project-sierra.de/wp-content/uploads/2011/06/homebrew-300x81.png" alt="" title="homebrew" width="300" height="81" class="alignleft size-medium wp-image-2124" />Having bought my iMac in September 2010, I&#8217;m still pretty new to Mac OS X. One of the first things I did back then was to install <a href="http://www.macports.org/">MacPorts</a> in order to install e.g. the Gimp, Ruby and a couple of other open source software. It all worked great &#8230; but&#8230; I felt a little bit like a couple of years ago when I first installed <a href="http://www.gentoo.org/">Gentoo</a> on my desktop. It&#8217;s all about downloading and compiling, downloading &#8211; compiling, downloading&#8230; you got it.</p>
<p>Installing Gimp through MacPorts took about 45 minutes&#8230; not great. Very annoying in fact. </p>
<p>One of the reasons I switched from Gentoo to <a href="http://www.ubuntu.com/">Ubuntu</a> was that it has a great package manager. After the MacPorts Gimp experience I was hoping there was a great quick alternative for MacPorts, too.</p>
<p>Turns out there is. <a href="http://mxcl.github.com/homebrew/">Homebrew</a> &#8230; The missing package manager for OS X. It&#8217;s quick, it works, no more compilation &#8230; happiness!</p>

<!--INFOLINKS_OFF-->
<!-- google_ad_section_end -->
<p><a class="a2a_button_delicious" href="http://www.addtoany.com/add_to/delicious?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F2120&amp;linkname=Bye%20Bye%20MacPorts%2C%20Homebrew%20here%20we%20go" title="Delicious" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/delicious.png" width="16" height="16" alt="Delicious"/></a><a class="a2a_button_twitter" href="http://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F2120&amp;linkname=Bye%20Bye%20MacPorts%2C%20Homebrew%20here%20we%20go" title="Twitter" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/twitter.png" width="16" height="16" alt="Twitter"/></a><a class="a2a_button_facebook" href="http://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F2120&amp;linkname=Bye%20Bye%20MacPorts%2C%20Homebrew%20here%20we%20go" title="Facebook" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/facebook.png" width="16" height="16" alt="Facebook"/></a><a class="a2a_button_linkedin" href="http://www.addtoany.com/add_to/linkedin?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F2120&amp;linkname=Bye%20Bye%20MacPorts%2C%20Homebrew%20here%20we%20go" title="LinkedIn" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/linkedin.png" width="16" height="16" alt="LinkedIn"/></a><a class="a2a_button_reddit" href="http://www.addtoany.com/add_to/reddit?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F2120&amp;linkname=Bye%20Bye%20MacPorts%2C%20Homebrew%20here%20we%20go" title="Reddit" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/reddit.png" width="16" height="16" alt="Reddit"/></a><a class="a2a_button_slashdot" href="http://www.addtoany.com/add_to/slashdot?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F2120&amp;linkname=Bye%20Bye%20MacPorts%2C%20Homebrew%20here%20we%20go" title="Slashdot" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/slashdot.png" width="16" height="16" alt="Slashdot"/></a><a class="a2a_button_technorati_favorites" href="http://www.addtoany.com/add_to/technorati_favorites?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F2120&amp;linkname=Bye%20Bye%20MacPorts%2C%20Homebrew%20here%20we%20go" title="Technorati Favorites" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/technorati.png" width="16" height="16" alt="Technorati Favorites"/></a><a class="a2a_button_digg" href="http://www.addtoany.com/add_to/digg?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F2120&amp;linkname=Bye%20Bye%20MacPorts%2C%20Homebrew%20here%20we%20go" title="Digg" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/digg.png" width="16" height="16" alt="Digg"/></a><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F2120&amp;title=Bye%20Bye%20MacPorts%2C%20Homebrew%20here%20we%20go" id="wpa2a_4"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.project-sierra.de/archives/2120/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Testing Photoshop Elements</title>
		<link>http://blog.project-sierra.de/archives/2113</link>
		<comments>http://blog.project-sierra.de/archives/2113#comments</comments>
		<pubDate>Sun, 12 Jun 2011 18:52:02 +0000</pubDate>
		<dc:creator>Stefan Siebel</dc:creator>
				<category><![CDATA[Photography]]></category>

		<guid isPermaLink="false">http://blog.project-sierra.de/?p=2113</guid>
		<description><![CDATA[Today I downloaded Adobe Photoshop Elements 9 for testing . After a few hours of trying it out: Great software and I&#8217;m pretty sure I&#8217;m going to buy it since it&#8217;s for only 100 EUR which I consider a fair &#8230; <a href="http://blog.project-sierra.de/archives/2113">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[
<!-- google_ad_section_start -->
<!--INFOLINKS_ON-->
<p><p>Today I downloaded <a href="http://www.adobe.com/go/tryphotoshop_elements">Adobe Photoshop Elements 9 for testing </a>. After a few hours of trying it out: Great software and I&#8217;m pretty sure I&#8217;m going to buy it since it&#8217;s for only 100 EUR which I consider a fair price for it.</p>
<p>I&#8217;m used to the <a href="http://www.gimp.org/">Gimp</a> which is a great image processing software itself. But: the user interface and the overall usability are not any more up to date. You get used to, but while Gimp is awkward to use, Photoshop Elements feels just right. </p>
<p>Here the result of my first trial with the Smart Brush</p>
<p><img src="http://blog.project-sierra.de/wp-content/uploads/2011/06/bluesky.jpg" alt="" title="bluesky" width="538" height="400" class="aligncenter size-full wp-image-2114" /></p>
<p>While the tool is very intuitive to use, here is a useful tutorial: <a href="http://tv.adobe.com/watch/learn-photoshop-elements-9/creating-a-blue-sky/">Creating a blue sky</a></p>

<!--INFOLINKS_OFF-->
<!-- google_ad_section_end -->
<p><a class="a2a_button_delicious" href="http://www.addtoany.com/add_to/delicious?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F2113&amp;linkname=Testing%20Photoshop%20Elements" title="Delicious" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/delicious.png" width="16" height="16" alt="Delicious"/></a><a class="a2a_button_twitter" href="http://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F2113&amp;linkname=Testing%20Photoshop%20Elements" title="Twitter" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/twitter.png" width="16" height="16" alt="Twitter"/></a><a class="a2a_button_facebook" href="http://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F2113&amp;linkname=Testing%20Photoshop%20Elements" title="Facebook" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/facebook.png" width="16" height="16" alt="Facebook"/></a><a class="a2a_button_linkedin" href="http://www.addtoany.com/add_to/linkedin?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F2113&amp;linkname=Testing%20Photoshop%20Elements" title="LinkedIn" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/linkedin.png" width="16" height="16" alt="LinkedIn"/></a><a class="a2a_button_reddit" href="http://www.addtoany.com/add_to/reddit?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F2113&amp;linkname=Testing%20Photoshop%20Elements" title="Reddit" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/reddit.png" width="16" height="16" alt="Reddit"/></a><a class="a2a_button_slashdot" href="http://www.addtoany.com/add_to/slashdot?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F2113&amp;linkname=Testing%20Photoshop%20Elements" title="Slashdot" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/slashdot.png" width="16" height="16" alt="Slashdot"/></a><a class="a2a_button_technorati_favorites" href="http://www.addtoany.com/add_to/technorati_favorites?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F2113&amp;linkname=Testing%20Photoshop%20Elements" title="Technorati Favorites" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/technorati.png" width="16" height="16" alt="Technorati Favorites"/></a><a class="a2a_button_digg" href="http://www.addtoany.com/add_to/digg?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F2113&amp;linkname=Testing%20Photoshop%20Elements" title="Digg" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/digg.png" width="16" height="16" alt="Digg"/></a><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F2113&amp;title=Testing%20Photoshop%20Elements" id="wpa2a_6"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.project-sierra.de/archives/2113/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Setting up a CDN with Amazon S3 and Cloud Front in 5min</title>
		<link>http://blog.project-sierra.de/archives/2102</link>
		<comments>http://blog.project-sierra.de/archives/2102#comments</comments>
		<pubDate>Sun, 05 Jun 2011 13:44:32 +0000</pubDate>
		<dc:creator>Stefan Siebel</dc:creator>
				<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://blog.project-sierra.de/?p=2102</guid>
		<description><![CDATA[When you create a new bucket in Amazon S3, you can choose from five different locations: US Standard, Northern California, Ireland, Singapore and Tokyo. Most web applications however have visitors from all around the world. So if you choose US &#8230; <a href="http://blog.project-sierra.de/archives/2102">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[
<!-- google_ad_section_start -->
<!--INFOLINKS_ON-->
<p><p>When you create a new bucket in Amazon S3, you can choose from five different locations: US Standard, Northern California, Ireland, Singapore and Tokyo.</p>
<p><img src="http://blog.project-sierra.de/wp-content/uploads/2011/06/s3locations.png" alt="" title="s3locations" width="516" height="348" class="aligncenter size-full wp-image-2105" /></p>
<p>Most web applications however have visitors from all around the world. So if you choose US Standard, visitors from the east coast will have a very low latency while visitors from Europe and Asia will have to wait longer for the resources stored on Amazon S3.</p>
<p>A common approach to this problem is using a Content Delivery Network (CDN). A CDN consists of many servers all around the world all holding copies of the resources of your web page. So a visitor from the US would get content from a server in the US, a visitor from Asia would receive the content from an asian server and a European from a server in Europe. This guarantees low latency and better bandwidth for visitors from all locations.</p>
<p>I&#8217;m using S3 for <a href="http://www.3-6-5-days.com">3-6-5-days.com</a> with a US Standard bucket. I wasn&#8217;t really happy with the latency, but luckily setting up a CDN for your S3 bucket is as easy as pie.</p>
<p>All you need to do is this (I will assume you&#8217;re already signed up for S3 and created a bucket):</p>
<ol>
<li>Sign up for Amazon Cloud Front.</li>
<li>Click on <em>Create Distribution</em> and select the bucket which you want to distribute through Cloud Front CDN) <img src="http://blog.project-sierra.de/wp-content/uploads/2011/06/step1.png" alt="" title="step1" width="545" height="423" class="aligncenter size-full wp-image-2107" /></li>
<li>Now, specify whether you support http and https or only https. Only you can configure whether your resources should be available for streaming or downloading.<br />
<img src="http://blog.project-sierra.de/wp-content/uploads/2011/06/step2.png" alt="" title="step2" width="544" height="452" class="aligncenter size-full wp-image-2108" /></li>
<li>On the last screen, hit <em>Create Distribution</em><img src="http://blog.project-sierra.de/wp-content/uploads/2011/06/step3.png" alt="" title="step3" width="539" height="344" class="aligncenter size-full wp-image-2109" />
</li>
<li>You&#8217;re done! The distribution is configured now. Amazon will automatically start deploying the resources to the various edge locations, in the US, Asia and Europe.</li>
</ol>
<p>There are two more things that need to be done outside of the Amazon AWS Management Console:</p>
<ol>
<li>You need to create a subdomain and configure the CNAME you specified when creating the distribution. So for above example I would create a subdomain like this: cdn.3-6-5-days.com. The CNAME would point to the domain name you see in the Amazon AWS Management Console. It is something like 123xyz.cloudfront.net</li>
<li>Once subdomain and CNAME are configured you&#8217;re ready to use the CDN in your web application. Simply make sure that instead of loading resources from the bucket URL you use your new CDN URL. For above exmaple that would be cdn.3-6-5-days.com/path/to/resource/test.css</li>
</ol>
<p>Here is another good article about the topic: <a href="http://www.labnol.org/internet/setup-content-delivery-network-with-amazon-s3-cloudfront/5446/">How to Setup Amazon S3 with CloudFront as a Content Delivery Network</a></p>

<!--INFOLINKS_OFF-->
<!-- google_ad_section_end -->
<p><a class="a2a_button_delicious" href="http://www.addtoany.com/add_to/delicious?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F2102&amp;linkname=Setting%20up%20a%20CDN%20with%20Amazon%20S3%20and%20Cloud%20Front%20in%205min" title="Delicious" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/delicious.png" width="16" height="16" alt="Delicious"/></a><a class="a2a_button_twitter" href="http://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F2102&amp;linkname=Setting%20up%20a%20CDN%20with%20Amazon%20S3%20and%20Cloud%20Front%20in%205min" title="Twitter" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/twitter.png" width="16" height="16" alt="Twitter"/></a><a class="a2a_button_facebook" href="http://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F2102&amp;linkname=Setting%20up%20a%20CDN%20with%20Amazon%20S3%20and%20Cloud%20Front%20in%205min" title="Facebook" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/facebook.png" width="16" height="16" alt="Facebook"/></a><a class="a2a_button_linkedin" href="http://www.addtoany.com/add_to/linkedin?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F2102&amp;linkname=Setting%20up%20a%20CDN%20with%20Amazon%20S3%20and%20Cloud%20Front%20in%205min" title="LinkedIn" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/linkedin.png" width="16" height="16" alt="LinkedIn"/></a><a class="a2a_button_reddit" href="http://www.addtoany.com/add_to/reddit?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F2102&amp;linkname=Setting%20up%20a%20CDN%20with%20Amazon%20S3%20and%20Cloud%20Front%20in%205min" title="Reddit" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/reddit.png" width="16" height="16" alt="Reddit"/></a><a class="a2a_button_slashdot" href="http://www.addtoany.com/add_to/slashdot?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F2102&amp;linkname=Setting%20up%20a%20CDN%20with%20Amazon%20S3%20and%20Cloud%20Front%20in%205min" title="Slashdot" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/slashdot.png" width="16" height="16" alt="Slashdot"/></a><a class="a2a_button_technorati_favorites" href="http://www.addtoany.com/add_to/technorati_favorites?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F2102&amp;linkname=Setting%20up%20a%20CDN%20with%20Amazon%20S3%20and%20Cloud%20Front%20in%205min" title="Technorati Favorites" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/technorati.png" width="16" height="16" alt="Technorati Favorites"/></a><a class="a2a_button_digg" href="http://www.addtoany.com/add_to/digg?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F2102&amp;linkname=Setting%20up%20a%20CDN%20with%20Amazon%20S3%20and%20Cloud%20Front%20in%205min" title="Digg" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/digg.png" width="16" height="16" alt="Digg"/></a><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F2102&amp;title=Setting%20up%20a%20CDN%20with%20Amazon%20S3%20and%20Cloud%20Front%20in%205min" id="wpa2a_8"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.project-sierra.de/archives/2102/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Visual Studio 2008: Configuration Manager missing</title>
		<link>http://blog.project-sierra.de/archives/2094</link>
		<comments>http://blog.project-sierra.de/archives/2094#comments</comments>
		<pubDate>Wed, 25 May 2011 19:14:42 +0000</pubDate>
		<dc:creator>Stefan Siebel</dc:creator>
				<category><![CDATA[ASP.NET]]></category>

		<guid isPermaLink="false">http://blog.project-sierra.de/?p=2094</guid>
		<description><![CDATA[Today I ran into a problem with Visual Studio 2008: It wouldn&#8217;t show me the Configuration Manager in the Build menu which caused that I couldn&#8217;t easily switch between Debug and Release compilation. For the exact same source code and &#8230; <a href="http://blog.project-sierra.de/archives/2094">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[
<!-- google_ad_section_start -->
<!--INFOLINKS_ON-->
<p><p>Today I ran into a problem with Visual Studio 2008: It wouldn&#8217;t show me the Configuration Manager in the Build menu which caused that I couldn&#8217;t easily switch between Debug and Release compilation.<br />
For the exact same source code and the same version of VS2008 a colleague got the right menu item.</p>
<p>Turns out you need to enable configuration manager! Go to <em>Tools > Options > Projects and Solutions > General</em> and enable the <em>Advanced Build Configuration</em> option.</p>
<p><img src="http://blog.project-sierra.de/wp-content/uploads/2011/05/advancedbuildconfiguration.jpg" alt="" title="advancedbuildconfiguration" width="749" height="431" class="aligncenter size-full wp-image-2095" /></p>

<!--INFOLINKS_OFF-->
<!-- google_ad_section_end -->
<p><a class="a2a_button_delicious" href="http://www.addtoany.com/add_to/delicious?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F2094&amp;linkname=Visual%20Studio%202008%3A%20Configuration%20Manager%20missing" title="Delicious" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/delicious.png" width="16" height="16" alt="Delicious"/></a><a class="a2a_button_twitter" href="http://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F2094&amp;linkname=Visual%20Studio%202008%3A%20Configuration%20Manager%20missing" title="Twitter" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/twitter.png" width="16" height="16" alt="Twitter"/></a><a class="a2a_button_facebook" href="http://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F2094&amp;linkname=Visual%20Studio%202008%3A%20Configuration%20Manager%20missing" title="Facebook" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/facebook.png" width="16" height="16" alt="Facebook"/></a><a class="a2a_button_linkedin" href="http://www.addtoany.com/add_to/linkedin?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F2094&amp;linkname=Visual%20Studio%202008%3A%20Configuration%20Manager%20missing" title="LinkedIn" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/linkedin.png" width="16" height="16" alt="LinkedIn"/></a><a class="a2a_button_reddit" href="http://www.addtoany.com/add_to/reddit?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F2094&amp;linkname=Visual%20Studio%202008%3A%20Configuration%20Manager%20missing" title="Reddit" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/reddit.png" width="16" height="16" alt="Reddit"/></a><a class="a2a_button_slashdot" href="http://www.addtoany.com/add_to/slashdot?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F2094&amp;linkname=Visual%20Studio%202008%3A%20Configuration%20Manager%20missing" title="Slashdot" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/slashdot.png" width="16" height="16" alt="Slashdot"/></a><a class="a2a_button_technorati_favorites" href="http://www.addtoany.com/add_to/technorati_favorites?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F2094&amp;linkname=Visual%20Studio%202008%3A%20Configuration%20Manager%20missing" title="Technorati Favorites" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/technorati.png" width="16" height="16" alt="Technorati Favorites"/></a><a class="a2a_button_digg" href="http://www.addtoany.com/add_to/digg?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F2094&amp;linkname=Visual%20Studio%202008%3A%20Configuration%20Manager%20missing" title="Digg" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/digg.png" width="16" height="16" alt="Digg"/></a><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F2094&amp;title=Visual%20Studio%202008%3A%20Configuration%20Manager%20missing" id="wpa2a_10"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.project-sierra.de/archives/2094/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Natural Project Planning</title>
		<link>http://blog.project-sierra.de/archives/2080</link>
		<comments>http://blog.project-sierra.de/archives/2080#comments</comments>
		<pubDate>Mon, 16 May 2011 20:04:48 +0000</pubDate>
		<dc:creator>Stefan Siebel</dc:creator>
				<category><![CDATA[Business]]></category>

		<guid isPermaLink="false">http://blog.project-sierra.de/?p=2080</guid>
		<description><![CDATA[Allen&#8217;s Getting Things Done is a resourceful book in many ways. If someone asked me for the two most valuable / interesting passages of the booking I&#8217;d probably point out the &#8220;Getting Things Done&#8221; diagram which I wrote about here &#8230; <a href="http://blog.project-sierra.de/archives/2080">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[
<!-- google_ad_section_start -->
<!--INFOLINKS_ON-->
<p><p>Allen&#8217;s <em><a href="http://www.amazon.de/gp/product/0142000280/ref=as_li_ss_tl?ie=UTF8&#038;tag=beeloge-21&#038;linkCode=as2&#038;camp=1638&#038;creative=19454&#038;creativeASIN=0142000280">Getting Things Done</a></em> is a resourceful book in many ways. If someone asked me for the two most valuable / interesting passages of the booking I&#8217;d probably point out the &#8220;Getting Things Done&#8221; diagram which I wrote about <a href="http://blog.project-sierra.de/archives/1408">here</a> and the &#8220;Natural Project Planning&#8221; which I want to write about in this post.</p>
<p>Natural Project Planning consists out of five steps:</p>
<ol>
<li><strong>Defining purpose and principles</strong></li>
<li><strong>Outcome visioning</strong></li>
<li><strong>Brainstorming</strong></li>
<li><strong>Organizing</strong></li>
<li><strong>Identifying next actions</strong></li>
</ol>
<p>If you&#8217;re like me you will probably read over that list and think &#8220;yep, that&#8217;s how it should be, so what&#8217;s the big deal here&#8221;. Well, the big deal is, that while this model is very natural it won&#8217;t be followed most of the time.</p>
<p>Think back to your last kick start meeting for the latest and greatest project. For sure someone said &#8220;let&#8217;s brainstorm&#8221;. That just sounds right and very actionable. The problem: If you didn&#8217;t talk about the purpose of the new project yet and if you have no idea about possible desired outcomes for the project the brainstorming will lead to absolutely nothing constructive. Without knowing the purpose of the project and without any vision you won&#8217;t be able to separate the good ideas from the bad ones. So next time someone says &#8220;Let&#8217;s brainstorm&#8221; make sure everybody is clear about the purpose, principles and outcome visions.</p>
<p>Once these are defined and you successfully brainstormed the new project everybody leaves the room and now what? If you&#8217;re lucky someone took a photo of the whiteboard with all the good and bad results of the brainstorming on it. Since most teams don&#8217;t have the luxury of working on one project at a time it is fairly certain that other things come up and get prioritized. After a week nobody will understand anymore what all the words on the photo of the whiteboard are really about and we have to start the process all over again.<br />
Brainstorming is important but it will be for nothing if you don&#8217;t take the time and organize all the unordered ideas into actionable items. Start writing a project plan. I doesn&#8217;t have to be a huge formal document. Simply make a list of &#8220;next actions&#8221;. Prioritize them and assign them to concrete people. </p>
<p>Following these five easy steps helps to get projects started and keep them going. It works for small and big projects, however for big projects you&#8217;ll likely need more formal approaches&#8230;</p>

<!--INFOLINKS_OFF-->
<!-- google_ad_section_end -->
<p><a class="a2a_button_delicious" href="http://www.addtoany.com/add_to/delicious?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F2080&amp;linkname=Natural%20Project%20Planning" title="Delicious" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/delicious.png" width="16" height="16" alt="Delicious"/></a><a class="a2a_button_twitter" href="http://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F2080&amp;linkname=Natural%20Project%20Planning" title="Twitter" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/twitter.png" width="16" height="16" alt="Twitter"/></a><a class="a2a_button_facebook" href="http://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F2080&amp;linkname=Natural%20Project%20Planning" title="Facebook" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/facebook.png" width="16" height="16" alt="Facebook"/></a><a class="a2a_button_linkedin" href="http://www.addtoany.com/add_to/linkedin?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F2080&amp;linkname=Natural%20Project%20Planning" title="LinkedIn" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/linkedin.png" width="16" height="16" alt="LinkedIn"/></a><a class="a2a_button_reddit" href="http://www.addtoany.com/add_to/reddit?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F2080&amp;linkname=Natural%20Project%20Planning" title="Reddit" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/reddit.png" width="16" height="16" alt="Reddit"/></a><a class="a2a_button_slashdot" href="http://www.addtoany.com/add_to/slashdot?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F2080&amp;linkname=Natural%20Project%20Planning" title="Slashdot" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/slashdot.png" width="16" height="16" alt="Slashdot"/></a><a class="a2a_button_technorati_favorites" href="http://www.addtoany.com/add_to/technorati_favorites?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F2080&amp;linkname=Natural%20Project%20Planning" title="Technorati Favorites" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/technorati.png" width="16" height="16" alt="Technorati Favorites"/></a><a class="a2a_button_digg" href="http://www.addtoany.com/add_to/digg?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F2080&amp;linkname=Natural%20Project%20Planning" title="Digg" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/digg.png" width="16" height="16" alt="Digg"/></a><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F2080&amp;title=Natural%20Project%20Planning" id="wpa2a_12"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.project-sierra.de/archives/2080/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Improving the speed of Ajax GET requests</title>
		<link>http://blog.project-sierra.de/archives/2059</link>
		<comments>http://blog.project-sierra.de/archives/2059#comments</comments>
		<pubDate>Sun, 15 May 2011 13:11:37 +0000</pubDate>
		<dc:creator>Stefan Siebel</dc:creator>
				<category><![CDATA[jQuery]]></category>

		<guid isPermaLink="false">http://blog.project-sierra.de/?p=2059</guid>
		<description><![CDATA[In my last article I described how to improve the speed of your Rails 3 Ajax Application by returning correct HTTP states and optimizing browser caching. One thing that still annoyed me was the fact that the browser had to &#8230; <a href="http://blog.project-sierra.de/archives/2059">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[
<!-- google_ad_section_start -->
<!--INFOLINKS_ON-->
<p><p>In my last article I described how to <a href="http://blog.project-sierra.de/archives/2035">improve the speed of your Rails 3 Ajax Application</a> by returning correct HTTP states and optimizing browser caching.</p>
<p>One thing that still annoyed me was the fact that the browser had to wait for the 304 &#8220;Not Modified&#8221; response from the server before displaying cached data. Once the response was received it would trigger the success callback. That means the user needs to wait for a response from the server just so that the browser can display cached data&#8230;<br />
At that point I remembered reading about Wycats&#8217; <a href="https://github.com/wycats/jquery-offline">jquery-offline</a>. jQuery-Offline has the same interface as jQuery&#8217;s native <a href="http://api.jquery.com/jQuery.getJSON/">getJSON</a>, but once it receives the response it&#8217;ll store the JSON data in the browser&#8217;s <a href="http://dev.w3.org/html5/webstorage/">localStorage</a>. The next time the same Ajax request is triggered the success callback is executed twice. First when the data is loaded from the <a href="http://dev.w3.org/html5/webstorage/">localStorage</a> (which is very very fast obviously) and the second time when the browser returns a 200 status response. The great thing is, that the success callback won&#8217;t be triggered if the server returns a 304 &#8220;Not Modified&#8221; status code. This is really really neat and makes the UI unbelievably snappy.</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">jQuery.<span style="color: #660066;">retrieveJSON</span><span style="color: #009900;">&#40;</span> <span style="color: #3366CC;">&quot;/lists/1&quot;</span><span style="color: #339933;">,</span> <span style="color: #009900;">&#123;</span> options<span style="color: #339933;">:</span> <span style="color: #3366CC;">&quot;in case you need it&quot;</span> <span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span> data<span style="color: #339933;">,</span> textStatus<span style="color: #339933;">,</span> jqXhr<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
  <span style="color: #006600; font-style: italic;">// process the data. This will be called up to two times.</span>
<span style="color: #009900;">&#125;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Unfortunately getJSON doesn&#8217;t have a great way to handle errors. Since retrieveJSON uses the same interface it suffers from the same weakness. Luckily jQuery 1.5 introduced the <a href="http://api.jquery.com/jQuery.ajax/">jqXHR</a> object. With jqXHR error handling becomes real easy:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> jqXhr <span style="color: #339933;">=</span> jQuery.<span style="color: #660066;">retrieveJSON</span><span style="color: #009900;">&#40;</span> <span style="color: #3366CC;">&quot;/lists/1&quot;</span><span style="color: #339933;">,</span> <span style="color: #009900;">&#123;</span> options<span style="color: #339933;">:</span> <span style="color: #3366CC;">&quot;in case you need it&quot;</span> <span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span> data<span style="color: #339933;">,</span> textStatus<span style="color: #339933;">,</span> jqXhr<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
  <span style="color: #006600; font-style: italic;">// process the data. This will be called up to two times.</span>
<span style="color: #009900;">&#125;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
jqXhr.<span style="color: #660066;">error</span><span style="color: #009900;">&#40;</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span> xhr<span style="color: #339933;">,</span> errorType<span style="color: #339933;">,</span> exception <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
  <span style="color: #006600; font-style: italic;">// do your error handling here.</span>
<span style="color: #009900;">&#125;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>If you want to use above functionality you need to use <a href="https://github.com/Skarabaeus/jquery-offline">my fork of jQuery-Offline</a> because the <a href="https://github.com/wycats/jquery-offline">official version </a>hasn&#8217;t been updated yet to return a jqXhr object.</p>

<!--INFOLINKS_OFF-->
<!-- google_ad_section_end -->
<p><a class="a2a_button_delicious" href="http://www.addtoany.com/add_to/delicious?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F2059&amp;linkname=Improving%20the%20speed%20of%20Ajax%20GET%20requests" title="Delicious" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/delicious.png" width="16" height="16" alt="Delicious"/></a><a class="a2a_button_twitter" href="http://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F2059&amp;linkname=Improving%20the%20speed%20of%20Ajax%20GET%20requests" title="Twitter" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/twitter.png" width="16" height="16" alt="Twitter"/></a><a class="a2a_button_facebook" href="http://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F2059&amp;linkname=Improving%20the%20speed%20of%20Ajax%20GET%20requests" title="Facebook" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/facebook.png" width="16" height="16" alt="Facebook"/></a><a class="a2a_button_linkedin" href="http://www.addtoany.com/add_to/linkedin?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F2059&amp;linkname=Improving%20the%20speed%20of%20Ajax%20GET%20requests" title="LinkedIn" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/linkedin.png" width="16" height="16" alt="LinkedIn"/></a><a class="a2a_button_reddit" href="http://www.addtoany.com/add_to/reddit?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F2059&amp;linkname=Improving%20the%20speed%20of%20Ajax%20GET%20requests" title="Reddit" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/reddit.png" width="16" height="16" alt="Reddit"/></a><a class="a2a_button_slashdot" href="http://www.addtoany.com/add_to/slashdot?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F2059&amp;linkname=Improving%20the%20speed%20of%20Ajax%20GET%20requests" title="Slashdot" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/slashdot.png" width="16" height="16" alt="Slashdot"/></a><a class="a2a_button_technorati_favorites" href="http://www.addtoany.com/add_to/technorati_favorites?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F2059&amp;linkname=Improving%20the%20speed%20of%20Ajax%20GET%20requests" title="Technorati Favorites" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/technorati.png" width="16" height="16" alt="Technorati Favorites"/></a><a class="a2a_button_digg" href="http://www.addtoany.com/add_to/digg?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F2059&amp;linkname=Improving%20the%20speed%20of%20Ajax%20GET%20requests" title="Digg" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/digg.png" width="16" height="16" alt="Digg"/></a><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F2059&amp;title=Improving%20the%20speed%20of%20Ajax%20GET%20requests" id="wpa2a_14"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.project-sierra.de/archives/2059/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Das Weltgeheimnis &#8211; Thomas De Padova</title>
		<link>http://blog.project-sierra.de/archives/2062</link>
		<comments>http://blog.project-sierra.de/archives/2062#comments</comments>
		<pubDate>Tue, 10 May 2011 21:40:50 +0000</pubDate>
		<dc:creator>Stefan Siebel</dc:creator>
				<category><![CDATA[Books]]></category>

		<guid isPermaLink="false">http://blog.project-sierra.de/?p=2062</guid>
		<description><![CDATA[Das Weltgeheimnis by Thomas De Padova is not quite an international best seller, at least I didn&#8217;t find an English version of the book. Nevertheless for those who speak German and who are interested in natural science it is a &#8230; <a href="http://blog.project-sierra.de/archives/2062">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[
<!-- google_ad_section_start -->
<!--INFOLINKS_ON-->
<p><p><em>Das Weltgeheimnis</em> by Thomas De Padova is not quite an international best seller, at least I didn&#8217;t find an English version of the book. Nevertheless for those who speak German and who are interested in natural science it is a very enjoyable book.</p>
<p>De Padova tells the story of <a href="http://en.wikipedia.org/wiki/Galileo_Galilei">Galileo Galilei</a> and <a href="http://en.wikipedia.org/wiki/Johannes_kepler">Johannes Kepler</a>, two remarkable figures of history who changed how we saw the world and the universe in which we live.</p>
<p>Kepler lived and worked many years in Prague, back then the centre of the <a href="http://en.wikipedia.org/wiki/Habsburg_Monarchy">Habsburg Monarchy</a>. With endless patience Kepler analysed <a href="http://en.wikipedia.org/wiki/Tycho_Brahe">Tycho Brahe</a>&#8216;s observations of stars and planets and thus found the <a href="http://en.wikipedia.org/wiki/Kepler%27s_laws_of_planetary_motion">Laws of Planetary Motion</a>.</p>
<p>Galileo Galilei is most famous for the heliocentric model. Though he wasn&#8217;t the first one proposing a model in which the sun, not the earth, is the centre of our planetary system he and Kepler were two important personalities arguing for the model.</p>
<p>Among many interesting things, there are three things I&#8217;d like to point out here.</p>
<p>First, it&#8217;s amazing under which conditions and with which persistence scientists and philosophers in the 17th century changed the world. They started a process which would accelerate through the 18th, 19th and 20th century until the present day (and it is still accelerating).</p>
<p>Second, many chapters about Kepler give a little bit of inside into how life must have been in Prague in the 17th century. It was the capital of the Habsburg Monarchy and thus for a huge part of what we call Europe today the centre of the world. Two world wars and 40 years of communism change things a lot&#8230;</p>
<p>Third, in the story of Kepler and Galileo you recognize all to well the principle of &#8220;the adjacent possible&#8221; described in Steven Johnson&#8217;s awesome book &#8220;<a href="http://blog.project-sierra.de/archives/2014">Where good ideas come from</a>&#8220;. Galileo and Kepler both were able to build on top of <a href="http://en.wikipedia.org/wiki/Nicolaus_Copernicus">Copernicus</a>. Kepler based his analysis and calculations on Brahe&#8217;s extensive data collection. One generation later, Isaac Newton referred to Galilei&#8217;s and Kepler&#8217;s findings&#8230;</p>
<p>The history of science is an exciting story to tell and Thomas De Padova tells it well.</p>
<p><iframe src="http://rcm-de.amazon.de/e/cm?lt1=_blank&#038;bc1=000000&#038;IS2=1&#038;bg1=FFFFFF&#038;fc1=000000&#038;lc1=0000FF&#038;t=beeloge-21&#038;o=3&#038;p=8&#038;l=as4&#038;m=amazon&#038;f=ifr&#038;ref=ss_til&#038;asins=3492258611" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"></iframe></p>
<p>If you are interested in science books: I&#8217;m currently reading &#8220;<a href="http://www.amazon.de/gp/product/0552151742/ref=as_li_ss_tl?ie=UTF8&#038;tag=beeloge-21&#038;linkCode=as2&#038;camp=1638&#038;creative=19454&#038;creativeASIN=0552151742">A Short History of Nearly Everything</a>&#8221; by Bill Bryson. I&#8217;m not yet finished with it, but Bryson is a brilliant narrator and I highly recommend to get a copy (of the book, not Bryson&#8230;).</p>

<!--INFOLINKS_OFF-->
<!-- google_ad_section_end -->
<p><a class="a2a_button_delicious" href="http://www.addtoany.com/add_to/delicious?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F2062&amp;linkname=Das%20Weltgeheimnis%20%26%238211%3B%20Thomas%20De%20Padova" title="Delicious" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/delicious.png" width="16" height="16" alt="Delicious"/></a><a class="a2a_button_twitter" href="http://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F2062&amp;linkname=Das%20Weltgeheimnis%20%26%238211%3B%20Thomas%20De%20Padova" title="Twitter" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/twitter.png" width="16" height="16" alt="Twitter"/></a><a class="a2a_button_facebook" href="http://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F2062&amp;linkname=Das%20Weltgeheimnis%20%26%238211%3B%20Thomas%20De%20Padova" title="Facebook" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/facebook.png" width="16" height="16" alt="Facebook"/></a><a class="a2a_button_linkedin" href="http://www.addtoany.com/add_to/linkedin?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F2062&amp;linkname=Das%20Weltgeheimnis%20%26%238211%3B%20Thomas%20De%20Padova" title="LinkedIn" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/linkedin.png" width="16" height="16" alt="LinkedIn"/></a><a class="a2a_button_reddit" href="http://www.addtoany.com/add_to/reddit?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F2062&amp;linkname=Das%20Weltgeheimnis%20%26%238211%3B%20Thomas%20De%20Padova" title="Reddit" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/reddit.png" width="16" height="16" alt="Reddit"/></a><a class="a2a_button_slashdot" href="http://www.addtoany.com/add_to/slashdot?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F2062&amp;linkname=Das%20Weltgeheimnis%20%26%238211%3B%20Thomas%20De%20Padova" title="Slashdot" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/slashdot.png" width="16" height="16" alt="Slashdot"/></a><a class="a2a_button_technorati_favorites" href="http://www.addtoany.com/add_to/technorati_favorites?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F2062&amp;linkname=Das%20Weltgeheimnis%20%26%238211%3B%20Thomas%20De%20Padova" title="Technorati Favorites" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/technorati.png" width="16" height="16" alt="Technorati Favorites"/></a><a class="a2a_button_digg" href="http://www.addtoany.com/add_to/digg?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F2062&amp;linkname=Das%20Weltgeheimnis%20%26%238211%3B%20Thomas%20De%20Padova" title="Digg" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/digg.png" width="16" height="16" alt="Digg"/></a><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F2062&amp;title=Das%20Weltgeheimnis%20%26%238211%3B%20Thomas%20De%20Padova" id="wpa2a_16"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.project-sierra.de/archives/2062/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Rails 3: Improving the speed of your Ajax Application</title>
		<link>http://blog.project-sierra.de/archives/2035</link>
		<comments>http://blog.project-sierra.de/archives/2035#comments</comments>
		<pubDate>Sun, 01 May 2011 22:11:55 +0000</pubDate>
		<dc:creator>Stefan Siebel</dc:creator>
				<category><![CDATA[RubyOnRails]]></category>

		<guid isPermaLink="false">http://blog.project-sierra.de/?p=2035</guid>
		<description><![CDATA[List Kung Fu uses Ajax a lot and so far it works out pretty well. Over the past two weeks I&#8217;ve looked into improving the performance of the UI and there are a couple of things that helped a lot &#8230; <a href="http://blog.project-sierra.de/archives/2035">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[
<!-- google_ad_section_start -->
<!--INFOLINKS_ON-->
<p><p><a href="http://www.listkungfu.com">List Kung Fu</a> uses Ajax a lot and so far it works out pretty well. Over the past two weeks I&#8217;ve looked into improving the performance of the UI and there are a couple of things that helped a lot and which I want to share here.</p>
<p><strong>Returning the correct HTTP status code and optimize browser caching</strong></p>
<p>There are two status codes I mean specifically:</p>
<ul>
<li>200 &#8211; &#8220;<a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.2.1">Ok</a>&#8220;. Tells the browser that the server was able to respond successfully to the request. The response contains the data from the server in the HTTP payload.</li>
<li>304 &#8211; &#8220;<a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.3.5">Not modified</a>&#8220;. Tells the browser that the data for the sent request did not change and that data should be loaded from the cache. In this case the response does not contain any payload.</li>
</ul>
<p>Since a &#8220;Not Modified&#8221;-message contains much less data (no content, only header) that&#8217;s what you preferably want to return to the browser. Of cause you only want to that if you are sure that the browser already has the data.</p>
<p>For my application I found that the server was returning far more often 200-responses than 304-responses which caused</p>
<ul>
<li>More data than necessary had to be transmitted.</li>
<li>More data had to be processed by the UI.</li>
</ul>
<p>Both things were slowing down the application. Just a little, but enough to be noticed in the UI. Luckily there are only a few things you need to change in your Rails application to get the right behaviour.</p>
<p><strong><em>1) Use <code>stale?</code> in your GET methods</em></strong></p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">  <span style="color:#9966CC; font-weight:bold;">def</span> show
    <span style="color:#0066ff; font-weight:bold;">@list_item</span> = <span style="color:#0066ff; font-weight:bold;">@list</span>.<span style="color:#9900CC;">list_items</span>.<span style="color:#9900CC;">find</span><span style="color:#006600; font-weight:bold;">&#40;</span> params<span style="color:#006600; font-weight:bold;">&#91;</span> <span style="color:#ff3333; font-weight:bold;">:id</span> <span style="color:#006600; font-weight:bold;">&#93;</span> <span style="color:#006600; font-weight:bold;">&#41;</span>
    <span style="color:#9966CC; font-weight:bold;">if</span> stale?<span style="color:#006600; font-weight:bold;">&#40;</span> <span style="color:#ff3333; font-weight:bold;">:etag</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#0066ff; font-weight:bold;">@list_item</span>, <span style="color:#ff3333; font-weight:bold;">:last_modified</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#0066ff; font-weight:bold;">@list_item</span>.<span style="color:#9900CC;">updated_at</span>.<span style="color:#9900CC;">utc</span>, <span style="color:#ff3333; font-weight:bold;">:public</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#0000FF; font-weight:bold;">true</span> <span style="color:#006600; font-weight:bold;">&#41;</span>
      respond_with<span style="color:#006600; font-weight:bold;">&#40;</span> <span style="color:#0066ff; font-weight:bold;">@list_item</span> <span style="color:#006600; font-weight:bold;">&#41;</span>
    <span style="color:#9966CC; font-weight:bold;">end</span>
  <span style="color:#9966CC; font-weight:bold;">end</span></pre></div></div>

<p>Stale? sends back an etag and a last_modified date in the response. With the next request to the same URL the browser will send this etag and last_modified date to the server. The stale? method then analyses both parameters and returns 304 in case they are the same or 200 plus the new content if the newly calculated values are different.</p>
<p><img src="http://blog.project-sierra.de/wp-content/uploads/2011/05/diagram.png" alt="" title="diagram" width="375" height="427" class="aligncenter size-full wp-image-2049" /></p>
<p>More information on <a href="http://api.rubyonrails.org/classes/ActionController/ConditionalGet.html#method-i-stale-3F">stale?</a> you get in Rails&#8217; <a href="http://api.rubyonrails.org/classes/ActionController/ConditionalGet.html#method-i-stale-3F">API documentation</a> and on <a href="http://guides.rubyonrails.org/caching_with_rails.html#conditional-get-support">Rails Guides</a>.</p>
<p><strong><em>2) Make sure the browser asks for new data on each request</em></strong></p>
<p>After above modifications something interesting was happening. If the same Ajax action was triggered multiple times within a short period of time, the browser wouldn&#8217;t send a request at all to the server, but instead take the data from the cache. While obviously this made the UI really fast, it wasn&#8217;t exactly what I wanted. My goal was maximum performance while guaranteeing correct and up to date data on the screen.<br />
The browser&#8217;s caching behaviour is influenced by three HTTP header flags: <a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html">cache-controll</a>, <a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html">pragma</a> and <a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html">expires</a>.</p>
<p>To &#8220;disable&#8221; caching in the browser all together you could send the following:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">  <span style="color:#9966CC; font-weight:bold;">def</span> set_cache_buster
    response.<span style="color:#9900CC;">headers</span><span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#996600;">&quot;Cache-Control&quot;</span><span style="color:#006600; font-weight:bold;">&#93;</span> = <span style="color:#996600;">&quot;no-cache, no-store, max-age=0, must-revalidate&quot;</span>
    response.<span style="color:#9900CC;">headers</span><span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#996600;">&quot;Pragma&quot;</span><span style="color:#006600; font-weight:bold;">&#93;</span> = <span style="color:#996600;">&quot;no-cache&quot;</span>
    response.<span style="color:#9900CC;">headers</span><span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#996600;">&quot;Expires&quot;</span><span style="color:#006600; font-weight:bold;">&#93;</span> = <span style="color:#996600;">&quot;Fri, 01 Jan 1990 00:00:00 GMT&quot;</span>
  <span style="color:#9966CC; font-weight:bold;">end</span></pre></div></div>

<p>What I wanted however is this:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">  <span style="color:#9966CC; font-weight:bold;">def</span> set_must_revalidate
    response.<span style="color:#9900CC;">headers</span><span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#996600;">&quot;Cache-Control&quot;</span><span style="color:#006600; font-weight:bold;">&#93;</span> = <span style="color:#996600;">&quot;must-revalidate&quot;</span>
  <span style="color:#9966CC; font-weight:bold;">end</span></pre></div></div>

<p>This advices the browser to check for new / updated data with each request. I added this method to my application_controller.rb and I&#8217;m calling it in a before_filter of controllers for which I want to have this flag set.</p>
<p><strong><em>3) Using stale? for GET methods which return collections (e.g. index)</em></strong></p>
<p>Above stale? example is taken from a controller&#8217;s show method. This is what you find in most examples on the web. To make this work in a method which returns a collection, like typically a controller&#8217;s index method you need to find some way to figure out whether the current collection is the same as it was for the last request.<br />
List Kung Fu has a model List which has_many ListItems. Each ListItem belongs_to a List. To be able to determine in list_items_controller whether a collection of ListItems changed, I added code which updates the list.updated_at timestamp for each write operation on a list_item.</p>
<p>In ListItem.rb:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#9966CC; font-weight:bold;">class</span> ListItem <span style="color:#006600; font-weight:bold;">&lt;</span> <span style="color:#6666ff; font-weight:bold;">ActiveRecord::Base</span>
  belongs_to <span style="color:#ff3333; font-weight:bold;">:list</span>
  after_save <span style="color:#ff3333; font-weight:bold;">:update_list</span>
  after_destroy <span style="color:#ff3333; font-weight:bold;">:update_list</span>
&nbsp;
  <span style="color:#008000; font-style:italic;"># [...]</span>
&nbsp;
  <span style="color:#9966CC; font-weight:bold;">def</span> update_list
    <span style="color:#0000FF; font-weight:bold;">self</span>.<span style="color:#9900CC;">list</span>.<span style="color:#9900CC;">updated_at</span> = <span style="color:#CC00FF; font-weight:bold;">Time</span>.<span style="color:#9900CC;">now</span>
    <span style="color:#0000FF; font-weight:bold;">self</span>.<span style="color:#9900CC;">list</span>.<span style="color:#9900CC;">save</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre></div></div>

<p>Thus, in the list_items_controller the index method could look like this:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">  <span style="color:#9966CC; font-weight:bold;">def</span> index
    <span style="color:#0066ff; font-weight:bold;">@list_items</span> = <span style="color:#0066ff; font-weight:bold;">@list</span>.<span style="color:#9900CC;">list_items</span>
&nbsp;
    <span style="color:#9966CC; font-weight:bold;">if</span> stale?<span style="color:#006600; font-weight:bold;">&#40;</span> <span style="color:#ff3333; font-weight:bold;">:last_modified</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#0066ff; font-weight:bold;">@list</span>.<span style="color:#9900CC;">updated_at</span> <span style="color:#006600; font-weight:bold;">&#41;</span>
      respond_with<span style="color:#006600; font-weight:bold;">&#40;</span> <span style="color:#0066ff; font-weight:bold;">@list_items</span> <span style="color:#006600; font-weight:bold;">&#41;</span>
    <span style="color:#9966CC; font-weight:bold;">end</span>
  <span style="color:#9966CC; font-weight:bold;">end</span></pre></div></div>

<p>Instead of using the updated_at field I could have added a version field to the List model, but that seemed unnecessary. If the model doesn&#8217;t have a model it belongs_to, you need to find another strategy for checking whether the collection has been modified. Maybe it&#8217;s possible to calculate a checksum over all objects in the collection&#8230;</p>
<p>So much for this post. I also switched from using jQuery&#8217;s <a href="http://api.jquery.com/jQuery.getJSON/">getJSON</a> to Wycats <a href="https://github.com/wycats/jquery-offline">jquery-offline</a>. More about that in my next post.</p>

<!--INFOLINKS_OFF-->
<!-- google_ad_section_end -->
<p><a class="a2a_button_delicious" href="http://www.addtoany.com/add_to/delicious?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F2035&amp;linkname=Rails%203%3A%20Improving%20the%20speed%20of%20your%20Ajax%20Application" title="Delicious" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/delicious.png" width="16" height="16" alt="Delicious"/></a><a class="a2a_button_twitter" href="http://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F2035&amp;linkname=Rails%203%3A%20Improving%20the%20speed%20of%20your%20Ajax%20Application" title="Twitter" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/twitter.png" width="16" height="16" alt="Twitter"/></a><a class="a2a_button_facebook" href="http://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F2035&amp;linkname=Rails%203%3A%20Improving%20the%20speed%20of%20your%20Ajax%20Application" title="Facebook" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/facebook.png" width="16" height="16" alt="Facebook"/></a><a class="a2a_button_linkedin" href="http://www.addtoany.com/add_to/linkedin?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F2035&amp;linkname=Rails%203%3A%20Improving%20the%20speed%20of%20your%20Ajax%20Application" title="LinkedIn" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/linkedin.png" width="16" height="16" alt="LinkedIn"/></a><a class="a2a_button_reddit" href="http://www.addtoany.com/add_to/reddit?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F2035&amp;linkname=Rails%203%3A%20Improving%20the%20speed%20of%20your%20Ajax%20Application" title="Reddit" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/reddit.png" width="16" height="16" alt="Reddit"/></a><a class="a2a_button_slashdot" href="http://www.addtoany.com/add_to/slashdot?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F2035&amp;linkname=Rails%203%3A%20Improving%20the%20speed%20of%20your%20Ajax%20Application" title="Slashdot" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/slashdot.png" width="16" height="16" alt="Slashdot"/></a><a class="a2a_button_technorati_favorites" href="http://www.addtoany.com/add_to/technorati_favorites?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F2035&amp;linkname=Rails%203%3A%20Improving%20the%20speed%20of%20your%20Ajax%20Application" title="Technorati Favorites" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/technorati.png" width="16" height="16" alt="Technorati Favorites"/></a><a class="a2a_button_digg" href="http://www.addtoany.com/add_to/digg?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F2035&amp;linkname=Rails%203%3A%20Improving%20the%20speed%20of%20your%20Ajax%20Application" title="Digg" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/digg.png" width="16" height="16" alt="Digg"/></a><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F2035&amp;title=Rails%203%3A%20Improving%20the%20speed%20of%20your%20Ajax%20Application" id="wpa2a_18"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.project-sierra.de/archives/2035/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Persepolis &#8211; Marjane Satrapi</title>
		<link>http://blog.project-sierra.de/archives/2039</link>
		<comments>http://blog.project-sierra.de/archives/2039#comments</comments>
		<pubDate>Thu, 28 Apr 2011 20:17:34 +0000</pubDate>
		<dc:creator>Stefan Siebel</dc:creator>
				<category><![CDATA[Books]]></category>

		<guid isPermaLink="false">http://blog.project-sierra.de/?p=2039</guid>
		<description><![CDATA[Persepolis is an amazing comic book and it offers a view on Iran and life in Iran that you don&#8217;t hear about often these days. I read it within a couple of days and it is very worthwhile. It will &#8230; <a href="http://blog.project-sierra.de/archives/2039">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[
<!-- google_ad_section_start -->
<!--INFOLINKS_ON-->
<p><p>Persepolis is an amazing comic book and it offers a view on Iran and life in Iran that you don&#8217;t hear about often these days. I read it within a couple of days and it is very worthwhile. It will make you reconsider your own situation and history.</p>
<p><iframe src="http://rcm-de.amazon.de/e/cm?lt1=_blank&#038;bc1=000000&#038;IS2=1&#038;bg1=FFFFFF&#038;fc1=000000&#038;lc1=0000FF&#038;t=beeloge-21&#038;o=3&#038;p=8&#038;l=as4&#038;m=amazon&#038;f=ifr&#038;ref=ss_til&#038;asins=009952399X" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"></iframe></p>
<p>They also made a movie out of it. I haven&#8217;t seen it but it got lots of positive reviews on Amazon:</p>
<p><iframe src="http://rcm-de.amazon.de/e/cm?lt1=_blank&#038;bc1=000000&#038;IS2=1&#038;bg1=FFFFFF&#038;fc1=000000&#038;lc1=0000FF&#038;t=beeloge-21&#038;o=3&#038;p=8&#038;l=as4&#038;m=amazon&#038;f=ifr&#038;ref=ss_til&#038;asins=B0012XQYLI" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"></iframe></p>

<!--INFOLINKS_OFF-->
<!-- google_ad_section_end -->
<p><a class="a2a_button_delicious" href="http://www.addtoany.com/add_to/delicious?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F2039&amp;linkname=Persepolis%20%26%238211%3B%20Marjane%20Satrapi" title="Delicious" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/delicious.png" width="16" height="16" alt="Delicious"/></a><a class="a2a_button_twitter" href="http://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F2039&amp;linkname=Persepolis%20%26%238211%3B%20Marjane%20Satrapi" title="Twitter" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/twitter.png" width="16" height="16" alt="Twitter"/></a><a class="a2a_button_facebook" href="http://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F2039&amp;linkname=Persepolis%20%26%238211%3B%20Marjane%20Satrapi" title="Facebook" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/facebook.png" width="16" height="16" alt="Facebook"/></a><a class="a2a_button_linkedin" href="http://www.addtoany.com/add_to/linkedin?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F2039&amp;linkname=Persepolis%20%26%238211%3B%20Marjane%20Satrapi" title="LinkedIn" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/linkedin.png" width="16" height="16" alt="LinkedIn"/></a><a class="a2a_button_reddit" href="http://www.addtoany.com/add_to/reddit?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F2039&amp;linkname=Persepolis%20%26%238211%3B%20Marjane%20Satrapi" title="Reddit" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/reddit.png" width="16" height="16" alt="Reddit"/></a><a class="a2a_button_slashdot" href="http://www.addtoany.com/add_to/slashdot?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F2039&amp;linkname=Persepolis%20%26%238211%3B%20Marjane%20Satrapi" title="Slashdot" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/slashdot.png" width="16" height="16" alt="Slashdot"/></a><a class="a2a_button_technorati_favorites" href="http://www.addtoany.com/add_to/technorati_favorites?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F2039&amp;linkname=Persepolis%20%26%238211%3B%20Marjane%20Satrapi" title="Technorati Favorites" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/technorati.png" width="16" height="16" alt="Technorati Favorites"/></a><a class="a2a_button_digg" href="http://www.addtoany.com/add_to/digg?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F2039&amp;linkname=Persepolis%20%26%238211%3B%20Marjane%20Satrapi" title="Digg" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/digg.png" width="16" height="16" alt="Digg"/></a><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F2039&amp;title=Persepolis%20%26%238211%3B%20Marjane%20Satrapi" id="wpa2a_20"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.project-sierra.de/archives/2039/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Running SQL on Heroku</title>
		<link>http://blog.project-sierra.de/archives/2027</link>
		<comments>http://blog.project-sierra.de/archives/2027#comments</comments>
		<pubDate>Sat, 09 Apr 2011 21:24:30 +0000</pubDate>
		<dc:creator>Stefan Siebel</dc:creator>
				<category><![CDATA[Heroku]]></category>
		<category><![CDATA[RubyOnRails]]></category>

		<guid isPermaLink="false">http://blog.project-sierra.de/?p=2027</guid>
		<description><![CDATA[If you need to run some SQL manually on Heroku, the Heroku SQL Console is exactly what you&#8217;re searching for. It&#8217;s installed in 5 seconds: heroku plugins:install git://github.com/ddollar/heroku-sql-console.git]]></description>
			<content:encoded><![CDATA[
<!-- google_ad_section_start -->
<!--INFOLINKS_ON-->
<p><p>If you need to run some SQL manually on <a href="http://www.heroku.com">Heroku</a>, the <a href="https://github.com/ddollar/heroku-sql-console">Heroku SQL Console</a> is exactly what you&#8217;re searching for.</p>
<p>It&#8217;s installed in 5 seconds:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">heroku plugins:<span style="color: #c20cb9; font-weight: bold;">install</span> <span style="color: #c20cb9; font-weight: bold;">git</span>:<span style="color: #000000; font-weight: bold;">//</span>github.com<span style="color: #000000; font-weight: bold;">/</span>ddollar<span style="color: #000000; font-weight: bold;">/</span>heroku-sql-console.git</pre></div></div>

<p><img src="http://blog.project-sierra.de/wp-content/uploads/2011/04/terminal.png" alt="" title="terminal" width="609" height="357" class="aligncenter size-full wp-image-2028" /></p>

<!--INFOLINKS_OFF-->
<!-- google_ad_section_end -->
<p><a class="a2a_button_delicious" href="http://www.addtoany.com/add_to/delicious?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F2027&amp;linkname=Running%20SQL%20on%20Heroku" title="Delicious" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/delicious.png" width="16" height="16" alt="Delicious"/></a><a class="a2a_button_twitter" href="http://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F2027&amp;linkname=Running%20SQL%20on%20Heroku" title="Twitter" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/twitter.png" width="16" height="16" alt="Twitter"/></a><a class="a2a_button_facebook" href="http://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F2027&amp;linkname=Running%20SQL%20on%20Heroku" title="Facebook" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/facebook.png" width="16" height="16" alt="Facebook"/></a><a class="a2a_button_linkedin" href="http://www.addtoany.com/add_to/linkedin?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F2027&amp;linkname=Running%20SQL%20on%20Heroku" title="LinkedIn" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/linkedin.png" width="16" height="16" alt="LinkedIn"/></a><a class="a2a_button_reddit" href="http://www.addtoany.com/add_to/reddit?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F2027&amp;linkname=Running%20SQL%20on%20Heroku" title="Reddit" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/reddit.png" width="16" height="16" alt="Reddit"/></a><a class="a2a_button_slashdot" href="http://www.addtoany.com/add_to/slashdot?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F2027&amp;linkname=Running%20SQL%20on%20Heroku" title="Slashdot" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/slashdot.png" width="16" height="16" alt="Slashdot"/></a><a class="a2a_button_technorati_favorites" href="http://www.addtoany.com/add_to/technorati_favorites?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F2027&amp;linkname=Running%20SQL%20on%20Heroku" title="Technorati Favorites" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/technorati.png" width="16" height="16" alt="Technorati Favorites"/></a><a class="a2a_button_digg" href="http://www.addtoany.com/add_to/digg?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F2027&amp;linkname=Running%20SQL%20on%20Heroku" title="Digg" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/digg.png" width="16" height="16" alt="Digg"/></a><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F2027&amp;title=Running%20SQL%20on%20Heroku" id="wpa2a_22"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.project-sierra.de/archives/2027/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Where Good Ideas Come From &#8211; Steven Johnson</title>
		<link>http://blog.project-sierra.de/archives/2014</link>
		<comments>http://blog.project-sierra.de/archives/2014#comments</comments>
		<pubDate>Tue, 29 Mar 2011 19:02:59 +0000</pubDate>
		<dc:creator>Stefan Siebel</dc:creator>
				<category><![CDATA[Books]]></category>

		<guid isPermaLink="false">http://blog.project-sierra.de/?p=2014</guid>
		<description><![CDATA[If you ever were curious about how innovation actually works this video is probably what you should start with: If you found this video interesting, you definitely want to get a copy of Johnson&#8217;s awesome book &#8220;Where Good Ideas Come &#8230; <a href="http://blog.project-sierra.de/archives/2014">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[
<!-- google_ad_section_start -->
<!--INFOLINKS_ON-->
<p><p>If you ever were curious about how innovation actually works this video is probably what you should start with:</p>
<p><iframe title="YouTube video player" width="640" height="390" src="http://www.youtube.com/embed/NugRZGDbPFU" frameborder="0" allowfullscreen></iframe></p>
<p>If you found this video interesting, you definitely want to get a copy of Johnson&#8217;s awesome book &#8220;Where Good Ideas Come From&#8221;.</p>
<p>Johnson found, that there are re-occuring patterns which support innovation. He describes these patterns in seven chapters which there are</p>
<ol>
<li><strong>The Adjacent Possible</strong> &#8211; New innovations more often than not take existing pieces and put them together in a new way. Each new innovation increases the space of the adjacent possible.</li>
<li><strong>Liquid Networks</strong> &#8211; History of innovation shows that networks support good ideas and innovation. People connecting to other people and multiple disciplines are more likely to have an innovative thought.</li>
<li><strong>The Slow Hunch</strong> &#8211; Great new ideas often don&#8217;t break through in an Eureka moment. Much more often they linger in the back of someone&#8217;s head and need months, sometimes years or decades to develop into something real. Liquid networks at this point can help to bring slow hunches together and then these combined slow hunches lead to a new idea.</li>
<li><strong>Serendipity</strong> &#8211; Sometimes great ideas come to you in unexpected moments. Johnson talks about a whole bunch of good examples in his book. Sometimes it&#8217;s just necessary to free your mind, go for a walk, watch a soccer game, go on vacation and eventually a brilliant connection will occur to you which didn&#8217;t come to your mind before.</li>
<li><strong>Error</strong> &#8211; Innovation is also a history of error. If you don&#8217;t want to make any error you likely will never invent anything. By making errors you learn from every single one and if you&#8217;re lucky and interpret the errors correctly you might come up with something wonderful new.</li>
<li><strong>Exaptation</strong> &#8211; Exaptation is a term coming from biology. The feathers of birds for instance were at frist developed by mother nature for means of isolation. Later on however they turned out to be essential for flying. So feathers were exapted for flying. Looking at innovations of the recent centuries from the view point of exaptation, you&#8217;ll find that many innovations were possible by using an existing thing in a different way.</li>
<li><strong>Platforms</strong> &#8211; Platforms support innovation. Platforms allow you to _not_ think about certain things and instead concentrate on the solution of the actual problem you&#8217;re trying to solve.</li>
</ol>
<p>This is a very short summary of a great book, so I hope you got appetite and are going to read it. You can get a copy for example at Amazon.de</p>
<p><iframe src="http://rcm-de.amazon.de/e/cm?lt1=_blank&#038;bc1=000000&#038;IS2=1&#038;bg1=FFFFFF&#038;fc1=000000&#038;lc1=0000FF&#038;t=beeloge-21&#038;o=3&#038;p=8&#038;l=as4&#038;m=amazon&#038;f=ifr&#038;ref=ss_til&#038;asins=1594487715" style="margin:auto;width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0" ></iframe></p>

<!--INFOLINKS_OFF-->
<!-- google_ad_section_end -->
<p><a class="a2a_button_delicious" href="http://www.addtoany.com/add_to/delicious?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F2014&amp;linkname=Where%20Good%20Ideas%20Come%20From%20%26%238211%3B%20Steven%20Johnson" title="Delicious" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/delicious.png" width="16" height="16" alt="Delicious"/></a><a class="a2a_button_twitter" href="http://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F2014&amp;linkname=Where%20Good%20Ideas%20Come%20From%20%26%238211%3B%20Steven%20Johnson" title="Twitter" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/twitter.png" width="16" height="16" alt="Twitter"/></a><a class="a2a_button_facebook" href="http://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F2014&amp;linkname=Where%20Good%20Ideas%20Come%20From%20%26%238211%3B%20Steven%20Johnson" title="Facebook" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/facebook.png" width="16" height="16" alt="Facebook"/></a><a class="a2a_button_linkedin" href="http://www.addtoany.com/add_to/linkedin?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F2014&amp;linkname=Where%20Good%20Ideas%20Come%20From%20%26%238211%3B%20Steven%20Johnson" title="LinkedIn" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/linkedin.png" width="16" height="16" alt="LinkedIn"/></a><a class="a2a_button_reddit" href="http://www.addtoany.com/add_to/reddit?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F2014&amp;linkname=Where%20Good%20Ideas%20Come%20From%20%26%238211%3B%20Steven%20Johnson" title="Reddit" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/reddit.png" width="16" height="16" alt="Reddit"/></a><a class="a2a_button_slashdot" href="http://www.addtoany.com/add_to/slashdot?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F2014&amp;linkname=Where%20Good%20Ideas%20Come%20From%20%26%238211%3B%20Steven%20Johnson" title="Slashdot" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/slashdot.png" width="16" height="16" alt="Slashdot"/></a><a class="a2a_button_technorati_favorites" href="http://www.addtoany.com/add_to/technorati_favorites?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F2014&amp;linkname=Where%20Good%20Ideas%20Come%20From%20%26%238211%3B%20Steven%20Johnson" title="Technorati Favorites" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/technorati.png" width="16" height="16" alt="Technorati Favorites"/></a><a class="a2a_button_digg" href="http://www.addtoany.com/add_to/digg?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F2014&amp;linkname=Where%20Good%20Ideas%20Come%20From%20%26%238211%3B%20Steven%20Johnson" title="Digg" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/digg.png" width="16" height="16" alt="Digg"/></a><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F2014&amp;title=Where%20Good%20Ideas%20Come%20From%20%26%238211%3B%20Steven%20Johnson" id="wpa2a_24"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.project-sierra.de/archives/2014/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Getting Started With Spring MVC and Google App Engine</title>
		<link>http://blog.project-sierra.de/archives/1973</link>
		<comments>http://blog.project-sierra.de/archives/1973#comments</comments>
		<pubDate>Sun, 20 Mar 2011 19:18:45 +0000</pubDate>
		<dc:creator>Stefan Siebel</dc:creator>
				<category><![CDATA[AppEngine]]></category>

		<guid isPermaLink="false">http://blog.project-sierra.de/?p=1973</guid>
		<description><![CDATA[It is amazingly easy to get Spring running on Google App Engine. Here is how you do it. Install the development environment I&#8217;m assuming you installed a recent version of the JDK. Once Java is installed on your system download &#8230; <a href="http://blog.project-sierra.de/archives/1973">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[
<!-- google_ad_section_start -->
<!--INFOLINKS_ON-->
<p><p>It is amazingly easy to get Spring running on Google App Engine. Here is how you do it.</p>
<p><strong>Install the development environment</strong></p>
<p>I&#8217;m assuming you installed a recent version of the <a href="http://www.oracle.com/technetwork/java/javase/downloads/index.html">JDK</a>. Once Java is installed on your system download either <a href="http://www.eclipse.org/downloads/">Eclipse</a> or the <a href=" http://www.springsource.com/developer/sts">Spring Tool Suite (STS)</a>, which is build on top of Eclipse.</p>
<p>I personally decided for the Spring Tool Suite because it makes it ridiculously simple to install additional plug-ins like for example the Google Plugin and comes with support for Groovy and Grails which I both want to try out at some point. After starting up STS, you&#8217;re presented with the STS Dashboard. </p>
<p><img src="http://blog.project-sierra.de/wp-content/uploads/2011/03/ext.png" alt="" title="Extension" width="558" height="344" class="aligncenter size-full wp-image-1974" /></p>
<p>Click on the &#8220;Extensions&#8221;-link and search for the &#8220;Google Plugin&#8221;. I already installed it, that&#8217;s why it&#8217;s displayed as installed on below screenshot, but when you get to that page the first time, you can click the check-box on the left and then hit the &#8220;Install&#8221; button in the lower right corner. It will take a little to install the plugin, but once that&#8217;s done you&#8217;re ready to go. </p>
<p> <img src="http://blog.project-sierra.de/wp-content/uploads/2011/03/googleplugin.png" alt="" title="Google Plugin" width="639" height="249" class="aligncenter size-full wp-image-1976" /></p>
<p><strong>Create an App Engine Project</strong></p>
<p>For the sake of simplicity I will create an App Engine project only without Google Web Toolkit. Click on the Google Plugin icon (<img src="http://blog.project-sierra.de/wp-content/uploads/2011/03/googlepluginicon.png" alt="" title="Google Plugin Icon" width="26" height="25" class="alignnone size-full wp-image-1978" />) and specify a project name, a package and disable the GWT check-box.</p>
<p><img src="http://blog.project-sierra.de/wp-content/uploads/2011/03/createnewappeproject.png" alt="" title="Create New App Engine Project" width="537" height="679" class="aligncenter size-full wp-image-1981" /></p>
<p>The plug-in will auto-generate some example code for you which you can deploy straight away to App Engine.</p>
<p><strong>Deploying the App to App Engine</strong></p>
<p>If you haven&#8217;t signed up for Google App Engine yet, now is the right time to do so: <a href="http://code.google.com/intl/de/appengine/">code.google.com/intl/de/appengine</a>.<br />
Next navigate to <a href="https://appengine.google.com/">appengine.google.com</a>. All you will see is a rather empty screen (at least if you just signed up for App Engine). Click on the &#8220;Create Application&#8221;-button and fill in the form.</p>
<p><img src="http://blog.project-sierra.de/wp-content/uploads/2011/03/createapp.png" alt="" title="Create App" width="392" height="136" class="aligncenter size-full wp-image-1982" /></p>
<p>Typically it requires some creativity to select an app ID. I usually use the name I want to use and add some random numbers. That works out well most of the time. If you plan to develop and production application, the app ID doesn&#8217;t really matter anyway because you can use a custom domain later on. Once things are set up on Google&#8217;s side, hit the &#8220;Deploy&#8221;-button in STS: <img src="http://blog.project-sierra.de/wp-content/uploads/2011/03/deploybutton.png" alt="" title="Deploy  Button" width="22" height="25" class="alignnone size-full wp-image-1983" /></p>
<p>On the upcoming screen, click &#8220;App Engine Project Settings &#8230;&#8221; and specify the app ID you chose in the last step.</p>
<p><img src="http://blog.project-sierra.de/wp-content/uploads/2011/03/projectsettings.png" alt="" title="Project Settings" width="446" height="264" class="aligncenter size-full wp-image-1985" /></p>
<p>Type in the app ID and confirm with OK. Now type in your Gmail address and the password and hit deploy. After a couple of seconds your app will be available at <a href="	http://1.springapptest987654321.appspot.com/springappengine">&#8220;your app id&#8221;.appspot.com</a>.</p>
<p><strong>Adding Spring</strong></p>
<p>Now you will add Spring to the application. Instead of using a simple servlet to return the &#8220;Hello World&#8221; string you will use a Spring MVC controller.</p>
<p><em>Adding the right JARs</em></p>
<ol>
<li>Download the latest version of <a href="http://www.springsource.org/download">Spring 3</a>. I used Spring 3.0.4.</li>
<li>Extract the zip file a copy following JARs to the /war/WEB-INF/lib directory:
<ul>
<li>org.springframework.asm-3.0.4.RELEASE.jar</li>
<li>org.springframework.beans-3.0.4.RELEASE.jar</li>
<li>org.springframework.context-3.0.4.RELEASE.jar</li>
<li>org.springframework.core-3.0.4.RELEASE.jar</li>
<li>org.springframework.expression-3.0.4.RELEASE.jar</li>
<li>org.springframework.web-3.0.4.RELEASE.jar</li>
<li>org.springframework.web.servlet-3.0.4.RELEASE.jar </li>
</ul>
</li>
<li>Additionally you&#8217;ll have to add these JARs to your lib directory:
<ul>
<li><a href="http://www.antlr.org/download.html">antlr-3.3-complete.jar</a></li>
<li><a href="http://forge.ow2.org/projects/asm/">asm-3.3.1.jar</a></li>
<li><a href="http://forge.ow2.org/projects/asm/">asm-commons-3.3.1.jar</a></li>
<li><a href="http://commons.apache.org/logging/download_logging.cgi">commons-logging-1.1.1.jar</a></li>
</ul>
</li>
<li>Rename commons-logging-1.1.1.jar to something else, e.g. commons-logging-1.1.1-personal.jar</li>
<li>Add the JARs to your Build Path.</li>
</ol>
<p><em>Configuring the App</em></p>
<p>First, you tell the application to use the Spring Dispatcher Servlet and map it to the root URL. This is the web.xml after the changes:</p>

<div class="wp_syntax"><div class="code"><pre class="xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;?xml</span> <span style="color: #000066;">version</span>=<span style="color: #ff0000;">&quot;1.0&quot;</span> <span style="color: #000066;">encoding</span>=<span style="color: #ff0000;">&quot;utf-8&quot;</span><span style="color: #000000; font-weight: bold;">?&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;web-app</span> <span style="color: #000066;">xmlns:xsi</span>=<span style="color: #ff0000;">&quot;http://www.w3.org/2001/XMLSchema-instance&quot;</span></span>
<span style="color: #009900;"><span style="color: #000066;">xmlns</span>=<span style="color: #ff0000;">&quot;http://java.sun.com/xml/ns/javaee&quot;</span></span>
<span style="color: #009900;"><span style="color: #000066;">xmlns:web</span>=<span style="color: #ff0000;">&quot;http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd&quot;</span></span>
<span style="color: #009900;"><span style="color: #000066;">xsi:schemaLocation</span>=<span style="color: #ff0000;">&quot;http://java.sun.com/xml/ns/javaee</span>
<span style="color: #009900;">http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd&quot;</span> <span style="color: #000066;">version</span>=<span style="color: #ff0000;">&quot;2.5&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;servlet<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;servlet-name<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>SpringAppEngine<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/servlet-name<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;servlet-class<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>org.springframework.web.servlet.DispatcherServlet<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/servlet-class<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;load-on-startup<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>1<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/load-on-startup<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/servlet<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;servlet-mapping<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;servlet-name<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>SpringAppEngine<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/servlet-name<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;url-pattern<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>/<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/url-pattern<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/servlet-mapping<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;welcome-file-list<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;welcome-file<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>index.html<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/welcome-file<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/welcome-file-list<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/web-app<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></div></div>

<p>Now create a file named &#8220;SpringAppEngine-servlet.xml&#8221; and paste below XML:</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
</pre></td><td class="code"><pre class="xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;?xml</span> <span style="color: #000066;">version</span>=<span style="color: #ff0000;">&quot;1.0&quot;</span> <span style="color: #000066;">encoding</span>=<span style="color: #ff0000;">&quot;UTF-8&quot;</span><span style="color: #000000; font-weight: bold;">?&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;beans</span> <span style="color: #000066;">xmlns</span>=<span style="color: #ff0000;">&quot;http://www.springframework.org/schema/beans&quot;</span></span>
<span style="color: #009900;">        <span style="color: #000066;">xmlns:xsi</span>=<span style="color: #ff0000;">&quot;http://www.w3.org/2001/XMLSchema-instance&quot;</span> <span style="color: #000066;">xmlns:p</span>=<span style="color: #ff0000;">&quot;http://www.springframework.org/schema/p&quot;</span></span>
<span style="color: #009900;">        <span style="color: #000066;">xmlns:context</span>=<span style="color: #ff0000;">&quot;http://www.springframework.org/schema/context&quot;</span></span>
<span style="color: #009900;">        <span style="color: #000066;">xsi:schemaLocation</span>=<span style="color: #ff0000;">&quot;http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd  </span>
<span style="color: #009900;">        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
&nbsp;
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;context:component-scan</span> <span style="color: #000066;">base-package</span>=<span style="color: #ff0000;">&quot;com.projectsierra.springappengine&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
&nbsp;
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;bean</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">&quot;viewResolver&quot;</span></span>
<span style="color: #009900;">                <span style="color: #000066;">class</span>=<span style="color: #ff0000;">&quot;org.springframework.web.servlet.view.InternalResourceViewResolver&quot;</span></span>
<span style="color: #009900;">                <span style="color: #000066;">p:prefix</span>=<span style="color: #ff0000;">&quot;/WEB-INF/views/&quot;</span> <span style="color: #000066;">p:suffix</span>=<span style="color: #ff0000;">&quot;.jsp&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
&nbsp;
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/beans<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></td></tr></table></div>

<p>Line 8 tells Spring where to look for your controllers. Line 10 specifies that you will use JSPs as View technology. </p>
<p>Now, the last two things you need to do, is to create an actual controller and a JSP view. First, delete the auto-generated SpringAppEngineServlet class and instead create a HelloWorldController:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">package</span> <span style="color: #006699;">com.projectsierra.springappengine</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">org.springframework.stereotype.Controller</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">org.springframework.web.bind.annotation.RequestMapping</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">org.springframework.web.bind.annotation.RequestMethod</span><span style="color: #339933;">;</span>
&nbsp;
@Controller
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">final</span> <span style="color: #000000; font-weight: bold;">class</span> HelloWorldController <span style="color: #009900;">&#123;</span>
&nbsp;
	@RequestMapping<span style="color: #009900;">&#40;</span>value <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;/springappengine&quot;</span>,  method <span style="color: #339933;">=</span> RequestMethod.<span style="color: #006633;">GET</span><span style="color: #009900;">&#41;</span>
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #003399;">String</span> HelloWorld<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">return</span> <span style="color: #0000ff;">&quot;MyView&quot;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Next create a folder &#8220;views&#8221; within the WEB-INF folder. Add a file named MyView.jsp. The sole content of MyView.jsp is the string &#8220;Hello World&#8221;.</p>
<p>That&#8217;s it. Start up the development server and hit http://localhost:8888/springappengine:</p>
<p><img src="http://blog.project-sierra.de/wp-content/uploads/2011/03/localhost.png" alt="" title="localhost" width="411" height="274" class="aligncenter size-full wp-image-1991" /></p>
<p>By clicking the deployment button a second time you can deploy this version of the application to App Engine. If you want to preserve the first version, change the version number in the App Engine Project Settings before you deploy. A live version of above code runs at <a href="http://2.springapptest987654321.appspot.com/springappengine">http://2.springapptest987654321.appspot.com/springappengine</a>.</p>
<p><strong>Resources</strong></p>
<ul>
<li>Download the example code <a href="http://blog.project-sierra.de/wp-content/uploads/2011/03/SpringAppEngine.zip">here</a>.</li>
<li><a href="http://www.ardentlord.com/apps/blog/show/829881-spring-3-0-on-google-app-engine">Spring on GAE</a></li>
<li><a href="http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/mvc.html">Spring MVC Documentation</a></li>
</ul>

<!--INFOLINKS_OFF-->
<!-- google_ad_section_end -->
<p><a class="a2a_button_delicious" href="http://www.addtoany.com/add_to/delicious?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F1973&amp;linkname=Getting%20Started%20With%20Spring%20MVC%20and%20Google%20App%20Engine" title="Delicious" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/delicious.png" width="16" height="16" alt="Delicious"/></a><a class="a2a_button_twitter" href="http://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F1973&amp;linkname=Getting%20Started%20With%20Spring%20MVC%20and%20Google%20App%20Engine" title="Twitter" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/twitter.png" width="16" height="16" alt="Twitter"/></a><a class="a2a_button_facebook" href="http://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F1973&amp;linkname=Getting%20Started%20With%20Spring%20MVC%20and%20Google%20App%20Engine" title="Facebook" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/facebook.png" width="16" height="16" alt="Facebook"/></a><a class="a2a_button_linkedin" href="http://www.addtoany.com/add_to/linkedin?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F1973&amp;linkname=Getting%20Started%20With%20Spring%20MVC%20and%20Google%20App%20Engine" title="LinkedIn" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/linkedin.png" width="16" height="16" alt="LinkedIn"/></a><a class="a2a_button_reddit" href="http://www.addtoany.com/add_to/reddit?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F1973&amp;linkname=Getting%20Started%20With%20Spring%20MVC%20and%20Google%20App%20Engine" title="Reddit" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/reddit.png" width="16" height="16" alt="Reddit"/></a><a class="a2a_button_slashdot" href="http://www.addtoany.com/add_to/slashdot?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F1973&amp;linkname=Getting%20Started%20With%20Spring%20MVC%20and%20Google%20App%20Engine" title="Slashdot" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/slashdot.png" width="16" height="16" alt="Slashdot"/></a><a class="a2a_button_technorati_favorites" href="http://www.addtoany.com/add_to/technorati_favorites?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F1973&amp;linkname=Getting%20Started%20With%20Spring%20MVC%20and%20Google%20App%20Engine" title="Technorati Favorites" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/technorati.png" width="16" height="16" alt="Technorati Favorites"/></a><a class="a2a_button_digg" href="http://www.addtoany.com/add_to/digg?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F1973&amp;linkname=Getting%20Started%20With%20Spring%20MVC%20and%20Google%20App%20Engine" title="Digg" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/digg.png" width="16" height="16" alt="Digg"/></a><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F1973&amp;title=Getting%20Started%20With%20Spring%20MVC%20and%20Google%20App%20Engine" id="wpa2a_26"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.project-sierra.de/archives/1973/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Software Toolbox for Digital Image Processing</title>
		<link>http://blog.project-sierra.de/archives/1947</link>
		<comments>http://blog.project-sierra.de/archives/1947#comments</comments>
		<pubDate>Tue, 15 Mar 2011 20:01:52 +0000</pubDate>
		<dc:creator>Stefan Siebel</dc:creator>
				<category><![CDATA[Gimp]]></category>
		<category><![CDATA[Photography]]></category>
		<category><![CDATA[Tools]]></category>

		<guid isPermaLink="false">http://blog.project-sierra.de/?p=1947</guid>
		<description><![CDATA[Since I started working in a full time job in 2008 I didn&#8217;t really spend much time taking pictures. Last June I decided that I should change that again. I had mainly two reasons. First, I really like taking pictures, &#8230; <a href="http://blog.project-sierra.de/archives/1947">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[
<!-- google_ad_section_start -->
<!--INFOLINKS_ON-->
<p><p>Since I started working in a full time job in 2008 I didn&#8217;t really spend much time taking pictures. Last June I decided that I should change that again. I had mainly two reasons. First, I really like taking pictures, second it&#8217;s healthy to have some sort of creative hobby other than programming.</p>
<p>After not following the market for digital image processing software for two years I first went through some research regarding which software suites my needs best. After much testing and playing around with trial versions I&#8217;m now pretty happy with the ones I list below.</p>
<p><strong>The Basics</strong></p>
<p><img src="http://blog.project-sierra.de/wp-content/uploads/2011/03/adobe-lightroom-3-beta.jpg" alt="" title="Lightroom 3" width="150" height="149" class="alignleft size-full wp-image-1949" /><em>RAW developement</em>: I first tried <a href="http://bibblelabs.com/products/bibble5/">Bibble 5</a> for developing my RAWs because a colleague recommended it but I didn&#8217;t really like the work-flow. After throwing Bibble away, I quickly fell in love with <a href="http://www.adobe.com/products/photoshoplightroom/features/">Adobe Lightroom 3</a>. It&#8217;s quick, has amazingly useful editing features, efficient noise reduction and supports lens corrections for many models. Lightroom is available for Windows and Mac OS X. Linux users come away empty-handed.</p>
<p><img src="http://blog.project-sierra.de/wp-content/uploads/2011/03/gimp.jpg" alt="" title="gimp" width="150" height="150" class="alignright size-full wp-image-1950" /><em>Manipulation</em>: Gimp is the often mentioned free <a href="http://www.adobe.com/products/photoshop/photoshop/">Adobe Photoshop</a> alternative. It requires a bit of effort to get started but it&#8217;s well invested time. There are plenty of plug-ins for Gimp out of which I find the following most useful:</p>
<ul>
<li><a href="http://gmic.sourceforge.net/">G&#8217;Mic</a>: An excellent collection of filters which I highly recommend to install.</li>
<li><a href="http://ufraw.sourceforge.net/">UFRaw</a>: Raw Converter for Gimp. By far not as powerful as Lightroom, but it does its job. Useful for Linux users who can&#8217;t benefit from Lightroom.</li>
<li><a href="http://tir.astro.utoledo.edu/jdsmith/code/exposure_blend.php">Exposure Blend</a>: Exposure Blend supports you in creating HDR / DRI images out of a series of photos with different exposures. I&#8217;m not using it much but during testing it did what it promised.</li>
</ul>
<p>Check out the <a href="http://registry.gimp.org/">Gimp Registry</a> for more plug-ins.</p>
<p><strong>HDR Photography</strong></p>
<p><img src="http://blog.project-sierra.de/wp-content/uploads/2011/03/Photomatix48.gif" alt="" title="Photomatix " width="48" height="48" class="alignleft size-full wp-image-1956" /><a href="http://www.google.de/images?hl=de&#038;source=hp&#038;q=hdr&#038;gbv=2&#038;aq=f&#038;aqi=g10&#038;aql=&#038;oq=">HDR</a> is short for <a href="http://en.wikipedia.org/wiki/High-dynamic-range_imaging">High Dynamic Range</a> and is essentially a method to increase a photo&#8217;s contrast range. Thus dark and light areas of an image will be equally well exposed. Use Google&#8217;s image search and <a href="http://www.google.de/images?hl=de&#038;q=hdr&#038;gbv=2&#038;um=1&#038;ie=UTF-8&#038;source=og&#038;sa=N&#038;tab=wi">search for &#8220;HDR&#8221;</a> or search for the same on <a href="http://www.flickr.com/search/?q=hdr">flickr</a>, in order to get an impression.<br />
The right software support to create such images you&#8217;ll find in <a href="http://www.hdrsoft.com/">Photomatix</a>. Photomatix is totally foolproof while offering a wide range of options. You&#8217;ll have your first <a href="http://en.wikipedia.org/wiki/Tone_mapping">tone mapped</a> photo within minutes!</p>
<p><strong>Panoramas</strong></p>
<p>I think I haven&#8217;t tried to create a panorama for at least 5 years and I remember back then the stitching process was a real pain. Nowadays, software like <a href="http://www.ptgui.com/">PTgui</a> let&#8217;s you create awesome panoramas in very short time; at least if the source images are usable. PTgui pro even combines panorama with HDR awesomeness. Quite an impressive combination. Check out Christian Maier&#8217;s photos on <a href="http://www.fotocommunity.de/pc/pc/mypics/792882">fotocommunity.de</a> for some examples which take it to the maximum.</p>
<p><strong>Macro Photography</strong></p>
<p>I never used any special software for macros, but I recently found <a href="http://www.heliconsoft.com/index.html">Helicon Focus</a> which takes several photos with different depth of field and combines them into one photo. They have a <a href="http://www.heliconsoft.com/video.html">video</a> on their page demonstrating the process. It&#8217;s like HDR, but instead of increasing the contrast range, it&#8217;s merging depth of fields.</p>

<!--INFOLINKS_OFF-->
<!-- google_ad_section_end -->
<p><a class="a2a_button_delicious" href="http://www.addtoany.com/add_to/delicious?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F1947&amp;linkname=Software%20Toolbox%20for%20Digital%20Image%20Processing" title="Delicious" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/delicious.png" width="16" height="16" alt="Delicious"/></a><a class="a2a_button_twitter" href="http://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F1947&amp;linkname=Software%20Toolbox%20for%20Digital%20Image%20Processing" title="Twitter" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/twitter.png" width="16" height="16" alt="Twitter"/></a><a class="a2a_button_facebook" href="http://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F1947&amp;linkname=Software%20Toolbox%20for%20Digital%20Image%20Processing" title="Facebook" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/facebook.png" width="16" height="16" alt="Facebook"/></a><a class="a2a_button_linkedin" href="http://www.addtoany.com/add_to/linkedin?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F1947&amp;linkname=Software%20Toolbox%20for%20Digital%20Image%20Processing" title="LinkedIn" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/linkedin.png" width="16" height="16" alt="LinkedIn"/></a><a class="a2a_button_reddit" href="http://www.addtoany.com/add_to/reddit?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F1947&amp;linkname=Software%20Toolbox%20for%20Digital%20Image%20Processing" title="Reddit" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/reddit.png" width="16" height="16" alt="Reddit"/></a><a class="a2a_button_slashdot" href="http://www.addtoany.com/add_to/slashdot?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F1947&amp;linkname=Software%20Toolbox%20for%20Digital%20Image%20Processing" title="Slashdot" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/slashdot.png" width="16" height="16" alt="Slashdot"/></a><a class="a2a_button_technorati_favorites" href="http://www.addtoany.com/add_to/technorati_favorites?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F1947&amp;linkname=Software%20Toolbox%20for%20Digital%20Image%20Processing" title="Technorati Favorites" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/technorati.png" width="16" height="16" alt="Technorati Favorites"/></a><a class="a2a_button_digg" href="http://www.addtoany.com/add_to/digg?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F1947&amp;linkname=Software%20Toolbox%20for%20Digital%20Image%20Processing" title="Digg" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/digg.png" width="16" height="16" alt="Digg"/></a><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F1947&amp;title=Software%20Toolbox%20for%20Digital%20Image%20Processing" id="wpa2a_28"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.project-sierra.de/archives/1947/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Turn off startup sound in Mac OSX</title>
		<link>http://blog.project-sierra.de/archives/1943</link>
		<comments>http://blog.project-sierra.de/archives/1943#comments</comments>
		<pubDate>Thu, 10 Mar 2011 19:44:12 +0000</pubDate>
		<dc:creator>Stefan Siebel</dc:creator>
				<category><![CDATA[OSX]]></category>

		<guid isPermaLink="false">http://blog.project-sierra.de/?p=1943</guid>
		<description><![CDATA[If you find the Mac OSX startup sound as annoying as I do you will love this tool: StartupSound.prefPane A detailed description about how to use it you&#8217;ll find here. I do wonder why Apple does not include this option &#8230; <a href="http://blog.project-sierra.de/archives/1943">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[
<!-- google_ad_section_start -->
<!--INFOLINKS_ON-->
<p><p>If you find the Mac OSX startup sound as annoying as I do you will love this tool: <a href="http://www5e.biglobe.ne.jp/~arcana/index.en.html">StartupSound.prefPane</a></p>
<p>A detailed <a href="http://www.trickyways.com/2010/01/how-to-control-startup-sound-on-mac-os-x/">description</a> about how to use it you&#8217;ll find <a href="http://www.trickyways.com/2010/01/how-to-control-startup-sound-on-mac-os-x/">here</a>.</p>
<p>I do wonder why Apple does not include this option in the system preferences.</p>

<!--INFOLINKS_OFF-->
<!-- google_ad_section_end -->
<p><a class="a2a_button_delicious" href="http://www.addtoany.com/add_to/delicious?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F1943&amp;linkname=Turn%20off%20startup%20sound%20in%20Mac%20OSX" title="Delicious" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/delicious.png" width="16" height="16" alt="Delicious"/></a><a class="a2a_button_twitter" href="http://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F1943&amp;linkname=Turn%20off%20startup%20sound%20in%20Mac%20OSX" title="Twitter" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/twitter.png" width="16" height="16" alt="Twitter"/></a><a class="a2a_button_facebook" href="http://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F1943&amp;linkname=Turn%20off%20startup%20sound%20in%20Mac%20OSX" title="Facebook" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/facebook.png" width="16" height="16" alt="Facebook"/></a><a class="a2a_button_linkedin" href="http://www.addtoany.com/add_to/linkedin?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F1943&amp;linkname=Turn%20off%20startup%20sound%20in%20Mac%20OSX" title="LinkedIn" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/linkedin.png" width="16" height="16" alt="LinkedIn"/></a><a class="a2a_button_reddit" href="http://www.addtoany.com/add_to/reddit?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F1943&amp;linkname=Turn%20off%20startup%20sound%20in%20Mac%20OSX" title="Reddit" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/reddit.png" width="16" height="16" alt="Reddit"/></a><a class="a2a_button_slashdot" href="http://www.addtoany.com/add_to/slashdot?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F1943&amp;linkname=Turn%20off%20startup%20sound%20in%20Mac%20OSX" title="Slashdot" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/slashdot.png" width="16" height="16" alt="Slashdot"/></a><a class="a2a_button_technorati_favorites" href="http://www.addtoany.com/add_to/technorati_favorites?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F1943&amp;linkname=Turn%20off%20startup%20sound%20in%20Mac%20OSX" title="Technorati Favorites" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/technorati.png" width="16" height="16" alt="Technorati Favorites"/></a><a class="a2a_button_digg" href="http://www.addtoany.com/add_to/digg?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F1943&amp;linkname=Turn%20off%20startup%20sound%20in%20Mac%20OSX" title="Digg" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/digg.png" width="16" height="16" alt="Digg"/></a><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F1943&amp;title=Turn%20off%20startup%20sound%20in%20Mac%20OSX" id="wpa2a_30"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.project-sierra.de/archives/1943/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Introduction to the DOM</title>
		<link>http://blog.project-sierra.de/archives/1937</link>
		<comments>http://blog.project-sierra.de/archives/1937#comments</comments>
		<pubDate>Sun, 13 Feb 2011 15:57:35 +0000</pubDate>
		<dc:creator>Stefan Siebel</dc:creator>
				<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://blog.project-sierra.de/?p=1937</guid>
		<description><![CDATA[Relaxing introduction to the DOM. Great for starters, but also interesting for experienced JS programmers Douglas Crockford: &#34;Theory of the DOM &#34; (1 of 3) @ Yahoo! Video Douglas Crockford: &#34;Theory of the DOM&#34; (2 of 3) @ Yahoo! Video &#8230; <a href="http://blog.project-sierra.de/archives/1937">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[
<!-- google_ad_section_start -->
<!--INFOLINKS_ON-->
<p><p>Relaxing introduction to the DOM. Great for starters, but also interesting for experienced JS programmers</p>
<div><object width="512" height="322"><param name="movie" value="http://d.yimg.com/static.video.yahoo.com/yep/YV_YEP.swf?ver=2.2.46" /><param name="allowFullScreen" value="true" /><param name="AllowScriptAccess" VALUE="always" /><param name="bgcolor" value="#000000" /><param name="flashVars" value="id=992708&#038;vid=111582&#038;lang=en-us&#038;intl=us&#038;thumbUrl=http%3A//l.yimg.com/a/i/us/sch/cn/v/v0/w326/111582_320_240.jpeg&#038;embed=1" /><embed src="http://d.yimg.com/static.video.yahoo.com/yep/YV_YEP.swf?ver=2.2.46" type="application/x-shockwave-flash" width="512" height="322" allowFullScreen="true" AllowScriptAccess="always" bgcolor="#000000" flashVars="id=992708&#038;vid=111582&#038;lang=en-us&#038;intl=us&#038;thumbUrl=http%3A//l.yimg.com/a/i/us/sch/cn/v/v0/w326/111582_320_240.jpeg&#038;embed=1" ></embed></object><br /><a href="http://video.yahoo.com/watch/111582/992708">Douglas Crockford: &quot;Theory of the DOM &quot; (1 of 3)</a> @ <a href="http://video.yahoo.com" >Yahoo! Video</a></div>
<div><object width="512" height="322"><param name="movie" value="http://d.yimg.com/static.video.yahoo.com/yep/YV_YEP.swf?ver=2.2.46" /><param name="allowFullScreen" value="true" /><param name="AllowScriptAccess" VALUE="always" /><param name="bgcolor" value="#000000" /><param name="flashVars" value="id=996002&#038;vid=111583&#038;lang=en-us&#038;intl=us&#038;thumbUrl=http%3A//l.yimg.com/a/i/us/sch/cn/v/v0/w327/111583_100_70.jpeg%3Fx%3D158%26y%3D111%26sig%3DG2f65fsDiJybzRbHkElMzw--&#038;embed=1" /><embed src="http://d.yimg.com/static.video.yahoo.com/yep/YV_YEP.swf?ver=2.2.46" type="application/x-shockwave-flash" width="512" height="322" allowFullScreen="true" AllowScriptAccess="always" bgcolor="#000000" flashVars="id=996002&#038;vid=111583&#038;lang=en-us&#038;intl=us&#038;thumbUrl=http%3A//l.yimg.com/a/i/us/sch/cn/v/v0/w327/111583_100_70.jpeg%3Fx%3D158%26y%3D111%26sig%3DG2f65fsDiJybzRbHkElMzw--&#038;embed=1" ></embed></object><br /><a href="http://video.yahoo.com/watch/111583/996002">Douglas Crockford: &quot;Theory of the DOM&quot; (2 of 3)</a> @ <a href="http://video.yahoo.com" >Yahoo! Video</a></div>
<div><object width="512" height="322"><param name="movie" value="http://d.yimg.com/static.video.yahoo.com/yep/YV_YEP.swf?ver=2.2.46" /><param name="allowFullScreen" value="true" /><param name="AllowScriptAccess" VALUE="always" /><param name="bgcolor" value="#000000" /><param name="flashVars" value="id=996008&#038;vid=111584&#038;lang=de-de&#038;intl=de&#038;thumbUrl=http%3A//l.yimg.com/a/i/us/sch/cn/v/v0/w326/111584_320_240.jpeg&#038;embed=1" /><embed src="http://d.yimg.com/static.video.yahoo.com/yep/YV_YEP.swf?ver=2.2.46" type="application/x-shockwave-flash" width="512" height="322" allowFullScreen="true" AllowScriptAccess="always" bgcolor="#000000" flashVars="id=996008&#038;vid=111584&#038;lang=de-de&#038;intl=de&#038;thumbUrl=http%3A//l.yimg.com/a/i/us/sch/cn/v/v0/w326/111584_320_240.jpeg&#038;embed=1" ></embed></object><br /><a href="http://de.video.yahoo.com/watch/111584/996008">Douglas Crockford: &quot;Theory of the DOM&quot; (3 of 3)</a> auf <a href="http://de.video.yahoo.com" >Yahoo! Video</a></div>

<!--INFOLINKS_OFF-->
<!-- google_ad_section_end -->
<p><a class="a2a_button_delicious" href="http://www.addtoany.com/add_to/delicious?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F1937&amp;linkname=Introduction%20to%20the%20DOM" title="Delicious" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/delicious.png" width="16" height="16" alt="Delicious"/></a><a class="a2a_button_twitter" href="http://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F1937&amp;linkname=Introduction%20to%20the%20DOM" title="Twitter" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/twitter.png" width="16" height="16" alt="Twitter"/></a><a class="a2a_button_facebook" href="http://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F1937&amp;linkname=Introduction%20to%20the%20DOM" title="Facebook" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/facebook.png" width="16" height="16" alt="Facebook"/></a><a class="a2a_button_linkedin" href="http://www.addtoany.com/add_to/linkedin?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F1937&amp;linkname=Introduction%20to%20the%20DOM" title="LinkedIn" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/linkedin.png" width="16" height="16" alt="LinkedIn"/></a><a class="a2a_button_reddit" href="http://www.addtoany.com/add_to/reddit?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F1937&amp;linkname=Introduction%20to%20the%20DOM" title="Reddit" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/reddit.png" width="16" height="16" alt="Reddit"/></a><a class="a2a_button_slashdot" href="http://www.addtoany.com/add_to/slashdot?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F1937&amp;linkname=Introduction%20to%20the%20DOM" title="Slashdot" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/slashdot.png" width="16" height="16" alt="Slashdot"/></a><a class="a2a_button_technorati_favorites" href="http://www.addtoany.com/add_to/technorati_favorites?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F1937&amp;linkname=Introduction%20to%20the%20DOM" title="Technorati Favorites" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/technorati.png" width="16" height="16" alt="Technorati Favorites"/></a><a class="a2a_button_digg" href="http://www.addtoany.com/add_to/digg?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F1937&amp;linkname=Introduction%20to%20the%20DOM" title="Digg" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/digg.png" width="16" height="16" alt="Digg"/></a><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F1937&amp;title=Introduction%20to%20the%20DOM" id="wpa2a_32"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.project-sierra.de/archives/1937/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>jQuery droppable and scrollable DIVs</title>
		<link>http://blog.project-sierra.de/archives/1912</link>
		<comments>http://blog.project-sierra.de/archives/1912#comments</comments>
		<pubDate>Sat, 05 Feb 2011 19:01:39 +0000</pubDate>
		<dc:creator>Stefan Siebel</dc:creator>
				<category><![CDATA[jQuery]]></category>

		<guid isPermaLink="false">http://blog.project-sierra.de/?p=1912</guid>
		<description><![CDATA[Today I faced some weirdness around scrollable DIVs and the droppable component of jQuery-UI. So you have a div with fixed height and width and overflow settings so that it scrolls vertically but not horizontally. Let&#8217;s call this div &#8220;wrapper&#8221;. &#8230; <a href="http://blog.project-sierra.de/archives/1912">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[
<!-- google_ad_section_start -->
<!--INFOLINKS_ON-->
<p><p>Today I faced some weirdness around scrollable DIVs and the droppable component of <a href="http://jqueryui.com/demos/droppable/">jQuery-UI</a>.</p>
<p><img src="http://blog.project-sierra.de/wp-content/uploads/2011/02/Screen-shot-2011-02-05-at-6.59.50-PM.png" alt="" title="the issue" width="400" height="310" class="aligncenter size-full wp-image-1913" /></p>
<p>So you have a div with fixed height and width and overflow settings so that it scrolls vertically but not horizontally. Let&#8217;s call this div &#8220;wrapper&#8221;. Within the wrapper you find additional div-elements. Actually so many of them that the wrapper starts scrolling. Each of these inner elements is a droppable which accepts the &#8220;Drag Me!&#8221; div.</p>
<p>If you drag &#038; drop the &#8220;Drag Me!&#8221;-div within the wrapper you get an alert &#8220;dropped&#8221;. That&#8217;s nice, because it&#8217;s expected. What&#8217;s weird is that you&#8217;ll get the &#8220;dropped&#8221; alert as well when you drop the &#8220;Drag Me!&#8221;-div somewhere below the wrapper. If you scroll down to item &#8220;Test28&#8243; and drop again below the wrapper, the drop event won&#8217;t be triggered. So it looks like while the items are invisible to the user, they are still accessible through the DOM and thus cause that the drop event is fired.</p>
<p>Check out the example on jsFiddle: <a href="http://jsfiddle.net/2p56Y/">http://jsfiddle.net/2p56Y/</a>.</p>
<p><strong>Solution 1</strong></p>
<p>One solution is to wrap the code in the function which is assigned to the drop event into this condition:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span> $<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">position</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">top</span> <span style="color: #339933;">&lt;</span> $<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'.box'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">height</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&amp;&amp;</span> $<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">position</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">top</span> <span style="color: #339933;">&gt;</span> <span style="color: #CC0000;">0</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #006600; font-style: italic;">// code within this condition will only be executed</span>
    <span style="color: #006600; font-style: italic;">// if the draggable is dropped on an item</span>
    <span style="color: #006600; font-style: italic;">// somewhere within the wrapper</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>See the modified example on jsFiddle: <a href="http://jsfiddle.net/5NuLa/5/">http://jsfiddle.net/5NuLa/5/</a></p>
<p>This solution seems to work in all scenarios I&#8217;ve tested,  but it looks a little bit like a hack.</p>
<p><strong>Solution 2</strong></p>
<p>Solution #2 is cleaner because it uses functionality of the droppable component.</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'.item'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">droppable</span><span style="color: #009900;">&#40;</span> <span style="color: #009900;">&#123;</span>
    activeClass<span style="color: #339933;">:</span> <span style="color: #3366CC;">&quot;ui-state-default&quot;</span><span style="color: #339933;">,</span>
    hoverClass<span style="color: #339933;">:</span> <span style="color: #3366CC;">&quot;ui-state-hover&quot;</span><span style="color: #339933;">,</span>
    accept<span style="color: #339933;">:</span> <span style="color: #3366CC;">&quot;#draggable&quot;</span><span style="color: #339933;">,</span>
    tolerance<span style="color: #339933;">:</span> <span style="color: #3366CC;">'fit'</span><span style="color: #339933;">,</span>
    drop<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span> event<span style="color: #339933;">,</span> ui <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000066;">alert</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;dropped&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>If the tolerance option is set to &#8220;fit&#8221;, the drop event is only triggered if the draggable is placed exactly within the droppable item. In this example it works, but if the if the draggable is bigger than the droppable it won&#8217;t work. It&#8217;s also not working if the draggable is a lot smaller than the droppable. Code: <a href="http://jsfiddle.net/CcthK/1/">http://jsfiddle.net/CcthK/1/</a></p>
<p><strong>Summary</strong></p>
<p>Looks like there&#8217;s currently no easy and elegant solution for this problem, but with above approaches you can work around it. I actually asked the question on <a href="http://stackoverflow.com/questions/4908010/jquery-droppable-and-scrollable-divs">Stack Overflow</a>. Check out the comments, there are some really good ones.</p>

<!--INFOLINKS_OFF-->
<!-- google_ad_section_end -->
<p><a class="a2a_button_delicious" href="http://www.addtoany.com/add_to/delicious?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F1912&amp;linkname=jQuery%20droppable%20and%20scrollable%20DIVs" title="Delicious" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/delicious.png" width="16" height="16" alt="Delicious"/></a><a class="a2a_button_twitter" href="http://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F1912&amp;linkname=jQuery%20droppable%20and%20scrollable%20DIVs" title="Twitter" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/twitter.png" width="16" height="16" alt="Twitter"/></a><a class="a2a_button_facebook" href="http://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F1912&amp;linkname=jQuery%20droppable%20and%20scrollable%20DIVs" title="Facebook" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/facebook.png" width="16" height="16" alt="Facebook"/></a><a class="a2a_button_linkedin" href="http://www.addtoany.com/add_to/linkedin?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F1912&amp;linkname=jQuery%20droppable%20and%20scrollable%20DIVs" title="LinkedIn" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/linkedin.png" width="16" height="16" alt="LinkedIn"/></a><a class="a2a_button_reddit" href="http://www.addtoany.com/add_to/reddit?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F1912&amp;linkname=jQuery%20droppable%20and%20scrollable%20DIVs" title="Reddit" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/reddit.png" width="16" height="16" alt="Reddit"/></a><a class="a2a_button_slashdot" href="http://www.addtoany.com/add_to/slashdot?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F1912&amp;linkname=jQuery%20droppable%20and%20scrollable%20DIVs" title="Slashdot" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/slashdot.png" width="16" height="16" alt="Slashdot"/></a><a class="a2a_button_technorati_favorites" href="http://www.addtoany.com/add_to/technorati_favorites?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F1912&amp;linkname=jQuery%20droppable%20and%20scrollable%20DIVs" title="Technorati Favorites" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/technorati.png" width="16" height="16" alt="Technorati Favorites"/></a><a class="a2a_button_digg" href="http://www.addtoany.com/add_to/digg?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F1912&amp;linkname=jQuery%20droppable%20and%20scrollable%20DIVs" title="Digg" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/digg.png" width="16" height="16" alt="Digg"/></a><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F1912&amp;title=jQuery%20droppable%20and%20scrollable%20DIVs" id="wpa2a_34"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.project-sierra.de/archives/1912/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ruby: hex to dec</title>
		<link>http://blog.project-sierra.de/archives/1907</link>
		<comments>http://blog.project-sierra.de/archives/1907#comments</comments>
		<pubDate>Sat, 05 Feb 2011 15:19:58 +0000</pubDate>
		<dc:creator>Stefan Siebel</dc:creator>
				<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://blog.project-sierra.de/?p=1907</guid>
		<description><![CDATA[Ruby is just so simple: ruby-1.8.7-p302 > 'ff'.to_i 16 => 255 ruby-1.8.7-p302 > 255.to_s 16 => "ff"]]></description>
			<content:encoded><![CDATA[
<!-- google_ad_section_start -->
<!--INFOLINKS_ON-->
<p><p>Ruby is just so simple:</p>
<pre lang="Ruby">
ruby-1.8.7-p302 > 'ff'.to_i 16<br />
 => 255<br />
ruby-1.8.7-p302 > 255.to_s 16<br />
 => "ff"
</pre</p>

<!--INFOLINKS_OFF-->
<!-- google_ad_section_end -->
<p><a class="a2a_button_delicious" href="http://www.addtoany.com/add_to/delicious?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F1907&amp;linkname=Ruby%3A%20hex%20to%20dec" title="Delicious" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/delicious.png" width="16" height="16" alt="Delicious"/></a><a class="a2a_button_twitter" href="http://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F1907&amp;linkname=Ruby%3A%20hex%20to%20dec" title="Twitter" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/twitter.png" width="16" height="16" alt="Twitter"/></a><a class="a2a_button_facebook" href="http://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F1907&amp;linkname=Ruby%3A%20hex%20to%20dec" title="Facebook" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/facebook.png" width="16" height="16" alt="Facebook"/></a><a class="a2a_button_linkedin" href="http://www.addtoany.com/add_to/linkedin?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F1907&amp;linkname=Ruby%3A%20hex%20to%20dec" title="LinkedIn" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/linkedin.png" width="16" height="16" alt="LinkedIn"/></a><a class="a2a_button_reddit" href="http://www.addtoany.com/add_to/reddit?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F1907&amp;linkname=Ruby%3A%20hex%20to%20dec" title="Reddit" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/reddit.png" width="16" height="16" alt="Reddit"/></a><a class="a2a_button_slashdot" href="http://www.addtoany.com/add_to/slashdot?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F1907&amp;linkname=Ruby%3A%20hex%20to%20dec" title="Slashdot" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/slashdot.png" width="16" height="16" alt="Slashdot"/></a><a class="a2a_button_technorati_favorites" href="http://www.addtoany.com/add_to/technorati_favorites?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F1907&amp;linkname=Ruby%3A%20hex%20to%20dec" title="Technorati Favorites" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/technorati.png" width="16" height="16" alt="Technorati Favorites"/></a><a class="a2a_button_digg" href="http://www.addtoany.com/add_to/digg?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F1907&amp;linkname=Ruby%3A%20hex%20to%20dec" title="Digg" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/digg.png" width="16" height="16" alt="Digg"/></a><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F1907&amp;title=Ruby%3A%20hex%20to%20dec" id="wpa2a_36"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.project-sierra.de/archives/1907/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Fake Flash Light with Gimp</title>
		<link>http://blog.project-sierra.de/archives/1877</link>
		<comments>http://blog.project-sierra.de/archives/1877#comments</comments>
		<pubDate>Sat, 01 Jan 2011 00:12:06 +0000</pubDate>
		<dc:creator>Stefan Siebel</dc:creator>
				<category><![CDATA[Gimp]]></category>
		<category><![CDATA[Photography]]></category>

		<guid isPermaLink="false">http://blog.project-sierra.de/?p=1877</guid>
		<description><![CDATA[I just read this Gimp tutorial and tried it out: Gimp Tricks: Fake Fill Flash Before: After: I like the result, specially because it took me only a couple of minutes.]]></description>
			<content:encoded><![CDATA[
<!-- google_ad_section_start -->
<!--INFOLINKS_ON-->
<p><p>I just read this Gimp tutorial and tried it out: <a href="http://polishlinux.org/apps/graphics/gimp-tricks-fake-fill-flash/">Gimp Tricks: Fake Fill Flash</a></p>
<p><strong>Before:</strong></p>
<p><img src="http://blog.project-sierra.de/wp-content/uploads/2011/01/fly_before.jpg" alt="" title="fly_before" width="400" height="476" class="aligncenter size-full wp-image-1878" /></p>
<p><strong>After:</strong></p>
<p><img src="http://blog.project-sierra.de/wp-content/uploads/2011/01/fly_after.jpg" alt="" title="fly_after" width="400" height="476" class="aligncenter size-full wp-image-1882" /></p>
<p>I like the result, specially because it took me only a couple of minutes.</p>

<!--INFOLINKS_OFF-->
<!-- google_ad_section_end -->
<p><a class="a2a_button_delicious" href="http://www.addtoany.com/add_to/delicious?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F1877&amp;linkname=Fake%20Flash%20Light%20with%20Gimp" title="Delicious" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/delicious.png" width="16" height="16" alt="Delicious"/></a><a class="a2a_button_twitter" href="http://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F1877&amp;linkname=Fake%20Flash%20Light%20with%20Gimp" title="Twitter" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/twitter.png" width="16" height="16" alt="Twitter"/></a><a class="a2a_button_facebook" href="http://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F1877&amp;linkname=Fake%20Flash%20Light%20with%20Gimp" title="Facebook" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/facebook.png" width="16" height="16" alt="Facebook"/></a><a class="a2a_button_linkedin" href="http://www.addtoany.com/add_to/linkedin?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F1877&amp;linkname=Fake%20Flash%20Light%20with%20Gimp" title="LinkedIn" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/linkedin.png" width="16" height="16" alt="LinkedIn"/></a><a class="a2a_button_reddit" href="http://www.addtoany.com/add_to/reddit?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F1877&amp;linkname=Fake%20Flash%20Light%20with%20Gimp" title="Reddit" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/reddit.png" width="16" height="16" alt="Reddit"/></a><a class="a2a_button_slashdot" href="http://www.addtoany.com/add_to/slashdot?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F1877&amp;linkname=Fake%20Flash%20Light%20with%20Gimp" title="Slashdot" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/slashdot.png" width="16" height="16" alt="Slashdot"/></a><a class="a2a_button_technorati_favorites" href="http://www.addtoany.com/add_to/technorati_favorites?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F1877&amp;linkname=Fake%20Flash%20Light%20with%20Gimp" title="Technorati Favorites" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/technorati.png" width="16" height="16" alt="Technorati Favorites"/></a><a class="a2a_button_digg" href="http://www.addtoany.com/add_to/digg?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F1877&amp;linkname=Fake%20Flash%20Light%20with%20Gimp" title="Digg" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/digg.png" width="16" height="16" alt="Digg"/></a><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F1877&amp;title=Fake%20Flash%20Light%20with%20Gimp" id="wpa2a_38"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.project-sierra.de/archives/1877/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Planning</title>
		<link>http://blog.project-sierra.de/archives/1871</link>
		<comments>http://blog.project-sierra.de/archives/1871#comments</comments>
		<pubDate>Thu, 30 Dec 2010 21:33:07 +0000</pubDate>
		<dc:creator>Stefan Siebel</dc:creator>
				<category><![CDATA[development]]></category>
		<category><![CDATA[Management]]></category>

		<guid isPermaLink="false">http://blog.project-sierra.de/?p=1871</guid>
		<description><![CDATA[I&#8217;m currently reading Watts S. Humphrey&#8217;s]]></description>
			<content:encoded><![CDATA[
<!-- google_ad_section_start -->
<!--INFOLINKS_ON-->
<p><p>I&#8217;m currently reading <a href="http://en.wikipedia.org/wiki/Watts_S._Humphrey">Watts S. Humphrey&#8217;s</a> <a href="<a href="http://www.amazon.de/gp/product/032171153X?ie=UTF8&#038;tag=beeloge-21&#038;linkCode=as2&#038;camp=1638&#038;creative=19454&#038;creativeASIN=032171153X"><em>Reflections on Managmen</em>t</a>. After being doubtful at first, I really started enjoying to read the book after a while.</p>
<p>One thing, which I think is really important is Humphrey&#8217;s demand to always make a plan (1). Plans prevent chaos, the are (2)</p>
<ul>
<li>A basis for agreeing on the cost and the schedule for a job</li>
<li>An organizing structure for doing the work</li>
<li>A framework for obtaining the required resources</li>
<li>The standard against which to meaure job status</li>
<li>A record of what was initially committed</li>
</ul>
<p>The reason most people don&#8217;t like planning and plans is that they are used to incomplete plans and plans which by far do not reflect reality. Good plans (3)</p>
<ul>
<li>Have to be accessible to everyone involved in the project (really everyone)</li>
<li>Have to be clear</li>
<li>Are specific &#8211; what, when, by whom, for how much?</li>
<li>Are precise &#8211; Relative term! A three year project, probably won&#8217;t be described in days. A two day project however could be described with a detail level of hours.</li>
<li>Are accurate</li>
</ul>
<p>Inaccuracy of plans is one of the most common reasons why people don&#8217;t like plans and don&#8217;t make plans in the first place. You&#8217;ll often hear &#8220;Why to make a plan, it will be out of date tomorrow&#8221;. That&#8217;s not a reason. Building software is a very dynamic process. Therefore, if you can&#8217;t plan accurately, you have to plan often (4).</p>
<p>(1) Reflections on Management, page 139.<br />
(2) page 29<br />
(3) page 30<br />
(4) page 32</p>

<!--INFOLINKS_OFF-->
<!-- google_ad_section_end -->
<p><a class="a2a_button_delicious" href="http://www.addtoany.com/add_to/delicious?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F1871&amp;linkname=Planning" title="Delicious" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/delicious.png" width="16" height="16" alt="Delicious"/></a><a class="a2a_button_twitter" href="http://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F1871&amp;linkname=Planning" title="Twitter" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/twitter.png" width="16" height="16" alt="Twitter"/></a><a class="a2a_button_facebook" href="http://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F1871&amp;linkname=Planning" title="Facebook" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/facebook.png" width="16" height="16" alt="Facebook"/></a><a class="a2a_button_linkedin" href="http://www.addtoany.com/add_to/linkedin?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F1871&amp;linkname=Planning" title="LinkedIn" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/linkedin.png" width="16" height="16" alt="LinkedIn"/></a><a class="a2a_button_reddit" href="http://www.addtoany.com/add_to/reddit?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F1871&amp;linkname=Planning" title="Reddit" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/reddit.png" width="16" height="16" alt="Reddit"/></a><a class="a2a_button_slashdot" href="http://www.addtoany.com/add_to/slashdot?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F1871&amp;linkname=Planning" title="Slashdot" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/slashdot.png" width="16" height="16" alt="Slashdot"/></a><a class="a2a_button_technorati_favorites" href="http://www.addtoany.com/add_to/technorati_favorites?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F1871&amp;linkname=Planning" title="Technorati Favorites" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/technorati.png" width="16" height="16" alt="Technorati Favorites"/></a><a class="a2a_button_digg" href="http://www.addtoany.com/add_to/digg?linkurl=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F1871&amp;linkname=Planning" title="Digg" rel="nofollow" target="_blank"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/icons/digg.png" width="16" height="16" alt="Digg"/></a><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.project-sierra.de%2Farchives%2F1871&amp;title=Planning" id="wpa2a_40"><img src="http://blog.project-sierra.de/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.project-sierra.de/archives/1871/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

