12/31/2007

Windows Server 2008 x64: Could not load file or assembly Microsoft.SqlServer.BatchParser...

The best minds are not in government. If any were, business would hire them away. - Ronald Reagan

I was working with a partner on testing his MSI Installer for various operating systems, and on Windows Server 2008 x64 it was continuing to come up with this error:

Could not load file or assembly 'Microsoft.SqlServer.BatchParser, Version=9.0.242.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91' or one of its dependencies. The system cannot find the file specified. (Microsoft.SqlServer.ConnectionInfo)

I checked the signature of the local assembly in the installation folder against the one in the GAC, and they were identical. So, go figure, right?

It turns out that the solution is very simple: Unless you've installed the 64-bit verion of SQL Server 2005, you need to install the 64-bit version of SMO. It's not there by default.

If it is not installed ,you can download the 64 bit version from http://download.microsoft.com/download/4/4/D/44DBDE61-B385-4FC2-A67D-48053B8F9FAD/SQLServer2005_XMO_x64.msi and try again after installing it.

After the 64-bit SMO installation, the product installed perfectly.

12/28/2007

DotNetNuke: Ready for Prime Time?

"The delivery boys have been displaced by Comcast and AT&T and Google and Yahoo, and there's no way newspapers will ever reclaim that role." -- Justin Fox, Time

Our group at work needs desperately to have a CMS that is easy to work with for various clients -- especially clients that need to be able to "edit" their own corporate web sites. Basically, we needed to have a CMS with which we could just "plug in" a customizable pre-made CSS XHTML "skin" for a particular industry, and customize it to the client's desires.

So, we all went out and started researching various offerings. Sharepoint was eliminated, it is simply too "high end" and expensive for what we need to be able to do. We looked at Joomla and Drupal, both had their plusses and minuses, but mainly they're interpreted PHP and though we've got PHP people, most of us are hard - core .NET developers. We looked at Umbraco, Rainbow, MojoPortal, Cuyahoga, and others.

It ends up that we settled on -- gasp -- DotNetNuke! I looked at DotNetNuke a couple of years ago and besides my acquired aversion to anything not written in C#, it just looked like there was "too much baggage".

However, the current release (4.8) is very smooth, and I hasten to add that if you look at the project properties, Shaun Walker has Option Explicit and Option Strict both set to "on" - a very good sign. But the things we liked the most:

1) It installs very easily. Basically, if you create a SQL Server database and update the connection string settings, and run the web project, the wizard gets you up and running in no time. And you get a real site with real content that you can start playing with, no B.S. -- and no excuses! The 4.8 source release built perfectly under Visual Studio 2008 with no missing files or errors.

2) It is very extensible. There is not only a big "skin" community of free and "for pay" XHTML - compliant CSS Web site skins, it is easy to learn to create your own. I looked at the one that Lee Sykes did of Andreas Viklund's "Andreas01" and once you peruse the component files it really isn't a big deal at all to do one on your own. Moreover, with the C# Template for Modules from "BiteTheBullet", you can start authoring custom modules pretty fast. This .vsi installer also works with Visual Studio 2008, and it gives you all the possible component files you need to write any kind of module. You can also go into the zip file that gets installed in your C:\Users\<username>\Documents\Visual Studio XXX\Templates\ProjectTemplates\Visual C# folder, and modify the contents, re-zip it, and overwrite the original zip if you know what you are doing. The C# template appears as a project type in "Add New Project". A module is basically a class library with one or more ASCX user controls, along with some metadata files, that can be installed into DNN via the Host or Admin control menu, and it can pretty much provide any kind of functionality you want - RSS, forums, news, whatever.

Holy Cow, Batman! Once I saw that I could write DNN Modules in C# and would never have to type that awful keyword "Dim" again, I felt -- well, relieved!

The whole DNN infrastructure runs on a provider model and once you "get it" you can do any kind of extensibility you want. But the main thing is that once you have DNN under your belt you can use it to provide custom editable web sites for just about any kind of client. You can give them page and functionality templates to choose from, and they can add whatever they need by themselves (after a short learning curve) without having to bother you or pay you extra money. I like that, because I really hate hand-holding; I like to do development. Once something is debugged, tested and delivered -- if I've done my job right -- I shouldn't ever have to hear from the client unless they have a new project for me.

