« November 2007 | Main | January 2008 »

December 31, 2007

My Top 10 Technology Usability Rules for 2008

I've said it before, and I'll say it again here, I'm tired of technology ruling my life.

The reason I buy gadgets, stereos, DVRs, etc., is to make either my family life easier or more enjoyable. Some products I've bought are great, but others have caused far more pain than they should. So, for 2008, I'm going to hold all mainstream software and technology that enters into my life to a new standard (software in this case is any software that is designed to be always on and interacting with one or more users, such as the Windows Media Center).

Products include:

DVR's, TV's, clocks, Stereos, satellite receivers, computers, external hardware for computers (printers, scanners, external hard drives, etc.), MP3 players, digital cameras, security systems, personal grooming (electric razors), telephones (both land-line and cell), DVD players, game systems, home automation equipment (such as Insteon or Z-wave), UPS (battery backup), and anything else that I might buy that needs a battery or plugs in...

Here is my 2008 Wired Prairie Ten Rules of Technology Usability:

  1. If batteries are required, the batteries must be included (and if batteries are strongly recommended, they should be included as well). If the batteries are rechargeable -- try to give me at least a little play time charge before I need to charge the battery. It's no fun to open up something new and then have to wait 4-12 hours for a battery to charge.
  2. The first thing I should see when opening the box is a simple 1 page (or poster sized) set up guide. Don't assume that all the pieces are obvious, even if labeled.
  3. If there are multiple pieces or parts, label all of the parts with nice big friendly labels in common languages. Label any cords or cables with your product name at the ends of the cord/cable so that I can easily identify each and it's associated task for a particular product without guess work (I can do it myself with a silver sharpie marker, but why can't you?)
  4. Make 95% of the product not require a manual for use. Pick terminology and descriptions that people can understand. Reward users for picking up the small, task oriented manual. If you've got more than one manual required, rethink your product. I won't read it and your product is too complicated. (Even a modern home theater surround sound stereo amplifier shouldn't be as complicated as most are today).
  5. No more power bricks that require me to buy special power strips or rearrange every other power cord when I need to plug your product in.
  6. If there are setup steps absolutely necessary once the product is turned on, pick reasonable defaults so that I can get to using the device really quickly (1-5 minutes at most). Again, reward me for adjusting a few settings later, but get the product up and running as quickly as possible.
  7. Make it reliable as an old AM/FM stereo. On -- radio, off -- no radio. When you embed all sorts of gadgety interconnected goodness (like WiFi for example), it must work and be really easy to troubleshoot (the only problem should be that the WiFi router isn't working).
  8. Limit the number of settings/adjustments to the common things -- if you add too many, it becomes complicated and confusing (see my comments on manuals above!). The tech-geeks in families don't always want to be the support for your products!
  9. Don't make me think about your product--I just want it to work and to perform it's task. It should fade into the background hiding behind the function it performs. And it should look good too -- simple, functional. Clean.
  10. It must work at least 99.999% of the time without fail (that's about 5 minutes of problems a year). If I see a "reset" button somewhere on your device, I'll be worried!

Vendors, I've got some bad news:

If you're trying to build the "one device to rule them all" device, you'll likely fail. Sorry. Please please please, build a great product with the right amount of functionality!

Also on the way to working through a product design, talk to some designers (people interested in human interaction), not just the practical and logical engineers. Or, you may end up building something ugly, that only a manufacturer really could love, like the Amazon Kindle. :-)

Bonus points for vendors:

  • Major bonus: The packaging (and padding) should be recyclable in common cities recycling programs (or biodegradable). Styrofoam sucks.
  • Major bonus: be considerate of the environment with electricity consumption. This could include:
    • A true on/off switch, not a device that is constantly draining power (when possible).
    • If the product must remain on always (in a stand-by mode), minimize the amount of electricity needed to power the product. Leave the clocks, LED's, etc. out (unless of course it's a clock!). I've got a clock already, and if the product is in standby mode, I don't care to be told visually it's in standby. It's a waste of even a watt.
    • Extremely efficient power supplies with minimal heat gain and energy loss (when appropriate).
  • Leave out any unnecessary internal packaging when possible (like plastic bags).
  • Color manuals written in plain English.
  • Please, proof-read your manuals -- double check for grammar mistakes and misspellings.
  • If the product is upgradable, make it stupidly simple and bullet-proof.
  • Have the product send or display an alert (appropriate for the device/software) when it's having troubles. BUT, tell me how I might resolve the problem. The resolution shouldn't include a telephone call with some meaningless code.
  • Don't skimp on cables, especially in this world of HDTV -- if there are reasonable cables to include, include the $1 cable. Don't make them all optional or just include the cheapest one for you to include.
  • Give it a good warranty. Stand behind the product. If there are two decent competing products on the store shelf and one has a better warranty, I'll probably go with that option.
  • If you want to make it an odd/unique shape, be certain there's a good reason to do so.

Vendors:

If your products don't do these things, I hope your potential consumers send you a clear message by NOT buying your products. I will do exactly that. (And I hope my readers will do the same!). I'll post more about products that I get and how they (hopefully) live up to my list.

Think about us. Think about what has made Apple successful. It's not just the fact that they have enjoyed a cult-like following over the years -- they've tried to put the consumer first, not their product.

(If you'd like some feedback on a design or product, contact me!)

 

Now, what bugs you about the technology and devices in your house? What should I add to this list?

Sometimes you just need a good GC.Collect ...

From the VistaDB blog: To Collect or not to Collect.

One of the first things it seems most people do when they get the code to VistaDB is remove the GC.Collect() call we have in the MinimizeMemory code for the Tree class.  This class specifically is used to hold portions of the database, indexes, etc in RAM.  Periodically it is combed to attempt and minimize the number of nodes kept in RAM.

They've done a bit of testing with 3.5 and found the performance with and without the call to be much more comparable than previous versions.

Does this mean you should use GC.Collect? Generally, the answer is still no. I've noticed a few times that a GC.Collect with Marshal.FinalRealseComObject can improve reliability in certain types of managed COM Interop application scenarios, but I haven't generally found too many scenarios where a GC.Collect was useful.

Their testing:

2.0 (no SP installed):

Dot Net 2 Runtime Results
Without Collect
Runtime: 259 Seconds
Peak Memory: 289,742 Kb
Ending Memory: 165,756 Kb

With Collect
Runtime: 290 Seconds
Peak Memory: 68,788 Kb
Ending Memory: 58,088 Kb

And with 3.5 installed:

Without Collect Dot Net 3.5 Runtime
Runtime: 233 Seconds
Peak Memory: 62,880 Kb
Ending Memory:  70,824 Kb

With Collect Dot Net 3.5 Runtime
Runtime: 278 Seconds
Peak Memory: 53,992 Kb
Ending Memory: 56,300 Kb

December 30, 2007

A Windows Service, and configuration editor, all in one ...

I just finished writing a Windows Service for a utility I needed (for a Christmas gift actually!). Even though the first version is only used on one server in my house, I wanted to have a passable configuration editor for it, rather than relying on XML files, the registry editor, etc.

image

Additionally, I wanted to be able to run the service as a stand-alone EXE for the purposes of debugging (rather than attaching to the service with the debugger). There are a number of solutions to this problem, but here's the approach I took.

This code is from a file, Program.cs in my project:

namespace UploadingService
{
  static class Program
  {
    /// <summary>
    /// The main entry point for the application.
    /// </summary>
    static void Main(string[] args)
    {
      if (args.Length > 0)
      {
        if (args[0].Equals("I", 
StringComparison.InvariantCultureIgnoreCase)) { BasicSettingsDialog dlg = new BasicSettingsDialog(); System.Windows.Forms.Application.Run(dlg);

return;
}
}
ServiceBase[] ServicesToRun;
ServicesToRun = new ServiceBase[]
{
new Uploader()
};
ServiceBase.Run(ServicesToRun);
}
}
}


The important part of the code above is that I added the string array args to the static Main method, and then compared that to a command line flag, the letter "I". If that flag is present on the command line, I create a settings dialog (BasicSettingsDialog), and start the Windows message-pump loop by calling Application.Run with the dialog instance. When that returns, the process exits.


If the flag is not present, the service starts normally. I built my installer to include a shortcut to the service and also include the command line flag (as an argument below).


image


In the user interface code, I added a button to 'interactively' start the service (for debugging):

_uploader = new Uploader();
_uploader.InteractiveStart(null);

InteractiveStart is an internal method that calls the overridden ServiceBase method OnStart:

    internal void InteractiveStart(string[] args)
{
OnStart(args);
}

That, after a little work, calls into a static method in another class in my code:

    internal static void Start()
{
EventLog.WriteEntry("WiredPrairie Uploading Service", "WiredPrairie Uploading Service Started.");
s_emailThread = new Thread(new ParameterizedThreadStart(s_Instance.Run));
s_emailThread.IsBackground = true;
s_emailThread.Start(null);
}

All it does is kick off a new thread with a singleton instance of my worker class.


I communicate to the thread (and the actual service) via the Registry, which is polled every minute for up-to-date settings with code like this:

using (RegistryKey software = Registry.LocalMachine.OpenSubKey("SOFTWARE"))
{
using (RegistryKey wp = software.OpenSubKey("WiredPrairie"))
{
using (RegistryKey ups = wp.OpenSubKey("UploadingService"))
{
emailAccountName = (string)ups.GetValue(@"AccountName",
"", RegistryValueOptions.None);
emailPassword = (string)ups.GetValue(@"AccountPassword",
"", RegistryValueOptions.None);
emailPop3Server = (string)ups.GetValue(@"Pop3Server",
"", RegistryValueOptions.None);
}
}
}

Saving settings is easy:

using (RegistryKey software = Registry.LocalMachine.CreateSubKey("SOFTWARE"))
{
using (RegistryKey wp = software.CreateSubKey("WiredPrairie"))
{
using (RegistryKey ups = wp.CreateSubKey("UploadingService"))
{
ups.SetValue(@"AccountName", txtEmailAccountName.Text,
RegistryValueKind.String);
ups.SetValue(@"AccountPassword", txtEmailPassword.Text,
RegistryValueKind.String);
ups.SetValue(@"Pop3Server", txtEmailPop3Server.Text,
RegistryValueKind.String);
}
}
}

By using the registry as a cheap and reliable communication channel, I didn't need to worry about interprocess communication challenges (named pipes, WCF, etc.), creating a custom file format (or XML), file permissions, etc... Yes, there is a concern about registry permissions, but since these settings are intended for use by a service, setting the expectation that my users are administrators isn't out of the question (and right now, the only user is ME!).


If you have questions, post a comment.

Some recent recommended sci-fi reads ...

I've read a few good science fiction books recently that I thought I'd share.

I'm not one for writing a book report (AKA, review), so my very brief comments here are going to have to suffice. The best way to understand my interest in a book is the fact that I've taken the time to write about it. I only do that for books I really enjoy or really dislike. :)

A few good books I've recently enjoyed:

Old Man's War by John Scalzi

This book wasn't as long as I would have liked at slightly more than 300 pages, but it was very enjoyable and a well thought-out book. Without spoiling it, it deals with an older gentleman and his joining of an interstellar war. It's been extremely well reviewed at Amazon. There's a second book that I just purchased, The Ghost Brigades, that I'm looking forward to reading very soon.

Path of the Fury by David Weber

I really enjoyed David Weber's Honor Harrington Series (starting with On Basilisk Station by David Weber), so I've been reading a bunch of his other books. Path of the Fury is about an ex-commando who joins forces against some pirates with two very unexpected partners.

The Shiva Option by David Weber

Again, David Weber. This books follows a Grand Alliance of various aliens and Humans battling against a nasty foe, "the Bugs." I enjoyed the characters and action and was disappointed when a few of them were killed (always a good sign in a book when you have some empathy for the characters).

(Not all books by David Weber are worth reading, but many are: Other books by David Weber).

Many sci-fi books at Amazon are available for a 4-for-3 promotion right now (Buy 4, get one free). I just bought 12 .... :)

