We have a number of network devices at play in my household.
I have my work machines. My wife has her laptop. My kids have their PCs.
Family and friends that comes to visit connect their iPhones and laptops to our 802.11g/n.
We have shared media that we play on devices like the Xbox 360 and PCs over protocols like uPnP, DAAP and SMB. We have shared files, such as financial info, that we need to access from any machine, all while confident that they remain as secure as we want them to be.
We do VPNing from remote locations like coffee shops to access files and media. We have a shared printer.
To optimize this situation without leaving my power guzzling pig of a PC on around the clock (I’ve setup and torn down a number of home servers over the years, all the ways back to a FreeBSD-based device in the mid-90s that also doubled as a firewall), a while back I bought a Synology DS-106j NAS unit and dropped it on the network, deciding on it after looking at some Windows Home Server products, finding them overpriced and uncompelling (not least because of concern about licensing and DRM BS.)
One of the selling points of this ~$200 unit (to which you add whatever 3.5” hard drive fits your fancy) was the gigabit network port. To me that implied that it must be capable of at least keeping a 100Mbps pipe saturated with goodness.
I also liked that it gently sipped power (13W or so with the hard drive), allaying any guilty about leaving it on around the clock.
The Synology unit is fantastic in many ways.
It has a fantastic interface. It is rock solid (zero downtime with it) and is very feature rich, with several free “firmware” updates since I purchased it adding a number of new features and interface improvements. It is easy to setup and use, and to a superficial degree secure. It comes with great desktop software for common tasks like backing up (and versioning) files on your Windows machines. You can offload torrent downloading to it if you’re into that sort of thing.
But the hardware seems to be underpowered. The 200Mhz MPC8241 CPU that powers it can’t deliver on the extensive feature list, in my opinion.
The 1Gbps network port turned out to be brave talk that it couldn’t back up with action. Normal SMB/CIFS (the protocol that Windows utilizes to access network file shares) averaged about 2.5MB/second throughput with the device, which factoring in overhead is around 22Mbps, leaving plenty of headroom before it hit the limits of even a lowly 100Mbps network.
I got it up to 8MB/second or so by turning off all of the features like media sharing, and then disabling all security on the share and enabling guest access – it seems that access control security significantly adds to the computational burden – but that isn’t a viable day-to-day option so I had to revert and it was back to 2.5MB/second. FTP was a little better, but was still way below expectations given that the same hard drive got a rough 40MB/second from a direct-attached USB 2 enclosure.
Given that I am now downloading from the web at large at 1.1MB/second, this seemed silly. As we’ve started to amass monstrous AVCHD video files of a GB or more from the home video camera (the latest GB or so features my youngest son herding some chickens that had escaped from their pen at a local farmhouse), it was getting unsustainable.
Synology is now selling a purportedly faster unit, but given that I saw much lower real-world speeds than what they graph for the old unit, and their new unit really doesn’t do that much better anyways, it didn’t compel me to upgrade. Many competitive low end home NAS devices have reportedly similar performance in the wild.
And it isn’t just waiting while moving large files or having SyncBack jobs run. Navigating the music directory from a uPnP client made it obvious that the slowness impacted all activities, with basic operations having intolerable delays. Attaching to its network shares from client PCs inexplicably had multi-second waits before responding.
Then again, I’m the guy who thinks that the biggest crisis in the electronics world is the excessive lag before DVD players will eject a disc, so maybe I’m an outlier, but it seemed like a pretty big weakness of what would otherwise be a great product.
It really bothers me when units doing tens or hundreds or thousands of millions of operations per second take perversely long times to do simple things.
On the bright side, the small dimensions of the enclosure made it easy to find it a home, but it also had the S.M.A.R.T. monitoring of the hard drive complaining about borderline heat incessantly. And the printer sharing never worked properly, but given the endless variety of printers I won’t blame that on the NAS unit.
So I decided that it’s time to replace the device, with the following criteria for its successor.
Local RAID isn’t important to me, as availability isn’t a primary consideration (and multiple drives go contrary to power conservation / heat reduction goals, and generally increase maintenance.) Every file that is on the unit always exists on at least one other drive on a separate system, so if the drive died I could quickly rebuild and repopulate and life would be grand again. And it is vastly more likely that two drives in one unit would catastrophically fail than it is that two drives in physically separated devices would fail, especially when the separation between can be thousands of kilometres.
Nor do I want this to function as a media station, which I consider an entirely different function, with an entirely different requirements list. I don’t need or want HDMI output, blu-ray decoding computational power, 3D offloading, a MAME box, or anything of that sort. That’s a different project, with a different set of goals.
After looking at the available market options of targeted NAS devices, and hardware solutions like Shuttle computers, I decided to have a little fun and build my own (in the minimalist stick-some-lego-like pieces together way that is "building" a PC), so I grabbed a couple of components.
<$200 for the “NAS enclosure” part, then $127 for a good hard drive with room to grow. Pretty inexpensive, and would probably even make a decent internet appliance, which presumably is the intended use of the motherboard/CPU combo.
Putting it together was a snap, with dutiful oversight from my children, followed by a quick flash to the latest BIOS release.
I installed Ubuntu 8.10 Server from a USB stick (I considered installing FreeNAS, but decided that I wanted something a bit more custom), after which I discovered that the hard drive wasn’t set to bootable and the system wouldn’t boot without the USB key, so I had to boot with the key and use parted to manually set the sda device to the boot device, after which the USB key was no longer necessary.
Installation complete, I stashed it away, sans keyboard or mouse or monitor connection (which it makes no complaints about, happily existing without head, keys or mouse), and access since has been via putty. A magical source and destination of media and files, out of sight and hopefully usually out of mind.
I installed Samba (during the OS install by choosing the file server option), created the users and groups and perms, added some shares, and started accessing it from my workstation. It was all very easy and straightforward, including even setting up AppArmor to enforce mode against the Samba services, adding a small additional guarantee of security.
I started the first file move, ready to witness some low-cost awesomeness.
11MB / second to write to it, averaged out over the copy of a GB sized video file. I got about the same speed reading back from it.
Pretty good compared to 2.5MB/second (and now I had much better security granularity than I had before, on a much more versatile platform), but not quite what I was expecting. Awesomeness not witnessed.
The hard drive isn’t the fastest of the bunch, but it’s still very decent.
I’m far from an expert when it comes to Linux (or more generally Unix) systems, seemingly achieving some small level of localized expertise at intervals in my career, but then the solutions simply work and I don’t have to touch them again, so the knowledge rusts and each time I return I feel like I'm a Linux virgin (who would have ever thought that Linux and virgin would used in the same sentence?) It is similar to my proficiencies with Perl or the equally obtuse Powershell, where I put together very decent solutions, but then several months later look in disbelief that I actually wrote the code that now looks foreign.
Nonetheless, I quickly determined that the network adapter was auto-negotiating itself incorrectly to 100Mbps, and 11MB/second is about the max you could achieve over such a link.
After a quick bit of searching, I added ethtool -s eth0
speed 1000 duplex full autoneg off to my interfaces file
(after validating that it worked at the command line). It was now
at full 1Gbps glory.
So I performed the file test again.
47MB / second to write to it. 55MB / second to read back from it.
Sweet! That isn’t that far off of local storage, and is entirely with the acceptable zone. It was achieved on a $200 host device. File sharing is hardly the most demanding application nowadays, but I was happy to get something much more usable.
Just to take a side trail here for a moment, I just wanted to mention that Linux, and the evolution and progress of it and related projects, really is amazing. It is astounding that such a solution evolved the way it did. Even people who don’t think they benefit from it regularly use devices run on the OS. The amount of functionality and technology available, including the source so you can roll your own, truly is remarkable. Linux didn’t start this movement, and projects like FreeBSD, sendmail and prior initiatives blazed a successful trail before Linux really took off, but it is the most evident element of that development model.
Back to setting up the homebrew NAS, virtually every step of the way I had to consult the wizard, Mr. Google, but at least the answer was usually only a page 1 or 2 hit away (though Google Groups has taken a perilous dive into close-to-uselessness, and proved of little use.)
To this point I still haven’t had luck finding a good uPnP server for the device. uShare simply didn’t work. Mediatomb inexplicably doesn’t work with the xbox360, and even if it did the fact that its anonymous web user interface has the default behaviour of exposing your entire file system makes me question the wisdom of the developers.
Various other projects didn’t fit the bill or didn’t work for me, and most seemed to have been abandoned.
I thought I’d try the MythTV backend, as it is purported to double as an uPnP AV mediaserver, to find that it bizarrely needs an X server running and an X client on the other end just to perform the setup. I decided to purge it from the system to find it wouldn’t uninstall due to /dev/.static/dev being mounted read only. I found a workaround involving stopping and starting udev, which remounted it as read/write, but at that point the damage was apparently done, and it refused to gracefully leave the system.
So I went MythTV huntin’, committing a moronic error in the process (it tried hard to warn me, but I persisted in my foolishness.) I’ll let the putty log speak to it.
dennis@mediaserver:/var/lib/dpkg$ sudo killall
mythbackend
dennis@mediaserver:/var/lib/dpkg$ whereis mythbackend
mythbackend: /usr/bin/mythbackend
dennis@mediaserver:/var/lib/dpkg$ cd /usr/bin
dennis@mediaserver:/usr/bin$ cd mythbackend
-bash: cd: mythbackend: Not a directory
dennis@mediaserver:/usr/bin$ rm -R *
rm: remove write-protected regular file `['? ^C
dennis@mediaserver:/usr/bin$ sudo rm -R *
dennis@mediaserver:/usr/bin$ ls
Installing everything once was so much fun that I decided to do it again!
So I reinstalled again. The second time around it was a very quick process (even with a nuked /usr/bin I still had a chance to backup customized config files to a client box before reinstalling, so I really didn’t lose much.)
Power wise, I’ve gone from ~13W for the DS-106j, to 35W to 40W for the new device (measured with a Kill-A-Watt. Handy device.) This represents a pretty big move in the wrong direction, but it wasn’t unexpected. 4-8W or so could likely be saved going to a more efficient, fanless power supply. That’ll be a future experiment. The Caviar Green, at 3-4W, isn’t much more power hungry than an SSD, so that wouldn’t make a huge difference. The motherboard and its chipset is the real piggy of this farmyard.
Alas, in return for the extra power consumption I now have a vastly more interesting network device, serving files at a much more usable pace.
So my first adventure is beginning the work on a .NET-based uPnP server, ensuring that it works on Mono along the way. Thus far it has been nothing but remarkable success, and it still astounds me seeing fairly complex .NET applications running well on a Linux box. The thing really, really works!
Coding Horror is an entertaining, sometimes even educational blog. Be careful diving in headfirst, though, as the technical depth is generally so shallow you'll be hitting the bottom before you've even broken through the surface tension.
It's always a danger — in the nerdly get-some-unkind-emails way — to question it. It has quite an army of loyal fans who, I presume, have had their ego carefully stroked over the years into loyal defensiveness ("Yes you are a top notch programmer! Yes you are!"): Any prior time I've disagreed with Jeff on here has resulted in a flurry of emails that are the text equivalent of the infamous Chris Crocker video.
Yet Jeff's latest entry has me unable to contain myself.
In that post, Jeff opines that Windows 7 might just be worth a look because, he says, in the latest outing Microsoft has taken to changing the visible parts of the OS, instead of, I guess, just improving the underlying awesomeness. The example Jeff draws from is that the calculator has visually changed, whereas before it was just the underlying mechanics of calculation that saw awe-inspiring improvements, all while gaggles of ungrateful goons continued to hurl insults at Microsoft, unaware of the great gift they had been handed. That Microsoft has decided to enlighten us to the great improvements they've made by visually making change apparent, instead of just doing their magic in secret.
As a newsgroup troll might say, errrrr...wut?!?!?!
What planet has Jeff been living on? What spaceship did he just hop off of, interstellar cruise of the Outer Gamagia quadrant completed, that leads him to be so completely out of touch with reality?
Here on planet Earth, Vista was seen as largely being about changing the UI — much like XP before it — and many of the complaints were that the actual utility of the OS suffered (even basic operations like moving files seemed to have missed being QA'd, slowing to a paralyzing crawl under completely ordinary uses). Functionality got lost under layers of paint, and interfaces seemed to be changed for the sake of change.
To many, Vista was 99% visual changes and 1% detrimental functional changes. But at least it brought the unwashed masses a calc.exe that had shaded buttons and a translucent title bar!
Conversely, a lot of the excitement about Windows 7, relative to Vista, is that it fixes stuff "under the hood" (better, strong, faster.)
But I'm no Vista basher, and actually believe that much of the anti-Vista vitriol is undeserved and unfounded. While I was on the record saying that it would be a product failure because it was wrongly focused and had little that compelled people to desire it, I'm actually somewhat of a fan of the OS, insofar as the comparison is with XP. Vista even has some very cool features under the hood, such as TxF, though that's the sort of structural change that isn't really useful until applications start using it, but they won't use it until it is available in a good percentage of deployed PCs.
Back to Jeff's entry, the ridiculous example of the accessory calculator being an example of...anything...really strikes me as absurd, and it seems to be the sort of "try to draw some big observation from some small example" space filler you end up resorting to when you're trying to hit a schedule.
To add to the march of absurdity, Jeff links to a ridiculous post by the occasionally interesting Raymond Chen.
In Raymond's post we hear about how tough it is for poor Microsoft (sidenote: what's with the bizarre victim complex that many Microsoft employees develop?) You see, prior to Windows 2000 someone at Microsoft made the choice that when you use a calculator in Windows, you really want to enjoy IEEE floating point rounding errors in all of your results, because the people that developed calc.exe — which would literally be a 8 hour project for an intern..you don't even need to make an installer — decided to take the laziest route possible, implementing it in the most naive way available. Raymond goes on the defensive, telling us that those critics just don't understanding floating-point. Not really, Raymond. They just don't understand how Microsoft could have ever thought that it was a reasonable decision for a calculator app to use and suffer from, versus the decimal math of virtually every other calculator app.
So Microsoft swapped out the embarrassing calculation "engine" of calc.exe (Jeff got the timing of the change seriously wrong. It wasn't between XP and Vista. It was before Windows 2000), put in the bignum-style implementation that should have been there from day one, and people were supposed to send them flowers or something? You ungrateful sons of...
Anyways, Windows 7 will invariably make a big impact, so I do plan on taking a look at it soon. But I'm certainly not motivated because calc.exe got some minor changes.
Saw the news today that the Russian version of Firefox was dumping Google, switching to a Russian search engine called Yandex. This caught my eye as recently I've been contemplating how the industry would react to Microsoft taking over, effectively, the sponsorship of the Firefox project.
For those unaware, the Mozilla foundation gets almost 90% of its income — used to pay developers, run servers, do marketing, and so on — from Google: $75 million dollars in 2007 (along with some chump change from Yahoo and Amazon). This isn't an act of charity, though, and for its payment Google gets default start page space, is the default search provider, and of course gets attributed with a lot of goodwill throughout the industry for helping to keep the project alive and robust.
Now that Google is strongly pushing their own browser, however, the relationship isn't quite as solid. Shortly before Chrome's release the contract was extended through to 2011 — probably by some concerned players that wanted to stop any NIHism from undoing what they had achieved — but that's just two measly years and will pass before most people realize.
The Russian deal seems to be one sign that the Mozilla foundation is soberly planning ahead.
And while they're considering who might step in if Google decides to bow out, they might look towards the most unlikely partner of all: Microsoft.
Increasingly Microsoft has been embracing Firefox as a platform, with various divisions working towards more than just locking you into Windows (which has perverted the cause of many Microsoft products for years, destroying potential greatness). Given the relatively pathetic progress of Internet Explorer, I'd go so far as to say that they've put more work into pulling Firefox into the fold than they have improving their own browser.
It's chump change for Microsoft (despite all of the doom and gloom stories about Microsoft, the reality is that they are still disgustingly profitable), it would buy them a tremendous amount of goodwill, it would give their ignored Live Search (haven't they abandoned the whole Live thing yet? I'm waiting for the next wave of inane branding synergies from that marketing midget) some attention, and it would give them a voice on the project that is most likely to continue to enrich and improve the web. Yet it wouldn't give then undue influence or control on this project, which we know because even Google was held away from the reigns of power (which presumably is why they wanted to let Mozilla use their ball while they went and bought another ball and built their own court.)
While so-called “ISVs” (small software shops, often staffed by just the founding programmer) have largely disappeared from the Windows platform, pushed out by Microsoft’s total dominance of most IT spend alongside a widespread consumer mentality that software should always be free — whether in the libre sense ala open source, or the more prevalent gratis sense of free in the form of piracy (often justified with bizarre logic that goes something like “I paid $499 for this PC! I’m not paying more for software!”) — other lucrative opportunities have opened up for entrepreneurial developers.
Alternative platforms like cell phones (the iPhone, Google’s Android, or the more scattered but numerous Java ME targets) and game machines (such as the Xbox 360) have provided tremendous new opportunities with limited barriers to entry. Vendor online stores and fair revenue sharing splits have made selling your product easier and more rewarding than ever before.
On the Mac the independent software market remains very robust, with a consumer base that is willing to spend for software that enhances their quality of life in some way.
They’ve gotten larger (but lighter and more energy efficient), have faster response rates and better quality, with color range and contrast ratios seeing great improvements, all while remarkably coming down in price. Large-screen displays with 1920x1080 pixels are becoming commonplace in media rooms, even during the downturn.
The displays in our living rooms are capable of displaying the best of
converging digital media. The division between the “home computer” and the home
entertainment systems (a split that began when computers started demanding
better displays, a need which saw the Commodore 64 and later generations leave
the family room to take up accommodations in the home office) has dissolved.
Over a short span JavaScript has gone from being unloved and despised, begrudgingly used only out of necessity, to being widely exploited as a language that, while deceptively simple on the surface, is incredibly rich and succulent when you look just a little deeper.
Even long time practitioners of JavaScript regularly discover new functionality they never realized was there.
The increased focus on JavaScript, and the growing richness of the web, kicked off a skirmish between a variety of projects and vendors, with a horse race between the Mozilla project, Webkit (primarily in its Safari instantiation), Opera, and the upstart Google Chrome browser. JavaScript performance in some of these latest generation offerings can even rival native code in isolated scenarios, which is extraordinary for such a high-level, dynamic language long identified as a performance pig.
It’s now worthy of serious consideration whether to use one of the JavaScript runtimes (such as V8, Tamarin, or Tracemonkey) as an engine for projects having nothing to do with the client-side web.
Not all is roses with JavaScript, though. The drive towards ECMAScript 4.0 AKA
JavaScript 2.0; representing a pretty dramatic shift in the language; hit some
serious road blocks this year, eventually smashing off the road and exploding
into mangled bits.
It’s a little fuzzy where JavaScript is heading in the coming years, but at least it’ll do it in an impressive number of iterations per second.
Microsoft reduced the price and improved the interface and functionality. They diversified the marketing and game catalog to cater to more than just teenaged first-person shooter fanatics. For a unit that is now over 3 years old (with hardware that was probably spec’d out even a year earlier) it shows few age wrinkles, with very decent graphics at ultra-high resolutions, only occasional suffering frame rate slowdowns.
While it’s worth the price for gaming-fu alone, the 360 also doubles as a viable media extender (especially when coupled with a UPnP host like TVersity running on a PC somewhere else on the network). After bouts using full PC media boxes in the home theater setup, with the many time-thieving downsides they bring, I’m very happy to replace all of that with a simple Xbox 360 (playing streamed internet radio, Divx/Xvid, home movies on the networked NAS, YouTube clips, and so on.) With the 1080p connection and the horsepower to decode most anything without glitches, it’s a strong link in the media chain.
The marketplace functionality offers up easy access to a wide range of gaming and entertainment options, including the ability to queue up movies, shows and games on the unit or even on their online site from other devices, making them available on your 360 surprisingly quickly (I’ve queued up movies for the kids on my PC to find them available on the unit mere minutes later, seemingly exceeding the capacity of my cable connection.)
US owners with a Netflix subscription also get instant streaming of a wide range of movies.
With a decent motion sensing controller — which apparently is coming soon via a new controller codenamed “Newton”, though that could simply be more internet lies gaining truth through repeated assertion — the 360 would be uncontested.
Complaints are few, but the unit isn’t perfect.
It has a taste for polycarbonate, for instance, viciously destroying discs if you happen to move the unit at all while it’s on and endlessly spinning the disc.
[SUPER PRO TIP: After my GTA IV got eaten during a foolhardy move of a powered-on unit, the game would no longer launch but instead would freeze up the device. I never got around to replacing it, though I did discover that Rockstar Games does offer replacement media if you ship your old media to them along with $7.50. After the new NXE interface was released a few months back, with its newly offered install-to-disc functionality, out of curiosity I rented GTA IV from a local video and game store, installed it to the hard drive, and then returned it. From then on the game plays perfectly with my now defective disc in the drive. Presumably the sectors it checks to validate ownership are all still fine, and as another benefit I no longer have to listen to the optical disc noise whenever the unit is on, which is a huge improvement regardless.]
The “HD” movies available for rent online are decidedly not HD, at least not comparable to blu-ray or the defunct HD-DVD format. This isn’t surprising given that they clock in at about 4 to 6GB, versus the 30GB or so for many really high definition movies, both options using the latest codecs. They also offer a mediocre 24 hour view window from first play for rented/downloaded videos, and prices that seem a bit excessive (HD rentals come in at around $8 here in Canada, versus the $5.49 to rent from a video store, and the latter option gives me much more liberal usage times). Media embargos mean that a lot of movies simply aren’t available to Canadian users.
Computing power has gotten incredible. Quad-core CPUs, giant caches, ultra fast memory, arrays of massive storage devices. The storage front in particular holds incredible promise now that we’re adding SSDs to the mix. Here’s a pretty neat little product for a DIY SSD, in this case multiplexing 6 SDHC cards for much faster access. Get 6 of those (each with 6 SDHC cards), put them in a RAID10 array…you’d have absurd speed levels for about $800 for an array with 288GB of usable space. Sure that isn’t a lot of space, but it’s enough space for most reporting or OLTP databases, and you’d be enjoying 360MB/second or so read speeds and 60MB/second write speeds or better, coupled with almost instant access times.
Some inefficient-for-processing-but-good-for-development practices and technologies are becoming more tenable with the surfeit of computing power we have available to us.
While it also made a showing in the Best of 2008, available computing power is still underpowered for video tasks. Once you start editing and rendering 1080p videos from the growingly common HD video cameras, and the speed of storage, the speed of memory, the speed of processors (even though video processing is one of the most capable and willing of using quad-core CPUs…it still isn’t enough)…all of it leaves a lot to be desired and makes it a less than pleasant, time consuming experience. An add-in MPEG4 compression coprocessor might be a good choice (my HD video camera has it, this tiny device doing real-time AVCHD compression, AVCHD being a variant of MPEG4, squashing to 17Mbps of video and audio info).
The video codec world is a mess. If I want to convert from AVCHD to a Divx AVI, why is any transcoding necessary at all (which always reduces quality)? Both are MPEG4 codecs. In fact, virtually every top-tier codec now is just a pretty face and quasi-unique wrapper around MPEG4, albeit usually with just enough secret sauce to screw it all up. So why not just standardize on one wrapper? It seems to be incompatibility for the sake of incompatibility. [EDIT: Ben noted in the comments that I was quite wrong here. Turns out that MPEG4 is a bit of a hodge podge of codecs, and Divx shares little in common with AVC. From now on I’ll be encoding home video clips to x.264]
The movies are too expensive. The benefits are too few. While the under-featured players (which seldom offer now common DVD functionality like Divx/MP4 playback, USB media playback, etc) are finally dropping in price, it’s still only a good option if you have a reliable source of rentable blu-ray discs (services like Netflix or Zip.ca, for instance, or a well-stocked local video store.) If you buy discs you have the irritant of likely not being able to play them in the family minivan, the kids’ computer, your laptop, and so on, which is one of the major downsides of blu-ray.
The opportunity window for a new optical disc format is closing quickly given the growing interest and utilization in internet and proprietary cable system delivery (VOD from your cable company, watching downloaded or streamed movies on your Xbox 360, iTunes movie downloads, etc).
Locally, this year’s boxing day consumptionfest featured a bevy of blu-ray player sales, and it is a sign of the times that many of them still have large numbers of units left. Strangely the lack of competition with HD-DVD has left a lot of people uninterested in the genre as a whole, which is quite contrary to many predictions that predicted a blu-ray euphoria once the competition was settled.
It’s a bit surprising that blu-ray discs carry a price premium: They’re harder to rip (though the idea that they are uncrackable has proven untrue), and the outcome is a massive file that is difficult to duplicate on media — unless you want to put it on a burnable blu-ray disc that costs more than buying the movie new, or seriously degrade the quality which would sort of miss the point of ripping from a high definition source (no codec Divx magic here. The codecs used on most blu-ray discs are the cutting edge) — or online. I would expect the media groups to heavily push blu-ray, at no price penalty, purely to try to head off piracy with a more unwieldy format.
Chrome could be the world’s greatest browser and I still wouldn’t like it. Thankfully it isn’t the best browser by a long shot, so I don’t have to rationalize that conflict too far. Aside from a mostly theoretical process isolation model (which seems to have little real-world benefit, as many users find Chrome to be one of the most catastrophically crashy browsers of the bunch), Chrome offers little to justify choosing it. The V8 JavaScript engine would have been a winner if it came out 6 months earlier, but it turns out that Google was far from alone in working to speed up JavaScript.
The reason I grief about Chrome is because it has no reason to exist. The only viable reasons why Google felt the need to make their own browser are decidedly not good for the internet at large. Google owning and controlling a browser brings the same worries and concerns that Microsoft controlling a browser does.
Google makes their money selling ads. It concerns me having an advertising company running a browser project, even if they do provide a related-but-not-quite-the-same source tree as if that makes everything okay.
It bothers me even more that Google’s advertising initiatives have completely focused on subverting the Firefox userbase, cannibalizing a credible alternative to Internet Explorer that was finally becoming mainstream. I’m not entirely sure what Google’s motives are with this plan, but there is no way they can color this as Google the Good And Benevolent. It’s either an insidious end game playing out, or it’s some insular, egotistical developers at Google who just had to control things themselves, not content to work with the existing browser projects when they can stand tall and scream “We’re Google damnit! We’re super smart!”
Many of the problems people encounter with “Firefox “(purported memory bloat and CPU saturation) are Flash related.
On my three-year-old son’s low-end PC — a Pentium IV 1.7Ghz with 1GB (anemic but not that bad) — many of the great online children games sites (such as CBC, NickJr, PBS, TVOntario), which are largely built around Flash, slog to an unusable crawl in Firefox, yet they run with gusto in IE on the same PC. This is odd given that the overwhelming bulk of computation in both cases occur entirely within the Flash environment (the browser essentially acting as a thin wrapper, and I can't imagine the basic communication between environments is so onerous that it could account for the difference), so hypothetically there should be complete equivalency between the browsers.
The #1 problem many users have using Linux-based boxes to browse the tubes are Flash related. This is becoming more critical as more and more Linux-based NetBooks hit the market.
Memory leaks. Sluggishness. Crashes. Flash is quite often the source.
Flash brings a tremendous amount of richness to the web. Without it those game
sites really couldn’t exist (I exclude Java and ActiveX given their serious
problems, not to mention that Flash is purpose suited for exactly these sorts of
projects), and of course it is now the foundation for most every video site.
Adobe even donated the Tamarin project to the Mozilla project, though it didn’t
turn out being the win it should have been given that Tamarin is largely focused
on the DoA JavaScript 2.
Adobe really needs to fix this player. It has become foundational to the web.
This browser is so incredibly terrible that I have think that all of the MS developers that launched IE to greatness between versions 4 to 6 must have gone on twenty-year sabbaticals with their then-lucrative stock options. This browser is terrible in every way, and unless there is some tremendous forward momentum in the final sprint, it is completely unjustifiable as a browser choice, not even ranking among the top tier browsers (which include Firefox, Safari, Opera, and to a lesser extent Chrome). Using IE 8 would be like using Netware to run your network today, simply because it once was a good choice.
The Wii has a lot going for it.
It has a great range of family friendly games, built in wireless connectivity, and unarguably innovative controls. It has a large catalog of games, and is easy to use with a low complexity barrier to entry.
It has been the definite winner of the next generation console wars, even though Nintendo brought the last generation to the fight.
I want to love the Wii.
But I don’t.
Many Wii games seem to utilize the motion sensing controls in the most gimmicky way possible, featuring shallow gameplay that seems more like a quickly hacked together technology demo than a serious offering.
Even where you aren’t forced to flail around with the control to do rudimentary actions, you quickly find that philosophically many Wii games insist upon “balance”, kicking you in the nads when you’re ahead, giving you a firm push when you’re behind.
Maybe there’s something cultural about that. But when I’m trying to crush my children’s contest hopes with my Mario Kart awesomeness, teaching them a life lesson about competitiveness, it’s a bit flummoxing to continually get knocked down while they get an endless series of speedups.
My five year daughter easily dominates my long-time-bowler father-in-law in Wii bowling, with seemingly random movements yielding amazingly strings of strikes.
Then there are the often unavoidable text bubbles that assault the player in the hundreds, making an unwanted appearance in many Wii games (particularly those sourced from Japan. This seems to be something that Japanese games have relied upon heavily going back to the Phantasy Star / Zelda days). Going past these asinine play obstacles is incredibly irritating, at least for me. Half the game play, it seems, is the challenge of maintaining sanity and an interest in the game after clicking through a hundred sparse text bubbles full of unnecessary and uninteresting filler text.
While the motion sensing element of the controllers are arguably best of this generation (using standard Bluetooth making them theoretically usable on other devices like the PC), the other hardware of the Wii is seriously outdated: Basically last generation’s Gamecube with a paintjob. The SDTV output is underwhelming, offering so little definition that it’s painful to play split-screen multiplayer, which is a waste given that many of these units are hooked up to sets capable of at least 1280x720, often even 1920x1080.
As one of the early buyers of the Wii, and the target demographic given that my family features three young children, I can’t help but express some disappointment in the unit. I really don’t understand how it still manages to get the attention it does, still existing in a honeymoon while people stock up on hardware and games they’ll never actually play.
[Sidenote: Got the kids Wii Music for Christmas to discover it’s more of the same formula. It’s a mile wide and one inch deep. Yet again it seems like a technology demo dressed up as a pretend game]
While it’s expected that the sophistication of comments on a site like YouTube will lie somewhere around the intellectual level of head-injured drunk, there remained the hope that other sites might feature a more intelligent contributor. When some major Canadian newspapers added comments, I looked forward to a presumed onslaught of interesting and thought provoking contributions. Instead I was disheartened by the complete lack of political sophistication, the partisan political team cheerleading, the sophistry, the endless logical fallacies, the idiocy…all of it has reduced my opinion of mankind. I can only hope that it is a grossly unrepresentative demographic that feels the need to post their thoughts on newspaper sites.
When did lying become so acceptable and commonplace? When did people feel so justified in descending to lies so long as it gets hits?
The Internet has always been home to a large number of hoaxes and exaggerations, but this year saw truth and reality suffering a serious beat down, and it only looks to be getting worse.
Some lies made their presence known via the blogger’s tale of extraordinary interaction with some larger than life caricature (which a gullible readership ate up because it confirmed their own simplified worldview, biases or bigotry.) Honestly, goatse with a chaser of tubgirl was less offensive than some of the obviously manufactured fiction being paraded as truth nowadays.
Lies also appeared with frequency on “citizen journalism” sites, where there’s a strong incentive to egregiously misrepresent or misreport, zooming to top the social sites with the most extravagant and inflammatory story possible. A recent example — only one of an endless stream of alike cases — would be the FDA’s decision that the many benefits of eating fish are so compelling that they outweighed the small potential risks of mercury, so they considered revising their existing recommendations that encouraged avoidance, switching to one that was more moderate, in the same way that exercise is generally recommended even though you might get hit by a car or a stray asteroid. Along came the “citizen journalism” sites simply discarding the kernel of truth, instead declaring that the FDA decided that mercury is “safe” (presumably at the behest of their Mega Mercury Corporation masters).
No nuances or fuzzy grays that require a moment of thought are desired when there’s a crowd to enrage into voting you up and forwarding the story on to others. For all of Fox News’ many, many, many faults, they have a brother in citizen journalism on the net.
Lies also grew via the viral videos that have been saturating the net, with that seemingly no-cost amateur video more likely being an expensive production of a Lying for a Living viral video manufacturer. Lie it up, and afterwards everyone can have a big laugh about it and cheer on your product.
So much content is undeclared fiction now that it’s a bit of a cry wolf story playing out. Many readers have become so jaded they simply believe nothing that they can’t witness directly themselves. You don’t even need to “look at the pixels” anymore: If it’s getting a lot of attention, it’s probably made up from a blogger’s imagination, a gross misrepresentation that has little correlation with reality, or a viral video that somehow is going to get some company attention.
Yeah, there’s a sex toy on the side table of your real estate picture — ha ha ha. Enjoy the PageRank your little hoax earned as every social media site plays right into your devious plans with links, a gullible public all thinking they caught you in a hilarious blunder instead of the planned out web strategy you’re pursuing. Another variation is the "super duper terrible site...let’s all point and laugh", when the only ones that should be laughing are the people fooling you.
True stories have little impact in an environment of gross exaggerations or manufactured tales and caricatures.
It didn’t take a psychic to see the dangers of the bubble economy (though many who pronounced some caution now hilarious see themselves as economic seers). Madoff is getting a lot of press for his apparent ponzi scheme, yet in many ways the whole market is one giant ponzi scheme. While people often like to talk about the “true value” of things (homes, oil, resources, etc), the true value is often whatever the market is willing to bear at the moment — whatever the prevailing mindset is — which is a situation naturally prone to booms and busts. Hopefully the downside of the bust is flushed out quickly and we can begin the next round of financial chicken.
I hope the public at large becomes a lot less gullible. Extraordinary claims demand extraordinary proof.
I hope Google abandons the Chrome project, as they have abandoned many other misadventures before. Already the adoption has been mediocre, despite widespread launch press and a strong push by Google.
I hope upstream bandwidth starts opening up. It’s great that I have 10Mbps downstream virtually around the clock, but when I want to send a 10GB home video to a relative (yup, people actually do make their own content sometimes. It isn’t all about P2P sharing of pirated material), suddenly that 0.5Mbps upstream looks rather anemic. A lot of potential uses for the internet are being choked off by the widespread limiting of upstream bandwidth.
I hope SSDs continue to increase in speed and drop in price, and the operating system makers such as Microsoft properly adapt to this storage mechanism (for instance a paging file is not a good idea on flash devices. Personally I think they aren’t a good idea at all on any modern PC). Unlike a hard drive that generally has but one head mechanism, the potential multiplexing within SSDs is virtually unlimited, so the speed potential is virtually boundless.
I hope social link sites move towards more enlightened, individually focused algorithms, moving away from groupthink and herd behavior.
I hope disparate devices and appliances continue to gain capabilities and marketshare, and a robust third-party development community is encouraged and supported for each (and not just in the "create free stuff for our product so we can sell more and make more money, suckers" way, but in a mature model that allows for monetization by partners — even the tiny uISV — bringing value to the product and rewards to the creators).
I decided to take the new SunSpider benchmarks for a spin, generating the pretty graphs found down below. Benchmarks are always entertaining, and it was enjoyable comparing the numbers yielded under various conditions (turning SpeedStep on and off [none of the benchmarks loaded the CPU long enough for it to bother raising up from its lowered power, 66% performance relaxation state], setting CPU affinity, running it on different PCs, trying different build options on my Firefox build, etc.)
"Why benchmark at all?" one might ask. Simple: If you find the right measures, the common wisdom goes, the inputs to the measure will improve as the various players work to improve the metrics.
Whether you’re measuring bugs per developer, lines-of-code, widgets per hour…whatever: Start measuring it and invariably it’ll start moving in the desired direction, whether this actually serves your end goal or not. Often such initiatives come at the cost of the unmeasured, but over time it adapts and starts serving as a beneficial feedback.
During the
summer in my late teens I worked on an assembly line building car
parts (pieces that played some sort of role in the air conditioning
system – basically widgets): Put a little bracket in a metal
cylinder, add a circle of fiberglass, inject some desiccant beads
using a machine, add another fiberglass circle and another metal
bracket to hold it all in place and then put it in another machine
that squashed another cylinder onto the top. Then I sent it down
the line to the welder.
Atop my machine sat a little counter that monitored my progress, carefully recording every piece assembled. While this was a less advanced era — being the prehistoric early 90s and all — and I had to manually transfer the final count to my timecard for submission, every worker was kept somewhat honest by the metrics submitted by the other workers on the line.
Clearly I couldn’t have done 2000 parts in a day if the people before me and behind me in line only reported 1000, for instance, and vice versa.
Coupled with continuous, careful QA tests and random inspections (performed by people who had their own metrics to work towards), this struck me as an excellent system because it was difficult or impossible to game, and the onerous checks ensured that it didn’t come at the expense of quality.
It certainly worked wonders on me, as I wiled away the endless summer days performing the most awesomely brainlessness of tasks by competing with my own personal productivity “records”, trying to push out more quality parts per hour day after day.
I was there and had nothing better to do, and that little counter sat looking down on me, mocking me. It dared me to do just a couple more pieces per hour, and I willingly complied.
Somewhere a paper pusher and cackling middle manager would sum up the part counts and rub their hands together in giddy glee, eager for my zombie-state quest for worth to pad their bonus cheques.
It’s good I was a summer employee, because my pace didn’t make me friends on the line.
Test Driven Development tries to create a similar spirit of metrics, giving you a goal to strive for as you build out your product. It’s a comforting bit of feedback when all of the TDD tests come back with green checkmarks. The more tests you create, the higher the absolute count of passes you can brag about when the product sails through with flying colors, easily passing 497 of the 497 tests.
Performance benchmarks serve the same purpose for the performance and efficiency domain.
Consider the initial hardware-accelerating video cards for Windows. Early on they seemed to have little or no purpose, and were almost abstract to users. Then benchmarks started appearing, giving the manufacturers something to strive towards while also providing end users with an easy way to compare and choose amongst the options. “Card {A} can only do 10,000,000 accelerated rectangles per second, while card {B} can do 12,000,000. Clearly we need to get card {B} for our rectangle displaying needs.”

Of course some vendors started gaming the metrics in various creative ways (see Joel's excellent essay on poorly thought out metrics). Several created products that actually recognized running benchmarks in hardware, “optimizing” (by any means possible, including simply discarding many of the benchmark commands, knowing the end user will never notice if every second rectangle or rendered text of the millions per second isn’t being rendered). Worse, the benchmarks were so atrociously artificial, bearing little similarity to actual everyday use that the direction of progress was to optimize the performance of benchmarks, often to the detriment of everyday use.
Eventually the benchmarks matured, getting better and more realistic, and the gaming was prevented or embarrassingly exposed, and it became a hugely beneficial tool in the march forward in the field. Various games have served the benchmarking role, the Doom and then Quake series being the most influential.
In the browser market, the growing interactivity of the web and the renewed competition amongst the big competitors has seen a flurry of benchmarks being widely discussed and debated, stereotyping each of the browsers into performance ghettoes. “Firefox is sooooo slow….” “IE is garbage. Opera is super speedy!”
Having some real tests is of obvious benefit to “set the record straight”, not to mention that it provides a carrot for the competitors to chase. Exactly that happened with me a while back when I came across a string concatenation benchmark, so I went in and streamlined the piece of Firefox code specifically impacted by that benchmark. My change in place, Firefox indeed did much better on that specific benchmark, though the real-world benefit was negligible.
In many ways the various web benchmarks available reminds me of the early accelerated video card benchmarks: Crude, having little or no correlation with the pain points of real-world use, and opportune for gaming and false evangelism.
Which brings me to the recently released SunSpider benchmark (which is a credible contender for the widely coveted “most poorly chosen project name” award: It’s bad enough that an Apple project uses “Sun” in their product name, but it's thrice as bad when it’s a project related to JavaScript – JavaScript being another nominee).
SunSpider is very easy to run and gives quick feedback, so quite a few charts and graphs have been sprouting on blogs across the land.
JavaScript/DOM performance is a huge concern right now, as web applications are growing in richness by leaps and bounds, so there is definitely a need to be filled.
Will SunSpider be what we've all been looking for?
Here’s just such a graph, charting the stacked benchmark runtime for the current tier-1 browsers for Windows.

Benchmarks were performed on a 4GB, Q6600 quad-core Core 2 processor machine running Vista x64. Firefox 3 was built from the current CVS (as of this morning). The Y-axis represents milliseconds.
Such a benchmark provides immediate feedback regarding the biggest bang for the buck optimization, at least in regards to improving the runtime of this particular benchmark. For IE 7 it is pretty clear that the benchmark killer is the bizarre and repeated use of string concatenation throughout the benchmark tests, particularly evident in the string-base64 and string-validate benchmark.
After approximately 20 seconds (okay, maybe 22 seconds) "optimizing" the base64 and validate tests to use the extremely common Array push/toString idiom that is used on pretty much any page that does more than the most trivial of string operations (my changes were rash and very simplistic, though if I were motivated — if this were production code — I could do a much better job with it), the performance had changed rather dramatically, as seen in the following graph (scroll up and down for dramatic flair).

It's late and I'm tired, but I'd guarantee that I could dramatically decrease the remaining largest test -- string tagcloud -- but I think the point is proven.
Some will naturally draw from this the presumption that I'm just an Internet Explorer 7 fan, desperately manipulating the benchmark to best fit the strengths and avoid the weaknesses of my favourite browser.
My browser of choice is Firefox. Not only do I not find the featureset of Internet Explorer 7 uncompelling and anemic compared to a naked copy of Firefox (not evening considering the enormous functionality offered by add-ins, such as the extraordinary Firebug), I find the performance of Microsoft's offering to be atrocious on real-world websites.
I don't like Internet Explorer on technical grounds, and I like it even less given the concerning conflict of interest it represents.
Perhaps I'm just bearing a grudge.
We're currently implementing a very rich, advanced web application, and one thing that we've found, in case after case, is that in real-world situations with extensive DOM manipulation and production JavaScript, Internet Explorer stumbles and groans under the load, while competing browsers complete the task with gusto (just rendering a dynamically loaded complex table takes 20x or more on IE than in Firefox 2. The disparity grows greater with Firefox 3). It's to the point that I can't help but wonder if Microsoft is trying to undermine the whole web thing intentionally, hoping to encourage the middle-grounders to hoard to the boards proclaiming the deficiencies of web apps, manipulated into begging for some XAML goodness.
So if I wasn't looking to defend IE7, what was my point?
Maybe the motivations of the team behind this benchmark were noble, and they weren't blinded into naturally biasing the benchmark towards their own project, but I can't help but see this benchmark as an entirely artificial, naive, unrealistic benchmark that adds little to the benchmarking landscape. A cursory glance through the benchmark sees bizarre oddities that would never appear in real-world code, and a variety of implementation choices that are questionable for a benchmark (for instance test/sample data is often constructed within the timed scope of the benchmark in the SunSpider tests, as if a production website needs to create 4000 random email addresses and ZIP codes, for instance. Normally such data is constructed outside of the timed loop, for obvious reasons).
The lack of weighting, the lack of realistic test scenarios... I'm just not convinced that it holds much utility (though I do like the way they have the "driver", and the elegant and clean client-side way they aggregate the test values, and do the same for comparison. The framework is a great foundation) for cross-browser comparison. I can see use in analyzing performance differences for a single browser (the results turning Firebug on and off, for instance, were very surprizing), just not as a valid comparison between different browsers.
Just as I dramatically changed the IE results in less than a minute of code changing, I'd guarantee that I could do the same with the other outliers (in particular the longer Firefox tests).
I'm still waiting for a good, real-world benchmark. Something that simulates sites like Digg, Slashdot, Facebook, interacting with them in a way that a real world user really would.
A recent article on the utility of multiple cores has been making the rounds. Despite being largely a copy/paste of other articles and graphics, with a smidge of editorial commentary, it is anxiously heralded by dual-core owners as purchase justification in the face of progressing technology.
[As fair disclosure, let me say that I'm about to purchase a quad-core processor based system, and this article and its sources did absolutely nothing to dissuade me from this choice]
The meat of the article (or rather the articles that are referenced by the article -- someone else did the dirty, arduous footwork work of benchmarking) is comprised of a showdown between a 2.4Ghz quad-core and a 3.0Ghz dual-core, which is reasonable given that they're comparable in price [at writing the 3.0Ghz dual-core E6850 can be had for $384 CDN, while the 2.4Ghz quad-core Q6600 is $319 CDN]. Given that many games and applications are effectively single-threaded as a legacy of lowest-common denominator development, the faster clock speed dual-core processor abstractly takes the lead in such fundamentally synthetic benchmarks for the pricepoint.
Aside from the questionable "it's good to have one extra core to allow you to kill bad processes" premise (what if those bad processes are multithreaded? Do you just have to buy bad-process-threads+1 cores? Maybe set the affinity such that you've dedicated a core solely for the task manager? In the real world of modern schedulers, the only time you can't get control of the machine to kill a rogue process is because of some absolutely atrocious elements of the implementation of Windows, and a scheduler that is effectively broken in the face of some situations. Neither is necessarily improved by more cores), what really gets me about the whole exercise is how utterly synthetic it really is, using contrived benchmarks instead of rationally considering how people actually use their PCs, and where their real need for more power comes from.
Firstly, it largely focuses on games benchmarks. Even if gaming performance is pertinent to the reader, for the majority of users playing the majority of games, their video card is far more of a bottleneck than their processor (even if their processor is a dated affair). I'm saying this as a long time computer gamer -- one that finds the stuttering framerate on even top of the line game consoles intolerable: unless you've turned every quality setting to low and you're running at 800x600, it's doubtful that you're going to even measure, much less notice, a difference between a modern 2.4Ghz core and a 3.0Ghz core. Indeed, the very first benchmark I looked at on the referenced article says exactly that: "For this test, we set Oblivion's graphical quality to "Medium" but with HDR lighting enabled and vsync disabled, at 800x600 resolution". They did that to create a scenario where the differences are measurable.
So if you plan to game in a contrived way for the purposes of demonstrating CPU differences in benchmarks, then you'd better pay attention to core speed.
In the real world of gaming, after you've adjusted the quality and resolution settings to appropriate settings for your video card, the primary slowdowns during gaming tend to come about because of external applications rudely stealing your thread quanta: I'm about to toss the grenade into the bunker in Battlefield 2 when suddenly Windows Search has decided that this is a good time to rebuild its index corpus, for instance, so instead it falls to the ground and I take out my entire squad (Seriously, Windows Search guys - when a full-screen DirectX game is running, it probably isn't a good time to decide that the PC is "idle").
For moments like that, more cores make a huge difference. Dual-cores would be sufficient for that simple scenario, but what if my PC is even more active, as it always is? Perhaps the blog updater is running an update, I'm FTPing some files, a download is happening, and I'm gaming.
Every core works towards the ultimate goal of eliminating the real world problem of cycle theft from my hardcore gaming.
Presuming that you've passed a reasonable bar -- long behind you when you're talking about a 2.4Ghz Core 2 -- more cores will realistically improve things for gamers enjoying their vice in the real world. One day we might even have a world where we don't have to shut down services and trawl taskmanager violently killing processes before launching a game, fearful that it will disrupt our immersion.
My second problem with the article is that it doesn't question what people are really waiting for nowadays. Personally I see almost no difference between virtually any mainstream PC for the overwhelming majority of day to day operations (and this is as a developer) -- most activities are so fast the difference is negligible. I just switched laptops from a single-core 1.6Ghz Pentium M to one with a Core 2 Duo T7200 -- a significant improvement -- and from a day to day perspective I've indeed notice that the new laptop has a better screen, a faster harddrive, and much better graphics, but the computational difference is largely unnoticed.
Until, humorously, I do something that is highly parallelizable, such as encoding a video pulled in from the miniDV video camera. In that case the dual-core processor strides to a massive lead over its single core predecessor. If it were a quad-core, it would storm even further ahead, even with the loss of frequency.
For something that I'm actually waiting on, more cores = more goodness.
I would definitely choose the quad-core processor for the software reality legacy that we have today, despite the many applications that in the singular fail to exploit the possibility. My conviction is amplified by the tremendous strides that application developers are making to parallelize their products. Once you've parallelized to 2 cores, it's generally a very small step to parallelize to 4 cores, or n cores for that matter.
Bring on the cores!
"Come here and see this cool PBS promo that was just on!" I call to my wife, tapping pause on the PVR's remote. Given my history of calling her in for replays that weren't as hilarious or amazing as I originally imagined them to be, I knew this had to be a slick presentation if I wanted to impress with my PVR-fu.
As she enters the room the PVR finally reacts to my command, pausing, but then immediately playing again: Once again I've been caught out hitting the button twice, assuming that the first request got lost in the ether -- as often happens -- when it didn't seem to respond in a timely manner.
I hit pause again and this time it immediately reacts, coming to a halt.
"I just have to cue it up," I say, buying some time.
I tap rewind. Nothing happens. Come on, I think, I've got an impatient audience here! I tap it again, and the box launches into double speed rewind as I race for the play button. It plays on demand, but now it's several minutes before the desired start point.
Repeat.
Unpredictably high user interface latency strikes again. While this Motorola PVR is an exceptionally bad culprit for random non-responsiveness, it's hardly the only example of this seemingly growing trend.
My Moto Q smart phone is a great little device that I really enjoy, but the user interface responsiveness is enormously uneven, frequently lagging several seconds behind commands. Whether waiting for it to complete an application switch, or even during basic interactions such as entering a URL in the address bar of Pocket Internet Explorer, it's often out to lunch.
Presumably the questionable multitasking of Windows Mobile completely blocks the user-interface thread when it decides to chatter with a cell tower. Nothing else can explain its behaviour.
On startup my DVD player apparently needs to initialize its own little operating system, and if there's a disc in the drive it automatically demands that it determine the contents before it will eject. It insists that it be able to put "DVD" on the front-panel before any other activity occurs, achieving silicon self-satisfaction that it accurately determined the media type.
A common scenario has us getting ready to leave the house, preschool children bubbling with energy, when we realize that we have a disc that we should return to the movie store.
Turn on the entertainment unit. Wait for DVD to pre-power initialize. Hit eject on the front panel (which automatically turns the unit on). Wait as DVD player initializes and then unnecessarily spins up the disc in the drive to read the disc type and root menu.
Finally it ejects.
It isn't just household devices that show this worrisome trend. The bank recently "upgraded" their ATM machines, bringing a colourful, graphical façade to what was once a glowing-green, ASCII, very serious interface. What once was a quick navigation through the menus now sees the painful redrawing of screens and laggardly keystroke responses.
It might only be 10 seconds or so from beginning of DVD eject procedure to the actual ejecting of said optical disc, but that's approximately 9.75 seconds more than it needs to be.
When time is short, even small delays like this can be incredibly irritating.
Despite the increasing computational capacity of our devices, the problem seems to be getting worse. User interface responsiveness seems to lie low on the list of priorities in many contemporary electronic devices.
These devices seem to be growing slower and slower, yet the processors that power them are getting dramatically more powerful.
Slashdot recently had a story linking to some reviews of a new Windows Mobile 6 smartphone. Several of the comments provided variations of the argument that the primary weakness noted in the review -- poor performance -- was the result of "underpowered" hardware.
Throw some more hardware at it and everything would be okay, the argument goes.
Consider that for a moment: is hardware really the problem? My Moto Q -- a device that often demonstrates terrible responsiveness (I'm not trying to pick on Motorola -- I've noticed the same behaviour with Nokia and Audiovox phones) -- is powered by an Intel XScale PXA272 processor running at 312Mhz. It comes with 64MB of RAM, 128MB of flash memory, and I've supplemented it with 1GB of miniSD flash storage.
Is that an insufficient bit of hardware to manage the awesome tasks of a smartphone with a 320x240 screen?
As a point of historic comparison, in the late 80s I was a proud owner of an Atari 520ST. It was a multimedia powerhouse powered by an 8Mhz Motorola 68000.
Despite featuring a laughably anemic CPU, by today's standards, it seemed infinitely capable at the time: I used it to create complex reports for high school in a full featured desktop publishing app. I did hobbyist software development in a rich IDE on it. I wasted away countless hours trolling local BBS'. It even was a wonderful game platform, running richly challenging games with gusto (games far more advanced than what you often find running in J2ME on your cell phone).
Later I upgraded to the Atari 1040STE, still with the same 8Mhz 68000, but offering expansion capacity to bring it up to a colossal 4MB of memory. This was so much memory that I usually created a memory "disk" out of 3MB of it, and still never felt limited in the 1MB.
Seldom did my ST ever feel laggy or non-responsive -- it booted close to instantly from ROMs, and the simple UI was always extremely responsive. Demo programmers had it doing tricks that still impress me to this day. Later a UNIX-style OS was ported to it, including full pre-emptive multitasking.
So how does that relic of the past compare with something like the Moto Q? Comparing straight Mhz isn't a valid comparison (for instance the ST is a CISC processor, versus the RISC XScale), so I went searching and found some Dhrystone 1.1 benchmark numbers for both the XScale at 312Mhz and the 8Mhz 68000.
8Mhz 68000 (Atari ST) - ~1,603 Dhrystones / second
312Mhz XScale PXA272 - ~731,512 Dhrystones / second
On this benchmark the PXA272 in the tiny little smartphone on my belt (yeah, I'm a nerd) is equal to 456 Atari STs. Let's look at that in a bar graph in case it isn't clear enough.
| 8Mhz 68000 | 1,603 Dhrystones / second
|
| 312Mhz XScale PXA272 | 731,512 Dhrystones / second
|
Wow.
Memory wise the Moto Q has a virtually infinite amount of memory compared to my old Atari ST.
I'm not trying to pretend that the ST of old did what a PDA of today is doing: I remember first getting access to low resolution JPEGs on a local BBS (I was a teenager and they were swimsuit photos...pretty risqué at the time. This stuff was much tamer than an issue of Maxim magazine or an "Umbrella" video), having to go through the tedious process of first "decompressing" them to a TGA, waiting as the decompression processed for sometimes minutes, and then viewing the uncompressed image. There was no way it could realtime do something as complex as rendering a JPEG.
Yet considering this enormous increase in computational power, it does seem evident that many device developers aren't respecting the time of their users, and few users are calling out terrible interfaces for being unresponsive and disrespectful. Reviewers, in particular, seem blind to responsiveness when rating devices, presumably because the artificial environment of a review can't be compared to quickly trying to respond to an email while standing in an airport terminal just as the last boarding call is made.
A user interface should be predictable and consistent -- it should always respond in a short, consistent amount of time (I would honestly feel that the PVR would be better if it always took 3 seconds to react to a command, versus now when it's anywhere between 0 and 5 seconds), always allowing the user to cancel operations that they're no longer interested in.
Responding to the user's input should always be job #1.