New Windows Live Writer Available

0
Filed under Blogging

I’ve blogged about Live Writer before. It’s an awesome offline blogging app from Microsoft, and it’s free! It can even read the style sheet of your blog and apply it while you write (mostly).

Anyway, looks like the first official release is out and it’s definitely worth the download. They’ve fixed the most irritating bug in the beta (having too many pictures in an entry would cause GPF’s), and so far, it appears very stable.

Even better, the new version will upgrade the beta in place. All my draft entries were preserved perfectly.

Grab it here.

Nested SQL Express Installation – Part Deux

2
Filed under Installations, SQL

I wrote about various troubles nesting SQL Express installations a few days ago here.

I just wanted to add a little more info for those interested.

Come to find out, it’s still possible for SQL Express to end up requiring a reboot, which, if you’re install was planning on performing DB tasks, puts a cold, wet, nasty damper on your fireworks quick.

But, from what I can tell so far, it’s almost always going to be related to a file or files that the SQLExpress install needs to replace but can’t because they’re locked.

I’d had some difficulty finding any info on how you might determine exactly what file(s) it was that were locked when I came across this post on MS Technet.

Basically, immediately after you install, but BEFORE you actually reboot, fire up REGEDIT and check out:

HKLM\system\currentcontrolset\control\sessionmanager\pendingfilerenameoperations

The value should contain the names of any files that couldn’t be replaced during the install and are queued for replacement.

At that point, it’s just a matter of determining which process(es) have those files open, and making sure your install verifies that those processes are closed before allowing the installation to continue.

In my case, so far it’s always been an issue with MSDE 2000 already installed a running on the machine. The SQLDMO.DLL is used and locked by the running MSDE process, but the SQLExpress install needs to replace it.

It’s a royal pain to be sure, but at least there is something that can be done about it.

Damn, I Gotta Get Into .NET

0
Filed under .NET, VB Feng Shui

I’ve been trying to make a point of reading more .NET code lately.

Maybe it’s Scott Hanselman’s Weekly Source Code.

Or maybe it’s that Code Project gadget on my Google home page.

At any rate, I just ran across a project there call LinFU (don’t ask what it stands for), but…wow.

It reminds me of the Black Belt columns by Matt Curland ages ago in Visual Basic Pro (or whatever it was called then, now Visual Studio Magazine). There hasn’t been articles like his in that rag for years. (and btw, if you still do VB6 and don’t have his Advanced Visual Basic 6, I’d highly recommend getting a copy).

Anyway, it’s stuff like Philip Laureano’s LinFU that really is making .NET seem more and more attractive.

So I Printed Out all the Internets Yesterday….

0
Filed under EMail, Rants

I was reading the latest ComputerWorld (Oct 29) and came across one of the best quotes I’ve seen in a while.

I’m not a huge fan of Grady Booch, but he has had quite the impact on IT. I just can’t stand UML.

At any rate, there’s an interview with him in this issue and at the end, he’s asked what has surprised him most in the last decade.

He responded:

“I haven’t seen any revolutions.Heck, I had my first email address in 1979. There was a printed document with everyone’s email address [in the world].”

Man, oh man, that’d be a sweet piece of tech memorabilia to hang on the wall.

Does that make me a geek<g>

Throwing out the Wheel

0
Filed under Uncategorized

No, I’m not converting my blog here to Craig’s List or anything, but I figured I’d throw out first crack to anyone that reads here.

An Force Feedback wheel is the only way to play driving games IMO. Driving with a freakin’ thumb controller just seems so….dirty.

But I’m giving up on making my Force Feedback Wheel work with Vista.

It’s USB, it’s a HID device. But the drivers just hate Vista. No idea why. I’m guessing that if I knew how to isolate the USB device ID, I could modify the INF files that come with the latest Thrustmaster drivers for Vista and get it functional. I just don’t have the wherewithal, and I’m not a device driver writer by trade, so it’s a tad more research that I want to bite off right now.

Works great in XP, though. Has paddle shifters, strong force feedback, good pedals and a thick wheel with rubber grips.

It’s a Guillemot wheel, and from what I can tell online, that’s actually Thrustmaster under the covers.

Wheel1a Wheel2a

If you’re in the Dallas, Ft Worth area (that’s Texas), let me know if your interested.

I’d let it go for cheap (say 50$ obo).

Are you a Neanderthal SQL Programmer?

3
Filed under SQL

I generally can appreciate what Joe Celko brings to the table in terms of SQL programming and theory, but a recent article of his had me scratching my head, even considering his sometimes Ivory Tower approaches.

The article is at Intelligent Enterprise here.

