Archive for 2009

A busy fall conference season..

September 30th, 2009 by Darin Herle

ESRI UC BoothWith a month into the fall conference season, September has already brought the Latitude team to a wide number of conferences worldwide, including (but not limited to!) the Intergeo event in Germany, the GITA Oil and Gas conference in Houston, the Hawaii/Pacific GIS event in Honolulu and a number of ESRI Canada events across this great, big land. I find myself sitting in the part of our office where its easy to detect the travellers: droopy plants, the blinking voicemail light and large stacks of mail crowding out desks…

And more conferences are to come! Look for the enthusiastic (and slightly jet-lagged) Latitude conference team at an event near you. So far, our (partial) list includes the URISA show, EGUG, Latin America ESRI User Conference, AGIC, NEARC, FutureView, Minnesota GIS Conference, North Dakota GIS Conference, PUG, ESRI European User Conference, NCAUG and more.

New SharePoint Users’ Group

September 29th, 2009 by S Woods

Victoria has a new SharePoint Users’ Group that will be holding its first meeting this week. It takes place up at UVic on Thursday (October 1st).

It sounds like the first one will be a meet and greet and a little SharePoint 101. Users’ groups are a great way to gain access to other people working on the same sorts of things you are for ideas exchange and peer support!

Geocortex Optimizer 1.3 Has Been Released

September 21st, 2009 by Kevin Rintoul

A few months ago, we started development on Geocortex Optimizer 1.3.

In some ways, this release was like many others. We had more features than we had people-hours to develop. We had the normal number of technological challenges and experienced the early project stresses as we moved features from the poorly defined fuzzy pile to the completely understood and fully implemented pile. We also had the usual dose of competition for developer resources as development priorities moved over the three month development cycle.

This release also seemed quite different and it was initially hard for me to identify what the cause was. Normally, two weeks before a final release, the product is really solid and a nice clean release is all but a certainty but two weeks ago, things seemed to be challenged. I was puzzled. We followed the same development methodology we normally do. We performed the same level of testing and had a nice long beta period. Our customers were involved in the development process which is a positive success factor on any software projects but for some reason, things didn’t seem to be coming together as they normally did.

I thought about this long and hard and then realized what was different: we released our beta before it was feature complete. You see, we decided to add report configuration to Geocortex Optimizer but when we started working with it, we realized that our users were going to have trouble with it. It didn’t flow as well as we would have liked and the consensus was that with a little effort, we could make it much better. At that time, we were close to our beta release so we decided to release it as-is and rework during the beta test period. I now understand why the often recommended yet infrequently followed advice proffered by the software gods is to release a beta when you are feature complete and to only fix bugs during the beta period. While I am sure that our decision to improve configuration was the right one, software project managers should realize that doing so increases risk and adds a substantial amount of pre-release excitement. Iterative development can sure be uncomfortable at times.

Notwithstanding these challenges, Geocortex Optimizer 1.3 will be a good release with some great new features. Here are the most significant additions:

  • Report configuration. I think this feature really turned out well and it will enable our customers to easily view their data in a number of different ways. It is a good tool; sometimes the difference between using something well and not using it at all is good tool support. I think our report configuration provides this in spades.
  • API Support. In addition to Web ADF, Geocortex Optimizer now fully supports ESRI’s new JavaScript, Silverlight and Flex APIs. ;
  • Support for ESRI’s 9.3.1 optimized map services. Many of our users are taking advantage of ArcGIS Server’s optimized map services (MSDs). Geocortex Optimizer 1.2 predated these services and as a result did not support collecting stats for them. It does now.
  • Upgrading. The feedback we received from our users is that they would like to not have to reinstall and reconfigure Optimizer each time they upgrade, no matter how good we made the configuration utility. We listened and it’s now possible to directly upgrade from Geocortex Optimizer 1.2 with few issues.
  • Documentation. We collect a lot of data and have a large collection of reportlets that roll-up that data into a useful form (assuming you’re clear about how that data informs decision making). We got feedback that people wanted more guidance and insight into what a given report is telling them and what they could/should do with information in a given report. For 1.3, we’ve endeavoured to create better interpretive documentation describing how best to use the information contained in Geocortex Optimizer reportlets.

Existing Geocortex Optimizer users are able to download version 1.3 from the Geocortex Support Center

Caching Imagery with a Raster Catalog

September 18th, 2009 by Stephanie Blazey

