Blog Archive — Page 10
This is part of my blog, which I have long since stopped maintaining. The page has been preserved in case its content is of any interest. Please go back to the homepage to see the current contents of this site.
-
On the NATO Protests
So apparently, a lot of people are gathering in Chicago right now to protest at the NATO Summit taking place there this week.
NATO Summit Protests (photo from Time Out Chicago)
I need to get myself a plane ticket to Chicago, because I have problems with NATO. Big, big problems. And I won’t stop until my voice is heard on this matter of vital importance to the future of the world:
Yeah. Listen up, America. No longer will we be enslaved by the yoke of oppression! No longer will I tolerate making PNG symbols in Photoshop using your PDF document as a reference!
In related news, the temptation to include this as an Easter Egg in the next version of my software is pretty strong:
Jokes requiring knowledge of NATO warfighting symbology and 1980s German pop music? Oh yes, we’re an equal opportunities blog. Absolutely nobody has the opportunity to find it funny.
-
Nine Princes and Three Walls
I think I recall reading Roger Zelazny’s book Nine Princes in Amber as a kid, and enjoying it. Now the rest of the series sit atop my metaphorical reading list – not a real pile of books, but a prioritised list of regrets at all the renowned works of fiction that I have not yet read. I am making my way through them, but with the critical eyes of an adult, I am sure that I am not enjoying them as much as I once would have.
The writing style I can handle, just about, as it fluctuates between overly casual and more traditional fantasy fare. But what really grates is the continual demolition of the “fourth wall”; the series never lets the reader get absorbed in its world for more than ten pages before they are reminded abruptly of their own.
I’ve gotten used to the constant Freud name-dropping – that he was a patient of Freud’s is important to the protagonist, if not especially so for the reader. It’s slightly more bizarre that a character of near-Godlike magical powers compares an obviously magical experience to Hilbert space, or that a mortal from a fantasy world takes to aircraft and modern military tactics without mention of it being weird.
No, what completely threw it for me was a couple of chapters into the third book, Sign of the Unicorn, where the already oddly-named character Random casually drops into conversation the line:
Childe Random to the dark tower came.
Now I’ll charitably assume that he was making reference to Shakespeare or to Robert Browning, but my first association of that phrase is Stephen King’s The Dark Tower series – the result being that I’m forced to consider that the main characters of the Chronicles of Amber must have read many works of human fantasy fiction.
Even if I charitably assume that the version of Earth that the Princes of Amber visit does not include Roger Zelazny or the Chronicles of Amber itself, they must surely be aware of the genre and its tropes – and now I am aware that the characters I am reading about themselves read books just like the book I am holding–
BOOM. There goes that fourth wall.
-
"Goddamnit, PHP", Episode 587
If any of my readers are also SuccessWhale users, you may have noticed that for the last few days, clicking the “Conversation View” button for a tweet (this one:
) has resulted in a message declaring that you have tried to look at a “protected or deleted tweet” even though that is plainly not the case.
First and foremost, you’ll be pleased to know that this bug is now fixed in both the stable and testing versions of the public SuccessWhale server, and in the master branch on GitHub as of today.
So, why did this happen? A one-two punch of Twitter’s meteoric rise in popularity and some PHP developers’ dubious decisions.
Tweets that are replies have a field named
in_reply_to_status_id
which can be used to query Twitter for the tweet that it was made in reply to. By iterating this process until a tweet does not return anin_reply_to_status_id
field, SuccessWhale builds up a “Conversation View” page that allows users to see a chain of posts at once. The code looks like this, and until a few days ago it worked perfectly:$statusID = $_GET['status']; // Get tweet data and render while ($statusID > 0) { $data = $twitter->get('statuses/show/' . $statusID, $paramArray); $statusID = $data['in_reply_to_status_id']; // Blank array is for the blocklist. Blocklists aren't obeyed in convo // threads. $item = generateTweetItem($data, false, false, true, $_GET['thisUser'], array()); $content .= $item['html']; }
The issue came about due to PHP’s bizarre implementation of weak typing. Twitter is now so huge that it has a very large number of tweets; the value returned by
in_reply_to_status_id
is an integer identifying a specific one. That number long since passed the maximum that could be stored in a 32-bit integer (232, or 4294967296), and since then the PHP code behind SuccessWhale has been silently converting the number from an integer to a floating point number. This was not immediately a problem, as PHP’s double-precision floats can still uniquely specify integers higher than 232. But as we have now found, it actually is a problem – it only manifests much later, because a floating point number is not always accurate to the nearest integer. Twitter’s post ID numbers are now larger than 253 (9007199254740992), the threshold beyond which a double-precision float can no longer distinguish one whole number from the one next to it.This is absolutely fine in a strongly-typed language, when the programmer has declared a variable to be floating point and can see this coming. But when the programmer was expecting the variable to be an integer type, this causes some very odd behaviour to arise in the software.
When SuccessWhale sends that
in_reply_to_status_id
value back to Twitter, which tweet is it requesting? The right one, or a subtly different one? Actually, neither, because another type conversion issue comes into play. Beyond this 253 threshold, PHP rightly realises that it can’t hope to express the value as an integer – so rather than trying, it represents the number in its exponential form. Rather than requesting tweet number 12345678901234567 – which PHP cannot handle due to the aforementioned issue – it requests tweet number 1.234567890E16. Twitter takes one look at this, gives a “WTF this number has a letter and punctuation in it” and promptly falls over.Luckily, Twitter pre-empted this issue and provides a
in_reply_to_status_id_str
field: exactly the same number, but as a string rather than an integer. PHP is perfectly happy to handle very large numbers as strings – and, on line 4 of the example code above, perfectly happy to compare that string to zero. -
The Need for Mobile General Computation (aka, why I'm stuck with Android)
My mobile phone contract has well and truly hit the “18-month itch” stage – although I still have six months until an upgrade is due, I can’t help but look at adverts and scan gadget blogs and think “ooh, I want one of those”.
I could go for an iPhone, and have a vast library of apps to choose from – far more than Android has ever offered. I could go for a Windows Phone device and enjoy a user interface that is genuinely refreshing compared to the rest of the mobile OS options.
But much as it annoys me with its weird bugs, poor battery life, fragmentation, weird manufacturer-specific skins and inconsistent interface, there’s one important advantage to Android that sways my decision back to it every time I consider the alternatives. It is simply this:
I want to be in charge of my device.
The seeds of the war on general-purpose computation are already taking root in the mobile OS space. Phones and tablets are quickly gaining ground as the primary means of getting things done in our online worlds, and implicit in that is that users of these devices are putting the manufacturers and the mobile networks in charge of what they can and cannot do with them.
I reject this trend. I want root.
I want to be able to uninstall the apps HTC and Vodafone think I should use. I want to firewall apps off from “phoning home”. I want to back up a complete partition image of my phone. I want to run any script I can think of. I want to tunnel my network access over SSH.
By and large, mobile software and hardware manufacturers are hostile to this kind of activity. It’s impossible on a Windows Phone device. iPhones can be jailbroken but OS updates – including important security updates – undo the jailbreaking until some enterprising hacker can find another exploit. Of the current crowd of mobile operating systems, only Android, with its open-source releases of the core OS, allows said enterprising hackers to create their own distributions of the operating system and maintain “root” whilst applying Google’s own OS updates.
So although I am bored of Android, though I crave a new and interesting user interface to play with, I crave freedom more. If I can’t make a device mine; if I can’t choose to be master of all that goes into it, out of it and through it, it’s not a general purpose computer – and I refuse to base a good proportion of my future computing needs on it.
-
On Very Small PCs
With my recent acquisition of a Bluetooth keyboard added to the PowerSkin, my phone has completed its transition from thin, attractive polycarbonate slate to the monstrous assault on product design you see before you.
Or so I would have said in the dim and technologically distant days of 2010.
But really, I don’t have a giant ugly phone – because the other day, an incoming call interrupted my SSH session and I was briefly confused as to why someone was calling me on my computer.
I don’t have a giant phone – I have a really tiny laptop, with a battery that lasts two days.
Did the future happen while I wasn’t looking again?
-
Union Meetings are Broken
Today’s union meeting, the latest in a series that have been held every few weeks since January, was more than I could face. I skipped it to eat lunch and tackle an interesting software problem instead. It’s not that I don’t want my voice to be heard; to take part in the democratic process inside the union – it’s just the inefficiency of it all that I can’t stand.
In the democratic process by which national and local governments are elected, the bare minimum one needs to do is to go to a polling station and vote – a quick walk, a tick in the box, job done. How we form our opinions on which candidates to vote for is up to us. There are numerous ways in which we can find the information we need, in our own time, to whatever extent we feel like. Information is everywhere, even if it’s not quite as everywhere as I would like.
But contrast this with the union decision-making process. Negotiations with the company proceed at a snail’s pace, so all the information we have is dished out to us at irregular intervals often weeks apart. To vote on anything, a motion must be proposed, then a meeting called (far enough in the future that everyone can plan around it), then all the members must convene. The meeting must then, it appears, be hijacked by the same people asking the same repetitive questions as always, followed by a lengthy debate about whether we want to vote on the given motion at all, or change it. After an hour of soul-sapping boredom, we all then vote on whether we have enough information to make a decision or not, decide that we don’t – so can’t make a meaningful decision after all – then we all go back to our desks and wait for the next meeting to be called in two weeks’ time.
I and other colleagues are now so disenfranchised with the process that we’re starting to care less about the result – I’ve had enough of arguing about my pay rise, now I just want to know what it is and get it as soon as possible. And if the process is so bad that participants stop caring about the result, the process is broken.
This is the twenty-first century. The sum of all union knowledge could be wikified; regularly updated. We could vote on motions online, in seconds. Argumentative characters could have their arguments amongst themselves, then with the committee, without everyone else present. The whole process could iterate so much faster, with fewer annoyances on the way, and everyone – staff, union and company – could stop wasting so much time. So why don’t we do that?
-
App Idea: CatchUp
Here’s some initial design ideas for a location-aware chat app that, as far as I am aware, has significant new features over and above existing mobile chat apps (iMessage, WhatsApp, BBM etc.) and existing location-based functionality in apps (FourSquare, Facebook check-ins, Google Places).
Background
The inspiration for this idea came, more or less, from the Nintendo DS “Pictochat”application. PictoChat allows up to 16 users to link their DS consoles over a peer-to-peer WiFi connection, and share doodled messages with each other in real time. Between a couple of DS-using friends, PictoChat is an interesting gimmick, but I first encountered it coming into its own at an anime (Japanese animation) convention called MinamiCon. Here, the concentration of DS users was so high that multiple 16-person PictoChat rooms came into existence, full of people chatting away with other convention-goers.
This was in 2005, before the now ever-present smartphone really came into its own. What about today? Achieving a critical density of DS users to make PictoChat useful is no longer an issue – a critical density of smartphone users exists at every event and every non-event in the Western world. What if we reimagined PictoChat for the smartphone?
Concept
There is one big change to the PictoChat concept that we need to make to have a viable idea – and one big addition.
- Text, not pictures. The DS’ stylus and resistive touchscreen were ideal for doodles, but not so much for text – though a keyboard was available. Modern smartphones have thumb-friendly capacitative screens, and anyone who’s tried to give textual clues in DrawSomething will tell you that writing text PictoChat-style is a non-starter. This new app needs to be text-based, with optional picture and video sharing, much like MMS.
- Catching up. The idea of “catching up” provided the app’s working title, and forms a secondary mode for the app. As well as real-time chat between people in close proximity, the app also attempts to solve the problem of “how do I keep in touch with people I did [activity x] with?”. Say, for example, that you are at a concert. Over the course of the event the app detects 20 people in your vicinity. You could chat with them live (though hopefully you paid to watch the band not stare at your phone…), but the app remembers who was there so you can also chat to them afterwards.
Technical Issues
There are a number of technical issues that the app would have to address.
- Privacy. It must be easy for users to indicate that they don’t want to be interrupted by messages, and that they don’t want people to detect your presence and “catch up” with you later.
- Identification. Integration with Facebook would be desirable to allow users to find their friends on the service. However, the app is providing a semi-public mapping of people to locations, so CatchUp users should not be identifiable to people who are not their friends. Foursquare has struck a reasonable balance here.
- Connection technology. PictoChat used device-to-device WiFi. This is not ideal for CatchUp as it would prevent users from using their WiFi for other things. A low-power Bluetooth connection is a possibility which would also enforce the “chats must be local” idea. However, if we are going to enable “catch up” chats later, we need a server-side chat backend anyway, so it may be best to route everything through the server and determine user proximity for local chat groups on the server.
CatchUp Architecture
- Integration to other services. Integration with the Facebook, FourSquare or Google Places API could give users the ability to “check in” and use the chat facility together, increasing uptake. Integration with services like Last.fm could incorporate knowledge of event times and places, meaning that the “catch up” chats can have sensible names like “Justin Bieber Concert, Wembley Stadium, 1/1/2012” rather than “with 312 users at Wembley Stadium, 1/1/2012”.
Last.fm’s Events List
- Blocking. It must be easy for users to block and report abusive users, prevent them from finding out where the reporter is in future, etc.
Mockups
I have produced a couple of user interface mockups for the potential design:
CatchUp Main Menu
The main menu of CatchUp presents a simple list of chat opportunities, in reverse chronological order.
At the top is the “Chat now” area. Pressing there takes you to the live chat for your location, as determined and managed by the CatchUp server. The tile shows where CatchUp thinks you are, and how many people you will be placed in a chat room with.
Below this is a list of all your “catch up” opportunities. If configured to do so, CatchUp monitors your location in the background. If you stay in a location with enough people for long enough (possibly without having to explicitly open a chat), a “catch up” for that event will be placed in the list. The user can press one of these to be taken to a chat room for everyone who was there. Users can remove the Catch Up from the app (and thus prevent being chatted with by other event attendees) with a swipe.
Settings will have fine-grained privacy options, for example to prevent the user appearing in others’ Catch Ups without explicit permission, to mark certain locations that Catch Up will automatically deactivate itself in, and so on.
CatchUp Chat Interface
Chatting in CatchUp is a simple affair. As locations may have many people chatting, iPhone-style bubbles are replaced with a more basic appearance – though images and videos can still be embedded.
Potential Flaws
No application is without its flaws. Here are some that CatchUp would have to address:
- User Critical Mass. Any social app is only as good as the number of people using it, particularly if the main use case is live chatting. Facebook integration could help a lot here, as could venue sponsorship such as posters with instructions / QR codes to download the app.
- Balancing default privacy options. Many (most?) users will never change their privacy options. The default must be restrictive enough that the app does not raise Facebook/Buzz-style security concerns, but permissive enough that Catch Ups are still useful.
- Web interface? Can Catch Up do without a web interface and run mobile-only like Instagram? Or would a web-based interface be useful so that post-event Catch Ups can be done with a proper keyboard?
- Permanence. Catch Up needs to strike a balance between permanence (everything is kept forever – but UI becomes more complex and permissions more fine-grained) and impermanence (Catch Ups expire and are deleted – but we may need to allow users to get their data out).
Naming Ideas
Aside from “CatchUp”, a number of other names have been suggested:
- Ketchup (a pun on Catch Up)
- ReCollect (based on the idea that you can “collect” people at events then chat to them later)
- LiveChat
Next Steps
What’s next for CatchUp is largely down to you.
I am a UX guy and a Java/Python/PHP developer with zero experience of mobile app development – I can do a mean usability study, but I can’t make this app myself in a sensible amount of time.
If you want to help make this app, get in touch. I can’t do it without help.
If you want this app to exist but can’t help, share this post! Eventually it’ll get to someone with the time, skill and inclination to help out.
And if you have any comments whatsoever, keep on scrolling. I’d love to hear any thoughts or (constructive) criticisms you may have!
-
Don't Call Yourself a Programmer
As a twenty-six-year-old software engineer – I shan’t use the word “programmer”, for obvious reasons – who’s only ever really had one job, I probably ought to refrain from posting an opinion on this post:
Don’t Call Yourself a Programmer
But I will anyway. It’s true, every single word of it. I’m lucky enough to be in that 10% of jobs that isn’t producing “line of business” software, but that percentage doesn’t seem far off the mark. And all the rest applies – in my industry perhaps more than most, the points about networking and about managers hiring people they know ring true.
It’s a long read, but if you’re in the software industry or at University aiming for a job in software, do yourself a favour and read it. It’s well-written and probably the most concentrated page of good advice you will read this year.
-
Skeuomorphism Must Die!
There have been a lot of rants around the internet of late about “skeuomorphism” in software, largely targeted at the latest versions of Apple’s operating systems. They’ve almost all been negative, possibly because designers hating on the concept are the only ones who felt sufficiently incensed that they looked up the name for it. I’m afraid I’m going to do nothing to buck the trend.
Skeuomorphism is defined as “[producing] a derivative object that retains ornamental design cues to a structure that was necessary in the original”, which in software terms usually refers to making a software interface look like a real-world object. For example, the Apple applications that have recently raised designers’ ire:
Skeuomorphism in software can be useful if (a) the concept the designer is trying to convey is difficult to get across without resorting to real-world objects, and (b) the skeuomorphic interface actually improves things.
In the iPhoto example, the paintbrushes are utterly redundant – the user already knows it’s a photo-editing app. Using buttons instead of photorealistic buttons wouldn’t have made the functions of the tools any easier to understand. In fact it might have been an improvement, as to many users the brushes could imply “this tool lets you draw on the picture”, which is not the case.
In the iCal example, the leather effect adds nothing in terms of usability – in fact it reduces the contrast ratio of the text to the background compared to OSX’s usual grey. All it does is evoke the idea of a leather-bound diary, an object which is fast becoming obsolete. (I tried using a real diary for a while. Gave up when it became apparent that there wasn’t a plugin for it that would sync the contents with Google Calendar.)
And that, I think, is the core of my problem with skeuomorphism. It’s inherently holding us back. Designers of these interfaces have looked at the possibilities of software UIs, glorious blank canvases on which we can draw anything the mind can imagine, infinite spaces of black pixels begging for life and colour, and they’ve chosen to make their software look a bit like leather.
Worse still is where this route leads, because Apple is far from the first company to flirt with these ideas.
Back in the mid-1990s, new and inexperienced users were joining the “computer revolution” in their millions. The advent of mouse-driven interfaces, (relatively) high-resolution and high-colour displays gave software developers a new technique to ease non-technical users into the world of computing.
They could make their fax program… look like a fax machine.
Buttons that look like textured plastic! Fake 7-segment displays to tell the time! Eight speed-dials! Huge amounts of wasted space! Curved corners! Cyan! A giant useless phone-shape attached to the side! A “handsfree” button that cannot possibly make the device more hands-free! This interface, and hundreds like it, are things of horror.
And of course, one company took it too far. They produced a skeuomorphic interface to govern every action the user takes with the computer, an interface so reviled that it bombed commercially and became the in-joke of the software design profession.
Kids: don’t do skeuomorphism. Or you might end up like Uncle Bob.
-
Love / H8 (A Review of Windows 8 Consumer Preview)
Microsoft’s next operating system, Windows 8, is now available in “Consumer Preview” form – a release designed to let potential customers know what to expect from it when it launches in around six months’ time. It’s probably a very good idea to give it six months to soak in, because just in case the tech media has entirely passed you by, it looks like this:
Nary a Start Menu in sight. Microsoft has gone all-out with its minimal, colourful “Metro” design that appeared first on Windows Phone 7 before coming to the Xbox 360 and finally to the desktop/tablet OS itself.
I say “tablet” there because Windows 8 is very much focussed on the tablet – sometimes, it appears from the Consumer Preview at least, to the detriment of the desktop experience. It makes its point even before you first log in, with its photograph that overlays the login screen. How do you get from there to the login options? Swipe up. Or for a desktop user, the much more awkward click-and-drag-up. (Luckily, pressing a key also works.)
Where’s the Start button? There isn’t one. To get back to the Metro tiles, you swipe in from the bottom-left of the screen, or from the right and press the Start button that appears. Both are easy, if not exactly intuitive, gestures on a tablet but are very awkward with a mouse. The same applies for the task switcher (swipe from top-right). And Metro apps can’t be closed apart from by going to that task switcher and dragging an app off the panel. In practice, for the desktop user, this means relying on the Windows key, Alt-Tab and Alt-F4 instead of the mouse gestures that are just too annoying to use all the time.
The key usability ethos that drove Windows Phone’s Metro interface is that it should be “glanceable”; that users shouldn’t have to go into different apps or do complex things just to see the information that’s important to them. This idea has made it through to Windows 8 relatively intact – there’s a mail tile that shows your new mail, a calendar tile that shows upcoming appointments, and so on. It feels a lot like a phone or a tablet, but what it doesn’t feel much like is a real, multi-function, generic computer.
Calendar
Windows 8 doesn’t break support for all the apps you’re used to, but it does add new Metro-style apps of its own on the top. They’re really, really pretty – and currently unfinished, though that’s par for the course for an unreleased operating system. Above, the calendar’s month view really shines in full screen (though you can’t show more than just your primary Google calendar). Below, the equally pretty and minimal mail app (that doesn’t support generic POP or IMAP accounts yet).
Mail
Some integration is very well done, such as the Pictures app which automatically shows pictures from Facebook, Flickr and SkyDrive:
Pictures
…but some is less well done, such as the “What’s New” page shown below. Huge amounts of wasted space make it largely unusable as a main way of interacting with the Twitter and Facebook feeds that it shows. (It’s also the interface’s only serif text, which is slightly jarring.) Hopefully this app will get a lot of attention before launch.
“What’s New”
There are a few ugly lines and some odd incidences of 16px Arial bold too, such as in the weather app (below). On any other interface they’d go unnoticed, but given the smoothness and the emphasis on large, thin typefaces everywhere else in the GUI, they stand out.
Weather
By contrast the new Windows Store really nails the appearance, showing off how beautiful Metro can be. Again, as expected for a pre-release OS, the store is a ghost town with only a couple of dozen apps in total. Apps from the store install and update as expected, which may finally put an end to the manual effort of keeping Windows apps up-to-date, at the cost of putting more of the computing experience under Microsoft’s control. (Of course, you can still download and install apps without going through the store.)
Store
The full list of installed applications isn’t on a Start Menu but is instead part of the system-wide Search functionality, just like on smartphone operating systems. Luckily you can get there just by typing on the Metro “Start” screen, so it works as a decent app launcher for keyboard-lovers.
Search
As you can see, non-Metro apps are included in this list too, and when activated, the main problem with Windows 8 becomes apparent: schizophrenia.
It’s like there are two teams at work on Windows 8 (there probably are) and they refuse to talk to each other or share ideas. From a world of simple minimalism, geometric tiles and large thin fonts, the simple request for a file browser window drops you immediately into this:
Explorer
Five menus worth of “ribbon” interface, icons in ribbons, icons in the title bar, minimise and maximise, location bars, side bars… The Explorer GUI would have looked at home in Windows 7, but against the rest of Windows 8 its needless complexity and over-engineering is staggering.
To the left of the screen are desktop shortcuts that bear no resemblance to your Metro “desktop shortcuts”. At the bottom of the screen, a taskbar that doesn’t include the Metro apps you have open. And of course no Start button, no hint to the novice user that there is a way back to the completely different interface they were using just now. (If you’re wondering, the corner-hotspot-gestures still work, bringing up weird semi-transparent overlays over the Windows desktop.)
For the many people who are going to hate the Metro interface, it’s nice that you can use Windows 8 largely from the traditional desktop – but if you don’t pin all the desktop apps you want to the taskbar, you’ll have to dip back into Metro to launch them. Unfortunately, for those people, there’s no compelling reason to upgrade. The desktop experience is nearly identical to Windows 7, and all Windows 8 adds is a weird extra GUI layer that you hate.
For the people, myself included, that love the Metro interface, we have the opposite problem. Simple productivity tasks can be done from Metro, but to get any real work done – a web browser that supports more than 10 tabs, say, or a word processor, or a game – you’ll be switching back to the desktop interface far more often than you’d like.
Settings
With Windows 8, Microsoft have set themselves a monumental challenge. Rather than follow in Google and Apple’s footsteps by adapting their mobile OS for tablets, they have chosen to differentiate themselves by adapting their desktop OS instead – the same desktop OS that is used by an estimated 90% of all computer users. If they fail, it will have been an expensive experiment that could cost them ground in the desktop market as well as the tablet market. If they succeed, they will have stolen Apple’s crown as the greatest innovator in desktop operating systems.
This time next year, we’ll know for sure.
In the mean time, I’m rebooting into Linux.