Work Stuff


Microsoft recently announced that they will be releasing the source code for .NET Framework 3.5 when Visual Studio 2008 is released towards the end of the year. That’s very unexpected news, indeed! Apparently VS2008 will actually let you step into the framework code while debugging. This is going to be immensely helpful in unwinding various evil bugs that cause errors deep inside the framework. It will also be (hopefully) educational to see how Microsoft actually implements some of the basic functionality of the framework. Here’s the announcement if you want to take a look.

We had a big meeting at work today kind of looking back at what we’ve done over the past year and looking forward to plans for the coming year. And I learned one really interesting thing during all of the discussion. One out of every fifteen patients seen in an emergency room in the Unites States is seen by a TeamHealth physician. I thought that was pretty neat! Sometimes in the daily grind of fixing bugs and trying to meet release deadlines, it’s easy to forget the larger picture. But the program that I work on is used to recruit, credential, enroll, schedule, and pay all of our physicians, so it’s a big part of keeping TeamHealth going. It’s nice to be reminded what the end result is: better medical care for millions of patients and their families.

With my previous job and my current one, I’ve had the chance to work with sets of third party controls from two of the major players in the Microsoft .Net arena. At my previous job, we used the DevExpress DXperience control suite, and at my current job we use the Infragistics NetAdvantage control suite. They both provide a lot of functionality beyond the in-the-box controls from Microsoft, and each suite has its advantages and disadvantages. To be honest, I had a part in selecting DevExpress at my previous job, and I had nothing to do with selecting Infragistics where I am now, just in case that influences my opinion in any way.

Comparing the two suites, I find the object model for DevExpress to be laid out a little more clearly. Infragistics seems to use more layers of inheritance and lacks a bit of consistency in their hierarchy from one control to the next. For example, Infragistics has a set of calendar controls that provide a month view, a week view, and a single day view. If you get a reference to a UI element representing an appointment, you can link directly to the associated appointment object with an “appointment” property from the month view or the week view, but not from the day view. That doesn’t make sense to me at all. I can understand that deeper layers of inheritance can possibly be useful if you are deriving a lot of your own classes from parts of the third party controls, so it’s not inherently a bad thing, but I personally prefer the simpler structure that DevExpress uses.

In almost every situation I have come across, the DevExpress controls seem to perform noticeably more quickly than the Infragistics controls. I see that mainly when you are dealing with a lot of data, such as loading up a grid or treeview with a lot of information. The difference is less noticeable with small amounts of data, but I think it is still there. This is a big issue for me, and the speed of the DevExpress components is one of the primary reasons we selected them at my previous job. When we were trying various controls sets, we had a large set of sample data that we loaded up into each control we tested, and the DevExpress controls were the only ones we found that were consistently as fast or faster than the Microsoft controls. That’s a big plus in my book.

One disadvantage with the DevExpress controls is that we found more bugs in them than I have found with the Infragistics controls. Most of them had to do with crashes deep in the .Net framework during various paint routines, where some referenced object was null or something like that. On the flip side of the coin, in my experience DevExpress was very quick to fix errors once we reported them (though occasionally we had to provide sample applications that caused the crash, they didn’t always require that). They have a very regular schedule for releasing updates (monthly) and if we reported an error at least a week or a week and a half before the next release, they almost always got our fix in. The one bug I filed with Infragistics took a little longer to fix, and their release schedule is less regular, so even when they tell you they fixed the issue, you still don’t know when the fix will actually be available to you, which is a little frustrating.

Related to bugs is the issue of feature requests. We asked DevExpress for several things to be added that we thought would be useful to us, and for the majority of the requests, they were happy to make the changes we asked for. On the other hand, if you look through the forums or knowledge base at Infragistics, you will see the same response over and over again: “our control works that way because that’s how Microsoft’s control works.” I really, really don’t like that response. It’s great to have a control that works just like Microsoft’s if you are trying to duplicate Microsoft applications exactly, but most people aren’t. I think most people buy third-party controls for the additional customization they can provide, and if requests for reasonable customization are frequently turned down because Microsoft doesn’t offer that customization, then why would you buy the third-party controls in the first place? I like the attitude at DevExpress a lot better.

As far as using the controls themselves and setting their properties and all of that, I think that the DevExpress controls are a bit easier to use, but perhaps slightly less powerful. I think the Infragistics controls directly expose a few more properties (which you would have to set in code using the DevExpress controls), but on the other hand, some of their visual designers are terrible. Specifically, the grid layout designer is one of the worst I have ever seen. You are supposed to be able to drag columns around to reorder or resize them at design time, but very frequently resizing one column will cause other columns (that you did not touch in any way) to resize by a few pixels. Why in the world does that happen? It’s incredibly frustrating when you are trying to resize several columns to the same width, and each time you adjust one is messes up the other that you have already set.

Both control suites provide a great deal of customization for the look and feel of the controls, way more than you can easily do with the Microsoft controls. That was a big selling point for us at my last job with the DevExpress controls. We wanted a straightforward way to get away from the default dull gray look of the Microsoft components, and DevExpress really provided that for us. As far as I can tell you can do the same things with the Infragistics controls, but I’ve spent more time on that with DevExpress, so I’m just used to the way they do things.

