So, while waiting for a new turn in my career to start, a couple of motivations spurred me to a 2-weekend-long project which I have completed, more or less.
It is no surprise I have always been interested in all kinds of distributed technologies and I have always wanted to hack out a interesting prototype based on _GPS_, _WI-FI_, _3G_ and the likes.
One of the motivations I had is to log events based on the trail I have been or want to go on (on a mountain hike, on a cruise, rafting, sailing, etc). It would be nice to have a map associated with it and pinpoint the locations that we left a trail with an option to leave sticky notes on those markers. With our entire landscape rapidly changing by the day, it is good to capture some good snapshots of where we have been before that landscape changes. This would even be more invaluable with a growing kid in tow so as to strengthen (future) family ties of affinity through nostalgic memorabilia.
I have a PocketPC running on Windows Mobile 5, which I absolutely love. One of my favourite accessories is this Rikaline GPS 6033 Receiver that usually corrects when I feel (or am) lost. With the advent of greater usability, adoption and availability of some great virtual earth or maps technology such as Google Maps and MSN Virtual Earth, I knew I could have more possibilities.
Lest you dont know, in Singapore, while GPS Receivers can be bought cheaply and easily, there is a law permitting against the sale of GPS Transmitters without a govt-issued license, for now anyways. This obviously ties back to privacy concerns, which is understandable. However, I dont see how we cannot control the misuse of that if we know the ins-and-outs of this specific technology.
This is where I decided to spend a few days cooking up this project. I used my favouite modelling tool for this one. No need to pay and install anything, learn a new domain language or any sort of technical or programming notations. In any case, it is only meant for me.
Basically, what I wanted to do is to write a small piece of PocketPC software that can read GPS data from a COM port that is already communicating with my GPS Receiver. Depending on what kind of network access you have, you can either stream the data to a host server over the Internet or have a mechanism to capture and log those GPS data in a meaningful way (which means not capturing GPS data in NMEA data format) so that we can send the data across when we get connected.
I always believe a good solution architect needs to have a good grasp of a wide-area of technology breadth. Having experiences with a different variety of technology, solutions and platforms helps to build that.
For example, while it is so much more cool to do real-time streaming, it is generally not feasible to open up that socket to do this for a period of time on a mobile device. Unless there is some significant breakthrough in mobile cell technology, your PDA will die on you before you even walk for 2 kilometres. And to do some effective real-time streaming, you will probably need 3G access (since you will be walking in wide-open spaces) and that usually sucks out the mojo of your PDA big-time. I think its better to log marker points and then transmit that data in a file when you find yourself a hotspot.
Having said that, the days of one big giant hotspot with WiMAX will happen very soon for us in Singapore. So, we may find ourselves in always-connected land soon. Then, I have to think about interested people who are paying bandwidth by the bits. The payload of the transmitted file MUST be small. Transmission must be quick and it must be WWW-Firewall friendly (since its likely you won't be doing this in the comfort of your own intranet environment, but most probably through a public security-tight hotspot). Only relevant data need go through Port 80 - That is a key design principle.
Many people here would think that I would use _SOAP_ as a web service to send that data across. I am ONLY looking for a point-to-point scenario, with no interoperability and security in mind for now, so using SOAP (with the extra overheads of the verbosity of its namespaces and angle-brackets) is not a preferred solution for me in this context.
I would stick with a time-tested architecture for this one - Just using _POX_ and _REST_. i-smile
Using my-own partially modified version of JW Hedgehog's GPS Reader and a bespoked Window Mobile 5 Form application, I came up with this:
I had obviously blanked out my co-ordinates because I treasure my privacy as much as the next person. i-wink. You can save the data in 2 ways. One - via a single point marker so that you location will always be current as-is. There is no trail. Two - via an array of point markers. In the latter sense, you can choose to leave a trail.
Once I press the Send button, an XML Data file is transmitted to my host server POX-style. In this sense, it only transmits when you tell it to. It doesnt transmit on its own. Like I said, it doenst really make sense to do a full streaming transmission (like a transponder) because of mobile cell power capabilities (or lack thereof). Privacy concerns should be subdued here. Some processing would be done at the data host server upon receipt and using Google Maps (Documentation API here), the point markers would be rendered like this on your webpage (WhereWasI.html or something to that effect):
I termed this geoBlog (tm). I thought that is really cool. I can capture these snapshots and save them as part of my Glog and keep a memory trail of where I went and what I did. I intend to use this cool project on my cruises, hikes, holidays and vacations soon, especially the one to Alaska, which I hope to be doing soon.
F * * * * I N G A W E S O M E ! - if I can say so myself. i-laugh
Some of these images can be retrieved over the years over family dinners when the kids have all grown up and the landscape totally changed and I am sure it would bring up some great conversation.
To the geeks out there, I will make this application free-for-all-to-use. And because this is freeware - dont expect any support, service-level-agreements, warranty or any sorts of guarantee from me.
I have only tested it via my ETEN-M600 PocketPC. The data host is just a IIS6 Web Server on Windows Server 2003.
There are 3 parts to this entire solution (More details of the setup can be found here.):
- The Windows Mobile 5 Application. You will need to install the .NET Compact Framework 2.0 for this to work, if you havent done so.
- The Host page that receives and processes the data
- The WhereAmI page that renders the map.
Of course, for  and , you would have to host the service yourself somewhere. I used Classic ASP technology for this. Why ? Because, I only needed to simple single host page to parse the XML coming over and saving it to a file and its easy to set up (no need for any complex IIS setups) if you want to transmit this to your own self-hosted server (for more privacy) if you have sufficient pipes. This is my own example here (anony) and here (auth) or here. (auth). If you would like to add more of your own features and port it to a ASP.NET version, you are more than welcomed to do so and share this with everyone else.
To the paranoid in us who suspects some kind of secret routing during data transmission, I am neither interested in knowing where you are/went nor do I care. But, for now, I will make the source bits available to you if you request for it. I intend to make the source bits public once I deem it ready. I am still doing some optimization and tweaking around it but it is generally very usable for now. I could think of different features and functionality to add into this but this is supposed to be a weekend long project for me. Nothing more than that. I will let the others decide what they want to do with it. i-smile
In the meantime, I have set up a simple forum here to collect any form of comments / criticisms / feedback / bugs / requests or whatever. Any enhancements, clarifications can be found here as well. Once I have the source bits ready, I will announce the host place for it. In the meantime, if you want the source bits for inspection now, just let me know.
Have fun geoBlogging (tm) ...