Archive for August, 2009

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.

Tabbed pages in Sharepoint

August 7th, 2009 by S Woods

I’m always on the lookout for ways to improve our Sharepoint sites, especially for ideas on better organizing content on the page. I recently found this page template for a tabbed Sharepoint web page. I immediately uploaded the template and put it to work on several internal projects. Suddenly gigantic pages of confusing information were all tidy and well organized!

Implementing the page is really simple. You just upload the file and get to work, adding web parts like you would any other page in Sharepoint. You change the names of the tabs by modifying the web part and choosing to edit the source instead of using the rich text editor. It also works well in Sharepoint Designer, if you’re doing more complicated pages.

Shortly after testing it out on our intranet, I was tasked with updating our forums on the Geocortex Support Center. With the release of Geocortex 2.0, we decided to add forums specific to API development for our new REST, Flex, JavaScript, and Silverlight APIs, which was a perfect time to update the Discussion Forum page. The tabbed interface gave me a way to present all of our forums without making our visitors scroll down the page to see them, giving the page a nice, crisp new look.

MXD file size

August 6th, 2009 by Stephanie Blazey

Have you ever noticed that your MXD file size sometimes increases, even when you haven’t added any new data or symbology? I had noticed it a number of times but until now could offer no explanation for it. I was interested to learn that MXD files may grow in size after being saved multiple times because they can become fragmented. Saving a fragmented map document as a new document may reduce its file size.