7/31/2010
LifeCycle Solutions - Home ( the software development blog )
 

<March 2009>
SunMonTueWedThuFriSat
22232425262728
1234567
891011121314
15161718192021
22232425262728
2930311234

Subscribe to this feed:

RSS 2.0 | Atom 1.0 |CDF






Friday, March 20, 2009

I came across this run-time error message while trying to run a web app project from Visual Studio 2008:

"Failed to generate a user instance of SQL Server due to a failure in starting the process for the user instance. The connection will be closed."

The app has a connectionString pointing to a SQL Server 2005 Express instance, so I checked to make sure the instance service was running and it was.  As any good computer shade tree mechanic would do, I restarted the service hoping for the best, but nothing changed.

So as always, Google to the rescue.  Joe Stagner in this blog entry describes what he did to fix the problem when he experienced it.  I deleted the corresponding folder under username and it worked!  If I had more time I'd try to dig some more for an explanation on why this happens and why the fix works, but we'll leave that exercise for another day.  For now I'm just glad it works.

Standard disclaimer: make sure you have data backed up before you go deleting things willy-nilly.  This fix worked for Joe Stagner and it worked for me, but there's no guarantee it won't fubar your SQL Server Express instance.

Update: Depending on your version of Windows, this folder may not be under 'Documents and Settings', but rather: C:\Users\USERNAME\AppData\Local\Microsoft\Microsoft SQL Server Data\SQLEXPRESS  Again, Your Mileage May Vary.

Posted by Daniel Root

Wednesday, March 18, 2009

Mix09 is happening this week.  This is one of Microsoft's larger developers conferences and sure to drop a few new tools, features, and plans.  Below are some cool new technologies I'm watching.  This post will be updated as I hear about interesting news, so check back from time to time.

  • Of course, as already mentioned, MVC v1 is now live!
  • Expression Web SuperPreview - effortlessly test browser compatibility in Expression Web.  I hope we get this for Visual Studio soon!
  • Silverlight 3 Beta 1 - Hardware GPU acceleration. New codecs, including AAC. Write your own codecs. IIS Media Services - static and LIVE streaming video support easily installed from Web Platform Installer (see below).  3D perspective support for any control.  Improved fonts.  Multitouch support. Support for running outside-of-browser on Windows and Mac in secure sandbox, with offline-awareness and automatic updates.  New Eclipse IDE tools for developing on Mac.  The download size - including all these new features - is actually smaller than Silverlight 2 (4.4M)!  Beta today, shipping RTM later this year.
  • Expression Blend 3 - design Silverlight 3 UIs.  Supports the new features, and has "SketchFlow" for sketching prototype page flows, transitions, and layouts, then generating documentation and actual Silverlight code.  Very cool, and also something VS needs!
  • Web Platform Installer and Web App Gallery - Make it easier to install framework and related MS features, plus popular applications that run in IIS.  They just called it "an App Store for the Web Server". Some apps included: DotNetNuke, Umbraco.
  • Azure commercial release this year.  Update this week supports PHP & CGI, has ADO.NET support that works with ADO EF, NHibernate, etc. similar to your traditional MS SQL apps.   It also supports geo-locating your applications and storage to enable edge content delivery, geo-load balancing, and other scenarios.  No pricing released yet. New SDK and Visual Studio Tools CTP available.
  • New Virtual Earth Silverlight SDK.
Posted by Daniel Root

I'm sure this will be old news in about an hour, but MVC is now live! Download here.  LifeCycle was an early adopter on this - our first production MVC app was deployed for testing at the client last week. The result was a clean separation of concerns and a light, clean standards-compliant web UI, with just enough jQuery goodness. 

Posted by Daniel Root

Friday, March 06, 2009

Need to generate create scripts for your SQL Express database?  Here's a little batch I've used several times recently to do just that:

@echo off
SET DatabaseFileName=DbName
 
ECHO Generating code for %DatabaseFileName%
ECHO Generating create script 'CreateDatabaseSchema.sql'
 
"C:\Program Files\Microsoft SQL Server\90\Tools\Publishing\SqlPubWiz.exe" script -C "Data Source=.\SQLEXPRESS;AttachDbFilename=%CD%\%DatabaseFileName%.mdf;Integrated Security=True;User Instance=True"  -noschemaqualify -schemaonly -nodropexisting -f CreateDatabaseSchema.sql