What caught my eye was the following paragraph. He’s discussing his own classification system of keys in databases and one of the types is described thusly:

3. An “exposed physical locator” is not based on attributes in the data model and is exposed to the user. There is no reasonable way to predict it or verify it, since it usually comes from the physical state of the hardware at the time of data insertion. The system obtains a value thru some physical process in the storage hardware totally unrelated to the logical data model ” for example, IDENTITY columns or other proprietary, non-relational auto-numbering devices.

Technically, these are not really keys at all, since they are attributes of the physical storage and are not even part of the logical data model. But they are handy for lazy, non-RDBMS programmers who do not want to research or think! This is the worst way to program in SQL

So, to paraphrase, he’s saying that if you use IDENTITY columns in your database schemas, you’re “lazy” and “do not want to research or think”

Uhuh.

So how about it, you lazy, slovenly, heathen SQL programmers out there that dare to use Identity columns?

And in case it’s not obvious, I can’t disagree more with Celko on this point<g>

Arcade Ambience

0
Filed under Arcade, Media, MP3s

If you’re putting together an Arcade cabinet or if you just like the ambience of an old arcade parlor while hacking away at some code, you might get a kick from Andy Hofle’s Arcade Ambience project.

image

Basically, Andy took recordings of playing dozens of arcade machines, remixed them, adjusting volumes, pans, etc, and ended up with several, very large, mp3 tracks of background ambience that sounds very much like stepping into an old arcade. What’s even better, the tracks are so large (at 70+mb each), they effectively don’t loop, so you don’t get that been there, heard that feeling that’s typical of ambient tracks.

Couple that with an arcade front end that can play an arbitrary mp3 looped as background sounds, and couple that with a recent audio card that supports multiple simultaneous channels, and you get all the ambience of walking into an arcade while playing any emulator, Visual Pinball table, etc.

The USS Millennium Falcon

0
Filed under Misc, Rants

NASA has a nifty little “picture of the day” feature that you can add to your Google Homepage.

