Thursday, November 5, 2009

Essential Visual Studio add-ins and other tools

Summary: Improve your programming experience with Visual Studio add-ins and other enhancements.

If you are a Windows programmer using Visual Studio, here are a few thing which can enhance your programming experience.

Visual Studio add-ins
  • Build Version Increment alters the default version auto-increment style (supports simple increment by 1, date stamp, etc).
  • Code Convert converts source code between C# and Visual Basic.NET.
  • CodeRush Xpress for C# includes hand-picked features taken from CodeRush and Refactor! Pro add-ins.
  • Code Style Enforcer checks the code against a configurable code standard and best practices (Visual Studio 2010 only).
  • CopySourceAsHtml allows you to copy source code, syntax highlighting, and line numbers as HTML.
  • GhostDoc automatically generates XML documentation comments for methods and properties based on their type, parameters, name, and other contextual information.
  • NArrange automatically organizes code members and elements within .NET classes.
  • Productivity Power Tools offer a set of extensions to Visual Studio Professional (and above) which improves developer productivity.
  • SelectionTree adds feature selection tree dialog to appropriate setup and deployment (MSI) projects.
  • Regular Expression Tester Extension lets you create or modify regular expressions and test them with any text.
  • Spell Checker supports text verification in HTML style comments, ASP.NET server side comments, JScript, C# and C++ comments, CSS and C, VB and VBScript style comments, as well as in JS, CS, VB, CSS, CPP and H files (requires Visual Studio 2008 SP1 and Microsoft Word 2003 or 2007).
  • StyleCop analyzes C# source code to enforce a set of style and consistency rules.
  • Versioning Controlled Build automates versioning of .NET and VC++ projects (handy for multi-project solutions).
Code snippets Hacks See also:
Visual Studio Tools and Extensions (MSDN Magazine, January 2011 issue)

Wednesday, October 14, 2009

Download free music... legally

Summary: Discover and download free music without violating the law.

If there is such thing as a typical music preference of a typical computer programmer, it probably does not apply to me. Sure, I like Pink Floyd, but my musical preferences diverge from majority of popular rock/hard rock/etc icons. My favorite music genre is baroque (Bach, Palestrina, Vivaldi), but I also enjoy The Mamas & the Papas, Cesária Évora, Angelique Kidjo, Al Bano & Romina Power, ABBA, Leonard Cohen, Joe Dassin, Astor Piazzolla, b-tribe, Canadian Brass, Ivan Kupala, and other performers, who have little in common with each other. Within the last year or so, I have been discovering performance by the less known artists (at least, less known by me), such as The Puppini Sisters, Natalia Clavier, Lee Rocker, and Melody Gardot, and I really liked some of them.

If your interests in music are similar to mine, this is how you can find and enjoy new music; it's free and absolutely legal.
  • Amazon.com
    Amazon.com offers free MP3 downloads, but the list of songs can be overwhelming. You can use the navigation panel to narrow songs by genre:


    In addition to individual songs, Amazon.com also offers free albums. To find free albums, use the Sort by Price: Low to High option.


    Amazon normally offers high quality MP3 files (above 192 Kbps).
  • Podcasts
    A number of radio stations offer one-song-a-day podcast downloads, which are normally of lower quality (128 Kbps - 192 Kbps), but they should sound fine to most ears. Sure most of the downloads are crap, but occasionally, you may stumble upon a gem. There must be more podcasts available, but here are the ones from NPR that I like:
    MPR: The Current Song of the Day (RSS)
    KCRW's Today's Top Tune (RSS)
    KEXP Song of the Day (RSS)
    To download podcasts, you can use a device-specific program, such as iTunes or Zune, but I prefer a free, open-source program called Juice.


    Once you find a track that you like among the downloads, you can use an application like Mp3Tag to edit ID3 tags (you may also want to rename file names, because the downloaded files normally have cryptic names).
  • Use RSS tools
    You can automate the process of searching for free MP3 downloads across multiples sources using RSS tools, such as Yahoo! Pipes. The key is to subscribe to the right aggregation service. I would recommend the SlickDeals' Freebes and Hot Deals forums, as well as Front Page (each of these has a subscribe/RSS link). You can follow this tutorial (and this one) to set up a Yahoo! Pipe filtering only posts containing music-specific keywords, such as free, MP3, music, album, etc.
  • Keep your eyes (and ears) open
    Many vendors offer free promotional MP3s and CDs, some of which are not too bad. For example, I do not remember how I got it, but somehow I received a free Mommy Mix CD from Safeway.


    Being a promotional CD, I did not expect much from it, but it it ended up being one of my family's favorite music CDs (in fact, if it were available for sale, I would've bought it). So don't assume that promotional music is always crappy, some may surprise you.
See also:
How to Get Free and Legal MP3 Downloads from… Universal Music!?
Top 10 Websites For Free & Legal MP3 Music Downloads
The 3 Best Free Classical Music Download Sites
10 Best Websites to Find Legal Music

Thursday, September 17, 2009

Technobrief #9

Summary: Recent findings of software, articles, and more.

EnglishGuidelines and standards
  • Windows UX Interaction Guidelines: 828-page guide (PDF) for each aspect of Windows 7 user experience (UX); the first 32 pages cover the UX design principles for Windows 7, a list of inspirations for how to design a great UX, top design guide violations, and more.
Quotes
  • From Don't Believe Anyone by Jurgen Appelo:
    "After eating and sleeping, disagreeing comes third on the list of basic necessities in my life. It's because I like thinking."
