Towards a Simpler Desktop

In one of my pre­vi­ous blog posts, “Design­ing for Grand­dad”, I exam­ined some of the user inter­face fea­tures that cause my grand­fa­ther issues when using his com­puter, and left a few hang­ing ques­tions as to how we soft­ware design­ers can make our apps less con­fus­ing to the novice com­puter user.

As is my unfor­tu­nate habit, I spent some of today check­ing out how work had pro­gressed on the GNOME-shell and Ubuntu Unity desk­top envi­ron­ments.  (I enjoyed the eye candy for around three hours before revert­ing to the UI of least resis­tance.)  Var­i­ous com­plex­i­ties in their inter­faces irri­tate me and seem to have pro­voked the wrath of a com­mu­nity of largely expe­ri­enced com­puter users.  This got me think­ing about how I would go back the other way, and design a desk­top envi­ron­ment for absolute novice com­puter users — one with­out many of the frus­tra­tions of mod­ern software.

 

Gnome-Shell Screenshot

The Gnome-Shell Interface

 

My ideas, roughly dis­tilled into a sort of ‘design man­i­festo’, are:

  1. One activ­ity at a time.  Here I actu­ally agree with Gnome-shell and Unity’s focus on  full-screen appli­ca­tions, avoid­ing unre­lated yet over­lap­ping windows.
  2. Never hide the means to change activ­i­ties.  Both Gnome-shell and Unity hide their appli­ca­tion switcher dur­ing nor­mal use, requir­ing at least a mouse move­ment or a click to get it back.
  3. Don’t change state with mouse posi­tion.  Novice com­puter users often have trou­ble con­trol­ling the mouse.  Unity’s auto-hiding dock and Gnome-shell’s “hot cor­ner” could prove frus­trat­ing, par­tic­u­larly the lat­ter which com­pletely changes the dis­play when hit.
  4. No sys­tem trays.  The dis­tinc­tion between the taskbar and sys­tem tray is not well-defined and can be con­fus­ing.  Gnome-shell is a par­tic­u­larly bad offender here, with not one but two tray-like areas.
  5. No noti­fi­ca­tions (unless they help).  Pop-ups con­fuse and scare novice users.  If at all pos­si­ble, the app should use a sane default rather than ask­ing a ques­tion, and do noth­ing rather than dis­play­ing infor­ma­tion.  If a pop-up does appear, it should be help­ful and clearly worded.
  6. State­less apps and back­ground ser­vices.  The user wants to get their e-mail. Reading e-mail is a legit­i­mate activ­ity, but leav­ing a mail client open so that they are noti­fied of new mail is not.  Use back­ground ser­vices so that it doesn’t mat­ter which apps are running.
  7. Zero tol­er­ance on UI clut­ter.  While UX peo­ple like me may some­times deplore clut­ter and idolise min­i­mal­ism on aes­thetic grounds, for the novice user, every bit of clut­ter is some­thing that they feel like they should know how to use.
  8. Explain things clearly.  Keep words to a min­i­mum, but ensure that the user always feels con­fi­dent that they know what click­ing a given ele­ment will do.
  9. Undo every­where.  Offer an “undo” option wher­ever pos­si­ble.  If you’re deal­ing with small but impor­tant items (such as e-mail), con­sider offer­ing a non-destructive way of get­ting e-mail out of the user’s face — “archive” instead of “delete”.
  10. Use icons and words together.  Novice com­puter users may be young or old, and users of any age may have poor vision or may not speak the lan­guage in which the inter­face was writ­ten.  These may result in users find­ing either icons or words eas­ier to under­stand on a con­trol.  Pro­vid­ing both, by using clear iconog­ra­phy and sim­ple text together, helps to alle­vi­ate this problem.

I’ve mocked up a cou­ple of inter­faces to show a desk­top envi­ron­ment that adheres to these prin­ci­ples.  The first shows the “desk­top”, taskbar and an exam­ple notification:

 

Simple Desktop Environment - Taskbar & Notifications

 

The sec­ond shows the mail app with exam­ple messages:

 

Simple Desktop Environment - E-mail App

 

Is there any­thing you par­tic­u­larly like or hate about the mock­ups or the design prin­ci­ples behind them?  Bear in mind that if you con­sider your­self tech-savvy or a soft­ware designer your­self, you’re prob­a­bly not the tar­get audi­ence for this desk­top envi­ron­ment — pre­tend to be your mother or grand­fa­ther for a minute and see how you feel about the sug­ges­tions I’ve made.

I’m happy to go fur­ther with these designs if you think it’s use­ful, and of course your own ideas and sug­ges­tions are more than wel­come.  The com­ments sec­tion is yours!

