<?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>HCoder.org &#187; Computers</title>
	<atom:link href="http://hcoder.org/category/computers/feed/" rel="self" type="application/rss+xml" />
	<link>http://hcoder.org</link>
	<description>Just another WordPress weblog</description>
	<lastBuildDate>Sat, 04 Feb 2012 11:06:44 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Book summary: Designing with the Mind in Mind</title>
		<link>http://hcoder.org/2012/01/10/book-summary-designing-with-the-mind-in-mind/</link>
		<comments>http://hcoder.org/2012/01/10/book-summary-designing-with-the-mind-in-mind/#comments</comments>
		<pubDate>Tue, 10 Jan 2012 23:10:26 +0000</pubDate>
		<dc:creator>emanchado</dc:creator>
				<category><![CDATA[Book summaries]]></category>
		<category><![CDATA[Computers]]></category>
		<category><![CDATA[books]]></category>
		<category><![CDATA[ux]]></category>
		<category><![CDATA[uxbookclub]]></category>

		<guid isPermaLink="false">http://hcoder.org/?p=1259</guid>
		<description><![CDATA[This is my summary of &#8220;Designing with the Mind in Mind&#8221; by Jeff Johnson, a book about user interface design that explores the reasons why those principles work. Introduction How valuable are UI design guidelines depends on who applies them. They often describe goals, not actions, so they can&#8217;t be followed like a recipe. They [...]]]></description>
			<content:encoded><![CDATA[<p>This is my summary of &#8220;Designing with the Mind in Mind&#8221; by Jeff Johnson, a book about user interface design that explores the reasons why those principles work.</p>
<h2>Introduction</h2>
<p>How valuable are UI design guidelines depends on who applies them. They often describe goals, not actions, so they can&#8217;t be followed like a recipe. They also often conflict with each other. This book tries to give rationale to make them easier to apply.</p>
<h2>Visual content</h2>
<ul>
<li><em>Structure</em>: Gestalt principles (proximity, similarity, continuity, closure, symmetry, figure/ground, common fate), see on p. 11-22. They act together, and sometimes they produce effects we <em>don&#8217;t</em> want: review designs with each of these principles in mind to see if they suggest a relationship that shouldn&#8217;t be there.</li>
<li><em>Text</em>: we&#8217;re wired for language, but not for reading. Typical text-related mistakes: geek-speak, tiny fonts (if the text is hard to read, it probably won&#8217;t be read, so you might as well remove it), burying important information in repetition, and using just too much text (use just enough to help most users get to their intended goals).</li>
<li><em>Colour</em>: our vision is optimised to detect contrasts (edges), and our ability to distinguish colours depends on how they are presented (colours are harder to distinguish if they&#8217;re pale, in small/thin patches or separated from each other). Guidelines for colour: (1) distinguish by saturation/brightness, not only hue, (2) use distinctive colours (red, green, yellow, blue, black and white), (3) avoid colour pairs that colour-blinds can&#8217;t distinguish (tips on p.59-60, including <a href="http://www.vischeck.com/">http://www.vischeck.com/</a>), (4) don&#8217;t rely on colour alone, and (5) don&#8217;t place strong opponent colours next to each other (see p. 62).</li>
<li><em>Peripheral vision</em>: we only have good resolution in the centre of wherever we&#8217;re looking. Peripheral vision (1-2 centimetres from peripheral vision) mostly only provides cues for our eye movement (good example of bad error message, based on this, on p. 71). To make an error message visible: (1) put it where users are looking, (2) mark it (often it&#8217;s enough placing it next to what it refers to), (3) use an error symbol/icon, and (4) reserve red for errors. Heavy artillery (use with care!): (1) pop-ups, (2) sound (makes users scan the screen for errors; make sure they can hear it!), (3) motion or blinking (but not for more than a quarter- or half-second).</li>
<li><em>Visual hints</em>: use pictures where possible to convey function (quicker to recognise; memorable icons hint at their meaning, are distinguishable from others and consistently mean the same even across applications); thumbnails depict full-sized images effectively if they keep features; use visual cues to let users recognise where they are (distinctive visual style, colours, etc).</li>
</ul>
<h2>Expectations</h2>
<p>Our perception is biased by our experience, current context and goals. Implications: (1) test your design to make sure different users interpret it in the same way; (2) be consistent with position, colours and font for elements that serve the same function; and (3) understand your users&#8217; goals (they can be different, too!) and make sure you support them by making relevant information clearly visible at every stage.</p>
<h2>Memory</h2>
<p>We&#8217;re much better at recognising than at remembering (&#8220;see and choose&#8221; is easier than &#8220;recall and type&#8221;). Tips: (1) avoid modes, or if you can&#8217;t, show the current mode clearly; (2) show search terms when showing search results (they&#8217;re easy to forget if we get interrupted for whatever reason); (3) when showing instructions for a multi-step process, make sure the instructions are there while following the steps.</p>
<h2>Attention and goals</h2>
<p>When people focus their attention on their tools, it is pulled away from the details of the task. Software applications should not call attention to themselves. Short-term memory and attention are very limited, so don&#8217;t rely on them. Instead indicate what users have done versus what they have not yet done, and/or allow users to mark or move objects to indicate which ones they have worked on versus the rest.</p>
<p>Support people&#8217;s goal-execute-evaluate cycle: provide clear paths, including initial steps, for the <em>goal</em>; software concepts should be focused on the task rather than implementation, for the <em>execution</em>; provide feedback and status information to show users their progress towards their goal, and allow users to back out of tasks that didn&#8217;t take them toward their goal, for <em>evaluation</em>.</p>
<p>While pursuing a goal, people only notice things that seem related to it, and take familiar paths whenever possible rather than exploring new ones, esp. when working under deadlines. After they&#8217;re done, they often forget cleanup steps: design software so that users don&#8217;t need to remember, or at least to remind them.</p>
<p>Misc. tips:</p>
<ul>
<li>Don&#8217;t expect users to deduce information, tell them explicitly what they need to know.</li>
<li>Don&#8217;t make users diagnose system problems. They don&#8217;t have the skills.</li>
<li>Minimise the number and complexity of settings. People are really bad at optimising combinations of settings.</li>
<li>Let people use perception rather than calculation, when possible (some problems, when presented graphically, allow people to achieve their goals with quick perceptual estimates instead of calculations).</li>
<li>Make the system familiar (concepts, terminology, graphics), by following industry standards, by making the software work like an older application the user know, or by basing the design on metaphors.</li>
<li>Let the computer do the math, don&#8217;t make people calculate things the computer can calculate for them.</li>
</ul>
<h2>Learning</h2>
<p>We learn faster when operation and vocabulary is task-focused, and when risk is low:</p>
<ul>
<li>Task-focused operation: you have to understand the users&#8217; goals in order to reduce the gap between what the user wants and the operations supported by the tool is called &#8220;the gulf of execution&#8221;. To understand goals: perform a task analysis (checklist on p. 135) and design a task-focused conceptual model (the list of objects/actions analysis the user should know about).  The second should be as simple as possible (ie. less concepts), avoid overlapping concepts, and not have things &#8220;just in case&#8221;. Only then sketch and design a user interface, based strictly on the task analysis.</li>
<li>Task-focused vocabulary: it should be familiar and consistent (&#8220;same name, same thing; different name, different thing&#8221;), mapped 1:1 to the concepts.</li>
<li>Low risk: often people are afraid of being &#8220;burned&#8221; and don&#8217;t learn or explore. People make mistakes, so systems should try to prevent errors where possible, make errors easy to detect by showing users what they have done, and allow users to undo/reverse easily.</li>
</ul>
<h2>Responsive systems</h2>
<p>Responsiveness is not the same as performance, it can&#8217;t be fixed by having faster machines/software. Principles:</p>
<ul>
<li>Let you know immediately your input was received</li>
<li>Provide some indication of how long operations will take</li>
<li>Free you to do other things while waiting</li>
<li>Manage queued events intelligently</li>
<li>Perform housekeeping and low-priority tasks in the background</li>
<li>Anticipate your most common requests</li>
</ul>
<p>When showing progress indicators (always an operation takes longer than a few seconds): show work <em>remaining</em>; total progress, not progress on the current step; start percentages at 1%, not 0% (and display 100% only briefly at the end); show smooth, linear progress, not erratic bursts; use human-scale precision, not computer precision (&#8220;about 4 minutes&#8221; better than &#8220;240 seconds&#8221;).</p>
<p>Display important information first. Don&#8217;t wait to have all the information to show everything at once.</p>
 <p><a href="http://hcoder.org/?flattrss_redirect&amp;id=1259&amp;md5=0525456523d019080ee5bc3839bedfaf" title="Flattr" target="_blank"><img src="http://hcoder.org/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://hcoder.org/2012/01/10/book-summary-designing-with-the-mind-in-mind/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<atom:link rel="payment" href="http://hcoder.org/?flattrss_redirect&amp;id=1259&amp;md5=0525456523d019080ee5bc3839bedfaf" type="text/html" />
	</item>
		<item>
		<title>Emacs adventures</title>
		<link>http://hcoder.org/2011/11/28/emacs-adventures/</link>
		<comments>http://hcoder.org/2011/11/28/emacs-adventures/#comments</comments>
		<pubDate>Mon, 28 Nov 2011 00:09:46 +0000</pubDate>
		<dc:creator>emanchado</dc:creator>
				<category><![CDATA[Computers]]></category>
		<category><![CDATA[editors]]></category>
		<category><![CDATA[emacs]]></category>

		<guid isPermaLink="false">http://hcoder.org/?p=1232</guid>
		<description><![CDATA[I have been using Emacs for over a year now. I actually didn&#8217;t learn a lot when I started using it (just the basics to get going and then some relatively common keyboard shortcuts), but lately I have been reading and learning much more about it. I&#8217;m so grateful by everything I&#8217;ve learned from different [...]]]></description>
			<content:encoded><![CDATA[<p>I have been using <a href="http://www.gnu.org/software/emacs/">Emacs</a> for over a year now. I actually didn&#8217;t learn a lot when I started using it (just the basics to get going and then some relatively common keyboard shortcuts), but lately I have been reading and learning much more about it. I&#8217;m so grateful by everything I&#8217;ve learned from different people on the net that I wanted to share a couple of things I&#8217;ve learned, and a simple major mode for editing <a href="http://www.methods.co.nz/asciidoc">AsciiDoc</a> documents.</p>
<p>As a long-time VIM user, I feel it&#8217;s my duty to make a micro-introduction to Emacs to VIM users (skip this whole paragraph if you&#8217;re not one of them). Emacs is so different than VIM that the comparison doesn&#8217;t even make complete sense, but Emacs does have many sweet, sweet features that might tempt VIM users. And let me make this clear: Emacs, in its default configuration, is <em>rubbish</em>. If you don&#8217;t like the idea of customising your editor, learning about it, discovering new tricks, &#8220;plugins&#8221; and shortcuts and maybe even writing your own extensions&#8230; use a different editor (eg. I find VIM way better than Emacs on the default configuration). Likewise, if you don&#8217;t learn VIM properly and don&#8217;t learn the gazillion shortcuts to fly around your code while you stay on the home row&#8230; use a different editor. With that out of the way&#8230;</p>
<p>A lot of what I&#8217;ve learned lately I&#8217;ve learned from a handful of websites and Twitter accounts, listed here:</p>
<ul>
<li><a href="http://emacswiki.org/">EmacsWiki</a>: you probably already know this one, but it&#8217;s pretty useful for a variety of reasons.</li>
<li><a href="http://www.emacsrocks.com/">EmacsRocks</a> / <a href="https://twitter.com/#!/emacsrocks">@Emacsrocks</a>: it&#8217;s a series of screencasts showing off cool, advanced Emacs features. Each screencast is very short and focused on one thing. Instant awesome.</li>
<li><a href="http://emacsrookie.com/">EmacsRookie</a> / <a href="https://twitter.com/#!/emacsrookie">@EmacsRookie</a>: a blog with articles about different Emacs trips &amp; tricks and features. More geared towards beginners (but my impression is that many people stay &#8220;beginners&#8221; of Emacs for quite a long time).</li>
<li>Steve Yegge described &#8220;<a href="http://sites.google.com/site/steveyegge2/effective-emacs">10 Specific Ways to Improve Your Productivity With Emacs</a>&#8220;. In particular, I&#8217;d recommend making Caps-Lock behave as an extra Control key (I didn&#8217;t swap, I just have one more Control key), invoke M-x without the Meta key (both C-x C-m and C-c C-m) and being comfortable with the buffer commands. For navigation, apart from incremental search, you can also use <a href="http://www.emacswiki.org/emacs/AceJump">ace-jump</a>.</li>
<li>Christian Johansen has an <a href="http://cjohansen.no/an-introduction-to-elisp">interesting intro article to Emacs Lisp</a>.</li>
<li>Other Twitter accounts worth following are <a href="https://twitter.com/#!/emacs_knight">@emacs_knight</a>, <a href="https://twitter.com/#!/dotemax">@dotemax</a> and <a href="https://twitter.com/#!/learnemacs">@learnemacs</a>.</li>
</ul>
<p>In particular, things I have learned that I thought would be cool to share:</p>
<ul>
<li>The <a href="https://github.com/bbatsov/zenburn-emacs">zenburn</a> colour theme. I didn&#8217;t really like any of the colour themes that come with Emacs. And although I did see <a href="http://ethanschoonover.com/solarized">solarized</a>, I thought it looked like crap on Emacs (<em>very</em> different from the screenshots, maybe it only works properly on Emacs 24?).</li>
<li><a href="http://www.emacswiki.org/emacs/HippieExpand">hippie-expand</a> is a pretty cool completion system, familiarise yourself with it.</li>
<li>If you code Perl, you should be using <a href="http://www.emacswiki.org/emacs/CPerlMode">cperl-mode</a>, not the default Perl mode.</li>
<li>If you code Javascript, you should be using <a href="https://github.com/mooz/js2-mode">js2-mode</a>, not the default Javascript mode. Also have a look at <a href="https://github.com/emanchado/Emacs-directory/blob/master/dot-emacs#L162">my js2-mode configuration</a>, you might want to do some of the same tweaks.</li>
<li>If you have to do anything with XML, make sure you use <a href="http://www.emacswiki.org/emacs/NxmlMode">nxml-mode</a>, including its awesome feature to validate an XML document against a schema.</li>
<li><a href="http://www.emacswiki.org/emacs/Yasnippet">yasnippet</a>. Very cool snippet system. Just have a look at the <a href="http://www.emacsrocks.com/e06.html">EmacsRocks screencast on yasnippet</a>.</li>
<li><a href="http://www.emacswiki.org/emacs/KeyChord">key-chord</a>. Allows you to assign shortcuts to &#8220;key chords&#8221; (two keys pressed at the same time). Very comfy esp. if you miss some VIM shortcuts and want certain operations more VIM-like. Also seen on EmacsRocks, and again just check out the <a href="http://www.emacsrocks.com/e07.html">EmacsRocks screencast on key-chord</a>.</li>
<li>And speaking of VIM, have a look at <a href="http://www.emacswiki.org/emacs/IyGoToChar">iy-go-to-char</a>, again seen in EmacsRocks (on <a href="http://www.emacsrocks.com/e04.html">episode 4</a>). Hint: this works best when combined with key chords.</li>
</ul>
<p>And last but not least, I have been writing an <a href="https://github.com/emanchado/asciidoc-mode">Emacs major mode for editing AsciiDoc</a> documents (it currently only implements syntax highlighting, which I think is the most important part of a format like AsciiDoc). For that I basically followed the <a href="http://www.emacswiki.org/emacs-es/ModeTutorial">major mode tutorial</a> and then tweaked the multi-line region matching code (for code blocks and such) by setting the <code>font-lock-extend-region-functions</code> variable to a function that appropriately extends the region to be highlighted. If you&#8217;re interested, just have a look at my function <a href="https://github.com/emanchado/asciidoc-mode/blob/master/asciidoc-mode.el#L46">asciidoc-font-lock-extend-region</a>, essentially copied from some other mode. As a last tip for writing syntax highlighting for major modes, don&#8217;t miss <a href="http://www.emacswiki.org/emacs/ReBuilder">re-builder</a>, it&#8217;s pure gold for testing your regular expressions!</p>
 <p><a href="http://hcoder.org/?flattrss_redirect&amp;id=1232&amp;md5=8e7b0e966d58de1126d62db68b482323" title="Flattr" target="_blank"><img src="http://hcoder.org/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://hcoder.org/2011/11/28/emacs-adventures/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		<atom:link rel="payment" href="http://hcoder.org/?flattrss_redirect&amp;id=1232&amp;md5=8e7b0e966d58de1126d62db68b482323" type="text/html" />
	</item>
		<item>
		<title>Pragmatic Thinking &amp; Learning, Wikis and Javascript</title>
		<link>http://hcoder.org/2011/10/24/pragmatic-thinking-learning-wikis-and-javascript/</link>
		<comments>http://hcoder.org/2011/10/24/pragmatic-thinking-learning-wikis-and-javascript/#comments</comments>
		<pubDate>Mon, 24 Oct 2011 21:36:25 +0000</pubDate>
		<dc:creator>emanchado</dc:creator>
				<category><![CDATA[Computers]]></category>
		<category><![CDATA[books]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[github]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[markdown]]></category>
		<category><![CDATA[pet]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[projects]]></category>
		<category><![CDATA[wikis]]></category>

		<guid isPermaLink="false">http://hcoder.org/?p=1207</guid>
		<description><![CDATA[After so much &#8220;slacking&#8221; (just posting book summaries) I&#8217;m trying to go back to regular blogging. Remember my summary of Pragmatic Thinking &#38; Learning? There are many exercises and pieces of advice in that book that I have been trying to practice. One of the things I decided to go for was having a personal [...]]]></description>
			<content:encoded><![CDATA[<p>After so much &#8220;slacking&#8221; (just posting book summaries) I&#8217;m trying to go back to regular blogging. Remember <a href="http://hcoder.org/2011/10/10/book-summary-pragmatic-thinking-learning/">my summary of Pragmatic Thinking &amp; Learning</a>? There are many exercises and pieces of advice in that book that I have been trying to practice. One of the things I decided to go for was having a <a href="http://en.wikipedia.org/wiki/Personal_wiki">personal wiki</a>. One of the reasons being, in all honesty, that I had always wanted to have one. Another reason being that my pet TODO application, <a href="https://bitbucket.org/emanchado/bubug/wiki/Home">Bubug</a>, had finally died after some Debian update (some retarded Ruby module broke compatibility with the version I was using, or something; couldn&#8217;t care to investigate). And yet another reason, well, to have a new small pet project and follow my obsession with learning Javascript, and especially <a href="http://nodejs.org/">Node</a>. And that I wanted to give <a href="https://no.de/">Joyent&#8217;s free Node service</a> a try!</p>
<p>But enough with the reasons. It&#8217;s starting to look like it was a pretty useful mini-project. Not just because I learned a bit more Javascript, the excellent <a href="http://expressjs.com/">express</a> web development framework and other things, but also because the result itself, even though it didn&#8217;t take long to develop (and it was pretty fun, even!), feels useful. It feels like a nice place to put all my notes, TODOs, random ideas for projects, etc. A similar feeling of freedom as when I started using my first <a href="http://en.wikipedia.org/wiki/Moleskine">Moleskine</a>. Not that I would ditch paper for computer-<em>anything</em>, but it&#8217;s useful and freeing in its own way, for specific purposes.</p>
<p>About the technology, I used the <a href="http://en.wikipedia.org/wiki/Markdown">Markdown</a> format for the pages thanks to the <a href="https://github.com/evilstreak/markdown-js">markdown-js library</a> (it&#8217;s really nice that the module has an intermediate tree format that you can parse to add your own stuff before converting to HTML, like e.g. wikipage links!), <a href="http://expressjs.com/">express</a> for the whole application structure and <a href="http://code.google.com/p/js-test-driver/">js-test-driver</a> + <a href="http://cjohansen.no/en/javascript/jstdutil_a_ruby_wrapper_over_jstestdriver">jsautotest</a> + a bit of syntax sugar from <a href="http://sinonjs.org/">Sinon.js</a> for the tests (but looking forward to trying out <a href="http://busterjs.org/">Buster.js</a> when it&#8217;s released!). The deployment to Joyent&#8217;s Node.js SmartMachine was reasonably easy. Actually, it was pretty easy once I figured the following:</p>
<ul>
<li>You must not forget to listen in the correct port, with <code class="syntax javascript">server.listen(process.env.PORT || 8001)</code></li>
<li>There are a couple of pretty useful <a href="http://wiki.joyent.com/display/node/Getting+Started+with+a+Node.js+SmartMachine#GettingStartedwithaNode.jsSmartMachine-SSHaccess">Node.js-related command-line utilities</a> to check logs, restart applications and so on</li>
<li>The configuration of the application can be done via <code class="syntax">npm config</code>, see <a href="http://wiki.joyent.com/display/node/npm+Integration">npm integration on Joyent&#8217;s Wiki</a></li>
</ul>
<p>If you&#8217;re curious to see the code, play with it or use it yourself, take a peek to the <a href="https://github.com/emanchado/Wiki-toki">Wiki-Toki repository</a> on GitHub. Happy hacking!</p>
 <p><a href="http://hcoder.org/?flattrss_redirect&amp;id=1207&amp;md5=666f11f6b9488a0fae815494decab83b" title="Flattr" target="_blank"><img src="http://hcoder.org/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://hcoder.org/2011/10/24/pragmatic-thinking-learning-wikis-and-javascript/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<atom:link rel="payment" href="http://hcoder.org/?flattrss_redirect&amp;id=1207&amp;md5=666f11f6b9488a0fae815494decab83b" type="text/html" />
	</item>
		<item>
		<title>My short experience with GNOME 3</title>
		<link>http://hcoder.org/2011/10/18/my-short-experience-with-gnome-3/</link>
		<comments>http://hcoder.org/2011/10/18/my-short-experience-with-gnome-3/#comments</comments>
		<pubDate>Tue, 18 Oct 2011 17:11:21 +0000</pubDate>
		<dc:creator>emanchado</dc:creator>
				<category><![CDATA[Computers]]></category>
		<category><![CDATA[desktop]]></category>
		<category><![CDATA[gnome]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[software]]></category>

		<guid isPermaLink="false">http://hcoder.org/?p=1200</guid>
		<description><![CDATA[After not having blogged about anything but book summaries lately, I thought it was about time to write something else :-) EDIT: Added the last point, the most important one! I had been thinking of trying out GNOME 3 since it was released. For a number of reasons, I only managed to give it a try [...]]]></description>
			<content:encoded><![CDATA[<p>After not having blogged about anything but book summaries lately, I thought it was about time to write something else :-) <strong>EDIT:</strong> Added the last point, the most important one!</p>
<p>I had been thinking of trying out GNOME 3 since it was released. For a number of reasons, I only managed to give it a try a couple of days ago. I normally use KDE 4, but wanted to see how GNOME was doing these days, and wanted to see if it was something I could maybe switch to. I have to say I quite liked some of the stuff I saw, but I don&#8217;t think I can switch. My reasons:</p>
<ul>
<li>Language switcher keyboard combination: I just couldn&#8217;t find any combination I could use. Everything conflicted with some other combination I use (esp. in Emacs). Having to change the keymap by clicking on the top bar didn&#8217;t sound sane to me.</li>
<li>Order of the OK/Cancel buttons: even if I switched, I would probably use a combination of systems. Having to train my brain to look for the buttons in a different position seemed like too much.</li>
<li>Rhythmbox seemed plain, clunky and hard to use. It seemed hard for me to do what I wanted, plus it crashed consistently while trying to listen to some podcast.</li>
<li>I kind of like the idea of how workspaces work (even though I have to radically change the way I use them to adapt to them), but for me it&#8217;s too much that both (a) closing the last window makes the workspace disappear and (b) you can&#8217;t create workspaces &#8220;above&#8221;. That is a deal-breaker for me.</li>
<li>Can&#8217;t create workspaces on the right or left? I could get used to that probably, but it added up to my frustrations with GNOME 3 workspaces.</li>
<li>Constant repainting issues.</li>
<li>Can&#8217;t make sense of the window traversing. Let&#8217;s say I have two virtual desktops, one with a browser and another one with two terminals. The focus is on one of the terminals, and I want to go to the other terminal (with the keyboard, of course). If I just press Ctrl-Tab GNOME takes me to the web browser in the other desktop! If I want to go to the other terminal, I have to press Ctrl-Tab, Shift-Ctrl-Tab to go back to the terminal, arrow down to see all the terminal windows, arrow right to go to the next terminal. It&#8217;s even worse when I have Opera in one virtual desktop (maximised) with the error console in the same desktop. As Opera is maximised, I can&#8217;t even click with the mouse, so the only way to switch to the error console I can think of is doing the dance described above. Am I missing something, is this for real? <em><strong>EDIT:</strong> I was told about Ctrl-` (changes between windows of the same application). Cute attempt, but I don&#8217;t think I can get used to thinking if I have to use Ctrl-TAB or Ctrl-`. So that remains &#8220;impossible to use&#8221; for me.</em></li>
</ul>
<p>I wonder if some GNOME user can shed light on some of those issues, although it doesn&#8217;t seem like I can find a solution for all my frustrations :-)</p>
 <p><a href="http://hcoder.org/?flattrss_redirect&amp;id=1200&amp;md5=2b689ff07a471e40a46cc5620c4e82ce" title="Flattr" target="_blank"><img src="http://hcoder.org/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://hcoder.org/2011/10/18/my-short-experience-with-gnome-3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<atom:link rel="payment" href="http://hcoder.org/?flattrss_redirect&amp;id=1200&amp;md5=2b689ff07a471e40a46cc5620c4e82ce" type="text/html" />
	</item>
		<item>
		<title>Book review: Javascript Web Applications</title>
		<link>http://hcoder.org/2011/09/20/book-review-javascript-web-applications/</link>
		<comments>http://hcoder.org/2011/09/20/book-review-javascript-web-applications/#comments</comments>
		<pubDate>Tue, 20 Sep 2011 20:42:17 +0000</pubDate>
		<dc:creator>emanchado</dc:creator>
				<category><![CDATA[Computers]]></category>
		<category><![CDATA[Reviews]]></category>
		<category><![CDATA[books]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[review]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://hcoder.org/?p=1168</guid>
		<description><![CDATA[This is my review of &#8220;Javascript Web Applications&#8221; by Alex MacCaw, part of the O&#8217;Reilly Blogger Review Program (in a nutshell: you can choose an ebook from a given selection, and you get it for free if you make a review and post it in any consumer site). It&#8217;s a book about using Javascript to [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://oreilly.com/bloggers/"><img src="http://cdn.oreilly.com/bloggers/blogger-review-badge-200.png" alt="I review for the O'Reilly Blogger Review Program" width="200" height="150" align="right" border="0" /></a> This is my review of &#8220;<a href="http://shop.oreilly.com/product/0636920018421.do">Javascript Web Applications</a>&#8221; by <a href="http://alexmaccaw.co.uk/">Alex MacCaw</a>, part of the O&#8217;Reilly Blogger Review Program (in a nutshell: you can choose an ebook from a given selection, and you get it for free if you make a review and post it in any consumer site). It&#8217;s a book about using Javascript to write (mostly) client-side web applications. The book cover says &#8220;jQuery Developers&#8217; Guide to Moving State to the Client&#8221;, which is somewhat misleading: although most examples that could be written with jQuery <em>are</em> written with jQuery, it&#8217;s a book that anyone interested in Javascript can use, enjoy and learn from, regardless of their library of choice. It doesn&#8217;t even assume you know jQuery, and there&#8217;s a whole appendix dedicated to introducing the reader to the library, should she need it.</p>
<h2>Structure</h2>
<p>The book teaches how to write web applications using Javascript, always following the MVC pattern. It&#8217;s divided in four parts:</p>
<ol>
<li>The first two chapters serve as an introduction to both the MVC pattern and the Javascript language. Although this book is not aimed at total Javascript newbies, you don&#8217;t have to know that much to follow the book. For example, it explains prototypes and constructor functions.</li>
<li>Chapters 3 to 5 cover the implementation details of MVC in Javascript (one chapter for the Model, another for the Controller and the last one about the View).</li>
<li>Chapters 6 to 10 cover many practicalities of client-side web development, like dependency management, unit testing, debugging, interesting browser APIs and deployment tips.</li>
<li>The last three chapters cover Javascript libraries: Spine, Backbone and JavascriptMVC.</li>
</ol>
<p>Additionally, there are three appendices covering <a href="http://jquery.org">jQuery</a>, <a href="http://lesscss.org/">Less</a> and CSS3.</p>
<h2>Highlights and references</h2>
<ul>
<li>Chapter 10 (&#8220;Deploying&#8221;) is full of very good tips and information.</li>
<li>Both the Backbone and the JavascriptMVC chapters were brilliant, looking forward to use any of them soon.</li>
<li>All the <a href="https://github.com/maccman/book-assets">example code</a> is on GitHub.</li>
<li>Page 24: &#8220;The secret to making large Javascript applications is not make large Javascript applications&#8221;.</li>
<li><a href="http://plugins.jquery.com/project/HJS">HJS plugin</a> for jQuery for a nice syntax to create classes.</li>
<li><a href="https://github.com/kriskowal/es5-shim">ES5-shim</a> for browsers that don&#8217;t support Ecmascript 5 yet.</li>
<li>Chapter 2 was a very good introduction about events. removeEventListener (p. 41), stopPropagation/preventDefault (p. 43), list of properties (p. 44), load vs. DOMContentLoaded (p. 45), delegating events (p. 46) and custom events (p. 47-49), among others.</li>
<li>Reference to <a href="http://michaux.ca/articles/javascript-namespacing">blog post about namespacing</a>.</li>
<li>Object.create discussed on page 55.</li>
<li>Using URL hash for URLs on pages 82, 83.</li>
<li>Didn&#8217;t really understand the explanation for the HTML5 history API on p. 85. Alternatively, see the <a href="http://dev.opera.com/articles/view/introducing-the-html5-history-api/">HTML5 history API</a> on Dev Opera.</li>
<li>Very interesting file API on p. 103 and p. 111. Forget the drag-n-drop (<a href="http://www.quirksmode.org/blog/archives/2009/09/the_html5_drag.html">reason</a>) and the copy/paste.</li>
<li>Tips about when to load your Javascript on p. 156.</li>
<li>The JavascriptMVC chapter was brilliant, see p. 208-213 for the class syntax (nicer and more compact, supports this._super()), p. 210 for instrospection and namespaces, p. 211, 212 for model attributes and observables, and p. 213 for setters. Very cool server encapsulation on p. 215. Type conversion and CRUD events on p. 218. JMVC views on p. 219. Templated actions and final example on p. 226-228.</li>
</ul>
<p>Note that all page references are pages in the PDF file, not pages in the book!</p>
<h2>Wrapping up</h2>
<p>This book is packed with very practical information and <em>a lot</em> of code that will teach you how to write applications in Javascript. It builds up from relatively simple code to more advanced stuff, including tips, use of libraries, etc. It&#8217;s one of those books that makes you want to play with all the stuff you&#8217;re learning, and try it all in your next project.</p>
<p>However, sometimes the amount of code makes the book hard to read. Some parts (eg. beginning of the chapter about controllers) are a bit tiring as you have to read and understand so much code, esp. if you&#8217;re not that used to reading more-or-less advanced Javascript. It also lacks information about some important tools like <a href="http://www.opera.com/dragonfly/">Dragonfly</a> (it almost feels like there&#8217;s nothing for developing with Opera) or <a href="http://code.google.com/p/js-test-driver/">js-test-driver</a>.</p>
<p>In summary, this is the perfect book if you know <em>a bit</em> of Javascript and want to learn modern techniques and libraries that will get you started in <em>serious</em> client-side programming. <em>Especially</em> if you are one of those server-side programmers that don&#8217;t like Javascript but has to use it anyway (because despite all its warts, it&#8217;s a really nice language!). If you&#8217;re a Javascript wizard and you have been developing client-side code for years, this book may not be for you.</p>
 <p><a href="http://hcoder.org/?flattrss_redirect&amp;id=1168&amp;md5=083124645c164fd06570fbd5e5ccfc84" title="Flattr" target="_blank"><img src="http://hcoder.org/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://hcoder.org/2011/09/20/book-review-javascript-web-applications/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<atom:link rel="payment" href="http://hcoder.org/?flattrss_redirect&amp;id=1168&amp;md5=083124645c164fd06570fbd5e5ccfc84" type="text/html" />
	</item>
		<item>
		<title>LeakFeed and &lt;angular/&gt;</title>
		<link>http://hcoder.org/2011/09/15/angular/</link>
		<comments>http://hcoder.org/2011/09/15/angular/#comments</comments>
		<pubDate>Thu, 15 Sep 2011 20:37:35 +0000</pubDate>
		<dc:creator>emanchado</dc:creator>
				<category><![CDATA[Computers]]></category>
		<category><![CDATA[Freedom]]></category>
		<category><![CDATA[angular]]></category>
		<category><![CDATA[automated tests]]></category>
		<category><![CDATA[bootstrap]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[jasmine]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[tdd]]></category>
		<category><![CDATA[tests]]></category>

		<guid isPermaLink="false">http://hcoder.org/?p=1128</guid>
		<description><![CDATA[A couple of week ago I discovered LeakFeed, an API to fetch cables from Wikileaks. I immediately thought it would be cool to play a bit with it and create some kind of application. After a couple of failed ideas that didn&#8217;t really take off, I decided to exploit my current enthusiasm for Javascript and [...]]]></description>
			<content:encoded><![CDATA[<p>A couple of week ago I discovered <a href="http://www.leakfeed.com/">LeakFeed</a>, an API to fetch cables from <a href="http://www.wikileaks.org/">Wikileaks</a>. I immediately thought it would be cool to play a bit with it and create some kind of application. After a couple of failed ideas that didn&#8217;t really take off, I decided to exploit my current enthusiasm for Javascript and build something without a server. Other advantages were that I knew <a href="http://angularjs.org/">Angular</a>, an HTML &#8220;power up&#8221; written in Javascript (what else?), which I knew it would ease the whole process a lot, and I even got the chance to learn how to use Twitter&#8217;s excellent <a href="http://twitter.github.com/bootstrap/">Bootstrap</a> HTML and CSS toolkit.</p>
<p>What I decided to build is a very simple interface to search for leaked cables. I called it <a href="http://emanchado.github.com/leakyleaks.html">LeakyLeaks</a> (see the <a href="https://github.com/emanchado/LeakyLeaks">code on GitHub</a>). Unfortunately the LeakFeed API is quite limited, so I had to limit my original idea. However, I think the result is kind of neat, especially considering the little effort. To build it, I started writing support classes and functions using Test-Driven Development with <a href="http://pivotal.github.com/jasmine/">Jasmine</a>. Once I had that basic functionality up and running I started building the interface with Bootstrap and, at that point, integrating the data from LeakFeed with Angular was so easy it&#8217;s almost ridiculous. And as LeakFeed can return the data using JSONP, I didn&#8217;t even need a server: all my application is simply a <em>static</em> HTML file with some Javascript code.</p>
<p>All this get-data-from-somewhere-and-display-it is astonishingly simple in Angular. There&#8217;s this functionality (&#8220;<a href="http://docs.angularjs.org/#!/api/angular.service.$resource">resources</a>&#8220;) to declare sources of external data: you define the URLs and methods to get the data from those resources, and then simply call some methods to fetch the data. E.g.: you can get the list of all tags in LeakFeed from <a href="http://api.leakfeed.com/v1/cables/tags.json">http://api.leakfeed.com/v1/cables/tags.json</a> (adding a GET parameter <code>callback</code> with a function name if you want <a href="http://en.wikipedia.org/wiki/JSONP">JSONP</a>). Similarly, you can get the list of all offices in LeakFeed from <a href="http://api.leakfeed.com/v1/cables/offices.json">http://api.leakfeed.com/v1/cables/offices.json</a>. In Angular, you can declare a resource to get all this information like this:</p>
<pre class="syntax javascript">this.LeakFeedResourceProxy = $resource(
 'http://api.leakfeed.com/v1/cables/:id.json',
 { callback: 'JSON_CALLBACK' },
 { getTags:    {method: 'JSON', isArray: true, params: {id: 'tags'}},
   getOffices: {method: 'JSON', isArray: true, params: {id: 'offices'}}}
);</pre>
<p>Once you have declared it, using it is as simple as calling the appropriate method on the object. That is, you can get the tags by calling <code class="syntax javascript">this.LeakFeedResourceProxy.getTags()</code>, and the offices by calling <code class="syntax javascript">this.LeakFeedResourceProxy.getOffices()</code>. And when I say &#8220;get the tags&#8221;, I mean <em>get a list of Javascript objects</em>: no JSON, text or processing involved. If you assign the result of those functions to any property (say, <code class="syntax javascript">this.availableOffices</code>), you&#8217;ll be able to show that information like so (the <code class="syntax javascript">|officename</code> is a custom filter to show the office names with a special format):</p>
<pre class="syntax html">&lt;select id=&quot;office&quot; name=&quot;office&quot;&gt; \
  &lt;option value=&quot;{{o.name}}&quot;&gt;{{o.display_name|officename}} ({{o.cables}})&lt;/option&gt; \
&lt;/select&gt;</pre>
<p>The cool thing is, thanks to Angular&#8217;s data binding, anytime the value of that variable changes, the representation in the HTML changes, too. That is, if you assign another value to <code class="syntax javascript">this.availableOffices</code> the select box will be automatically updated to have the new set of options! But the data binding is two-way, so any changes you make in the UI also get reflected back in the Javascript variables. This further simplifies many tasks and makes programming with Angular a breeze.<br />
There are other nice things about Angular (and many nice things about Bootstrap and Jasmine of course!), but I think that&#8217;s enough for today :-)</p>
 <p><a href="http://hcoder.org/?flattrss_redirect&amp;id=1128&amp;md5=15fac2e864cbc672f9ea3fd3b8c15bc4" title="Flattr" target="_blank"><img src="http://hcoder.org/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://hcoder.org/2011/09/15/angular/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<atom:link rel="payment" href="http://hcoder.org/?flattrss_redirect&amp;id=1128&amp;md5=15fac2e864cbc672f9ea3fd3b8c15bc4" type="text/html" />
	</item>
		<item>
		<title>Book summary: Prototyping (II)</title>
		<link>http://hcoder.org/2011/09/04/book-summary-prototyping-ii/</link>
		<comments>http://hcoder.org/2011/09/04/book-summary-prototyping-ii/#comments</comments>
		<pubDate>Sun, 04 Sep 2011 18:06:10 +0000</pubDate>
		<dc:creator>emanchado</dc:creator>
				<category><![CDATA[Book summaries]]></category>
		<category><![CDATA[Computers]]></category>
		<category><![CDATA[books]]></category>
		<category><![CDATA[prototyping]]></category>
		<category><![CDATA[ux]]></category>
		<category><![CDATA[uxbookclub]]></category>

		<guid isPermaLink="false">http://hcoder.org/?p=1096</guid>
		<description><![CDATA[This is the second half of my summary for the book &#8220;Prototyping&#8221; by Todd Zaki Warfel. See the first part on this blog. It will cover chapters 4-12, which talk about the guiding principles for prototyping, prototyping tools and how to test your prototype. Principles Most prototyping mistakes come from either (1) building too much [...]]]></description>
			<content:encoded><![CDATA[<p>This is the second half of my summary for the book &#8220;<a href="http://rosenfeldmedia.com/books/prototyping/">Prototyping</a>&#8221; by Todd Zaki Warfel. See the <a href="http://hcoder.org/2011/09/03/book-summary-prototyping-i/">first part</a> on this blog. It will cover chapters 4-12, which talk about the guiding principles for prototyping, prototyping tools and how to test your prototype.</p>
<h2>Principles</h2>
<p>Most prototyping mistakes come from either (1) building too much or too little, (2) prototyping the wrong thing or (3) not setting expectations about what the prototype will be. Principles:</p>
<ol>
<li><em>Understand your audience and intent</em>. This is the most important principle. Once you understand them, you&#8217;ll be much better equipped to determine what you need to prototype, set appropriate expectations, determine the right level of fidelity and pick the right tool.</li>
<li><em>Plan a little, prototype the rest</em>. Software systems change constantly and quickly. Plan a little and prototype the rest, so you can cope with the changing environment by working incrementally and iteratively.</li>
<li><em>Set expectations</em>. This lets you avoid rabbit-hole discussions on things that aren&#8217;t important or haven&#8217;t been prototyped yet.</li>
<li><em>You can sketch</em>. Anyone can draw well enough for the purposes of a prototype.</li>
<li><em>It&#8217;s a prototype, not the Mona Lisa</em>. Don&#8217;t lose too much time on making it pretty. Not only it&#8217;s not necessary, but it has some advantages like making it clear that it&#8217;s not finished product, which makes people more likely to give feedback. You need the least amount of effort to communicate your design idea, nothing more.</li>
<li><em>If you can&#8217;t make it, fake it</em>. You can fake many things you can&#8217;t make with JPG files, clickable HTML files, PDFs or PowerPoint presentations.</li>
<li><em>Prototype only what you need</em>. Often prototypes only cover <em>part</em> of a system. Even if your ultimate goal is usability testing, chances are you&#8217;ll only test 5 or 6 scenarios, so you only need to build that.</li>
<li><em>Reduce risk—prototype early and often</em>. Prototyping is about making small investments with a significant return. The return can be positive, in which case you can just go ahead, or negative, in which case your risk is substantially reduced because you identified the problem soon enough. The earlier you catch mistakes, the easier and cheaper it is to fix them.</li>
</ol>
<h2>Tools</h2>
<p>When choosing the prototyping tool, consider audience, intent, familiarity/learnability, cost, need for collaboration, distribution and throwaway vs. reusable. Notes for specific tools follow:</p>
<h3>Paper</h3>
<p>It&#8217;s the most versatile method. It&#8217;s also fast, cheap, easy, you can manipulate it on the fly (and even the participants can help), collaborative, not limited by prebuilt widgets or technology, and can be done anywhere and anytime, even without computers. The bad sides are that it&#8217;s hard for geographically distributed teams to use it, requires imagination and lacks visual aesthetics. Tips:</p>
<ul>
<li>Include transparencies (useful for simulating roll-overs and such), post-it notes (for displaying changing states on the page, highlighting elements or dialog windows), coloured pens/markers (sketching in black/blue, errors in red, success messages in green) and scotch tape or glue stick in your kit.</li>
<li>Use pre-drawn/printed widgets. The book resources include a (kind of limited) <a href="http://rosenfeldmedia.com/books/downloads/prototyping/Paper_Prototype_GUI.ai">sample Illustrator file with printable widgets</a> for that purpose.</li>
<li>You can use transparencies for context, pop-up help (even using a marker to highlight fields).</li>
<li>To accomplish a show/hide effect, you can fold/unfold part of the paper.</li>
<li>You can simulate slide effects by having two different pieces of paper, cut one of them so the other fits (leaving a sort of &#8220;window&#8221; so you can see the other through), and moving the second one back and forth.</li>
</ul>
<h3>Presentation software</h3>
<p>It has a low learning curve, it&#8217;s available in most computers, you can use master slides to ensure consistency, you can copy-paste and rearrange elements with drag-and-drop, and export to HTML or PDF if necessary. However, it has limited drawing tools (so often not good for hi-fi prototypes), the interactivity is limited and the prototype has no reusable source code whatsoever. The book resources have a <a href="http://rosenfeldmedia.com/books/downloads/prototyping/chapter7.zip">sample prototyping kit for Powerpoint and Keynote</a>, and Manuela Hutter (Oslo UX book club organiser) wrote another <a href="http://files.myopera.com/manooh/blog/UI_mockups.otp">prototyping kit for OpenOffice.org</a> (and see the whole <a href="http://my.opera.com/manooh/blog/interactive-mockups-with-openoffice">blog post about prototyping with OO.o</a>). Tip: you can simulate fade effects in presentation software by having two slides (one with the element highlighted, the other without) and setting a &#8220;dissolve&#8221; transition effects between them.</p>
<h3>HTML</h3>
<p>There are several ways to approach making prototypes with HTML. You can simply slap up a few images and use image maps to link to each other, you can have HTML exported from some other tool, or you can write &#8220;production-level&#8221; HTML for a prototype that will contain potentially reusable code. The strengths of the <em>last</em> way are being platform-independent, free, portable, &#8220;real&#8221; (in case we&#8217;re prototyping a web app), it helps gauging feasibility, modular (helps in productivity), collaborative (if we split in different files), reusable code and unlimited potential. The downsides are that it might take more time and effort to make a prototype like this, and that it&#8217;s not easy to make annotations on it.</p>
<h2>Testing your prototype</h2>
<h3>Common mistakes</h3>
<ol>
<li><em>Usability testing is a process, not an event</em>. There&#8217;s also planning, analysis and reporting, not just &#8220;sitting in front of a person with a computer&#8221;.</li>
<li><em>Poor planning</em>. The first question to ask is &#8220;why am I doing usability testing?&#8221;. Determine who you want to test, who is going to use the product or service, what are their behaviours, and why would they use the product in the first place.</li>
<li><em>Not recruiting the right participants</em>. The whole point of the testing is seeing how the design works in the eyes of the people who will use it. If you recruit the wrong people, you will get the wrong data.</li>
<li><em>Poorly-formed research questions</em>. This is one of the biggest challenges. You have to get your answers without asking explicitly. Instead of telling them to plan a dinner + movie, you can ask them to look for something to do with friends. The point being we shouldn&#8217;t make them use the application in the way <em>we</em> want, but make them use the application in whatever way they normally would.</li>
<li><em>Poor test moderation</em>. A good moderator balances being a silent fly on the wall, watching, with asking enough questions to get the test going; know how to extract just the right level of detail; know when to let the participant explore, and when to pull them back; how to get the answer to the question they want without asking it.</li>
<li><em>Picking the wrong method to communicate findings and recommendations</em>. Nobody is going to read a 10-20 page report. Short presentations with a summary of the findings typically work well. Including video clips showing the highlights of the test is useful.</li>
</ol>
<h3>Steps to conduct a usability test</h3>
<ol>
<li><em>Preparation</em>. Decide, with your team, what are the key characteristics and behaviour you&#8217;re looking for, and also the ones you <em>don&#8217;t</em> want. If you&#8217;re going to record audio or video, have a waiver ready for the participants. Knowing the intent of the test will inform the appropriate scenarios, research questions and prototype. Limit the test to 45-60 minutes: enough time to test 5 or 6 scenarios while not exceeding the attention span of the participants.</li>
<li><em>Design test scenarios</em>. Either specific to determine if a user can access a concrete feature of the site, or exploratory to gain insight into a participant&#8217;s overall approach to solving her goal. Focus on the goal, allowing different activities and process to reach it.</li>
<li><em>Test the prototype</em>. Getting feedback from participants is easier if they feel comfortable. Once they&#8217;re comfortable, ask them about their experiences related to whatever you&#8217;re going to test that day. You can use that information to provide context.</li>
<li><em>Record observations and feedback</em>. Have one person moderating, and another person taking notes remotely. It&#8217;s better to over-record than to under-record. Use a rating scale of, say, 1-5 for each scenario. Both moderator and participant fill it in. The former should be based of measurable elements like time and effort. The latter is more subjective, focused on the satisfaction with completing the task. Try to filter any variable not related to the system you&#8217;re testing. For example, use the same operating system as the user is most used to.</li>
<li><em>Analyse and determine next steps</em>. When you finish, you typically have a list of bigger issues in your head. This list is a starting point. Analyse all your data points, and find themes. Look for frequency, severity and learnability. It&#8217;s better to use a method that combines significance to the customer, value to the business and technical feasibility of fixing the issue.</li>
</ol>
<p>And that&#8217;s the end of my summary.</p>
 <p><a href="http://hcoder.org/?flattrss_redirect&amp;id=1096&amp;md5=dd56c3638cb90935e5712891648b1819" title="Flattr" target="_blank"><img src="http://hcoder.org/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://hcoder.org/2011/09/04/book-summary-prototyping-ii/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<atom:link rel="payment" href="http://hcoder.org/?flattrss_redirect&amp;id=1096&amp;md5=dd56c3638cb90935e5712891648b1819" type="text/html" />
	</item>
		<item>
		<title>Book summary: Prototyping (I)</title>
		<link>http://hcoder.org/2011/09/03/book-summary-prototyping-i/</link>
		<comments>http://hcoder.org/2011/09/03/book-summary-prototyping-i/#comments</comments>
		<pubDate>Sat, 03 Sep 2011 16:38:13 +0000</pubDate>
		<dc:creator>emanchado</dc:creator>
				<category><![CDATA[Book summaries]]></category>
		<category><![CDATA[Computers]]></category>
		<category><![CDATA[books]]></category>
		<category><![CDATA[prototyping]]></category>
		<category><![CDATA[ux]]></category>
		<category><![CDATA[uxbookclub]]></category>

		<guid isPermaLink="false">http://hcoder.org/?p=1085</guid>
		<description><![CDATA[This is the first half of my summary for the book &#8220;Prototyping&#8221; by Todd Zaki Warfel. See my review of the book in Goodreads (one-sentence summary of the review: &#8220;a tad disappointing&#8221;). It will cover the first three chapters, &#8220;The Value of Prototyping&#8221;, &#8220;The Prototyping Process&#8221; and &#8220;Five Types of Prototypes&#8221;. The second half will [...]]]></description>
			<content:encoded><![CDATA[<p>This is the first half of my summary for the book &#8220;<a href="http://rosenfeldmedia.com/books/prototyping/">Prototyping</a>&#8221; by Todd Zaki Warfel. See my <a href="http://www.goodreads.com/review/show/197990381">review of the book</a> in Goodreads (one-sentence summary of the review: &#8220;a tad disappointing&#8221;). It will cover the first three chapters, &#8220;The Value of Prototyping&#8221;, &#8220;The Prototyping Process&#8221; and &#8220;Five Types of Prototypes&#8221;. The second half will cover the guiding principles for prototyping, tools and how to test your prototype.</p>
<p><strong>EDIT:</strong> see also the <a href="http://hcoder.org/2011/09/04/book-summary-prototyping-ii/">second part</a>.</p>
<h2>Value of prototyping</h2>
<p>A prototype is a representative model or simulation of the final system, which goes beyond show &amp; tell and let you experience the design: if a picture is worth 1,000 words, a prototype is worth 10,000. As the complexity of a system increases, the cost-to-benefit ratio of prototyping increases dramatically. Some technical requirements can&#8217;t be captured in a prototype, but a short and simple supplemental document can cover them. Also, it often takes less effort to produce a prototype than to create a detailed specification document + annotated wireframes. Disadvantages of specification documents:</p>
<ul>
<li>Nobody wants to read a 60-200 page document.</li>
<li>If you can&#8217;t get them to read it, you won&#8217;t get them to fully understand it.</li>
<li>It hides the big picture.</li>
<li>Words leave too much room for interpretation.</li>
<li>They don&#8217;t encourage play (which prototypes do), which makes people understand the system better.</li>
</ul>
<p><em>[There are some notes about experiences with prototypes, which I didn't find that convincing. In summary, prototypes are much better and cost less effort to make than (lengthy) documents, at least for the initial understanding of the system before it's built. —Esteban]</em></p>
<h2>Process</h2>
<p>It&#8217;s commonplace in architecture and industrial design, why not in software engineering? Process in a nutshell is (1) Sketching, (2) Presentation and Critique, (3) Modelling/prototyping and (4) Testing. Sketching is present through the whole process.</p>
<h3>Sketching</h3>
<p>The goal is generating many different concepts and put them on some tangible format. The point is not fleshing out the ideas fully, we&#8217;ll refine later. It&#8217;s a good idea to limit the sketching time to, say, 10-30 minutes. <em>[Unfortunately, there are many things that aren't clear to me after reading this part: who is part of the sketching process? Is it a meeting? Is there anyone looking while someone else sketches? If so, who? How many people sketch, and many many sketches do we produce concurrently?</em><em> —Esteban]</em></p>
<h3>Presentation and critique</h3>
<p>The goal is to find the best ideas. This step if focused on quality, and it&#8217;s arguably the most important step in the prototyping process. You present the strengths of your sketch, and your peers highlight the parts that need more work or clarification. Guidelines:</p>
<ul>
<li><em>Keep it short</em>: around three minutes for presentation and two for critique.</li>
<li><em>Focus presentations on the strongest parts</em>: If you need more than three minutes to present your sketch, there&#8217;s probably something wrong with it.</li>
<li><em>Critiques mention both good and bad sides</em>: mention two or three things that are good, and one or two to improve.</li>
<li><em>Take notes</em>: it&#8217;s best to take the notes on the sketch itself.</li>
</ul>
<h3>Prototype</h3>
<p>After the last step, you&#8217;re left with the strongest concepts. These are the ones you&#8217;re going to prototype. Always consider the following: (1) use a tool/medium you&#8217;re comfortable with; (2) make sure you have the ability to communicate effectively with the audience or consumer; (3) consider how much time you have; (4) consider the level of fidelity you need. Once you have a prototype, run the presentation and critique again, but with longer times. <em>Tip: if you project your prototype on a whiteboard, you can take notes on that whiteboard easily.</em></p>
<h3>Test</h3>
<p>Testing can be done in two different ways: with clients and with end-customers. When testing with clients, run a presentation and critique for 1.5-3 hours, but instead of making a list of revisions, simply sketch the changes. This makes everyone walk away from the meeting being on the same page. At the end of the session, the client gets a copy of the prototype to play with. After two or three days they typically come back with some more feedback.</p>
<p>Testing with end-customers it a standard usability test, with 8-12 participants, 5-6 scenarios, audio-video capture, analysis and reporting of the results afterwards.</p>
<h2>Types of prototypes</h2>
<p><em>[I don't even know why this chapter is called "types of". They feel more like "uses of" to me —Esteban]</em></p>
<ul>
<li><em>Shared communication. </em>Get a designer and a developer to sketch ideas together. Benefits: it opens the line of communication between developers and designers, it teaches them how to communicate with one another, and it builds relationships. It&#8217;s a great team-building exercise. <em>Tip: record a video of yourself using the prototype.</em></li>
<li><em>Working through a design. </em>If you are going to make a big redesign, you need to test it first, explore the different possibilities, work through them, test them and refine them.</li>
<li><em>Selling your idea internally</em>. Prototypes work as a tool to sell the feasibility and value of your idea.</li>
<li><em>Usability testing</em>. A prototype allows you make usability tests and do data-driven decisions.</li>
<li><em>Gauging technical feasibility and value</em>. Simulations are good to get both managements and engineering to buy into concepts and prove if it can be built.</li>
</ul>
<p>And this is the end of the first half of my summary. I&#8217;ll post the second half soon.</p>
 <p><a href="http://hcoder.org/?flattrss_redirect&amp;id=1085&amp;md5=17a3ce73817a28a922a840668920c721" title="Flattr" target="_blank"><img src="http://hcoder.org/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://hcoder.org/2011/09/03/book-summary-prototyping-i/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<atom:link rel="payment" href="http://hcoder.org/?flattrss_redirect&amp;id=1085&amp;md5=17a3ce73817a28a922a840668920c721" type="text/html" />
	</item>
		<item>
		<title>Humble Indie Bundle #3</title>
		<link>http://hcoder.org/2011/07/31/humble-indie-bundle-3/</link>
		<comments>http://hcoder.org/2011/07/31/humble-indie-bundle-3/#comments</comments>
		<pubDate>Sun, 31 Jul 2011 22:04:34 +0000</pubDate>
		<dc:creator>emanchado</dc:creator>
				<category><![CDATA[Computers]]></category>
		<category><![CDATA[Freedom]]></category>

		<guid isPermaLink="false">http://hcoder.org/?p=1057</guid>
		<description><![CDATA[I had seen the Humble Indie Bundle before, but it wasn&#8217;t until HIB #3 that I decided to actually buy it. I learned about it through the Electronic Frontier Foundation (who else!), and some of the games looked neat. Of course, all of them have a native version for Linux and there is no DRM [...]]]></description>
			<content:encoded><![CDATA[<p>I had seen the <a href="http://www.humblebundle.com/">Humble Indie Bundle</a> before, but it wasn&#8217;t until HIB #3 that I decided to actually buy it. I learned about it through the Electronic Frontier Foundation (who else!), and some of the games looked neat. Of course, all of them have a native version for Linux and there is no DRM whatsoever. The other two reasons why I bought it: (1) <strong>you set the price</strong>, and (2) you donate part of the price to the <a href="http://eff.org">EFF</a> and/or <a href="http://www.childsplaycharity.org/">Child&#8217;s Play</a> (you decide the exact split).</p>
<p>One of them, unfortunately, doesn&#8217;t actually work on my machine (my video card, or my driver, is too crappy), and one of them I haven&#8217;t even tried because I&#8217;m not that interested. However, &#8220;<a href="http://www.andyetitmoves.net/">And Yet It Moves</a>&#8221; and &#8220;<a href="http://www.crayonphysics.com/">Crayon Physics Deluxe</a>&#8221; are fantastic!</p>
<p>Apart from saying that you should buy them, I wanted to write this blog post to give a solution to a problem I had running Crayon Physics Deluxe. When I tried to run it for the first time, I got this error message:</p>
<pre>Cannot mix incompatible Qt library (version 0x40703) with this library (version 0x1040702)
Aborted</pre>
<p>There seems to be a problem between the Qt I have installed and the copy of the Qt library that comes with the game itself. The solution for me was to simply <strong>rename</strong> the directory <tt>lib32</tt> to something else.</p>
<p>Back to playing&#8230; :-P</p>
 <p><a href="http://hcoder.org/?flattrss_redirect&amp;id=1057&amp;md5=fe50dd2b8749c0173926396a999333c3" title="Flattr" target="_blank"><img src="http://hcoder.org/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://hcoder.org/2011/07/31/humble-indie-bundle-3/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<atom:link rel="payment" href="http://hcoder.org/?flattrss_redirect&amp;id=1057&amp;md5=fe50dd2b8749c0173926396a999333c3" type="text/html" />
	</item>
		<item>
		<title>My experience writing Opera extensions</title>
		<link>http://hcoder.org/2011/07/09/my-experience-writing-opera-extensions/</link>
		<comments>http://hcoder.org/2011/07/09/my-experience-writing-opera-extensions/#comments</comments>
		<pubDate>Sat, 09 Jul 2011 10:55:29 +0000</pubDate>
		<dc:creator>emanchado</dc:creator>
				<category><![CDATA[Computers]]></category>
		<category><![CDATA[Work]]></category>

		<guid isPermaLink="false">http://hcoder.org/?p=989</guid>
		<description><![CDATA[Apart from a couple of widgets, I have written two Opera extensions. The first was Show Filtered Content, a proof of concept of how to use the Opera Link API, and OAuth in  general, from Javascript. Now, due to a couple of coincidences (isn&#8217;t life all about that?), I decided to write Meme Smileys: a [...]]]></description>
			<content:encoded><![CDATA[<p>Apart from a <a href="http://widgets.opera.com/author/zoso/">couple of widgets</a>, I have written two Opera extensions. The first was <a href="https://addons.opera.com/addons/extensions/details/show-filtered-content/">Show Filtered Content</a>, a proof of concept of how to use the <a href="http://dev.opera.com/articles/view/introducing-the-opera-link-api/">Opera Link API</a>, and OAuth in  general, from Javascript. Now, due to a couple of coincidences (isn&#8217;t life all about that?), I decided to write <a href="https://addons.opera.com/addons/extensions/details/meme-smileys/">Meme Smileys</a>: a very silly extension to turn text smilies into small pictures taken from popular memes like the <a href="http://knowyourmeme.com/memes/rage-guy-fffuuuu">rage guy</a> and such. It&#8217;s my own version of a Chrome extension I had seen. Partly I wrote it because I wanted to have it, partly for the lulz, partly to learn a bit more Javascript, and partly to use <a href="http://pivotal.github.com/jasmine/">Jasmine</a> more. The surprising thing was that writing such a trivial, small extension did teach me a couple of things:</p>
<ol>
<li>The <a href="https://developer.mozilla.org/en/DOM/NodeIterator">NodeIterator</a>/<a href="https://developer.mozilla.org/en/DOM/NodeFilter">NodeFilter</a> Javascript API. I ended up not using it for the extension, but it&#8217;s good to know.</li>
<li>The DOM event &#8220;DOMNodeInserted&#8221;, very useful when you want to do some work based on new elements &#8220;appearing&#8221; on the page (as it&#8217;s more and more common).</li>
<li>Javascript regular expression lookahead/lookbehind. The latter, which I needed, is not supported by Javascript, so I had to use a <a href="http://blog.stevenlevithan.com/archives/mimic-lookbehind-javascript">lookbehind mimicking trick/workaround</a> to get what I wanted.</li>
<li>It gave me a bit more experience in Test-Driven Development. Which reminds me: if you are interested in Javascript and TDD and you happen to understand some Norwegian, have a look at the excellent <a href="http://www.zombietdd.com/">zombietdd</a> screencast series!</li>
</ol>
<p>As always, the code is on <a href="https://github.com/emanchado/MemeSmileys">GitHub</a>, so you can read it, fork it, make your own extension based on it or whatever you want.</p>
<p><strong>EDIT:</strong> I forgot to mention that the meme smiley extension got quite popular because it was <a href="http://my.opera.com/chooseopera/blog/2011/07/04/obviously-the-best-extension-ever">featured</a> in the <a href="http://my.opera.com/chooseopera/">Choose Opera</a> blog (<a href="http://my.opera.com/chooseopera/blog/2011/07/07/know-your-meme-smileys">twice</a>!) and then &#8220;<a href="https://addons.opera.com/addons/extensions/?adbox=0&amp;order=recommended&amp;language=any">recommended</a>&#8221; in the <a href="https://addons.opera.com/addons/extensions/">Opera extensions</a> homepage :-D</p>
 <p><a href="http://hcoder.org/?flattrss_redirect&amp;id=989&amp;md5=f5940482d22141d71db66ff099cdd240" title="Flattr" target="_blank"><img src="http://hcoder.org/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://hcoder.org/2011/07/09/my-experience-writing-opera-extensions/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<atom:link rel="payment" href="http://hcoder.org/?flattrss_redirect&amp;id=989&amp;md5=f5940482d22141d71db66ff099cdd240" type="text/html" />
	</item>
	</channel>
</rss>

