Google Calendar Sync for Outlook

A couple of days ago Google released Google Calendar Sync for Outlook.  It’s free, so I downloaded it and gave it a test drive.  In summary, it’s not ready for prime time… yet.  It’s major limitation is that (unlike Google Sync for your Blackberry which allows you to choose which of your calendars to sync) it will only sync your primary calendar.  Also, unlike GSyncIt ($10), you cannot choose which Outlook calendar you want to sync with.  Once Google overcomes these limitations, I’m sure it will be a superior product to any competitor’s and of course, well worth the price. Slide Show

My client, Terra Nova Pools, wanted to add a new page to their site that would display a looping slide show of before and after pictures of their clients’ pools. I decided to implement this page using this solution that relies on the javascript library to fade a series of div tags in and out sequentially. The solution worked well with the exception of one small glitch – the screen seemed to jump between slides in FireFox (see comments on page above). I solved this by setting the position attribute for all slide divs to absolute with the following line of css:

div.slide { position: absolute; }

You can see the results at:

I chose this solution because I knew I could rely on the library to support a wide array of browsers as well as allow me to use web standards to ensure that the page would degrade nicely for users on mobile devices or older browsers. I had previously used Dynamic Drive’s ultimate fade in javascript slide show for the site’s home page, but that did not work at all in Safari and required defensive coding to be able to degrade nicely.

Blackberry Sync Part 1: Blackberry Calendar to Google Calendar

UPDATE: I am no longer using the solutions outlined in this post. See my more recent post about Google Sync.

Like everyone else, I use Google calendar as my primary calendar. Having just bought a Blackberry Curve 8320, I wanted a way to sync the calendar on the device w/ my Google calendar. Fortunately (or unfortunately) there is no shortage of ways to do this. After trying several methods I ended up deciding to use CompanionLink for Google Calendar, and for me it’s worth every penny of the $29.95 price tag even though there are several free solutions out there.

Here’s what I was looking for

  • Direct desktop synchronization, OR
  • Synchronization via Outlook 2002 (paying for an upgrade of Outlook to 2003/2007 is out of the question)
  • Robust support for all day events, recurring events, and reminders
  • Automatic or periodic syncing whenever the device is connected to the PC

Companion link was the only solution that met all of those requirements. The only limitation that I have come across is that it will not sync multiple calendars, but that is not a deal killer for me. I should also say that I was not able to get it to work properly until I found this set up guide.
Here’s some of the alternatives that I didn’t choose and why.

Desktop Syncing Solutions
It seems like there are a lot of Outlook 2003/2007 plugins that will do what companion sync does for free or at least for less money. That’s great if you have Outlook 2003/2007, but I don’t so I couldn’t really say how well these work or don’t. Maybe they’ll work for you.

“Over the Air Syncing” Solutions
The appeal of over the air syncing is obvious since you don’t need to be tethered to a PC to sync. The reality, however, is a little different. Many limit the number of days ahead that can be synced (for data traffic reasons), and some require pretty heavy tweaking of your network connection settings – which can be problematic for other apps on your device.

  • GCalSync (free) – You get what you pay for. I was able to get this working after tweaking some connection settings, but the resulting calendar events on the hand held were off by several hours. Although there is a fix for the apparent timezone issues, I would still say that this is not yet ready for prime time since it does not support recurring events, reminders, and it even messes up all day events. Furthermore you must manually start the sync each time.
  • GooSync – This is really just a service that will provide a SyncML host for your Google calendar data. It requires a download of a separate SyncML client app for $19.95. I could not get the client app to work at all, so my money and time go elsewhere.

“No Sync” Solutions
You may even wonder why I would want to sync at all since I can access my Google calendar via the Blackberry web browser or Opera mini. Mainly it’s because even though my Blackberry’s screen may be tiny, I like to start out by looking at a whole month, not an agenda. And what happens when I want to see if I’m free some day 3 months from now? That being said, the mobile web version of the Google calendar does fill in the gap nicely when my Blackberry’s calendar may be out of sync, or if I need to see something on one of the other calendars (besides my primary calendar).

Hopefully, Google will soon release a mobile app for their calendar just like the ones for gmail and maps. Then we can put all this unpleasantness behind us.

Convert GIS Data Files to GeoRSS Format

Since my last post on the topic of adding polygon data to your VirtualEarth map, VE has released not one, but two versions of the API. Starting with version 5 you are now able to add a layer containing polygon and line features to your map via a GeoRSS feed. Pretty cool.