Astaro Security Gateway and Microsoft Virtual Server --- I'm stuck.

I recently installed Microsoft's Virtual Server 2005 R2 on my Windows 2003 Server. After adding an additional 2GB of RAM (for a total of 3GB), my Virtual Server was ready to host! (My server is only a single processor Intel Celeron, but it's got spare capacity most of the time).

image

(Yes, I've also installed Windows Home Server in a Virtual Machine ... I missed one feature -- the "free" dynamic IP to host name system.)

One nice feature of Virtual Server that is absent on VMware's free server virtualization product is the ability to specify the amount of CPU resources that are allocated to a specific virtual machine. (Another nice feature is that the web management tools are very snappy in comparison to the new beta tools for VMware Server 2.0 Beta).

Since my server is performing other tasks (like monitoring security cameras), I wanted to limit the impact the virtual servers have on the machine.

image

To setup Astaro, you'll need to register for a free account. I used a link provided by the SecurityNow podcast, http://www.astaro.com/security.now. Once you have a free account, you can download the ISO and burn it to a CD or install it in a virtual machine. Later you can request your non-commercial, home-only license.

You'll need to have two network cards or virtual adapters setup. I allocated 512MB of RAM, the documentation recommends a minimum of 256MB.

After a number of installation steps ... the lengthy installation progresses:

image

It took about 50 minutes to get through the installation (with a limited CPU):

image

Rebooted:

image

Pressed F2 for kicks...

image

No USB support under Virtual Server, so one failure ...

image

Interesting to see some of the services it uses, like MySQL:

image

And then nothing ... I couldn't login at all. I tried the default IP address and the one I had (thought) changed it to, and all interaction was met with the usual no web site error in IE. So, although Astaro looked interesting, I can't seem to get it to work on my Virtual Server.

It's using a surprising amount of CPU considering it's not doing anything useful for my network:

image

It's paused for now until I can figure it out. I was looking forward to trying some of the security and remote access (VPN) functionality.

I'll look around to see what other Linux distributions might be interesting to have in a Virtual Machine. Any suggestions?

December 28, 2007

Memory Leak with Databinding in WPF

If you're using WPF and doing any databinding, make sure you read KB article at Microsoft carefully:

A memory leak may occur when you use data binding in Windows Presentation Foundation

A snippet from the KB article:

This issue occurs if the following conditions are true:

    • A data-binding path refers to property P of object X.
    • Object X contains a direct reference or an indirect reference to the target of the data-binding operation.
    • Property P is accessed through a PropertyDescriptor object instead of a DependencyProperty object or a PropertyInfo object.

 

In the following code example, the conditions for the leak are created.

<Label Name="MyLabel">
   <Stack Panel Name="MyStackPanel">
      <TextBlock Text="{Binding ElementName=MyStackPanel, 
Path=Children.Count}" /> </StackPanel> </Label>

 

