<?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>Floorplanner Tech Blog &#187; Floorplanner</title>
	<atom:link href="http://techblog.floorplanner.com/tag/floorplanner/feed/" rel="self" type="application/rss+xml" />
	<link>http://techblog.floorplanner.com</link>
	<description>Just another WordPress weblog</description>
	<lastBuildDate>Thu, 19 Nov 2009 04:00:57 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Counter feedback</title>
		<link>http://techblog.floorplanner.com/2009/03/28/counter-feedback/</link>
		<comments>http://techblog.floorplanner.com/2009/03/28/counter-feedback/#comments</comments>
		<pubDate>Sat, 28 Mar 2009 16:32:14 +0000</pubDate>
		<dc:creator>Willem van Bergen</dc:creator>
				<category><![CDATA[Collaboration]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[counter]]></category>
		<category><![CDATA[flickr]]></category>
		<category><![CDATA[Floorplanner]]></category>
		<category><![CDATA[github]]></category>
		<category><![CDATA[quality improvement]]></category>
		<category><![CDATA[request-log-analyzer]]></category>
		<category><![CDATA[web 2.0]]></category>

		<guid isPermaLink="false">http://techblog.floorplanner.com/?p=561</guid>
		<description><![CDATA[
This week, request-log-analyzer obtained its 100th watcher on GitHub!
Bart and I have worked hard to make r-l-a a useful product for many people in various situations. The fact that more than 100 people are following the project&#8217;s progress and that at this moment, the gem has been download almost 200 times, shows that we are [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Ftechblog.floorplanner.com%2F2009%2F03%2F28%2Fcounter-feedback%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Ftechblog.floorplanner.com%2F2009%2F03%2F28%2Fcounter-feedback%2F" height="61" width="51" /></a></div><p><a style="float: right" href="http://github.com/wvanbergen/request-log-analyzer/watchers"><img class="size-full wp-image-568 alignright" style="border: 1px solid black;" title="102 request-log-analyzer watchers on Github and counting!" src="http://techblog.floorplanner.com/wp-content/uploads/2009/03/picture-2.png" alt="Request-log-analyzer watchers on Github" width="161" height="26" /></a></p>
<p>This week, <a href="http://github.com/wvanbergen/requets-log-analyzer">request-log-analyzer</a> obtained <a href="http://github.com/wvanbergen/request-log-analyzer/watchers">its 100th watcher on GitHub</a>!</p>
<p>Bart and I have worked hard to make r-l-a a useful product for many people in various situations. The fact that more than 100 people are following the project&#8217;s progress and that at this moment, <a href="http://gems.rubyforge.org/stats.html">the gem has been download almost 200 times</a>, shows that we are somewhat successful in this regard. Numbers like these, in combination with the e-mail messages we have received, motivate us to keep spending time on the project and keep improving it, even if these improvements are not directly useful for our own projects. It has grown beyond <em>scratching our own itch</em>. </p>
<p>On a related note, <a href="http://www.flickr.com/photos/willemvanbergen">my Flickr photostream</a> recently welcomed its 10,000th visitor.</p>
<p style="text-align: center; "><a href="http://www.flickr.com/photos/willemvanbergen"><img class="size-full wp-image-562 aligncenter" style="border: 1px solid black;" title="10,000 visitors on my Flickr photostream!" src="http://techblog.floorplanner.com/wp-content/uploads/2009/03/picture-1.png" alt="10,000 visitors on my Flickr photostream!" width="502" height="84" /></a></p>
<p>What started as a convenient utility to backup and share <a href="http://www.flickr.com/photos/willemvanbergen/collections/72157600336728559/">my holiday photos</a> with my family and friends, now has become somewhat of a showcase of <a href="http://www.flickr.com/photos/willemvanbergen/sets/72157601618255001/">what I</a> <a href="http://www.flickr.com/photos/willemvanbergen/sets/72157594253547759/">am about</a> and <a href="http://www.flickr.com/photos/willemvanbergen/collections/72157607936471141/">what I</a> <a href="http://www.flickr.com/photos/willemvanbergen/sets/72157613466104360/">am up to</a>. I would not consider myself a &#8220;professional&#8221; photographer and I am not an active member of the Flickr community, but still I get feedback on my photographs by visitors, because their visits increase the view counters of my photos.</p>
<p>These counters have really motivated me to make more of an effort when I put photos on Flickr. I started by adding titles, descriptions and tags, so that my photos are easier to find. I also became much more critical of the pictures I upload to Flickr: new uploads have to add something significant to my collection. Analyzing why some pictures got more attention than others made me a better photographer, although there still is a lot of room for improvement. <img src='http://techblog.floorplanner.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  </p>
<h3>Ignite the lazyweb, kick-start a quality improvement loop</h3>
<p>What interests me in these examples is that simple counters like watchers on GitHub or views on Flickr can be valuable feedback and can motivate people to put in effort. The end result is quality improvement: write better software, make better pictures, etc.. Even an inherently lazy person like me can get motivated to keep putting in effort and to keep improving myself, because of such a simple feedback loop! <img src='http://techblog.floorplanner.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>Additionally, it creates a dependence on the website in question. I look at my Flickr stats page every day, and I am subscribed to my activity feed on GitHub to get notified when new people start watching my projects. I now<em> </em>simply have to publish tools I write on GitHub to boost its quality, immediately and in the long run. And I have to upload pictures to Flickr as it is vital for my photography learning curve.</p>
<p>I guess I finally figured out what Web 2.0 is all about! <img src='http://techblog.floorplanner.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  Can we use a similar technique on Floorplanner to boost the quality of the designs our visitors make?</p>
]]></content:encoded>
			<wfw:commentRss>http://techblog.floorplanner.com/2009/03/28/counter-feedback/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Wii Boxing</title>
		<link>http://techblog.floorplanner.com/2009/02/08/wii-boxing/</link>
		<comments>http://techblog.floorplanner.com/2009/02/08/wii-boxing/#comments</comments>
		<pubDate>Sun, 08 Feb 2009 20:20:39 +0000</pubDate>
		<dc:creator>Gert-Jan</dc:creator>
				<category><![CDATA[Off topic]]></category>
		<category><![CDATA[boxing]]></category>
		<category><![CDATA[Floorplanner]]></category>
		<category><![CDATA[movie]]></category>
		<category><![CDATA[sports]]></category>
		<category><![CDATA[wii]]></category>

		<guid isPermaLink="false">http://techblog.floorplanner.com/?p=469</guid>
		<description><![CDATA[Gert-Jan is on the left side and Jaap on the right.

Nico is on the left side and Willem on the right.

]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Ftechblog.floorplanner.com%2F2009%2F02%2F08%2Fwii-boxing%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Ftechblog.floorplanner.com%2F2009%2F02%2F08%2Fwii-boxing%2F" height="61" width="51" /></a></div><p>Gert-Jan is on the left side and Jaap on the right.<br />
<object width="400" height="300" data="http://www.flickr.com/apps/video/stewart.swf?v=67090" type="application/x-shockwave-flash"><param name="flashvars" value="intl_lang=en-us&amp;photo_secret=2f291901e4&amp;photo_id=3258214049" /><param name="bgcolor" value="#000000" /><param name="allowFullScreen" value="true" /><param name="src" value="http://www.flickr.com/apps/video/stewart.swf?v=67090" /><param name="allowfullscreen" value="true" /></object></p>
<p>Nico is on the left side and Willem on the right.<br />
<object width="400" height="300" data="http://www.flickr.com/apps/video/stewart.swf?v=67090" type="application/x-shockwave-flash"><param name="flashvars" value="intl_lang=en-us&amp;photo_secret=8646dc1cba&amp;photo_id=3259024322" /><param name="bgcolor" value="#000000" /><param name="allowFullScreen" value="true" /><param name="src" value="http://www.flickr.com/apps/video/stewart.swf?v=67090" /><param name="allowfullscreen" value="true" /></object></p>
]]></content:encoded>
			<wfw:commentRss>http://techblog.floorplanner.com/2009/02/08/wii-boxing/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Floorplanning in the Cloud, EC2</title>
		<link>http://techblog.floorplanner.com/2009/02/05/floorplanning-in-the-cloud-ec2/</link>
		<comments>http://techblog.floorplanner.com/2009/02/05/floorplanning-in-the-cloud-ec2/#comments</comments>
		<pubDate>Thu, 05 Feb 2009 20:25:33 +0000</pubDate>
		<dc:creator>Gert-Jan</dc:creator>
				<category><![CDATA[Floorplanner]]></category>
		<category><![CDATA[aws]]></category>
		<category><![CDATA[amazon]]></category>
		<category><![CDATA[cloud]]></category>
		<category><![CDATA[ec2]]></category>

		<guid isPermaLink="false">http://techblog.floorplanner.com/?p=436</guid>
		<description><![CDATA[There is a lot of hype these day about being in &#8220;the cloud&#8221;. However, &#8220;the cloud&#8221; seems to mean a lot of different things. Tim O&#8217;Reilly sees three types of cloud computing.  His first type, utility computing, is the type I&#8217;m talking about here. 
Utility computing. Amazon&#8217;s success in providing virtual machine instances, storage, and computation at pay-as-you-go utility [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Ftechblog.floorplanner.com%2F2009%2F02%2F05%2Ffloorplanning-in-the-cloud-ec2%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Ftechblog.floorplanner.com%2F2009%2F02%2F05%2Ffloorplanning-in-the-cloud-ec2%2F" height="61" width="51" /></a></div><p>There is a lot of hype these day about being in &#8220;the cloud&#8221;. However, &#8220;the cloud&#8221; seems to mean a lot of different things. Tim O&#8217;Reilly sees <a href="http://radar.oreilly.com/2008/10/web-20-and-cloud-computing.html">three types of cloud computing</a>.  His first type, utility computing, is the type I&#8217;m talking about here. </p>
<blockquote><p><strong><em>Utility computing.</em></strong><em> Amazon&#8217;s success in providing virtual machine instances, storage, and computation at pay-as-you-go utility pricing was the breakthrough in this category, and now everyone wants to play. Developers, not end-users, are the target of this kind of cloud computing.</em></p></blockquote>
<p>Launched in July 2002, <a title="Amazon Web Services" href="http://aws.amazon.com" target="_blank">Amazon Web Services</a> provide online services for other web sites or client-side applications.<span style="text-decoration: underline;"> </span>Each individual product is interesting by itself, but all the services together made it just the solution we were looking for. In this and coming posts I will talk about our experiences with Amazon&#8217;s version of &#8220;the cloud&#8221;. The first service we started to use was <a href="http://aws.amazon.com/ec2/">Elastic Cloud Computing</a> (EC2).</p>
<p>Each day more than 2000 users from all over the world register at Floorplanner.com. At this moment we have over 800.000 registered users in our database. A lot of these users visit the site on a regular basis, which generates a lot of traffic. To meet this demand, we had a couple of dedicated servers running. When the demand rised above a certain level, we&#8217;d add a new one to spread the load. As logical as it might sound, it is far from ideal.</p>
<p>It takes a lot of time to install, configure and maintain a server. Precious time you can&#8217;t spend on the development of your product. It doesn&#8217;t scale fast. For example: when you are featured on a big site that generates a lot of additional traffic, your servers will probably have a very hard time (or crash) and there is nothing you can do about it. Buying additional servers takes too much time. Another thing about buying servers is that it&#8217;s an investment you have to finance up front. You have to pay the full price for it, but in the beginning you&#8217;ll only use a small part of it&#8217;s capacities. Once you&#8217;ve spend the money on a server, you can&#8217;t spend it on anything else. And maybe the biggest issue we had with dedicated servers was that it is hardware, and hardware gets old very fast. After a while you&#8217;re stuck with an outdated server, that you (a) won&#8217;t replace because &#8220;it&#8217;s still doing something&#8221; or (b) costs time (= money) to migrate to another server. This means a higher risk for failure, or just more work.   </p>
<p>Now with the EC2 service life has gotten better. Sure, we still had to install everything on the virtual instance, but only the first time. Once you&#8217;ve done this, you can add additional instances with a click of a button (based on an image of the first instance). When traffic spikes you can add instances within minutes instead of days. The pay-as-you-go model keeps us from financing every server up front. And because it&#8217;s a virtual server, we don&#8217;t have to think about the hardware anymore. Just deploy it and get on with the fun stuff!</p>
]]></content:encoded>
			<wfw:commentRss>http://techblog.floorplanner.com/2009/02/05/floorplanning-in-the-cloud-ec2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Generating thumbnails</title>
		<link>http://techblog.floorplanner.com/2008/11/26/generating-thumbnails/</link>
		<comments>http://techblog.floorplanner.com/2008/11/26/generating-thumbnails/#comments</comments>
		<pubDate>Wed, 26 Nov 2008 06:27:05 +0000</pubDate>
		<dc:creator>Willem van Bergen</dc:creator>
				<category><![CDATA[Floorplanner]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[client-side]]></category>
		<category><![CDATA[image]]></category>
		<category><![CDATA[S3]]></category>

		<guid isPermaLink="false">http://techblog.floorplanner.com/?p=271</guid>
		<description><![CDATA[I would like to thank you all for helping us build our thumbnail database!  I presume this statement might be in need of some clarification, so bear with me when I go into the technical details on this one.
For every design that is saved on Floorplanner, we create a thumbnail in JPEG format. We [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Ftechblog.floorplanner.com%2F2008%2F11%2F26%2Fgenerating-thumbnails%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Ftechblog.floorplanner.com%2F2008%2F11%2F26%2Fgenerating-thumbnails%2F" height="61" width="51" /></a></div><p>I would like to thank you all for helping us build our thumbnail database! <br /> I presume this statement might be in need of some clarification, so bear with me when I go into the technical details on this one.</p>
<p>For every design that is saved on Floorplanner, we create a thumbnail in JPEG format. We use these thumbnails for the <a href="http://beta.floorplanner.com/gallery">gallery</a>, and now we have included them on everyone&#8217;s <a href="http://beta.floorplanner.com/dashboard">dashboard</a>. However, for various reasons, we do not have a thumbnail available for every design. However, with your help, we are improving the thumbnail database while you our browsing the site!</p>
<p>The thumbnail images are stored on <a href="http://aws.amazon.com/s3/">Amazon AWS S3</a>. We know the URL that a thumbnail of a design should have, but we do not know if it actually is available. In the latter case, the result is a nasty <em>image not found</em> placeholder on the dashboard. This of course is not acceptable! We cannot know if a thumbnail exists other than doing a request to the URL and see whether we get an image back from Amazon, or a HTTP 404 status. This is a very time-consuming procedure to run server side so we chose to find a client-side solution.</p>
<p>We found that javascript can be used to check if an image exist. An AJAX call cannot be used, because cross-site calls are not supported. However, the javascript <code>Image</code> object <em>can</em> be used for this purpose.</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family: Monaco,monospace;"><span style="color: #003366; font-weight: bold;">var</span> img <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> Image<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
img.<span style="color: #000066;">onload</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>event<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
  <span style="color: #006600; font-style: italic;">// image was found and loaded successfully</span>
  document.<span style="color: #660066;">getElementById</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'img-tag'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">src</span> <span style="color: #339933;">=</span> img.<span style="color: #660066;">src</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
img.<span style="color: #000066;">onerror</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>event<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
  <span style="color: #006600; font-style: italic;">// An error occured while loading the image</span>
  document.<span style="color: #660066;">getElementById</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'img-tag'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">src</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">'/images/thumb-unavailable.jpg'</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #006600; font-style: italic;">// Setting the src property will trigger the events.</span>
img.<span style="color: #660066;">src</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">'http://link.to.amazon.s3/design/thumbnail.jpg'</span><span style="color: #339933;">;</span></pre></div></div>

<p>A nice <em>thumbnail not available</em> image will be shown if the thumbnail file cannot be found on S3. This is much nicer, and the check is completely done client-side! However, we found a way this could even be better by changing the <code>onerror</code> event handler. Instead of displaying a <em>thumbnail not available</em> image, we can simply load a small instance of the Floorplanner application to display a small version of the design. Moreover, we can instruct it to generate a thumbnail JPEG and save it to S3!</p>
<p>So, every time you see a small Floorplanner loading on your dashboard, you are creating a missing thumbnail. Next time, the thumbnail will be available on S3 and there will be no need to start the Floorplanner application. A nice example of <a href="http://en.wikipedia.org/wiki/Distributed_computing">distributed computing</a>, mixed with a hint of <a href="http://setiathome.berkeley.edu/">SETI@home</a>. I like it!</p>
]]></content:encoded>
			<wfw:commentRss>http://techblog.floorplanner.com/2008/11/26/generating-thumbnails/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
