Tuesday, August 3, 2010

Silverlight 4 "Value does not fall within the expected range"


I ported some WPF code to Silverlight 4 and started to receive a System.ArgumentException with the following message:
Value does not fall within the expected range.
Various posts indicated that this typically occurs when you dynamically add child objects with the same names to a container. However, I wasn't dynamically adding anything. After selectively commenting out portions of my XAML I was able to determine that the culprit was a DataGridTextColumn that had no binding attribute declared at all. Example:

<sdk:DataGridTextColumn Header="Pending Time" IsReadOnly="True" />
What surprised me was that when I specified a fictional binding ({Binding Foo}) I got a nice, easy to understand exception:
System.Windows.Data Error: BindingExpression path error: 'Foo' property not found on...
Granted, I am not a Silverlight expert so I might be posting something obvious. I hope that this saves someone some time.

Friday, May 28, 2010

Windows SDK 7.0A and automated builds

We altered our solution and project files to work with Visual Studio 2010. After changing the path to MSBuild.exe and altering ToolsVersion in the ccnet.config file to accommodate the framework change, CruiseControl.NET reported the following error:

C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\Microsoft.Common.targets (1917,9):
errorMSB3086: Task could not find "LC.exe" using the SdkToolsPath "" or the registry key "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v7.0A".
Make sure the SdkToolsPath is set and the tool exists in the correct processor specific location under the SdkToolsPath and that the Microsoft Windows SDK is installed

Various posts indicate that the 7.0A SDK ships with Visual Studio 2010. With that knowledge I copied the directory "Program Files\Microsoft SDKs\Windows\v7.0A" from my development machine to my build server. I then exported the "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v7.0A" registry key from my development machine and merged into the registry of the build server. Problem solved.

Wednesday, May 12, 2010

TNSNAMES.ORA and spaces

Just when Oracle database and I had forged an uneasy peace, my day was derailed by my mistake.

When Oracle tells you that "[t]he service name must begin in the first space of a line to be parsed correctly" they are not kidding. I received a request from one of our DBA's to change a server's TNSNAMES.ORA file and copied and pasted the new entry. The three (3) leading spaces on that entry caused me to get "ORA-12154: TNS: could not resolve the connect identifier specified" errors for an hour until I realized my mistake.

Don't let this happen to you. Heed the warning of Oracle.

Friday, April 23, 2010

Using jQuery to avoid work

I've got an old ASP.NET 1.1 app that I've been meaning to rewrite for years but have never had the time. Well, that's not the entire story: it hasn't needed attention in about 3 years. It just does its thing with no intervention on my part.

Until now.

Some recent data changes have caused a critical DropDownList on the landing page to stop being sorted correctly. It's not a huge deal but annoying to the users. I could certainly dive into the underlying T-SQL or install Visual Studio 2003 to modify the code, but that would be a lot of fiddly work. Since the only problem is the sort order of the

Saturday, March 13, 2010

Droid Gmail not synchronizing

For the past 24 hours I've not been receiving new Gmail on my Droid. All of the other apps were still working, even Google Calendar and Contacts. But not the Gmail app.

Manual synchronization didn't work. I deactivated synchronization, turned phone off and on, removed battery. Still no new mail. Looked at the items with the Outbox label and noticed an item, which had a photo attachment, from the day before. I tried to send it and 'No Connection' was the message that I received. Deleted it and new mail started appearing on my phone.

It appears that there was an 'unresolved' item that hadn't been reconciled with the server. This was probably partially my fault because I had tried to send the message from a parking garage, and as soon as I sent the message I deleted the photo from my phone. It was the perfect storm as far as my phone was concerned.

Tuesday, March 9, 2010

Linked Oracle Server configuration pain

For the past day I've been forcing myself to work with the Visual Studio Team System 2008 Database Edition GDR R2 for a small SQL Server 2000 database that needs some attention. I wanted Visual Studio to generate a SQL Server 2005 deployment script that I could execute against a local SQL Server 2008 Express instance in order to test a possible migration. During the initial execution of the script I was notified of an error involving a linked Oracle server. No problem, I thought. I'll just create the linked server and run the script again. As happens so often in software development, though, a seemingly quick and easy task turns into a quagmire.

It's been a while since I set up a linked server and I was a little foggy on the setup steps. I was able to determine by examining the existing SQL Server 2000 server that I needed to use the 'Microsoft OLE DB Provider for Oracle' provider. Still using the existing server, I was able to figure out how to fill in the 'Linked Server Properties' dialog and the Security options. As soon as I clicked the OK button, though, I was presented with an error:

The Oracle client and networking components were not found. These components are supplied by Oracle Corporation and are part of the Oracle Version 7.3 (or greater) client software installation.

OK- maybe I needed to set the 'Provider string' value. Using this page as a reference (though I'm not configuring IIS), I was able to determine the correct Provider value ("Provider=MSDASQL;DRIVER={Microsoft ODBC for ORACLE};UID=User;PWD=Password;Server=Your_TNSNames_Alias") under item 9.

I recreated the linked server but it still didn't work. I looked in the Registry, and in fact created an ORACLE_HOME string value at HKLM\Software\Oracle. That didn't help either, so I removed that value. (I did notice that setting this value fixed something in Toad 9.7.2 but that story is out of scope for this post.) I even restarted my workstation a couple of times in an effort to appease the Oracle Client God. Nothing worked. My linked server was still broken.

Finally I examined my PATH environment variable. Now, I've struggled mightily with configuring Oracle clients because my company has versions of Oracle ranging from 8i-11. My PATH was collateral damage, and contained references to two Oracle installations. The first reference was to an 11 client's root, and the second was to a 10 client's bin directory. At some point in the past I think that I read that the probing / search for an Oracle client stops when the first client home installation is found. With this in mind, I altered the 11 client path element to point to the bin directory rather than the 11 client root. Restarted the SQL Server 2008 Express service and my linked server was alive and kicking.

So what have I learned after 4 hours of tinkering with SQL Server and Oracle client interaction? Well, there's got to be an easier way. It seems to me that the Oracle client setup and configuration process is opaque. Example: is ORACLE_HOME needed in the registry, as an environment variable, both places, or neither one? The answer seems to be that it depends on the application. I've always been lucky that my installations have worked on a server, but it seems like a fragile process for a volatile developer workstation.

Monday, March 1, 2010

Who gets the money?

Recently I had to decide on merit salary increases. One of the toughest decisions came down to a couple of folks that I'll call Yin and Yang.

Yang is an expert developer, technically brilliant, always has a clever answer to a problem.

Yin is dependable, reliable, always gets the job done. I can always count on Yin to cheerfully accept and complete any task.

But...

Yang's hubris sometimes causes careless mistakes. Yang is also high maintenance, frequently requiring meetings to discuss the most minute of details and risks. Yang requires a surprising amount of micromanagement to ensure that assignments stay on track, and don't veer off into the realm of overarchitecture.

Yin stopped learning new things years ago. Yin gets the job done through brute force.

Ultimately I ruled in favor of Yin. Both developers adequately complete their tasks but take different approaches. Both are important parts of the team. I went with the person who made my life easiest. Though Yang's solutions are technically superior to Yin's, at the end of the day the user doesn't care about elegant code- users just want their applications to work.