One way to increase the performance of imagery in your map service is to cache it. Since it greatly reduces the amount of time required to render the imagery on your map, caching will allow you to show your imagery at a far greater extent than you could if it were being brought in dynamically. While imagery may lend itself to caching, I find on occasion it can be a bit troublesome to get the caching going. I had a bout of Error 999999 with my latest caching project – turns out 1400 sid images covering an entire county was a little more than ArcCatalog could chew. Fair enough, I had experienced similar issues before where I couldn’t even get my ArcGIS Server map service to start because I was throwing too much imagery at it.

Enter the Raster Catalog. Using an unmanaged raster catalog as opposed to a managed raster catalog saved me a bundle of raster catalog loading time. While the managed raster catalog can take as long, or longer, than your cache creation time – so in my case, a day or two – the unmanaged raster catalog takes far less time to create and load – for me, under two hours.

And thanks (many, many thanks) to ESRI Support and the Color Balancing option in ArcMap, my previous misconception that raster catalog image quality had to be poor compared with the original imagery, is a thing of the past – and I have the completed cache to prove it.

Software Versioning and Releases in Geocortex Essentials

September 11th, 2009 by Drew Millen

If you’re familiar with the software history of Latitude Geographics, you’ll know that we used be a Java shop. Now, we still use Java for our ArcIMS generation products, while we’ve adopted .NET for our ArcGIS Server Generation products.

In contrast to Java, Microsoft .NET has a very explicit versioning scheme. From MSDN:

“Each assembly has a version number as part of its identity. As such, two assemblies that differ by version number are considered by the runtime to be completely different assemblies. This version number is physically represented as a four-part string with the following format:
…”
http://msdn.microsoft.com/en-us/library/51ket42z(VS.71).aspx

When we build our .NET products, we want our assembly versions to reflect the released product version, and vice-versa.

Most of the software industry is in agreement on the use of the first two digits of a software version (major and minor). Incrementing the major version is typically reserved for releases containing major new features, rewrites, new technologies or paradigms. Incrementing the minor version signifies a release containing new features. There is some discrepancy in the industry; however, over the use of the build and revision numbers. Indeed, our staff has had differing views on how to use these numbers as well.

At the release of Geocortex Essentials 2.0, we’ve decided to change our perspective on this so it’s worth mention.

Pre-2.0
Prior to 2.0, a build number increment could include new feature development. That is to say that 1.3 and 1.3.1 both introduced new features; however, 1.3 was probably more significant than 1.3.1 with regards to the features it introduced. A “Hotfix” typically embodied a release containing bug fixes only (e.g., 1.4 Hotfix 1). It is worth mention that revision number is automatically generated, and typically reflects the number of physical builds created on our build server since the increment of a build, minor, or major version number (i.e., we “zero” the revision number when incrementing any other version number).

We also introduced “Service Packs” when we felt that the changes didn’t warrant a version upgrade (e.g., 1.5.2 SP1). This was not a decision based on a “rule”. I’ve always been dissatisfied with this somewhat ad-hoc approach to versioning, so following 2.0 we’ve decided to be a bit more procedural.

2.0 and Beyond
As with prior to 2.0 the major and minor version number will be reserved for major product architectural or conceptual changes, and the revision number will reflect the number of physical builds created on our build server. The main difference is the way in which we will treat the minor and build numbers. Going forward, we will increment the minor version any time that a release introduces new features. We will increment the build number to signify a release which contains bug fixes. A few examples will help clarify.

2.0.0.745 Major release, includes architectural changes and introduces the Geocortex Essentials REST Elements.
2.0.1.792 Build release (or “dot” release), contains bug fixes only.
2.1.0.XXX Minor release, will include new features.
2.1.1.XXX Dot release, contains bug fixes only.
2.2.0.XXX Minor release, new features.
3.0.0.XXX Major release will include architectural changes, and/or introduce new technologies or paradigms.

It is worth mentioning that a goal we have in the near future is to better support version upgrades of our Geocortex Essentials software. If we can distribute “dot releases” frequently without causing our customers the hassle of migrations during upgrades, we are better equipped to provide faster turn-around times between defect detection and resolution.

ColorBrewer 2.0

September 3rd, 2009 by Stephanie Blazey

We have previously mentioned ColorBrewer, which is a great web tool for selecting color ramps for your maps. ColorBrewer 2.0 was recently released, and includes more information about the tool and its options. You can turn on a background hillshade layer, view semi-transparent colors, and filter your color ramps based on their suitability for printing and photocopying, and those that are colorblind safe.

The National Cancer Institute GIS has created the ColorTool plugin for ArcMap that you can download here, which makes it even easier to incorporate ColorBrewer color ramps into your MXDs!

ColorTool

Web ADF vs. RESTful APIs? Not as black and white as some might like…

August 31st, 2009 by Steven Myhill-Jones

