Friday, August 31, 2007

No valid sequence could be found for the set of patches

Several months ago I ran into a problem trying to get some Microsoft Office updates to install. The scenario was just as the following Microsoft Knowledge Base article describes.
Error message when you try to install some of the Office 2003 or Office XP updates: "No valid sequence could be found for the set of patches"

The problem was that the solution presented in the article didn't work. I eventually sent an email to the company help desk and gave up on it. A couple weeks ago, I had a problem with the installer for the Visual Studio Team System for Database Professionals. There was no indication that the problem was anything like the previous problem with the Office updates. I went so far as to completely uninstall everything having to do with Visual Studio and reinstalled from scratch. The useless "System Error" continued to crop up.

Finally, I thought to run the installer with basic logging. I forget what command line switch it was but I managed to get a log file that showed the same message that I remembered from the age-old problem with the Office Updates. I proceeded to hunt down that KB article and examine my registry. The registry settings all looked right. Eventually, I had the epiphany. The registry entries appeared to be point to files! I did a search for ".nls" files and found them in C:\WINDOWS\System32, but not all of them. I went to another computer and copied them over and BOOM, the installer ran fine.

While I do feel a little stupid for not figuring out that relationship between the registry entries and the files sooner I do heap a good portion of the blame on that KB article. There is no indication at all in the article that we need to check to make sure the files exist in the correct location and I can't see how the average person would be expected to make that connection. The only clue is that the values of the registry entries has what looks like a file extension but I had never heard of the ".nls" extension. I submitted feedback and hopefully Microsoft will clear that up for everyone. Or maybe I am the only person that has ever run into this.

Thursday, August 30, 2007

Weird Science

13 things that do not make sense by Michael Brooks of the NewScientist.com news service.

Much of this was over my head but I managed to grasp enough that it was really interesting. I believe that the universe will end when man knows everything about it. It's nice to know that the odds of "The End" occurring in my lifetime are slim!

Wednesday, August 29, 2007

Error 1722 installing Visual Studio 2005 Extentions for .NET Framework 3.0 (WCF & WPF)

This was a tough nut to crack and I am not 100% sure what fixed it. When I first tried to install the 3.0 Framework Extensions I got a message saying that I should install the Windows Vista SDK first so I cancelled the installation and went back to install the SDK. No problem, SDK installed fine. However, the 3.0 Framework Extensions kept bombing at the end. When it quit, I got the following Application Event Log entry:

Event Type: ErrorEvent
Source: MsiInstallerEvent
Category: None
Event ID: 11722
Date: 8/28/2007
Time: 4:56:10 PM
User: \
Computer:
Description:
Product: Visual Studio 2005 extensions for .NET Framework 3.0 (WCF & WPF), November 2006 CTP -- Error 1722. There is a problem with this Windows Installer package. A program run as part of the setup did not finish as expected. Contact your support personnel or package vendor. Action InstallVSTemplates, location: C:\Program Files\Microsoft Visual Studio 8\Common7\IDE\devenv.exe, command: /setup

For more information, see Help and Support Center at http://go.microsoft.com/fwlink/events.asp.

Data:
0000: 7b 44 36 44 34 32 39 35 {D6D4295
0008: 39 2d 31 34 33 46 2d 34 9-143F-4
0010: 35 36 41 2d 39 39 34 31 56A-9941
0018: 2d 41 34 30 30 46 44 37 -A400FD7
0020: 42 32 35 44 38 7d B25D8}


In addition to that, there were a buttload of entries like this:

Event Type: Warning
Event Source: Visual Studio - VsTemplateEvent
Category: None
Event ID: 1
Date: 8/28/2007
Time: 4:55:56 PM
User: N/A
Computer:
Description:
Error in Template (C:\Program Files\Microsoft Visual Studio 8\Common7\IDE\ItemTemplates\Web\VisualBasic\WinFxServiceItemTemplate.zip), file (WinFxService.vstemplate). Unknown element (MaxFrameworkVersion). Parsing will attempt to recover.

For more information, see Help and Support Center at http://go.microsoft.com/fwlink/events.asp.


Needless to say, the "for more information" links were completely useless (as usual).

The "fix" was to install the Visual Studio 2005 Extensions for Windows Workflow Foundation. I didn't really need it but I installed it just for fun. After that, the 3.0 Framework Extensions for WCF and WPF install went fine.

Crazy!

Monday, August 27, 2007

Adobe Stock Takes a BIG Hit!

The future of graphics design brought to you by Microsoft. This one has stopped the flow of of the Adobe Kool-Aid in our office. (Well, not really :)

