<?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/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Measure Once, Cut Twice</title>
	<atom:link href="http://measureonce.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://measureonce.wordpress.com</link>
	<description>Just another WordPress.com weblog</description>
	<lastBuildDate>Wed, 04 May 2011 04:53:49 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='measureonce.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>Measure Once, Cut Twice</title>
		<link>http://measureonce.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://measureonce.wordpress.com/osd.xml" title="Measure Once, Cut Twice" />
	<atom:link rel='hub' href='http://measureonce.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Photography Goodies</title>
		<link>http://measureonce.wordpress.com/2011/04/30/photography-goodies/</link>
		<comments>http://measureonce.wordpress.com/2011/04/30/photography-goodies/#comments</comments>
		<pubDate>Sun, 01 May 2011 00:11:36 +0000</pubDate>
		<dc:creator>steve</dc:creator>
				<category><![CDATA[photography]]></category>

		<guid isPermaLink="false">http://measureonce.wordpress.com/?p=127</guid>
		<description><![CDATA[Gear and gadgets: Gordy&#8217;s Camera Straps Italian leather Leica camera cases Photojojo HDR software for OSX: LR/Enfuse &#8211; This is a plugin for Lightroom that uses opensource Hugin project. The results tend to be very natural, but you don&#8217;t have much control through the plugin UI. Photomatix &#8211; Pretty much the standard others are compared to. The [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=measureonce.wordpress.com&amp;blog=4854777&amp;post=127&amp;subd=measureonce&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Gear and gadgets:</p>
<ul>
<li><a href="http://www.gordyscamerastraps.com/">Gordy&#8217;s Camera Straps</a></li>
<li><a href="http://www.leicatime.com/">Italian leather Leica camera cases</a></li>
<li><a href="http://photojojo.com/">Photojojo</a></li>
</ul>
<div>HDR software for OSX:</div>
<div>
<div>
<ul>
<li><a href="http://photographers-toolbox.com/blog/2008/12/lrenfuse-for-interiors/">LR/Enfuse</a> &#8211; This is a plugin for Lightroom that uses opensource Hugin project. The results tend to be very natural, but you don&#8217;t have much control through the plugin UI.</li>
<li><a href="http://www.hdrsoft.com/">Photomatix</a> &#8211; Pretty much the standard others are compared to. The UI is a bit outdated, but you have a great deal of control over the end result. (pro and light versions)</li>
<li><a href="http://www.ohanaware.com/hdrtistpro/">HDRtist</a> &#8211; Seems like a good middle of the road option. Nice UI, good image results, but missing histogram and some more advanced features. (pro and free versions)</li>
<li><a href="http://www.everimaging.com/">HDR Pro Photo</a> &#8211; Haven&#8217;t tried, looks full featured, on sale in the Mac App store.</li>
<li><a href="http://www.unifiedcolor.com/hdr-express">HDR Express</a> &#8212; Haven&#8217;t tried it, looks like it is full featured, on par with Photomatix, but a better UI.</li>
<li>Others in the Mac App store&#8230; none stand out</li>
</ul>
</div>
</div>
<div>Right now I&#8217;m mostly using LR/Enfuse. While it is fun to play around with strong tone mapping and extreme HDR effects, I&#8217;m aiming more for the natural look with just a bit of extended range lately.</div>
<div>Blogs:</div>
<div>
<ul>
<li><a href="http://regex.info/blog/">Jeffrey Friedl</a></li>
<li><a href="http://www.joemcnally.com/blog/">Joe McNally</a></li>
<li><a href="http://shutterfinger.typepad.com/">Shutterfinger</a></li>
<li><a href="http://35mm-photo-bureau.blogspot.com/">35mm Photo Bureau</a></li>
<li><a href="http://luminous-landscape.com/">Luminous Landscape</a></li>
</ul>
</div>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/measureonce.wordpress.com/127/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/measureonce.wordpress.com/127/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/measureonce.wordpress.com/127/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/measureonce.wordpress.com/127/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/measureonce.wordpress.com/127/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/measureonce.wordpress.com/127/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/measureonce.wordpress.com/127/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/measureonce.wordpress.com/127/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/measureonce.wordpress.com/127/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/measureonce.wordpress.com/127/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/measureonce.wordpress.com/127/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/measureonce.wordpress.com/127/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/measureonce.wordpress.com/127/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/measureonce.wordpress.com/127/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=measureonce.wordpress.com&amp;blog=4854777&amp;post=127&amp;subd=measureonce&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://measureonce.wordpress.com/2011/04/30/photography-goodies/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/505544cf0712e3b8352d12b8a17e0a6e?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">spetschu</media:title>
		</media:content>
	</item>
		<item>
		<title>Nikon P7000 Notes</title>
		<link>http://measureonce.wordpress.com/2011/04/22/nikon-p7000-notes/</link>
		<comments>http://measureonce.wordpress.com/2011/04/22/nikon-p7000-notes/#comments</comments>
		<pubDate>Fri, 22 Apr 2011 22:14:24 +0000</pubDate>
		<dc:creator>steve</dc:creator>
				<category><![CDATA[photography]]></category>

		<guid isPermaLink="false">http://measureonce.wordpress.com/?p=120</guid>
		<description><![CDATA[The p7000 is almost the perfect high end compact camera: raw support excellent zoom range (better than the G12 and LX5) nice ergonomics decent low-light performance great image quality easily accessible manual controls I was aware of these three issues when I bought it: slow shot-to-shot speed poor low-light focus no dedicated ISO dial 28mm, [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=measureonce.wordpress.com&amp;blog=4854777&amp;post=120&amp;subd=measureonce&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>The p7000 is almost the perfect high end compact camera:</p>
<ul>
<li>raw support</li>
<li>excellent zoom range (better than the G12 and LX5)</li>
<li>nice ergonomics</li>
<li>decent low-light performance</li>
<li>great image quality</li>
<li>easily accessible manual controls</li>
</ul>
<p>I was aware of these three issues when I bought it:</p>
<ul>
<li>slow shot-to-shot speed</li>
<li>poor low-light focus</li>
<li>no dedicated ISO dial</li>
<li>28mm, f2.8 on the short end is ok, but not as good as the Panasonic LX3 or LX5</li>
</ul>
<div>The first two were apparently fixed in the <a title="p7000 1.1 firmware release" href="http://nikonasia-en.custhelp.com/app/answers/detail/a_id/6926">1.1 Firmware release</a> and the last two I can live with.</div>
<div>It felt decent in the store. Slow but not intolerable. When I took it out on the first shoot, it suddenly seemed incredibly slow, taking 5-6 seconds after a shot to finish writing and become available for the next shot.</div>
<div>I did some more research and found other people were running<strong> 5-6 pause times</strong>:</div>
<div>
<ul>
<li><a href="http://www.nikonhq.com/2010/12/p7000-firmware-1-1-how-fast-is-it/">Camera speed tests after 1.1 firmware update</a></li>
<li><a href="http://forums.dpreview.com/forums/readflat.asp?forum=1007&amp;message=37183401&amp;changemode=1">Discussion on update improvements</a></li>
</ul>
</div>
<div>So I played around with the settings and the main one you want to avoid is the zoom in preview. It basically zooms 1:1 on a small part of the picture to show you how sharp it was/wasn&#8217;t. This feature seems to add 2-3 seconds to the write time. Turn it off unless you have a lot of patience.</div>
<div><strong>The setting you want to avoid is</strong> in Settings&#8230; Monitor Settings&#8230; Image Review&#8230; &#8220;<strong>Zoom in on active focus point</strong>&#8220;. Turning image review off completely shaved off another half second or second. Using a faster SD card also helps a bit. With a class 10 card and regular image preview my write times are somewhere around 2-2.5 seconds, which is acceptable for a compact.</div>
<div>Other random links:</div>
<div>
<ul>
<li>Flickr thread on interesting <a href="http://www.flickr.com/groups/p7000/discuss/72157625783211418/">after market products for the p7000</a></li>
<li>Retro faux-leather <a href="http://shop.ebay.com/?_from=R40&amp;_trksid=p5197.m570.l1313&amp;_nkw=p7000+leather+case&amp;_sacat=See-All-Categories">cases on eBay</a> for the p7000</li>
</ul>
</div>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/measureonce.wordpress.com/120/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/measureonce.wordpress.com/120/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/measureonce.wordpress.com/120/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/measureonce.wordpress.com/120/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/measureonce.wordpress.com/120/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/measureonce.wordpress.com/120/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/measureonce.wordpress.com/120/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/measureonce.wordpress.com/120/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/measureonce.wordpress.com/120/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/measureonce.wordpress.com/120/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/measureonce.wordpress.com/120/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/measureonce.wordpress.com/120/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/measureonce.wordpress.com/120/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/measureonce.wordpress.com/120/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=measureonce.wordpress.com&amp;blog=4854777&amp;post=120&amp;subd=measureonce&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://measureonce.wordpress.com/2011/04/22/nikon-p7000-notes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/505544cf0712e3b8352d12b8a17e0a6e?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">spetschu</media:title>
		</media:content>
	</item>
		<item>
		<title>Notes on MacRuby and sqlite3</title>
		<link>http://measureonce.wordpress.com/2011/04/10/notes-on-macruby-and-sqlite3/</link>
		<comments>http://measureonce.wordpress.com/2011/04/10/notes-on-macruby-and-sqlite3/#comments</comments>
		<pubDate>Sun, 10 Apr 2011 23:04:13 +0000</pubDate>
		<dc:creator>steve</dc:creator>
				<category><![CDATA[macruby]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://measureonce.wordpress.com/?p=104</guid>
		<description><![CDATA[Each time I install the latest version of MacRuby, I spend an hour re-figuring this out, so here it is&#8230; Under certain conditions installing the &#8216;sqlite3-ruby&#8217; gem on OSX with macgem fails with this error: Building native extensions.   This could take a while... /bin/sh: line 1: 27196 Abort trap /Library/Frameworks/MacRuby.framework/Versions/0.11/usr/bin/macruby extconf.rb ERROR:  Error installing [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=measureonce.wordpress.com&amp;blog=4854777&amp;post=104&amp;subd=measureonce&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Each time I install the latest version of MacRuby, I spend an hour re-figuring this out, so here it is&#8230;</p>
<p>Under certain conditions installing the &#8216;sqlite3-ruby&#8217; gem on OSX with macgem fails with this error:</p>
<pre style="border:solid 1px grey;font-size:1.3px em;color:black;background:#D4D2D2;margin:10px;padding:10px;">Building native extensions.  
This could take a while...
/bin/sh: line 1: 27196 Abort trap
/Library/Frameworks/MacRuby.framework/Versions/0.11/usr/bin/macruby extconf.rb
ERROR:  Error installing sqlite3-ruby:	ERROR: Failed to build gem native extension.

/Library/Frameworks/MacRuby.framework/Versions/0.11/usr/bin/macruby extconf.rb
checking for sqlite3.h... yes
checking for sqlite3_libversion_number() in -lsqlite3... no
sqlite3 is missing.
Try 'port install sqlite3 +universal'or 'yum install sqlite3-devel' and check
your shared library search path (the location where your sqlite3 shared library
is located).*** extconf.rb failed ***Could not create Makefile due to some
reason, probably lack of necessary libraries and/or headers.  Check the mkmf.log
file for more details. You may need configuration options.
Provided configuration options:
    --with-opt-dir
    --without-opt-dir
    ... etc ....

/Library/Frameworks/MacRuby.framework/Versions/0.11/usr/lib/ruby/Gems/1.9.2/
gems/sqlite3-ruby-1.3.2/ext/sqlite3/extconf.rb:20:
in `asplode:': sqlite3 is missing. Try 'port install sqlite3 +universal'or 'yum
install sqlite3-devel' and check your shared library search path (the location
where your sqlite3 shared library is located). (SystemExit) from
/Library/Frameworks/MacRuby.framework/Versions/0.11/usr/lib/ruby/Gems/1.9.2/
gems/sqlite3-ruby-1.3.2/ext/sqlite3/extconf.rb:29:
in `&lt;main&gt;'\</pre>
<p>The problem is that macports installs into /opt/local by default so even after doing &#8216;port install sqlite3 +universal&#8217;, you&#8217;ll get this error message. You need to specify the install prefix using this awkward command line:</p>
<pre style="border:solid 1px grey;font-size:1.3px em;color:black;background:#D4D2D2;margin:10px;padding:10px;">sudo macgem install --version '= 1.3.2' sqlite3-ruby -- --with-sqlite3-dir=/opt/local</pre>
<p>Version 1.3.2 is the one I&#8217;ve had luck with on MacRuby up to version 0.11.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/measureonce.wordpress.com/104/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/measureonce.wordpress.com/104/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/measureonce.wordpress.com/104/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/measureonce.wordpress.com/104/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/measureonce.wordpress.com/104/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/measureonce.wordpress.com/104/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/measureonce.wordpress.com/104/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/measureonce.wordpress.com/104/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/measureonce.wordpress.com/104/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/measureonce.wordpress.com/104/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/measureonce.wordpress.com/104/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/measureonce.wordpress.com/104/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/measureonce.wordpress.com/104/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/measureonce.wordpress.com/104/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=measureonce.wordpress.com&amp;blog=4854777&amp;post=104&amp;subd=measureonce&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://measureonce.wordpress.com/2011/04/10/notes-on-macruby-and-sqlite3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/505544cf0712e3b8352d12b8a17e0a6e?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">spetschu</media:title>
		</media:content>
	</item>
		<item>
		<title>Platform as a Service (PaaS) Bag of Links</title>
		<link>http://measureonce.wordpress.com/2011/01/25/platform-as-a-service/</link>
		<comments>http://measureonce.wordpress.com/2011/01/25/platform-as-a-service/#comments</comments>
		<pubDate>Tue, 25 Jan 2011 23:53:40 +0000</pubDate>
		<dc:creator>steve</dc:creator>
				<category><![CDATA[cloud]]></category>
		<category><![CDATA[paas]]></category>
		<category><![CDATA[saas]]></category>

		<guid isPermaLink="false">http://measureonce.wordpress.com/?p=97</guid>
		<description><![CDATA[Big players: Amazon Web Services Google App Engine Azure (Microsoft) Most of the other large software vendors also have a cloud story, but only their captive customers care. Ruby-centric: Heroku (Ruby, bought by Salesforce.com) Engine Yard (Ruby) Various others, some of which are more in the Infrastructure as a Service space than Platform providers e.g. [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=measureonce.wordpress.com&amp;blog=4854777&amp;post=97&amp;subd=measureonce&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Big players:</p>
<ul>
<li><a href="http://code.google.com/appengine/"></a><a href="http://aws.amazon.com/">Amazon Web Services</a></li>
<li><a href="http://code.google.com/appengine/">Google App Engine</a></li>
<li><a href="http://www.microsoft.com/windowsazure/">Azure</a> (Microsoft)</li>
</ul>
<p>Most of the other large software vendors also have a cloud story, but only their captive customers care.</p>
<p>Ruby-centric:</p>
<ul>
<li><a href="http://www.heroku.com">Heroku</a> (Ruby, bought by Salesforce.com)</li>
<li><a href="http://www.engineyard.com/">Engine Yard</a> (Ruby)</li>
</ul>
<p>Various others, some of which are more in the Infrastructure as a Service space than Platform providers e.g. hosting plus some Content Deliver Network (CDN) capabilties, and other focussed on specific app building tools and scenarios:</p>
<ul>
<li><a href="http://www.rackspacecloud.com/">Rackspace Cloud</a> (Iaas)</li>
<li><a href="http://www.gigaspaces.com/">GigaSpaces</a> (Iaas)</li>
<li><a href="http://www.joyentcloud.com/">Joyent</a> (a bit of both)</li>
<li><a href="http://www.gridgain.com/">GridGain</a> (Iaas)</li>
<li><a href="http://www.vmforce.com">VMForce</a> (Salesforce.com &amp; VMWare &#8212; a bit of both)</li>
<li><a href="http://www.cordysprocessfactory.com/">Cordys</a> (app builder)</li>
<li><a href="http://www.workxpress.com/">WorkXPress</a> (app builder, No Programming Required! right.)</li>
<li><a href="http://wolfframeworks.com/">Wolf</a> (app builder)</li>
</ul>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/measureonce.wordpress.com/97/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/measureonce.wordpress.com/97/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/measureonce.wordpress.com/97/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/measureonce.wordpress.com/97/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/measureonce.wordpress.com/97/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/measureonce.wordpress.com/97/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/measureonce.wordpress.com/97/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/measureonce.wordpress.com/97/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/measureonce.wordpress.com/97/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/measureonce.wordpress.com/97/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/measureonce.wordpress.com/97/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/measureonce.wordpress.com/97/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/measureonce.wordpress.com/97/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/measureonce.wordpress.com/97/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=measureonce.wordpress.com&amp;blog=4854777&amp;post=97&amp;subd=measureonce&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://measureonce.wordpress.com/2011/01/25/platform-as-a-service/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/505544cf0712e3b8352d12b8a17e0a6e?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">spetschu</media:title>
		</media:content>
	</item>
		<item>
		<title>NoSQL Bag of Links</title>
		<link>http://measureonce.wordpress.com/2010/11/16/nosql-bag-of-links/</link>
		<comments>http://measureonce.wordpress.com/2010/11/16/nosql-bag-of-links/#comments</comments>
		<pubDate>Tue, 16 Nov 2010 17:49:04 +0000</pubDate>
		<dc:creator>steve</dc:creator>
				<category><![CDATA[database]]></category>
		<category><![CDATA[nosql]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://measureonce.wordpress.com/?p=85</guid>
		<description><![CDATA[NoSQL Comparisons &#38; Overviews Performance Comparison (Tokyo Cabinet, Berkley DB + Memcache, Voldemort + Berkley DB, Redis, MongoDB) NoSQL Patterns Availability Model Comparison Overview Article NoSQL Comparison Matrix Discussion of Popular NoSQL Projects Ruby Centric Using EHCache in Ruby Tokyo Cabinet Ruby Example Key-Value Stores in Ruby series (2, 3, 4, 5, 6) NoSQL with [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=measureonce.wordpress.com&amp;blog=4854777&amp;post=85&amp;subd=measureonce&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><strong>NoSQL Comparisons &amp; Overviews<br />
</strong></p>
<p><a href="http://perfectmarket.com/blog/not_only_nosql_review_solution_evaluation_guide_chart">Performance Comparison</a> (Tokyo Cabinet, Berkley DB + Memcache, Voldemort + Berkley DB, Redis, MongoDB)</p>
<p><a href="http://horicky.blogspot.com/2009/11/nosql-patterns.html">NoSQL Patterns</a></p>
<p><a href="http://perfcap.blogspot.com/2010/10/comparing-nosql-availability-models.html">Availability Model Comparison</a></p>
<p><a href="http://gigaom.com/2010/07/12/nosql-pioneers-are-driving-the-webs-manifest-destiny/">Overview Article</a></p>
<p><a title="http://www.metabrew.com/article/anti-rdbms-a-list-of-distributed-key-value-stores/" href="http://www.metabrew.com/article/anti-rdbms-a-list-of-distributed-key-value-stores/">NoSQL Comparison Matrix</a></p>
<p><a title="http://bjclark.me/2009/08/nosql-if-only-it-was-that-easy/" href="http://bjclark.me/2009/08/nosql-if-only-it-was-that-easy/">Discussion of Popular NoSQL Projects</a><strong> </strong></p>
<p><strong>Ruby Centric</strong></p>
<p><a href="http://jvoegele.blogspot.com/2010/11/ehcache-for-jruby-and-rails-now-with.html">Using EHCache in Ruby</a></p>
<p><a href="http://www.igvita.com/2009/02/13/tokyo-cabinet-beyond-key-value-store/">Tokyo Cabinet Ruby Example</a></p>
<p><a title="Key-Value Stores in Ruby" href="http://www.engineyard.com/blog/2009/key-value-stores-in-ruby/">Key-Value Stores in Ruby</a> series (<a href="http://www.engineyard.com/blog/2009/key-value-stores-for-ruby-part-2-tokyo-cabinet/">2</a>, <a href="http://www.engineyard.com/blog/2009/cassandra-and-ruby-a-love-affair/">3</a>, <a href="http://www.engineyard.com/blog/2009/key-value-stores-for-ruby-part-4-to-redis-or-not-to-redis/">4</a>, <a href="http://www.engineyard.com/blog/2009/mongodb-a-light-in-the-darkness-key-value-stores-part-5/">5</a>, <a href="http://www.engineyard.com/blog/2009/key-value-stores-in-ruby-the-wrap-up/">6</a>)</p>
<p><a href="http://friendlyorm.com/">NoSQL with MySQL in Ruby</a></p>
<p><a href="http://blog.grayproductions.net/articles/using_keyvalue_stores_from_ruby">More on Key-Value Stores with Ruby</a></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/measureonce.wordpress.com/85/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/measureonce.wordpress.com/85/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/measureonce.wordpress.com/85/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/measureonce.wordpress.com/85/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/measureonce.wordpress.com/85/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/measureonce.wordpress.com/85/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/measureonce.wordpress.com/85/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/measureonce.wordpress.com/85/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/measureonce.wordpress.com/85/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/measureonce.wordpress.com/85/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/measureonce.wordpress.com/85/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/measureonce.wordpress.com/85/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/measureonce.wordpress.com/85/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/measureonce.wordpress.com/85/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=measureonce.wordpress.com&amp;blog=4854777&amp;post=85&amp;subd=measureonce&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://measureonce.wordpress.com/2010/11/16/nosql-bag-of-links/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/505544cf0712e3b8352d12b8a17e0a6e?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">spetschu</media:title>
		</media:content>
	</item>
		<item>
		<title>Notes on using MacRuby and WebView</title>
		<link>http://measureonce.wordpress.com/2010/10/29/macruby-and-webview/</link>
		<comments>http://measureonce.wordpress.com/2010/10/29/macruby-and-webview/#comments</comments>
		<pubDate>Fri, 29 Oct 2010 21:59:39 +0000</pubDate>
		<dc:creator>steve</dc:creator>
				<category><![CDATA[macruby]]></category>
		<category><![CDATA[objective-c]]></category>

		<guid isPermaLink="false">https://measureonce.wordpress.com/2010/10/29/notes-on-using-macruby-and-webview/</guid>
		<description><![CDATA[After much head bashing, the following works for two-way calling between MacRuby and Javascript within a WebKit WebView. Key issues: Get the script object via the callback method. Many tutorials show obtaining it via [webView windowScriptObject]. This does not always work since the script object may not be ready (e.g. the page isn’t fully loaded). [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=measureonce.wordpress.com&amp;blog=4854777&amp;post=76&amp;subd=measureonce&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>After much head bashing, the following works for two-way calling between <a href="http://www.macruby.org/">MacRuby</a> and Javascript within a WebKit <a href="http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/DisplayWebContent/Concepts/WebKitDesign.html">WebView</a>. Key issues:</p>
<ul style="list-style-type:disc;">
<li>Get the script object via the callback method. Many tutorials show obtaining it via [webView <a href="http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/DisplayWebContent/Tasks/JavaScriptFromObjC.html">windowScriptObject</a>]. This does not always work since the script object may not be ready (e.g. the page isn’t fully loaded).</li>
<li>Take note of which delegate methods are static (isSelectorExcludedFromWebScript) and which are not.</li>
<li>MacRuby names that you want callable from javascript must consist only of lower case characters. The mappings given in the docs (fooBar: converted to fooBar_, foo_bar converted to foo$_bar) have some idiosyncrasies.</li>
<ul>
<li>For no-args methods, everything works smoothly as long as you use all lowercase ruby method names with no underscores.</li>
<li>If you want to pass an argument, you need to call it from JS with an underscore, declare it in macruby without the underscore, and also register it via &#8216;respondsToSelector&#8217;. To summarize:</li>
<ul>
<li>Define method in macruby: mymethod(somearg)</li>
<li>Call from javascript: webscriptObj.mymethod_(somearg)</li>
<li>In the webView initialization on the object that contains mymethod(somearg): self.respondsToSelector(&#8216;mymethod:&#8217;)</li>
<li>All of this confusion seems to arise from translation between JS methods, selectors, and strings/symbols in macruby. The colon at the end matters and it doesn&#8217;t work if it is a symbol, :&#8217;mymethod:&#8217;. For no-args methods though symbols work just fine.</li>
</ul>
</ul>
<li>It is handy setting up the delegate methods to trap the console.(log|error|warn) methods as well as window.status changes.</li>
<li>Note the WebScriptObject does not exist for the iPhone UIWebView, only for the OSX WebKit WebView. The <a href="http://www.phonegap.com/">PhoneGap</a> project has a workaround for UIWebView for call from Javascript to Objective-C. For the opposite direction, Objective-C calling Javascript, the method stringByEvaluatingJavaScriptFromString is portable across both UIKit and WebKit.</li>
</ul>
<pre style="border:solid 1px grey;font-size:1.3px em;color:black;background:#D4D2D2;margin:10px;padding:10px;">class MyMacRubyController

    attr_accessor :scriptobj

    # In this example, the top level app_controller creates MyMacRubyController
    # and initializes it with a WebView created via Interface Builder.
    def initialize(view)
        @view = view
        #@view.delegate = self   # only for UIWebView, below are for WebView
	@view.UIDelegate = self
	@view.frameLoadDelegate = self
	@view.setMainFrameURL(NSBundle.mainBundle.pathForResource(‘test.html’, ofType:nil))
        set_body_content()
    end

    def set_body_content(name)
        js = ‘document.getElementById(“content”).innerHTML = “some html text”’
        @view.stringByEvaluatingJavaScriptFromString(js)
    end

    #### Methods exposed to javascript via ‘myController’ object ####

    def test
        puts “In test method”
    end

    def test(somearg)
        puts "In test method with arg: #{somearg}"
    end

    #### WebScripting delegate related ####

    # This WebScripting delegate method required and must be static.
    # Ensures only methods you want are exposed to javascript.
    def self.isSelectorExcludedFromWebScript(selector)
        if selector == :test or selector == 'test:'
            return false
        else
            return true
        end
    end

    # Delegate method for obtaining the script object. Sets up the main
    # application callback object, myController. MacRuby method names
    # seem to need to be all lowercase characters e.g. ‘runme’, ‘test’
    def webView(wv, windowScriptObjectAvailable:obj)
        @scriptobj = obj
        puts “Got window script object #{@scriptobj}”
        @scriptobj.setValue(self, forKey:’myController’)
        self.respondsToSelector('test:')    # this registration is only needed for methods with args
    end

    # Called whenever window.status is called in JS
    def webView(wv, setStatusText:text)
        puts “JS status -&gt; “ + text
    end

    # Private WebViewUIDelegate method to trap console.log messages
    def webView(wv, addMessageToConsole:message)
        puts “JS console -&gt; “ + message[‘message’]
    end
end</pre>
<pre style="border:solid 1px grey;font-size:1.3px em;color:black;background:#D4D2D2;margin:10px;padding:10px;">&lt;html&gt;
&lt;head&gt;
&lt;script type=“text/javascript”&gt;
function doSomething() {
    console.log(“in dosomething”)
    window.status = “status set in dosomething”
    console.log(window.myController);
    console.log(window.myController.test());
    console.log(window.myController.test_("arg passed"));
}
&lt;/script&gt;
&lt;/head&gt;

&lt;body&gt;
&lt;form&gt;
  &lt;button type=“button” onclick=“doSomething()”&gt;Click me&lt;/button&gt;
&lt;/form&gt;
&lt;div id=“content”&gt;&lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;</pre>
<p>Update: found this related article from <a href="http://merbist.com/2010/10/19/macruby-webkit-and-js/">the merbist</a>.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/measureonce.wordpress.com/76/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/measureonce.wordpress.com/76/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/measureonce.wordpress.com/76/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/measureonce.wordpress.com/76/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/measureonce.wordpress.com/76/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/measureonce.wordpress.com/76/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/measureonce.wordpress.com/76/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/measureonce.wordpress.com/76/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/measureonce.wordpress.com/76/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/measureonce.wordpress.com/76/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/measureonce.wordpress.com/76/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/measureonce.wordpress.com/76/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/measureonce.wordpress.com/76/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/measureonce.wordpress.com/76/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=measureonce.wordpress.com&amp;blog=4854777&amp;post=76&amp;subd=measureonce&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://measureonce.wordpress.com/2010/10/29/macruby-and-webview/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/505544cf0712e3b8352d12b8a17e0a6e?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">spetschu</media:title>
		</media:content>
	</item>
		<item>
		<title>Versioning REST APIs</title>
		<link>http://measureonce.wordpress.com/2010/07/02/versioning-rest-apis/</link>
		<comments>http://measureonce.wordpress.com/2010/07/02/versioning-rest-apis/#comments</comments>
		<pubDate>Fri, 02 Jul 2010 18:08:08 +0000</pubDate>
		<dc:creator>steve</dc:creator>
				<category><![CDATA[REST]]></category>

		<guid isPermaLink="false">https://measureonce.wordpress.com/2010/07/02/versioning-rest-apis/</guid>
		<description><![CDATA[There are three broad approaches to communicating version information: In the URL This is the most common approach. Simply add an identifier, usually near the root of the URL and version the entire set of resources below it (and hence the entire API). http://myserver.com/api/v1/someresource http://myserver.com/api/v1/another/resource This technique does a bulk versioning of the entire API [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=measureonce.wordpress.com&amp;blog=4854777&amp;post=69&amp;subd=measureonce&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>There are three broad approaches to communicating version information:</p>
<p><strong>In the URL</strong></p>
<p>This is the most common approach. Simply add an identifier, usually near the root of the URL and version the entire set of resources below it (and hence the entire API).</p>
<table style="empty-cells:show;border-collapse:collapse;">
<tbody>
<tr>
<td style="background-color:#e2e2e2;border:1px solid #bfbfbf;margin:0;padding:0;">http://myserver.com/api/v1/someresource<br />
http://myserver.com/api/v1/another/resource </td>
</tr>
</tbody>
</table>
<p>This technique does a bulk versioning of the entire API and suggests that you shouldn’t mix resources across API versions. It is analogous to traditional API releases by sending out a new library versions. Bits within the old version (classes, data structures) are not intended to work smoothly with the new version. FWIW, this approach is common and well understood.</p>
<p><strong>In the Media type</strong></p>
<p>This seems to be the most RESTful to me, but hasn’t been widely deployed yet.</p>
<table style="empty-cells:show;border-collapse:collapse;">
<tbody>
<tr>
<td style="background-color:#e2e2e2;border:1px solid #bfbfbf;margin:0;padding:0;">Content-type: text/vnd.mycompany.mytype+v1  </td>
</tr>
</tbody>
</table>
<p>There are other possible variations that change the scope of the versioning:</p>
<table style="empty-cells:show;border-collapse:collapse;">
<tbody>
<tr>
<td style="background-color:#e2e2e2;border:1px solid #bfbfbf;margin:0;padding:0;">Content-type: text/vnd.mycompany.mytypesv1.sometype  </td>
</tr>
</tbody>
</table>
<p>It feels a bit awkward when using content type degradation conventions:</p>
<table style="empty-cells:show;border-collapse:collapse;">
<tbody>
<tr>
<td style="background-color:#e2e2e2;border:1px solid #bfbfbf;margin:0;padding:0;">Content-type: text/vnd.mycompany.mytype+v1+xml  </td>
</tr>
</tbody>
</table>
<p>In general, the whole idea of extending mime-types to make them more flexible seems necessary but also limited. That little string simply can’t scale too far. What if you want to have a vendor specific type that also happens to follow some xml standard. Can you subsume that XML standards mime-type which may also have a +xml at the end?</p>
<p><strong>In the Content</strong></p>
<p>This is how the human driven web currently works. The content is returned with an un-versioned media type, usually from an un-versioned URL, and the handler of that media type needs to sniff the content to figure out what version was sent back. That is why we have HTML content declarations and a convoluted set of rules that are different for each browser on how to handle combinations of content declarations and browser versions (quirks mode!). In general, it works for the simple case but is difficult to manage when things get complex.</p>
<p>My preference right now is to define a small to medium number of media types and have them versioned independently of the resource space used to access them. Exceptions to this are when the media types are tightly related and are likely to all be consumed as a whole anyways. In this case, versioning the whole API offloads the dependency tracking from the consumer and guarantees them a complete, cohesive API. However, when this happens you should consider whether that coupling is truly necessary in the first place.</p>
<p><span style="text-decoration:underline;"><a href="http://www.stucharlton.com/blog/archives/000589.html">http://www.stucharlton.com/blog/archives/000589.html</a></span><br />
<span style="text-decoration:underline;"><a href="http://stage.vambenepe.com/archives/1300">http://stage.vambenepe.com/archives/1300</a></span><br />
<span style="text-decoration:underline;"><a href="http://barelyenough.org/blog/tag/rest-versioning/">http://barelyenough.org/blog/tag/rest-versioning/</a></span><br />
<span style="text-decoration:underline;"><a href="http://www.codeoncotton.com/blog/2008/05/19/versioning-rest-web-services/">http://www.codeoncotton.com/blog/2008/05/19/versioning-rest-web-services/</a></span><br />
<span style="text-decoration:underline;"><a href="http://www.infoq.com/news/2010/03/rest-versioning-strategies">http://www.infoq.com/news/2010/03/rest-versioning-strategies</a></span></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/measureonce.wordpress.com/69/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/measureonce.wordpress.com/69/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/measureonce.wordpress.com/69/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/measureonce.wordpress.com/69/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/measureonce.wordpress.com/69/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/measureonce.wordpress.com/69/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/measureonce.wordpress.com/69/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/measureonce.wordpress.com/69/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/measureonce.wordpress.com/69/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/measureonce.wordpress.com/69/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/measureonce.wordpress.com/69/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/measureonce.wordpress.com/69/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/measureonce.wordpress.com/69/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/measureonce.wordpress.com/69/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=measureonce.wordpress.com&amp;blog=4854777&amp;post=69&amp;subd=measureonce&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://measureonce.wordpress.com/2010/07/02/versioning-rest-apis/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/505544cf0712e3b8352d12b8a17e0a6e?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">spetschu</media:title>
		</media:content>
	</item>
		<item>
		<title>Estimation Rules of Thumb</title>
		<link>http://measureonce.wordpress.com/2010/05/31/estimation-rules-of-thumb/</link>
		<comments>http://measureonce.wordpress.com/2010/05/31/estimation-rules-of-thumb/#comments</comments>
		<pubDate>Tue, 01 Jun 2010 03:42:03 +0000</pubDate>
		<dc:creator>steve</dc:creator>
				<category><![CDATA[agile]]></category>
		<category><![CDATA[software development]]></category>

		<guid isPermaLink="false">https://measureonce.wordpress.com/2010/05/31/estimation-rules-of-thumb/</guid>
		<description><![CDATA[Software project estimation is hard. In fact, it is so hard that estimating within the accuracy most people expect is actually impossible. To get as accurate as humanly possible, read McConnell’s software estimation book,[1] collect your own metrics, and then carefully and critically apply the principles. If you just need to get a quick order [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=measureonce.wordpress.com&amp;blog=4854777&amp;post=68&amp;subd=measureonce&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Software project estimation is hard. In fact, it is so hard that estimating within the accuracy most people expect is actually impossible. To get as accurate as humanly possible, read <a href="http://www.amazon.com/Software-Estimation-Demystifying-Practices-Microsoft/dp/0735605351/ref=sr_1_2?ie=UTF8&amp;s=books&amp;qid=1275355156&amp;sr=8-2">McConnell’s software estimation book</a>,[1] collect your own metrics, and then carefully and critically apply the principles. If you just need to get a quick order of magnitude check, here are some heuristics and techniques for a bottom up approach based on estimating code size.</p>
<p>The basic numbers are:</p>
<ul style="list-style-type:disc;">
<li>5-20 LOC per developer per hour</li>
<li>2000 person hours per year</li>
<li>50 LOC/class (Java), 100 LOC/class (C++)</li>
</ul>
<p>This method uses objects as a proxy for size estimation.[2] You need to supply the number of objects in the target software and out pops the magic number. The two dominant variables tend to be the the number of objects (obviously) and the LOC per developer per hour. The second can often be pulled from historical data. I tend to measure the start when developers are first engaged in serious coding, skipping the early requirements and visioning, and the end when the code is running, unit tested, and lightly functionally tested i.e. DCUT code (Design-Code-Unit Test). For some teams this alpha, others beta, and others Running Tested Features. However you do it, try to find reasonably consistent points and make your historical measurements. </p>
<p>If you have no historical data, here is a rough continuum:</p>
<ol style="list-style-type:decimal;">
<li>25+ LOC/person/hour &#8212; prototypes; small trivial projects</li>
<li>20 LOC/person/hour &#8212; small, 2-3 person team with fast micro-requirement turnaround (e.g. onsite customer, or more commonly, the developers are able to fill in many of the details of the requirements)</li>
<li>10 LOC/person/hour &#8212; regular agile team building a non-trivial app</li>
<li>5 LOC/person/hour &#8212; typical enterprise development pace</li>
<li>1-3 LOC/person/hour &#8212; stringent or archaic, unproductive environments (e.g. banking software); you’ll see this in some historical literature, but they are often taking into account the time beyond DCUT</li>
</ol>
<p>Pick one that seems to fit your team size and environment. Don’t be too optimistic. How big is your team size? Is it a prototype? Do you have to worry about localization, security, scalability? How familiar is the team with the languages, frameworks, and tools? </p>
<p>The 2000 person hours per year is just a shortcut to take care of holidays, sick days, bathroom breaks, and other daily down time. Also known as non-ideal programmer days (hours). </p>
<p>Now the hard part. How do you figure out the number of objects or lines of code in your future software? The easiest way is by analogy. Find a similar project that either you’ve done or someone else has done. There may be some open source projects that cover some of your project scope. If so, take a look at their code bases. </p>
<p>Barring that, you’ll need to do some high level design in order to start figure out how big your code will be. Knowing how many layers your architecture will have and which frameworks you’ll be using is important. More layers tend to add more code. Frameworks often provide design constraints that you can use to start to enumerate the scope of the code &#8212; count the number of services, commands, or functions. Database tables and screens are also good proxies for code size estimation. If you already have a database schema, how many objects will be needed to wrapper it? Will there be a separation of data objects and domain objects? </p>
<p>Screens tend to map to template files, controllers, views, model proxies, etc. If you have both a existing database schema and requirements that map out screens, you should be in pretty good shape. If you have a pure codebase with no external anchors such as screens, database tables, web services to process, or transactions to fulfill, you may want take a different approach.</p>
<p>Once you estimate out how many objects it is just a matter of multiplying out the Objects * LOC per object * LOC per person per hour to get the total person hours. Multiply by 2000 to get the person years. </p>
<p>Now take a look at the software <a href="http://www.construx.com/Page.aspx?hid=1648">estimation cone of uncertainty</a> and realize your error bars are probably worse than +/-100%.[3] Still, it is better than nothing at this point. Ideally, you should use this technique along with a couple of others, such as a top-down work breakdown structure, gut checks with a few team members, and/or high level epic estimation via planning poker. <a href="http://en.wikipedia.org/wiki/Software_development_effort_estimation">Multiple techniques</a> done independently (don’t taint each other!) are more powerful than one expert judgement.</p>
<p>Note this number does not take into account non-code related and other project related costs. Designing the database, setting up build machines, project management, and high level requirements definition should be estimated separately.</p>
<p>[1] <em>Software Estimation</em>, Steve McConnell. <span style="text-decoration:underline;"><a href="http://www.amazon.com/Software-Estimation-Demystifying-Practices-Microsoft/dp/0735605351/ref=sr_1_2?ie=UTF8&amp;s=books&amp;qid=1275355156&amp;sr=8-2">http://www.amazon.com/Software-Estimation-Demystifying-Practices-Microsoft/dp/0735605351/ref=sr_1_2?ie=UTF8&amp;s=books&amp;qid=1275355156&amp;sr=8-2</a></span><br />
[2] <em>A Discipline for Software Engineering</em>, Watts S. Humphrey. <span style="color:rgb(0,0,238);text-decoration:underline;">http://www.amazon.com/Discipline-Software-Engineering-Watts-Humphrey/dp/0201546108/ref=sr_1_4?ie=UTF8&amp;s=books&amp;qid=1275358404&amp;sr=1-4</span></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/measureonce.wordpress.com/68/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/measureonce.wordpress.com/68/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/measureonce.wordpress.com/68/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/measureonce.wordpress.com/68/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/measureonce.wordpress.com/68/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/measureonce.wordpress.com/68/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/measureonce.wordpress.com/68/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/measureonce.wordpress.com/68/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/measureonce.wordpress.com/68/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/measureonce.wordpress.com/68/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/measureonce.wordpress.com/68/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/measureonce.wordpress.com/68/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/measureonce.wordpress.com/68/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/measureonce.wordpress.com/68/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=measureonce.wordpress.com&amp;blog=4854777&amp;post=68&amp;subd=measureonce&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://measureonce.wordpress.com/2010/05/31/estimation-rules-of-thumb/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/505544cf0712e3b8352d12b8a17e0a6e?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">spetschu</media:title>
		</media:content>
	</item>
		<item>
		<title>Relative Cost of Distributed Architectures</title>
		<link>http://measureonce.wordpress.com/2010/04/24/relative-cost-of-distributed-architectures/</link>
		<comments>http://measureonce.wordpress.com/2010/04/24/relative-cost-of-distributed-architectures/#comments</comments>
		<pubDate>Sat, 24 Apr 2010 15:45:37 +0000</pubDate>
		<dc:creator>steve</dc:creator>
				<category><![CDATA[architecture]]></category>

		<guid isPermaLink="false">https://measureonce.wordpress.com/2010/04/11/relative-cost-of-distributed-architectures/</guid>
		<description><![CDATA[Applications that have both a desktop and a web version, often for online/offline use cases, force you to make a decision about whether you want to share or duplication the back-end code that isn&#8217;t dependent on the UI bits. If you have a nice, separable back-end engine component it is tempting to architect your application [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=measureonce.wordpress.com&amp;blog=4854777&amp;post=55&amp;subd=measureonce&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Applications that have both a desktop and a web version, often for online/offline use cases, force you to make a decision about whether you want to share or duplication the back-end code that isn&#8217;t dependent on the UI bits. If you have a nice, separable back-end engine component it is tempting to architect your application as two separate distributed components and treat the local configuration as a special case of that.</p>
<p>For example, when your core application logic is layered behind a REST API, why not just have mini-web server running on the client for the the desktop deployment scenario? The UI layer can manage this process transparently to the user.</p>
<p>The benefit is a single architecture to cover both the web and the desktop deployment scenarios &#8212; the trade-off is that you are building some fundamental latencies into your architecture. To put the costs in perspective, I tried to google up some rules of thumb on the typical latency of various types of calls. Here is a rough approximation of the relative costs:</p>
<div style="border:solid 1px grey;font-size:1.3px em;color:black;background:#D4D2D2;margin:10px;padding:10px;">method call &#8212; ~100s ns<br />
synchronized method call &#8212; ~1000s ns<br />
reflective method call &#8212; low ~10,000s ns<br />
machine loopback &#8212; ~30,000-150,000 ns<br />
local sub-network &#8212; 1-2 ms<br />
internet &#8212; 10-100+ ms</div>
<ul style="list-style-type:disc;">
<li><a href="http://perspectives.mvdirona.com/2009/10/17/JeffDeanDesignLessonsAndAdviceFromBuildingLargeScaleDistributedSystems.aspx">http://perspectives.mvdirona.com/2009/10/17/JeffDeanDesignLessonsAndAdviceFromBuildingLargeScaleDistributedSystems.aspx </a></li>
<li><a href="http://stackoverflow.com/questions/94794/what-is-the-cost-of-a-function-call">http://stackoverflow.com/questions/94794/what-is-the-cost-of-a-function-call</a></li>
<li><a href="http://stackoverflow.com/questions/667634/what-is-the-performance-cost-of-having-a-virtual-method-in-a-c-class">http://stackoverflow.com/questions/667634/what-is-the-performance-cost-of-having-a-virtual-method-in-a-c-class</a></li>
<li><a href="http://hbfs.wordpress.com/2008/12/30/the-true-cost-of-calls/">http://hbfs.wordpress.com/2008/12/30/the-true-cost-of-calls/</a></li>
<li><a href="http://duartes.org/gustavo/blog/post/what-your-computer-does-while-you-wait">http://duartes.org/gustavo/blog/post/what-your-computer-does-while-you-wait</a></li>
</ul>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/measureonce.wordpress.com/55/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/measureonce.wordpress.com/55/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/measureonce.wordpress.com/55/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/measureonce.wordpress.com/55/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/measureonce.wordpress.com/55/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/measureonce.wordpress.com/55/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/measureonce.wordpress.com/55/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/measureonce.wordpress.com/55/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/measureonce.wordpress.com/55/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/measureonce.wordpress.com/55/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/measureonce.wordpress.com/55/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/measureonce.wordpress.com/55/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/measureonce.wordpress.com/55/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/measureonce.wordpress.com/55/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=measureonce.wordpress.com&amp;blog=4854777&amp;post=55&amp;subd=measureonce&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://measureonce.wordpress.com/2010/04/24/relative-cost-of-distributed-architectures/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/505544cf0712e3b8352d12b8a17e0a6e?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">spetschu</media:title>
		</media:content>
	</item>
		<item>
		<title>Model Your Resources Well and Don&#8217;t Worry About the REST</title>
		<link>http://measureonce.wordpress.com/2010/04/20/dont-worry-about-the-rest/</link>
		<comments>http://measureonce.wordpress.com/2010/04/20/dont-worry-about-the-rest/#comments</comments>
		<pubDate>Tue, 20 Apr 2010 18:59:47 +0000</pubDate>
		<dc:creator>steve</dc:creator>
				<category><![CDATA[REST]]></category>
		<category><![CDATA[software development]]></category>

		<guid isPermaLink="false">http://measureonce.wordpress.com/2010/04/20/model-your-resources-well-and-dont-worry-about-the-rest/</guid>
		<description><![CDATA[RESTfully modelling transient resources, events, collections, and other application facets can be difficult. The post “Square Peg, REST hole” nails it and has an excellent discussion in the comments section. While I am a fan of REST and have been following the “web architecture friendly web services” debate since before dissertation-REST existed, what has become [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=measureonce.wordpress.com&amp;blog=4854777&amp;post=46&amp;subd=measureonce&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>RESTfully modelling transient resources, events, collections, and other application facets can be difficult. The post <a href="http://stage.vambenepe.com/archives/1300">“Square Peg, REST hole”</a> nails it and has an excellent discussion in the comments section. While I am a fan of REST and have been following the “web architecture friendly web services” debate since before dissertation-REST existed, what has become clear over the past few years is that:</p>
<div style="border:solid 1px grey;font-size:1.3px em;color:black;background:#D4D2D2;margin:40px;padding:10px;"><strong>90% of the value of REST is idempotent GETs on well named, hackable resources</strong></div>
<p>And yes, hackable URLs are not  a part of REST, but they certainly are an integral part of the success of web architecture friendly web services in the real world. REST wouldn’t be winning over SOAP if it wasn’t for all the successful semi-RESTful APIs that developers found far more intuitive and usable. So if you model your Resources right and people can intuitively GET them, you probably don’t need to sweat the rest of the details.</p>
<p>A corollary to this is that if the majority of your application doesn’t involve getting resources that are at least in the granularity ballpark of a document, then REST may not be that important to you.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/measureonce.wordpress.com/46/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/measureonce.wordpress.com/46/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/measureonce.wordpress.com/46/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/measureonce.wordpress.com/46/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/measureonce.wordpress.com/46/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/measureonce.wordpress.com/46/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/measureonce.wordpress.com/46/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/measureonce.wordpress.com/46/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/measureonce.wordpress.com/46/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/measureonce.wordpress.com/46/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/measureonce.wordpress.com/46/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/measureonce.wordpress.com/46/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/measureonce.wordpress.com/46/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/measureonce.wordpress.com/46/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=measureonce.wordpress.com&amp;blog=4854777&amp;post=46&amp;subd=measureonce&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://measureonce.wordpress.com/2010/04/20/dont-worry-about-the-rest/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/505544cf0712e3b8352d12b8a17e0a6e?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">spetschu</media:title>
		</media:content>
	</item>
	</channel>
</rss>