So overall I probably prefer the DevExpress controls. That’s not to say that the Infragistics controls are bad (except for the grid layout designer), because they aren’t. They just seem to have a less straightforward class hierarchy, they tend to run slower than the DevExpress controls (at least in my experience with large data sets), and I haven’t been as impressed with their customer support. On the other hand, the Infragistics controls seem to be more stable and I’ve found fewer bugs and quirks with them than I did with the DevExpress controls. So it all comes down to trade-offs regarding what’s most important to you. I think either of them are a great step above the in-the-box components from Microsoft.

As of today I have officially completed my first 90 days at my new job. That means two big things:

1) They liked me enough to keep me after the standard 90-day probationary period for initial hires (Yay!)
2) I can start taking vacation now. You earn it from your first day, but you can’t take it until you’ve worked 90 days. (Just in time for Christmas!)

I still really like my job, and I think the switch has been a very good thing, especially because I get to spend so much more time at home with Joy and Charis. I’m thankful for the opportunity that God provided in his timing, and for his continued provision for me and my family. What a blessing!

Last Friday I was able to meet a couple of people from my old job for lunch. It was really great to see them and catch up with each other a little bit. I really do like my new job a lot, but I also miss the people from my old place. I guess that’s normal if you work at a place for that many years. Anyway, we met at Fuddruckers for lunch and had a nice little visit over some tasty food. So thanks to Carrie and JP for meeting me, because I really enjoyed it!

Today was my first day at my new job. Being a larger company than the one I previously worked for, there was quite a bit of HR stuff to do the first day, but once all of that was out of the way, my new boss gave me an overview of the software product I will be working on. Tomorrow I should get to starting poking around on the source code to begin to familiarize myself with how things are organized in more detail. Everyone I met today was very nice and made me feel welcome, which is always comforting when undertaking a big change like this. So I would say the first day was good, and I’m looking forward to heading back tomorrow to learn more.

Since tomorrow is my last day at my old job, they had a lunch for me today at the office. Ron made his delicious lasagna and meatballs, Sherry and Bill brought desserts, and I think Debbie brought salad and garlic bread. I thought the lunch was a really nice thing for them to do. It’s a bittersweet thing leaving the place I have worked for the past eight years. I’m definitely looking forward to the challenges and adventures that await at my new job, but on the other hand I’ve been through a lot with these people. I’m certainly going to miss everyone, but since I will still be here in town, I hope to keep in touch. My new office will be very near an area with a lot of restaurants that are popular for lunch, so hopefully I can meet up with the old folks there on occasion.

I have some pretty big news. On Wednesday I resigned from my current job, where I have worked for the past eight years. I’ve accepted an offer from another company here in town, and I will be starting work there on Monday, September 11. The new position will give me the opportunity to work with some more advanced techniques and tools that I haven’t had the chance to fully use in my current job. It was a difficult decision to make, but I am very exicted about the new position. Most of the difficulty in making the choice to take the new job comes from leaving the people where I am now. Over the years they have become like a second family as we’ve worked together through good times and bad. It’s always a stretch to leave the familiar and embrace something new and unknown, but I feel like it’s time, and I feel like this is the path I am supposed to take. So it will be a very busy couple of weeks tying up loose ends at my current job, but then it will be time to move on to the new and exciting things to come.

Man, I have been extra super pitiful about updating my blog lately. We were away on vacation at the beach last week with my parents (more to come in a future post), and before that I was swamped at work tying up all of the loose ends with version 7 so we could actually install it at a client site. We finally got everything squared away on version 7 and I installed it at one of our clients three days before we were supposed to leave on vacation. The next three days at work were totally crazy trying to get everything patched up as the problem reports came in, but we managed to get things into fairly reasonable shape before I left, albeit after a pretty late night the evening before I left town. When I got back, things were actually quite a bit better than I expected, and between yesterday and today, I was able to fix everything that had come in while I was gone. So with that out of the way, in another day and a half or so, I should be completely “caught up” at work and back to the normal routine.

After Joy and I returned from our mini-vacation to Atlanta and Chattanooga, I was off the very next week to Nashville for our annual user conference at work. I drove to Nashville very early in the morning on Wednesday of that week, then worked all day long setting up two computer labs for the conference (2 servers, 40+ workstations, 2 printers, 4 switches, plus a wireless network). Then I drove back home that night. Needless to say that was a very long day.

I took the next day off, and then drove back to Nashville early Friday morning for the actual conference itself. Except this time I picked up Randy from work to give him a ride, so I had good company for that drive. The conference ran Friday through Sunday, and overall I think it was probably our most “positive” conference yet. Everyone seemed pretty excited about using our product and about learning how they could use it more effeciently. It just had a pretty good vibe.

And we carried on our user conference tradition for the third year in a row. The company gives us a per diem for the conference each year, and there are a couple of us that eat at the cheapest places possible for most of the conference, then blow the rest on a very nice dinner one night. This year we chose Ruth’s Chris for our dinner (our first choice had closed since we were last in Nashville two years ago). So that was a very good meal, and a great time to spend some time together outside of work. Plus we got to meet Carrie’s boyfriend, Dan, who was really a great guy (he came down to the conference for a day to see her).

And then after we packed up the computer labs on Sunday (which thankfully always goes much faster than setting them up), I drove back with Randy and JP, so I had double the good company for the trip back. So that was the user conference. I was super tired for quite a few days after that and didn’t do too much of anything once I got home from work except crash. :-) But it was really nice to be back home with Joy and Charis!

Next Page »