August 2005 - Posts

Mark Russinovich Solves...

...Windows Explorer hanging (seriously, is there anything Mark can't solve?)

Check out his post on how to debug "hangs" with Windows Explorer using FileMon. Good work Mark!

Code Camp (Oz) 2: Electric Boogaloo

Well done Mitch and Greg for starting to organise the next Code Camp Oz, also known as "Return To Wagga"...I couldn't resist the temptation with my alternate title, though ;-)

Now that we've read about Code Camps with lots of swag (e.g. this one), I reckon the Down Under version could have more give-aways! Apart from that, if it's even half as good as the last one, it will still be highly worth going.

Microsoft Shared Computer Toolkit for Windows XP

Last week I checked out a promising tool (still in beta) called Microsoft Shared Computer Toolkit for Windows XP.

My reason for using it was to create a login for my nearly-4-year-old son. Using the toolkit, I got it to the point where he has a start menu which lists only shortcuts I put there ("All User" programs aren't listed), and he doesn't have the ability to delete anything or access any system stuff. Of course he's not going to do any damage (unless inadvertantly), but I wanted to be sure the PC is safe, so he can actually use it.

The tool has the ability to turn on "Windows Disk Protection" - basically any changes to the hard disk can be rolled back at next restart. I can see this would be ideal for public computers or school computers, but terrible for my home PC, as my wife's high score in Chicken Invaders 2 was lost! And DO NOT try and run a defragmenter while this feature is turned on (der).

There was a lot of configurability in this toolkit. It could be interesting for people who have PC's in their home just for kids, as you can restrict a lot of stuff (not sure how it compares to Group Policies). The toolkit is deployed in the form of HTML Applications (HTA files), and I wonder if this is going to be the final format?

My Basic UI Design

I've posted a lot about User Interface (UI) as I am very interested in having a great UI, one which my end-users are able to take advantage of without reading piles of printed documentation and which looks good as well. I thought I'd briefly show the standard UI for Windows Forms applications that I have settled on for my last 3 or 4 projects. Remember, I'm the only "programmer" (my co-workers use mostly Access and Excel along with a little SQL Server, but no "programming" as such) in a department that writes and maintains business intelligence-type applications for a hospital, and I use SQL Server 2000, VB.NET 2003 and Reporting Services for reporting (so I don't have to build reporting into my Windows Forms applications).

The crummy picture below illustrates my current "standard" base UI:

Standard Base UI Diagram

The different elements are:

  • Standard Buttons - browser-like "Back", "Forward", and "Home" toolbar buttons (with history drop-down for "Back" and "Forward"), also a toggle button to hide or show the help panel, and an Exit button.
  • App-specific Toolbar - toolbar buttons for the most commonly-used screens.
  • Application Area - MDI area for the application's screens (called "pages"), navigable using "Back" and "Forward", links on the pages themselves, or buttons on the app-specific toolbar.
  • Collapsible Splitter Control - a great splitter that also includes the ability to fully hide, from http://www.codeproject.com/cs/miscctrl/collapsiblesplitter.asp
  • Help Panel - this is a web browser control that links to the online documentation. It is context-sensitive in that it tracks page change in the Application Area and displays the correct help in the browser. It can be hidden by the collapsible splitter or the "Help" toolbar toggle button.
  • Status Bar - displays status messages. Not too much to say about this.

The Application Area is a "Navigation" control from http://msdn.microsoft.com/vcsharp/using/columns/wonders/default.aspx?pull=/library/en-us/dnforms/html/winforms07202004.asp. Each application screen ("page") is designed for one task only and is intentionally quite simple. One of the design choices that I made out of this principle was to have no sub-toolbars (the only toolbars are the ones in the image above), but use button or link controls on the pages. Link controls generally open other pages while button controls do some work.

The Help Panel displays help for the current page, by linking to my documentation wiki (although page change tracking can be turned off and on by the user). I use the "print" view of the wiki so that none of the standard wiki edit controls are displayed to clutter up the help. The user also has the option to print the current page displayed in the help panel or open it in Internet Explorer. I link each page in the application (which are just VB.NET forms) to the appropriate wiki page using the application's configuration file, so that if the help location changes I avoid a re-compile.

As I have mentioned before, I have had some positive feedback on the UI that's briefly described above. I don't know if that's because everyone is familiar with a browser - a key user for some of my apps is someone who really likes step-by-step processes (I keep telling them that most apps are event-driven: can you imagine a step-by-step MS Word?), but keeping each page simple and for a specific purpose gives the appearance of a step-by-step, logical design. Generally my apps all do the same thing:

  1. import a file or set of files
  2. process them in some way
  3. put the imported & processed data into tables for reporting
  4. show the results of an internal consistency audit using specific business rules
  5. allow the user to bulk e-mail all applicable staff and tell them that the reports are ready

There is usually one screen for each of these steps, although I use a separate screen for importing and validating new files, and managing previously imported files.

Conclusion

As you can imagine, creating the same basic setup for each project is a lot of repitition - developing an MMC-like shell with plug-in screens for the sub-systems would reduce my development time and save wear and tear on the copy-paste keys considerably, so that's something I'll be working towards in the future.

 

 

The Shifting Sand Of Training Courses?

In the not-so-far future for me and the department I work in, there is a (potential) web-based project coming up that, if I am to develop it, will be written in ASP.NET/VB.NET. I mentioned to my boss that apart from a very simple 5-page ASP.NET application I wrote 3 years ago, I didn't really have much experience with the programming side of ASP.NET, although I'm pretty familiar with HTML/JavaScript (most of my development is done in Windows Forms).

He suggested I look for some training resources, and I found these couple of courses (I live near Melbourne, Australia, so the links reference info close by me):

Out of all of these, we reckon that the most appropriate is the "advanced" web development course. I am having trouble finding companies that actually run this course, though. Out of the places in Australia, as far as I know, that run this course (Monash, Aspect and dotNet Solutions), two are in Canberra and none of them can commit to firm dates as they require between 4 and 6 participants to run the course - if they don't get the numbers, they will cancel or postpone the course as late as 5 days before it is scheduled. This is difficult for me as I would have to arrange time off work (with my boss's blessing), travel and accomodation to attend interstate courses.

Is there no demand for training of this nature? Or is this the state of IT training at the moment? Or have I missed something?

So in the meantime, I will register my interest and be on standby to travel. But I will have to look around at some good books and just "jump in" to get up to speed on ASP.NET.

Web Design Patterns (via Will)

Thanks to Bloglines getting a backlog of posts from Will's blog, I checked out this old post of his that pointed to Web Design Patterns at http://www.welie.com/patterns/.

An interesting collection of web UI patterns e.g. when to use "breadcrumb" navigation and why, the purpose and function of a "testimonial" page, the use of alternating row colors in lists, and lots more, most with real-world examples (and some counter-examples). Worth a look to get ideas and perhaps add that real polish to your website (now someone, please, examples of all the patterns in ASP.NET?)