Thanks to Kevin Remde at Full of I.T.

Explore in Windows

Many thanks to Bobby DeRosa for the Explore in Windows Add-In for Visual Studio 2005!

Friday, August 24, 2007

Really Cool Stuff in Space

ttfnRob posts what he thinks are the 10 strangest (real) things in space on Orbiting Frog.

This is a really neat collection of images and explanations of why they are so strange. The best part is that they are real images and not computer models or artist renditions.

Tuesday, August 7, 2007

Reply All (or DON'T)

Reply All by Sean McCown at the Database Underground blog.

This article might seam a little bit nitpicky but it really strikes a chord with me. I don't think it applies only to support personnel or even just to IT people. I always edit the list of email recipients to those that are really relevant to the conversation or those that might actually be interested and I humbly request that everyone do the same.

Monday, August 6, 2007

Lists: Bloggers (Part 2)

My continued commentary on the SmartMoney article "10 Things Your Blogger Won't Tell You"
6. "Just because my name's on it doesn't mean I wrote it."
I am not a ghost and I don't need one since this blog is just for me.

7. "My blog is just a stepping stone to bigger and better things."
No ulterior motives here. I seriously doubt that anything I publish here is going to lead to anything great. It's just too disjointed to lead to anything bigger career-wise. As long as it doesn't get me fired from my job I'll be happy.

8. "I can control what you see on the Internet."
I am not manipulating anything. As I mentioned, this thing is too disjointed to affect my career so it certainly isn't going to cause any craziness with Google.

9. "Blogging just about ruined my life."
This is about the only area that might get me in trouble but my life is not nearly exciting enough to get me into trouble even if I did publicize it.

10. "I'm already obsolete."
Blogging is not about to go away. The format may change from text to audio and/or video but I think that the people that are really trying to provide information to the general public are going to stick with text. The fact that daily postings dropped at one point doesn't necessarily equate to a decline in the size or value of the blogosphere. I would bet that the average value of a blog entry only went up in that time although there probably is no accurate way to measure that.

Custom Exceptions in .NET

I wasn't quite sure how to create unit tests for the serialization methods of a custom Exception in .NET but Tobias Gurock explains his process for creating custom exceptions on the Gurock Software Blog.

I use a modified version of the Custom Exception script that came with CodeSmith. I tweaked it out a while back so that I could avoid a lot of the code analysis (FxCop) errors; however, I never really got it to work for every single situation so I wanted to make sure that all my custom exceptions were covered in the unit tests. Tobias provides a really simple test method that covers the serialization and deserialization tests in one quick pass.

Sunday, August 5, 2007

Lists: 401(k)

SmartMoney: 10 Things Your 401(k) Provider Won't Tell You

I guess it's way past time to start looking into other retirement options. In my spare time.

Lists: Bloggers (Part 1)

SmartMoney: 10 Things Your Blogger Won't Tell You

In the interests of full disclosure and a little reality check for myself,

1: "Hardly anyone reads me."
So true. In the case of this blog, however, I am not so interested in publicity. Blogs started as a way for people to collect their thoughts and such for personal use. This blog is just that for me, a sort of catharsis.

2: "The more companies pay me, the more I like their stuff."
Coinciding with #1, I am not popular enough to have companies throwing gifts or any other remuneration my way so this isn't an issue. Should this blog become popular I will certainly make every effort to disclose any compensation related to reviews I may provide. Also, just because you toss some swag my way, don't expect a good review. If it's a really lousy product I will spare no mercy. A really good product will get a good review but I will also point out any flaws. Mediocre products will just be forgotten.

3: "Did I mention I'm not a real reporter?"
If not, then let me state it now: "I am not a real reporter." Duh! This is not meant to be news. If anything it's just an editorial; as in "opinion".

4: "I might infect your computer with a virus."
I suppose that promising not to infect your computer with a virus is pretty meaningless. Instead, I will point you to my favorite anti-virus: AVG Free Edition. It's solid quality antivirus and it's free. You just can't beat that. If you need a little more control then you might want to upgrade to a paid edition of the software but I have been just fine with AVG so far. One other thing I do to protect myself is to use Mozilla Firefox as my primary browser along with the NoScripts Extension that prevents any scripts from running until I explicitly allow them to run for a particular web site.

5: "I'm revealing company secrets."
Let it be known that I work for a small pharmaceutical company as a database administrator. It is part of my job to know when to shut up. If I release any sensitive information then I deserve to be fired. Therefore, it's pretty safe to say that the first sentence in the paragraph is about all I intend to say about my employer.

That about covers the first five items in the list; now, it's time for a break.

Lists: Restaurants

MSN Money: 10 things your restaurant won't tell you (courtesy of Mercola.com)

Not much surprised me in this article but two items did kind of stand out.

"Big Brother is watching you ... eat." (#4) was the biggest one. It wasn't as if they were keeping track of everyone's choices and building a database or anything but I could see that as conceivable in the future. I'm no criminal but I am in favor of strict privacy controls across the board in government and in private business.

"Never go out to eat on a Monday." (#10) wasn't so much of a surprise as it was something I just hadn't thought about before. I certainly don't want to pay premium prices to eat leftovers!

Now, if I can just kick the eating out habit. I typically eat out for lunch once or twice during the work week but on the weekends my family and I are pretty bad, sometimes eating out as many as four meals! (Usually it's only two or three.) Still, that's a lot of crap to be putting into our bodies.

Friday, August 3, 2007

Foreign Keys - Good!

Here is a great article on The Importance of Foreign Keys. It explains all the good things about foreign keys and how to implement them in SQL Server. It gets a little obscure, though, in what I think is the most important reason to implement foreign keys.
Foreign Keys are native to SQL Server and are designed to prevent data integrity issues. Business logic developers should not be in the business of verifying table relationships.
The point that Armando is trying to make (I think) is that foreign keys prevent invalid references to the parent table. For example, if a column is referencing a table of U.S. states and territories then a user should not be able to enter Saskatchewan in the column since it is a province of Canada.

Some people (usually software developers, of which I am one) think that it is perfectly OK to take care of this in the business logic. WRONG!! The problem is that these people incorrectly assume that the users are always going to go through the application to perform their data changes. This assumption is often based on the fact that the application is running under some account that the end users are not supposed to know anything about, especially what the password is. This is referred to as "security through obscurity".

In a best case solution, the application should be using Kerberos authentication so that when a user changes some piece of data even the database server knows who that user is. This is critical for many systems that are regulated by the government and may be audited from time to time. If you rely on the business logic to pass the identity of the users to the database server then you are wide open to spoofing. The downside to this method of authentication is that your database server is now going to allow users to connect directly to it and call the same SQL commands (SQL statements, stored procedures, whatever) that they would call from the application. However, if the security and data integrity constraints are implemented at the database layer instead of (or in addition to) the application layer, then you are no worse off than you were if they went through the application. In essence, the end user can't do anything to the database that they couldn't do with the application.

Clean Up Your Crap!

Using Windows? If so, go download CCleaner now; then install it and run it. Look over all the options and uncheck anything you don't necessarily want deleted. Click the Analyze button and check over the stuff it found to delete. If you don't care about that stuff (and you probably don't but it's important to double-check) then click the Run Cleaner button and see how much disk space you just cleared up.

I just did it at work and cleared up 664.4 megabytes of stuff. It's unbelievable how much absolute crap is lying around on your computer. I run it at home about every week and often have over 30 megs of garbage to get rid; yes, 30 megs per week!

Once you're happy with CCleaner, get yourself a decent defrag utility. No, you shouldn't use the one that comes with Windows; it's just a stripped down version of some lame, old defrag utility. I use JkDefrag. It's free and it works great. I use the screen saver so I get a good defrag at least once per day. With all the crap that winds up on your hard drive, particularly your most important drive (C:), the cleanup and defragmentation utilities can really keep your computer humming along. I have also read claims that this will extend the life of your hard drives but I have not seen and independent analysis to go along with this.

What set me off today...

...was not a blog post (How long before ALT.NET becomes NOT.NET? on the .Avery Blog) but a comment to said post.

I am not going to try and quote this mess but Alex goes on about how sucky .NET is and how happy he was to have switched to "Python and Django-style development". The only explanation for his hatred of .NET and Visual Studio is the "innate inelegance and verbosity" of C# and the .NET Framework and "numerous problems with performance". How vague can you get?

I, personally, don't have any major beef with .NET. I like coding in Visual Studio. There are definitly some problems with the platform and the IDE but most of these are lack of documentation or can be solved with free or inexpensive IDE add-ons. I have been using C# since VS .NET 2002 Beta 2 and I haven't really seen any performance issues.

I suppose that Alex answered the question posed in the original blog post but tireless whining with very little to back it up is just useless. Even when prompted for more detail, all we get out of Alex is "just check SRE related bug reports filled to Microsoft (I don't feel like digging that stuff out and giving a link to it)" (emphasis added) and "As for the poor performance part, accounts are so numerous that it's funny you haven't seen anything like it." This just doesn't sound like a solid argument to me.