Skip to navigation

Malevolent Design Weblog

Wii Fit First Impressions

For me, the concept of exercise brings all sorts of gruesome images to mind:

The horror… the horror…

I’ve got some kind of deep-seated aversion to the idea of dedicated exercise time/clothing/equipment. It all seems rather unnatural, particularly when practised by people who drive even short distances and avoid stairs like the plague.

But I have to regularly stretch and move around to prevent myself from seizing up in front of the computer, was intrigued to see what Nintendo have produced, and my girlfriend might want to use it, so I bought Wii Fit last week.

Three things were immediately clear:

  1. They’ve done a good job of making it easy to use.
  2. As well as being a licence to print money in itself, it’s going to further boost Wii sales and there’s a big opportunity to cash in with extra software.
  3. Although the board just measures pressure at four corners, Nintendo’s found clever ways to make the most of that limited data in the various activities.

Slalom gameSome of the games are genuinely fun and challenging (e.g. the slalom and ski jump), and exercises are presented clearly (any struggles are due to my rubbish coordination). The board’s pretty sturdy and supposedly can cope with 23st, although I’m not sure I’d jump about on a piece of plastic if I was that heavy.

There are a few downsides:

  • It suffers from the frustrating ‘menuphilia’ that also afflicts Wii Sports and the Wii’s main menu, with lots of unnecessary screens and button presses. However, it’s not as bad as Mario & Sonic at the Olympic Games (which has more menu than game).
  • The cutesy presentation and muzak are a bit much at times but hey, it’s the Wii.
  • It’s expensive (70 quid here in the UK).
  • I think it really needs a mode where you specify how much time you have and it automatically goes through a selection of activities to fill it, ideally with no button presses needed.

Overall it’s a decent product though, and can only tighten Nintendo’s grip on the family market (have Microsoft and Sony given up on that audience?). Right, where did I leave my leg warmers and day-glo headband…

Filed under: Games and Multimedia, Hardware, Offline, Reviews, Software


Must… Avoid… Cache/Caching Pun…

Uncontroversially, I reckon most dynamic web sites/apps need some form of caching to reuse work done by the server. Without it, the LOLinator wouldn’t have coped with its peak traffic (it’s on dirt-cheap shared hosting and barely flinched), and most blogs need it to avoid keeling over at the first sniff of a link from a popular site.

You can introduce caches in numerous ways:

Opcode Caching
If you’re using PHP it’s worth installing something like APC or XCache to avoid scripts being compiled from scratch for every request. They work transparently with only a small memory overhead and occasional stability issues.
Query Caching
You can store the results of popular queries either by using the database server’s built-in features or via the application/framework’s database layer. The problem is, the app still has to process and display the data, and the cache has to expire when there are updates, so it may not always make a noticeable difference.
Object Caching
At a slightly higher level, you can cache the data structures used by your application rather than just the raw query results. An object might be assembled from several queries so it can make sense to avoid repeating that process.
Page Caching
Reusing the entire web page gives the biggest performance increase and can even be handled by a dedicated layer (e.g via Apache’s mod_cache or a Squid server) so that your app isn’t even executed for most requests. However, if you need fine control over expiry or the ability to exclude certain content then indiscriminate caching may not be viable.
Selective Page Caching
By giving the application some control you can let it decide which pages get stored and for how long. For example, ZenMagick won’t cache a page if the customer is logged in or has something in their basket. You lose performance by having to run some application logic, but still get big gains from caching popular pages.
Page Fragment Caching
If part of each page differs between requests (e.g. to display the user’s own details), but other areas remain the same and involve significant processing, then it can make sense to cache selected portions of markup. The app will still need to sort out the non-cached areas and assemble the various pieces, and expiry may be more complex, but it can reduce querying and processing enough to prove worthwhile.

Frameworks such as Rails, Django and ASP.NET offer most or all of the above as options, and you can often choose between using files or memory. In my own framework I’ve implemented selective page caching with support for conditional GET, plus fragment caching for extra flexibility. It’s only file-based at the moment, but adding memcached support would be easy (apart from wildcard expiry).

I know many developers are wary of spending time on these things and would rather someone quietly threw more hardware at any performance problems, but caching should be seen as a core feature of any site that may attract non-trivial traffic. For existing sites, start by applying measures to the home page and work from there to target other popular or slow pages, it’s usually quite easy to pick off a few problem areas.

Filed under: Hints and Tips, Server-side Coding, Web


Quizzical

One of the fascinating things about the response to the Programming Language Inventor or Serial Killer? quiz (oddly still getting 10,000 visitors a day after all these years) is the way people seem determined to read something into it.