To use, just drop in a .bat next to the .mdf, change DbName and run.  It will output 'CreateDatabaseSchema.sql containing create script for all of the tables and stored procs in the database. 

Posted by Daniel Root

Thursday, February 26, 2009

I've recently started playing with NDepend again.  This tool is a sort of data mining utility for your code.  Feed it your assemblies and it can tell you almost anything about them.  Using a custom query language with a SQL-like syntax, you can dig into all sorts of metrics and useful information. Out of the box, it ships with tons of useful queries for common code problems. 

I ran some of our code through it and got dinged on some of the code complexity queries:

 image

In this case, I had several huge methods that needed to be broken up and optimized.  Thanks to NDepend's prodding, I spent some time refactoring using ReSharper, and whittled those down to 0s:

image

That's helpful, but not nearly everything that NDepend can do.  For example, the code I'm testing with is involved in some multithreading, so with a little digging through the docs, I came up with this query to show all methods that change state (besides property and event setters), but don't use any locks:

WARN IF Count < 0 IN SELECT METHODS WHERE
!IsDirectlyUsing "System.Threading.Monitor" AND ( ChangesObjectState OR ChangesTypeState ) AND
!IsConstructor AND !IsClassConstructor AND !IsPropertySetter AND !IsEventAdder AND !IsEventRemover

This doesn't guarantee thread-safe code, but it definitely helps drill down to potential problem areas.

Another area I can see us using this in is to provide metrics for our customers.  Generally they are not concerned with things like Cyclomatic Complexity, but some simple numbers may be useful.  We use FinalBuilder, so it's possible we could run NDepend's console utility to roll the numbers into some XML and publish to their customer wiki.  For example, here's a quick query to spit out the total number of tests for a project:

SELECT METHODS FROM ASSEMBLIES "TestAssemblyName" WHERE HasAttribute "NUnit.Framework.TestAttribute"

Once we get a customer set up with these metrics, we'll post more about how to automate that.  Until then, go check out NDepend!

Posted by Daniel Root

Wednesday, February 25, 2009

SharePoint is a great product, but one area where it really lacks is in it's Rich Text Editor.  It doesn't work in anything but IE, and doesn't include an image upload feature.  With a little digging, I found this free replacement from Telerik:

http://www.telerik.com/community/free-products.aspx (ASP.NET RadEditor for MOSS Lite)

Installation is non-obvious in the normal sharepoint way:

  • Run stsadmin.exe to install a wsp
  • Deploy in central admin
  • Turn on in site settings -> site features
  • Restart IIS.

It comes with a chm help document (which if you’re using vista you’ll need to unblock to view) that outlines the steps.  To turn on for a Wiki, follow the steps in ‘Using RadEditor in List Items’, and you'll have a much more usable SharePoint Wiki!

Posted by Daniel Root

Friday, February 06, 2009

If you're not familiar with jQuery, it is a JavaScript library that lets you quickly access page elements using CSS-like selectors, and then do common effects, animations, and transformations against those elements.  It nicely brushes away browser-compatibility issues and gives you a clean, simple way to do client-side "stuff". 

It ships in ASP.NET MVC, so I've been using it in one of our first MVC apps, and love it.  What I particularly like, though, is using it to develop 'convention over configuration' for the app's client-side behavior.  Instead of wiring up each individual form element, button, etc., I can declaratively say 'all elements with this class should behave this way.'  This is done once in my site.master, so that in the actual pages, applying a behavior is as easy as including a css class name on an element.

Let's look at some examples.  The first step in most jQuery code is to wire up the document ready function.  This tells the browser to execute some function whenever the document finishes loading, which believe it or not is quite difficult to do in a cross-browser way that plays well with other scripts.  To do this, I have a script in my site.master's <head> section that looks like this:

<script type="text/javascript">
        $(document).ready(function() {
            //TODO: set up conventions
        });
</script>

The dollar is how you select page elements in jQuery.  $(document) says "get the current document" (also non-trivial in un-aided javascript).  You can also use css-like selectors.  For example $("#myButton") will return all elements with the id "myButton".  $(".initialFocus") will return all elements with the class "initialFocus".  Which leads to my first "convention":

$(".initialfocus").focus();

Now, in any page that uses the master page, if a particular field should get focus when the page loads, simply specify the class "initialFocus":

<input type="text" class="initialfocus" name="somefield"/>