DotNetNuke has a huge developer community and sports some very nifty caching and other options that have been added in the 4.XX versions that speed it up and make it a much better performer than the old DNN that I looked at a couple of years ago. Recommended. Also, the "My Web Pages Starter Kit" mentioned by oarfish in the comments is a good (and much simpler) alternative.

12/21/2007

Getting rid of Visual Studio 2005 - And a Poll

At work, our .NET development group more or less unanimously made the decision that now that Visual Studio 2008 is RTM, it is time to think about getting everything we do upgraded to the point where we simply don't need Visual Studio 2005 any longer.

The only real issue we could find is that Compact Framework 2003 projects are no longer supported. Since we don't happen to have any, that takes care of that, doesn't it?

So we decided that any existing projects would be migrated upwards to Visual Studio 2008. Everything in Team System is getting upgraded; if it doesn't support Visual Studio 2008, we'll let VS 2008 convert it and check all the revised stuff back in.

Since 2008 solutions / projects can be set to target specific runtimes you will find that this is pretty much a no-brainer. If your stuff is .NET Framework 2.0 compliant, all you need to do is ensure that the target Framework is set and you can check your stuff in with a Visual Studio 2008 Solution file and all the project files and class files should be fine. As a "failsafe", you could always first make a copy of the VS2005 .sln file and rename it to include "2005", and check that in as well.


The Next Step

Once this is all done, the next step is to get rid of Visual Studio 2005 on your machine - along with all related installations. This isn't rocket science -- you just need to go into Control Panel / Programs And Features, and uninstall anything with "2005" in the name. Here is a sample list you can use as a guide:

  • Team Suite

  • SDK

  • Toolbox Controls Installer

  • Project Aggregator 2

  • Visual J# 2.0 Redistributable Package

  • MSDN Library for Visual Studio 2005

  • --anything with an Install Date prior to what you installed with Visual Studio 2008

Once this is done, you will most likely find that anytime you click on a .sln file that Visual Studio 2008 will come up with the "Welcome to Visual Studio .NET Conversion Wizard" wizard UI and you can convert your solution or project with no problems. You will see a dialog referring to the Framework version:

This is asking if you want to have your project upgraded to reference the .NET Framework 3.5. If you do not have 3.5 specific code in the project, it is best to chooose "No". This will make it easier if you ever have to downgrade a solution file to Visual Studio 2005. Otherwise, I have yet to see a solution / project that fails to convert and build properly.


The Bottom Line

Visual Studio 2008 is here; there is rarely a reason to keep Visual Studio 2005 around any longer. Free up the disk space and get with the program! There is only one issue and a commenter mentioned it: no direct support for classic ASP debugging any longer. Gregg Miskelly's blog explains:

http://blogs.msdn.com/greggm/archive/2006/03/15/552108.aspx

As a last note, don't look for Visual J# in Visual Studio 2008. It's gone. History, man!

Oh, and take the poll just below!



12/20/2007

Visual Studio: Difference between Build and Rebuild

Believe it or not, I was never sure about this until this morning when another dev and I were discussing it. So, I searched the web and found the answer:

Build means compile and link only the source files that have changed since the last build, while Rebuild means compile and link all source files regardless of whether they changed or not. Build is the normal thing to do and is faster. Sometimes the versions of project target components can get out of sync and rebuild is necessary to make the build successful. In practice, you never need to Clean.

Build or Rebuild Solution builds or rebuilds all projects in the your solution, while Build or Rebuild <project name> builds or rebuilds the StartUp project. To set the StartUp project, right click on the desired project name in the Solution Explorer tab and select Set as StartUp project. The project name now appears in bold.