I’ve heard from academics who wanted to use it to demonstrate that you can learn a lot from appearances, and others demonstrating how appearances are deceptive. It’s been used to highlight the power of intuition, and to rubbish it. People have complained that the geeks are too obviously harmless-looking, whereas others have accused me of being anti-geek by making them look like serial killers. One person claimed it perpetuated the press’s policy of deliberately picking creepy-looking photos of killers, another said it was disgraceful that such monsters should be made to look so normal.

Anyway, inspired by Mr. Silver, here’s a preview of a topical new version called Filesystem Inventor and Murderer?. I’m concerned that it might be a bit too easy and limited though..?

Filesystem Inventor and Murderer?

Filed under: Daftness, Games and Multimedia


Making Buttons ‘Bobble’

The Green Apple’s graphical buttons/links move up a pixel on rollover, and down when pressed, so that everything bobbles about when you mouse around the page.

Things like the navigation bar use background images and alter their positions to achieve this effect, but for form buttons and images you can apply class="button" and use this CSS:

.button
{
  padding:1px 0 1px 0;
}
.button:hover, .button:focus
{
  padding:0 0 2px 0;
}
.button:active
{
  padding:2px 0 0 0;
}

Older browsers (including IE6) simply won’t show any movement.

Filed under: Client-side Coding, Design, Hints and Tips, Web


Interchangeable Form Elements

(Some of you will roll your eyes at how obvious this is, but it’s something novice web developers may find useful)

Most types of form element are easily interchangeable, letting you alter the user interface without touching the server-side code receiving the data. For example, let’s say you have a form where the user can optionally make a donation using a text field:

£<input type="text" name="donation" value="" />

If you decide you’d rather offer a set range of options, you could switch to a select list:

<select name="donation">
<option value="" selected="selected">None</option>
<option value="5">£5</option>
<option value="10">£10</option>
<option value="20">£20</option>
</select>

or some radio buttons:

<input type="radio" name="donation" id="donation0" value="" checked="checked" />
<label for="donation0">None</label><br />
<input type="radio" name="donation" id="donation5" value="5" />
<label for="donation5">£5</label><br />
<input type="radio" name="donation" id="donation10" value="10" />
<label for="donation10">£10</label><br />
<input type="radio" name="donation" id="donation20" value="20" />
<label for="donation20">£20</label>

Or if there’s no donation scheme any more and you don’t want to bother the user about it:

<input type="hidden" name="donation" value="" />

All four of those approaches will happily work and the server-side code won’t care what interface elements are used. You should always ensure suitable server-side validation is in place if the values are critical, but in many cases it won’t matter if, for example, a curious/mischievous user submits a value you haven’t included in your select list.

Filed under: Client-side Coding, Hints and Tips, Web


Mid-April Link Dump

I think I might switch to posting links gradually via Twitter once this site’s redesign goes live…

Eurovision Song Contest 1977 talkback
Running a live event is all about keeping your cool when things start to go wrong…
Dark Horse Presents
It pains me to link to MySpace, but some of the comics are worth the shame and humiliation.
Acts as ASP.NET (a Rails Plugin)
A bit of a cheap shot, but this April Fool does highlight some of the reasons why some ASP.NET developers are abandoning Microsoft’s standard way of using it (or abandoning .NET altogether).
Super Mario in 14kB Javascript
Glitchy in various browsers, but clever work nevertheless.
Star Wars comes to Holyhead as Darth Vader strikes back in Jedi’s back garden
If George Lucas had grown up in Holyhead, Star Wars probably would’ve featured a binbag-wearing, crutch-wielding Darth Vader in the first place.
Best Story Ever
A few good ones in the comments.
Predator Rap
Yep, it’s the entire ’80s classic in six and a half minutes.
Oklahoma Leaks Tens of Thousands of Social Security Numbers, Other Sensitive Data
When the entire query is in the URL, does it go so far beyond standard SQL injection that we need another term?
Rethinking business cards
Cards are all about initial contact, so it’s more important for them to be interesting than solidly covered with every possible method of reaching you.

Filed under: Client-side Coding, Daftness, Film and DVD, Games and Multimedia, Marketing and Advertising, News and Current Affairs, Offline, Security and Privacy, Server-side Coding, Timewasters, Web


Other recent entries

15th Apr 2008 Missing Scrollbars In Mac Firefox 3
An obscure but irritating quirk.
9th Apr 2008 A Shinier, Tastier Green Apple
An eco-friendly ecommerce redesign.
7th Apr 2008 Web Design: Surprisingly Static
I’m partly relieved, partly disappointed.
25th Mar 2008 Late-March Link Dump
Replies, URLs, comments, security, sci-fi, SPF and caching.
10th Mar 2008 The Dark Art of LOLspeak
With great power comes great responsibility.
7th Mar 2008 Early-March Link Dump
Zombies, information, layouts, maps, pi and more.

Search the archive or browse by date/category