A picture that came up just yesterday shows the shuttle lifting off against a gray sky. Here’s a snippet (from http://www.nasa.gov/multimedia/imagegallery/image_feature_940.html):

image 

But the thing that struck me about this is how much our space program is beginning to resemble the Millennium Falcon.

image 

The rusty tanks, the patchy paintwork, using a stapler for repairs. It’s starting to look like the shuttles may have made the Kessel Run a few times themselves.

 image

(Detail from above)

Compare to this 1983 picture from the Wikipedia entry:

image

And this about 20 months before the first shuttle launch (again from Wikipedia):

image

Clean and sparkly

Cripes, it’s 2007. Shouldn’t we be flying something like this:

image

from www.starwars.com

and not this:

image

from http://www.art.net/kiyotei/blogs

Nesting the SQLExpress 2005 Install

6
Filed under Installations, SQL

I recently had the pleasure of trying to get SQLExpress 2005 to install, on request, during my application’s install, according to various parameters specified by the user during the UI portion of my install. Phew. Yeah, it’s hard enough to say, much less code.

Anyway, the basic problem is that you can’t nest MSI installs. And since an “MSI Install” is considered to be the portion of the install that runs during the EXECUTE sequence of the MSI logic, this means you can’t just execute SQLEXPR32.EXE at some point during the EXECUTE sequence of your install.

This is normally what you’d want to do because then, that action would happen regardless of whether your installation was running silently (ie no UI) or not.

Ok, that’s off the table. Hey, Microsoft! Believe it or not, nesting installs is something real world apps have to do in order to get all those nifty libraries of yours out there onto client machines! Sigh.

Fortunately, in my case (and in many others I’m guessing), not being able to run the SQL Express installer during a silent install is not a deal breaker. More than likely, if my installation is being rolled out silently, whoever’s rolling it out is using some sort of automated rollout tool to do it, and it’s likely they’ll just automate the rollout of SQLExpress as well.

But, what about when a user is simply trying to run my installation to get the product on their machine. In this situation, you want a no fuss, no muss process that has a user up and running with a little decision-making as possible. The last thing I want a user being prompted for is the instance name to use for the SQL Server that’s about to get installed. Sheesh.

Well, I can’t nest MSIs, technically, but I can execute SQLEXPR32.EXE from the UI sequence of the install.

Aha! Success! Except that, as well documented by any number of posts online, it doesn’t work consistently. Often, you’ll get an MSI error 110 indicating that SQL can’t access a file (usually sqlncli.msi) that it needs to complete the install.

            ******* CommandLine: **********
MSI (s) (18:00) [12:59:55:555]: Machine policy value 'DisableUserInstalls' is 0
MSI (s) (18:00) [12:59:55:575]: Note: 1: 1309 2: 5 3: C:\23661fc1e2705da3b45f5b05\setup\sqlncli.msi 
MSI (s) (18:00) [12:59:55:595]: MainEngineThread is returning 110
The system cannot open the device or file specified.

Trouble is, the file is there, exactly where the log says it isn’t.

The problem is clearly an issue with the SQLExpress installer. I can say that pretty confidently because you can nest all of SQL’s prerequisite installs just fine, including:

  • MSXML6.MSI (The XML 6.0 libraries)
  • SQLCNLI.MSI (SQL Native Client)
  • SQLServer2005_XMO.msi (SQL Server management objects installer)
  • And even VSTOR.EXE (the Visual Studio Tools for Office)

Just not the SQLEXPR32.EXE itself.

One possible solution that I found mentioned online was to extract all the SQLEXPR32.EXE files, then actually include them directly in your installation and at the end of your installation (in the UI sequence) launch the SETUP.EXE that starts the SQLExpress installation.

So I extracted them all:

SQLEXPR32.EXE /x:c:\SQLEXPR

Ouch. And I mean owwwwwwwwwchaaaaaa. 400+ files scattered over dozens of directories. The InstallShield Component Wizard choked trying to add them all as components and there was simply no way I was going to manually set up all that felgercarb in my install. Yeah, I went there<g>

Then it struck me. The extraction process (that /x command line arg) isn’t actually an msi install, so I should be able to nest it just fine. And if that’s the case, then I could extract all the files from SQLEXPR.EXE dynamically after installing the exe, and then fire up SQL’s setup.exe directly, just as I’d tried launching the SQLEXPR32.exe before (but that failed with the 110 error).

So, first, make sure you install the SQLEXPR32.EXE along with the rest of your application’s files.

Then, set up a Custom Action in your MSI project, in the EXECUTE sequence, that extracts all the files from SQLEXPR32.EXE to some folder (usually inside your INSTALLDIR somewhere):

image

(note the use of /q; that will keep the extraction process quiet, including suppressing a rather bothersome “Extraction process done” message box when it finishes, Also note that this adds substantially to your app footprint so you may need to accommodate that in available space calculations).

Next, create another Custom Action to execute the SQL Express SETUP.EXE that was extracted in the previous step.

image

Set this CA to execute towards the end of the UI sequence (because this is an MSI setup and this action can’t be started from the EXECUTE sequence of your installation, no getting around that one).

I set a command line of /qb to use the basic install ui for SQL Express, but you might also want to include other command line parameters, like:

  • ADDLOCAL
  • INSTANCENAME
  • SECURITYMODE
  • SAPWD
  • DISABLENETWORKPROTOCOLS

or any of the other options you can specify. More info about the command line options for SQLEXPR32 are pretty easy to find online.

And finally, to keep your installation from looking like it just hung during the extraction part above, be sure to author a row in the ACTIONTEXT table for that custom action, and give it some text, like “Extracting SQL Server files…”. The text will show up over the progress bar that normally displays during an InstallShield-authored installation.

Let me know if this works for you, or if I’ve missed some esoteric combination in InstallShield that prevents it from working.

As always, YMMV.

How NOT to set up an issue tracking email service

0
Filed under Rants

Here’s a snippet from a recent Microsoft email I received when I opened a ticket with them through the MSDN support channel.

******* The following is an email for a support case from Microsoft Corp.
******* DO NOT REPLY TO THIS MESSAGE--your email will not be added to
******* the case if you do.  Instead, FORWARD your response to the
******* email address COMPMAIL@MICROSOFT.COM and place your text after
******* the keyword 'MESSAGE:'.  Also, delete all other text above
******* and below the keywords 'CASE_ID_NUM: SRnnn' and 'MESSAGE:'
******* to ensure proper delivery of your email.  Thank you.

Now, I’m pretty technical, but any support email conversation that you have to read several times over in order to even reply to is, uh, shall I say, unfriendly. 

And the wording, “DO NOT REPLY TO THIS MESSAGE…”, and “Instead, FORWARD…”. Wow, the antithesis of friendly.

What’s worse, when I did exactly as was indicated, the email failed to go through with my attachment. I ended up, get this, having to send a reply to the very FROM address that the snippet above indicated NOT to reply to!

Now, I’m not pointing fingers at the techs themselves here; I doubt the guy that clicked the button to send this email was actually responsible for the content of this header.

But seriously, someone at Microsoft needs to take a lesson or three in email etiquette.