PC World's Top 25 Worst tech products of all time
Enjoyable stroll down technology lane provided by PC World: The 25 Worst Tech Products of All Time. I've link to the printable version for easier reading.
« April 2006 | Main | June 2006 »
Enjoyable stroll down technology lane provided by PC World: The 25 Worst Tech Products of All Time. I've link to the printable version for easier reading.
Consider the experience of this web application.

The image is from a web site which lists special events at a historical site. I clicked on Saturday the 27th to see if there were any special events planned. The text that returned doesn't match well with my action and also is anything but friendly: "No records matched your search criteria."
Here's how I would have fixed it:
"There aren't any special events planned for May 27th."
That alone would have been a vast improvement. But, we could do more.
"On June 4th, a special day of appreciation is planned for all visitors, and as a thank you, the admission price is reduced to only $3!"
By looking ahead for the next available special event, we would provide the user with the information they really want to know, like maybe instead of going tomorrow, they should wait a week and go as the admission price will be less.
In the US, it's uncommon to see a calendar that way -- so I'm not sure why they've chosen to display the calendar with Saturday and Sunday displayed side by side. If they weren't a different color, I probably would have been confused (they did something abnormal, so they had to fix that abnormality with a different, non-typical display technique).
When did you last backup your important electronic documents, photos, videos, songs, e-mail addresses, etc? When your hard drive dies tomorrow, do you have another copy of all of your digital photos? If your laptop or desktop computer dies, how long would it take you to get it back to working state?
If the answer to the first question is any of the following, it's time to start copying some files!
I use Acronis True Image Home. It's decent, fast enough, and has a very nice bootable CD option. You can backup a complete partition, and continue to use your PC (although the computer definitely slows down).
What's a good option for the Mac? I'd like to make a backup of it sometime soon.
From Logitech, the NuLOOQ navigator and tooldial...

Mac OSX only. $149. I'd be interested to see a version for a PC -- and the ability to add new applications to the tooldial software.
"The goal of NuLOOQ is simple--to provide you with a better way to work with the core applications, Adobe Photoshop® CS2, Illustrator® CS2 and InDesign® CS2, that enable you to run your design businesses successfully."
According to Microsoft, it's about time we replace JPEGs with the new Windows Media Photo format.
More details on ZDNet.
Somehow, I'm sure Microsoft hopes to make some money on this new format (licensing?). If they weren't, they wouldn't have given it such a dumb name.
Microsoft still doesn't understand how to play nice in the industry; if it were the "Open Media Photo" format and it was free of licensing, it might be adopted much more quickly. I guess we'll have to wait and see.
A little fun with the WPF VisualBrush element tonight:

In previous builds of WPF, it was always necessary to set the VisualBrush's Visual property in code. That's no longer necessary as this demo shows.
<VisualBrush x:Name="myVisualBrush" ViewboxUnits="Absolute"
Stretch="None" AlignmentX="Left" AlignmentY="Top"
Opacity="0.50" Visual="{Binding ElementName=BallArea}">
The complete code is here: Code
You should be able to paste this into a working March 2006 CTP build of WPF (XamlPad or XamlCruncher). Click the ball to see the dumb animation I added.
I don't have time to write up much of a review this evening (nor have I explored much), but I thought I'd post some screen shots.
My first impression is that it is a better Frontpage. It knows about styles a LOT more than Frontpage though and makes them a first class citizen. Additionally, it's taken the approach of a development tool with a by-default on-screen property editor for HTML elements (and styles).
Uh .. this wasn't a good start though ... (click on the screen shots for a larger view)
Excuse me, a reboot?
After rebooting, the application starts with a clean slate:
Easy enough to edit. The selected element has a little marker on the upper left corner for easy access to the properties, etc.
Reasonable style editor -- nothing too fancy. The needed attributes are all there:
Standard color picker -- HTML colors only from this dialog:
Inline styles are easy to build. I just set a few properties in the CSS Properties panel. The inline style feature reminds me of Word 2003's ability to show document styles:

I copied and applied the inline style to a named style, "alert":
In looking a bit more at the style editor -- they have a nice explanation of the CSS box model using an image:
There are built in accessibility checks:
... and also browser compatibility checks. Only flavors of IE and XHTML are listed:
Nice table formatting features (this pane is available when editing a table):

There's a whole set of Data related menu options and tasks panes that aren't immediately obvious (so non-obvious that they remain disabled -- I don't see any easy way of activating them.)
All for now.
Microsoft just released a technical preview of their Frontpage replacement product, Microsoft Expression Web Designer.
Download (you will need a Passport and you will need to register)
It's > 200 MB, so be prepared for a long download.
I'll upload some screen shots, etc. when I get it installed.
Google announced the "Web Toolkit (Beta)" today. I'm sure there was much excitement across the blog universe today.
Yawn. Being more of a .NET guy myself, I'm even less excited about the actual details:
Google Web Toolkit (GWT) is a Java development framework that lets you escape the matrix of technologies that make writing AJAX applications so difficult and error prone. With GWT, you can develop and debug AJAX applications in the Java language using the Java development tools of your choice. When you deploy your application to production, the GWT compiler to translates your Java application to browser-compliant JavaScript and HTML.
There's a new blog covering the details here.
No Mac OSX support.
(I still like Yahoo's web library right now).
It's likely at some point you'll encounter a situation where you want to do some data binding in WPF. However, the data you're binding to may not be in the format you actually want to display to the end user. WPF has a relatively simple solution to this problem, value converters.
In the following example, I wanted to have a slider that as I moved the slider would increase the date on the image displayed. The slider's native data type is a double. I wanted to display the date as Day of the Week, Date.

As I use the slider, I'd like it to look more like this:

The date should update immediately as the slider value changes.
There's no simple binding that does everything. There might be a completely XAML based solution for this, but obscure XAML isn't the best for long term maintenance, no matter how cool it was that it could be done all in XAML. So, instead I present the value converter.
Here's the label I'm using:
<Label VerticalAlignment="Top" HorizontalAlignment="Center"
FontFamily="Tahoma"
Foreground="White"
Content="{Binding Value, ElementName=DateSlider, Mode=OneWay, Converter={StaticResource SillyDateConvert}}"
FontSize="10pt"
FontWeight="Bold"
SnapsToDevicePixels="True" >
<Label.BitmapEffect>
<OuterGlowBitmapEffect GlowColor="Black" GlowSize="2" Opacity="1" />
</Label.BitmapEffect>
</Label>
The important attribute to pay particular attention to is the Content attribute of the label. Specifically, the Converter of the Binding. Converter={StaticResource SillyDateConvert} refers to a resource I declared in the Resources:
<wp:SillyDateConverter x:Key="SillyDateConvert" />
The namespace, wp, is declared in the root element as
xmlns:wp="clr-namespace:ShowValueConverter"
In a separate code file, I've created a class, called the SillyDateConverter (C# here):
[ValueConversion(typeof(double), typeof(String))]
public class SillyDateConverter : IValueConverter
{
public object Convert(object value, Type targetType,
object parameter,
System.Globalization.CultureInfo culture)
{
DateTime dt = DateTime.Now;
dt = dt.AddDays( (double) value);
return dt.ToString("D");
}
public object ConvertBack(object value,
Type targetType,
object parameter,
System.Globalization.CultureInfo culture)
{
throw new Exception("The method or operation is not implemented.");
}
}
Since my code only does one way binding, I've left the default exception in the ConvertBack method. In the Convert method, I use the bound value from the slider (passed as value), to construct and then return the formatted date.
As a final example, I added another converter to round a double. For some reason, the slider doesn't quite operate the way I'd expect. Even though small change is set to 1, it allows decimals to creep in if I use the mouse.

Here is the sample project (zip): ShowValueConverter.zip (21 KB)
Built and tested with the Feb/March 2006 CTP of WPF.
Via VFXWorld, the rights to produce and develop a feature film based on the 1980's television series, Knight Rider was announced today. Oh, did the world really need a movie made of that TV show? There were only 84 episodes of Knight Rider running from 1982-1986 starring the one and only, David Hasselhoff. For a laugh, check out that link to his official web site. (And I had no idea he had a 'remarkable' music career).
I'll come out and admit it: I watched the show. However, I was young. My TV options were extremely limited. I have no other excuses, good or bad that anyone would believe.
A simple example of how to bind an element's property.
XAML below:
The real trick is right here:
<RotateTransform Angle="{Binding ElementName=Slider, Path=Value}"/>
This says, binding the Angle property to the Value property of an Element named Slider somewhere in the current context of the Grid. As the Value changes, so does the Angle, automatically. Slick and easy.
<Grid
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
Background="#FFFFFFFF"
x:Name="DocumentRoot"
x:Class="UntitledProject1.Scene1"
Width="640" Height="480">
<Rectangle Stroke="sc#1, 0.623615, 0.623615, 0.623615" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Margin="187,103,177,166" Width="Auto" Height="Auto" x:Name="Rectangle" RenderTransformOrigin="0.5,0.5" RadiusX="10" RadiusY="10">
<Rectangle.RenderTransform>
<TransformGroup>
<TranslateTransform X="0" Y="0"/>
<ScaleTransform ScaleX="1" ScaleY="1"/>
<SkewTransform AngleX="0" AngleY="0"/>
<RotateTransform Angle="{Binding ElementName=Slider, Path=Value}"/>
<TranslateTransform X="0" Y="0"/>
<TranslateTransform X="0" Y="0"/>
</TransformGroup>
</Rectangle.RenderTransform>
<Rectangle.Fill>
<SolidColorBrush Color="sc#1, 0.487050742, 0.4300494, 0.9016877"/>
</Rectangle.Fill>
</Rectangle>
<Slider HorizontalAlignment="Left" VerticalAlignment="Bottom" Margin="14.8823593128807,0,0,150.402281758685" Width="179" Height="46.9601551083915" x:Name="Slider" RenderTransformOrigin="0.5,0.5" Maximum="360" SmallChange="1" TickPlacement="Both" LargeChange="5" TickFrequency="45">
<Slider.RenderTransform>
<TransformGroup>
<TranslateTransform X="0" Y="0"/>
<ScaleTransform ScaleX="1" ScaleY="1"/>
<SkewTransform AngleX="0" AngleY="0"/>
<RotateTransform Angle="45"/>
<TranslateTransform X="0" Y="0"/>
<TranslateTransform X="0" Y="0"/>
</TransformGroup>
</Slider.RenderTransform>
</Slider>
<Label HorizontalAlignment="Left" VerticalAlignment="Bottom" Margin="17,0,0,119" Width="67" Height="24" x:Name="RotationLabel" RenderTransformOrigin="0.5,0.5" Content="{Binding Value, ElementName=Slider, Mode=OneWay}"/>
<Label FontWeight="Bold" HorizontalAlignment="Left" VerticalAlignment="Bottom" Margin="17.0000000000001,0,0,134.723333333333" x:Name="Label" RenderTransformOrigin="0.5,0.5" Content="Rotation" />
</Grid>
My last font change in a code editor was to ProggyCleanTT. However, Microsoft recently made available a new font, Consolas, available for licensed users of Visual Studio 2005 (found on "Only Passionate People Win"). Consolas is a significant improvement over "Courier New" and is better than Proggy Clean. Here are some examples:
Courier New (10 pt):

Proggy Clean (12 pt):

Consolas (10 pt):

Here are some more examples, this time real code (C++) (thumbnailed each one so you can open them in a new browser tab for comparison):
Courier:
Proggy Clean:
Consolas:
If you compare Consolas and Proggy Clean, you'll see how the kerning is better in Consolas which helps readability. It's not a major improvement from Proggy Clean, but if you're a licensed user of Visual Studio, and you're tired of Courier, download Consolas setup (4.3 MB) and give it a whirl. It automatically changes the Visual Studio editor font during the installation. It's free! 
I've updated my HTMLGrabber this weekend with several new features:
Before capture:

Capturing ...

After grab:

Download it from here:
WiredPrairieHTMLGrabber.zip (65 KB)
Or here.
Just unzip and run the executable. No install needed. If you encounter a web page that doesn't work please leave me a message with the details.