For any­one won­der­ing, the mock­ups in this post were gen­er­ated with Mock­ing­bird, an excel­lent UI mock­ing web-app.

MusicMan

Work on Music­Man has been dis­con­tin­ued, as a friend of mine has a far more capa­ble player in the form of Mor­ri­gan, and it is prob­a­bly eas­ier to port the fea­tures I would like to see than con­tinue writ­ing my own client from scratch.

Music­Man is a cross-platform music player and library organ­iser. It sup­ports mul­ti­ple music direc­to­ries, each of which is recur­sively scanned to build your media library. Your library is syn­chro­nised with the actual files on disk each time you start Music­Man. It also sup­ports mass ID3 retag­ging and dynamic search­ing (iTunes-style), where enter­ing a search term reduces your cur­rent playlist to only the songs that match your search.

Music­Man is alpha soft­ware, and is under heavy devel­op­ment. Lots of things (e.g. playlists, Shout­cast) don’t work yet. How­ever, please try it and sub­mit any bugs you find or fea­tures you would like to see on my Man­tis server. I’ve not yet put the source code any­where that peo­ple can eas­ily com­mit to, but if you feel like adding/fixing things in the mean­time, send the source back to me and I’ll merge it in.

Music­Man requires Java 6, and runs on Win­dows, Mac and Linux. It is released under the terms of the GNU GPL v3. It uses the free MP3SPI, JLayer and JAu­dio­Tag­ger libraries.

Down­loads

Screen­shots

War of the Roses

War of the Roses is a 2D strategy/roleplaying game set in the world of my (oth­er­wise pen-and-paper) Changeling game. It is writ­ten in Java 1.5, and cur­rently uses Plan­et­Cute tiles for its graph­ics. It is very early on in devel­op­ment — there’s only one level, for exam­ple, and lots of bugs — but it’s improv­ing almost daily.

Issues with this appli­ca­tion are tracked on my Man­tis server, which is open to any­one to sign up, report bugs and request fea­tures. Please report any issues you find!

Instruc­tions

Down­loads

You can down­load the game as an exe­cutable JAR file. Please check the Man­tis server and sug­gest addi­tions, or which things I should work on first!

Source code, released under the terms of the GPLv3 licence, is avail­able on GitHub here.

Iridium 9601 Satellite Modem Simulator

This is a spe­cialised ver­sion of CrapTer­mi­nal, cre­ated to make it eas­ier to pre­tend to be an Irid­ium 9601 satel­lite modem. But­tons have been added for send­ing frequently-used strings, and inap­pro­pri­ate options have been removed.

It is impor­tant to note that this is not an auto­mated pro­gram that behaves like a 9601 — it is sim­ply a basic ter­mi­nal app with some but­tons added to send com­mon 9601 mes­sage strings, and a but­ton to send a file’s worth of binary data as the con­tents of an incom­ing data packet.

This is a Java app, writ­ten for JRE ver­sion 6. It requires RxTx, a free ser­ial comms library for Java on Win­dows, Linux, Mac & Solaris. RxTx is not pack­aged with this appli­ca­tion — you can grab the lat­est bina­ries here. (The zip con­tains an INSTALL file which explains where to put every­thing on each plat­form. You must do this before run­ning Iridium9601Sim.)

Issues with this appli­ca­tion are tracked on my Man­tis server, which is open to any­one to sign up, report bugs and request fea­tures. Please report any issues you find!

Down­load

CrapTerminal

It’s like Hyper­T­er­mi­nal, but not shitty and annoying!

This is a Java app, writ­ten for JRE ver­sion 6. It requires RxTx, a free ser­ial comms library for Java on Win­dows, Linux, Mac & Solaris. RxTx is not pack­aged with this appli­ca­tion — you can grab the lat­est bina­ries here. (The zip con­tains an INSTALL file which explains where to put every­thing on each plat­form. You must do this before run­ning CrapTerminal.)

Issues with this appli­ca­tion are tracked on my Man­tis server, which is open to any­one to sign up, report bugs and request fea­tures. Please report any issues you find!

Changelog

  • 3 (1 Oct 2010): Back­ported a bunch of changes from Iridium9601Sim. Ported it to use RXTX not JavaComm.
  • 2 (26 Feb 2009): Fixed the printing-one-character-every-two bug, Added abil­ity to send.
  • 1 (21 Aug 2008): Ini­tial release.

Down­load

Gunboat

