Visual Studio 2012 puts the “Ug!” in “Ugly”

I think I’m all done with this article.  Well, maybe not.

Microsoft seem to have taken the really bad Metro idea from Windows 8 and pushed it onto VS2012 also.  All dull grey.  VS2010 had a classy, visually “easy upon the eye” look to it.  Now I feel like I’m working on an 1995 era B&W laptop LCD monitor.

So, while I’m glad to see MS Blend, and ASP.NET MVC 4, and the new Razor view engine built right in, it kinda sucks that all this new awesomeness is obscured by a lousy interface.

The strangeness is that the latest SQL Server 2012 SSMS comes strapped with the Visual Studio 2010 interface!


Posted in Procedures | Leave a comment

What a Year Brings

Ok, so it’s a year and change.

In November 0f 2010, I was working at a small distribution company with the best group of people you could hope to serve (mostly), but with a limited technology environment. 

Things that could be done so much better went undone, or done very inadequately, because of a technically stunted platform.  Things that I was accustomed to having in my “windows Toolbox” for the past decade were regarded as “new toys” in the Linux/FOSS world that I was contained in. I can’t tell you how many times I ran into a fellow employee who was SO excited to have found some “new toy” in the Java API stacks that didn’t leave me thinking to myself (very, very, quietly to myself), “Cripes,… we’ve been doing that in Visual Studio for the past DECADE!  We solved that problem ten years ago!”

Don’t get me wrong.  I’ve continued to solve quite  few pesky problems in Java, but they tend to be things like connecting to a arcane 20 year old aviation database product that nobody uses anymore except us.  But most of our new development is in platforms such as Sharepoint, Hyper-V, VMWare, Failover Clustering, Visual Studio, SQL Server, Oracle, MS Office, etc.

I was not really in a position to make changes, and really, I would not have even had I the opportunity.  The “old tech” was not challenging, nor “sexy”, but it did get the basic job done…. But only that: the “basic” job.  It just wasn’t to the level of quality or performance that I was accustomed to delivering.  I spent most of my time trying to reinvent wheels in Open Source tools that Microsoft chiseled out of the stones of the 1990’s.  And making changes to the corporate philosophy was out of my reach.

So, I began by fantasizing.  What could I do if I was willing to walk away from this GREAT company and step into MUCH larger shoes?

From there, (after a rather nasty split – and a completley unnecessarily nasty split at that) I went to Housing and Urban Development as a MS SQL Server DBA working on terabyte class servers with cutting edge technology.  And at the end of that (it was a government contract with a clear end date), I ended up at an international airline company that had a fleet of Boeing 767s and 777s, as well as a compliment of Learjet 35s and 45s, and a Bombardier Legacy 600.  And, I added $30k to my salary, and more than doubled my resume creds.

The stress level is higher because an international airline company is quite literally a 24/7/365 job.  I used to have to quit sharp at 5:00pm.  Literally.  And, I must admit, I kinda got spoiled by that.  But then again, I thrive on busy-ness, and I definately have that now.

So… wow!  What a year has brought!  All because Brent Ozar challenged me to take the next step. 

Glad I did.

Posted in General | 2 Comments

Installing Sharepoint 2010 Farm on a Single VMWare VM

If you are like most of us Sharepoint Admins (or SQL Server DBA’s in a Cluster Environment, for that matter), you will often want to run through a new service implementation on a Virtual Machine taking a snapshot and running the install several times over, making notice of “gotchas”, recovering to the snapshot point, and running again with the new installation knowledge.  basically, running the installation repeatedly until it comes out completely clean.

If you try to install a server farm, with  services distributed over multiple farm servers, but you try to do it on a single VM server (ie, you want the full farm experience, but use the one VM server for all Farm Server roles), the first problem you will run into is that SP Setup for Farms will not let you use local accounts (ie, machine accounts, not Active Directory Accounts).  This is a problem if your test server is not on the domain and only has local accounts.  But the setup program will not let you use local accounts, and unless you complete the setup and the config wizard that follows it, you cannot create your Sharepoint_Config (and associated content) database.

Here’s one way to get past that:

Go through the Sharepoint Server Setup, and at the end, where it says “Installation Complete… You must now run the configuration wizard…” STOP RIGHT THERE.  Leave that window open, and:

  1. Create a local account for Sharepoint Services (ie, something like “sp_services”) and give it a password.
  2. Open SQL Server Management Studio and create a Windows Login for that service account (SERVER\sp_services, in this example) and give it syadmin access.  (It is claimed that only dbCreator and SecurityAdmin roles are required, but I just give it sysadmin since this is a test server only).
  3. goto START… All Programs… Microsoft Sharepoint 2010 Products…  Sharepoint 2010 Management Shell.
  4. In the window that opens, type “new-spconfigurationdatabase”, and press the enter Key.
  5. For DatabaseName, enter “Sharepoint_Config” (which is the default config database that Setup would normally create), and press ENTER.
  6. For Database Server, enter the name of your database server.  If it’s a named instance, remember to use “SQLServerMachine\InstanceName”.
  7. Provide the Service Account name and password that you just created.
  8. Enter a passphrase for the server farm.  Something like “SP FarmPassphr4se”.  REMEMBER WHAT YOU TYPE for passphrase.

After that, you should be able to continue with the configuration wizard and instead of being presented with a choice between connecting to an existing farm (which fails because you cannot use Local machine accounts), or creating a new farm, you should instead see a prompt saying that the server is already connected to a server farm (the one you just created in Management Shell).

You can continue with the config wizard from that point.

Posted in Procedures | Leave a comment

Access 2010: A Rare Second Chance

Back in the late 90’s, tools and languages such Powerbuilder/PowerScript, and Borland’s Delphi/Pascal were leading the pack in the race to R.A.D. (Rapid Application Development).  Microsoft, seeing that it had no real poker in this fire decided to push one of it’s products as a competitor, even though it clearly wasn’t.  Visual Basic became Microsoft’s (hoped) Giant Killer.  But the other tools were complete integrated development environments that encapsulated all the ancillary functions and features of a rich development encironment, such as report writing, databound forms and controls (that were easy to use), source code management, etc., all built-in within the package.

Visual Basic was seriously lacking in a lot of the task automation and other features I just mentioned.  It was a language, primarily, and a forms and report designer almost as an afterthought.  But they (Microsoft) kept pushing Visual Basic as an alternative to PowerBuilder, when it was never any such thing.  And all the while, back at the Microsoft ranch, the real contender was stabled and getting no attention: Microsoft Access.

Access was, and has been from the very beginning an complete package comprised of

  • a capable database (for small to medium tasks), a swap-out database engine that would let you pull out the default engine and drop in the industrial strength SQL Server, or any other heavyweight database for which there was an ODBC or OLEDB driver – and there are many),
  • Built-In, enforceable RI (Referential Integrity) with full support for cascading updates and deletes, even before SQL Server had them,
  • a visual query designer with click-n-use aggregate functions, sorting, grouping;
  • a very, very powerful forms designer that was supremely focused on data-bound controls with an extraordinary event model that allowed you to step in at almost any point to add custom code, and full support for sub-forms (all with their own complete event model embedded within the main form)
  • a fully fledged report writer that was at least the equal of Crystal Reports at that time, that also supported subreports and a decent (if not as rich as forms) event model,
  • An early stab at Web Enabled forms which was utterly worthless and ignored by everyone, including me,
  • a full compliment of Macro features even though most serious developers such as myself never used them, but opted for inline code instead.
  • And a source code repository where all your non-form bound code could reside in multiple modules, all in one easy to manage place, and, perhaps best of all,
  • All this was packaged inside a SINGLE file, making deployments a snap!  In the most complicated scenario, you may have (golly) TWO files to manage when front-end code, forms and reports were put in one file, and database tables in another to make updates as easy as replacing a file.

The early versions of Access had some propblems with database corruption whereby your day might end with you lamenting and muttering something about eggs and a basket, but most serious developers knew all the traps and pitfalls and how to avoid them, and how to recover from such problems while we waited for MS to solve the corruption problem – which, by and large they did with the advent of Access97, which greatly reduced the incidence of corruption.