Yes, it's really that simple! There are some work around methods, IF you happen to own the object you're binding to ... if not, you may need to create a facade/shim around the object.

December 17, 2007

Pre-sales "support"?

I'm looking for a new Windows web host, supporting ASP.NET 3.5. Here's a classic response:

Chat Information

You are now chatting with 'Harry'
Harry: Hello! I am the website greeter. Welcome to EasyCGI.com!
Harry: How may I help you? 
Visitor: When will you support ASP.NET 3.5?
Harry: :)
Harry: May I have your name please .?
Visitor: aaron
Harry: Nice to have you with us, Aaron .
Harry: Please verify are you can existing customer of easycgi ?
Visitor: no.
Harry: Alright , We are constantly upgrading our systems but we do not have any prior information about anything in particular.
Harry: But I believe there is a way out from our current setup .

It didn't get any better after that. If you have some recommendations for a reasonably priced Windows ASP.NET 3.5 host, please send them my way! (Or dis-recommendations!).

December 5, 2007

Why I ditched Microsoft's Windows Media Center (2005 + Vista)

I was scolded the other day by a coworker for complaining so verbally about Windows Media Center on my blog (in my last blog post about my experiences with Windows Home Server). I pointed out to him that it was my blog, and I could write about it if I felt like it. Adamant, he suggested that I was being overly harsh and that my experiences weren't the norm.

