<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>map butcher</title>
	<atom:link href="http://mapbutcher.com/blog/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://mapbutcher.com/blog</link>
	<description></description>
	<lastBuildDate>Thu, 22 Jul 2010 22:59:21 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>The Holy Trinity</title>
		<link>http://mapbutcher.com/blog/?p=603</link>
		<comments>http://mapbutcher.com/blog/?p=603#comments</comments>
		<pubDate>Thu, 22 Jul 2010 22:58:34 +0000</pubDate>
		<dc:creator>mapbutcher</dc:creator>
				<category><![CDATA[porterhouse]]></category>
		<category><![CDATA[GIS]]></category>
		<category><![CDATA[Map Design]]></category>
		<category><![CDATA[Maps]]></category>
		<category><![CDATA[Melbourne]]></category>

		<guid isPermaLink="false">http://mapbutcher.com/blog/?p=603</guid>
		<description><![CDATA[Last night I spoke at the second Melbourne Open GIS Group. It was great to see the room filling up since our first meet-up, and I&#8217;m already looking forward to catching up again soon (I&#8217;ll bring a slab next time) . A big thank you to Simon for organising it all. I think as GIS [...]]]></description>
			<content:encoded><![CDATA[<p>Last night I spoke at the second Melbourne Open GIS Group. It was great to see the room filling up since our first meet-up, and I&#8217;m already looking forward to catching up again soon (I&#8217;ll bring a slab next time) . A big thank you to <a href="http://www.groundtruth.com.au/" target="_blank">Simon</a> for organising it all.</p>
<p>I think as GIS folks we&#8217;ve been educated to understand spatial information and analysis, and most importantly we see the benefits that both of these can provide if they&#8217;re used effectively. Arguably its been our goal to broadcast this benefit to others and raise the adoption of GIS technology. However to help people realise the benefits we need to step outside of our little GIS world and think like real users  - users who want to simply use spatial information, analysis and tools to achieve their own goals.</p>
<p>If my memory serves me right the origins of this rant go back a few years to a drunken night in a Nelson pub with the North Shore Telly Tubby and my mate Martin.</p>
<div id="__ss_4819540" style="width: 425px;"><strong><a title="The holy trinity is dead" href="http://www.slideshare.net/mapbutcher/the-holy-trinity-is-dead">The holy trinity is dead</a></strong></div>
<div style="width: 425px;"><strong><a title="The holy trinity is dead" href="http://www.slideshare.net/mapbutcher/the-holy-trinity-is-dead"></a></strong><object id="__sse4819540" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="355" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowScriptAccess" value="always" /><param name="src" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=theholytrinityisdead-100722173222-phpapp01&amp;rel=0&amp;stripped_title=the-holy-trinity-is-dead" /><param name="name" value="__sse4819540" /><param name="allowfullscreen" value="true" /><embed id="__sse4819540" type="application/x-shockwave-flash" width="425" height="355" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=theholytrinityisdead-100722173222-phpapp01&amp;rel=0&amp;stripped_title=the-holy-trinity-is-dead" name="__sse4819540" allowscriptaccess="always" allowfullscreen="true"></embed></object></div>
<p>Anyway &#8211; there were some other really interesting folks there last night too and I particularly liked <a href="http://www.neatstreets.com.au/" target="_blank">NeatStreets </a>and our follow up chat about <a href="http://www.viz.co.uk/" target="_blank">Viz </a>and the <a href="http://www.viz.co.uk/profanisaurus.php" target="_blank">profanosaurus</a>! Get out there and tag some BSW&#8217;s!</p>
]]></content:encoded>
			<wfw:commentRss>http://mapbutcher.com/blog/?feed=rss2&amp;p=603</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>It does what it says on the tin</title>
		<link>http://mapbutcher.com/blog/?p=589</link>
		<comments>http://mapbutcher.com/blog/?p=589#comments</comments>
		<pubDate>Tue, 18 May 2010 11:25:45 +0000</pubDate>
		<dc:creator>mapbutcher</dc:creator>
				<category><![CDATA[shank]]></category>
		<category><![CDATA[OpenGeo]]></category>

		<guid isPermaLink="false">http://mapbutcher.com/blog/?p=589</guid>
		<description><![CDATA[I&#8217;m fully impressed! A mate of mine has been making some suggestions to the OpenGeo team about their latest OpenGeo Suite Community Edition &#8211; they listened, asked for his input and released new functionality all within the space of a few days &#8211; this is agility at its best! There&#8217;s so much that is right [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignnone" title="Ronseal - does exactly what it says on the tin" src="http://www.blanchford.co.uk/acatalog/ronseal_woodfiller.jpg" alt="" width="320" height="360" /></p>
<p>I&#8217;m fully impressed!</p>
<p>A <a href="http://www.groundtruth.com.au/" target="_blank">mate of mine</a> has been making <a href="http://getsatisfaction.com/opengeo/topics/find_tool_in_geoexplorer#reply_2462677" target="_blank">some suggestions</a> to the <a href="http://opengeo.org/" target="_blank">OpenGeo</a> team about their latest <a href="http://blog.opengeo.org/2010/05/13/opengeo-suite-1-9-community-edition/" target="_blank">OpenGeo Suite Community Edition</a> &#8211; they listened, asked for his input and released new functionality all within the space of a few days &#8211; this is agility at its best!</p>
<p>There&#8217;s so much that is right about this story:</p>
<p>1. A dude spoke up with a legitimate use case and someone real was listening</p>
<p>2. They talked about the idea and recorded the process openly</p>
<p>3. They implemented the change and released quickly</p>
<p>The willingness to listen, the ability to evaluate a good idea and quickly release something usable is an impressive level of service, and one OpenGeo should be proud of. On their <a href="http://getsatisfaction.com/" target="_blank">getSatisfaction </a> site it says &#8216;OpenGeo employees are here to help&#8217;.  Simple, no need for anything else &#8211; it&#8217;s just true.</p>
<p>It seems <a href="http://ideas.arcgis.com/" target="_blank">this sort of thing</a> is all the rage these days.</p>
<p>PS. In the same thread there&#8217;s a <a href="http://www.opengeohost.com/maps/stlawrence/" target="_blank">link</a> to a nice clean community edition site which is well worth a look</p>
]]></content:encoded>
			<wfw:commentRss>http://mapbutcher.com/blog/?feed=rss2&amp;p=589</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Pusherman</title>
		<link>http://mapbutcher.com/blog/?p=582</link>
		<comments>http://mapbutcher.com/blog/?p=582#comments</comments>
		<pubDate>Mon, 17 May 2010 22:48:47 +0000</pubDate>
		<dc:creator>mapbutcher</dc:creator>
				<category><![CDATA[shank]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Proprietary]]></category>

		<guid isPermaLink="false">http://mapbutcher.com/blog/?p=582</guid>
		<description><![CDATA[Paul is back on the attack &#8211; this time he&#8217;s likening proprietary software to crack. Brilliant It&#8217;s worth taking Paul&#8217;s analogy a bit further. Being an open source &#8216;evangelist&#8217; he believes that proprietary software is bad for you. The two main points he makes are: 1. Proprietary software is pushed onto unsuspecting audiences by software vendors [...]]]></description>
			<content:encoded><![CDATA[<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="480" height="385" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/oLNW9w1odK4&amp;hl=en_US&amp;fs=1&amp;rel=0&amp;color1=0x5d1719&amp;color2=0xcd311b" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="480" height="385" src="http://www.youtube.com/v/oLNW9w1odK4&amp;hl=en_US&amp;fs=1&amp;rel=0&amp;color1=0x5d1719&amp;color2=0xcd311b" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<p><a href="http://blog.cleverelephant.ca/2010/05/free-like.html" target="_blank">Paul is back on the attack</a> &#8211; this time he&#8217;s likening proprietary software to crack. Brilliant</p>
<p>It&#8217;s worth taking Paul&#8217;s analogy a bit further. Being an open source &#8216;evangelist&#8217; he believes that proprietary software is bad for you. The two main points he makes are:</p>
<p>1. Proprietary software is pushed onto unsuspecting audiences by software vendors</p>
<p>2. Proprietary software is addictive</p>
<p>Lets take the second point first. People generally get addicted to a drug for a number of reasons such as;</p>
<p>a) their conditions</p>
<p>b) something in the drug is physically addictive (e.g. nicotine in cigarettes)</p>
<p>c) they enjoy it</p>
<p>Software is not dissimilar. People go with proprietary products because of their environment &#8211; they may work for an organisation which has made an investment in a particular product, or they may select a proprietary product because they feel comfortable with it &#8211; not necessarily because of actual familiarity with the product, but often because it seems more familiar or it seems less risky than other options. Sometimes proprietary products include something addictive &#8211; data lock in is a good example, once you&#8217;re using format X is very difficult to move away from it. Finally people often use proprietary products because it is good at what it does. It&#8217;s a tool which helps them get their job done &#8211; I&#8217;m not saying that there are not issues with proprietary products but to not accept that they are competitive is naive.</p>
<p>The first issue, that proprietary software is pushed onto unsuspecting audiences by software vendors is not new. This happens everywhere &#8211; just this morning I walked out of the train station and a new brand of yoghurt was pushed into my hand. Free samples of this and that are given away by companies intentionally to get you interested, to get you hooked &#8211; this is marketing! What&#8217;s wrong with this? I think Paul makes this point because he&#8217;s an open source geek and open source geek&#8217;s generally don&#8217;t get marketing &#8211; they see straight through it. They view their non-geek &#8216;express&#8217; users colleagues as helpless against the evil <em>&#8216;pusherman&#8217; </em>whose marketing mechanisms lure them in and gets them hooked.  But is this an accurate picture &#8211; I didn&#8217;t particularly like my free sample yoghurt. I certainly won&#8217;t be buying any. People do have the ability to make informed choices &#8211; some more than others, and they make these choices based upon many factors.</p>
<p>People are interested in the &#8216;express&#8217; editions because on the surface of it the marketing works on them, they&#8217;re familiar with the brand and are attracted by the &#8216;free&#8217; carrot dangling from the end of the stick. Open Source software starts from that position &#8211; it&#8217;s already free so open source projects need another carrot to get us hooked.  I think Paul needs to get <a href="http://en.wikipedia.org/wiki/Marlo_Stanfield" target="_blank">Marlo Stansfield</a> on our asses  - you gotta get in the game bro &#8211; you&#8217;ve got to convince us your crack is better, gets you higher quicker and lasts longer&#8230;&#8230;and like any great drug it doesn&#8217;t have any nasty side effects. Alternatively you could develop a <a href="http://en.wikipedia.org/wiki/Twelve-step_program" target="_blank">12 step program</a> to help those of us who are addicted to sucking on that pipe.</p>
]]></content:encoded>
			<wfw:commentRss>http://mapbutcher.com/blog/?feed=rss2&amp;p=582</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Things that go bump in the night</title>
		<link>http://mapbutcher.com/blog/?p=557</link>
		<comments>http://mapbutcher.com/blog/?p=557#comments</comments>
		<pubDate>Mon, 17 May 2010 12:17:51 +0000</pubDate>
		<dc:creator>mapbutcher</dc:creator>
				<category><![CDATA[loin]]></category>
		<category><![CDATA[Project Management]]></category>
		<category><![CDATA[SCRUM]]></category>

		<guid isPermaLink="false">http://mapbutcher.com/blog/?p=557</guid>
		<description><![CDATA[Things that go bump in the night Late last year I found it really interesting reading Martin Daly&#8217;s &#8216;Higher Education&#8217; series of posts. Here was a real story about about a real project &#8211; which had a real resonance with me. As one large project draws to a close, and inspired by Martin&#8217;s posts I [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft" title="Nosferatu" src="http://i418.photobucket.com/albums/pp269/cafehey/Nosferatu2.jpg" alt="" width="380" height="400" /></p>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">Things that go bump in the night</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">Late last year I found it really interesting reading Martin Daly&#8217;s &#8216;Higher Education&#8217; series of posts. Here was a real story about about a real project &#8211; which had a real resonance with me. As one large project draws to a close, and inspired by Martin&#8217;s posts I thought I&#8217;d share some of my experience about the reality of projects.</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">It shouldn&#8217;t be suprising to hear that sometimes projects have their ups and downs &#8211; if you&#8217;ve sat in a presentation of mine recently you&#8217;ll realise why no amount of GANTT charts can help this situation. So it was little suprise to me that towards the end of this large project we had a few bumps &#8211; I should say that whilst I wasn&#8217;t suprised I was frustrated because we&#8217;d been putting alot of time and effort into making sure we tried to unearth issues early on.</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">The bumps</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">Stability</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">The first was associated to a data loading component in our solution. This component automates the processing  of state wide source data into a complex data model. The software runs from within ArcCatalog and depends upon a combination of geoprocessing models, custom ArcObjects and some pl\sql packages which move the data into the final schema. We knew it was a pretty intense process and we&#8217;d spent a lot of time making it perform because performance was important to the client, however while we were looking one way we forgot to to look the other and we let a stability issue pass us by. Bump</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">Functionality</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">The second was a particular piece of functionality which we&#8217;d implemented into our services tier. This functionality was fairly straightforward &#8211; we had to analyse a geometry that was defined and created in memory at runtime against some layers &#8211; again defined at runtime to return some values (once again defined at runtime). All our tests had been successful until we encountered a specific type of geometry. Bump!</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">Why did we bump</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">I don&#8217;t need to explain in detail about these two issues, but its useful to try and reflect why we encountered them, after all we were using SCRUM and reflecting is an important part of the process:</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">Iterating is not enough &#8211; we had a series of sprints, at each sprint the usual scrum ceremonies took place &#8211; every few sprints a larger set of the client team joined us and we spent a full day going through all the functionality developed up to that point. But iterating is not enough &#8211; were missing the final press of the GO button &#8211; deploying each iteration. There were reasons why we couldn&#8217;t deploy in the early stages, we were deploying onto out internal test infrastructure from our development infrastructure and we had our CI server doing the heavy lifting for us, but we underestimated the reality and value of the software being directly in the hands of users from as early as possible.</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">Look out for the warning signs &#8211; there were warning signs for the stability issues. I missed them. Not being able to deploy frequently onto client infrastructure stopped the issue bubbling up earlier, but even in our own testing and deployment we dropped the ball, perhaps because we were focussed on high priority features such as performance.</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">Testing the boundary &#8211; we did a lot of testing, but we missed a crucial boundary area. In fact its more accurate to say that we would have benefited from the client scrutinising those crazy boundary cases that only they&#8217;re familiar with earlier on, this ommission was enough to let that functional issue slip through the cracks.</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">Getting over the bumps</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">We got over these bumps fairly quickly and its as valid to look at how we did this as understand why they occured in the first place:</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">Review: In the case of our stability issue with the data loader our solution lay in a review &#8211; we&#8217;d done code reviews during development, but I&#8217;ve got a growing belief that continuous review is an extremely valid process. After some careful performance testing we came to the conclusion that we had a memory leak or some nasty fragmentation going on, but we were struggling to isolate the real cause of the problem. I&#8217;m lucky enough to work with some very smart people and a phonecall or two later and a great piece of review we had the issue nailed.</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">Good design&#8230;and a good backup: SCRUM is some ways forces better design. If you expect change to occur as a result of an iterative process you&#8217;re always thinking that your design must account for change. This means that good OO design and constant refactoring can help you overcome changes as they occur. I like to think we did these things and this prepared us well for our functionality issue. I didn&#8217;t have to pull the system apart when our we found the bug in our initial design, i&#8217;d given myself enough room to move, I also had a back up design. Its really important to record the design process IMO &#8211; notes, sketches, and ideas may all be useful at a later date. Its also useful to not be afraid to throw away something. My design allowed me to throw away the problem part without a knock on affect, I could fairly rapidly test new designs and when it came to it get a fresh perspective on the issue.</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">A great team: This is the most important factor in overcoming the bumps. Being able to bounce ideas of others in the immediate and not so immediate team helped a great deal. The committment of the team to get through the issues &#8211; the folks that worked on the project really wanted to see it succeed &#8211; this was a huge, huge factor. I think one of the main reasons why our team got over the hurdles was because our client worked with us, as part of the team. When we encountered the issues we didn&#8217;t brush them under the carpet we discussed the problem, assessed the options, provided advice, shared ideas and in the end helped each other to get it sorted. There is something deeply unsatisfying when you have to work in a client v&#8217;s vendor &#8211; us v&#8217;s them relationship &#8211;  I&#8217;m happy to say we left all that bullshit behind in about week 3 of the project.</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">The outcome &#8211; there&#8217;s lots of things I would change, but the project has been a success from my perspective. Hopefully the clients too. I&#8217;m going to take a great deal of this experience forward and hopefully there will be a few less bumps the next time.</div>
<p>Late last year I was really pleased when I read<a href="http://blog.lostinspatial.com" target="_blank"> Martin Daly&#8217;s</a> <a href="http://blog.lostinspatial.com/2009/12/08/a-higher-education-part-1/" target="_blank">&#8216;Higher Education&#8217;</a> series of posts. Here was a real story about about a real project &#8211; which had a real resonance with me. As one large project draws to a close, (..and inspired by Martin&#8217;s posts) I thought I&#8217;d share some of my experience about the reality of projects.</p>
<p>It shouldn&#8217;t be surprising to hear that sometimes projects have their ups and downs &#8211;  no amount of GANTT charts can help this situation!  So it was little surprise to me that towards the end of this large project we had a few bumps &#8211; I should say that whilst I wasn&#8217;t surprised I was frustrated because we&#8217;d been putting  a lot of time and effort into making sure we tried to unearth such bumps early!!!</p>
<p><strong><span style="text-decoration: underline;">The bumps</span></strong></p>
<p>1. Stability</p>
<p>The first bump was associated to a data loading component in our solution. This component automates the processing  of state wide source data into a complex data model. We knew it was a pretty intense process and we&#8217;d spent a lot of time making it perform &#8211; because performance was important to our client, however while we were looking one way we forgot to to look the other and we let a stability issue pass us by. <strong>Bump!</strong></p>
<p>2. Functionality</p>
<p>The second was a particular piece of functionality which we&#8217;d implemented into our services tier. This functionality was fairly straightforward &#8211; we had to analyse a geometry that was defined and created in memory at runtime against some layers &#8211; again defined at runtime to return some values (once again defined at runtime). All our tests had been successful until we encountered a specific type of geometry, and a bug in the underlying technology. <strong>Bump!</strong></p>
<p><strong><span style="text-decoration: underline;">Why did we bump</span></strong></p>
<p>I don&#8217;t need to explain in detail about these two issues, but its useful to try and reflect on why we encountered them, after all we were using <a href="http://en.wikipedia.org/wiki/Scrum_(development)" target="_blank">SCRUM</a> and reflecting is an important part of the process:</p>
<p>1. Iterating is not enough</p>
<p>We had a series of sprints, at each sprint the usual scrum <a href="http://www.scrumalliance.org/pages/scrum_ceremonies" target="_blank">ceremonies</a> took place &#8211; every few sprints a larger set of the client team joined us and we spent a full day going through all the functionality developed up to that point. But iterating is not enough &#8211; we were missing the final press of the GO button &#8211; deploying each iteration. There were reasons why we couldn&#8217;t deploy in the early stages. We were deploying onto our internal test infrastructure from our development infrastructure and we had our CI server doing the heavy lifting for us, but we underestimated the reality and value of the software being directly in the hands of users from as early as possible.</p>
<p>2. Look out for the warning signs<br />
There were warning signs for the stability issues. I missed them. Not being able to deploy frequently onto client infrastructure stopped the issue bubbling up earlier, but even in our own testing and deployment environments we dropped the ball. I think our focus on the high priority features such as performance was a factor in this.</p>
<p>3. Testing the boundary</p>
<p>We did a lot of testing, but we missed a crucial boundary area. In fact its more accurate to say that we would have benefited from the client scrutinising those crazy boundary cases that only they&#8217;re familiar with earlier on. This omission was enough to let that functional issue slip through the cracks.</p>
<p><span style="text-decoration: underline;"><strong>Getting over the bumps</strong></span></p>
<p>It&#8217;s important to look at how we resolved these issues as well as understanding why they occurred in the first place:</p>
<p>1. Review</p>
<p>In the case of our stability issue with the data loader our solution lay in a review and memory profiling. We&#8217;d done code reviews during development as well as testing and review of UI functionality and of course end to end testing of the load process (which takes around 6-7 hours). When we encountered the issue we conducted some careful memory monitoring and we came to the conclusion that we had a leak or some nasty fragmentation going on, but we were struggling to isolate the real cause of the problem. I&#8217;m lucky enough to work with some very smart people and a phone call or two later and a great piece of review we had the issue nailed. I&#8217;ve got a growing belief that continuous review is an extremely important process &#8211;  from pair programming to formal code review &#8211; these processes are invaluable.<strong></strong></p>
<p>2. Good design&#8230;and a good backup</p>
<p>An iterative process  can lead you to design with change in mind, just like unit testing can lead to more carefully and considered design. Good OO design and constant refactoring can help you overcome changes as they occur. I like to think we did these things and this prepared us well for our functionality issue. I didn&#8217;t have to pull the system apart when we found the issue in our initial design, I&#8217;d given myself enough room to move. I also had a back up design. Its really important to record the design process IMO &#8211; notes, sketches, and ideas may all be useful at a later date. It&#8217;s also useful to not be afraid to throw away something. My design allowed me to throw away the problem without a knock on affect. I could fairly rapidly test new designs and when it came to it get a fresh perspective on the issue.<br />
<strong></strong></p>
<p>3. A great team</p>
<p>This was the most important factor in overcoming the bumps. Being able to bounce ideas of others in the immediate and not so immediate team helped a great deal. The commitment of the team to get through the issues was fantastic &#8211; the folks that worked on the project really wanted to see it succeed &#8211; <strong>this was a huge, huge factor</strong>. I think one of the main reasons why our team got over the hurdles was because our client worked with us, as part of the team. When we encountered the issues we didn&#8217;t brush them under the carpet  - we discussed the problems openly, assessed the options, provided advice, shared ideas and in the end helped each other to get it sorted. There is something deeply unsatisfying when you have to work in a client v&#8217;s vendor &#8211; us v&#8217;s them relationship &#8211;  I&#8217;m happy to say we left all that bullshit behind in about week 3 of the project.</p>
<p><strong><span style="text-decoration: underline;">The outcome</span></strong></p>
<p>There&#8217;s lots of things I would change, but the project has been a success from my perspective &#8211; although we had a little stumble near the end its important to remember that we delivered a complex system comprising of database, server and client components. We listened to our client and hopefully they consider the project a success too. All projects have the odd bump here and there (some more so than others), if you hear otherwise you should be suspicious. Accepting that projects occasionally bump is not an acceptance of failure &#8211; it&#8217;s an acceptance of reality, an acceptance of change. When measuring the success of a project then I think we should include an assessment on how well the project manages its issues along the way.  I&#8217;m certainly going to take a great deal of this experience forward and hopefully there will be a few less bumps the next time.</p>
]]></content:encoded>
			<wfw:commentRss>http://mapbutcher.com/blog/?feed=rss2&amp;p=557</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>ESRI Developer Summit 2010. Done.</title>
		<link>http://mapbutcher.com/blog/?p=541</link>
		<comments>http://mapbutcher.com/blog/?p=541#comments</comments>
		<pubDate>Mon, 29 Mar 2010 10:11:38 +0000</pubDate>
		<dc:creator>mapbutcher</dc:creator>
				<category><![CDATA[loin]]></category>
		<category><![CDATA[ArcGIS 10.0]]></category>
		<category><![CDATA[ESRI Developer Summit 2010]]></category>

		<guid isPermaLink="false">http://mapbutcher.com/blog/?p=541</guid>
		<description><![CDATA[ESRI Developer Summit 2010. Done. I&#8217;m back from Palm Springs, and wanted to reflect on this years ESRI Developer Summit. In summary I had a really great week, meeting old and new friends and experiencing what is a really good conference. It&#8217;s a long way to go, but definately worth it especially given the nature [...]]]></description>
			<content:encoded><![CDATA[<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">ESRI Developer Summit 2010. Done.</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">I&#8217;m back from Palm Springs, and wanted to reflect on this years ESRI Developer Summit. In summary I had a really great week, meeting old and new friends and experiencing what is a really good conference. It&#8217;s a long way to go, but definately worth it especially given the nature of the release. Say what you like about ESRI, but I think post ADF they&#8217;ve lifted their game and there is no sign that things are changing on that score. So here are my personal highlights.</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">1. Open Source Myths</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">Despite what half the GIS planet thinks ESRI are really not loosing sleep over Open Source infact they&#8217;re quite happy to have it on display.</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">I also enjoyed a cool demonstration of GDAL analysis by the folks from the ESRI Prototype lab. I was dissapointed to here Jeremy Bartleys reasoning behind not open sourcing the JavaScript API &#8211; apparently it&#8217;s an issue of &#8216;control&#8217;&#8230;.</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">2. arcpy.mapping</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">I&#8217;m not a pythonite but the new mapping API might put the very successful DSMapBook to bed. I thought about all those times I&#8217;ve sat there and done manual data audits at client sites &#8211; bye bye and good riddence to that manual overhead. Also the arcpy.sa includes some numpy goodness which pythonites will enjoy</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">3. GeoDesign</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">I may have had it wrong &#8211; I&#8217;m starting to come around to what this is about, I enjoyed the users presentations especially the azavea guys &#8211; they&#8217;ve done some really nice stuff. The concept GIS as a scenario building tool is not new, but our ability to produce tools, especially on the web which quickly allow us to design and tweak our data to visualise our scenarios is a hurdle we need to leap.</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">4. The FeatureLayer everywhere</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">The new feature layer and feature service facility is implemented into each of the three web apis (JavaScript, Flex, Silverlight). A feature server is not a new idea, but ESRI&#8217;s new implementation is powerful and integrates sweetly across the stack. I like the client side query features capability cutting down the need to round trip to the server plus feature layers are really the basic building block of the editing capability of the web apis.</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">5. Query Layer &#8211; you gotta love the SQL</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">I love SQL &#8211; nice and functional &#8211; the new query layer, low level within the geodatabase API (SQLWorkspace) and in the ArcMap UI is cool. It&#8217;s great that we no longer have to &#8216;register&#8217; data with SDE to use it. I never got a chance to catch a hold of anyone to ask whether ST_ functionality can be used &#8211; but I understand pl\sql can not be executed via query layers yet.</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">6. Add Ins</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">It seems the add-in concept from ArcGIS Explorer has made its way into ArcGIS Desktop. This is an improved framework for creating customisations not only from a developer perspective, but also from an administrative perspective. Add in&#8217;s are compiled into a single compressed file with a .esriAddIn extension &#8211; these contain a configuration XML file, the binaries and any necessary resources (dependencies etc) and are registered with the client by being placed into a registered folder. There&#8217;s also a new installation utility but the old customise route is not gone. Interestingly there&#8217;s a new esriRegAsm utility as pre version 10 COM components have to be re-registered once 10 is installed &#8211; this may be a bit of a headache if you&#8217;ve got a lot of customisations in your desktop.</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">7. Eating your own dog food</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">Because ESRI are now running their own server in the cloud to support ArcGIS.com they have to ensure it&#8217;s a reliable stand up and high performance server able to run on hardware and cheap OS &#8211; They&#8217;ve been doing alot of testing across the board and have got some rather good results running on RHEL  - I hope they stand up and be counted at the 2010 WMS shootout?</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">8. REST binding for server extentions</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">There has always been a SOAP binding for server object extentions, but it was a bit dark and tricky around the edges &#8211; ESRI have addressed this and done more by adding in new classes for exposing server object extentions via their SOAP and REST channels &#8211; this is pretty powerful stuff. In a nutshell the XML and JSON serialisation/de-serialisation has been taken care of by some helper classes and a nice WSDL template is provided (you used to have to handcraft your own) for SOAP. New RestResource and RestOperation classes are provided for REST &#8211; at this stage the REST support is limited to mapping services. There&#8217;s also support for MSD services and SOE&#8217;s via flag with the ServerTypesExt.dat &#8211; and I liked the feature which allow methods to be exposed and configured as capabilities within ArcCatalog and (new at 10) ArcGIS Server Manager.</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">There were alot more goodies on offer so if you didn&#8217;t make it or couldn&#8217;t make a session because of a clash then head to the dev summit site for the tech session and plenary videos. Finally thanks to all at DTSAgile for a great BBQ we used some sophisticated techniques to find the house.</div>
<p>I&#8217;m back from Palm Springs, and wanted to reflect on this years <a href="http://www.esri.com/events/devsummit/index.html" target="_blank">ESRI Developer Summit</a>. In summary I had a really great week, meeting old and new friends and experiencing what is a really good conference. It&#8217;s a long way to go, but definitely worth it, especially given the nature of the 10.0 release.  Say what you like about ESRI, but I think post <a href="http://www.spatiallyadjusted.com/2008/01/30/esris-web-adf-is-one-horrific-development-platform/" target="_blank">ADF</a> they&#8217;ve lifted their game and there is no sign that things are changing on that front. So here are my personal highlights in no particular order.</p>
<p><strong>1. Open Source Myths</strong></p>
<p><img class="aligncenter" src="http://lh6.ggpht.com/_twgZQc1wG_g/S65bl4KIIFI/AAAAAAAAFlU/VLMnVo03dHg/s400/IMG_8568.JPG" alt="" width="400" height="300" /></p>
<p>Despite what people map think  ESRI are quite happy to have FOSS4G on display.</p>
<p>I also enjoyed a cool demonstration of <a href="http://www.gdal.org/" target="_blank">GDAL</a> analysis by the folks from the <a href="http://blogs.esri.com/Dev/blogs/apl/default.aspx" target="_blank">ESRI Prototype lab</a>. I was disappointed to hear Jeremy Bartley&#8217;s reasoning behind not open sourcing the JavaScript API &#8211; apparently it&#8217;s an issue of &#8216;control&#8217;&#8230;.?</p>
<p><strong>2. arcpy.mapping</strong></p>
<p>I&#8217;m not a pythonite but the new mapping API might put the very successful DS MapBook to bed. I thought about all those times I&#8217;ve sat there and done manual data audits at client sites &#8211; bye bye and good riddance to that manual overhead. Also the arcpy.sa includes some numpy goodness which pythonites will enjoy</p>
<p><strong>3. GeoDesign</strong></p>
<p>I may have had it wrong &#8211; I&#8217;m starting to come around to what this is about, I enjoyed the GeoDesign lightening talks especially the <a href="http://www.azavea.com/" target="_blank">Azavea</a> guys &#8211; they&#8217;ve done some really nice stuff. The concept of GIS as a scenario building tool is not new, but our ability to produce tools, especially on the web which quickly allow us to design and tweak our data to visualise our scenarios is a hurdle we need to leap.</p>
<p><strong>4. The FeatureLayer everywhere</strong></p>
<p>The new feature layer and feature service facility is implemented into each of the three web apis (JavaScript, Flex, Silverlight). A feature server is <a href="http://featureserver.org/" target="_blank">not a new idea</a>, but ESRI&#8217;s implementation is powerful and integrates sweetly across the stack. I like the client side query features capability cutting down the need for round trips to the server plus feature layers are really the basic building block of the editing capability of the web apis.</p>
<p><strong>5. Query Layer &#8211; you gotta love the SQL</strong></p>
<p>I love SQL &#8211; nice and functional &#8211; the new query layer, low level within the geodatabase API (SQLWorkspace) and in the ArcMap UI is cool. It&#8217;s great that we no longer have to &#8216;register&#8217; data with SDE to use it. I never got a chance to catch a hold of anyone to ask whether ST_ functionality can be used &#8211; but I understand pl\sql can not be executed via query layers yet.</p>
<p><strong>6. Add Ins</strong></p>
<p>It seems the add-in concept from ArcGIS Explorer has made its way into ArcGIS Desktop. This is an improved framework for creating customisations not only from a developer perspective, but also from an administrative perspective. Add in&#8217;s are compiled into a single compressed file with a .esriAddIn extension &#8211; these contain a configuration XML file, the binaries and any necessary resources (dependencies etc) and are registered with the client by being placed into a registered folder known to the client. There&#8217;s also a new installation utility but the old customise route is not disappearing. Interestingly there&#8217;s a new esriRegAsm utility as pre version 10 COM components have to be re-registered once 10 is installed &#8211; this may be a bit of a headache if you&#8217;ve got a lot of customisations in your desktop.</p>
<p><strong>7. Eating your own dog food</strong></p>
<p>Because ESRI are now running their own server in the cloud to support ArcGIS.com they have to ensure it&#8217;s a reliable stand up and high performance server able to run on hardware and cheap OS &#8211; They&#8217;ve been doing  a lot of testing across the board and have got some rather good results running on RHEL  - I hope they stand up and be counted at the <a href="http://wiki.osgeo.org/wiki/Benchmarking_2010" target="_blank">2010 WMS shootout</a>?</p>
<p><strong>8. REST binding for server extentions</strong></p>
<p>There has always been a SOAP binding for server object extensions, but it was a bit dark and tricky around the edges &#8211; ESRI have addressed this and done more by adding in new classes for exposing server object extensions via their SOAP and REST channels &#8211; this is pretty powerful stuff. In a nutshell the XML and JSON serialisation/de-serialisation has been taken care of by some helper classes and a nice WSDL template is provided (you used to have to handcraft your own) for SOAP. New RestResource and RestOperation classes are provided for REST &#8211; at this stage the REST support is limited to mapping services. There&#8217;s also support for MSD services via flag with the ServerTypesExt.dat &#8211; and I liked the feature which allow methods to be exposed and configured as capabilities within ArcCatalog and (new at 10) ArcGIS Server Manager.</p>
<p><strong>9. User Presentations and Developer To Developer Sessions </strong></p>
<p>Love them &#8211; have more of them!</p>
<p>There were a lot more goodies on offer so if you didn&#8217;t make it or couldn&#8217;t make a session because of a clash then head to the developer summit site for the <a href="http://www.esri.com/events/devsummit/tech-session-videos/index.html" target="_blank">tech session</a> and <a href="http://www.esri.com/events/devsummit/videos/index.html" target="_blank">plenary videos</a>. Finally thanks to all at <a href="http://www.dtsagile.com/" target="_blank">DTSAgile</a> for a great BBQ we used some sophisticated techniques to find the house.</p>
<p><img class="aligncenter" src="http://lh3.ggpht.com/_twgZQc1wG_g/S65bpwn9WdI/AAAAAAAAFlc/aJ3awukrCrM/s400/IMG_8571.JPG" alt="" width="300" height="400" /></p>
]]></content:encoded>
			<wfw:commentRss>http://mapbutcher.com/blog/?feed=rss2&amp;p=541</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>In the world of Open Data the map is king</title>
		<link>http://mapbutcher.com/blog/?p=535</link>
		<comments>http://mapbutcher.com/blog/?p=535#comments</comments>
		<pubDate>Sun, 14 Mar 2010 02:23:34 +0000</pubDate>
		<dc:creator>mapbutcher</dc:creator>
				<category><![CDATA[loin]]></category>
		<category><![CDATA[GeoDesign]]></category>
		<category><![CDATA[jack dangermond]]></category>
		<category><![CDATA[OSM]]></category>
		<category><![CDATA[Tim Berners Lee]]></category>

		<guid isPermaLink="false">http://mapbutcher.com/blog/?p=535</guid>
		<description><![CDATA[I was in the Gold Coast last week listening to the map daddy talk about GeoDesign.  I&#8217;m not alone in my doubts on this one  - to be honest it sounds like the &#8216;new and improved&#8217; badge  I find on my washing powder. Anyway the other rather surprising thing I heard in JD&#8217;s plenary was about the [...]]]></description>
			<content:encoded><![CDATA[<p>I was in the Gold Coast last week listening to the <a href="http://en.wikipedia.org/wiki/Jack_Dangermond" target="_blank">map daddy</a> talk about GeoDesign.  I&#8217;m not <a href="http://geothought.blogspot.com/2009/10/jack-dangermond-on-geodesign.html" target="_blank">alone</a> in my doubts on this one  - to be honest it sounds like the &#8216;new and improved&#8217; badge  I find on my washing powder. Anyway the other rather surprising thing I heard in JD&#8217;s plenary was about the &#8216;<em>emergence of</em>&#8216;  <a href="http://en.wikipedia.org/wiki/Volunteered_Geographic_Information" target="_blank">VGI</a>!  This was mentioned within the context of the immanent changes and developments in <a href="http://blogs.esri.com/Support/blogs/arcgisonline/archive/2010/02/18/arcgis-online-at-the-federal-user-conference.aspx" target="_blank">ArcGIS Online</a>. Don&#8217;t get me wrong I think ArcGIS Online looks great but come on&#8230;&#8230;&#8230;&#8230;.. you can&#8217;t speak at a GIS conference about crowd sourcing and not tip your hat to <a href="http://www.openstreetmap.org/" target="_blank">OSM</a> &#8211; can you?</p>
<p>Well not if you&#8217;re the the <a href="http://en.wikipedia.org/wiki/Tim_Berners-Lee" target="_blank">real daddy</a>. How many examples are given here where a map is NOT used&#8230;.</p>
<p><!--copy and paste--><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="446" height="326" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="wmode" value="transparent" /><param name="bgColor" value="#ffffff" /><param name="flashvars" value="vu=http://video.ted.com/talks/dynamic/TimBerners-Lee_2010U-medium.flv&amp;su=http://images.ted.com/images/ted/tedindex/embed-posters/TimBerners-Lee-2010U.embed_thumbnail.jpg&amp;vw=432&amp;vh=240&amp;ap=0&amp;ti=788&amp;introDuration=16500&amp;adDuration=4000&amp;postAdDuration=2000&amp;adKeys=talk=tim_berners_lee_the_year_open_data_went_worldwide;year=2010;theme=a_taste_of_ted2010;theme=new_on_ted_com;theme=what_s_next_in_tech;theme=the_rise_of_collaboration;event=TED2010;&amp;preAdTag=tconf.ted/embed;tile=1;sz=512x288;" /><param name="src" value="http://video.ted.com/assets/player/swf/EmbedPlayer.swf" /><param name="bgcolor" value="#ffffff" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="446" height="326" src="http://video.ted.com/assets/player/swf/EmbedPlayer.swf" flashvars="vu=http://video.ted.com/talks/dynamic/TimBerners-Lee_2010U-medium.flv&amp;su=http://images.ted.com/images/ted/tedindex/embed-posters/TimBerners-Lee-2010U.embed_thumbnail.jpg&amp;vw=432&amp;vh=240&amp;ap=0&amp;ti=788&amp;introDuration=16500&amp;adDuration=4000&amp;postAdDuration=2000&amp;adKeys=talk=tim_berners_lee_the_year_open_data_went_worldwide;year=2010;theme=a_taste_of_ted2010;theme=new_on_ted_com;theme=what_s_next_in_tech;theme=the_rise_of_collaboration;event=TED2010;&amp;preAdTag=tconf.ted/embed;tile=1;sz=512x288;" bgcolor="#ffffff" wmode="transparent" allowfullscreen="true"></embed></object></p>
]]></content:encoded>
			<wfw:commentRss>http://mapbutcher.com/blog/?feed=rss2&amp;p=535</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Natural Geography</title>
		<link>http://mapbutcher.com/blog/?p=531</link>
		<comments>http://mapbutcher.com/blog/?p=531#comments</comments>
		<pubDate>Sun, 28 Feb 2010 12:42:40 +0000</pubDate>
		<dc:creator>mapbutcher</dc:creator>
				<category><![CDATA[porterhouse]]></category>

		<guid isPermaLink="false">http://mapbutcher.com/blog/?p=531</guid>
		<description><![CDATA[Mikel is a geographer (of the natural worthwhile variety). His work and blog are simply terrific. Bravo.]]></description>
			<content:encoded><![CDATA[<p><a href="http://brainoff.com/weblog/" target="_blank">Mikel</a> is a geographer (of the natural worthwhile variety). His work and blog are <a href="http://brainoff.com/weblog/2010/02/26/1532" target="_blank">simply terrific</a>. Bravo.</p>
]]></content:encoded>
			<wfw:commentRss>http://mapbutcher.com/blog/?feed=rss2&amp;p=531</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ST_MULTILINESTRING&#8230;.ESRI Bug?</title>
		<link>http://mapbutcher.com/blog/?p=522</link>
		<comments>http://mapbutcher.com/blog/?p=522#comments</comments>
		<pubDate>Sun, 28 Feb 2010 11:45:39 +0000</pubDate>
		<dc:creator>mapbutcher</dc:creator>
				<category><![CDATA[rib]]></category>
		<category><![CDATA[ESRI]]></category>
		<category><![CDATA[Linear Referencing]]></category>
		<category><![CDATA[ODP.Net]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[ST_Geometry]]></category>

		<guid isPermaLink="false">http://mapbutcher.com/blog/?p=522</guid>
		<description><![CDATA[As a bit of background I&#8217;ve been working on a project which delivers a set location translation web services &#8211; basically the organisation collect data using a number of methods some of which have a linear aspect. They want to be able to translate between these methods as well as validate that the locations to [...]]]></description>
			<content:encoded><![CDATA[<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">As a bit of background I&#8217;ve been working on a project which delivers a set location translation web services &#8211; basically the organisation collect data using a number of methods some of which have a linear aspect. They want to be able to translate between these methods as well as validate that the locations to ensure consistent quality assurance and finally enrich each location through spatial analysis. In effect the we&#8217;ve been developing an advanced linear referencing locator.</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">The web services are served out from an application server which communicates with our spatial server hosted within ArcGIS Server. The spatial server component provides dynamic segmentation and some other spatial functions. For linear locations the dynamic segmentation operations return ArcObjects geometry which is parsed and returned to the application server as WKT &#8211; why? Because we&#8217;ve made use of as much functionality at the Database level as possible and that means we use ST_Geometry where we can.</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">Recently our client found a bug <img src='http://mapbutcher.com/blog/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' />  They were testing the services and tried to create a long linear location &#8211; suddenly the server returned a nasty oracle error. Everything had worked fine up until the application server tried to write the geometry as WKT into the database at which point things went astray. To resolve this issue we built a small test which uses ODP.Net:</div>
<p><img class="aligncenter size-medium wp-image-526" title="BugsLifeWallpaper800[1]" src="http://mapbutcher.com/blog/wp-content/uploads/2010/02/BugsLifeWallpaper8001-300x225.jpg" alt="BugsLifeWallpaper800[1]" width="300" height="225" /></p>
<p>As a bit of background I&#8217;ve been working on a project which delivers a set location translation web services &#8211; basically the organisation collect data using a number of methods some of which have a linear aspect. They want to be able to translate between these methods as well as validate the locations to ensure a consistent data quality and finally enrich each location through spatial analysis. In effect we&#8217;ve been developing an advanced linear referencing locator.</p>
<p>We made a decision with the solution that we would utilise as much functionality at the database level as possible and that means we use <a href="http://www.opengeospatial.org/standards/sfs" target="_blank">ST_Geometry</a> where we can. Unlike <a href="http://postgis.refractions.net/documentation/manual-svn/reference.html#Linear_Referencing" target="_blank">some implementations</a> the ESRI ST implementation does not provide linear referencing functions therefore the web services which are served out from an application server communicates with our spatial server hosted within ArcGIS Server. The spatial server component provides dynamic segmentation and some other spatial functions. For linear locations the dynamic segmentation operations return ArcObjects geometry which is parsed and returned to the application server as <a href="http://en.wikipedia.org/wiki/Well-known_text" target="_blank">WKT</a>.</p>
<p>All has been fine until last week when our client found a bug <img src='http://mapbutcher.com/blog/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' />  They were testing the services and tried to create a long linear location &#8211; suddenly the server returned a nasty oracle error. Everything had worked fine up until the application server tried to write the geometry as WKT into the database at which point things went astray. To resolve this issue we built a small test which uses <a href="http://www.oracle.com/technology/tech/windows/odpnet/index.html" target="_blank">ODP.Net</a>:</p>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #008080; font-style: italic;">//wkt</span>
<span style="color: #FF0000;">string</span> WKT <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;some well known text&quot;</span>
&nbsp;
<span style="color: #008080; font-style: italic;">//create parameters</span>
OracleParameter p_wkt  <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> OracleParameter<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
p_wkt.<span style="color: #0000FF;">OracleDbType</span> <span style="color: #008000;">=</span> OracleDbType.<span style="color: #0000FF;">Clob</span><span style="color: #008000;">;</span>
p_wkt.<span style="color: #0000FF;">Value</span> <span style="color: #008000;">=</span> WKT<span style="color: #008000;">;</span>
&nbsp;
OracleParameter p_srid  <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> OracleParameter<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
p_srid.<span style="color: #0000FF;">OracleDbType</span> <span style="color: #008000;">=</span> OracleDbType.<span style="color: #0000FF;">Int32</span><span style="color: #008000;">;</span>
p_srid.<span style="color: #0000FF;">Value</span> <span style="color: #008000;">=</span> <span style="color: #FF0000;">0</span><span style="color: #008000;">;</span>
&nbsp;
<span style="color: #008080; font-style: italic;">//create command</span>
OracleCommand cmd <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> OracleCommand<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
cmd.<span style="color: #0000FF;">Connection</span> <span style="color: #008000;">=</span> conn<span style="color: #008000;">;</span>
cmd.<span style="color: #0000FF;">Parameters</span>.<span style="color: #0000FF;">Add</span><span style="color: #000000;">&#40;</span>p_wkt<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
cmd.<span style="color: #0000FF;">Parameters</span>.<span style="color: #0000FF;">Add</span><span style="color: #000000;">&#40;</span>p_srid<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
<span style="color: #008080; font-style: italic;">//sql</span>
<span style="color: #FF0000;">string</span> sql <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;INSERT INTO GEOMETRY_TESTBED VALUES(1, SDE.MULTILINESTRING(:p_wkt, :p_srid))&quot;</span><span style="color: #008000;">;</span>
&nbsp;
<span style="color: #008080; font-style: italic;">//execute</span>
cmd.<span style="color: #0000FF;">CommandText</span> <span style="color: #008000;">=</span> sql<span style="color: #008000;">;</span>
cmd.<span style="color: #0000FF;">ExecuteNonQuery</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span></pre></div></div>

<p>So basically Oracle was spitting a dummy when I was inserting a lengthy piece of text as the WKT parameter, returning an<a href="http://ora-01461.ora-code.com/" target="_blank"> ORA-01461:	can bind a LONG value only for insert into a LONG column</a>. Basically when the WKT was truncated to less than 4000 characters long the insert was working. I wanted to try and insert a very long geometry so I selected (<a href="http://webhelp.esri.com/arcgisdesktop/9.3/index.cfm?TopicName=ST_AsText" target="_blank">ST_ASTEXT</a> &amp; <a href="http://webhelp.esri.com/arcgisdesktop/9.3/index.cfm?TopicName=ST_Length" target="_blank">ST_LENGTH</a>) the geometry from the database with the highest number of points (<a href="http://webhelp.esri.com/arcgisdesktop/9.3/index.cfm?TopicName=ST_NumPoints" target="_blank">ST_NUMPOINTS</a>) which returned a 400,000+ character string using the <a href="http://webhelp.esri.com/arcgisdesktop/9.3/index.cfm?TopicName=ST_LineString" target="_blank">ST_LINESTRING</a> M constructor, I updated the code to:</p>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #FF0000;">string</span> sql <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;INSERT INTO GEOMETRY_TESTBED VALUES(1, SDE.LINESTRING M(:p_wkt, :p_srid))&quot;</span><span style="color: #008000;">;</span></pre></div></div>

<p>Insert worked fine. So lets try another geometry &#8211; this time using <a href="http://webhelp.esri.com/arcgisdesktop/9.3/index.cfm?TopicName=ST_NumGeometries" target="_blank">ST_NUMGEOMETRIES</a> &gt; 1 I selected the longest multi part with the highest number of verticies. This time the database returned a geometry with the <a href="http://webhelp.esri.com/arcgisdesktop/9.3/index.cfm?TopicName=ST_MultiLineString" target="_blank">ST_MULTILINESTRING</a> M constructor, I updated the code to:</p>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #FF0000;">string</span> sql <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;INSERT INTO GEOMETRY_TESTBED VALUES(1, SDE.MULTILINESTRING M(:p_wkt, :p_srid))&quot;</span><span style="color: #008000;">;</span></pre></div></div>

<p>Insert worked fine! Ok then, now I tried my geometry as returned from my ArcObjects parser &#8211; this time amended to have a dummy M value appended to each coordinate, and using the ST_MULTILINESTRING M constructor. Worked!</p>
<p>Is this a bug with the ST_MULTILINESTRING constructor within the ESRI ST implementation on Oracle? Somewhere under the hood is the UDT using a varchar when it shouldn&#8217;t be?</p>
<p>Has anyone else seen this issue?</p>
]]></content:encoded>
			<wfw:commentRss>http://mapbutcher.com/blog/?feed=rss2&amp;p=522</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Gold Coast to Palm Springs</title>
		<link>http://mapbutcher.com/blog/?p=517</link>
		<comments>http://mapbutcher.com/blog/?p=517#comments</comments>
		<pubDate>Mon, 22 Feb 2010 11:23:12 +0000</pubDate>
		<dc:creator>mapbutcher</dc:creator>
				<category><![CDATA[porterhouse]]></category>
		<category><![CDATA[ESRI Developer Summit]]></category>
		<category><![CDATA[OZRI]]></category>

		<guid isPermaLink="false">http://mapbutcher.com/blog/?p=517</guid>
		<description><![CDATA[Ding dong, I haven&#8217;t had time to think since Christmas. It&#8217;s been really busy at work, with the big project I&#8217;ve worked on for the past year coming to a close and I&#8217;ve started to work on some new projects. I&#8217;m looking forward to a change.  Amongst all the mayhem of tenders, my daily batch [...]]]></description>
			<content:encoded><![CDATA[<p>Ding dong, I haven&#8217;t had time to think since Christmas.</p>
<p>It&#8217;s been really busy at work, with the big project I&#8217;ve worked on for the past year coming to a close and I&#8217;ve started to work on some new projects. I&#8217;m looking forward to a change.  Amongst all the mayhem of tenders, my daily batch of Jira and the occasional bit of consultancy March and April are shaping up quite nicely thank you.</p>
<p>To begin with myself and my good friend Peter are heading to the Gold Coast to present at this years <a href="http://www.esriaustralia.com.au/esri/5106.html" target="_blank">OZRI</a>. We&#8217;re going to share our experiences of using <a href="http://en.wikipedia.org/wiki/Scrum_(development)" target="_blank">SCRUM </a>on a large GIS project. It&#8217;s been a great journey with plenty of ups and downs but I think that it&#8217;s been a success.  More than anything else I feel we&#8217;ve worked together as a team  to deliver on what the organisation wanted. I think SCRUM engenders a culture of working together which removes the old school vendor/client bullshit which often gets in the way of just getting on and getting the job done.  To top it all off I&#8217;ve managed to squeeze a <a href="http://en.wikipedia.org/wiki/Pork_pie" target="_blank">pork pie</a> into my slide deck &#8211; that alone is an achievement I am proud of.</p>
<p>Following OZRI I&#8217;m heading across to the <a href="http://www.esri.com/events/devsummit/index.html" target="_blank">ESRI Developer Summit</a> &#8211; It&#8217;s my first ever ESRI event and I will be putting on my little c# badge, packing in the kool aid and soaking it up &#8211; I&#8217;m hoping to catch up with <a href="http://alpascual.com/blog/" target="_blank">some</a> <a href="http://briannoyle.wordpress.com/" target="_blank">of</a> <a href="http://jeffgermain.wordpress.com/" target="_blank">the</a> <a href="http://blog.davebouwman.com/" target="_blank">people</a> <a href="http://viswaug.wordpress.com/" target="_blank">whose</a> <a href="http://www.spatiallyadjusted.com/" target="_blank">blogs</a> I&#8217;ve read for years but never had the chance to meet  - i could go some <a href="http://www.dtsagile.com/events/devsummit" target="_blank">Belgium BBQ</a> action</p>
<p>Aside from all this I have an old friend visiting from the UK, tickets for <a href="http://www.casadecalexico.com/" target="_blank">Calexico</a> and the legendary <a href="http://www.buddyguy.net/" target="_blank">Buddy Guy</a> and I&#8217;m heading to NZ to see my Brother &#8211; it really couldn&#8217;t get any better than this&#8230;&#8230;..or could it</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="560" height="340" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/4_EuRfwchz4&amp;hl=en_US&amp;fs=1&amp;" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="560" height="340" src="http://www.youtube.com/v/4_EuRfwchz4&amp;hl=en_US&amp;fs=1&amp;" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
]]></content:encoded>
			<wfw:commentRss>http://mapbutcher.com/blog/?feed=rss2&amp;p=517</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Anybody interested in working in New Zealand?</title>
		<link>http://mapbutcher.com/blog/?p=513</link>
		<comments>http://mapbutcher.com/blog/?p=513#comments</comments>
		<pubDate>Tue, 12 Jan 2010 10:46:40 +0000</pubDate>
		<dc:creator>mapbutcher</dc:creator>
				<category><![CDATA[porterhouse]]></category>
		<category><![CDATA[GBS]]></category>
		<category><![CDATA[GIS]]></category>
		<category><![CDATA[Job]]></category>

		<guid isPermaLink="false">http://mapbutcher.com/blog/?p=513</guid>
		<description><![CDATA[From Nelson My good friends Tony and Harley are looking to add a their growing team.  Having worked at GBS I can recommend the team there &#8211; a great bunch and a really good attitude to work and life. Hey you might even get to fly on some very small planes over the best landscapes [...]]]></description>
			<content:encoded><![CDATA[<table style="width: auto;" border="0">
<tbody>
<tr>
<td><a href="http://picasaweb.google.com.au/lh/photo/-PrcKl2W5m8x-oZVEw7jIA?feat=embedwebsite"><img src="http://lh3.ggpht.com/_twgZQc1wG_g/R5Kqa97pj1I/AAAAAAAABlU/7kGA620_VjU/s400/IMG_2245.JPG" alt="" /></a></td>
</tr>
<tr>
<td style="font-family:arial,sans-serif; font-size:11px; text-align:right">From <a href="http://picasaweb.google.com.au/Cucumber.Sunshine/Nelson02?feat=embedwebsite">Nelson</a></td>
</tr>
</tbody>
</table>
<p>My good friends Tony and Harley are looking to add a their growing team.  Having worked at <a href="http://www.gbs.co.nz" target="_blank">GBS </a>I can recommend the team there &#8211; a great bunch and a really good attitude to work and life. Hey you might even get to fly on some very small planes over the best landscapes in the world, work on some really interesting projects, meet some great people and have the occasional social beer <img src='http://mapbutcher.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Find out more <a href="http://www.gbs.co.nz/download/GIS_Developer_Advert_Dec_2009.pdf" target="_blank">here</a></p>
]]></content:encoded>
			<wfw:commentRss>http://mapbutcher.com/blog/?feed=rss2&amp;p=513</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