Gun­boat is a slow-paced 2D shooter writ­ten in Java and JoGL. It is far from fin­ished, but you can try out the cur­rent devel­op­ment ver­sion any­way. Issues with this appli­ca­tion are tracked on my Man­tis server, which is open to any­one to sign up, report bugs and request fea­tures. Please report any issues you find!

Down­loads

Gun­boat requires Java 1.6 and JoGL. Install Java as usual, and make sure the JoGL bina­ries (.dll files for Win­dows, .jnilib for Mac OS X, .so for Linux) are on the sys­tem path. (You can just put the libraries in the Gun­boat direc­tory if you like.)

Down­load Gun­boat itself here, and unzip it any­where you like. Run “java –jar dist/Gunboat.jar” to run the game. Gunboat.bat (Win­dows) or Gunboat.sh (Mac) will do this for you.

You can get the source code (and every­thing else) as a Net­beans project here on GitHub.

Online Ver­sion

I have done some work on an online browser-based ver­sion of Gun­boat. (Requires Google Earth plu­gin.) How­ever, it’s in its very early stages (you can’t shoot, there aren’t any ene­mies…). I’m not sure if I’ll con­tinue with it — one on had, level design has sud­denly become very easy! On the other hand, ick, Javascript. Source code for it is here on GitHub.

The rest of this page largely refers to the offline ver­sion, as it has many work­ing game­play com­po­nents that the online ver­sion does not.

Game­play

In Gun­boat, you are a small ship tasked to defend your har­bour against an attack­ing Navy. You can move freely around, and enemy ships will arrive in the har­bour in waves. (Some­times, allies will arrive to help you as well.) You must defeat all the ene­mies in each level to progress.

Your ship always appears at the bot­tom mid­dle of your screen. Around it is a coloured ring, which rep­re­sents your health. This will con­tract and change colour from green to red as you take dam­age. Attached to the right side of your ship is a British flag, rep­re­sent­ing your ship’s alleigance. Allies may have other flags, and ene­mies will always have a dif­fer­ent flag to yours. Every ship has both a flag and a health ring.

At the top of your screen is your HUD. On the left, your weapon load­out is dis­played. The yel­low ret­i­cle rep­re­sents your currently-selected weapon, though you can have up to 5 in each slot. On the right, your speed, head­ing and radar are dis­played. Speed and Head­ing are fairly self-explanatory. The radar has two modes that you can switch between. The default shows a map of the entire har­bour, with other ves­sels appear­ing on it. Red are ene­mies, yel­low allies, blue crates, and the green dot is you. The other radar mode, which you can tog­gle to at will, is a close-in radar. This only shows ships close to you, and thus gives higher detail. “Up” on this radar is in front of your ship, as opposed to the map view, where Up is always North.

Con­trols

The game is played with both key­board and mouse. The con­trols are:

  • Move Mouse: Aim
  • Mouse But­tons: Fire Pri­mary (Left) / Sec­ondary (Right) Weapon
  • WSAD: Change speed / heading
  • Q: Switch pri­mary weapons
  • E: Switch sec­ondary weapons
  • R: Switch radar modes
  • C: Switch cam­era angles (Fol­low, Above, Bird’s-Eye, Bridge)
  • H: Show/hide HUD (Might be use­ful on machines with­out 3D acceleration.)
  • N: Give your­self a Nuke (Cheat mode for test­ing only. Has no icon. Like a hom­ing mis­sile but faster, more agile, instakills, infi­nite ammo.)

