« December 2007 | Main | February 2008 »

January 31, 2008

Got Old Mono? Maybe!

imageDue to a small usability issue on the Mono web site, users were downloading versions that were more than 2 years old!

Only 5% of the Mac downloads were actually getting the latest version, 95% was downloading this two year old version. I don't have my notes handy for Windows, but they were similarly abysmal [Update: found the notes, they were 95% as well].

Read more about how this happened here.

So, if you had a recent experience with Mono -- you might want to check to see if the version was current!

(Mono is an open source implementation of .NET for client and server applications).

January 30, 2008

Don't abuse those poor tireless pixels ...

Did you know that the original Palm Pilot had a screen resolution of only 160 x 160 pixels? That's a total pixel count of only 25,600! Every pixel used had to be carefully considered. With all of the pixels we have at our disposal today on the average computer screen (OS X, Windows, Linux, etc.), why does it appear that many pixels are wasted? As the pixel count of screens has increased (and the resolutions and sizes of our monitors), have we become increasingly lazy about software design? For example, many web sites grow slowly wider and taller as the accepted minimum screen size has increased.

Has the average web site really improved at the same rate of pixel increase? Take for example a web site that was designed for an 800x600 screen. I'll ignore for the time being that a web browser, even in full screen mode doesn't use all of those pixels.  There are 480,000 pixels available for the designer.

Now, increase the screen size to 1024 x 768 for a total of 786,432 pixels. That's 288,432 more pixels than was available at 800 x 600! So, clearly the application improved by about 60%! Except the reality of the change is less likely to be such a dramatic improvement.

I'm continuing to read Designing Interactions (previous mention here, and which I highly recommend now that I've read more of the book). The original Palm software team had these simple four design guidelines:

Less is more

Avoid adding features

Strive for fewer steps

Simplicity is better than complexity

Sweet. But, how do you decide where to put features, once you've decided that the features are important? On an 160 x 160 pixel screen, there isn't room for every feature. Many software applications have this problem. Rob Haitani, one of the primary designers of the Palm interface, provided an analogy that can be used even today in designing modern applications that have the freedom of using many more pixels than their tiny predecessor. Think about the way your desk is organized. There are things that you've put out on your desk, and things you've put away. Why is that? The things you want immediately are on top, the rest are tucked away in drawers. If you had to retrieve your mouse from a drawer every time you needed it, you'd be extremely frustrated, but if every time you needed to remove a staple you had to reach into a drawer, you'd wouldn't mind that small multi-step process (and slight delay).  The stapler however, if you use it frequently is more likely a fixture on your desk, so that you can quickly access it.

Of course, the challenge is how to hide functionality that isn't necessary, and how to maximize on the pixels that you're using. That's what makes design hard.

One key is to understand your users and how they work. What would their "desk" look like? Are they frequent staplers? If you continue with Rob's analogy -- how would they feel if you shuffle their drawers and the contents around occasionally during the day? That's what it could feel like to a user if you're moving user interface elements around the screen. Or, what if their stapler is suddenly "disabled" with no context or reason why? Again, more user confusion.

What are some of the best examples of applications that maximize their use of pixels that you've encountered? What are some of the worst?

January 27, 2008

Politician Bobble Heads using Silverlight

I have no idea what inspired this.

image

See for yourself here. You'll need Silverlight 1.0 installed.

This is in no way any indication of any political affiliation -- or any indication of anyone I may vote for in the primary or general election. I had actually hoped to get more "heads" done this afternoon, but I ran out of time after these two.

The Silverlight code was very simple in this first edition. I added a few Mouse handlers:

rootElement.addEventListener("MouseMove", 
Silverlight.createDelegate(this, this.handleMouseMove));

The handler above was used to move the hand around:

handleMouseMove: function(sender, eventArgs) 
{    
  var hand = this.control.content.findName("hand");
  var pt = eventArgs.GetPosition(null);
  
  hand["Canvas.Left"] = pt.X - hand["Width"] / 2 ;
  hand["Canvas.Top"] = pt.Y - hand["Height"] / 2;
}

The mouse down was even simpler:

handleMouseDown: function(sender, eventArgs) 
{    
  this.control.content.findName(sender.Name + "Bobble").Begin();
  this.control.content.findName("WhackHand").Begin();
},

January 25, 2008

How to give the worst possible presentation

Frustrated by slow, boring presentations, I put together this helpful slide show:

Slide1

Slide2

Slide3

Slide4

Slide5

Slide6

Original files here: pptx (preferred) and ppt.

January 24, 2008

A more enjoyable way to read about Project Management...

I read this book 6 or 7 years ago after being given a copy by a new development manager while working at Microsoft, and something today reminded me of it -- so I thought I'd recommend it to others (I couldn't remember the author!). I rarely enjoy reading books that are about project management, time management, ... they're so dry that after the first 10 pages, I've lost interest.image

Tom DeMarco's, "The Deadline: A Novel About Project Management" is one of my favorite project management books I've read -- and one of the very few that I've read cover to cover. Even better is that I actually felt like I learned something!

The book kept my interest as it's written as an interesting novel. From the book's "home page":

With his trademark wit set free in the novel format, DeMarco centers the plot around the development of six software products. Mr. Tompkins, a manager downsized from a giant telecommunications company, divides the huge staff of developers at his disposal into eighteen teams -- three for each of the products. The teams are of different sizes and use different methods, and they compete against each other . . . and against an impossible deadline.
With these teams, and with the help of numerous consultants who come to his aid, Mr. Tompkins tests the project management principles he has gathered over a lifetime. Key chapters end with journal entries that form the core of the eye-opening approaches to management illustrated in this entertaining novel.

I lost my copy a few years ago in one of my many moves and always wished I hadn't as I'd enjoy reading this book again.

Definitely recommended. It might just open your eyes to some better ways to manage a (software) project.

Where is your product in the Technology Lifecycle?

Inspired by this post Functioning From: Interface Design, "What is Product Excellence?"....

Technology products often follow a reasonably well understood lifecycle. I just recently blogged about it in a slightly different context.

Donald Norman in this book, in his book, The Invisible Computer puts it this way:

When the technology reaches the point where it satisfies basic needs, then improvements in the technology lose their glamour. Now customers seek efficiency, reliability, low cost, and convenience. Moreover, new kinds of customers keep entering the market as the product matures. In the early phases were the early adopters, those who were willing to gamble on the new technology because they felt the benefits far exceeded the costs. More conservative customers held back, waiting for the technology to prove itself, to become reliable. This is the cycle of market adoption described by Geoffrey Moore in his book Crossing the Chasm (see figure 2.3).

It can be a painful realization for a product developer when the type of improvements and the new functionality shift from a pure checklist of features for early adopters to a more refined, reliable, and elegantly simple product. The message from customers changes from "feature A, B, C must be done, to please make it easier to do features C, D, and E." Shifting from one methodology to another can be disastrous if not handled carefully.

At the very time when a company needs to step back and take a new look at itself, when it needs to reorganize and restructure, the financial story puts severe pressures on its ability to do this. Time is the one thing it does not have. Suddenly, it has to meet market requirements, but the old guard wants to do it by adding yet more new technology, bringing out new products at an ever-faster rate, and fighting the falling revenues by cutting back on the size of the company. It is a tumultuous time. Geoffrey Moore called it a "tornado."3