Compile just compiles the source file currently being edited. Useful to quickly check for errors when the rest of your source files are in an incomplete state that would prevent a successful build of the entire project. Ctrl-F7 is the shortcut key for Compile. (I just used this today with DotNetNuke - apparently the devs left out a codebehind class file on the EditAddress ASCX control for the WebStore. I simply excluded the control and it all built just fine. I'll worry about the Address thingy later [it was in C# BTW]).

  • All source files that have changed are saved when you request a build/rebuild, so you don't have to save them first.
  • When you run your executable (F5 or Ctrl-F5), Visual Studio saves all your changed source files and builds anything that changed, so you don't need to explicitly do those steps every time. This allows for quick "trial and error" debugging.

Incidentally, if you like those little Visual Studio keyboard shortcuts, you can download posters of the C# and the VB.Net ones, respectively:

C#:

http://www.microsoft.com/downloads/details.aspx?FamilyID=c15d210d-a926-46a8-a586-31f8a2e576fe&DisplayLang=en

VB.NET:

http://www.microsoft.com/downloads/details.aspx?FamilyID=6bb41456-9378-4746-b502-b4c5f7182203&DisplayLang=en

12/19/2007

Internet Explorer 8.0 to pass Acid 2 Test

With Beta 1 targeted for first half 2008, the folks at Microsoft are now saying that as of last week, IE8 reached a core milestone: IE8 in standards mode now correctly renders the “Acid2 Browser Test”. Acid2 is a test that determines how well a browser works with several different web standards. I posted about this earlier, mentioning that not even the current edition of Firefox handles the acid2 test correctly. Of course I was quickly reminded by commenters that it did a much better job than IE7, and that's true.

But the best news (besides the obvious fact that Microsoft embraces and sees the need for standards) is that they are going to do it in a way that doesn't "break" existing pages written for IE5 or IE6, or for the standards mode of other browser brands:
Modern browsers typically have two modes to render web pages, “quirks” and “standards.” MS says their experience with releasing IE7 taught them that many web sites today expect the browser to have IE6-compatible behavior. They say that with IE8 they have a "deep obligation" to interoperability and compatibility with existing web sites, and this has led them to add an additional mode to enable supporting industry standards even better.

So, developers can now write sites based on standards, insert a flag that tells IE to render in IE8 standards mode, and IE will then switch its rendering engine to use this new mode. This allows pre-existing sites to continue to work, and developers can opt-in to the new rendering engine on their own schedule. (Of course I should hasten to add that if all the players were with standards from the git-go, there wouldn't be a need for any of this BS).

For compatibility purposes IE8’s rendering engine defaults to “quirks” or “standards” mode. Site developers will need to insert a new opt-in flag to request the page to render using “IE8 standards mode.”

Overall, I'd say that this is pretty good news. I might even sign up for the beta. Now I just have one question:

When I visit a site that has embedded Flash or other video, is IE 8.0 still going to grey-screen on me and go straight down the potty, forcing me to use Firefox, or are you guys planning on fixing it?

12/10/2007

The ASP.NET 3.5 Extensions Preview --MVC, Entity Framework, ADO.NET Data Services +

"If I Dispose the Car, will my delegate references be garage collected?" -- newsgroup poster

This provides new functionality to ASP.NET 3.5 and ADO.NET in 2008. The new features target MVC, Entity Framework, ADO.NET Data Services and dynamic data Supporting Test Driven Development - including a powerful and extensible MVC framework. Creating the best server for Rich Clients - including Ajax history support and Silverlight controls for ASP.NET.

The Readme is here. The download of ASP.NET 3.5 Extensions Preview is here. I did some early work with the Entity Framework and liked what I saw.

Don't you just love those little installer messages, "The installation is taking longer than expected . . ."?

And More Cool Stuff

A couple of other items you might be interested in (at least, that I am interested in):

1) The FeedSync API. Formerly Ray Ozzie's "Simple Sharing Extensions". The easiest way to get into this is to download and play with the codeplex sample.

Applications for this? OK, how about an app or plug-in that will synchronize either all your Favorites or all your Feed subscriptions in either Internet Explorer or Firefox, from any machine you use, anywhere, so that all machines can be completely synced with each other? Somebody's already started on something similar (also on codeplex.com) although it doesn't use the FeedSync API.

2) The Microsoft Sync Framework - which is a much more sophisticated ADO.NET extension framework to do P2P sychronization of virtually anything.

There is downloadable documentation, a developer center, and even a forum group on this stuff, so don't be lazy about the old RTFM dealie. (HINT: for Sync Framework, you'll need both SyncSetup_x86.exe and SyncServicesADO_x86.msi to install the "whole banana". The BOL CHM help file isn't much use as it's prerelease and nothing is "filled in".)

Link of the Day

And now I leave you with the Stupid Filter - an idea whose time has come!

And for those who understand programming and jazz, I offer Chet Baker.


We miss you, Chet!

12/05/2007

Umm, Did you search first?

"There is no shame in stating the obvious, as it may not actually be obvious to others." -- Me

