Tim Hibbard

Software Architect for EnGraph software


News





Add to Google



My Stats

  • Posts - 593
  • Comments - 337
  • Trackbacks - 507

Twitter












Tag Cloud


Recent Comments


Recent Posts


Article Categories


Archives


Post Categories


Image Galleries


EnGraph Blogs


Links


Other


Roll


January 2006 Entries

Good article about refactoring


Matt Berther wites a good post about what refactoring is, and isn't

posted @ Wednesday, January 25, 2006 8:51 AM | Feedback (0) |


KC .net User Group


Jeff and John are talking about Generics tonight (6:00 PM) at the Kansas City .NET User Group. I'm excited, I need to learn more about this. Map to location

posted @ Tuesday, January 24, 2006 12:49 PM | Feedback (0) |


RSS Feeds for Where's Tim


Where's Tim now has RSS feeds!

You can get feeds for:
-When my location changes
-Who was kind enough to link to Where's Tim
-News and development changes

The location feed can also be customized via query strings. For example this url:
http://www.timhibbard.com/wherestim/rss_location.aspx?yahoomap=true&yheight=500&ywidth=311&yzoom=9
will create an RSS feed that will have a map embedded in it that is 500 pixels tall, 311 pixels wide and a zoom level of 9.

You can also go to this page, and a form will generate the RSS url for you.

