<?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>Shaping Clouds</title>
	<atom:link href="http://shapingclouds.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://shapingclouds.com</link>
	<description>A blog on developing, deploying and maintaining web applications at Firmhouse</description>
	<lastBuildDate>Tue, 18 May 2010 18:20:27 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Server Decisions: How we configure our server with Chef</title>
		<link>http://shapingclouds.com/2010/05/18/server-decisions-how-we-configure-our-server-with-chef/</link>
		<comments>http://shapingclouds.com/2010/05/18/server-decisions-how-we-configure-our-server-with-chef/#comments</comments>
		<pubDate>Tue, 18 May 2010 18:20:27 +0000</pubDate>
		<dc:creator>Michiel</dc:creator>
				<category><![CDATA[General Posts]]></category>

		<guid isPermaLink="false">http://shapingclouds.com/?p=547</guid>
		<description><![CDATA[I&#8217;ve heard a lot of stuff about Chef by Opscode some time ago but never actually gave it a try. Chef is a bundle of software that allows you to configure and install your servers by coding, not by entering commands. I fiddled with it one time but it was really hard to set up. [...]]]></description>
			<content:encoded><![CDATA[<p></p><div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fshapingclouds.com%2F2010%2F05%2F18%2Fserver-decisions-how-we-configure-our-server-with-chef%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fshapingclouds.com%2F2010%2F05%2F18%2Fserver-decisions-how-we-configure-our-server-with-chef%2F&amp;source=shapingclouds&amp;style=normal&amp;service=bit.ly" height="61" width="50" /><br />
			</a>
		</div>
<p>I&#8217;ve heard a lot of stuff about <a title="Page about Chef on Opscode site" href="http://opscode.com/chef" target="_self">Chef</a> by <a title="The creators of Chef" href="http://opscode.com">Opscode</a> some time ago but never actually gave it a try. Chef is a bundle of software that allows you to configure and install your servers by coding, not by entering commands. I fiddled with it one time but it was really hard to set up.</p>
<p>Because we&#8217;re launching our new server infrastructure on a new bigger <a title="AWS from Amazon" href="http://aws.amazon.com">Amazon</a> instance in a fe days, I thought I&#8217;d give it a try.</p>
<p>The main reason I was looking for something like Chef was automation. In the past I would install every server manually and I didn&#8217;t have some predefined bash scripts for setting up a server, installing the base system and preconfigure Rails, PHP apps and things like backups. Chef allows me to do that now.</p>
<p>Our new server is going to run various apps. Our own website, some WordPress websites and mainly Ruby on Rails apps. Because we run some business-critical apps for our clients the server setup should be clean and certainly not hacked together, and we need external backups to <a href="http://aws.amazon.com/s3">S3</a> and be able to add another server to the pool when usage gets bigger &#8211; which is going to happen.</p>
<p>When you have Chef installed, you probably want to run a <strong>Chef Server </strong>and a <strong>Chef Client</strong>. The Chef Server <strong>keeps all the state of the server configuration</strong> for the configuration and installation scripts. The Chef Client actually <strong>reads the configuration and runs the script</strong>.</p>
<p>The chef clients runs multiple recipes that configure your server. For example, a recipe downloads apache or nginx via apt-get when you&#8217;re on <a title="The Ubuntu Linux Distribution" href="http://ubuntu.com">Ubuntu</a>, but could install an RPM if you are on an rpm-based distribution. The recipe is the actual script, but you can also store configuration attributes and download urls with the recipes. These little bundles of recipes and other configuration are called cookbooks.</p>
<p>We currently have the following cookbooks in our Chef repository:</p>
<div id="attachment_550" class="wp-caption aligncenter" style="width: 237px">
	<a href="http://shapingclouds.com/wp-content/uploads/Schermafbeelding-2010-05-18-om-20.01.03.png"><img class="size-full wp-image-550" title="Our Chef repository" src="http://shapingclouds.com/wp-content/uploads/Schermafbeelding-2010-05-18-om-20.01.03.png" alt="Screenshot of the directory lay-out of our Chef repostitory" width="237" height="441" /></a>
	<p class="wp-caption-text">Our Chef repository</p>
</div>
<p>Recipes can depend on other recipes from other cookbooks. For instance to install<a title="Passenger website" href="http://modrails.com"> Phusion Passenger</a> and <a title="Nginx website" href="http://nginx.org">nginx</a>, I want to use the ruby_enterprise cookbook so it will first in stall the Phusion Ruby Enterprise Edition and then installes and configures nginx and passenger for it.</p>
<p>We use <a href="http://scoutapp.com">Scout App</a> for monitoring the performance and usage of the instance and we use it so we receive warnings if something reaches critical numbers.</p>
<p>For Scout, I did not run the Scout agent as explained on their on website, but I created a recipe for it in the scout cookbook:</p>
<p><code> </code></p>
<pre><code>gem_package "scout" do
  action :install
end

</code>
<code>gem_package "request-log-analyzer" do
  action :install
end</code>

user "scout" do
  comment "Scout Agent User"
  home "/home/scout"
  supports :manage_home =&gt; true
end

execute "scout_first_run" do
  user "scout"
  command "scout #{node[:scout][:key]}"
  creates "/home/scout/.scout/client_history.yaml"
  cwd "/home/scout"
  returns 1
  action :run
end

cron "scout_run" do
  minute "*/5"
  command "scout #{node[:scout][:key]}"
end</pre>
<p>What this recipe does it that it installs the gem &#8220;scout&#8221; using the gem_package Chef command. It then goes on to create a new system user for scout, run the scout agent for the first time and actually adds a cronjob to run it every 5 minutes.</p>
<p>You can see the code is quite clean and it doesn&#8217;t look like a hacked-together bash script and it doesn&#8217;t look as closed down as some kind of configuration database or .ini file. They are nice Ruby recipe&#8217;s for configuring stuff on your server.</p>
<p>You can see that I&#8217;m using the node[] variable a few times. The node variable is a Ruby hash of the current configuration the server (or node) is in that the client is being run. Using the web interface on the Chef server you can actually configure per-server configuration values. In our case, the Scout key would be different for every server.</p>
<p>You can do a l it more with these recipes like defining templates for files, default attributes, generating passwords but I&#8217;ll save that for another post.</p>
<p>The best thing about the recipes is that I can also communicate with the AWS API. The application cookbook you see there actually creates an EBS block storage devices and attaches it to the current node if it is not already created.</p>
<p>Because all state is saved in the Chef Server configuration database you can easily add more block storage devices or other external stuff just by running the Chef Client. The Chef client probes the server for all the current state the client is in and goes on upgrading all the new changes the recipes requested.</p>
<div id="attachment_553" class="wp-caption aligncenter" style="width: 300px">
	<a href="http://shapingclouds.com/wp-content/uploads/Schermafbeelding-2010-05-18-om-20.18.53.png"><img class="size-medium wp-image-553" title="Chef server Screenshot" src="http://shapingclouds.com/wp-content/uploads/Schermafbeelding-2010-05-18-om-20.18.53-300x146.png" alt="" width="300" height="146" /></a>
	<p class="wp-caption-text">The status page in the Chef Server webapp</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://shapingclouds.com/2010/05/18/server-decisions-how-we-configure-our-server-with-chef/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Some downtime this morning</title>
		<link>http://shapingclouds.com/2010/04/21/some-downtime-this-morning/</link>
		<comments>http://shapingclouds.com/2010/04/21/some-downtime-this-morning/#comments</comments>
		<pubDate>Wed, 21 Apr 2010 12:34:49 +0000</pubDate>
		<dc:creator>Michiel</dc:creator>
				<category><![CDATA[General Posts]]></category>

		<guid isPermaLink="false">http://shapingclouds.com/?p=544</guid>
		<description><![CDATA[Hi all, I had some downtime today so I&#8217;m sorry if you could not access this blog to get help on all the topics I right about. Everything should be fixed now. There seemed to be an error with our hosting provider. I&#8217;m trying to see if it was something major or if it was [...]]]></description>
			<content:encoded><![CDATA[<p></p><div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fshapingclouds.com%2F2010%2F04%2F21%2Fsome-downtime-this-morning%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fshapingclouds.com%2F2010%2F04%2F21%2Fsome-downtime-this-morning%2F&amp;source=shapingclouds&amp;style=normal&amp;service=bit.ly" height="61" width="50" /><br />
			</a>
		</div>
<p>Hi all,</p>
<p>I had some downtime today so I&#8217;m sorry if you could not access this blog to get help on all the topics I right about. Everything should be fixed now. There seemed to be an error with our hosting provider. I&#8217;m trying to see if it was something major or if it was just a minor glitch in the power or connectivity or something.</p>
<p>Anyways, back up now so enjoy!</p>
<p><strong>Update: </strong>It seemed there was an administrative error with the supplier of my hosting provider. Will not happen again!</p>
]]></content:encoded>
			<wfw:commentRss>http://shapingclouds.com/2010/04/21/some-downtime-this-morning/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Why your first deploy should be on Heroku</title>
		<link>http://shapingclouds.com/2010/03/29/why-your-first-deploy-should-be-on-heroku/</link>
		<comments>http://shapingclouds.com/2010/03/29/why-your-first-deploy-should-be-on-heroku/#comments</comments>
		<pubDate>Mon, 29 Mar 2010 19:04:10 +0000</pubDate>
		<dc:creator>Michiel</dc:creator>
				<category><![CDATA[How To Articles About Web Application Deployment]]></category>

		<guid isPermaLink="false">http://shapingclouds.com/?p=507</guid>
		<description><![CDATA[I started using Heroku three weeks ago since @_micho from teambox.com recommended it to me. He told me they had a free app tier with some basic functionality and you can upgrade if you need more power or other functionality. I&#8217;ve been testing it for deploying several development and staging apps the last two weeks and [...]]]></description>
			<content:encoded><![CDATA[<p><a class="post_image_link" href="http://shapingclouds.com/2010/03/29/why-your-first-deploy-should-be-on-heroku/" title="Permanent link to Why your first deploy should be on Heroku"><img class="post_image aligncenter" src="http://shapingclouds.com/wp-content/uploads/Schermafbeelding-2010-04-16-om-00.37.07.png" width="600" height="178" alt="Post image for Why your first deploy should be on Heroku" /></a>
</p><div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fshapingclouds.com%2F2010%2F03%2F29%2Fwhy-your-first-deploy-should-be-on-heroku%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fshapingclouds.com%2F2010%2F03%2F29%2Fwhy-your-first-deploy-should-be-on-heroku%2F&amp;source=shapingclouds&amp;style=normal&amp;service=bit.ly" height="61" width="50" /><br />
			</a>
		</div>
<p>I started using <a href="http://heroku.com">Heroku</a> three weeks ago since @<a href="http://twitter.com/_micho">_micho</a> from <a href="http://teambox.com">teambox.com</a> recommended it to me. He told me they had a free app tier with some basic functionality and you can upgrade if you need more power or other functionality.</p>
<p>I&#8217;ve been testing it for deploying several development and staging apps the last two weeks and <a title="Everyday Feed - a better way of reading feeds" href="http://everydayfeed.net">Everyday Feed</a> already runs on it in a production-kind-of way. I&#8217;ve come to a conclusion: <strong>always deploy your first deployment on Heroku</strong>.</p>
<p>So, why is this?</p>
<ol>
<li>Because Heroku is an app-based deployment service instead of an instance or server-based deployment service you can<strong> focus on the application and making it work, without having to worry about server installations</strong>, best deployment settings, software etc. You deploy your app on Heroku so you can fix your app, and not waste time on fixing your server.</li>
<li>Heroku is totally Git-based so it will <strong>force you have a good Git-workflow right away</strong>, from the start of your first deploy. One of the advantages of using Git is of course that your code is in version management and you can easily manage various feature sets and rollback to previous deployments, but it&#8217;ll also help you right away when you get more team members.</li>
<li>Heroku forces you to c<strong>onfigure all your things that run around your app, like cronjobs, sending email, doing queuing and caching</strong>. Because Heroku forces you to work in a very automated and modular way you&#8217;ll never mess up your app&#8217;s code with external things. This make sure you configure everything nicely in external files or in the Heroku admin panel so you never hardcode things in your code.</li>
<li><strong>Heroku is free</strong>. Well at least the first database package they have (up to 5MB). I like this from a business point-of-view because you can also scope what you spend on Heroku with your income of the app. I have a simpel rule with <a href="http://everydayfeed.net">Everyday Feed</a>: I will not upgrade Heroku until the application has some users or advertisers that are paying. This way I make sure people want to pay for the core functionality and add extra features from there, when I can buy more power at Heroku.</li>
</ol>
<p><span id="more-507"></span></p>
<p>When you have your application up-and-running on Heroku, it is probably a very clean application with all configuration outside the application logic. This means you should easily be able to migrate to another server or your own <a href="http://engineyard.com">EngineYard Cloud</a> or <a href="http://aws.amazon.com/ec2">EC2</a> load-balanced cloud environment because your app is not tied to a hardcoded server configuration.</p>
<p>When you move away, you can even keep using Heroku&#8217;s add-ons because they have a lot of partnerships with external services like <a href="http://newrelic.com/">New Relic</a> and <a href="http://sendgrid.com/">SendGrid</a> when you move away.</p>
<p>Of course, you can also<strong> just stick with </strong><a href="http://heroku.com"><strong>Heroku</strong></a> because from what I&#8217;ve heard they provide excellent application hosting for all your needs.</p>
]]></content:encoded>
			<wfw:commentRss>http://shapingclouds.com/2010/03/29/why-your-first-deploy-should-be-on-heroku/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The personal why and the launch of Everyday Feed</title>
		<link>http://shapingclouds.com/2010/03/25/the-personal-why-and-the-launch-of-everyday-feed/</link>
		<comments>http://shapingclouds.com/2010/03/25/the-personal-why-and-the-launch-of-everyday-feed/#comments</comments>
		<pubDate>Thu, 25 Mar 2010 22:37:41 +0000</pubDate>
		<dc:creator>Michiel</dc:creator>
				<category><![CDATA[Everyday Feed]]></category>
		<category><![CDATA[Web Apps]]></category>

		<guid isPermaLink="false">http://shapingclouds.com/?p=504</guid>
		<description><![CDATA[Everyday Feed started as a pet project about a week ago. I already scratched my own itch with building a service that actually let&#8217;s me read my feeds instead of skipping them. Also, this project is my way of researching and testing all the hints and tips I learned from Rework, Getting Real and Crush [...]]]></description>
			<content:encoded><![CDATA[<p></p><div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fshapingclouds.com%2F2010%2F03%2F25%2Fthe-personal-why-and-the-launch-of-everyday-feed%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fshapingclouds.com%2F2010%2F03%2F25%2Fthe-personal-why-and-the-launch-of-everyday-feed%2F&amp;source=shapingclouds&amp;style=normal&amp;service=bit.ly" height="61" width="50" /><br />
			</a>
		</div>
<p>Everyday Feed started as a pet project about a week ago. I already scratched my own itch with building a service that actually let&#8217;s me <strong>read my feeds instead of skipping them</strong>. Also, this project is my way of researching and testing all the hints and tips I learned from Rework, Getting Real and Crush It.</p>
<p>I would really like you to test it, if the idea and functionality appeal to you. If not, you can of course also just give me feedback on design or copywriting topics if you&#8217;d like. I have some future ideas. For example I&#8217;d love to <strong>build a tablet-aware web app or an iPad app</strong> for reading the daily edition of your feed paper on mobile devices so that&#8217;s probably what I&#8217;m going to work on first. But if <strong>someone has a better idea, please let me know</strong>.</p>
<p>Head on over to <a href="http://everydayfeed.net">everydayfeed.net</a>, sign up and see if it&#8217;s useful for you. Thanks!</p>
]]></content:encoded>
			<wfw:commentRss>http://shapingclouds.com/2010/03/25/the-personal-why-and-the-launch-of-everyday-feed/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Introducing Everyday Feed, a rocking feed reading service</title>
		<link>http://shapingclouds.com/2010/03/22/introducing-everyday-feed-a-rocking-feed-reading-service/</link>
		<comments>http://shapingclouds.com/2010/03/22/introducing-everyday-feed-a-rocking-feed-reading-service/#comments</comments>
		<pubDate>Mon, 22 Mar 2010 22:59:47 +0000</pubDate>
		<dc:creator>Michiel</dc:creator>
				<category><![CDATA[Web Apps]]></category>

		<guid isPermaLink="false">http://shapingclouds.com/?p=499</guid>
		<description><![CDATA[A little longer than two weeks ago, I talked about why the newspaper is going to rock, but that it&#8217;s not going to rock in it&#8217;s current form and that it&#8217;s not going to be owned by the big news companies. In that post, my conclusion was that iPad/tablet-like devices are going to be the [...]]]></description>
			<content:encoded><![CDATA[<p><a class="post_image_link" href="http://shapingclouds.com/2010/03/22/introducing-everyday-feed-a-rocking-feed-reading-service/" title="Permanent link to Introducing Everyday Feed, a rocking feed reading service"><img class="post_image aligncenter" src="http://shapingclouds.com/wp-content/uploads/Schermafbeelding-2010-04-16-om-00.39.56.png" width="600" height="196" alt="Post image for Introducing Everyday Feed, a rocking feed reading service" /></a>
</p><div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fshapingclouds.com%2F2010%2F03%2F22%2Fintroducing-everyday-feed-a-rocking-feed-reading-service%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fshapingclouds.com%2F2010%2F03%2F22%2Fintroducing-everyday-feed-a-rocking-feed-reading-service%2F&amp;source=shapingclouds&amp;style=normal&amp;service=bit.ly" height="61" width="50" /><br />
			</a>
		</div>
<p>A little longer than two weeks ago, I talked about why <a href="http://shapingclouds.com/2010/03/03/the-newspaper-is-going-to-rock-but-not-in-its-current-form/">the newspaper is going to rock</a>, but that it&#8217;s not going to rock in it&#8217;s current form and that it&#8217;s not going to be owned by the big news companies.</p>
<p>In that post, my conclusion was that iPad/tablet-like devices are going to be the near future of consuming news. In my forecast of up to 5 years, I see a lot of  people reading their news(papers) on a tablet while commuting, traveling, on the airplane, at the office, etc. I hope this will happen even sooner with the <a href="http://apple.com/ipad">release of the iPad</a> in a few weeks and of course, the other tablet devices.</p>
<p>But, I also want to contribute to a new way of consuming news &#8211; especially online blogs, news portals, magazines and other kind of feed-like services. Because building an  iPad app is just one small step to far for me right now, today I&#8217;m announcing something else:</p>
<p>It is called <strong><a href="http://everydayfeed.net">Everyday Feed</a></strong>. It is a web service that allows you to read all the feeds you have like a newspaper. No, I don&#8217;t mean in a visual way but in an experience-kind of way: waking up, preparing breakfast, grabbing your newspaper along the ways and drinking some coffee. <strong>Everyday Feed </strong>will let you do that for your feeds.</p>
<p>Head over to the current website for more details at <a href="http://everydayfeed.net">http://everydayfeed.net</a>.</p>
<p>If you want a sneak preview, contact me directly via email, on Twitter or leave something in the comments.</p>
]]></content:encoded>
			<wfw:commentRss>http://shapingclouds.com/2010/03/22/introducing-everyday-feed-a-rocking-feed-reading-service/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The newspaper is going to rock, but not in it&#8217;s current form</title>
		<link>http://shapingclouds.com/2010/03/03/the-newspaper-is-going-to-rock-but-not-in-its-current-form/</link>
		<comments>http://shapingclouds.com/2010/03/03/the-newspaper-is-going-to-rock-but-not-in-its-current-form/#comments</comments>
		<pubDate>Wed, 03 Mar 2010 19:02:58 +0000</pubDate>
		<dc:creator>Michiel</dc:creator>
				<category><![CDATA[General Posts]]></category>

		<guid isPermaLink="false">http://shapingclouds.com/?p=484</guid>
		<description><![CDATA[This morning I got out of bed, made myself a bowl of cornflakes with milk and headed over to the kitchen table where my dad always puts down the newspaper I&#8217;m subscribed to: NRC Next. It&#8217;s a Dutch tabloid-format newspaper with daily news and in-depth articles around recent happenings in the world. I recently resubscribed [...]]]></description>
			<content:encoded><![CDATA[<p></p><div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fshapingclouds.com%2F2010%2F03%2F03%2Fthe-newspaper-is-going-to-rock-but-not-in-its-current-form%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fshapingclouds.com%2F2010%2F03%2F03%2Fthe-newspaper-is-going-to-rock-but-not-in-its-current-form%2F&amp;source=shapingclouds&amp;style=normal&amp;service=bit.ly" height="61" width="50" /><br />
			</a>
		</div>
<p>This morning I got out of bed, made myself a bowl of cornflakes with milk and headed over to the kitchen table where my dad always puts down the newspaper I&#8217;m subscribed to: <a href="http://nrcnext.nl">NRC Next</a>. It&#8217;s a Dutch tabloid-format newspaper with daily news and in-depth articles around recent happenings in the world.</p>
<p>I recently resubscribed to it and I love it: I have redacted important news that fit&#8217;s to my size of wanting to read a newspaper. I just HATE folding around a large newspaper all the time. I want to have a portable newspaper that I can take with me, easily put in my bag and that falls on my doormat every day. Every night when I read the last less important articles in NRC Next, I&#8217;m already waiting for the new issue so I can enjoy another new newspaper-reading day.</p>
<p><span id="more-484"></span></p>
<p>So, that&#8217;s form and function. Now for the other great thing about NRC next: content.</p>
<p>I really HATE newspaper that just list all the news that happened the day before. They are just paper versions of the RSS feeds and news sites I refresh about 60 times a day. Those newspaper are old news in the morning and waste my time by reading the same content another time.</p>
<p>NRC Next provides in-depth articles and also covers topics that other newspapers do not cover like more Tech, Science and Philosophy. I like those topics in this paper because except from techcrunch.com I don&#8217;t really read about them, but they are actually the most important subjects in my life. NRC Next provides the most important &#8220;recent news&#8221; stories and than gets on to the good stuff.</p>
<p>Now, I think &#8220;old newspapers&#8221; are dying because of paper, because of the form and size they are printed on but also because they just provide &#8220;recent news&#8221;. All I see in most conventional newspapers is still the sum of stuff I&#8217;ve already read yesterday in my browser. They should cut that crap! Especially young internet-savvy people (25 and younger) already read those breaking news stories on the web. They get it trough sms, e-mail newsletters, blogs, RSS or refreshing newsportals 20 times a day. At least the more interested target group is interested in in-depth articles or articles about a not so well known topics: the niches. Most people tend to find content on niche blogs which are mostly amateur and the good ones are either popular and write about the same stuff from within a single standpoint or are hard to find.</p>
<p>I refresh techcrunch.com about 15 times a day because I won&#8217;t find that stuff in any newspaper.</p>
<p>So what would be the (or at least my) ideal newspaper?</p>
<p>My ideal newspaper is a newspaper where both journalists create but also just redact content. Professional journalists should have a moderation role over news and should add their own commentary about what they find. They should put together a newspaper with content from various sources and add their own content to it. Journalists are educated in filtering the crap articles and picking the right ones or the special ones. They can add some &#8220;recent news/breaking stories&#8221; articles, especially on bigger developing ones but they should but the crap with those small &#8220;a cat fell out of the tree and hit a car which caused a major accident&#8221;-kind of stuff. I already read that yesterday!</p>
<p>Also, I want to cut the paper out of newspaper. I have too many papers laying around all the time and I want to be able to view movies and stuff and listen to documentaries or audio clips while reading the articles. A device like the iPad would be ideal for this. I want to be able to drag, drop, click, view, interact, bookmark, sync and share the content the editors wrote and moderated for me. And I want to take my newspaper with me all the time and I want to be able to read it anywhere. And no, that doesn&#8217;t mean on a smartphone.</p>
<p>Have you seen the sizes of those screens? When reading a paper I scan, I look at the pictures beside it, I switch between articles etc. That&#8217;s just nog possible on the screen size of smart phone. A laptop? No. I don&#8217;t need a keyboard when reading the newspaper, I don&#8217;t want to open/close my lid every time I switch trains when commuting, talk to somebody at the office, go out lunch or just switch channels on my TV. I want it to &#8220;feel&#8221; like a traditional paper tabloid-size version so I can carry it around everywhere without fuzz.</p>
<p>So the last thing I would like to add that relates to content and realtime and carrying the device. Carrying the device with you DOES NOT mean that I want to update it all the time! When I get a lot of great articles in the morning I don&#8217;t want them to be lost in the stream all the news stories in the world. The professionals behind the paper can select and moderate them for me until I get my new newspaper release the next morning and leave out all the unimportant or boring stuff. The state should be maintained in every release. I want to be sure that when I wake up there is a great new digital and interactive release of that days paper and I want to be sure that it&#8217;s still there when I get home in the evening or go to lunch so I can read on where I left off.</p>
<p>I want a newspaper where <strong>content is moderated and written by professional journalists</strong> so I won&#8217;t have to do the moderation myself and check 2000 feeds every day. I want it to be i<strong>nteractive, be able to share and bookmark stuff</strong>. I want it to p<strong>ortable on a comfortable size</strong>. Not a phone size and not something sluggish like a laptop.</p>
<p>Finally I want the content to <strong>stay all day</strong>. I want to have that traditional newspaper feeling. In the evening, I want to have the traditional newspaper feeling that tomorrow there will be a great new newspaper release waiting for me to be consumed. I want to be sure that I&#8217;m never leaving any important piece behind and that the professional journalists will tell me the next day, if I do.</p>
<p>No, mainstream consumers are not ready for this yet, but I think they&#8217;re going to become very close in the next 2 &#8211; 4 years. I believe that in 6 years, everyone will be reading the news on an iPad-like device while commuting. And I believe this is currently the only way that non-internet-tech-journalist-savvy people can consume news in a better way.</p>
]]></content:encoded>
			<wfw:commentRss>http://shapingclouds.com/2010/03/03/the-newspaper-is-going-to-rock-but-not-in-its-current-form/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Scrum in Firmhouse walktrough</title>
		<link>http://shapingclouds.com/2010/02/06/scrum-in-firmhouse-walktrough/</link>
		<comments>http://shapingclouds.com/2010/02/06/scrum-in-firmhouse-walktrough/#comments</comments>
		<pubDate>Fri, 05 Feb 2010 23:38:32 +0000</pubDate>
		<dc:creator>Michiel</dc:creator>
				<category><![CDATA[How To Articles About Web Application Deployment]]></category>

		<guid isPermaLink="false">http://shapingclouds.com/?p=467</guid>
		<description><![CDATA[I just wanted to share with you this presentation I created yesterday to communicate to other people and ourselves on how we use Scrum in Firmhouse. This is a first set of tools I&#8217;m creating for ourselves to get going with Scrum to create our products. But it can be a good piece of information [...]]]></description>
			<content:encoded><![CDATA[<p></p><div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fshapingclouds.com%2F2010%2F02%2F06%2Fscrum-in-firmhouse-walktrough%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fshapingclouds.com%2F2010%2F02%2F06%2Fscrum-in-firmhouse-walktrough%2F&amp;source=shapingclouds&amp;style=normal&amp;service=bit.ly" height="61" width="50" /><br />
			</a>
		</div>
<p>I just wanted to share with you this presentation I created yesterday to communicate to other people and ourselves on how we use Scrum in Firmhouse. This is a first set of tools I&#8217;m creating for ourselves to get going with Scrum to create our products. But it can be a good piece of information for you too. The slides are great to keep as a reference on what kind of meetings you are going to have and what you need to discuss in them.</p>
<p>Expect more detailed Scrum and Agile Development stuff in the near future. We&#8217;re getting to an awesome workflow here. In the mean time, read 37signals <a href="http://37signals.com/svn/posts/2099-2010-the-year-of-the-products-a-new-way-of-working">excellent post about how they are going to approach development</a> of new features in their products.</p>
<p>Here are the slides via SlideShare embed:</p>
<div style="width:425px;text-align:left" id="__ss_3083946"><a style="font:14px Helvetica,Arial,Sans-serif;display:block;margin:12px 0 3px 0;text-decoration:underline;" href="http://www.slideshare.net/msikkes/scrum-at-firmhouse" title="Scrum At Firmhouse">Scrum At Firmhouse</a><object style="margin:0px" width="425" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=scrumatfirmhouse-100205172349-phpapp01&#038;rel=0&#038;stripped_title=scrum-at-firmhouse" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=scrumatfirmhouse-100205172349-phpapp01&#038;rel=0&#038;stripped_title=scrum-at-firmhouse" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object>
<div style="font-size:11px;font-family:tahoma,arial;height:26px;padding-top:2px;">View more <a style="text-decoration:underline;" href="http://www.slideshare.net/">presentations</a> from <a style="text-decoration:underline;" href="http://www.slideshare.net/msikkes">Michiel Sikkes</a>.</div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://shapingclouds.com/2010/02/06/scrum-in-firmhouse-walktrough/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Agile Qloudwatch Development update (AWS budgets and more)</title>
		<link>http://shapingclouds.com/2010/01/14/agile-qloudwatch-development-update-aws-budgets-and-more/</link>
		<comments>http://shapingclouds.com/2010/01/14/agile-qloudwatch-development-update-aws-budgets-and-more/#comments</comments>
		<pubDate>Thu, 14 Jan 2010 21:17:47 +0000</pubDate>
		<dc:creator>Michiel</dc:creator>
				<category><![CDATA[Amazon Web Services]]></category>
		<category><![CDATA[Updates on Qloudwatch]]></category>

		<guid isPermaLink="false">http://shapingclouds.com/?p=453</guid>
		<description><![CDATA[So I thought I&#8217;d give you an update on Qloudwatch. Qloudwatch is going to be the easy-to-use web service that allows you to get insights on your Amazon Web Services cloud usage, group your instances into project and set budgets and warnings for AWS instance costs. We&#8217;ve been working really hard the past few weeks [...]]]></description>
			<content:encoded><![CDATA[<p></p><div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fshapingclouds.com%2F2010%2F01%2F14%2Fagile-qloudwatch-development-update-aws-budgets-and-more%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fshapingclouds.com%2F2010%2F01%2F14%2Fagile-qloudwatch-development-update-aws-budgets-and-more%2F&amp;source=shapingclouds&amp;style=normal&amp;service=bit.ly" height="61" width="50" /><br />
			</a>
		</div>
<p>So I thought I&#8217;d give you an update on <a href="http://qloudwatch.com">Qloudwatch</a>. Qloudwatch is going to be the easy-to-use web service that allows you to get insights on your <a href="http://aws.amazon.com">Amazon Web Services</a> cloud usage, group your instances into project and set budgets and warnings for AWS instance costs.</p>
<p>We&#8217;ve been working really hard the past few weeks to get ready for a first public release. <a href="http://disrupt.in">Bob</a> is busy thinking about an honest and functional business model and researching our terms of service and I&#8217;m crunching feature development, tweaking, adding even better security.</p>
<p>What we&#8217;re currently looking at releasing in our first launch is the following:</p>
<ul>
<li>Create projects and give other people access so you can collaborate on a cloud project. Multiple users with different AWS accounts can be added to a project so you can share costs and get a good overview what your application or cloud team is using, spanning possibly multiple AWS account.</li>
<li>Adding instances to project by accessing the AWS API with your AWS credentials. Yes, we do ask you to enter them into your account for now. Because of this, we&#8217;ve implemented SSL security and encryption into our database. Even in our demo period you can test right now at http://qloudwatch.com</li>
<li>Give you total and monthly cost estimates based on the running hours of the instances in a project.</li>
<li>A personal dashboard where you can get insights in the instances your personal AWS account is running.</li>
</ul>
<p>We&#8217;re going to rapidly develop more statistics and are going to build in ways to collect better usage data from your instances if you choose to. If you want to influence our priorities, please give us some feedback of what statistics and overviews you would like to see first.</p>
<p>Here are some more sneak preview screenshots:</p>

<a href='http://shapingclouds.com/2010/01/14/agile-qloudwatch-development-update-aws-budgets-and-more/schermafbeelding-2010-01-14-om-22-06-02/' title='Schermafbeelding 2010-01-14 om 22.06.02'><img width="150" height="150" src="http://shapingclouds.com/wp-content/uploads/Schermafbeelding-2010-01-14-om-22.06.02-150x150.png" class="attachment-thumbnail" alt="Schermafbeelding 2010-01-14 om 22.06.02" title="Schermafbeelding 2010-01-14 om 22.06.02" /></a>
<a href='http://shapingclouds.com/2010/01/14/agile-qloudwatch-development-update-aws-budgets-and-more/schermafbeelding-2010-01-14-om-22-06-08/' title='Schermafbeelding 2010-01-14 om 22.06.08'><img width="150" height="150" src="http://shapingclouds.com/wp-content/uploads/Schermafbeelding-2010-01-14-om-22.06.08-150x150.png" class="attachment-thumbnail" alt="Schermafbeelding 2010-01-14 om 22.06.08" title="Schermafbeelding 2010-01-14 om 22.06.08" /></a>
<a href='http://shapingclouds.com/2010/01/14/agile-qloudwatch-development-update-aws-budgets-and-more/schermafbeelding-2010-01-14-om-22-06-12/' title='Schermafbeelding 2010-01-14 om 22.06.12'><img width="150" height="150" src="http://shapingclouds.com/wp-content/uploads/Schermafbeelding-2010-01-14-om-22.06.12-150x150.png" class="attachment-thumbnail" alt="Schermafbeelding 2010-01-14 om 22.06.12" title="Schermafbeelding 2010-01-14 om 22.06.12" /></a>

]]></content:encoded>
			<wfw:commentRss>http://shapingclouds.com/2010/01/14/agile-qloudwatch-development-update-aws-budgets-and-more/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>A problem (and a solution) with AWS: no segregation of instances and no budgets</title>
		<link>http://shapingclouds.com/2010/01/04/a-problem-and-a-solution-with-aws-no-segregation-of-instances-and-no-budgets/</link>
		<comments>http://shapingclouds.com/2010/01/04/a-problem-and-a-solution-with-aws-no-segregation-of-instances-and-no-budgets/#comments</comments>
		<pubDate>Sun, 03 Jan 2010 23:39:25 +0000</pubDate>
		<dc:creator>Michiel</dc:creator>
				<category><![CDATA[Amazon Web Services]]></category>
		<category><![CDATA[Updates on Qloudwatch]]></category>
		<category><![CDATA[Web Apps]]></category>

		<guid isPermaLink="false">http://shapingclouds.com/?p=432</guid>
		<description><![CDATA[Amazon Web Services (AWS) is great and we use it as our #1 hosting infrastructure at Firmhouse. We still have some &#8220;old&#8221; traditional virtual servers laying around on some (also great) servers but we are slowly moving away from them to be totally scalable in a cloud environment. There are however, one few problems with [...]]]></description>
			<content:encoded><![CDATA[<p></p><div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fshapingclouds.com%2F2010%2F01%2F04%2Fa-problem-and-a-solution-with-aws-no-segregation-of-instances-and-no-budgets%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fshapingclouds.com%2F2010%2F01%2F04%2Fa-problem-and-a-solution-with-aws-no-segregation-of-instances-and-no-budgets%2F&amp;source=shapingclouds&amp;style=normal&amp;service=bit.ly" height="61" width="50" /><br />
			</a>
		</div>
<p><a href="http://aws.amazon.com">Amazon Web Services</a> (AWS) is great and we use it as our #1 hosting infrastructure at <a href="http://firmhouse.com">Firmhouse</a>. We still have some &#8220;old&#8221; traditional virtual servers laying around on some (also great) servers but we are slowly moving away from them to be totally scalable in a cloud environment.</p>
<p>There are however, one few problems with AWS if you&#8217;re hosting multiple websites or web applications on multiple instances for a variation of different clients and internal projects: <strong>you can&#8217;t keep track of costs and usage statistics in a categorized or budgetized manner</strong>.</p>
<p>Because we want to bill our clients what they are using from us (we do their managed hosting) and not give them some lame server package that is overpriced because of the overhead (100G they won&#8217;t be using) anyways, we want to give them an honest picture of what they are using and what virtual instances we have installed for them.</p>
<p>Amazon just gives you a credit card bill at the end of the month, which makes it  very hard to split all costs and usage into projects or budgets.</p>
<p>Also, Amazon bills you on one credit card but if you have <strong>multiple people working on one project with several AWS accounts</strong>, there is currently no way of getting some insights in <strong>what instances the members of a tream are launching and how much they cost all combined</strong>. All you get is $-signs on the credit card bills and the i-instance id&#8217;s in your management console(s).</p>
<p>And, budgets would really come in handy when you have a web application or piece of software that automatically scales itself on EC2 and launches instances by itself. Budgets shouldn&#8217;t mean terminating or stopping instances if the costs rise above a certain treshold but it would certainly come in handy if you would get a <strong>warning e-mail telling you the costs for this weeks where really of the charts</strong> so you could act accordingly and maybe re-thing your pricing strategy or make another business-wise decision.</p>
<p>BTW,  I should use another word for &#8220;budget&#8221;. I hate that word because usually involves guessing and the only thing you can guess is that your app shoud be scalable. But my usage of &#8220;budget&#8221; it should clarify my point. If you have another word, let me know <img src='http://shapingclouds.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p>So, having that said:  *drumroll*</p>
<h2>We&#8217;re Introducting Qloudwatch</h2>
<p>We at <a href="http://firmhouse.com">Firmhouse</a> have the need for solutions to these problems and we see these problems pop up in forums and mailing lists about AWS on other places we decided to get sweating and create a web app for this: Qloudwatch. We have a basic version up and running, so if you would like to try it please contact me at <a href="mailto:michiel@firmhouse.nl">michiel@firmhouse.nl</a>. The basic app currently has the following functionality:</p>
<ul>
<li>Create projects in which you can add instances recognized by the API in your AWS account.</li>
<li>See the total cost of the project until &#8220;now&#8221; or view a history of the costs by month.</li>
<li>Add billable and non-billable instances so you can for example bill all production instances to your clients and not bill your test instances.</li>
<li>Invite other Qloudwatch users to a project so they can also add instances that can be set billable or non-billable so you can &#8220;share&#8221; statistics and costs on your instances.</li>
<li>Get an automatic e-mail notification if you have running instances in your AWS account that you haven&#8217;t added to a project yet so you will never forget to categorize that one test hour you ran at 4 AM in the morning when your caffeine withdrawal started to kick in.</li>
</ul>
<p><strong>We would LOVE to know what you think:</strong> wether you disagree, wether you agree, what features you would like to see, if you would like to use the app for free, if you would like to swipe your card for it or if you have any other questions about our work on AWS. Let us know!</p>
<p>Here are some sneak preview screenshots:</p>

<a href='http://shapingclouds.com/2010/01/04/a-problem-and-a-solution-with-aws-no-segregation-of-instances-and-no-budgets/schermafbeelding-2010-01-01-om-23-12-00/' title='Schermafbeelding 2010-01-01 om 23.12.00'><img width="150" height="150" src="http://shapingclouds.com/wp-content/uploads/Schermafbeelding-2010-01-01-om-23.12.00-150x150.png" class="attachment-thumbnail" alt="Schermafbeelding 2010-01-01 om 23.12.00" title="Schermafbeelding 2010-01-01 om 23.12.00" /></a>
<a href='http://shapingclouds.com/2010/01/04/a-problem-and-a-solution-with-aws-no-segregation-of-instances-and-no-budgets/schermafbeelding-2010-01-04-om-00-26-13/' title='Schermafbeelding 2010-01-04 om 00.26.13'><img width="150" height="150" src="http://shapingclouds.com/wp-content/uploads/Schermafbeelding-2010-01-04-om-00.26.13-150x150.png" class="attachment-thumbnail" alt="Schermafbeelding 2010-01-04 om 00.26.13" title="Schermafbeelding 2010-01-04 om 00.26.13" /></a>
<a href='http://shapingclouds.com/2010/01/04/a-problem-and-a-solution-with-aws-no-segregation-of-instances-and-no-budgets/schermafbeelding-2010-01-04-om-00-26-49/' title='Schermafbeelding 2010-01-04 om 00.26.49'><img width="150" height="150" src="http://shapingclouds.com/wp-content/uploads/Schermafbeelding-2010-01-04-om-00.26.49-150x150.png" class="attachment-thumbnail" alt="Schermafbeelding 2010-01-04 om 00.26.49" title="Schermafbeelding 2010-01-04 om 00.26.49" /></a>
<a href='http://shapingclouds.com/2010/01/04/a-problem-and-a-solution-with-aws-no-segregation-of-instances-and-no-budgets/schermafbeelding-2010-01-04-om-00-26-58/' title='Schermafbeelding 2010-01-04 om 00.26.58'><img width="150" height="150" src="http://shapingclouds.com/wp-content/uploads/Schermafbeelding-2010-01-04-om-00.26.58-150x150.png" class="attachment-thumbnail" alt="Schermafbeelding 2010-01-04 om 00.26.58" title="Schermafbeelding 2010-01-04 om 00.26.58" /></a>
<a href='http://shapingclouds.com/2010/01/04/a-problem-and-a-solution-with-aws-no-segregation-of-instances-and-no-budgets/schermafbeelding-2010-01-04-om-00-27-07/' title='Schermafbeelding 2010-01-04 om 00.27.07'><img width="150" height="150" src="http://shapingclouds.com/wp-content/uploads/Schermafbeelding-2010-01-04-om-00.27.07-150x150.png" class="attachment-thumbnail" alt="Schermafbeelding 2010-01-04 om 00.27.07" title="Schermafbeelding 2010-01-04 om 00.27.07" /></a>
<a href='http://shapingclouds.com/2010/01/04/a-problem-and-a-solution-with-aws-no-segregation-of-instances-and-no-budgets/schermafbeelding-2010-01-04-om-00-27-20/' title='Schermafbeelding 2010-01-04 om 00.27.20'><img width="150" height="150" src="http://shapingclouds.com/wp-content/uploads/Schermafbeelding-2010-01-04-om-00.27.20-150x150.png" class="attachment-thumbnail" alt="Schermafbeelding 2010-01-04 om 00.27.20" title="Schermafbeelding 2010-01-04 om 00.27.20" /></a>
<a href='http://shapingclouds.com/2010/01/04/a-problem-and-a-solution-with-aws-no-segregation-of-instances-and-no-budgets/schermafbeelding-2010-01-04-om-00-28-43/' title='Schermafbeelding 2010-01-04 om 00.28.43'><img width="150" height="150" src="http://shapingclouds.com/wp-content/uploads/Schermafbeelding-2010-01-04-om-00.28.43-150x150.png" class="attachment-thumbnail" alt="Schermafbeelding 2010-01-04 om 00.28.43" title="Schermafbeelding 2010-01-04 om 00.28.43" /></a>
<a href='http://shapingclouds.com/2010/01/04/a-problem-and-a-solution-with-aws-no-segregation-of-instances-and-no-budgets/schermafbeelding-2010-01-04-om-00-29-01/' title='Schermafbeelding 2010-01-04 om 00.29.01'><img width="150" height="150" src="http://shapingclouds.com/wp-content/uploads/Schermafbeelding-2010-01-04-om-00.29.01-150x150.png" class="attachment-thumbnail" alt="Schermafbeelding 2010-01-04 om 00.29.01" title="Schermafbeelding 2010-01-04 om 00.29.01" /></a>

]]></content:encoded>
			<wfw:commentRss>http://shapingclouds.com/2010/01/04/a-problem-and-a-solution-with-aws-no-segregation-of-instances-and-no-budgets/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>How to Add Some Security with a Self-Signed SSL Certificate to Your Rails App Served by Nginx</title>
		<link>http://shapingclouds.com/2010/01/02/how-to-add-some-security-with-a-self-signed-ssl-certificate-to-your-rails-app-running-on-nginx/</link>
		<comments>http://shapingclouds.com/2010/01/02/how-to-add-some-security-with-a-self-signed-ssl-certificate-to-your-rails-app-running-on-nginx/#comments</comments>
		<pubDate>Sat, 02 Jan 2010 20:59:16 +0000</pubDate>
		<dc:creator>Michiel</dc:creator>
				<category><![CDATA[How To Articles]]></category>
		<category><![CDATA[How To Articles About Web Application Deployment]]></category>

		<guid isPermaLink="false">http://shapingclouds.com/?p=399</guid>
		<description><![CDATA[At Firmhouse, we are working on a new web service and we&#8217;re releasing an in-development demo to everyone who is interested. Normally, in demo apps security is less the case and there is always some disclaimer that says you shouldn&#8217;t use real production data like passwords and API keys. In my opinion, this sucks because [...]]]></description>
			<content:encoded><![CDATA[<p></p><div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fshapingclouds.com%2F2010%2F01%2F02%2Fhow-to-add-some-security-with-a-self-signed-ssl-certificate-to-your-rails-app-running-on-nginx%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fshapingclouds.com%2F2010%2F01%2F02%2Fhow-to-add-some-security-with-a-self-signed-ssl-certificate-to-your-rails-app-running-on-nginx%2F&amp;source=shapingclouds&amp;style=normal&amp;service=bit.ly" height="61" width="50" /><br />
			</a>
		</div>
<p>At <a href="http://firmhouse.com">Firmhouse</a>, we are working on a new web service and we&#8217;re releasing an in-development demo to everyone who is interested. Normally, in demo apps security is less the case and there is always some disclaimer that says you shouldn&#8217;t use real production data like passwords and API keys. In my opinion, this sucks because you allways want to use your real-life data to test a demo and see if it&#8217;s useful for you specifically. That&#8217;s why, the best way to have some security in your demo app is by using a self-signed SSL certificate to secure passwords and other sensitive account information your demo users will be adding.</p>
<p>For our web app, we use <a href="http://rubyonrails.org">Ruby on Rails</a> running on <a href="http://modrails.com">Phusion Passenger</a>, served by <a href="http://nginx.net">Nginx</a>.</p>
<p>This blog post will guide you trough the process of adding a self-signed SSL certificate to your Rails app, running on Phusion Passenger and Nginx by following these steps:</p>
<ol>
<li>Generating the required SSL key and certificate files for use with nginx.</li>
<li>Recompiling the nginx server through the <strong>passenger-install-nginx-module </strong>command.</li>
<li>Configuring your web app in nginx to redirect non-secure connections to the secure address of the app with https:// and make sure www. will get redirected on both versions as well.</li>
</ol>
<ul></ul>
<p>I use a few other blog posts in this article, so I would like to thank the authors for providing the information publicly and freely.</p>
<p>Ok, now let&#8217;s start:</p>
<p><span id="more-399"></span></p>
<h2>1. Generating the required SSL key and certificate files</h2>
<p>This step is largely taken from the Slicehost Articles: <a href="http://articles.slicehost.com/2007/12/19/ubuntu-gutsy-self-signed-ssl-certificates-and-nginx">http://articles.slicehost.com/2007/12/19/ubuntu-gutsy-self-signed-ssl-certificates-and-nginx</a>.</p>
<p>First of all, generate an SSL private key to sign your certificate with:</p>
<pre><code>openssl genrsa -des3 -out myssl.key 1024</code></pre>
<p>And enter a passphrase for the key which we will remove later on.</p>
<p>Now, we need to generate a Certificate Signing Request:</p>
<pre><code>openssl req -new -key myssl.key -out myssl.csr</code></pre>
<p>This command will ask you various questions. Fill them as you see fit. You can skip the extra attributes by just pressing enter when asked.</p>
<p>Now, we are going to remove the passphrase from your key by making a copy and then generating it back to the original file without entering a passphrase. You can do this with the following commands:</p>
<pre><code>cp myssl.key myssl.key.org
openssl rsa -in myssl.key.org -out myssl.key
rm myssl.key.org</code></pre>
<p>We now have a key file, and a csr file. We can use these to generate the actual SSL certificate with the following command:</p>
<pre><code>openssl x509 -req -days 365 -in myssl.csr -signkey myssl.key -out myssl.crt</code></pre>
<p>We should now move these files to the SSL configuration directory on your host. On Ubuntu, this is /etc/ssl/certs and /etc/ssl/private. Do this with the following commands (assuming you use sudo):</p>
<pre><code>sudo cp myssl.crt /etc/ssl/certs/
sudo cp myssl.key /etc/ssl/private/</code></pre>
<p>All required SSL key and certificate files are in place so we can continue with the next section: preparing nginx to be SSL-enabled with the <strong>passenger-install-nginx-module</strong> command.</p>
<h2>2. Recompiling the nginx server with the passenger-install-nginx-module command</h2>
<p>By default, the passenger-install-nginx-module command does not enable the SSL compile option in the default installation steps. Here&#8217;s how to use the custom build step to configure nginx with SSL.</p>
<p>First of all, be sure you already have nginx installed with the passenger-install-nginx-module command because this will have downloaded the nginx source code in /tmp, which you will need to enter in the custom build steps. If you haven&#8217;t already done this, run:</p>
<pre><code>sudo passenger-install-nginx-module</code></pre>
<p>Press enter after you&#8217;ve read the introduction message and choose step one &#8220;Yes: download, compile and install Nginx for me&#8221; by pressing `1&#8242;. (recommended) when the installer asks for the install options.</p>
<p>After nginx has been compiled and installed you can now run the</p>
<pre><code>sudo passenger-install-nginx-module</code></pre>
<p>command again. Press enter after you&#8217;ve read the introduction message and choose step two &#8220;No: I want to customize my Nginx installation. (for advanced users)&#8221; by pressing `2&#8242;.</p>
<p>You are now asked for the directory of the Nginx source code. The recommended installer step should have downloaded and extracted the source code in /tmp/nginx-x.x.xx. At the time of writing, this was <code>/tmp/nginx-0.7.64</code>. So enter:</p>
<pre><code>Where is your Nginx source code located?

Please specify the directory: /tmp/nginx-0.7.64</code></pre>
<p>And press `Enter&#8217;.</p>
<p>The next question will ask you where you want to install Nginx to. The default is /opt/nginx. To leave it this way (I recommend this), just press `Enter&#8217; again.</p>
<p>Now the installer will ask your for extra Nginx configure options as shown in the following screenshot.</p>
<p><a href="http://shapingclouds.com/wp-content/uploads/Schermafbeelding-2010-01-02-om-21.24.02.png"><img class="aligncenter size-full wp-image-404" title="Nginx configuration script to configure extra compile options" src="http://shapingclouds.com/wp-content/uploads/Schermafbeelding-2010-01-02-om-21.24.02.png" alt="Terminal screenshot of Nginx configuration script" width="521" height="181" /></a></p>
<p>Here you should add the <code>--with-http_ssl_module</code> argument which will make sure the configure script will enable the Nginx HTTP SSL module for compilation.</p>
<pre><code>Extra arguments to pass to configure script: --with-http_ssl_module</code></pre>
<p>The script will ask you for a confirmation if you really would like to modify the configure arguments. And yes, you would like to so press `Enter&#8217; to confirm.</p>
<p>The script will now start to configure, compile and install Nginx in /opt/nginx.</p>
<p>Wait a few seconds or minutes for it to finish and continue to the next section: configuring Nginx to use the SSL certificate and create a secure connection for your Rails application.</p>
<h2>3. Configure your Nginx to use the SSL certificate to secure the connection to your application</h2>
<p>First of all, we will need to add a server block to the Nginx configuration so your application will listen on port 443 and use Phusion Passenger for serving your app. Open <code>/opt/nginx/conf/nginx.conf</code> and add the following block below everything else:</p>
<pre><code>server {
    listen 443;
    ssl on;
    ssl_certificate /etc/ssl/certs/myssl.crt;
    ssl_certificate_key /etc/ssl/private/myssl.key;
    ssl_session_timeout 5m;
    ssl_protocols SSLv2 SSLv3 TLSv1;
    ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;

    server_name yourdomain.com;
    root /srv/apps/qloudwatch/current/public;

    passenger_enabled on;
    passenger_use_global_queue on;
}</code></pre>
<p>Make sure you use yourdomain.com or www.yourdomain.com here (not both) for nice HTTP redirection to the correct domain name.</p>
<p>Now we need to configure that all non-secure request are redirected to the secure address of the web app. For example: all requests to http://yourdomain.com/ and http://www.yourdomain.com/ should be redirected to https://yourdomain.com.</p>
<p>To do this, add the following before the server section we just added:</p>
<pre><code>server {
    listen 80;
    server_name www.yourdomain.com yourdomain.com;
    rewrite ^(.*) https://yourdomain.com$ permanent;
}</code></pre>
<p>Now, restart your Nginx server by calling `sudo killall nginx -HUP&#8217;. Wait a few moments for Nginx to launch and try http://yourdomain.com/ to see if everything works.</p>
<p>And that&#8217;s all! You have just generated a self-signed SSL certificate, installed Nginx with the SSL-module enabled and configured the domain with your web application to be reached trough SSL.</p>
<p>I understand this can be quite something to take in if you&#8217;re new to SSL and Nginx so if you have any questions, any questions at all about this or other web app deployment strategies please post a comment, contact me on Twitter (<a href="http://twitter.com/michiels">@michiels</a> is my account) or send me an e-mail.</p>
]]></content:encoded>
			<wfw:commentRss>http://shapingclouds.com/2010/01/02/how-to-add-some-security-with-a-self-signed-ssl-certificate-to-your-rails-app-running-on-nginx/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
	</channel>
</rss>