Jobs
  • From 7 great reasons to work at Netflix (Reason #5):
    Rules Annoy Us
    Rules creep into most companies as they try to prevent errors by less-than-stellar employees. But rules also inhibit creativity and entrepreneurship, leading to a lack of innovation. Over time this drives a company to being less fun and less successful. Instead of adding rules as we grow, our solution is to increase talent density faster than we increase business complexity. Great people make great judgment calls and few errors, despite ambiguity.
Programming
  • ComposedRegex: Martin Fowler explains how to write more readable regular expressions.
  • Four switch oddities: Eric Lipper explains non-obvious aspects of the switch statement (I did not know any of these).
  • TDD Anti-Patterns: James Carr catalogs the most common misuses of and omissions in Test-Driven Development.
Software
  • AoA Audio Extractor provides you a handy tool to extract audio/sound or background music from video files.
  • Copy Path is a Windows shell extension that adds the ability to copy the path, folder path, or filename within the right click shell extension; works on individual and multiple files and folders.
  • GoOo is another Microsoft Office alternative based on the OpenOffice.org source code; it claims to be fster and slicker.
  • Precision Helper creates and manages help projects; works natively with the Microsoft HTML Help projects format (HHP) and allows to publish resulting help to the CHM, WebHelp, PDF and the single HTML document formats.
  • SmillaEnlarger increases the size of digital images while trying to retain the quality.
  • SpyDLLRemover is the standalone tool to detect and delete spywares from the system.
  • StyleCop analyzes C# source code to enforce a set of style and consistency rules.
  • XMedia Recode is a video converter, which can cut and crop a movie, change the resolution, invert and correct the colors and do more (to change the default German interface to English, use the Optionen - Sprache menu option).
Web developmentWeb tools

Tuesday, August 25, 2009

Sending HTML-based email from .NET applications

Summary: How to use XSL templates to design, build, and test HTML-based email, and avoid common pitfalls in the process.

If you're writing a .NET application that sends HTML-based emails, you have a number of options: you can use .NET Framework's own MailDefinition class, build a custom solution just like Dave did, or use a third party library similar to TemplateEngine by Ader Software. In this post I'll explain how to design, test, and generate complex HTML-based email messages using XSL transformations (XSLT). I'll also explain how to avoid common problems related to HTML-based emails and describe the tools that will help you in doing so.

Before I get to the nitty-gritty, let me briefly summarize the idea. You, a designer (or developer), create an XSLT file that defines an email template. To convert the XSLT template to an HTML message body, you application will load the XSLT file at run time (you will need to make sure that the application has access to the file location) and merge it with the data (data must be formatted as an XML document). The XSLT engine will substitute the placeholders with data and use conditional formatting to generate the HTML markup.

The advantages of using XSLT files for email templates include:
  • No dependency on custom libraries: Everything is built into the .NET Framework.
  • Flexible transformations: XSLT allows rather complex transformations and substitutions. For example, you may not know at design time how many items the message must display, in which case, word-by-word substitution will not work; XSLT handles cases like this nicely.
  • Ease of design and testing: You can build a number of data XML files and use them to test your template without running or debugging the application.
Here are the steps you need to follow:
  1. Define XML structure to hold your data inputs.
    I found it helpful to create static XML files to be used for testing XSLT templates for various combination of inputs. Your sample XML data file may look like this one:

    Newsletter.xml
    <?xml version="1.0" encoding="utf-8" ?>
    <Root>
    <UserName>Mary Sweet</UserName>
    <Message>Lorem ipsum dolor sit amet, consectetur adipiscing elit...</Message>
    <Offers>
    <Offer>Aenean sed nunc nec felis interdum rutrum...</Offer>
    <Offer>Nullam facilisis erat nec dolor tempor sed interdum neque consectetur...</Offer>
    </Offers>
    <UnsubscribeUrl>http://somesite.com/unsubscribe </UnsubscribeUrl>
    </Root>

    You can add sample XML data files to your project so you have them at hand for quick testing once you need to make changes to XSLT files, which you'll create in the next step.
  2. Create XSLT files for HTML-based email templates.
    If your email templates are totally different (say, you use one template for password expiration notices, and another for a weekly newsletter), then you will need to define multiple XSLT files (one for each template), but slight variations in a single template can be handled with the help of XSLT language constructs within the same file. If you end up with more then one XSLT template, I recommend implementing common sections of the message (e.g. header, footer, styles) in separate XSLT files, which you can then include in the final templates. For example here are three shared templates that define common header, footer, and CSS styles:

    Header.xslt
    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template name="Header">
    <!-- If you need common header elements (logo, etc), include them here. -->
    </xsl:template>
    </xsl:stylesheet>

    Footer.xslt
    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template name="Footer">
    <xsl:param name="UnsubscribeUrl"/>
    <p>Best regards,</p>
    
    <p>John Doe, Editor</p>
    
    <!-- Only display message if URL is available -->
    <xsl:if test="string($UnsubscribeUrl) != ''">
    <p>
    <hr/>
    <span class="Footer">
    If you wish to stop receiving this newsletter, please
    <a>
    <xsl:attribute name="href">
    <xsl:value-of select="$UnsubscribeUrl"/>
    </xsl:attribute>unsubscribe</a>.
    </span>
    </p>
    </xsl:if>
    </xsl:template>
    </xsl:stylesheet>

    Style.xslt
    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template name="Style">
    <style type="text/css">
    body { 
    font-family:Verdana; 
    font-size: 10pt; 
    background-color: white; 
    color: black; }
    td {
    font-family:Verdana;
    font-size: 10pt;
    background-color: white; 
    color: black; }
    p {
    margin-top: 8pt; 
    margin-bottom: 8pt; }
    p + p { 
    margin-top: 8pt; 
    margin-bottom: 8pt; 
    }
    <!-- More definitions -->
    </style>
    </xsl:template>
    </xsl:stylesheet>

    Assuming that you place the shared files in the Common subfolder under the main XSLT templates, you can reference them from templates as illustrated in the following example (note: when referencing an external template, use relative path in relation to the caller template):

    Newsletter.xslt
    <?xml version="1.0"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:include href="Common/Style.xslt"/>
    <xsl:include href="Common/Header.xslt"/>
    <xsl:include href="Common/Footer.xslt"/>
    <xsl:output method="html"/>
    <xsl:template match="/">
    <html>
    <head>
    <xsl:call-template name="Style"/>
    </head>
    <body>
    <table>
    <tr>
    <td>
    <xsl:call-template name="Header"/>
    
    <p>Dear <xsl:value-of select="/Root/UserName"/>,</p>
    
    <p><xsl:value-of select="/Root/Message"/></p>
    
    <xsl:if test="/Root/Offers/Offer">
    <p>Here are this week's offers:</p>
    <xsl:for-each select="/Root/Offers/Offer">
    <blockquote>
    <xsl:value-of disable-output-escaping="yes" select="."/>
    </blockquote>
    </xsl:for-each>
    </xsl:if>
    
    <xsl:call-template name="Footer">
    <xsl:with-param name="UnsubscribeUrl" 
    select="/Root/UnsubscribeUrl"/>
    </xsl:call-template>
    </td>
    </tr>
    </table>
    </body>
    </html>
    </xsl:template>
    </xsl:stylesheet>
    Notice how the XSLT markup references data values from the XML document using XPath.
  3. Test XSL transformations.
    Once you got your XSLT templates and sample XML files ready, you can test transformation using Visual Studio (activate XSLT file and select Show XSLT output from the XML menu; on the first attempt you will be prompted to specify the XML file) or other tools. Use different versions of the data XML files to test various permutations of data.
  4. Test HTML-based email in the intended email client programs (web sites).
    Although, your XSLT template may produce perfectly good HTML, there is no guarantee that it will look good in a particular email client. For example, Microsoft Outlook 2007, which uses the Word 2007 HTML rendering engine, does not recognize many of the standard CSS constructs. I learned the hard way that I could not use DIV tags to limit the page width (had to switch to TABLE tags). In the references section at the bottom of the post I included some articles discussing inconsistencies between HTML rendering in various email clients, but they did not help me much (I figured out how to fix formatting issues by trial and error), so the best thing you can do is to check how the mesages appear in various client application (Outlook 2003, Outlook 2007, Thunderbird, Gmail, etc).

    UPDATE: Recommendations given in this step don't seem to work any more, so I now recommend testing using a helper utility I wrote in VBScript. You can ignore the rest of this step.
    For testing email messages, I recommend using the free Mozilla Thunderbird email client. Unlike other email clients, Thunderbird allows pasting unaltered HTML source in the message body, so you can send the message in the exact same format as your program. To send your HTML-based email messages via Thunderbird, do the following:

    • In the program you use to test your template transformations, select the option to view source of the resulting HTML and copy it to the clipboard.
    • Switch to Thunderbird and create a new message.
    • In the message Compose form, click in the body field and select Insert - HTML from the main menu.

    • Insert the HTML markup from the clipboard into the Insert HTML dialog box, and click the Insert button.

  5. Implement code to handle XSL transformations.
    The following example illustrates how a console program loads an XSLT template, merges it with XML document holding data, and uses the resulting HTML as the email body (note: the example does not contain any error handling):

    Program.cs
    using System;
    using System.Xml;
    using System.Xml.Xsl;
    using System.IO;
    using System.Net.Mail;
    
    namespace EmailXsltDemo
    {
    class Program
    {
    static void Main(string[] args)
    {
    // Input data will be defined in this XML document.
    XmlDocument xmlDoc = new XmlDocument();
    
    // We will use XML nodes to define data.
    XmlElement xmlRoot;
    XmlNode xmlNode;
    XmlNode xmlChild;
    
    // XML structure for data inputs (we'll add <Offer> elements later).
    xmlDoc.LoadXml(
    "<?xml version=\"1.0\" encoding=\"utf-8\" ?>" +
    "<Root>" +
    "<UserName/>" +
    "<Message/>" +
    "<Offers/>" +
    "<UnsubscribeUrl/>" +
    "</Root>");
    
    // Set the values of the XML nodes that will be used by XSLT.
    xmlRoot = xmlDoc.DocumentElement;
    
    xmlNode = xmlRoot.SelectSingleNode("/Root/UserName");
    xmlNode.InnerText = "Mary Sweet";
    
    xmlNode = xmlRoot.SelectSingleNode("/Root/Message");
    xmlNode.InnerText = 
    "Lorem ipsum dolor sit amet, consectetur adipiscing elit.";
    
    xmlNode = xmlRoot.SelectSingleNode("/Root/Offers");
    
    // Insert two <Offer> elements and set their values.
    xmlChild = xmlDoc.CreateNode(XmlNodeType.Element, "Offer", null);
    xmlChild.InnerText = 
    "Aenean sed nunc nec felis interdum rutrum vivamus tempor.";
    xmlNode.AppendChild(xmlChild);
    
    xmlChild = xmlDoc.CreateNode(XmlNodeType.Element, "Offer", null);
    xmlChild.InnerText = 
    "Nullam facilisis erat nec dolor tempor sed interdum neque consectetur.";
    xmlNode.AppendChild(xmlChild);
    
    xmlNode = xmlRoot.SelectSingleNode("/Root/UnsubscribeUrl");
    xmlNode.InnerText = 
    "http://somesite.com/newsletter/unsubscribe/?user=1234567890";
    
    // This is our XSL template.
    XslCompiledTransform xslDoc = new XslCompiledTransform();
    xslDoc.Load(@"..\..\Xslt\Newsletter.xslt");
    
    XsltArgumentList xslArgs = new XsltArgumentList();
    StringWriter writer = new StringWriter();
    
    // Merge XSLT document with data XML document 
    // (writer will hold resulted transformation).
    xslDoc.Transform(xmlDoc, xslArgs, writer);
    
    MailMessage email = new MailMessage();
    
    email.From = new MailAddress(<YOUR_FROM_ADDRESS>);
    email.To.Add(<YOUR_TO_ADDRESS>);
    email.Subject = "Demo message";
    email.IsBodyHtml = true;
    email.Body  = writer.ToString();
    
    // Specify appropriate SMTP server, such as "localhost".
    SmtpClient smtp = new SmtpClient(<YOUR_MAIL_SERVER>);
    
    smtp.Send(email); 
    }
    }
    }
For your convenience, I created a sample Visual Studio 2008 project which illustrates the functionality:

Download sample project

Before running the project, make sure that you substitute the YOUR_FROM_ADDRESS, YOUR_TO_ADDRESS, and YOUR_MAIL_SERVER placeholders with the actual string values.

See also:
Can Email Be Responsive?
Some Tips for Email Layout and Responsiveness
HTML Forms in HTML Emails
What kind of language is XSLT?
How to Code HTML Email Newsletters
The Dark Heart of HTML Email
Guide to CSS support in email clients
2007 Office System Tool: Outlook HTML and CSS Validator
Template Messages Using XSL Transformations and XML Serialization
XSL Transformations using ASP.NET
Getting Started with HTML Emails
HTML Email Boilerplate
Rock Solid HTML Emails
Render Email Templates Using Razor Engine

Friday, August 7, 2009

How to optimize web page width

Summary: One approach for optimizing a web page layout to make it look nice on both smaller and bigger screens.

When it comes to web page width, web designers choose between two basic options: fixed width and liquid (AKA dynamic, stretch, etc) width. Either option has a number of pros and cons, but it looks like the fixed width approach is more prevalent. And this irritates the heck out of me! I just hate having to scroll up and down when navigating a web page half of which content is empty. I do not use small computing devices, but I suspect that people, who view fixed width web pages on 10"-screen netbooks, also do not enjoy scrolling left and right.

Fixed layoutLiquid layout

Dynamic web page layouts maximize the use of screen real estate and minimize scrolling, but they have one drawback: many liquid pages look weird on bigger (24"+) monitors. And just as wide-line paragraphs are difficult to read, really wide web pages are difficult to use.

A few years ago, when 15"-19" monitors used to be the norm and the spread between the small and big monitors was not as big, this was not such a big problem. Now, with cheap large (21"+) monitors and small devices (like 10"-screen netbooks) gaining popularity, it is more difficult to optimize a web page for different screen sizes. So how do you design a web page layout to make it look nice on both 10" and 24" screen?

I have an idea, but before I get to it, let me summarize and justify my goals.
  • Goal #1: No wasted space.
    White space is generally good, but only until it starts causing unnecessary hassles. For example, it makes no sense to force the user to scroll vertically on a page with 40% of blank content (on the left and right sides).
  • Goal #2. Reduce scrolling.
    Vertical scrolling is bad, but horizontal scrolling is worse. There should be no need to scroll horizontally when viewing a page on 12"+ screen. Of course, depending on the displayed content, there may be exceptions (e.g. a grid is more likely to require horizontal scrolling than say textual content). Vertical scrolling should be required only when there is no wasted white space.
  • Goal #3: Trim content width when page is too wide.
    Wide page is normally good, but not too wide. There is a threashold, after which each page width increase will reduce its readability.
With these goals in mind, here is my idea:
When designing a web page layout, use liquid (dynamic) width until a certain threashold is reached (the threashold would depend on the type of the page); when the width of the browser window exceeds the value of this threashold, switch the page layout to fixed width.
This approach offers the best of both worlds: it minimizes wasted space and scrolling on small and medium size screens, and it improves page readability on larger screens. It also does not require to resize the browser window on a bigger screen to make the page smaller.

Now, how do you actually implement this layout? I'm not particularly strong in CSS and web design, so I was not even sure if it was possible. Fortunately, it is. The answer came from user PortageMonkey, who responded to my question at StackOverflow. To make it work, you just need to define the maximum width of the container holding your web page content (normally, a <DIV> or <TABLE> element) using the max-width CSS selector. The max-width selector is supported by all major browsers, except IE 6 (and earlier). To make this functionality work on IE 6, use IE dynamic properties to set up the page width, such as in the following example, which limits the width of an element to 600 pixels:

width: expression(document.body.clientWidth > 600 ? "600px": "auto");
Here is the complete example:

<html>
<head>
<style>
div#content
{
  max-width: 600px;
  width: expression(document.body.clientWidth > 600 ? "600px""auto" );
  border: red 1px solid;
}
div#wrapper {width: auto; border: blue 1px solid;}
</style>
</head>
<body>
  <div id="wrapper">
    <div id="content">Lorem ipsum dolor sit amet, consectetur adipiscing elit.[...]</div>
  </div>
</body>
</html>
If you save this page on a local drive and try to open it in IE, you will notice an ActiveX warning that gets displayed because the CSS style section uses the expression property. If you do not allow blocked content, the page will not work as expected. Fortunately, the warning appears only when you try to open local files (via the file:/// protocol), so it should not be an issue.

This is what the content of a page would look like when the width is below the maximum (the inline images are adjusted, so they appear to have the same width, although they are not [compare the text displayed on each line]; to see the original, click the image):

And once you increase the width beyond the threashold, the content will stay within the maximum width boundary:

When using this approach, simply adjust the value of the maximum width to the size that is most appropriate for your application.

See also:
Fixed vs. Fluid vs. Elastic Layout: What’s The Right One For You? by Kayla Knight

Monday, July 13, 2009

Improve HP Compaq laptop performance

Summary: A couple of things that can help improve your HP Compaq performance.

My company-issued laptop (HP Compaq 6910p) has been sluggish lately. The major problem was the login delay: it took 3-5 minutes for the system to become responsive on every login. I recently cleaned up and defragmented the laptop's hard drive and voila: performance has improved. The login response time now takes a fraction of what it used to be.

If you are suffering from a poor computer performance (and it does not have to be HP/Compaq laptop, but can be any brand of laptop or desktop), try defragmenting the system drive. Before you start defragmentation, uninstall the programs that you do not need, and use the Disk Cleanup tool to delete unnecessary files. To launch Disk Cleanup, in Windows Explorer, right-click the system drive (normally, C:), and select Properties from the context menu.


In the General tab, click the Disk Cleanup button to launch disk diagnostics. Once diagnostics is complete (which may take a few minutes), use the options to delete all temporary and unneeded files.

After cleaning up the disk, switch back to the disk Properties dialog box (or re-open it if needed), click the Tools tab, and press the Defragment Now button.


Depending on how badly your hard drive is defragmented, you may need to run the defragmenter 2-5 times to get the best results. It may take a few hours to complete the first pass, but each consecutive run will take less and less time.

Along with defragmenting the system drive, I also uninstalled the HP ProtectTools software (Credential Manager, Embedded Security, etc), which caused me nothing but irritation (since I use other security solutions, I have no need for HP ProtectTools).

If you are using an HP Compaq laptop and want to get rid of HP ProtectTools, you need to uninstall the applications in the following order (you may not have all of these utilities installed, so just remove the ones that you have):
  1. Credential Manager for HP ProtectTools
  2. Java Card Security for ProtectTools
  3. Drive Encryption for HP ProtectTools
  4. Smartcard security for HP ProtectTools
  5. Embedded Security for HP ProtectTools
  6. BIOS Security for HP ProtectTools
  7. HP ProtectTools Security Manager
I’m not sure if removing HP ProtectTools helped improve my system performance, but at least I do not see the "Embedded security was not initialized" pop-up on every login and my system tray is now a bit cleaner.

Saturday, July 11, 2009

Free WinZip alternatives

Summary: Comparison of several free file archivers.

WinZip is a classic file archiving tool. It is a nice utility, but it has a major drawback: it is not free. If your budget for a file archiver is short of $30 (the current price of the cheapest version of WinZip), you can try a number of FREE alternatives, such as:I recently checked these tools looking for the following features:
  • Standard archiving algorithms: the tool must work with archives produced by other archivers, generate archive files that can be opened by other archivers.
  • Encryption: the tools should allow encryption of the new archives and it must be able to decrypt archives generated by other tools.
  • Self-extractor: the tool must be able to generate a self-extracting executable archive file.
  • Filename Unicode support: the tool should correctly handle Unicode characters in file names.
  • Multilingual interface (Russian wanted): not a requirement, but is nice to have.
  • Installer: is also nice to have.
  • Documentation: help file, or at the very least online help, could be handy.
  • Command-line operation: I do not need it now, but being able to compress, update, and decompress files via a command-line interface is a plus.
In short, all of the programs I tried (or considered trying) failed in one or more areas; however, some came closer to my ideal than the others. Before I describe how the tools compared, let me briefly explain my testing strategy.

To test the tools' capabilities, I used a (legally purchased) copy of the Cabo Verde album by Césaria Évora. The album folder contained 13 MP3 tracks. Almost all file names included Portuguese characters. I encrypted the files in the archive using the AES encryption algorithm with a 256-bit key and compared the results with the archive generated by WinZip (I used WinZip v. 12). I tried to open the archive generated by each tool in WinZip and extract a single file from it (the file had to be decrypted). I also tried to open the encrypted WinZip archive in each of the tested tools. I ran the tools on Windows XP SP3. This is what I found.

First, based on the information from Wikipedia and some preliminary test, I determined that some tools on my list did not support Unicode file names. Because these archivers cannot handle Unicode file names, I excluded them from my test (which is unfortunate, since some of these programs looked promising):Among the tools supporting Unicode file names, I still noticed a problem related to Unicode characters. For example, file Cesaria Evora - Mãe Velha (Old Mother).mp3 often appeared normal in the archives opened by the programs that produced it, but its name was corrupted when I opened the same archive in other tools. This is how the archive generated by WinZip appears in WinZip (click to display the original -- bigger -- image):


But look how 7-Zip displays the archive:


Notice the extra folder that appears at the top of the file list. When I expand this folder, I see the file, but the name appears corrupted (letter ã turns into π):


In some tools, Unicode characters appear corrupted only in the GUI, but they were fine in the extracted files; however, most tools -- especially the ones built on the top of the 7-zip compression engine -- actually did corrupt the file names (e.g. name of the file extracted from a WinZip archive in 7-Zip was corrupted). This was a common problem (with slight variations) among the tools.

Now, let me summarize how the tools stacked up for me.

7-Zip (v. 4.65) is considered a classic free file archiver. I've read lots of praises to 7-Zip, but I did not like it. The interface is not intuitive. It took me a while to figure out the workflow which differs from WinZip-like programs. For example, in WinZip you select File - New to create a new archive, to which you can then add files and folders. In 7-Zip, there is no File - New menu: you first need to select files or folders, and then click 7-Zip - Add to archive in the context menu. The purpose of some menu options and features is unclear (for a novice). For example, what's the point of two-panel view? 7-Zip also does not use standard Windows dialog boxes, such as File Open or File Save. Navigation in the file manager is awkward: there are no shortcuts to standard folders, such as Desktop or My Documents. There are many quirks like these. The interface of the program is really outdated. I would probably tolerate 7-Zip after more frequent use, but it is rather irritating for a beginner. On the positive side, 7-Zip is very capable. It can use many archiving algorithms. The interface is available in many languages. Command-line version offers many options. Help file covers available features (especially command-line options) very nicely.


Summary:If you get used to the 7-zip workflow, can tolerate the ugliness of the GUI, and keep in mind the possible issues with Unicode file names in the archives generated by other tools, 7-Zip is worth considering, but I'll pass.

DesktopZip 2008 does not have an installer. It looks simple enough but I quickly dismissed DesktopZip once I realized that it does not support encryption. I did not find an option to encrypt the archive. DesktopZip also did not prompt me for the password/passphrase when I tried to extract an encrypted file from the WinZip archive and promptly failed.


Summary: No encryption - no go.

jZip (v. 1.3.0.67918), which uses the 7-Zip engine, looked nice on the first run. Although the web site claims that jZip is available in multiple languages, I only found an English version. The application UI looks reasonably modern and simple. Basic archiving and dearchiving operations are intuitive, but there are some gaps. When I tried to encrypt the files in the archive, jZip asked me to enter the encryption password (which is expected), but then it asked me to enter the decryption password. This made no sense to me, since in the AES encryption algorithm, which I used, encryption and decryption passwords must be the same. I did not enter the decryption password, and was able to decrypt and extract a file from the jZip archive using jZip and WinZip. Like WinZip, jZip makes it difficult to archive a folder with all its contents (you can archive contents of the folder without the folder info). The program can run from command line, but it does not provide a help file. Development status is unclear. The major problem I encountered in jZip was related to Unicode. For some reason, jZip changed letter ã in the name of the Cesaria Evora - Mãe Velha (Old Mother).mp3 file to a, and it did this with its own archive.


jZip also sneaked a shortcut file Archive created by free jZip.url, which I assume points to the jZip's web site, into the archive. In the spirit of the software trojans, jZip GUI did not show the file in the archive, but I noticed it when I opened the jZip archive in WinZip:


Summary: Sneaky and corruptive - I'll pass.

KGB Archiver (v. 1.2) works as a wizard that lets you perform three operations: compress or decompress archive and change the application settings.


The program offers support for several languages, but not for Russian (and you call yourself KGB Archiver?). Surprisingly, when I opened a WinZip-generated archive in KGB Archiver, it displayed the problematic Cesaria Evora - Mãe Velha (Old Mother).mp3 file correctly; however, KGB Archiver changed the name of this file in its own archive (a'la jZip).


KGB Archiver could not extract files encrypted with a 256-bit AES encryption key from a WinZip archive (it kept popping the Password dialog box even after I submitted the correct password; I assume it would work with legacy WinZip encryption). KGB Archiver cannot create a self-extracting executable archive. Command-line execution is available, but offers just basic options. There is no help file. KGB Archiver does not let you make any changes to an existing archive. I am not sure which encryption algorithm the program uses. The wizard does not provide the back button (to go to the initial screen) and the program closes automatically after performing an operation, which I found a bit irritating.


Summary: Limited capabilities, awkward interface, and shaky handling of Unicode files make KGB Archiver a poor choice.

PeaZip (v. 2.6.2) is another program that uses the 7-Zip engine and therefore suffers from the similar problems with Unicode file names. It's a bit worse, though: when I opened a WinZip archive in PeaZip, it did not show the Cesaria Evora - Mãe Velha (Old Mother).mp3 file at all (it correctly identified 13 objects in the archive -- 12 files and one folder -- but it only displayed 11 files). In its own archive, it showed that it had changed letter ã in the file name to letter a, but when I opened this file in WinZip, the file name appeared correctly (go figure!).


The PeaZip's user interface supports several languages (including Russian), but no matter which language I tried, it seemed confusing. It took me a while to figure out how the interface works, and I'm not sure I got it all. It starts in the Browse mode (showing the file system), but then I clicked the Options button and the screen switched to the Options mode (the Options button transformed to the Browse button). The archive creation operation are relatively straight-forward, but if you want to change the default settings, pay attention to non-obvious clues. For example, to archive a folder, you need to click a down arrow next to the Add file(s) button, and select the Add folder option. When archiving a folder, I did not find any option to show the archived files. PeaZip claims to support creation of self-extracting archives, but I did not try this feature.


I assume that the Layout feature allows making changes in the archive, but I did not understand how to use it. Archiving options support most common capabilities, such as encryption settings, but still, they are a bit confusing (e.g. see the Encryption group: the Encrypt option include None and Content; how bizarre; why not use a simple check box or radio buttons to indicate whether to encrypt contents or not; also once the archive is created without encryption, how do you encrypt it?). PeaZip comes with a PDF help file, but reading a manual to understand how to use an archiver should not be necessary.


Summary: PeaZip has some potential, but in current implementation, it suffers from usability issues and problems related to handling Unicode file names.

SecureZIP Express (12.30.0016) is a free and somewhat limited version of SecureZIP made by PKWare. It looks more professional than most tools in this review. The interface is simple and intuitive with exception of security settings pertaining to certificates, which will probably confuse most users. SecureZIP Express handled Unicode file names in a WinZip archive well, but it corrupted the notorious Cesaria Evora - Mãe Velha (Old Mother).mp3 file name (changed letter ã to letter a). Two other limitations include English-only interface and no support for command-line execution. SecureZIP can create self-extracting archives.


Summary: I really like the SecureZIP interface, but Unicode file name issues tarnish the tool's reputation (if not for the Unicode problem, I would've overlooked lack of language support and no command-line execution).

ZipItFree (v. 2.10) did not have a good start. During installation, it tried to shove the following programs on to my system: My.Freeze Toolbar, Xobni, SmartShopper, WeatherBug, and Zwangi (I declined every one of these). The tool is kind of a pain to use. For example, to create a new archive, I selected an existing file and changed the name, but the tool asked me if I wanted to override the existing file (the file which I selected first). I had to switch folders to clear the file selection or type in the new file name without selecting a file first. ZipItFree offers several skins, but neither of them makes the application look like a typical Windows program. The dialog boxes and other controls in ZipItFree do not behave like standard Windows controls (e.g. Ctrl+A does not select all displayed files). The windows in the dialog boxes are too small and awkward to use. And you need to pay attention to the instructions (e.g. when archiving a folder, I had to drag-and-drop it from one window to another; I first thought that selecting the folder would've been enough). ZipItFree user interface does not support languages other than English, and I did not find any mentioning of command-line execution. On initial run, ZipItFree displayed a small add in the top right corner of the application window, but after I changed the skin, I did not see the ad (not sure if it is permanently gone or will be back). To my surprise, ZipItFree was the only program that did not have any problem with the Unicode file name. It worked with Unicode file names in both the WinZip and its own archive without a hitch. Wow! After so many disappointments, I'm really impressed. Encryption also worked fine between WinZip and ZipItFree. Unfortunately, ZipItFree cannot make a self-extracting archive.


Summary: I hate the controls, such as file navigation windows, in the ZipItFree user interface, but it appears to be the only free program among the ones I tried that does not have any problems with Unicode file names. If Unicode file name support is important for you, and you understand English, and you do not need a command-line interface or a self-extracting archive, ZipItFree may be a decent option. Just be careful during installation and decline each crapware offer that you do not need.

The bottom line
In the world of free archivers, there is no perfection. All tools I tried had problems, but some were worse than others. Nevertheless, you should be able to pick a tool that is more appropriate for your job, preferences, and tolerance level, as long as you understand its limitations.

If you want to add more pros and cons for the tools that I covered or suggest another application, please leave a comment (just make sure that the tool meets my requirements).

UPDATE (9/1/2010): I recently tried WinMount Free Edition and was quite impressed with its performance. While WinMount is not a full-featured compression utility (it lack such capabilities as file encryption and self-extraction), it does a pretty decent job of basic archiving. It even handles Unicode characters in file names correctly, so if you need a basic compression/decompression tool, I highly recommend WinMount.

Monday, July 6, 2009

Technobrief #8

Summary: Recent findings of software, articles, videos, and more.

ArticlesBlogsEnglishGraphicsjQueryProgrammingQuotes
  • From Sphinx - text search The Pirate Bay way by Ted Dziuba:
    "Before Sphinx, the other option for text search was Apache Solr. Solr, whose name-giver understands that vowels are a scarce resource and must be used sparingly, is a server that sits on top of Lucene. Solr is popular with the enterprise crowd, who love its Java. Being a Java program, Solr includes no shortage of technology whose acronyms contain the letters J and X."
Software
  • CodecInstaller detects the installed audio and video codecs, analyzes files to understand which codecs they require, and suggests which codecs need to be installed.
  • Convert AVI to MP4 converts video files from various formats (AVI, DivX, Xvid, WMA, MOV, H.264, MPEG1/MPEG2) to the MP4 (MPEG4) format.
  • GSpot shows information about video and audion codecs used in a media file.
  • DriverBackup! backs up, restores, and removes drivers.
  • JPEG Lossless Rotator rotates JPEG images without re-encoding and loss of quality.
  • MPEG Streamclip video converter plays, cuts, copies, pastes, trims, exports, and converts video files (MPEG, VOB, PS, M2P, MOD,VRO, DAT, MOV, DV, AVI, MP4, TS, M2T, MMV, REC, VID, AUD, AVR, VDR, PVR, TP0, M2V, M1V, MPV, AIFF, M1A, MP2, MPA, AC3, and more).
  • Postbox email client offers an alternative to the popular Outlook and Thunderbird.
  • Roadkil recovers files from disks with physical damage (bad sectors, scratches, etc).
  • Shrink Pic automatically reduces the size of photos sent or uploaded toemail, instant messaging, blogging, and web galleries
  • Svchost Process Analyzer lists all svchost instances and checks the services they contain making it easy to uncover worms and viruses, such as Conficker.
  • Zimbra Desktop is an email, which can syncs Zimbra, Yahoo! Mail and Gmail email, contacts, and calendars.
  • Zortam MP3 Media Studio includes audio file organizer, ID3 tag editor, CD ripper, WAV/MP3 converter, MP3 volume normalizer, lyrics finder, batch lyrics and cover finder, playlist manager, CD burner, and more.
VideosWeb designWeb tools
  • Color Scheme Designer (page examples are really helpful)
  • SpiderOak provides an easy, secure and consolidated free online backup, sync, sharing, access and storage solution for Windows, Mac OS X, and Linux (Ubuntu, Debian & Fedora)
  • Mojo Helpdesk centralizes, assigns and tracks organization requests for customer and tech support, internal tasks management, website maintenance, and so on (free edition offers 3 ticket queues and 2 support accounts)
  • Path 101 provides free career services including personality test, resume analysis, and career advice
  • ProjectLocker offers source control, defect tracking, document management and other services (free account supports 5 users, 500 MB of space, and unlimited number of projects)

Thursday, July 2, 2009

Essential freeware for Windows

Summary: List of my favorite freeware tools and utilities.

The lists of my favorite freeware for regular users and developers have been getting out of hand lately, so until I find a better method, I'll use this post to keep track of the FREE Windows tools and utilities that I consider the best for various tasks.

When assessing the tools, I prefer software that:
  • is totally free: no shareware, not limited to home use (although, home-use restriction is fine in some cases, such as for anti-virus software);
  • works across corporate firewalls (for internet connections);
  • supports Unicode (international character sets);
  • offers multi-lingual interface (mostly interested in Russian);
  • comes with an installer (okay, lack of installer will not kill it, but it's really nice to have).
Here is the list of my favorite freeware:

Media Players

Best Audio Player: AIMP
Pros: highly customizable; clean interface; good sound (with enabled equalizer); no ads; Unicode support; multilingual interface; can be minimized to system tray; rips CD tracks to audio files (including MP3); records streaming audio; converts audio files between different formats (MP3, WAV, OGG, WMA, etc); edits ID3 tags (ID3v1, ID3v2, etc). Cons: slight startup delay; some customization options are confusing.

Best Video Player: Media Player Classic Home Cinema
Pros: comes with internal codecs; plays practically any video format; easy to launch video from a file, folder, or CD/DVD; no ads. Cons: May require some external codecs; codec settings may need to be tweaked on less capable systems; cannot raise volume above 100% (some players allow you to do this); somewhat outdated interface.
Alternatives: Splash Lite (great for playing HD videos; does not hog the system; excellent sound; but free version does not play contents of folders, such as VIDEO_TS); KMPlayer; VLC Media Player (somewhat problematic playback of the VIDEO_TS folders); GOM Player; SMPlayer; PotPlayer (forked from The KMPlayer).

Media Editors

Best Video Editor: Avidemux
Pros: converts between various video formats; instant preview of changes; easy to adjust cropping settings; simple to use filters; color/saturation/brightness adjustment; displays file video/audio encoding data. Cons: two versions of UI (GTK+ and Qt4) are confusing; toolbar buttons do not show tooltips; terse descriptions of available options and settings.
Alternatives: VirtualDub.

Best Video Converter: Format Factory
Pros: supports multiple video formats; easy to use; produces reasonably good quality video; reasonably fast; allows conversion of multiple files. Cons: some options are confusion (not clear how picking one option affects other options, e.g. when cropping video it's not clear whether the aspect ratio will be applied to the cropped video or the original video); it would be nice to have simple editing tools (such as exposure, lighting, etc).
Alternatives: XMedia Recode (easy way to add external audio tracks, subtitles, etc. without re-encoding); Any Video Converter (free version; easy YouTube downloads); WinX Video Converter; MP4Tools (splits and joins MP4 files without re-encoding and loss of quality); MPEG Streamclip (supports trimming and joining videos, but requires you to install QuickTime); Quick Media Converter HD, Kastor - Free Video Converter, Hamster - Free Video Converter; Freemake - Free Video Converter; Video to Video Converter.

Best Audio Editor: Audacity
Pros: many features; easy to use (once you get familiar with the interface); records streaming audio; trims silence; reduces background noise; imports/exports audio files from/to various audio formats; mixes tracks; adds sound effects (bass boost, etc); Unicode support; multilingual interface. Cons: outdated look; does not come with LAME MP3 encoder (must be installed manually); cannot edit MP3 natively (need re-encoding); some menu options are not standard (e.g. Edit - Preferences).
Alternatives: Free MP3 Cutter and Editor (simple tool for basic operations: cut, change mono to stereo/streo to mono, fade in/out).

Best Audio Tag Editor: Mp3Tag
Pros: supports MP3 tags and other metadata (ID3, Vorbis Comments, APE); renames files based on the tag information; supports cover art; works on multiple files; Unicode support; multilingual interface; retrieves metadata from external sources (Amazon, freedb, etc); can convert ID3 tags between different encoding schemes (Unicode, Cyrillic, etc). Cons: populating metadata from external sources is a bit awkward; no control when converting between ID3 encoding schemes (it also changes file name).
Alternatives: MP3Nity (need to try; has adware).

Best Audio Repair Tool: MP3 Diags
Pros: performs diagnostics; corrects problems (wrong song length, etc); can't think of any other tool with the same capabilities. Cons: may be a bit complex for some; confusing interface (where is the Open Folder dialog?); have not been updated in a while.

Best Audio Converter: AIMP 2 Tools (Converter & Recorder)
Pros: supports conversion between multiple audio formats; supports album formats (APE, etc); easy to use; multi-lingual interface. Cons: discontinued.

Codecs

Best Codec Pack: Shark 007
Pros: the only codec pack you need to install. Cons: 64-bit version must be handled (installed/uninstalled) separately; must launch program as Administrator; upgrade requires uninstallation; cannot ninstall from the Add or Remove Programs (must do via the Uninstall button in the application itself); configuration settings can be confusing; installer always installs Bing toolbar.
Alternatives: K-Lite; CCCP.

MP3 Tools

Best MP3 Splitter: mp3DirectCut
Pros: splits, trims, crops audio files; no-destructive cut, copy and paste; automatic track splitting (by timed intervals); keeps ID3 tags. Cons: cannot adjust interval-based auto-cues to fall on to silent pause.
Alternatives: MP3 Cutter and Editor (very simple interface; allows cutting, changing volume, fading in and out, changing from mono to stereo and from stereo to mono; but no Unicode filename support); Wave Editor.

Best MP3 Merger: MP3 Album Maker
Pros: simple operation; reversible merge. Cons: I haven't used it much, so can't think of any.

Best MP3 Volume Normalizer: MP3Gain
Pros: lossless normalization; can be reverted back to the original. Cons: does not support Unicode file names; functionality is a bit confusing; I'm not sure how it handles clipping.

Disk Tools (CD/DVD)

Best DVD/Blu-Ray Ripper/Transcoder: VidCoder
Pros: best tool to convert video disks or folders (VIDEO_TS, BDMV) to video files; supports data compression, re-sizing, and other basic editing features; allows customization of audio tracks and subtitles; automatically detects the correct stream for Blu-Ray media. Cons: does not break copy protection from commercial disks.

Best DVD Ripper: DVD Shrink
Pros: decrypts (breaks copy protection from) many DVDs; removes region code; rips video to an ISO file or VIDEO_TS folder; can compress ripped video to fit on a standard 4.7 GB DVD; allows removing of unnecessary data (audio/video tracks). Cons: cannot decrypt some latest DVDs.
Alternatives: DVD Decrypter (decrypts most DVDs that DVD Shrink cannot); DVDFab HD Decrypter (haven't tried, but seems good); AmoK DVD Shrinker (does not remove copy protection, but claims to "[shrink] DVDs up to one fifth of the original size without any noticeable quality reduction").

Best CD Ripper: fre:ac
Pros: detects album info (song titles, albums, artists, etc); can customize file names based on ID3 tags; writes ID3 tags; built in converter supports many audio formats (MP3, AAC, WMA, Ogg Vorbis, FLAC, and more); full Unicodes support for both ID3 tags file names; multilingual interface.

Best DVD Maker: Windows Movie Maker
Pros: creates videos and slide shows; unlimited video clips and audio tracks; many transition effects; fades video/audio in/out; clips video/audio; brightness adjustment; some video effects; supports H.264 encoded videos (via ffdshow video decoder); video menu (several themes); video chapters; video preview; supports PAL and NTSC; not very resource hungry; built into Windows; easy to learn; useful help and tutorials. Cons: supports limited video formats; does not work with QuickTime (MOV) or Flash (FLV) files; few video improvement features (e.g. no exposure, color correction); few audio adjustment features (e.g. no audio normalization); somewhat crippled Vista version; needs Windows DVD Maker to build DVD menus and burn DVDs (Windows DVD Maker is not available in Windows Vista Basic and Business editions).

Best CD/DVD Burner: ImgBurn
Pros: creates image file (such as ISO) from a disk (CD/DVD); writes image file to disk; verifies disk readability; compares disk to image file; checks quality of drive and media (requires DVDInfoPro); lots of customization option (burn speed, etc). Cons: does not offer a single-step disk copy.
Alternatives: Ashampoo Burning Studio Free 6.76 (also version 2009); BurnAware Free; CDBurnerXP; Exact Audio Copy; InfraRecorder; StarBurn Free.

File Tools

Best File Manager: Cubic Explorer
Pros: multi-tab interface; looks clean out of the box; can copy full file path; quick access to favorite folders via bookmarks; natural sort (e.g. 1.txt, 2.txt, 10.txt); file preview panel; built-in text editor; when renaming a file, extension is not selected; multiple skins; file filtering. Cons: cannot undo (rename, delete, etc); crippled search (cannot search for text in a file); access to remote shares (via UNC path) is slow; does not display folder sizes; limited customization options; have not been updated in a while.
Alternatives: UltraExplorer (took me some effort to customize to my liking); FreeCommander (GUI is a bit too busy); and more.

Best File Search: xSearch
Pros: can run ad hoc when needed (unlike integrated desktop search tools); allows searching for text in files (including Unicode text); multiple text search options; fast search. Cons: no installer.

Best Hex File Editor: HxD Hex Editor
Pros: can load really huge files (tried it on ~1 GB files); extremely fast; low memory footprint. Cons: it would be nice to have pure text view (without hex display).

Best File Compression: ZipItFree
Pros: handles Unicode filenames nicely; password protection; support multiple compression formats; intuitive interface. Cons: non-standard UI elements; no command-line support; cannot create self-extracting executable files; installation program offers a number of crapware; somewhat intrusive ads in the main application window.
Alternatives: WinMount Free Edition (handles Unicode nicely; can mount ZIP files as virtual drives; cannot make self-extracting executables; does not support file encryption); 7-Zip (non-intuitive interface/workflow; ugly UI; problems handling Unicode file names); PeaZip (uses 7-zip engine; confusing interface/workflow; problems handling Unicode file names).

Best File Renamer: Rename Master
Pros: file filtering; preview of results; can use file properties (timestamps, audio tags, image tags, etc); scripts for commonly used renaming options; undo changes; integrated explorer. Cons: GUI is not very polished.
Alternatives: Advanced Renamer, ReNamer; Ken Rename; and more.

Best File Synchronization (automatic sync): DropBox
Pros: 2 GB of free space (+ more via referrals); automatic backups; handles corporate firewalls; tracks file changes. Cons: cannot delete old file revisions; works only with one parent folder; does not seem to work with auto-proxy configuration scripts (need to explicitly define proxy URL).
Alternatives: Syncplicity (2 GB of free space; can complement DropBox; manages standard folders, such as My Documents; can customize what get synced); SpiderOak (2 GB of free space); SugarSync (5 GB of free space).

Best File Synchronization (manual sync): Microsoft SyncToy
Pros: It just works. Cons: None.
Alternatives: FreeFileSync.

Best Online Backup: Mozy
Pros: 2 GB of free space; automatic backups; uses encryption. Cons: can't say if there are any.
Alternatives: iDrive (2 GB of free space; similar to Mozy); Zoolz Home (free space is only offered via promotions, but if you manage to find one, you may be able to get 100 GB of storage for free).

Best File Eraser: Eraser
Pros: simple interface; Windows shell integration. Cons: none.
Alternatives: CyberShredder.

Best Virtual Drive Mounter: Virtual CloneDrive
Pros: supports various image file formats (ISO, BIN, ZIP); supports Unicode file names; Windows shell integration; does not require a reboot; can make compressed (ZIP) files; can decompress compressed (ZIP) files. Cons: does not mount compressed archive [ZIP] files.
Alternatives: Gizmo Drive (does not like Unicode characters in file names); MagicISO Virtual CD/DVD-ROM; Total Mounter; StarBurn Free; Pismo File Mount; ISODisk; WinCDEmu; WinMount Free Edition (free edition has severe file size limitations).

Best Photo Duplicate Finder: Awesome Photo Dupliate Finder
Pros: easy to use; fast.

Best Media Thumbnail Generator: Media Preview
Pros: it works.

Graphics and Photo Tools

Best Vector Graphics Editor: Inkscape
Pros: clean interface. Cons: manual does not load; used the program very few times, so can't say much.

Best Image Editor: GIMP
Pros: feature rich; bit editor; editable text layers; photo enhancing. Cons: non-standard menu options; some operations are non-intuitive and/or more complex than they should be.
Alternatives: Paint.NET (does not support editable text layers); PixBuilder Studio.

Best Photo Editor: Picasa
Pros: easy-to use; great for most basic photo enhancing operations; includes photo organizer; collage maker. Cons: some basic tasks, like cropping to certain size or aspect ratio or changing size, require more work than they should.
Alternatives: Photoscape (includes screen capture utility; allows batch editing and renaming; and more); virtualStudio (has a few nice touches; red-eye correction needs improvement); IrfanView (free for personal use only); PhotoFiltre; RealWorld Paint; JPEGView.

Best Photo Cropper: JPEGCrops
Pros: extremely easy to crop for preset sizes (such as 4x6); preview; lossless cropping; batch mode. Cons: none.

Best Photo Resizer: Fotosizer
Pros: simple resizing process for popular formats; batch operation; can lock aspect ratio. Cons: none.
Alternatives: Image Resizer (part of Microsoft PowerToys for Windows XP); Photo Magician (will install bloatware if you select the options during installation).

Best Screen Capture: Gadwin PrintScreen 4.4
Pros: easy to use, no-frills program; can capture mouse cursor. Cons: no built-in image editor; no annotation capability; does not detect non-rectangular or shaded windows' borders; development work on free version has stopped.

Best Graphics Editing Plugins: Google Nik Collection
Pros: professional grade tools; work with Photoshop, Lightroom, and Apreture. Cons: looks like Google is abandoning this offering.

Office and Business Apps

Best Office Suite: OpenOffice
Pros: supports Microsoft Office 2007 formats; multi-lingual interface; traditional toolbar (no ribbon); extensions. Cons: not as feature-rich as Microsoft Office; interface is somewhat outdated.
Alternatives: LibreOffice and IBM Lotus Symphony are based on OpenOffice.org source code, but are reported to be better; SoftMaker Office 2006; GoOo (based on OpenOffice, but claims to run faster); Kingsoft Office Suite.

Best Text Editor: Notepad++
Pros: supports Unicode; multi-lingual interface; built-in spell checker; syntax highlighting (for many programming languages); ability to run external tools (for example, when editing a VBScript file, you can execute it directly from the editor); search and replace options (supports regular expressions); text bookmarking; line numbering; multi-document interface; option to set as default text editor; loads huge files fast. Cons: some problems with regular expression-based search and replace.
Alternatives: PSPad (seem to be abandoned; chokes when loading really big files); Q10 (minimalist, full-screen, spell checker, and more).

PDF Tools

Best PDF Reader: Nitro PDF Reader
Pros: fast; light; fills and saves forms; exports text an images; adds content to PDF files; allows typing over PDF documents. Cons: more editing capabilities would be nice; some protected PDF forms (e.g. U.S. Government naturalization forms) fail to open (probably via a custom script).
Alternatives: PDF-XChange Viewer; Expert PDF Reader.

Best PDF Reader (for PDF forms): FoxIt Secure PDF Reader
Pros: allows saving of PDF forms with entered data when Acrobat Reader does not allow it; open documents that other reader fail (e.g. U.S. Government naturalization forms). Cons: does not support typing over PDF text.
Alternatives: Nuance PDF Reader (requires email and registration).

Best PDF Writer: Primo PDF
Pros: converts many file formats to PDF; works as a printer driver; can append and merge PDF documents; works in remote desktop (over terminal session). Cons: text quality of the converted PDF file may be worse than original.
Alternatives: doPDF (does not work in remote desktop).

Best PDF Tool: PDFill PDF Tools
Pros: Can merge, split, reorder, rotate, crop, and do more with PDF files. Cons: Outdated interface.
Alternatives: PDF Split and Merge; PDF Rider; PDForsell.

Language Tools

Best Dictionary: Lingoes
Pros: Dictionary, glossary, and more; translates to/from many languages; pronounces words. Cons: plugin for PDF files does not work with Adobe Acrobat Reader (but it works with FREE PDF-XChange Viewer).
Alternatives: 1-Click Answers; WordWeb.

Security Tools

Best Anti-Virus: Microsoft Security Essentials
Pros: native integration with Windows; light, yet capable; multi-lingual interface (based on the language of the operating system); automatic updates; resident execution. Cons: initial scan takes too long; not as effective as some alternatives (according to some reports).
Alternatives: Avast! Home Edition (if not for the need to re-register it every year, Avast! would be my best choice); AVG Anti-Virus Free Edition; Avira AntiVir Personal.

Best Password Manager: LastPass
Pros: web-based (no need to sync data between multiple computers); integrated with Firefox and IE; form auto-fill; grouping; search; support for custom properties; can import data from other apps (Firefox, KeePass Password Safe, etc); can export data. Cons: occasional connectivity errors in Firefox (when connection is fine); interface could be more polished; problem logging on to my Live/Bing cashback account (I have several Live/Bing accounts and something just did not work; I had to switch from Firefox to IE and not use LastPass).
Alternatives: KeePass Password Safe (for multi-computer synchronization, it can be used along with file synchronization tools).

Best Disk Encryption: TrueCrypt
Pros: treats a virtual partition (encrypted file) as a disk; works with flash (USB) drives; can encrypt full or part of a disk. Cons: cannot auto-grow encrypted partition; need to read instructions to understand how to encrypt removable disks (such as flash drives).

Desktop Tools

Best Screen Saver: Analogy
Pros: fascinating; elegant; simple; shows current time. Cons: none.

Best Screen Saver Disabler: Caffeine
Pros: temporarily disables screen safer (e.g. when watching videos). Cons: no installer.

Best Clipboard Manager: Ditto
Pros: keeps track of text and image-based clipboard entries; allows pasting plain text with one key press; single step to access clipboard history menu; permanent items; under active development. Cons: none.
Alternatives: ArsClip; ClipX (may require a hack); xNeat Clipboard Manager (supports text only); CLCL (hasn't been updated in a while).

Best Taskbar Sorter: Taskbar Shuffle
Pros: supports drag-and-drop; light-weight. Cons: none.

Best Task Manager: SystemExplorer
Pros: displays full paths of the running processes; shows command-line parameters; checks suspicious processes against the VirusTotal database; passes process information to Process Library; shows network connection information (which processes are connected to which addresses over UDP or TCP/IP); displays startup data (which applications are loaded at start-up); displays list of open files and file owners (which process holds open handle to which file); displays loaded DLLs and their host processes (press CTRL+F and enter the name of a DLL in the SystemExplorer Search window); can export info from every tab; can be configured as a default task manager. Cons: when configured as default task manager, cannot start Windows Task Manager; cannot show threads per process; Performance window shows a single graph for multi-CPU systems; controls in the Performance window do not get resized correctly.
Alternatives: AnVir Task Manager Free (shows prompts when new applications are added to Windows startup); Process Explorer.

Best Program Launcher: Launchy
Pros: automatically detects new applications; small footprint; clean interface; plugins; skins. Cons: defining catalog filters is a bit confusing.

Best Sticky Notes: Stickies
Pros: elegant by default; appear on desktop; can auto hide; transparency effects; rich-text support; hyperlink support. Cons: none.
Alternatives: Sticky Notes.

Best Volume Control: MKN VolWheel
Pros: controls volume via mouse wheel. Cons: no option to mute/unmute; spotty Windows 7 support (sometimes works, sometimes does not).
Alternatives: Volume2; Volumouse.

Best Desktop Organizer: HideDesktop
Pros: hides all icons on desktop when desktop is not in focus. Cons: no installer.
Alternatives: AutoHideDesktopIcons.

Communication and Collaboration Tools

Best Chat Application: Google Talk
Pros: minimalist (in a good sense); uses Google account info; takes fewer resources than other apps (such as Skype); informs about incoming Gmail messages; can transfer files; works across corporate firewalls; multi-lingual interface. Cons: none.
Alternatives: Meebo (web-based, Firefox add-on, and Windows app versions; supports AIM, Yahoo!, Google Talk, MSN, ICQ, and other protocols; consolidates all chat applications and account in one; clean interface).

Best Video Chat Application: Skype
Pros: everybody is using it; works well; user discovery. Cons: annoying sounds (always need to disable); runs at startup by default (always need to disable).
Alternatives: Google Video Chat; Microsoft Messenger.

Best Desktop Sharing Tool: Team Viewer
Pros: easy set up; can run on-demand; authorization is based on session secret (session ID and password); works on Vista; auto-update. Cons: none.
Alternatives: Ammyy Admin; Microsoft SharedView (per Privacy Statement: "This Service may only be used within the United States of America"); Adobe ConnectNow (web-based; no installation; organizer must have an Adobe account, participants do not; max of 2 participants + organizer).

Internet Tools

Best RSS Reader: Feedly (web-based)
Pros: web-based (stays in sync across multiple computers); quick preview of unread posts; nice interface; mark as favorite. Cons: no integrated search.
Alternatives: FeedDemon (some people swear by it); The Old Reader (outdated interface).

Best FTP Client: FireFTP (Firefox add-on)
Pros: light-weight; works across corporate proxy servers; easy to set up. Cons: requires Firefox.
Alternatives: FileZilla; net2ftp (web-based).

Best Podcast Receiver: Juice
Pros: automatically downloads podcast audio files; easy to set up; multi-lingual interface. Cons: cannot be minimized on startup; development work seems to be halted.

Developer's Tools

Best .NET Decompiler: ILSpy
Pros: works as promised. Cons: No installer.
Alternatives: dotPeek.

Best Java Decompiler: JD-GUI
Pros: works as promised.

If you have suggestions for applications or categories, please leave a comment.

See also:
Scott Hanselman's 2014 Ultimate Developer and Power Users Tool List for Windows
LifeHacker: Windows APP Directory
Gizmo's Freeware Editors' Choice List