Monday, October 31, 2005

New MSDN Prices and Packages Available

Microsoft has their new MSDN Prices and Packages available. I am sure you will be able to get them "real soon now" probably November 7th.

The way they break it down is interesting. You can get either MSDN or MSDN with Visual Studio 2005. The plain MSDN comes in two flavors: With Operating Systems ($700) and Without ($100). Both come with the MSDN Library (same thing available Online at msdn.microsoft.com).

The next levels all include Visual Studio 2005. It comes in three flavors: Team Suite which includes everything for $10K, Role Based for $5,500 (comes with one specific role flavor) and Professional. To make things interesting Professional comes in both Professional Professional and Professional Premium. Premium comes with Visual Source Safe 2005, SQL Server and Reporting, productivity Applications and stuff like that. Professional Professional just includes VS 2005.

If you are a current MSDN subscriber at the Universal, Enterprise or Professional level then you will get transitioned into one of the other packages. Universal has a choice of 3 levels to move to.

Subject Tags: [] [] [] [] []

Friday, October 28, 2005

Creating Passionate Users

I just created a post about being passionate that was inspired by Creating Passionate Users on my Blogging Blog. Creating Passionate Users is a blog by the author several of the "Head First" books from O'Reilly. It is a great blog discussion designing software so your users are passionate. Good posts about user interfaces.

Subject Tags: [] [] [] [] [] [] [] [] []

Wednesday, October 26, 2005

Do Sealed Classes Terminate Innovation?

Update: I accidently published an old draft of this. Sorry about that.

One thing that gets a lot of debate in .NET is Sealed Classes.

Nick Hodges just posted More on Sealed Classes. He says they are "irritating and silly". Do sealed classes serve a purpose beyond annoying developers? How much of the .NET Framework is sealed? Is the sealing justified?

In object orientated programming (OOP) a developer can extend a class created by another developer adding additional functionality. This functionality can be to create a more specialized version of the class, or to add more generally useful functionality that the original developer didn't think of. Either way, this ability to reuse and extend is a great advantage of OOP. There are things a developer can do to make it easier to extend their base class, like declaring a method virtual to allow future versions to override that behavior.

This functionality of OOP is actually similar to what has been going on in botany and agriculture for ages. Seeds are planted, and when the plants come to maturity they produce new seeds. The seeds of the best plants are then taken and replanted. This selection of only the best plants by the farmer / botanist is similar to a programmer extending a class, except it is done through natural genetic variations. The farmer just chooses which of the variations is most desirable and re-uses those seeds. You see the same thing in animal husbandry too.

Along comes .NET with its sealed class. When a class is sealed then future developers are prevented from extending the base class defined by the original developer. So if a developer wants to create a more specialized version of a class, or add functionality not conceived of by the original developer they are out of luck. Instead they must recreate all the original functionality of that base class, or create a helper class which performs the new functionality on the base class. Both options are less then optimal.

Unfortunately many of the classes in the .NET framework are sealed. Just within the System namespace and mscorlib assembly (the main part of .NET CLR) there are well over 300 sealed classes. (If someone else has better data please let me know!) That is compared to just over 450 public classes. Almost half (40%) of the classes are sealed. Many developers complained about all the sealed classes. It seemed like every time a developer wanted to extend a class they only discovered it was sealed.

Again we can compare this to field of botany. Monsanto is a company that makes specialized and engineered seeds. They were researching what they called the "terminator gene." Any seed that contained this gene would grow a plant like normal, but any seeds that plant produced would be sterile and would not grow. This would prevent any farmers from leveraging their crop for future crops. When the public discovered their plans there was a huge outrage. In India, where Monsanto was testing crops, the local villagers would sneak onto the field and burn the entire crop. Eventually Monsanto announced that they would not include the terminator gene.

Many developers complained about the sealed classes. It was hoped that Microsoft would feel the pain of the developer community and unseal many of the classes in the .NET 2.0 release. Unfortunately the number of public sealed classes jumped to well over 500 in .NET 2.0 (Beta 2). When we compare this to the number of public classes we see the gap narrowing as there are only just over 600 of those. Putting sealed public classes at 45%, an approximate 5% increase over .NET 1.1. So instead of improving the situation things only got worse.

Buy The C# Programming Language from Amazon.comSo why would Microsoft want to seal their classes and stifle the ability of developers to innovate and leverage the the framework? Consulting The C# Programming Language by Anders Hejlsberg, Scott Wiltamuth and Peter Golde (Anders lead the team to develop C#) it says the following about Sealed Classes (page 275):

