<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:posterous="http://posterous.com/help/rss/1.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:media="http://search.yahoo.com/mrss/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">
  <channel>
    <title>Tangible Colors</title>
    <link>http://www.tangiblecolors.com</link>
    <description>Programming with love, among other things.</description>
    <generator>posterous.com</generator>
    <link xmlns="http://www.w3.org/2005/Atom" type="application/json" href="http://posterous.com/api/sup_update#be09ce7b3" rel="http://api.friendfeed.com/2008/03#sup" />
    
    
    <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/tangiblecolors" /><feedburner:info uri="tangiblecolors" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://posterous.superfeedr.com/" /><item>
      <pubDate>Sat, 12 Feb 2011 09:18:09 -0800</pubDate>
      <title>D'oh</title>
      <link>http://feedproxy.google.com/~r/tangiblecolors/~3/m3TErd89mjY/doh</link>
      <guid isPermaLink="false">http://www.tangiblecolors.com/doh</guid>
      <description>&lt;p&gt;
	&lt;div class='p_embed p_image_embed'&gt;
&lt;img alt="Search_mac" height="347" src="http://getfile1.posterous.com/getfile/files.posterous.com/tangiblecolors/GEsoWFglklMiLAb5AxneKkjmkDotAmUmMlBr6SILjU3QGd9apqjI3LFqV35s/search_mac.png" width="435" /&gt;
&lt;/div&gt;
&lt;p&gt;Sometimes, you discover a feature you always thought it didn't exist, &lt;br /&gt;while it was just in front of you. In my case, searching in the &lt;br /&gt;current folder instead of the whole mac by default.&lt;/p&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.tangiblecolors.com/doh"&gt;Permalink&lt;/a&gt; 

&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/tangiblecolors/~4/m3TErd89mjY" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/876032/av3.png</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/ZyFMqKqeXpT</posterous:profileUrl>
        <posterous:firstName />
        <posterous:lastName />
        <posterous:nickName>Hashmal</posterous:nickName>
        <posterous:displayName>Hashmal</posterous:displayName>
      </posterous:author>
      <media:content type="image/png" height="347" width="435" url="http://getfile1.posterous.com/getfile/files.posterous.com/tangiblecolors/GEsoWFglklMiLAb5AxneKkjmkDotAmUmMlBr6SILjU3QGd9apqjI3LFqV35s/search_mac.png">
        <media:thumbnail height="347" width="435" url="http://getfile1.posterous.com/getfile/files.posterous.com/tangiblecolors/GEsoWFglklMiLAb5AxneKkjmkDotAmUmMlBr6SILjU3QGd9apqjI3LFqV35s/search_mac.png" />
      </media:content>
    <feedburner:origLink>http://www.tangiblecolors.com/doh</feedburner:origLink></item>
    <item>
      <pubDate>Thu, 10 Feb 2011 18:01:00 -0800</pubDate>
      <title>The Sorcerer's Apprentice</title>
      <link>http://feedproxy.google.com/~r/tangiblecolors/~3/ILSlZHQz57s/the-sorcerers-apprentice</link>
      <guid isPermaLink="false">http://www.tangiblecolors.com/the-sorcerers-apprentice</guid>
      <description>&lt;p&gt;
	&lt;p&gt;
&lt;p&gt;I'm currently working on a tiny, tiny programming language, Just for fun. There is no intention to use it in the real world, I just find the creation process very interesting (and pedagogic). Two principles:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Purely functional. This means you pass something to the program, and you get a result. That's all.&lt;/li&gt;
&lt;li&gt;Stack based, and&amp;nbsp;&lt;a href="http://en.wikipedia.org/wiki/Reverse_Polish_notation"&gt;RPN&lt;/a&gt;&amp;nbsp;syntax. Not very intuitive to use, but simple to parse.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Here's what it looks like:&lt;/p&gt;
&lt;div class='p_embed p_image_embed'&gt;
&lt;a href="http://getfile0.posterous.com/getfile/files.posterous.com/temp-2011-02-10/rocGrJFDorarqijrmhllgDEjfFiEGDACCkcgfbtqyGhJvjpjGiaiBFkjCxeH/maize_preview.png.scaled1000.png"&gt;&lt;img alt="Maize_preview" height="276" src="http://getfile7.posterous.com/getfile/files.posterous.com/temp-2011-02-10/rocGrJFDorarqijrmhllgDEjfFiEGDACCkcgfbtqyGhJvjpjGiaiBFkjCxeH/maize_preview.png.scaled500.png" width="500" /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;/p&gt;
&lt;p&gt;Did I say it's a tiny language not suited for real world use? Remember that.&lt;/p&gt;
&lt;p&gt;I called it &lt;em&gt;Maize&lt;/em&gt;, and I will write a post soon about this experience. Expect: Ruby,&amp;nbsp;&lt;a href="http://kschiess.github.com/parslet/"&gt;Parslet&lt;/a&gt;, sensationalist title about creating your own language, and fun.&lt;/p&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.tangiblecolors.com/the-sorcerers-apprentice"&gt;Permalink&lt;/a&gt; 

&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/tangiblecolors/~4/ILSlZHQz57s" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/876032/av3.png</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/ZyFMqKqeXpT</posterous:profileUrl>
        <posterous:firstName />
        <posterous:lastName />
        <posterous:nickName>Hashmal</posterous:nickName>
        <posterous:displayName>Hashmal</posterous:displayName>
      </posterous:author>
      <media:content type="image/png" height="391" width="709" url="http://getfile7.posterous.com/getfile/files.posterous.com/temp-2011-02-10/rocGrJFDorarqijrmhllgDEjfFiEGDACCkcgfbtqyGhJvjpjGiaiBFkjCxeH/maize_preview.png">
        <media:thumbnail height="276" width="500" url="http://getfile7.posterous.com/getfile/files.posterous.com/temp-2011-02-10/rocGrJFDorarqijrmhllgDEjfFiEGDACCkcgfbtqyGhJvjpjGiaiBFkjCxeH/maize_preview.png.scaled500.png" />
      </media:content>
    <feedburner:origLink>http://www.tangiblecolors.com/the-sorcerers-apprentice</feedburner:origLink></item>
    <item>
      <pubDate>Sun, 06 Feb 2011 08:14:00 -0800</pubDate>
      <title>Why do programmers write apps and then make them free?</title>
      <link>http://feedproxy.google.com/~r/tangiblecolors/~3/QBETlhr4vGM/why-do-programmers-write-apps-and-then-make-t</link>
      <guid isPermaLink="false">http://www.tangiblecolors.com/why-do-programmers-write-apps-and-then-make-t</guid>
      <description>&lt;p&gt;
	&lt;p&gt;&lt;a href="http://www.reddit.com/r/programming/comments/fg8gt/why_do_programmers_write_apps_and_then_make_them/"&gt;Question asked on
