Melanie and I will be in Vermont this week. Can’t wait. It’s been too long since our last visit.
Here’s what this blog looks like to Snoop Dogg’s Tha Shizzolator. And check out the shizzolated code down below.
I learned that some Dell Latitude D600 configurations will prevent Shift + Arrow key combination from highlighting text within a VMware guest OS. The problem also prevents selecting multiple list items too. I found that the problem is caused by the ATI tray icon application. Disable the ATI tray icon application to get Shift + Arrow key highlighting working again within Windows guest OS'es.
Over the last few years I have watched and learned about building business relationships. I have seen huge mistakes made and I have seen techniques used that lead to great success. However, the key to building a relationship, whether good or bad, is always same…communication. A lack of communication will spell disaster for any relationship while a good amount of communication can spell success.
Good communication does not guarantee success but it eliminates the element of surprise. Most people don’t like surprises unless it is for happy moments. Having a surprise birthday party thrown in your honor will make you feel good. We like those types of surprises. However, being told that the project is going to take twice as long to complete and at twice the cost is not the type of surprise you want. It’s not a happy moment and the customer does not like those types of surprises.
While we all know no one likes the bad moment surprises, I’m constantly amazed when I see a development team surprise the customer team and project stake holders with bad news. You are not going to be able to prevent bad things from happening within a project, but you can eliminate the element of surprise and it starts with communication.
You can eliminate the element of surprise by communicating with the customer on a regular basis. This communication must include the good, bad and the ugly. The good news is always easy to share, but you also should be willing to share the bad and ugly news even at the risk of having the project canceled. The relationship you are building will only strengthen with your honesty and upfront nature, and this should result in greater awards further down the road.
Frequent, open, and honest communication is a key to building successful relationships. However, one must know how to balance the information communicated. Someone who cries wolf all the time will loss credibility. Likewise the individual who only shares good news is likely to be perceived as hiding information, which can result in a loss of credibility as well. The trick here is to balance the information shared and provide only the information required by your audience to keep them informed and to eliminate surprise.
As an example of this, if your project is showing signs of slippage share this knowledge with your customer, but don’t make it sound like a crisis. Just indicate that there are early signs of slippage and outline your plans to counter the affects. This should be done early on instead of waiting until there is major slippage in the project timeline.
If slippage occurs, the customer will not be surprised by the news. If slippage does not occur then the customer will see your were able to mitigate the risks. Either way you were able to eliminate the element of surprise and instilled greater confidence in your abilities with your customer and thus strengthening the business relationship.
Eliminating the element of surprise with regard to unfortunate news will help strengthen your business relationship with your customer and will hopefully result future work with your customer.
After playing with Virtual PC off and on for a couple of days, I decided to return to VMWare. There are two main reasons why I decided to go with VMWare over VPC.
Reason one: Network bridging. Simply put, I could not get bridging to work with VPC but it worked flawlessly with VMWare. Overall, I think VMWare does a better job at networking. I especially like having control of the DHPC service settings.
Reason two: UNC support to the host. This feature seems to only exist in VMWare. \.host\Shared Folders\ gives you access to VMWare shares defined in the host OS. I could not find an equivalent feature in VPC.
Looking for a particular regular expression? Check out the Regular Expression Library (http://regexplib.com/).
It seems that a binding formatter is called twice when a user leaves a textbox control. As the user leaves the control the Leave event for the control is fired followed by the binding format event. The setter method of the bounded property is called next followed by the getter method then finally the binding format event is called again.
Melanie and I were planning to fly into Manchester, NH next week and drive to Vermont for a break from NYC. However confusion set in when we started checking the fly availability and car rentals. Flights into Manchester are filling up and car rentals are sold out. What gives?
Duh! The Democratic Convention 2004 starts on Sunday, July 26 in Boston. No wonder Manchester is so busy that weekend. Needless to say, Melanie and I are breaking convention (no pun intended) and driving up from NYC to avoid the Boston/Manchester madness.
I had a lengthy discussion with another developer today regarding data binding in .NET. I started thinking about this more after the conversation ended and I realized there are some who think data binding should always be used in Windows based .NET applications. The conversation today brought back memories of how developers overused data binding when VB 3.0 was released into the wild.
Data binding in .NET is a vast improvement over past attempts at providing a data binding feature in a programming language. I for one love the fact that I can data bind to different data structures and that I am not limited to binding to ADO.NET datasets only. I often use data binding in my ASP.NET applications that use a repeater. This feature alone has helped me build web pages faster, but I do not believe data binding is the silver bullet for all cases of moving data between structure and presentation.
Consider a case where you are developing a Windows application and the presentation tier works with custom data structures only, no dataset. The window must allow the user to edit values stored within the data structure. One easy way to do this is to bind the data structure to the window elements. Changes in the data will immediately be reflected in the data structure. Now assume that the user wishes to cancel the data changes. Unfortunately the data structure has already been updated with the changes. How do you reset the data structure?
There are probably 101 ways to solve this problem. One approach that works well and does not use data binding is to copy data from the data structure into the window elements for display and copy the data back from the window elements to the data structure for persistence. This is accomplished by writing two private methods, one to copy from the data structure to the window elements and the other to copy from the window elements to the data structure. The on change event from each editable window element can be wired to a single event handler that sets a flag that indicates data has changed, i.e., IsDirty.
Within the form load event of the window, the private method to copy data from the structure to the window elements is called. Within the form close event or some other event indicating a desire to save the data, the private method to copy the data from the window elements to the data structure is called. The flag indicating data has changed can be used here to avoid copying data when no changes exist. In other words, only copy the data from the window elements if the IsDirty flag is true; otherwise do not copy the values.
This approach does require the developer to write code. Data binding would of course eliminate the need to write the code but in doing so you give up some flexibility in what you can and cannot do. In many more complex solutions, giving up that flexibility can lead to more costly problem solving approaches such as writing code for workarounds to problems caused by the loss of flexibility. This can be true when data binding is used.
I have seen projects that use data binding go down the path of writing various parsers, formatters, utility helper classes, implementing interfaces such as IEditableObject on data structures, and so on just to overcome limitations imposed by the use of data binding. In the attempt to avoid writing code that follows a straight forward pattern of moving data from a structure to window elements and back, the project developers have made life much harder for themselves. Design meetings, whiteboard sessions, and developer time are wasted on producing these workarounds just to eliminate the need to write simple snippets of clean code within the window.
Data bind has its place in the application development world, but do not assume it is the only approach to use within your applications. Don’t be afraid to write code. You might be surprised at how easy it is to maintain, enhance, and most importantly improve the richness of your applications when you don’t use concepts like data binding. And when you do use data binding use it wisely.
Hernan Di Pietro has done a nice job of comparing the performance between Virtual PC and VMWare. I think I will start with VPC as I begin setting up the new laptop.
http://usuarios.lycos.es/hernandp/articles/vpcvsII.html