That may be the case, but I can still vent my frustration and maybe my venting will give someone else either a moment of pause when they are making a decision to use the Media Center software (or at least a shoulder to cry on).

Just to give a bit of background -- I had a first generation Panasonic ReplayTV back in 2000. So, I've been using DVR technology for many years! (We later bought a newer ReplayTV (the one with built-in commercial skip, BEST FEATURE EVER -- but it died an early death unfortunately.)

There are plenty of things to like about the Windows Media Center. Heck, I bought it soon after 2005 was made selling (OEM). I custom built a PC, dedicated just for this one purpose as I knew I'd never like sharing CPU/disk/etc. with the Windows Media Center functionality (WMC).

The custom PC was installed on a shelf in a basement, connected to our whole-house IR system, and in turn connected to a video-multiplexor, giving us the ability to turn on any TV in the house and remotely control the Media Center. The setup worked well enough generally speaking.

Some of the problems stemmed from the fact that we live out in the country (wired prairie, get it?), so we don't have access to cable TV. Instead, we were subscribing to DirectTV. I had dual tuners with dual satellite receivers. Most of the time, the shows recorded as desired. Occasionally, the channel wouldn't change successfully; we'd start watching a recorded program, to find out instead of channel 232, it had recorded channel 23. Wonderful. I experimented with various settings for adjusting the speed of how the IR signals would be sent to the receivers (even some low level tweaks to the registry). Still, I'd say about once or twice a month, it would record the wrong show. Frustrating, but not the end of the world.

