Monthly Archives: August 2011

cocoacontrols: DCRoundSwitch for iOS: DCRoundSwitch is designed to be a drop in replacement for UISwitch. It is … – http://bit.ly/pdSfZN

cocoacontrols: DCRoundSwitch for iOS: DCRoundSwitch is designed to be a drop in replacement for UISwitch. It is … – bit.ly/pdSfZN

Invisible Scrollbars

In Lion, Apple has replaced the regular old scrollbars with iOS-like scrollbars. Most of the time, they’re invisible. This means that you’re missing out on some information you used to see. Most importantly, it’s not always obvious if you can scroll at all.

Jon Whipple proposes adding a small «compass» to each window, indicating what direction you can scroll in. This would solve the problem, but as John Gruber notes, «an abstract indicator — no matter how small and unobtrusive — is still another layer of abstraction.»

Fortunately, if you’re developing software for the Mac and want to fix this problem for your users without showing scrollbars at all times,1 it’s pretty easy to do so. Look at how a Pages window looks in Lion:

Even though there are no scrollbars, the page borders allow you to see that you can scroll.

This doesn’t just work for windows that contain individual pages; if you’re willing to sacrifice a few pixels of your window content, you can add this affordance to any window.

Here’s how this might look in the Finder. First, a Finder window where everything is visible, and scrolling isn’t possible.2


(Large Version)

And now a window where some content is hidden and can be accessed by scrolling.


(Large Version)

This won’t work well in all applications, and it doesn’t solve all problems. But it does solve the most important one: it makes it clear whether there’s more content hidden beyond the window border.

James Russell offers a similar solution.

Given the drawbacks of the current situation, I’m wondering whether it would have been better for Apple to do something along the lines of what Ubuntu is doing, rather than just moving the iOS scrollbars to the Mac. Apparently, the new Ubuntu scrollbars did well in user tests.


  1. Why not just show them all the time? That would work. But given that Apple has essentially deprecated scrollbars, your application will soon look «old», compared to apps that don’t show the scrollbars. back

  2. In this particular case, it might be better to expand the «page» to the scrollable area’s border, so people understand that they can drag icons to the whole window, and not just to the «page» area. back

If you require a short url to link to this article, please use ignco.de/400

designed_for_use_small

If you liked this, you’ll love my book. It’s called Designed for Use: Create Usable Interfaces for Applications and the Web. In it, I cover the whole design process, from user research and sketching to usability tests and A/B testing. But I don’t just explain techniques, I also talk about concepts like discoverability, when and how to use animations, what we can learn from video games, and much more.

You can find out more about it (and order it directly, printed or as a DRM-free ebook) on the Pragmatic Programmers website.

Lifehacker Pack for Mac: Our List of the Best Free Mac Downloads [Downloads]

Looking for a few great, free apps to beef up your Mac? We’ve got you covered with our annual Lifehacker Pack for Mac. Here are the best OS X downloads for better productivity, communication, media management, and more. More »







How Should I File an Effective Complaint Against a Large Company? [Ask Lifehacker]

Dear Lifehacker, More »







Deserializing ReCaptcha JSON with C#

Turning a ReCaptcha request into a strongly-typed C# object on the fly

When requesting a ReCaptcha image, you send out this request:

www.google.com/recaptcha/api/challenge?k=your_public_key

You then receive this in return:

var RecaptchaState = {
    site : 'your_public_key',
    challenge : 'returned_challenge_key',
    is_incorrect : false,
    programming_error : '',
    error_message : '',
    server : 'http://www.google.com/recaptcha/api/',
    timeout : 18000
};

document.write('<scr'+'ipt type="text/javascript"
    s'+'rc="' + RecaptchaState.server + 'js/recaptcha.js">
    </scr'+'ipt>');

Looking at that, you can pull the information you need into this object:

[Serializable]
public class ReCaptchaState
{
    [DataMember]
    public string site { get; set; }

    [DataMember]
    public string challenge { get; set; }

    [DataMember]
    public bool is_correct { get; set; }

    [DataMember]
    public string programming_error { get; set; }

    [DataMember]
    public string error_message { get; set; }

    [DataMember]
    public string server { get; set; }

    [DataMember]
    public int timeout { get; set; }
}

By using this code:

WebClient client = new WebClient();
string ret = client.DownloadString(google_url);
int start = ret.IndexOf('{');
int length = ret.IndexOf('}') - start + 1;
string json = ret.Substring(start, length);

ReCaptchaState state = new JavaScriptSerializer()
    .Deserialize<ReCaptchaState>(json);

Now you have a ReCaptchaState .net object you can use the values from; simple.

Hipmunk

The first thing I do when booking a flight is turn to airfare aggregator Hipmunk. Hipmunk is a site that, like other fare aggregators, uses your starting destination, final destination, and a range of dates to determine the lowest available fare amongst competing airlines.

Though Hipmunk is the newcomer to the fare aggregating scene, it has quickly become my favorite (I still rely on and recommend Kayak as it is useful for making comparisons). Specifically, Hipmunk’s site designers have perfected the art of limiting the information on screen to the essentials: flight times, length of layovers, number of connecting flights, and, of course, price, and presenting it in a way that is easy to make sense of and read.
hipmunk capture.jpg
The UI is built so that you can quickly organize and deduce not only the cheapest flight, but also a happy balance between cost and ease of travel (for example, they rank flights by “agony”). Their site, unlike Kayak, sees fairly frequent updates and it was recently improved with the incorporation of built-in tabs; a subtle killer feature that allows you to compare a wide range of dates and airports without having to overwhelm your browser.

Unfortunately for us consumers, the airlines quickly realized that the transparency of their pricing system wasn’t necessarily helping their bottom line. What that means is that you won’t find all the airlines on either Hipmunk or Kayak (Jetblue, Southwest, Virgin, and Spirit are a few airlines that require the use of a proprietary site).

Furthermore, there is a limit to what sites like this can do. They haven’t been all that effective during peak travel times, or for last minute flights. I find that it’s also good to remind myself that spending hours and hours looking for cheaper fares quickly passes the point of diminishing returns.

Looking for cheap airfares is never going to be a particularly pleasant experience, but Hipmunk has, for me at least, made it bearable.

— Oliver Hulland

[Note: Both Hipmunk and Kayak now have iOS apps that are good, but not quite as flexible as the website. In a pinch they are highly recommended.--OH]

Hipmunk
hipmunk.com

WP Like Button Plugin by Free WordPress Templates