How does a company prevent this from happening? I've been following a few software products recently current in beta, with an interest in purchasing a few. These products are clearly falling into the lifecycle. I've read the forums and see all of the feature requests from early adopters and promises from the development staff. At some point, in version 2 or version 3 though, the product has ceased to be an early adopter product -- and will likely have crossed over the transition point Donald Norman suggests in his book:

 

image

By the transition point though, most software applications have pages of switches, and options by which the application can be controlled.

For example, Visual Studio 2008:

image

I didn't attempt to count, but there must be hundreds of options within. The vast majority of the options cater to the small percentage of vocal early adopters. I don't change very many options in an new installation any more -- even though they finally added the ability to copy settings from one installation to another.

How does a mature product like Visual Studio "go simple?" Do you risk alienating your early adopters? Do you create two different versions? These are tough questions. For Microsoft and Visual Studio, early adopters are often their "most valuable professionals" these days. Hardly the group you want to push away.

Microsoft demonstrated in Office 2007 that it is possible to rethink a user interface in an attempt to simply it and make it more appealing to the general consumer. The Office team was concentrating on user experience, no longer a feature "war" like they had been fighting for the last 10 years. There was grumbling sure, and complaining, some people resist change at all costs. But overall, it was well received. I still hunt around for a few options occasionally -- but the things I need are generally in the "right" place. It's been long enough since I switched that I've forgotten the struggles of using old versions already.

What do you do when you're already at the curve's transition point? How do you adapt? Hindsight only helps prevent a future reoccurrence -- but even then the tendency of typical software development and design suggests this pattern is difficult to avoid. (If you are a user of the product you sell, it may be easier to avoid).

Once you've hit that transition point, you either need to change, add new products, accept mediocrity, or retire. Change is most painful, but most likely to lead to renewed interest in your product and sales.

January 23, 2008

Is this a joke? "Linux For The Masses? Bet On This Winner."

Like a wild animal in the headlights of a car, I read this "interview" posted on LXer.com. I couldn't stop reading no matter how hard I tried to stop.

With top-of-the-line journalism and fact gathering like:

With Linux on the desktop going from a slow crawl to verging on an explosion, many have toiled with the question: How do we make this happen faster? A well-known Austin-based Linux Advocate thinks he has the answer.

Emphasis mine. 

Where is the explosion? People frustrated by Linux ready to explode? People tired of being flamed by others when they ask a simple question in a forum? People confused as to why there are 2 web browsers, 3 e-mail programs, 5 text editors, etc. installed? Users annoyed by the need to COMPILE an application before installation?

But there's more:

Here's the deal. Ken has come to the correct conclusion that the majority of people who use a computer haven't a clue that they have a choice in how it's operated. Enter the GNU/Linux Operating System. During his time as a level 3 tech support specialist, Ken heard hundreds of horror stories first-hand and he knows what problems Windows Users face. Ken began a company called HeliOS Solutions to meet the need of long-suffering market.

Did Ken not get the memo that the vast majority of people don't care about choice in a computer operating system? Make it work. Make it work like their friends computers so they can use the same applications, open documents, share files, etc.