(We had used DirectTv Tivo units for a couple of years at first, but they were so slow and kept recording such oddities that we wanted more control over programming -- the way ReplayTV and WMC work).

I drank the Kool-Aid: I bought a Linksys Extender. Wow, that could have been a more terrible product!

Later, I bought an Xbox 360 to extend the media center experience when those became available. Certainly, that was a better extender than the Linksys box. I think we must have used the Linksys about 5 times. Yeah. It was $300. What a waste! It taught me an expensive lesson (and to be wary of Microsoft's commitment to hardware platforms).

When Vista came out, we decided to buy a new dedicated PC as we wanted to continue with WMC. The HP came with tuners, both low and high-def. We had decided a while back to switch to Dish Network.

Vista wasn't any better at IR blasting than 2005. I'm sure it's a function of the receivers, the PC, sunspots, etc., but it actually got worse. Probably 2-3 times a month, the wrong show would be recorded. Often, on Sunday mornings for some reason. I even had setup some dummy manual programs to force shows to record early in the morning (when it seemed to happen most often), but it still happened.

I had some new things with Vista that weren't happening as frequently in 2005: crashes. I had to restart the machine at least once a month manually. The display would get corrupted, and the wonderful Nvidia drivers would often get confused about the display and start sending the video to the wrong display (the video card had dual output -- it was set in a mirror mode so that it would go to our multiplexor and to a local attached monitor in the basement). Sometimes, randomly, Nvidia would declare: "Mirror mode -- you don't need that!"

Also -- we initially had some problems with the network -- 'congestion' it called it -- yet it was connected to a gigabit LAN and network card and nothing else was happening on the network. Some flaw in the network card driver supposedly could cause it, so a few tweaks later, that problem seemed to resolve itself (after a lot of hair pulling!).

Then, the Xbox 360, during the middle of a show, would play audio, but no video after about 15 minutes of watching the show without pressing any buttons (it was like a screen saver in behavior!). (It didn't matter if it was low or high def content).

The crashes continued. The lock-ups continued. The shows not recording properly continued. The Xbox 360 taking so blasted long to connect continued. The 'screen saver' feature of the Xbox MC experience continued.

If I used the WMC PC for other things, I'd would expect some problems -- but this PC was DEDICATED to only running Media Center 24x7.

We're now using a HD DVR 722 receiver from Dish Network. It's got the stupidest UI I've ever seen in a DVR-- but in line with all their other terrible UI mistakes in other receivers that I've seen. (Dish? Do you need some help with UI? I'd love to help!) However, with the exception of the nice movie finder feature that my wife liked, it has all the features we were using on the WMC.

We can watch 2 shows at once, and depending on setup, can record 3 shows (1 HD, 1 LD, and 1 HD antenna). It's instant-on (as it's in standby usually). It's fast. It has 30 second skip. It has a 300+GB HD.  I haven't had to reboot it. Nor install any security patches, or device driver updates, or tweak the network card.

My wife continues to use the WMC movie finder in Vista even though she can't hit 'record'. She just writes down the names of the movies and finds them on the Dish DVR. Supposedly, in the Spring, Dish is releasing some new online services for remote scheduling, etc., that will be welcome additions.

I bought a Slingbox SOLO, so I can now watch "HD" content in my den from the Dish DVR. (I don't have a TV in my den). (Slingbox -- SLICK!).

 

So, summary:

When the WMC can be 99.999% stable, like other pieces of home electronics (like a DVD player for example), record 99.999% of the time satellite content we want, can interact with an extender 100% of the time, then I'll consider going back. Until that time, I'm going to stick with a single purpose box, even if it's not as polished in some areas.

 

I'm tired of dealing with technology. I don't want to troubleshoot other people's software or technology in my house. I just want it to work!

December 1, 2007

Why you should avoid a Windows Home Server

I've used a Windows Home Server for about 6 months, from betas to Release Candidates to the final shipping version. I used it quite heavily, with multiple PC backups to storing 50GB of music and about 40GB of digital photos and thousands of other random files (including a subversion repository).

Last weekend, I took Windows Home Server (WHS) out back of our house and put it down. Permanently. BOOM! I couldn't stand it anymore.

Here's why (this is my review of Windows Home Server version 1):

  1. Automatic backups. A brilliant idea so poorly executed. Nearly every morning I would head into my den to check e-mail, and one of the best features of WHS had been at work ... the backup. Except it could turn my computer on automatically every night, yet it couldn't turn it back off after completing the backup. It didn't matter what software was running on my PC -- most every day it was on. I adjusted the schedule for backups so my PC would be ideally finishing the backup when I'd arrive in my den on an average morning to minimize the amount of unnecessary time my computer was running.
  2. When a hard drive dies, so does the WHS. Or so it would seem. Supposedly, WHS will warn you a hard drive is about to die, and give you time to make some adjustments and properly remove it from the system. If you're lucky that is and happen to be around in the hour before the drive fails. What a MESS it made when I had to remove the drive without going through proper procedures! It took HOURS of manual editing and tweaking (using Remote Desktop to get access to the raw file systems) to get things back to barely working order.
  3. The performance of basic file operations SUCKS on average. Having used Windows 2003 Server as a networked file system at home, I could definitely see/feel the difference. From sluggish file copies to even more sluggish file writes.
  4. Odd interactions with software -- my wife couldn't save Microsoft Money files safely on the network without errors. I saw that there were some reports of that problem ... but if that was a problem, what other problems are there?
  5. File corruption. I'm about 80% certain a handful of music files (80-100?!), by ripping directly to the WHS, were corrupted at some point by the file server. I'm re-ripping them tonight. Yeah, that's fun.
  6. WHS Console software. Neat, but inconsistent. It would report that my password was out of sync consistently and offer to fix it. Well, it did fix it -- yet it continued to insist that it wasn't consistent. This same problem continued to happen on other PCs as well. It was also strange how the console would warn everyone about network problems ... even though most only ran the connector software for backups.
  7. No Mac backup support. Not shocked by this ... just disappointing.
  8. Expensive -- even as an OEM license. Much too expensive to grow the early adopter market. Microsoft blew it on that one.
  9. No cool Media Center integration support. (Not that it matters to me -- I ditched that product 2 months ago in favor of a Dish 722 DVR).

All of these boil down to one problem: my lack of trust in WHS. The lack of trust went so far as I had setup a scheduled task to copy files from the shares to an attached external hard drive once a day.

Since this software is all about trust, I finally decided it was time to go. I had a licensed copy of Windows 2003 Server which I installed, made a few drive shares, and setup a script that copies all the files via robocopy every 90 minutes to a secondary drive. It's of course not up to the minute accurate, but it's good enough for me.

Of course, I don't have the remote access feature of WHS (never used it, didn't trust it anyway). And, I don't have a daily backup strategy that is as good anymore -- but I'm setting something up that will be decent. We put most of our important stuff on the network drive anyway.

I wouldn't recommend Windows Home Server to anyone at this time. I think there are better and cheaper options out there that will give you the peace of mind and few features that most people need for less money (or at least less up-front money). It's a neat idea that isn't ready for the masses.

Help support my web site by searching and buying through Amazon.com (in assocation with Amazon.com).