Archive for March, 2009

The Cost Of Quality

March 26th, 2009 by Kevin Rintoul

One of the numbers I keep track of while working on the Optimizer project is the number of outstanding issues logged against it. We really try hard to ensure that each version of Optimizer is released with an empty bug database. The reason is simple. During a previous coding gig, I calculated that each bug, on average cost about $350 to fix. To come up with that number, I added the salaries of the programmers dedicated to fixing bugs together and divided by the number of bugs they fixed over a year. One of the products had plenty of issues so the getting supporting data was not hard to come by. I didn’t factor in overhead costs or the amount of free juice they consumed. $350 represents the average cost in terms of straight salary. Obviously if we discover bugs before our customers do, the cost is less. If we can automatically find bugs by writing good quality unit tests, or keep bugs from getting into the product in the first place, the cost is much less.

The cost of quality is not negligible and must be taken into consideration when planning projects. Adequate time for doing proper design, writing unit tests, and performing user acceptance testing must be budgeted for. Having said that, I would argue that the cost of quality is often less than we think. An awesome side effect of higher initial quality is that our developers get to spend their time adding new functionality to the product which has a positive impact on the morale of the development team (who doesn’t like doing new development), not to mention happier support staff (fewer issues to deal with) and very happy customers (feature packed releases that help them do their jobs better).

Geocortex Essentials 1.5.2 Released

March 24th, 2009 by Drew Millen

This afternoon we cut our final “1.X” release of Geocortex Essentials: 1.5.2 (Geocortex Essentials 2.0 builds on top of 1.X).

1.5.2 contains some big features, and a lot of quality improvements. We were able to incorporate a tonne of features and defect fixes specifically requested by the forum community on the Geocortex Support Center. Among a couple dozen other features, we’ve added support for group layers defined in map services:

GroupLayer

The release is available on the Geocortex Support Center, along with detailed release notes.

Stay tuned for announcements related to Geocortex Essentials 2.0!

Map Optimization

March 18th, 2009 by Stephanie Blazey

Often, making small changes to map symbology and the properties of layers can significantly reduce a map’s drawing time. Here are some tips for map optimization:

  • Confirm all data are in the same projection. On-the-fly projecting can make your map take twice as long to load.
  • Data should be representative of viewing scale: generalized data (e.g. county boundaries, lakes, highways) can show at full extent, detailed data (e.g. parcels, local streets, imagery) should show only when zoomed in.
  • Use simplified data at smaller scales. For example, a detailed coastline may draw slowly at full extent. If it is simplified to have fewer vertices and line segments, it will draw much faster with little difference in appearance at full extent. The more detailed data can be used at closer zoom.
  • Set minimum scales (maximum zoom level) for all layers, and set MXD project full extent.
  • Minimize use and extent of labels.
  • Minimize use of offsets and masking.
  • Avoid serif fonts, as the “twiddly bits” take longer to draw.
  • Avoid using joined data. Instead, export the data to a new feature class that contains the joined data. If you must use joined data, check out the performance tips for using joined data in the ArcGIS Desktop Help.
  • Use queries where possible to remove features that are not required on your map.
  • Point, line, polygon draw order is generally preferred – note that transparent polygons may be best displayed as topmost layer.
  • Use the “ESRI optimized” symbol set for lines and polygon fills:

esri_optimized

A Sharepoint Resource

March 17th, 2009 by S Woods

There’s a lot of information on the web about Sharepoint, but if you look more closely, a surprising amount of it relates to earlier iterations of the software. It can be very frustrating to find a site that seems to have the answer, only to discover that their complex workaround isn’t necessary because the feature is now available in the software at the press of a button.

For reliably up-to-date information, I use End User Sharepoint. They have an excellent e-newsletter and lots of insightful and practical articles on both the big-picture thinking and planning that ought to go into making a site and details on the building blocks that will go into it.

Geocortex & Silverlight at PUG 2009

March 11th, 2009 by Rob Lenarcic

A couple weeks ago during the plenary session at the Petroleum User Group Conference (PUG) in Houston, the ESRI Energy Team presented an ArcLogistics solution that included mobile and AVL (automatic vehicle location) viewer components.

At the invitation of ESRI, Latitude created the AVL viewer component using ESRI’s new Silverlight API. Although our team is slammed right now, helping build the demo tied in nicely with the work we’re doing with Geocortex Essentials 2.0. I was in the audience, and I thought the ESRI team did a great job in presenting a complete workflow from start to end (we also appreciated them acknowledging our contribution on stage).

The purpose of the demonstration was to illustrate the power of ArcLogistics to optimize the processing of oil field production maintenance orders. The scenario is built using maintenance orders with the Rocky Mountain Oilfield Testing Center field data in Wyoming. Maintenance orders are taken from SAP, loaded to ArcLogistics and optimized between a small fleet of contractor vehicles. Diagnostics indicate the expected savings in time and mileage. The routes for each truck are dispatched by wireless to a simulated in-car station that informs the driver of his schedule for the day and provides an advised route generated by ArcLogistics. Through a lightweight mobile app, the contractor indicates that he has completed a job, posts it back to the dispatch desk, and then continues to his next job. Using a Geocortex tracking viewer (via ESRI’s Silverlight API), we then simulated the dispatch center’s view; real-time tracking of multiple fleet vehicles on an interactive map.