The company that Ken runs (I guess -- I'm a bit confused about the company after reading the article), helps install Linux for enterprises and home users.

He [a coworker] gets the specs on the customer's computer and matches the distro to that machine so we don't have any ugly surprises when we get there. The last thing you want to see is a shiny new Lexmark printer sitting beside the computer when you walk in the door.

That makes for easy support - when your customers are all running different distributions of Linux. Supposedly, Lexmark doesn't make Linux compatible drivers. The horror! How dare they cater to their target market of Windows and the Mac OS X. Almost makes me want to go out and buy a Lexmark printer!

Since we offer two weeks free phone support, we want to make sure the distro out-matches the user's ability to screw it up. We've received phone calls less than one hour later because someone has tried a new driver or inadvertently messed up the bootloader.

I love that about Linux. I've downloaded a lot of Linux distributions over the years and installed them on stand-alone PCs and in virtual machines as experiments. On several occasions the install became so horribly messed up that I decided it was faster to reinstall than it was to try to fix the problem. But the attitude of "user's ability to screw it up" speaks to the design of the OS, not to the hidden talents of the user. It's easy to do poorly with poorly designed software.

We are arranging for a small town in California to agree to go "Microsoft free" for a period of time. Maybe a month, maybe only a week. The idea is to draw massive media attention to the effort and therefore introduce America in particular to Linux. We are going to gather some priceless information from this project.

Oh my freaking Linux. You've got to be kidding me. That's one of the stupidest wastes of people time that I've heard of recently. Seriously -- who really wins in this "project"?

I've spent three years banging on this issue. We hold the key of Freedom for tens of millions of people and that freedom is Linux.

Dude. Seriously. GET A LIFE.

Look, my counterpart in California spelled it out best. You don't call a chevrolet a chevrolet every time you say it. Here in the states, it is most often abbreviated to "chevy". Same with Ford. You don't always refer to a ford as a Ford/Lincoln/Mercury do you? It's the same with Linux.

Eh? Ford is Ford. Lincoln and Mercury are different companies owned by Ford. Just because you see them together at a car dealer doesn't mean the company name is Ford/Lincoln/Mercury.

Richie Chapman, a good friend of Lobby4Linux and K4K stated it well .... He said that he installs Linux on others computers for free not because he's such a nice guy, which he actually is. He does it out of fear that if enough people aren't using Linux when Microsoft makes their "big move", then we will be just that easy to sweep away with the next DMCA-type midnight bill passage. People need to wake up and get involved. If not in my effort, than in someones. It's getting to the point where Microsoft is going to have to do something drastic to get rid of Linux as a competitor. Large numbers of users who are not afraid to stand up to a giant would be a good place to start.

What?! Is this a war? What "big move"? Should I be stockpiling RAM chips? Or getting ready to burn Linux DVDs? Microsoft? My chip-implant is ready to do your bidding now ....

I'm not going to give any additional support to their website by linking to it, but they have a wonderful tag-line:

We promise...90% of your computer problems are going to disappear forever.

Making it easier to deploy a web site or application on IIS6 or IIS7

Have you struggled to deploy a Microsoft hosted ASP.NET web site from one machine to another? Or have you wanted to easily archive the settings/files/etc. so that you can roll back changes later if needed (could be very useful for testing an update for example)?

Check out the new Microsoft Web Deployment Team announcement here on their new blog.

They just announced a new deployment tool that supports moving configuration, content, SSL certificates and the other types of data that is associated with a web server. It's command-line driven for now (and with the output being very configurable, including XML), it would be easy enough to put a GUI front-end on the tool if one were so inclined.

It's a tech preview right now and a handful of walkthroughs are available for download.

January 20, 2008

Ouch! That hurt!

During an attempted online chat session with a web host (yes, this seems to be an ongoing problem with me ... but from now on, I guess I'll need to be a lot more careful!)

 

image

January 19, 2008

WPF Object Browser Demonstration

With no particular goal, except to write some interesting WPF code, I've created the "Wired Prairie Object Browser." The project, while somewhat useful in its current state, is primarily designed to showcase WPF.

You can see an enlarged screen shot by clicking on most of the images.

image

If you're familiar with the Macintosh OS X Finder view, you'll see the similarity between the user interface of this application. The core aspect of this user experience is a horizontal scrolling area that expands to the right with the children of the currently selected item to the left.

Best explained by a walk-through.

The application starts like this:

image

I clicked on the first node:

image

And so on:

image image

Clicking around changes the various lists:

image

Support for individual per-column filtering is included:

image

image

The application also supports dragging new assemblies onto the application -- which adds them to the list of objects and namespaces. The application always defaults to opening mscorlib.dll by default (home of System.String). (To add a new assembly, just drag the file name from an Explorer window onto this application).

Private and protected members are highlighted with different images:

image

The application makes heavy use of DataTemplates in WPF to do it's magic.

For example, there are 3 types of lists in the application: the horizontal list which holds the various namespaces and classes lists; the list of namespaces and classes; and the list of properties and methods and events.

<DataTemplate
    DataType="{x:Type local:ContainerNodeCollection}">
    <Border
        BorderThickness="6"
        BorderBrush="Silver">
        <DockPanel
            LastChildFill="True">
            <TextBox
                Name="FilterTextBox"
                TextChanged="FilterTextBox_TextChanged"
                DockPanel.Dock="Top"
                Margin="2,2,2,2"
                Style="{DynamicResource FilterTextBoxStyle}"></TextBox>
            <ListBox
                Name="CollectionListBox"
                ItemsSource="{Binding Mode=OneTime}"
                SelectionChanged="ListBox_SelectionChanged"
                Loaded="ListBox_Loaded"
                MinWidth="300"
                MaxWidth="300"
                MinHeight="30" />
        </DockPanel>
    </Border>
</DataTemplate>

Above is the DataTemplate for the list which shows namespaces and classes.

Here's a snippet from the template that shows information about the specific details of a class:

<DataTemplate
    DataType="{x:Type local:ComboCollection}">
    <DataTemplate.Resources>
        <!-- these are privately used within the combo collection -->
        <DataTemplate
            DataType="{x:Type sysreflect:PropertyInfo}">
            <DockPanel
                LastChildFill="True">
                <Canvas
                    Height="16"
                    Width="16">
                    <Image
                        Height="16"

This one is particularly interesting from a WPF perspective as it's redefining a resource locally within the DataTemplate. Depending on the use of the PropertyInfo object, it displays very differently.When it's shown in this list, it's just a small icon, with a title. When it's shown as detail of a property, it shows with more detail:

image

On the left is the template contained as a resource within a DataTemplate (the example snippet above), and the right is the other. I could have used a complex set of DataTriggers, but this seemed like the simpler, more maintainable solution rather than relying on a single DataTemplate that had to have knowledge of all the places it could be used.

The code treats the protected or private state of a method as a sneaky image overlay using a DataTrigger:

 

<DataTemplate
    DataType="{x:Type sysreflect:MethodInfo}">
    <DockPanel
        LastChildFill="True">
        <Canvas
            Height="16"
            Width="16">
            <Image
                Height="16"
                Width="16"
                Source="Method.png" />
            <Image
                Visibility="Collapsed"
                Height="16"
                Width="16"
                Source="Key.png"
                Name="ProtectedImage" />
            <Image
                Visibility="Collapsed"
                Height="16"
                Width="16"
                Source="private.png"
                Name="PrivateImage" />
        </Canvas>
        <StackPanel
            Orientation="Vertical"
            HorizontalAlignment="Stretch">
            <TextBlock
                Text="{Binding Path=Name, Mode=OneTime, FallbackValue=Method}"
                FontWeight="Bold"
                VerticalAlignment="Center" />
      </StackPanel>
    </DockPanel>
    <DataTemplate.Triggers>
        <DataTrigger
            Binding="{Binding Path=IsFamily, Mode=OneTime}"
            Value="True">
            <Setter
                Property="Visibility"
                Value="Visible"
                TargetName="ProtectedImage" />
        </DataTrigger>
        <DataTrigger
            Binding="{Binding Path=IsPrivate, Mode=OneTime}"
            Value="True">
            <Setter
                Property="Visibility"
                Value="Visible"
                TargetName="PrivateImage" />
        </DataTrigger>
    </DataTemplate.Triggers>
</DataTemplate>

 

The DataTemplate directly maps to the MethodInfo data type. If the IsPrivate property of the MethodInfo class is True, the Private image is shown. The private image is just a small icon that overlays the other image rather than having multiple combinations of images necessary to represent all of the different states.

Some of the challenges were managing the horizontal list so that it always reflected all of the highlighted elements.

The main UI for the application is extremely simple:

<ListBox
    Grid.Row="1"
    Margin="8"
    x:Name="lbClasses"
    ItemsSource="{Binding Path=Data}"
    VerticalContentAlignment="Stretch"
    Style="{DynamicResource ContainerListBoxStyle}"
    ScrollViewer.VerticalScrollBarVisibility="Disabled">
    <ListBox.ItemsPanel>
        <ItemsPanelTemplate>
            <VirtualizingStackPanel
                Orientation="Horizontal"
                IsItemsHost="True"
                CanHorizontallyScroll="True"
                CanVerticallyScroll="False" />
        </ItemsPanelTemplate>
    </ListBox.ItemsPanel>
</ListBox>

A list box that is bound to a property called data. Everything else is created using Styles and DataTemplates! By placing the ListBox in a DockPanel and setting the CanVerticallyScroll property to False, the contained list boxes (with the details of the assemblies and classes) scroll independently as each is the height of the main window (rather than each ListBox being a unique height creating a jagged user interface).

The application code has to do a bit of hunting when an item is clicked. The tough part is finding the containing ListBox and removing unnecessary data columns. If you have a ListBoxItem and want to find the parent ListBox, you can use the ItemsControl.ItemsControlFromItemContainer static method.

 

private void ComboCollectionListBox_SelectionChanged(object sender, 
SelectionChangedEventArgs e) { foreach (object o in e.AddedItems) { FrameworkElement fe = e.Source as FrameworkElement; if (fe != null) {

DependencyObject d = (DependencyObject)fe;
while (d != null && d.GetType() != typeof(ListBoxItem ))
{
d = VisualTreeHelper.GetParent(d);
}
ListBoxItem lbi = d as ListBoxItem;
ListBox parentListBox = ItemsControl.ItemsControlFromItemContainer(lbi)
as ListBox;
int depth = parentListBox.Items.IndexOf(lbi.DataContext);

for (int i = _data.Count - 1; i > depth; i--)
{
_data.RemoveAt(i);
}

_data.Add(o);
}
}
}


The filtering right now is simple:

CollectionView cv = (CollectionView)
CollectionViewSource.GetDefaultView(lb.DataContext);
if (cv != null)
{
if (cv.CanFilter)
{
cv.Filter = delegate(object o)
{
if (o != null)
{
string title = o.ToString();
if (!string.IsNullOrEmpty(title) &&
title.IndexOf(((TextBox) sender).Text,
StringComparison.InvariantCultureIgnoreCase) >= 0)
{
return true;
}
}
return false;
};
}
}

Once the listbox has been located (lb), it retrieves the CollectionView wrapping the data (which is automatically added by WPF), and then sets the filter. The filter just checks whether the title of each element contains the filter text specified by the user in the text box as each character is typed.


By no means is this a complete object browser. There's many details you'd want to add to make it generally useful.


The source code is available here. I used Visual Studio 2008 -- but no 3.5 features (if you're using an older version of VS, you'll need to recreate the project. All the necessary files are included).

January 17, 2008

When to switch to WPF?

Microsoft has provided little in the way of guidance as to when a product should adopt or switch to WPF. Recently, Microsoft published a whitepaper with a small amount of guidance here, entitled "Deciding When to Adopt Windows Presentation Foundation." The whitepaper describes mostly technology choices and integration options. If you're not familiar with WPF and it's integration options at a high level, the whitepaper is worth a read. I'd suggest it might be good for a technical manager who's new to WPF. If you've gotten your hands dirty in WPF though -- it won't be very enlightening.

If you're just interested in the final conclusion, I've snipped that section and put it here:

In conclusion:

  • If you have an existing Windows Forms application or are building a traditional forms-based application and are looking for a mature technology to use with mature tools and component support then Windows Forms is a good fit.
  • If you have an existing Windows Forms (or MFC/Win32) application that could benefit from some of the advanced presentation features of WPF, you can add WPF to your existing project.
  • If you’re wanting to create a new experience for your users that is rich, interactive, sophisticated, or highly custom or branded, WPF is Microsoft’s next-generation platform for your project today.
  • If you’re targeting the web, Silverlight shares the same development model as WPF but is optimized for a lightweight, cross-platform runtime. Investing in either WPF or Silverlight nets you the skills, tools, and assets for both platforms.

With all of these choices, you can be assured that all of these platforms will be supported for years to come.

The MFC/Win32 application that isn't using managed code today has the most at risk -- as the application would require a large additional framework installation.

January 16, 2008

.NET 3.5 source code is available officially ...

You'll need to install a hot fix first ... once you sign in using your Windows Live account, (and possibly updating your profile like I had to), you'll run the install.

Don't bother with the File Transfer Manager. It's definitely overkill for this 1.17MB file. Just click the Download link I've highlighted (it took 10-15 seconds before the standard download dialog appeared).

image

It unfortunately defaults to unpacking files in the root directory of your primary drive so be sure to put it somewhere else (or remember to delete the files when you're done):

image

It unpacks the hotfix file into the directory you specified:

VS90-KB944899.exe

Run that.

image

image

Wait for it. Wait for it. Wait!

It took my machine about 5 minutes to run the patch for some reason.

image

I don't understand how a 1.17 MB patch could take so long ...?

image

Then you can follow the instructions on Shawn Burke's blog to finish.

The only problem I encountered was that until I stepped into the framework code once, I wasn't able to just double-click on a call stack entry to view the source. VS would prompt me for the location for the source. Once I did stepped in, accepted the EULA, it worked like a charm!

image

The Multi-touch feature Steve didn't mention ...

Overall -- my impression of the MacBook Air is mostly, 'eh'. Thin. Light. Likely exaggerated battery life (if you're just going to surf the web for 5 hours, you don't need this laptop to do that).

The multi-touch pad gestures felt a bit gimmicky when I watched the demo last evening. image

I believe this is one of the undocumented gestures:

  1. Start by Using your index finger, your pinkie, and the back of your palm and place them firmly on the pad.
  2. Pinch your butt cheeks together while softly chanting “Apple”, (repeat at least 3 times)
  3. Then in a quick twisty pinchy-slidy motion, press the C key to close the current window.

:)

January 15, 2008

The FOUR stages of Technology Use

I'm reading Designing Interactions by Bill Moggridge. I find reading about how others develop products fascinating -- the problems and challenges, the thought process, the successes and failures, etc. I'm not far in yet so I can't give a complete review (very interesting so far though).

However, one interesting topic that is right at the front is discussing the idea from David Liddle that there are three stages in the development of a technology:

  1. Enthusiast - this is the type of early adopter who buys or uses a technology because they're excited about it, regardless of whether it might be difficult to use
  2. Professional - a person who uses a technology as part of their job -- where the technology has been often purchased by their employer
  3. Consumer - people who are just interested in what a product can do for them and really just want it to work and aren't willing to put up with any problems.

 

 

I realized today there's a fourth stage however that David missed in his analysis:

image

The Technology Cultist.This is the person who is extremely excited about technologies that are rumored -- sometimes barely even speculated -- by many false prophets and prepared to buy a product before even learning anything tangible about them. They would pre-order the products if it was an option (and possibly keep money in an escrow account so that they can be the first to buy a new product as soon as it's announced). The flawless figurehead is worshipped, the products glorified, competitors products are sacrificed, and the teachings are spread to everyone they know.

This group is what every company desires from a customer.

It's just too bad I can't think of any perfect examples -- only one has even a passing similarity -- you may have heard of it (or it).

image

January 12, 2008

Chumby Photo Viewer Source code

I mentioned I created some software for the Chumby recently. I'm releasing portions of it for public consumption here. I'm not including the automatic e-mail uploader as that requires a custom component I'm not able to distribute. The php code just expects the images to be stored in a particular directory. It doesn't matter how they get there.

image

Chumby rule #1 though is that you must use non-progressive JPEG images. If you use progressive images, expect that the Chumby won't show them.

Chumby rule #2 is to keep the images small. I reduce the images to 640x480 (although the screen is 320x240) and compress them to 60% quality and am very happy with the images. You can play with the settings -- but you'll want to keep the images small so they download quickly. One of the settings (hard-coded in the Flash ActionScript) is the length of time between photos. Adjust that to suit your needs. It's eight seconds in the code I released.

The zipped package is here.

There's a key that is sent with every request to the server. The Flash ActionScript is hard-coded to the key ... just change it to whatever you want:

var apikey:String = escape("websitepassword"); // your web site password (must match what the web server expects)

The PHP has the same key and they must match.

If you don't want people to browse your photos directly, make sure you set up folder/directory permissions to prevent direct web browsing (through htaccess on an Apache web site for example).

Some snippets of the code I used follow.

var getImagesXMLComplete:Boolean = false; 

function getImages() {
getImagesXMLComplete = false;

txtStatus.text = "retrieving image list...";
this.getImagesXML = new XML();
this.getImagesXML.target = this;
this.getImagesXML.ignoreWhite = true;

this.getImagesXML.onLoad = function(success:Boolean) {
if (success) {
txtStatus.text = "success: " + this.firstChild.toString();
processImages(this);
}
getImagesXMLComplete = true;
}
this.getImagesXML.load(baseurl + "/getImages.php?" +
"startatfilename=" + lastfilename);
}



I parse the Xml this way (by grabbing the key data from the Xml file returned.)


function processImages(xml:XML) { 
var images:Array = XPathAPI.selectNodeList(xml.firstChild,
"/images/image");
if (images == null) { return; }

for(var i:Number = images.length - 1; i >= 0; i--) {
var photo:Object = new Object();
try {
photo.imageUrl = images[i].attributes.id;
photo.imageIndex = images[i].attributes.index;
trace("image: " + photo.imageUrl);
lastfilename = photo.imageUrl;
} catch(ex) {
txtStatus.text = ex.toString();
}
_photos.push(photo);
}
// trim if we've got too many photos collected
if (_photos.length > 200) {
_photos = _photos.slice(0, 200);
// reset if we've gone too far!
if (index > _photos.length) { index = 0; }
}

randomizePhotoList();
}



I added a debug mode to my chumby application:


var isDebugMode:Boolean = false; 
clipReminder.onMouseDown = function()
{
isDebugMode = true;
txtStatus._visible = true;
clipReminder._visible = false;
}

If the user touches the screen while the initialization is occurring, it puts the widget into a debug mode. The debug mode greatly helped me figure out what was going on as the emulator often worked when the Chumby did not. The debug mode shrinks the image to a small size and puts tracing text that I've scattered throughout the application on the Chumby's screen.


I randomize the list in place to keep memory use as low as possible:


function randomizePhotoList():Void { 
var i:Number = 0;
trace("randomizing");
for(i = _photos.length; i > 0 ; i--)
{
var rnd:Number = Math.round(Math.random() * i);
rnd = (rnd > i ? i : rnd);
var url:Object = _photos[i];
trace("swapping " + i.toString() + " with " +
rnd.toString());
_photos[i] = _photos[rnd];
_photos[rnd] = url;
}
}

If you have questions, feel free to email or post a comment.

January 11, 2008

Waste not a watt ...

image

Kill A Watt (now about $20 US at Amazon) can help save you some of your hard earned cash and also be educational.

While vacuuming this evening, I noted that a TV, VCR and old Xbox (classic) are plugged in 24 hours a day, 365 days a year, but they only get used on average about 40 minutes 5-6 times a week by my wife (we have a small exercise room in our house).

Using my handy Kill A Watt, I noted that plugged in, yet not running, the group was consuming 10 watts! Individually, the break down was 5 watts for a tube style 27 inch TV, 4 watts for the VCR, and 1 watt for the Xbox. I moved the power strip up to a more accessible location and turned them all off. Now, she's planning on doing the same. Given our electrical rates, we'll save about $10-$15 a year by turning them completely off the majority of the time.

It's a simple device, easy to use. Highly recommended. I've used it on other things around the house with the same results -- easily paying for the cost of the device after a years time (even more quickly if you discover other devices that use electricity in their "power saving" state.).

(I've completely unplugged our second VCR -- last time we watched a video tape we were horrified by how bad they look compared to a DVD on a plasma TV!)

January 9, 2008

GE Advantium Recipes Requested...

A very common request from visitors to my site is for more GE Advantium Recipes. I'd be more than happy to post them here (nicely formatted, with credit to the source) -- but I don't have many that I've written down (I'm more of a "wing-it" type of Advantium user). So, if you're here looking for additional recipes, please email me a few and help spread the Advantium love. (Or, if the comment feature is available, you may post them there as well.). My e-mail address is coder at this web site. (Sorry, if I put my e-mail as a link here, my spam volume will shoot up more than it already is. It's just coder @ wired .... ).

If you have favorite products that you like to use with your Advantium, post or send them too.

Thanks!

January 8, 2008

Usability snafus at PodShow.com

I do these brief usability reviews to highlight what NOT to do in your products, web sites, applications, etc. that you might be working on; also, so you can chuckle about some of the odd things that are done on web sites...

 

I was browsing podcasts at PodShow.com tonight as I was interested in adding a few new podcasts to my subscription collection.

I found an interesting podcast so I clicked it. It started to play.

No! I want to subscribe (ideally directly in iTunes). I right click, stupidly, and get the standard browser right click behavior (hey! a guy could hope!).

I spot a button labeled "+GET"

image

I don't know why there's text "Here it comes" on the tooltip, but I clicked the button anyway.

image

Wow, the power of the web. This is a multimedia page with video, and JavaScript galore, and users are presented with that? Signup to do this. Do what? Why not take me to a signup page? Or show me where a signup page might be?

 

I now see this after hunting around the page (it looked like an advertisement, so I totally ignored it, and it was scrolled above the fold):

image

I'm still not clear why I'd want to sign up. I'm amazed it will take exactly thirty-one seconds to register, so, of course, I clicked the ad (as this will be so fast I won't know what I'm doing!):

Ah ha. Finally an explanation of what the heck I'm signing up for.

image

Summary:

  • Free videos. OK. I like free! I'm not willing to pay a dime for any of the podcasts I watch. I don't mind that they have a few ads to help pay the podcasters though.
  • Music and Videos for my ipod (not an iPod mind you). Do these cost money though? There are some free videos, because you just told me so, but these aren't?
  • Find great audio SLASH video shows. They're also great/good shows I guess.
  • And I could upload videos to expose something? What the?

OK.

So, how about I sign up then ...

image

(I hit submit to see what would happen if I left any of the fields blank).

It's in the style of the "giant" text boxes that seem to be still popular on the Web 2.0 web sites, yet they forgot to actually make the fonts inside the text boxes larger.

I don't know what a Display Name is, so who knows how that will be used.

Now, I see my profile url. The what? Underneath, there's some gray right aligned text that says, "username.podshow.com". OK, what's my username? I provided a display name, but no username. Then, if it's left blank, it switches terms yet again, and asks me to include my domain name.

Then, onto the email, which has help text that is left aligned. I know what they mean by the text they used, but is this really the best wording? It's like saying, please verify what you type and we may verify that somehow.

The best part about this whole page was the humor used for the birth date: "I think you're lying about your age." Then it suggests the date format I must use, MM/DD/YYYY, even though the date fields are drop downs, which don't allow me to deviate from a pre-fixed format. What's odd is that they tell me I'm lying about my age, yet provide the values as options.

The terms box was pre-checked, meaning its far too easy to agree to the terms without reading them.

So, I closed the browser tab and moved on. Thanks, but no thanks PodShow.com.

Maybe you should read one of the classics like About Face 3: The Essentials of Interaction Design(which was recently updated to revision 3). (It's a love/hate relationship for most with Alan Cooper's books).

January 7, 2008

Don't put your product prices in the URL!

This really happened and I am not making this up.

I thought I found a new web host, so I was going through their ordering process and clicked "order".

 

I noticed the URL had an odd number at the end:

https://mydomainhost.domain/autosignup.asp?AdminAccNum=RSWEB2&ReturnURL=
http://mydomainhost.domain/v3/custom.asp&totalplan=52.75

I've changed the name of the host to protected the innocent.

So, I changed the number, at first to something slightly smaller. Then, to something negative:

image

Yes. It says free.

I'm far too honest to take advantage of this clearly amateur web mistake, but ... come on!

Download a free e-book copy of Introducing Microsoft LINQ

If you're interested in learning LINQ, Microsoft is providing an e-book download of the book Introducting Microsoft LINQ for free. The only catch is that you agree to signup for a newsletter.

Get it here.

January 6, 2008

Pownce Invites

I have a handful of Pownce invites if anyone is interested.

What is it?

Pownce is a way to send messages, files, links, and events to your friends. You'll create a network of the people you know  and then you can share stuff with all of them, just a few of them, or even just one other person really fast.

image

Shoot me an e-mail (coder @ this web site).

My Current Favorite pocket-sized Camera Recommendation

I was just chatting with a buddy and mentioned my recent camera purchase to him, the Canon PowerShot SD870IS. I hope I made him just a little jealous.

image

Here's my brief review of the 870IS of the features I like specifically ..., maybe helping you answer "What digital camera should I buy?"

Overall, it's a spectacular pocket-sized camera for the money.

  • It turns on and becomes usable in about 2 seconds. Sweet.
  • The camera has an orientation sensor, which usually are only in DSLR cameras. This is a great feature and in very few cameras today. Instead of manually rotating your photos, the photos include a tiny piece of data that indicates which way you were holding the camera. Most modern photo manipulation software will read this flag and automatically display the photo in the correct orientation. If you take a look at my gallery linked below, you'll see that some of the photos are rotated -- I didn't need to do a thing to make that work. Awesome. One less thing for me to manipulate when loading photos.
  • Big bright LCD screen (3 inches diagonal). I had the Canon 800 and it had a nice screen, but the 870 puts it to shame really.
  • Simple mode switching (from video to a program mode to automatic with a small switch on the top).
  • The lens is protected when off.
  • The "On" button is located on the top and is difficult to accidentally turn on.
  • Fits nicely in my front pants pocket (although I'd recommend getting a simple screen protector to avoid scratching the LCD screen). You can be a tourist without looking like a tourist!
  • Easy to learn and tweak the settings. Most stuff is automatic though if you want it to be. But, if you're willing to branch out, it has a lot of nice tweakable settings to help you get the shot you wanted.
  • The video and audio feature work surprisingly well. Over Christmas, I shot some video of my little nephew around the house and I must say that I'm not likely to ever want to carry a camcorder again (as my video shots tend to be short anyway). The resolution is 640x480, which is good enough to capture the memories of the moment. The microphone quality is much better than I expected ... music, voices, everything carries through very nicely considering it's just a digital camera! (There are several settings to adjust the quality and the size of the files).
  • The model has image stabilization built in. It definitely has allowed me to take shots without the aid of a tripod that I wouldn't have otherwise been able to take. It's not magic though, and it's definitely possible to take blurry shots -- but it decreases the frequency if you use it wisely. It has a little on screen warning when the shot you're about to take may be blurry. In lower light situations, this can prevent the disappointing shot you might have taken with other non image stabilized cameras.
  • Really long battery life (in the many hundreds of shots). I haven't done a scientific study or anything though ..., but it's more than adequate for a day of shooting (with some use of the flash).
  • Face detection -- helps take better shots of people (a bit gimmicky, but I must say that the people shots I've taken look consistently nice!)

 

I've posted some sample shots I've taken with the SD870 on SmugMug here.

image

Manufacturer's page.

Thankfully, they don't put stickers on the camera for all of these features ... otherwise, there'd be no actual camera exposed!

image

Amazon's: Canon PowerShot SD870IS (there are about 100 reviewers there giving it about 4.5 stars).

Do you secure your laptop's data?

Bruce Schneier secures his laptop's data using PGP Disk's Whole Disk Encryption tool (read about his security measures here).

I do use one of his suggestions though: don't keep important information on a laptop.

Given he's the author of a number of popular cryptography and security related books, I can see him being more paranoid than me. Some of you however should consider the security of the data on your laptop ... (even if you don't go as far as Bruce); what if the data on your laptop was suddenly made available on the Internet?

My favorite book from Bruce is definitely Applied Cryptography. (I admit it puts me to sleep reading it, but I still enjoy the math and the code -- even if some of it zings right over my head!).

image

(Yikes, the PGP Whole Disk Encryption tool is expensive at $149 US. Security certainly does come at a cost! I thought they had reasonably priced stuff for home use ... but I don't see anything reasonably priced -- PGP Desktop Home 9.7 is $99 US).

Random slides ...

image

From XKCD.com (which has a bit of raw, rudeness, so you've been warned).

January 5, 2008

Emergency Preparedness

The WiredPrairie household, being in southern Wisconsin, is not immune to being in the path of severe thunderstorms or tornadoes (and some nasty winter storms recently). All these years of living in Southern Wisconsin we haven't had an emergency (weather) radio. We've finally rectified that by buying the Midland WR-300.

image

The Midland WR-300, as you'll see, is an extremely well-rated weather radio and alert monitor with S.A.M.E. SAME stands for Specific Area Message Encoding. Using this, you can set this emergency monitor to react to alerts to the area you live in rather than receiving all alerts broadcast in your region (usually a county, parish, city or marine area). This narrows the alerts and reduces the "noise" you might otherwise be alerted to by cheaper alert monitors.

If you head to SAME web site, you'll see it's actually the NWR SAME system. NWR is the acronym for NOAA Weather Radio. NOAA is the acronym for the National Oceanic and Atmospheric Administration. (So, that becomes: National Oceanic and Atmospheric Administration Weather Radio Specific Area Message Encoding. Can you tell a government was involved?)

This device can receive warnings, watches, or other non-weather emergencies (like Amber alerts for example).

It does violate one of my rules by strongly recommending batteries, but not including any batteries. Shame shame (especially given the nature of this device).

We like the device. It's easy to use and provides a little additional piece of mind for around $40. This model has a few accessories available, like a strobe light, and a larger antenna can be attached for poor reception areas.

I'd highly recommend if you live in any area of the country that is subject to inclement weather that you buy this or something like it (a cheaper model like the Midland WR-100B for example). It might save your (or your families' lives).  One reviewer on Amazon mentioned how they were saved by their weather radio as it alerted them right before an F4 Tornado struck their house (which is a tornado with 207-260 mph or 333 to 418 kph winds!).

FYI, it draws about 1 watt of power (2 when the backlight is on).

Third Party Component Web Site Turn offs ...

You're interested in a product ..., some searching,

"AH HA! This sounds good ..."

Click on the link ... and you're greeted by the product's web site. In this case, I'm talking about 3rd party components or products that you might purchase to aid in the development of an software application. But this can be easily generalized for nearly any product.

My list of things I look out for ...

  • Grammar or spelling mistakes. I'll definitely forgive mistakes in a blog post, but anywhere else on your site .... grrrr.
  • Lack of product or screen shots (almost every component or 3rd party product can be shown in some way, either directly or through a demonstration application).
  • Confusing pricing or licensing terms
  • Non royalty free licensing terms
  • Click-through agreements for end-users (end users of the product using the 3rd party widget)
  • A support forum with only a few posts
  • A support forum where people keep wondering where the support is ... (this is usually the kiss of death for me)
  • No plans for future development
  • No clear release date for the product (how old is the current version, etc.)
  • Non professional web sites (eh, you know what I mean)
  • No contact information (like an e-mail address, phone number, address, something).
  • Web site not current. If your web site isn't current, I wonder if you're actually working on the product...
  • A blog that isn't updated. Sure sign of lack of interest on the vendor's part.
  • No trial edition.

What would you add?

If it's a component I'm interested in, I won't even bother downloading a trial if I don't feel like the list above has been satisfactorily met by the vendor.

When do you buy a third party component product rather than build?

I was just reading a recent post on the VistaDB blog titled Looking ahead to 2008, and back at 2007. (What's funny is that I have no idea who is writing the blog post because they don't seem to post their name though they're trying to be 'transparent' about their business and plans!).

In any case, this was part that made me think:

Where we are lacking is in sales, marketing and business partners. The website and store have to be overhauled, and the training of new users to ADO.NET and VistaDB needs serious work. This is not just documentation; it is also samples, case studies and tutorials. We do have a few strong partners, but we need to do much more to get the word out about VistaDB. Not just about the engine, but about the philosophy of managed code, and why we are doing all this in the first place (the business case).

As a hobbyist developer at home, my "buy a widget" budget is extremely limited. It's really hard to convince the CFO (wife), that I need some widget or tool for an application I'm writing for home use (I've been successful a total of one time in 10 years in buying a widget). So, I'll spend hours scouring the Internet for other options, or writing it from scratch (or deciding I don't need as badly as I originally thought).

At work, we can buy components of course that fit various needs. I'm sure this is true of many development shops, from internal IT tools, to departmental applications, to commercial applications that are being sold.

But, where do you draw the line (both personally and for work)? How much effort are you willing to put into a 'widget' before you decide that it's worth buying instead? In this example, the product they're selling is VistaDB 3.3:

... is the world's first  100% fully managed and typesafe embedded SQL database designed specifically for Microsoft .NET Framework, Compact Framework, 64-bit .NET and Mono. Build fully managed and typesafe ASP.NET and WinForms applications using C#, VB.NET and other CLR-compliant languages.

At $169 currently, it's not a very compelling product if I'm being frugal about money spent (raw dollars, ignoring time here). Looking around at free options that are immediately available from Microsoft as competitors, I could use an Access database or SQL Server Express database, or even a SQL Server Compact database. All are decent options -- and available for no charge from Microsoft. They each have limitations on the number of connected users and the size of the database, but for many applications (especially home users), these limitations aren't an issue. The compact edition is especially nice as it doesn't require any special installation.

If my needs were relatively simple, I'd go with one of the free options -- no questions asked. If my needs scaled, I'd likely go with SQL Server as it has the best growth and management opportunities (well known, etc.).

So, where does that leave a product like VistaDB? If you believed that having a 100% fully managed embedded SQL database is important, then it may be a good option and worthy of potentially purchasing (after a thorough test). But, if you're not as interested or don't believe that it's that big of a deal, then there are many database options that you could employ in an application.

Sometimes it makes sense to build yourself. However, writing a decent database should rarely be on the "build it yourself" lists (I don't consider an XML file to be a database). Clearly, either buying a database or taking advantage of a free option is really the only choice when considering a database.

Although I've been talking about mostly databases in this post, I'm more interested in hearing the answer to what types of things you'd be more likely to buy rather than build? Is there some price point where you decide that the 3rd party product costs too much, so you'll look elsewhere?

 

What should a company like VistaDB do for hobbyist developers? Should they offer free versions for home use? Or, provide free versions to developers who link back to their site (and provide a review / feedback)? Or ...

There's no way for example, I'd buy VistaDB for home use, which means I'm not likely to talk about successes, provide feedback, etc., on my blog, which would amount to "free" advertising. It's a tough call for any vendor.

January 4, 2008

Improving the Presentation of your Ideas

I'm reading a new book, Presentation Zen, by Garr Reynolds. (I'm about half way through.)

image

It's a very good book, especially if you consider the bigger picture of "presentation" as it factors into the many things you may do. Software development and user interface development is all about presentation. I know I fall into the same rut some days as other people -- your design tool is the development environment, rather than stepping back and using a white board, a sheet of paper, or even the back of a napkin! The fields and data, and the visualizations you add to an application all tell a story and communicate emotions to the end user. Stark gray forms may communicate dull, boring, or even simple. Crazy colors and fonts may communicate pain and suffering (AKA headaches!). Presentation.

A few sentences have struck me so far though:

"Decoration, for better or worse, is noticeable--sometimes enjoyable, sometimes irritating, but it is unmistakably there. However, the best designs are so well done that "the design" is never even noticed consciously by the observer/user, such as the design of a book or the signage in an airport."

One company that most everyone who's reading this blog is familiar with is Apple. They get this (with the exception of ITunes on Windows!).

Back to the book --it's a beautiful, full color book. "Airy" (lots of white space). Easy to read (not dry).

I've done more minimal presentations in the last few years (with no more than 6-8 words on a slide) - and they've gone very well. But, it's taken quite a few years to overcome the PowerPoint-effect which is instilled in us by watching other dry, boring slideware.

I'll post more as I get through it, but I'd definitely recommend you check it out if you do many presentations (both in the actual literal sense, or want to consider "presentation" as a larger art). It's around $18 US right now at Amazon.

January 3, 2008

Chumby Chumby chumby!

You may have heard of this oddly named little device called the Chumby.

image

What is it? Well, it's a bit hard to describe as it can be a lot of things! Here's what the chumby web site says:

Why would I want one?

It's just pure 24/7 gratification to be able to have the Internet on tap. Sure, you can get the same information on your computer, but why be stuck behind a keyboard to enjoy your internet addictions? Here are just a few of the things you can do:

  • Catch the latest news headlines, sports, weather, stock prices.
  • Play your iPod® mp3 files through built in speakers. Charge it too.
  • Enjoy your Flickr and Facebook photos as a digital picture frame.
  • Stay updated on new Netflix releases or view your movie queue.
  • Make and share e-greetings, photo mash-ups, goofy animations.
  • Wake up to the multi-tone alarm clock.
  • Track any eBay auction or Craigslist item.
  • Monitor incoming email on any POP3 account.
What are the features of the chumby?

    Wi-fi connectivity • access to the free Chumby Network • 3.5" LCD color touchscreen • two external USB 2.0 full-speed ports • 350 MHz ARM processor • 64 MB SDRAM • 64 MB NAND flash ROM • stereo 2W speakers • headphone output • squeeze sensor • accelerometer (motion sensor) • leather casing • AC adapter included

 

I bought one of the little guys for Christmas as a gift for my father. I could have given him just the Chumby and that would have been enjoyable; however, I wanted to kick it up a notch and make it more fun.

What I was originally looking for was a digital photo frame, with no subscription fees, that would allow me, their friends, and relatives to send them e-mails with attached photos and have them show up and randomly displayed on the chumby -- yet keeping it all private.

I couldn't find anything -- and then stumbled across the Chumby, which is far more than just a digital photo frame.

So, I wrote 3 separate pieces of software to make that possible to do what I wanted.

  1. A Windows application (as a service), that checks e-mails every 15 minutes to a specific e-mail account. When an e-mail arrives, it's checked for validity (to make sure the sender is trusted), then all of the attached images are compressed, shrunk, and uploaded to a web site. This was written in C# (.NET 3.5).
  2. A website portion written in PHP which provides an XML document with the 75 most recent photos that were uploaded sorted.
  3. A small Flash widget which connects to the web site, queries for the list of photos, randomizes it, and then shows each photo for a specified length of time.

My father and mother really enjoy the gift. I've got a young nephew who is the star of many photos -- and they love seeing new photos of him show up (they may be less excited to see silly pictures of our cat).

IMG_1511

(Our cat and a gift my wife gave me ... a marionette of Frank Lloyd Wright).

I had considered several pay services for hosting my photos, but there are a few restrictions that you need to be aware of. The most important is that the Chumby does not use a full version of Flash. It uses the embedded version (Flash Lite 3). It cannot show Progressive JPEG files. So, my first choice for image storage (where I store personal photos today and I would definitely recommend) is SmugMug. However, they only serve up progressive JPEGs (great for computers, but not so great for the Chumby). Too bad.

I experimented with a few other pay options, but decided that the best way to secure the photos in a way that was easily accessible to me was to build it myself. It took far more time than I had expected (I was new to flash, and the complexities of doing debugging on an external device ...). However, the end result was well worth it. (Some photo storage sites have NO API access whatsoever. Lame. Shame on you! And a few are over designed. I looked at a lot of them!)

The Chumby is still in 'early adopter' mode right now, but I believe you can still pick one up. The hardware won't change before the final release. Only the software (which is fully upgradeable by Chumby). If you like gadgets, it's something you should check out. It's fun. Currently, it comes in very fun packaging as well (sort of grain-bag/knapsack bags).

XamlPad is (mostly) dead. Long live Kaxaml!

If you've used XamlPad from Microsoft ... you probably have a love-hate relationship with it. You love it because it's reasonably quick at doing a proof of concept or test of a WPF feature. You love it because it's simple. You hate it because it has a bunch of odd quirks with the text editor, the fact that it really has only a few useful features ...

Kaxaml is a better XamlPad in many respects. It's got a bunch of nice little features including:

  • Intellisense!
  • A color picker (that is better than the one in Expression!)
  • a scrubber:
  • image
  • You can paste images into the editor!
  • It can have multiple files open at one time
  • Did I mention intellisense (and a color picker!)

 

The full announcement is here.

 

Pay attention to the default install -- it may change your default file handlers for Xaml files in a way that isn't to your liking:

image 

A definite recommended add to your WPF/Xaml editing toolbox.

My new favorite free Vista compatible Icon Editor

I routinely want to convert a PNG file I've created in Adobe Illustrator or Photoshop to a Windows compatible icon file (ico). I stumbled across IcoFX yesterday and found it to be fast, effective, and simple to use. The price was also right: $0.00.

I was working on this icon for someone else and in less than a minute had a complete icon set with all the sizes and colors I wanted.

image

Every Windows application needs an icon -- even a WPF application. If you're creating an application, why not throw together an icon that is more memorable than the default icon that is assigned when you create the development project in most IDEs? :-)

Microsoft SharedView

Still in beta (beta 2), but I'm very interested in this -- if for no other reason than making remote support easier. I've never had luck with Remote Assistance and my father's computer. It always disconnects after a few seconds. So, anything that is free and allows me to actually view his desktop live would be a welcome addition to my toolbox. I can also see it being useful for more adhoc meetings and such where products like WebEx or Live Meeting aren't practical or available.

More information here.

image

Requirements:

  • A computer with a 700 MHz processor or higher that meets the following requirements:

    • Operating system : Microsoft Windows XP Service Pack 2 (SP2) or Windows Vista

    • Memory: Minimum 256 MB of RAM (512 MB recommended)

    • Hard disk: 10 MB of free hard disk space

    • Display: Minimum 800 × 600 screen resolution (1024 × 768 recommended)

    • Applications: DirectX 8.0 or higher installed on your computer.

  • No 64 bit support.

    January 2, 2008

    Are you a left or right brain person?

    One really quick test at the Herald Sun: Right Brain v Left Brain.

    You'll look at a picture of a spinning dancer -- which way does she spin?

    image

    And here is another from the Art Institute of Vancouver: Right Brain vs Left Brain Creativity Test. There are 54 simple questions that are scored and evaluated. It takes 5 to 10 minutes, but reading the results were fun for me (and many described my "methods" of thinking and processing quite well).

    January 1, 2008

    No more programming books from Charles Petzold?

    Charles announced he isn't likely to write many more programming books in the future due to dwindling book royalties. I suspect the availability of information on Internet has had something to do with that (and of course the rapid change of development technologies). (Although from looking at my purchases at Amazon in 2007, you wouldn't see much of a change in my technology focused book purchasing pattern when compared to previous years).

    It's definitely a sad day for Windows users and programmers. Many Windows programs were completed with higher quality and more rapidly as developers had a better understanding of the Windows API thanks to Charles' books. Developers were able to spend time on the functionality rather than the plumbing of a Windows application. (And in some cases, I wish more developers had read the books a bit more carefully!).

    I know I owe a lot of my early knowledge of the Windows API to Charles' now classic Programming Windows books.

    Thanks Charles!

    Are companion applications practical in the enterprise?

    Brad Abrams provided a few predictions for IT-Technology in 2008. I started posting a comment, but it was getting a bit long. So, here are my comments with some snippets from Brad's post.

    #1) User Experience Reaches the Enterprise

    In 2008 we will see several major enterprises start efforts to build UX centric applications that increase worker productivity, reduced transaction costs and increase pull through as the UX meme of the consumer facing world leaks into the enterprise. The days of the battleship gray, forms of data application as the king of the enterprise are numbered because of an imperative towards richer visualization of complex and interconnected data. ....

    Battleship gray forms are cheap and easy for an enterprise developer. The tools make them easy. Even with a toolbox full of IDEs from Microsoft, doing something outside of a standard data entry form is complex. Sure, I can make a quick gradient -- but that's just eye candy, not visualization.(Though some days even picking the colors can be a challenge!)

    <RANT>It's still hard to do a nice WPF data entry form that can take advantage of WPF features without resorting to grids in grids in grids</RANT>

    Data visualization is a tough nut to crack -- it's hard enough some days to get a simple table to layout correctly the way you want in WPF/HTML/Silverlight/Flash/etc., but actually deciding there's a better way to "visualize" the data is a real art and skill that many developers lack. It's not their fault either -- I call it art for a reason. It's a real skill, not everyone is an artist, a musician, a chef, a leader, or even a computer programmer. We each have our unique combination of talents that make us, well, unique.

    Although there are definitely exceptions to this, 'scientists' are often not the best artists. Look at the history of computer software -- look at how many UGLY applications you've used (I'm ignoring usability entirely as that's another skill, but one that is more trainable).

    The art is much more difficult than the battleship gray form. Plus, it takes a lot more time.

    Rather than trying to change the way data is visualized, the first step in most enterprises is to simplify and make the data more accessible through better use of colors and fonts (usually font weight, not different fonts like this). Once they've nailed that aspect of an application or module, they might step back and see if there's better ways to actually present the data (graphs, 3D, etc.). In far too many cases, the expense of doing that development work will exceed the end user benefit. (And sometimes, a graph may require more user time than just displaying the data formatted nicely).

    3. The Companion Applications Become Practical. While RIA and AJAX application categories continue to grow, many consumer facing web applications and enterprise applications developers realize there is a need for desktop exploitive applications as well ...

    IT shops don't like to manage workstations. They don't like to install upgrades. They want to move users to web versions of applications to simplify the management of their complex IT needs. Sure, there will be companion applications that are occasionally necessary as the web is not yet capable of delivering a complete 'desktop' experience (think hardware integration, real time feeds, etc.).

    What meaningful application wouldn’t benefit from a pairing like that of Outlook and Outlook Web Access? In the past it has been prohibitively expensive to build these applications, but with the circa 2008 technology such as .NET Framework 3.5 and Silverlight, it is finally becoming practical to have a single codebase that fully exploits the desktop and offers a rich web experience.

    Really? It's really complex to build an application that can run on the desktop and run on the web. Some aspects can be shared, but the way you would write applications is often very different on the web when compared to an installed application. His example, Outlook is perfect. Outlook 2007 uses a local cache and from my experience about 100MB of RAM when running (Outlook 2007 is using 91MB right now on my home machine). It would be completely impractical if a web version of Outlook used 100MB of RAM for every user who connects. So bad it would be nearly criminal!

    The user interface is fundamentally different (one has threads, the other doesn't, the display needs are completely different, sending mail is different, etc.) and although you could extract some shared code again, in the end I don't believe it would pay to do so. It's cheaper to make two distinct clients of the Exchange server, sharing minimal code and mostly protocols (web services?) and techniques only.

    More likely though is that a development shop would decide on one version as it would cost too much to maintain two. Microsoft (and Outlook) is unique with the army of developers that are available. Corporate IT and enterprise developers have no such luxuries of time and resources. They can't cross train in multiple languages, tools, ... it just takes too much time and energy.

    If an enterprise was developing it's own email front end, they'd do it once and use the technologies that make sense. I could see using Silverlight if they were using ASP.NET, mixed with HTML to produce an effective, modern email client.

    I'd change #3: the move to the web and away from the desktop will continue to grow (which may improve the UX of some applications). Developers will start to use Silverlight, Flash, Flex, to enhance the usability of their web applications.

    How to clear data from your used cell phone

    Most of us probably have at least one cell phone that has been retired and is collecting dust. There are tons of places that used phones can either be recycled or donated these days, but a common question is how to erase your personal data from a cell phone.

    The best place I've found so far is here. Select the manufacturer and model of your cell phone (or a near match), download the PDF instructions and follow along.

    On that same web site, you can also find a donation drop off point for your cell phone. At some sites, you can even take in batteries, chargers, and the other accessories you may have accumulated.

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