<?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>blog.davebouwman.com</title>
	<atom:link href="http://blog.davebouwman.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.davebouwman.com</link>
	<description>ArcGIS, .NET and Mobile Web Apps</description>
	<lastBuildDate>Wed, 25 Apr 2012 16:49:42 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='blog.davebouwman.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>blog.davebouwman.com</title>
		<link>http://blog.davebouwman.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://blog.davebouwman.com/osd.xml" title="blog.davebouwman.com" />
	<atom:link rel='hub' href='http://blog.davebouwman.com/?pushpress=hub'/>
		<item>
		<title>Real-Time Services Talk &amp; Demo Update</title>
		<link>http://blog.davebouwman.com/2012/04/05/real-time-services-talk-demo-update/</link>
		<comments>http://blog.davebouwman.com/2012/04/05/real-time-services-talk-demo-update/#comments</comments>
		<pubDate>Thu, 05 Apr 2012 13:52:55 +0000</pubDate>
		<dc:creator>Dave Bouwman</dc:creator>
				<category><![CDATA[asp.net mvc]]></category>
		<category><![CDATA[DevSummit]]></category>
		<category><![CDATA[NodeJs]]></category>
		<category><![CDATA[Presentations]]></category>
		<category><![CDATA[SignalR]]></category>

		<guid isPermaLink="false">https://dbouwman.wordpress.com/?p=1706</guid>
		<description><![CDATA[At the 2012 Esri Developer Summit, we gave two talks on building real-time apps &#8211; the first used Node.js and Socket.io, and persisted the data to a feature service. The second used ASP.NET MVC and SignalR, and stored the data &#8230; <a href="http://blog.davebouwman.com/2012/04/05/real-time-services-talk-demo-update/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.davebouwman.com&amp;blog=14377016&amp;post=1706&amp;subd=dbouwman&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>At the 2012 Esri Developer Summit, we gave two talks on building real-time apps &#8211; the first used Node.js and Socket.io, and persisted the data to a feature service. The second used ASP.NET MVC and SignalR, and stored the data points in a simple SQL table with x,y values.</p>
<p>During the talks we invited the ~100 people in the room to beat up the apps, and here&#8217;s what we found.</p>
<p>First &#8211; both services withstood the inbound load without issue.</p>
<h2>Node.js and Socket.io</h2>
<p>Demo site: <a href="http://node.dtsagile.com">http://node.dtsagile.com</a></p>
<p>This was running on an AWS Micro-Instance, and there were no issues handling the load. Over the 4 hours from when we opened it up, 999 points were added to the system.</p>
<p>In the first 10 minutes, 780 points were added, and looking at the timestamps we had several points where there were 10, 12 15 points added per-second. Not bad for a wee little instance! Here&#8217;s a screen cap from Brian Noyle&#8217;s phone after the session was over. Down to 3 users, but you can see all the points stacked up.</p>
<p><img style="display:block;margin-left:auto;margin-right:auto;" title="node-loaded.JPG" src="http://dbouwman.files.wordpress.com/2012/04/node-loaded.jpg?w=400&#038;h=600" border="0" alt="Node loaded" width="400" height="600" /></p>
<p>What we did find is that once there were a lot of points, the system hit a snag querying them back out and sending them to the clients. Although we could have had the clients query the ArcGIS Server FeatureService directly, part of the experiment was to do that work in Node, and then push the features to the client. This all worked smoothly except the FeatureService got slower as the number of points went up (we are still looking at why this is), and the timeout in the Node xhr request was set to be 1 second. Thus, the request timed out, and newly connecting clients did not get the &#8220;current&#8221; crop of points. Newly added points worked just fine.</p>
<p>At this point things are working smoothly again &#8211; and that&#8217;s because the query only pulls points added in the last 24 hours, and there are very few points added on any given day. I have not had any time to replicate the issue, but I expect that extending the timeout would fix things. A better idea would be to cache the data in something like Redis, and then lazy-write it into a geodatabase or feature service &#8211; maybe there would be a second or so lag between the two, but I think the user experience would be better.</p>
<p>code: <a href="https://github.com/dtsagile/dmg-express">https://github.com/dtsagile/dmg-express</a></p>
<h2>ASP.NET MVC and SignalR</h2>
<p>Demo site: <a href="http://signalr.dtsagile.com">http://signalr.dtsagile.com</a></p>
<p>This was running on a server in our Fort Collins office, and although overloaded, it&#8217;s a pretty powerful box, so there were no issues with the load. Over the first 4 hours, 536 points were added to the system. In the first 10 minutes, 426 were entered, with a peak of 5 per second. We can&#8217;t compare this directly to the numbers for node as there is now way to tell if more or less people were entering data. However, we can safely say that the server easily handled this load.</p>
<p>This version of the app simply stored the points in a SQL table with x,y values, and interestingly there was no issue with scaling this up &#8211; mainly because there was no xhr in the mix to time out, and because direct sql access is much faster than going through a feature service, which then hits the database.</p>
<p>code: <a href="https://github.com/dtsagile.com/dmg-signalr">https://github.com/dtsagile.com/dmg-signalr</a></p>
<h2>Videos of the Talks</h2>
<p>We recorded screencasts of the talks as we gave them, and they are now up at Vimeo.</p>
<p><strong></strong>Node &amp; Socket.IO:  <a href="http://vimeo.com/dtsgis/realtime-node">http://vimeo.com/<span id="custom_url_username">dtsgis/</span><span id="custom_url_preview">realtime-node</span></a></p>
<p><span>SignalR &amp; ASP.NET MVC: <a href="http://vimeo.com/dtsgis/realtime-signalr">http://vimeo.com/<span id="custom_url_username">dtsgis/</span><span id="custom_url_preview">realtime-signalr</span></a></span></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/dbouwman.wordpress.com/1706/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/dbouwman.wordpress.com/1706/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/dbouwman.wordpress.com/1706/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/dbouwman.wordpress.com/1706/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/dbouwman.wordpress.com/1706/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/dbouwman.wordpress.com/1706/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/dbouwman.wordpress.com/1706/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/dbouwman.wordpress.com/1706/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/dbouwman.wordpress.com/1706/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/dbouwman.wordpress.com/1706/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/dbouwman.wordpress.com/1706/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/dbouwman.wordpress.com/1706/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/dbouwman.wordpress.com/1706/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/dbouwman.wordpress.com/1706/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.davebouwman.com&amp;blog=14377016&amp;post=1706&amp;subd=dbouwman&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://blog.davebouwman.com/2012/04/05/real-time-services-talk-demo-update/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7f4bfa0a5e4a4e45219a80f9c3cfd6f6?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">dbouwman</media:title>
		</media:content>

		<media:content url="http://dbouwman.files.wordpress.com/2012/04/node-loaded.jpg" medium="image">
			<media:title type="html">node-loaded.JPG</media:title>
		</media:content>
	</item>
		<item>
		<title>HTML5 Webinar April 11th, 2012</title>
		<link>http://blog.davebouwman.com/2012/04/02/html5-webinar-april-11th-2012/</link>
		<comments>http://blog.davebouwman.com/2012/04/02/html5-webinar-april-11th-2012/#comments</comments>
		<pubDate>Tue, 03 Apr 2012 03:04:43 +0000</pubDate>
		<dc:creator>Dave Bouwman</dc:creator>
				<category><![CDATA[HTML5]]></category>
		<category><![CDATA[javascipt]]></category>
		<category><![CDATA[presentation]]></category>
		<category><![CDATA[URISA]]></category>
		<category><![CDATA[webinar]]></category>

		<guid isPermaLink="false">https://dbouwman.wordpress.com/?p=1702</guid>
		<description><![CDATA[After years of being told we should use plug-in technologies such as Flex or Silverlight for our web applications, the seemingly sudden switch to HTML5 has left developers and organizations with many questions&#8230; What is HTML5? How does Javascript fit &#8230; <a href="http://blog.davebouwman.com/2012/04/02/html5-webinar-april-11th-2012/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.davebouwman.com&amp;blog=14377016&amp;post=1702&amp;subd=dbouwman&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><img style="border:0 initial initial;" title="HTML5.png" src="http://dbouwman.files.wordpress.com/2012/04/html5.png?w=500&#038;h=250" border="0" alt="HTML5" width="500" height="250" /></p>
<p>After years of being told we should use plug-in technologies such as Flex or Silverlight for our web applications, the seemingly sudden switch to HTML5 has left developers and organizations with many questions&#8230;</p>
<ul>
<li>What is HTML5?</li>
<li>How does Javascript fit into this?</li>
<li>When should we stick with plug-ins?</li>
<li>When should we use HTML5?</li>
<li>What is CSS3 and how can we use that to create amazing interactions?</li>
<li>How do we serve different versions of an app to different clients?</li>
</ul>
<p>On April 11th, 2012, Brian Noyle and I are doing a <a href="http://www.urisa.org/URISAConnectGISinMobileEra">URISA webinar </a>where we will cover how DTSAgile builds geospatial HTML5 apps that work on desktops, tablets and smart phones. We&#8217;ll be covering a lot of ground in this fast-paced talk that is aimed at both developers and managers.</p>
<p>Registration: <a href="http://www.urisa.org/URISAConnectGISinMobileEra">http://www.urisa.org/URISAConnectGISinMobileEra</a></p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/dbouwman.wordpress.com/1702/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/dbouwman.wordpress.com/1702/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/dbouwman.wordpress.com/1702/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/dbouwman.wordpress.com/1702/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/dbouwman.wordpress.com/1702/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/dbouwman.wordpress.com/1702/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/dbouwman.wordpress.com/1702/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/dbouwman.wordpress.com/1702/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/dbouwman.wordpress.com/1702/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/dbouwman.wordpress.com/1702/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/dbouwman.wordpress.com/1702/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/dbouwman.wordpress.com/1702/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/dbouwman.wordpress.com/1702/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/dbouwman.wordpress.com/1702/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.davebouwman.com&amp;blog=14377016&amp;post=1702&amp;subd=dbouwman&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://blog.davebouwman.com/2012/04/02/html5-webinar-april-11th-2012/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7f4bfa0a5e4a4e45219a80f9c3cfd6f6?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">dbouwman</media:title>
		</media:content>

		<media:content url="http://dbouwman.files.wordpress.com/2012/04/html5.png" medium="image">
			<media:title type="html">HTML5.png</media:title>
		</media:content>
	</item>
		<item>
		<title>DevSummit Presentations</title>
		<link>http://blog.davebouwman.com/2012/03/27/devsummit-presentations/</link>
		<comments>http://blog.davebouwman.com/2012/03/27/devsummit-presentations/#comments</comments>
		<pubDate>Tue, 27 Mar 2012 15:46:18 +0000</pubDate>
		<dc:creator>Dave Bouwman</dc:creator>
				<category><![CDATA[Conferences]]></category>
		<category><![CDATA[DevSummit]]></category>
		<category><![CDATA[Esri]]></category>
		<category><![CDATA[javascipt]]></category>
		<category><![CDATA[NodeJs]]></category>
		<category><![CDATA[Presentations]]></category>

		<guid isPermaLink="false">https://dbouwman.wordpress.com/?p=1698</guid>
		<description><![CDATA[Just a quick post about the presentations we (DTS) are giving at the 2012 Esri Developer Summit Talking Tech: Presentation Zen for Everyone 1pm Wednesday, Mojave Learning Center (Dave Bouwman and Brian Noyle) Let&#8217;s face it, most technical presentations leave &#8230; <a href="http://blog.davebouwman.com/2012/03/27/devsummit-presentations/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.davebouwman.com&amp;blog=14377016&amp;post=1698&amp;subd=dbouwman&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Just a quick post about the presentations we (DTS) are giving at the 2012 Esri Developer Summit</p>
<h2>Talking Tech: Presentation Zen for Everyone</h2>
<p><strong>1pm Wednesday, Mojave Learning Center (Dave Bouwman and Brian Noyle)</strong></p>
<p>Let&#8217;s face it, most technical presentations leave a bit to be desired. Myself and Brian Noyle will talk about our journey from power-point hell to something better. We&#8217;ve got ~100 slides and 30 minutes, so join us for a fun session that will make your next presentation rock.</p>
<p><img title="zen-peek2.jpg" src="http://dbouwman.files.wordpress.com/2012/03/zen-peek2.jpg?w=500&#038;h=270" border="0" alt="Zen peek2" width="500" height="270" /></p>
<p> </p>
<h2>Have a Little BackboneJS</h2>
<p><strong>4:30pm, Wednesday, Mojave Learning Center (Brian Noyle and Mike Juniper)</strong></p>
<p>This fast paced talk will introduce the GIS community to the <a href="http://documentcloud.github.com/backbone/">Backbone.js</a> framework in the context of existing ESRI web technologies.  We’ll start with some MVC and HTML 5 love and explain the Backbone.js code structure and implementation pattern with a focus on maintainability and unit testing.  We’ll take a few ESRI examples from the JavaScript API and show developers how to implement them using Backbone.js. We’ll also look at a large and complex development initiative and illustrate how Backbone.js has made our lives easier.</p>
<p> </p>
<h2>Getting Real-Time Part -1: Node.js and Socket.io</h2>
<p><strong>10:15am Thursday, Mesquite B (Dave Bouwman)</strong></p>
<p>Some scenarios (i.e. zombie flash mobs) require the ability to keep all users view of the data in sync, in real-time, without requiring an update or page refresh. In this talk we will look at a simple demo application the DTSAgile team created to investigate real-time technologies. This Damage Assessment demo app uses real-time communication to allow users (desktop or mobile) to share real-time &#8220;state&#8221; as different types of assessments are completed. The idea being that when an &#8220;injury&#8221; is reported, appropriate medical teams can be dispatched to the location.</p>
<p><img title="node-peek.jpg" src="http://dbouwman.files.wordpress.com/2012/03/node-peek.jpg?w=500&#038;h=270" border="0" alt="Node peek" width="500" height="270" /></p>
<p>In this part, we will show a simple <a href="http://nodejs.org/">node.js</a> app that uses <a href="http://socket.io/">socket.io</a> to send notifications between clients and the server, as well as sending the point locations to an ArcGIS Server feature service. Bring your notebook/iPhone/iPad/Android devices and let&#8217;s see how many sessions we can run on an AWS micro instance before we crash the wireless network, or overload the server!</p>
<p>Code: <a href="http://github.com/dtsagile/dmg-express">http://github.com/dtsagile/dmg-express</a></p>
<p> </p>
<h2 style="font-size:1.5em;">Getting Real-Time Part -2: ASP.NET MVC and SignalR</h2>
<p><strong>11:00am Thursday, Mesquite B (Mike Juniper)</strong></p>
<p>In this session, Mike Juniper will show how to implement the same Damage Assessment demo app, but this time, working on the Microsoft platform, using ASP.NET MVC and the fast evolving SignalR library.  Finish out the Dev Summit with a bang and go back home armed with ideas on how to easily add real-time capabilities to your existing apps.</p>
<p>Code: <a href="https://github.com/dtsagile/dmg-signalr">https://github.com/dtsagile/dmg-signalr</a> (coming soon!)</p>
<p> </p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/dbouwman.wordpress.com/1698/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/dbouwman.wordpress.com/1698/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/dbouwman.wordpress.com/1698/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/dbouwman.wordpress.com/1698/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/dbouwman.wordpress.com/1698/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/dbouwman.wordpress.com/1698/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/dbouwman.wordpress.com/1698/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/dbouwman.wordpress.com/1698/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/dbouwman.wordpress.com/1698/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/dbouwman.wordpress.com/1698/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/dbouwman.wordpress.com/1698/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/dbouwman.wordpress.com/1698/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/dbouwman.wordpress.com/1698/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/dbouwman.wordpress.com/1698/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.davebouwman.com&amp;blog=14377016&amp;post=1698&amp;subd=dbouwman&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://blog.davebouwman.com/2012/03/27/devsummit-presentations/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7f4bfa0a5e4a4e45219a80f9c3cfd6f6?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">dbouwman</media:title>
		</media:content>

		<media:content url="http://dbouwman.files.wordpress.com/2012/03/zen-peek2.jpg" medium="image">
			<media:title type="html">zen-peek2.jpg</media:title>
		</media:content>

		<media:content url="http://dbouwman.files.wordpress.com/2012/03/node-peek.jpg" medium="image">
			<media:title type="html">node-peek.jpg</media:title>
		</media:content>
	</item>
		<item>
		<title>Server Side Clustering: Why you need it</title>
		<link>http://blog.davebouwman.com/2012/03/24/server-side-clustering-why-you-need-it/</link>
		<comments>http://blog.davebouwman.com/2012/03/24/server-side-clustering-why-you-need-it/#comments</comments>
		<pubDate>Sat, 24 Mar 2012 21:40:11 +0000</pubDate>
		<dc:creator>Dave Bouwman</dc:creator>
				<category><![CDATA[ArcGIS Server]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Esri]]></category>

		<guid isPermaLink="false">https://dbouwman.wordpress.com/?p=1690</guid>
		<description><![CDATA[It&#8217;s been almost 4 years since I posted about using server side clustering to make point maps wicked fast, and we&#8217;ve used this same technique on 4 or 5 projects since then. Today, as I was catching up on actually &#8230; <a href="http://blog.davebouwman.com/2012/03/24/server-side-clustering-why-you-need-it/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.davebouwman.com&amp;blog=14377016&amp;post=1690&amp;subd=dbouwman&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s been almost 4 years since I <a href="http://blog.davebouwman.com/2008/08/04/making-push-pins-fly/">posted about using server side clustering</a> to make point maps wicked fast, and we&#8217;ve used this same technique on 4 or 5 projects since then. Today, as I was catching up on actually reading the tweets I&#8217;d favorite-ed over the last few weeks, I came across a site that really shows a scenario where this technique would massively help.</p>
<p>Before I get into this &#8211; I&#8217;m not trying to point fingers and call anyone out on this, I&#8217;m simply trying to show a technique that can really help make your maps fast.</p>
<p>Ok &#8211; the site is &#8220;Climate Change and African Political Stability&#8221; and it&#8217;s at <a href="http://ccaps.aiddata.org/">http://ccaps.aiddata.org/ </a>. I got to it from a blog post titled <a href="http://irevolution.net/2012/03/16/climate-conflict-aid-africa/">&#8220;Crisis Mapping Climate Change, Conflict and Aid in Africa&#8221;</a>, and when I first saw the screen cap in the blog post, I thought it looked like something by <a href="http://www.developmentseed.org">DevelopmentSeed</a> or <a href="http://www.Vizzuality.com">Vizzuality</a>. So, yeah, the site looks good. Here&#8217;s the screen cap on first load&#8230;</p>
<p><img title="ccaid-1.png" src="http://dbouwman.files.wordpress.com/2012/03/ccaid-1.png?w=500&#038;h=285" alt="Initial Load" width="500" height="285" border="0" /></p>
<p>Cool! So it&#8217;s using the Esri Javasctipt API, and some fancy client-side clustering. What I could not get in the screen cap is that the little clusters have fly-out &#8220;octopus&#8221; arms depicting how many items are in the cluster. Very cool.</p>
<p>The intent of the app is to have the users manipulate the slider at the bottom to look at changes over time. So, when the app first loads, we are looking at data for 2010.</p>
<p>Whenever I see clustered data like this, I&#8217;m curious to see what&#8217;s on the wire… so a quick peek into Firebug tells another part of the development story&#8230;</p>
<p><img title="fb-1.png" src="http://dbouwman.files.wordpress.com/2012/03/fb-1.png?w=498&#038;h=96" alt="Fb 1" width="498" height="96" border="0" /></p>
<p>The line I high-lighted is a little hard to see, but the key things are POST, 343k and 3.6 seconds. First off the POST is kinda hokey, to say nothing of turing the stomach of every RESTafarian around. Why? Because POST is meant to CREATE or UPDATE data… queries should be done with GET my friend. And, no one else can POST to that url, to get the data. Maybe that&#8217;s by design &#8211; I&#8217;m not sure. The next two numbers are really performance indicators, and really not too bad, but let&#8217;s look at what&#8217;s actually coming down.</p>
<p><img title="fb-2.png" src="http://dbouwman.files.wordpress.com/2012/03/fb-2.png?w=500&#038;h=212" alt="Fb 2" width="500" height="212" border="0" /></p>
<p>The actual object does not see to have a much extraneous info, which is good, and 343k is not far off the size of a map tile, so it&#8217;s all good right?</p>
<p>So, here&#8217;s where I&#8217;m gonna start making suggestions… using long property names is wasteful. Being a nerd, I grabbed the response data, stuffed it into an editor, and started hacking. Changing the properties to be much more concise (lat,lng,did,et,ed,a1,a2,c,l corresponding to the items in the order shown above) drops almost 1/3 of the file size &#8211; down to 260K.</p>
<p>But really, there is another way to shrink that down that&#8217;s much much more effective. You see, there are 1418 data points coming down in that package. To show then effectively on the map, they have to be clustered, or the map would be a total schear of points, and be impossible to make sense of. Looking at the map, we are seeing *maybe* 30 points total? So that means that we have an extra 1388 data points on the wire. We could make exactly the same map, with roughly 0.03% of the data on the wire. And you know what that means? The app will be monstrously faster.</p>
<p>&#8220;But Dave, a few seconds when the page loads &#8211; who cares?&#8221; Ah, yes, but let&#8217;s get back to the point of the app &#8211; to look at this data over time. And not just at different points in time, but aggregated over time. What say we slide that date back to 2003 shall we? Go ahead, try this… I&#8217;ll wait&#8230;</p>
<p>Impatient? Ok, here&#8217;s what you&#8217;ll see if it finishes loading&#8230;</p>
<p><img title="ccaid-2.png" src="http://dbouwman.files.wordpress.com/2012/03/ccaid-2.png?w=500&#038;h=287" alt="Ccaid 2" width="500" height="287" border="0" /></p>
<p>Kinda similar eh? I moved the map a bit for this screen cap, but really we see pretty much the same thing &#8211; approximately 30 points. Except for that heinous lag while it loaded, the map is pretty much the same. And what does Firebug tell us? Yeah &#8211; that huge lag was what happens when you jam 5MB of JSON down the wire. That little hack using short property names to save 30% doesn&#8217;t look so stupid now does it <img src='http://s1.wp.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p><img title="fb-3.png" src="http://dbouwman.files.wordpress.com/2012/03/fb-3.png?w=500&#038;h=73" alt="Fb 3" width="500" height="73" border="0" /></p>
<p>And the load time on that? 1 minute, 18 seconds. Firebug did not even JSONify the payload, but swaging is based on file-size, this is somewhere around  25,000 points. And in the end the map shows 30 points? Right.</p>
<h2>A Better Way&#8230;</h2>
<p>Server-side clustering is the solution here. Based on the Url&#8217;s we are seeing in FireBug, I&#8217;m guessing that this data is stored in a simple tabular database, which makes things even easier. But first a demo&#8230;</p>
<p>Conveniently, we launched a site last week which shows server-side clustering in action. Check it out at <a href="http://maps.saferoutesinfo.org">http://maps.saferoutesinfo.org</a>. Basically it&#8217;s a map of the projects which have been funded by Safe Routes to School &#8211; if there are no projects in your area, contact your school board and congress person.  Anyhow, the data covers 6 years, and has roughly of 13,000 data points.</p>
<p><a href="http://maps.saferoutesinfo.org"><img title="srts-1.png" src="http://dbouwman.files.wordpress.com/2012/03/srts-1.png?w=500&#038;h=283" alt="Srts 1" width="500" height="283" border="0" /></a></p>
<p>What&#8217;s great about this clustering solution is that the payload on the wire is small, and stays small. We load the map with the &#8220;worst case scenario&#8221; &#8211; all types of awards, for all years, for the entire country. Payload is close to the other app, at 211Kb, 1.4 seconds and we are showing 450 points. If you go poking into the JSON, you&#8217;ll see that we were under a time-crunch to get this live, so it&#8217;s not optimized &#8211; we could likely save another 20% by dropping extra / unused attributes. Speaking of Url, this is a simple REST service so you can <a href="http://maps.saferoutesinfo.org/Project/Filter?xmin=-14208095.71049561&amp;xmax=-7530556.919504388&amp;ymin=3339711.497968632&amp;ymax=6328705.052031369&amp;resolution=4891.96981024998&amp;filter=allrecipents&amp;year=">run this same query using this link</a>.</p>
<p>The idea here is to store the data in a normal SQL table, send in the bounding box and use that in a simple SQL query to get all the points currently in the map. We then cluster the points, JSON that up and shoot it back. The only downside here is that we need to re-fetch the points every time we pan or zoom. But given the fact that the points are often rendered before the map tiles come down, this does not seem to be a performance issue.</p>
<p>The clustering is based on a 22 pixel square at the current zoom resolution, so we never get back any more than 1 point for every 20&#215;20 pixels of map space.</p>
<p>What&#8217;s more, we can do some interesting stuff &#8211; in this app, we have 3 types of funding &#8220;awards&#8221; &#8211; School Awards, District Awards and State-wide Awards. If a cluster contains only schools, we use the green cluster icon. If it has 1 or more District Awards, it gets the blue cluster icon, and if there is a State-wide award in there, we show the gold icon. I&#8217;m mentioning this because the gist I posted has this logic in there &#8211; if you just want to show points, you&#8217;ll need to rip out that extra logic.</p>
<p>Since  I&#8217;m running on the el-cheapo WordPress.com hosting, I can&#8217;t embed the gist of the code, but you can get it here: <a href="https://gist.github.com/2188210">https://gist.github.com/2188210</a></p>
<h2>Summary</h2>
<p>I hope this shows why server side clustering is a killer way to build really fast web apps. In the end, you can have great design, great data, a great story, but if the app is slow, all that work is lost.</p>
<p>Also &#8211; if you are the developer/project manager/benevolent overlord/in-any-way-associated with the Climate Change and African Political Stability App, I encourage you to get in touch &#8211; although it looks like you are not using ASP.NET, I am more than willing to help you work through converting the C# over to whatever you are using. The site tells an important story, and it deserves to be told well.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/dbouwman.wordpress.com/1690/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/dbouwman.wordpress.com/1690/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/dbouwman.wordpress.com/1690/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/dbouwman.wordpress.com/1690/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/dbouwman.wordpress.com/1690/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/dbouwman.wordpress.com/1690/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/dbouwman.wordpress.com/1690/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/dbouwman.wordpress.com/1690/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/dbouwman.wordpress.com/1690/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/dbouwman.wordpress.com/1690/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/dbouwman.wordpress.com/1690/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/dbouwman.wordpress.com/1690/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/dbouwman.wordpress.com/1690/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/dbouwman.wordpress.com/1690/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.davebouwman.com&amp;blog=14377016&amp;post=1690&amp;subd=dbouwman&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://blog.davebouwman.com/2012/03/24/server-side-clustering-why-you-need-it/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7f4bfa0a5e4a4e45219a80f9c3cfd6f6?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">dbouwman</media:title>
		</media:content>

		<media:content url="http://dbouwman.files.wordpress.com/2012/03/ccaid-1.png" medium="image">
			<media:title type="html">ccaid-1.png</media:title>
		</media:content>

		<media:content url="http://dbouwman.files.wordpress.com/2012/03/fb-1.png" medium="image">
			<media:title type="html">fb-1.png</media:title>
		</media:content>

		<media:content url="http://dbouwman.files.wordpress.com/2012/03/fb-2.png" medium="image">
			<media:title type="html">fb-2.png</media:title>
		</media:content>

		<media:content url="http://dbouwman.files.wordpress.com/2012/03/ccaid-2.png" medium="image">
			<media:title type="html">ccaid-2.png</media:title>
		</media:content>

		<media:content url="http://dbouwman.files.wordpress.com/2012/03/fb-3.png" medium="image">
			<media:title type="html">fb-3.png</media:title>
		</media:content>

		<media:content url="http://dbouwman.files.wordpress.com/2012/03/srts-1.png" medium="image">
			<media:title type="html">srts-1.png</media:title>
		</media:content>
	</item>
		<item>
		<title>Changing Gears for 2012: Getting Real with Rails</title>
		<link>http://blog.davebouwman.com/2012/01/03/changing-gears-for-2012-getting-real-with-rails/</link>
		<comments>http://blog.davebouwman.com/2012/01/03/changing-gears-for-2012-getting-real-with-rails/#comments</comments>
		<pubDate>Wed, 04 Jan 2012 05:23:25 +0000</pubDate>
		<dc:creator>Dave Bouwman</dc:creator>
				<category><![CDATA[Rails]]></category>
		<category><![CDATA[Ruby-on-Rails]]></category>

		<guid isPermaLink="false">https://dbouwman.wordpress.com/?p=1678</guid>
		<description><![CDATA[For the last few years, I&#8217;ve occasionally &#8220;dabbled&#8221; with Ruby on Rails, even spoken about it at conferences, but never really stuck with it to any real extent. I&#8217;d always be catching glimpses of the supposed unicorns and rainbows, but would &#8230; <a href="http://blog.davebouwman.com/2012/01/03/changing-gears-for-2012-getting-real-with-rails/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.davebouwman.com&amp;blog=14377016&amp;post=1678&amp;subd=dbouwman&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p style="color:#444444;font-family:Georgia, 'Bitstream Charter', serif;line-height:1.5;font-size:16px;margin-bottom:24px;font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;orphans:2;text-align:0;text-indent:0;text-transform:none;white-space:normal;widows:2;word-spacing:0;">For the last few years, I&#8217;ve occasionally &#8220;dabbled&#8221; with Ruby on Rails, <a href="http://proceedings.esri.com/library/userconf/devsummit10/tech/userpres_17.html">even spoken about it at conferences</a>, but never really stuck with it to any real extent. I&#8217;d always be catching glimpses of the supposed <a style="color:#743399;font-family:Georgia, 'Bitstream Charter', serif;line-height:1.5;" href="http://farm5.static.flickr.com/4138/4924736342_a16a73cb3b.jpg">unicorns and rainbows</a>, but would then get tripped up on some trivial syntax thing, and spend and hour Googling, and then bail and revert to .NET because it was just easier.</p>
<p><span style="color:#444444;font-family:Georgia, 'Bitstream Charter', serif;font-size:16px;line-height:24px;">Given that I&#8217;d likely have an aneurysm if I paid any attention to the electoral insanity of the next 11 months, I&#8217;m opting to spend my evenings and weekends getting real with Rails. And I&#8217;ll be  blogging about my adventures along the way.</span></p>
<h2 style="color:#444444;font-family:Georgia, 'Bitstream Charter', serif;line-height:1.5;font-size:16px;margin-bottom:24px;font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;orphans:2;text-align:0;text-indent:0;text-transform:none;white-space:normal;widows:2;word-spacing:0;"><strong>What about .NET and Esri? Are you going all FOSS?</strong></h2>
<p style="color:#444444;font-family:Georgia, 'Bitstream Charter', serif;line-height:1.5;font-size:16px;margin-bottom:24px;font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;orphans:2;text-align:0;text-indent:0;text-transform:none;white-space:normal;widows:2;word-spacing:0;">In a word no. DTS is and will remain a .NET shop, and we&#8217;ll still be cooking ASP.NET MVC apps backed with  Esri technology, and I&#8217;ll still be blogging and speaking about that stack (some cool stuff is coming at 10.1 but can&#8217;t talk about it yet!). My interest in Rails is mainly to get another perspective on web development, and to see how well it works. I&#8217;ve got a few non-spatial ideas kicking around, and I want to use them as a platform for learning Rails. There may come a time when we start doing project work on Rails, but that will be a ways out.</p>
<p style="color:#444444;font-family:Georgia, 'Bitstream Charter', serif;line-height:1.5;font-size:16px;margin-bottom:24px;font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;orphans:2;text-align:0;text-indent:0;text-transform:none;white-space:normal;widows:2;word-spacing:0;">That said, if I could avoid the hell that is the Microsoft Volume Licensing site, I&#8217;d be more than a little happy <img src='http://s1.wp.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<h2 style="color:#444444;font-family:Georgia, 'Bitstream Charter', serif;line-height:1.5;font-size:16px;margin-bottom:24px;font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;orphans:2;text-align:0;text-indent:0;text-transform:none;white-space:normal;widows:2;word-spacing:0;"><strong>&#8220;Getting Started With Rails&#8221; Resources</strong></h2>
<p style="color:#444444;font-family:Georgia, 'Bitstream Charter', serif;line-height:1.5;font-size:16px;margin-bottom:24px;font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;orphans:2;text-align:0;text-indent:0;text-transform:none;white-space:normal;widows:2;word-spacing:0;">There are a ton of resources out there to get you going &#8211; here are some that I found useful:</p>
<p style="color:#444444;font-family:Georgia, 'Bitstream Charter', serif;line-height:1.5;font-size:16px;margin-bottom:24px;font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;orphans:2;text-align:0;text-indent:0;text-transform:none;white-space:normal;widows:2;word-spacing:0;">Glenn Goodrich (<a style="color:#743399;font-family:Georgia, 'Bitstream Charter', serif;line-height:1.5;" href="http://twitter.com/#!/ruprictgeek">@ruprictgeek</a>) has an on-going series at <a style="color:#743399;font-family:Georgia, 'Bitstream Charter', serif;line-height:1.5;" href="http://rubysource.com/">RubySource.com</a> &#8211; I literally got my Mac setup with Rails using <a style="color:#743399;font-family:Georgia, 'Bitstream Charter', serif;line-height:1.5;" href="http://rubysource.com/rails-development-101-rvm/">this post on RVM</a>. His series continues and is integrating <a href="http://documentcloud.github.com/backbone/">Backbone.js</a> and some geospatial flair using <a href="http://leaflet.cloudmade.com/">leaflet</a>, but I had to take a side journey into Ruby 101 and Rails.</p>
<p style="color:#444444;font-family:Georgia, 'Bitstream Charter', serif;line-height:1.5;font-size:16px;margin-bottom:24px;font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;orphans:2;text-align:0;text-indent:0;text-transform:none;white-space:normal;widows:2;word-spacing:0;">The day after I got RVM setup, <a style="color:#743399;font-family:Georgia, 'Bitstream Charter', serif;line-height:1.5;" href="http://twitter.com/#!/robconery">Rob Conery</a> tweeted about $100 off an annual subscription to <a style="color:#743399;font-family:Georgia, 'Bitstream Charter', serif;line-height:1.5;" href="http://tekpub.com/">Tekpub.com</a>. I love love love the <a style="color:#743399;font-family:Georgia, 'Bitstream Charter', serif;line-height:1.5;" href="http://thisdeveloperslife.com/">This Developers Life podcast</a> which Rob edits, and I knew that Tekpub had a <a style="color:#743399;font-family:Georgia, 'Bitstream Charter', serif;line-height:1.5;" href="http://tekpub.com/productions/rails3">Rails 3 series</a> ($28 if you just want that series), so it was an easy sale. Over the break I managed to watch 9 of the 11 videos in that series, and I have to say they are really good in terms of giving you a mix of theory and practice. Rob shows how to use scaffolders, and then how to do it &#8220;better&#8221;. There is quite a bit on testing in here, using the built in test tools as well as rspec. Other goodies covered include generators, haml, factory_girl, cheat, devise and autotest. Rob also mixes it up doing some episodes using VIM, others in Textmate, and others in RubyMine. Some on Linux and some on Mac. Quality work sir!</p>
<p style="color:#444444;font-family:Georgia, 'Bitstream Charter', serif;line-height:1.5;font-size:16px;margin-bottom:24px;font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;orphans:2;text-align:0;text-indent:0;text-transform:none;white-space:normal;widows:2;word-spacing:0;">I really enjoyed a NetTuts video called <a href="http://net.tutsplus.com/tutorials/ruby/the-intro-to-rails-screencast-i-wish-i-had/">&#8220;The Intro to Rails Screencast I Wish I Had&#8221;</a> and is presented by Jeffery Way. Once you have a general understanding of Rails 3, this is a great 45 minute overview of how it all goes together, doing TDD and not using any scaffolding. It also goes into Capybara, which is wicked slick if you&#8217;ve ever tried to do any front-end testing. I&#8217;m definitely going to check out more NetTuts Rails stuff.</p>
<p style="color:#444444;font-family:Georgia, 'Bitstream Charter', serif;line-height:1.5;font-size:16px;margin-bottom:24px;font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;orphans:2;text-align:0;text-indent:0;text-transform:none;white-space:normal;widows:2;word-spacing:0;">I also got the Kindle version of &#8220;<a href="http://www.amazon.com/The-Ruby-Programming-Language-ebook/dp/B0026OR3JO/ref=sr_1_3?s=digital-text&amp;ie=UTF8&amp;qid=1325654153&amp;sr=1-3">The Ruby Programming Language</a>&#8221; book for the whopping sum of $5.98. I&#8217;ve been reading this in chunks mainly as a means to get my mind into reading ruby code, and thus &#8220;knowing&#8221; how to express my intent in the language.</p>
<p style="color:#444444;font-family:Georgia, 'Bitstream Charter', serif;line-height:1.5;font-size:16px;margin-bottom:24px;font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;orphans:2;text-align:0;text-indent:0;text-transform:none;white-space:normal;widows:2;word-spacing:0;">While I strive to be &#8220;all digital&#8221;, having cheat-sheets lying around is always helpful, so I&#8217;m compiling a list of useful ones that I&#8217;ll post sometime soon.</p>
<p style="color:#444444;font-family:Georgia, 'Bitstream Charter', serif;line-height:1.5;font-size:16px;margin-bottom:24px;font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;orphans:2;text-align:0;text-indent:0;text-transform:none;white-space:normal;widows:2;word-spacing:0;">So that&#8217;s it for now. I&#8217;ve got a lot of ideas on things I want to built, and at this point I merely have an idea of how much I don&#8217;t know (linux, nginx, postgres), but I think it&#8217;s gonna be a fun journey!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/dbouwman.wordpress.com/1678/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/dbouwman.wordpress.com/1678/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/dbouwman.wordpress.com/1678/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/dbouwman.wordpress.com/1678/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/dbouwman.wordpress.com/1678/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/dbouwman.wordpress.com/1678/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/dbouwman.wordpress.com/1678/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/dbouwman.wordpress.com/1678/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/dbouwman.wordpress.com/1678/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/dbouwman.wordpress.com/1678/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/dbouwman.wordpress.com/1678/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/dbouwman.wordpress.com/1678/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/dbouwman.wordpress.com/1678/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/dbouwman.wordpress.com/1678/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.davebouwman.com&amp;blog=14377016&amp;post=1678&amp;subd=dbouwman&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://blog.davebouwman.com/2012/01/03/changing-gears-for-2012-getting-real-with-rails/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7f4bfa0a5e4a4e45219a80f9c3cfd6f6?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">dbouwman</media:title>
		</media:content>
	</item>
		<item>
		<title>Handling Circular References ASP.NET MVC Json Serialization</title>
		<link>http://blog.davebouwman.com/2011/12/08/handling-circular-references-asp-net-mvc-json-serialization/</link>
		<comments>http://blog.davebouwman.com/2011/12/08/handling-circular-references-asp-net-mvc-json-serialization/#comments</comments>
		<pubDate>Thu, 08 Dec 2011 15:26:29 +0000</pubDate>
		<dc:creator>Dave Bouwman</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">https://dbouwman.wordpress.com/?p=1673</guid>
		<description><![CDATA[I love the Entity Framework CodeFirst stuff, combined with scaffolding, it makes development go so fast. Fast that is until you drop an API into the mix and want that to serve Json. Here’s my EF Model. Lots of lovely &#8230; <a href="http://blog.davebouwman.com/2011/12/08/handling-circular-references-asp-net-mvc-json-serialization/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.davebouwman.com&amp;blog=14377016&amp;post=1673&amp;subd=dbouwman&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I love the Entity Framework CodeFirst stuff, combined with scaffolding, it makes development go so fast. Fast that is until you drop an API into the mix and want that to serve Json.</p>
<p>Here’s my EF Model. Lots of lovely navigation properties allowing me to get from any entity to any other one. Handy-dandy in .NET land…</p>
<p><img style="background-image:none;border-bottom:0;border-left:0;padding-left:0;padding-right:0;display:inline;border-top:0;border-right:0;padding-top:0;" title="models" border="0" alt="models" src="http://dbouwman.files.wordpress.com/2011/12/models.png?w=550&#038;h=383" width="550" height="383"></p>
<p>But no-bueno when serializing using the out of the box Json serializer…</p>
<pre class="code">[<span style="color:#2b91af;">HttpGet</span>]
<span style="color:blue;">public </span><span style="color:#2b91af;">JsonResult </span>Get(<span style="color:blue;">int </span>id)
{
    <span style="color:blue;">return </span>Json(itemcategoryRepository.Find(id), 
        <span style="color:#2b91af;">JsonRequestBehavior</span>.AllowGet);
}
</pre>
<p>Now, this sucks because how awesomely elegant is that code? What you get is an error like this:</p>
<h4><i>A circular reference was detected while serializing an object of type &#8216;System.Data.Entity.DynamicProxies.ItemCategory_A79…&#8217;.</i></h4>
<h2>Json Serialization Options</h2>
<p>There are a few ways to go here – you could use ViewModels everywhere and sloppy-copy properties across as needed. Even with Automapper to take the drugery out of this, it rubs me the wrong way – what’s the point of using EF if I still have to have a separate set of Poco ViewModels?</p>
<p>Another option is to add a .ToJson method to the EF classes, and emit strings. Lots of control, but… meh.</p>
<p>Using Json.net comes up a lot, but it’s also labor intensive.</p>
<p>What I ended up doing is using Linq to project the EF object graph into an anonymous object graph. Here’s an example that serializes two levels of objects (a list of ItemCategories, each of which can contain a list of Items – see the object model above)</p>
<pre class="code">[<span style="color:#2b91af;">HttpGet</span>]
<span style="color:blue;">public </span><span style="color:#2b91af;">JsonResult </span>List()
{           
    <span style="color:blue;">var </span>data = itemcategoryRepository
        .AllIncluding(itemcategory =&gt; itemcategory.Items);
    <span style="color:green;">//Project into anonymous objects because Serializers
    //can't handle circular refs in the EF magic
    </span><span style="color:blue;">var </span>collection = data.Select(x =&gt; <span style="color:blue;">new
    </span>{
        id = x.Id,
        name = x.Name,
        items = x.Items.Select(item =&gt; <span style="color:blue;">new
        </span>{
            id=item.Id,
            name = item.Name
        })
    });
    <span style="color:blue;">return </span>Json(collection, 
        <span style="color:#2b91af;">JsonRequestBehavior</span>.AllowGet);
}
</pre>
<p>I like this solution because I have control of the Json in the controller, rather than forcing an object to always serialize the same way in all cases (sometimes I want the Item to serialize it’s Entries, but only when I’m getting a single Item).</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/dbouwman.wordpress.com/1673/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/dbouwman.wordpress.com/1673/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/dbouwman.wordpress.com/1673/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/dbouwman.wordpress.com/1673/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/dbouwman.wordpress.com/1673/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/dbouwman.wordpress.com/1673/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/dbouwman.wordpress.com/1673/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/dbouwman.wordpress.com/1673/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/dbouwman.wordpress.com/1673/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/dbouwman.wordpress.com/1673/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/dbouwman.wordpress.com/1673/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/dbouwman.wordpress.com/1673/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/dbouwman.wordpress.com/1673/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/dbouwman.wordpress.com/1673/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.davebouwman.com&amp;blog=14377016&amp;post=1673&amp;subd=dbouwman&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://blog.davebouwman.com/2011/12/08/handling-circular-references-asp-net-mvc-json-serialization/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7f4bfa0a5e4a4e45219a80f9c3cfd6f6?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">dbouwman</media:title>
		</media:content>

		<media:content url="http://dbouwman.files.wordpress.com/2011/12/models.png" medium="image">
			<media:title type="html">models</media:title>
		</media:content>
	</item>
		<item>
		<title>ASP.NET MVC3 and 404&#8217;s for Area Controllers</title>
		<link>http://blog.davebouwman.com/2011/12/08/asp-net-mvc3-and-404s-for-area-controllers/</link>
		<comments>http://blog.davebouwman.com/2011/12/08/asp-net-mvc3-and-404s-for-area-controllers/#comments</comments>
		<pubDate>Thu, 08 Dec 2011 15:07:01 +0000</pubDate>
		<dc:creator>Dave Bouwman</dc:creator>
				<category><![CDATA[asp.net mvc]]></category>

		<guid isPermaLink="false">https://dbouwman.wordpress.com/?p=1670</guid>
		<description><![CDATA[So I’m a big fan of ASP.NET MVC, and the general idea of convention over configuration, but I spent a few hours late last night fighting with something, and the Google was no help, so hopefully this helps someone else… &#8230; <a href="http://blog.davebouwman.com/2011/12/08/asp-net-mvc3-and-404s-for-area-controllers/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.davebouwman.com&amp;blog=14377016&amp;post=1670&amp;subd=dbouwman&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>So I’m a big fan of ASP.NET MVC, and the general idea of convention over configuration, but I spent a few hours late last night fighting with something, and the Google was no help, so hopefully this helps someone else…</p>
<p>The situation:</p>
<p>I have ASP.NET MVC3 project, and I created an Area for my json API.&nbsp; In my area I create a simple controller called CategoriesController, and I registered some routes in my AreaRegistration…</p>
<pre class="code"><span style="color:green;">//handles get for a list of all categories
</span>context.MapRoute(
    <span style="color:#a31515;">"ListCategories"</span>,
    <span style="color:#a31515;">"API/Categories"</span>,
    <span style="color:blue;">new </span>{ controller = <span style="color:#a31515;">"Categories"</span>, action = <span style="color:#a31515;">"List" </span>}
);
</pre>
<p>I used the very awesome MvcRouteUnitTester (on Nuget) to write unit tests to make sure this route was working. All systems go!</p>
<p>Before I started writing tests against the actual controller, I used a browser to hit <a href="http://localhost/myapp/API/Categories">http://localhost/myapp/API/Categories</a> – which should match this route, and spit back some “hello world” json. I get a 404. </p>
<p>Even with the unit tests, I decided to pull in the <a href="http://nuget.org/packages/routedebugger">RouteDebugger</a> NuGet package, just to make sure that the routes were working, and that showed that all was good</p>
<p><img style="background-image:none;border-bottom:0;border-left:0;padding-left:0;padding-right:0;display:inline;border-top:0;border-right:0;padding-top:0;" title="routes" border="0" alt="routes" src="http://dbouwman.files.wordpress.com/2011/12/routes.png?w=653&#038;h=277" width="653" height="277"></p>
<p>So, I’m stumped. No Exceptions, everything seems to line up, but still a 404. </p>
<p>After about 15 minutes of useless Googling, I remember that I’ve got logging setup in this project, and that’s in my Global.asax.cs and tied into Application_Error…</p>
<pre class="code"><span style="color:blue;">protected void </span>Application_Error()
{
    <span style="color:#2b91af;">Exception </span>lastException = Server.GetLastError();
    <span style="color:blue;">var </span>logger = <span style="color:#2b91af;">DependencyResolver</span>.Current.GetService&lt;<span style="color:#2b91af;">ILogger</span>&gt;();
    logger.Fatal(lastException);
}
</pre>
<p>SO I look in the log… and find this error</p>
<p>The controller for path &#8216;/statsme/API/Categories/List&#8217; was not found or does not implement IController.</p>
<p>(full trace because this will help Google index this when others go lookin)…</p>
<pre class="code">Message :The controller for path '/statsme/API/Categories/List' was not found or does not implement IController.
Source :System.Web.Mvc
Stack Trace :   at System.Web.Mvc.DefaultControllerFactory.GetControllerInstance(RequestContext requestContext, Type controllerType)
   at System.Web.Mvc.DefaultControllerFactory.CreateController(RequestContext requestContext, String controllerName)
   at System.Web.Mvc.MvcHandler.ProcessRequestInit(HttpContextBase httpContext, IController&amp; controller, IControllerFactory&amp; factory)
   at System.Web.Mvc.MvcHandler.&lt;&gt;c__DisplayClass6.&lt;BeginProcessRequest&gt;b__2()
   at System.Web.Mvc.SecurityUtil.&lt;&gt;c__DisplayClassb`1.&lt;ProcessInApplicationTrust&gt;b__a()
   at System.Web.Mvc.SecurityUtil.ProcessInApplicationTrust[TResult](Func`1 func)
   at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
   at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean&amp; completedSynchronously)
TargetSite :System.Web.Mvc.IController GetControllerInstance(System.Web.Routing.RequestContext, System.Type)
</pre>
<p>Ok, WTF? CategoriesController inherits from a BaseController which inherits from Controller, so we’re clear on the IController bit. I know the class is there… what is going on? </p>
<p>Google… Google… more Google. Random hacking… cursing… Ah HA!</p>
<p>The issue was the namespace on my controller. Turns out that MVC has a convention that the area name is expected to be in the namespace of the controller.</p>
<p>So – I had StatsMe.API.CategoriesController, but MVC was looking for StatsMe.<strong>Areas</strong>.API.CategoriesController.</p>
<p>What finally tipped me off was some stuff in the RouteDebugger output…</p>
<p><img style="background-image:none;border-bottom:0;border-left:0;padding-left:0;padding-right:0;display:inline;border-top:0;border-right:0;padding-top:0;" title="namespaces" border="0" alt="namespaces" src="http://dbouwman.files.wordpress.com/2011/12/namespaces.png?w=487&#038;h=287" width="487" height="287"></p>
<p>Annoying because the error message really could have helped out by saying “Hey – I’m looking for StatsMe.Areas.API.CategoriesController and I can’t find it”, rather than the very generic message it spit out.</p>
<h2>Configuration Overriding Convention</h2>
<p>As we all know, in MVC where there is a convention, there is a way to override this, and that’s in the route definition… like so…</p>
<pre class="code">context.MapRoute(
    <span style="color:#a31515;">"ListCategories"</span>,
    <span style="color:#a31515;">"API/Categories"</span>,
    <span style="color:blue;">new </span>{ controller = <span style="color:#a31515;">"Categories"</span>, action = <span style="color:#a31515;">"List" </span>},
    <span style="color:blue;">new</span>[] { <span style="color:#a31515;">"StatsMe.API.Controllers" </span>} 
);
</pre>
<p>Viola! Hope this helps someone else avoid a few hours of frustration.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/dbouwman.wordpress.com/1670/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/dbouwman.wordpress.com/1670/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/dbouwman.wordpress.com/1670/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/dbouwman.wordpress.com/1670/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/dbouwman.wordpress.com/1670/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/dbouwman.wordpress.com/1670/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/dbouwman.wordpress.com/1670/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/dbouwman.wordpress.com/1670/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/dbouwman.wordpress.com/1670/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/dbouwman.wordpress.com/1670/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/dbouwman.wordpress.com/1670/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/dbouwman.wordpress.com/1670/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/dbouwman.wordpress.com/1670/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/dbouwman.wordpress.com/1670/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.davebouwman.com&amp;blog=14377016&amp;post=1670&amp;subd=dbouwman&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://blog.davebouwman.com/2011/12/08/asp-net-mvc3-and-404s-for-area-controllers/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7f4bfa0a5e4a4e45219a80f9c3cfd6f6?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">dbouwman</media:title>
		</media:content>

		<media:content url="http://dbouwman.files.wordpress.com/2011/12/routes.png" medium="image">
			<media:title type="html">routes</media:title>
		</media:content>

		<media:content url="http://dbouwman.files.wordpress.com/2011/12/namespaces.png" medium="image">
			<media:title type="html">namespaces</media:title>
		</media:content>
	</item>
		<item>
		<title>Adventures in the Real World: How I Spent my Fall</title>
		<link>http://blog.davebouwman.com/2011/11/29/adventures-in-the-real-world-how-i-spent-my-fall/</link>
		<comments>http://blog.davebouwman.com/2011/11/29/adventures-in-the-real-world-how-i-spent-my-fall/#comments</comments>
		<pubDate>Tue, 29 Nov 2011 19:46:48 +0000</pubDate>
		<dc:creator>Dave Bouwman</dc:creator>
				<category><![CDATA[Conferences]]></category>
		<category><![CDATA[Travel]]></category>

		<guid isPermaLink="false">https://dbouwman.wordpress.com/?p=1665</guid>
		<description><![CDATA[Before I jump back into technical blog posts, I thought I&#8217;d share a little about my adventures of the last few months as it&#8217;s been hectic but quite a lot of fun. As noted in the previous post, things got &#8230; <a href="http://blog.davebouwman.com/2011/11/29/adventures-in-the-real-world-how-i-spent-my-fall/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.davebouwman.com&amp;blog=14377016&amp;post=1665&amp;subd=dbouwman&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Before I jump back into technical blog posts, I thought I&#8217;d share a little about my adventures of the last few months as it&#8217;s been hectic but quite a lot of fun.
<p>As noted in the previous post, things got started back in September with the FOSS4G conference. That post sums things up pretty well, so I’ll just move the story forward from there… up up and away!
<p><a href="http://dbouwman.files.wordpress.com/2011/11/clouds.jpg"><img style="background-image:none;border-bottom:0;border-left:0;padding-left:0;padding-right:0;display:inline;border-top:0;border-right:0;padding-top:0;" title="clouds" border="0" alt="clouds" src="http://dbouwman.files.wordpress.com/2011/11/clouds_thumb.jpg?w=616&#038;h=616" width="616" height="616"></a><br />
<h2>Orlando</h2>
<p>The following week I was in Orlando doing some work with a client. While DTS is headquartered in Orlando, our offices are in Avalon Park, which is well outside the city itself. But, this client is downtown, and this gave me a chance to check out another area of the city. I do enough business travel that staying in yet another cookie cutter hotel has long lost it’s appeal, so when I can, I step out and stay at non-chain places – like the <a href="http://eoinn.com/">OE Inn</a>. Great little place, right on Lake Eola Park (photo below), half a block to the client’s office, a Panera Bread on the main floor, and a great sushi place around the block. Since this was right after FOSS4G, and I had my evenings free, node hacking was in order (more on this in the next post!).
<p><a href="http://dbouwman.files.wordpress.com/2011/11/orlando-1.jpg"><img style="background-image:none;border-bottom:0;border-left:0;padding-left:0;padding-right:0;display:inline;border-top:0;border-right:0;padding-top:0;" title="Orlando-1" border="0" alt="Orlando-1" src="http://dbouwman.files.wordpress.com/2011/11/orlando-1_thumb.jpg?w=616&#038;h=616" width="616" height="616"></a>&nbsp;<br />
<h2>Next Stop… Kentucky</h2>
<p>From time to time we have internal meetings – usually in Orlando, and usually out at Avalon Park. This was getting kinda boring, so Dave Buckley (our VP of GIS and <a href="http://www.dtswildfire.com">Wildfire</a> dude) suggested we do something different… like tie the meetings in with some caving in Kentucky. And so it was that 8 of the DTS core team met up at Mammoth Cave National Park for a mix of meetings, burbon and caving.</p>
<p><a href="http://dbouwman.files.wordpress.com/2011/11/caves-1.jpg"><img style="background-image:none;border-bottom:0;border-left:0;padding-left:0;padding-right:0;display:inline;border-top:0;border-right:0;padding-top:0;" title="caves-1" border="0" alt="caves-1" src="http://dbouwman.files.wordpress.com/2011/11/caves-1_thumb.jpg?w=616&#038;h=616" width="616" height="616"></a></p>
<p>This was the easy walking-on-the-path Crystal Cave. While the iPhone 4 can take good photos, low-light conditions are not it’s forte.</p>
<p><a href="http://dbouwman.files.wordpress.com/2011/11/slithering.jpg"><img style="background-image:none;border-bottom:0;border-left:0;padding-left:0;padding-right:0;display:inline;border-top:0;border-right:0;padding-top:0;" title="slithering" border="0" alt="slithering" src="http://dbouwman.files.wordpress.com/2011/11/slithering_thumb.jpg?w=616&#038;h=616" width="616" height="616"></a></p>
<p>This is from the “Wild Cave Tour” which had a few “tight spots” and a fair amount of crawling around. A great way to spend 4 hours, and get photos of the DTS core team looking like convicts…</p>
<p><a href="http://dbouwman.files.wordpress.com/2011/11/cave-team.jpg"><img style="background-image:none;border-bottom:0;border-left:0;padding-left:0;padding-right:0;display:inline;border-top:0;border-right:0;padding-top:0;" title="cave-team" border="0" alt="cave-team" src="http://dbouwman.files.wordpress.com/2011/11/cave-team_thumb.jpg?w=616&#038;h=616" width="616" height="616"></a></p>
<h2>Colorado River Trip</h2>
<p>From Kentucky it was back home to Fort Collins, and then off to Fruita to float the Ruby Horse Thief section of the Colorado river. For the last 3 years we’ve been doing this family river trip with a group of friends. This year the dates got moved around a bunch due to my travel schedule so it was a smaller group, but still a ton of fun for all involved. </p>
<p><a href="http://dbouwman.files.wordpress.com/2011/11/colorado-river.jpg"><img style="background-image:none;border-bottom:0;border-left:0;padding-left:0;padding-right:0;display:inline;border-top:0;border-right:0;padding-top:0;" title="colorado-river" border="0" alt="colorado-river" src="http://dbouwman.files.wordpress.com/2011/11/colorado-river_thumb.jpg?w=616&#038;h=616" width="616" height="616"></a></p>
<p>I’m not much of a “water” person, and this is perfect – no real whitewater, but still a lot of fun camping and being out in the desert. </p>
<h2>Off to Europe</h2>
<p>I was at home for a few weeks and then headed out to Europe for a 10 day whirlwind tour of sorts. The basic plan was to go do a few presentations at the Esri European User Conference, which was held in Madrid. Our Spanish partner in the Wildfire business, Joaquin Ramirez / Technosylva, has come over to the US for the last two Esri User Conferences in San Diego, so it only seemed fair that we come over there since it was in Spain. And since we were going over to Europe, why not tack on some meetings in Zurich and Geneva?</p>
<h2>Zurich</h2>
<p>We got micro rooms at non-micro rates right near the lake and downtown. I managed to get out and walk about (with a side-trip to the Apple store to get a USB-Cat5 dongle/adapter). Stunning place.</p>
<p><a href="http://dbouwman.files.wordpress.com/2011/11/zurich-1.jpg"><img style="background-image:none;border-bottom:0;border-left:0;padding-left:0;padding-right:0;display:inline;border-top:0;border-right:0;padding-top:0;" title="zurich-1" border="0" alt="zurich-1" src="http://dbouwman.files.wordpress.com/2011/11/zurich-1_thumb.jpg?w=616&#038;h=616" width="616" height="616"></a></p>
<h2>Off to Madrid</h2>
<p>When dealing with airlines, nothing is straight forward, so while it would make sense to fly from Geneva (we drove down from Zurich) directly to Madrid, that particular flight was gonna cost most than the rest of the trip combined. So, we hop from Geneva, back to Frankfurt and then down to Madrid… much farther, but through the miracle of airline math, less than 10% of the price of the direct flight. Go figure. Of note – Spanair really crams the seats onto their planes. If you are 6’ or taller, you’re gonna have a leg-room issue. I think there were 8 additional rows of seats on this plane as compared to the Lufthansa flight… in the exact same model of aircraft. Ok, back to it.</p>
<p><a href="http://dbouwman.files.wordpress.com/2011/11/jack-en-espana.jpg"><img style="background-image:none;border-bottom:0;border-left:0;padding-left:0;padding-right:0;display:inline;border-top:0;border-right:0;padding-top:0;" title="jack-en-espana" border="0" alt="jack-en-espana" src="http://dbouwman.files.wordpress.com/2011/11/jack-en-espana_thumb.jpg?w=616&#038;h=616" width="616" height="616"></a></p>
<p>Ah Jack. Whenever possible, I always make his plenary sessions. Sure I’ve heard the content before, but as someone who does a lot of speaking, there is a lot I can learn from Jack’s style and how he presents his vision, and structures the talk in general. Some people call this kool-aid, I call it a great speaker. Moving on… the conference was fun, and our talks went really well – packed rooms for all of them (special thanks to Ismael Chivite who I believe corralled a mess of people into my talk about deploying apps to the cloud!). But the real fun is after hours! We went to the Mercado San Miguel and liked it so much we want back the next night. This place is how WholeFoods would do a tapas / wine bar / open space. Awesome fun.</p>
<p><a href="http://dbouwman.files.wordpress.com/2011/11/san-miguel.jpg"><img style="background-image:none;border-bottom:0;border-left:0;padding-left:0;padding-right:0;display:inline;border-top:0;border-right:0;padding-top:0;" title="san-miguel" border="0" alt="san-miguel" src="http://dbouwman.files.wordpress.com/2011/11/san-miguel_thumb.jpg?w=616&#038;h=616" width="616" height="616"></a></p>
<p>And apparently you can’t eat in Spain without consuming Jamon. Nom Nom Nom!</p>
<p><a href="http://dbouwman.files.wordpress.com/2011/11/jamon-1.jpg"><img style="background-image:none;border-bottom:0;border-left:0;padding-left:0;padding-right:0;display:inline;border-top:0;border-right:0;padding-top:0;" title="jamon-1" border="0" alt="jamon-1" src="http://dbouwman.files.wordpress.com/2011/11/jamon-1_thumb.jpg?w=616&#038;h=616" width="616" height="616"></a></p>
<h2>Seville</h2>
<p>So the conference wrapped up and we jumped on a train with Joaquin, and headed to Seville for a few days of “strategic planning” for DTSWildfire. And by strategic we mean…<a href="http://dbouwman.files.wordpress.com/2011/11/seville-1.jpg"><img style="background-image:none;border-bottom:0;border-left:0;padding-left:0;padding-right:0;display:inline;border-top:0;border-right:0;padding-top:0;" title="seville-1" border="0" alt="seville-1" src="http://dbouwman.files.wordpress.com/2011/11/seville-1_thumb.jpg?w=616&#038;h=616" width="616" height="616"></a></p>
<p>and…</p>
<p><a href="http://dbouwman.files.wordpress.com/2011/11/bucks-birthday-lunch.jpg"><img style="background-image:none;border-bottom:0;border-left:0;padding-left:0;padding-right:0;display:inline;border-top:0;border-right:0;padding-top:0;" title="bucks-birthday-lunch" border="0" alt="bucks-birthday-lunch" src="http://dbouwman.files.wordpress.com/2011/11/bucks-birthday-lunch_thumb.jpg?w=616&#038;h=616" width="616" height="616"></a></p>
<p>and…</p>
<p><a href="http://dbouwman.files.wordpress.com/2011/11/toro.jpg"><img style="background-image:none;border-bottom:0;border-left:0;padding-left:0;padding-right:0;display:inline;border-top:0;border-right:0;padding-top:0;" title="toro" border="0" alt="toro" src="http://dbouwman.files.wordpress.com/2011/11/toro_thumb.jpg?w=616&#038;h=616" width="616" height="616"></a></p>
<p>Somewhere along the line we did talk about wildfire products and markets and marketing and general strategy, but in a very civilized manner. </p>
<h2>Back Home</h2>
<p>I have a 5 year old, which means that Halloween is big deal. Thanks to the magic of jet travel I was able to get from Madrid to Fort Collins (via Frankfurt… of course) in a single (very long) day, arriving just in time to go trick or treating. In keeping with the general frenzy of the fall, the next day my wife went to New York to visit her sister and our new nephew, so I was a solo parent for about a week. This was actually really good, because it was perfectly acceptable for me to go to sleep at 7:30 when my son goes to bed. And it’s always nice to get outside and have a picnic in Lory State Park…</p>
<p><a href="http://dbouwman.files.wordpress.com/2011/11/kai-1.jpg"><img style="background-image:none;border-bottom:0;border-left:0;padding-left:0;padding-right:0;display:inline;border-top:0;border-right:0;padding-top:0;" title="kai-1" border="0" alt="kai-1" src="http://dbouwman.files.wordpress.com/2011/11/kai-1_thumb.jpg?w=616&#038;h=616" width="616" height="616"></a></p>
<p>That was supposed to be it for travel. Note the “supposed” part. But with our acquisition of <a href="www.vueworks.com">VueWorks</a> earlier this year, we also acquired their annual user conference. And since I’m helping define some major changes in the product, I had to pop over to Orlando for a few days of strategic meetings (see how that comes up so often?) and then do a talk on the vision for the product line. </p>
<p><a href="http://dbouwman.files.wordpress.com/2011/11/vw-speaking.jpg"><img style="background-image:none;border-bottom:0;border-left:0;padding-left:0;padding-right:0;display:inline;border-top:0;border-right:0;padding-top:0;" title="vw-speaking" border="0" alt="vw-speaking" src="http://dbouwman.files.wordpress.com/2011/11/vw-speaking_thumb.jpg?w=616&#038;h=616" width="616" height="616"></a></p>
<p>(Note: the vision does not involve “pivoting to monetize crowd sourced photos of giant dump trucks” – I’ll leave that up to you.)</p>
<p>In contrast to my previous trip to Orland, this time I was staying at the Disney Coronado Springs – the very epitome of corporate lodging. Don’t get me wrong, it was all fine, but just a little to homogenized for my liking. </p>
<p>And that about winds up the last few months. Thanks for slogging through this – hope it was a fun diversion from the usual tech-centric posts. With all that travel out of the way, I’ll be working on some posts about real-time collaboration, discussing two research apps we built – one using node and socket.io and the other using ASP.NET MVC and SignalR. </p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/dbouwman.wordpress.com/1665/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/dbouwman.wordpress.com/1665/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/dbouwman.wordpress.com/1665/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/dbouwman.wordpress.com/1665/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/dbouwman.wordpress.com/1665/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/dbouwman.wordpress.com/1665/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/dbouwman.wordpress.com/1665/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/dbouwman.wordpress.com/1665/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/dbouwman.wordpress.com/1665/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/dbouwman.wordpress.com/1665/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/dbouwman.wordpress.com/1665/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/dbouwman.wordpress.com/1665/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/dbouwman.wordpress.com/1665/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/dbouwman.wordpress.com/1665/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.davebouwman.com&amp;blog=14377016&amp;post=1665&amp;subd=dbouwman&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://blog.davebouwman.com/2011/11/29/adventures-in-the-real-world-how-i-spent-my-fall/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7f4bfa0a5e4a4e45219a80f9c3cfd6f6?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">dbouwman</media:title>
		</media:content>

		<media:content url="http://dbouwman.files.wordpress.com/2011/11/clouds_thumb.jpg" medium="image">
			<media:title type="html">clouds</media:title>
		</media:content>

		<media:content url="http://dbouwman.files.wordpress.com/2011/11/orlando-1_thumb.jpg" medium="image">
			<media:title type="html">Orlando-1</media:title>
		</media:content>

		<media:content url="http://dbouwman.files.wordpress.com/2011/11/caves-1_thumb.jpg" medium="image">
			<media:title type="html">caves-1</media:title>
		</media:content>

		<media:content url="http://dbouwman.files.wordpress.com/2011/11/slithering_thumb.jpg" medium="image">
			<media:title type="html">slithering</media:title>
		</media:content>

		<media:content url="http://dbouwman.files.wordpress.com/2011/11/cave-team_thumb.jpg" medium="image">
			<media:title type="html">cave-team</media:title>
		</media:content>

		<media:content url="http://dbouwman.files.wordpress.com/2011/11/colorado-river_thumb.jpg" medium="image">
			<media:title type="html">colorado-river</media:title>
		</media:content>

		<media:content url="http://dbouwman.files.wordpress.com/2011/11/zurich-1_thumb.jpg" medium="image">
			<media:title type="html">zurich-1</media:title>
		</media:content>

		<media:content url="http://dbouwman.files.wordpress.com/2011/11/jack-en-espana_thumb.jpg" medium="image">
			<media:title type="html">jack-en-espana</media:title>
		</media:content>

		<media:content url="http://dbouwman.files.wordpress.com/2011/11/san-miguel_thumb.jpg" medium="image">
			<media:title type="html">san-miguel</media:title>
		</media:content>

		<media:content url="http://dbouwman.files.wordpress.com/2011/11/jamon-1_thumb.jpg" medium="image">
			<media:title type="html">jamon-1</media:title>
		</media:content>

		<media:content url="http://dbouwman.files.wordpress.com/2011/11/seville-1_thumb.jpg" medium="image">
			<media:title type="html">seville-1</media:title>
		</media:content>

		<media:content url="http://dbouwman.files.wordpress.com/2011/11/bucks-birthday-lunch_thumb.jpg" medium="image">
			<media:title type="html">bucks-birthday-lunch</media:title>
		</media:content>

		<media:content url="http://dbouwman.files.wordpress.com/2011/11/toro_thumb.jpg" medium="image">
			<media:title type="html">toro</media:title>
		</media:content>

		<media:content url="http://dbouwman.files.wordpress.com/2011/11/kai-1_thumb.jpg" medium="image">
			<media:title type="html">kai-1</media:title>
		</media:content>

		<media:content url="http://dbouwman.files.wordpress.com/2011/11/vw-speaking_thumb.jpg" medium="image">
			<media:title type="html">vw-speaking</media:title>
		</media:content>
	</item>
		<item>
		<title>FOSS4G: Rockin the Mile High City</title>
		<link>http://blog.davebouwman.com/2011/09/21/foss4g-rockin-the-mile-high-city/</link>
		<comments>http://blog.davebouwman.com/2011/09/21/foss4g-rockin-the-mile-high-city/#comments</comments>
		<pubDate>Wed, 21 Sep 2011 23:28:41 +0000</pubDate>
		<dc:creator>Dave Bouwman</dc:creator>
				<category><![CDATA[Conferences]]></category>
		<category><![CDATA[Open Source]]></category>

		<guid isPermaLink="false">http://blog.davebouwman.com/?p=1630</guid>
		<description><![CDATA[I had a pretty good idea that I&#8217;d be blown away by the stuff going on at FOSS4G, but the conference exceeded my expectations. Sure, a lot of the sessions I went to were pretty cutting edge, but that was the point &#8230; <a href="http://blog.davebouwman.com/2011/09/21/foss4g-rockin-the-mile-high-city/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.davebouwman.com&amp;blog=14377016&amp;post=1630&amp;subd=dbouwman&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I had a pretty good idea that I&#8217;d be blown away by the stuff going on at FOSS4G, but the conference exceeded my expectations. Sure, a lot of the sessions I went to were pretty cutting edge, but that was the point for me &#8211; to see just where the edge is, and who&#8217;s living on it.</p>
<p>One thing that struck me, and apparently also <a href="http://www.stulester.co.uk/2011/09/foss4g-2011-summary/">Stu Lester</a> - the maturity of the FOSS GIS software was really on display. That said, I&#8217;m not about to write off a certain large vendor by any means &#8211; but make no mistake &#8211; FOSS4G software is certainly usable beyond the &#8220;gcc&#8221; crowd. I will note that the only Windows machine I saw was someone who&#8217;d just grabbed the Win8 bits, so the crowd was certainly it&#8217;s roots.</p>
<p>Some particularly cool things that stood out for me&#8230;</p>
<p>PostGIS Cloud Services are clearly hot. <a href="http://spacialdb.com/">SpacialDB</a> and <a href="https://cartodb.com/">CartoDB</a> are leading the charge here. Both will be offered as services, and both have their own take on how this should work. Javier de le Torre (@jatorre) and Simon Tokumine (@tokumin) of Vizzuality were pretty direct in saying that CartoDB was modeled on Google Fusion Tables, and the demo shown was really slick. Here&#8217;s a <a href="http://vimeo.com/29390641">video</a> of CartoDB accessed from an iPad.</p>
<p>On the SpacialDB side of things, Kashif Rasul (@krasul) and Shoaib Burq (@sabman) did a tutorial/talk on <a href="http://2011.foss4g.org/sessions/tutorial-async-and-realtime-geo-applications-nodejs">Async apps with NodeJs</a> and focused more on how to use NodeJS for real-time collaboration, and just glazed over SpacialDB. One thing that stood out to me was that when you created a &#8220;table&#8221; you got back 4 keys for the 4 HTTP verbs. Kinda slick, and I&#8217;ve since used their example code to hack up some other stuff (read: blog later). Notably they were also the only people talking about <a href="http://leaflet.cloudmade.com/">LeafletJS</a>. Not sure what the deal is with that, as Leaflet is pretty frikin&#8217; sweet, but whatever.</p>
<p>Back to PostGIS &#8211; the upcoming version 2.0 will seriously raise the bar with the addition of has more built-in features &#8211; from &#8220;clean&#8221; operations, to 3D support to raster algebra / focal operations (as in Spatial Analyst &#8216;fu in the database). Quite simply this is gonna be a huge release &#8211; I think I heard that the beta is slated for end of the year. More info <a href="http://postgis.refractions.net/documentation/manual-svn/">here</a>.</p>
<p>Vizzuality also released <a href="http://vizzuality.com/cartoset">CartoSet</a> (on <a href="https://github.com/Vizzuality/cartoset">github</a>), a Rails framework for simple &#8220;Home/Explore/Details&#8221; type apps. As someone who cares about the design of web apps, I think this is a great idea. Standardize what can be standardized, but leave the UI completely open ended &#8211; a sure way to avoid cookie cutter sites. Vizzuality++</p>
<p><a href="http://nodejs.org/">NodeJs</a> - the new new shiny thing, javascript on the server, async, non-blocking goodies that few people are sure about how to leverage effectively (case in point: all demos are &#8220;chat&#8221;). Sure you can use <a href="http://expressjs.com/">Express</a> and create server side MVC apps, but since that type of app is well serviced by a host of other frameworks, I&#8217;m not seeing that as the real use-case. Realtime steaming seems to be the best fit at this time, and it certainly is fun to play with. If you are on Windows and want to play with Node, check out this post on using <a href="http://www.hanselman.com/blog/WebMatrixAndNodejsTheEasiestWayToGetStartedWithNodeOnWindows.aspx">Node with IIS and WebMatrix</a>.</p>
<p>A nice thing about a smaller geo conference is that you are much more likely to actually talk with vendors. So, talked with the folks at SkyGone, and got the skinny &#8211; although a &#8220;cloud&#8221; provider, they are NOT like EC2. The difference starts with a &#8220;system builder&#8221; tool which allows you to layout an entire multi-server system, using pre-configured machine images (I&#8217;m sure they have some other name). What really struck me was that a running instance can be scaled by adding resources on the fly (think scaling from an EC2 micro-instance to an x-large instance on the fly without launching new instances). This is especially attractive for emergency response applications which need to run with minimal resources until an event occurs and then needs to scale up quickly.</p>
<p>Design Matters&#8230;  attendees packed the room to hear Sergio Alvarez (@saleiva) of Vizzuality talk about design. Since virtually every Vizzuality project I&#8217;ve seen is a work of art, you know the room was packed. Sergio walked through a series of design principles, giving examples of most from their work or via interesting videos. I&#8217;ll credit Apple and the app store with making the value of design obvious to a much wider audience. Simply put &#8211; ugly apps will fail.</p>
<p>Ok, I did not want this to be atotal Vizzuality love-fest, but when you show up and every presentation your team gives is top notch, you deserve credit. So, in that vein, check out this <a href="http://xavijam.github.com/html5-foss4g/">javascript web preso on HTML5</a> hosted at github by Javier Alvarez (@xavijam) and while you&#8217;re in the mood for cool HTML5 stuff, check out his <a href="http://xavijam.github.com/">profile page</a>. Question: Where do I find people like this? <img src='http://s1.wp.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p>Overall, there was a ton of great content, but realistically there is only so much you can absorb in a few short days (ok, the late nights in LoDo may have had some impact!). Beyond reconnecting with old friends and meeting tweeple for real &#8211;  for me, the long term value from an event like this is getting the lay of the land, and knowing what tools and technologies are at a point where I feel we can use them in solutions. From here, the hard work of getting up to speed on those technologies starts &#8211; watch for blog posts!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/dbouwman.wordpress.com/1630/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/dbouwman.wordpress.com/1630/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/dbouwman.wordpress.com/1630/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/dbouwman.wordpress.com/1630/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/dbouwman.wordpress.com/1630/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/dbouwman.wordpress.com/1630/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/dbouwman.wordpress.com/1630/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/dbouwman.wordpress.com/1630/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/dbouwman.wordpress.com/1630/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/dbouwman.wordpress.com/1630/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/dbouwman.wordpress.com/1630/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/dbouwman.wordpress.com/1630/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/dbouwman.wordpress.com/1630/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/dbouwman.wordpress.com/1630/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.davebouwman.com&amp;blog=14377016&amp;post=1630&amp;subd=dbouwman&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://blog.davebouwman.com/2011/09/21/foss4g-rockin-the-mile-high-city/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7f4bfa0a5e4a4e45219a80f9c3cfd6f6?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">dbouwman</media:title>
		</media:content>
	</item>
		<item>
		<title>FOSS4G: Fun and Games in Denver</title>
		<link>http://blog.davebouwman.com/2011/08/19/foss4g-fun-and-games-in-denver/</link>
		<comments>http://blog.davebouwman.com/2011/08/19/foss4g-fun-and-games-in-denver/#comments</comments>
		<pubDate>Fri, 19 Aug 2011 23:00:24 +0000</pubDate>
		<dc:creator>Dave Bouwman</dc:creator>
				<category><![CDATA[Conferences]]></category>
		<category><![CDATA[NodeJs]]></category>

		<guid isPermaLink="false">https://dbouwman.wordpress.com/2011/08/19/foss4g-fun-and-games-in-denver/</guid>
		<description><![CDATA[I’m pretty excited about FOSS4G – the last “big” non-Esri geo event I made it to was (the now defunct) GeoWeb conference back in 2009, and it was a blast. Nothing like hanging out with a bunch of crazy smart &#8230; <a href="http://blog.davebouwman.com/2011/08/19/foss4g-fun-and-games-in-denver/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.davebouwman.com&amp;blog=14377016&amp;post=1627&amp;subd=dbouwman&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I’m pretty excited about <a href="foss4g.org">FOSS4G</a> – the last “big” non-Esri geo event I made it to was (the now defunct) <a href="http://www.geowebconference.org/">GeoWeb</a> conference back in 2009, and it was a blast. Nothing like hanging out with a bunch of <a href="http://twitter.com/#!/cageyjames">crazy</a> <a href="http://twitter.com/#!/ajturner">smart</a> people who believe that they can change the world with some creative / inspired code involving maps.</p>
<p>I expect FOSS4G to be similar – lots of great, creative ideas, lots of code and “how-to-make-this-rock-now” type sessions. And beer.</p>
<p>So, why am I going to a “dirty-hippy-give-it-all-away-GPL-forevah-yo” event? After all, building on the Esri platform is (and will continue to be) my bread and butter. The simple fact is that spatial has not been “special” for a long time now. Integration and scalability are key factors when designing systems and products – and this applies across all software markets. Esri has a great software stack, and even they are embracing the use of open source technologies. Python is an integral part of the ArcGIS ecosystem, and postgresql is the database in their cloud solution. At 10.1 there is PostGIS native access <a href="http://www.spatiallyadjusted.com/2011/08/18/you-cant-edit-spatial-rdbms-with-arcgis-for-desktop-without-sde/">via Spatial Data Service</a>. And then there is the whole <a href="http://www.esri.com/library/whitepapers/pdfs/geoservices-rest-spec.pdf">GeoServices REST Specification</a> (pdf).  So, from my place in the world, I want to get the skinny on this stuff, and FOSS4G is the place to be!</p>
<p>Sure, some of it’s pretty bleeding edge (I’m not likely to propose <a href="http://2011.foss4g.org/sessions/tutorial-async-and-realtime-geo-applications-nodejs">nodejs</a> + <a href="http://2011.foss4g.org/sessions/new-geodata-tool-set-couchdb-and-nodejs">couchdb</a> to a state agency!) but that’s not the point. As a developer, in order to keep my edge, I need to continually challenge myself. I do this by learning <a href="http://blog.davebouwman.com/2011/08/17/jumping-in-the-deep-end/">new languages, tools and techniques</a>. So maybe I don’t *implement* solutions on nodejs for my clients, but upping my javascript skills by using <a href="http://documentcloud.github.com/backbone/">backbonejs</a> on the server will certainly help with other solutions.</p>
<p>And who wouldn&#8217;t want to hear Schuyler Erle pontificate on ”<em><a href="http://2011.foss4g.org/sessions/pivoting-monetize-mobile-hyperlocal-social-gamification-going-viral">Pivoting to Monetize Mobile Hyperlocal Social Gamification by Going Viral</a>” </em></p>
<p>Hope to see you there!</p>
<p>Of note: the <a href="http://2011.foss4g.org/content/big-party-denver-art-museum">Thursday night party</a> is $99 on top of the $649 registration fee, but people tell me it’s gonna be totally awesome and @mattpriour will be there and <a href="http://twitter.com/#!/mattpriour/status/104668199483752448">that alone is worth the price of admission</a> <img class="wlEmoticon wlEmoticon-winkingsmile" style="border-style:none;" src="http://dbouwman.files.wordpress.com/2011/08/wlemoticon-winkingsmile1.png?w=640" alt="Winking smile" /></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/dbouwman.wordpress.com/1627/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/dbouwman.wordpress.com/1627/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/dbouwman.wordpress.com/1627/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/dbouwman.wordpress.com/1627/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/dbouwman.wordpress.com/1627/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/dbouwman.wordpress.com/1627/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/dbouwman.wordpress.com/1627/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/dbouwman.wordpress.com/1627/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/dbouwman.wordpress.com/1627/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/dbouwman.wordpress.com/1627/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/dbouwman.wordpress.com/1627/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/dbouwman.wordpress.com/1627/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/dbouwman.wordpress.com/1627/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/dbouwman.wordpress.com/1627/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.davebouwman.com&amp;blog=14377016&amp;post=1627&amp;subd=dbouwman&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://blog.davebouwman.com/2011/08/19/foss4g-fun-and-games-in-denver/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7f4bfa0a5e4a4e45219a80f9c3cfd6f6?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">dbouwman</media:title>
		</media:content>

		<media:content url="http://dbouwman.files.wordpress.com/2011/08/wlemoticon-winkingsmile1.png" medium="image">
			<media:title type="html">Winking smile</media:title>
		</media:content>
	</item>
	</channel>
</rss>
