CodeBork | Tales from the Codeface

The coding blog of Alastair Smith, a software developer based in Cambridge, UK. Interested in DevOps, Azure, Kubernetes, .NET Core, and VueJS.


Project maintained by Hosted on GitHub Pages — Theme by mattgraham

Multiplicity. The Merriam-Webster Online Dictionary defines multiplicity thus:

Multiplicity, noun

  1. a: the quality or state of being multiple or various b: the number of components in a system (as a multiplet or a group of energy levels)
  2. a great number

Multiplicity is not something new to computer science or computing environments; indeed, parallel computing (processing with multiple, simultaneously-executing processes) seems to date back to Babbage’s Analytic Engine. And every time it’s introduced, it benefits the end user in some way. Some classes of user, such as financial traders, have long had multiple displays attached to a single computer to allow them to view multiple pieces of information at the same time. I have two displays attached to my computer at work for this very reason: I can have a piece of research or the current build of the website open in a web browser on one screen and the code on which I’m working on the other. I’d like a similar set-up at home, when I can afford it. Ideally, I’d have three monitors in both situations; not because I’m greedy, but because this model more neatly matches the mental model of a “grid” of displays. A 3x1 grid of monitors provides much more flexibility than a 2x1 grid. As Jeff Atwood puts it in his Coding Horror blog post, Joining the Prestigious Three Monitor Club:

As good as two monitors is, three monitors is even better. With three monitors, there's a "center" to focus on. And 50% more display area. While there's certainly a point of diminishing returns for additional monitors, I think three is the sweet spot…I don't care how large a single display can be; you can never have enough desktop space.

Multiple-cored processors have broken into the mainstream in the last few years. Previously only limited to servers requiring high availability or processing power, or high-performance computing applications, it’s now easier to pick up a dual-core computer than it is a single-core computer. Quad-core (and tri-core too) processors are starting to get a decent foothold, and in about 18 months we should be seeing six-core chips from Intel. Multi-core processors are not the biggest of innovations ever, but they have vastly improved the user’s capacity for multi-tasking. Well-written software that properly takes advantage of the many-core architectures now prevalent in the marketplace is starting to come into being, such as Adobe’s Creative Suite product (I believe this has had decent multi-core support since CS3) and Microsoft’s MSBuild (MSBuild 3.5 processes your command-line builds in parallel where it can, providing a fair bit of speed-up unless your solution’s projects form a linear dependency).

Tabbed browsing, first introduced into Opera, adopted more widely in Firefox 1.0 and then, eventually, Internet Explorer 7, brought multiplicity to the web browser. I started using Firefox in 2003/2004 when it was still pre-release and called “Firebird”, and I’ve never gone back to Internet Explorer, partly for the enhanced security and wealth of features Firefox provides over Internet Explorer, but the killer feature that stopped me straying was the tabbed browsing. I can have multiple web pages open without filling up my task bar with multiple windows!

Early versions of Office, amongst a herd of other applications, utilised the MDI model, which hosted multiple documents in one application window. I believe usability studies found that most end users expected to be able to switch between documents using the more standard Alt+Tab key combination, so MDI model was replaced with the SDI model in Office 2000, but I firmly believe that had there been a quick and easy-to-remember shortcut for switching between documents, we would still be using the MDI model today.

This week I purchased a copy of Cube Desktop for use at work. This natty piece of software allows me to run multiple desktop environments within Windows; it creates up to six desktops (one of each face of the cube), does some funky semi-customisable 3-d transitions between the desktops, and provides an overview of all your running applications, on all desktops.

Mac and Linux users can feel free to snigger at this point: Windows Vista is a modern operating system (whatever the views of its critics and detractors) and it still doesn’t have support for multiple workspaces. Linux has had this feature forever (albeit without the funky 3-d transitions and application overview, although the Beryl project resolves this), and Apple has had the overview in the form of Exposé since Panther (Mac OS X 10.3), and the multiple desktops were introduced under the moniker Spaces into Leopard (Mac OS X 10.5). What I really love about Exposé, and I haven’t tested this on CubeDesktop yet, is the ability to interact (albeit to a limited extent) with the applications in preview mode. For example, I can drag-and-drop a file from one folder to another whilst Exposé is running.

The Pro edition of CubeDesktop is less than €20 (~£16), and it’s really very good. I now have separate workspaces to organise my daily activities at work; this tiny little change has vastly improved my productivity through the simple separation of concerns. I’d like one desktop for admin (checking emails, writing my status report, etc.), please. Check. I’d like another one for development (running Perforce, Visual Studio, Firefox/IE, PowerShell). Sure thing. Maybe a separate one for running my debug environments. No problem; have four!

This made me think about what other multiplicity I’d like to see, and I hit on the idea of multiple clipboards; in fact, Microsoft Office has supported this since Office 2000, and for me it was one of the best new features of that release. Presumably, though, it broke the user’s mental model of the clipboard as it appears to have been quietly hidden in Office 2007: to enable it, you now have to click that tiny little pop-out icon on the Clipboard area of the Home tab of the ribbon. There’s a mouthful for you; let’s try a screenshot:

[img_assist nid=10 title= desc= link=none align=none width=494 height=640]

Subtle, huh? This is application specific, though (although I believe it’s supported across Office applications); what I’d like is for something like this to hijack the global clipboard and be available for all applications. It would need a small, unobtrusive window to display the items on the clipboard, and the clipboard could hold either a configurable maximum number of items, or as much information as the computer’s memory would allow. A handy short-cut key combination — [Flag] + V, perhaps — would display this window and give it focus so that I could select items with the arrow keys on the keyboard, or using the number keys as an index to the list of items. The window should display a small preview of the items on the clipboard (e.g., a thumbnail of an image, or the first few words of a bit of text), with a larger preview displayed to the side of the item when it is selected. The clipboard window would be closed by selecting an item (and thereby pasting it into the application you’re using), or by hitting Escape to avoid inserting an item.

I think the trickiest bit of this implementation would be keeping a handle on the previously-focused application window. That being said, I might have found project number 3…

I’d be interested to hear what people would like to see multiple things of in their computing environment that they don’t already have.