Or, in MVC parlance:

Html.TextBox("QuantityDelivered", currentTransaction.QuantityDelivered, new { @class = "initialfocus" })

Which is a nice UI touch, but let's look at something more advanced.  I also want a convention to let me specify that a field can be populated using a pop-up date chooser.  For this, I download the jQuery UI framework, and set up the convention:

$(".shortdate").datepicker();

Similarly, I add 'shortdate' as a class to any textbox, and the date chooser appears on the element.  If I decide I want to change some behavior site-wide, I have one simple place to change it.  For example, I could use one of the dozen other jQuery date pickers, or roll my own.

It's also possible to 'stack' effects.  For example, this application displays informative message as a div with the class name "messageBox".  If one of these appears when the page first loads, it hides after a few seconds.  To accomplish this, you simply 'stack' an "animate" (which in this case is just used as a 5 second delay), followed by a fadeOut:

$(".messagebox")
    .animate({ opacity: 1.0 }, 5000)
    .fadeOut("slow"); 

All told, this particular app currently has 6 'conventions', with more planned:

$(document).ready(function() {
         $(".initialfocus").focus();
         $(".shortdate").datepicker();
         $(".longdatetime").datepicker();
         $(".print").click(function() { window.print(); });
         $(".delete").click(function() { return confirm("This record will be deleted.  Are you sure you want to continue? Click 'Ok' to delete this record or 'Cancel' to stay on this page."); });
         $(".messagebox")
             .animate({ opacity: 1.0 }, 5000)
             .fadeOut("slow"); 
     });
So, go get jQuery, whether or not you're using MVC.  With just a few lines, you can really spice up an application's client-side experience.
Posted by Daniel Root

Friday, July 11, 2008

I blogged about NArrange a while back, but there's a new version out that makes it even better.  It adds support for organizing code without adding #region directives, which I'm beginning to agree are evil.  The end result is a code file organized by member type and access level (ie fields, properties, private, public, etc), and then alphabetically.  It includes a configuration tool which lets you set up a configuration file with all of the rules you want it to follow.  To turn off #region directives open a configuration file in narrange-config, and change Formatting -> Regions -> Region Style to 'NoDirective'.

Posted by Daniel Root

Thursday, June 26, 2008

I'm a visual person.  I've tried to join the keyboard-shortcut-cult.  I've tried Enso, Live Desktop, Google Desktop, and just about any productivity-promising app Hanselman recommends.  I love the idea, but somehow never end up using them.  I never can remember the shortcuts, or even that they are there.  But then again, it is Visual Studio, right?  We do have Graphical User Interfaces for a reason.  I'd just about given up on trying, until I learned one humble little keyboard shortcut that all by itself has saved me tons of time in VS:

CTRL + .

Any time you see the VS smart tag on some code, press that.  Don't think, just do it.  It will do your bidding, before you even know you bid it.  Need to implement an interface?  : <interface> Ctrl + . <enter>. Add a using namespace? <class name> Ctrl + . <enter>.  Rename a variable?  <rename> Ctrl + . <enter>.

If you need pictures, here's more: http://haacked.com/archive/2008/06/23/visual-studio-smart-tag-expansion-tip.aspx

Posted by Daniel Root

Wednesday, June 25, 2008

I was all about CleanSweep and DiskDoubler way back when I was 15 and they promised to double my disk to a whopping 40MB.  Nowadays I usually shy away from these 3rd party clean up utilities.  Partly because they tend to be spammy and questionable themselves, and partly out of principal - shouldn't the OS handle keeping itself tidy?  But recently, with less than a GB left on my disk, and my system crawling, I decided to try out a few.  Here are some winners I found:

  • JkDefrag - a free, faster, smarter defrag utility.  It still uses the windows defrag API, but can be scheduled, run as a screensaver, etc.  It also does some additional optimizations.
  • SpaceMonger - a disk usage analyzer with a brilliant UI.  Not free, but worth it.
  • CCleaner - a free clean-up-everything utility.  Temp folders, cache, registry, and all of that stuff the OS _should_ do, but doesn't (or at least doesn't do it all in one convenient UI).  Unlike similar apps, this one is adware free (if you uncheck the 'yahoo toolbar' on setup) and has a clean, simple UI.

Between those, I managed to free up 10+ GB!

Posted by Daniel Root

© 2006 LifeCycle Solutions, LLC | All Rights Reserved