Ship Types

  • Frigate (e.g. Type 23): This is the player’s ship, although you will encounter this ship many times as both ally and enemy. It is fast and nor­mally quite weak, and can carry a wide range of weapons. Yours has spe­cially rein­forced armour, so it has much more health than normal.
  • Marine Land­ing Craft: These tiny ves­sels are very fast, and sneak in close to their tar­gets. Their machine-gun is weak, but left unchecked they can do con­sid­er­able dam­age. They are easy to destroy.
  • MCMV (e.g. Sandown class): The Mine Coun­ter­mea­sure Ves­sel is fre­quently found accom­pa­ny­ing larger fleets. It is weak and poorly-armed.
  • Destroyer (e.g. Dar­ing class): These large ves­sels are tougher than frigates, and have mul­ti­ple weapon mount­ing points. They usu­ally have a com­bi­na­tion of guns, tor­pe­does and anti-air weapons.
  • Air­craft Car­rier (e.g. Invin­ci­ble Class): Air­craft car­ri­ers are huge, heav­ily armoured and largely unarmed. Their strength lies in their abil­ity to launch air­craft. A mix­ture of anti-air and anti-surface weapons is advised for tak­ing out a carrier.
  • Land­ing Plat­form Dock (e.g. Albion class): Much like the car­rier, the LPD’s strength lies in the smaller ves­sels that it can launch — in this case, land­ing craft. It is also more heav­ily armed and armoured than a carrier.
  • Bat­tle­ship (e.g. HMS Van­guard): Relics of a bygone age, these vast ships were designed to take on other bat­tle­ships on the high seas. They are slow and unmanou­ver­able, but have lots of armour and have lots of weapon mount­ing points. (These are boss-type enemies!)
  • Sup­ply Ship: Sup­ply ships are weak and unar­moured, and usu­ally drop inter­est­ing pick-up items. Be warned, though, they usu­ally come with a pow­er­ful escort!
  • Sub­ma­rine: (e.g. Astute Class) Sub­marines lurk below the sur­face, attack­ing with tor­pe­does, anti-ship and anti-air mis­siles. Spe­cific weapons are required to take out sub­marines, but they are lightly-armoured.
  • Heli­copter (e.g. Lynx): The heli­copter, a slow but manou­ver­able air­craft, is gen­er­ally used to drop depth charges.
  • VTOL Air­craft (e.g. Har­rier): The VTOL (Ver­ti­cal Take-Off and Land­ing) air­craft is fast and manou­ver­able, and can launch anti-ship mis­siles, anti-air mis­siles and tor­pe­does. How­ever, it has very lim­ited ammunition.
  • Stan­dard Air­craft (e.g. F35): These air­craft can only be launched from car­ri­ers. In addi­tion to a lim­ited sup­ply of mis­siles, they also have a mini­gun. They are extremely fast, but not very maneuverabe.

Weapons

  • Vick­ers 4.5-inch Mark 8: The stan­dard frigate deck gun, this weapon fires quickly and does a fair amount of damage.
  • Vick­ers .303 Machine­gun: This tiny weapon does lit­tle dam­age and has a very lim­ited range. It fires very quickly, but is extremely inac­cu­rate. It can hit aer­ial tar­gets as well as sur­face ones.
  • Twin QF 5.25-inch Mark 1: This is essen­tially the same as the 4.5-inch gun, except that there are two bar­rels per mount­ing point.
  • Twin BL 15-inch Mark 1: One of the highest-caliber naval guns ever put into ser­vice by the Royal Navy, this weapon fires slowly but over a long range, and the pro­jec­tiles are extremely dam­ag­ing. Not much sur­vives a hit with two 15-inch rounds.
  • Naval Laser Pro­to­type NDEW-1: This exper­i­men­tal direct-energy weapon fires rapidly, has a long range, and deals a lot of dam­age. How­ever, over-use of this weapon will cause it to explode and dam­age your ship!
  • RGM-84 Har­poon Mis­sile Launcher: This weapon, stan­dard equip­ment for frigates, fires anti-ship mis­siles. They are slow, but turn in mid-flight to hit the near­est enemy ship. They deal extreme amounts of dam­age. This weapon has lim­ited ammunition.
  • Tom­a­hawk Mis­sile Launcher: This weapon fires big­ger and bet­ter mis­siles. They are faster, more manou­ver­able, and cause more dam­age than their stan­dard vari­ant, but with even more lim­ited ammunition.
  • Sea Wolf Mis­sile Launcher: This is the anti-air equiv­a­lent of the stan­dard anti-ship mis­sile launcher. Its mis­siles move and home faster, to keep up with fly­ing targets.
  • Naval Rail­gun EMG Mod 0: Though not par­tic­u­larly dam­ag­ing and with an aver­age fire rate, this weapon’s strength is that it hits almost instantly, so there is no need to lead the target.
  • Stan­dard Tor­pe­does: Tor­pe­does are slow and dam­ag­ing, much like anti-ship mis­siles, except that they do not home on a tar­get. Their strength is that they can hit sub­merged tar­gets such as sub­marines as well as sur­face ships.
  • Sting Ray Hom­ing Tor­pe­does: Hom­ing tor­pe­does sac­ri­fice some of their war­head space for their hom­ing mech­a­nism, and thus deal less damage.
  • Depth Charges: These weapons are dropped near your ship rather than fired, and they do not move. They only hit sub­merged tar­gets — how­ever, any sub­ma­rine that gets lured onto the depth charge is instantly destroyed.
  • DS 30B 30mm Anti-Air Gun: This is the stan­dard anti-air weapon. Much like the 4.5-inch gun, it fires quickly and deals mod­er­ate damage.
  • Flak Can­non: This weapon deals extreme dam­age to air­borne ene­mies. How­ever, its rate of fire is very low.
  • Pha­lanx CIWS: Not strictly a weapon, the Pha­lanx will not shoot at ene­mies. Rather, it is an auto­mated tur­ret that will shoot down any enemy mis­siles within a cer­tain radius of your ship. It only lasts a lim­ited time.
  • Shield Gen­er­a­tor: An exper­i­men­tal device, the shield gen­er­a­tor cre­ates an elec­tro­mag­netic force-field around your ship. It deflects all incom­ing pro­jec­tiles, but it only lasts for a very lim­ited time.

