<?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; Work</title>
	<atom:link href="http://hcoder.org/category/work/feed/" rel="self" type="application/rss+xml" />
	<link>http://hcoder.org</link>
	<description>Just another WordPress weblog</description>
	<lastBuildDate>Sun, 15 Apr 2012 21:43:44 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Unit testing advice for seasoned hackers (2/2)</title>
		<link>http://hcoder.org/2012/02/15/unit-testing-advice-for-seasoned-hackers-22/</link>
		<comments>http://hcoder.org/2012/02/15/unit-testing-advice-for-seasoned-hackers-22/#comments</comments>
		<pubDate>Wed, 15 Feb 2012 22:24:42 +0000</pubDate>
		<dc:creator>emanchado</dc:creator>
				<category><![CDATA[Computers]]></category>
		<category><![CDATA[Work]]></category>
		<category><![CDATA[automated tests]]></category>
		<category><![CDATA[free software]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[projects]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[testing]]></category>
		<category><![CDATA[tests]]></category>
		<category><![CDATA[tips]]></category>
		<category><![CDATA[tor]]></category>
		<category><![CDATA[unit]]></category>

		<guid isPermaLink="false">http://hcoder.org/?p=1322</guid>
		<description><![CDATA[This is the second part of my unit testing advice. See the first part on this blog. If you need any introduction you should really read the first part. I&#8217;ll just present the other three ideas I wanted to cover. Focusing on common cases This consists of testing only/mostly common cases. These tests rarely fail [...]]]></description>
			<content:encoded><![CDATA[<p><em>This is the second part of my unit testing advice. See the <a href="http://hcoder.org/2012/02/13/unit-testing-advice-for-seasoned-hackers-12/">first part</a> on this blog.</em></p>
<p>If you need any introduction you should really read the first part. I&#8217;ll just present the other three ideas I wanted to cover.</p>
<h2>Focusing on common cases</h2>
<p>This consists of testing only/mostly common cases. These tests rarely fail and give a false sense of security. Thus, tests are better when they also include less common cases, as they&#8217;re much more likely to break inadvertently. Common cases not only break far less often, but will probably be caught reasonably fast once someone tries to use the buggy code, so testing them has comparatively <em>less value</em> than testing less common cases.</p>
<p>The best example I found was in the <a href="https://github.com/emanchado/tor/commit/46bbf6c015fac412b47ca56279002129a1c2b278#L0L720"><code class="syntax c">wrap_string</code> tests</a>. The relevant example was adding the string &#8220;A test of string wrapping&#8230;&#8221;, which wraps not to two lines, but three (the wrapping is done only on spaces, so &#8220;wrapping&#8230;&#8221; is taken as a single unit; in this sense, my test case could have been clearer and use a very long word, instead of a word followed by ellipsis). Most of the cases we&#8217;ll deal with will simply wrap a given word in two lines, but wrapping in three must work, too, and it&#8217;s much more likely to break if we decide to refactor or rewrite the code in that function, with the intention to keep the functionality intact.</p>
<p>See other examples of this in <a href="https://github.com/emanchado/tor/commit/aa20bce8006c9dccd8213db789855b59aee33ef4#L0L2084">aa20bce</a> (no tests with more than one consecutive newline, no tests with lines of only non-printable characters), <a href="https://github.com/emanchado/tor/commit/b248b3f#L0L1665">b248b3f</a> (no tests with just dots, no valid cases with more than one consecutive slash, no invalid cases with content other than slashes), <a href="https://github.com/emanchado/tor/commit/5e771ab4f3b3f91f1aaff8db0284d4a1700954a7#L0L1606">5e771ab</a> (no directories or hidden files), <a href="https://github.com/emanchado/tor/commit/f8ecac5#L0L303">f8ecac5</a> (invalid hex characters don&#8217;t fail, but produce strange behaviour instead; this test actually discovered a bug), <a href="https://github.com/emanchado/tor/commit/7856643#L0R321">7856643</a> (broken escaped content) and <a href="https://github.com/emanchado/tor/commit/87e9f89#L0R256">87e9f89</a> (trailing garbage).</p>
<h2>Not trying to make the tests fail</h2>
<p>This is related to the previous one, but the emphasis is on trying to choose tests that we think will fail (either now or in the future). My impression is that people often fail to do this because they are trying to prove that the code <em>works</em>, which misses the point of testing. The point is trying to prove the code <em>doesn&#8217;t</em> work. And <em>hope</em> that you fail at it, if you will.</p>
<p>The only example I could find was in the <a href="https://github.com/emanchado/tor/commit/03876f0a721ced6ffebb0c61134d5b8396d7600e#L0L616"><code class="syntax c">strcasecmpend</code> tests</a>. Note how there&#8217;s a test that checks that the last three characters of string &#8220;abcDEf&#8221; (ie. &#8220;DEf&#8221;) is less than &#8220;deg&#8221; when compared case-insensitively. That&#8217;s almost pointless, because if we made that same comparison case-sensitively (in other words, if the &#8220;case&#8221; part of the function breaks) the test still passes! Thus it&#8217;s much better to compare the strings &#8221;abcdef&#8221; and &#8220;Deg&#8221;.</p>
<h2>Addendum: trying to cover all cases in the tests</h2>
<p>There&#8217;s another problem I wanted to mention. I have seen several times before, although not in the Tor tests. The problem is making complicated tests that try to cover many/all cases. This seems to stem from the idea that having more test cases is good <em>by itself</em>, when actually more tests are only useful when they <em>increase the chances</em> to catch bugs. For example, if you write tests for a &#8220;sum&#8221; function and you&#8217;re <em>already</em> testing <code class="syntax python">[5, 6, 3, 7]</code>, it&#8217;s probably pointless to add a test for <code class="syntax python">[1, 4, 6, 5]</code>. A test that would increase the chances of catching bugs would probably look more like <code class="syntax python">[-4, 0, 4, 5.6]</code> or <code class="syntax python">[]</code>.</p>
<p>So what&#8217;s wrong with having more tests than necessary? The problem is they make the test suite slower, harder to understand at a glance and harder to review. If they don&#8217;t contribute anything to the chance of catching bugs anyway, why pay that price? But the biggest problem is when we try to cover so many test cases than the code <em>produces</em> the test data. In this cases, we have all the above problems, <em>plus</em> that the test suite becomes almost as complex as production code. Such tests become much easier to introduce bugs in, harder to follow the flow of, etc. The tests are our safety net, so we should be fairly sure that they work as expected.</p>
<p>And that&#8217;s the end of the tips. I hope they were useful :-)</p>
 <p><a href="http://hcoder.org/?flattrss_redirect&amp;id=1322&amp;md5=9727c1870ad1435396033a337cef555b" 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/02/15/unit-testing-advice-for-seasoned-hackers-22/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<atom:link rel="payment" href="https://flattr.com/submit/auto?user_id=30124&amp;popout=1&amp;url=http%3A%2F%2Fhcoder.org%2F2012%2F02%2F15%2Funit-testing-advice-for-seasoned-hackers-22%2F&amp;language=en_GB&amp;category=text&amp;title=Unit+testing+advice+for+seasoned+hackers+%282%2F2%29&amp;description=This+is+the+second+part+of+my+unit+testing+advice.+See+the+first+part+on+this+blog.+If+you+need+any+introduction+you+should+really+read+the+first+part.+I%26%238217%3Bll...&amp;tags=automated+tests%2Cfree+software%2Copen+source%2Cprojects%2Csoftware%2Ctesting%2Ctests%2Ctips%2Ctor%2Cunit%2Cblog" type="text/html" />
	</item>
		<item>
		<title>Unit testing advice for seasoned hackers (1/2)</title>
		<link>http://hcoder.org/2012/02/13/unit-testing-advice-for-seasoned-hackers-12/</link>
		<comments>http://hcoder.org/2012/02/13/unit-testing-advice-for-seasoned-hackers-12/#comments</comments>
		<pubDate>Mon, 13 Feb 2012 23:48:23 +0000</pubDate>
		<dc:creator>emanchado</dc:creator>
				<category><![CDATA[Computers]]></category>
		<category><![CDATA[Work]]></category>
		<category><![CDATA[automated tests]]></category>
		<category><![CDATA[free software]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[projects]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[testing]]></category>
		<category><![CDATA[tests]]></category>
		<category><![CDATA[tips]]></category>
		<category><![CDATA[tor]]></category>
		<category><![CDATA[unit]]></category>

		<guid isPermaLink="false">http://hcoder.org/?p=1301</guid>
		<description><![CDATA[When reviewing tests written by other people I see patterns in the improvements I would make. As I realise that these &#8220;mistakes&#8221; are also made by experienced hackers, I thought it would be useful to write about them. The extra push to write about this now was having concrete examples from my recent involvement in Tor, [...]]]></description>
			<content:encoded><![CDATA[<p>When reviewing tests written by other people I see patterns in the improvements I would make. As I realise that these &#8220;mistakes&#8221; are also made by experienced hackers, I thought it would be useful to write about them. The extra push to write about this <em>now</em> was having concrete examples from my recent involvement in <a href="http://torproject.org/">Tor</a>, that will hopefully illustrate these ideas.</p>
<p>These ideas are presented in no particular order. Each of them has a brief explanation, a concrete example from the Tor tests, and, if applicable, pointers to other commits that illustrate the same idea. Before you read on, let me explicitly acknowledge that (1) I know that many people know these principles, but writing about them is a nice reminder; and (2) I&#8217;m fully aware that sometimes <em>I</em> need that reminder, too.</p>
<p><strong>Edit:</strong>  see the <a href="http://hcoder.org/2012/02/15/unit-testing-advice-for-seasoned-hackers-22/">second part</a> of this blog.</p>
<h2>Tests as spec</h2>
<p>Tests are more useful if they can show how the code is supposed to behave, including safeguarding against future misunderstandings. Thus, it doesn&#8217;t matter if you <em>know</em> the current implementation will pass those tests or that those test cases won&#8217;t add more or different &#8220;edge&#8221; cases. If those test cases show better how the code behaves (and/or could catch errors if you rewrite the code from scratch with a different design), they&#8217;re good to have around.</p>
<p>I think the clearest example were the <a href="https://github.com/emanchado/tor/commit/8db0f914bfa1aeebed463dc2aa438ca8c87f73a0#L0L2279">tests for the <code class="syntax c">eat_whitespace*</code> functions</a>. Two of those functions end in <code class="syntax c">_no_nl</code>, and they only eat initial whitespace (except newlines). The other two functions eat initial whitespace, including newlines&#8230; but also eat comments. The tests from line 2280 on are clearly targeted at the second group, as they don&#8217;t really represent an interesting use case for the first. However, without those tests, a future maintainer could have thought that the <code class="syntax c">_no_nl</code> functions were supposed to eat whitespace too, and break the code. That produces confusing errors and bugs, which in turn make people fear touching the code.</p>
<p>See other examples in commits <a href="https://github.com/emanchado/tor/commit/b7b3b99acbeb29258e071b8f6c2a7d257a94ad99#L0L1552">b7b3b99</a> (escaped &#8216;%&#8217;, negative numbers, %i format string), <a href="https://github.com/emanchado/tor/commit/618836b3bb643db4af457a32cd8f2338153b5e88#L0L1516">618836b</a> (should an empty string be found at the beginning, or not found at all? does &#8220;\n&#8221; count as beginning of a line? can &#8220;\n&#8221; be found by itself? what about a string that expands more than one line? what about a line including the &#8220;\n&#8221;, with and without the haystack having the &#8220;\n&#8221; at the end?), <a href="https://github.com/emanchado/tor/commit/63b018eecea37ea5a09381157624a507a4a9187a">63b018ee</a> (how are errors handled? what happens when a %s gets part of a number?), <a href="https://github.com/emanchado/tor/commit/2210f18cee86cf17817b386aeca1af2cd0b1f249#L0L1131">2210f18</a> (is a newline only \r\n or \n, or any combination or \r and \n?) and <a href="https://github.com/emanchado/tor/commit/46bbf6c015fac412b47ca56279002129a1c2b278#L0L654">46bbf6c</a> (check that all non-printable characters are escaped in octal, even if they were originally in hex; check that characters in octal/hex, when they&#8217;re printable, appear directly and not in octal).</p>
<h2>Testing boundaries</h2>
<p>Boundaries of different kinds are a typical source of bugs, and thus are among the best points of testing we have. It&#8217;s also good to test <em>both</em> sides of the boundaries, both as an example and because bugs can appear on both sides (and not necessarily at once!).</p>
<p>The best example are the <a href="https://github.com/emanchado/tor/commit/770fd9f#L0R1484">tor_strtok_r_impl tests</a> (a function that is supposed to be compatible with <code class="syntax c">strtok_r</code>, that is, it chops a given string into &#8220;tokens&#8221;, separated by one of the given separator characters). In fact, these extra tests discovered an actual bug in the implementation (ie. an incompatibility with <code class="syntax c">strtok_r</code>). Those extra tests asked a couple of interesting questions, including &#8220;when a string <em>ends</em> in the token separator, is there an empty token in the end?&#8221; in the &#8220;howdy!&#8221; example. This test can also be considered valuable as in &#8220;tests as spec&#8221;, if you consider that the answer to be above question is not obvious and both answers could be considered correct.</p>
<p>See other examples in commits <a href="https://github.com/emanchado/tor/commit/5740e0fc1f00fa91be107ee6c4315d114c5ffdc4#L0L598">5740e0f</a> (checking if <code class="syntax c">tor_snprintf</code> correctly counts the number of bytes, as opposed the characters, when calculating if something can fit in a string; also note my embarrassing mistake of testing <code class="syntax c">snprintf</code>, and not <code class="syntax c">tor_snprintf</code>, later in the same commit), <a href="https://github.com/emanchado/tor/commit/46bbf6c015fac412b47ca56279002129a1c2b278#L0L637">46bbf6c</a> (check that character 21 doesn&#8217;t make a difference, but 20 does) and <a href="https://github.com/emanchado/tor/commit/725d6ef37909080a3d2c5bc25245ea0e951882f2#L0L2217">725d6ef</a> (testing 129 is very good, but even better with 128—or, in this case, 7 and 8).</p>
<h2>Testing implementation details</h2>
<p>Testing implementation details tends to be a bad idea. You can usually argue you&#8217;re testing implementation details if you&#8217;re not getting the test information from the APIs provided by whatever you&#8217;re testing. For example, if you test some API that inserts data in a database by checking the database directly, or if you test the result of a method call was correct by checking the object&#8217;s internals or calling protected/private methods. There are two reasons why this is a bad idea: first, the more implementation details you tests depend on, the less implementation details you can change without breaking your tests; second, your tests are typically less readable because they&#8217;re cluttered with details, instead of <em>meaningful</em> code.</p>
<p>The only example I encountered of this in Tor were the <a href="https://github.com/emanchado/tor/commit/c4c1d56d96623a45775ec2544c0c6951fbfa2d9f#L0L968">compression tests</a>. In this case it wasn&#8217;t a big deal, really, but I have seen this before in much worse situations and I feel this illustrates the point well enough. The problem with that deleted line is that it&#8217;s not clear what&#8217;s it&#8217;s purpose (it needs a comment), plus it uses a magic number, meaning if someone ever changes that number by mistake, it&#8217;s not obvious if the problem is the code or the test. Besides, <em>we are already checking that the magic number is correct</em>, by calling the <code class="syntax c">detect_compression_method</code>. Thus, the deleted <code class="syntax c">memcmp</code> doesn&#8217;t add any value, and makes our tests harder to read. Verdict: delete!</p>
<p><em>I hope you liked the examples so far. My next post will contain the second half of the tips.</em></p>
 <p><a href="http://hcoder.org/?flattrss_redirect&amp;id=1301&amp;md5=f51edc2b2e4df2bc4e424b096b2bbe01" 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/02/13/unit-testing-advice-for-seasoned-hackers-12/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<atom:link rel="payment" href="https://flattr.com/submit/auto?user_id=30124&amp;popout=1&amp;url=http%3A%2F%2Fhcoder.org%2F2012%2F02%2F13%2Funit-testing-advice-for-seasoned-hackers-12%2F&amp;language=en_GB&amp;category=text&amp;title=Unit+testing+advice+for+seasoned+hackers+%281%2F2%29&amp;description=When+reviewing+tests+written+by+other+people+I+see+patterns+in+the+improvements+I+would+make.+As+I+realise+that+these+%26%238220%3Bmistakes%26%238221%3B+are+also+made+by+experienced+hackers%2C+I+thought...&amp;tags=automated+tests%2Cfree+software%2Copen+source%2Cprojects%2Csoftware%2Ctesting%2Ctests%2Ctips%2Ctor%2Cunit%2Cblog" 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="https://flattr.com/submit/auto?user_id=30124&amp;popout=1&amp;url=http%3A%2F%2Fhcoder.org%2F2011%2F07%2F09%2Fmy-experience-writing-opera-extensions%2F&amp;language=en_GB&amp;category=text&amp;title=My+experience+writing+Opera+extensions&amp;description=Apart+from+a+couple+of+widgets%2C+I+have+written+two+Opera+extensions.+The+first+was+Show+Filtered+Content%2C+a+proof+of+concept+of+how+to+use+the+Opera+Link+API%2C...&amp;tags=blog" type="text/html" />
	</item>
		<item>
		<title>GTAC (two months late)</title>
		<link>http://hcoder.org/2011/01/05/gtac-two-months-late/</link>
		<comments>http://hcoder.org/2011/01/05/gtac-two-months-late/#comments</comments>
		<pubDate>Wed, 05 Jan 2011 22:21:56 +0000</pubDate>
		<dc:creator>emanchado</dc:creator>
				<category><![CDATA[Computers]]></category>
		<category><![CDATA[Work]]></category>
		<category><![CDATA[conferences]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[gtac]]></category>
		<category><![CDATA[gtac2010]]></category>
		<category><![CDATA[talks]]></category>
		<category><![CDATA[testability]]></category>

		<guid isPermaLink="false">http://hcoder.org/?p=692</guid>
		<description><![CDATA[It&#8217;s been more than two months since the GTAC and I never wrote anything about it in this blog, so I thought I&#8217;d write some words so I could cross it off my to-do list. As you can imagine, the conference was great. It was my first big conference and my first time outside of [...]]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s been more than two months since the GTAC and I never wrote anything about it in this blog, so I thought I&#8217;d write some words so I could cross it off my to-do list.</p>
<p>As you can imagine, the conference was great. It was my first big conference and my first time outside of Europe, so it was doubly exciting for me. And even though there were many interesting talks, meeting all that bunch of testing nerds was much better. It shows that Google really worked hard to make people socialise.</p>
<p>But let&#8217;s start from the beginning. Probably around a year ago now I had written a talk about testability that I had submitted to <a href="http://www.eurostarconferences.com/conferences/2010.aspx">EuroSTAR 2010</a>, but had been rejected. That had been my third rejection I believe, so I started losing hopes that I&#8217;d ever speak at an international conference. However, relatively shortly after being rejected <a href="http://googletesting.blogspot.com/2010/04/google-test-automation-conference-2010.html">Google announced this year&#8217;s event</a>, and the theme was &#8220;Test to testability&#8221;, so I said &#8220;what the hell!&#8221;.</p>
<p>They said from the start that it would be invitation-only, meaning you had to apply even for simply <em>attending</em>. That was actually pretty cool, because the idea was that Google would choose the attendees, and once selected and notified, those attendees would <em>vote for each other&#8217;s talks </em>to decide what the program would be. It would also mean that attendees would be chosen because they had something interesting to add to the conference, not simply money to pay the registration fee.</p>
<p>And one day, right before leaving for a short vacation, I received the news that I had been chosen to attend. At that point, of course, I had no idea if I would actually talk, but just attending was awesome and I was really happy and a bit surprised (I was going to a conference! in India!). A couple of days later I received a lot of proposed talks to rate. That was pretty exciting, and seeing a lot of very interesting topics was kind of cool, because it was so promising, but also a bit discouraging, because I thought the chances of getting chosen were pretty low. Still I didn&#8217;t lose all hope, and when the deadline came, I was notified that I had been chosen to talk. At that point I was pretty surprised, but when I kept reading and saw that there were only <strong>8</strong> talks selected (+ 3 keynotes), <em>then</em> I was pretty shocked.</p>
<p>The rest of the story you don&#8217;t have to imagine, because in the typical Google fashion, all the <a href="http://www.gtac.biz/videos">conference material</a> is available on the website (both videos and slides). As I imagine that the conference page link will break sooner or later, I&#8217;ll just give you the <a href="http://www.youtube.com/view_play_list?p=1242F05D3EA83AB1">official GTAC 2010 YouTube playlist</a>. My favourite talks were (in order of appearance):</p>
<ul>
<li><a href="http://www.youtube.com/watch?v=13oE_7SVGoQ&amp;p=1242F05D3EA83AB1">Twist, A Next Generation Functional Testing Tool</a> &#8211; really nice tool and very good demo, although not being open source and being for Eclipse was kind of a let down</li>
<li><a href="http://www.youtube.com/watch?v=oX-0Mt5zju0&amp;p=1242F05D3EA83AB1">The Future of Front-End Testing</a> &#8211; kind of everything a professional QA Engineer should know about front-end testing, but it&#8217;s not always the case; I thought it was kind of basic, but it was a useful reminder and listening to Simon Stewart is just fun</li>
<li><a href="http://www.youtube.com/watch?v=K3q_y8H1ZTo&amp;p=1242F05D3EA83AB1">Flexible Design? Testable Design? You Don&#8217;t Have To Choose!</a> &#8211; great talk with unit testing tips/patterns; one of the nice things is that those patterns are not only for statically-typed languages</li>
<li><a href="http://www.youtube.com/watch?v=-MkyZG2Wa_E&amp;p=1242F05D3EA83AB1">Crowd Source Testing, Mozilla Community Style</a> &#8211; very nice talk about making the community help you testing complex products, with many examples and details</li>
</ul>
<p>I guess I should also mention &#8220;<a href="http://www.youtube.com/watch?v=5FuMYpoyPKg&amp;p=1242F05D3EA83AB1">Measuring and Monitoring Experience in Interactive Streaming Applications</a>&#8221; and &#8220;<a href="http://www.youtube.com/watch?v=cqwXUTjcabs&amp;p=1242F05D3EA83AB1">Turning Quality on its Head</a>&#8220;. The first, because I thought it was a cool story about how hard it is to find bugs that are important for users, but are vague and hard to reproduce. The second, mostly because of the tool that James shows off. You can see <a href="http://www.youtube.com/watch?v=cqwXUTjcabs&amp;p=1242F05D3EA83AB1#t=52m25s">screenshots and an explanation of it</a> from minute 52.</p>
<p>About my own talk, &#8220;<a href="http://www.youtube.com/watch?v=4CFj5thxYQA">Lessons Learned from Testability Failures</a>&#8220;, I was really worried that I was going to freak out and block on stage. After all, I was used to talking in front of 5, 10, 20 or maybe 30 people. Speaking in front of around 100 and knowing that I was being recorded for YouTube (and that a lot of people interested in the subject would watch those videos) was quite scary in itself. <em>And then</em> there was the other factor: I usually speak to people who (theoretically) know less than me about that concrete subject, but it wasn&#8217;t like that at all in this case. However, people there were so cool and friendly that I felt <em>less nervous</em> than I usually feel. Watching the video, I do look nervous the first minutes, but after the introduction and such it felt really good. Kudos to the organisation and the attendees for being so open, cool and friendly. Meeting all that crowd was clearly the best of going to be conference.</p>
<p>All in all, it was a great experience and I made a lot of contacts and friends, and I&#8217;m looking forward to attending another similar conference (maybe next year&#8217;s GTAC?). We&#8217;ll see.</p>
 <p><a href="http://hcoder.org/?flattrss_redirect&amp;id=692&amp;md5=789a7fe906dc4b706e6ea94aed39ee0e" 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/01/05/gtac-two-months-late/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<atom:link rel="payment" href="https://flattr.com/submit/auto?user_id=30124&amp;popout=1&amp;url=http%3A%2F%2Fhcoder.org%2F2011%2F01%2F05%2Fgtac-two-months-late%2F&amp;language=en_GB&amp;category=text&amp;title=GTAC+%28two+months+late%29&amp;description=It%26%238217%3Bs+been+more+than+two+months+since+the+GTAC+and+I+never+wrote+anything+about+it+in+this+blog%2C+so+I+thought+I%26%238217%3Bd+write+some+words+so+I+could+cross...&amp;tags=conferences%2Cgoogle%2Cgtac%2Cgtac2010%2Ctalks%2Ctestability%2Cblog" type="text/html" />
	</item>
		<item>
		<title>Book Summary: Storytelling for UX (3/3)</title>
		<link>http://hcoder.org/2010/10/12/book-summary-storytelling-for-ux-33/</link>
		<comments>http://hcoder.org/2010/10/12/book-summary-storytelling-for-ux-33/#comments</comments>
		<pubDate>Tue, 12 Oct 2010 19:11:07 +0000</pubDate>
		<dc:creator>emanchado</dc:creator>
				<category><![CDATA[Book summaries]]></category>
		<category><![CDATA[Computers]]></category>
		<category><![CDATA[Reviews]]></category>
		<category><![CDATA[Work]]></category>
		<category><![CDATA[books]]></category>
		<category><![CDATA[review]]></category>
		<category><![CDATA[storytelling]]></category>
		<category><![CDATA[ux]]></category>

		<guid isPermaLink="false">http://hcoder.org/?p=534</guid>
		<description><![CDATA[And this is the last past of the summary of &#8220;Storytelling for UX&#8221; (first part, second part). In this last part I&#8217;ll cover the tips to create stories. At the end I&#8217;ll do a mini-review of the book and will add some extra comments. How to create a story Stories have four elements: audience, ingredients, [...]]]></description>
			<content:encoded><![CDATA[<p><em>And this is the last past of the summary of &#8220;Storytelling for UX&#8221; (<a href="http://hcoder.org/2010/10/10/book-summary-storytelling-for-ux-13/">first part</a>, <a href="http://hcoder.org/2010/10/11/book-summary-storytelling-for-ux-23/">second part</a>). In this last part I&#8217;ll cover the tips to create stories. At the end I&#8217;ll do a mini-review of the book and will add some extra comments.</em></p>
<h2>How to create a story<em> </em></h2>
<p>Stories have four elements: audience, ingredients, structure and medium.</p>
<h3>Audience</h3>
<p>There are two important relationships in stories: story-audience and you-audience. About the first, you want to include details that fill the gap, and also stories are a good way to make the audience see a different perspective by feeling it. Finally, endings are important. They should be memorable and settled (&#8220;take them home&#8221;).</p>
<h3>Ingredients</h3>
<p>See checklist on p. 209.</p>
<ul>
<li>Perspective. there isn&#8217;t a neutral POV in stories. Types of perspectives are realist (3rd person, &#8220;absent&#8221; author), confessional (focused on author experience) and impressionist (mixes descriptions of events with a strong structure). The last intends to spark ideas/actions and while they can have an ending, they might end with implicit question. An easy way to add perspective is letting the main character do the talking.</li>
<li>Characters. One of the reasons why UX stories are useful is because they add specificity and texture to the usually one-dimensional view of users. Also useful to highlight needs outside the mainstream. Tips to build characters: (1) choose (only) details that add meaning; (2) show, don&#8217;t tell (show in action instead of <strong>describing</strong> traits); (3) set up &#8220;hooks&#8221; that you can use later in the story; (4) leave room for imagination.</li>
<li>Context. Five types: physical (time, date, location, location scale), emotional (how characters feel), sensory (5 senses), historical (&#8220;when phones had dials&#8221;), memory (storyteller&#8217;s memory, flashbacks).</li>
<li>Imagery. Things that make us picture the story (example in p. 205). Don&#8217;t use too much!</li>
<li>Language. Tips: (a) speak in the language of the characters, (b) make the story active, (c) focus on telling the story, not describing, (d) don&#8217;t judge characters, context or events.</li>
</ul>
<h3>Structure/plot</h3>
<p>Structure is the framework/skeleton of the story. Plot is the arrangement of the events. Strong structures help the audience, the author and the story (p. 215). See types of stories on p. 216. &#8220;Checklist&#8221; for good structure and plot on p. 235.</p>
<h3>Medium</h3>
<p>Four big media: oral (mind the gap to written, p. 243), written (make the point explicit, keep it short, make use of cultural cues as in p. 253), visual (comics and storyboards work, see p. 258-260), multimedia/video.</p>
<p>See tips on how to integrate stories in reports on p. 265 and p. 266. See strong sides of different media on p. 272.</p>
<h2>Mini-review and conclusions</h2>
<p>I quite liked the book, although I admit that the last part (the one summarised in this post) was a bit disappointing. I guess it&#8217;s hard to give tips about something as complex as creating a story, in a book. The book has a very clear structure and it&#8217;s easy to follow and read, which helps in figuring out what to read, what to skim and what to leave for later.</p>
<p>Another thing that really struck me while reading the book (the second book I read following the tips from &#8220;<a href="http://pne.people.si.umich.edu/PDF/howtoread.pdf">How to Read a Book</a>&#8220;) is how <em>little</em> I used to understand of the books I read. I now go through the book three times: one to get an idea of the structure and the most interesting parts, one to read the content, and one to review and make a summary. So even while I was reading it for the last time, I made sense of things that I hadn&#8217;t realised while reading the book (and that was after knowing the structure, knowing what to expect from each chapter, and having made some preliminary notes!). Not only that, but I also feel that I&#8217;m much more critical with what I read and I compare it much more with what I think myself.</p>
<p>If you aren&#8217;t doing it already, I strongly recommend that you give those tips a try&#8230;</p>
 <p><a href="http://hcoder.org/?flattrss_redirect&amp;id=534&amp;md5=7fc1e9deb3798f20e98cfcf8e0064963" 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/2010/10/12/book-summary-storytelling-for-ux-33/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<atom:link rel="payment" href="https://flattr.com/submit/auto?user_id=30124&amp;popout=1&amp;url=http%3A%2F%2Fhcoder.org%2F2010%2F10%2F12%2Fbook-summary-storytelling-for-ux-33%2F&amp;language=en_GB&amp;category=text&amp;title=Book+Summary%3A+Storytelling+for+UX+%283%2F3%29&amp;description=And+this+is+the+last+past+of+the+summary+of+%26%238220%3BStorytelling+for+UX%26%238221%3B+%28first+part%2C+second+part%29.+In+this+last+part+I%26%238217%3Bll+cover+the+tips+to+create+stories.+At+the...&amp;tags=books%2Creview%2Cstorytelling%2Cux%2Cblog" type="text/html" />
	</item>
		<item>
		<title>Book Summary: Storytelling for UX (2/3)</title>
		<link>http://hcoder.org/2010/10/11/book-summary-storytelling-for-ux-23/</link>
		<comments>http://hcoder.org/2010/10/11/book-summary-storytelling-for-ux-23/#comments</comments>
		<pubDate>Mon, 11 Oct 2010 20:42:39 +0000</pubDate>
		<dc:creator>emanchado</dc:creator>
				<category><![CDATA[Book summaries]]></category>
		<category><![CDATA[Computers]]></category>
		<category><![CDATA[Reviews]]></category>
		<category><![CDATA[Work]]></category>
		<category><![CDATA[books]]></category>
		<category><![CDATA[review]]></category>
		<category><![CDATA[storytelling]]></category>
		<category><![CDATA[ux]]></category>

		<guid isPermaLink="false">http://hcoder.org/?p=529</guid>
		<description><![CDATA[This is the second (and longest) part of my summary of &#8220;Storytelling for UX&#8221; (see the first part). It will cover how to fit stories and storytelling into the UX design process. There shouldn&#8217;t be &#8220;a storyteller&#8221; in the team, as many as possible should be familiar with the technique. Prototypes based on stories allow [...]]]></description>
			<content:encoded><![CDATA[<p><em>This is the second (and longest) part of my summary of &#8220;Storytelling for UX&#8221; (see <a href="http://hcoder.org/2010/10/10/book-summary-storytelling-for-ux-13/">the first part</a>). It will cover how to fit stories and storytelling into the UX design process.</em></p>
<p>There shouldn&#8217;t be &#8220;a storyteller&#8221; in the team, as many as possible should be familiar with the technique. Prototypes based on stories allow exploration of new ideas, esp. if they&#8217;re big changes.</p>
<p>There are several parts of the UX process were stories are useful:</p>
<ul>
<li>Collecting input from users. You&#8217;re already hearing those stories. Do it consciously.</li>
<li>Exploring user research and other data. Summary of hard data.</li>
<li>Experimenting with design ideas. See stories that help launch a design discussion (type) and the role &#8220;spark new ideas&#8221;.</li>
<li>Testing designs. They can evaluate if you have stayed true to original needs and if they will work with real users.</li>
</ul>
<h3>Collecting input</h3>
<p>Being in the user work environment helps noticing things people don&#8217;t mention. When you just arrive, everything is unfamiliar. Take notes <strong>then</strong>. If you can&#8217;t talk to your users, you can get some limited info from: search/server logs, customer service records, people who do training and sales demos, market research and satisfaction surveys.</p>
<p>Getting people in groups can help make people talk (build on each other). Also asking people to recall specific events is really useful.</p>
<p>Tip: be open to tangents, but don&#8217;t waste too much time in them if you don&#8217;t see value. Also, a user avoiding talking about what you want is information, too.</p>
<p>Tip: Use a structure for the interview (first closed questions, then open), see p. 82. Try to have the interview in the context the product will be used.</p>
<h3>Selecting stories</h3>
<p>Characteristics of good stories:</p>
<ul>
<li>Heard from more than one source</li>
<li>With action detail</li>
<li>Make user data easy to understand</li>
<li>Illustrate an aspect the UX team is interested in</li>
<li>Surprise or contradict common beliefs</li>
</ul>
<p>They should help explain something about UX beyond data, bring data to life. They should also connect with other stories and <strong>resonate</strong>, leading to action.</p>
<h3>Experimenting with design ideas</h3>
<p>Three possible uses of stories: brainstorming, concept and specification. When no user research is available, you can brainstorm to create user stories. See a good technique/game for it on page 111.</p>
<p>When you do have user research, you can develop those stories. For that, some rules: (1) defer judgement, (2) encourage wild ideas and (3) build on the ideas of others. See adaptation of the game for this case, p. 118. Concept stories should include: (a) focus on activity set in a specific context, (b) description of motivations that trigger action, (c) describe the characters well enough to set them in context.</p>
<p>Specification stories are useful to summarise results. They are <strong>included</strong> in specs. They keep the real-world context available for reference.</p>
<h3>Testing/evaluating designs</h3>
<p>Three uses of stories: create scenarios/tasks for usability testing, serve as guide for expert reviews, and quality testing.</p>
<p>If in usability testing you ask the user <strong>first</strong> what her interests are, you can turn that story into a usability test task.</p>
<p>Stories and personas from them are very useful to set a context for expert reviews. Give each expert a persona and make them try to complete a task from that persona POV.</p>
<p>[I didn't really get the "quality testing" part, whatever that means, so I don't have notes about it]</p>
<h3>Sharing stories</h3>
<p>When communicating with people, stories get the audience attention, set context and inspire action.</p>
<p>Listening exercises make you understand your audience, and make them understand how diverse/similar they are.</p>
<p>There are three typical types of audiences:</p>
<ol>
<li>Strategic leaders: generate and maintain a common vision (p. 143). Things that work for them: identify point of pain <strong>and</strong> offer a solution, identify gap in market and show how to fill, show new approach by reconfiguring common/existing components, and identify UX trends and show impact on business.</li>
<li>Managers: have a mission and have to make decisions (p. 146). Don&#8217;t have time to spare, prefer short meetings to brainstorming sessions. If you bring bad news, show why it&#8217;s important to care. Don&#8217;t go into much detail.</li>
<li>Technical experts: implement a vision (p. 149). Can be difficult to reach them with stories, esp. if not grounded in details. Tips: (a) use representative characters and situations and be ready to back up with hard data, (b) make the action of the story specific and tangible, (c) keep the story on track, (d) use technical terminology accurately.</li>
</ol>
<p>And that was the end of this part of the summary. In the next and last post I&#8217;ll cover the tips about creating stories and will write some sort of mini-review and conclusions.</p>
 <p><a href="http://hcoder.org/?flattrss_redirect&amp;id=529&amp;md5=7dc8d8cecad066e9051f92aa9d4ba59c" 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/2010/10/11/book-summary-storytelling-for-ux-23/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<atom:link rel="payment" href="https://flattr.com/submit/auto?user_id=30124&amp;popout=1&amp;url=http%3A%2F%2Fhcoder.org%2F2010%2F10%2F11%2Fbook-summary-storytelling-for-ux-23%2F&amp;language=en_GB&amp;category=text&amp;title=Book+Summary%3A+Storytelling+for+UX+%282%2F3%29&amp;description=This+is+the+second+%28and+longest%29+part+of+my+summary+of+%26%238220%3BStorytelling+for+UX%26%238221%3B+%28see+the+first+part%29.+It+will+cover+how+to+fit+stories+and+storytelling+into+the+UX...&amp;tags=books%2Creview%2Cstorytelling%2Cux%2Cblog" type="text/html" />
	</item>
		<item>
		<title>Book Summary: Storytelling for UX (1/3)</title>
		<link>http://hcoder.org/2010/10/10/book-summary-storytelling-for-ux-13/</link>
		<comments>http://hcoder.org/2010/10/10/book-summary-storytelling-for-ux-13/#comments</comments>
		<pubDate>Sun, 10 Oct 2010 14:35:05 +0000</pubDate>
		<dc:creator>emanchado</dc:creator>
				<category><![CDATA[Book summaries]]></category>
		<category><![CDATA[Computers]]></category>
		<category><![CDATA[Reviews]]></category>
		<category><![CDATA[Work]]></category>
		<category><![CDATA[books]]></category>
		<category><![CDATA[review]]></category>
		<category><![CDATA[storytelling]]></category>
		<category><![CDATA[ux]]></category>

		<guid isPermaLink="false">http://hcoder.org/?p=521</guid>
		<description><![CDATA[This is book is the first book chosen for Oslo&#8217;s UX book club. It was a quite interesting book about using stories and storytelling techniques in different steps of the User Experience design process. The following is the first part of my (long) summary of the book. The summary is mostly intended to remind me [...]]]></description>
			<content:encoded><![CDATA[<p>This is book is the first book chosen for <a href="http://uxbookclub.org/doku.php?id=oslo">Oslo&#8217;s UX book club</a>. It was a quite interesting book about using stories and storytelling techniques in different steps of the User Experience design process. The following is the first part of my (long) summary of the book. The summary is mostly intended to remind me things I read, but probably/hopefully it will be interesting and useful to others. As the book is more or less divided in four parts (introduction, listening, how to fit stories in the process and how to create a story), I&#8217;ll cover the introduction and the notes on listening in this post, and will leave the other two parts to other posts. <strong>Edit:</strong> see parts <a href="http://hcoder.org/2010/10/11/book-summary-storytelling-for-ux-23/">two</a> and <a href="http://hcoder.org/2010/10/12/book-summary-storytelling-for-ux-33/">three</a>.</p>
<h2>Introduction (chapters 1-2)</h2>
<p>Stories help keeping people at the center (p. 2). There are different types of stories (p. 5):</p>
<ul>
<li>Those that describe context/situation: describe the world today. Not only sequence of events, but also <strong>reasons</strong> and <strong>motivations</strong>.</li>
<li>Those that illustrate problems: show a problem that a new product or design change can fix. They should describe it in a way that opens the door for brainstorming.</li>
<li>Those that help launch a design discussion: starting point for a brainstorming session. Enough detail to make sense but leave room for the imagination.</li>
<li>Those that explore a design concept: explain/explore idea or concept and its implications for the experience. Helps <strong>shape</strong> the design by showing it in action.</li>
<li>Those that prescribe the result of a new design: describe the world as it will be in more detail. Similar to the 1st, but describe a user experience that doesn&#8217;t exist yet.</li>
</ul>
<p>Interesting quote in page 10, with the message &#8220;until you hear a story, you can&#8217;t understand the experience&#8221;.</p>
<p>Stories are interactive, change with the audience (p. 14). They also not only describe actions, but add context and why (motivation). There is a fine line with how many detail to include in motivation, because of shared cultural understanding and other things (p. 17, 19).</p>
<p>Stories have different <strong>roles</strong>:</p>
<ul>
<li>Explain: give context and sensory experience, not just events. This is different from use-cases.</li>
<li>Engage the imagination: surpass linear logic and evoke new ideas.</li>
<li>Spark new ideas: as we fill in the gaps, we can hint details but let people come up with their own ideas.</li>
<li>Create a shared understanding.</li>
<li>Persuade.</li>
</ul>
<p>In any case, stories are not &#8220;made up&#8221;: they&#8217;re based on data.</p>
<h2>Listening (chapter 3)</h2>
<p>Really listening to users (e.g. in interviews and such) gives you access to a lot of info you can&#8217;t get anywhere else. Open questions are very important for this. Giving time to answer sometimes gives people time for second thoughts (not just what they think you want to hear), which has more value than the first reply. Also, pay attention to the context, people forget to mention &#8220;obvious&#8221; (for them) everyday facts.</p>
<p>Practising active listening is very important, see the following links:</p>
<ul>
<li><a href="http://sklatch.net/thoughtlets/listen.html">Eight barriers to effective listening</a></li>
<li><a href="http://powertochange.com/students/people/listen/">10 Tips to Effective &amp; Active Listening Skills</a></li>
</ul>
<p>And that&#8217;s it for the first part. Stay tuned for the rest of the summary.</p>
 <p><a href="http://hcoder.org/?flattrss_redirect&amp;id=521&amp;md5=25d3154b6b9359c570b01c22915186ae" 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/2010/10/10/book-summary-storytelling-for-ux-13/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<atom:link rel="payment" href="https://flattr.com/submit/auto?user_id=30124&amp;popout=1&amp;url=http%3A%2F%2Fhcoder.org%2F2010%2F10%2F10%2Fbook-summary-storytelling-for-ux-13%2F&amp;language=en_GB&amp;category=text&amp;title=Book+Summary%3A+Storytelling+for+UX+%281%2F3%29&amp;description=This+is+book+is+the+first+book+chosen+for+Oslo%26%238217%3Bs+UX+book+club.+It+was+a+quite+interesting+book+about+using+stories+and+storytelling+techniques+in+different+steps+of+the...&amp;tags=books%2Creview%2Cstorytelling%2Cux%2Cblog" type="text/html" />
	</item>
		<item>
		<title>From pseudo-code to code</title>
		<link>http://hcoder.org/2010/08/10/from-pseudo-code-to-code/</link>
		<comments>http://hcoder.org/2010/08/10/from-pseudo-code-to-code/#comments</comments>
		<pubDate>Tue, 10 Aug 2010 20:45:16 +0000</pubDate>
		<dc:creator>emanchado</dc:creator>
				<category><![CDATA[Computers]]></category>
		<category><![CDATA[Work]]></category>
		<category><![CDATA[automated tests]]></category>
		<category><![CDATA[science]]></category>
		<category><![CDATA[testability]]></category>
		<category><![CDATA[testing]]></category>
		<category><![CDATA[tests]]></category>

		<guid isPermaLink="false">http://hcoder.org/?p=416</guid>
		<description><![CDATA[This post is probably not about what you&#8217;re thinking. It&#8217;s actually about automated testing. Different stuff I&#8217;ve been reading or otherwise been exposed to in the last weeks has made me reach a sort of funny comparison: code is (or can be) like science. You come up with some &#8220;theory&#8221; (your code) that explains something [...]]]></description>
			<content:encoded><![CDATA[<p><em>This post is probably not about what you&#8217;re thinking. It&#8217;s actually about automated testing.</em></p>
<p>Different stuff I&#8217;ve been reading or otherwise been exposed to in the last weeks has made me reach a sort of funny comparison: code is (or can be) like science. You come up with some &#8220;theory&#8221; (your code) that explains something (solves a problem)&#8230; and you make sure you can <em>measure</em> it and <em>test</em> it for people to believe your theory and build on top of it.</p>
<p>I mean, something claiming to be science that can&#8217;t be easily measured, compared or peer-reviewed would be ridiculous. Scientists wouldn&#8217;t believe in it and would certainly not build anything on top of it because the foundation is not reliable.</p>
<p>I claim that software should be the same way, and thus it&#8217;s ridiculous to trust software that doesn&#8217;t have a good test suite, or even worse, that may not even be particularly testable. Trusting software without a test suite is not <em>that</em> different from taking the word of the developer that it &#8220;works on my machine&#8221;. Scientists would call untested science <em>pseudo-science</em>, so <em>I</em> am tempted to call code without tests <em>pseudo-code</em>.</p>
<p>Don&#8217;t get me wrong: sure you can test by hand, and hand-made tests are useful and necessary, but that only proves that the exact code you tested, without any changes, works as expected. But you know what? <em>Software changes all the time</em>, so that&#8217;s not a great help. If you don&#8217;t have a way to <strong>quickly</strong> and <strong>reliably</strong> measure how your code behaves, <em>every time you make a change</em> you are taking a leap of faith. And the more leaps of faith you take, the less credible your code is.</p>
 <p><a href="http://hcoder.org/?flattrss_redirect&amp;id=416&amp;md5=8e86f84ff69bb4fefc237936a785bd85" 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/2010/08/10/from-pseudo-code-to-code/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<atom:link rel="payment" href="https://flattr.com/submit/auto?user_id=30124&amp;popout=1&amp;url=http%3A%2F%2Fhcoder.org%2F2010%2F08%2F10%2Ffrom-pseudo-code-to-code%2F&amp;language=en_GB&amp;category=text&amp;title=From+pseudo-code+to+code&amp;description=This+post+is+probably+not+about+what+you%26%238217%3Bre+thinking.+It%26%238217%3Bs+actually+about+automated+testing.+Different+stuff+I%26%238217%3Bve+been+reading+or+otherwise+been+exposed+to+in+the+last+weeks+has+made...&amp;tags=automated+tests%2Cscience%2Ctestability%2Ctesting%2Ctests%2Cblog" type="text/html" />
	</item>
		<item>
		<title>Faster than the fastest</title>
		<link>http://hcoder.org/2010/07/05/faster-than-the-fastest/</link>
		<comments>http://hcoder.org/2010/07/05/faster-than-the-fastest/#comments</comments>
		<pubDate>Mon, 05 Jul 2010 21:08:48 +0000</pubDate>
		<dc:creator>emanchado</dc:creator>
				<category><![CDATA[Computers]]></category>
		<category><![CDATA[Work]]></category>
		<category><![CDATA[hitler]]></category>
		<category><![CDATA[link]]></category>
		<category><![CDATA[meme]]></category>
		<category><![CDATA[opera]]></category>
		<category><![CDATA[opera link]]></category>
		<category><![CDATA[video]]></category>
		<category><![CDATA[youtube]]></category>

		<guid isPermaLink="false">http://hcoder.org/?p=395</guid>
		<description><![CDATA[These are interesting times in the browser world: not only there are more browsers than ever, but now even Internet Explorer is starting to become competitive again, so in a year or two it might not even be safe to assume that every other browser is better. Go figure. So anyway, recently Opera released 10.60, [...]]]></description>
			<content:encoded><![CDATA[<p>These are interesting times in the browser world: not only there are more browsers than ever, but now even Internet Explorer is starting to become competitive again, so in a year or two it might not even be safe to assume that every other browser is better. Go figure.</p>
<p>So anyway, recently Opera released 10.60, which is awesome news because finally Linux has a modern stable release, because of the amount of new eye candy in the UI, the new supported web standards (like Geolocation or WebM video, yay!) and&#8230; because of the amazing speed (&#8220;<a href="http://www.youtube.com/watch?v=zaT7thTxyq8">much faster than a potato</a>&#8220;).</p>
<p>On Saturday, DailyTech published an <a href="http://www.dailytech.com/Opera+106+The+Worlds+Fastest+Stable+Browser+Tested+vs+IE+9/article18909.htm">article comparing the speed of several browsers</a>, Opera 10.60 included. Obviously the conclusion was that Opera is the fastest (I wouldn&#8217;t link to <em>that</em> article from <em>this</em> post if it wasn&#8217;t the case, would I? :-P), and shortly after reading that, I came across this hilarious video that sort of follows up on that:</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="640" height="385" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/hUiq__WrO6w&amp;hl=es_ES&amp;fs=1" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="640" height="385" src="http://www.youtube.com/v/hUiq__WrO6w&amp;hl=es_ES&amp;fs=1" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<p>I mean, the video even mentions <a href="http://www.opera.com/link/">Opera Link</a>, I <em>have</em> to like it :-P (although yeah, the claim is not correct, Chrome does have something similar). My favourite quotes are:</p>
<ul>
<li>&#8220;You promised innovation, but look at Opera!&#8221;</li>
<li>&#8220;Maybe Opera is hiring&#8221;</li>
</ul>
<p>And the second reminded me that yes, <a href="http://www.opera.com/company/jobs/opening/184/">we are hiring</a>!</p>
 <p><a href="http://hcoder.org/?flattrss_redirect&amp;id=395&amp;md5=6a49269351028b5ee76f400ff17e0ab5" 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/2010/07/05/faster-than-the-fastest/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<atom:link rel="payment" href="https://flattr.com/submit/auto?user_id=30124&amp;popout=1&amp;url=http%3A%2F%2Fhcoder.org%2F2010%2F07%2F05%2Ffaster-than-the-fastest%2F&amp;language=en_GB&amp;category=text&amp;title=Faster+than+the+fastest&amp;description=These+are+interesting+times+in+the+browser+world%3A+not+only+there+are+more+browsers+than+ever%2C+but+now+even+Internet+Explorer+is+starting+to+become+competitive+again%2C+so+in+a...&amp;tags=hitler%2Clink%2Cmeme%2Copera%2Copera+link%2Cvideo%2Cyoutube%2Cblog" type="text/html" />
	</item>
		<item>
		<title>Video editing woes</title>
		<link>http://hcoder.org/2010/06/19/video-editing-woes/</link>
		<comments>http://hcoder.org/2010/06/19/video-editing-woes/#comments</comments>
		<pubDate>Sat, 19 Jun 2010 21:07:33 +0000</pubDate>
		<dc:creator>emanchado</dc:creator>
				<category><![CDATA[Computers]]></category>
		<category><![CDATA[Work]]></category>

		<guid isPermaLink="false">http://hcoder.org/?p=374</guid>
		<description><![CDATA[Google Test Automation Conference. In India. Sounds great, doesn&#8217;t it? That&#8217;s what I thought too, so I applied. For that, though, I had to shoot not only one, but two videos: one explaining the full-length talk I wanted to present, and a video of a lightning talk. As both of them were related to talks, [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.gtac.biz/">Google Test Automation Conference</a>. In India. Sounds great, doesn&#8217;t it? That&#8217;s what I thought too, so I applied. For that, though, I had to shoot not only one, but two videos: one explaining the full-length talk I wanted to present, and a video of a lightning talk. As both of them were related to talks, I figured they&#8217;d be much better off having the slides on the video when they were referenced. That way the videos would be easier to follow and wouldn&#8217;t be just a boring static shot.</p>
<p>But that meant I had to edit video. Which I had never done before. And I figured it wouldn&#8217;t be trivial if I only wanted to use Free Software tools under Linux. I was partly wrong, because after looking around a bit I found <a href="http://www.openshotvideo.com/">OpenShot</a>, which I found pleasant enough to use (at least for my very basic, very limited needs). <em>However</em>, the final footage I used made OpenShot export <em>corrupted</em> videos. I know it was something specific to that source video (a MOV format, H.264 codec, EPICly HD resolution (1920&#215;1080) video) because I had tried to do exactly the same things with earlier, lower-resolution, MPEG-format takes, and it had worked like a charm.</p>
<p>In any case, I was sort of fucked because I couldn&#8217;t get the final edited video out, so I had to resize it and change the format somehow. I won&#8217;t list here everything I tried (that includes trying to download and use <em>several</em> programs on Windows, as well as using mencoder on Linux), but after a very long and frustrating process, only ffmpeg did the trick for me. My first attempt with ffmpeg did export the video, but with <em>awful</em> quality. After looking around a bit, I found what worked for me:</p>
<blockquote><p>ffmpeg -i original.mov -s hd720 -b 3200k resized.mpeg</p></blockquote>
<p>The trick to get a decent result was forcing the bitrate (&#8220;-b&#8221; option), which will hopefully help someone in need. Meanwhile, I&#8217;m going to stop typing so I can go back to crossing my fingers to get picked for GTAC ;-)</p>
 <p><a href="http://hcoder.org/?flattrss_redirect&amp;id=374&amp;md5=09789a85d842df6e1e00d2cee27e1634" 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/2010/06/19/video-editing-woes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<atom:link rel="payment" href="https://flattr.com/submit/auto?user_id=30124&amp;popout=1&amp;url=http%3A%2F%2Fhcoder.org%2F2010%2F06%2F19%2Fvideo-editing-woes%2F&amp;language=en_GB&amp;category=text&amp;title=Video+editing+woes&amp;description=Google+Test+Automation+Conference.+In+India.+Sounds+great%2C+doesn%26%238217%3Bt+it%3F+That%26%238217%3Bs+what+I+thought+too%2C+so+I+applied.+For+that%2C+though%2C+I+had+to+shoot+not+only+one%2C+but+two...&amp;tags=blog" type="text/html" />
	</item>
	</channel>
</rss>