Now the hard part becomes getting your GIS data in GeoRSS format, and that is where the GeoFeeder from BrightiSolutions comes in. It’s a desktop application that reads many types of GIS data (including ESRI Shapefile) and outputs the features in a GeoRSS file format. Check out the demo to see how you can customize the output.
Unfortunately it’s not free, but it could well be worth the $95 license if you don’t have the time to write your own code to converting your GIS data to a GeoRSS file.

Adding Polygon and Polyline Layers to a Virtual Earth Map

We all know that the Virtual Earth (VE) API makes it easy to overlay a layer of your own georeferenced point data as a layer of pushpins on their maps. However, what if you need to add non-point georeferenced data such as zip codes or pipelines? The VE API only supports two types of layers: point and tiled image. The VE API does support adding both individual polygons and individual polylines to any map (and impressively these shapes will even be displayed in 3D mode), but there is no support for adding a layer of such features. In this post I will look at a couple of hacks for achieving this and the reasons why you might want or (most likely) not want to implement them. In Part 2, I’ll explore using tiled image layers to display non-point data in VE.

The first solution that I have found to this problem comes from This site displays a VML overlay containing the polygon or polyline features on top of the map. While this is an ingenious solution, I wondered why they did not take advantage of the VE support for adding polygons and polylines directly to the map instead of using a VML overlay. After all, this required them to not only write their own code to generate VML graphics, but also to handle rescaling and shifting the graphics when the user panned or zoomed the map. In addition to the burden of writing more code, there are issues with browser support for VML (though I will admit it is much better now than it was a few years ago). I suspected that the only reason to go to that much work would be to improve performance, and I would quickly confirm my own suspicions.

I created my own demo application ( by tweaking their code a bit to try adding the features as polygons or polylines to the map directly using the VE API instead of creating a VML overlay. Using the same Seattle zip code data for comparison I found that the initial load of the maps was slower, as were subsequent pan and zoom operations, but the difference in performance was barely perceptible. However, the performance went well into the “unusable” end of the spectrum when I added my own higher resolution data (with more vertices per polygon). Using my demo application, it took about 90 seconds for the initial map load and around 20 second for each subsequent pan or zoom operation. Further testing demonstrated that the bottleneck was not in the parsing of the coordinate data (usually < 10% of total processing time), but was indeed on the VE server’s end of the load operation. Essentially, if you want to use the support for polygons and polylines built-in to the VE API to display a layer of GIS data, you will quickly find yourself limited by the number of vertices that make up the features you add to the map. It works great if you want to add a rectangle representing the state of Wyoming, but it is not ready for real world GIS data (imagine trying to add all the property parcels in Los Angeles County). Another option for adding your own polygon and polyline data to a VE map is the tiled image layer. In Part 2, I’ll examine the pros and cons of this promising method, but in the mean time, you can view an example at

Baby Steps to Code Generation

Write code snippets today and you can roll them into more robust code generation templates later.

Goal: get to the point where you click one button and the code for your whole app is written for you automatically.

Reality: Most business problems are more complex than just performing CRUD operations on a single table at a time, and I haven’t found a solution that can autogenerate such complex logic.

In the mean time, I’m finding the Code Snippets feature in VS 2005 to be a step in the right direction. The best part is that there is little to no effort lost in creating snippets as you go. If you later decide to go with a template-based code generator like CodeSmith.  When that time comes, you can use a little regEx magic to roll up those snippets into more robust templates.

Terra Nova Pools Site Launched!

My most recent project has been to create the first web site for Terra Nova Pools

My most recent project has been to create the first web site for Terra Nova Pools, a swimming pool design and construction company based in Orange County (CA). I launched the site a few days before the client’s deadline of Oct 1st, 2006.

I’ve been really excited about this project for a lot of reasons. Firstly, it’s the only project outside of this site that I have done without partnering with a design team (“Damn it Jim, I’m a programmer not a designer”). It’s also the first time that I’ve been responsible for the search engine optimization, and the result is that it is some of the cleanest XHTML and CSS code I’ve ever written. I’ll add the site to my portfolio soon and include details about the technologies I chose while implenting the site.

CSS Tabs Made Easy

There’s a lot of web standards-based css tab menus out there, but I have to say I’m pleased with this one by Ian Andolina because it dropped into my application and worked right away. It took me just a couple of minutes to change the font and coloring, but other than that, it was a breeze.

Though I had a little trouble with Adam Kalsey’s own tabbed menu, his page lists several alternatives (which is where I found Ian’s above).