posted @ Tuesday, January 24, 2006 8:45 AM | Feedback (0) | Filed Under [ Where's Tim ]


Get History on Where's Tim


On Where's Tim, you can now see where I was on a specific date.

Entering a date in this box:


will get you this:

Clear History = Removes the history overlay
Export History to XML = Generates an XML document with the lat/long data
Disable Auto Update = Temporarily disables the Auto Update feature so you can move the map around and browse my previous locations without the map recentering itself

Note that the history function doesn't work that great in Firefox. And that getting dates with a lot of data (like 01/01/06) will take 30 seconds or more to populate the data and display it on the map.

The data has also been added to the Where's Tim Webservice.
Calling the GetTimsHistory function will return an array of a GPSData structure.

posted @ Monday, January 23, 2006 8:49 AM | Feedback (1) | Filed Under [ .NET GPS Mapping Where's Tim ]


My job is 20% research


Sahil Malik reenforces what I have been telling Kyle (my boss) for years. 20% of my time should be spent doing research. For me this includes reading blogs about technology, creating test apps using new technology and reading books.

I am constantly finding new ways to do things and as time permits, I go into our old code and refactor it to make it faster and more efficient. This makes me a stronger asset to EnGraph, makes our applications better and keeps the daily 9-6 fun for me.

posted @ Monday, January 23, 2006 7:16 AM | Feedback (5) | Filed Under [ EnGraph .NET ]


Norwegian university talking about Google Maps


Apparently, Ostfold University offers a class called Location Aware Systems. In that class the students were asked to find Google Maps mashups that fit in the following categories:

Most useful
Most impressive
Least useful
Best commercial potential
Most original
Most stupid

Also, I am guessing that the professor is making the students blog about it, because these Location Aware Systems blogs have been popping up all over the place. I think it's great that they are learning about Google Maps and even better that they blog about it!! Hey, if you guys want to fly me out there to give a demo on the building of Where's Tim, I could probably fit that into my schedule :)

Here is how the students categorized Where's Tim:
Most stupid
Most original
Least useful
another Least useful

posted @ Friday, January 20, 2006 9:27 AM | Feedback (0) | Filed Under [ GPS Mapping Where's Tim ]


Christers doesn't want to know where I am


Christers Edvartsen is taking a class called Location Aware Systems. One of his assignments was to find Google Maps mashups in the following categories:

Most useful
Most impressive
Most original
Best commercial potential
Least useful
Most stupid

Guess what won Most stupid?

I would rather have been in the Best commercial potential list, but I'll settle for any plug :)

posted @ Wednesday, January 18, 2006 1:53 PM | Feedback (1) | Filed Under [ Where's Tim ]


SignFile task error when publishing with ClickOnce


I'm working with a ClickOnce project that has successfully published before. I am working on a recently rebuilt computer, and I retrieved the files via SourceGear vault. Now when I try to publish the application, I get the error:

   The "SignFile" task was not given a value for the required parameter "CertificateThumbprint".

A Google search returns nothing relevant. I'll post the solution when I figure it out.

posted @ Monday, January 16, 2006 10:42 AM | Feedback (3) | Filed Under [ .NET ]


MashupFeed.com


MashupFeed.com shows the most recent mashups, the most popular mashups, the most consumed APIs and most used tags from ProgrammableWeb.com in a simple one page interface. John Musser talks more about it here.

posted @ Friday, January 13, 2006 10:11 AM | Feedback (0) | Filed Under [ Mapping ]


Get Lat / Long from Google Map


Quite often, I need the lat/long of a location. I've always used the tool from conversationswithmyself.com, but there are a couple things that I don't like about it.

1) Map is too small
2) Map does not have a zoom control

So I built my own (http://www.timhibbard.com/geoinfo/)

Here is the javascript code:

var map = new GMap(document.getElementById("map"));
map.addControl(new GLargeMapControl());
map.addControl(new GMapTypeControl());
var point = new GPoint(-95.31549, 38.97663);
map.centerAndZoom(point, 10);
lstner = GEvent.addListener(map, 'click', function(overlay, point){
   var pointA = new GPoint(point.x, point.y);
   var mark = new GMarker(pointA);
   map.addOverlay(mark);
   map.centerAtLatLng(point);
   GEvent.addListener(mark, 'click', function(){
      mark.openInfoWindowHtml("long = " + point.x + ", lat = " + point.y);
      });
   mark.openInfoWindowHtml("long = " + point.x + ", lat = " + point.y);
   });

posted @ Friday, January 13, 2006 9:24 AM | Feedback (7) | Filed Under [ Mapping ]


Working with WeatherBug API


I talked earlier about integrating WeatherBug data into Where's Tim. Chris Sloop has been a lot of help and was even nice enough to include Where's Tim on the WeatherBug's API example page. He requested that I share some code, so here it is:

Basically, to consume WeatherBug's API, I:
1) Make a call to the Where's Tim webservice
2) Parse the zipcode out of the .Place property of the GPSData structure
3) Pass the zipcode into a function that builds the REST url
4) Load the url into a System.Data.DataSet using the .ReadXML function
5) Pass that DataSet into my WeatherInfo structure that takes a DataSet as a constructor

Code to get location and parse zipcode:

Public Function GetTimsWeather() As WeatherInfo
    Try
      Dim
CurData As GPSData = GetTimsLocation()
      Dim ZipCode As String = CurData.Place.Remove(0, CurData.Place.Length - 5)
      Return GetWBInfo(ZipCode)
   Catch ex As Exception
      Return Nothing
   End Try
End Function



Code to build URL, load DataSet, and construct structure:
Private Function GetWBInfo(ByVal ZipCode As String) As WeatherInfo
   Try
      Dim url As String = "http://[myCode].api.wxbug.net/getlivecompactweather.aspx?acode=[myCode]&zipcode=" & ZipCode
      Dim DS As New System.Data.DataSet
      DS.ReadXml(url)
      Dim RV As New WeatherInfo(DS, ZipCode)
      Return RV
   Catch ex As Exception
      Return Nothing
   End Try
End Function


Code of WeatherInfo structure constructor:
Public Sub New(ByVal DS As System.Data.DataSet, ByVal ZipCode As String)
   Try
      _temp = DS.Tables("temp").Rows(0).Item("temp_Text")
      _rain = DS.Tables("rain-today").Rows(0).Item("rain-today_Text")
      _wind = DS.Tables("wind-speed").Rows(0).Item("wind-speed_Text")
      _winddirection = DS.Tables("weather").Rows(0).Item("wind-direction")
      _zipcode = ZipCode
      _weblink = "http://web.live.weatherbug.com/Common/home.aspx?zip=" & _zipcode
   Catch ex As Exception
   End Try