So, by the time we hit the late 90’s, Access was a very stable, very able product.  The criticism that it was suitable for more than about 5 concurrent users was only really true if using the default (built-in) Jet database engine.  But once you yanked that out and dropped SQL Server linked tables into a backend Access Database, it was smooth sailing, and I often had Access solutions that served 20 to 50 simultaneous users with relative ease, suitable performance, and no corruption.  And deployments remained as simple as “here, take this file and save it on your desktop, then click it and… Bob’s your Uncle!

But Microsoft, for whatever bizarre reason, kept pushing Visual Basic and left Access to languish.  And, of course, VB was not, and never was suited to the task of being the PowerBuilder Giant Killer.  VB is now as dead as PowerBuilder, but the new tools making the rounds today are themselves calling for a Giant Killer, and this time, Microsoft seems to be giving Access some much belated love.

Access 2010 now integrates some of it’s features directly with Sharepoint 2010 via SP Access Services.  And that early attempt at Web Enabled forms is back, this time with much better success in the form of Web Deployable solutions that can be published directly as a Sharepoint Site.

Microsoft, it seems, never really gives up on a product – sometimes even when they should.  Who of us would have thought, back in the mid 90’s that that God awful product “FrontPage” would ever come back from the grave once MS abandoned it suddenly and without a clear migration path.  Instead, they gave us early versions of “Expression” as a supposed replacement.  But all the while we thought FrontPage was smouldering in it’s grave, MS was in fact, pumping it with Steroids and raising it up on a metal platform in the middle of electrical storms, cryinging “It’s alive!  It’s alive!… We shall call it Sharepoint!”

And Sharepoint has dominated corporate America’s document management portal ever since. 

And now, with the advent of SP Access Services, Access is getting a very, very rare second chance to become a unified, consolidated, integrated development package that integrates with one of MS’s most intractible and difficult to work-with platforms.

I for one am having a grand time playing with all the possibilities, building Access hybrid applications that combine local data, SQL Server data, Sharepoint data (Lists, document libraries, sites, etc) all in one central location again.

So, here’s to hoping that MS grabs this opportunity by the horns this time around.


Posted in General | Leave a comment

Waaaay too busy to post….

Sorry for the long absence.  I’ve been gone so long I didn’t even notice that my domain mapping had expired!  Life as a (that is to say, THE) developer and DBA for an international airline company is demanding to say the very (very) least.  Between migrating a half terrabyte Sharepoint site from MOSS 2007 to Sharepoint 2010, and writing Java apps to integrate Oracle, PervasiveSQL, and SQL Server applications, and just dealing with the awesomeness of working on and around Learjets EVERY DAY… well… I’m just too busy to keep up the posts.  But I will try to make an effort as the months FLY past!  😉

Posted in General | Leave a comment

I’ll just leave this here…..

I have NO idea how this happened!  😉

Posted in General | Leave a comment

Can’t Save Sharepoint Doc Even with proper permissions

Ran into this today.  User can open and edit, but cannot then save an excel spreadsheet from a document library.  Error msg says “document is read only”.  But it isn’t read only.  And the user has proper permissions to the library and the document.

Solution: The Minor Version limit had been reached.  It seems MOSS 2007 will only keep 500 minor versions max.

Problem.  Versioning was turned on with NO LIMITS!  500 Minor versions have piled up.   There are 500 betas and no version 1! There’s no “bulk delete older than” option.  I don’t want to click, edit, delete each and every one.  Supposedly, if you change the “max versions” to some number then the next time you upload a change, it will empty the documents folder of all but the most recent number you specified.  But in practice, it did not do it.  I changed it to keep only a max of 25 versions of both major and minor.  And when I went to upload a changed document, it still complained that the max minor version had been exceeded.  And the version history still showed 500 old minor versions.

Solution: I turned OFF versioning entirely.  Then I saved the one document I had open.  That finally did clear all old versions.  but… all of them. I expected that, though.  I figured it would clear the old versions and allow me to save the document, and it did.  I then turned versioning back on, and specified my max limits again.