10.1.1.2 Sealed Classes

The sealed modifier is used to prevent derivation from a class. [. . .]

The sealed modifier is primarily used to prevent unintended derivation, but it also enables certain run-time optimizations. In particular, because a sealed class is known to never have any derived classes, it is possible to transform virtual function member invocations on sealed class instances to nonvirtual invocations.

So sealing a class can provide some performance enhancements when a class has a number of virtual methods. It would seem if that is the case then a well designed framework would have a sealed version of classes that did not introduce any functionality over the non-sealed ancestor, but only provided a sealed version for speed. Then future developers could leverage all the functionality by descending from the non-sealed ancestor, later creating a sealed version of their derived class for the speed improvement.

This would be similar to how Borland designed the VCL. There is a "Custom" version of each control. The Custom version has all the properties as protected. Then there is a version that descends from the Custom version that only publishes the necessary properties. Then if someone wants to expand on the control they simple descend from the Custom version and they can then choose which properties to make public (this is significant since it is a hack to un-publish a published property, and you cannot move something to a lower visibility level (e.g., move from Public to Protected).

Buy Framework Design Guidelines from Amazon.comI wonder what advice Krzysztof Cwalina and Brad Abrams (who are involved with the internal .Net framework design at Microsoft) have to say about the use of sealed classes. If we look in their book Framework Design Guidelines under the section on sealed classes (6.4 on page 174 - 177) we see the following:

DO NOT seal classes without having a good reason to do so.

Sealing a class because you cannot think of an extensibility scenario is not a good idea. [. . .]

Good reasons for sealing a class include the following:

  • The class is a static class. [. . .]
  • The class stores security-sensitive secrets in inherited protected members.
  • The class inherits many virtual members and the cost of sealing them individually would outweigh the benefits of leaving the class unsealed.
  • The class is an attribute [. . .]

In the book Brad also points out the advantages of an open and customizable framework over the Win32API where there is no ability to extend an API call. In a discussion on Designing .NET Framework Class Libraries Krzysztof also said "The general guidelines say not to seal types but rather try to seal individual (all) methods."

Brad also published portions of the internal Design Guidelines document to his blog, where it says the following:

FxCop Rule (draft): Flag non-sealed public types that introduce virtual members with the message: "Virtual members represent points of specialization in your type. Great care should be taken in exposing virtual members, please see the design guidelines document on this topic and fully consider the ramifications."

It goes on to basically to encourage sealing to prevent extensibility. So it encourages a non-extensible framework. This seems to fly in the face of the advice given in the book that says "Sealing a class because you cannot think of an extensibility scenario is not a good idea."

Monsanto claimed similar reasons to include the terminator gene. If one of their genetically modified strains was to cross with another strain then the results could be undesirable and at least unexpected. By ensuring that all genetically modified plants cannot reproduce then they eliminate this possibility. The other reason was that it protected the intellectual property of the companies engineering improved seeds. By protecting their intellectual property it would encourage greater innovation which benefits everyone.

Since Microsoft did not adopt the obvious course of action of only sealing classes that do not introduce new functionality therefore providing the speed boost of a sealed class without the restriction then we must assume speed was not their primary motivator. Should we then assume that it was for security? Is this part of their move to more secure code?

My opinion is that Microsoft sealed classes because they could, and not because it was a good idea.

Subject Tags: [] [] [] [] [] [] []

Tuesday, October 25, 2005

PDC Courses Online

For some reason Chris got notified about this before I did, and I was at PDC. It would appear that the streaming sessions are online. This is great news since a lot of the sessions I was in the overflow for the overflow, and by the time I got there I missed a lot of the session.

Scoble says there are 500 hours worth. I might need some time here. Since they are available for 6 months (from when I am not sure) you will need to spend about 20 hours a week, assuming you have not already fallen behind.

Bad news is you will need IE to view it.

Subject Tags: [] [] [] [] [] []

Monday, October 24, 2005

MySQL 5.0 is available

MySQL 5.0 delivers dozens of new enterprise features, including:

  • Stored Procedures and SQL Functions -- to embed business logic in the database and improve performance;
  • Triggers -- to enforce complex business rules at the database level;
  • Views -- to ensure protection of sensitive information;
  • Cursors -- to allow easier database development and reference of large datasets;
  • Information Schema -- to provide easy access to metadata;
  • XA Distributed Transactions -- supports complex transactions across multiple databases in heterogeneous environments;
  • SQL Mode -- provides server-enforced data integrity for new and existing data;
  • New Federated and Archive Storage Engines -- MySQL's unique pluggable storage engine architecture allows greater flexibility, functionality and performance by making it easy to swap database engines in and out, based on users' application requirements;
  • New Migration Toolkit -- A new graphical toolkit that completely migrates all data and objects from Oracle, Microsoft SQL Server, Microsoft Access and other database platforms to MySQL;
  • Instance Manager -- new management assistant that allows remote starting/stopping of any MySQL Server, as well as remote editing of configuration files, reading of error and query logs, and more;
  • Updated Connectors and Visual Tools -- new high-performance versions of MySQL's ODBC, Java and .NET database drivers are now available, along with updated versions of the MySQL Query Browser and MySQL Administrator.

Subject Tags: [] [] []

Wednesday, October 19, 2005

Looking for a Laptop

I've decided I would like something more mobile then my PC and more powerful then my PDA. A laptop would be a good solution. It would be nice to have one to regularly have ready for meeting presentations. Currently I spend a lot of time preparing whatever machine I am able to get (usually the floater laptop from work, when it is available) for the presentation.

Does anyone have a laptop they would be willing to part with cheaply or in exchange for something else? Or maybe you have a lead on a good source for such laptops.

Maybe even a really high end PDA might work. . . . Open to suggestions.

Subject Tag:: []

Monday, October 17, 2005

Microsoft Breaks Internet Explorer

I just reinstalled my computer at work trying to fix Internet Explorer. The trouble I was having was that I couldn't run any active content in IE - no ActiveX, no plugins, etc. Since I use FireFox as my default browser that wouldn't seem like that big of a deal, but a lot of features of windows actually use an ActiveX control inside IE (for example System Restore). It all started shortly after applying the latest patches from Microsoft last week, and that is what I thought caused it, but I guess I was looking in the wrong places since I didn't see that there is a known issue about these patches. Not sure how the permissions on my Windows directory got changed but that is what they are blaming it on. The symptoms seem a little different and I didn't use their solution, but I suspect the reinstall fixed it.

Subject: 's 's and (including )

Wednesday, October 12, 2005

VMWare Unable to Get Online

Well, I finally got around to upgrading from VMWare 4.5 to VMWare 5. It is a great pacakge with lots of fabulous new features! After upgrading my virtual machine images and VMWare Tools for the new version I thought I would check for Windows updates. It has been a long time since I used VMWare at home, so I figured there would be a lot of updates.

For some odd reason it couldn't get online. I had an ipaddress. All the network settings checked out. I could ping my gateway, I could ping my host machine, I could even ping remote web sites. I even tried to telnet on port 80 to a remote website and that couldn't connect (thus eliminating Internet Explorer as the cause). I setup a quick tiny web server on my local machine and I couldn't hit it either. I was able to open a windows share on the host machine though. This was starting to get weird. I had gone over every setting multiple times. Finally I decided to try disabling my firewall, and that was what it took.

I've never had trouble with my firewally and VMWare in the past and I have been using VMWare since version 3 (or round about,) and I am fairly sure I have used it with Kerio Personal Firewall too. I started going through all the firewall settings to figure out what the problem was. It never popped up saying it intercepted a connection attempt. I checked and VMware.exe had full online privilages.

I finally found an option to allow my computer to act as a gateway. It was unenabled. That would seem like a logical cause. When I attempted to enable it Kerio informed me that that feature was not available in the free version I was using, and I needed to upgrade to the full version.

What a bummer. I've used Kerio Free for a long time (since back when it was still part of Tiny). I know I have used Kerio with VMWare before, and I cannot imagine the VMWare 5 version changed the way networking works that significantly so I can only assume that Kerio has tightened up its restrictions. Being tight is good, but inflexible is bad.

I really like having an application firewall that allows me to block certain applications from connecting out. Kerio has been my favorite, even though a bug in a beta version (I know, it was a beta) caused Delphi to crash when debugging (something to do with code injection). Looks like I will be using the less functional Windows Firewall for a while, at least until I find a new firewall I like.

So for those of you keeping score at home, the final score is:

  • Delphi: 1
  • VMWare: 1
  • Kerio: -2 (Since it caused what appeared to be issues with the other two).

Tags: [] [] [] [] [] [] [] []

Saturday, October 08, 2005

Feed moved to Feedburner

I discovered the Blogger is not formatting my newsfeed correctly. I've been looking at FeedBurner for a while now. They provide a free service that enhances news feeds. I ran my news feed through it and discovered it fixed all my complaints.

If you are using the old ATOM feed you will want to switch your subscription to the new feed location. I will switch the Atom feed off in a while, so be sure you make the transition.

Update: It isn't necessary to change your settings now. I put in an .htaccess entry to redirect the feed to FeedBurner. Too bad I didn't think of that earlier.

Friday, October 07, 2005

Project Management Resources

Columbia University has a Project Mamanagement Resource Center. It is project management in general, so some parts of it is more related to Software Project Management then other parts.

Tags: [] [] [] []

MS VS & SQL 2005 Launch Event and Free Software

Attend Microsoft's Best of Visual Studio 2005 Launch or Best of SQL Server 2005 Launch to receive a free copy of Visual Studio 2005 Standard Edition and SQL Server 2005 Standard Edition. These are not for resale copies so if you don't know what it is, don't sign up.

You won't just learn about the new software, you will walk away with it.

There will be an event in Boise on the 29th of November. It is a half day event, with SQL Server in the morning and Visual Studio in the afternoon.

Update: What I originally read said VS2005 Professional, but the site now says Standard. I am looking into this.

Tags: [], [] [] [] [] [] & [] [] [] [] ([] [])

Thursday, October 06, 2005

Chris' Recommended Source Control

Chris recommended Vault from SourceGear. I really enjoy Eric's blog and have heard good things.

Also recommended are SubVersion and CVS, both are Open Source and you can get support on them too.

It would also appear Microsoft is updating SourceSafe. I was under the impression it was going to be replaced by Team System.

Tags: [] [] [] [] []

Coding Horror

Coding Horror

One of the best software development blogs I regularly read is Coding Horror. Jeff Atwood is really reliable to have a new and interesting post every weekday. I love the fact that not only are his posts thought provoking and well researched, but he tends to post on other non-programming related topics that are also of interest to most developers. He had a great post on BattleField 2 when the demo first came out.

He always links to lots of great resources. Recently he had a link to a utility to allow you to change your Windows XP boot screen to look like Windows 3.11 (or anything else). Also his post about Task Manager is worth reading, especially the extension.

In case you are curious, he actually got permission from Steven C. McConnell to use the graphic from Code Complete. When I first discovered the Blog I was expecting something like Daily WTF or UI Hall of Shame because of the name. Turns out to be something delightfully different.

Tags: [] [] [] [] [] []

Sybase DataWindow .NET

In September we had a very interesting presentation on Sybase DataWindow .NET. This is a neat .NET component. It is actually originally from PowerBuilder, which Sybase aquired. They then extracted the DataWindow feature and made it into a .NET control. It is literally a Window on your Data. It provides grid, graphing and reporting functionality. It is both an edit window and a printable report window.

If you want to see the posibilities of what you can do with DataWindow, or you want to take your DataWindow.NET based application to the next level then check out DataWindow Extreme. They take the DataWindow in new directions, which is a great example of how flexible it is. You know something is truely flexible when the end users can use it in ways the original developer never dreamed.

Also check out InfoMaker, which is basically an end user version of DataWindow. There are new versions of both coming out with major feature upgrades.

If you are not doing .NET development remember you can access any .NET assembly as a COM object and use it in your Win32 (or whatever) application.

Tags: [] [] [] [] [] [] [] []

Wednesday, October 05, 2005

TV for Geeks and Nerds

"I'm not really a TV host, but I play one on the internet. . . "

Bandwidth must be getting really cheap. With services like PutFile, Google Video, and Our Media, anyone can find free hosting for their video. Now you too can have your own TV show, which a lot of people are now doing, and many are even hosting it themselves.

Robert X. Cringely has launched NerdTV, which is a weekly technology TV show for geeks. It is an hour long interview, or a Charlie Rose for Geeks. Looks promising to see Cringely involved and it is backed and hosted by PBS and licensed under the Creative Commons license.

It kind of reminds me of Systm by Revision3 (At least that is who they are this week). Systm is also a downloadable TV show on technology, but it has more of an underworld feel to it. I am surprised how well it is done. Very high quality and great content. They also have a few other shows they do, all technology related. They also had a really interesting interview with Kevin Mitnick.

I never saw TechTV, but these all look like the kinds of shows you might see on there, if not a little more gritty and less "mainstream." Scary thought. . .

Tags: [] [] [] [] [] [] []