<?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>Azavea Labs</title>
	<atom:link href="http://www.azavea.com/blogs/labs/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.azavea.com/blogs/labs</link>
	<description>Insight on what our engineers are doing</description>
	<lastBuildDate>Fri, 26 Feb 2010 16:19:48 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" />
		<item>
		<title>Truncating Floats in OpenLayers and SQLServer</title>
		<link>http://www.azavea.com/blogs/labs/2010/02/truncating-floats-in-openlayers-and-sqlserver/</link>
		<comments>http://www.azavea.com/blogs/labs/2010/02/truncating-floats-in-openlayers-and-sqlserver/#comments</comments>
		<pubDate>Fri, 26 Feb 2010 16:19:48 +0000</pubDate>
		<dc:creator>Carissa Brittain</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Math]]></category>
		<category><![CDATA[openlayers]]></category>
		<category><![CDATA[SQL Server]]></category>

		<guid isPermaLink="false">http://www.azavea.com/blogs/labs/?p=442</guid>
		<description><![CDATA[A perfectly valid question when dealing with map coordinates is &#8220;How accurate do we need to be?&#8221; For some applications, a tenth of a degree is more than accurate enough while for others, several more decimal places are needed. Sometimes this question is answered for you: if your data source only stores four decimal places, [...]]]></description>
			<content:encoded><![CDATA[<p>A perfectly valid question when dealing with map coordinates is &#8220;<a title="There's even a govt study" href="http://egsc.usgs.gov/isb/pubs/factsheets/fs17199.html" target="_blank">How accurate do we need to be?</a>&#8221; For some applications, a tenth of a degree is more than accurate enough while for others, several more decimal places are needed. Sometimes this question is answered for you: if your <a title="Some good free gis data" href="http://data.geocomm.com/" target="_blank">data source</a> only stores four decimal places, then that&#8217;s all the precision you&#8217;re going to have. If you&#8217;re in the <a title="4-leaves?" href="http://en.wikipedia.org/wiki/Shamrock" target="_blank">lucky</a> (unlucky?) position of generating your own coordinates, one common answer to the &#8220;how accurate&#8221; debate is &#8220;store it all&#8221;. This is the path Sajara chose, mostly because we didn&#8217;t have a good reason to choose a less precise solution over a more precise one. It just so happens that SQLServer&#8217;s <a title="Almost too much info" href="http://en.wikipedia.org/wiki/Floating_point" target="_blank">floating data type</a> precision limit is not tied so much to the number of decimal places, as to the number of numeric digits to be stored. They allow up to <a title="or 53 bits" href="http://en.wikipedia.org/wiki/Double_precision" target="_blank">16 numeric digits</a>, plus a <a title="We didn't always use one" href="http://en.wikipedia.org/wiki/Decimal_separator" target="_blank">period character</a> and a <a title="We didn't always use one either" href="http://en.wikipedia.org/wiki/Negative_number#History" target="_blank">negative character</a> as needed. Sajara works with coordinate systems in both meters and degrees, so depending on which system we&#8217;re using for a given implementation, we could be storing a value far more precise than is even visible to the <a title="half a millimeter or so" href="http://en.wikipedia.org/wiki/Naked_eye#Small_objects_and_maps" target="_blank">naked eye</a>.</p>
<p>Fast forward a few years and bring OpenLayers into the mix. We rewrote the asset editing portion of the software to allow data managers to move asset coordinates using an OpenLayers map. These coordinates were saved with still considerably more precision than we needed, but remember, we&#8217;re storing whatever precision we get. So far so good.</p>
<p>Now back to the present and we&#8217;re working on a comparison tool for our data managers. Suddenly values in the database are not matching the values coming out of our OpenLayers map. Almost, but not quite. In fact, only the last degrees of precision are different. After a bit of digging, we discovered that OpenLayers was returning numbers with between 1 and 3 fewer decimal places than our stored coordinates. Remember that we&#8217;re talking about distance differences smaller than <a title="Don't fall" href="http://images.google.com/images?hl=en&amp;client=firefox-a&amp;hs=ltN&amp;rls=org.mozilla:en-US:official&amp;resnum=0&amp;q=crack+in+the+sidewalk&amp;um=1&amp;ie=UTF-8&amp;ei=8PCHS4mEPI7U8Qakr8G8Dw&amp;sa=X&amp;oi=image_result_group&amp;ct=title&amp;resnum=4&amp;ved=0CCkQsAQwAw" target="_blank">a crack in the sidewalk</a> here, but programing languages don&#8217;t know anything about &#8220;close enough&#8221;. Either two numbers are the same or they aren&#8217;t and -39.6827663878 is not the same as -39.682766387 no matter how small the physical difference is. So we started <a title="Not quite this deep though" href="http://listverse.com/2008/09/21/top-10-amazing-holes-in-the-earth/" target="_blank">digging</a> for the reason.</p>
<p>OpenLayers has a value tucked away in its utility files that sets the default precision of a floating point number to 14 characters. This limit was added when a user noticed that the edges of certain coordinate systems were not behaving correctly due to some floating-point math precision errors. While the OpenLayers community recognizes that most systems allow floats to have 16 digits,  &#8220;<a title="Line 830-something or so" href="http://trac.openlayers.org/browser/trunk/openlayers/lib/OpenLayers/Util.js#L838">14 significant digits are sufficient to represent sub-millimeter accuracy in any coordinate system that anyone is likely to use with OpenLayers</a>&#8220;. So OpenLayers&#8217; answer to the accuracy question is to save everything that will fit in a standard float, with a few decimal places pared off just in case.</p>
<p>So the next question is: &#8220;So what?&#8221; The difference between 14 and 16 decimal places in a meter-based coordinate system is microscopic, and in a degrees-based one it&#8217;s not much bigger. So far as storing a saved coordinate in Sajara, we didn&#8217;t really care if we had 16 digits or 14 digits; the result wouldn&#8217;t look any different to our audience. However, since our initial coordinates had 16 digits and OpenLayers only preserved 14 of them, any programmatic comparison <a title="Though not quite this epic-ly" href="http://www.themadhat.com/images/fail_20at_20failing.jpg" target="_blank">fails!</a> No one likes to deal with false positives, but a 100% false positive rate was unacceptable.</p>
<p>We had a few choices here. First we could reset the default precision value in OpenLayers to zero, which would tell the library to never truncate anything. That&#8217;s a fairly simple change but we weren&#8217;t sure it wouldn&#8217;t have unforeseen data effects. Also, there&#8217;s a somewhat vague warning about problems with the <a title="The official definition." href="http://spatialreference.org/ref/sr-org/45/">Web Mercator</a> projection when this value is zero, which is one of the projections Sajara can use. So that option was out.</p>
<p>Second, we could have told SQLServer to alter the precision of coordinate values to 14, which is a fairly major change. This option was ruled out because of a difference in the definition of &#8220;precision&#8221; between SQLServer and OpenLayers. I mentioned earlier that SQLServer will store a maximum of 16 numeric digits plus a decimal and a negative sign, so a total of 18 characters. OpenLayers, however, considers the default precision of 14 to mean 14 characters instead of 14 numeric digits. So if a number has a decimal and a negative sign, we&#8217;re down to 12 numeric digits.  This little difference reintroduces the possibility of <a title="Wrong and right at the same time?" href="http://en.wikipedia.org/wiki/Type_I_and_type_II_errors#False_positive_rate">false positives</a>, so it isn&#8217;t really a change for the better.</p>
<p>The solution we finally decided to use was to change the OpenLayers default precision value to 18. Why 18? That&#8217;s the maximum amount of characters that SQLServer will store for a float, so OpenLayers will always be able to deal with any stored coordinates without having to truncate. Now, if we compare our stored coordinates with OpenLayer coordinates, we only get a change notice when an asset has actually been moved. Which is exactly what we wanted.</p>
<p>Here are some technical details for those interested:</p>
<p>The full variable name is OpenLayers.Util.DEFAULT_PRECISION and can be found in the Util.js file. There are a few good comments preceding the variable in the code, but more background can be found in the OpenLayers <a href="http://trac.openlayers.org/ticket/1951" target="_self">ticket #1951</a>. SQLServer information can be found in <a title="Very Technical" href="http://msdn.microsoft.com/en-us/library/ms173773.aspx" target="_blank">mdsn</a>. Note that if you wind up changing the OpenLayers precision value, you should do it as soon as possible after loading the library, so you don&#8217;t have the possibility of code using different precision values.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.azavea.com/blogs/labs/2010/02/truncating-floats-in-openlayers-and-sqlserver/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Getting an ArcGIS Server Map Cache in S3</title>
		<link>http://www.azavea.com/blogs/labs/2010/02/arcgis-server-cache-in-s3/</link>
		<comments>http://www.azavea.com/blogs/labs/2010/02/arcgis-server-cache-in-s3/#comments</comments>
		<pubDate>Thu, 04 Feb 2010 15:08:44 +0000</pubDate>
		<dc:creator>Sean McGinnis</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Amazon Web Services]]></category>
		<category><![CDATA[ArcGIS Server]]></category>
		<category><![CDATA[openlayers]]></category>
		<category><![CDATA[tips]]></category>

		<guid isPermaLink="false">http://www.azavea.com/blogs/labs/?p=430</guid>
		<description><![CDATA[When deciding how to best handle the air photos in the new Philadelphia Water Department Stormwater Map Viewer, we kicked around a few ideas. We decided to put the cache in Amazon&#8217;s Simple Storage Service to offload some of the local disk requirements and leverage their fast data storage and delivery infrastructure. In moving the [...]]]></description>
			<content:encoded><![CDATA[<p>When deciding how to best handle the air photos in the new <a href="http://phillystormwater.org">Philadelphia Water Department Stormwater Map Viewer</a>, we kicked around a few ideas. We decided to put the cache in <a href="http://aws.amazon.com/s3/">Amazon&#8217;s Simple Storage Service</a> to offload some of the local disk requirements and leverage their fast data storage and delivery infrastructure. In moving the process, we learned a few things:</p>
<h1>Tune Your Cache</h1>
<p>Make sure you spend time planning the cache. Not only will the cache look better in the final application, but it will also load to S3 faster and cost less in the long run.</p>
<ul>
<li>Set the extents in the MXD or MSD before publishing to a map service. The overhead of transferring the 254 byte empty tiles caused a lot of unnecessary burden on the upload process as well as the fact that you are paying for them to be stored in the cloud. If it doesn&#8217;t need to be there, don&#8217;t build it.</li>
<li>Choose the correct image format for the cache. If you are caching a base map and do not need to support transparency, make it a JPEG. If it needs to support background transparency, use PNG. <a href="http://www.esri.com">ESRI&#8217;s</a> suggestions for planning a map cache can be found <a href="http://webhelp.esri.com/arcgisserver/9.3.1/dotNet/index.htm#planning_a_map_cache.htm">here</a>.</li>
</ul>
<h1>Get a Good Tool to Transfer the Files</h1>
<p>I started using the free version of <a href="http://cloudberrylab.com/?page=cloudberry-explorer-amazon-s3">Cloudberry Labs S3 explorer</a>. But I had to move over 90 Gbs worth of data to my S3 bucket. The <a href="http://cloudberrylab.com/?page=s3-explorer-pro">CloudBerry S3 Explorer &#8211; Pro</a> supported multithreading which allowed for up to 5 threads to either enumerate through the folders, copy the files or apply the ACL. It is a low cost application that more than pays for itself when moving a lot of files up to a bucket.</p>
<p>When transferring the files up, I was working in blocks of directories, not the whole scale level. It was quicker for me to work in 20 to 30 subdirectories than grabbing a whole scale level. It did require a little bit more management on my end, but more steady progress was made.</p>
<h1>Accessing the Tiles</h1>
<p>ArcGIS Server does not support cloud hosted caches at the 9.3.1 release.  The ESRI <a href="http://resources.esri.com/arcgisserver/index.cfm?fa=JSAPIs">Javascript API</a> and <a href="http://resources.esri.com/arcgisserver/apis/flex/">Flex API</a> can be extended to use caches hosted in the cloud (<a href="http://thunderheadxpler.blogspot.com/2008/09/arcgis-tiles-on-amazon-s3.html">Flex example</a> from <a href="http://thunderheadxpler.blogspot.com/">Mansour Raad</a>), so you&#8217;ll have to roll your own. For the <a href="http://www.phillystormwater.org">Philly Storm Water</a> project, we were using the <a href="http://openlayers.org/">Open Layers</a> and someone has rolled one for us. There is a <a href="http://trac.openlayers.org/attachment/ticket/1967/ArcGISCache.patch">patch</a> that can be used to access the cache without communicating through ArcGIS Server straight from the client-side library. The one thing to note is that the Tile Origin is pretty touchy, we had to make some adjustments to the origin values to make sure everything lined up correctly.</p>
<h1>Summary</h1>
<p>Now that the site is up there and we are starting to get some traffic hitting it, putting the tiles in S3 was the right decision. There is no reason for ArcGIS Server to waste any cycles moving tiles around, let it do the heavy lifting with the vector layers and queries. Hopefully the <a href="http://events.esri.com/uc/QandA/index.cfm?fuseaction=Answer&amp;ConferenceID=2A8E2713-1422-2418-7F20BB7C186B5B83&amp;QuestionID=2645">rumors</a> are true, and the ArcGIS Server 10 release will be more aligned with cloud computing. Until then, there are still plenty of ways to take advantage of the benefits.  </p>
]]></content:encoded>
			<wfw:commentRss>http://www.azavea.com/blogs/labs/2010/02/arcgis-server-cache-in-s3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Envisioning Development</title>
		<link>http://www.azavea.com/blogs/labs/2010/01/envisioning-development/</link>
		<comments>http://www.azavea.com/blogs/labs/2010/01/envisioning-development/#comments</comments>
		<pubDate>Mon, 11 Jan 2010 14:50:03 +0000</pubDate>
		<dc:creator>David Zwarg</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[housing]]></category>
		<category><![CDATA[nyc]]></category>
		<category><![CDATA[visualization]]></category>

		<guid isPermaLink="false">http://www.azavea.com/blogs/labs/?p=386</guid>
		<description><![CDATA[This is so simple, it&#8217;s cool: http://envisioningdevelopment.net/map
I especially like the hourglass-like effect way of populating the columns. It gives one the feel of really counting things.  Like when you switch between East Harlem and the Upper East Side.
I would like to be able to see the distribution over the whole city, or the gradients [...]]]></description>
			<content:encoded><![CDATA[<p>This is so simple, it&#8217;s cool: <a href="http://envisioningdevelopment.net/map">http://envisioningdevelopment.net/map</a></p>
<p>I especially like the hourglass-like effect way of populating the columns. It gives one the feel of really counting things.  Like when you switch between East Harlem and the Upper East Side.</p>
<p>I would like to be able to see the distribution over the whole city, or the gradients between neighborhoods, but that&#8217;s just me.  I think the design is neat and clean, and tells a very compelling story.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.azavea.com/blogs/labs/2010/01/envisioning-development/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Philadelphia Civic Hackathon creates a Gang Survey App</title>
		<link>http://www.azavea.com/blogs/labs/2009/12/philadelphia-civic-hackathon-creates-a-gang-survey-app/</link>
		<comments>http://www.azavea.com/blogs/labs/2009/12/philadelphia-civic-hackathon-creates-a-gang-survey-app/#comments</comments>
		<pubDate>Fri, 25 Dec 2009 03:41:35 +0000</pubDate>
		<dc:creator>Robert Cheetham</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[OpenGovernment]]></category>

		<guid isPermaLink="false">http://www.azavea.com/blogs/labs/?p=414</guid>
		<description><![CDATA[SunLight Labs recently held it&#8217;s Great American Hackathon, an event that encourages groups in each region of the United States to gather together on one weekend and create software that will make government more open. Two Azavea employees, David Middlecamp and yours truly, participated in the Philadelphia version and also hosted the event in our [...]]]></description>
			<content:encoded><![CDATA[<p><a title="Sunlight Labs" href="http://www.sunlightlabs.com/" target="_blank">SunLight Labs</a> recently held it&#8217;s <a href="http://www.sunlightlabs.com/blog/2009/great-american-hackathon-wrap-/" target="_blank">Great American Hackathon</a>, an event that encourages groups in each region of the United States to gather together on one weekend and create software that will make government more open. Two Azavea employees, David Middlecamp and yours truly, participated in the <a href="http://www.sunlightlabs.com/events/24/" target="_blank">Philadelphia version</a> and also hosted the event in our offices. <a href="http://razor.occams.info/" target="_blank"> Josh Tauberer</a>, a PhD candidate at <a href="http://www.upenn.edu" target="_blank">U-Penn</a>, and developer of <a href="http://www.govtrack.us/" target="_blank">GovTrack.us</a>, organized the event.</p>
<p><img class="alignnone size-medium wp-image-420" title="njgangsurvey3" src="http://www.azavea.com/blogs/labs/wp-content/uploads/2009/12/njgangsurvey3-475x356.jpg" alt="njgangsurvey3" width="475" height="356" /></p>
<p>Seven of us came together to create a web-based visualization and display tool based on data from the New Jersey Gang Survey 2007. The NJ State Police have been conducting these surveys every three years since 2001. Using <a href="http://www.djangoproject.com/" target="_blank">Django</a>, <a href="http://www.mysql.com/" target="_blank">MySQL</a>, <a href="http://www.openlayers.org/" target="_blank">OpenLayers</a>, <a href="http://www.openstreetmap.org/" target="_blank">OpenStreetMap</a> and <a href="http://www.esri.com/software/arcgis/arcview/" target="_blank">ArcGIS Desktop</a>, we put together a full-blown app in two days. Two analysts from the New Jersey State Police joined us on Saturday, explained the background on the data set, wrote up the text and other content for the site and answered questions on how the data was structured.</p>
<div id="attachment_416" class="wp-caption alignnone" style="width: 485px"><img class="size-medium wp-image-416" title="njgangsurvey1" src="http://www.azavea.com/blogs/labs/wp-content/uploads/2009/12/njgangsurvey1-475x393.png" alt="New Jersey Gang Survey Viewer" width="475" height="393" /><p class="wp-caption-text">New Jersey Gang Survey Viewer</p></div>
<p>The result is <a href="http://njgangsurvey.civicimpulse.com/" target="_blank">The New Jersey Gang Survey Viewer</a>. Check it out. I was amazed by how much a small group could accomplish in such a short time frame, particularly when most of the participants neither knew each other nor knew many of the technology tools when they started. The players were:</p>
<ul>
<li>Dean Baratta, <a href="http://www.njsp.org/" target="_blank">New Jersey State Police</a></li>
<li>Nick Cazoneri, <a href="http://www.dvrpc.org/" target="_blank">Delaware Valley Regional Planning Commission</a></li>
<li>Robert Cheetham, <a href="http://www.azavea.com/" target="_blank">Azavea</a></li>
<li>Don Coleman, <a href="http://www.chariotsolutions.com/" target="_blank">Chariot Solutions</a></li>
<li>Peter Lynch, <a href="http://www.njsp.org/" target="_blank">New Jersey State Police</a></li>
<li>David Middlecamp, <a href="http://www.azavea.com/" target="_blank">Azavea</a></li>
<li>Josh Tauberer, <a href="http://www.civicimpulse.com/" target="_blank">Civic Impulse</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.azavea.com/blogs/labs/2009/12/philadelphia-civic-hackathon-creates-a-gang-survey-app/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Scaling Walkshed.org with Varnish and Amazon Web Services</title>
		<link>http://www.azavea.com/blogs/labs/2009/12/scaling-walkshed-org-with-varnish-and-amazon-web-services/</link>
		<comments>http://www.azavea.com/blogs/labs/2009/12/scaling-walkshed-org-with-varnish-and-amazon-web-services/#comments</comments>
		<pubDate>Tue, 15 Dec 2009 22:33:59 +0000</pubDate>
		<dc:creator>Jeremy Heffner</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Amazon Web Services]]></category>

		<guid isPermaLink="false">http://www.azavea.com/blogs/labs/?p=398</guid>
		<description><![CDATA[We&#8217;re excited for voting to open today for our entry into the NYC Big Apps Contest &#8212; Walkshed NYC.
Walkshed is very CPU intensive since we generate heatmaps for users&#8217; custom walkability factors on the fly.  Building on the work we did with using Amazon&#8217;s content delivery network for RedistrictingTheNation.com, we decided to expand our use [...]]]></description>
			<content:encoded><![CDATA[<p>We&#8217;re excited for voting to open today for <a href="http://www.nycbigapps.com/application-gallery/walkshed-nyc">our entry into the NYC Big Apps Contest</a> &#8212; <a href="http://walkshed.org/nyc">Walkshed NYC</a>.</p>
<p>Walkshed is very CPU intensive since we generate heatmaps for users&#8217; custom walkability factors on the fly.  <a href="http://www.azavea.com/blogs/labs/2009/10/bracing-for-potential-catastrophic-success-amazons-cloudfront-cdn/">Building on the work we did with using Amazon&#8217;s content delivery network</a> for <a href="http://www.redistrictingthenation.com/">RedistrictingTheNation.com</a>, we decided to expand our use of Amazon Web Services (AWS) for Walkshed as well as incorporate technology from the open source <a href="http://varnish.projects.linpro.no/">Varnish </a>project.</p>
<h1>Varnish for hardening (and an easier life)</h1>
<p>Varnish is a HTTP accelerator that runs on Linux (and other Unix style OSes).  We experimented with Varnish to solve a few goals:</p>
<ul>
<li>Caching frequently requested files and heatmaps tiles (i.e. the default walkability heatmap tiles)</li>
<li>Scaling by letting Varnish load balance between multiple servers</li>
<li>Improving reliability by allowing Varnish to resubmit failed requests and monitor server health</li>
</ul>
<p>By pointing <a href="http://walkshed.org">Walkshed.org</a> directly to Varnish, we are able to adjust server configurations on the fly without bringing down our application.   Currently, Varnish provides load balancing between 4 server instances which generate tiles  using Walkshed&#8217;s <a href="http://www.azavea.com/products/decisiontree/home.aspx">DecisionTree engine</a>.  About 50% of the HTTP requests running through Varnish are cache hits, which helps eliminate unnecessary traffic clogging up our application servers.</p>
<p>One instance is hosted on our private server and is often able to meet demand, but adding 3 <a href="http://aws.amazon.com/ec2/#instance">High-CPU Extra Large Instances</a> from Amazon lets us improve fault tolerance and handle larger bursts in traffic.  Varnish also monitors the health of our servers and removes them from the cluster if they become unresponsive.</p>
<h1>Amazon EC2 Instances (bigger is better)</h1>
<p>Our Amazon instances are using the new EBS-based images to improve boot speed.   We&#8217;ve found that it takes about 7 minutes from when we launch an instance until it is successfully added to our Varnish pool, which certainly isn&#8217;t bad.   By combining Varnish with Amazon&#8217;s on-demand resources, we should theoretically be able to scale as much as necessary.  For this demo application, scaling is a manual process, but we are looking toward a future where the cluster would scale automatically based on demand.</p>
<p>We also experimented with a few EC2 instance sizes.   Since our application is CPU intensive we really found we had to go with the High-CPU Extra Large Instance to get decent performance.   The instances still don&#8217;t meet the performance we get on our private VMware-based server, but our hunch is that this is due to layers of virtualization causing memory allocation to be slow.</p>
<h1>Technologies Used:</h1>
<ul>
<li><a href="http://aws.amazon.com/ec2/">Amazon EC2</a> <a href="http://aws.amazon.com/ec2/#instance">High-CPU Extra Large</a> <a href="http://aws.amazon.com/about-aws/whats-new/2009/12/03/amazon-ec2-instances-now-can-boot-from-amazon-ebs/">EBS-based</a> Instances virtualizing .NET application servers</li>
<li><a href="http://www.vmware.com/products/esxi/">VMware ESXi</a> virtualizing .NET application server</li>
<li>VMware ESXi virtualizing <a href="http://www.ubuntu.com/">Ubuntu</a> based  <a href="http://varnish.projects.linpro.no/">Varnish</a> server</li>
<li><a href="http://aws.amazon.com/cloudfront/">Amazon Cloudfront CDN</a> for static assets</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.azavea.com/blogs/labs/2009/12/scaling-walkshed-org-with-varnish-and-amazon-web-services/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ignite: Spatial, Boston</title>
		<link>http://www.azavea.com/blogs/labs/2009/12/ignite-spatial-boston/</link>
		<comments>http://www.azavea.com/blogs/labs/2009/12/ignite-spatial-boston/#comments</comments>
		<pubDate>Tue, 15 Dec 2009 16:51:08 +0000</pubDate>
		<dc:creator>David Zwarg</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[ignite]]></category>
		<category><![CDATA[sourcemap]]></category>
		<category><![CDATA[spatial]]></category>

		<guid isPermaLink="false">http://www.azavea.com/blogs/labs/?p=390</guid>
		<description><![CDATA[I got the opportunity to present at Ignite: Spatial, Boston a couple weeks ago.  I was fortunate to present Sourcemap.org in the company of other Boston area techies doing some cool work in laser scanning, CityML, social media and more.
All the videos are on YouTube. The presentation summaries are also online in this Google Doc.
Enjoy [...]]]></description>
			<content:encoded><![CDATA[<p>I got the opportunity to present at Ignite: Spatial, Boston a couple weeks ago.  I was fortunate to present <a href="http://www.sourcemap.org/">Sourcemap.org</a> in the company of other Boston area techies doing some cool work in laser scanning, CityML, social media and more.</p>
<p>All the videos are on <a href="http://www.youtube.com/IgniteSpatialBoston">YouTube</a>. The presentation summaries are also online in this <a href="http://spreadsheets.google.com/pub?key=tpbWbBV6Ih48W3IOpFGg35g&amp;single=true&amp;gid=1&amp;output=html">Google Doc</a>.</p>
<p>Enjoy your spatial ignition this morning.</p>
<p><object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/KMPrKmK4Jwk&#038;hl=en_US&#038;fs=1&#038;"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/KMPrKmK4Jwk&#038;hl=en_US&#038;fs=1&#038;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object></p>
]]></content:encoded>
			<wfw:commentRss>http://www.azavea.com/blogs/labs/2009/12/ignite-spatial-boston/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Echos of the Browser Wars</title>
		<link>http://www.azavea.com/blogs/labs/2009/12/echos-of-the-browser-wars/</link>
		<comments>http://www.azavea.com/blogs/labs/2009/12/echos-of-the-browser-wars/#comments</comments>
		<pubDate>Fri, 04 Dec 2009 18:50:26 +0000</pubDate>
		<dc:creator>David Zwarg</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[browser]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[oreilly]]></category>

		<guid isPermaLink="false">http://www.azavea.com/blogs/labs/?p=379</guid>
		<description><![CDATA[I caught this link in my feeds today: http://radar.oreilly.com/2009/12/google-android-on-inevitabilit.html
A good read on where mobile devices are, and why it is a non-trivial thing to gain market share in the mobile market.  Specifically, the article discusses the hurdles that Google is trying to jump with its investment into Android, and how Apple is setting the bar [...]]]></description>
			<content:encoded><![CDATA[<p>I caught this link in my feeds today: <a href="http://radar.oreilly.com/2009/12/google-android-on-inevitabilit.html">http://radar.oreilly.com/2009/12/google-android-on-inevitabilit.html</a></p>
<p>A good read on where mobile devices are, and why it is a non-trivial thing to gain market share in the mobile market.  Specifically, the article discusses the hurdles that Google is trying to jump with its investment into Android, and how Apple is setting the bar high with its i* products.</p>
<p>One of the things that jumps out at me is that the technical challenges of mobile development are nearly synonymous with those in web application development.  <a href="http://radar.oreilly.com/msigal/">Mark Sigal</a> points out that development in the mobile realm is essentially heterogenous.  I had a conversation with a team lead at <a href="http://www.ulocate.com/">uLocate</a> a few weeks ago that explained the matrix that characterized this heterogeny.  It&#8217;s nuts.  It&#8217;s a 4 dimensional matrix, where the dimensions are: Device, Carrier, Platform, and OS.</p>
<p>I&#8217;m comparing it to the <a href="http://en.wikipedia.org/wiki/File:Timeline_of_web_browsers.svg">browser wars</a> because when I test KIF (<a href="http://www.azavea.com/Products/Kaleidocade/Home.aspx">Kaleidocade Indicators Framework </a>) I look at the application across a 3 dimensional matrix, where the dimensions are: Browser, Version, and OS.</p>
<p>I can see how that similarity may make it easy for a developer to switch between developing a mobile application and developing a web application, since the testing strategy would be very similar.  I would like to see that transition be a smooth one (as a web developer and someone with a recreational interest in developing tools/toys for mobile devices), so that warms my heart.</p>
<p>However, what I see as a dangerous element to that matrix is how it can get <a href="http://en.wikipedia.org/wiki/List_of_exponential_topics">so big so fast</a>.  In the browser market, the matrix is limited to only a handful of items in each dimension.  In the mobile market, however, the number of handsets is always growing &#8212; so much so that it&#8217;s hard for developers to keep up.  <a href="http://www.russellbeattie.com/blog/">Russell Beattie</a> (<a href="http://www.nokia.com/">Nokia</a> employee) puts it this way (<a href="http://www.russellbeattie.com/blog/android-is-splintering-just-not-how-you-think-it-is">full article</a>):</p>
<blockquote><p>Multiply the number of models [Nokia puts out] per year (10-20) by the number of years Symbian&#8217;s been around by the various custom carrier modifications, and you get complete developer and consumer confusion.</p></blockquote>
<p>From the chatter I&#8217;ve seen, it seems like it&#8217;s going to be a teething process by Google, then all out mobile platform wars after that.  The end result?  Probably the same as where we are today, in terms of browsers: supporting about 4 major browsers, with minor differences between them. That provides support to about <a href="http://www.w3schools.com/browsers/browsers_stats.asp">97%</a> (as of 12/4/2009) of all browsers out there.  Not bad, but it&#8217;ll take mobile a while to get there, and I suspect there will be some corporate <a href="http://www.youtube.com/watch?v=zKhEw7nD9C4">blood letting</a> before it&#8217;s all over.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.azavea.com/blogs/labs/2009/12/echos-of-the-browser-wars/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Wireframing w/ Balsamiq &#8211; 5 Tips</title>
		<link>http://www.azavea.com/blogs/labs/2009/11/wireframing-w-balsamiq-5-tips/</link>
		<comments>http://www.azavea.com/blogs/labs/2009/11/wireframing-w-balsamiq-5-tips/#comments</comments>
		<pubDate>Mon, 23 Nov 2009 17:17:11 +0000</pubDate>
		<dc:creator>Sean McGinnis</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[UI]]></category>

		<guid isPermaLink="false">http://www.azavea.com/blogs/labs/?p=342</guid>
		<description><![CDATA[I have been spending a lot of time pulling together new wireframes for HunchLab using Balsamiq over the past couple of weeks. In doing so I have learned a few tricks along the way.
5. Get Additional Controls
Looking for particular interfaces or additional controls, check out Mockups to Go. I was able to find a ribbon toolbar, [...]]]></description>
			<content:encoded><![CDATA[<p>I have been spending a lot of time pulling together new wireframes for <a href="http://www.azavea.com/Products/HunchLab/Home.aspx">HunchLab</a> using <a href="http://www.balsamiq.com/">Balsamiq</a> over the past couple of weeks. In doing so I have learned a few tricks along the way.</p>
<h2>5. Get Additional Controls</h2>
<p>Looking for particular interfaces or additional controls, check out <a href="http://mockupstogo.net/">Mockups to Go</a>. I was able to find a ribbon toolbar, iPhone interface and a series of pointers that I could bring right into the wireframes.</p>
<h2>4. Change to System Fonts</h2>
<p>While I understand the goal of the application to make things look sketchy so the reviewers can focus on functionality not on the particulars of the specifics of the UI. But I definitely believe there is a reason why Comic Sans has been identified as the worst font ever (<a href="http://www.google.com/search?hl=en&amp;q=comic+sans+worst+font+ever&amp;aq=0p&amp;oq=comic+sans+wors&amp;aqi=g-p1g1">link to Google search for some supporting details</a>).</p>
<p>There are a couple of ways to do this, the first is the most straight-forward. Select &#8216;View&#8217; from the toolbar at the top and then choose &#8216;Use System Fonts&#8217;.<br />
<img class="aligncenter size-full wp-image-347" src="http://www.azavea.com/blogs/labs/wp-content/uploads/2009/11/SystemFont.png" alt="SystemFont" width="321" height="168" /></p>
<p>Another (slightly more complicated method) is to edit the Balsamiq Mockups config file. Here are the <a href="http://www.balsamiq.com/products/mockups/help#config">detailed instructions</a> from Balsamiq&#8217;s website. Going this path gives a little more flexibility to the font used in the design process.</p>
<h2>3. Clone Current Mockup &amp; Duplicate Feature</h2>
<p>I found these two functions to be great time savers. With the duplicate feature tool, no matter how many features are selected, it is a single-click copy and paste function.</p>
<p>The cloning of mockups lets you easily duplicate the interface and either create the next step in a series of wireframes or rearrange the controls to look at a different configuration.</p>
<h2>2. Internal Links to Replicate Interaction</h2>
<p>I have been using the links on controls to allow users to interact with the wireframes. Before any code is written users can interact with the UI and give feedback to workflows and interacting with the pages.</p>
<p>By default when working in the &#8216;Full Screen Presentation&#8217; mode, there is a large exaggerated cursor that was confusing to some of the people I worked with.<br />
<img class="aligncenter size-full wp-image-355" src="http://www.azavea.com/blogs/labs/wp-content/uploads/2009/11/BidgPointer.png" alt="BidgPointer" width="155" height="114" /></p>
<p>In the bottom right-hand corner of the presentation mode, there is tool to set the cursor to be more like a normal user experience when interacting in a browser or desktop environment.<br />
<img class="aligncenter size-full wp-image-357" src="http://www.azavea.com/blogs/labs/wp-content/uploads/2009/11/NormalMode.png" alt="NormalMode" width="114" height="65" /> <img class="aligncenter size-full wp-image-360" src="http://www.azavea.com/blogs/labs/wp-content/uploads/2009/11/SmallPointer.png" alt="SmallPointer" width="148" height="80" /></p>
<h2>1. Link to APIs for Images</h2>
<p>Creating graphics to represent graphs or maps can be a time consuming task. There are a number of API&#8217;s out there that can be used to get a good representation of what will be presented in the interface. A few of my personal favorites are:</p>
<p><a href="http://code.google.com/apis/maps/documentation/staticmaps/">Google Static Maps API</a><br />
<img class="alignnone" src="http://maps.google.com/maps/api/staticmap?center=340+N+12th+St,Philadelphia,PA&amp;zoom=14&amp;size=450x450&amp;maptype=roadmap&amp;markers=color:green|label:Azavea|39.958874,-75.158533&amp;sensor=false&amp;key=ABQIAAAAdh9dyuKLXaaeej2OE4TguxT2yXp_ZAY8_ufC3CFXhHIE1NvwkxR-9IRYwbQEJc-nOxvtjERfQCN-6w" alt="" width="450" height="450" /></p>
<p><a href="http://sparklines.bitworking.info/">Sparklines from Joe @ BitWorking</a><br />
<img class="alignnone" src="http://sparklines-bitworking.appspot.com/spark.cgi?type=impulse&amp;d=88,84,82,92,82,86,66,82,44,64,66,88,96,80,24,26,14,0,0,26,8,6,6,24,52,66,36,6,10,14,30,86,66,82,44,64,66,88,96,80,24,82,92,82,86,66,82,44,64,66,88,96,80,24,26,36,6,10,14,30,86,66,82,44,64,66,88,96,80,24,82,92&amp;height=50&amp;limits=0,100&amp;upper=90&amp;above-color=red&amp;below-color=dark green&amp;width=5" alt="" width="359" height="50" /><br />
<img class="alignnone" src="http://sparklines-bitworking.appspot.com/spark.cgi?type=discrete&amp;d=88,84,82,92,82,86,66,82,44,64,66,88,96,80,24,26,14,0,0,26,8,6,6,24,52,66,36,6,10,14,30,86,66,82,44,64,66,88,96,80,24,82,92,82,86,66,82,44,64,66,88,96,80,24,26,36,6,10,14,30,86,66,82,44,64,66,88,96,80,24,82,92&amp;height=50&amp;limits=0,100&amp;upper=85&amp;above-color=red&amp;below-color=dark gray&amp;width=5" alt="" width="359" height="50" /><br />
<img class="alignnone" src="http://sparklines-bitworking.appspot.com/spark.cgi?type=smooth&amp;d=88,84,82,92,82,86,66,82,44,64,66,88,96,80,24,26,14,0,0,26,8,6,6,24,52,66,36,6,10,14,30,86,66,82,44,64,66,88,96,80,24,82,92,82,86,66,82,44,64,66,88,96,80,24,26,36,6,10,14,30,86,66,82,44,64,66,88,96,80,24,82,92,90,68,33,99,14, 24,85,68,39,12&amp;height=50&amp;limits=0,100&amp;min-m=true&amp;max-m=true&amp;last-m=true&amp;min-color=red&amp;max-color=blue&amp;last-color=green&amp;step=5" alt="" width="409" height="50" /></p>
<p><a href="http://code.google.com/apis/chart/">Google Charts API</a><br />
<img class="alignnone" src="http://chart.apis.google.com/chart?cht=bvs&amp;chco=005CE6,FF5500&amp;chd=t:0,0,0,0,59,68,72,92,78,82,68,84,76,92,65,73,48,38,50,68,77,23|80,65,73,48,38,50,68,77,23,49,35,62,90,88,74,94,68,78,84,59,68,72,92,78,82,68,84,76,92&amp;chds=0,160&amp;chs=450x135&amp;chg=0,10&amp;chxt=y" alt="" width="450" height="135" /><br />
<img class="alignnone" src="http://chart.apis.google.com/chart?cht=ls&amp;chco=005CE6,FF5500&amp;chd=t:0,0,0,0,59,68,72,92,78,82,68,84,76,92,65,73,48,38,50,68,77,23|80,65,73,48,38,50,68,77,23,49,35,62,90,88,74,94,68,78,84,59,68,72,92,78,82,68,84,76,92&amp;chds=0,160&amp;chs=450x135" alt="" width="450" height="135" /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.azavea.com/blogs/labs/2009/11/wireframing-w-balsamiq-5-tips/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cloud of Atlases in The Morning News</title>
		<link>http://www.azavea.com/blogs/labs/2009/11/cloud-of-atlases-in-the-morning-news/</link>
		<comments>http://www.azavea.com/blogs/labs/2009/11/cloud-of-atlases-in-the-morning-news/#comments</comments>
		<pubDate>Thu, 12 Nov 2009 22:41:42 +0000</pubDate>
		<dc:creator>David Zwarg</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Cartography]]></category>
		<category><![CDATA[humor]]></category>
		<category><![CDATA[quiz]]></category>

		<guid isPermaLink="false">http://www.azavea.com/blogs/labs/?p=340</guid>
		<description><![CDATA[The Morning News is running an excellent quiz for all you geography heads: &#8220;Cloud of Atlases&#8221;
There are many ways to shade a map.  And very few ways to say something neutral about shockingly bad cartography.  Nonetheless, I do believe I have a new favorite that beats out the current reigning champion of the &#8220;clown barf [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.themorningnews.org/">The Morning News</a> is running an excellent quiz for all you geography heads: &#8220;<a href="http://www.themorningnews.org/archives/diversions/cloud_of_atlases.php">Cloud of Atlases</a>&#8221;</p>
<p>There are many ways to shade a map.  And very few ways to say something neutral about shockingly bad cartography.  Nonetheless, I do believe I have a new favorite that beats out the current reigning champion of the &#8220;clown barf chloropleth.&#8221;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.azavea.com/blogs/labs/2009/11/cloud-of-atlases-in-the-morning-news/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PostGIS Gets &#8220;A Whole Lot Of Awesome&#8221; (a.k.a. Spherical)</title>
		<link>http://www.azavea.com/blogs/labs/2009/11/postgis-gets-a-whole-lot-of-awesome-a-k-a-spherical/</link>
		<comments>http://www.azavea.com/blogs/labs/2009/11/postgis-gets-a-whole-lot-of-awesome-a-k-a-spherical/#comments</comments>
		<pubDate>Thu, 05 Nov 2009 15:24:14 +0000</pubDate>
		<dc:creator>David Zwarg</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[PostGIS]]></category>

		<guid isPermaLink="false">http://www.azavea.com/blogs/labs/?p=338</guid>
		<description><![CDATA[PostGIS is about to get a whole lot cooler:  &#8220;PostGIS Gets Spherical&#8221;. Hopefully, just in time to give to your loved ones this holiday season.
It may just be me and the projects I&#8217;m working on, but that feature is going to be very powerful in the near future.  Kudos to Paul Ramsey and the folks [...]]]></description>
			<content:encoded><![CDATA[<p>PostGIS is about to get a whole lot cooler:  <a href="http://blog.cleverelephant.ca/2009/11/postgis-gets-spherical-directors-cut.html">&#8220;PostGIS Gets Spherical&#8221;.</a> Hopefully, just in time to give to your loved ones this holiday season.</p>
<p>It may just be me and the projects I&#8217;m working on, but that feature is going to be very powerful in the near future.  Kudos to <a href="http://blog.cleverelephant.ca/">Paul Ramsey</a> and the folks at <a href="http://blog.opengeo.org/">Opengeo</a>!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.azavea.com/blogs/labs/2009/11/postgis-gets-a-whole-lot-of-awesome-a-k-a-spherical/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