Redd&amp;hellip;&lt;/a&gt; eh, on &lt;a href="http://programmers.stackexchange.com/questions/3233/why-do-programmers-write-applications-and-then-make-them-free"&gt;StackExchange&lt;/a&gt;.
Some of the answers are obvious (&amp;ldquo;more lines on the résumé&amp;rdquo;), others
are surprising (despair, revenge). My personal take? &lt;strong&gt;Collaboration
is greater than competition&lt;/strong&gt;. If you are not convinced of this,
you&amp;rsquo;re not spending enough time on GitHub.&lt;/p&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.tangiblecolors.com/why-do-programmers-write-apps-and-then-make-t"&gt;Permalink&lt;/a&gt; 

&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/tangiblecolors/~4/QBETlhr4vGM" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/876032/av3.png</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/ZyFMqKqeXpT</posterous:profileUrl>
        <posterous:firstName />
        <posterous:lastName />
        <posterous:nickName>Hashmal</posterous:nickName>
        <posterous:displayName>Hashmal</posterous:displayName>
      </posterous:author>
    <feedburner:origLink>http://www.tangiblecolors.com/why-do-programmers-write-apps-and-then-make-t</feedburner:origLink></item>
    <item>
      <pubDate>Sun, 06 Feb 2011 07:57:00 -0800</pubDate>
      <title>Class Variables :(</title>
      <link>http://feedproxy.google.com/~r/tangiblecolors/~3/JjjzqeKu8aY/class-variables</link>
      <guid isPermaLink="false">http://www.tangiblecolors.com/class-variables</guid>
      <description>&lt;p&gt;
	&lt;p&gt;From &lt;a href="http://en.wikipedia.org/wiki/Class_variable"&gt;Wikipedia&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote class="posterous_medium_quote"&gt;&lt;p&gt;In object-oriented programming with classes, &lt;em&gt;a class variable is a variable defined in a class&lt;/em&gt; (i.e. a member variable) &lt;em&gt;of which a single copy exists&lt;/em&gt;, regardless of how many instances of the class exist.&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;Seems useful. But not everywhere. In fact, depending on the language
you&amp;rsquo;re using, &lt;a href="https://github.com/kevinrutherford/reek/wiki/Class-Variable"&gt;you even might want to avoid
them&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;As an example of bad use of class variables, I recently stumbled upon
a Java implementation of the
&lt;a href="http://en.wikipedia.org/wiki/Minimax"&gt;Minimax&lt;/a&gt; algorithm.&lt;/p&gt;

&lt;div class="CodeRay"&gt;
  &lt;div class="code"&gt;&lt;pre&gt;&lt;span class="comment"&gt;/** A Minimax instance represents a single AI entity. */&lt;/span&gt;
&lt;span class="directive"&gt;public&lt;/span&gt; &lt;span class="type"&gt;class&lt;/span&gt; &lt;span class="class"&gt;Minimax&lt;/span&gt; {

    &lt;span class="comment"&gt;/** Default depth used by the algorithm. */&lt;/span&gt;
    &lt;span class="directive"&gt;private&lt;/span&gt; &lt;span class="directive"&gt;final&lt;/span&gt; &lt;span class="directive"&gt;static&lt;/span&gt; &lt;span class="type"&gt;int&lt;/span&gt; MAXDEPTHDEFAULT = &lt;span class="integer"&gt;4&lt;/span&gt;;

    &lt;span class="comment"&gt;/**  Actual depth used by an instance of Minimax. */&lt;/span&gt;
    &lt;span class="directive"&gt;private&lt;/span&gt; &lt;span class="directive"&gt;static&lt;/span&gt; &lt;span class="type"&gt;int&lt;/span&gt; maxDepth = MAXDEPTHDEFAULT;

    &lt;span class="comment"&gt;// Constructor, a method executed when creating a new instance.&lt;/span&gt;
    &lt;span class="directive"&gt;public&lt;/span&gt; Minimax(&lt;span class="type"&gt;int&lt;/span&gt; depth) { &lt;span class="comment"&gt;// Other parameters are omitted for simplicity&lt;/span&gt;
        maxDepth = depth;
        &lt;span class="comment"&gt;// ...&lt;/span&gt;
    }
}&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;(Note: in Java, a variable marked as &amp;ldquo;static&amp;rdquo; is a class variable.)&lt;/p&gt;

&lt;p&gt;The depth is the number of turns the AI entity can see in advance. It
can be viewed as the toughness of an entity: the greater the depth,
the farther in the future the AI will be able to see, and the harder
it will be hard to beat.&lt;/p&gt;

&lt;p&gt;Nothing wrong with &lt;code&gt;MAXDEPTHDEFAULT&lt;/code&gt;, because it&amp;rsquo;s a constant (by the
way, the concept of &amp;ldquo;constant variables&amp;rdquo; is rather funny). But
&lt;code&gt;maxDepth&lt;/code&gt; will annoy us. Why? Because we won&amp;rsquo;t be able to create
multiple AI entities with different depths. If we want to watch two AI
entities playing against each other:&lt;/p&gt;

&lt;div class="CodeRay"&gt;
  &lt;div class="code"&gt;&lt;pre&gt;ai1 = new Minimax(4);
ai2 = new Minimax(6);&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;The two AI entities, &lt;code&gt;ai1&lt;/code&gt; and &lt;code&gt;ai2&lt;/code&gt;, will use a depth of 6. Yeah,
even &lt;code&gt;ai1&lt;/code&gt;. We can&amp;rsquo;t test if an AI with a high depth will effectively
beat an AI with a low one. We can find worse situations where this
kind of class variable is defined in an interface, impeding other
programmers' work.&lt;/p&gt;

&lt;p&gt;And the solution, in this case, is simple: just remove the &lt;code&gt;static&lt;/code&gt;
keyword from &lt;code&gt;maxDepth&lt;/code&gt;.&lt;/p&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.tangiblecolors.com/class-variables"&gt;Permalink&lt;/a&gt; 

&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/tangiblecolors/~4/JjjzqeKu8aY" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/876032/av3.png</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/ZyFMqKqeXpT</posterous:profileUrl>
        <posterous:firstName />
        <posterous:lastName />
        <posterous:nickName>Hashmal</posterous:nickName>
        <posterous:displayName>Hashmal</posterous:displayName>
      </posterous:author>
    <feedburner:origLink>http://www.tangiblecolors.com/class-variables</feedburner:origLink></item>
    <item>
      <pubDate>Fri, 04 Feb 2011 09:40:00 -0800</pubDate>
      <title>Chrome 9</title>
      <link>http://feedproxy.google.com/~r/tangiblecolors/~3/EoZ4NqBG2gA/chrome-9</link>
      <guid isPermaLink="false">http://www.tangiblecolors.com/chrome-9</guid>
      <description>&lt;p&gt;
	&lt;p&gt;&lt;a href="http://chrome.blogspot.com/2011/02/dash-of-speed-3d-and-apps.html"&gt;Chrome 9&lt;/a&gt; is out!&amp;nbsp;&lt;em&gt;WebGL&lt;/em&gt;&amp;nbsp;and&amp;nbsp;&lt;em&gt;Google Instant&lt;/em&gt;&amp;nbsp;are among the new features, but the inspector had a facelift too.&lt;p /&gt; Example with &lt;a href="http://google.com"&gt;google.com&lt;/a&gt;:&lt;/p&gt;
&lt;p&gt;&lt;div class='p_embed p_image_embed'&gt;
&lt;a href="http://getfile5.posterous.com/getfile/files.posterous.com/tangiblecolors/OpLk071M8dejoCXfL8odCh9u5s6MmC6O2We0SR7dZRwUyZNQePneI5sdYsc4/Screen_shot_2011-02-04_at_6.36.png"&gt;&lt;img alt="Screen_shot_2011-02-04_at_6" height="414" src="http://getfile6.posterous.com/getfile/files.posterous.com/tangiblecolors/UJiD1HhLWKMm1HRFCxMsONNAvT4xggJAk3gP0cS0enyKWFIKIovt0TQJ6q61/Screen_shot_2011-02-04_at_6.36.png.scaled.500.jpg" width="500" /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;/p&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.tangiblecolors.com/chrome-9"&gt;Permalink&lt;/a&gt; 

&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/tangiblecolors/~4/EoZ4NqBG2gA" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/876032/av3.png</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/ZyFMqKqeXpT</posterous:profileUrl>
        <posterous:firstName />
        <posterous:lastName />
        <posterous:nickName>Hashmal</posterous:nickName>
        <posterous:displayName>Hashmal</posterous:displayName>
      </posterous:author>
      <media:content type="image/png" height="663" width="800" url="http://getfile5.posterous.com/getfile/files.posterous.com/tangiblecolors/OpLk071M8dejoCXfL8odCh9u5s6MmC6O2We0SR7dZRwUyZNQePneI5sdYsc4/Screen_shot_2011-02-04_at_6.36.png">
        <media:thumbnail height="414" width="500" url="http://getfile6.posterous.com/getfile/files.posterous.com/tangiblecolors/UJiD1HhLWKMm1HRFCxMsONNAvT4xggJAk3gP0cS0enyKWFIKIovt0TQJ6q61/Screen_shot_2011-02-04_at_6.36.png.scaled.500.jpg" />
      </media:content>
    <feedburner:origLink>http://www.tangiblecolors.com/chrome-9</feedburner:origLink></item>
    <item>
      <pubDate>Wed, 02 Feb 2011 05:53:00 -0800</pubDate>
      <title>37signals' mobile web framework in CoffeeScript</title>
      <link>http://feedproxy.google.com/~r/tangiblecolors/~3/YLWq9Qn05G8/37signals-mobile-web-framework-in-coffeescrip</link>
      <guid isPermaLink="false">http://www.tangiblecolors.com/37signals-mobile-web-framework-in-coffeescrip</guid>
      <description>&lt;p&gt;
	&lt;p&gt;We knew that 37signals was working on a new &lt;a href="http://thinkvitamin.com/mobile/new-rails-like-framework-from-37signals-for-html5-mobile-apps/"&gt;CoffeeScript framework for mobile apps&lt;/a&gt;. Now we know more, from their blog: It&amp;rsquo;s called &lt;strong&gt;Cinco&lt;/strong&gt;, and &amp;ldquo;ties together &lt;a href="http://documentcloud.github.com/backbone/"&gt;Backbone.js&lt;/a&gt;, &lt;a href="http://zeptojs.com/"&gt;Zepto&lt;/a&gt;, the &lt;a href="https://github.com/sstephenson/eco"&gt;Eco templating language&lt;/a&gt;, and &lt;a href="https://github.com/sstephenson/stitch"&gt;Stitch&lt;/a&gt;.&amp;rdquo; They still plan to open-source it.&lt;/p&gt;

&lt;p&gt;I can&amp;rsquo;t wait anymore so I already started writing my own CoffeeScript framework which I&amp;rsquo;m going to use (at least) until they release Cinco.&lt;/p&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.tangiblecolors.com/37signals-mobile-web-framework-in-coffeescrip"&gt;Permalink&lt;/a&gt; 

&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/tangiblecolors/~4/YLWq9Qn05G8" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/876032/av3.png</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/ZyFMqKqeXpT</posterous:profileUrl>
        <posterous:firstName />
        <posterous:lastName />
        <posterous:nickName>Hashmal</posterous:nickName>
        <posterous:displayName>Hashmal</posterous:displayName>
      </posterous:author>
    <feedburner:origLink>http://www.tangiblecolors.com/37signals-mobile-web-framework-in-coffeescrip</feedburner:origLink></item>
    <item>
      <pubDate>Mon, 31 Jan 2011 12:44:11 -0800</pubDate>
      <title>Untitled</title>
      <link>http://feedproxy.google.com/~r/tangiblecolors/~3/GQjsGpT4Ef4/41561142</link>
      <guid isPermaLink="false">http://www.tangiblecolors.com/41561142</guid>
      <description>&lt;p&gt;
	&lt;div class='p_embed p_image_embed'&gt;
&lt;a href="http://getfile4.posterous.com/getfile/files.posterous.com/tangiblecolors/nY8qSSrxfKXZKmCUxW5EGnqEWpQ4n00pIbt5ztGNJKDamvyE7jTCU6GEDcdI/sheep_child_and_wolf.jpg"&gt;&lt;img alt="Sheep_child_and_wolf" height="332" src="http://getfile5.posterous.com/getfile/files.posterous.com/tangiblecolors/54aTsCxU2LTFkhhp2twKXccahCS9HHkNI4me9NF5woPuitv9v5wkx0IoI6fk/sheep_child_and_wolf.jpg.scaled.500.jpg" width="500" /&gt;&lt;/a&gt;
&lt;/div&gt;

	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.tangiblecolors.com/41561142"&gt;Permalink&lt;/a&gt; 

&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/tangiblecolors/~4/GQjsGpT4Ef4" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/876032/av3.png</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/ZyFMqKqeXpT</posterous:profileUrl>
        <posterous:firstName />
        <posterous:lastName />
        <posterous:nickName>Hashmal</posterous:nickName>
        <posterous:displayName>Hashmal</posterous:displayName>
      </posterous:author>
      <media:content type="image/jpeg" height="664" width="1000" url="http://getfile4.posterous.com/getfile/files.posterous.com/tangiblecolors/nY8qSSrxfKXZKmCUxW5EGnqEWpQ4n00pIbt5ztGNJKDamvyE7jTCU6GEDcdI/sheep_child_and_wolf.jpg">
        <media:thumbnail height="332" width="500" url="http://getfile5.posterous.com/getfile/files.posterous.com/tangiblecolors/54aTsCxU2LTFkhhp2twKXccahCS9HHkNI4me9NF5woPuitv9v5wkx0IoI6fk/sheep_child_and_wolf.jpg.scaled.500.jpg" />
      </media:content>
    <feedburner:origLink>http://www.tangiblecolors.com/41561142</feedburner:origLink></item>
    <item>
      <pubDate>Thu, 27 Jan 2011 01:48:00 -0800</pubDate>
      <title>First steps with CoffeeScript (and how to use it with Rails)</title>
      <link>http://feedproxy.google.com/~r/tangiblecolors/~3/RWJ7KFjo3CU/first-steps-with-coffeescript-and-how-to-use</link>
      <guid isPermaLink="false">http://www.tangiblecolors.com/first-steps-with-coffeescript-and-how-to-use</guid>
      <description>&lt;p&gt;
	&lt;p&gt;From the &lt;a href="http://jashkenas.github.com/coffee-script/"&gt;CoffeeScript homepage&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote class="posterous_medium_quote"&gt;&lt;p&gt;&lt;strong&gt;CoffeeScript is a little language that compiles into JavaScript.&lt;/strong&gt;
Underneath all of those embarrassing braces and semicolons, JavaScript has always had a gorgeous object model at its heart. CoffeeScript is an attempt to expose the good parts of JavaScript in a simple way.&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;Gorgeous syntax, and wise additions like &lt;em&gt;list comprehensions&lt;/em&gt;,
&lt;em&gt;classes&lt;/em&gt;, &lt;em&gt;inheritance&lt;/em&gt;, implicit &lt;code&gt;return&lt;/code&gt;, etc. Being just awful at
vanilla JavaScript, I was very interested in CoffeeScript. The version
1.0.0 of the language was recently released, so I decided to give it a
try, and it looks like I&amp;rsquo;m going to stick with it.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://jashkenas.github.com/coffee-script/"&gt;http://jashkenas.github.com/coffee-script/&lt;/a&gt; does an excellent job at
introducing CoffeeScript, so I won&amp;rsquo;t try to do better here. Instead,
I&amp;rsquo;m going to focus on:&lt;/p&gt;

&lt;h2&gt;CoffeeScript with Rails 3 (and Heroku)&lt;/h2&gt;

&lt;p&gt;The following configuration will:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;serve combined scripts (from .js and .coffee) dynamically&lt;/li&gt;
&lt;li&gt;avoid relying on fancy libraries (Heroku doesn&amp;rsquo;t have Node.js)&lt;/li&gt;
&lt;li&gt;allow you to just write CoffeeScript and never worry about
compilation, conversion or anything&lt;/li&gt;
&lt;li&gt;work on Heroku&lt;/li&gt;
&lt;/ul&gt;


&lt;h3&gt;1. Install dependencies&lt;/h3&gt;

&lt;p&gt;Add this to your &lt;code&gt;Gemfile&lt;/code&gt;:&lt;/p&gt;

&lt;div class="CodeRay"&gt;
  &lt;div class="code"&gt;&lt;pre&gt;gem &lt;span class="string"&gt;&lt;span class="delimiter"&gt;'&lt;/span&gt;&lt;span class="content"&gt;coffee-script-source&lt;/span&gt;&lt;span class="delimiter"&gt;'&lt;/span&gt;&lt;/span&gt;, &lt;span class="string"&gt;&lt;span class="delimiter"&gt;'&lt;/span&gt;&lt;span class="content"&gt;~&amp;gt; 1.0.0&lt;/span&gt;&lt;span class="delimiter"&gt;'&lt;/span&gt;&lt;/span&gt;
gem &lt;span class="string"&gt;&lt;span class="delimiter"&gt;'&lt;/span&gt;&lt;span class="content"&gt;coffee-script&lt;/span&gt;&lt;span class="delimiter"&gt;'&lt;/span&gt;&lt;/span&gt;
gem &lt;span class="string"&gt;&lt;span class="delimiter"&gt;'&lt;/span&gt;&lt;span class="content"&gt;therubyracer&lt;/span&gt;&lt;span class="delimiter"&gt;'&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;&lt;a href="http://rubygems.org/gems/coffee-script"&gt;coffee-script&lt;/a&gt; will enable
you to compile scripts using Ruby, and
&lt;a href="http://rubygems.org/gems/therubyracer"&gt;therubyracer&lt;/a&gt; will take care
of the JavaScript part so you don&amp;rsquo;t have to worry about Node.js or
other CoffeeScript dependencies.&lt;/p&gt;

&lt;p&gt;Run &lt;code&gt;bundler update&lt;/code&gt; to apply the changes and install the gems.&lt;/p&gt;

&lt;h3&gt;2. Setup files and directories&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;mkdir app/scripts&lt;/code&gt;. It&amp;rsquo;s better than working in the public/
directory. I just named the directory &amp;ldquo;scripts&amp;rdquo; because it will
contain both javascript and coffeescript files. By the way, you can
copy your existing scripts there.&lt;/p&gt;

&lt;p&gt;Create &lt;code&gt;config/scripts.yml&lt;/code&gt; and put the following in it:&lt;/p&gt;

&lt;div class="CodeRay"&gt;
  &lt;div class="code"&gt;&lt;pre&gt;&lt;span class="key"&gt;script_one&lt;/span&gt;:
  - &lt;span class="string"&gt;&lt;span class="content"&gt;app/scripts/prototype.js&lt;/span&gt;&lt;/span&gt;
  - &lt;span class="string"&gt;&lt;span class="content"&gt;app/scripts/effects.js&lt;/span&gt;&lt;/span&gt;
  &lt;span class="comment"&gt;# list more files...&lt;/span&gt;

&lt;span class="key"&gt;script_two&lt;/span&gt;:
  - &lt;span class="string"&gt;&lt;span class="content"&gt;app/scripts/my_script.coffee&lt;/span&gt;&lt;/span&gt;
  &lt;span class="comment"&gt;# list more files...&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;This is just an example, but you get the idea.&lt;/p&gt;

&lt;h3&gt;3. A controller to serve them all&lt;/h3&gt;

&lt;p&gt;Create &lt;code&gt;app/controllers/scripts_controller.rb&lt;/code&gt; with the following:&lt;/p&gt;

&lt;div class="CodeRay"&gt;
  &lt;div class="code"&gt;&lt;pre&gt;&lt;span class="keyword"&gt;module&lt;/span&gt; &lt;span class="class"&gt;ScriptGenerator&lt;/span&gt;
  &lt;span class="keyword"&gt;def&lt;/span&gt; &lt;span class="predefined-constant"&gt;self&lt;/span&gt;.&lt;span class="function"&gt;build_script&lt;/span&gt; name
    scripts[name].map {|path| load_js_string path}.join(&lt;span class="string"&gt;&lt;span class="delimiter"&gt;&amp;quot;&lt;/span&gt;&lt;span class="char"&gt;\n&lt;/span&gt;&lt;span class="char"&gt;\n&lt;/span&gt;&lt;span class="delimiter"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;)
  &lt;span class="keyword"&gt;end&lt;/span&gt;

  private

  &lt;span class="keyword"&gt;def&lt;/span&gt; &lt;span class="predefined-constant"&gt;self&lt;/span&gt;.&lt;span class="function"&gt;scripts&lt;/span&gt;
    &lt;span class="constant"&gt;YAML&lt;/span&gt;::load_file &lt;span class="constant"&gt;File&lt;/span&gt;.join(&lt;span class="constant"&gt;RAILS_ROOT&lt;/span&gt;, &lt;span class="string"&gt;&lt;span class="delimiter"&gt;'&lt;/span&gt;&lt;span class="content"&gt;config/scripts.yml&lt;/span&gt;&lt;span class="delimiter"&gt;'&lt;/span&gt;&lt;/span&gt;)
  &lt;span class="keyword"&gt;end&lt;/span&gt;

  &lt;span class="keyword"&gt;def&lt;/span&gt; &lt;span class="predefined-constant"&gt;self&lt;/span&gt;.&lt;span class="function"&gt;load_js_string&lt;/span&gt; path
    &lt;span class="keyword"&gt;if&lt;/span&gt; path =~ &lt;span class="regexp"&gt;&lt;span class="delimiter"&gt;/&lt;/span&gt;&lt;span class="char"&gt;\.&lt;/span&gt;&lt;span class="content"&gt;coffee&lt;/span&gt;&lt;span class="char"&gt;\Z&lt;/span&gt;&lt;span class="delimiter"&gt;/&lt;/span&gt;&lt;/span&gt;
      &lt;span class="constant"&gt;CoffeeScript&lt;/span&gt;.compile &lt;span class="constant"&gt;File&lt;/span&gt;.read(path), &lt;span class="symbol"&gt;:bare&lt;/span&gt; =&amp;gt; &lt;span class="predefined-constant"&gt;true&lt;/span&gt;
    &lt;span class="keyword"&gt;else&lt;/span&gt;
      &lt;span class="constant"&gt;File&lt;/span&gt;.read(path)
    &lt;span class="keyword"&gt;end&lt;/span&gt;
  &lt;span class="keyword"&gt;end&lt;/span&gt;
&lt;span class="keyword"&gt;end&lt;/span&gt;


&lt;span class="comment"&gt;# ScriptsController handles dynamic scripts requests, it can serve compiled&lt;/span&gt;
&lt;span class="comment"&gt;# CoffeeScript files or concatenate multiple scripts according to the&lt;/span&gt;
&lt;span class="comment"&gt;# configuration file +config/scripts.yml+.&lt;/span&gt;
&lt;span class="keyword"&gt;class&lt;/span&gt; &lt;span class="class"&gt;ScriptsController&lt;/span&gt; &amp;lt; &lt;span class="constant"&gt;ApplicationController&lt;/span&gt;
  include &lt;span class="constant"&gt;ScriptGenerator&lt;/span&gt;

  &lt;span class="comment"&gt;# GET /javascripts/:name.js&lt;/span&gt;
  &lt;span class="keyword"&gt;def&lt;/span&gt; &lt;span class="function"&gt;handler&lt;/span&gt;
    respond_to &lt;span class="keyword"&gt;do&lt;/span&gt; |format|
      format.js { render &lt;span class="symbol"&gt;:js&lt;/span&gt; =&amp;gt; &lt;span class="constant"&gt;ScriptGenerator&lt;/span&gt;::build_script(params[&lt;span class="symbol"&gt;:name&lt;/span&gt;]) }
    &lt;span class="keyword"&gt;end&lt;/span&gt;
  &lt;span class="keyword"&gt;end&lt;/span&gt;
&lt;span class="keyword"&gt;end&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;Add the following route to &lt;code&gt;config/routes.rb&lt;/code&gt;:&lt;/p&gt;

&lt;div class="CodeRay"&gt;
  &lt;div class="code"&gt;&lt;pre&gt;match &lt;span class="string"&gt;&lt;span class="delimiter"&gt;'&lt;/span&gt;&lt;span class="content"&gt;javascripts/:name&lt;/span&gt;&lt;span class="delimiter"&gt;'&lt;/span&gt;&lt;/span&gt; =&amp;gt; &lt;span class="string"&gt;&lt;span class="delimiter"&gt;'&lt;/span&gt;&lt;span class="content"&gt;scripts#handler&lt;/span&gt;&lt;span class="delimiter"&gt;'&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;And you&amp;rsquo;re good to go. The good thing with this is that you can use
the default Rails' &lt;code&gt;javascript_include_tag&lt;/code&gt;, for example:&lt;/p&gt;

&lt;div class="CodeRay"&gt;
  &lt;div class="code"&gt;&lt;pre&gt;&amp;lt;%= javascript_include_tag :script_one %&amp;gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;This will serve all scripts specified in the &lt;code&gt;script_one&lt;/code&gt; part of the
YAML file we created earlier.&lt;/p&gt;

&lt;h3&gt;Caveats&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;It&amp;rsquo;s not very convenient to install that this way. I might pack
everything as a plugin soon.&lt;/li&gt;
&lt;li&gt;As you can see, scripts served with &lt;code&gt;ScriptsController&lt;/code&gt; are not cached.&lt;/li&gt;
&lt;/ul&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.tangiblecolors.com/first-steps-with-coffeescript-and-how-to-use"&gt;Permalink&lt;/a&gt; 

&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/tangiblecolors/~4/RWJ7KFjo3CU" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/876032/av3.png</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/ZyFMqKqeXpT</posterous:profileUrl>
        <posterous:firstName />
        <posterous:lastName />
        <posterous:nickName>Hashmal</posterous:nickName>
        <posterous:displayName>Hashmal</posterous:displayName>
      </posterous:author>
    <feedburner:origLink>http://www.tangiblecolors.com/first-steps-with-coffeescript-and-how-to-use</feedburner:origLink></item>
    <item>
      <pubDate>Sun, 23 Jan 2011 21:35:00 -0800</pubDate>
      <title>Restarting a project from scratch</title>
      <link>http://feedproxy.google.com/~r/tangiblecolors/~3/IUBifvStO4A/restarting-a-project-from-scratch</link>
      <guid isPermaLink="false">http://www.tangiblecolors.com/restarting-a-project-from-scratch</guid>
      <description>&lt;p&gt;
	&lt;p&gt;A few days ago I had to throw away all the code I&amp;rsquo;ve written for
&lt;a href="http://whis.tl/"&gt;Whistle&lt;/a&gt;. A lot of people acclaim the &amp;ldquo;everything
rewritten from scratch!&amp;rdquo;, as if it enabled cleaner and better code, but
it does not. Restarting from scratch usually implies cleaner code, sure,
but also new bugs and unpredicted behaviors. I always prefer to fix the
existing code, refactor it, or whatever: this way you don&amp;rsquo;t lose the
maturity the code can have, and it you can gradually improve the code
instead of reinventing the wheel indefinitely.&lt;/p&gt;

&lt;p&gt;So, why did I choose to redo everything from scratch? Because I made
some serious mistakes which would have been very difficult to fix, and
all of them could have been avoided with more discipline:&lt;/p&gt;

&lt;h2&gt;Bad testing&lt;/h2&gt;

&lt;p&gt;I overlooked tests, I was writing the code and only shaky parts of the
project had some test cases. This is bad. I could not change anything
without fearing that something will break elsewhere, and I could not
verify manually that everything was OK, because Whistle was getting
large. Lesson learned: Now it&amp;rsquo;s &lt;em&gt;Test Driven Development&lt;/em&gt; or nothing.&lt;/p&gt;

&lt;h2&gt;No Documentation&lt;/h2&gt;

&lt;p&gt;I could not understand my own code anymore. It&amp;rsquo;s a depressing feeling,
I don&amp;rsquo;t wish this to anybody. And yes, &lt;em&gt;even if no one else is looking
at your code, you still need documentation&lt;/em&gt;. Even with high level,
readable languages such as Ruby.&lt;/p&gt;

&lt;h2&gt;Production version and Development version torn apart&lt;/h2&gt;

&lt;p&gt;It&amp;rsquo;s a lot easier to publish a lot of small updates over time (vs. a
few big updates). Small steps, it&amp;rsquo;s easier to find newly introduced
bugs, and it&amp;rsquo;s better from a usability point of view anyway.
Unfortunately I waited too long before updating the production
version, and when I did so, plenty of bugs showed-up, some of them
even spoiling some database data. Big &lt;strong&gt;ouch&lt;/strong&gt; here.&lt;/p&gt;

&lt;p&gt;In conclusion: test often, document everything, and update regularly,
if possible on a daily basis.&lt;/p&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.tangiblecolors.com/restarting-a-project-from-scratch"&gt;Permalink&lt;/a&gt; 

&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/tangiblecolors/~4/IUBifvStO4A" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/876032/av3.png</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/ZyFMqKqeXpT</posterous:profileUrl>
        <posterous:firstName />
        <posterous:lastName />
        <posterous:nickName>Hashmal</posterous:nickName>
        <posterous:displayName>Hashmal</posterous:displayName>
      </posterous:author>
    <feedburner:origLink>http://www.tangiblecolors.com/restarting-a-project-from-scratch</feedburner:origLink></item>
    <item>
      <pubDate>Sun, 02 Jan 2011 03:28:00 -0800</pubDate>
      <title>Quick WYSIWYG hack</title>
      <link>http://feedproxy.google.com/~r/tangiblecolors/~3/smQpRDhGU68/quick-wysiwyg-hack</link>
      <guid isPermaLink="false">http://www.tangiblecolors.com/quick-wysiwyg-hack</guid>
      <description>&lt;p&gt;
	&lt;p&gt;For a long time, I&amp;rsquo;ve been looking for a way to get the best from
writing raw HTML (quick, clean, you keep control) and using a WYSIWYG
editor (no window switching, no page refresh).
Turns out, the perfect solution was just here in Textmate. Hit
&lt;code&gt;ctrl+alt+cmd+P&lt;/code&gt; to preview the document you are writing. That&amp;rsquo;s all.
But &lt;em&gt;don&amp;rsquo;t close it&lt;/em&gt;. Edit your document again, and watch the preview
updating automatically. Neat, heh?&lt;/p&gt;

&lt;p&gt;But you can do even more. For instance, you can write Haml code
instead, and pipe the text through a script:&lt;/p&gt;

&lt;div class="CodeRay"&gt;
  &lt;div class="code"&gt;&lt;pre&gt;&lt;span class="doctype"&gt;#!/usr/bin/env ruby&lt;/span&gt;

require &lt;span class="string"&gt;&lt;span class="delimiter"&gt;'&lt;/span&gt;&lt;span class="content"&gt;rubygems&lt;/span&gt;&lt;span class="delimiter"&gt;'&lt;/span&gt;&lt;/span&gt;
require &lt;span class="string"&gt;&lt;span class="delimiter"&gt;'&lt;/span&gt;&lt;span class="content"&gt;haml&lt;/span&gt;&lt;span class="delimiter"&gt;'&lt;/span&gt;&lt;/span&gt;

&lt;span class="constant"&gt;INPUT&lt;/span&gt; = &lt;span class="predefined-constant"&gt;ARGF&lt;/span&gt; ? &lt;span class="predefined-constant"&gt;ARGF&lt;/span&gt;.read : &lt;span class="predefined-constant"&gt;STDIN&lt;/span&gt;.read

haml_engine = &lt;span class="constant"&gt;Haml&lt;/span&gt;::&lt;span class="constant"&gt;Engine&lt;/span&gt;.new &lt;span class="constant"&gt;INPUT&lt;/span&gt;
puts haml_engine.render&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;(Don&amp;rsquo;t forget to &lt;em&gt;chmod 755&lt;/em&gt; the file)&lt;/p&gt;

&lt;p&gt;Then, in the Textmate preview window, check &amp;ldquo;Show options&amp;rdquo;, &amp;ldquo;Pipe text
through&amp;rdquo;, and fill the text field with our Ruby script&amp;rsquo;s path.
&lt;em&gt;Voilà!&lt;/em&gt;&lt;/p&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.tangiblecolors.com/quick-wysiwyg-hack"&gt;Permalink&lt;/a&gt; 

&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/tangiblecolors/~4/smQpRDhGU68" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/876032/av3.png</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/ZyFMqKqeXpT</posterous:profileUrl>
        <posterous:firstName />
        <posterous:lastName />
        <posterous:nickName>Hashmal</posterous:nickName>
        <posterous:displayName>Hashmal</posterous:displayName>
      </posterous:author>
    <feedburner:origLink>http://www.tangiblecolors.com/quick-wysiwyg-hack</feedburner:origLink></item>
    <item>
      <pubDate>Tue, 28 Dec 2010 06:08:06 -0800</pubDate>
      <title>A race for a storytelling game?</title>
      <link>http://feedproxy.google.com/~r/tangiblecolors/~3/09BwX6Hoa98/a-race-for-a-storytelling-game</link>
      <guid isPermaLink="false">http://www.tangiblecolors.com/a-race-for-a-storytelling-game</guid>
      <description>&lt;p&gt;
	&lt;div class='p_embed p_image_embed'&gt;
&lt;a href="http://getfile2.posterous.com/getfile/files.posterous.com/tangiblecolors/AhCjHMTQaPuZsISObC65De5ajxCvockW53EQlkdokFtdDPOU2asz7IIVxgls/fauve.png"&gt;&lt;img alt="Fauve" height="574" src="http://getfile3.posterous.com/getfile/files.posterous.com/tangiblecolors/MyScCwWfBYOifs8vPqOVUfiwkOYCq9OiMwU9mvgDiWyTLbXeCwpWDsuCs7Kj/fauve.png.scaled.500.jpg" width="500" /&gt;&lt;/a&gt;
&lt;/div&gt;

	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.tangiblecolors.com/a-race-for-a-storytelling-game"&gt;Permalink&lt;/a&gt; 

&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/tangiblecolors/~4/09BwX6Hoa98" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/876032/av3.png</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/ZyFMqKqeXpT</posterous:profileUrl>
        <posterous:firstName />
        <posterous:lastName />
        <posterous:nickName>Hashmal</posterous:nickName>
        <posterous:displayName>Hashmal</posterous:displayName>
      </posterous:author>
      <media:content type="image/png" height="738" width="643" url="http://getfile2.posterous.com/getfile/files.posterous.com/tangiblecolors/AhCjHMTQaPuZsISObC65De5ajxCvockW53EQlkdokFtdDPOU2asz7IIVxgls/fauve.png">
        <media:thumbnail height="574" width="500" url="http://getfile3.posterous.com/getfile/files.posterous.com/tangiblecolors/MyScCwWfBYOifs8vPqOVUfiwkOYCq9OiMwU9mvgDiWyTLbXeCwpWDsuCs7Kj/fauve.png.scaled.500.jpg" />
      </media:content>
    <feedburner:origLink>http://www.tangiblecolors.com/a-race-for-a-storytelling-game</feedburner:origLink></item>
    <item>
      <pubDate>Sun, 12 Dec 2010 21:57:00 -0800</pubDate>
      <title>There is no talent</title>
      <link>http://feedproxy.google.com/~r/tangiblecolors/~3/UQwUsKuc6uY/there-is-no-talent</link>
      <guid isPermaLink="false">http://www.tangiblecolors.com/there-is-no-talent</guid>
      <description>&lt;p&gt;
	&lt;div class="posterous_bookmarklet_entry"&gt;
      &lt;blockquote class="posterous_long_quote"&gt;&lt;p&gt;I’m good with computers. At least compared with others at my age. And believe me, I’ve heard it a lot: “Wow, you really have a talent there!” Well, apparently I &lt;em&gt;do&lt;/em&gt; have a talent for computers. Or …?&lt;/p&gt;

&lt;p&gt;Let’s try an experiment: Take all of my knowledge of computer related matters and divide it by the number of hours I’ve spent in front of my computer. That’s my “speed” of learning. Then let’s do the same with some of my friends, who are not so “technically inclined”. Whose score would be largest? If I have a talent for computers, it would make sense that I learn it faster than others, right?&lt;/p&gt;

&lt;p&gt;Truth is, I believe I would have scored far lower than “regular” people. I’ve spent &lt;em&gt;tons&lt;/em&gt; of hours in front of my computer and very often I don’t learn anything new or create something different. Heck, I’ve probably been “wasting” more hours than many non-technically inclined have spent &lt;em&gt;in total&lt;/em&gt;. That doesn’t sound like a talent?&lt;/p&gt;

&lt;p&gt;I believe that &lt;strong&gt;there is no such thing as talent&lt;/strong&gt;.&lt;/p&gt;&lt;/blockquote&gt;&lt;div class="posterous_quote_citation"&gt;&amp;mdash; &lt;a href="http://timeless.judofyr.net/there-is-no-talent"&gt;Magnus Holm&lt;/a&gt;&lt;/div&gt;
    &lt;p&gt;&lt;/p&gt;&lt;/div&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.tangiblecolors.com/there-is-no-talent"&gt;Permalink&lt;/a&gt; 

&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/tangiblecolors/~4/UQwUsKuc6uY" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/876032/av3.png</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/ZyFMqKqeXpT</posterous:profileUrl>
        <posterous:firstName />
        <posterous:lastName />
        <posterous:nickName>Hashmal</posterous:nickName>
        <posterous:displayName>Hashmal</posterous:displayName>
      </posterous:author>
    <feedburner:origLink>http://www.tangiblecolors.com/there-is-no-talent</feedburner:origLink></item>
    <item>
      <pubDate>Fri, 10 Dec 2010 22:55:30 -0800</pubDate>
      <title>Typeful Programming</title>
      <link>http://feedproxy.google.com/~r/tangiblecolors/~3/SDBMnqWtp78/typeful-programming</link>
      <guid isPermaLink="false">http://www.tangiblecolors.com/typeful-programming</guid>
      <description>&lt;p&gt;
	&lt;p&gt;&lt;a href="http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.134.4771&amp;amp;rep=rep1&amp;amp;type=pdf"&gt;Paper by Luca Cardelli&lt;/a&gt;.
An interesting work on types not relying on the study of an existing
programming language.&lt;/p&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.tangiblecolors.com/typeful-programming"&gt;Permalink&lt;/a&gt; 

&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/tangiblecolors/~4/SDBMnqWtp78" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/876032/av3.png</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/ZyFMqKqeXpT</posterous:profileUrl>
        <posterous:firstName />
        <posterous:lastName />
        <posterous:nickName>Hashmal</posterous:nickName>
        <posterous:displayName>Hashmal</posterous:displayName>
      </posterous:author>
    <feedburner:origLink>http://www.tangiblecolors.com/typeful-programming</feedburner:origLink></item>
    <item>
      <pubDate>Thu, 09 Dec 2010 14:27:00 -0800</pubDate>
      <title>80 column width and no more</title>
      <link>http://feedproxy.google.com/~r/tangiblecolors/~3/kAP9BePDaGc/80-column-width-and-no-more</link>
      <guid isPermaLink="false">http://www.tangiblecolors.com/80-column-width-and-no-more</guid>
      <description>&lt;p&gt;
	&lt;p&gt;When it comes to programming, the question of the maximum column width
a programmer should code with (if any) regularly resurfaces.
The standard is usually a &lt;em&gt;80 column width limit&lt;/em&gt;, dating from the day
when punchcards were used, then when terminals could not handle
more characters. Critics often say those constraints are gone and
there&amp;rsquo;s no reason to keep the limitation. Advocates say the limit is
still
useful for comparing programs side by side, or printing. But is there
a somewhat universal ideal that we could find and use, if there is
one?&lt;/p&gt;

&lt;h2&gt;Should a limit exist?&lt;/h2&gt;

&lt;p&gt;Let&amp;rsquo;s forget technical limitations and assume we are provided with an
infinite-width screen and the computing power to handle lines of
infinite lengths. yeah, a &lt;strong&gt;gigantic&lt;/strong&gt; screen, with an infinite
resolution and an infinite number of colors. We will use this screen
to write programs
(what other use could you have in mind, hehe?)
Obviously, we would find us to look at the far left, read a line
spanning to the far right. Not very convenient. We might even have to
walk while
reading in order to be able to see all characters. That&amp;rsquo;s too large,
we have to set a &lt;em&gt;limit&lt;/em&gt;. We don&amp;rsquo;t know what this limit is yet, but
now
we know that there must be one.&lt;/p&gt;

&lt;h2&gt;What this limit should be?&lt;/h2&gt;

&lt;p&gt;A limit preventing us from walking, for sure. A limit preventing us
from stiff necks. For &lt;em&gt;convenience&lt;/em&gt;, for &lt;em&gt;comfort&lt;/em&gt;. Hey, isn&amp;rsquo;t this
&lt;strong&gt;readability&lt;/strong&gt;?
Well, yes it is. The main reason for limiting column width is
readability, and this won&amp;rsquo;t change, whatever the technology, whatever
the language.
It&amp;rsquo;s cool because readability problems exist since the beginning of
writing, and we had time to overcome them. Ideal line width isn&amp;rsquo;t a
new issue,
and it is usually said that the answer is somewhere between 50 and 70
characters (including spaces) depending on the language and typeface.
More than 80 characters is
considered &lt;em&gt;exhausting&lt;/em&gt;.
Considering we use indentation in programming languages, we definitely
need more than 50 characters. We could try to find the very ideal
width
for each programming language, but hey, we already have this &lt;em&gt;80
column width limit&lt;/em&gt; programmers have been using for ages, and millions
of lines are already conforming to this limit. If we reconsider
technical limitations and history, and the fact that any serious
programmer will
have to read a file through an old SSH console one day or another,
limiting code to 80 characters per line is obvious.&lt;/p&gt;

&lt;p&gt;In conclusion, while we are not sure about the precise width since it
depends on many variable factors, we are sure that it must not exceed
80 characters.&lt;/p&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.tangiblecolors.com/80-column-width-and-no-more"&gt;Permalink&lt;/a&gt; 

&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/tangiblecolors/~4/kAP9BePDaGc" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/876032/av3.png</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/ZyFMqKqeXpT</posterous:profileUrl>
        <posterous:firstName />
        <posterous:lastName />
        <posterous:nickName>Hashmal</posterous:nickName>
        <posterous:displayName>Hashmal</posterous:displayName>
      </posterous:author>
    <feedburner:origLink>http://www.tangiblecolors.com/80-column-width-and-no-more</feedburner:origLink></item>
    <item>
      <pubDate>Wed, 08 Dec 2010 22:00:00 -0800</pubDate>
      <title>A $212 million deal</title>
      <link>http://feedproxy.google.com/~r/tangiblecolors/~3/P9W5whMxwVI/a-212-million-deal</link>
      <guid isPermaLink="false">http://www.tangiblecolors.com/a-212-million-deal</guid>
      <description>&lt;p&gt;
	&lt;p&gt;&lt;a href="http://blog.heroku.com/archives/2010/12/8/the_next_level/"&gt;Salesforce is acquiring
Heroku&lt;/a&gt;.
Once more the nice little guy is absorbed by a gigantic one, many folks
acclaim &amp;ldquo;Congratulations!&amp;rdquo;, I say &lt;em&gt;all my condolences&lt;/em&gt;. I was about to
migrate &lt;a href="http://whis.tl"&gt;Whistle&lt;/a&gt; there, but I&amp;rsquo;ll reconsider the
question knowing the Salesforce&amp;rsquo;s reputation.&lt;/p&gt;

&lt;p&gt;I still wonder how they could not be profitable with 100,000 apps
running and a (presumably good and sane) business model.&lt;/p&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.tangiblecolors.com/a-212-million-deal"&gt;Permalink&lt;/a&gt; 

&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/tangiblecolors/~4/P9W5whMxwVI" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/876032/av3.png</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/ZyFMqKqeXpT</posterous:profileUrl>
        <posterous:firstName />
        <posterous:lastName />
        <posterous:nickName>Hashmal</posterous:nickName>
        <posterous:displayName>Hashmal</posterous:displayName>
      </posterous:author>
    <feedburner:origLink>http://www.tangiblecolors.com/a-212-million-deal</feedburner:origLink></item>
    <item>
      <pubDate>Fri, 26 Nov 2010 04:29:00 -0800</pubDate>
      <title>The Flood</title>
      <link>http://feedproxy.google.com/~r/tangiblecolors/~3/QoJYrFlIINE/the-flood</link>
      <guid isPermaLink="false">http://www.tangiblecolors.com/the-flood</guid>
      <description>&lt;p&gt;
	&lt;p&gt;Tangible Colors has been subject to several false starts. I originally set it up to write about &lt;em&gt;design that matters&lt;/em&gt;, i.e. cleared out of gratuity, or to put it in another way, design with a focus.&lt;/p&gt;
&lt;p&gt;As it turned out, the design of the blog itself was badly thought and gratuitous, and there wasn't any solid article on it. How ironic. To remedy to my complete failure, I decided to restart Tangible Colors... Once again. This time I don't plan to stick strictly to the subject "design that matters", but I hope I will be able to at least avoid complete nonsense.&lt;/p&gt;
&lt;p&gt;New goals, new start, new publishing platform... There we go!&lt;/p&gt;
&lt;p&gt;&lt;div class='p_embed p_image_embed'&gt;
&lt;a href="http://getfile8.posterous.com/getfile/files.posterous.com/temp-2010-11-26/AdxrlxopJfsymFIIDmjGrJwibAFlmoaIaynsbChdJHdjulJbxwDzDxFwHIvF/Flood.png.scaled1000.png"&gt;&lt;img alt="Flood" height="299" src="http://getfile1.posterous.com/getfile/files.posterous.com/temp-2010-11-26/AdxrlxopJfsymFIIDmjGrJwibAFlmoaIaynsbChdJHdjulJbxwDzDxFwHIvF/Flood.png.scaled500.png" width="500" /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;/p&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.tangiblecolors.com/the-flood"&gt;Permalink&lt;/a&gt; 

&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/tangiblecolors/~4/QoJYrFlIINE" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/876032/av3.png</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/ZyFMqKqeXpT</posterous:profileUrl>
        <posterous:firstName />
        <posterous:lastName />
        <posterous:nickName>Hashmal</posterous:nickName>
        <posterous:displayName>Hashmal</posterous:displayName>
      </posterous:author>
      <media:content type="image/png" height="681" width="1137" url="http://getfile5.posterous.com/getfile/files.posterous.com/temp-2010-11-26/AdxrlxopJfsymFIIDmjGrJwibAFlmoaIaynsbChdJHdjulJbxwDzDxFwHIvF/Flood.png">
        <media:thumbnail height="299" width="500" url="http://getfile1.posterous.com/getfile/files.posterous.com/temp-2010-11-26/AdxrlxopJfsymFIIDmjGrJwibAFlmoaIaynsbChdJHdjulJbxwDzDxFwHIvF/Flood.png.scaled500.png" />
      </media:content>
    <feedburner:origLink>http://www.tangiblecolors.com/the-flood</feedburner:origLink></item>
  </channel>
</rss>