End Sub


Also, the WeatherBug API is now listed ProgrammableWeb.com's API list and so is the Where's Tim webservice

I've also integrated the WeatherBug data into Where's Tim Mobile.

posted @ Friday, January 13, 2006 7:51 AM | Feedback (1) | Filed Under [ .NET Where's Tim ]


.NET Developers Blog


Minh T. Nguyen has a site that is "an aggregated blog of non-Microsoft .NET developers". I subscribed to their feed yesterday and have seen good content come from there. I also saw that Jeff Julian was aggregated there. Any other GWB members there?

posted @ Friday, January 13, 2006 6:22 AM | Feedback (1) | Filed Under [ .NET ]


Google Maps Mania on NPR


Mike Pegg from Google Maps Mania is going to be on NPR's All Things Considered today. Maybe he will give Where's Tim a plug :)

He talks about it here.

posted @ Thursday, January 12, 2006 7:51 AM | Feedback (0) | Filed Under [ Mapping Where's Tim ]


Where's Tim now with GPS cookie crumbs


You can see where I currently am, but also now where I have been with the new cookie crumb feature on Where's Tim. It uses the standard large red icon to show my current location and the little blue icons (like on Google Ride Finder) to show where I have been.

As my location changes, GPS cookie crumbs will be left behind. At anytime the crumbs can be cleared by pushing "Clear GPS Cookie Crumbs". Note that crumbs will only be left if my location actually changes.

posted @ Thursday, January 12, 2006 7:16 AM | Feedback (0) | Filed Under [ GPS Where's Tim ]


Using infowindowopen with Google Maps


Kyle complained that sending me a message on Where's Tim didn't always work, that sometimes the InfoWindow would close before he could push send. This was because every 30 seconds an AJAX call was made that would check for my current location.

Looking through the Google Maps documentation, I found the infowindowopen and infowindowclose events. So I created a boolean variable that is checked before my current position is refreshed and set that boolean to true on the infowindowopen event and false on the infowindowclose event.

My code when I add the icon (GMarker):

currMark = new GMarker(pointA);
GEvent.addListener(currMark, "click", function() { currMark.openInfoWindowHtml(av.myBallon); });
GEvent.addListener(currMark, "infowindowopen", function() { noupdate=true; });
GEvent.addListener(currMark, "infowindowclose", function() { noupdate=false; });
map.addOverlay(currMark);

I check the noupdate variable before making the AJAX call and you will see that if the InfoWindow is open and you click "Refresh location using AJAX", my location will not update.

posted @ Thursday, January 12, 2006 7:02 AM | Feedback (0) | Filed Under [ Mapping Where's Tim ]


Where's Tim now with current weather


Using the WeatherBug API, you can now see my current weather conditions on Where's Tim. The API was easy to use and I also include the data in the Where's Tim Webservice. Calling GetTimsWeather returns an object that contains:

Current Temp (.Temp)
Todays Rainfall (.Rain)
Current Windspeed (.Wind)
Wind Direction (.WindDirection)
My current zipcode (.ZipCode)
URL with more info (.WebLink)

Thanks to the My class in VS 2005, you can get my current temperature with one line of code:
MsgBox(My.WebServices.EnGraphGPS.GetTimsWeather.Temp)


posted @ Thursday, January 12, 2006 6:49 AM | Feedback (2) | Filed Under [ Where's Tim ]


Back home


Chelsea and I had a good trip to South Carolina. Chris Williams was nice enough to invite us to take a tour of his company, Blackbaud, but we just didn't have time, thanks anyways Chris.

posted @ Thursday, January 12, 2006 6:34 AM | Feedback (0) |