<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">

  <title><![CDATA[SansCourier]]></title>
  <link href="http://sanscourier.com/atom.xml" rel="self"/>
  <link href="http://sanscourier.com/"/>
  <updated>2013-02-16T19:50:52-08:00</updated>
  <id>http://sanscourier.com/</id>
  <author>
    <name><![CDATA[Gonzalo Maldonado]]></name>
    <email><![CDATA[gonzalo@sanscourier.com]]></email>
  </author>
  <generator uri="http://octopress.org/">Octopress</generator>

  
  <entry>
    <title type="html"><![CDATA[And remember to be agile... As a Spaceteam!]]></title>
    <link href="http://sanscourier.com/blog/2013/02/16/be-agile-as-a-spaceteam/"/>
    <updated>2013-02-16T18:51:00-08:00</updated>
    <id>http://sanscourier.com/blog/2013/02/16/be-agile-as-a-spaceteam</id>
    <content type="html"><![CDATA[<p>Yesterday I went out with some friends who work in tech too, and
without asking for it, I ended up learning quite a bit about leadership
and management on a San Francisco Friday night.</p>

<p><a href="https://itunes.apple.com/us/app/spaceteam/id570510529?mt=8">Spaceteam</a> is a
multiplayer iOS game with a very simple goal,
to keep your spaceship from falling apart while blasting trough space.</p>

<p>To keep the spaceship from being outrun by an exploding star you have
take turns with your teammates between telling instructions
like &#8220;Set Capacitive Omegasphere to 2&#8221; and executing them
(this one means moving up a slider on your screen to 2).</p>

<p>Leading a team is just like this, specially on a Lean startup or
company. The role of a tech lead most of the time is not about executing
the tasks (though you may do so), but figuring out a way of
communicating these instructions to your team.</p>

<p>&#8220;Implement a leader board to drive the engagement in the basic customer
segment&#8221; is an instruction as cryptic as &#8220;setting up the Finite Plexus
to 3&#8221; and it involves Design, Engineering and Product.</p>

<p>Therefore your objective should be the same
whenever you are creating an app, or fighting robot uprisings
you need to find a way to work together&#8230; as a Space Team!</p>

<p>Every Spaceteam game begins with an instruction:
&#8220;Don&#8217;t worry about steering the spaceship, it will do so by itself&#8221;.
Which to me sounds like a Bill Walsh quote.</p>

<p>When building a team, focus on creating the right culture of trust,
on moving fast and on breaking things, <a href="http://www.amazon.com/Score-Takes-Care-Itself-Philosophy/dp/1591843472">&#8220;The Score will take care of itself&#8221;</a></p>

<p>Good luck Spaceteam!</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[San Francisco Koi]]></title>
    <link href="http://sanscourier.com/blog/2012/10/09/san-francisco-koi/"/>
    <updated>2012-10-09T18:41:00-07:00</updated>
    <id>http://sanscourier.com/blog/2012/10/09/san-francisco-koi</id>
    <content type="html"><![CDATA[<h1>The Koi Pond.</h1>

<p>If you&#8217;ve ever been to San Francisco and are observant enough (or have walked down the
right alleyways), you&#8217;ve likely seen these small orange fishes everywhere.</p>

<p><img src="http://farm6.staticflickr.com/5091/5460094303_85a43ee5d6_z.jpg"></p>

<p>The Koi fish.</p>

<p>According to Japanese legend, there was once a particularly determinded Koi fish. Despite
the warnings of all the other koi fish in his pond, this heedless little fish wanted to swim
to the top of a gigantic waterfall. He knew it was nearly impossible, but he wanted to do it
regardless.</p>

<p>So the fish went upstream on his own. After a long and arduous journey, he reached the
base of the waterfall. Summoning all his strength, the mightly little fish climbed to the top
of the rushing falls. The gods, being impressed with his perseverance, decided to reward
him. They turned the fish into a splendid and powerful dragon.</p>

<p>Seeing these koi painted all around San Francisco, reminds me that this city is our pond—
chock full of artists, entrepreneurs, code artists, pixel dreamers all swimming around. So,
koi of San Francisco, let’s become dragons.</p>

<p>Photo by <a href="http://www.flickr.com/photos/jessgarduno/">Jess G</a></p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Don't overcook your code]]></title>
    <link href="http://sanscourier.com/blog/2012/08/01/dont-overcook-your-code/"/>
    <updated>2012-08-01T16:47:00-07:00</updated>
    <id>http://sanscourier.com/blog/2012/08/01/dont-overcook-your-code</id>
    <content type="html"><![CDATA[<p>Don&#8217;t Overlook Your Code</p>

<p>“I had hoisted myself up on the shoulders of giants.”
- Linus Torvalds (Paraphrasing Isaac Newton)</p>

<p>One of the most interesting tech books I&#8217;ve ever read, On Rework by Jason Fried and David
Heinemeier Hansson, includes in its acknowledgements some figures that I deeply admire:
Steve Jobs, Mies Van der Rohe, and Julia Child. It&#8217;s the unlikely shout-out to the great
American master of French cooking that most sparks my interest. Engineers can learn a lot
from chefs.</p>

<p>Cooking and engineering (to use a more encompassing word than programming) have many
parallels. These span way beyond the simple metaphor that an algorithm is like a cooking
recipe—which it is, but that will be another blog post. Cooking is one of the things I love
the most. When I’m cooking something for dinner it’s one of those few moments when I
can step away from the computer and just savor the moment (not to mention the delicious
aromas). But as with coding, it requires discipline and respect.</p>

<p>For the same reasons you should attend tech conferences, if you want to be better cook
you have to talk about your craft, discuss, debate and chat with other cooks. Sometimes you
need refreshers on your favorite coding language, likewise attending a couple of cooking
classes can do wonders. Just like with coding, newbies make the mistake of thinking that
one day they will just learn everything there is to learn about it. “It’s only baking stuff”
they&#8217;ll say. Cooking is more than just following a recipe.</p>

<p>In one of the cooking classes I attended, the chef said this: “You should never overcook
pasta, because this is an offence, why?”</p>

<p>His answer: because there is a whole culture behind this one ingredient. From the person
who harvested and cut the wheat, to the mechanics who built the machine to shape the
pasta, to the packagers and distributors; there is a whole industry around getting you that
pasta. Overcooking your spaghetti shows tremendous disrespect to all their work. “It’s
making all their efforts pointless,” the chef instructor told our class.</p>

<p>Programming is exactly the same. Whenever I design an API, Kenneth Reitz’s remarks, that
“code should be made to be beautiful and useful” resonate with me and I try to do just that.
When you make sloppy, ugly code, you can end up doing great disrespect to all the work
people did before you.</p>

<p>So whenever I get into any coding, I try to go back and look down into the shoulder of our
giants. I see Denis Ritchie Unix Operating system (that it’s still alive everywhere, from my
cellphone, to the Mac computer I’m using to write this). I see Bob Joy’s TCP/IP that drives all
the Internet packages. I see WSGI and the middleware classes that make writing web code
simpler. There&#8217;s Guido’s Python that I use everyday and that serves as my trusty chef knife.
And from the top of those shoulders, I can see miles ahead and can no longer just look
down.</p>

<p>I&#8217;m trying not to overcook my code any longer. I can’t design something that’s not beautiful
nor functional—I cannot disrespect all of the work that&#8217;s already been done for me.</p>

<p>Julia Child became a chef, author, and beloved TV celebrity due to her deep admiration
for French cooking. She achieved excellence by perfecting her craft and sharing it with the
world. She always did this with the utmost respect, always acknowledging from where she
got her cooking secrets. Just like cooking, coding is a craft. As such, you too must respect all
the work done before.</p>

<p>We can only look so far because we&#8217;re standing on the shoulder of giants. Spaghetti can&#8217;t get cooked until the wheat gets harvested.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Programming is an Art]]></title>
    <link href="http://sanscourier.com/blog/2011/12/18/programming-is-an-art/"/>
    <updated>2011-12-18T21:52:00-08:00</updated>
    <id>http://sanscourier.com/blog/2011/12/18/programming-is-an-art</id>
    <content type="html"><![CDATA[<blockquote><p>Computer programming is an art, because it applies accumulated knowledge to the world, because it requires skill and ingenuity, and especially because it produces objects of beauty.</p></blockquote>

<p>&#8211; Knuth</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Winning Is Not a Sometime Thing]]></title>
    <link href="http://sanscourier.com/blog/2011/12/05/winning-is-not-a-sometime-thing/"/>
    <updated>2011-12-05T21:58:00-08:00</updated>
    <id>http://sanscourier.com/blog/2011/12/05/winning-is-not-a-sometime-thing</id>
    <content type="html"><![CDATA[<blockquote><p>&#8220;Winning is not a sometime thing; it&#8217;s an all the time thing.
You don&#8217;t win once in a while; you don&#8217;t do things right once in a while; you do them right all the time.
Winning is a habit.  Unfortunately, so is losing.&#8221;</p></blockquote>

<p><strong>Vince Lombardi</strong></p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[You Are]]></title>
    <link href="http://sanscourier.com/blog/2011/10/21/youare/"/>
    <updated>2011-10-21T03:59:00-07:00</updated>
    <id>http://sanscourier.com/blog/2011/10/21/youare</id>
    <content type="html"><![CDATA[<p>You are what you prove yourself to be capable of.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Here's to the Craziest One.]]></title>
    <link href="http://sanscourier.com/blog/2011/10/06/heres-to-the-crazy-one/"/>
    <updated>2011-10-06T15:10:00-07:00</updated>
    <id>http://sanscourier.com/blog/2011/10/06/heres-to-the-crazy-one</id>
    <content type="html"><![CDATA[<p>This <a href="http://www.youtube.com/watch?v=8rwsuXHA7RA">video</a> is probably one
of the most important reasons why I am, an Engineer, a creator, a dreamer.</p>

<p>Every year on the first day of the semester, one of my college teachers
used to put this video for all the EE freshmen, I think he still does it,
and though back then I thought it was a little bit cheesy;
many years later, after working in so many diverse environment I look back
and know he&#8217;s right.</p>

<p>We must Think Different.</p>

<p>Here&#8217;s to you Steve. </p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Gumption]]></title>
    <link href="http://sanscourier.com/blog/2011/09/19/gumption/"/>
    <updated>2011-09-19T09:33:00-07:00</updated>
    <id>http://sanscourier.com/blog/2011/09/19/gumption</id>
    <content type="html"><![CDATA[<blockquote><p>I like the word “gumption” because it’s so homely and so forlorn and so out of style it looks as if it needs a friend and isn’t likely to reject anyone who comes along. It’s an old Scottish word, once used a lot by pioneers, but which, like “kin,” seems to have all but dropped out of use. I like it also because it describes exactly what happens to someone who connects with Quality. He gets filled with gumption.</p>

<p>A person filled with gumption doesn’t sit around dissipating and stewing about things. He’s at the front of the train of his own awareness, watching to see what’s up the track and meeting it when it comes. That’s gumption.</p></blockquote>

<p><a href="http://en.wikipedia.org/wiki/Zen_and_the_Art_of_Motorcycle_Maintenance">Zen And The Art Of Motorcycle Maintenance</a></p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[What the What Are SSH Fingerprint Randomarts and Why Should I Care?]]></title>
    <link href="http://sanscourier.com/blog/2011/08/31/what-the-what-are-ssh-fingerprint-randomarts-and-why-should-i-care/"/>
    <updated>2011-08-31T00:24:00-07:00</updated>
    <id>http://sanscourier.com/blog/2011/08/31/what-the-what-are-ssh-fingerprint-randomarts-and-why-should-i-care</id>
    <content type="html"><![CDATA[<p>You probably have seen this somewhere while playing with open ssh.
This are called Randomart</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
<span class='line-number'>15</span>
<span class='line-number'>16</span>
<span class='line-number'>17</span>
<span class='line-number'>18</span>
<span class='line-number'>19</span>
<span class='line-number'>20</span>
<span class='line-number'>21</span>
<span class='line-number'>22</span>
<span class='line-number'>23</span>
<span class='line-number'>24</span>
<span class='line-number'>25</span>
<span class='line-number'>26</span>
<span class='line-number'>27</span>
<span class='line-number'>28</span>
<span class='line-number'>29</span>
<span class='line-number'>30</span>
<span class='line-number'>31</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>Generating public/private rsa key pair.
</span><span class='line'>    The key fingerprint is:
</span><span class='line'>    05:1e:1e:c1:ac:b9:d1:1c:6a:60:ce:0f:77:6c:78:47 you@i
</span><span class='line'>    The key's randomart image is:
</span><span class='line'>    +--[ RSA 2048]----+
</span><span class='line'>    |       o=.       |
</span><span class='line'>    |    o  o++E      |
</span><span class='line'>    |   + . Ooo.      |
</span><span class='line'>    |    + O B..      |
</span><span class='line'>    |     = *S.       |
</span><span class='line'>    |      o          |
</span><span class='line'>    |                 |
</span><span class='line'>    |                 |
</span><span class='line'>    |                 |
</span><span class='line'>    +-----------------+
</span><span class='line'>
</span><span class='line'>    Generating public/private dsa key pair.
</span><span class='line'>    The key fingerprint is:
</span><span class='line'>    b6:dd:b7:1f:bc:25:31:d3:12:f4:92:1c:0b:93:5f:4b you@i
</span><span class='line'>    The key's randomart image is:
</span><span class='line'>    +--[ DSA 1024]----+
</span><span class='line'>    |            o.o  |
</span><span class='line'>    |            .= E.|
</span><span class='line'>    |             .B.o|
</span><span class='line'>    |              .= |
</span><span class='line'>    |        S     = .|
</span><span class='line'>    |       . o .  .= |
</span><span class='line'>    |        . . . oo.|
</span><span class='line'>    |             . o+|
</span><span class='line'>    |              .o.|
</span><span class='line'>    +-----------------+</span></code></pre></td></tr></table></div></figure>


<p>&#8220;Images&#8221; taken from <a href="http://superuser.com/questions/22535/what-is-randomart-produced-by-ssh-keygen">What is randomart?</a></p>

<p>So why is this interesting to us?
Well lets suppose you have a long list of keys&#8230; Yeah just like the one
at your servers ~/.ssh/known_hosts/ and you want to visualy check if you
have a duplicate one</p>

<p>try this:</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>$ssh-keygen -lv -f ~/.ssh/known_hosts | less</span></code></pre></td></tr></table></div></figure>


<p>Look both gist.github and github have the same key&#8230;</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
<span class='line-number'>15</span>
<span class='line-number'>16</span>
<span class='line-number'>17</span>
<span class='line-number'>18</span>
<span class='line-number'>19</span>
<span class='line-number'>20</span>
<span class='line-number'>21</span>
<span class='line-number'>22</span>
<span class='line-number'>23</span>
<span class='line-number'>24</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>2048 16:27:ac:a5:76:28:2d:36:63:1b:56:4d:eb:df:a6:48 gist.github.com,207.97.227.243 (RSA)
</span><span class='line'>+--[ RSA 2048]----+
</span><span class='line'>|        .        |
</span><span class='line'>|       + .       |
</span><span class='line'>|      . B .      |
</span><span class='line'>|     o * +       |
</span><span class='line'>|    X * S        |
</span><span class='line'>|   + O o . .     |
</span><span class='line'>|    .   E . o    |
</span><span class='line'>|       . . o     |
</span><span class='line'>|        . .      |
</span><span class='line'>+-----------------+
</span><span class='line'>2048 16:27:ac:a5:76:28:2d:36:63:1b:56:4d:eb:df:a6:48 github.com,207.97.227.239 (RSA)
</span><span class='line'>+--[ RSA 2048]----+
</span><span class='line'>|        .        |
</span><span class='line'>|       + .       |
</span><span class='line'>|      . B .      |
</span><span class='line'>|     o * +       |
</span><span class='line'>|    X * S        |
</span><span class='line'>|   + O o . .     |
</span><span class='line'>|    .   E . o    |
</span><span class='line'>|       . . o     |
</span><span class='line'>|        . .      |
</span><span class='line'>+-----------------+</span></code></pre></td></tr></table></div></figure>


<p>try figuring that out without using the randomart</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>2048 1b:b8:c2:f4:7b:b5:44:be:fa:64:d6:eb:e6:2f:b8:fa 192.168.1.84 (RSA)
</span><span class='line'>2048 16:27:ac:a5:76:28:2d:36:63:1b:56:4d:eb:df:a6:48 gist.github.com,207.97.227.243 (RSA)
</span><span class='line'>2048 a2:95:9a:aa:0a:3e:17:f4:ac:96:5b:13:3b:c8:0a:7c 192.168.2.17 (RSA)
</span><span class='line'>2048 16:27:ac:a5:76:28:2d:36:63:1b:56:4d:eb:df:a6:48 github.com,207.97.227.239 (RSA)</span></code></pre></td></tr></table></div></figure>


<p>Also if you add this to your ~/.ssh/config:</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>VisualHostKey yes</span></code></pre></td></tr></table></div></figure>


<p>Or add this option to your ssh command</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>$ssh -o VisualHostKey=yes your.host.name</span></code></pre></td></tr></table></div></figure>


<p>you will see your servers randomart each time you login (handy to ensure
you are deploying to the right server, hehe).</p>

<p>You can thank me later (or <a href="http://www.undeadly.org/cgi?action=article&amp;sid=20080615022750&amp;mode=expanded&amp;count=13">this guys</a>).
Or you know what, better give them a beer, they have earned it.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Vim Superpowers]]></title>
    <link href="http://sanscourier.com/blog/2011/08/30/vim-superpowers/"/>
    <updated>2011-08-30T01:38:00-07:00</updated>
    <id>http://sanscourier.com/blog/2011/08/30/vim-superpowers</id>
    <content type="html"><![CDATA[<p>Writing code with Vim is like playing the piano, when used by a beginner
it looks like a nice toy to keep yourself entertained, but when used by a
professional, you know this is one of the few instruments that allows you
to write whole Symphonies.</p>

<p><a href="http://www.viemu.com/vi-vim-cheat-sheet.gif">This is your keyboard now</a></p>

<p><a href="http://yannesposito.com/Scratch/en/blog/Learn-Vim-Progressively/">Yann espositos Vim guide</a>
is a great guide for those who want to tune their fingers and start
writing awesome code. Worth a read or two.</p>

<p><a href="http://nathanmlong.com/vanquish/">Nathan says Vim tastes like Unix</a> I agree.</p>

<p>And you could always learn the <a href="http://www.moolenaar.net/habits.html">Seven Habits of Effective text editing</a></p>

<p>Wondering about git plugins and stuff? <a href="https://github.com/carlhuda/janus">Try Janus</a></p>

<p>And don&#8217;t worry, no one completely <a href="http://stackoverflow.com/questions/1218390/what-is-your-most-productive-shortcut-with-vim/1220118#1220118">groks vim</a></p>

<p>About you Emacs&#8230; Yeah I saw you <a href="http://jtnimoy.net/workviewer.php?q=178">in that movie</a> but don&#8217;t worry,
we&#8217;ll see each other in the sequel.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Meta: How to Setup a Rockstar Approved Box]]></title>
    <link href="http://sanscourier.com/blog/2011/08/28/meta-how-to-setup-a-rockstar-approved-box/"/>
    <updated>2011-08-28T02:03:00-07:00</updated>
    <id>http://sanscourier.com/blog/2011/08/28/meta-how-to-setup-a-rockstar-approved-box</id>
    <content type="html"><![CDATA[<p>Are you till using a PHP blog under apache as if it were still in 1998?
Do you need an awesome C10k Approved host that can also host Python / Rails
and any other framework you might need?</p>

<p>Follow this guide to setup a Rockstar production server that will make
you look like one (Step two after getting a cool domain name to become a <a href="http://blip.tv/railsconf/railsconf-09-chris-wanstrath-how-to-become-a-famous-rails-developer-ruby-rockstar-or-code-ninja-2096742">rockstar dev</a>).</p>

<h2>Grow up and break with your cheap hosting</h2>

<p>Your cheap PHP hosting company is actually not so cheap, you can get
a full linux box for the same amount of money, plus you can
configure it to be a lean, mean, bit serving machine, that
can withstand any Slashdot effect. (Reddit effect for you youngsters)</p>

<p>Some awesome providers:
<em><a href="http://slicehost.com">Slicehost</a>
</em><a href="http://aws.amazon.com/ec2/">Amazon EC2</a>
<em><a href="http://linode.com">Linode</a>
</em><a href="http://heroku.com">Heroku</a>
<em><a href="http://joyent.com">Joyent</a>
</em><a href="http://appengine.google.com">Google  App Engine</a></p>

<h2>Install Nginx</h2>

<p>After installing a vanilla Ubuntu:</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>$ sudo apt-get install nginx</span></code></pre></td></tr></table></div></figure>


<h2>Setup Nginx</h2>

<p>Edit /etc/nginx/sites-enabled/sanscourier.conf</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
<span class='line-number'>15</span>
<span class='line-number'>16</span>
<span class='line-number'>17</span>
<span class='line-number'>18</span>
<span class='line-number'>19</span>
<span class='line-number'>20</span>
<span class='line-number'>21</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>server {
</span><span class='line'>          listen   80;
</span><span class='line'>          server_name  sanscourier.com www.sanscourier.com;
</span><span class='line'>
</span><span class='line'>          access_log  /var/log/access.log;
</span><span class='line'>
</span><span class='line'>          location / {
</span><span class='line'>                  root   ~/sanscourier;
</span><span class='line'>                  index  index.html index.htm;
</span><span class='line'>          }
</span><span class='line'>          # redirect server error pages to the static page /50x.html
</span><span class='line'>
</span><span class='line'>          error_page  404  /404.html;
</span><span class='line'>          location = /404.html {
</span><span class='line'>                  root   ~/sanscourier.com;
</span><span class='line'>          }
</span><span class='line'>          error_page  500 502 503 504  /50x.html;
</span><span class='line'>          location = /50x.html {
</span><span class='line'>                  root   ~/sanscourier.com;
</span><span class='line'>          }
</span><span class='line'>  }</span></code></pre></td></tr></table></div></figure>


<h2>Setup Octopress</h2>

<p>Before the only reason to use a PHP blog was twofold:
1. To have your posts &#8220;safely&#8221; stored in a database.
2. So your readers can comment on your posts.</p>

<p>But as any old school sysadmin can tell you, scaling
this setup starts easily and then becomes a <a href="http://net.tutsplus.com/articles/scaling-wordpress-for-hi-traffic/">big, boring chore</a> involving CDNs, caches and other dirty tricks.</p>

<p>Octopress deals with this in an elegant manner:
1. Use a secure Git repo to store our posts.
2. Use disqus for commenting.</p>

<p>And lets face it, <a href="http://www.rubyinside.com/jekyll-a-ruby-powered-static-site-generator-2716.html">static websites make you look
cool</a>.</p>

<h3>Setup rvm</h3>

<p>In your server (or linux box or Mac running <a href="https://github.com/mxcl/homebrew">homebrew</a>)
(Why RVM? for the same reason we use Python&#8217;s virtualenvs, don&#8217;t dump
where you eat, oh and yes <a href="https://github.com/kennethreitz/osx-gcc-installer">you don&#8217;t need XCode nowadays</a>.</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>$bash &lt; &lt;(curl -s https://rvm.beginrescueend.com/install/rvm)
</span><span class='line'>  $rvm list known #(choose the latest one in the MRI list)
</span><span class='line'>  $rvm install 1.9.3
</span><span class='line'>  $rvm use 1.9.3
</span><span class='line'>
</span><span class='line'>  $mkdir my_octopress_site
</span><span class='line'>  $cd my_octopress_site
</span><span class='line'>  $git init
</span><span class='line'>  $git remote add octopress git://github.com/imathis/octopress.git
</span><span class='line'>  $git pull octopress master
</span><span class='line'>  $git remote add origin your/repository/url
</span><span class='line'>  $git push origin master
</span><span class='line'>></span></code></pre></td></tr></table></div></figure>


<h3>Setup octopress</h3>

<p>Why Ruby? Because rubyists are rockstars thats why. (Actually I&#8217;m mostly
a Python guy, but who cares anyway? I was using HP before! so go and try the right tool for the job).</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
<span class='line-number'>15</span>
<span class='line-number'>16</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>$mkdir my_octopress_site
</span><span class='line'>  $cd my_octopress_site
</span><span class='line'>  $git init
</span><span class='line'>  $git remote add octopress git://github.com/imathis/octopress.git
</span><span class='line'>  $git pull octopress master
</span><span class='line'>  $git remote add origin your/repository/url
</span><span class='line'>  $git push origin master
</span><span class='line'>  $rvm rvmrc trust
</span><span class='line'>  $rvm reload
</span><span class='line'>  $gem install bundler
</span><span class='line'>  $gem install rake
</span><span class='line'>  $bundle install
</span><span class='line'>  $rake install
</span><span class='line'>  $git add .
</span><span class='line'>  $git commit -m 'Installed Octopress theme'
</span><span class='line'>  $git push</span></code></pre></td></tr></table></div></figure>


<h3>Write something and deploy it.</h3>

<p><a href="http://octopress.org/docs/blogging/">You shoulb probaly read this instead</a>.
But here&#8217;s a quick intro:</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>$rake new_post["whatever"]
</span><span class='line'>Creating new post: source/_posts/[blah].markdown
</span><span class='line'>  $vim source/_posts/[blah].markdown #or emacs you berkeley hippie
</span><span class='line'>  $rake generate
</span><span class='line'>  $rake deploy</span></code></pre></td></tr></table></div></figure>


<p>Don&#8217;t forget to deploy to your ~/sanscourier.com/ folder or some other safe place.</p>

<h2>Meet Gunicorn</h2>

<p>Did you know you can have a production ready server for Django in four
simple steps? <a href="http://ericholscher.com/blog/2010/aug/16/lessons-learned-dash-easy-django-deployment/">Please thank Eric Holscher for the tip</a></p>

<ul>
<li>Install django in a virtualenv</li>
</ul>


<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>$easy_install virtualenv
</span><span class='line'>  $virtualenv env/
</span><span class='line'>  $. env/bin/activate
</span><span class='line'>  $python easy_install pip
</span><span class='line'>  $python pip install django
</span><span class='line'>  $ython pip install gunicorn</span></code></pre></td></tr></table></div></figure>


<ul>
<li>Add &#8216;gunicorn&#8217; to your installed apps</li>
<li>./manage.py run_gunicorn -w 3 -/etc/gunicorn.conf.py</li>
</ul>


<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>logfile = "/var/log/gunicorn.log"
</span><span class='line'>  bind = "127.0.0.1:1337"
</span><span class='line'>  workers = 3
</span><span class='line'>  proc_name = "Django Revel"
</span><span class='line'>  worker_class = "eventlet"</span></code></pre></td></tr></table></div></figure>


<h3>And make nginx forward traffic to it</h3>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>server {
</span><span class='line'>          listen 80;
</span><span class='line'>          server_name  example.com;
</span><span class='line'>          access_log  /var/log/nginx/example.log;
</span><span class='line'>
</span><span class='line'>          location / {
</span><span class='line'>                  proxy_pass   http://127.0.0.1:1337;
</span><span class='line'>          }
</span><span class='line'>  }</span></code></pre></td></tr></table></div></figure>



]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Buzz isn't Wave in disguise but an Open social experiment (And what makes it tick)]]></title>
    <link href="http://sanscourier.com/blog/2010/02/11/buzz-isnt-wave-in-desguise-but-an-open-social-experiment-and-what-makes-it-tick/"/>
    <updated>2010-02-11T23:06:15-08:00</updated>
    <id>http://sanscourier.com/blog/2010/02/11/buzz-isnt-wave-in-desguise-but-an-open-social-experiment-and-what-makes-it-tick</id>
    <content type="html"><![CDATA[<p>As expected Google has done it again, they&#8217;ve released a nice new tool and now everyone is talking about it.
And that&#8217;s great, but the problem is that like just like it happened with Google Wave few people understand
its Technology and why it was created.</p>

<p><a id="aptureLink_qcZ7hEEupp" href="http://blogs.hbr.org/trapani/2009/10/google-wave-offers-a-bold-solu.html">Google Wave was Created to Modernize Email</a> just as easy as that. Google Engineers thought email was slow so they used an <a id="aptureLink_BgzYHnAzOT" href="http://www.jasonkolb.com/weblog/2009/09/why-google-wave-is-the-coolest-thing-since-sliced-bread.html#more">instant messaging protocol called XMPP</a> that allows you to have your own private Google Talk and wrapped some &#8220;Cool but no one understand&#8221; features like video embedding, instant polls and similar.</p>

<p>Why Google did this? Easy they want to become a platform where all online collaboration is done, did it work, not so much mainly of UX errors.</p>

<p>Now, what about Buzz?</p>

<p>Well Buzz is based on a publishing protocol called <a id="aptureLink_Ct4Jbn6AdJ" href="http://en.wikipedia.org/wiki/PubSubHubbub">PubSubHubBub</a> (and that&#8217;s why you don&#8217;t let engineers come with snappy names) created for a single task, getting blog posts out is slow and boring.</p>

<p>First you put a post on your blog and then your subscribed users read the small version in their <a id="aptureLink_qnHeW5S4oE" href="http://en.wikipedia.org/wiki/RSS">RSS feeds</a> and if they want to talk about it they click on the page, go to the section and so and so. Its Boring.</p>

<p>The main reason its boring is that the users have to go and fetch the RSS Feed any given time, and the truth it would be quite nicer
if it worked like the <a id="aptureLink_V73h3mngRu" href="http://en.wikipedia.org/wiki/Push%20technology">Push Messaging</a> in cellphones, it notifies you only each time there is something new.</p>

<p>So PSHBB servers do exactly that, and with the nice feature that it can get synchronized among many servers, freeing the developer the hassle of scaling and similar chores.</p>

<p>So here Google is trying to be that, the center hub where all action takes place and it looks good.
Specially because they decided to be <a id="aptureLink_TotBdSBRJm" href="http://en.wikipedia.org/wiki/Disruptive%20technology">disruptive</a> they decided that your network, your friends are yours and not property of some evil corporation (if being disruptive isn&#8217;t) and they made this by using <a id="aptureLink_XsRjKF5qGk" href="http://en.wikipedia.org/wiki/OpenSocial">OpenSocial</a> and other <a id="aptureLink_CXuaTvXzqv" href="http://en.wikipedia.org/wiki/Open%20standard">Open Data standards</a>.</p>

<p>What does this mean to us users?
It means that we don&#8217;t have to add our friends to Facebook to play Raise a pet/alien/farm, if they have Gmail they already can.</p>

<p>What does this mean to Google?
That they now have this platform for OpenSocial apps,  <a id="aptureLink_qOaigx5HCu" href="http://www.readwriteweb.com/archives/google_buzz_geolocation_location_sharing_social_network.php">location based apps</a> (yes, <a id="aptureLink_xCIRRudZo3" href="http://www.youtube.com/watch?v=Q-Oq-9enE-k">Google latitude</a> was just like Wave, a cool tech without use) and personal publishing.</p>

<p>And where does this leave Twitter and Facebook? Well Twitter has a good established brand and lots of loyal customers (plus also many apps like foursquare, formspring and others) but just like Facebook everything comes down to privacy.</p>

<p>For users Twitter is like a bar (or starbucks), Facebook is, well a face book of your buddies and your blog is your support group where does Google Buzz fit here?</p>

<p>Can it be a single destination where all this activities happen?
Not sure.</p>

<p>But one thing I&#8217;m sure, this isn&#8217;t wave, this is not another try to kill email, this is a try to change social media.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[How to center a geodjango map in the admin.site]]></title>
    <link href="http://sanscourier.com/blog/2010/02/01/42/"/>
    <updated>2010-02-01T23:37:19-08:00</updated>
    <id>http://sanscourier.com/blog/2010/02/01/42</id>
    <content type="html"><![CDATA[<p>Just a quick snippet on how to center a geodjango map in the admin since I&#8217;ve seen some confusion regarding <a href="http://code.djangoproject.com/ticket/11094">this ticket</a><script src="http://gist.github.com/292267.js"></script></p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Barcamp Mexico and Why the noise Matters (or Never mind the Valley, Here we have Tequila)]]></title>
    <link href="http://sanscourier.com/blog/2010/01/22/barcamp-mexico-and-why-the-noise-matters-or-never-mind-the-valley-here-we-have-tequila/"/>
    <updated>2010-01-22T15:33:19-08:00</updated>
    <id>http://sanscourier.com/blog/2010/01/22/barcamp-mexico-and-why-the-noise-matters-or-never-mind-the-valley-here-we-have-tequila</id>
    <content type="html"><![CDATA[<p>The original idea for this post was to talk about the tech communities in Mexico and how it&#8217;s starting to become an interesting ecosystem where great ideas are starting to grow.</p>

<p>But, something happened this week in one of this communities that it&#8217;s really worth to talk about.</p>

<p>The disapproval by the community of the registry of the brand &#8220;Barcamp&#8221; in Mexico.</p>

<p>Everything began with a <a href="http://twitter.com/_Hyde/status/8007623571" target="_blank">post</a> by <a id="aptureLink_LuOQ6MelrI" href="http://twitter.com/_hyde">@_Hyde</a> where he linked a document where <a id="aptureLink_rKAPeFldRh" href="http://twitter.com/paw">@paw</a> requested to legally own the brand Barcamp in Mexico and have all the legal power to all matters related (registering herself as the owner of those legal rights).</p>

<p>Apparently what @paw is trying to do is to become (as it is common in many open source software) to become the &#8221;<a id="aptureLink_hHju4LpOh2" href="http://en.wikipedia.org/wiki/Benevolent%20Dictator%20For%20Life">Benevolent dictator for life</a>&#8221; (like Guido van Rossum or Larry Wall) of this event in Mexico.</p>

<p>And the community didn&#8217;t like it, specially since there have been other (And much more successful) events like <a id="aptureLink_Bk6yxUfoJo" href="http://tequilavalley.com/">Destilando Web</a>, <a id="aptureLink_7fM0txrqJT" href="http://shdhmc.pbworks.com/">SHDHMC</a>, etc. that never felt the necessity of branding and even their organizers (<a id="aptureLink_vJ8V0p0rYV" href="http://twitter.com/mpastrana">@mpastrana</a>, <a id="aptureLink_9dNSUSPGOL" href="http://twitter.com/lauradark">@lauradark</a>, <a id="aptureLink_9mXflBxkyO" href="http://twitter.com/cesarsalazar">@cesarsalazar</a>, <a id="aptureLink_OoFj6M9Lxz" href="http://twitter.com/arturogarrido">@arturogarrido</a>, <a id="aptureLink_giFTTNnlhd" href="http://twitter.com/adanvecindad">@adanvecindad</a>, <a id="aptureLink_818BOcngUb" href="http://twitter.com/isopixel">@isopixel</a>) always have said that they promote an decentralized control of them; letting the own community chose what this events will be about, and allowing to similar events to be taken place.</p>

<p><a id="aptureLink_NHbAJaTWt6" href="http://en.wikipedia.org/wiki/Chris%20Messina%20%28open%20source%20advocate%29">Chris Messina</a> the creator of <a id="aptureLink_uJoAAbMnPH" href="http://en.wikipedia.org/wiki/BarCamp">Barcamp</a> stated that:</p>

<blockquote>BarCamp has been and will continue to be, a <a href="http://factoryjoe.com/blog/2006/05/29/why-barcamp-is-a-community-mark/" target="_blank">Community Mark</a>. The <a href="http://barcamp.org/">BarCamp community</a> is a far better mechanism for detecting fraud and shutting it down than any obnoxiously-expensive legal department.</blockquote>


<p>And in an email to @paw he stated the following:</p>

<blockquote>That said, my continued concern about registering a BarCamp trademak is that does two things:

1 . It forces you to actually enforce the trademark. While this may not be a huge burden, per se. at least under US law. If you DON&#8217;T enforce your trademark, then you lose it. Are you ready/willing/able to enforce the BarCamp trademark if you find someone willfully violating it?

2. It can also create a chilling effect where Barcamps that otherwise would have been organized are not for the fear of having to pay to license the BarCamp name.

[&#8230;]

Lastly in those cases where there are abuses have you reached out to the organizers and explained why they shouldn&#8217;t be calling their events BarCamps? Have you taken a more diplomatic way? I&#8217;ve historically found that that path works just as well &#8211; If not better&#8211; than the more controversial legal path.

What do you say?</blockquote>


<p>After all this @paw in an interview in the <a id="aptureLink_JkkDHXownT" href="http://latenightshow.vg/">Akirareiko Late Night show</a> stated that her intention was to create an non profit with the objective of protecting this brand. And she agreed to the <a href="http://www.paolavillarreal.name/2010/01/20/los-motivos-para-registrar-barcamp-en-mexico/" target="_blank">following compromises</a>:</p>

<blockquote>1. Help in the organization of the non profit

2. Make and pay for the paperwork required for it and hand over the BarCamp trademark to it.

3. Create tools that help the organization of new BarCamps

4. To quit the non profit once it&#8217;s <em>correctly</em> established.</blockquote>


<p>The truth is, in the end all this is just noise regarding the BarCamp event, and in a way is bringing back to life a Community that wasn&#8217;t mature enough to become an Non Profit but was mature enough as Chris Messina said (and also @adanvecindad and other twitters) can take care of themselves.</p>

<p>All this noise matters because like it happens in <a id="aptureLink_Qk7CombANF" href="http://en.wikipedia.org/wiki/Dither">Dither</a> with audio/image processing, it allows us to see patterns, to see around all this noise what&#8217;s really important.</p>

<p>And what&#8217;s important here is that in Mexico there are strong Tech Communities that get us closer to our true goal, to create a true Tequila Valley where great ideas are born, made and will make Mexico a stronger better Country.</p>

<p>References:</p>

<p><a href="http://frontera42.com/2010/01/21/barcamp-de-todos/">http://frontera42.com/2010/01/21/barcamp-de-todos/</a></p>

<p><a href="http://barcamp.org/El%20futuro%20de%20Barcamp%20en%20Mexico">http://barcamp.org/El%20futuro%20de%20Barcamp%20en%20Mexico</a></p>

<p><a href="http://www.paolavillarreal.name/2010/01/20/los-motivos-para-registrar-barcamp-en-mexico/">http://www.paolavillarreal.name/2010/01/20/los-motivos-para-registrar-barcamp-en-mexico/</a></p>

<p><a href="http://www.facebook.com/group.php?gid=259716561218">http://www.facebook.com/group.php?gid=259716561218</a></p>

<p><a href="http://laurahoyos.com/2010/01/21/seguimos-trabajando/">http://laurahoyos.com/2010/01/21/seguimos-trabajando/</a></p>

<p><a href="http://twitpic.com/z173b">http://twitpic.com/z173b</a></p>

<p>Updates: <a id="aptureLink_yks0lXDk16" href="http://neverland.com.mx/2010/01/barcamp-es-apertura/">Cesar Salazar&#8217;s meeting with Chris Messina</a> (In Spanish)</p>

<p>Examples of noise: <a id="aptureLink_UbH2hs9Vbo" href="http://en.wikipedia.org/wiki/TechCrunch">Techcrunch</a>, <a id="aptureLink_oEi3AJ3ds9" href="http://en.wikipedia.org/wiki/ReadWriteWeb">ReadWriteWeb</a> (<a href="http://www.readwriteweb.com/readwritestart/2009/07/startup-video-never-mind-the-v.php">Boulder</a>,<a href="http://www.readwriteweb.com/readwritestart/2010/01/never-mind-the-valley-heres-la.php"> Los Angeles, </a><a href="http://www.readwriteweb.com/readwritestart/2010/01/never-mind-the-valley-heres-au.php">Austin</a>), <a id="aptureLink_hAQ201x4YI" href="http://en.wikipedia.org/wiki/History%20of%20Wikipedia">Wikipedia scandals</a>, etc.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Why "Sans Courier"?]]></title>
    <link href="http://sanscourier.com/blog/2010/01/06/hello-world/"/>
    <updated>2010-01-06T03:21:17-08:00</updated>
    <id>http://sanscourier.com/blog/2010/01/06/hello-world</id>
    <content type="html"><![CDATA[<p>Courier is the most common <a href="http://hivelogic.com/articles/top-10-programming-fonts" target="_blank">Programmers Font</a>, but who likes Common?</p>

<p>Courier is also the English word for Messenger, Do we really need them?</p>

<p>Hence, Sans Courier 100% Sans* Messengers, Serifs or Courier</p>

<p>*Sans: Without.</p>
]]></content>
  </entry>
  
</feed>
