<?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</title>
	<atom:link href="http://hcoder.org/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>Humans as consumers</title>
		<link>http://hcoder.org/2012/02/04/humans-as-consumers/</link>
		<comments>http://hcoder.org/2012/02/04/humans-as-consumers/#comments</comments>
		<pubDate>Sat, 04 Feb 2012 11:06:44 +0000</pubDate>
		<dc:creator>emanchado</dc:creator>
				<category><![CDATA[Freedom]]></category>
		<category><![CDATA[Other]]></category>
		<category><![CDATA[consumerism]]></category>
		<category><![CDATA[culture]]></category>
		<category><![CDATA[philosophy]]></category>
		<category><![CDATA[society]]></category>

		<guid isPermaLink="false">http://hcoder.org/?p=1253</guid>
		<description><![CDATA[This is something I&#8217;ve been thinking about for months, but took me a while to give it a shape in my mind and put it into words. I&#8217;m not done exploring these ideas, I might write about them again. It all started with a couple of conversations I have had with different people, about different [...]]]></description>
			<content:encoded><![CDATA[<p><em>This is something I&#8217;ve been thinking about for months, but took me a while to give it a shape in my mind and put it into words. I&#8217;m not done exploring these ideas, I might write about them again.</em></p>
<p>It all started with a couple of conversations I have had with different people, about different topics. The common denominator was me not doing/buying certain stuff for &#8220;non-consumer reasons&#8221;. Some examples (feel free to skip):</p>
<ul>
<li>Apple. I don&#8217;t buy anything from Apple. The most important reason is that I don&#8217;t believe in a closed software ecosystem controlled by a single company (even if I know it has advantages in the short term). There are other reasons, like them trying to fight the right to jailbreak or them supporting SOPA.</li>
<li>Sony/PlayStation. Although I do own a PlayStation 2, many things that have happened since then made me decide not to buy a PlayStation 3 (yes, there are many PS3 games, some of them exclusive, that make me drool and I&#8217;d love to play them). Partly closed systems, partly Sony fighting users&#8217; rights on court and chasing homebrew developers, partly the draconian terms of the PSN.</li>
<li>Being vegetarian/vegan. I&#8217;m actually <em>not</em> a vegetarian (but I&#8217;m somewhat close; long story), but I understand and support vegetarianism and veganism. I was pretty surprised that one concrete person I talked to about this hadn&#8217;t even thought of it as a form of belief or activism (the person thought vegetarians were, more or less, people who &#8220;don&#8217;t like meat&#8221;).</li>
</ul>
<p>Note that I don&#8217;t claim to be right about these beliefs or about the best/most practical way to support them, but that&#8217;s <em>completely</em> besides the point I&#8217;m trying to make, namely that many people seem pretty surprised by those decisions, as if anything that doesn&#8217;t maximise your short-term &#8220;joy&#8221; or minimise the money spent was <em>irrelevant</em> when spending money. As if it was unthinkable not to be a <a href="http://en.wikipedia.org/wiki/Homo_economicus">Homo economicus</a>. I mean, money has essentially <em>zero</em> influence on your happiness once you have enough to live comfortably. Thus, I fail to see how money should be a deciding factor for close to <em>nothing at all</em> (again, assuming you already have enough to live without <em>worrying</em> about money).</p>
<p>I think of myself, first and foremost, as a human being (with values, morals, empathy, etc), not as a consumer or a money-spender. For me it follows that mainly caring about money and &#8220;consumer values&#8221; is wrong, because that <em>consumer</em> identity I have can never override most of my other identities. Even feeling the need to <em>write</em> about this and <em>explain</em> it is pretty awkward. It seems to be a suspicious position to be in, as if you had to explain that not making &#8220;consumer values&#8221; the centre of your life doesn&#8217;t make you a crazy extremist. Part of this awkwardness is somewhat confirmed by a comment I have heard several times, something along the lines of &#8220;it&#8217;s your loss&#8221;, as if eg. having a PlayStation (as opposed to other consoles, or devoting your time to reading more books or jogging or playing board games or whatever) had to be more important than anything else I might care about.</p>
<p>But this is not just a philosophical question, there are two practical points in all this. The first is that how and where you spend your money matters and lot. Let&#8217;s say there&#8217;s two companies providing the same product. Company A offers it cheaper and uses illegal, poorly paid workers, while company B is more expensive but its workers have normal working conditions (this is of course a simplification for the sake of the argument). When you give your money to company A, you <em>are</em> saying that using illegal workforce with a shitty pay <em>is ok as long as</em> they give you a better price. You <em>are</em> saying than you, deep inside, care more about saving a couple of bucks than about having normal working conditions. Those decisions, <em>our</em> decisions, are what make companies behave in this or that way.</p>
<p>The second practical point is that if one makes all decisions based only on &#8220;consumer values&#8221;, you are defining your path of least resistance. And it&#8217;s big companies and lobby groups that have all the money and resources to make that path of least resistance something that makes <em>you</em> do whatever is in <em>their</em> interest (and possibly <em>against yours</em>, in the long term). And I know it&#8217;s human nature to save energy, be lazy, not think too much about every single thing we do, etc. I do that myself all the time. What kills me is not that people don&#8217;t resist, is that people don&#8217;t seem to see it as a limitation in themselves, but as a weirdness in anyone that tries to.</p>
 <p><a href="http://hcoder.org/?flattrss_redirect&amp;id=1253&amp;md5=86ecf7f6554ca872cba80e92baac6310" 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/04/humans-as-consumers/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<atom:link rel="payment" href="http://hcoder.org/?flattrss_redirect&amp;id=1253&amp;md5=86ecf7f6554ca872cba80e92baac6310" type="text/html" />
	</item>
		<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>Book summary and review: Bodies</title>
		<link>http://hcoder.org/2011/12/07/book-summary-and-review-bodies/</link>
		<comments>http://hcoder.org/2011/12/07/book-summary-and-review-bodies/#comments</comments>
		<pubDate>Wed, 07 Dec 2011 20:11:39 +0000</pubDate>
		<dc:creator>emanchado</dc:creator>
				<category><![CDATA[Book summaries]]></category>
		<category><![CDATA[Reviews]]></category>
		<category><![CDATA[books]]></category>
		<category><![CDATA[culture]]></category>
		<category><![CDATA[psychology]]></category>

		<guid isPermaLink="false">http://hcoder.org/?p=1241</guid>
		<description><![CDATA[This is my summary of &#8220;Bodies&#8221;, by Susie Orbach. It&#8217;s a book about the relationship to our body and how it affects us and our life. As this book is sort of similar to &#8220;Who are we&#8221; in the sense that there are several general points being made and most of the book are stories [...]]]></description>
			<content:encoded><![CDATA[<p>This is my summary of &#8220;Bodies&#8221;, by <a href="http://en.wikipedia.org/wiki/Susie_Orbach">Susie Orbach</a>. It&#8217;s a book about the relationship to our body and how it affects us and our life. As this book is sort of similar to &#8220;<a href="http://hcoder.org/2011/08/25/book-summary-who-are-we-—-and-should-it-matter-in-the-21st-century/">Who are we</a>&#8221; in the sense that there are several general points being made and most of the book are stories supporting or explaining those points, I&#8217;m not writing my notes about each chapter separately but doing a more &#8220;proper&#8221; summary. I&#8217;ve also written a mini-review below.</p>
<h2>Summary</h2>
<p>There has never been a &#8220;natural&#8221; body: bodies have always been the expression of a specific period, geography, sexual, religious and cultural place. However, today only a few aspirational and idealised body types are taking the place of all possible bodies. We&#8217;re losing body variety as fast as we&#8217;re losing languages. Again like with languages, there&#8217;s a critical period for &#8220;body acquisition&#8221;. We can feel alienated of our own body (for the rest of our lives) if we don&#8217;t learn to feel comfortable with it in that critical period.</p>
<p>The individual is now deemed accountable for his/her body and judged by it, turning &#8220;looking after oneself&#8221; into a moral value. A search for contentment around the body is a hallmark of our times, and a belief in both the perfectible body and the notion that we should accede to improve it has contributed to a progressively unstable body.</p>
<p>The body is becoming akin to a worthy personal object. Body transformation is today less of a social ritual, and more wanting to produce an acceptable body (wounded soldiers vs. TV contestants on p. 84-85). We seem to believe that almost anything about the body can be changed by the individual, turning plastic surgery into a consumer item: a treat, like a holiday. Sexuality has to be conjured and performed, it doesn&#8217;t exist or flow naturally.</p>
<p>The new grammar of visual culture, which is not even real (Photoshop), produces that even children photos are &#8220;enhanced&#8221;, generating frustration and even making people lose accurate records of their visual history (very interesting notes on p. 87-90). We fall into the trap of us &#8220;enjoying fashion and beauty&#8221;, believing we&#8217;re agents instead of victims, but we aren&#8217;t being creative with our bodies or having fun with them: we feel at fault for not matching up to the current, impossible to reach imagery. We take for granted that looking good for ourselves is going to make us feel good, find faults in our bodies and say that it makes us feel better, more in control, to improve them.</p>
<h2>Review</h2>
<p>I generally liked the book, but sometimes I thought it was a bit too long. Many of the important points are already made in the introduction, and the rest of the chapters are more stories and references supporting the initial points. Worse yet, I sometimes found those arguments or stories not completely believable or convincing (eg. using controversial material like some <a href="http://en.wikipedia.org/wiki/Harry_Harlow">Harry Harlow</a> experiments or <a href="http://en.wikipedia.org/wiki/Victor_of_Aveyron">Victor of Aveyron</a>&#8216;s story to support her points). In other cases, some relatively bold claims were not backed up by references, which made me feel could be not representative or poorly-researched or, at least, made them weaker because of a lack of context.</p>
<p>However, the book <em>is</em> well written and made me reconsider several things, which is what books like this should do. Recommended if you&#8217;re interested in psychology or if you find it intriguing to learn about our relationship to our physical bodies. Although I skipped them in the summary, some of the stories (like the man who didn&#8217;t want to have legs) are pretty mind-blowing and interesting in themselves.</p>
 <p><a href="http://hcoder.org/?flattrss_redirect&amp;id=1241&amp;md5=d6eff067190f8426020a596d514d7aa1" 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/12/07/book-summary-and-review-bodies/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<atom:link rel="payment" href="http://hcoder.org/?flattrss_redirect&amp;id=1241&amp;md5=d6eff067190f8426020a596d514d7aa1" 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>Book summary: Envisioning information</title>
		<link>http://hcoder.org/2011/11/10/book-summary-envisioning-information/</link>
		<comments>http://hcoder.org/2011/11/10/book-summary-envisioning-information/#comments</comments>
		<pubDate>Thu, 10 Nov 2011 00:43:01 +0000</pubDate>
		<dc:creator>emanchado</dc:creator>
				<category><![CDATA[Book summaries]]></category>
		<category><![CDATA[Reviews]]></category>
		<category><![CDATA[books]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[information]]></category>
		<category><![CDATA[tufte]]></category>

		<guid isPermaLink="false">http://hcoder.org/?p=1216</guid>
		<description><![CDATA[These are my notes about &#8220;Envisioning information&#8221; by Edward R. Tufte. It&#8217;s not a normal summary because most of the content needs the graphics, plots and figures being discussed. The following notes cover the whole book (six chapters). EDIT: Manuela wrote another, easier to read summary. Escaping flatland The methods in this book work to [...]]]></description>
			<content:encoded><![CDATA[<p>These are my notes about &#8220;Envisioning information&#8221; by <a href="http://en.wikipedia.org/wiki/Edward_Tufte">Edward R. Tufte</a>. It&#8217;s not a normal summary because most of the content needs the graphics, plots and figures being discussed. The following notes cover the whole book (six chapters).</p>
<p><strong>EDIT:</strong> Manuela wrote <a href="http://manooh.com/blog/2011/11/dilated-dimensionality/">another, easier to read summary</a>.</p>
<h2>Escaping flatland</h2>
<p>The methods in this book work to increase the number of dimensions that can be represented on plane surfaces and the data density. Nearly every escape from flatland demands an extensive compromise, trading off one virtue against another. Even our language often lacks capacity to communicate a sense of dimensional complexity. Some design strategies are found again and again (examples of over 380 years of sunspot data analysis). These design strategies are surprisingly widespread, albeit little appreciated, and occur independently of the content of the data.</p>
<p>Massive Java railroad line example on p. 24-25. The train diagonals cleverly multiple-function, recording six variables at once (p. 26). Example of criminal activity for a trial on p. 30-31. The chart invites reading both horizontally and vertically. The eyes detect curious patterns, which make these displays persuasive and memorable. Visual displays of information encourage a diversity of individual viewer styles and rates of editing, personalising, reasoning and understanding. Unlike speech, visual displays are simultaneously a wideband and a perceiver-controllable channel.</p>
<p>We envision information to reason about, communicate, document and preserve that knowledge. Chartjunk on p.34: data-thin, uncontextual graphs. Its promoters imagine numbers to be dull and tedious, requiring ornament. If numbers are boring, you got the wrong numbers. The audience might be busy or eager to get on with it, but not stupid. Chartjunk looks more like a poster, meant to be looked at from a distance (thin data density).</p>
<h2>Micro/macro readings</h2>
<p>Detail cumulates in coherent structures. Simplicity of reading derives from the context of detailed and complex information, properly arranged. <em>To clarify, add detail</em>. Stem-and-leaf plots of statistical analysis also rely on micro/macro design (examples on p. 46-47).</p>
<p>We thrive in information-thick worlds because of our marvellous and everyday capacities to select, edit, single out, structure, highlight, group, &#8230; Visual displays rich with data are not only an appropriate and proper complement to human capabilities, but also such designs are frequently optimal. If the visual task is contrast, comparison and choice, then the more relevant information within eyespan, the better. Low-density requires visual memory, a weak skill. High density also allows viewers to select, narrate, recast and personalise data for their own uses.</p>
<p>What about information overload? The question misses the point. Clutter and confusion are failures of design, not attributes of information. Interesting quote on typography on p. 51. The deepest reason for displays that portray complexity and intricacy is that the worlds we seek to understand are complex and intricate.</p>
<h2>Layering and separation</h2>
<p>This technique is one the most powerful devices for reducing noise and enriching the content of displays. The various elements interact, creating non-information patterns and texture simply through their combined presence (<em>1 + 1 = 3 or more</em>). Colour effortlessly differentiates between annotation and annotated (example on p. 54). What matters is the proper relationship among information layers (example of old + improved design on p. 54-55). For tables, try to do without rules altogether, only use when absolutely necessary. Example of map (good and bad) on p. 58. Example of (non-)dull background on p. 59. Notes on how 1 + 1 = 3 can also be applied to noise on p. 61-62. Example of use of colours (another bad + good design) on p. 63.</p>
<p>Information consists of differences that make a difference. A fruitful method for the enforcement of such differences is using layering and separation.</p>
<h2>Small multiples</h2>
<p>Quantitative reasoning is based on &#8220;compared to what?&#8221;. Small multiples answer by visually enforcing comparisons of changes, of the differences among objects, and the scope of alternatives. Information slices are positioned <em>within the eyespan</em>, so that viewers make comparisons at a glance. Example of drawing a Kana character on p. 69. Simultaneous two-dimensional indexing of the multiplied image, flatland within flatland, significantly deepens displays with little added complication in reading.</p>
<h2>Colour and information</h2>
<p>Example of Swiss mountain map on p. 80. Fundamental uses of colour in information design: label (colour as noun), measure (as quantity), represent or imitate reality (representation), enliven or decorate (beauty). Principles to minimise colour damage: (1) pure, bright colours have loud, unbearable effects when they stand unrelieved over large areas adjacent to each other, but can work very well when used sparingly on or between dull background tones; (2) placing of light, bright colours mixed with white next to each other usually produces unpleasant results, esp. if the colours are used for large areas; (3) large area background or base-colours should do their work most quietly, allowing the smaller, bright areas to stand out most vividly (strongly muted colours, mixed with grey, provide the best background for the coloured theme).</p>
<p>What palette of colours should we choose to represent and illuminate information? Use colours in nature (familiar and coherent, possessing a widely accepted harmony to the human eye), esp. those on the lighter side such as blues, yellows, and greys of sky and shadow. Great examples on p. 90.</p>
<p>In the ocean map, quantities are shown by a value scale, progressing from light to dark blue. Colour rainbows confuse viewers to mumbling colour names and the numbers they represent (&#8220;To see is to forget the name of the thing one sees&#8221;). Colours are sensitive to context. In the ocean map, contours (which are very helpful) are labelled with depth measurements. Edge lines allow very fine value distinctions, increasing scale precision. Example of bad map/good colour on maps on p. 94-95.</p>
<h2>Narratives of space and time</h2>
<p>Example of bad/good train schedule on p. 104-105. Space-time grids have a natural universality, with nearly boundless subtleties and extensions. Great, assorted examples on p. 110-111. Example of &#8220;tale of two cities&#8221; on p. 112-113.</p>
<h2>Final notes</h2>
<p>I&#8217;m aware that this summary is not very useful if you can&#8217;t see the different diagrams being examined, but it&#8217;s partly for myself :-) Anyway, if you like the ideas in the book, go buy it, it&#8217;s a great book in a big format, with really nice paper and full of very interesting examples of both good and bad information design.</p>
 <p><a href="http://hcoder.org/?flattrss_redirect&amp;id=1216&amp;md5=e244f8d171405b58ce5189552027f3c9" 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/10/book-summary-envisioning-information/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<atom:link rel="payment" href="http://hcoder.org/?flattrss_redirect&amp;id=1216&amp;md5=e244f8d171405b58ce5189552027f3c9" 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 summary: Pragmatic Thinking &amp; Learning (III)</title>
		<link>http://hcoder.org/2011/10/12/book-summary-pragmatic-thinking-learning-iii/</link>
		<comments>http://hcoder.org/2011/10/12/book-summary-pragmatic-thinking-learning-iii/#comments</comments>
		<pubDate>Wed, 12 Oct 2011 23:38:09 +0000</pubDate>
		<dc:creator>emanchado</dc:creator>
				<category><![CDATA[Book summaries]]></category>
		<category><![CDATA[books]]></category>
		<category><![CDATA[brain]]></category>
		<category><![CDATA[developer]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[software]]></category>

		<guid isPermaLink="false">http://hcoder.org/?p=1192</guid>
		<description><![CDATA[This is the third and last part of my summary of Pragmatic Thinking &#38; Learning, by Andy Hunt. See parts one and two on this same blog. This part will cover chapters &#8220;Gain experience&#8221;, &#8220;Manage Focus&#8221; and &#8220;Beyond Expertise&#8221;. Gain experience Your brain is made to learn by exploring and building mental models on your [...]]]></description>
			<content:encoded><![CDATA[<p>This is the third and last part of my summary of Pragmatic Thinking &amp; Learning, by Andy Hunt. See parts <a href="http://hcoder.org/2011/10/10/book-summary-pragmatic-thinking-learning/">one </a>and <a href="http://hcoder.org/2011/10/11/book-summary-pragmatic-thinking-learning-ii/">two</a> on this same blog. This part will cover chapters &#8220;Gain experience&#8221;, &#8220;Manage Focus&#8221; and &#8220;Beyond Expertise&#8221;.</p>
<h2>Gain experience</h2>
<p>Your brain is made to learn by exploring and building mental models on your own, not by receiving information passively (see amazing footage of tennis teacher in Alan Kay&#8217;s <a href="http://video.google.com/videoplay?docid=-533537336174204822">Doing with Images Makes Symbols</a>, starting on 55:30). In real life there&#8217;s no curriculum, you&#8217;ll make mistakes and it will get messy: the kind of feedback you need. We learn by &#8220;playing&#8221;, but that doesn&#8217;t mean easy or non-business-like. <a href="http://en.wikipedia.org/wiki/Seymour_Papert">Papert</a> students called it &#8220;fun&#8221; <em>because</em> it was hard, not <em>in spite of</em>.</p>
<p>Leveraging existing knowledge helps learning new skills: we can often find similarities, literal or metaphorical, with existing skills. However, careful not to <em>stick</em> with the similarity. Fully embrace the new skill&#8217;s unique characteristics.</p>
<p>Failures are valuable because they can lead to study and understand what went wrong and how to fix it. They are critical to success, but only when well-managed. A good environment for good failures needs freedom to experiment (few problems have a single solution; prototype more than one solution to a problem), ability to backtrack to a stable state, reproduce any work product as of any time (source control, and the ability to run those versions of the program), ability to demonstrate progress (get comparable feedback between versions). Version control, unit testing and automation give this environment. A supporting environment can make or break learning for anyone.</p>
<p>Tip: to raise awareness when some code fails without apparent reason, try to imagine what the code should look like, then compare it to the real thing.</p>
<p>Time pressure actively shuts things down. Your vision narrows, and R-mode doesn&#8217;t get the chance to work at all.</p>
<h2>Manage Focus</h2>
<p>When not doing anything, the L-mode will produce incessant mental chatter, which interferes with R-mode processing. Meditation helps controlling the L-mode &#8220;monkey voice&#8221;.</p>
<p>When meditating you don&#8217;t want trance, falling asleep, or &#8220;contemplate the big mystery&#8221;, but to sink into a relaxed awareness of yourself and your environment without judgement or making responses. Meditation exercise suggestion: find a quiet spot; sit in a comfortable, alert position with a straight back (become aware of any tension and fix it); close you eyes and focus your awareness on your breath; be aware of the rhythm (don&#8217;t try to change it, just be aware); keep your mind focused on your breath (do not use words or start a conversation with yourself); when you start thinking about some topic or having a conversation with yourself, let the thoughts go and get the focus back on the breath. Even if you mind is wandering often, the exercise of bringing yourself back is useful.</p>
<p>You have to let your thoughts &#8220;marinate&#8221; to get the best results. Different people have different methods to marinate (sitting around doing nothing, humming, eating a crunchy snack, making paper dolls&#8230;). Thinking about at least three solutions to a problem gives you the confidence that you have thought &#8220;enough&#8221; about it. Then, you can let those ideas marinate and come up with the best solution.</p>
<p>Assorted tips:</p>
<ul>
<li>Develop your exocortex (mental memory or processing outside your physical brain: book collection, notes, favourite IDE, etc).</li>
<li>Deliberate switching to e-mail/IM. Close what you&#8217;re working on, take a deep breath, then switch.</li>
<li>Have a way to note things quickly when they come up, without losing the flow or what you were doing (wiki/scratchpad inside you IDE or whatever).</li>
<li>When stuck or bored, doodle on a piece of paper, or go for a walk (without talking to anyone). That helps against checking the internet or e-mail.</li>
<li>Don&#8217;t answer IM right away, put up a sign (&#8220;don&#8217;t disturb&#8221;) during a debugging session or similar, or close the door if you have one. When you do get interrupted, try to save your mental state before you lose it.</li>
<li>Get two monitors (same size and brand) to keep the whole context at sight. Organise virtual desktops by task (communications/distractions, writing, coding/checking documentation, surfing), not by kind of application (browsers, editors, terminals).</li>
</ul>
<p>In summary: learn to quiet your chattering L-mode, deliberately work with and add to thoughts in progress, and be aware of how expensive context switching can be.</p>
<h2>Beyond Expertise</h2>
<p>Change is harder than it looks, old habits don&#8217;t go away easily. Don&#8217;t be hard on yourself, just correct it and go back to the right path. Suggestions to make effective change:</p>
<ul>
<li><em>Start with a plan</em>. Keep track of what you have accomplished, it&#8217;s probably more than you think.</li>
<li><em>Inaction is the enemy, not error</em>. The danger is not doing things <em>wrong</em>, is not doing anything.</li>
<li><em>New habits take time</em>. Expect at least three weeks, maybe more.</li>
<li><em>Belief is real</em>. If you think you&#8217;ll fail, you will.</li>
<li><em>Take small, next steps</em>. Keep your big goal in mind, but don&#8217;t try to spell out all steps you need to get there.</li>
</ul>
<p>Possible first steps (complete list on p. 247-248, this is just two highlights): (1) pick two things that&#8217;ll help you maintain context and avoid interruption, do them right away; (2) open your mind to aesthetics and additional sensory information (your cubicle, desktop, code: how &#8220;pleasing&#8221; is it?).</p>
<p>You don&#8217;t want to become a &#8220;niche expert&#8221;: approach learning without preconceived notions, prior judgement or a fixed viewpoint; be aware of your own reaction to new technology and ideas; be aware of yourself and the context. The biggest reason any of us fail is the autopilot.</p>
<p>And this is the end. I hope you liked it.</p>
 <p><a href="http://hcoder.org/?flattrss_redirect&amp;id=1192&amp;md5=b4e15f8d8f4ecb83aed5a7e1f804de05" 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/12/book-summary-pragmatic-thinking-learning-iii/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<atom:link rel="payment" href="http://hcoder.org/?flattrss_redirect&amp;id=1192&amp;md5=b4e15f8d8f4ecb83aed5a7e1f804de05" type="text/html" />
	</item>
		<item>
		<title>Book summary: Pragmatic Thinking &amp; Learning (II)</title>
		<link>http://hcoder.org/2011/10/11/book-summary-pragmatic-thinking-learning-ii/</link>
		<comments>http://hcoder.org/2011/10/11/book-summary-pragmatic-thinking-learning-ii/#comments</comments>
		<pubDate>Tue, 11 Oct 2011 22:36:54 +0000</pubDate>
		<dc:creator>emanchado</dc:creator>
				<category><![CDATA[Book summaries]]></category>
		<category><![CDATA[books]]></category>
		<category><![CDATA[brain]]></category>
		<category><![CDATA[developer]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[software]]></category>

		<guid isPermaLink="false">http://hcoder.org/?p=1185</guid>
		<description><![CDATA[This is the second part of my summary of Andy Hunt&#8217;s &#8220;Pragmatic Thinking &#38; Learning&#8221;. See the first part on this blog. This part will cover chapters ”Get in Your Right Mind”, “Debug Your Mind” and &#8221;Learn Deliberately&#8221;. Get in Your Right Mind A good way to involve your brain more is to use more [...]]]></description>
			<content:encoded><![CDATA[<p>This is the second part of my summary of Andy Hunt&#8217;s &#8220;Pragmatic Thinking &amp; Learning&#8221;. See the <a href="http://hcoder.org/2011/10/10/book-summary-pragmatic-thinking-learning/">first part</a> on this blog. This part will cover chapters ”Get in Your Right Mind”, “Debug Your Mind” and &#8221;Learn Deliberately&#8221;.</p>
<h2>Get in Your Right Mind</h2>
<p>A good way to involve your brain more is to use more senses than usual. For tactile you can use building blocks like Lego, CRC cards, etc. Example of &#8220;role-playing&#8221; a software design on p. 77. The advantage of using the R-mode is not that it&#8217;s a panacea, it&#8217;s simply to use the other half of your brain <em>too</em> (reference to pair programming). Story of the climbing teacher on p. 81: the importance of feeling something first (R-mode) before learning it&#8217;s theory (L-mode), because it gives you the context to understand the theory and explanations better. Learning can be impeded by trying to memorise facts when you don&#8217;t grasp the whole yet. When creating, be comfortable with the absurd and impractical; when learning, get &#8220;used to it&#8221; before learning and memorising. Using metaphors can open up creativity because they communicate the R-mode and the L-mode (<a href="http://wordnet.princeton.edu/">wordnet</a> can help when creating metaphors).</p>
<p>Tip: the &#8220;morning pages&#8221; technique (p. 98). Write them first thing in the morning (before coffee, shower or anything else); write at least three pages by hand, without computer; do not censor what you write; do not skip a day. Blogging is also a good exercise (what you think about a topic, what you can defend publicly).</p>
<p>Tip: learn martial arts or yoga to improve concentration (p. 103). Tip: break small, daily routines (turn off the autopilot).</p>
<p>Forcing the brain to reconcile unlike patterns broadens the scope of material under consideration (see Zen koans and Greek oracles on p. 107). Reference to <a href="http://rtqe.net/ObliqueStrategies/">oblique strategies</a> (has electronic versions, including an <a href="https://market.android.com/details?id=org.multiply.strategies.oblique">Android version</a>!).</p>
<h2>Debug Your Mind</h2>
<p>We make decisions and solve problems based on faulty memory and our emotional state of the time, ignoring crucial facts, etc. <em>Some</em> cognitive biases: anchoring (ref: experiment with numbers and prices in predictably irrational), fundamental attribution error (other people behave based on their personality, we have excuses for our own behaviour; in reality, behaviour is often caused by the context), self-serving bias (&#8220;it&#8217;s my success&#8221;, but &#8220;it&#8217;s not my failure&#8221;; you&#8217;re always part of the system), need for closure (naturally uncomfortable with uncertainty; have to learn to live with it), confirmation bias, exposure effect (prefer familiar things), Hawthorne effect (people change when they&#8217;re being watched, but after a while they go back to how they were behaving), false memory (easy to confuse imagined events with real memories; every memory <em>read</em> is a <em>write</em> in light of the current context), symbolic reduction fallacy (L-mode is anxious to &#8220;symbol-away&#8221; complexity), nominal fallacy (thinking that labelling a thing means you understand it).</p>
<p>How to fight biases: understand that &#8220;rarely&#8221; doesn&#8217;t mean &#8220;never&#8221;, defer closure (you know the most about a project at the <em>end</em> of it, so don&#8217;t take decisions too early, be comfortable with uncertainty), remember that you don&#8217;t remember well. People are mainly a product of their environment and of the times. Explanation of different American generations on p. 125-131. In summary, generational archetypes are prophet (vision, values), nomad (liberty, survival, honor), hero (community, affluence) and artist (pluralism, expertise, due process). Realise where your thinking is coming from, what are your influences, and what kind of arguments you make. Try to have a diverse team so biases can catch/cancel each other. Myers Briggs Type Indicator discussion on p. 133-135. <em>Trust intuition, but verify</em>. If you think you have defined something, try to define the opposite.</p>
<h2>Learn Deliberately</h2>
<p>A single intense, out-of-context classroom event can only get you started in the right direction. You need continued goals, feedback to understand your progress and approach it far more deliberately than a once-a-year course.</p>
<p>For any goal (desired state, usually short-term) you have in mind you need a plan, a series of objectives (steps towards that goal). Objectives should be Specific (&#8220;learn Erlang&#8221; vs. &#8220;be able to write a web server in Erlang that dynamically generates content&#8221;), Measurable (how do you know when you&#8217;re done? related to &#8220;specific&#8221;. You don&#8217;t have to see where you&#8217;re going, just a couple of meters ahead of you), Achievable (from the current state!), Relevant (does it matter to you? is it under your control?) and Time-boxed (perhaps the most important: the deadline).</p>
<p>Create Pragmatic Investment Plans (PIP) to learn whatever you want to learn. Major point involving managing the plan:</p>
<ul>
<li><em>Have a concrete plan</em>: devise different levels of goals (now, next year, next five years).</li>
<li><em>Diversify</em>: make an effort to choose different methodologies, languages, industries, and non-technical stuff.</li>
<li><em>Active investment</em>: need to be able to evaluate your plan and realistically judge how&#8217;s going. Adapt/change the plan based on that.</li>
<li><em>Invest regularly</em>: you need to make a commitment to invest a minimum of time on a regular basis. Create a ritual, if needed.</li>
</ul>
<p>Other techniques, like mind maps, talk to the duck and learning by teaching are mentioned in this chapter, but I&#8217;m skipping them in the summary.</p>
<p>And this is the end of the second part of my summary. The next one will cover the rest of the book, namely chapters &#8220;Gain experience&#8221;, &#8220;Manage Focus&#8221; and &#8220;Beyond Expertise&#8221;.</p>
<p><strong>EDIT:</strong> read the <a href="http://hcoder.org/2011/10/12/book-summary-pragmatic-thinking-learning-iii/">third part</a> of this summary.</p>
 <p><a href="http://hcoder.org/?flattrss_redirect&amp;id=1185&amp;md5=9b20e4e00e84d6f8f36b52c24ff94e1e" 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/11/book-summary-pragmatic-thinking-learning-ii/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<atom:link rel="payment" href="http://hcoder.org/?flattrss_redirect&amp;id=1185&amp;md5=9b20e4e00e84d6f8f36b52c24ff94e1e" type="text/html" />
	</item>
		<item>
		<title>Book summary: Pragmatic Thinking &amp; Learning</title>
		<link>http://hcoder.org/2011/10/10/book-summary-pragmatic-thinking-learning/</link>
		<comments>http://hcoder.org/2011/10/10/book-summary-pragmatic-thinking-learning/#comments</comments>
		<pubDate>Mon, 10 Oct 2011 22:44:48 +0000</pubDate>
		<dc:creator>emanchado</dc:creator>
				<category><![CDATA[Book summaries]]></category>
		<category><![CDATA[books]]></category>
		<category><![CDATA[brain]]></category>
		<category><![CDATA[developer]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[software]]></category>

		<guid isPermaLink="false">http://hcoder.org/?p=1177</guid>
		<description><![CDATA[This is the first part of my summary of &#8220;Pragmatic Thinking &#38; Learning&#8220;, by Andy Hunt. It&#8217;s a book about how the brain works and how to take more advantage of it. It explores many interesting topics, like learning, focusing, the brain modes of operation, etc. Do note that I&#8217;ll skip many techniques/lessons in the [...]]]></description>
			<content:encoded><![CDATA[<p>This is the first part of my summary of &#8220;<a href="http://pragprog.com/book/ahptl/pragmatic-thinking-and-learning">Pragmatic Thinking &amp; Learning</a>&#8220;, by Andy Hunt. It&#8217;s a book about how the brain works and how to take more advantage of it. It explores many interesting topics, like learning, focusing, the brain modes of operation, etc. Do note that I&#8217;ll skip many techniques/lessons in the summary, sometimes because they were less interesting for me (as in, I didn&#8217;t think they would work for me), sometimes because I already practise them. This first part will cover the introduction (<a href="http://media.pragprog.com/titles/ahptl/intro.pdf">in PDF</a>), and chapters &#8221;Journey from Novice to Expert&#8221; (<a href="http://media.pragprog.com/titles/ahptl/chap2.pdf">in PDF</a>) and &#8220;This is Your Brain&#8221;.</p>
<h2>Introduction</h2>
<p>Despite advances in programming languages, techniques, methodologies, &#8230;, the defect density has remained fairly constant. Maybe we&#8217;re focusing on the wrong things: software is created in your head.</p>
<p>You don&#8217;t get <em>taught</em>, you have to <em>learn</em>. Everything is connected, there&#8217;s nothing in isolation, so sometimes small things can have unexpectedly larger effects.</p>
<h2>Journey from Novice to Expert</h2>
<p>The novice needs clear, context-free rules to operate, but an expert is ineffective when constrained by those same rules. Experts don&#8217;t just &#8220;know more&#8221; than novices, they experience fundamental differences in how they perceive the world, approach problem solving, etc. The stages of learning in the Dreyfus model are:</p>
<ul>
<li><em>Novices</em>. Have little or no previous experience in this skill area (&#8220;experience&#8221; results in a change of thinking; doing the same for years doesn&#8217;t count!). They don&#8217;t particularly want to learn, want to accomplish an immediate goal, don&#8217;t know how to respond to mistakes and are fairly vulnerable to confusion when things go awry (example of doing taxes for years on p. 20).</li>
<li><em>Advanced Beginners</em>. Can start to break from the fixed rule set a little bit. Can try tasks on their own but have trouble troubleshooting. They want information fast (eg. API reference) and can start using advice in the correct context, but don&#8217;t have a holistic understanding and really don&#8217;t want it yet.</li>
<li><em>Competent</em>. Can develop mental models and work with them effectively, troubleshoot problems on their own, and begin to figure out how to solve novel problems, as well as seek and take advice from experts. They&#8217;re typically described as &#8220;having initiative&#8221; or &#8220;resourceful&#8221; and tend to be in a leadership role in the team (formal or not). They&#8217;re great to have on your team because they can mentor the novices while not annoying the experts.</li>
<li><em>Proficient</em>. Need the big picture, and thus will seek out and try to understand the larger conceptual framework around the skill. They&#8217;re frustrated by simplified information. This is the first level that can correct previous poor performance and revise their approach. They can also learn from the experience of others, which comes with the ability to understand and apply <em>maxims</em>.</li>
<li><em>Experts</em>. Primary sources of knowledge and information in any field, continually looking for better methods and better ways of doing things. Statistically, there aren&#8217;t many: probably around 1-5%. Experts work on intuition, not reason. They may be completely inarticulate as to how they arrived at a conclusion. They aren&#8217;t perfect though, and have the same cognitive biases as everyone else. They&#8217;re also likely to disagree with one another.</li>
</ul>
<p>Most people, for most skills, never get past the second stage. Plus, practitioners at a lower skill level have a marked tendency to overestimate their own abilities. Note that you want a mix of skills on a team. See &#8220;10 years to expertise&#8221; on p. 32. The dangers of overreliance on formal models (I&#8217;m skipping some in this list!):</p>
<ul>
<li><em>Confusing the model with reality</em>. It&#8217;s easy to confuse the two, but they aren&#8217;t the same.</li>
<li><em>Devaluing traits that cannot be formalised</em>. Good problem-solving skills are critical to our jobs, but problem solving is a very hard thing to formalise.</li>
<li><em>Legislating behaviour that contradicts individual autonomy</em>. You want thinking, responsible developers. Don&#8217;t reward herd behaviour.</li>
<li><em>Alienating experienced practitioners in favour of novices</em>. Targeting your methodology to novices, you create a poor working environment for the more experienced.</li>
<li><em>Oversimplification of complex situations</em>. Every project/situation is more complex than that.</li>
<li><em>Demand for excessive conformity</em>. What worked great in your last project might be a disaster in the next one.</li>
<li><em>Insensitivity to contextual nuances</em>. Formal methods are geared to the typical, not the particular. But when does the &#8220;typical&#8221; ever happen?</li>
<li><em>Mystification</em>. Speech becomes so sloganised that it becomes trivial and loses meaning (eg. &#8220;we&#8217;re a customer-focused organisation&#8221;).</li>
</ul>
<h2>This is your brain</h2>
<p>You have two &#8220;CPUs&#8221;: the linear, logical thought and language processing CPU (&#8220;L-mode&#8221;, for &#8220;linear&#8221;; the &#8220;left part of the brain&#8221;); and the searching and pattern matching CPU (The &#8220;R-mode&#8221;, for &#8220;rich&#8221;; the &#8220;right part of the brain&#8221;). They share the same bus so they can&#8217;t function at the same time.</p>
<p>R-mode can search &#8220;asynchronously&#8221; and come up with the response (possibly days) later. It doesn&#8217;t do any verbal processing, so the results are not verbal either (eg. trying to describe dreams). Also, it&#8217;s not under our direct concious control: as it can give answers anytime, we have to be ready to write down anything that comes up (related: <em>everyone</em> has good ideas, but far fewer <em>track</em> them; of those, even fewer bother to <em>act</em> on those ideas, and even fewer of those have the resources to make a good idea a success). It is very concrete, relating things as they are; it makes analogies and doesn&#8217;t require reason or known facts to process input. It&#8217;s holistic and wants to see the whole thing at once, perceiving overall patterns and structures. It&#8217;s intuitive, making leaps of insight, based on incomplete patterns, hunches, feelings or visual images. It&#8217;s very useful for software design.</p>
<p>Synthesis can be good for learning, see &#8220;<a href="http://web.media.mit.edu/~nicholas/Wired/WIRED2-07.html">Don&#8217;t Dissect the Frog, Build It</a>&#8221; on p. 62. Aesthetics also make a difference, see p. 66-67. The brain is wonderfully plastic. There&#8217;s no limit to the number of skills you can learn, <em>as long as you believe it</em> (ie. what you think about your brain capabilities physically affects the &#8220;wiring&#8221; of the brain itself).</p>
<p>And that&#8217;s all for now. The next part will cover chapters &#8221;Get in Your Right Mind&#8221; and &#8220;Debug Your Mind&#8221;.</p>
<p><strong>EDIT:</strong> read the <a href="http://hcoder.org/2011/10/11/book-summary-pragmatic-thinking-learning-ii/">second part</a> of this summary.</p>
 <p><a href="http://hcoder.org/?flattrss_redirect&amp;id=1177&amp;md5=3a009471028332e927f6e8dc7cd09c64" 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/10/book-summary-pragmatic-thinking-learning/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<atom:link rel="payment" href="http://hcoder.org/?flattrss_redirect&amp;id=1177&amp;md5=3a009471028332e927f6e8dc7cd09c64" type="text/html" />
	</item>
	</channel>
</rss>

