Tim Hibbard

Software Architect for EnGraph software


News





Add to Google



My Stats

  • Posts - 593
  • Comments - 348
  • Trackbacks - 507

Twitter












Tag Cloud


Recent Comments


Recent Posts


Article Categories


Archives


Post Categories


Image Galleries


EnGraph Blogs


Links


Other


Roll


July 2007 Entries

In Jersey this week


I just made it to Philly (despite running late this morning and checking in 32 minutes before my flight) and met up with Kyle.  He has been on a EnGraph crusade as of late, visiting six clients in the last two weeks.  He writes more about it on his blog.

We are visiting a client in Salem, NJ this week, adding new GPS units to their system and troubleshooting some existing units.  Matt Strausz is joining us on Tuesday to help with the installation.

It should be a good week.  I'm looking forward to some good eating at Deepwater Diner!

I also brought my Where's Tim GPS phone, so you can watch Matt and I tool around south Jersey

 

posted @ Sunday, July 22, 2007 8:05 PM | Feedback (0) | Filed Under [ GPS Where's Tim ]


Robz is blogging


Robz, my buddy from Topeka, just started a blog here on geekswithblogs!  Even though he is a K-State fan, I try not to hold it against him.  Let's all give him a warm welcome.

 

Technorati tags:

posted @ Saturday, July 21, 2007 6:34 PM | Feedback (0) |


Becoming a better developer


Dru was kind enough to tag me on how I could be a better developer.

I think that in addition to being a better developer, I also need to deliver better applications.  We all have different reasons for our geeky ways, and mine is to create applications that save people time.  So here is my list:

Start giving more talks - I really enjoy giving my talks on Ajax.net and Real time GPS implications, but I'm not an expert on AJAX and most people find my opinions on GPS to be a bit "abrasive".  I need to isolate a topic that I am passionate about, comfortable with and enjoy learning more about.  Entity object architecture is something I really enjoy and would like to be an expert on.  I'll plan a series of posts on object design that will hopefully turn into a presentation after my current "Real world desktop WPF applications" series

Learn to think like a user - I am involved in the entire development cycle of our GPS products and our next version of ParaPlan.  Due to my heavy involvement, it's easy to lose sight of the end goal of delivering a productive, profitable application.  I need to do a better job of knowing what features are important to the user and not give priority to a feature just because it's something that I think is important.

Embrace the 80% rule - Scott Adams wrote a post about the golden happiness ratio where his theory is that people that strive for 100% perfection are stressed out and uptight.  My personal battle with perfection is something that I need to keep in check.  I often reach for the stars when the low hanging fruits are good enough.  I have a poster on my bulletin board above my desk that reads "Functionality...Deployment...Refactor".  It's a reminder to myself that I can always make something better later, but I need to get it done first :)

Continue to keep with the curve - I try to spend 10 hours a week on research.  Reading blogs, testing betas and making sure that our applications are heading in the correct direction.  I did not spend enough time in Office 2007 to understand the impact it would have on our software and it's my fault that we have had to scramble to be compatible.

And now I get to tag Kyle Archer, Lance Robinson and Steve Clements

 

Technorati tags: ,

posted @ Friday, July 20, 2007 3:09 PM | Feedback (2) | Filed Under [ .NET GPS Where's Tim Goldstar ]


Real world desktop WPF applications - UI Validation


Intro to this series of posts.

Some of the code I use for UI validation came from Paul Stovell, who is working on a WPF Element that acts like WinForms 2.0 ErrorProvider control.  Paul's control didn't quite fit my needs, so I've tweaked a few things so I can provide visual validation in a generic fashion from my base class.

All of our objects implement:
Public Event InvalidProperty(string PropertyName, string ErrorMessage);
Public Event Validated(object sender);
Public bool IsValid;

Our objects also implement INotifyPropertyChanged and the validation code is called in OnPropertyChanged.  That way, when the user changes a value, the object is validated and messages are bubbled up to the UI.

In 2.0, it was easy to provide feedback to the user.  Our base UI form had an errorProvider control.  Since all of our forms derived from our base UI and also were bound to an object that implement our base interface, I was able to have a single function in the base UI form that listened for InvalidProperty messages, find the control that was bound to the guilty propertyname and set the errorProvider.  It would also listen to the Validated event and call errorProvider.Clear().  And all was right in the world.

Then we decided to scrap our 2.0 forms and jump into 3.0.  I soon found out that WPF did not have a control comparable to ErrorProvider.  I also found out that it was much more painful to query existing binding paths on a form.

With help from Paul and Google, this is my code-based implementation for UI validation:

This got too long so the rest of the post and all the code is in this article.

Invalid control:

Invalid

 

posted @ Thursday, July 19, 2007 11:39 AM | Feedback (0) | Filed Under [ .NET Goldstar WPF ]


Real world desktop WPF applications - Data binding


Intro to this series of posts.

There are a ton of posts out there about data binding with INotifyPropertyChanged objects in WPF, so I won't regurgitate what other people have already written.  There is one point that I haven't see much clear documentation about that I would like to cover.

Hosting data bound custom controls.

Let's say we have a location control that is bound to a location object like so:

<TextBox Text="{Binding Path=Address1}"/> <TextBox Text="{Binding Path=Address2}"/>

And you host this location control in your client control like so:

<runtime:LocationControl x:Name="ClientLocation" MinWidth="200" />

I've seen a bunch of examples where DependencyProperties have to be implemented on the LocationControl in order to bind the control to your data.  An easier way seems to be to listen to the DataContextChanged event of the top level element that has it's DataContext set.  In my code, I set the DataContext of the actual control, so my code looks like this:

public Client() { InitializeComponent(); this.DataContextChanged += new DependencyPropertyChangedEventHandler(Client_DataContextChanged); } void Client_DataContextChanged(object sender, DependencyPropertyChangedEventArgs e) { this.ClientLocation.DataContext = ((Entities.Client)this.DataContext).Location; }

Now when the data bindings change on the Client control, my Location control will also reflect the new data.

 

posted @ Monday, July 16, 2007 12:03 PM | Feedback (0) | Filed Under [ .NET Goldstar WPF ]


Real world desktop WPF applications


The last month or so, I've been wallowing in Windows Presentation Foundation (WPF), trying to determine if it is the correct direction for our next version of our flagship software, ParaPlan.  WPF is flashy and fun and bubbly, but there are not many examples of real world enterprise applications that are built around WPF.  After much research, and significantly pushing back our deployment timeline, we decided to rebuild ParaPlan 4.0 using WPF for our UI. 

We were able to use our existing 2.0 UI framework and use ElementHost for new development in WPF, but didn't want to chance a performance or scalability hit with the interop components.  My WPF code that lived in ElementHost inside a proper UI framework with visual and functional inheritance seemed fragile at best.

This series of posts that will describe my daily battles with WPF will hopefully serve as a reference point for architects considering moving to a WPF framework.  My first couple of posts will talk about the deal breakers that our application needed.

 

Technorati tags: , ,

posted @ Sunday, July 15, 2007 10:52 PM | Feedback (3) | Filed Under [ .NET Goldstar WPF ]