Microsoft vs. Open Source--Don't Worry
That’s the gist of this rather comforting post at groklaw.net about Microsoft’s claims of Linux patent infringement. It baffles me that a company which made over $12 billion in profits last fiscal year would stoop to the sort of patent trolling last seen from SCO Group. It seems desperate. It’s the kind of move I would expect from a company who had clearly lost the battle in the marketplace and didn’t have any other cards to play.
UML Sequence Diagrams Intro
I came across this link on UML sequence diagrams via Mike Gunderloy’s blog. While the site is pitching a product (TraceModeler), it does a nice job of explaining the utility of sequence diagrams.
Another MacBook Pro Owner
I picked up my Intel Mac last week. It will soon replace the Mac mini I bought in February 2005, and the Dell PC I bought a couple of years before that. It’s the first laptop I’ve had that wasn’t issued to me by an employer. So far, I think I’m going to be very happy with it.
The first impromptu performance test was this: can the MacBook Pro handle simultaneous installations of Windows XP Pro (in Parallels for Mac) and World of Warcraft (direct to the Mac)? The answer turned out to be yes, even with over a gigabyte worth of WoW upgrades (and nearly 80 patches to Windows XP Pro, not including SP2).
The next items on the the to-do list for setting it up are these:
- Install most of the stuff described here
- Transfer data from the Mac mini
- Install Microsoft Office 2003 on the Windows XP virtual machine
Resetting passwords with .NET membership provider
Say you have a user with no password question and answer. It turns out that calling ResetPassword() on that user will throw an exception. There’s an overload that takes password answer as a parameter, which also throws an exception if the wrong answer is provided.
The way to get around this issue for me turned out to be changing “requiresQuestionAndAnswer” to “false” in the membership provider configuration.
Classic OO Anti Patterns
I started reading programming.reddit.com not long ago. Today, I came across Classic Oo Anti Patterns. It does a great job of describing many of the problems I see in code I inherited at my current job (and a lot of the previous ones too).
GUID vs. Identity Column for Primary Keys
From the time I started using databases (Sybase 10, Microsoft SQL Server 6.5), I’d always used identity columns for primary keys in tables. So when I came to my current employer and saw GUIDs all over the place, I wondered if that wasn’t overkill.
I did a bit of searching on the issues, and came up with these links:
- Primary Keys: IDs versus GUIDs (Jeff Atwood of Coding Horror)
- The Cost of GUIDs as Primary Keys
- Identity vs. Uniqueidentifier (Joe Celko discussion thread post)
- What Should I Choose for My Primary Key
Unit testing framework for BizTalk solutions
I didn’t know such a thing existed before today, but thanks to a couple of consultants in my office, now I do. The cleverly-named BizUnit is available at codeplex.
The information on this project indicates no dependencies on any existing unit-testing frameworks (NUnit, MbUnit, etc). Having not used BizUnit, I’m not sure whether that’s good or bad either way.
Unit testing assemblies with internals
How do you unit test an assembly if the vast majority of its methods are declared “internal” (in C#)? Before today, I had no idea. Fortunately for me, one of my consultants had this exact problem last year. The solution:
[assembly: InternalsVisibleTo("UnitTestAssemblyName")]Putting the following line in AssemblyInfo.cs for the assembly you wish to unit test makes everything declared "internal" available to UnitTestAssemblyName.
This is a vastly superior option to cloning the assembly you want to test and making all the internal members public.
A rant on programmers who can't program
I came across this post today and wasn’t sure what to make of it. In my current job and my previous one, interviewing potential hires for programming was part of my job. I can’t say I ever used “FizzBuzz” types of questions on candidates, and I’m not sure that would tell me the sort of things I need to know about someone. I find myself asking a lot more design questions and process questions with perhaps one or two programming questions thrown in. But before even getting to that stage, I have to feel good about their resume. I think the majority of people give you enough information in their resume that you can figure out whether a phone screen is worthwhile in a relatively short period of time.
Working with virtual machines
A few weeks ago, my employer updated the RAM on a bunch of our machines to 2GB. The reasons was so we could do our development using virtual machines. I haven’t done development work this way before (probably because I never worked anywhere before that gave you enough RAM).
So far, it’s only been a bit different than working with everything directly installed. Visual Studio 2005 is a bit slower (of course). The other minor inconvenience is that I can’t add new users to TFS from my virtual machine. I suspect this has more to do with it being configured incorrectly than with the virtual machine not being part of the domain. Access to network shares is virtually unchanged, since you can map network drives and connect using a different user name.
What Makes a Good Software Developer?
TSS.NET posed this question in one of their newsgroups on March 1. Here are the comments I added to the thread:
- They only write what they need to. They tend to choose open source libraries and components for needed functionality instead of writing things themselves. They definitely don't replicate functionality already provided by whatever platform they're coding against (whether it's .NET or Java). - A companion characteristic is that they're good integrators. Because they use third-party components to develop solutions, they're skilled at making them play well with each other. - They're good at refactoring. The first version of any application is always the worst one. A good software developer refines and otherwise improves their code as they go along. - The companion characteristic to refactoring is unit testing. No developer can consider themselves good unless this practice is part of their everyday work. A robust set of unit tests is the first line of defense when it comes to high-quality code.This was what I came up with off the top of my head. I'd be curious to hear opinions from others (yes, all three of my loyal readers) on what makes a good software developer.
App_Offline.htm
I came across a couple of useful posts from Scott Guthrie about App_Offline.htm. This page appears and disappears automatically when the “Publish Web Site” option is used. What I didn’t know is that it’s part of the .NET framework (not the IDE). This means the page can be added and removed manually. This will be especially useful in my current environment, where we depend on network engineers to deploy web applications to test and production sites.
Here are the posts: App_Offline.htm and IE Friendly Errors
The Honest Boss
Some friends of mine on a mailing list I belong to are having an interesting dialogue on ways to deal with co-workers when they make mistakes. One of the list members posted a link to the interview with an honest boss e-card from Hallmark. Mostly, it’s good for a laugh. But what the “honest boss” says about promotions is a bit too true to be funny.
SQL Server Cursors
Personally, I dislike them. I avoid using them whenever possible. But I came across this excellent post that talks about cursors, alternatives to cursors, and provides a performance comparison between them.
The performance comparison in particular was quite useful. If I’m able to reproduce the results for myself in a local environment, I may have to revise my current stance on cursors.
Getting rid of ThreadAbortException
We came across this on one of my current projects. It didn’t prevent the application from working, but I didn’t want a bunch of instances of it in our error logs. One of the consultants who works for me found this Knowledge Base article that solved the problem.
The basic fixes are:
- Call Response.Redirect like this:
Response.Redirect ("nextpage.aspx", false); - Call Server.Execute instead of Server.Transfer
ApexSQL Diff
I first heard about this tool from my friend Greg at work. I’ve been using it the past couple of weeks now as a free trial and it’s awesome. Compare the structure and/or data of any two databases and synchronize them with just a few mouse clicks.
This tool is perfect for deploying database changes to different environments. It’s already saved me hours of time compared to what I would have spent trying to do things manually. I’ll definitely be buying a copy for myself. Every DBA should own a copy.
Daimler-Chrysler: Another Failed Merger?
Today’s news brings word that Daimler may be looking to break up with Chrysler. I find this particular merger interesting because it came up more than once in my MBA studies. While the problems we studied had more to do with integrating two different engineering cultures and technology platforms, the financial wisdom of such a merger was always what I questioned.
I have a strong anti-merger bias, having been on both sides of such mergers at each of my last three employers. I’ve written about them in this blog before. Thanks to this transcript of a PBS NewsHour segment, it’s possible to look back at the time when this merger was fresh and new.
I found it interesting to read how positively all the guests viewed the merger at the time. Not until almost the end of the segment do you find much skepticism about whether or not the merger will be successful.
Short circuiting in .NET
Last week revealed an interesting difference between C# and VB.NET. C# operators like “and” (&&) and “or” (||) do it automatically. The VB.NET operators “And” and “Or” don’t do this by default. So if you use these, all the conditions are evaluated, regardless of whether or not that’s necessary.
In the .NET 2.0 Framework, instead of making these operators work like the C# ones, VB.NET added two new keywords: AndAlso and OrElse.
It’s good that VB.NET has the facility, I just don’t like the implementation. It’s another reason to prefer C# at the very least.
New Monitor (At Last)
I’ve been using a 19" Hitachi CM751 monitor for a long time–until today. FedEx delivered a refurbished 24" widescreen from Dell this afternoon. Even at 1680x1050 (I’m still plugged into a KVM switch that doesn’t have a DVI port), it seems enormous. I should have gotten one of these much earlier–it looks great.