So, I had to start over as far as versioning goes.  But we did get past the “can’t save” problem.

Any suggestions as to how to better handle this are welcome.  I inherited a 160GB sharepoint document library, and I’m pretty new to this.

Posted in Procedures | 1 Comment

Can I Kick It? Yes I Can!

Well, I spent a day or three building a SQL Server Automatic Failover Cluster with two nodes, each one hosted on a Windows 2008 VM running in Hyper-V with an iSCSI SAN shared between them. 
Each VM is the main node of one SQL instance, and each is set to failover SQL Services to the other node.

Well, today, we got a real-life test when HV-07 (which hosts SQL-03) gave up the Blue Ghost.  And, within 30 seconds, HV-08 assumed services from HV-07 and SQL-04 picked right up without a missing a beat. 

It was so transparent that I was working in the database the whole time and didn’t even know HV-07 had BSOD’d until one of the network admins came in and said “Hey, HV-07 is sitting there with a blue screen”. 

A quick check on SQL-04, and….. Yep, both instances are now running on SQL04.  We fixed the BSOD problem on HV-07/SQL-03, and migrated the one instance back to SQL-03, and everything resumed as normal.

Now, I’m back to working on the Java program that imports flight crews and photos from our last remaining Pervasive SQL server into our latest SQL 2008R2 server.  This program is used by the TSA, Homeland Security, and many airlines (of which we are one) to vet flight crews who are jumpseating (hitching rides on other carriers aircraft).  It will also replace a Rube Goldberg solution that consists of a half dozen or so DTS packages, scripts, stored procedures and chron/task scheduler jobs.

And when I look outside, there’s still always one or two of our Learjets parked on the tarmac, twenty feet from my window.

I guess you could say I like the work. 😉


Posted in General | Leave a comment

Lessons Learned from a Cheese Curd maker

This is not an article about technology.  This is an article about how to properly use technology, or at least how to not use it.  Wise words I learned from a wise man.

So, to be honest the guy was not a cheese curd maker.  He sold equipment used for that purpose.  But thats not an interesting title, is it?  Used Dairy Equipment.  Google it, and they are number one in the rankings, and had been for a long time.  So when they approached me about updating their site, I went full bore.

I developed a prototype website that kept all their existing keywords and metadata, and all the front page text and verbiage, but cleaned it up and modernized it.  And (and this is the salient part) I added a lot of new features by integrating their internal equipment database with their website so that visitors could search their inventory and find anything they had to offer.  A complete search engine, with keyword querying, sorting, filtering… everything.

I went back to them with my prototype.  It was beautiful.  It was functional.  It was exhaustive.

It was a disaster.

What I had done was technically cool.  It would allow anyone to determine if the company had in stock ANY item that they wanted. But it was business savvy lacking.  Why?

Let his words explain.  “I don’t want them to find out that I have what they need.  Because they could also find out that I do NOT have what they need.  I want to give them just enough information that they will think, ‘They have a lot of stuff’.  But not so much that they think ‘They don’t have what I need.’  If they think that, they won’t CALL ME.  And what I want is for them to call me.  If they don’t call me, I can’t sell them what they DO need if they don’t know what they need.  A lot of times, they think they need one thing when what they need is another.  I can’t help them if they don’t call.”

The goal with technology, in this guy’s case, was to give them just enough reason to CALL, not to BUY online.  Too much technology in this case works against him being able to actually help people.

I learned a lot about business from that guy.  In fact, I altered my own website taking into account what I had learned from him.  Ultimately, we did not implement my new site and they kept their existing site.  They did the right thing. 

Sometimes, the coolest technology and the best “features” are not what’s really needed.  It takes a good bit of business sense to know not if technology is worthwhile, but which technology, and specifically how much is worth while.

I think we could all learn a good bit from a guy named Gary Schier.  And hey, if you wanna learn how to make 500 gallons of cheese, visit  And no, I did not develop that site.  And a good thing, too. 

Thanks Gary.

Posted in General | 1 Comment

I’ll just leave this here….

An excellent discussion on manipulating Excel Spreadsheets directly from SQL Server TSQL!

Posted in Procedures | Leave a comment