<?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>Mockery Blog</title>
	<atom:link href="http://getmockery.com/blog/feed" rel="self" type="application/rss+xml" />
	<link>http://getmockery.com/blog</link>
	<description>GetMockery.com company blog - Mockery, UI, and more.</description>
	<lastBuildDate>Fri, 16 Dec 2011 19:48:51 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>1.1.0 Is Out! What the Hell Took So Long?</title>
		<link>http://getmockery.com/blog/archives/130</link>
		<comments>http://getmockery.com/blog/archives/130#comments</comments>
		<pubDate>Tue, 10 Aug 2010 23:21:55 +0000</pubDate>
		<dc:creator>Joel Anair</dc:creator>
				<category><![CDATA[Site News]]></category>
		<category><![CDATA[Startups]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[advice]]></category>
		<category><![CDATA[anecdotes]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[mistakes]]></category>
		<category><![CDATA[Mockery]]></category>
		<category><![CDATA[not-invented-here]]></category>
		<category><![CDATA[releases]]></category>

		<guid isPermaLink="false">http://getmockery.com/blog/?p=130</guid>
		<description><![CDATA[The moral of the story is this: think very seriously about what you're doing before you set about reimplementing anything non-trivial. You're not just risking the time it takes to re-write what someone else already wrote; you're risking the time it will then take you to integrate what you should have used in the first place. ]]></description>
			<content:encoded><![CDATA[<p>After several months, we released <a title="UI Prototypes and Mockups Made Easy" href="http://getmockery.com">Mockery</a> 1.1.0 last night. There are a lot of big changes:</p>
<ul>
<li>New and much improved rich text widget (based on TinyMCE)</li>
<li>Awesome new data grid editor/builder</li>
<li>Improved look and feel</li>
<li>Much better stability, particularly on Macs and with large documents</li>
</ul>
<p>You&#8217;ll find lots of other fixes and tweaks; it&#8217;s our biggest update yet. But you may wonder why it took nearly 5 months. Well, for me the central character in the story is <a title="Not Invented Here Syndrome" href="http://en.wikipedia.org/wiki/Not_Invented_Here">Not Invented Here Syndrome</a>.</p>
<p>Now, you&#8217;re probably all familiar with this nefarious malady that we developers suffer. In case any of you aren&#8217;t, it&#8217;s a term to describe reluctance to use technologies that were not developed in-house. There are a lot of justifications for it, and <a title="Joel On Software Discussion" href="http://discuss.fogcreek.com/joelonsoftware/default.asp?cmd=show&amp;ixPost=112">it doesn&#8217;t always cause problems</a>, but what is important to consider is that if it bites you, <em>it&#8217;s probably going to bite you twice</em>.</p>
<p>What does that mean? Take the example of Mockery&#8217;s rich text editor control. When we started Mockery, we built what we thought was a robust and powerful editor. Why didn&#8217;t we use a free, open source, off-the-shelf solution? Well, the options we had were mostly web-based, and Mockery isn&#8217;t really a web app, and we were sure we could do a better job&#8230;and so on. At least part of the reasoning was (I&#8217;m sure) that it would be fun to write a WYSIWYG.</p>
<p>It was, and it wasn&#8217;t. But that doesn&#8217;t matter, because either way <em>it was a lot of work.</em> So we stuck it out, but eventually it became clear that we did not have the focus, resources, or motivation to compete with <a title="TinyMCE" href="http://tinymce.moxiecode.com/">TinyMCE</a>. The only answer that made sense was to bite the bullet and just use it. No big deal, right? We&#8217;ll just throw our stuff out and integrate the new stuff, no problem, right?</p>
<p>Unfortunately, we&#8217;d already painted ourselves into a bit of a corner with our own tool. It had features that no off-the-shelf system had, had a different input and output model, fired different events, accepted different commands&#8230;incorporating a 3rd party tool into an existing app is not an easy task.</p>
<p><strong>The moral of the story is this: </strong>think very seriously about what you&#8217;re doing before you set about reimplementing anything non-trivial. You&#8217;re not just risking the time it takes to re-write what someone else already wrote; you&#8217;re risking the time it will then take you to integrate what you should have used in the first place.</p>
<p>I know I&#8217;ll be heeding this advice, and I know <a title="UI Mockups and Prototypes Made Easy" href="http://getmockery.com">Mockery</a> will be much better for it.</p>
]]></content:encoded>
			<wfw:commentRss>http://getmockery.com/blog/archives/130/feed</wfw:commentRss>
		<slash:comments>69</slash:comments>
		</item>
		<item>
		<title>The 7 Greatest Left-Handed Guitarists of All Time</title>
		<link>http://getmockery.com/blog/archives/112</link>
		<comments>http://getmockery.com/blog/archives/112#comments</comments>
		<pubDate>Tue, 09 Feb 2010 03:08:24 +0000</pubDate>
		<dc:creator>Joel Anair</dc:creator>
				<category><![CDATA[music]]></category>
		<category><![CDATA[guitar]]></category>
		<category><![CDATA[idle]]></category>

		<guid isPermaLink="false">http://getmockery.com/blog/?p=112</guid>
		<description><![CDATA[As I&#8216;ve mentioned before, I play guitar left-handed. And I won&#8217;t get into the question of whether it&#8217;s a good thing or a bad thing (or a little of both). It is, however, fairly unusual. Anywhere from 7-10% of the population is left-handed, but go to a guitar store and see if 7-10% of the [...]]]></description>
			<content:encoded><![CDATA[<p>As I<a title="My post on playing lefty" href="ttp://getmockery.com/blog/archives/57">&#8216;ve mentioned before</a>, I play guitar left-handed. And I won&#8217;t get into the question of whether it&#8217;s a good thing or a bad thing (or a little of both). It is, however, fairly unusual. Anywhere from 7-10% of the population is left-handed, but go to a guitar store and see if 7-10% of the guitars are. It&#8217;s rare enough that I&#8217;ve only ever met a couple of other southpaw players, and that was only when buying or selling a guitar.</p>
<p>There have been a handful of greats, though, who play the &#8220;wrong&#8221; way. As a fun (and hopelessly subjective) exercise I thought I would put together a top 7 (get it? 7%?) list. Here goes:</p>
<p style="text-align: center;"><img class="size-medium wp-image-114 aligncenter" title="jimi_hendrix_on_stage_fender_stratocaster" src="http://getmockery.com/blog/wp-content/uploads/2010/02/jimi_hendrix_on_stage_fender_stratocaster-282x300.jpg" alt="jimi_hendrix_on_stage_fender_stratocaster" width="197" height="210" /></p>
<p>1. <strong>Jimi Hendrix</strong>. This one&#8217;s a no-brainer. He would have been #1 on the list of greatest right-handed guitarists, too, if he had played right-handed. He played a variety of guitars, both built left-handed models and righty guitars with the strings flipped. The greatest rock guitarist of all time.</p>
<p><img class="aligncenter size-full wp-image-115" title="dick_dale" src="http://getmockery.com/blog/wp-content/uploads/2010/02/dick_dale.jpeg" alt="dick_dale" width="254" height="298" /></p>
<p>2. <strong>Dick Dale</strong>. The king of the surf guitar was was and continues to be innovative and inimitable. He plays Fender Stratocasters strung upside down (that is, strung as if for a right-handed player). His machine gun tremolo picking and lightning-fast runs were unlike anything anyone else was doing when he appeared on the scene.</p>
<p><img class="aligncenter size-medium wp-image-116" title="albertking" src="http://getmockery.com/blog/wp-content/uploads/2010/02/albertking-244x300.jpg" alt="albertking" width="244" height="300" /></p>
<p>3. <strong>Albert King</strong>. The Velvet Bulldozer. A tremendous blues frontman, he had a commanding and powerful stage presence and voice that complimented his muscular and agressive playing. He&#8217;s another guy who played guitars strung for right-handed players, which no doubt contributed to his unique voicing and phrasing.</p>
<p><img class="aligncenter size-medium wp-image-117" title="tony iommi" src="http://getmockery.com/blog/wp-content/uploads/2010/02/tony-iommi-235x300.jpg" alt="tony iommi" width="235" height="300" /></p>
<p>4. <strong>Tony Iommi</strong>. A founding member of Black Sabbath, Iommi has as much claim as anyone else to the title &#8220;inventor of heavy metal.&#8221; Since 1969, Iommi has been cranking out classic metal riffs, from Iron Man to War Pigs to Sweet Leaf, along with some surprisingly sweet and sophisticated prog-rock-inspired interludes like A Bit of Finger and Planet Caravan.</p>
<p><img class="aligncenter size-medium wp-image-118" title="paul-mccartney-2" src="http://getmockery.com/blog/wp-content/uploads/2010/02/paul-mccartney-2-199x300.jpg" alt="paul-mccartney-2" width="199" height="300" /></p>
<p>5. <strong>Paul McCartney</strong>. Surely the man needs no introduction, but besides being a very musical and underrated bass player, McCartney played guitar on several Beatles songs. Later on in Wings and his solo efforts he played many of the guitar parts.</p>
<p><img class="aligncenter size-full wp-image-119" title="kurt-cobain-1" src="http://getmockery.com/blog/wp-content/uploads/2010/02/kurt-cobain-1.jpeg" alt="kurt-cobain-1" width="300" height="282" /></p>
<p>6. <strong>Kurt Cobain</strong>. Not a great technical player, but composed some classic riffs and songs, many of which are very deceptively hard to sing and play at the same time. Would be rated much higher if this list was based upon influence, but even as a guitarist he could hang with the greats. Interestingly enough, Cobain wrote with his right hand.</p>
<p><img class="aligncenter size-medium wp-image-120" title="Mars Volta 6" src="http://getmockery.com/blog/wp-content/uploads/2010/02/Mars-Volta-6-273x300.jpg" alt="Mars Volta 6" width="273" height="300" /></p>
<p>7. <strong>Omar Rodríguez-López</strong>. Pompous? Yes. Often annoying? Well, that&#8217;s my opinion, but yes. Say what you will, (and obviously I&#8217;m not a great fan,) the guitarist for At the Drive In and The Mars Volta can shred.</p>
<p>So, what do you think? Anyone I missed? Who should I move up the list?</p>
]]></content:encoded>
			<wfw:commentRss>http://getmockery.com/blog/archives/112/feed</wfw:commentRss>
		<slash:comments>179</slash:comments>
		</item>
		<item>
		<title>Thrown for a loop by JavaScript&#8217;s ReferenceError</title>
		<link>http://getmockery.com/blog/archives/109</link>
		<comments>http://getmockery.com/blog/archives/109#comments</comments>
		<pubDate>Mon, 08 Feb 2010 00:40:47 +0000</pubDate>
		<dc:creator>Joel Anair</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://getmockery.com/blog/?p=109</guid>
		<description><![CDATA[The other day I was talking to a couple of friends about a ReferenceError they were getting in some code they were running. They were just checking for the existence of a global variable. They were just doing this:

   if(foo){
      doSomething();
   }

Would you expect that to [...]]]></description>
			<content:encoded><![CDATA[<p>The other day I was talking to a couple of friends about a ReferenceError they were getting in some code they were running. They were just checking for the existence of a global variable. They were just doing this:</p>
<pre name="code" class="javascript">
   if(foo){
      doSomething();
   }
</pre>
<p>Would you expect that to work? If so, you&#8217;re better at this than I am. If foo is not defined, either in the current scope or globally, you&#8217;ll get a ReferenceError there. Why does this strike me as so inconsistent? Consider the following:</p>
<pre name="code" class="javascript">
   var foo = {};
   if(foo.propertyThatDoesntExist){
      doSomething();
   }
</pre>
<p>If you check for the existence of a property of an object that doesn&#8217;t exist, it simply returns <em>undefined</em>. No error is thrown, your code doesn&#8217;t halt execution, things don&#8217;t explode. In fact, the interpreter will work its way up the scope chain from foo, looking for the missing property.</p>
<p>Now, consider this example:</p>
<pre name="code" class="javascript">
   var setImplicitGlobal = function(){
      implicitGlobal = 'Are you sure this is what you wanted?';
   }

   setImplicitGlobal();
   alert(implicitGlobal);   // Alerts the string from above
</pre>
<p>So when we&#8217;re doing assignment and try to assign a value to an undefined variable, the interpreter assumes we wanted a new global variable and creates it for us. Despite the fact that this is almost never what anyone would reasonably want to happen. </p>
<p>Finally, consider the following:</p>
<pre name="code" class="javascript">
if(foo){   // Reference error when foo has not been declared
   doSomething();
}

if(window.foo){  // Undefined when foo window.foo has not been set.
   doSomething()
}
</pre>
<p>So when we try to assign a value to an undeclared variable, the interpreter assumes we meant <em>window.foo</em> and creates it for us. But when we&#8217;re trying to read the same thing, it doesn&#8217;t make the same assumption, throws an error, and breaks our script even when we thought we were coding defensively. </p>
<p>What am I missing here? This is sort of inconsistent, is it not?</p>
]]></content:encoded>
			<wfw:commentRss>http://getmockery.com/blog/archives/109/feed</wfw:commentRss>
		<slash:comments>65</slash:comments>
		</item>
		<item>
		<title>Mockery Tips and Tricks</title>
		<link>http://getmockery.com/blog/archives/99</link>
		<comments>http://getmockery.com/blog/archives/99#comments</comments>
		<pubDate>Sat, 16 Jan 2010 23:03:47 +0000</pubDate>
		<dc:creator>Joel Anair</dc:creator>
				<category><![CDATA[Tips and Tricks]]></category>
		<category><![CDATA[Mockery]]></category>
		<category><![CDATA[support]]></category>
		<category><![CDATA[tips]]></category>
		<category><![CDATA[tricks]]></category>

		<guid isPermaLink="false">http://getmockery.com/blog/?p=99</guid>
		<description><![CDATA[Today I&#8217;m posting the first of what I intend to be a regular series of posts detailing tips, tricks, and lesser-known features in Mockery. You may be using Mockery (if you&#8217;re not, get over to the download page and get your copy!) without knowing about some really cool features.
OS Themes

One of Mockery&#8217;s most powerful features [...]]]></description>
			<content:encoded><![CDATA[<p>Today I&#8217;m posting the first of what I intend to be a regular series of posts detailing tips, tricks, and lesser-known features in Mockery. You may be using Mockery (if you&#8217;re not, get over to the <a title="Download Mockery for Windows or Mac" href="http://getmockery.com/download.html">download page</a> and get your copy!) without knowing about some really cool features.</p>
<h3>OS Themes</h3>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-101" title="themes" src="http://getmockery.com/blog/wp-content/uploads/2010/01/themes.png" alt="themes" width="479" height="111" /></p>
<p>One of Mockery&#8217;s most powerful features is one that a surprising number of users don&#8217;t take advantage of: the ability to view your mockups as realistic Windows or Mac applications. You can change the OS theme of the current slide on-the-fly using the toolbar buttons:</p>
<p style="text-align: center;"><img class="size-full wp-image-102 aligncenter" title="Theme buttons" src="http://getmockery.com/blog/wp-content/uploads/2010/01/themebuttons.png" alt="The buttons used to change themes" width="143" height="32" /></p>
<h3>Populate menubars and menus with common values</h3>
<p>You can save a lot of time when adding menus to a mockup by using the <strong>Populate with common values</strong> command. To do this, first add a menubar to a window by checking the &#8220;Has a menubar&#8221; box. You&#8217;ll see the menubar appear (either in the window or at the top of the slide, depending upon whether the current theme is MacOS X). You can enter the name of a new menu in the text box and press <em>enter </em>to add a new menu.</p>
<p>However, Mockery can help out by adding the default File, Edit, and Help menus for you, including their common menu items. Just right-click on the the menubar (Cmd-click on a Mac) and choose <strong>Populate with common values</strong>. You&#8217;ll see the new menus right away.</p>
<p><img class="aligncenter size-full wp-image-103" title="populate" src="http://getmockery.com/blog/wp-content/uploads/2010/01/populate.png" alt="populate" width="601" height="463" /></p>
<h3>Copy as Image, and paste image data into Mockery</h3>
<p>You may not know that you can copy any Mockery element to the clipboard as an image and paste it into an email or word processing document. It&#8217;s easy. Just highlight the item you want to copy and click the <strong>Copy as image</strong> button on the toolbar.</p>
<p>You also may not know that you can paste image data directly in to Mockery. This can be very useful for basing new mockups on existing applications. Just take a screenshot of the app you want to modify, then choose Edit-Paste in Mockery. You&#8217;ll see a new image element has been added to your document.</p>
<h3>Where to learn more</h3>
<p>You can find lots of tips and instructions on the <a title="Mockery support page" href="http://getmockery.com/support/index.html">support page</a>. Also feel free to get in touch with me via <a title="Email Joel" href="mailto://joel.anair@getmockery.com">email</a> or on Twitter at getMockery.</p>
]]></content:encoded>
			<wfw:commentRss>http://getmockery.com/blog/archives/99/feed</wfw:commentRss>
		<slash:comments>57</slash:comments>
		</item>
		<item>
		<title>The most astonishingly bad product I have ever seen</title>
		<link>http://getmockery.com/blog/archives/92</link>
		<comments>http://getmockery.com/blog/archives/92#comments</comments>
		<pubDate>Wed, 16 Dec 2009 01:32:17 +0000</pubDate>
		<dc:creator>Joel Anair</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[bad design]]></category>
		<category><![CDATA[bad ideas]]></category>
		<category><![CDATA[booze]]></category>
		<category><![CDATA[funny]]></category>
		<category><![CDATA[idle]]></category>
		<category><![CDATA[lame]]></category>

		<guid isPermaLink="false">http://getmockery.com/blog/?p=92</guid>
		<description><![CDATA[Sorry for the non-UI/non-software post, but I happened upon Dr. McGillicuddy&#8217;s website today (don&#8217;t ask me how, it&#8217;s a long story) and from there found my way to the General Store, where people who survive the awful site design and navigation can buy various merch branded with their favorite budget liqueur. It was there in [...]]]></description>
			<content:encoded><![CDATA[<p>Sorry for the non-UI/non-software post, but I happened upon <a title="Dr. McGillicuddy's schnapps" href="http://www.drmcgillicuddy.com">Dr. McGillicuddy&#8217;s website</a> today (don&#8217;t ask me how, it&#8217;s a long story) and from there found my way to the <a title="Dr. McGillicuddy's schwag outlet" href="http://store.drmcgillicuddy.com/merchant2/merchant.mvc?Screen=CTGY&amp;Store_Code=drmgenstore&amp;Category_Code=DrM">General Store</a>, where people who survive the awful site design and navigation can buy various merch branded with their favorite budget liqueur. It was there in the <a title="This is almost definitely not drinking in style" href="http://store.drmcgillicuddy.com/merchant2/merchant.mvc?Screen=CTGY&amp;Store_Code=drmgenstore&amp;Category_Code=Drink_in_style">Drink In Style</a> section that I found this:</p>
<div id="attachment_93" class="wp-caption aligncenter" style="width: 390px"><img class="size-full wp-image-93 " title="Dr. Family Ski Shot" src="http://getmockery.com/blog/wp-content/uploads/2009/12/DrMShotskiLG.jpg" alt="The incredibly awful Dr. Family Ski Shot" width="380" height="143" /><p class="wp-caption-text">The bafflingly awful Dr. Family Ski Shot</p></div>
<p>It&#8217;s the <a title="Dr. Family Ski Shot. " href="http://store.drmcgillicuddy.com/merchant2/merchant.mvc?Screen=PROD&amp;Store_Code=drmgenstore&amp;Product_Code=GSFAMSKI&amp;Category_Code=Drink_in_style">Dr. Family Ski Shot</a>. I guess it&#8217;s for the family that drinks together? Or it&#8217;s a ski shot designed by Dr. Family? Either way, it&#8217;s $59.99. For that kind of scratch, it had better be pretty useful, no? So what would you say it is&#8230;you do here, Dr. Family Ski Shot?</p>
<p>From the site:</p>
<blockquote><p>Line up for shots. The Doctor Shot Ski is designed to let 3 people stand side by side to do a shot. It looks and feels like a real mini ski.</p></blockquote>
<p>So it&#8217;s designed to let 3 people stand side by side to do a shot. Were people having trouble doing that without a schnapps-themed piece of miniaturized sporting equipment?</p>
<p>I am glad to see that it looks and feels like a real mini ski. I was getting really tired of all those drinking aids that didn&#8217;t feel like a mini ski. Or look like a mini ski. This one nails that, because, well, it was designed to.</p>
<p>Thanks, Doc!</p>
]]></content:encoded>
			<wfw:commentRss>http://getmockery.com/blog/archives/92/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Today&#8217;s fun JavaScript trick: switch(true)</title>
		<link>http://getmockery.com/blog/archives/80</link>
		<comments>http://getmockery.com/blog/archives/80#comments</comments>
		<pubDate>Sat, 21 Nov 2009 02:07:55 +0000</pubDate>
		<dc:creator>Joel Anair</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[fun]]></category>
		<category><![CDATA[switch]]></category>
		<category><![CDATA[tips]]></category>
		<category><![CDATA[tricks]]></category>

		<guid isPermaLink="false">http://getmockery.com/blog/?p=80</guid>
		<description><![CDATA[Programmers who are new to JavaScript but familiar with other C-syntax languages like C or Java are definitely familiar with the switch statement, but may not be aware of how much more flexible this construct is in JavaScript. In fact, I&#8217;ve heard experienced programmers claim that they never use switch statements!
One major difference in the [...]]]></description>
			<content:encoded><![CDATA[<p>Programmers who are new to JavaScript but familiar with other C-syntax languages like C or Java are definitely familiar with the switch statement, but may not be aware of how much more flexible this construct is in JavaScript. In fact, I&#8217;ve heard experienced programmers claim that they never use switch statements!</p>
<p>One major difference in the JavaScript switch statement  is the fact that the condition can be any type of variable, not just numeric types. Most obviously, this allows you to use a string or an object, which provides a lot of flexibility. So much flexibility, in fact, that when used with a boolean condition the JavaScript switch can provide a very different type of program flow control.</p>
<p>For example, consider a case where we want to take different actions, respectively, if a number is greater than 100, less than -100, or equal to 0. We could write it as a series of if/else ifs, like this:</p>
<pre name="code" class="javascript">if(x &gt; 100) {
    doSomething();
} else if (x &lt; -100){
    doSomethingElse();
} else if (x == 0){
    doAThirdThing();
}</pre>
<p>Using a switch statement, this block becomes:</p>
<pre name="code" class="javascript">switch(true){
    case (x &gt; 100):
        doSomething();
    break;
    case (x &lt; -100):
        doSomethingElse();
    break;
    case (x == 0):
        doAThirdThing();
    break;
}</pre>
<p>Is that any better? Probably not. In fact, it&#8217;s a little more clever, which may make it a little harder for other programmers to maintain, which would actually make it worse. However, consider the case where we want to take a specific action if x is greater than 100 <strong>or</strong> y is greater than 200, <strong>or</strong> z is less than -100, <strong>or</strong> if (x + y + z) is greater than 500. We could write this:</p>
<pre name="code" class="javascript">if(x&gt;100 || y &gt; 200 || z &lt; -100 || (x + y + z) &gt; 500){
    // um, what?
    doSomething();
}</pre>
<p>Using the switch statement, that same code looks like this:</p>
<pre name="code" class="javascript">switch(true){
    case x &gt; 100:
    case y &gt; 200:
    case z &lt; -100:
    case (x + y + z) &gt; 200:
        doSomething();
    break;
}</pre>
<p>I find the second block much more readable. Is it groundbreaking or radically new? No, but this is just another case where the flexibility of JavaScript&#8217;s syntax provides an interesting opportunity for more maintainable, readable code.</p>
]]></content:encoded>
			<wfw:commentRss>http://getmockery.com/blog/archives/80/feed</wfw:commentRss>
		<slash:comments>106</slash:comments>
		</item>
		<item>
		<title>I Already Told You That!</title>
		<link>http://getmockery.com/blog/archives/76</link>
		<comments>http://getmockery.com/blog/archives/76#comments</comments>
		<pubDate>Fri, 13 Nov 2009 02:02:54 +0000</pubDate>
		<dc:creator>Joel Anair</dc:creator>
				<category><![CDATA[GUI]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[UI]]></category>
		<category><![CDATA[Usability]]></category>

		<guid isPermaLink="false">http://getmockery.com/blog/?p=76</guid>
		<description><![CDATA[I used to have a checking account with Wells Fargo. Overall I was pretty happy with the service, locations, and website. It was a pretty good overall banking experience. There was, however, one extremely grating thing. Every time I used of of their ATMs, it started out by saying, &#8220;Welcome, Joel. Please select a language [...]]]></description>
			<content:encoded><![CDATA[<p>I used to have a checking account with Wells Fargo. Overall I was pretty happy with the service, locations, and website. It was a pretty good overall banking experience. There was, however, one extremely grating thing. Every time I used of of their ATMs, it started out by saying, &#8220;Welcome, Joel. Please select a language for this transaction,&#8221; and presenting options for English and Spanish.</p>
<p>Of course, I have no problem with them providing the option to conduct transactions in Spanish. What bothered me was that I had to tell them <em>every time I used the ATM</em>. Christ, they know who I am; I just put my card in the machine, and they&#8217;re addressing me by name! What are the odds I would want to change my mind and use a different language than I used last time I used the ATM? Would that ever happen?</p>
<p>Now, there may have been a technical reason that it wasn&#8217;t possible to save my preferred language. From a user&#8217;s perspective, though, it just doesn&#8217;t matter. It&#8217;s annoying having to answer the same question, click the same button, change the same radio button, or do anything else <em>every single time you want to get something done</em>.</p>
<p>I try to remember how irritating those ATMs were when I&#8217;m adding new functionality in <a href="http://getmockery.com">Mockery</a>. Am I asking my users to do the same thing over and over? Users tend to be less forgiving of minor annoyances when your application doesn&#8217;t spit out $20 bills.</p>
]]></content:encoded>
			<wfw:commentRss>http://getmockery.com/blog/archives/76/feed</wfw:commentRss>
		<slash:comments>109</slash:comments>
		</item>
		<item>
		<title>A roundup of UI guidelines and reference documents</title>
		<link>http://getmockery.com/blog/archives/72</link>
		<comments>http://getmockery.com/blog/archives/72#comments</comments>
		<pubDate>Tue, 10 Nov 2009 00:11:07 +0000</pubDate>
		<dc:creator>Joel Anair</dc:creator>
				<category><![CDATA[GUI]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[guidelines]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Mac]]></category>
		<category><![CDATA[UI]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://getmockery.com/blog/?p=72</guid>
		<description><![CDATA[As UI designers, we are responsible for playing nicely with the operating systems that our software runs on. While blind adherence to any rule is obviously not a good idea, uniformity gives applications greater learnability and makes users feel at home. If you&#8217;re doing something in your app differently than other apps do the same [...]]]></description>
			<content:encoded><![CDATA[<p>As UI designers, we are responsible for playing nicely with the operating systems that our software runs on. While blind adherence to any rule is obviously not a good idea, uniformity gives applications greater learnability and makes users feel at home. If you&#8217;re doing something in your app differently than other apps do the same thing, you should have a good reason.</p>
<p>If you&#8217;re developing software that will run on multiple platforms, in most cases the technology you&#8217;re using will handle rendering controls and widgets in a platform-appropriate way. But using platform-specific design patterns is still up to you. Luckily, most major platforms provide guides for designing UIs that feel right. Here is a list of useful documentation broken out by OS.</p>
<h3>Windows</h3>
<ul>
<li><a href="http://msdn.microsoft.com/en-us/library/aa511440.aspx">Windows User Experience Interaction Guidelines</a> include sections on controls, windows, commands (by which they mean menus and toolbars), text, handling input devices, and more.</li>
<li><a href="http://msdn.microsoft.com/en-us/library/aa511275.aspx">The Aesthetics section of the above document</a>, in particular, has some really useful information about UI layout and the graphic design side of UI.</li>
<li><a href="http://msdn.microsoft.com/en-us/library/aa511443.aspx">Microsoft&#8217;s overview of the Windows Environment</a> will be particularly helpful for anyone who hasn&#8217;t been able to keep up with the Windows UI over the past few revisions.</li>
<li><a href="http://msdn.microsoft.com/en-us/library/bb328626.aspx">MS&#8217;s Visual Index of controls</a> provides screenshots and brief descriptions of UI controls as they appear in the modern Aero Windows graphical theme.</li>
<li><a href="http://msdn.microsoft.com/en-us/library/aa511331.aspx">Top Guidelines Violations </a> serves as an example of what not to do in your UI design.</li>
<li><a href="http://msdn.microsoft.com/en-us/library/aa511335.aspx">How to Design a Great User Experience</a> offers 19 pieces of advice. I&#8217;m not certain that Microsoft is the best source for advice on creating <em>great</em> UIs, but they have been successful, and most of these points are fairly self-evident.</li>
</ul>
<h3>Mac OS X</h3>
<ul>
<li><a href="http://developer.apple.com/mac/library/DOCUMENTATION/UserExperience/Conceptual/AppleHIGuidelines/XHIGIntro/XHIGIntro.html">The Apple Human Interface Guidelines</a> are the grandfather of all UI guidelines and pretty much a one-stop-shop for information of best practices in Mac OS UI development.</li>
<li><a href="http://developer.apple.com/mac/library/DOCUMENTATION/UserExperience/Conceptual/AppleHIGuidelines/XHIGPartIII/XHIGPartIII.html#//apple_ref/doc/uid/TP40002723-TPXREF101">The Aqua Interface</a> deals specifically with the controls and widgets available to UI developers on the Mac.</li>
<li><a href="http://developer.apple.com/mac/library/DOCUMENTATION/UserExperience/Conceptual/AppleHIGuidelines/XHIGMOSXEnvironment/XHIGMOSXEnvironment.html#//apple_ref/doc/uid/TP40002721-TPXREF101">The Mac OS X Environment</a> provides a run-down on the Dock, Finder, Desktop, and more Mac-specific OS-level features that may be unfamiliar to Windows-only developers or designers.</li>
<li><a href="http://developer.apple.com/mac/library/DOCUMENTATION/UserExperience/Conceptual/AppleHIGuidelines/XHIGDesignProcess/XHIGDesignProcess.html#//apple_ref/doc/uid/TP40002718-TPXREF101">The Design Process</a> is a good, quick read with some good, though often obvious, advice.</li>
</ul>
<h3>Linux/Other</h3>
<ul>
<li><a href="http://library.gnome.org/devel/hig-book/stable/">The GNOME Human Interface Guidelines</a> are similar in layout and organization to MS and Apple&#8217;s guides, but cover the GNOME desktop environment.</li>
<li><a href="http://developer.kde.org/documentation/standards/kde/style/basics/index.html">The KDE User Interface Guidelines</a> provide the same for the KDE environment.</li>
</ul>
<p>This is not intended to be an exhaustive list of UI reference materials; rather, it is a list of official reference materials provided by platform providers. If you know of other useful platform-specific UI guideline documents, please post them in the comments.</p>
]]></content:encoded>
			<wfw:commentRss>http://getmockery.com/blog/archives/72/feed</wfw:commentRss>
		<slash:comments>141</slash:comments>
		</item>
		<item>
		<title>A faster horse</title>
		<link>http://getmockery.com/blog/archives/68</link>
		<comments>http://getmockery.com/blog/archives/68#comments</comments>
		<pubDate>Sat, 31 Oct 2009 19:08:18 +0000</pubDate>
		<dc:creator>Joel Anair</dc:creator>
				<category><![CDATA[GUI]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[customers]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[quote]]></category>
		<category><![CDATA[requirements]]></category>
		<category><![CDATA[UI]]></category>
		<category><![CDATA[users]]></category>

		<guid isPermaLink="false">http://getmockery.com/blog/?p=68</guid>
		<description><![CDATA[“If I’d asked people what they wanted, they would have said a faster horse.”
- Henry Ford
I just heard that quote yesterday from a pretty smart guy, and I really like it. Some people disagree, but I couldn&#8217;t agree more. Sliced Bread Design had a great and very detailed take on it. My favorite bit from [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p><em>“If I’d asked people what they wanted, they would have said a faster horse.”</em></p>
<p><em>- Henry Ford</em></p></blockquote>
<p>I just heard that quote yesterday from <a title="Rob's very interesting blog" href="http://blog.founddrama.net">a pretty smart guy</a>, and I really like it. <a title="An argument against Henry Ford's point" href="http://findsubstance.com/2007/09/10/henry-ford-was-asking-the-wrong-question/">Some people disagree</a>, but I couldn&#8217;t agree more. Sliced Bread Design had <a title="Sliced Bread Design's blog post on Henry Ford's quote" href="http://www.slicedbreaddesign.com/blog/index.php/2009/10/a-faster-horse-when-not-to-listen-to-users/">a great and very detailed take</a> on it. My favorite bit from it:</p>
<blockquote><p>So, what should Henry Ford have been asking his customers? Instead of, “What do you want?” he could have asked, “Is there anything you particularly like or don’t like about your horse and wagon?”</p></blockquote>
<p>You can probably very easily ask someone what software they want you to build, bang out the code, and deliver exactly what they asked for. They might even be really happy with it. But if that&#8217;s all you&#8217;re doing, what separates you from everyone else? What we need to do is break down user requests into desired implementations and desired results.</p>
<h3>Implementations are a means to an end.</h3>
<p>Customers are not going to make clear distinctions in feature requests between desired implementations and desired outcomes. It is up to us to do make that distinction, because <em>if we can come up with a better implementation that produces the same result, we both win</em>. A customer may ask for a dialog, but what he/she&#8217;s really asking for is <em>whatever that dialog lets them do</em>.</p>
<p>Applying this to Henry Ford&#8217;s quote, if we had a customer ask us for a faster horse, we could simply break down the request into implementation and outcome. The desired outcome is fairly clear; <em>get me and my stuff from point a to point b faster</em>. The desired implementation? Some kind of rocket-powered superhorse. The outcome is what the customer is willing to pay for, though; the implementation is merely a suggestion. If you can can come up with a better implementation (and Henry Ford sure did), people will not be disappointed.</p>
<p>As a developer, it&#8217;s easy to become fixated on details; they&#8217;re our bread and butter. That&#8217;s why it&#8217;s important to take a step back when analyzing customer requests and remember that users have exactly the opposite fixation. They&#8217;re willing to work with just about any implementation that lets them accomplish their task. We need to give them what they really <strong>want</strong>, whether or not it&#8217;s what they asked for.</p>
]]></content:encoded>
			<wfw:commentRss>http://getmockery.com/blog/archives/68/feed</wfw:commentRss>
		<slash:comments>62</slash:comments>
		</item>
		<item>
		<title>The three steps to a successful software UI design</title>
		<link>http://getmockery.com/blog/archives/65</link>
		<comments>http://getmockery.com/blog/archives/65#comments</comments>
		<pubDate>Sat, 24 Oct 2009 20:43:17 +0000</pubDate>
		<dc:creator>Joel Anair</dc:creator>
				<category><![CDATA[GUI]]></category>
		<category><![CDATA[Mockery]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[UI Design]]></category>

		<guid isPermaLink="false">http://getmockery.com/blog/?p=65</guid>
		<description><![CDATA[My apologies if this is too obvious, but based on a discussion I was involved in yesterday it seems there are three distinct steps to creating a great UI.
1. Accomplish the task
Often overlooked, this is the foundation and the most important step. Without this step, no matter how well you do on steps 2 and [...]]]></description>
			<content:encoded><![CDATA[<p>My apologies if this is too obvious, but based on <a href="http://discuss.joelonsoftware.com/default.asp?joel.3.785818.9">a discussion</a> I was involved in yesterday it seems there are three distinct steps to creating a great UI.</p>
<p><strong>1. Accomplish the task</strong></p>
<p>Often overlooked, this is the foundation and the most important step. Without this step, no matter how well you do on steps 2 and 3, you have failed. You must allow the user to accomplish their task. That may be editing a photo, sending an email, or sequencing a DNA strand. Whatever it is the user is trying to do with your software, <em>it must be possible for them to do</em>. Sounds obvious, but consider how many times you have used software that has failed this step.</p>
<p><strong>2. Facilitate the process</strong></p>
<p>Once you&#8217;ve established that your UI allows the user to accomplish a task, the next step is to make accomplishing that task as easy as possible. This involves arranging controls and pages correctly, minimizing the risk of unwanted actions or data loss, usability testing to ensure that the UI is efficient and to minimize user errors, and smart feature design to increase efficiency.</p>
<p>As long as step one is followed, users may put up with some pain to use your application. However, if you don&#8217;t do your best to facilitate the process, using your software will be an unpleasant chore that users put up with. We can summarize step 2 as <em>don&#8217;t get in your users&#8217; way</em>.</p>
<p><strong>3. Make it fun</strong></p>
<p>Here&#8217;s the step that gets missed most often. Step 1 enables users to use your software. Step 2 minimizes the pain of doing so. But the rare piece of software that takes the next step is something special.</p>
<p>One way to make software fun to use is to make the UI visually appealing. Your users are going to have to look at it while they use it, so it might as well be pretty. Apple has obviously always been a leader on this front, but Microsoft has been making some strides on the eye-candy front lately.</p>
<p>Making your software fun to use also involves exceeding your users&#8217; expectations in a surprising way. This can come from some unexpected sources; just recently I found that the mail merge option in Microsoft Word was so easy I couldn&#8217;t believe it. When I learned that I can highlight an email attachment in Mac Mail and press spacebar to QuickView it, I was delighted. I&#8217;m sure you can remember plenty of times a piece of software <em>just got something right</em>.</p>
<p>So once you&#8217;ve established that your software gets the job done and stays out of the way in the process, we can sum up step 3 as <em>make them love it.</em> I know that&#8217;s my goal with Mockery.</p>
<div id="_mcePaste" style="overflow: hidden; position: absolute; left: -10000px; top: 385px; width: 1px; height: 1px;">http://discuss.joelonsoftware.com/default.asp?joel.3.785818.9</div>
]]></content:encoded>
			<wfw:commentRss>http://getmockery.com/blog/archives/65/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

