Archive for January, 2008

The Internet will never take off because my 14.4 modem ties up my phone line

January 31st, 2008 by David Stevenson

I’m an avid reader of James Fee’s popular GIS blog, and I’m sometimes tempted to weigh in with a comment, but then I wonder if instead it is best left to people wanting to vent. There have been some good discussions lately, so I decided to comment.

This is all reminiscent of everyone kvetching about ArcIMS 3.0 in the summer of 2001, before ArcIMS went on to be such a phenomenal success (overwhelming its flaws). Technology improves over time, yet so many people are ready to pass judgment before a given technology comes into its own. Or maybe we all just need a place to vent with our buddies, then get back to it.

The Decorator Pattern, Generics and Extension Methods

January 21st, 2008 by Kevin Rintoul

While I was researching different ways of implementing a new feature for Gecortex Essentials 1.3, I came across an interesting problem. Basically, what I want to do was to add the same, new functionality to a number existing and possibly future classes. I don’t want to modify these existing classes, and I also don’t want to subclass each of these classes as that could prove to be quite onerous. I looked at a number of approaches.

There is a famous Gang of Four design pattern called the Decorator Pattern that is almost what I want. Essentially, Decorator allows you to “decorate” an existing class with new functionally without having to create a new subclass of that class. The nice thing about Decorator is that you can decorate a class with as many decorations as you want, without creating an unmanageable number of classes at the same time, This sounds promising but it is not entirely what I’m looking for. Decorator is most applicable when there are a lot of decorations and few classes to decorate. I have the opposite problem. I have lots of classes to decorate and only a few decorations.

Next, I looked at .NET Generics. I naively tried to declare a new template class as

class DecoratorClass<T> : T
  {
  public void NewCapability1()
  {
  }

  public void NewCapability2()
  {
  }
}

My idea was that if I wanted to add new functionality to an existing class, I would simply instantiate a new instance of that class as follows


DecoratorClass<ExistingClass> c = new
DecoratorClass<ExistingClass> ();

As it turns out, C# explicitly disallows a generic class from inheriting from its parameterized type and as such, this idea was dead before it began.

C# 3.0 has an interesting feature called Extension Methods that might be just what I’m looking for. In a nutshell, extension methods allow you to add new methods to an existing class without sub-classing, decorating or even recompiling the original class. To top it all off, it seems really easy to use as you can see from the following example.

public static class StringDecoration
{
  public static int ToInt32Ext(this string s)
  {
    return Int32.Parse(s);
  }
}

class Program
{
  static void Main(string[] args)
  {
    string s = "9";
    int i = s.ToInt32Ext();
  }
}

As you can see, strings now seem to have this new method called ToInt32Ext and all I had to do was declare a new static class and declare a single static method with a slightly modifed parameter list. What could be easier?

I still have a lot more work to do before I decide to use Extension Methods, but at the moment, I am pretty happy with the possibilities.

ColorBrewer

January 17th, 2008 by Steven Myhill-Jones

A client sent a link to ColorBrewer, a web tool to help choose optimized color schemes for thematic maps:

http://www.personal.psu.edu/cab38/ColorBrewer/ColorBrewer.html

For each of the mini legends shown at Step 3, you are able to get not only the color specs, but also whether the color palette is friendly for color blindness, projectors, photocopiers, laptops, CRT screens, and printing.

New Webinars Scheduled

January 14th, 2008 by Darin Herle

We put together a number of webinars for the launch of Geocortex IMF 5.2 a little while ago, and got some great feedback from clients. So, we’ve added a few more and hope to offer them on a recurring basis. Topics vary from new products to new releases to technology we feel clients and prospective customers should keep their eyes on. Check out our Learning and Education page for more information and to sign up.

Agile Project Management and Software Development

January 5th, 2008 by Kevin Rintoul

I’ve been thinking a lot about project management lately, given that we are about to dive head-first into another release of Geocortex Essentials. During this development cycle, we’ve decided to adopt a number of Agile development practices. For those new to Agile, Agile Development is best characterized by a number of development practices which include

  1. Frequent and sustained customer involvement with developers.
  2. The use of automated tools including Continuous Integration and Revision Control Systems.
  3. Short development iterations that are normally 2-3 weeks in length.
  4. The use of the Test-Driven development methodology.
  5. The adoption of simple designs that get the job done.

Of course this is an over simplification as there are many Agile methodologies, however, most of these practices are common to each of them.

I must admit that at first I was a little sceptical that Agile would really work in practice, but then I re-read a chapter from a textbook used in a project management course I recently took. In it I found a list of success factors for successful software projects which include

  1. Executive Support
  2. User involvement
  3. Clear business objectives
  4. Formal methodology
  5. Minimized scope.

It’s not hard to see the parallels between Agile practices and these success factors. Given that, it seems to me that many Agile practices can only help make the execution of a software project better.

I’ll let you know how it works out

Axosoft OnTime: Shameless Plug

January 5th, 2008 by Drew Millen

Over the holidays, it can get pretty quiet around the office. It’s a good time to polish up some processes surrounding development.

I’ve been spending some time improving our Agile development practices and have once again been incredibly impressed by the extensibility of our defect and feature tracking system, OnTime by Axosoft.

When we decided to start using OnTime, I was initially compelled by how easy it was for the end-user. I’ve used or experimented with a few issue tracking systems in the past (e.g., Bugzilla, Scarab), all of which seem for too complex to install, use, or maintain when compared to OnTime. Lately, however, I’ve been more impressed with how flexible OnTime has been with regards to customizing it to match our feature development “workflow”.

I can create custom workflow steps for features which “forcefully” guide them from conception to completion, while employing access restrictions. For example, we can allow any system user to request a feature; however, only a user in the Project Manager group can elevate the feature to “approved” and assign a target release version.

New year, new logo

January 1st, 2008 by Steven Myhill-Jones

On Tuesday, we rang in the new year with a soft launch of our new Geocortex logo on the websites.

old_geocortexBecause of the hassle and expense associated with the switch, we’ve put it off for a long time despite the fact the old logo (at right) looks like something a graphic design-challenged entrepreneur might have hacked together in his old Fort Street apartment circa October 1999 using a student license of CorelDraw 8 (and that observation would be as correct as it is specific).

I suspect that nobody really notices a decent logo, but they do notice an amateurish logo. With the help of our qualified graphic design staff, I think the new version better fits the Latitude Geographics of 2008. I’m still wondering if we should’ve dropped the Internet Mapping part, given that the term doesn’t adequately capture what we do (web-based Geographic Information Systems for non-specialist users is on the long/inaccessible side). Oh well.