People frequently ask us about our take on ESRI’s RESTful APIs in the context of Web ADF. Basically, the RESTful APIs are an important and needed technology. They also aren’t a cure-all, and sometimes Web ADF is the right path (despite its flaws, there are lots of organizations satisfied and successful with Web ADF). We consider REST and Web ADF to be complementary technologies that we envision many folks will choose to run in parallel.

I like the following analogy:

I have five deliveries for you to make. Which of the following two vehicles is better?

apis_vs_adf

Folks that don’t suffer the unfortunate predilection to gravitate permanently to a black and white answer might observe that it depends. If the deliveries consist of envelopes within a ten block radius, the small delivery van is the right choice. On the other hand, if there is two hundred miles between deliveries of heavy crates, then you’re going to want the rig. Which vehicle is better for deliveries? It depends.

Prior to the final release of Geocortex Essentials 2.0 (which ships with REST, JavaScript, Flex, and Silverlight APIs), we were reticent to be too vocal in our situational defense of Web ADF lest anyone accuse us of being biased out of self-interest. However, with Geocortex Essentials 2.0 out the door we now support both platforms; every Geocortex Essentials license includes both our REST Elements and our Web ADF Elements.

Now we can be more vocal about this topic. It isn’t about categorically picking one or the other. ESRI’s RESTful APIs and Web ADF both have their place. The right choice depends on the nature of your app and likely evolution of that app.

Tracking Geocortex Fleet Tracker

August 24th, 2009 by Brett McLean

Right now our team is heads down developing Geocortex Fleet Tracker. I’m personally quite excited about it, so I thought I would share that excitement with the rest of you GIS techies.

Geocortex Fleet Tracker is exactly what it sounds like; a browser-based application for use with Automatic Vehicle Location (AVL). It can be used to track vehicular assets (or, anything with a GPS, for that matter) within a fleet – or across multiple fleets – in real time.

The application integrates seamlessly with ArcGIS Server for display of your own base map data and with ArcSDE/SQL Server for storage of asset histories. Fleet Tracker has a fairly modular design which allows other applications to consume data and services from its REST API. This can include information on a given fleet, an individual asset, or an asset at a particular point in time.

Longer term, and based on interest from our clients and partners, our vision is to allow Fleet Tracker to integrate with Geocortex Essentials applications to combine the functionality of asset tracking with web-GIS. As well, we are considering offering Fleet Tracker as a hosted service for those who do not wish to license the software. Tell us what you think; we’d be happy to hear from you.

For now, here’s a screenshot of the preliminary Silverlight user interface. Of course you can’t tell from a static image, but panning and zooming is incredibly smooth via the ArcGIS Server Silverlight API. It’s a delight to use!

FleetTrackerScreenshot

This post only scratches the surface of why I’m excited about Fleet Tracker, so for those who want to track Fleet Tracker stay tuned to the Geocortex Blog as there will be more information in the future.

Product Development Tools – An Overview

August 17th, 2009 by Drew Millen

It’s been a while since our last “really geeky” blog post; I’d say we’re overdue. For all of our .NET-based products (Geocortex Essentials, Geocortex Optimizer and more recently Geocortex Fleet Tracker) we use a homogenized development environment which relies on a number of “tools” to enable quality and efficient development. For those interested, I’ll outline the tools we’re using and the purpose they serve along with a degree of satisfaction.

Integrated Development Environment: Visual Studio 2008
This is a no brainer. For anyone developing on the .NET Framework, there simply isn’t a better development environment. Some of our developers also like to use PowerCommands for Visual Studio 2008. Of particular use are the “Collapse Projects”, “Edit Project File”, “Open Containing Folder” and “Close All” commands. A few developers have also become quite accustomed to ReSharper. I haven’t started using ReSharper (yet), but from what I hear they’re a lot like using clipless bike pedals – once you’ve started using them you can never go back.

Also, if you’re using Visual Studio and haven’t heard of GhostDoc, check it out. It saves us a bunch of time when creating, formatting and verifying our code documentation.

Source Code Repository and Version Control: Subversion (SVN)
Our products team has had a lot of experience with a few source code control tools. So far, this is the best. We’ve also used CVS, and VSS. Subversion seems to be the superset of features from both products, while providing reliability and ease of use. Our repository is a few years in running, managing hundreds of thousands of lines of code without hiccups.

We use Visual SVN to integrate Subversion directly with Visual Studio, which provides a nice way to manage files in projects. On the file system, we use TortoiseSVN which is built in to the windows shell and reduces management of a repository or working copy significantly. TortoiseSVN is a must-have when using SVN unless you love using the command line.

