| | Sun | Mon | Tue | Wed | Thu | Fri | Sat |
|---|
| 22 | 23 | 24 | 25 | 26 | 27 | 28 | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | | 8 | 9 | 10 | 11 | 12 | 13 | 14 | | 15 | 16 | 17 | 18 | 19 | 20 | 21 | | 22 | 23 | 24 | 25 | 26 | 27 | 28 | | 29 | 30 | 31 | 1 | 2 | 3 | 4 |
Subscribe to this feed:
|
|
Archives:
| May, 2010 (1) |
| March, 2010 (1) |
| November, 2009 (1) |
| September, 2009 (1) |
| July, 2009 (2) |
| June, 2009 (1) |
| May, 2009 (1) |
| March, 2009 (5) |
| February, 2009 (3) |
| July, 2008 (1) |
| June, 2008 (2) |
| May, 2008 (1) |
| April, 2008 (2) |
| March, 2008 (4) |
| February, 2008 (4) |
| December, 2007 (2) |
| October, 2007 (2) |
| September, 2007 (1) |
| June, 2007 (1) |
| May, 2007 (4) |
| April, 2007 (4) |
| March, 2007 (2) |
| February, 2007 (4) |
| January, 2007 (3) |
| December, 2006 (1) |
| November, 2006 (4) |
| October, 2006 (7) |
| September, 2006 (2) |
| August, 2006 (14) |
| July, 2006 (9) |
|
Ages ago, NDoc- a jDoc clone- was the best free .NET documentation-generating application in town. For various reasons, that project shut down, and Microsoft released it's internal documenting system, Sandcastle, to the public. However Sandcastle by itself is non-trivial to understand and implement. It's designed to gen up the entire MSDN documentation site, so it can be overwhelming for creating docs for your small line-of-business app. Enter Sandcastle Help File Builder. This gem brings back the simplicity and open source spirit of NDoc, and adds some functionality from Sandcastle to provide a great documenting solution for small or large projects. I'd checked it out in earlier versions, but it's come a long way. It even has a console app, which can easily be integrated into your continuous integration process. In addition, you can add documents other than the typical xml-doc and build a true compiled help that a developer may actually use. Here's how we set ours up: - A solution has a _FileReferences project for file-based dll references and other non-compiled code. (Build is false for all Build configurations). This project contains:
- a Help folder that contains .htm files and the compiled .chm file
- a .shfbproj file that manages the documentation project.
- In the .shfbproj:
- A site map has been added to build the table of contents. It has nodes pointing to each .htm file.
- The solutions' projects have been added as Documentation Sources.
- An automated process downloads the solution from source control, checks out the .shfbproj and .chm, runs the console app to generate a new .chm, and checks everything back in.
This way, the documentation is constantly updated and available in source control alongside the project!
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.
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.
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.
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.
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: 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:  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!
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!
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.
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'.
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
|