<?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>GIS and .NET Development</title>
	<atom:link href="http://briannoyle.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://briannoyle.wordpress.com</link>
	<description>Rants on GIS, .NET, and life in general</description>
	<lastBuildDate>Mon, 12 Jul 2010 16:21:11 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='briannoyle.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>GIS and .NET Development</title>
		<link>http://briannoyle.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://briannoyle.wordpress.com/osd.xml" title="GIS and .NET Development" />
	<atom:link rel='hub' href='http://briannoyle.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Moving on up&#8230;</title>
		<link>http://briannoyle.wordpress.com/2010/07/12/moving-on-up/</link>
		<comments>http://briannoyle.wordpress.com/2010/07/12/moving-on-up/#comments</comments>
		<pubDate>Mon, 12 Jul 2010 16:21:11 +0000</pubDate>
		<dc:creator>homebrutrout</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://briannoyle.wordpress.com/?p=274</guid>
		<description><![CDATA[It&#8217;s been a good run over here, but I&#8217;ve recently migrated this blog over to posterous.  Henceforth you can find me over here.  Please update your bookmarks, links, subscriptions, etc.  I&#8217;ll keep this blog in place for awhile but it will eventually be taken down. Be sure to check out http://blog.briannoyle.com<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=briannoyle.wordpress.com&amp;blog=2469140&amp;post=274&amp;subd=briannoyle&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s been a good run over here, but I&#8217;ve recently migrated this blog over to posterous.  Henceforth you can find me <a href="http://blog.briannoyle.com" target="_self">over here</a>.  Please update your bookmarks, links, subscriptions, etc.  I&#8217;ll keep this blog in place for awhile but it will eventually be taken down. Be sure to check out <a href="http://blog.briannoyle.com" target="_self">http://blog.briannoyle.com</a></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/briannoyle.wordpress.com/274/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/briannoyle.wordpress.com/274/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/briannoyle.wordpress.com/274/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/briannoyle.wordpress.com/274/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/briannoyle.wordpress.com/274/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/briannoyle.wordpress.com/274/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/briannoyle.wordpress.com/274/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/briannoyle.wordpress.com/274/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/briannoyle.wordpress.com/274/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/briannoyle.wordpress.com/274/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/briannoyle.wordpress.com/274/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/briannoyle.wordpress.com/274/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/briannoyle.wordpress.com/274/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/briannoyle.wordpress.com/274/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=briannoyle.wordpress.com&amp;blog=2469140&amp;post=274&amp;subd=briannoyle&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://briannoyle.wordpress.com/2010/07/12/moving-on-up/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/17c19e9c10d596422fcce4443f3a6a56?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">homebrutrout</media:title>
		</media:content>
	</item>
		<item>
		<title>Migrating Your Apps to the Cloud at ArcGIS 10</title>
		<link>http://briannoyle.wordpress.com/2010/07/08/migrating-your-apps-to-the-cloud-at-arcgis-10/</link>
		<comments>http://briannoyle.wordpress.com/2010/07/08/migrating-your-apps-to-the-cloud-at-arcgis-10/#comments</comments>
		<pubDate>Thu, 08 Jul 2010 15:38:02 +0000</pubDate>
		<dc:creator>homebrutrout</dc:creator>
				<category><![CDATA[ArcGIS Server]]></category>
		<category><![CDATA[Cloud]]></category>
		<category><![CDATA[ESRI]]></category>
		<category><![CDATA[Amazon]]></category>
		<category><![CDATA[AWS]]></category>

		<guid isPermaLink="false">https://briannoyle.wordpress.com/2010/07/08/migrating-your-apps-to-the-cloud-at-arcgis-10/</guid>
		<description><![CDATA[Just in time for the 2010 ESRI User Conference, our team has been doing some investigation and testing of several apps running against ArcGIS Server 10 in the Amazon cloud.&#160; What follows is a summary of our experience building and deploying a couple of apps against ESRI’s cloud-based solution. Background and Business Case In several [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=briannoyle.wordpress.com&amp;blog=2469140&amp;post=272&amp;subd=briannoyle&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><b></b></p>
<p>Just in time for the 2010 ESRI User Conference, our team has been doing some investigation and testing of several apps running against ArcGIS Server 10 in the Amazon cloud.&#160; What follows is a summary of our experience building and deploying a couple of apps against ESRI’s cloud-based solution.</p>
<h3><b>Background and Business Case<a name="_GoBack"></a></b></h3>
<p>In several presentations, blog posts, and articles of the recent past, <a href="http://blog.davebouwman.net">Dave</a> and I have detailed some of the Flex API work we have been doing for the USDA Forest Service Forest Health Technology Enterprise Team (FHTET). Historically, the FHTET team has collected and analyzed data describing the effects of major forest pests on the landscape. To this point in time, information has been disseminated by means of an annual pest report in hard copy format. While GIS and hard copy maps play a role in the preparation of this report, as a static report it does not fully leverage the data exploration and analysis tools available within today’s geoweb applications. </p>
<p> <span id="more-272"></span>
<p>The current software development initiative is utilizing ArcGIS Server 10 and the Flex API to create a series of Rich Internet Applications (RIAs) facilitating the distribution of forest health related information to a variety of audiences. In addition, the FHTET team has elected to use this initiative as a test bed to determine the ease and speed with which custom applications can be deployed to the Amazon Web Services (AWS) cloud with ArcGIS 10 for greater scalability and convenience.</p>
<p>Given the richness of the FHTET data and the desire for novel UX elements in the applications, the FHTET organization has elected to pursue a fully custom web implementation based upon ESRI ArcGIS Server 10 and the Flex API with a considerable number of custom widgets and extensions of the DynamicMapServiceLayer. We have based our implementation on our considerable background and experience customizing the ESRI’s Flex Starter Kit to produce a template that now serves as the starting point for many Flex-based applications leveraging ArcGIS Server 10.</p>
<h3><b>The Forest Pest Conditions Viewer </b></h3>
<p>A FHTET Forest Pest Conditions Viewer public application (<a href="http://fhtet.dtsagile.com/fhtet/Flex/FPC">http://fhtet.dtsagile.com/fhtet/Flex/FPC#</a>)<b>, </b>shown below) was first developed to assist public users in exploring the impacts of a number of forest pests for different forest service regions. The number and identities of the pests to be displayed within the Flex application are configurable by each forest service region so that users can see the “top N” pests for a given region based on the decisions and experience of forest health professionals.</p>
<p><img style="display:block;float:none;margin-left:auto;margin-right:auto;" title="pest-viewer" alt="pest-viewer" src="http://briannoyle.files.wordpress.com/2010/07/pestviewer.png?w=450&#038;h=234" width="450" height="234" /> </p>
<p>Since the application is designed primarily as a data exploration tool, required interaction from the user is minimal. Once a region, state, or county is selected, the application makes a service call to get updated data as JSON and render the results for the user. Region and county selection can be done via the map or via pick lists in the search pane located at page left. In addition to the prominent bar charts rendered across the bottom of the map showing affected acreage and number of counties for each pest, data summaries and links to external information are also provided in the dockable left pane. Included in the tabular data summaries is a function to generate a chart showing pest damage trends for all years in the system and to view information on pests of interest. Functions to generate preformatted pest reports and to export raw data in CSV format are also provided.</p>
<p><img style="display:block;float:none;margin-left:auto;margin-right:auto;" title="data-windows" alt="data-windows" src="http://briannoyle.files.wordpress.com/2010/07/datawindows.png?w=450&#038;h=294" width="450" height="294" /> </p>
<p><b>The Disturbance Mapper</b></p>
<p>In addition to the public data explorer, FHTET has deployed a secured Disturbance Mapper Application (Figure 3) designed to use remotely sensed data to detect the presence of pests on the landscape. The application is targeted at individuals performing statewide and regional flight planning for aerial pest surveys. The goal of this application is to optimize flight planning and reduce total survey costs for aerial pest surveys by allowing planners to target areas of interest through map exploration in a web browser.</p>
<p><img style="display:block;float:none;margin-left:auto;margin-right:auto;" title="dist-mapper" alt="dist-mapper" src="http://briannoyle.files.wordpress.com/2010/07/distmapper.png?w=450&#038;h=234" width="450" height="234" /> </p>
<p>The basis for identifying areas of interest for pest surveys is based upon change detection data from Modis pre-processed imagery. An number of custom map layer extensions (extending the DynamicMapServiceLayer) have been implemented that allow flight planners to adjust thresholding settings on the change detection imagery to view differences in forest green-up and senescence that signal the presence of tree stressors.</p>
<p><b>Migrating to the Cloud: As Easy As…</b></p>
<p>For some time now, the proverbial cat has been out of the bag that at version 10 of the ArcGIS product stack, ESRI will be offering a cloud-based solution for ArcGIS Server. Based in the Amazon Web Services (AWS) cloud, this deployment option provides Amazon Machine Images (AMIs) preloaded with ArcGIS Server for ESRI customers desiring quick deployment, scalability, and flexibility in their GIS infrastructure. So what do we, as architects and developers, need to know to be ready to deploy our custom ArcGIS Server apps to the cloud?</p>
<p>The first thing readers to know is that the process is just plain easy and will simply require a few tweaks from your normal deployment patterns for custom apps built against ArcGIS Server. Figure 4 maps the major system components in a typical example ArcGIS Server solution to major system components used in an ArcGIS Server 10 AWS/cloud implementation.</p>
<p><img style="display:block;float:none;margin-left:auto;margin-right:auto;" title="amazon-migration" alt="amazon-migration" src="http://briannoyle.files.wordpress.com/2010/07/amazonmigration.png?w=300&#038;h=450" width="300" height="450" /> </p>
<p>Once an ArcGIS Server 10 AMI has been launched in the Amazon cloud and sufficient storage space has been purchased and configured, the deployment of an on premise application to the cloud is very straightforward.</p>
<p>· After RDP-ing to the running AMI, the developer simply pulls in (via FTP, copy/paste works for small items) the deployed application and updates any configuration settings</p>
<p>· The RDBMS instance supporting the application, SQL Server in our example, is detached from the on premise deployment database server, copied to the AMI and reattached as a SQL Express instance (we’re well under 4GB).</p>
<p>· In our deployment of this application, we split our geodatabase into operational and base layers. Base layers that do not get edited are stored in a File Geodatabase on the AMI guaranteeing acceptable performance, while operational layers that are editable are stored in an instance of ArcSDE Workgroup on SQL Server Express. </p>
<p>· Finally, any map documents required to support the ArcGIS Server map services are copied to the AMI and the data sources are reset to reflect the new data locations.</p>
<p>It really is just that easy and straightforward.</p>
<p><b>What about that data thing?</b></p>
<p>Some readers may be asking themselves why our migration story splits a perfectly good enterprise geodatabase running against SQL Server into a File Geodatabase and Workgroup instance of ArcSDE. The answer lies in that Enterprise Geodatabases are supported by another type of AMI in the cloud, and for our test bed project, another AMI means more money. In addition, the Enterprise Geodatabase AMI is PostgreSQL-based and while the migration process does not involve any magic, it would have required a little more time and effort to get our tabular data in there as well. So we elected to store static layers into a File Geodatabase to guarantee acceptable performance and store editable layers in ArcSDE Workgroup running against SQL Express on our existing AMI, safely under the 4GB file size limit. There are no tile caches used in this test bed deployment.</p>
<p><b>Conclusions</b></p>
<p>The cloud-based deployment option available under ArcGIS 10 is sure to present an excellent option to a variety of organizations who have wished for more scalability and flexibility in their existing ArcGIS Server infrastructure. Our experience to date has shown us that for organizations where rapid deployment is critical, ArcGIS Server AMIs can be deployed in approximately 20 minutes (exclusive of data and application loading and configuration times). The ability to create additional AMIs from an already configured instance when coupled with the Amazon Load Balancer means that gaining capacity rapidly when necessary is a real benefit of this new development in the ESRI product stack. This scalability on demand, when viewed against the backdrop of the typical software and hardware procurement process in many organizations is a very real benefit. Furthermore, the flexibility provided to the organization through the capability to deploy this additional capacity on demand, rather than having multiple ArcGIS Servers sit idle awaiting the next emergency response event or natural disaster reinforces this benefit.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/briannoyle.wordpress.com/272/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/briannoyle.wordpress.com/272/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/briannoyle.wordpress.com/272/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/briannoyle.wordpress.com/272/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/briannoyle.wordpress.com/272/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/briannoyle.wordpress.com/272/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/briannoyle.wordpress.com/272/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/briannoyle.wordpress.com/272/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/briannoyle.wordpress.com/272/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/briannoyle.wordpress.com/272/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/briannoyle.wordpress.com/272/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/briannoyle.wordpress.com/272/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/briannoyle.wordpress.com/272/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/briannoyle.wordpress.com/272/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=briannoyle.wordpress.com&amp;blog=2469140&amp;post=272&amp;subd=briannoyle&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://briannoyle.wordpress.com/2010/07/08/migrating-your-apps-to-the-cloud-at-arcgis-10/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/17c19e9c10d596422fcce4443f3a6a56?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">homebrutrout</media:title>
		</media:content>

		<media:content url="http://briannoyle.files.wordpress.com/2010/07/pestviewer.png" medium="image">
			<media:title type="html">pest-viewer</media:title>
		</media:content>

		<media:content url="http://briannoyle.files.wordpress.com/2010/07/datawindows.png" medium="image">
			<media:title type="html">data-windows</media:title>
		</media:content>

		<media:content url="http://briannoyle.files.wordpress.com/2010/07/distmapper.png" medium="image">
			<media:title type="html">dist-mapper</media:title>
		</media:content>

		<media:content url="http://briannoyle.files.wordpress.com/2010/07/amazonmigration.png" medium="image">
			<media:title type="html">amazon-migration</media:title>
		</media:content>
	</item>
		<item>
		<title>Calling all GeoGeeks: ESRI 2010 Dev Summit Party</title>
		<link>http://briannoyle.wordpress.com/2010/02/05/calling-all-geogeeks-esri-2010-dev-summit-party/</link>
		<comments>http://briannoyle.wordpress.com/2010/02/05/calling-all-geogeeks-esri-2010-dev-summit-party/#comments</comments>
		<pubDate>Fri, 05 Feb 2010 18:14:36 +0000</pubDate>
		<dc:creator>homebrutrout</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://briannoyle.wordpress.com/2010/02/05/calling-all-geogeeks-esri-2010-dev-summit-party/</guid>
		<description><![CDATA[Since we managed to stay out of trouble last year, and since two years in a row starts to make things look like a tradition, we&#8217;re throwing another &#8220;swa-ray&#8221; at our rental in Palm Springs to get the 2010 ESRI Developer Summit off on the right foot.&#160; We&#8217;ll combine ESRI staff, developers, and miscellaneous members [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=briannoyle.wordpress.com&amp;blog=2469140&amp;post=267&amp;subd=briannoyle&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Since we managed to stay out of trouble last year, and since two years in a row starts to make things look like a tradition, we&#8217;re throwing another &#8220;swa-ray&#8221; at our rental in Palm Springs to get the <a href="http://www.esri.com/events/devsummit/index.html" target="_blank">2010 ESRI Developer Summit</a> off on the right foot.&nbsp; We&#8217;ll combine ESRI staff, developers, and miscellaneous members of the GeoGeek community with food and Fat Tire from <a href="http://www.newbelgium.com/" target="_blank">New Belgium Brewing</a>.&nbsp; The result last year was a resounding success and we&#8217;re looking forward to seeing our old friends, making new ones, and enjoying an evening bbq around the pool. </p>
<p align="center"><img alt="iStock_000008052415Small" src="http://briannoyle.files.wordpress.com/2010/02/istock_000008052415small.jpg?w=320&#038;h=480" width="320" height="480"> </p>
<p>If you stumbled across this post and are planning on attending the 2010 Developer Summit in Palm Springs, please consider joining us for an evening of socializing, networking, and good company. You can view the details and <a href="http://www.dtsagile.com/events/devsummit" target="_blank">RSVP here</a>.&nbsp; Be sure to provide us a valid email address so we can send you directions as the date approaches.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/briannoyle.wordpress.com/267/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/briannoyle.wordpress.com/267/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/briannoyle.wordpress.com/267/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/briannoyle.wordpress.com/267/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/briannoyle.wordpress.com/267/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/briannoyle.wordpress.com/267/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/briannoyle.wordpress.com/267/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/briannoyle.wordpress.com/267/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/briannoyle.wordpress.com/267/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/briannoyle.wordpress.com/267/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/briannoyle.wordpress.com/267/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/briannoyle.wordpress.com/267/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/briannoyle.wordpress.com/267/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/briannoyle.wordpress.com/267/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=briannoyle.wordpress.com&amp;blog=2469140&amp;post=267&amp;subd=briannoyle&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://briannoyle.wordpress.com/2010/02/05/calling-all-geogeeks-esri-2010-dev-summit-party/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/17c19e9c10d596422fcce4443f3a6a56?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">homebrutrout</media:title>
		</media:content>

		<media:content url="http://briannoyle.files.wordpress.com/2010/02/istock_000008052415small.jpg" medium="image">
			<media:title type="html">iStock_000008052415Small</media:title>
		</media:content>
	</item>
		<item>
		<title>A Show of Hands Please! Vote Now for 2010 ESRI Dev Summit Talks</title>
		<link>http://briannoyle.wordpress.com/2010/01/21/a-show-of-hands-please-vote-now-for-2010-esri-dev-summit-talks/</link>
		<comments>http://briannoyle.wordpress.com/2010/01/21/a-show-of-hands-please-vote-now-for-2010-esri-dev-summit-talks/#comments</comments>
		<pubDate>Thu, 21 Jan 2010 15:49:19 +0000</pubDate>
		<dc:creator>homebrutrout</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://briannoyle.wordpress.com/2010/01/21/a-show-of-hands-please-vote-now-for-2010-esri-dev-summit-talks/</guid>
		<description><![CDATA[Well abstract submissions for the ESRI 2010 Developer Summit in Palm Springs, CA are now closed and community voting for what user presentations will appear on the program has begun.&#160; Dave has already thrown up a blog post here, discussing what we&#8217;re all planning on chatting about but I thought I&#8217;d reinforce that information with [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=briannoyle.wordpress.com&amp;blog=2469140&amp;post=265&amp;subd=briannoyle&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Well abstract submissions for the <a href="http://www.esri.com/events/devsummit/index.html" target="_blank">ESRI 2010 Developer Summit</a> in Palm Springs, CA are now closed and community voting for what user presentations will appear on the program has begun.&nbsp; Dave has already thrown up a <a href="http://blog.davebouwman.com/index.php/2010/01/dev-summit-talks-vote-now/" target="_blank">blog post here</a>, discussing what we&#8217;re all planning on chatting about but I thought I&#8217;d reinforce that information with a quick note here.</p>
<p><span id="more-265"></span>
<p>Dave has proposed talks on:</p>
<ul>
<li><strong>Using ArcGIS Server with Ruby on Rails</strong> &#8211; And why not?! All the kewl kids with their turtlenecks and soul patches are using Ruby and geo-geeks can to.&nbsp;&nbsp; Dave will give us the rundown on BDD within the Rails framework and cook up some ArcGIS Server SOAP API calls.</li>
<li><strong>Secure Applications with ArcGIS Server</strong> &#8211; The result of a project we did awhile back using the JavaScript API building an app to comply with the security requirements of DHS, this presentation will deal with requests over SSL as well as token-based access to ArcGIS Server through a proxy.&nbsp; Lots of technical goodness in this one&#8230;</li>
</ul>
<p>I have proposed to collaborate with Mike Juniper, another developer in our shop, to talk about building web applications that target mobile devices (specifically iPhone and Android).&nbsp; Our talk is titled <strong>&#8220;There&#8217;s an App for That: Building iPhone/Android Applcations iwth OpenLayers and ArcGIS Server&#8221;</strong> and should turn out to be pretty interesting.&nbsp; At present, very few websites (and even fewer mapping websites) pay attention to mobile device user agents when rendering pages for client consumption.&nbsp; Did you know there&#8217;s a gesture-enabled version of OpenLayers out there right now that can be used in building iPhone and Android specific web apps?&nbsp; We&#8217;ll leverage the OpenLayers client, mobile-specific CloudMade tiles, and ArcGIS Server to build a web app that targets your handset.&nbsp; Specifically we&#8217;ll build a location aware application that allows users to view and create feedback items pertaining to their current location.&nbsp; If there&#8217;s time we&#8217;ll try to work in some location based searches, etc.</p>
<p>Dave also eluded to some other nice shiny bits we&#8217;re going to try to work in to this presentation.&nbsp; We&#8217;re collaborating with another company and trying to develop a mapping app against their edge-cached, cloud front image service.&nbsp; The service is access controlled and enables private distributions of map data.&nbsp; How&#8217;s that for a whole list of buzz words for ya?&nbsp; Once we figure out what all that stuff means, we&#8217;re going to write an app against it!</p>
<p>Why vote for our presentation?&nbsp; Well you&#8217;ll be able to bang away at our app from your Android device or iPhone and do your best to embarrass us in front of a room full of people.&nbsp; As usual we&#8217;ll share the source and give you a place to start.&nbsp; Oh, and did I mention &#8220;edge-cached cloud front image service&#8221;&#8230;sweeeeeeet.</p>
<p><img alt="Hands" src="http://briannoyle.files.wordpress.com/2010/01/istock_000004515831small.jpg?w=500&#038;h=350" width="500" height="350"> </p>
<p>The community-submitted presentation abstracts for the Dev Summit are now <a href="http://esri.force.com/devcon2010/ideas/ideaList.apexp">posted on-line over here</a>. It&#8217;s your conference and ESRI is giving you the opportunity to choose the content.&nbsp; Since these presentations are all recorded, <strong>you don’t have to be attending the Dev Summit to vote</strong> – just setup an account (free) and vote for what you want to see – either live or recorded.&nbsp; Please note that unless you&#8217;ve visited the voting site previously, you&#8217;ll need to establish a new account and login.&nbsp; You <strong>don&#8217;t</strong> use your ESRI ID if you already have one of those&#8230;registration is quick, easy, and non-invasive.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/briannoyle.wordpress.com/265/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/briannoyle.wordpress.com/265/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/briannoyle.wordpress.com/265/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/briannoyle.wordpress.com/265/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/briannoyle.wordpress.com/265/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/briannoyle.wordpress.com/265/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/briannoyle.wordpress.com/265/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/briannoyle.wordpress.com/265/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/briannoyle.wordpress.com/265/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/briannoyle.wordpress.com/265/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/briannoyle.wordpress.com/265/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/briannoyle.wordpress.com/265/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/briannoyle.wordpress.com/265/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/briannoyle.wordpress.com/265/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=briannoyle.wordpress.com&amp;blog=2469140&amp;post=265&amp;subd=briannoyle&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://briannoyle.wordpress.com/2010/01/21/a-show-of-hands-please-vote-now-for-2010-esri-dev-summit-talks/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/17c19e9c10d596422fcce4443f3a6a56?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">homebrutrout</media:title>
		</media:content>

		<media:content url="http://briannoyle.files.wordpress.com/2010/01/istock_000004515831small.jpg" medium="image">
			<media:title type="html">Hands</media:title>
		</media:content>
	</item>
		<item>
		<title>Usability and the GeoWeb Part 4: Make it Fast</title>
		<link>http://briannoyle.wordpress.com/2009/10/07/usability-and-the-geoweb-part-4-make-it-fast/</link>
		<comments>http://briannoyle.wordpress.com/2009/10/07/usability-and-the-geoweb-part-4-make-it-fast/#comments</comments>
		<pubDate>Wed, 07 Oct 2009 20:50:49 +0000</pubDate>
		<dc:creator>homebrutrout</dc:creator>
				<category><![CDATA[General GIS]]></category>
		<category><![CDATA[GeoWeb]]></category>
		<category><![CDATA[Usability]]></category>
		<category><![CDATA[Caching]]></category>
		<category><![CDATA[GIS]]></category>
		<category><![CDATA[Performance]]></category>

		<guid isPermaLink="false">http://briannoyle.wordpress.com/2009/10/07/usability-and-the-geoweb-part-4-make-it-fast/</guid>
		<description><![CDATA[It&#8217;s taken me awhile to get to it due to a variety of work and family obligations but we&#8217;ve finally reached what will be my final post on usability and the geoweb&#8230;for now at least.  I haven&#8217;t covered all possible usability issues and scenarios, but have hit the high points and &#8220;big win&#8221; factors over [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=briannoyle.wordpress.com&amp;blog=2469140&amp;post=260&amp;subd=briannoyle&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s taken me awhile to get to it due to a variety of work and family obligations but we&#8217;ve finally reached what will be my final post on usability and the geoweb&#8230;for now at least.  I haven&#8217;t covered all possible usability issues and scenarios, but have hit the high points and &#8220;big win&#8221; factors over the course of this series of posts.  To this point we&#8217;ve dealt with<a href="http://briannoyle.wordpress.com/2009/07/03/useability-and-the-geoweb-part-1-of/" target="_blank"> hiding complexity from our users</a>, <a href="http://briannoyle.wordpress.com/2009/07/10/usability-and-the-geoweb-part-2-provide-feedback/" target="_blank">providing users with consistent, meaningful feedback</a> within an application, and <a href="http://briannoyle.wordpress.com/2009/07/29/usability-and-the-geoweb-part-3-protect-your-users-from-themselves/" target="_blank">protecting users from themselves</a>.  The lesson plan for this last installment will focus on application performance and its criticality in the overall user experience.</p>
<p><img src="http://briannoyle.files.wordpress.com/2009/10/istock_000001885215small.jpg?w=500&#038;h=333" alt="iStock_000001885215Small" width="500" height="333" /></p>
<p>Fact: One of the most critical components of a highly usable software system is that it be highly performant&#8230;in other words, fast.  In the realm of the GeoWeb, this means that applications should load fast initially, and that responses to user activity within the application should be as quick as possible.  We now live in a world of instant gratification when it comes to our news, our hobbies, our finances, and above all our interactions with computers. Users don&#8217;t like to be kept waiting for 5 seconds every time they use your app to request information, input data, or perform other common processing tasks.  Gone are the days when watching the blue bar move in a web app, or watching the cursor spin on a wireless app were the status quo.  And frankly with the amount that we, as consultants, get paid to build custom software, the user shouldn&#8217;t have to wait.</p>
<p>Headlong into the breach then for our fourth and final lesson&#8230;</p>
<p><span id="more-260"></span></p>
<h2>Lesson 4: Maximize Real and Perceived Performance</h2>
<p>In all my years of software development, I&#8217;ve never had a user or a client come to me and say,</p>
<blockquote><p>&#8220;Ya&#8217; know Brian, this app is just too fast&#8230;please slow it down.&#8221;</p></blockquote>
<p>No matter how much time architects, developers, and UX folks spend designing and building the sexiest GeoWeb app you&#8217;ve ever seen, all that work is wasted if the user base is frustrated by long wait times to execute functions within the application.  It doesn&#8217;t matter how well you automate a customer&#8217;s workflow if they&#8217;re left sitting and twiddling their thumbs for 5-10 seconds every time they push a button.</p>
<h3>Real Performance</h3>
<p>There are a whole host of tools in the IT and software professional&#8217;s toolbox that help us maximize application and database performance.  Processing power and RAM, faster network, server farm configurations, database indexing and denormalization, etc., etc.  Those standard tools are beyond the scope of this article as they are relatively well understood.  What I&#8217;m most interested in covering is how to squeeze more performance out of our maps given a fixed IT configuration.  Real performance in our mapping realm means configuring map services to be fast from the start, caching whenever possible, and applying novel techniques to handle large datasets.</p>
<h5>Fewer Layers, Appropriate Symbology and Annotation</h5>
<p>I covered this point in the<a href="http://briannoyle.wordpress.com/2009/07/03/useability-and-the-geoweb-part-1-of/" target="_blank"> first post in the usability series back in July</a>.  The idea that users need to see all of the layers in your geodatabase to accomplish a task is ridiculous.  No matter how big your server farm is, no matter how fast your processors are or how much RAM you have, large numbers of map layers are going to slow the system down.  Focus applications on 3-5 operational layers over a base tile cache to reap significance performance gains over the kitchen sink style application paradigm.</p>
<p><img src="http://briannoyle.files.wordpress.com/2009/10/fixmapclick.png?w=500&#038;h=417" alt="FixMapClick" width="500" height="417" /></p>
<p>Another trend that we frequently see in diagnosing map-related performance issues is a map that contains complex symbology and excessive annotation in the absence of a defined business need.  A dynamic map service showing highway signs over the highways is neat but these symbols need to be rendered in four parts on the server (red, white, blue, and text) and take much longer than standard line types.  In most cases, variance in line weight and color, coupled with scale dependent rendering by road type would convey the same information to the user without the performance hit.  Save the complexity for cached services and be as simple as possible in dynamic map services.</p>
<p>Annotation is a valuable tool for adding information to maps beyond the spatial relationships conveyed by the feature geometries.  It is also frequently misused.  Applications that annotate large numbers of layers with all manner of non-critical information rapidly become cluttered and unusable, in addition to incurring the performance hit associated with rendering all that annotation in the map.  Do parcels really need: PIN, dimensions, area, address, owner name, the names of the owner&#8217;s seven children and summaries of the last 5 years tax returns?  Probably not.  Keep the annotation appropriate for the map scale and germane to the information you are trying to convey.  If it isn&#8217;t relevant to the business problem at hand&#8230;leave it out.</p>
<h5>Caching</h5>
<p>One of the primary tools in our toolbox for maximizing the performance of GeoWeb style applications is the map tile cache.  Think back to just a few years ago (pre-February 2005) and the thought of using a system of cached tiles in the era of &#8220;Web GIS&#8221; was unthinkable.  As geo-technologists we were &#8220;special&#8221; and our data was simply too critical to have any latency.  Our apps had to show that parcel split or that new forest boundary seconds after it came into existence.  I think we can all agree that in February 2005, Google Maps showed us all that this line of thinking was just a bunch of hooey.</p>
<p><img src="http://briannoyle.files.wordpress.com/2009/10/caching.png?w=500&#038;h=400" alt="Caching" width="500" height="400" /></p>
<p>Nearly all emerging applications in the GeoWeb realm wind up leveraging a tile cache for base maps within the application.  However in many of the more recent systems we have worked on, we have arrived at the assertion that you should cache as much as possible. With the exception of real time battlefield applications for the military, emergency response applications, and a very few other notable exceptions, we hold that you should cache everything.  It is a relatively simple thing to set up an automated process the update a map cache of dynamic data at a time when everyone has gone home from the office and system utilization is typically low or nonexistent.  Trust us, your users will wait 24 hrs to see that parcel update&#8230;really.</p>
<p>So, select a server side technology that supports caching map tiles for representation in the client, use a client side map viewer that will efficiently render cached map tiles, and automate cache creation/refresh if necessary to maximize map performance out of the gate.</p>
<h5>Cluster Large Datasets</h5>
<p>One of the challenges that we routinely face as developers in the age of the GeoWeb is how to deal with the representation of large numbers of geometries in the client.  Direct rendering of geometries in the client becomes the preferred method of visual representation when we need those geometries and their attributes in the client for speedy response to user action: mouse over balloons, etc.  While Flex and Silverlight offer opportunities to render larger numbers of geometries in the client efficiently, JavaScript based applications begin to experience performance degradation in the client after a couple hundred features or so.   Start dealing with complex polygon geometries and the number is less than that.  And even Silverlight and Flex aren&#8217;t going to get you speedy rendering of thousands of geometries.</p>
<p><img src="http://briannoyle.files.wordpress.com/2009/10/gains.png?w=500&#038;h=381" alt="GAINS" width="500" height="381" /></p>
<p>Consider the application shown above.  This application supports a global surveillance network monitoring avian flu (H5N1) and is built using Microsoft Bing Maps(TM) and copious amounts of JavaScript.  If we attempted to actually render global sample locations on the map, we&#8217;d likely crash the client as we&#8217;re dealing with approximately 50,000 sample locations.  Instead, we elected to cluster sampling points, aggregating data at small map scales and gradually showing additional sample locations as the user zooms in to larger map scales.  The process looks something like that shown below:</p>
<p><img src="http://briannoyle.files.wordpress.com/2009/10/clustering.png?w=500&#038;h=354" alt="Clustering" width="500" height="354" /></p>
<p>This approach allows us to determine the map extent, select the points that fall within the current map extent, and then apply a clustering algorithm to aggregate points near one another before sending the details back to the browser.  Another key point that we discovered is that spatial isn&#8217;t always better.  To perform the above tasks with data stored in ArcSDE, the average compute time was ~5 seconds.  Using SQL Server 2008 Spatial data types natively got us down to about 2 seconds, while simply maintaining sample points as X and Y columns with the rest of the non-spatial data got us to less than 1/3 of a second response time.  Don&#8217;t be afraid to leave traditional spatial technologies behind when you can improve performance without sacrificing data integrity!</p>
<p>Using the approach described above, we were able to render points on the map AS FAST as the Bing(TM) tiles come into the browser.</p>
<h3>Perceived Performance</h3>
<p>Another powerful and underutilized means of improving the user experience within an application is to leverage implementation methods that provide perceived performance gains from the user&#8217;s perspective.  Because users seldom, if ever, care about the implementation details that solve their problem, we are able to use a bit of slight-of-hand to make a data intensive application very responsive.</p>
<p>The basic message for tweaking perceived performance is actually very simple: be lean on the wire.  If you are building a data heavy app, and most of the line of business apps we build are, then take small bites rather than trying to ship down everything the user &#8220;might&#8221; ask for at once.</p>
<p>JSON and GeoJSON have become two popular and related formats for shipping data to the client for further processing and rendering, but if performance is the name of the game, don&#8217;t be afraid to depart from standards and use a custom JSON formatter to send only the necessary data down to the client.  In this case custom == fast==good!</p>
<p><img src="http://briannoyle.files.wordpress.com/2009/10/gainsjson.png?w=500&#038;h=373" alt="GAINSJson" width="500" height="373" /></p>
<p>Let&#8217;s return to our H5N1 application for just a moment and consider what happens when we return all those points to the browser.  Our custom JSON formatter returns only the information necessary to properly render points over the map.  But at the same time, a user expects to see additional detail on sample sites when they mouse over a point so what&#8217;s a developer to do?  Sending all information for all points down and storing it in the client is certainly one option, however the odds that a user is going to mouse over all of the hundreds of points typically in any given map extent is miniscule so why send all that data over the wire? As shown in the example immediately above, when the user hovers their mouse over a sample point, we quickly shoot off a tiny XHR call to get a subset of the details.  If they want more, they can click the View Details link in the mouse over window to get more information.</p>
<p>As another example, let&#8217;s consider what happens when a user requests all the details for a site.  The site flow dictates that we render the full sampling details in a tree view to the right of the map.  For our purposes we selected the Yahoo! YUI tree view for reasons that will become apparent in just a moment.</p>
<p><img src="http://briannoyle.files.wordpress.com/2009/10/gainstreeview.png?w=500&#038;h=373" alt="GAINSTreeView" width="500" height="373" /></p>
<p>When the user requests detailed information on an H5N1 sample site, we go to the server again via XHR call and get only the top level information that you see rendered above.  This is why we selected the YUI tree view over other JS-based tree views.  Dojo, JQuery, etc. either work on a full data store to render information or want to bind to a JSON object that has been fully filled.  YUI lets us load information on a node by node basis and this is critical to maximizing perceived performance in this case because, again, the likelihood of a user clicking on every single bird species in small.  If the user clicks on a species in the tree view, we go fetch only the next node of information, and so on, and so on.  Be lean on the wire.</p>
<h3>Parting Shots</h3>
<p>So here endeth the homily, go forth and develop some more.  Have I hit all the critical points? Probably not.  The field of usability and UX carries with it a substantial set of principles for buidling killer apps with great interfaces and my periodic usability rants are less a codex and more an appeal to the wider development community to continue to hold web GIS at arms length and continue to the march toward more highly performant, usable, focused applications.  The take away from all this should be that we, as a community, need to focus more effort on providing our user base with relevant information right now, and less effort on flexing our GIS muscles by seeing how much crap we can cram into a browser.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/briannoyle.wordpress.com/260/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/briannoyle.wordpress.com/260/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/briannoyle.wordpress.com/260/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/briannoyle.wordpress.com/260/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/briannoyle.wordpress.com/260/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/briannoyle.wordpress.com/260/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/briannoyle.wordpress.com/260/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/briannoyle.wordpress.com/260/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/briannoyle.wordpress.com/260/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/briannoyle.wordpress.com/260/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/briannoyle.wordpress.com/260/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/briannoyle.wordpress.com/260/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/briannoyle.wordpress.com/260/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/briannoyle.wordpress.com/260/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=briannoyle.wordpress.com&amp;blog=2469140&amp;post=260&amp;subd=briannoyle&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://briannoyle.wordpress.com/2009/10/07/usability-and-the-geoweb-part-4-make-it-fast/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/17c19e9c10d596422fcce4443f3a6a56?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">homebrutrout</media:title>
		</media:content>

		<media:content url="http://briannoyle.files.wordpress.com/2009/10/istock_000001885215small.jpg" medium="image">
			<media:title type="html">iStock_000001885215Small</media:title>
		</media:content>

		<media:content url="http://briannoyle.files.wordpress.com/2009/10/fixmapclick.png" medium="image">
			<media:title type="html">FixMapClick</media:title>
		</media:content>

		<media:content url="http://briannoyle.files.wordpress.com/2009/10/caching.png" medium="image">
			<media:title type="html">Caching</media:title>
		</media:content>

		<media:content url="http://briannoyle.files.wordpress.com/2009/10/gains.png" medium="image">
			<media:title type="html">GAINS</media:title>
		</media:content>

		<media:content url="http://briannoyle.files.wordpress.com/2009/10/clustering.png" medium="image">
			<media:title type="html">Clustering</media:title>
		</media:content>

		<media:content url="http://briannoyle.files.wordpress.com/2009/10/gainsjson.png" medium="image">
			<media:title type="html">GAINSJson</media:title>
		</media:content>

		<media:content url="http://briannoyle.files.wordpress.com/2009/10/gainstreeview.png" medium="image">
			<media:title type="html">GAINSTreeView</media:title>
		</media:content>
	</item>
		<item>
		<title>Usability and the GeoWeb Part 3: Protect Your Users From Themselves</title>
		<link>http://briannoyle.wordpress.com/2009/07/29/usability-and-the-geoweb-part-3-protect-your-users-from-themselves/</link>
		<comments>http://briannoyle.wordpress.com/2009/07/29/usability-and-the-geoweb-part-3-protect-your-users-from-themselves/#comments</comments>
		<pubDate>Wed, 29 Jul 2009 21:23:50 +0000</pubDate>
		<dc:creator>homebrutrout</dc:creator>
				<category><![CDATA[General GIS]]></category>
		<category><![CDATA[GeoWeb]]></category>
		<category><![CDATA[Usability]]></category>
		<category><![CDATA[user]]></category>
		<category><![CDATA[validation]]></category>

		<guid isPermaLink="false">http://briannoyle.wordpress.com/2009/07/29/usability-and-the-geoweb-part-3-protect-your-users-from-themselves/</guid>
		<description><![CDATA[As I write this post, I&#8217;m attending the GeoWeb 2009 Conference in Vancouver, BC.  This is then a pretty appropriate time to drop part 3 in the Usability and the GeoWeb series.  Part 1 in the series discussed the importance of hiding unnecessary complexity from the user, while Part 2 focused on the importance of [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=briannoyle.wordpress.com&amp;blog=2469140&amp;post=248&amp;subd=briannoyle&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>As I write this post, I&#8217;m attending the GeoWeb 2009 Conference in Vancouver, BC.  This is then a pretty appropriate time to drop part 3 in the Usability and the GeoWeb series.  <a href="http://briannoyle.wordpress.com/2009/07/03/useability-and-the-geoweb-part-1-of/">Part 1</a> in the series discussed the importance of hiding unnecessary complexity from the user, while <a href="http://briannoyle.wordpress.com/2009/07/10/usability-and-the-geoweb-part-2-provide-feedback/">Part 2</a> focused on the importance of never leaving your users guessing and providing them with consistent, meaningful feedback.  In an effort to encourage the incorporation of key usability features into emerging web mapping applications, the lesson plan this time focuses on key application elements designed to protect the users from themselves.</p>
<p><a href="http://briannoyle.files.wordpress.com/2009/07/istock_000002826586small.jpg"><img src="http://briannoyle.files.wordpress.com/2009/07/istock_000002826586small_thumb.jpg?w=450&#038;h=251" alt="bottleneck" width="450" height="251" /></a></p>
<p>While that statement may sound a little rough (nobody should be out insulting their customers and clients after all) it is not meant as such.  <strong>I most certainly am not</strong> saying your users are foolish, stupid, or otherwise deficient in any way.  Recall Scott Karp&#8217;s assertion that in the age of Google,</p>
<blockquote><p>&#8220;&#8230;there are no stupid users, only inadequate designs&#8221;</p></blockquote>
<p>On the contrary, I simply mean that otherwise well-meaning users frequently do things within an application that the application does not expect or that create coding/logic challenges for the developer.  Our task then in building next generation systems to support/integrate with the GeoWeb requires that we anticipate as many corner cases or unexpected results as possible, and architect and code solutions to prevent the user from becoming frustrated at best, and destroying critical information at worst.  Keep the user focused on the application, and put out fires before they arise</p>
<p>With that intro, here&#8217;s lesson 3&#8230;</p>
<p><span id="more-248"></span></p>
<h2>Lesson 3: Protect Users from Themselves</h2>
<p>So you&#8217;ve built your shiny new GeoWeb application, and you&#8217;ve done everything right&#8230;required field validators, dynamically enabling/disabling input fields to prevent spurious results, targeting distinct workflows to reduce errors introduced by open and undefined function execution, enabling/disabling map tools appropriately.  Your turn the users loose on your application and what happens?  Defects start to roll in.  Well, not really defects so much as comments of frustration and questions on &#8220;How do I make this work?&#8221;.  Turns out, the application needs more work: user&#8217;s have been entering incorrectly formatted dates, and your click function to select a point on a route is nearly unusable.  Explaining to a run-of-the-mill user that a point has no size and a line has no width so selecting a line feature exactly by point is difficult is a fool&#8217;s errand.  Prevalidation of inputs, and novel approaches to handling open-ended map interactions (like clicking a point to select a road) are required to prevent users from creating invalid data, removing critical data accidentally, or entering an endless loop of retries when interacting with spatial data.</p>
<h3>Validate as Soon as Possible</h3>
<p>Ever bought plane tickets from a certain large travel site? The basic workflow is that after the user has gone through the multiple screens to purchase tix, just as the purchase is about to go through, they get a validation message telling them they need to go back to page 2 because the middle initial field is required&#8230;or some other ridiculous message that should never occur.  Even better, when the user returns to said page, the offending field may be highlighted, but data in the other 20 required fields was never cached and is now gone.  How fun is that?</p>
<p>Our roadway manager from Lessons 1 and 2 has been such a good an enlightening sport on the subject of usability that we&#8217;re going to leverage her experience again here.  Consider the figure below.</p>
<p><a href="http://briannoyle.files.wordpress.com/2009/07/beginrefentry.png"><img style="border-width:0;" src="http://briannoyle.files.wordpress.com/2009/07/beginrefentry_thumb.png?w=454&#038;h=343" border="0" alt="BeginRefEntry" width="454" height="343" /></a></p>
<p>Our roadway project manager is updating a road segment to reflect the correct extent of her paving project.  In this case, she&#8217;s going to manually enter the beginning point (mile number) of her project on the highlighted segment.  In this case, she indicates that her project starts at mile 90 on Route 40.  Focus on the data entry text box is lost as she goes on to do other work and what happens next is shown below.</p>
<p><a href="http://briannoyle.files.wordpress.com/2009/07/invalidentryaction.png"><img style="border-width:0;" src="http://briannoyle.files.wordpress.com/2009/07/invalidentryaction_thumb.png?w=454&#038;h=343" border="0" alt="InvalidEntryAction" width="454" height="343" /></a></p>
<p>Uh-oh!  Let&#8217;s look at what happened here.  We have, in the browser, knowledge of the start and end mile markers for our PM&#8217;s road segment so we can help her out a little.  The system has done some quick validation and noted that 90 is less than the allowed minimum mile number for this road segment, shown a red &#8216;X&#8217; which is almost universally understood to mean something has gone awry, and has displayed a message telling her what&#8217;s wrong with the data.  In addition, another important thing has taken place.  We have reset the value in the input box to the <strong>original</strong> value.  We have not destroyed or altered any data, nor have we asked out user to remember what the original value was.  Much like the medical profession, we as developers must &#8220;first do no harm&#8221; to our client&#8217;s data.</p>
<p>And when did all this good validation happen?  Right now!  We didn&#8217;t let the user play with the structures grid at the bottom of the page, we didn&#8217;t let her make any other changes only to warn her five minutes from now.  We caught the issue early, provided her with a visual cue, preserved the data, and gave her a potential solution to her problem&#8230;all with a little JavaScript.</p>
<p>Validate as soon as you possibly can to maintain data integrity and reduce/eliminate user frustration with your app.</p>
<h3>Prevalidate Whenever Possible</h3>
<p>If validating early is good, prevalidating to avoid problems entirely is even better.  So I know it&#8217;s painful but we&#8217;re going to leave the realm of the roadway project manager for a second in favor of world health issues.  We&#8217;ve built, and continue to enhance, a system for a prominent world wide NPO to track H5N1 (bird flu) incidence around the world.  The system is used by personnel in multiple countries around the world which presents some special issues surrounding data entry&#8230;for this specific example let&#8217;s consider the entry of dates.</p>
<p><a href="http://briannoyle.files.wordpress.com/2009/07/datepicker.png"><img style="border-width:0;" src="http://briannoyle.files.wordpress.com/2009/07/datepicker_thumb.png?w=454&#038;h=470" border="0" alt="DatePicker" width="454" height="470" /></a></p>
<p>While folks in the US are used to entering date information as MM/DD/YYYY or some variant thereof, other countries like DD/MM/YYYY or YYYY/MM/DD.  Heck some countries (Nepal comes to mind) have entirely different calendars that map by mathematical formula to the Gregorian calendar we&#8217;re all familiar with.  While we could simply format date entries to UTC, etc. on the server side, this requires logic at the server to accept information on where in the world the user is entering their data, and complex client logic to turn that UTC into a date that is meaningful to the local user on the other end.  No so fun to deal with.  Why not just use an internationalized date picker?  This is prevalidation at it&#8217;s best, the date picker shows a calendar to the user, and when the user picks a date, it is formatted and transmitted in the appropriate format for the local users.  The use of a simple JS widget completely eliminates any chance of an invalid date, or a correct date incorrectly formatted, from squeaking into the system and frustrating or confusing users.  At the same time, the picker knows that a date entered in Europe needs to be formatted differently for a user in the US.</p>
<h3>Short Circuit Open or Vague Inputs</h3>
<p>So we&#8217;re going to jump back to check in on our friendly roadway project manager for our last point in the lesson.  She&#8217;s back in our system setting the segments up for a roadway project and telling the system where her paving project is at.  This time, she will be setting up her project road segments by clicking on the map.  This is where things can get interesting because the user can click anywhere she wants.</p>
<p><a href="http://briannoyle.files.wordpress.com/2009/07/errantmapclick.png"><img style="border-width:0;" src="http://briannoyle.files.wordpress.com/2009/07/errantmapclick_thumb.png?w=454&#038;h=379" border="0" alt="ErrantMapClick" width="454" height="379" /></a></p>
<p>In the figure immediately above, the user has clicked, whether accidentally or intentionally, a point that is nowhere near the roadway she is working on.  Now, we could try to write code to maximize the efficacy of buffering the point to intersect with the line based on map scale but things can get pretty complex when scale dependent buffers etc. are involved.  A run of the mill user is going to get red faced quickly if we keep telling them to &#8220;try again you&#8217;re not close enough&#8221;.  So why not do something like the result shown in the figure below?</p>
<p><a href="http://briannoyle.files.wordpress.com/2009/07/fixmapclick.png"><img style="border-width:0;" src="http://briannoyle.files.wordpress.com/2009/07/fixmapclick_thumb.png?w=454&#038;h=379" border="0" alt="FixMapClick" width="454" height="379" /></a></p>
<p>In response to a less than optimal map click for setting the end reference of a roadway project, we simply snap to the closest point on the selected segment.  We&#8217;ve avoided coding complex scale dependent buffer/intersect logic that the user will never understand anyway, we&#8217;ve avoided the potential for an infinite click-retry loop for the user, and we still get a value that, while it may be incorrect from the user&#8217;s perspective, is still a valid point on the segment.  If she doesn&#8217;t like it she can enter the mile marker by hand or simply click again.  Low friction protection for the user and it short circuits a whole series of potential outcomes, all of which are bad.</p>
<h3>Up Next&#8230;</h3>
<p>Since I&#8217;ve yet to meet a client or user that says their system is too fast, our next usability topic(s) will deal with both real and perceived performance in your GeoWeb application and how to maximize each of these critical performance factors. Stay tuned&#8230;</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/briannoyle.wordpress.com/248/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/briannoyle.wordpress.com/248/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/briannoyle.wordpress.com/248/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/briannoyle.wordpress.com/248/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/briannoyle.wordpress.com/248/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/briannoyle.wordpress.com/248/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/briannoyle.wordpress.com/248/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/briannoyle.wordpress.com/248/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/briannoyle.wordpress.com/248/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/briannoyle.wordpress.com/248/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/briannoyle.wordpress.com/248/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/briannoyle.wordpress.com/248/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/briannoyle.wordpress.com/248/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/briannoyle.wordpress.com/248/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=briannoyle.wordpress.com&amp;blog=2469140&amp;post=248&amp;subd=briannoyle&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://briannoyle.wordpress.com/2009/07/29/usability-and-the-geoweb-part-3-protect-your-users-from-themselves/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/17c19e9c10d596422fcce4443f3a6a56?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">homebrutrout</media:title>
		</media:content>

		<media:content url="http://briannoyle.files.wordpress.com/2009/07/istock_000002826586small_thumb.jpg" medium="image">
			<media:title type="html">bottleneck</media:title>
		</media:content>

		<media:content url="http://briannoyle.files.wordpress.com/2009/07/beginrefentry_thumb.png" medium="image">
			<media:title type="html">BeginRefEntry</media:title>
		</media:content>

		<media:content url="http://briannoyle.files.wordpress.com/2009/07/invalidentryaction_thumb.png" medium="image">
			<media:title type="html">InvalidEntryAction</media:title>
		</media:content>

		<media:content url="http://briannoyle.files.wordpress.com/2009/07/datepicker_thumb.png" medium="image">
			<media:title type="html">DatePicker</media:title>
		</media:content>

		<media:content url="http://briannoyle.files.wordpress.com/2009/07/errantmapclick_thumb.png" medium="image">
			<media:title type="html">ErrantMapClick</media:title>
		</media:content>

		<media:content url="http://briannoyle.files.wordpress.com/2009/07/fixmapclick_thumb.png" medium="image">
			<media:title type="html">FixMapClick</media:title>
		</media:content>
	</item>
		<item>
		<title>Usability and the GeoWeb Part 2: Provide Feedback</title>
		<link>http://briannoyle.wordpress.com/2009/07/10/usability-and-the-geoweb-part-2-provide-feedback/</link>
		<comments>http://briannoyle.wordpress.com/2009/07/10/usability-and-the-geoweb-part-2-provide-feedback/#comments</comments>
		<pubDate>Fri, 10 Jul 2009 20:32:17 +0000</pubDate>
		<dc:creator>homebrutrout</dc:creator>
				<category><![CDATA[General GIS]]></category>
		<category><![CDATA[GeoWeb]]></category>
		<category><![CDATA[Usability]]></category>
		<category><![CDATA[feedback]]></category>
		<category><![CDATA[Web 2.0]]></category>

		<guid isPermaLink="false">http://briannoyle.wordpress.com/2009/07/10/usability-and-the-geoweb-part-2-provide-feedback/</guid>
		<description><![CDATA[This post is the second in a multi-part series on usability in web-mapping applications.  Dave has spoken extensively on this topic of late&#8230;and much of this is just putting fingers to keyboard on the issues we&#8217;ve been harping on for some months now.  The first post in the series asserted that we, as developers and [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=briannoyle.wordpress.com&amp;blog=2469140&amp;post=231&amp;subd=briannoyle&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>This post is the second in a multi-part series on usability in web-mapping applications.  <a href="http://www.dtsagile.com/media/presentations" target="_blank">Dave has spoken extensively on this topic of late</a>&#8230;and much of this is just putting fingers to keyboard on the issues we&#8217;ve been harping on for some months now.  <a href="http://briannoyle.wordpress.com/2009/07/03/useability-and-the-geoweb-part-1-of/" target="_blank">The first post in the series</a> asserted that we, as developers and architects of these systems have a tendency to make things too complex and flood the user with all manner of features, functions, and data layers they don&#8217;t need.  In essence, the age of GIS in a browser is ending (I sincerely hope) and we&#8217;re moving toward highly performant, intuitive, and focused applications in a browser that serve a particular purpose, and do it very well.  Why? Because someone else is bound to be offering the same stuff you are, and if they can provide the information faster, they win&#8230;bye, bye users and bye, bye clients.</p>
<p>Part 1 discussed hiding unnecessary complexity from the user, while our lesson plan this time around uses extensive feedback mechanisms within a site to keep the user on our side and make them feel comfortable when visiting our site.  A confident user is a comfortable user. A comfortable user gets what they need and gets back out fishing, golfing, spending time with their kids, or otherwise doing something else besides staring blankly at your interface.<span id="more-231"></span></p>
<p><a href="http://briannoyle.files.wordpress.com/2009/07/hendrix.png"><img style="border-bottom:0;border-left:0;border-top:0;border-right:0;" src="http://briannoyle.files.wordpress.com/2009/07/hendrix_thumb.png?w=454&#038;h=342" border="0" alt="Hendrix" width="454" height="342" /></a></p>
<p>With that, here&#8217;s lesson 2&#8230;</p>
<h2>Lesson 2: Provide Feedback to the User</h2>
<p>Nothing presents a bigger usability hurdle than a mapping application that leaves the user wondering, “Well this looks cool, but what do I do?” This is the principal downfall of applications that try to shove GIS into a browser.</p>
<p><a href="http://briannoyle.files.wordpress.com/2009/07/browsergis.png"><img style="border-bottom:0;border-left:0;border-top:0;border-right:0;" src="http://briannoyle.files.wordpress.com/2009/07/browsergis_thumb.png?w=454&#038;h=293" border="0" alt="BrowserGIS" width="454" height="293" /></a></p>
<p>Geodevelopers know exactly what to do with three different toolbars and four menus containing all manner of map navigation, query, buffer, and analysis tools but open workflow applications with no guidance are intimidating to line of business users and the public. The web mapping industry at large must learn to develop applications that satisfy specific workflows and to lead users through those workflows within the application with visual cues and feedback in the UI.</p>
<p><a href="http://briannoyle.files.wordpress.com/2009/07/figure2.png"><img style="border-bottom:0;border-left:0;border-top:0;border-right:0;" src="http://briannoyle.files.wordpress.com/2009/07/figure2_thumb.png?w=454&#038;h=418" border="0" alt="Figure2" width="454" height="418" /></a></p>
<p>The roadway manager introduced in Lesson 1, uses the interface shown above to specify the begin and end points of a roadway project. First, note the simple informational panels that appear in the right hand column of the site to explain how to use the features on this page. Second, accept that a GIS professional knows that when they click a pencil icon, they expect to draw something on a map, but a roadway manager does not necessarily connect these two actions. Thus when the user clicks the pencil icon to set the begin or end point, information appears below the map telling our roadway manager what to do next. “Click the map to set the begin point.” It’s as simple as showing or hiding a &lt;div /&gt; element in the page, and it is a critical usability feature that is often overlooked.</p>
<h3>Hold the User&#8217;s Hand</h3>
<p>I&#8217;ve recently read a couple of typical user workflows for web mapping applications that read something like this:</p>
<table border="0" cellspacing="0" cellpadding="2" width="400">
<tbody>
<tr>
<td width="69" valign="top"><strong>Step</strong></td>
<td width="329" valign="top"><strong>User Action</strong></td>
</tr>
<tr>
<td width="69" valign="top">1</td>
<td width="329" valign="top">Draw a polygon on the screen</td>
</tr>
<tr>
<td width="69" valign="top">2</td>
<td width="329" valign="top">Intersect polygon with parcels</td>
</tr>
<tr>
<td width="69" valign="top">3</td>
<td width="329" valign="top">Create report on parcels within polygon</td>
</tr>
<tr>
<td width="69" valign="top">4</td>
<td width="329" valign="top">Find a facility by name</td>
</tr>
<tr>
<td width="69" valign="top">5</td>
<td width="329" valign="top">Turn on critical infrastructure layer(s)</td>
</tr>
<tr>
<td width="69" valign="top">6</td>
<td width="329" valign="top">Find electrical infrastructure by id and zoom to it</td>
</tr>
<tr>
<td width="69" valign="top">7</td>
<td width="329" valign="top">Close application</td>
</tr>
</tbody>
</table>
<p>First of all, in my book this is actually two workflows but that&#8217;s beside the point.  What really grinds my gears is that when you look at the application built to satisfy this workflow, the architect/developer elected to provide a separate tool to do each of these actions so that the user is free to wander around the site and do things in any order they please.  Not only does the user need to know which tools to pick from, they need to know the correct order.  While eventually the user will figure out the &#8220;happy path&#8221;, that&#8217;s a lot of moving around the app and a big learning curve that is just going to frustrate and turn the user off.  If we know the user is going to perform these actions to get information each time they visit, why don&#8217;t we just write a widget that does exactly that???</p>
<p><a href="http://briannoyle.files.wordpress.com/2009/07/holdusershand.png"><img style="border-bottom:0;border-left:0;border-top:0;border-right:0;" src="http://briannoyle.files.wordpress.com/2009/07/holdusershand_thumb.png?w=454&#038;h=360" border="0" alt="HoldUsersHand" width="454" height="360" /></a></p>
<p>Now have a gander at the app shown above.  The workflow that this particular application functionality supports is as follows:</p>
<table border="0" cellspacing="0" cellpadding="2" width="400">
<tbody>
<tr>
<td width="69" valign="top"><strong>Step</strong></td>
<td width="329" valign="top"><strong>User Action</strong></td>
</tr>
<tr>
<td width="69" valign="top">1</td>
<td width="329" valign="top">Draw a polygon on the screen</td>
</tr>
<tr>
<td width="69" valign="top">2</td>
<td width="329" valign="top">Intersect polygon with parcels</td>
</tr>
<tr>
<td width="69" valign="top">3</td>
<td width="329" valign="top">Enter attributes for polygon</td>
</tr>
<tr>
<td width="69" valign="top">4</td>
<td width="329" valign="top">Intersect polygon with parcels/infrastructure</td>
</tr>
<tr>
<td width="69" valign="top">5</td>
<td width="329" valign="top">Turn on critical infrastructure layer(s)</td>
</tr>
<tr>
<td width="69" valign="top">6</td>
<td width="329" valign="top">Generate report of affected facilities</td>
</tr>
<tr>
<td width="69" valign="top">7</td>
<td width="329" valign="top">Close application</td>
</tr>
</tbody>
</table>
<p>To support this workflow we could build a drawing tool with a data entry interface, an a generic intersect tool, a TOC, and a reporting tool, but why in the world would we do that? This is an emergency response application which means we don&#8217;t want our user&#8217;s hunting and pecking for tools when they could be busy making bad things stop&#8230;immediately.  The entire workflow is encapsulated in a single dojo dijit.</p>
<ol>
<li>When the user activates the dijit by clicking on a menu item, they are prompted immediately to draw a shape and are informed on how to close the shape/stop drawing&#8230;a double click.</li>
<li>Once the user closes the shape, the data entry interface pops up and says &#8220;Hey, I need some data!&#8221;.</li>
<li>As each field is filled in, the form keeps squawking for more data until it has what it needs.</li>
<li>Since we already know the user is going to want to generate a report after we do our intersect and save all this data in the database, we ask them which one they want from the get go.</li>
<li>On &#8216;OK&#8217; the system goes away, saves the polygon and attributes, does a bunch of processing steps and pops up the needed report.</li>
</ol>
<p>We have held the user&#8217;s hand, led them through a well defined workflow, and given them the information they needed without all the noise and distraction of 2 menus, 3 buttons, a cup of coffee and two trips to the bathroom.</p>
<h3>Reassure the User</h3>
<p>When a GIS Professional executes an attribute query or runs an intersect operation, they typically understand that sometimes, the result set is empty. The public, or some other non-GIS user, gets very nervous when they perform an action and are either presented with an empty UI, or are otherwise redirected to something they didn’t expect. Did they delete something important? Is the request still processing? Did the site crash? “What the heck happened to my data?!?”</p>
<p><a href="http://briannoyle.files.wordpress.com/2009/07/figure3.png"><img style="border-bottom:0;border-left:0;border-top:0;border-right:0;" src="http://briannoyle.files.wordpress.com/2009/07/figure3_thumb.png?w=454&#038;h=343" border="0" alt="Figure3" width="454" height="343" /></a></p>
<p>The importance of reassuring the user anytime something out of the ordinary happens cannot be over stated. Continuing with the roadway manager example, the figure above illustrates a case where the user has selected a project with no location information. Rather than showing the user an empty interface, leaving her to worry about what has happened, the map interface is zoomed to the general area of the project (known from tabular information) and an informational dialog explains that there is no need to worry and provides instructions on how to remedy the missing data issue. There is no need for a complicated exception or null case scenario; a simple modal dialog addresses the usability issue and keeps the user on the right track.</p>
<h3>Up Next</h3>
<p>Stay tuned for part 3 in the series dealing with strategies for protecting the user from themselves.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/briannoyle.wordpress.com/231/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/briannoyle.wordpress.com/231/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/briannoyle.wordpress.com/231/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/briannoyle.wordpress.com/231/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/briannoyle.wordpress.com/231/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/briannoyle.wordpress.com/231/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/briannoyle.wordpress.com/231/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/briannoyle.wordpress.com/231/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/briannoyle.wordpress.com/231/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/briannoyle.wordpress.com/231/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/briannoyle.wordpress.com/231/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/briannoyle.wordpress.com/231/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/briannoyle.wordpress.com/231/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/briannoyle.wordpress.com/231/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=briannoyle.wordpress.com&amp;blog=2469140&amp;post=231&amp;subd=briannoyle&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://briannoyle.wordpress.com/2009/07/10/usability-and-the-geoweb-part-2-provide-feedback/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/17c19e9c10d596422fcce4443f3a6a56?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">homebrutrout</media:title>
		</media:content>

		<media:content url="http://briannoyle.files.wordpress.com/2009/07/hendrix_thumb.png" medium="image">
			<media:title type="html">Hendrix</media:title>
		</media:content>

		<media:content url="http://briannoyle.files.wordpress.com/2009/07/browsergis_thumb.png" medium="image">
			<media:title type="html">BrowserGIS</media:title>
		</media:content>

		<media:content url="http://briannoyle.files.wordpress.com/2009/07/figure2_thumb.png" medium="image">
			<media:title type="html">Figure2</media:title>
		</media:content>

		<media:content url="http://briannoyle.files.wordpress.com/2009/07/holdusershand_thumb.png" medium="image">
			<media:title type="html">HoldUsersHand</media:title>
		</media:content>

		<media:content url="http://briannoyle.files.wordpress.com/2009/07/figure3_thumb.png" medium="image">
			<media:title type="html">Figure3</media:title>
		</media:content>
	</item>
		<item>
		<title>Usability and the GeoWeb: Part 1 of ?</title>
		<link>http://briannoyle.wordpress.com/2009/07/03/useability-and-the-geoweb-part-1-of/</link>
		<comments>http://briannoyle.wordpress.com/2009/07/03/useability-and-the-geoweb-part-1-of/#comments</comments>
		<pubDate>Fri, 03 Jul 2009 15:45:08 +0000</pubDate>
		<dc:creator>homebrutrout</dc:creator>
				<category><![CDATA[General GIS]]></category>
		<category><![CDATA[GeoWeb]]></category>
		<category><![CDATA[Usability]]></category>
		<category><![CDATA[complexity]]></category>
		<category><![CDATA[Web 2.0]]></category>

		<guid isPermaLink="false">http://briannoyle.wordpress.com/2009/07/03/useability-and-the-geoweb-part-1-of/</guid>
		<description><![CDATA[Myself and my partner in crime, Dave Bouwman, have talked incessantly in trade publications and at conferences of late about the Geospatial Web or &#8220;GeoWeb&#8221; and what it means to GIS professionals and software developers.  This post is the first in a several part series on usability issues and concerns when designing and building applications [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=briannoyle.wordpress.com&amp;blog=2469140&amp;post=220&amp;subd=briannoyle&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Myself and my partner in crime, <a href="http://blog.davebouwman.com/" target="_blank">Dave Bouwman</a>, have talked incessantly in <a href="http://www.esri.com/news/arcuser/0609/aspnetmvc.html" target="_blank">trade publications</a> and <a href="http://www.dtsagile.com/media/presentations" target="_blank">at conferences of late</a> about the Geospatial Web or &#8220;GeoWeb&#8221; and what it means to GIS professionals and software developers.  This post is the first in a several part series on usability issues and concerns when designing and building applications for the GeoWeb.  How many parts will the series have?  Well that all depends upon how worked up I get and how often and long I want to rant.</p>
<p>It is my sincere hope that we, as a community, are finally moving on from the era of exposing buckets of complex GIS functionalities in the browser.  <a href="http://briannoyle.wordpress.com/2009/06/15/standard-architecture-for-the-geoweb-give-it-a-rest/" target="_blank">As noted in a previous post</a>, the GeoWeb is, in essence, all things Web 2.0 writ large on a map. For ESRI customers it is REST, JavaScript, Flex, and Silverlight APIs for ArcGIS Server.  Beyond the ESRI realm it is Microsoft Bing Maps, Google Maps, Google Earth, or myriad FOSS offerings.</p>
<p><span id="more-220"></span></p>
<p><a href="http://briannoyle.files.wordpress.com/2009/07/geoweb.png"><img src="http://briannoyle.files.wordpress.com/2009/07/geoweb_thumb.png?w=450&#038;h=328" alt="GeoWeb" width="450" height="328" /></a></p>
<p>Since internet users now have a myriad of choices in where they go for information, we as professionals should be designing highly usable systems that give users relevant information…and give it to them right now. If we don’t, they’ll simply go somewhere else. What this means for all of us as architects, and developers, and project managers in the mapping industry, is that usability trumps features. Since our customers are foresters, real estate agents, state troopers, and roadway managers, not GIS professionals, we need to hide GIS complexity, provide determinate, task oriented interfaces, and answer the user’s question with a minimum of friction and interaction.</p>
<p>While quick performance and a killer site skin with an open, uncluttered layout are certainly important in the age of the GeoWeb, they are only part of the equation. Based on my unscientific observations, geodevelopers are still challenged on the usability front in that the typical application with buckets of data and loads of tools with an unconstrained workflow is still making it out the door and into the market in many cases. Creating great apps for public facing or line of business sites serving non-GIS professionals requires a lesson plan that focuses on the user and on the mental model of how the user interacts with functionality that the geodeveloper exposes.</p>
<h2>But I need a full featured GIS in my browser</h2>
<p>Oh no you don&#8217;t.  We at <a href="http://www.dtsagile.com" target="_blank">DTSAgile</a> maintain that there are very few situations that actually call for a web-based GIS. When these web applications are built, they are so complex that only GIS professionals understand how to use them. Perversely, the performance and technical limitations of web development make these applications too limited to be useful for GIS professionals! Give GIS professionals access to professional GIS tools &#8211; desktop GIS applications. Citrix or Terminal Services technologies provide an excellent means to do this in a distributed environment. This allows all the GIS applications and data to be co-located in a single data-center, while still having a “desktop” experience at remote locations. Having designed, architected and developed several large implementations, we’ve seen how it can deliver powerful desktop GIS functionality across an enterprise very cost effectively.</p>
<p><a href="http://briannoyle.files.wordpress.com/2009/07/gisinbrowser.png"><img style="border-width:0;" src="http://briannoyle.files.wordpress.com/2009/07/gisinbrowser_thumb.png?w=454&#038;h=446" border="0" alt="GISInBrowser" width="454" height="446" /></a></p>
<p>If however your goal is to service the public or users in a specific line of business, then you would do well in creating focused applications which help a user solve a specific problem easily – which is exactly what GeoWeb style applications do. The next generation of spatial applications is now arriving on the scene and starting to leverage real GIS analytical capabilities <em>behind</em> the scenes. While the tendency to mimic the indeterminate workflows of desktop GIS packages in a browser has noble goals, implementation, performance, and usability issues usually run rampant and completely swamp any cool-factor. Instead, focus on solving specific business problems by building tools that are tailored to the actual end user.</p>
<p>With that introduction&#8230;here&#8217;s lesson 1.</p>
<h2>Lesson 1: Stash complexity away</h2>
<p>Foresters know trees, state troopers know law enforcement, the County Auditor knows real estate assessment, the public knows a whole variety of things, but likely none of these user groups knows specifically what a buffer, intersect, union, or thiessen polygon is. When a roadway project manager asks for all structures near her project, without knowing it she really means,</p>
<blockquote><p>“Locate point features in the Structures layer that fall within 1 mile of the section of Route 6A between mile posts 12 and 25.”</p></blockquote>
<p>A GIS professional would know that getting this information requires an initial point selection, followed by a buffer, an intersection with a second layer (roads), followed by a buffer of the resulting road segment, followed by an intersection of the second buffer with the structures layer. The roadway project manager does not know this, nor should she.  Furthermore, why in name of Pete would we give her 5 or 6 separate tools and ask her to figure out that process in the correct order?</p>
<p><a href="http://briannoyle.files.wordpress.com/2009/07/fewerlayers.png"><img style="border-width:0;" src="http://briannoyle.files.wordpress.com/2009/07/fewerlayers_thumb.png?w=454&#038;h=370" border="0" alt="FewerLayers" width="454" height="370" /></a></p>
<p>Consider the application shown in the figure above.  For those keeping track, the app is an ASP.NET MVC implementation consuming data via the WMS capabilities of ArcGIS Server 9.2 within the OpenLayers client interface.</p>
<h3>Fewer Layers</h3>
<p>Note how few layers are in the map.  I&#8217;m sorry to say so, but if you think your users need or want to see all 150 layers in your Geodatabase, you are dead wrong.  Unless your application operates on or depends on that really detailed point layer of GPS&#8217;d mailbox locations for correct function, leave it at home and let&#8217;s keep it simple okay?</p>
<p>Consider using a base tile cache with some sexy cartography, and then roll in 3-5 operational layers that contain only the information that the user needs to accomplish their goal.  The example above contains roadways, separated into scale appropriate layers for display purposes, and counties to provide locational context.  To our roadway manager, everything else is noise in the system and doesn&#8217;t contribute substantially to her ability to do her job so it is left out.  Using fewer layers also has the side effect of dramatically increasing map rendering performance&#8230;which is topic for a separate post in this series dealing with real and perceived performance.</p>
<h3>Hide the Details</h3>
<p>Check out the minimalist map navigation at the top left of the map and the conspicuous lack of multiple tool buttons, menus, legends, layer lists, etc. in our example above. This application is used by State DOT roadway project managers and all these folks need to do their job is to:</p>
<ul>
<li>Specify what road segment a project is on</li>
<li>List structures along the road (culverts, mast arms, etc.) impacted by a project</li>
</ul>
<p>Highly useable systems hide complex GIS operations from the user and get the desired answer quickly. The selection, buffers, and intersections that get the roadway manager the information she needs to do her job are hidden inconspicuously behind the “Search for Structures” button highlighted below.</p>
<p><a href="http://briannoyle.files.wordpress.com/2009/07/figure1.png"><img style="border-width:0;" src="http://briannoyle.files.wordpress.com/2009/07/figure1_thumb.png?w=454&#038;h=370" border="0" alt="Figure1" width="454" height="370" /></a></p>
<p>Once the project road segment is selected, this search button becomes enabled, and a single click returns a list of affected structures to the user in approximately 0.3 seconds in this application allowing her to get back to what’s really important&#8230;spending that stimulus check.</p>
<h2>Future Zen</h2>
<p>Keep checking back here for additional posts on usability, performance, etc. for building the next generation of web mapping applications.  Future posts will deal with feedback to the user, user reassurance, protecting users from negative outcomes in your app, real and perceived performance, and anything else I can think of that irks me when I look at some of the &#8220;Web GIS&#8221; sites I see rolling out onto the internet.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/briannoyle.wordpress.com/220/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/briannoyle.wordpress.com/220/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/briannoyle.wordpress.com/220/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/briannoyle.wordpress.com/220/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/briannoyle.wordpress.com/220/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/briannoyle.wordpress.com/220/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/briannoyle.wordpress.com/220/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/briannoyle.wordpress.com/220/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/briannoyle.wordpress.com/220/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/briannoyle.wordpress.com/220/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/briannoyle.wordpress.com/220/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/briannoyle.wordpress.com/220/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/briannoyle.wordpress.com/220/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/briannoyle.wordpress.com/220/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=briannoyle.wordpress.com&amp;blog=2469140&amp;post=220&amp;subd=briannoyle&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://briannoyle.wordpress.com/2009/07/03/useability-and-the-geoweb-part-1-of/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/17c19e9c10d596422fcce4443f3a6a56?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">homebrutrout</media:title>
		</media:content>

		<media:content url="http://briannoyle.files.wordpress.com/2009/07/geoweb_thumb.png" medium="image">
			<media:title type="html">GeoWeb</media:title>
		</media:content>

		<media:content url="http://briannoyle.files.wordpress.com/2009/07/gisinbrowser_thumb.png" medium="image">
			<media:title type="html">GISInBrowser</media:title>
		</media:content>

		<media:content url="http://briannoyle.files.wordpress.com/2009/07/fewerlayers_thumb.png" medium="image">
			<media:title type="html">FewerLayers</media:title>
		</media:content>

		<media:content url="http://briannoyle.files.wordpress.com/2009/07/figure1_thumb.png" medium="image">
			<media:title type="html">Figure1</media:title>
		</media:content>
	</item>
		<item>
		<title>Standard Architecture for the GeoWeb: Give it a REST</title>
		<link>http://briannoyle.wordpress.com/2009/06/15/standard-architecture-for-the-geoweb-give-it-a-rest/</link>
		<comments>http://briannoyle.wordpress.com/2009/06/15/standard-architecture-for-the-geoweb-give-it-a-rest/#comments</comments>
		<pubDate>Mon, 15 Jun 2009 20:05:31 +0000</pubDate>
		<dc:creator>homebrutrout</dc:creator>
				<category><![CDATA[Design Patterns]]></category>
		<category><![CDATA[GeoWeb]]></category>
		<category><![CDATA[REST]]></category>
		<category><![CDATA[HTTP]]></category>
		<category><![CDATA[ROA]]></category>

		<guid isPermaLink="false">http://briannoyle.wordpress.com/2009/06/15/standard-architecture-for-the-geoweb-give-it-a-rest/</guid>
		<description><![CDATA[Author&#8217;s note: This post was prepared in advance of an architecture panel I will be participating in at the GeoWeb conference July 27-31, 2009 in Vancouver.&#160; At the request of conference organizers, myself and the other panel participants have all prepared posts on our &#8220;pet&#8221; architectural style.&#160; This year I drew the REST straw while [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=briannoyle.wordpress.com&amp;blog=2469140&amp;post=211&amp;subd=briannoyle&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><em>Author&#8217;s note: This post was prepared in advance of an architecture panel I will be participating in at the GeoWeb conference July 27-31, 2009 in Vancouver.&nbsp; At the request of conference organizers, myself and the other panel participants have all prepared posts on our &#8220;pet&#8221; architectural style.&nbsp; This year I drew the REST straw while Ian Painter of Snowflake Software will vigorously defend SOAP/RPC and Hans Shoebach of Galdos Systems will do battle for P2P/Event Driven architecture.&nbsp; This post will be cross posted over on the </em><a href="http://geowebconference.org/press-media/2009-blog/" target="_blank"><em>GeoWeb 2009 blog as well</em></a><em>.&nbsp; </em></p>
<p>The Geospatial Web, the current darling of location based technologies and neogeography, has been variously described as: </p>
<ul>
<li>web mapping &#8211; the generation and publication of highly performant web applications that include a map</li>
<li>mashups &#8211; combining spatial data with abstract information to produce novel representations</li>
<li>a distributed GIS for the web &#8211; essentially the combination of elements of traditional GIS technologies with advanced web development tools</li>
<li>equivalent or synonymous with relatively new technologies such as Google Earth, Microsoft Bing Maps, Yahoo Maps, etc.</li>
<li>communal or user-generated geospatial content</li>
</ul>
<p>While each of these descriptions is both incomplete and an oversimplification, I assert that at its core the GeoWeb is a technical foundation of information services and collaborative tools built upon or merged with data that provide a spatial context&#8230;a location.&nbsp; It is indeed shiny &#8220;slippy&#8221; maps, Web 2.0 application layouts, nano-formats, mashups, LBS, service-based spatial information sharing, but it is also the hardware, software, information architecture, advanced web application techniques, and people who come together to make such an organic endeavor possible.</p>
<p>The number of organizations working with GeoWeb technologies is already large and growing daily.&nbsp; It seems only logical then, that as a community we engage in an open debate about how exactly all of these databases, services, clients, and functionalities are ultimately going to communicate, integrate, and grow. My endeavor, in the context of this post and in preparation for an architecture panel at the GeoWeb 2009 conference, is to espouse <a href="http://rest.blueoxen.net/cgi-bin/wiki.pl?RestInPlainEnglish" target="_blank">Representational State Transfer (REST)</a> as a standard architectural pattern for the GeoWeb. I&#8217;ll try to keep my points brief here with hope of stimulating discussion that will continue at the <a href="http://geowebconference.org/" target="_blank">GeoWeb conference in Vancouver at the end of July</a>.</p>
<p><span id="more-211"></span>
<p>&nbsp;</p>
<h3>REST is Best #1: Adopt the architecture of the medium</h3>
<p>Continuing my trend of oversimplication, the GeoWeb is simply the web + geo right?&nbsp; While it is indeed more than just web mapping, at it&#8217;s core the GeoWeb commonly leverages the World Wide Web for information access and representation in a client application.&nbsp; The web is the poster child for RESTful architectures as articulated in <a href="http://en.wikipedia.org/wiki/Roy_Fielding" target="_blank">Roy Fielding&#8217;s</a> doctoral dissertation.&nbsp; So the pragmatist in me says that if we&#8217;re going to build a network of loosely coupled systems to support the Geospatial Web and we&#8217;re going to use the web to provide access, why wouldn&#8217;t we leverage the architecture of our good friend &#8220;dubya, dubya, dubya&#8221;?&nbsp; GET, PUT, POST, and DELETE.&nbsp; The semantics are well defined and well understood (okay, POST can be a little wonky due to issues of <a href="http://en.wikipedia.org/wiki/Idempotent" target="_blank">idempotency</a> but I think my point holds). </p>
<p>Every single application exposes its resources through exactly the same interface&#8230;the HTTP specification.&nbsp; Would you, as a developer of a service or a client rather work with 4 HTTP verbs, or would you rather need to discover, proxy, and understand myriad SOAP contracts?&nbsp; Written a WSDL lately? Read one? I thought so&#8230;</p>
<h3>REST is Best #2:&nbsp; It&#8217;s about resources</h3>
<p>REST-based services (or REST resources for my &#8220;high-REST&#8221; friends in the audience) are true &#8220;web services&#8221; in every sense of the term since they&#8217;re based entirely on HTTP and URIs.&nbsp; Map images of downtown Las Vegas, your running route, drill pad locations, the location of the nearest Starbucks, parcel boundaries, a street level image of some guy mooning the Google van; all just pieces of information when it comes right down to it.&nbsp; What we store, exchange, represent, draw on a map, and recombine into novel information combinations are simply resources&#8230;and that&#8217;s what REST is all about.&nbsp; Why make it any more complex than it has to be.&nbsp; Why would I POST&nbsp; to a SOAP method or consume an event from a service agent when all I want to know is http://www.myTranspoSite.com/projects/532. (In English: &#8220;Get me the location, status, and funding information of the stimulus transportation project going on at the end of my street.&#8221;)&nbsp; </p>
<p>&#8220;But what about my complex geoprocessing operation,&#8221; you say?&nbsp; Well, spatial statistics or complex operations that produce a result (buffer, linear referencing operations, etc.) are all fine and dandy for us technologists, but the GeoWeb isn&#8217;t just for GIS professionals anymore.&nbsp; Why expose your client developer, or worse a run of the mill user, to such complexities.&nbsp; A user doesn&#8217;t know what a buffer is and neither does the Dojo ninja that&#8217;s consuming your resourcein his JavaScript client&#8230;they just want to know how many crimes where committed in their neighborhood in the last 6 months.&nbsp; Hide complexity within the REST resource and give a simple answer to a complex question.</p>
<p>In an ROA effectively adhering to a RESTful architecture, all I need to know to get the information I want is a URI and an action.&nbsp; Do I have to negotiate a proxy?&nbsp; Am I getting cached information? Is there a gateway or firewall in the way?&nbsp; How do I negotiate that P2P thingy again? Do I need to do a buffer followed by an intersect followed by a 12th level of hell whatchamacallit? Who cares?&nbsp; Just give me the information I want so I can go play golf, spend time with my kids, wax the car, take a nap, or do any number of other things I&#8217;d rather be doing.</p>
<h3>REST is Best #3: Serving many masters </h3>
<p>The beauty of REST is that you get the standard interface provided by HTTP, with no limitation on data representation.&nbsp; Why is this important for the Geospatial Web?&nbsp; Because browsers like HTML and JSON. Because machines like XML, binary, or code on demand.&nbsp; Humans like pretty pictures and PDFs. And sometime down the line machines and browsers and humans may all change their minds and like some other format.&nbsp; That&#8217;s right folks, the GeoWeb ain&#8217;t just for browsers anymore and that means we as architects and developers need to keep multiple resource representations foremost in our minds.&nbsp; REST is absolutely critical as an architectural pattern for the GeoWeb because it provides a low friction way for us to provide information formats that better match consuming clients and performance requirements.&nbsp; And as new content types come to light and get defined, REST lets you add support for these novel formats without impacting support for existing/older content types.&nbsp; </p>
<h3>REST is Best #4: Now where did I put that..?</h3>
<p>So if the GeoWeb is about publishing, consuming, transforming, sharing, visualizing data with a spatial component, it stands to reason that we need a mechanism by which to discover said information.&nbsp; And we&#8217;d probably also like a way to get back to the information once we&#8217;ve been there once.&nbsp; Or send it to our boss, or forward it to grandma, or shoot it out the list-serv that we&#8217;re on. </p>
<p>In short, REST makes the information driving the GeoWeb portable. Once I find a resource I like I can bookmark it to return later, I can throw it in an email and share it with others, I can embed it in my application to be consumed and acted upon in novel ways.&nbsp; It also means that we don&#8217;t need a separate discovery mechanism for our resources because resources can be embedded as content in other resources.&nbsp;&nbsp; A country resource can provide information on state resources which can provide information on county resources, etc.&nbsp; Imagine that; an entire network of information and functional resources interconnected by URIs&#8230;huh.</p>
<h3>REST is Best #5: Performance and Scalability</h3>
<p>For most RESTful services (I know, I know&#8230;resources) the majority of requests to the resource are probably GET requests.&nbsp; Do I have numbers to back that up?&nbsp; Of course not&#8230;I&#8217;m an architect.&nbsp; But the logic of the assertion is that presumably many more people are allowed to read/view information than are allowed to create, update, or delete information.&nbsp; Even in scenarios with lots of resource editors, the GET is still likely to far exceed PUT, POST, and DELETE request counts.&nbsp; One of the central tenets of the REST architectural style is that whenever possible, information should be cached.&nbsp; REST gets it&#8217;s performance and scalability from this cache-ability, coupled with statelessness. </p>
<p>What this means for the GeoWeb is that we can cache GET requests against a resource.&nbsp; Thus if I visit a resource URL and ask for information on a highway project, and 2 seconds later my neighbor asks for information on the same project&#8230;my GET results will be cached so that my neighbor&#8217;s request does not incur the penalty of a database hit, business logic enforcement, object formatting, etc.&nbsp; Does it matter for a system with 100 users on appropriately sized servers? Probably not.&nbsp; Does it matter for a large interconnected network of resources with hundreds of thousands or millions of users?&nbsp; You betcha&#8217;.</p>
<p>Statelessness means that a server hosting data or functionalities for the GeoWeb should service requests in a manner that does not depend on context or state between requests or between services.&nbsp; If you say to a REST resource, &#8220;Give me a map of all preschools within 5 miles of my home&#8221;.&nbsp; You cannot simply make a follow up requests that says &#8220;Now buffer them&#8221;.&nbsp; The statelessness of the resource on the server means it no longer remembers anything about the 20 preschool points it just handed you as JSON&#8230;in fact, the server doesn&#8217;t even know who you are anymore and wants your credentials again.&nbsp; Why is this good?&nbsp; Because RESTful architectures don&#8217;t typically have to contend with maintenance of session state, a server can be swapped out with another in the event of a failure, a sys admin can decide to add three new servers to a farm on Wednesday without existing clients knowing any different, or a group of servers can be allocated to service different types of requests.</p>
<p>Caching and statelessness = performance and scalability all in one neat little package.&nbsp; Sort of a big deal for people building LOB or otherwise critical applications for the GeoWeb dontchathink?</p>
<h3>Parting Shots</h3>
<p>Did I miss something in my initial hypothesis that REST is the critical architectural style for the GeoWeb?&nbsp; Probably.&nbsp; Did I get something wrong or use semantics likely to raise the hackles of true, dyed-in-the-wool RESTafarians?&nbsp; Probably&#8230;I tend to be more pragmatism than dogma anyway.&nbsp; Consider joining us for GeoWeb 2009 July 27-31 and see if I can avoid making a complete fool out myself whilst fighting the good fight to make RESTful architectures an integrated part of the evolving GeoWeb. Find a glaring hole in my argument or something I missed?&nbsp; Leave a comment here so I can study up before doing battle with the SOA/SOAP and P2P/Event Driven folks in July.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/briannoyle.wordpress.com/211/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/briannoyle.wordpress.com/211/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/briannoyle.wordpress.com/211/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/briannoyle.wordpress.com/211/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/briannoyle.wordpress.com/211/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/briannoyle.wordpress.com/211/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/briannoyle.wordpress.com/211/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/briannoyle.wordpress.com/211/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/briannoyle.wordpress.com/211/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/briannoyle.wordpress.com/211/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/briannoyle.wordpress.com/211/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/briannoyle.wordpress.com/211/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/briannoyle.wordpress.com/211/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/briannoyle.wordpress.com/211/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=briannoyle.wordpress.com&amp;blog=2469140&amp;post=211&amp;subd=briannoyle&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://briannoyle.wordpress.com/2009/06/15/standard-architecture-for-the-geoweb-give-it-a-rest/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/17c19e9c10d596422fcce4443f3a6a56?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">homebrutrout</media:title>
		</media:content>
	</item>
		<item>
		<title>Teaching an old dog new tricks: Dojo</title>
		<link>http://briannoyle.wordpress.com/2009/05/20/teaching-an-old-dog-new-tricks-dojo/</link>
		<comments>http://briannoyle.wordpress.com/2009/05/20/teaching-an-old-dog-new-tricks-dojo/#comments</comments>
		<pubDate>Wed, 20 May 2009 22:58:43 +0000</pubDate>
		<dc:creator>homebrutrout</dc:creator>
				<category><![CDATA[General GIS]]></category>
		<category><![CDATA[life]]></category>
		<category><![CDATA[DOJO]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[learning]]></category>

		<guid isPermaLink="false">http://briannoyle.wordpress.com/2009/05/20/teaching-an-old-dog-new-tricks-dojo/</guid>
		<description><![CDATA[Over the last two weeks, I&#8217;ve been waist deep in what has been, for me, a completely new client side development platform.&#160; We have several projects underway at present that leverage Dojo as the framework for rich client GeoWeb applications and, simply put, we&#8217;ve got more Dojo work than our two resident experts can handle [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=briannoyle.wordpress.com&amp;blog=2469140&amp;post=210&amp;subd=briannoyle&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Over the last two weeks, I&#8217;ve been waist deep in what has been, for me, a completely new client side development platform.&nbsp; We have several projects underway at present that leverage Dojo as the framework for rich client GeoWeb applications and, simply put, we&#8217;ve got more Dojo work than our two resident experts can handle at present.&nbsp; Time to roll up my sleeves and learn something new!</p>
<p><img height="338" alt="iStock_000001541503XSmall" src="http://briannoyle.files.wordpress.com/2009/05/istock_000001541503xsmall.jpg?w=450&#038;h=338" width="450"> </p>
<p>Since I&#8217;m a botanist by training, and not a classically trained programmer by any stretch, I don&#8217;t typically look at a new technology and say &#8220;Gee Whiz, this looks an awful lot like &lt;pick your poison&gt; that I learned back in University&#8221;.&nbsp; I&#8217;ve got sort of a free form learning process that works for me, and usually get&#8217;s me up and running and useful in a relatively short period of time&#8230;a matter of days if I have examples and a pattern rather than weeks.&nbsp; And after doing this for 10 years or so, it seems that you still can teach an old dog new tricks.</p>
<p><span id="more-210"></span>
</p>
<h3>The cone of silence</h3>
<p>The learning process, especially at age 35, does not benefit from distractions.&nbsp; I still can&#8217;t believe I could sit on my couch and watch a movie while studying in college or camp out in a noisy coffee shop and write portions of my thesis in graduate school.&nbsp; Now, it&#8217;s less about the TV or background noise and more about email barrages, social networks, and the new, new thing on YouTube.&nbsp; Perhaps the single worst feature of my Twitter client (TweetDeck) is that it is constantly squawking when new updates roll in.&nbsp; When I need to learn something new from the ground up, the cone of silence get&#8217;s invoked.&nbsp; </p>
<p><img height="338" alt="Amy16" src="http://briannoyle.files.wordpress.com/2009/05/amy16.jpg?w=450&#038;h=338" width="450"> </p>
<p>This doesn&#8217;t mean I don&#8217;t talk to my coworkers or answer my wife&#8217;s calls&#8230;quite the contrary, I&#8217;m usually asking coworkers plenty of questions and since my son has a health condition I always take calls from the wife.&nbsp; What it does mean is that I shut down my Twitter client, fire off a courtesy email to the rest of the company (and stop answering email), and buckle down for a day, or two days, or three if that&#8217;s what it takes.&nbsp; If a coworker is physically on fire and I have the only fire extinguisher, I respond.&nbsp; If not, then it&#8217;s going to be a day or two before I can get to that proposal you want me to work on.&nbsp; There are no <em>ad hoc</em> requests allowed from outside the office I physically sit in.&nbsp; Removing all extraneous distraction keeps me focused on the task at hand and allows me the deep dive that I require to wrap my head around something new.&nbsp; This cone of silence is also an excellent tool when up against a deadline on any project.</p>
<h3>Find room to spread out</h3>
<p>I can&#8217;t learn a new technology at home after work.&nbsp; I can read a book about it and make some notes and commit some of it to memory, but I can&#8217;t kick back, spread out, and mentally digest things.&nbsp; Wife, two dogs, cat, four year old&#8230;you get the picture.&nbsp; There&#8217;s a lot going on at home and working there usually means a single monitor machine or the netbook, and not a lot of room to make a mess.&nbsp; Learning something new is when our developer rigs at DTSAgile really shine:&nbsp; Comfy chair for exercising the typical bad posture of a developer;&nbsp; Big desks with plenty of room for scribbling things down in a notebook or two; Three monitors to spread out your IDE, Google, help system or API documentation, sample databases, etc., etc.; Additional desk space reserved from the latest offerings from O&#8217;Reilly or Wrox; Real estate for half drunk coffee from yesterday as well as today&#8217;s lukewarm addition to the collection.</p>
<p><img height="298" alt="gadgets" src="http://briannoyle.files.wordpress.com/2009/05/gadgets.png?w=450&#038;h=298" width="450"> </p>
<p>I need room to roll up my sleeves and work.&nbsp; Having multiple information sources in front of my face at the same time speeds the learning process for me and is simply more time efficient.&nbsp; I&#8217;ve gotten to the point now where it&#8217;s actually an annoyance to have to hunt and peck on the Windows taskbar&nbsp; to find that great Google search result or pull up one of 5 sample VS.NET solutions I&#8217;ve got going.&nbsp; Call it ADD, call it information overload, it works for me&#8230;but it only works if I&#8217;ve got room to spread out, both in the digital world, and the physical one. If I&#8217;m truly going to leverage the wealth of information that&#8217;s available, I certainly need a big palette to work from, and an even bigger canvas to spread it on.</p>
<h3>Know where you&#8217;re going</h3>
<p>It helps immensely to have an example of how things ought to look when I&#8217;m done writing code.&nbsp; This doesn&#8217;t necessarily mean the user experience manifested in the UI or in the behavior of the service boundary, but rather the appearance and organization of the code. Knowing enough to write a dojo.subscribe() is one thing, but where is the best location to put that code given the context in which it will run? In a *.js file for a widget? In the page itself? In some generic widget controller?&nbsp; Dojo can be used to simply add a few shiny bits to a web client, but it is frequently used as a fully object oriented client application framework, making good patterns and practices very important.&nbsp; </p>
<p><img height="294" alt="iStock_000002769942Small" src="http://briannoyle.files.wordpress.com/2009/05/istock_000002769942small.jpg?w=450&#038;h=294" width="450"> </p>
<p>Having reference implementation code, either from a previous project my team has done, or from another source is usually critical.&nbsp; If the technology I&#8217;m learning is fresh in the market, then I&#8217;m happy to give things a little more thought and blaze new trails, but if someone has gone down the path before me, then I definitely want a fully wired example to work from.&nbsp; Fortunately in this case, my coworkers had been doing Dojo development for awhile so I had a couple of good solutions to work from.&nbsp; Cheating? Lazy? Maybe, but why in the world would I not try to benefit from the previous experiences of others.&nbsp; It&#8217;s just good sense to know where you&#8217;re going&#8230;that way at least you&#8217;ll know when you&#8217;ve arrived. </p>
<h3>Breaking stuff</h3>
<p>I&#8217;m a tinkerer, and have been since childhood.&nbsp; What good is a perfectly working model, RC car, or a piece of software if you haven&#8217;t taken it apart, broken it, and put it back together again?&nbsp; One of my best resources during the learning process on a new technology is my tendency to tinker, pull things apart, and see what makes them work.&nbsp; Sure you could read about about the difference between dojo.hitch() and dojo.connect(), but it is infinitely more revealing to test drive both methods to see what works and what doesn&#8217;t.</p>
<p><img height="398" alt="complex-machine" src="http://briannoyle.files.wordpress.com/2009/05/complex-machine.jpg?w=450&#038;h=398" width="450"> </p>
<p>My shop is in the consulting business, which means we need to be experts in lots of different technologies and we need to achieve that level of expertise quickly as technology evolves. The long and short of it, is that I learn best when I&#8217;ve gotten to the point of a working piece of software&#8230;and then go one step further.&nbsp; I have found over the years that the difference between kinda&#8217; getting something, and really grok-ing what&#8217;s going on, lies in my tendency to want to break stuff and then put it back together so that I know what all of the component pieces and parts are doing.&nbsp; In the long run, this generally increases my code quality and readability because not only have I taken the time to learn what to do with a given technology, but I&#8217;ve also learned what not to do.</p>
<h3>References and tutorials </h3>
<p>I don&#8217;t think it&#8217;s too much of a stretch to say that for most developers these days, Google is the most valuable reference book on their desktop.&nbsp; However, those of you who have already jumped into the deep end of the Dojo swimming pool probably realize that:</p>
<ol>
<li>The API is not particularly well documented with comprehensive explanations and examples when compared to other APIs (JQuery, Prototype, etc.)
<li>There are two chief resources online for Dojo:&nbsp; <a href="http://www.dojocampus.org">The Dojo Campus (www.dojocampus.org)</a> and the <a href="http://www.dojotoolkit.org">Dojo Toolkit Site (www.dojotoolkit.org)</a>, neither of which sits on a particularly speedy server or offers a comprehensive how-to library.</li>
</ol>
<p>All Dojo peculiarities aside, even if I was learning ASP.NET MVC, Entity Framework, PERL, Python, Ruby or any number of other well documented technologies or APIs, I certainly wouldn&#8217;t rely entirely on what online resources could teach me.&nbsp; </p>
<p><img height="324" alt="terminology" src="http://briannoyle.files.wordpress.com/2009/05/terminology.jpg?w=450&#038;h=324" width="450"> </p>
<p>Perhaps it&#8217;s because I was raised at a time when you still went to the local bookstore to find a good read, or perhaps it is because of the countless hours I spent working in my grandmother&#8217;s small town bookstore, I still like to have reference books around.&nbsp; Having two or three books on the technologies I&#8217;m actively working in means I can take a book to lunch and read up on a particularly hairy topic, I can look long and hard and dissect an example without blinding myself staring at the LCD, or I can take a volume home and read before nodding off at night.&nbsp; Absorbing information from multiple sources can only help the cause of learning new technology, and for me the thumbing of pages will always hold something that a scrolling a mouse wheel never will. </p>
<h3>Conclusions</h3>
<p>So there it is&#8230;you can in fact teach an old dog new tricks.&nbsp; While my learning process is probably not as organized and logical as that of others, it does work for me, and has allowed me to keep pace with what is turning out to be a rapidly changing technological landscape.&nbsp; What&#8217;s next?&nbsp; Well, the cone of silence is off so there&#8217;s probably a couple of proposals in my near future, but the Dojo work is nearing completion, it works well, and I can see Silverlight 3, Entity Framework, ADO.NET Data Services, and probably some Flex in my near future.&nbsp; I think I need a cup of coffee and a fourth monitor. </p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/briannoyle.wordpress.com/210/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/briannoyle.wordpress.com/210/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/briannoyle.wordpress.com/210/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/briannoyle.wordpress.com/210/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/briannoyle.wordpress.com/210/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/briannoyle.wordpress.com/210/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/briannoyle.wordpress.com/210/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/briannoyle.wordpress.com/210/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/briannoyle.wordpress.com/210/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/briannoyle.wordpress.com/210/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/briannoyle.wordpress.com/210/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/briannoyle.wordpress.com/210/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/briannoyle.wordpress.com/210/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/briannoyle.wordpress.com/210/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=briannoyle.wordpress.com&amp;blog=2469140&amp;post=210&amp;subd=briannoyle&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://briannoyle.wordpress.com/2009/05/20/teaching-an-old-dog-new-tricks-dojo/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/17c19e9c10d596422fcce4443f3a6a56?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">homebrutrout</media:title>
		</media:content>

		<media:content url="http://briannoyle.files.wordpress.com/2009/05/istock_000001541503xsmall.jpg" medium="image">
			<media:title type="html">iStock_000001541503XSmall</media:title>
		</media:content>

		<media:content url="http://briannoyle.files.wordpress.com/2009/05/amy16.jpg" medium="image">
			<media:title type="html">Amy16</media:title>
		</media:content>

		<media:content url="http://briannoyle.files.wordpress.com/2009/05/gadgets.png" medium="image">
			<media:title type="html">gadgets</media:title>
		</media:content>

		<media:content url="http://briannoyle.files.wordpress.com/2009/05/istock_000002769942small.jpg" medium="image">
			<media:title type="html">iStock_000002769942Small</media:title>
		</media:content>

		<media:content url="http://briannoyle.files.wordpress.com/2009/05/complex-machine.jpg" medium="image">
			<media:title type="html">complex-machine</media:title>
		</media:content>

		<media:content url="http://briannoyle.files.wordpress.com/2009/05/terminology.jpg" medium="image">
			<media:title type="html">terminology</media:title>
		</media:content>
	</item>
	</channel>
</rss>