I expect that ESRI’s ArcLogistics tied in with a mobile solution has a bright future (and not just in the petroleum industry).

Geocortex & Silverlight at PUG 2009

March 11th, 2009 by Rob Lenarcic

A couple weeks ago during the plenary session at the Petroleum User Group Conference (PUG) in Houston, the ESRI Energy Team presented an ArcLogistics solution that included mobile and AVL (automatic vehicle location) viewer components.

At the invitation of ESRI, Latitude created the AVL viewer component using ESRI’s new Silverlight API. Although our team is slammed right now, helping build the demo tied in nicely with the work we’re doing with Geocortex Essentials 2.0. I was in the audience, and I thought the ESRI team did a great job in presenting a complete workflow from start to end (we also appreciated them acknowledging our contribution on stage).

The purpose of the demonstration was to illustrate the power of ArcLogistics to optimize the processing of oil field production maintenance orders. The scenario is built using maintenance orders with the Rocky Mountain Oilfield Testing Center field data in Wyoming. Maintenance orders are taken from SAP, loaded to ArcLogistics and optimized between a small fleet of contractor vehicles. Diagnostics indicate the expected savings in time and mileage. The routes for each truck are dispatched by wireless to a simulated in-car station that informs the driver of his schedule for the day and provides an advised route generated by ArcLogistics. Through a lightweight mobile app, the contractor indicates that he has completed a job, posts it back to the dispatch desk, and then continues to his next job. Using a Geocortex tracking viewer (via ESRI’s Silverlight API), we then simulated the dispatch center’s view; real-time tracking of multiple fleet vehicles on an interactive map.

I expect that ESRI’s ArcLogistics tied in with a mobile solution has a bright future (and not just in the petroleum industry).

Optimizing Geocortex Optimizer

March 8th, 2009 by Kevin Rintoul

I’ve been battling all week with space issues in Geocortex Optimizer. For those of you not familiar with it, Geocortex Optimizer is our new product that collects information regarding your ArcGIS Server installation and presents this information to you a number of ways in order for you to make good management decisions regarding your GIS investment.

When you install Optimizer for the first time, it examines your system, looking for log files from both IIS and ArcGIS servers. It then reads these log files, massages them and stores them away in a SQL Server database for further analysis. The problem is that the amount of information collected can be huge particularly if you have a busy site that you have been running for a while. On one server we tested, we processed more than 8 million records in a little over a few hours before we ran into a capacity bottleneck.

One of Optimizer’s features is that it will not loose data if the SQL Server database it is using is down. When this happens Optimizer quietly serializes the data to disk that it would have written to the database. When the database becomes available again it writes those saved records to it. The problem I discovered is that .NET datasets serialized to xml are really large. I considered using binary serialization but then a coworker suggested that I serialize to a GZip steam instead of a regular file stream as I had been doing. This sounded promising because database data usually compresses 20 to 1. I had no idea how easy it would be. Check out the following snippet taken from Optimizer

using (Stream stream = new FileStream(filename, FileMode.Create))

{

  using (Stream StreamOut = new GZipStream(stream, CompressionMode.Compress))

  {

    ds.WriteXml(StreamOut, XmlWriteMode.WriteSchema);

  }

}

These few lines of code resulted in a 40x space savings over uncompressed xml. I’ve never used GZIP streams before but I’m beginning to think of all kinds of applications where they could be really be useful.

Map Projections

March 2nd, 2009 by Stephanie Blazey

There are hundreds of map projections out there and knowing which one to choose for your map can sometimes be a challenge. When choosing a projection, you should consider what your data are showing, which qualities you need to preserve (shape/area/direction/distance), and who your audience is. If you are mapping population density, for example, your map is showing the number of people over a certain area, so you would want to choose an “equivalent”, aka “equal area” projection to best preserve area. If your audience is not geography savvy, then a conformal projection that preserves shape may be your best choice because it will make your map “look right”. If the area that you are mapping is relatively small (e.g. one U.S. State as opposed to all of North America), you will probably find that there is a projection designed specifically for your area (e.g. a State Plane projection). Your data may also dictate which projection to use – if the majority of your data is already in a suitable projection, then it will be most efficient to stick with that. If you really aren’t sure which projection to choose, search the web for maps of your area – you will often find that most of them are in a certain projection.

If you are using ArcIMS, these links from the ArcXML Programmer’s Reference Guide are a great help to find the right projection ID and details for your site-config:
Projected coordinate systems sorted by ID
Projected coordinate systems sorted alphabetically
Geographic coordinate systems sorted by ID
Geographic coordinate systems sorted alphabetically

The ArcGIS Desktop Help also has a list of supported map projections, for use in ArcMap and ArcGIS Server.