Automated Build Environment: MSBuild
While we use Visual Studio (VS) to routinely build our products during development, we also run an automated build on a build server separate from Visual Studio. Once projects get to a certain size there’s usually a need to integrate an automated build external to your development environment to incorporate things like documentation, help, installers, automated tests, and packaging. MSBuild serves as a good language since it’s what VS uses internally for project files and it allows us to separate generic build steps (common to all products) from those specific to one product.

Continuous Integration: CruiseControl.NET
When you’re working on a product with more than a few developers, continuous integration becomes invaluable. When a developer commits (checks in to SVN) some code they have modified, CruiseControl.NET (CCNET) detects the change on our build server and automatically runs a build informing the developer of the outcome. We’ve also configured CCNET to run nightly builds, so we always have a drop of last night’s installer.

CCNET is originally a port from the Java-based product, Cruise Control. The web-based dashboard and desktop tool (CCTray) are great ways to get a sense of how all products are doing. For example, right now all builds are running successfully, Geocortex Essentials was last build due to a developer check-in at 9:43am, and the next build check is at 10:39am (in one minute).

Unit Testing: NUnit and NCover
We use NUnit to write our unit and integration tests for our .NET-based products. It does exactly what it’s supposed to do, and it’s easy to use. A low barrier for entry was one of the main requirements when assessing unit testing technologies, and NUnit definitely holds up in that regard. The latest version (2.5) has some nice new feature’s we’ve been able to take advantage of (specifically, parameterized test cases).

NCover is a tool which provides feedback on the amount of code which is covered (executed) by unit tests. Developers can manually run their unit tests with “coverage”, and a GUI tool displays the lines of code which were run by the tests and those that weren’t. Further, it will report the percentage of code which is covered by testing which is useful for enforcing a minimum baseline for testing our products.

We currently use the version of NCover which is packaged with TestDriven.NET for its integration within Visual Studio.

Code Quality: FxCop and StyleCop
When more than a few developers are working on the same products, it can save time and increase code quality if the shared code is conformant to formatting and “best practices” standards. FxCop and StyleCop are tools which enforce coding practices, and code formatting respectively.

By integrating both tools into our continuous integration process, we’re able to reject code which does not conform to standards thus enforcing a baseline level of quality in every line of code committed to our products. What might sound like overhead initial development pays off in code maintainability, readability and overall quality.

Installer Technology: WiX (Windows Installer XML)
WiX is a language used to generate installer packages (MSI files) for Windows. Unfortunately, any installer technology can only be as advanced as the output it generates… in the case of WiX, for example, the limitations of MSI technology are the primary impediment to logical and powerful language tools. That withstanding, WiX has been doing a pretty good job for us. It’s less maintainable then we would like, but perhaps it’s the least of a few evils in the installer world.

Feature and Defect Tracking: OnTime 2009
I’ve blogged about Axosoft’s OnTime in January 2008. I’m still enthusiastic about its performance. It’s a really well maintained product and has provided us with a ton of value.

If I had to start a product development department from scratch I wouldn’t neglect any of the aforementioned tools. The more processes we can automate, the more time we can spend writing code specific to the business requirements surrounding a feature. There are other minor tools we use less frequently, or unrelated to product development specifically that didn’t make this list, but I think I’ve captured the bulk of it.

Geocortex Optimizer 1.3 – A Progress Report

August 15th, 2009 by Kevin Rintoul

I wanted to take a few minutes this morning and give you an update on Geocortex Optimizer 1.3 development. Over the last month or so, we’ve been working really hard on Geocortex Optimizer. We released the beta yesterday and will be busy planning Optimizer 2.0 over the next few weeks. I’m very happy with the results and hope that you will be too.

New features introduced in Geocortex Optimizer 1.3 include:

1. Support for ESRI’s client APIs. We’re able to report client usage data from all of the ArcGIS Server client-side APIs which include Silverlight, Flex and JavaScript. We’ve also expanded our WebADF support to collect ADF tool usage.

2. Support for ArcGIS Server’s Optimized Map Services. ArcGIS Server introduced Optimized Map Services in 9.3.1 and we added support for them in this release.

3. A new report configuration utility. Geocortex Optimizer 1.3 has quite a list of reports that are very configurable. Configuration was less than approachable in earlier versions so we’ve made them a lot easier by adding a reports configuration feature to Optimizer’s configuration tool. When you begin using the new configuration tools, you be surprised at how many different ways you are able to visualize your usage data. It is a real enabler.

4. A new website probe utility that will periodically probe websites and raise alarms based on responses to those probes.

5. Data filtering. It is possible to configure Geocortex Optimizer to ignore data collected from specified sources.

These are just a few of the highlights. There’s more. Check it out. I’m sure you will like it.