.comment-link {margin-left:.6em;}

I Hate Linux

Friday, November 30, 2007

If I were a smart man...

If I were a smart man... I'd stop using my Windows Home Server.

The PC I've built to act as my WHS is one monster of a frankenpc.

Inside it is an old Asus A7N8X Deluxe motherboard that was retired from normal use a few years back after it was no longer stable enough to run certain 3d games despite a great deal of driver work.

The CPU for some reason (when plugged into this board (despite large amounts of tweaking) insists on running at only 1.1 Ghz, despite being clocked by the factory for 2.2 Ghz.

The SATA controller was the cheapest I could find whose drivers I later found officially only support 2000 and XP and with some jury rigging seem to work in 2003/WHS.

Not the best combination... but it seems to work, mostly.

If I were a smart (and rich) man I'd buy some better supported hardware, or even an official Windows Home Server box.

This evening I my Home Server greeted me with this warning:

Health Warning

Believe it or not, this is something I've seen before and is usually the precursor to the drive extender blowing up on me and eventually leading to data loss.

As yet I've been unable to diagnose exactly why this happens or what piece of hardware or software (likely driver) is to blame.

That ends.

So much of what I've done with Windows Home Server has been about making tools that work well for me, that make it an even better product for me, and if other people have benefit of my add-ins, so much the better.

This latest volume error has lead me to sit down and start work on yet another tool, in the hopes of better diagnosing this kind of error. Not just informing the user that an issue exists, but helping them identify which disk drive, connected to which controller, something that is of vital importance to people like me with multiple identical drives:

Unknown Failing Disk

Sure, the Console says one is failing, but IDiskInfo.Status doesn't.

If I were a smart man, I'd just quit working with Windows Home Server, quit writing code that hurts my hands, quit investing so much time and energy into itty bitty cases that Windows Home Server can encounter, cases that Microsoft didn't deem important enough (or have sufficient time) to include in a v1 product, things that while possible to do manually require a fair bit of behind the scenes work and knowledge, functionality that should be a single button in the Home Server Console.</rant>

... if I were a smart man.

Labels:

ISP: Grrr

For the last 2 hours my ISP has been having some wonderful DNS related problems which kept me from accessing ~95% of the Internet that I care about, a rather important thing for uploading a new build of Web Folders 4 WHS and related documentation, but now those issues are corrected it seems.

Yippie!

Updated: Web Folders 4 WHS

Today I am making available the latest build of Web Folders 4 WHS (version 0.6.2) which is largely a cosmetic upgrade from the previous version (version 0.6.0) and includes some new eye candy for more easily identifying folders and whether they are web enabled or not:

WebFolders4WHS 0.6.2

In addition, an updated Instructions document has been created with removal guidance as well as some information on how to manually remove everything configured by the add-in in the unlikely event (something that has not been encountered yet) that the add-in and it's configuration cannot be removed using the suggested method.

The Dreaded Warning

After being greeted with this warning in the previous version:

WebFolders4WHS Warning

some became worried about the stability of my add-in and what it could do to their system.

I want to make clear that as yet I have received no reports of data loss, reduction of system stability or performance, famine, flood or death as a result of the use of this add-in. Despite that, this add-in still relies on a number of unsupported Windows Home Server sub-systems (but supported portions of the Windows Small Business Server which serves as the basis for WHS) and simply exists as a warning of that.

At a later date I will replace the current warning with a less intrusive one.

Upgrading from Previous Version

Any users using the initial release of this add-in are advised to uninstall the previous version, download the new one and install it.

You are NOT required to remove the previous configuration prior to this upgrade.

Without further delay, the files:

Note that Software Update for Web Folders (KB907306) is still required on client machines if not already installed.

Labels: ,

Thursday, November 29, 2007

WHS Question: Resizing the Home Server Console

In response to a recent blog comment/question on if it is possible to resize the Home Server Console... the answer is yes... but it's almost worthless.

With a little bit of hackery (ie not through the normal interface) it is possible to resize the Home Server Console form to a smaller size, say 800x600, only it becomes clear that the form most of the add-ins out there were never written to do so:

ConsoleResize

The above picture is the Console running on the server itself, if you actually run it from the client you can easily resize the console, but not the parent window with out some hacking on both the client and server where you end up with this:

ConsoleResizeClient

So still no real benefit.

Some add-ins (like Web Folders 4 WHS) actually do resizing, however they are rare, largely because such functionality is basically worthless at this time because the larger application doesn't support it.

ConsoleResizeWebFolders

So to answer your question Ryan... it is possible, however there is no advantage to doing it today, maybe in V2.

Labels:

Wednesday, November 28, 2007

Mayo: Damn it!

At long last we heard something from the Mayo Clinic about the problem 8 or so MD's I'd already seen in 3 states couldn't figure out.

They agreed with one quack who I saw (and later fired) for far longer than I should of who thought that my problems were likely of type of somatoform disorder. Translation: mostly in my head.

His only suggestion was to perhaps see a doctor out in Boston (because an airplane ticket is so affordable when you are on the verge of bankruptcy due to 9+ months of being unemployed) who happens to specializes in somatoform disorder.

Oddly enough, this the same one it seems that was suggested by HD#4, but for different reasons.

Given the time it took to even get this from the Mayo, as well as approval from my insurance company for a trip (which now seems extremely unlikely), any suck trip to Boston would be 100% out of pocket as it is more than likely that by the time I would be able to get there, it'd be after January 1st.

What's so special about that day? Because of the cost of my initial surgery and a few other expensive tests (EMG, spinal MRI, and bone scan), my out of pocket costs for my insurance has been met... for this year, so come January 1st it all becomes out of pocket again.

Damn it.

If you'll excuse me, I need to go buy some lottery tickets as that now seems to be my one remaining hope.

Labels:

Huzzah! Lower Back Support!

If you can believe it, with all of the weight I've lost (~165lbs so far) over the last year and a half I've actually encountered more problems then benefits (something I really need to blog about) and one of those problems is that I no longer fit well in my car seat due to my previous size bending and shaping it in ways that the factory never intended.

For the last year or so I've been hunting for a replacement that matched my interior and was in as good, if not better condition than my old one and at last I found one at Johns Auto Parts, a wee little place in the DPRM that had not one, but two seats to choose from, something my local bone yard which is ~4x larger didn't have, but wanted even 4x as much to ship one in that was in even worse condition than what I had (upholstery wise).

Christmas came early for me this year, thanks dad!

To give you an idea of just how bad the old seat with ~125,000 miles on it:

Old seat

Frame tearing through

Frame tearing through

Midway through I realized that I should have done this when I had a shop vac around to clean a bit:

I should have cleaned

And when all done, a new (to me) seat with *only* 80,000 miles:

New (to me) seat

No longer will my back hurt or have the seat frame tear through the fabric and cause damage to belts and shirts.

Huzzah!

One little problem has already been discovered (aside from this new seat needing a visit with a shop vac) is that I forgot another reason why my seat had been so horribly altered over the 4 years and 106,000 miles I've had it... I'm tall enough that I've either got to lean back in the seat or crank it up to a good position for my lower back and slouch.

New Home Server Add-in: Tab Scroller

Do you use a lot of Home Server add-ins?

Do you have so many Home Server Console tabs that you hand begins to hurt as you click through them all?

Do you wish that the list was scrollable?

Well now it is!

As hinted at yesterday...

Description

Tab Scroller hooks into some of the undocumented bowels of the Home Server Console to allow you to scroll through your tab list (when selected) with your mouse wheel and even removes itself from view moments after being loaded so as to stay out of the way.

Download Here

Intended Audience

Any Windows Home Server user with 7 or more Home Server Console tabs.

Note: This add-in can be installed on machines with less than 7, however on such systems it can cause some visual artifacts (non-functional scrolling buttons, an empty space where this add-in used to be) only so long as the add-in is installed and there are less than 7 tabs.

Installation

1. Download the installer
2. Copy installer to your \\servername\Software\Add-ins\ directory
3. Install through the Home Server Console Settings dialog
4. Re-launch the Home Server Console

Usage

After launching the Home Server Console, use the mouse wheel to scroll up or down through the list.

If nothing happens, click on one of the tabs (so as to give the container holding them focus) and try scrolling again.

Background

This add-in came about yesterday due to the frustration that I expect many add-in developers and users have experienced, of having to manually scroll through a long list to find just the one they are looking for, and despite the tab list in the Settings dialog being scrollable, the one on the main form is not, so I decided to change that.

A while back I wrote an experimental add-in named Form Hacker which used reflection to navigate through the relationships between the Home Server Console forms and the controls they contained, through which I learned enough to be dangerous and pull things off like this and my as yet unblogged about add-in Tab Reorderer.

Final Word

It must be said that this add-in uses numerous bits of undocumented functionality of the Windows Home Server Console and can be rendered non-functional at any time with a future Home Server update.

Labels: ,

Tuesday, November 27, 2007

Windows Home Server Development: Grrr

As much as I love Windows Home Server, I find myself hating it at times when I keep running into issues which prevent me from so fully exploiting it as easily as I would like and wouldn't you know... today was one of those days.

Today I finally had enough of a... tax I have to deal with almost every time I test changes in an add-in (currently Web Folders 4 WHS) and decided to write yet another add-in to solve my problem... only problem was that what I was trying to do isn't exactly supported (surprise surprise)... hence the following boredom and angry inspired relief:

P1

P2

P3

P4

P5

P6

P7

P8

P9

P10

P11

Stop back tomorrow for the link to this add-in where the following will be said by various groups:

  • Average WHS User - "Eh? What's the point?"
  • WHS Developers - "How the hell did you do that?"
  • Microsoft - "We need to stop this guy, consider what he's trying to do in V2, or hire him."

Labels: ,

Monday, November 26, 2007

Spam from Dozier Internet Law worse than previously thought

Late last week I broke the story about the willful violation of Google's policies with their spamming of Google's index with worthless doorway pages, I've since uncovered even more domain they use for this purpose:

That's right, in addition to the previously discussed 8433 words of Google spamming fun, these new 5 domain names add another 9962 words to the mix.

Believe it or not... the news doesn't end here. Oh no, Dozier Internet Law gives us yet another reason to respect and think highly of them.

Not only is Dozier risking penalization or delisting by Google... they are also associating with some of the lowest scum of the web... domain squatters and those who register domains with the sole purpose of serving up ads.

After just a few minutes with Google and only searching for "Dozier Internet Law" I was easily able to find these spam listings, all appearing to be sponsored by Dozier or one of their agents:

Google View #1:

Google Link - 1

Spam Page #1:

Spam Page - 1

Google View #2:

Google Link - 2

Spam Page #2:

Spam Page - 2

Google View #3:

Google Link - 3

Spam Page #3:

Spam Page - 3

Google View #4:

Google Link - 4

Spam Page #4:

Spam Page - 4

Google View #5:

Google Link - 5

Spam Page #5:

Spam Page - 5

Like my previous post, all links to sites owned or run by Dozier Internet Law links contain the rel="nofollow" tag so as to keep this post from benefiting them in anyway.

Don't forget about the Google Report A Spam Result page.

WHS Developer Tip #7: Testing without deployment

Q: Is there any way to more rapidly test my add-in than copying it over to my WHS and restarting the console every single time I want to view a minor change?

A: There are a few different ways (some of which I'll be covering in later tips) to test your add-in without manually copying it over to the server.

UserControl Test Container

If you are doing your development in VB.NET (2005 or 2008), are using UserControls (such as from the add-in template), and hit the F5 key to debug your work... then you've likely seen the UserControl TestContainer which is a simple application that lets you quickly test out a user control on a form.

It works great... but is limited, especially considering it's not automatically wired up for C# projects, something that is tricky to do with C# Express.

Stand-alone application

Another quick and easy option that works equally well with any language is to add a new Windows Forms project to your solution that your add-in.

This method enabled you to add your user controls to a form or two that you control and test them out in a similar manor to what the UserControl Test Container gives you.

This too works great... but there is a better way.

WHS Test Loader

My preference has been for a tool I created called WHS Test Loader tool (previously discussed) which uses similar rules (from what I can discern) to the Home Server Console for loading an add-in and displays both it and the settings to the screen.

While it doesn't give you everything that the real console does, it at least lets you test your add-in a bit on your own PC in more ways than just visually.

Overview

In addition to providing a couple of tabs which hold the actual main and settings tab controls, those tabs can also be accessed by clicking on one of the GroupBoxes which give a very loose idea of what your tab's buttons will look like in the Console.

If you are planning on using some form of localization in your add-in, one of the most useful features to you will be the CurrentUICulture ListBox which lets you change the culture of the application's UI thread. Using this, you can easily test your add-in in English, German, Croatian or any other language or culture you want, it's just up to you to define the languages that you'll support.

The Additional Tools tab is intended to be a home for other general troubleshooting and testing bits... for now it simply displays the contents of the CommonImages class.

Another specialized feature offered by the Test Loader is a custom class that implements the IConsoleServices interface, an instance of which is passed into the constructor of your tab objects enabling you to still be able to call OpenSettings() and OpenUrl() without additional changes to your code to check if it is running in a test environment.

Usage

Start by downloading a copy of this tool to the same directory where you keep the files from your Home Server (due to all of the assemblies that it references).

Once there you can either launch it manually and use the Load Assembly button to select your assembly... or have Visual Studio launch it for you.

In order to configure Visual Studio...

1. Open your project in your non-Express version Visual Studio (Express specific instructions can be found in the last section)

2. Right click on your project in Solution Explorer and select Properties

3. Select the Debug tab

4. Change the start action to 'Start external program' and set the specified path to the location of WhsTestLoader.exe

5. Set the 'Command line arguments' option to the name of your assembly (available under the Application tab) with the trailing .dll

When all said and done you should end up with something that looks like this:

Configured Debug Tab

Once properly setup, when you next hit F5 (or what ever other method you use to start debugging) the Test Loader will launch with your tab inside, giving you a quick and easy method to test out some of the functionality of your add-in.

For curious readers, the C# source code for this application is available.

Sorry VB lovers, this app is C# only... but that doesn't mean you can't use the pre-built version to load and test add-ins written in the .NET language of your choice.

Administrator

A number of the controls and other less than documented features of the Home Server code that we can use requires elevated (administrative) permission... something that we as good programmers shouldn't be running as by default.

That being said, unfortunately in order to fully test an add-in it is often necessary to run the Test Loader as Administrator, the easiest way to achieve is simply to run your instance of Visual Studio as Administrator (when running Vista) so that each time you attempt to debug, you are not greeted with a UAC prompt.

Express Editions

The Express Editions of Visual Studio (both 2005 and 2008) are purposely limited so as to encourage you to eventually by the higher (and pricey) versions of Visual Studio... the little secret is that most of those limitations are implemented in the user interface... which means that will a little knowledge of how the back-end files works, you can take advantage of a few less than well known features.

One of the wonderful things about the Express Editions is that they use the exact same project and solution file format as the higher versions, enabling you to easily move code back and forth when needed.

Another advantage of this is that the Express Editions will act on settings in a project file, even if it is incapable of setting it and such is the case with setting the Start Action.

In order to make your project in Express launch the Test Loader, you'll need to break out your favorite text editor (ie notepad) and create a new file with these contents:

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<StartAction>Program</StartAction>
<StartProgram>E:\WHS Dev\WHS - Server\WhsTestLoader.exe</StartProgram>
<StartWorkingDirectory>
</StartWorkingDirectory>
<StartArguments>HomeServerConsoleTab.Home_Server_Add_In1.dll</StartArguments>
</PropertyGroup>
</Project>

You will likely have to change the StartProgram tag to specify the path to where you put WhsTestLoader.exe, as well as StartArguments to reflect your assembly name.

Next, save this file in the same directory as your project's project file (.csproj or .vbproj) and name it depending on your language:

ProjectFileName.vbproj.user

or

ProjectFileName.csproj.user

where ProjectFileName is the name of your project file.

Because the text editor you are using probably doesn't default to using the .user extension, you'll need to wrap the entire filename in double quotes to force it to use that name, instead of letting it append it's own default extension to the end.

Please note that the file name must be exact, so if your project's name is "Home Server Add-In1.vbproj", then your new file must be named "Home Server Add-In1.vbproj.user".

Once you've created this file, load your project up in Express and hit F5 to begin debugging to launch the Test Loader with your add-in in it much like the folks with the expensive versions of Visual Studio.

Note: The information in this post is based on undocumented and at times deduced information on Windows Home Server and is not officially supported or endorsed by Microsoft and could very easily be wrong or subject to change in future, so please take it and everything else said on this blog with a grain of salt and use with caution.

Labels:

Wednesday, November 21, 2007

Missing Certificate with WebFolders4WHS

Problem:

A user remotely connecting to a Windows Home Server computer configured with WebFolders4WHS may receive the following error:

The folder you entered does not appear to be valid. Please choose another

or a dialog titled "Select the certificate you want to use" that allows the user to select from an empty list the certificate they want to use to secure the connection.

Cause:

This error is caused by when a user connects using a domain name other than their configured yourname.homeserver.com name that the server's certificate is configured for.

Solution:

Connect to the Home Server using the yourname.homeserver.com domain name instead of another one unless a certificate has been generated for that name as well.

Labels: ,

Tuesday, November 20, 2007

More unethical behavior from Dozier Internet Law

Sadly my attention has been drawn away from the Dozier Internet Law vs The Free World battle online, and as a result seeing my Google ranking drop a bit over the last 5 weeks (weeks 1, 2, 3, 4, 5) for related queries I decided I needed to check the status of things... and boy did I find another whopper.

I've discovered that our friends over at Dozier Internet Law continue to engage in unethical behavior... this time attempting to pollute the Google search results with garbage domain names.

Despite doing all of their business at www.cybertriallawyer.com, they own a number of other domain names including:

Up until a few weeks ago some of those domains simply pointed to their main web site... now though all are doorway pages with a combined 8433 words of Google deceiving text between three different web pages (www.dozier-internet-law.info redirects to www.dozier-internetlaw.org) with largely similar, but reorganized content to what is found on their main site.

It has become well known that Dozier Internet Law engages in behavior that is on questionable ethical and legal ground and rather than apologizing and/or stopping... they just ramp it up even more.

What better way to show what a group of professionals they are to potential clients than by polluting Google in a manor that they frown upon while simultaneously giving even more ammunition to the very people they are trying to beat through these actions.

Brilliant!

Perhaps it would be in the best interest of Dozier Internet Law to read the Google's Webmaster Guidelines page before news of this unethical behavior gets out and those critical of it report it's actions to Google via it's Report a Spam Result page.

Monday, November 19, 2007

Why am I suddenly an expert on online polygraphs?

A couple of years ago I blogged on a bit of spam I received that was advertising online polygraphs... a post that largely went unread until late last week when ~50% of my traffic suddenly was as a result of people doing (mostly) Google searches for 'online polygraph' and similar queries... mostly out of Canada.

While I can understand why I show up so high on the Google listings... I'm forced to wonder why so many people are suddenly interested in the subject of online polygraphing, something I cannot imagine would be accurate without some fairly expensive USB devices for monitoring the test subject and a tester watching everything the test subject does via a camera.

New Home Server Add-in: Web Folders 4 WHS

Edit: Nov 30, 2007: All links in this post now refer to the latest version(s) while an updated screen shot and removal instructions can be found on this new post.

Windows Home Server provides an easy to use remote access mechanism that enables a user to upload and download files to/from ones Windows Home Server when they are not on their local network.

One big problem... it's web browser based and one of the key paradigms users are used to does not exist... file and folder drag and dropping.

My new add-in, WebFolders4WHS gives users a new browser based way to access their files, as well as letting them do it through the Windows Explorer shell and any other WebDav client that supports HTTPS.

What it looks like

This add-in adds a new Home Server Console tab which lets you choose which shares you want to allow access to via Web Folders:

Main view of WebFolders4WHS

A small settings tab is also added which provides basic information on the state of the add-in and allow you to set it up or remove it's configuration.

Settings page of WebFolders4WHS

When you move to the client side, a user can simply create a folder in My Computer (under Vista) or My Network Places (under XP), and in Vista an actual mapped network drive (complete with letter) can be created and used much like a local directory or share.

My Computer in Vista

What you need

In addition to a simple installer as is required for most Windows Home Server add-ins, a Microsoft provided client-side update is required to enable secure access to the server.

These files are available here:

How it works

This add-in is nothing more than a bit of glue that wires up a few Windows sub-systems such as: Windows UNC Shares, an IIS Virtual Directory, WebDav and the Windows Distributed File System. Because this add-in uses existing functionality, all existing user accounts and share permissions are maintained and remain in full effect when a user accesses files via a Web Folder.

Also see: Windows Home Server Forums Discussion

Labels: ,

WHS Developer Tip #6: Faster referencing

Q: Is there a faster way to add a reference to a Windows Home Server assembly instead of manually navigating to where the actual files reside?

A: The easiest way is to have the desired assemblies show up under the .NET tab of the Add References dialog:

Add Reference Dialog

Two things are required to achieve this, a local copy of the assemblies and a registry tweak.

Copying

If you haven't already, it's a good idea to just grab the entire C:\Program Files\Windows Home Server\ directory from your Home Server and copy it to your development machine for easier referencing and reflection.

Configuration

To add the necessary registry key:

1. Launch regedit

2. Navigate to the following registry key:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v2.0.50727\AssemblyFoldersEx

3. Create a new key (folder) named 'Windows Home Server'
Note: You can name this key anything you want.

4. Change the default value to the path where the Windows Home Server assemblies exist on your development machine

When all done you should have something that looks like this (the actual path will depend on where you have the files located):

AssemblyFoldersEx\Windows Home Server key

For more info on displaying assemblies in the Add References dialog, see this MSDN article.

Configuration Alternative

A slightly quicker alternative is to download, modify (and use) this registry file to point to the directory on your development machine where the assemblies live.

Note: When you change the path to match the location on your machine, make sure that drives and directories are separated by two backslash characters instead of one as is normally seen in Windows (ie '\\' vs '\'). This is only required when modifying a registry file, not when using regedit.

Usage

Once the key has been added, re-launch Visual Studio, open or create a new project and launch the Add Reference dialog to be greeted with your new additions.

Benefits

Perhaps the greatest advantage of adding this key is that when you create a new project from a template that references a number different assemblies that you would ordinarily have to reference yourself (such as a Home Server Add-in) is that Visual Studio will automatically find the references assemblies for you based on this and other registry keys.

Drawback

One drawback of pointing the created registry key to a directory that contains all of the files from the server... is that all of the .NET assemblies show up in your Add References list. As nifty as it is to have ready access to the official files such as HomeServerExt.dll and Microsoft.HomeServer.SDK.Interop.v1.dll, we really don't need ready access to the Xceed libraries that you and are not licensed to use.

Applicability

Despite the fact that Visual Studio 2008 targets the new 3.5 Framework as well as the year old 3.0, this registry tweak still works as both 3.0 and 3.5 uses the 2.0 Common Language Runtime which this tweak targets, meaning it works just as well under 2008 as it does under 2005... as well as the Express edition and version of your choice.

Note: The information in this post is based on undocumented and at times deduced information on Windows Home Server and is not officially supported or endorsed by Microsoft and could very easily be wrong or subject to change in future, so please take it and everything else said on this blog with a grain of salt and use with caution.

Labels:

Thursday, November 15, 2007

WHS Developer Tip #5: Images and Icons

Q: How can I use some of the pictures and icons that are used by the Home Server Console?

A: Rather than violating the EULA and ripping the images you want straight from the files that came with Windows Home Server (which is certainly possible)... you can look to the CommonImages class (Microsoft.HomeServer.Common.Client, WHSCommon.dll) and it's 71 public static properties (69 of which return something), each of which returns different icon or image that can help you better theme your add-in.

Here are some of the available images:

ImagesAndIcons

One unfortunate limitation of CommonImages is that some of the more sought after icons like those used for add, delete, edit and properties are not present... however a green check and red x are.

You could randomly guess which is which... or you can use one of these two applications (C# or VB) which displays them.

CommonImages Example Application

With any luck, eventually Microsoft will make available (either officially or unofficially) more of the art used in the Home Server Console so that developers can better integrate visually with it.

Note: The information in this post is based on undocumented and at times deduced information on Windows Home Server and is not officially supported or endorsed by Microsoft and could very easily be wrong or subject to change in future, so please take it and everything else said on this blog with a grain of salt and use with caution.

Labels:

Wednesday, November 14, 2007

Edge cases and polishing

Some say that that the majority of developers are psychologically incapable of adequately testing their own code (outside of unit testing) because subconsciously they know where their program works and where it doesn't and will avoid straying from the path so that their program keeps working great.

I admit it... I'm one of those developers.

Right now I'm having the fun of forcing myself down random paths to test strange edge cases for my new Windows Home Server add-in... cases that it would be more than fair for me to just say say "Sorry, but you did something I told you not to do and now this add-in cannot clean up after itself"... but I'm not.

Technically everything I am doing is unsupported by Microsoft as I'm using a number of Windows subsystems that shouldn't ordinarily be used by a Windows Home Server user... in fact normal use of them could even violate the end user license agreement.

What I'm trying to do this evening is do my best to make sure that even if a user enables DFS and dinks around with that or other such systems, I'm able to gracefully handle dang near anything the user might have done.

That being said... grrr.

Once I've got those edge cases accounted for... I need to improve my logging and I'll be all set.

</rant>

Labels:

Monday, November 12, 2007

WHS Developer Tip #4: Project Templates

Q: Is there an easier way to get started in building my add-in other than building it from scratch... like a project template?

A: There are no official project templates and to fill this gap back in April (now) WHS MVP Ken Warren did release a couple example templates that I've used for every single add-in and test add-in I've written.

Unfortunately as useful as his templates are, they have a number of issues that require some extra work to make work property, so I built a couple of new and improved ones:

Looking for another language? Managed C++? J#? Feel free to ask.

Installation Instructions

Copy the language template of your choice to the following directory on your Vista development machine:

Edit: After much feedback it must be said that users of these templates SHOULD NOT extract the zip contents to the following locations, instead they should SAVE the file there. Visual Studio expects a zip, not a directory or files.

%UserProfile%\Documents\Visual Studio 2005\Templates\ProjectTemplates\<Language>\

or under XP/2003:

%UserProfile%\My Documents\Visual Studio 2005\Templates\ProjectTemplates\<Language>\

Where <Language> is either Visual C# or Visual Basic.

Usage

Launch Visual Studio 2005**, bring up the New Project dialog and select the language of your choice. Under the My Templates section you will see a template named Home Server Add-In (apologies for the poor icons*), select it, type in a name for your project and press the OK button.

The created project will contain 2 different kinds of files, user controls and the required Home Server classes.

Two classes named HomeServerTabExtender and HomeServerSettingsExtender do the work of informing the Home Server Console what controls exist in your add-in, what their display name should be and other settings. With the exception of changing the display text and icon, you can largely leave these classes alone.

There are also two user controls named MainTabUserControl and SettingsTabUserControl which are the place for you to add your custom layout and code with the ease of the Visual Studio Forms Designer.

There are just two things that you'll need to do before your new add-in will be useable on your Home Server...

Add Reference

Unless you've specially rigged your development environment (which I'll cover in a later Dev Tip), you'll need to manually add a reference to HomeServerExt.dll (located in C:\Program Files\Windows Home Server\ on your Home Server).

Visual Studio Bug

For your add-in to be detected by the Home Server Console, the deployed assembly must have a name and namespace that match the following pattern:

Assembly Name:
HomeServerConsoleTab.YourTabName

Namespace:
Microsoft.HomeServer.HomeServerConsoleTab.YourTabName

Where YourTabName is the unique name you've given to your tab.

In order to make your tab meet these requirements, you will need to edit your project's properties and change the assembly name to meet the above criteria.

As easy as it is to make an add-in with these templates, a bug exists in Visual Studio 2005 and 2008 which allows the dynamic naming of the namespace based on the project name you specify... however the assembly name is always set to the project name, something that isn't always desired.

Deployment

To use your new add-in, simply copy it to the C:\Program Files\Windows Home Server\ directory on your Home Server and re-start the Home Server Console.

You can also make your own installer using WiX or Visual Studio Setup Project to install your add-in through the Home Server Console.

*If any readers have any suggestions as to how these templates could be improved, or want to make a better looking icon for the templates, please let me know.

**These templates have also been tested with the the beta 2 version of Visual Studio 2008 and to make them visible, change the directories mentioned previously appropriately (2005 -> 2008).

Note: The information in this post is based on undocumented and at times deduced information on Windows Home Server and is not officially supported or endorsed by Microsoft and could very easily be wrong or subject to change in future, so please take it and everything else said on this blog with a grain of salt and use with caution.

Labels:

Friday, November 09, 2007

24: The Unaired 1994 Pilot

Jack Bauer saves the world with AOL 3.0.

If you'll excuse me... I need to go dry my eyes.

Thursday, November 08, 2007

Q Home Server Install Doc

I was browsing around some of the nooks and crannies of my Home Server this evening and ran into a file named readme.txt (located in C:\Inetpub\remote\readme.txt) which said:

Q Home Server Install Doc

 

To install remote access for Q Home Server follow these steps.

1. Run RemoteAccess.msi
This will install the website

3. Run dsa.msc and create a user
If you want a user to have remote access, add them to the "Remote Desktop Users" group

 

4. Configure your router
Setup your router to forward ports 80 and 4125 to the Q Server.

 

5. Using a web browser, navigate to your external ip address and use Microsoft Home Server Remote Access
https://myServerName/Remote

While it's clear that this file pre-dates the initial beta of Windows Home Server and probably should have been removed sometime between then and now, one has to wonder just how old it's instructions may be and for how long they were relevant (ie using dsa.msc to create a user).

While the presence of this file isn't by itself important, it does go a long way to remind us though just how far WHS has come and how polished it has become, that now even for setup a user never has to touch the actual home server desktop.

Labels:

Survey says... It needs your input

As part of his eternal studenthood (with the current phase occurring at UNL), Dan over at tdaxp has put out a call for participants for a 30 minute survey that focuses on Creativity and Blogging.

Do you have 30 minutes you don't mind burning for the cause of science? No? Come on, it's easy and it helps out with something that is described as:

This is a research project to study the correlation between cognitive, affective, and behavioral attitudes on creativity in the domain of blogging.  (“Blogging” refers to maintaining an informal, chronologically sorted online journal.) 

Then stop on by and take the survey.

Wednesday, November 07, 2007

Grumble Grumble Visual Studio bugs

Off and on for the last couple of days I've been playing around with making Visual Studio project templates and customizing them with Template Parameters and ran into a little issue... the assembly name template being specified in the larger template is simply ignored.

What does that mean? If I create a custom template with the AssemblyName tag being specified as say... Xyz.$safeprojectname$, and create a project named "My Test Project" based on it... the resulting assembly name is "My Test Project", not Xyz.My_Test_Project as that syntax would generate for a namespace... even on a fully patched copy of Visual Studio 2005.

From the looks of it this has been bugged before on Connect... but ultimately closed as not reproducible.

Thinking I can show how to reproduce it.. I've submitted it myself: Custom AssemblyName tag ignored in template.

There still exists a problem... the same issue exists in at least Beta 2 of Visual Studio 2008. Someone first pointed it out in April 07 as existing in the March CTP, and in my testing it seems that this still exists... so it to has been bugged.

Grrr.

Double Grrr I suppose when it sounds like Beta 2 will be the last publicly available version of Visual Studio 2008 before they RTM so there will be no way for me to know if this bug has/will be fixed by then.

Labels:

WHS Developer Tip #3: Intellisense

Q: How can I make Visual Studio provide more useful Intellisense support for the Windows Home Server SDK?

A: In order to get Intellisense support in Visual Studio a developer needs an xml file that contains all of the xml comments from the original code, something that was likely used to create the documentation available on MSDN today... unfortunately no such xml files have been made available for Windows Home Server from Microsoft, instead developers are forced to go without or make them themselves.

Based on the documentation on MSDN, I have created a pair of xml documentation files for both HomeServerExt.dll and Microsoft.HomeServer.SDK.Interop.v1.dll which are available for download here.

In order to use these them, you will need to extract the two xml files to the same directory where HomeServerExt.dll and Microsoft.HomeServer.SDK.Interop.v1.dll live on the machine you are developing on:

DocumentationNextToSDKAssemblies

Once extracted, you need only add a reference to one (or both) of these assemblies (that sits next to the associated xml file) in Visual Studio and the documentation will be there for you.

Note that if you want to use this documentation in an existing project, you will first need to delete the references and then re-add them.

Regardless of if you are writing your add-in in C# or VB.NET, once copied and (re)referenced, you'll turn this kind of view:

IShareInfo with out description

into this one:

IShareInfo with description

Note: These files have been tested in Visual Studio 2005 and 2008 Beta 2 in both VB and C#.

Note: The information in this post is based on undocumented and at times deduced information on Windows Home Server and is not officially supported or endorsed by Microsoft and could very easily be wrong or subject to change in future, so please take it and everything else said on this blog with a grain of salt and use with caution.

Labels:

Tuesday, November 06, 2007

Windows Home Server: Client-Side SDK

As reported elsewhere (MS Windows Home Server and Windows Home Server Blog), there is a new video on Channel 9 (as well as one on on10.net with Charlie Kindel) that is a sit down with Home Server Lead Developer Chris Gray (get back to the blogging man!) where he talks about building add-ins for Windows Home Server.

What hasn't been reported anywhere else is that Chris also mentioned a client-side SDK for Home Server and when I asked about it Home Server General Manager Charlie Kindel chimed in and said in part:

Chris sorta "mis-spoke" and "let the cat out of the bag" when he talked about the client-side SDK stuff.

 

We are working on it.

 

We have not announced when it will be released in pre-release form.

 

We have not announced when it will be released in the product.

Great to hear it's being worked on and so long as it gives the same kind of access to WHS as the functionality in Microsoft.HomeServer.SDK.Interop.v1 does on the server I'll be thrilled.

If they give us a way to first put client-side code on the server and then deploy it to clients automatically... I'll be ecstatic.

Granted the first bit is more likely in a V1 product than the second... a dev still has to hope.

Labels: ,

Friday, November 02, 2007

Belated Congrats

Major (and a month late) congratulations goes to Andrew Grant (no relation) and his add-in Whiist, David Wright and his Jungle Disk and Prakash Gautam with Community Feeds for Windows Home Server for winning the Microsoft Windows Home Server Code2Fame Challenge.

It's truly wonderful to see so many great add-ins being created for this new platform and look forward to seeing in the coming months what ideas couldn't make it in to the competition.

On the plus side it looks like my entry did receive an honorable mention (scroll to the bottom).

Labels:

WHS Developer Tip #2: MessageBox alternative

Q: How can I make a more WHS style Message Box like what the Home Server Console uses?

Example:
Example QMessageBox

A: The Windows Home Server team already beat you to it and created the QMessageBox class (Microsoft.HomeServer.Controls, HomeServerControls.dll) which provides a very similar experience to the tried and true MessageBox class... only with a few improvements such as...

Size and Color

One of the first things a programmer testing out QMessageBox will notice is that the dialog is far larger than a regular MessageBox and is formatted to look more WHS like in terms of icons and color and is probably the biggest reason to consider using it (over making ones own dialog from scratch).

Icons

Keeping the future in mind, the developer(s) behind QMessageBox actually changes its appearance in another key way by replacing the default system icons (as based on the MessageBoxIcon enumeration) with those that ship today with Windows Vista instead of the ones that would ordinarily be displayed by Windows Server 2003.

For comparison, the following image (click for larger) shows the difference between MessageBox and QMessageBox being used on Windows XP, 2003, Vista and Home Server:

MessageBox vs QMessageBox

(Note: The above Windows 2003 MessageBox examples were run on a Windows Home Server machine.)

An unfortunate limitation of QMessageBox is that internally something is wrong with it's handling of the MessageBoxIcon.Question value because use of it will raise an ArgumentException, so be sure to stick with one of the other 4 working values (None, Asterisk, Hand, Question & Warning).

If all of this wasn't enough, one of the biggest (and least obvious) features of QMessageBox is that it allows you to specify an arbitrary image in place (in some overloads) of a MessageBoxIcon:

QMessageBox with CustomImage

Multi-line

A major pet peeve of mine about MessageBox was that it only had two text areas that you could use, the text argument displayed in the body of the window while the caption argument was displayed in the title bar. For any more advanced formatting you had to make your own dialog or add new line characters to separate certain areas... QMessageBox takes this idea and extends it by allowing a third argument named title which appears as a bold area of text that appears above where the text is.

Dual Line QMessageBox

Note: The information in this post is based on undocumented and at times deduced information on Windows Home Server and is not officially supported or endorsed by Microsoft and could very easily be wrong or subject to change in future, so please take it and everything else said on this blog with a grain of salt and use with caution.

Labels: