<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>voyce &#187; Rant</title>
	<atom:link href="http://www.voyce.com/index.php/category/rant/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.voyce.com</link>
	<description>Programming and debugging tidbits</description>
	<lastBuildDate>Sat, 03 Jul 2010 12:40:51 +0000</lastBuildDate>
	
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>London Underground UI Fail</title>
		<link>http://www.voyce.com/index.php/2010/06/04/london-underground-ui-fail/</link>
		<comments>http://www.voyce.com/index.php/2010/06/04/london-underground-ui-fail/#comments</comments>
		<pubDate>Fri, 04 Jun 2010 10:10:48 +0000</pubDate>
		<dc:creator>ian</dc:creator>
				<category><![CDATA[Rant]]></category>
		<category><![CDATA[Usability]]></category>
		<category><![CDATA[GUI]]></category>
		<category><![CDATA[London]]></category>

		<guid isPermaLink="false">http://www.voyce.com/?p=879</guid>
		<description><![CDATA[You'd think replacing a magnetic board with a digital system would be a good thing, wouldn't you? Well, not if you get the "user interface" completely wrong...]]></description>
			<content:encoded><![CDATA[<p>I mentioned this on Twitter the other day, but I was so incensed I just had to scribble out a blog post too. It&#8217;s a classic case of replacing a traditional (in this case paper-based) &#8220;interface&#8221; with an electronic one, and in the process failing to translate the fundamental functionality that made the original system useful.</p>
<p>How can you screw-up creating an electronic version of an existing sign?<br />
<span id="more-879"></span></p>
<p>Here&#8217;s the offending item:<a href="http://www.voyce.com/wp-content/uploads/2010/06/lu_sign.png"><img src="http://www.voyce.com/wp-content/uploads/2010/06/lu_sign-224x300.png" alt="Underground line status" title="Underground line status" width="224" height="300" class="alignright size-medium wp-image-888" /></a><br />
It&#8217;s a replacement for a combination of magnetic labels and hand scrawled messages that convey the current state of each of the London underground lines. They&#8217;re generally one of &#8220;good service&#8221;, &#8220;minor delays&#8221;, &#8220;severe delays&#8221;, or &#8220;oh no, you&#8217;ll never get to work&#8221;. </p>
<p>For the majority of people, their only interaction with this system is walking past, early in the morning, when they&#8217;re not at their sharpest, and trying to figure out if their tube line is working. As such, if there was a magnetic label stuck on your line, you knew things weren&#8217;t good. Given the lines themselves are colour coded, it&#8217;s easy to determine which line you&#8217;re interested in. Bear in mind that people aren&#8217;t going to get closer than about 2 metres to the board. </p>
<p>And herein lies the problem: by replacing the analogue board with a digital version, it&#8217;s no longer possible to ascertain by the physical presence of a label or writing, what state the line is in. </p>
<p>Let me say that again. It&#8217;s virtually impossible to tell, even from relatively close, if there are delays. Take a look at that screenshot (dodgy quality as it is) and see if you can tell which line has &#8220;minor delays&#8221;. Yeah, not easy is it? Now try doing that as you&#8217;re briskly walking past at 7.46am.  </p>
<p><div id="attachment_890" class="wp-caption alignleft" style="width: 310px"><a href="http://www.voyce.com/wp-content/uploads/2010/06/lu_sign_detail.png"><img src="http://www.voyce.com/wp-content/uploads/2010/06/lu_sign_detail-300x119.png" alt="Underground line status (detail)" title="lu_sign_detail" width="300" height="119" class="size-medium wp-image-890" /></a><p class="wp-caption-text">Underground line status (detail)</p></div>It&#8217;s not helped by the fact that the state descriptions are all roughly the same length and form, &#8220;good service&#8221; could just as easily be &#8220;severe delays&#8221; when it&#8217;s in 36pt and seen from 2m away. There have been many studies on the legibility of type, most in the context of road signage, and of course, there are the seminal texts (e.g. <a href="http://www.amazon.com/gp/product/0881792063?ie=UTF8&#038;tag=wwwvoycecom-20&#038;linkCode=as2&#038;camp=1789&#038;creative=390957&#038;creativeASIN=0881792063">The Elements of Typographic Style</a><img src="http://www.assoc-amazon.com/e/ir?t=wwwvoycecom-20&#038;l=as2&#038;o=1&#038;a=0881792063" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" />) on how typography can be applied for good, not evil. Shame no-one responsible for this application seems to have read them. </p>
<p>I&#8217;m surprised that they&#8217;ve relied solely on text and haven&#8217;t used any other means of distinguishing the significant information. Some other things that could&#8217;ve been used:</p>
<ul>
<li>Colour (of the text itself, the background, or some indicator. Need some inspiration? How about taking a look at something <em>way</em> out there, like, say, traffic lights)</li>
<li>Size</li>
<li>Weight (using font weight to indicate relative importance)</li>
<li>Icons (or some other kind of visual indicators, nothing flashy)</li>
</ul>
<p>I&#8217;m sure there are a whole load of advantages to having this digital system; most notably that it&#8217;s connected, and can be automatically and centrally updated. If only they&#8217;d spent any time on thinking about how people were actually going to use it!</p>
<p><a href="http://en.wikipedia.org/wiki/Harry_Beck">Harry Beck</a> would be turning in his grave.  </p>
]]></content:encoded>
			<wfw:commentRss>http://www.voyce.com/index.php/2010/06/04/london-underground-ui-fail/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Programming is like a bad analogy</title>
		<link>http://www.voyce.com/index.php/2009/11/11/programming-is-like-a-bad-analogy/</link>
		<comments>http://www.voyce.com/index.php/2009/11/11/programming-is-like-a-bad-analogy/#comments</comments>
		<pubDate>Wed, 11 Nov 2009 00:19:22 +0000</pubDate>
		<dc:creator>ian</dc:creator>
				<category><![CDATA[Rant]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://www2.voyce.com/?p=388</guid>
		<description><![CDATA[The joy of programming can be a difficult thing to describe. I take a look at some of the bizarre things people have compared it to.]]></description>
			<content:encoded><![CDATA[<p>The <a href="<a href="http://www.amazon.com/gp/product/1430219483?ie=UTF8&#038;tag=wwwvoycecom-20&#038;linkCode=as2&#038;camp=1789&#038;creative=9325&#038;creativeASIN=1430219483">joy of programming</a><img src="http://www.assoc-amazon.com/e/ir?t=wwwvoycecom-20&#038;l=as2&#038;o=1&#038;a=1430219483" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /> is hard for anyone to precisely define. At least, it&#8217;s hard for programmers to define, and seeing as nobody else understands what the hell it is anyway, that&#8217;s pretty much the same thing. However a few people on the interweb have tried quite hard to describe just what the feeling of developing software is by comparing it to things in &#8220;the real world&#8221;.</p>
<p>A quick google reveals some of the funny, interesting and downright weird things that people have compared programming to. Let&#8217;s take a closer look at some of them&#8230;<br />
<span id="more-398"></span></p>
<h3>The Classics</h3>
<p>&#8220;Programming is like sex&#8221;<br />
The most common version of this is, of course, that &#8220;One mistake and you have to support it for the rest of your life&#8221;. Very true. Unless you can manage to change jobs every six months, and then it&#8217;s more like &#8220;You can have lots of fun and then leave somebody else to clear up the mess&#8221;. There are lots of other variations too, including the controversial: &#8220;Sometimes you have to pay a lot of money to get someone who&#8217;s good at it&#8221;. </p>
<p>&#8220;Programming is like <a href="http://compsci.ca/blog/programming-is-like-lego/">LEGO</a>&#8221;<br />
<img src="http://www.voyce.com/wp-content/uploads/2009/11/lego.png" alt="lego" title="lego" width="150" height="150" class="alignleft size-full wp-image-531" />Hmm. As far as I can see this just means that, yes, you can put the pieces together in any way you like, but nothing you make will look <em>quite</em> as good as the thing you make by following the instructions. The impression of infinite freedom is an illusion. And if you&#8217;re not careful you&#8217;ll end up losing important bits down the back of the sofa or hoovering them up.</p>
<p>And, hang on, if it is like Lego, then how come we&#8217;re always talking about programming &#8220;glue&#8221;?</p>
<p>&#8220;Programming is like <a href="http://ebersys.blogspot.com/2009/07/programming-is-like-chess.html">chess</a>&#8221;<br />
Not sure about this one. The biggest similarity I can see is that a lot of Russians are quite good at it. </p>
<p>Or maybe you could compare the interminably long games with the average duration of an enterprise software project? In fact, maybe having a <a href="http://en.wikipedia.org/wiki/Game_clock">chess clock</a> would make pair programming more fun; you get 30 seconds to write a line of code before it&#8217;s the other&#8217;s turn.</p>
<h3>The Outliers</h3>
<p>&#8220;Programming is like <a href="http://winpdb.org/2009/07/ice-programming/">Ice Sculpting</a>&#8221;<br />
What?! This has to be one of the most bizarre comparisons. I mean, yeah, it makes my hands really cold too. And my coworkers keep asking me why I bring that razor-sharp <a href="http://en.wikipedia.org/wiki/Ice_pick">ice pick</a> into the office on code review days.</p>
<p>&#8220;Programming is like <a href="http://www.independentdeveloper.com/archive/2009/03/17/programming-is-like-a-dream">a dream</a>&#8221;<br />
Unfortunately sometimes it&#8217;s like a really bad dream, the kind that you get from falling asleep on your keyboard during your afternoon sugar-low, dribbling on your mouse and getting an imprint of the enter key on your forehead. The kind where you wake up screaming after a nightmare about finding a bug in a 600-line long function with one-letter variable names and no comments. Only to find it&#8217;s not a dream after all, but where you will spend the majority of your waking hours for the next six months.</p>
<p>But of course, it can also be the kind of dream where you&#8217;re so far in the zone that you feel like you&#8217;re flying, effortlessly gliding over the terrain, appreciating the bigger-picture before swooping down into the details and watching how everything meshes beautifully together. Ahhh. </p>
<p>But it&#8217;s probably not the, erm, y&#8217;know, <em>other</em> type of dream. </p>
<p>&#8220;Programming is like <a href="http://www.gameproducer.net/2006/03/03/sometimes-programming-is-like-playing-an-adventure-game/">an adventure game</a>&#8221;<br />
<img src="http://www.voyce.com/wp-content/uploads/2009/11/zork_text1.png" alt="zork_text" title="zork_text" width="150" height="150" class="alignleft size-full wp-image-535" />Yes indeed. I often find myself having to go back over ground I&#8217;ve already covered, in order to perform repetitive and mundane tasks purely so I can level up (I think it&#8217;s known as &#8220;getting promoted&#8221;).</p>
<p>Sometimes I think that compiler writers treat their error messages as some kind of sadistic text-based game:</p>
<p><code>You are in an open field west of a big white house with a boarded front door. There is an unterminated string constant to the west, and an undefined external symbol to the east. There is a header file on the floor in front of you.<br />
&gt; include header<br />
You include the header. You are in a forest with incredibly long STL error messages all around.<br />
</code></p>
<p>On a serious note, I think part of the reason programming is so difficult to pin-down is because it requires such disparate skills; a combination of creative, intuitive right-brainedness and the logical, analytical left. People can take a lot of different things away from it depending on where they start from. </p>
<p>Anyway, that&#8217;s my selection of gems. Got any other interesting ones?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.voyce.com/index.php/2009/11/11/programming-is-like-a-bad-analogy/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>TwitterVision: How Twitter transformed TV</title>
		<link>http://www.voyce.com/index.php/2009/10/13/twittervision-how-twitter-transformed-tv/</link>
		<comments>http://www.voyce.com/index.php/2009/10/13/twittervision-how-twitter-transformed-tv/#comments</comments>
		<pubDate>Mon, 12 Oct 2009 23:19:48 +0000</pubDate>
		<dc:creator>ian</dc:creator>
				<category><![CDATA[Rant]]></category>
		<category><![CDATA[tv]]></category>
		<category><![CDATA[twitter]]></category>

		<guid isPermaLink="false">http://www.voyce.com/?p=405</guid>
		<description><![CDATA[How has Twitter transformed the act of watching TV?]]></description>
			<content:encoded><![CDATA[<p><img src="http://72.47.193.211/wp-content/uploads/2009/10/old_tv_hash.png" alt="TwitterTV" title="TwitterTV" width="128" height="128" class="alignleft size-full wp-image-415" />For a long time now, TV executives have bemoaned the lack of &#8220;event TV&#8221;. Modern broadcast television is a fractured ghost of its previous self. People&#8217;s attention is no longer focused in a tight beam on 3 channels; we have millions of videos at a click on YouTube, full-length TV shows and films on iTunes, hundreds of channels on satellite and cable. That means there&#8217;s no longer a significant section of society sharing the experience of a television show and discussing it the next day at school/the office water-cooler.</p>
<p>But what they seem to have missed is that something very different, but equally significant, has replaced it: the instantaneously-shared TV experience, enabled by Twitter. With the omnipresence of laptops, broadband and Twitter, the sofa&#8217;s now connected. It&#8217;s possible to sit at home on your own and discuss, berate and dissect whatever&#8217;s on RIGHT NOW.<br />
<span id="more-405"></span><br />
Most of us have experienced shared TV viewing at some point in our lives. People my age would&#8217;ve probably sat in the living room with their parents, before every kid over the age of 6 got a TV in their bedrooms. Shared living, like student accommodation, is also a common way to experience it. As we get older our social circle tends to shrink, and television watching can become a more isolated affair.</p>
<p>Of course, the &#8220;old&#8221; ways of discussing TV still exist; we still enjoy vitriolic printed reviews in <a href="http://www.amazon.com/gp/product/0571227554?ie=UTF8&#038;tag=wwwvoycecom-20&#038;linkCode=as2&#038;camp=1789&#038;creative=9325&#038;creativeASIN=0571227554">books</a><img src="http://www.assoc-amazon.com/e/ir?t=wwwvoycecom-20&#038;l=as2&#038;o=1&#038;a=0571227554" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" />, newspapers and magazines, we can still call someone and discuss a program over the phone. But these off-line methods are bandwidth-limited (we can only call one person at a time), slow (with a lead time of days or weeks for printed media) or uni-directional. Fundamentally, they lack immediacy.</p>
<p>In contrast Twitter enables us to connect with lots of people simultaneously; lots of people who are all sharing the same TV experience. It&#8217;s like having a load of sarcastic, funny mates in your living room. Ones that you can get rid off just by closing a laptop lid.</p>
<p>I&#8217;ve identified 5 major groups of TV twitters:</p>
<p><b>Schedulers</b><br />
These helpful individuals post tweets about things they find interesting and are intending to watch themselves, normally along the lines of:<br />
<img src="http://72.47.193.211/wp-content/uploads/2009/10/default_profile_3_normal.png" alt="default_profile_3_normal" title="default_profile_3_normal" width="48" height="48" class="alignleft"  /><code>Guy Richie's Revolver is starting now on Channel 5 - the most confusing film I've ever seen!</code><br/><br />
The usefulness depends on the type of people you follow and on where in the world they are. @aplusk and @courtneylover79 are not going to be posting much about what&#8217;s on BBC 1 on a Sunday evening.</p>
<p><b>Crowds</b><br />
This accounts for the vast majority of people twittering about telly. They tend to congregate around large &#8220;event&#8221; programmes, Eurovision, Derren Brown, X-Factor etc, or geek-oriented watching such as Charlie Brookers recent (and excellent) <a href="http://www.whatthetrend.com/trend/Gameswipe">Gameswipe</a>. Of course any reality-TV type programme presents significant opportunities for Twitter-enabled sniping. We all know how much the internet <i>loves</i> this kind of &#8220;look at that!&#8221;, &#8220;lolwut&#8221;, &#8220;OMG!&#8221;, &#8220;loozer&#8221; stuff, but it&#8217;s often combined with genuinely funny material too.</p>
<p><b>Hangers-on</b><br />
This groups consists mostly of spammers, and people outside of the country where the program is being broadcast. They spot trending hashtags and either piggyback whatever they&#8217;re selling onto it, or tweet something along the lines of &#8220;What the hell is #nnn&#8230;?&#8221;. They don&#8217;t add much. Enough about them.</p>
<p><b>Celebrity Friends</b><br />
If you follow celebrities* &#8211; and lets be honest, who doesn&#8217;t? &#8211; the chances are they have some friends. And celebrities friends are quite often celebrities themselves (keep it in the family, eh?) so you&#8217;ll often see tweets like:<br />
<img src="http://72.47.193.211/wp-content/uploads/2009/10/default_profile_3_normal.png" alt="default_profile_3_normal" title="default_profile_3_normal" width="48" height="48" class="alignleft"  /><code>my friend on bbc2 newsnight right now! go sister!</code><br/><br/><br />
Try to contain your excitement. Unless it&#8217;s you of course, and then you&#8217;re welcome to tweet <code>OMG!1!! I'm on TELLY!!</code><br />
(* of course, by celebrity I mean anyone with more than 500 followers).</p>
<p><b>Commentators</b><br />
Some twitterers take it upon themselves to provide blow-by-blow, often eloquent and vaguely fantastical coverage of certain programmes. This can feel like having someone on LSD on the sofa next to you whispering in your ear. So probably not for those of a sensitive disposition.<br />
<img src="http://72.47.193.211/wp-content/uploads/2009/10/default_profile_3_normal.png" alt="default_profile_3_normal" title="default_profile_3_normal" width="48" height="48" class="alignleft"  /><code>Gregg keeps saying "I would happily eat that." To be fair, he would happily eat an old Big Mac out of a tramp's shoe.</code><br/><br />
This type of companionship can brighten even the most mundane viewing. It tends to be the product of &#8220;resting&#8221; writers or comedians, writer\comedians, or comedian\writers.</p>
<p>Will TV ever be the same again? For me it won&#8217;t.</p>
<p>(The @names have been changed to protect the innocent. Well, some of them&#8230;)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.voyce.com/index.php/2009/10/13/twittervision-how-twitter-transformed-tv/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The 7 signs your UI was created by a programmer</title>
		<link>http://www.voyce.com/index.php/2009/09/14/the-7-signs-your-ui-was-created-by-a-programmer/</link>
		<comments>http://www.voyce.com/index.php/2009/09/14/the-7-signs-your-ui-was-created-by-a-programmer/#comments</comments>
		<pubDate>Mon, 14 Sep 2009 22:57:35 +0000</pubDate>
		<dc:creator>ian</dc:creator>
				<category><![CDATA[Excel]]></category>
		<category><![CDATA[Rant]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Usability]]></category>
		<category><![CDATA[GUI]]></category>
		<category><![CDATA[win32]]></category>

		<guid isPermaLink="false">http://www.voyce.com/?p=344</guid>
		<description><![CDATA[Programmers are notoriously bad at creating good user interfaces. How can you tell if your app was designed by a programmer? (Hint: it's easy).]]></description>
			<content:encoded><![CDATA[<p>Do you suspect a programmer may have put together the terrible user interface on that &#8220;enterprise&#8221; software you&#8217;re forced to use every day? There are some give-away indicators. Look out for them in your software, hunt down the developer and force them to read <a href="http://www.amazon.com/gp/product/0470084111?ie=UTF8&#038;tag=wwwvoycecom-20&#038;linkCode=as2&#038;camp=1789&#038;creative=9325&#038;creativeASIN=0470084111">a book about user interface design</a><img src="http://www.assoc-amazon.com/e/ir?t=wwwvoycecom-20&#038;l=as2&#038;o=1&#038;a=0470084111" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" />. If you&#8217;re suitably senior, force them to a) improve it, or even better b) get someone with real UI experience to fix it.</p>
<p><b>1. Exclamation marks in dialog box messages</b><br />
Look, it&#8217;s probably the 50th time I&#8217;ve seen this message today. The fact that this application &#8220;Cannot connect to database!&#8221; is no longer a surprise. You may have noticed that most professional software uses a neutral tone for its communication with the user. Try that. Also:<br />
<b>1a. Double negatives in confirmation dialogs</b><br />
&#8220;Are you sure you don&#8217;t want to lose your changes?&#8221; Err&#8230; what? No. I mean YES. Oh sh*t. Any dialog that requires you to stop and try to parse the question in order to work out if you&#8217;re about to destroy several hours of work is not doing its job. It&#8217;s getting in the way of you doing your job. In fact, convoluted messages are such a serious issue that Microsoft even tried to help developers to help their users by introducing a whole new kind of dialog box in Vista: the <a href="http://msdn.microsoft.com/en-us/library/aa511269(loband).aspx#questionDialogsLinks">question/task dialog</a>. Good luck with that.</p>
<p><b>2. No tab ordering defined\mouse only navigation</b><br />
Because no-one&#8217;s ever going to use the keyboard to navigate the zillion controls in your data entry app, are they? This one actually surprises me, because I&#8217;d have thought that developers would&#8217;ve needed to navigate quickly through the application while they&#8217;re writing it. Well, that doesn&#8217;t seem to be the case. Pretty much all commercial apps are good counter examples. I don&#8217;t mean to hold up Microsoft Office as a paragon of UI virtue, but they definitely do the &#8220;alternate way of navigating everything&#8221; thing well. Everything you need can be reached by both keyboard and mouse. Unplug your mouse and try that with your favourite piece of in-house software and see how you get on.</p>
<p><a href="http://72.47.193.211/wp-content/uploads/2009/09/groups.png"><img src="http://72.47.193.211/wp-content/uploads/2009/09/groups.png" alt="groups" title="groups" width="360" height="327" class="alignleft size-full wp-image-358" /></a><b>3. Group boxes around everything</b><br />
This is a bit of a WinForms specific one. The clue is in the name: group boxes are for <i>grouping</i> logically related controls, not for providing a kewl recessed border around <i>every single one</i> of the controls in your dialog. Don&#8217;t kid yourself that this is doing anything other than using up some valuable screen real estate. (See if you can spot another pet peeve in the example dialog, too).</p>
<p><a href="http://72.47.193.211/wp-content/uploads/2009/09/icon_editor.png"><img src="http://72.47.193.211/wp-content/uploads/2009/09/icon_editor.png" alt="icon_editor" title="icon_editor" width="128" height="128" class="alignleft size-full wp-image-361" /></a><b>4. Icons created in the IDE</b><br />
Look, Visual Studio&#8217;s a really good integrated development environment, but it ain&#8217;t no Photoshop. Don&#8217;t try and use it to create icons. And while you&#8217;re at it, please don&#8217;t make icons consisting solely of the name of your application (inevitably an acronym) in pixel font and primary colours. Oh, and don&#8217;t just steal various icons from another application, unless you&#8217;re going to steal the whole lot; one of the key visual aspects of a good UI is consistency. Mixing your hand-drawn 4-bit icons with the glorious 32-bit shiny ones you borrowed is going to be jarring. In fact, why not go the whole way and get someone who can actually draw to create your icons for you? After all, you wouldn&#8217;t have someone who wasn&#8217;t a programmer writing the code, would you&#8230;?</p>
<p><b>5. Data grids</b><br />
Otherwise known as the &#8220;Excel is the pinnacle of user interface design&#8221; disease. Break the habit. Generally, the more types of controls that are embedded in your grid, the less likely that it&#8217;s the right kind of interface paradigm. Yeah, I&#8217;m looking at you, person embedding a calendar control, drop down box, graph, slider and checkbox in each row of a data grid. And whatever your 3rd-party grid provider of choice says, it&#8217;s not going to do screen redraw performance any good, either.</p>
<p><b>6. Not implemented message boxes</b><br />
Ahh, the GUI equivalent of source code TODO comments. Of course, it&#8217;s an in-house software give-away; no commercial (desktop) software would be brazen enough to ship with bits of functionality dangling from the stumps of buttons and menu items. Would it? Feel free to provide counter-examples if you have them.</p>
<p><a href="http://72.47.193.211/wp-content/uploads/2009/09/dialog_dialog.png"><img src="http://www.voyce.com/wp-content/uploads/2009/09/dialog_dialog-300x114.png" alt="dialog_dialog" title="dialog_dialog" width="300" height="114" class="alignright size-medium wp-image-365" /></a><b>7. Excessive use of dialog boxes</b><br />
Warning: dialog boxes are considered harmful (to usability). They&#8217;re the equivalent of restraining your user by force and preventing her from moving until she answers your question. That might be OK for matters of life or death (i.e. data loss), but not otherwise. Every time you find yourself about to add a new message box, stop, take a deep breath and consider whether it&#8217;s really necessary.</p>
<p>So, if you&#8217;re a victim or one, many, or all of these user interface faux pas, all I can say is: sorry. I&#8217;ve been responsible for doing at least one of these things myself over the years. Consider this post repentance for my user interface sins.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.voyce.com/index.php/2009/09/14/the-7-signs-your-ui-was-created-by-a-programmer/feed/</wfw:commentRss>
		<slash:comments>42</slash:comments>
		</item>
		<item>
		<title>Static libraries are Evil</title>
		<link>http://www.voyce.com/index.php/2008/09/24/static-libraries-are-evil/</link>
		<comments>http://www.voyce.com/index.php/2008/09/24/static-libraries-are-evil/#comments</comments>
		<pubDate>Wed, 24 Sep 2008 15:27:27 +0000</pubDate>
		<dc:creator>ian</dc:creator>
				<category><![CDATA[COM]]></category>
		<category><![CDATA[Excel]]></category>
		<category><![CDATA[Rant]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[c++]]></category>
		<category><![CDATA[dll]]></category>
		<category><![CDATA[lib]]></category>

		<guid isPermaLink="false">http://www.voyce.com/?p=41</guid>
		<description><![CDATA[In my opinion.
Why? Well, because it&#8217;s too easy to use them as an excuse for not defining your shared library interfaces properly.
The reason this is on my mind recently is that several hundred, yes, you heard that right, several hundred DLLs have been released by my group over the last, ooh, 10 years or so. [...]]]></description>
			<content:encoded><![CDATA[<p>In my opinion.</p>
<p>Why? Well, because it&#8217;s too easy to use them as an excuse for not defining your shared library interfaces properly.</p>
<p>The reason this is on my mind recently is that several hundred, yes, you heard that right, several <em>hundred</em> DLLs have been released by my group over the last, ooh, 10 years or so. They are all still in use. Each of them has burned into it a copy of the library that deals with interfacing with Excel. That means each of these has it&#8217;s own little internal copy of the current state-of-the-art. The problem with that is; the state-of-the-art moves on. And how do you go about updating the DLLs that are already in production? You have to re-release them. In an environment where thes DLLs are used for marking the profit and loss on a large derivatives trading book, that&#8217;s not a small undertaking. And it&#8217;s made worse if, say the DLL in question was last released with a different version of the compiler.</p>
<p>My approach would be to refactor this shared static library (.lib) into a stand-alone DLL.</p>
<p>At this point, people start saying &#8220;oh, but then you&#8217;ve got a single point of failure, if you release a broken version of that DLL, everything will stop working!&#8221;. Not exactly a compelling argument. If the functionality of the DLL is well defined, and there are well known entry points it should be easy to put together a comprehensive black-box test suite. In fact we already do that with all our other DLLs (COM servers). The fact that this shared library *isn&#8217;t* a DLL has meant that it&#8217;s fallen through the testing cracks; another good reason to refactor it.</p>
<p>The internal interface to the shared library is already relatively well defined. It has a set of header files that define all of the functions and classes that are consumed by others. It&#8217;s a relatively small step to compile it as a DLL, rather than a static library. The problem then becomes one of maintenance, dealing with the inevitable changes to the external interface in a backwardly compatible way.</p>
<p>And that&#8217;s the problem. It requires some effort. Elsewhere in our codebase we use COM as a magic cure-all for avoiding having to deal with versioning: interface immutability rules. All interfaces are public, no published interface ever changes, object identity is based purely on interfaces supported. If you haven&#8217;t got these crutches to rely on, then you have to enforce the rules yourself, which can be both logistically and technically difficult when you&#8217;re dealing with C++.</p>
<p>But it&#8217;s not impossible. And I really think it would be better than having hundreds of DLLs all containing subtley different versions of the same code, and being unable to change behaviour across the board without having to build, test and release them all.</p>
<p>Maybe you&#8217;ve got a different opinion?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.voyce.com/index.php/2008/09/24/static-libraries-are-evil/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Back from the brink&#8230;</title>
		<link>http://www.voyce.com/index.php/2008/02/09/back-from-the-brink/</link>
		<comments>http://www.voyce.com/index.php/2008/02/09/back-from-the-brink/#comments</comments>
		<pubDate>Sat, 09 Feb 2008 00:20:26 +0000</pubDate>
		<dc:creator>ian</dc:creator>
				<category><![CDATA[Rant]]></category>

		<guid isPermaLink="false">http://www.voyce.com/?p=25</guid>
		<description><![CDATA[&#60;sigh&#62; After the attack of the incompetent hosts (1&#38;1). Previous content should be restored shortly.
]]></description>
			<content:encoded><![CDATA[<p>&lt;sigh&gt; After the attack of the incompetent hosts (1&amp;1). Previous content should be restored shortly.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.voyce.com/index.php/2008/02/09/back-from-the-brink/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