Newsgroups and forums are littered with well-intentioned but often moronic posts asking questions that could be easily answered - in a majority of cases - by simply typing the relevant search term into the Google search textbox and pressing the "SEARCH" button.

Often these same posts are cluttered with replies from equally lazy people who offer opinions, advice and such --and who have not bothered to search either!

A case in point: User posts a somewhat sarcastic item asking if there is an easy way to use Oracle for Session state, intimating that "not everybody uses SQL server". There are three replies, all of them more or less useless, because they didn't offer a real answer - which could easily have been determined with a 30 second search!

So I did the search:

http://www.google.com/search?q=ASP.NET+ORACLE+Session+provider

Not exactly rocket science! And right at the top of the list of results:

http://www.oracle.com/technology/tech/dotnet/aspnet/index.html

-- the Oracle ASP.NET providers, ready to download.

Meanwhile, our user who didn't think has probably waited hours to get an answer. I was kind enough to reply and post the link, but I also advised that he/she could easily have done the search themselves. It also helps to study the "google cheat sheet" to learn the various operators.

In my short happy life as a .NET software developer, I often will search for several hours accumulating sample code and ideas -- before I ever write a single line of code on a new project. But- you have to be a good searcher; you need to "think like a search engine".

Now, if you have searched and you've really tried, but still can't find an answer, then yes of course you should make a post and ask for help. And when you do post, include enough details in your original post so that people answering the thread don't get sent off on a wild goose chase only to find out 10 posts later that you didn't include important information in your original post! You see this all the time - people are genuinely trying to help, and then finally the O.P. (original poster) supplies some important qualifying fact that they should have stated in the very beginning -- which totally changes the playing field.

The old Chinese proverb about "teaching a man to fish" holds here. Learn to search effectively for answers to your problems. You will thank me later!

Link of the Day - Microsoft Webmaster Central

Microsoft has rolled out a beta of their version of "Google Webmaster Pages" and you can try it out here. You'll need to upload a small site verification Xml file they give you to activate it. You can also ping Live.com when your sitemap.xml file is updated:

http://webmaster.live.com/ping.aspx?siteMap=http://yourdomain.com/sitemap.xml

I am hoping - just hoping - that these new features will somehow help Microsoft to better index my sites...

Finally, if you've never seen the incredible technology behind how Google provides relevant search results so quickly, they have a page here that describes it.

12/02/2007

Google PageRank Crash of 2007 Confirmed

When a thing is funny, search it carefully for a hidden truth. -- George Bernard Shaw

Not long ago I wrote about what I call the "PageRank Crash of 2007" where legions of very big blogging-related sites and commercial ventures -- Washingtonpost.com, Forbes.com, Engadget.com and SFGate.com noticed a downgrading in their PageRank. I also proclaimed, "Now, this is big - you may not grok it right away, but it's going to change the entire complexion of the web, and pretty quick, too. Hopefully, for the better..."

Confirmation comes via posts on Google's official WebMaster blog by Matt Cutts (as well as on his personal blog):

"If, however, a webmaster chooses to buy or sell links for the purpose of manipulating search engine rankings, we reserve the right to protect the quality of our index. Buying or selling links that pass PageRank violates our webmaster guidelines."

In fact, Cutts points out that as early as Feb 2003 Google stated "Don't participate in link schemes designed to increase your site's ranking or PageRank".

In other words, they've been warning about this for the equivalent of centuries in Internet Time.

So what's the skinny?

The bottom line of all this is that you can now expect to get more relevant search results, a good thing. The other part of the equation is that, like consumers buying real estate with sub-prime 100% financing oblivious to the inevitable impending bust (which we are now in), hundreds -- probably thousands -- of "link buying" sites that promoted schemes involving the purchase of Google "link juice" and enhancement of PageRank thereby, are now effectively out of business. Come to think of it, the environment did kind of smack of an impending "bubble", didn't it?

What will happen now?

What is already happening is that -- just like the inevitable return to sanity we'll see once the real estate / credit debacle is over, we are now seeing a return to sanity on the web. That's a good thing, because bloggers and site owners are starting to realize once again that it is quality content that is Search Engine Optimized which will once again be king. Google reminds me of Paul Volker, Fed Chairman in the late 70's -- the cigar - smoking central banker who had the guts to put both feet on the brakes and keep them there until inflation wound down and the yield curve returned to normal. It was painful, yes. But it had to be done.


I wonder how long it will take until the "Web Curve" normalizes...