Other In-Game Items

  • Health Crate: Some­times enemy ships will drop health crates when they’re destroyed. Steer your ship over these crates (marked with a red H) to restore some of your health.
  • Weapon Crate: Enemy ships with inter­est­ing weapons may some­times leave their weapon behind in a crate. (Sup­ply ships drop ran­dom weapon crates.) Steer your ship over them to pick up the weapon, and add it as an option in either your pri­mary or sec­ondary slot.

Minehunter

Hav­ing spent far too many hours play­ing Minesweeper on Win­dows machines, I fig­ured I’d write a game that bears some resem­blance to actual mine-clearing.

Your vehi­cle is a remote-controlled mine­hunter, with var­i­ous attach­ments and var­i­ous ships to pro­tect depend­ing on the dif­fi­culty level you’re play­ing on. Head to Help -> How to Play… for a three-minute tuto­r­ial that explains every­thing you need to know.

Screen­shot

Minehunter Screenshot

Mine­hunter Screen­shot (click to enlarge)

Down­loads

Down­load ver­sion 0.4.0 (89KB JAR)

Get the source code from GitHub

Require­ments

Mine­hunter requires the Java 6 run­time envi­ron­ment, which you prob­a­bly have already. If not, you can get it from here. Once that’s installed, just double-click on the down­loaded JAR file and it should run.

Bugs and Features

As far as I’m aware there aren’t any bugs in this game, but it never really got tidied up and given a nice inter­face so it’s not the greatest-looking thing in the world.

Issues with this appli­ca­tion are tracked on my Man­tis server, which is open to any­one to sign up, report bugs and request fea­tures. Please report any issues you find!

Editor

More wxPython-learning. This time, a text editor!

Writ­ten in Python 2.5 and wxPython 2.8, though it might well sup­port ear­lier ver­sions. Icons are from the Tango project. Code licenced under GPL v3.

Issues with this appli­ca­tion are tracked on my Man­tis server, which is open to any­one to sign up, report bugs and request fea­tures. Please report any issues you find!

Use at your own risk, may make the world explode or var­i­ous lesser symp­toms (such as ital­i­cis­ing YOUR FACE).

You can grab the files from GitHub here.

New in ver­sion 0.1−20080523

New, Load, Save, Save As, About all work. Word wrap doesn’t work, dis­abled for now. Bold but­ton only makes things bold, doesn’t remove boldness.

TODO: Find a way of get­ting the bold but­ton state, so we can unbolden. Make the tool­bar a sep­a­rate wx.ToolBar so we can have font/size drop­downs next to it (or find a way of putting drop­downs in a tool­bar). Fig­ure out if we can save as RTF or some­thing. Move PNGs inside the script?

RPG Dice Roller

This is fast becom­ing my tra­di­tional “learn a new lan­guage by cod­ing this” script: a dice roller for table­top RPGs. This time, I’m learn­ing wxPython!

Writ­ten in Python 2.5 and wxPython 2.8, though it might well sup­port ear­lier versions.

Cur­rent sys­tems sup­ported: Old WoD (all edi­tions), nWoD, Exalted, d20, 7th Sea, L5R and Shad­owrun. Feed­back / sug­ges­tions of new sys­tems to include are appreciated!

Use at your own risk, may make the world explode or var­i­ous lesser symp­toms (such as being eaten by a CR3 Dire Badger).

Get the script from GitHub here

Issues with this appli­ca­tion are tracked on my Man­tis server, which is open to any­one to sign up, report bugs and request fea­tures. Please report any issues you find!

New in ver­sion 0.3−20080522

Free Entry mode (under Mis­cel­la­neous) added. Thanks to aefara­dien for sug­gest­ing a bet­ter way to do this. Input is sani­tised, but there’s still no real error han­dling so Free Entry prob­a­bly falls over if you try any­thing too tricky.

New in ver­sion 0.2−20080521

All seems up and run­ning and bug-free. GUI looks nicer. Cou­ple of things in the code could use tidy­ing up, and there’s no real error handling.

New in ver­sion 0.1−20080520

Can’t actu­ally roll dice yet, but the data struc­tures and what­not are in there. How enter­prisey. GUI works but is ugly.