<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0"><channel><atom:link rel="hub" href="http://tumblr.superfeedr.com/" xmlns:atom="http://www.w3.org/2005/Atom"/><description>Um blog sobre desenvolvimento e tudo mais.</description><title>Tarsis Azevedo</title><generator>Tumblr (3.0; @tarsisazevedo)</generator><link>http://blog.tarsisazevedo.com/</link><item><title>[review] Pro Git</title><description>&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_m0ybymlKip1qhht0x.jpg" alt=""/&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.amazon.com/gp/product/1430218339/ref=as_li_ss_tl?ie=UTF8&amp;amp;tag=blogtechounao-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=1430218339" target="_blank"&gt;Pro Git&lt;/a&gt; é um livro muito bom se voce ja conhece um pouco de git e quer se aprofundar mais, ou se voce nao conhece e quer conhecer bem.&lt;/p&gt;

&lt;p&gt;Nele voce vai aprender sobre controle de versao distribuido, workflows para melhor utilização dos recursos do git, melhores praticas com git. Alem disso voce aprenderá a instalar e configurar um servidor git, a como gerenciar e colaborar com projetos e inclusive a extender o git.&lt;/p&gt;

&lt;p&gt;O livro pode ser lido capitulo por capitulo se voce nao sabe nada sobre &lt;a href="http://en.wikipedia.org/wiki/Distributed_Concurrent_Versions_System" target="_blank"&gt;Controle de versao distribuido&lt;/a&gt;. Ou voce pode ler somente os capitulos que lhe interessam, se voce ja tem um conhecimento basico do git.&lt;/p&gt;

&lt;h1&gt;Onde Comprar?&lt;/h1&gt;

&lt;p&gt;Na &lt;a href="http://www.amazon.com/gp/product/1430218339/ref=as_li_ss_tl?ie=UTF8&amp;amp;tag=blogtechounao-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=1430218339" target="_blank"&gt;amazon&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Ou voce pode ler no proprio &lt;a href="http://progit.org/" target="_blank"&gt;site do livro&lt;/a&gt;. Ou voce pode baixar do &lt;a href="https://github.com/progit/progit" target="_blank"&gt;github&lt;/a&gt;.&lt;/p&gt;</description><link>http://blog.tarsisazevedo.com/post/19371733063</link><guid>http://blog.tarsisazevedo.com/post/19371733063</guid><pubDate>Thu, 15 Mar 2012 21:36:07 -0300</pubDate><category>book review</category><category>pro git</category><category>git</category><category>amazon</category></item><item><title>Aprendendo C - formatação do printf</title><description>&lt;p&gt;Recentemente comecei a aprender &lt;a href="http://en.wikipedia.org/wiki/C_(programming_language)" target="_blank"&gt;C&lt;/a&gt;. Sim eu não sei &lt;code&gt;C&lt;/code&gt;, não tive na faculdade e sempre senti falta de saber melhor como as coisas funionavam por dentro do computador, já que minha maior experiencia em programação é com &lt;a href="http://python.org/" target="_blank"&gt;python&lt;/a&gt;, que é uma &lt;a href="http://en.wikipedia.org/wiki/Very_high-level_programming_language" target="_blank"&gt;linguagem de altissimo nivel&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Com &lt;code&gt;C&lt;/code&gt; voce trabalha mais perto da maquina, direto com bytes, alocação de memoria, tem que fazer as estruturas de dados.&lt;/p&gt;

&lt;p&gt;E pra aprender eu escolhi estudar pelo livro &lt;a href="http://c.learncodethehardway.org" target="_blank"&gt;Learn C The Hard Way&lt;/a&gt; do &lt;a href="http://zedshaw.com/" target="_blank"&gt;Zed Shaw&lt;/a&gt;. É um livro que te instiga a estudar os conceitos por voce mesmo, ensina em cima de exemplos bem praticos e eficientes, te adiciona ao ecossistema da linguagem, apresentando ferramentas e tecnicas que vao te ajudar a pensar em &lt;code&gt;C&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Uma das coisas que ele me instigou a estudar foi todos os possiveis formatos e suas variações para o &lt;code&gt;printf&lt;/code&gt;, a função que escreve na saida padrão (o &lt;code&gt;print&lt;/code&gt; do &lt;code&gt;python&lt;/code&gt;).&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;#include &amp;lt;stdio.h&amp;gt;

int main() {
    printf("%s\n", "Hello World!");

    return 0;
}

#output

Hello World!
&lt;/code&gt;&lt;/pre&gt;

&lt;h2&gt;formatando a saida do printf&lt;/h2&gt;

&lt;p&gt;O &lt;code&gt;printf&lt;/code&gt; recebe 2 parametros: uma &lt;code&gt;string&lt;/code&gt; com os formatos mapeados e um minimo de valores igual ao mapeado.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;#include &amp;lt;stdio.h&amp;gt;

int main() {
    printf("%d %s\n", 1, "Hello again!");

    return 0;
}

#output

1 Hello again!
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Esta função é capaz de imprimir diferentes tipos de dados (&lt;code&gt;char&lt;/code&gt;, &lt;code&gt;string&lt;/code&gt;, &lt;code&gt;int&lt;/code&gt;, &lt;code&gt;float&lt;/code&gt;, &lt;code&gt;octal&lt;/code&gt;, &lt;code&gt;hexa&lt;/code&gt;, &lt;a href="http://www.cplusplus.com/reference/clibrary/cstdio/printf/" target="_blank"&gt;outros aqui&lt;/a&gt;) de acordo com a formatação que voce usar.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;#include &amp;lt;stdio.h&amp;gt;

int main() {
    printf("Char: %c %c \n", 'b', 65); // char pode receber um int referente a Tabela ASCII (&lt;a href="http://www.asciitable.com/" target="_blank"&gt;http://www.asciitable.com/&lt;/a&gt;).
    printf("Decimais: %d %ld\n", 1988, 650000L);
    printf("Precedido com espaços em branco: %10d\n", 1988);
    printf("Precedido com zeros: %010d\n", 1988);
    printf("Numeros com base diferente: %d %x %o %#x %#o \n", 100, 100, 100, 100, 100);
    printf("Floats: %4.2f %+.0e %E \n", 3.14554, 3.3214, 3.1234);
    printf("Truque de tamanho: %*d\n", 5, 10);
    printf("String simples %s\n", "Oi!");


    return 0;
}

#output
Char: b A
Decimais: 1988 650000
Precedido com espaços em branco:       1988
Precedido com zeros: 0000001988
Numeros com base diferente: 100 64 144 0x64 0144
Floats: 3.15 +3e+00 3.123400E+00
Truque de tamanho:    10
String simples Oi!
&lt;/code&gt;&lt;/pre&gt;

&lt;hr&gt;&lt;h2&gt;Tabela de Formatos&lt;/h2&gt;

&lt;blockquote&gt;
  &lt;p&gt;Os formatos seguem o seguinte prototipo: %[&lt;code&gt;flags&lt;/code&gt;][&lt;code&gt;tamanho&lt;/code&gt;][&lt;code&gt;.precisao&lt;/code&gt;][&lt;code&gt;quantidade&lt;/code&gt;]&lt;code&gt;formato&lt;/code&gt;&lt;/p&gt;
  
  &lt;p&gt;Flags, largura, .precisão, tamanho são opcionais.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;Formatos:&lt;/h3&gt;

&lt;table class="table table-bordered"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th&gt;Formato&lt;/th&gt;
      &lt;th&gt;Saida&lt;/th&gt;
      &lt;th&gt;Exemplo&lt;/th&gt;
    &lt;/tr&gt;&lt;tr&gt;&lt;td&gt;c&lt;/td&gt;
      &lt;td&gt;char&lt;/td&gt;
      &lt;td&gt;a&lt;/td&gt;
    &lt;/tr&gt;&lt;tr&gt;&lt;td&gt;d ou i&lt;/td&gt;
      &lt;td&gt;signed int&lt;/td&gt;
      &lt;td&gt;1&lt;/td&gt;
    &lt;/tr&gt;&lt;tr&gt;&lt;td&gt;e&lt;/td&gt;
      &lt;td&gt;Notação Cientifica usando o caracter e&lt;/td&gt;
      &lt;td&gt;3.9265e+2&lt;/td&gt;
    &lt;/tr&gt;&lt;tr&gt;&lt;td&gt;E&lt;/td&gt;
      &lt;td&gt;Notação Cientifica usando o caracter E&lt;/td&gt;
      &lt;td&gt;3.9265E+2&lt;/td&gt;
    &lt;/tr&gt;&lt;tr&gt;&lt;td&gt;f&lt;/td&gt;
      &lt;td&gt;float&lt;/td&gt;
      &lt;td&gt;3.4&lt;/td&gt;
    &lt;/tr&gt;&lt;tr&gt;&lt;td&gt;g&lt;/td&gt;
      &lt;td&gt;usa o menor numero possivel de f e e&lt;/td&gt;
      &lt;td&gt;3.54&lt;/td&gt;
    &lt;/tr&gt;&lt;tr&gt;&lt;td&gt;G&lt;/td&gt;
      &lt;td&gt;usa o menor numero possivel de f e E&lt;/td&gt;
      &lt;td&gt;3.54&lt;/td&gt;
    &lt;/tr&gt;&lt;tr&gt;&lt;td&gt;o&lt;/td&gt;
      &lt;td&gt;unsigned octal&lt;/td&gt;
      &lt;td&gt;610&lt;/td&gt;
    &lt;/tr&gt;&lt;tr&gt;&lt;td&gt;s&lt;/td&gt;
      &lt;td&gt;string&lt;/td&gt;
      &lt;td&gt;Hello World&lt;/td&gt;
    &lt;/tr&gt;&lt;tr&gt;&lt;td&gt;u&lt;/td&gt;
      &lt;td&gt;unsigned int&lt;/td&gt;
      &lt;td&gt;2345&lt;/td&gt;
    &lt;/tr&gt;&lt;tr&gt;&lt;td&gt;x&lt;/td&gt;
      &lt;td&gt;unsigned hexa&lt;/td&gt;
      &lt;td&gt;7fa&lt;/td&gt;
    &lt;/tr&gt;&lt;tr&gt;&lt;td&gt;X&lt;/td&gt;
      &lt;td&gt;unsigned hexa com letras maiusculas&lt;/td&gt;
      &lt;td&gt;7FA&lt;/td&gt;
    &lt;/tr&gt;&lt;tr&gt;&lt;td&gt;p&lt;/td&gt;
      &lt;td&gt;ponteiro de endereço&lt;/td&gt;
      &lt;td&gt;B800:0000&lt;/td&gt;
    &lt;/tr&gt;&lt;tr&gt;&lt;td&gt;n&lt;/td&gt;
      &lt;td&gt;Nada impresso. O argumento deve ser um ponteiro para um int assinado, onde o número de caracteres escritos até então é armazenado.&lt;/td&gt;
      &lt;td&gt;&lt;/td&gt;
    &lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%&lt;/td&gt;
      &lt;td&gt;% seguido de outro % irá printar % na saida&lt;/td&gt;
      &lt;td&gt;%&lt;/td&gt;
    &lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;hr&gt;&lt;h3&gt;Flags&lt;/h3&gt;

&lt;table class="table table-bordered"&gt;&lt;tbody&gt;&lt;!-- Results table headers --&gt;&lt;tr&gt;&lt;th&gt;Flag&lt;/th&gt;
      &lt;th&gt;Descrição&lt;/th&gt;
    &lt;/tr&gt;&lt;tr&gt;&lt;td&gt;-&lt;/td&gt;
      &lt;td&gt;Alinhado a esquerda dentro do tamanho definido. Alinhamento a direita é o padrão (veja a tabela de formatação de tamanho).&lt;/td&gt;
    &lt;/tr&gt;&lt;tr&gt;&lt;td&gt;+&lt;/td&gt;
      &lt;td&gt;Força a o resultado ser mostrado com um simbolo de + ou -. Por padrão, somente numeros negativos são mostrados com -.&lt;/td&gt;
    &lt;/tr&gt;&lt;tr&gt;&lt;td&gt;#&lt;/td&gt;
      &lt;td&gt;Usado com o, x e X indica que o valor será precedido de 0, 0x ou 0X  respectivamente, para valores diferentes de 0.&lt;br/&gt;Usado com e, E e f, força o output para mostrar um ponto decimal mesmo sem numeros depois dele. Por padrão, se nenhum numero estiver depois do ponto decimal ele nao é mostrado.&lt;br/&gt;Usado com g e G o resultado é mostrado com zeros a direita.&lt;/td&gt;
    &lt;/tr&gt;&lt;tr&gt;&lt;td&gt;0&lt;/td&gt;
      &lt;td&gt;Numero 0 é printado ao invés de espaços em branco quando o tamanho é especificado. (veja a tabela de formatação de tamanho).&lt;/td&gt;
    &lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;hr&gt;&lt;h3&gt;Modificadores de Tamanho&lt;/h3&gt;

&lt;table class="table table-bordered"&gt;&lt;tbody&gt;&lt;!-- Results table headers --&gt;&lt;tr&gt;&lt;th&gt;Tamanho&lt;/th&gt;
      &lt;th&gt;Descrição&lt;/th&gt;
    &lt;/tr&gt;&lt;tr&gt;&lt;td&gt;(Numero)&lt;/td&gt;
      &lt;td&gt;Número minimo de caracteres a serem printados. Se o valor a ser printado for menor que o numero, será adicionado espaços em branco para atigir o numero limite. O valor nao é trucado caso seja maior que o limite.&lt;/td&gt;
    &lt;/tr&gt;&lt;tr&gt;&lt;td&gt;*&lt;/td&gt;
      &lt;td&gt;O tamanho nao é especificado na formatação da string, mas é passado como argumento precedendo o argumento a ser formatado&lt;/td&gt;
    &lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;hr&gt;&lt;h3&gt;Modificadores de Precisão&lt;/h3&gt;

&lt;table class="table table-bordered"&gt;&lt;tbody&gt;&lt;!-- Results table headers --&gt;&lt;tr&gt;&lt;th&gt;.precisão&lt;/th&gt;
      &lt;th&gt;Descrição&lt;/th&gt;
    &lt;/tr&gt;&lt;tr&gt;&lt;td&gt;.numero&lt;/td&gt;
      &lt;td&gt;Para formatos inteiros (i, d, u, o, x, X): precisão especifica o numero minimo de digitos a serem mostrados. Se a quantidade de digitos for menor que o limite, entao serão acrescentados zeros ao final. O valor nao é truncado se a quantidade de digitos for maior que o limite.  Precisão 0 significa que o nenhum valor é printado se o numero for 0.&lt;br/&gt;&lt;br/&gt;Para formatos e, E, f: é o numero de digitos que serão mostrados depois do ponto decimal.&lt;br/&gt;&lt;br/&gt;Para formatos g e G: é o numero maximo de digitos significantes a serem mostrados.&lt;br/&gt;&lt;br/&gt;Para s: é o numero maximo de caracteres a serem mostrados. Por padrão, todos os caracteres serão mostrados até o caracter nulo que finaliza uma string (por exemplo \n)&lt;br/&gt;&lt;br/&gt;Para c: não tem efeito.&lt;br/&gt;&lt;br/&gt;Quando nenhuma precisão é especificada, o padrão é 1. Se o periodo é especificado sem um valor explicito para precisão, 0 é assumido.&lt;/td&gt;
    &lt;/tr&gt;&lt;tr&gt;&lt;td&gt;.*&lt;/td&gt;
      &lt;td&gt;A precisão nao é especificada na formatação da string, mas é passado como argumento precedendo o argumento a ser formatado.&lt;/td&gt;
    &lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;hr&gt;&lt;h3&gt;Modificadores de Quantidade&lt;/h3&gt;

&lt;table class="table table-bordered"&gt;&lt;tbody&gt;&lt;!-- Results table headers --&gt;&lt;tr&gt;&lt;th&gt;quantidade&lt;/th&gt;
      &lt;th&gt;Descrição&lt;/th&gt;
    &lt;/tr&gt;&lt;tr&gt;&lt;td&gt;h&lt;/td&gt;
      &lt;td&gt;O argumento é interpretado como um short int ou unsigned short int (só se aplica aos formatadores de inteiro: i, d, o,  u,  x,  X).&lt;/td&gt;
    &lt;/tr&gt;&lt;tr&gt;&lt;td&gt;l&lt;/td&gt;
      &lt;td&gt;O argumento é interpretado como um long int ou unsigned long int (só se aplica aos formatadores de inteiro: i, d, o,  u,  x,  X) e como um caractere de largura ou cadeia de caracteres de largura para formatadores c e s.&lt;/td&gt;
    &lt;/tr&gt;&lt;tr&gt;&lt;td&gt;L&lt;/td&gt;
      &lt;td&gt;O argumento é interpretado como um long double (somente para formatadores de float: e, E, f, g e G).&lt;br/&gt;&lt;/td&gt;
    &lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;hr&gt;&lt;p&gt;O &lt;code&gt;printf&lt;/code&gt; é muito poderoso, e espero ter ajudado a conhece-lo melhor.&lt;/p&gt;

&lt;p&gt;Obrigado, até a proxima!&lt;/p&gt;</description><link>http://blog.tarsisazevedo.com/post/18748817675</link><guid>http://blog.tarsisazevedo.com/post/18748817675</guid><pubDate>Sun, 04 Mar 2012 17:22:19 -0400</pubDate><category>C</category><category>programming</category><category>formatacao printf</category><category>aprendendo c</category><category>tutorial</category></item><item><title>[dica rapida] syntax hightlight no seu blog com javascript</title><description>&lt;p&gt;se voce tem um blog sobre programação, provavelmente voce postará snippets de codigo e provavelmente voce vai querer que esse snippet tenha syntax highlight como no seu editor de codigo preferido.&lt;/p&gt;

&lt;h2&gt;mas como faz?&lt;/h2&gt;

&lt;p&gt;é bem facil, basta voce usar um modulo &lt;code&gt;JS&lt;/code&gt; e &lt;code&gt;CSS&lt;/code&gt; chamado &lt;a href="http://bit.ly/z4ilWo" target="_blank"&gt;google code prettify&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;para cofigura-lo na pagina. basta voce colocar esses 2 links no seu html.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;lt;link href="prettify.css" type="text/css" rel="stylesheet" /&amp;gt;
&amp;lt;script type="text/javascript" src="prettify.js"&amp;gt;&amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;e depois chamar uma função no load da pagina.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$(function() {prettyPrint();});
&lt;/code&gt;&lt;/pre&gt;

&lt;blockquote&gt;
  &lt;p&gt;obs: para chama-lo assim voce deve carregar o &lt;a href="http://jquery.com/" target="_blank"&gt;jquery&lt;/a&gt; na pagina.&lt;/p&gt;
  
  &lt;p&gt;obs 2: mais informaçoes de configuração, veja o &lt;a href="http://google-code-prettify.googlecode.com/svn/trunk/README.html" target="_blank"&gt;readme&lt;/a&gt;. do projeto.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;e agora?&lt;/h2&gt;

&lt;p&gt;basta voce colocar seu codigo dentro de uma &lt;code&gt;tag&lt;/code&gt; &lt;code&gt;code&lt;/code&gt; ou &lt;code&gt;pre&lt;/code&gt; com a classe &lt;code&gt;prettyprint&lt;/code&gt; e pronto, seu codigo vai ficar bonito na pagina!&lt;/p&gt;

&lt;p&gt;um exemplo:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;lt;code class="prettyprint"&amp;gt;print "Hello World!&amp;lt;/code&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;é isso, até mais!&lt;/p&gt;</description><link>http://blog.tarsisazevedo.com/post/18530920691</link><guid>http://blog.tarsisazevedo.com/post/18530920691</guid><pubDate>Wed, 29 Feb 2012 22:42:32 -0400</pubDate><category>syntax highlight</category><category>programming</category><category>developer</category><category>blog</category><category>trick</category></item><item><title>Programming Highlight - 2</title><description>&lt;blockquote&gt;
  &lt;p&gt;compilação dos melhores links da semana&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h1&gt;Leitura&lt;/h1&gt;

&lt;ul&gt;&lt;li&gt;Zen Coder or Distraction-Junkie&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;&lt;a href="http://www.componentowl.com/blog/2012/02/zen-coder-vs-distraction-junkie/" target="_blank"&gt;&lt;a href="http://www.componentowl.com/blog/2012/02/zen-coder-vs-distraction-junkie/" target="_blank"&gt;http://www.componentowl.com/blog/2012/02/zen-coder-vs-distraction-junkie/&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.codinghorror.com/blog/2004/02/about-me.html" target="_blank"&gt;Jeff Atwood&lt;/a&gt; anunciou sua saida da equipe do Stack Overflow.&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;&lt;a href="http://www.codinghorror.com/blog/2012/02/farewell-stack-exchange.html" target="_blank"&gt;&lt;a href="http://www.codinghorror.com/blog/2012/02/farewell-stack-exchange.html" target="_blank"&gt;http://www.codinghorror.com/blog/2012/02/farewell-stack-exchange.html&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;Poster do &lt;a href="http://www.python.org/dev/peps/pep-0020/" target="_blank"&gt;The Zen of Python&lt;/a&gt; para impressao&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;&lt;a href="http://www.dirtymonkey.co.uk/blog/zen-of-python-poster" target="_blank"&gt;&lt;a href="http://www.dirtymonkey.co.uk/blog/zen-of-python-poster" target="_blank"&gt;http://www.dirtymonkey.co.uk/blog/zen-of-python-poster&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;Lembra do Hacker way do Facebook nos &lt;a href="http://" target="_blank"&gt;Highlights&lt;/a&gt; da semana passada? Então,  posters sobre o ele em &lt;a href="http://" target="_blank"&gt;creative commons&lt;/a&gt; pra voce baixar&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;&lt;a href="http://www.designforfun.com/facebookposters/" target="_blank"&gt;&lt;a href="http://www.designforfun.com/facebookposters/" target="_blank"&gt;http://www.designforfun.com/facebookposters/&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;Uma otima apresentação sobre como e porque customizar os admin do django. Indica varios pros e contras de cada abordagem&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;&lt;a href="http://www.slideshare.net/lincolnloop/customizing-the-django-admin/" target="_blank"&gt;&lt;a href="http://www.slideshare.net/lincolnloop/customizing-the-django-admin/" target="_blank"&gt;http://www.slideshare.net/lincolnloop/customizing-the-django-admin/&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;Se voce usa vim, veja se está fazendo isso certo!&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;&lt;a href="http://blog.sanctum.geek.nz/vim-anti-patterns/" target="_blank"&gt;&lt;a href="http://blog.sanctum.geek.nz/vim-anti-patterns/" target="_blank"&gt;http://blog.sanctum.geek.nz/vim-anti-patterns/&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;Patterns de ORM&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;&lt;a href="http://techspot.zzzeek.org/2012/02/07/patterns-implemented-by-sqlalchemy/" target="_blank"&gt;&lt;a href="http://techspot.zzzeek.org/2012/02/07/patterns-implemented-by-sqlalchemy/" target="_blank"&gt;http://techspot.zzzeek.org/2012/02/07/patterns-implemented-by-sqlalchemy/&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;Css Box Model &lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;&lt;a href="http://css-tricks.com/the-css-box-model/" target="_blank"&gt;&lt;a href="http://css-tricks.com/the-css-box-model/" target="_blank"&gt;http://css-tricks.com/the-css-box-model/&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;Podcasts for Hackers &lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;&lt;a href="http://designpepper.com/podcasts-for-hackers" target="_blank"&gt;&lt;a href="http://designpepper.com/podcasts-for-hackers" target="_blank"&gt;http://designpepper.com/podcasts-for-hackers&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;Projetos&lt;/h1&gt;

&lt;ul&gt;&lt;li&gt;&lt;a href="https://github.com/tschellenbach/Django-facebook" target="_blank"&gt;Django-Facebook&lt;/a&gt; - o principal destaque desse projeto é a integracao com o Open Graph beta.&lt;/li&gt;
&lt;/ul&gt;</description><link>http://blog.tarsisazevedo.com/post/17525341919</link><guid>http://blog.tarsisazevedo.com/post/17525341919</guid><pubDate>Sun, 12 Feb 2012 21:24:41 -0400</pubDate><category>programming-highlight</category><category>produtividade</category><category>artigos</category></item><item><title>[Review] Nao me faça pensar! Uma Abordagem de Bom Senso À Usabilidade na Web</title><description>&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_lz3lzaENEm1qhht0x.jpg" alt=""/&gt;&lt;/p&gt;

&lt;p&gt;Eu recentemente acabei de ler este livro sensacional sobre usabilidade na web.&lt;/p&gt;

&lt;p&gt;Ele trata sobre a arquitetura de informação de uma pagina web, mostrando elementos básicos que toda pagina deve ter, o que fazer e o &lt;strong&gt;que não fazer&lt;/strong&gt;, como montar sua pagina principal e como executar testes de usabilidade. Te abre os olhos pra questões básicas muitas vezes esquecidas por nós em nossos projetos web.&lt;/p&gt;

&lt;h1&gt;Mas eu sou desenvolvedor!&lt;/h1&gt;

&lt;p&gt;Por isso mesmo! Você deve ser plural, conhecer um pouco de tudo. Design, infraestrutura, usabilidade, CSS, HTML, semantica, protocolo http e todo o ecosistema que engloba a web.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://henriquebastos.net/2012/02/03/profissionais-web-precisam-ser-plurais/" target="_blank"&gt;Neste otimo post&lt;/a&gt; o &lt;a href="http://twitter.com/henriquebastos" target="_blank"&gt;Henrique Bastos&lt;/a&gt; fala mais sobre pluralidade para programadores web. Vale a leitura!&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Se você quiser ler somente um livro sobre usabilidade na sua vida, &lt;strong&gt;LEIA ESTE&lt;/strong&gt;!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h1&gt;Ok, legal. Onde eu compro?&lt;/h1&gt;

&lt;p&gt;Voce pode escolher o &lt;a href="http://el2.me/9UQ2" target="_blank"&gt;melhor preço no buscapé, por esse link&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Ou se preferir, pode &lt;a href="http://www.amazon.com/gp/product/0321344758/ref=as_li_ss_tl?ie=UTF8&amp;amp;tag=blogtechounao-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=0321344758" target="_blank"&gt;comprar a versao em ingles, na amazon&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Pode ter certeza, este livro é um &lt;strong&gt;otimo investimento&lt;/strong&gt; para melhorar seus projetos web, e &lt;strong&gt;deixar seus usuarios mais felizes&lt;/strong&gt;! Aproveite e boa leitura.&lt;/p&gt;

&lt;p&gt;Até a proxima!&lt;/p&gt;</description><link>http://blog.tarsisazevedo.com/post/17288010646</link><guid>http://blog.tarsisazevedo.com/post/17288010646</guid><pubDate>Wed, 08 Feb 2012 19:48:00 -0400</pubDate><category>livros</category><category>nao me faça pensa</category><category>projeto web</category><category>usabilidade</category><category>web development</category><category>review</category></item><item><title>Programming Highlight - 1</title><description>&lt;blockquote&gt;
  &lt;p&gt;uma compilação dos melhores links que li na semana.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;&lt;li&gt;&lt;a href="http://pt.wikipedia.org/wiki/Lightning_Talk" target="_blank"&gt;Lightning talk&lt;/a&gt; &lt;strong&gt;sensacional&lt;/strong&gt; feita pelo &lt;a href="https://www.destroyallsoftware.com/" target="_blank"&gt;Gary Bernhardt&lt;/a&gt; no CodeMash 2012 falando sobre as bizarrices das linguagens ruby e javascript:&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;&lt;a href="https://www.destroyallsoftware.com/talks/wat" target="_blank"&gt;&lt;a href="https://www.destroyallsoftware.com/talks/wat" target="_blank"&gt;https://www.destroyallsoftware.com/talks/wat&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;O twitter lançou a versao 2.0 do seu &lt;a href="http://twitter.github.com/bootstrap/" target="_blank"&gt;bootstrap&lt;/a&gt;. Aqui tem uma palestra  explicando as principais mudanças.&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;&lt;a href="http://speakerdeck.com/u/mdo/p/bootstrap-2" target="_blank"&gt;&lt;a href="http://speakerdeck.com/u/mdo/p/bootstrap-2" target="_blank"&gt;http://speakerdeck.com/u/mdo/p/bootstrap-2&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;O &lt;strong&gt;&amp;#8220;Hacker Way&amp;#8221;&lt;/strong&gt; do Facebook, segundo o Mark Zuckerberg. Vale a leitura! &lt;a href="http://www.sec.gov/Archives/edgar/data/1326801/000119312512034517/d287954ds1.htm" target="_blank"&gt;Documento original&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;&lt;a href="http://www.startuplessonslearned.com/2012/02/hacker-way.html" target="_blank"&gt;&lt;a href="http://www.startuplessonslearned.com/2012/02/hacker-way.html" target="_blank"&gt;http://www.startuplessonslearned.com/2012/02/hacker-way.html&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;Tem duvida do que é REST, RESTful e tudo isso? Leia essa thread do stackoverflow. &lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;&lt;a href="http://stackoverflow.com/questions/671118/what-exactly-is-restful-programming" target="_blank"&gt;&lt;a href="http://stackoverflow.com/questions/671118/what-exactly-is-restful-programming" target="_blank"&gt;http://stackoverflow.com/questions/671118/what-exactly-is-restful-programming&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;Teste quais features de  css3 seu browser suporta.&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;&lt;a href="http://css3test.com/" target="_blank"&gt;&lt;a href="http://css3test.com/" target="_blank"&gt;http://css3test.com/&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;</description><link>http://blog.tarsisazevedo.com/post/17175871360</link><guid>http://blog.tarsisazevedo.com/post/17175871360</guid><pubDate>Mon, 06 Feb 2012 19:13:39 -0400</pubDate><category>programming</category><category>html</category><category>css</category><category>twitter-bootstrap</category><category>facebook</category><category>restful</category><category>highlights</category></item><item><title>Testes em Javascript - Jasmine</title><description>&lt;p&gt;&lt;a href="http://books.google.com.br/books?hl=pt-BR&amp;amp;lr=&amp;amp;id=goE1TL0u0dUC&amp;amp;oi=fnd&amp;amp;pg=PR9&amp;amp;dq=test-driven+development&amp;amp;ots=IauCyRfwDo&amp;amp;sig=mw8j9H3TRYJcQvgiXFN6oKIn3z0#v=onepage&amp;amp;q=test-driven%20development&amp;amp;f=false" target="_blank"&gt;Testes automatizados&lt;/a&gt; emergiram como uma das boas praticas da engenharia de software, e seus resultados sao comprovadamente eficazes.&lt;/p&gt;

&lt;p&gt;Eu utilizo bastante essas tecnicas quando programo em python/django com ferramentas como o &lt;a href="https://github.com/cobrateam/splinter" target="_blank"&gt;splinter&lt;/a&gt;, unittest entre outras. Porem quando programava em javacript, eu sempre senti falta desses testes automatizados.&lt;/p&gt;

&lt;h2&gt;E o &lt;a href="http://pivotal.github.com/jasmine/" target="_blank"&gt;Jasmine&lt;/a&gt;?&lt;/h2&gt;

&lt;blockquote&gt;
  &lt;p&gt;tl;dr - Jasmine is a behavior-driven development framework for testing your JavaScript code.
  It does not depend on any other JavaScript frameworks.
  It does not require a DOM.
  And it has a clean, obvious syntax so that you can easily write tests.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Em setembro do ano passado (2011), comecei a trabalhar no projeto de cobertura de eventos na globo.com. E tinhamos como desafio principal, atualizar uma pagina em tempo real via streaming com fotos, videos e textos. Pra isso os componentes da pagina teriam que interagir muito, recebendo e tratando os dados enviados do streaming. Usamos muito js com o framework &lt;a href="http://mootools.net/" target="_blank"&gt;mootools&lt;/a&gt;, e pra testar usamos o &lt;strong&gt;jasmine&lt;/strong&gt;, o que nos proporcionou uma segurança e qualidade de codigo excelentes!&lt;/p&gt;

&lt;p&gt;Agora chega de falar!&lt;/p&gt;

&lt;h2&gt;Show me the code&lt;/h2&gt;

&lt;p&gt;Pra começar, vc descreve um cenario que vai testar.&lt;/p&gt;

&lt;p&gt;Como exemplo, vamos fazer um &lt;a href="http://en.wikipedia.org/wiki/Bizz_buzz" target="_blank"&gt;fizzbuzz&lt;/a&gt;&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;describe("Fizz Buzz", function(){
    it("numero igual a tres deve retornar fizz", function(){
        expect(fizzbuzz(3)).toEqual("fizz");
    });
});
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Depois de escrever o teste, a gente escreve um codigo pra passar:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;var fizzbuzz = function(numero) {
    return "fizz";
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Agora mais um cenario:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;it("numero igual a cinco, deve retornar buzz",function() {
    expect(fizzbuzz(5)).toEqual("buzz");
});
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;mais um pouco de codigo:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;var fizzbuzz = function(numero) {
    if (numero === 3) {
        return "fizz";
    }
    return "buzz";
};
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Bom ai vcs podem continuar a brincar e terminar o codigo.&lt;/p&gt;

&lt;h2&gt;E pra rodar?&lt;/h2&gt;

&lt;p&gt;Bom vc pode carregar os scripts(&lt;a href="http://pivotal.github.com/jasmine/download.html" target="_blank"&gt;download aqui&lt;/a&gt;) do jasmine numa pagina html estatica e por ultimo carregar o seu teste.
Um exemplo:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
  "http://www.w3.org/TR/html4/loose.dtd"&amp;gt;
&amp;lt;html&amp;gt;
    &amp;lt;head&amp;gt;
        &amp;lt;title&amp;gt;Jasmine Test Runner&amp;lt;/title&amp;gt;
        &amp;lt;link rel="stylesheet" type="text/css" href="lib/jasmine-1.0.2/jasmine.css"&amp;gt;
        &amp;lt;script type="text/javascript" src="lib/jasmine-1.1.0/jasmine.js"&amp;gt;&amp;lt;/script&amp;gt;
        &amp;lt;script type="text/javascript" src="lib/jasmine-1.1.0/jasmine-html.js"&amp;gt;&amp;lt;/script&amp;gt;

        &amp;lt;!-- include source files here... --&amp;gt;
        &amp;lt;script type="text/javascript" src="aquivo/que/voce/quer/testar.js"&amp;gt;&amp;lt;/script&amp;gt;


        &amp;lt;!-- include spec files here... --&amp;gt;
        &amp;lt;script type="text/javascript" src="arquivo/de/teste.js"&amp;gt;&amp;lt;/script&amp;gt;
    &amp;lt;/head&amp;gt;
    &amp;lt;body&amp;gt;
        &amp;lt;script type="text/javascript"&amp;gt;
            jasmine.getEnv().addReporter(new jasmine.TrivialReporter());
            jasmine.getEnv().execute();
        &amp;lt;/script&amp;gt;
    &amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Se vc tem um projeto em ruby com rails, vc pode usar uma &lt;a href="https://github.com/pivotal/jasmine/wiki/A-ruby-project" target="_blank"&gt;gem&lt;/a&gt; pra rodar os testes.&lt;/p&gt;

&lt;p&gt;Se vc tem um projeto em python, pode usar o &lt;a href="https://github.com/cobrateam/jasmine-splinter-runner" target="_blank"&gt;jasmine-test-runner&lt;/a&gt;, feito pelo &lt;a href="http://cobrateam.info/" target="_blank"&gt;cobrateam&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Se vc tem um projeto em outra linguagem, &lt;a href="https://github.com/pivotal/jasmine/wiki" target="_blank"&gt;veja aqui&lt;/a&gt; como rodar o jasmine.&lt;/p&gt;

&lt;p&gt;Entao é isso!&lt;/p&gt;

&lt;p&gt;Até a proxima, []&amp;#8217;s&lt;/p&gt;</description><link>http://blog.tarsisazevedo.com/post/16900846471</link><guid>http://blog.tarsisazevedo.com/post/16900846471</guid><pubDate>Wed, 01 Feb 2012 22:58:00 -0400</pubDate><category>jasmine</category><category>programming</category><category>javascript</category><category>tdd</category><category>bdd</category></item><item><title>Palestra ministrada no FISL 12 em 2011 sobre TDD,...</title><description>&lt;iframe width="400" height="300" src="http://www.youtube.com/embed/ySTdC8j1cS4?wmode=transparent&amp;autohide=1&amp;egm=0&amp;hd=1&amp;iv_load_policy=3&amp;modestbranding=1&amp;rel=0&amp;showinfo=0&amp;showsearch=0" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;Palestra ministrada no FISL 12 em 2011 sobre TDD, Refactoring e boas praticas de programação!&lt;/p&gt;
&lt;p&gt;Feedbacks sao bem vindos!&lt;/p&gt;
&lt;p&gt;Até mais!&lt;/p&gt;</description><link>http://blog.tarsisazevedo.com/post/16556365738</link><guid>http://blog.tarsisazevedo.com/post/16556365738</guid><pubDate>Thu, 26 Jan 2012 22:23:34 -0400</pubDate><category>tdd</category><category>programming</category><category>python</category><category>fisl</category><category>refactoring</category></item><item><title>Aprenda Vim Progressivamente</title><description>&lt;div class="posterous_autopost"&gt;
&lt;p&gt;&lt;span&gt;Sou usuario do &lt;a href="http://www.vim.org/" target="_blank"&gt;vim&lt;/a&gt; a algum tempo e sempre estou procurando aprender mais e mais sobre esse excelente editor.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Recentemente encontrei um &lt;a href="http://yannesposito.com/Scratch/en/blog/Learn-Vim-Progressively/" target="_blank"&gt;otimo post no blog do Yann Esposito&lt;/a&gt; para iniciantes aprenderem &lt;a href="http://www.vim.org/" target="_blank"&gt;vim&lt;/a&gt; rapidamente e tambem para veteranos querendo aprender algumas magicas desse otimo edito de texto.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Gostei tanto do post que resolvi traduzi-lo para divulgar o &lt;a href="http://www.vim.org/" target="_blank"&gt;vim&lt;/a&gt; e mostrar como voar com ele.&lt;/span&gt;&lt;/p&gt;
&lt;h2&gt;Então vamos ao post!&lt;/h2&gt;
&lt;div class="p_embed p_image_embed"&gt;&lt;a href="http://getfile0.posterous.com/getfile/files.posterous.com/temp-2011-09-17/wJDelocbgFplyavHokdvaeyEArdapsBqFBagCzjhkiligIAsjyoeitAIgDEA/Pride-and-Prejudice.jpg.scaled1000.jpg" target="_blank"&gt;&lt;img alt="Pride-and-prejudice" height="333" src="http://getfile1.posterous.com/getfile/files.posterous.com/temp-2011-09-17/wJDelocbgFplyavHokdvaeyEArdapsBqFBagCzjhkiligIAsjyoeitAIgDEA/Pride-and-Prejudice.jpg.scaled500.jpg" width="500"/&gt;&lt;/a&gt;&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;span&gt;TL;DR: Quer aprender &lt;a href="http://www.vim.org/" target="_blank"&gt;vim&lt;/a&gt; (o melhor editor conhecido pela humanidade) da forma mais rapida possivel. Eu sugiro um caminho. Comece aprendendo o basico pra sobreviver, entao integre todos os truques devagar&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;span&gt;&lt;!-- more --&gt;Vim, o editor de texto de seis bilhões de dólares&lt;/span&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;span&gt;Melhor, mais rapido, mais forte&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;span&gt;Aprenda &lt;a href="http://www.vim.org/" target="_blank"&gt;vim&lt;/a&gt; e ele será seu ultimo editor de texto. Ele não é o melhor editor de texto, eu sei. É dificil de aprender, mas incrivel de usar.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Eu sugiro aprende-lo em 4 passos:&lt;/span&gt;&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;&lt;span&gt;Sobreviva&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Sinta-se confortavel&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Sinta-se melhor, mais rapido, mais forte&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Use os superpoderes do &lt;a href="http://www.vim.org/" target="_blank"&gt;vim&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;ol&gt;&lt;/ol&gt;&lt;p&gt;&lt;span&gt;No final dessa jornada você se tornará um superstar do &lt;a href="http://www.vim.org/" target="_blank"&gt;vim&lt;/a&gt;!&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Mas antes de começar, um aviso. Aprender &lt;a href="http://www.vim.org/" target="_blank"&gt;vim&lt;/a&gt; será doloroso no começo. Isso leva tempo. É muito parecido com aprender a tocar um instrumento musical. Não espere ser eficiente com &lt;a href="http://www.vim.org/" target="_blank"&gt;vim&lt;/a&gt; do que com outro editor em 3 dias. Na verdade vai levar 2 semanas ao inves de 3 dias.&lt;/span&gt;&lt;!--more--&gt;&lt;/p&gt;
&lt;h1&gt;Nivel 1 - Sobreviva&lt;/h1&gt;
&lt;ol&gt;&lt;li&gt;&lt;span&gt;insta-le o &lt;a href="http://www.vim.org/" target="_blank"&gt;vim&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;abra o &lt;a href="http://www.vim.org/" target="_blank"&gt;vim&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;NÃO FAÇA NADA! Leia&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;&lt;span&gt;Em um editor de texto normal, escrever no teclado é o suficiente para escrever alguma coisa e ve-la na tela. Não dessa vez. Vim está no modo &lt;strong&gt;Normal&lt;/strong&gt;. Vamos entrar no modo de &lt;strong&gt;Inserção&lt;/strong&gt;. Digite a letra &lt;code&gt;i&lt;/code&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Agora voce se sente um pouco melhor. Voce pode digitar textos como um editor de texto normal. Para voltar para o modo normal, tecle &lt;code&gt;ESC&lt;/code&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Voce sabe trocar entre o modo &lt;strong&gt;Normal&lt;/strong&gt; e de &lt;strong&gt;Inserção&lt;/strong&gt;. E agora a lista de comandos que voce pode usar no modo &lt;strong&gt;Normal&lt;/strong&gt; para sobreviver:&lt;/span&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;ul&gt;&lt;li&gt;&lt;span&gt;&lt;code&gt;i&lt;/code&gt; - modo de &lt;strong&gt;Inserção&lt;/strong&gt;. Tecle &lt;code&gt;ESC&lt;/code&gt; para voltar ao modo &lt;strong&gt;Normal&lt;/strong&gt;.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;code&gt;x&lt;/code&gt; - para deletar o caracter em baixo do cursor.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;code&gt;:wq&lt;/code&gt; - Salvar e Sair (&lt;code&gt;:w&lt;/code&gt; para salvar, &lt;code&gt;:q&lt;/code&gt; para sair).&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;code&gt;dd&lt;/code&gt; - deletar e copiar a linha atual.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;code&gt;p&lt;/code&gt; - colar.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;&lt;span&gt;Recomendado:&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;span&gt;&lt;code&gt;hjkl&lt;/code&gt; (altamente recomendado, mas nao obrigatorio) - movimentos basicos do cursor (←↓↑→). Dica: j é a seta para baixo.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;code&gt;:help &amp;lt;comando&amp;gt;&lt;/code&gt; - mostra o help do &lt;code&gt;&amp;lt;comando&amp;gt;&lt;/code&gt;, voce pode começar a usar o &lt;code&gt;:help&lt;/code&gt; sem nada mais.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;span&gt;Somenten 5 comandos. Isso é muito pouco para começar. Uma vez que esses comandos começarem a sair naturalmente (pode ser no final do dia), voce pode ir para o nivel 2.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Mas antes apenas uma observação no modo &lt;strong&gt;Normal&lt;/strong&gt;. Em editores normais, para copiar voce deve usar a tecla &lt;strong&gt;Ctrl&lt;/strong&gt; (&lt;strong&gt;Ctrl + c&lt;/strong&gt; geralmente). Na verdade, quando voce pressiona o &lt;strong&gt;Ctrl&lt;/strong&gt;, é como se todas as funcionalidades das teclas mudassem. Com &lt;a href="http://www.vim.org/" target="_blank"&gt;vim&lt;/a&gt; no modo &lt;strong&gt;Normal&lt;/strong&gt;, é como se seu &lt;strong&gt;Ctrl&lt;/strong&gt; sempre estivesse pressionado.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Uma ultima observação sobre notações:&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;span&gt;ao invés de escrever &lt;strong&gt;Ctrl-V&lt;/strong&gt;, vamos escrever &lt;code&gt;&amp;lt;C-V&amp;gt;&lt;/code&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;comandos começam com &lt;code&gt;:&lt;/code&gt; e terminam com &lt;code&gt;&amp;lt;enter&amp;gt;&lt;/code&gt;. Por exemplo, quando eu escrever &lt;code&gt;:q&lt;/code&gt; isso significa &lt;code&gt;:q&amp;lt;enter&amp;gt;&lt;/code&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;h1&gt;Nivel 2 - Sinta-se confortavel&lt;/h1&gt;
&lt;p&gt;&lt;span&gt;Voce sabe os comandos para sobreviver. Agora é hora de aprender mais alguns comandos. Eu sugiro:&lt;/span&gt;&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;&lt;span&gt;Variações do modo de &lt;strong&gt;Inserção&lt;/strong&gt;:&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;blockquote&gt;
&lt;ul&gt;&lt;li&gt;&lt;span&gt;&lt;code&gt;a&lt;/code&gt; - insere depois do cursor&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;code&gt;o&lt;/code&gt; - insere uma nova linha depois da linha corrente&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;code&gt;O&lt;/code&gt; - insere uma nova linha antes da linha corrente&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;code&gt;cw&lt;/code&gt; - substitui do cursor até o final da palavra&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/blockquote&gt;
&lt;ol&gt;&lt;li&gt;&lt;span&gt;Movimentos Basicos:&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;blockquote&gt;
&lt;ul&gt;&lt;li&gt;&lt;span&gt;&lt;code&gt;0&lt;/code&gt; - vai para o inicio da linha&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;code&gt;^&lt;/code&gt; - vai para o primeiro caracter nao-branco da linha&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;code&gt;$&lt;/code&gt; - vai para o final da linha&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;code&gt;g_&lt;/code&gt; - vai para o ultimo caracater nao-branco da linha&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;code&gt;/padrao&lt;/code&gt; - procura por padrao&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/blockquote&gt;
&lt;ol&gt;&lt;li&gt;&lt;span&gt;Copiar/Colar&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;blockquote&gt;
&lt;ul&gt;&lt;li&gt;&lt;span&gt;&lt;code&gt;P&lt;/code&gt; - cola antes do cursor, relembre que p é para colar depois da posição corrente.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;code&gt;yy&lt;/code&gt; - copia a linha corrente, mais facil que o &lt;code&gt;ddP&lt;/code&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/blockquote&gt;
&lt;ol&gt;&lt;li&gt;&lt;span&gt;Desfazer/Refazer:&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;blockquote&gt;
&lt;ul&gt;&lt;li&gt;&lt;span&gt;&lt;code&gt;u&lt;/code&gt; - desfazer&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;code&gt;&amp;lt;C-r&amp;gt; (**Ctrl-r**)&lt;/code&gt; - refazer&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/blockquote&gt;
&lt;ol&gt;&lt;li&gt;&lt;span&gt;Carregar/Salvar/Sair/Mudar Arquivo (buffer):&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;blockquote&gt;
&lt;ul&gt;&lt;li&gt;&lt;span&gt;&lt;code&gt;:e &amp;lt;caminho/para/arquivo&amp;gt;&lt;/code&gt; - abrir&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;code&gt;:w&lt;/code&gt; - salvar&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;code&gt;:saveas &amp;lt;caminho/para/arquivo&amp;gt;&lt;/code&gt; - salvar em &lt;code&gt;&amp;lt;caminho/para/arquivo/&amp;gt;&lt;/code&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;code&gt;:x, ZZ ou :wq&lt;/code&gt; - salvar e sair (&lt;code&gt;:x&lt;/code&gt; somente salva se necessario)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;code&gt;:q!&lt;/code&gt; - sair sem salvar, tambem &lt;code&gt;:qa!&lt;/code&gt; até mesmo se houver algum buffer modificado escondido&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;code&gt;:bn (resp. :bp)&lt;/code&gt; - mostra o proximo (resp. anterior) arquivo (buffer)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;span&gt;Separe algum tempo para aprender esses comandos. Uma vez aprendido, voce deve estar apto para fazer tudo que voce faz em qualquer outro editor. Mas até agora, isso é um pouco estranho. Mas siga-me até o proximo nivel e voce verá porque.&lt;/span&gt;&lt;/p&gt;
&lt;h1&gt;Nivel 3 - Melhor. Mais Forte. Mais Rapido.&lt;/h1&gt;
&lt;p&gt;&lt;span&gt;Parabens por chegar tao longe! Nós podemos começar a parte interessante. No nivel 3, nós iremos falar somente sobre comandos que são compativeis com o vi antigo.&lt;/span&gt;&lt;/p&gt;
&lt;h2&gt;Melhor&lt;/h2&gt;
&lt;p&gt;&lt;span&gt;Vamos ver como o &lt;a href="http://www.vim.org/" target="_blank"&gt;vim&lt;/a&gt; faz para te ajudar a repetir um comando:&lt;/span&gt;&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;&lt;span&gt;&lt;code&gt;. (ponto)&lt;/code&gt; - irá repetir o ultimo comando&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;code&gt;N&amp;lt;comando&amp;gt;&lt;/code&gt; - irá repetir o comando N vezes.&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;&lt;span&gt;Alguns exemplos, abre um arquivo e digite:&lt;/span&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;ul&gt;&lt;li&gt;&lt;span&gt;&lt;code&gt;2dd&lt;/code&gt; - irá deletar 2 linhas&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;code&gt;3p&lt;/code&gt; - irá colar o texto 3 vezes&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;code&gt;100idesu ESC&lt;/code&gt; - irá escrever &amp;#8220;desu&amp;#8221; 100 vezes&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;code&gt;. (ponto)&lt;/code&gt; - irá repetir o ultimo comando, escrevendo mais 100 vezes &amp;#8220;desu&amp;#8221;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;code&gt;3.&lt;/code&gt; - irá escrever 3 &amp;#8220;desu&amp;#8221; (e não 300, muito inteligente)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/blockquote&gt;
&lt;h2&gt;Mais forte&lt;/h2&gt;
&lt;p&gt;&lt;span&gt;Saber como se mover de modo eficiente no &lt;a href="http://www.vim.org/" target="_blank"&gt;vim&lt;/a&gt; é muito importante. Não pule esta seção.&lt;/span&gt;&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;&lt;span&gt;&lt;code&gt;NG&lt;/code&gt; - vai para a linha N&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;code&gt;gg&lt;/code&gt; - atalho para &lt;code&gt;1G&lt;/code&gt;, vai para o começo do arquivo&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;code&gt;G&lt;/code&gt; - vai para a ultima linha&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Andando em palavras:&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;blockquote&gt;
&lt;ul&gt;&lt;li&gt;&lt;span&gt;&lt;code&gt;w&lt;/code&gt; - vai para o começo da palavra seguinte&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;code&gt;e&lt;/code&gt; - vai para o final da palavra seguinte&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;&lt;span&gt;Por padrao, uma palavra é composta de letras e caracteres underscore ( _ ). Vamos chamar de uma PALAVRA um grupo de letras separadas por caracteres em branco. Se voce quiser considerar PALAVRA, entao use letras maiusculas:&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;span&gt;&lt;code&gt;W&lt;/code&gt; - vai para o inicio da PALAVRA seguinte&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;code&gt;E&lt;/code&gt; - vai para o final da PALAVRA seguinte &lt;/span&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div class="p_embed p_image_embed"&gt;&lt;img alt="Word_moves" height="83" src="http://getfile9.posterous.com/getfile/files.posterous.com/temp-2011-09-17/vJrFvjckanhbtscmmyBnmucsJwHtqBzezEsncjunhubcofFcdCpqBrqycdGC/word_moves.jpg.scaled500.jpg" width="357"/&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;/blockquote&gt;

&lt;p&gt;&lt;span&gt;Agora vamos falar sobre movimentos mais eficientes:&lt;/span&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;ul&gt;&lt;li&gt;&lt;span&gt;&lt;code&gt;%&lt;/code&gt; - Vai para o correspondente &lt;code&gt;(, [, {&lt;/code&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;code&gt;* (resp #)&lt;/code&gt; - vai para a proxima (resp anterior) ocorrencia da palavra sob o cursor.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;span&gt;Acredite em mim, esses tres comandos são ouro.&lt;/span&gt;&lt;/p&gt;
&lt;h2&gt;Mais rapido&lt;/h2&gt;
&lt;p&gt;&lt;span&gt;Lembra sobre a importancia dos movimentos no &lt;a href="http://www.vim.org/" target="_blank"&gt;vim&lt;/a&gt;? Aqui está a razão. Muitos comandos podem ser usados seguindo um formato geral:&lt;/span&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;span&gt;&lt;code&gt;&amp;lt;posição de inicio&amp;gt;&amp;lt;comando&amp;gt;&amp;lt;posição final&amp;gt;&lt;/code&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;span&gt;Por exemplo: &lt;code&gt;0y$&lt;/code&gt; significa:&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;span&gt;0 - vai para o começo dessa linha&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;y - copie daqui&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;$ - até o final desta linha&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;&lt;span&gt;Nós tambem podemos fazer coisas como &lt;code&gt;ye&lt;/code&gt;, copie daqui até o final da palavra. Tambem podemos fazer &lt;code&gt;y2/foo&lt;/code&gt; copie até a segunda ocorrencia de &amp;#8220;foo&amp;#8221;.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Mas se foi possivel com &lt;code&gt;y&lt;/code&gt; (copiar), é tambem possivel com &lt;code&gt;d&lt;/code&gt; (deletar), &lt;code&gt;v&lt;/code&gt; (seleção visual), &lt;code&gt;gU&lt;/code&gt; (maiuscula), &lt;code&gt;gu&lt;/code&gt; (minuscula), etc&amp;#8230;&lt;/span&gt;&lt;/p&gt;
&lt;h1&gt;Nivel 4 - Super poderes com &lt;a href="http://www.vim.org/" target="_blank"&gt;vim&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;&lt;span&gt;Com todos os comandos anteriores voce ja deve se sentir confortavel com o &lt;a href="http://www.vim.org/" target="_blank"&gt;vim&lt;/a&gt;. Mas agora, aqui estao as features realmente maneiras. Algumas dessas features foram a razão pra eu começar a usar o &lt;a href="http://www.vim.org/" target="_blank"&gt;vim&lt;/a&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;h2&gt;mover-se na linha corrente: &lt;code&gt;0&lt;/code&gt;, &lt;code&gt;^&lt;/code&gt;, &lt;code&gt;$&lt;/code&gt;, &lt;code&gt;g_&lt;/code&gt;, &lt;code&gt;f&lt;/code&gt;, &lt;code&gt;F&lt;/code&gt;, &lt;code&gt;t&lt;/code&gt;, &lt;code&gt;T&lt;/code&gt;, &lt;code&gt;,&lt;/code&gt;(virgula), &lt;code&gt;;&lt;/code&gt;&lt;/h2&gt;
&lt;blockquote&gt;
&lt;ul&gt;&lt;li&gt;&lt;span&gt;&lt;code&gt;0&lt;/code&gt; - Vai para a coluna 0&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;code&gt;^&lt;/code&gt; - Vai para o primeiro caracter da linha&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;code&gt;$&lt;/code&gt; - vai para a ultima coluna&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;code&gt;g_&lt;/code&gt; - Vai para o ultimo caracter da linha&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;code&gt;fa&lt;/code&gt; - Vai para a proxima ocorrencia da letra a na linha. &lt;code&gt;,&lt;/code&gt; (resp &lt;code&gt;;&lt;/code&gt;) irá para a ocorrencia anterior da busca (resp proxima).&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;code&gt;t,&lt;/code&gt; - Vai para o caracter anterior a primeira ocorrencia de ,&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;code&gt;3fa&lt;/code&gt; - Vai procurar a terceira ocorrencia da letra a&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;code&gt;F&lt;/code&gt; e &lt;code&gt;T&lt;/code&gt; - Parecido com &lt;code&gt;f&lt;/code&gt; e &lt;code&gt;t&lt;/code&gt;, porem procura pra tras&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div class="p_embed p_image_embed"&gt;&lt;img alt="Line_moves" height="84" src="http://getfile5.posterous.com/getfile/files.posterous.com/temp-2011-09-17/xhxdFGtlnrrFwbtqxjFfbrhsoDhlkbstyffqHakjkqgAzifJiaCyjuHDbmce/line_moves.jpg.scaled500.jpg" width="407"/&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;span&gt;Uma dica muito util é &lt;code&gt;:dt"&lt;/code&gt; que irá remover tudo antes de &lt;code&gt;"&lt;/code&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;h2&gt;Seleção por zona &lt;code&gt;&amp;lt;ação&amp;gt;a&amp;lt;objeto&amp;gt;&lt;/code&gt; ou &lt;code&gt;&amp;lt;ação&amp;gt;i&amp;lt;objeto&amp;gt;&lt;/code&gt;&lt;/h2&gt;
&lt;p&gt;&lt;span&gt;Esses comandos só podem ser usados depois de uma operação no modo &lt;strong&gt;Visual&lt;/strong&gt;. Mas eles são muito poderosos.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;code&gt;&amp;lt;ação&amp;gt;a&amp;lt;objeto&amp;gt;&lt;/code&gt; ou &lt;code&gt;&amp;lt;ação&amp;gt;i&amp;lt;objeto&amp;gt;&lt;/code&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Onde &lt;strong&gt;ação&lt;/strong&gt; pode ser qualquer ação, por exemplo, &lt;code&gt;d&lt;/code&gt; (delete), &lt;code&gt;y&lt;/code&gt; (copiar), &lt;code&gt;v&lt;/code&gt; (selecionar no modo &lt;strong&gt;Visual&lt;/strong&gt;). E um objeto pode ser: &lt;code&gt;w&lt;/code&gt; uma palavra, &lt;code&gt;W&lt;/code&gt;uma &lt;strong&gt;PALAVRA&lt;/strong&gt;(palavra extendida), &lt;code&gt;s&lt;/code&gt; uma sentença e &lt;code&gt;p&lt;/code&gt; um paragrafo. Mas tambem pode ser um caracter natural como &lt;code&gt;"&lt;/code&gt;, &lt;code&gt;'&lt;/code&gt;, &lt;code&gt;)&lt;/code&gt;, &lt;code&gt;}&lt;/code&gt;, &lt;code&gt;]&lt;/code&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Digamos que o cursor esteja no primeiro &lt;code&gt;o&lt;/code&gt; de &lt;code&gt;(map (+) ("foo"))&lt;/code&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;ul&gt;&lt;li&gt;&lt;span&gt;&lt;code&gt;vi"&lt;/code&gt; - irá selecionar &lt;code&gt;foo&lt;/code&gt;.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;code&gt;va"&lt;/code&gt; - irá selecionar &lt;code&gt;"foo"&lt;/code&gt;.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;code&gt;vi)&lt;/code&gt; - irá selecionar &lt;code&gt;"foo"&lt;/code&gt;.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;code&gt;va)&lt;/code&gt; - irá selecionar &lt;code&gt;("foo")&lt;/code&gt;.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;code&gt;v2i)&lt;/code&gt; - irá selecionar &lt;code&gt;map (+) ("foo")&lt;/code&gt;.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;code&gt;v2a)&lt;/code&gt; - irá selecionar &lt;code&gt;(map (+) ("foo"))&lt;/code&gt;.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/blockquote&gt;
&lt;h2&gt;Selecionas blocos retangulares &lt;code&gt;&amp;lt;C-v&amp;gt;&lt;/code&gt;.&lt;/h2&gt;
&lt;p&gt;&lt;span&gt;Blocos retangularss são muito uteis para comentar muitas linhas de código. Tipicamente: &lt;code&gt;^&amp;lt;C-v&amp;gt;&amp;lt;C-d&amp;gt;I-- [ESC]&lt;/code&gt;&lt;/span&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;ul&gt;&lt;li&gt;&lt;span&gt;&lt;code&gt;^&lt;/code&gt; - vai para o inicio da linha&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;code&gt;&amp;lt;C-v&amp;gt;&lt;/code&gt; - inicia a seleção por blocos&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;code&gt;&amp;lt;C-d&amp;gt;&lt;/code&gt; - move para baixo (como &lt;code&gt;jjj&lt;/code&gt; or &lt;code&gt;%&lt;/code&gt;, etc&amp;#8230; )&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;code&gt;I-- [ESC]&lt;/code&gt; - escreve &amp;#8212; para comentar cada linha&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/blockquote&gt;
&lt;div class="p_embed p_image_embed"&gt;&lt;img alt="Rectangular-blocks" height="160" src="http://getfile9.posterous.com/getfile/files.posterous.com/temp-2011-09-17/thDBIvmIxzDIylsjiHEbtyfkpfvgCqEoekjHznmImhgcaeBypAIfJbffvBid/rectangular-blocks.gif" width="300"/&gt;&lt;/div&gt;
&lt;p&gt;&lt;span&gt;Note que no Windows voce poderá ter que usar &lt;code&gt;&amp;lt;C-q&amp;gt;&lt;/code&gt; ao inves de &lt;code&gt;&amp;lt;C-v&amp;gt;&lt;/code&gt; se seu clipboard nao estiver vazio.&lt;/span&gt;&lt;/p&gt;
&lt;h2&gt;Completar: &lt;code&gt;&amp;lt;C-n&amp;gt;&lt;/code&gt; e &lt;code&gt;&amp;lt;C-p&amp;gt;&lt;/code&gt;.&lt;/h2&gt;
&lt;p&gt;&lt;span&gt;No modo de &lt;strong&gt;Inserção&lt;/strong&gt;, digite no inicio de uma palavra, e entao digite &lt;code&gt;&amp;lt;C-p&amp;gt;&lt;/code&gt;, magicamente&amp;#8230;&lt;/span&gt;&lt;/p&gt;
&lt;div class="p_embed p_image_embed"&gt;&lt;img alt="Completion" height="180" src="http://getfile4.posterous.com/getfile/files.posterous.com/temp-2011-09-17/lpecHryDgaGCDpCtcrCooepHewjxcaFpwuyJHnevhnbEDwtqACJctgHqJHEl/completion.gif" width="433"/&gt;&lt;/div&gt;
&lt;p&gt;&lt;span&gt;Macros: &lt;code&gt;qa&lt;/code&gt; faça alguma coisa &lt;code&gt;q&lt;/code&gt;, &lt;code&gt;@a&lt;/code&gt;, &lt;code&gt;@@&lt;/code&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;code&gt;qa&lt;/code&gt; vai gravar suas açoes num registrador &lt;code&gt;a&lt;/code&gt;. Entao &lt;code&gt;@a&lt;/code&gt; irá refazer a macro salva no registrador &lt;code&gt;a&lt;/code&gt; como se voce tivesse feito isso na mão. &lt;code&gt;@@&lt;/code&gt; é um atalho para refazer a ultima macro executada.&lt;/span&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;span&gt;Exemplo&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Numa linha que contem o numero 1, digite isso:&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;span&gt;&lt;code&gt;qaYp&amp;lt;C-a&amp;gt;q&lt;/code&gt; &lt;/span&gt; 
&lt;ul&gt;&lt;li&gt;&lt;span&gt;&lt;code&gt;qa&lt;/code&gt; - começa a gravar&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;code&gt;Yp&lt;/code&gt; - duplica esta linha&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;code&gt;&amp;lt;C-a&amp;gt;&lt;/code&gt; - incrementa um numero&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;code&gt;q&lt;/code&gt; - para a gravaçao&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;code&gt;@a&lt;/code&gt; - escreverá 2 abaixo do 1&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;code&gt;@@&lt;/code&gt; - escreverá 3 abaixo do 2&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;&lt;span&gt;Agora faça 100@@ e criará uma lista de numeros até 103.&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class="p_embed p_image_embed"&gt;&lt;img alt="Macros" height="180" src="http://getfile4.posterous.com/getfile/files.posterous.com/temp-2011-09-17/dtyoicvfjBgGodJDcrblqHIcAmooqFqtFFewhguvzEHrAtdymBlavcwoydxz/macros.gif" width="400"/&gt;&lt;/div&gt;
&lt;h2&gt;Seleção Visual: &lt;code&gt;v&lt;/code&gt;, &lt;code&gt;V&lt;/code&gt;, &lt;code&gt;&amp;lt;C-v&amp;gt;&lt;/code&gt;&lt;/h2&gt;
&lt;p&gt;&lt;span&gt;Vimos um exemplo com &lt;code&gt;&amp;lt;C-v&amp;gt;&lt;/code&gt;. Há tambem &lt;code&gt;v&lt;/code&gt; e &lt;code&gt;V&lt;/code&gt;. Uma vez que a seleçao foi feita, voce pode:&lt;/span&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;ul&gt;&lt;li&gt;&lt;span&gt;&lt;code&gt;J&lt;/code&gt; - juntar todas as linhas.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;code&gt;&amp;lt;&lt;/code&gt; (resp. &lt;code&gt;&amp;gt;&lt;/code&gt;) - indentar para a esquerda (resp. para a direita).&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;code&gt;=&lt;/code&gt; - auto indentação&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/blockquote&gt;
&lt;div class="p_embed p_image_embed"&gt;&lt;img alt="Autoindent" height="180" src="http://getfile3.posterous.com/getfile/files.posterous.com/temp-2011-09-17/lIemvFpkDdyycrfeoukDFxkinbziArqsksvlFnGFyrgGfAyvCmywFbhJszfn/autoindent.gif" width="433"/&gt;&lt;/div&gt;
&lt;p&gt;&lt;span&gt;Adicione alguma coisa no fim das linhas selecionadas:&lt;/span&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;ul&gt;&lt;li&gt;&lt;span&gt;&lt;code&gt;&amp;lt;C-v&amp;gt;&lt;/code&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;vá para a linha desejada (&lt;code&gt;jjj&lt;/code&gt; ou &lt;code&gt;&amp;lt;C-d&amp;gt;&lt;/code&gt; ou &lt;code&gt;/padrao&lt;/code&gt; ou &lt;code&gt;%&lt;/code&gt; etc&amp;#8230;)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;code&gt;$&lt;/code&gt; vá para o fina da linha&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;code&gt;A&lt;/code&gt;, escreva alguma coisa, &lt;code&gt;[ESC]&lt;/code&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/blockquote&gt;
&lt;div class="p_embed p_image_embed"&gt;&lt;img alt="Append-to-many-lines" height="180" src="http://getfile1.posterous.com/getfile/files.posterous.com/temp-2011-09-17/llIFviuueakuBmoyIIvmqdprdssBDcJonjrmEshAqpFBqoEidHnabAAuxFBu/append-to-many-lines.gif" width="433"/&gt;&lt;/div&gt;
&lt;h2&gt;Splits: &lt;code&gt;:split&lt;/code&gt; e &lt;code&gt;:vsplit&lt;/code&gt;.&lt;/h2&gt;
&lt;p&gt;&lt;span&gt;Aqui estao os comandos principais, mas voce pode olhar mais em &lt;code&gt;:help split&lt;/code&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;ul&gt;&lt;li&gt;&lt;span&gt;&lt;code&gt;:split&lt;/code&gt; - irá criar um split (&lt;code&gt;:vsplit&lt;/code&gt; criará um split vertical).&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;code&gt;&amp;lt;C-w&amp;gt;&amp;lt;dir&amp;gt;&lt;/code&gt; - onde &lt;code&gt;dir&lt;/code&gt; é qualquer um de &lt;code&gt;hjkl&lt;/code&gt; para mudar de split.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;code&gt;&amp;lt;C-w&amp;gt;_&lt;/code&gt; (resp. &lt;code&gt;&amp;lt;C-w&amp;gt;|&lt;/code&gt;) - maximiza o tamanho do split (resp. split vertical).&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;code&gt;&amp;lt;C-w&amp;gt;+&lt;/code&gt; (resp. &lt;code&gt;&amp;lt;C-w&amp;gt;-&lt;/code&gt;) - Aumenta (resp. diminui) o split.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/blockquote&gt;
&lt;h2&gt;
&lt;div class="p_embed p_image_embed"&gt;&lt;img alt="Split" height="180" src="http://getfile6.posterous.com/getfile/files.posterous.com/temp-2011-09-17/joaCggzJuAGtakidJhjErFgtCodweExwDlnjGuktpaqshExjaGpnGxxrIbGF/split.gif" width="433"/&gt;&lt;/div&gt;
&lt;/h2&gt;
&lt;h2&gt;Conclusao&lt;/h2&gt;
&lt;p&gt;&lt;span&gt;Aqui estao 90% dos comandos que eu uso todos os dias. Eu sugiro que voce aprenda nao mais que 1 ou 2 comandos por dia. Depois de duas ou tres semanas voce começará a sentir o poder do vim nas suas mãos.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Aprender Vim é mais uma questao de treinamento que de memorização. Felizmente vim vem com otimas ferramentas e uma execelente documentação. Rode&lt;code&gt;vimtutor&lt;/code&gt; para voce se familiarizar com os comandos basicos. Alem disso voce deve ler atentamente está pagina: &lt;code&gt;:help usr_02.txt&lt;/code&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Entao, voce aprenderá sobre &lt;code&gt;!&lt;/code&gt;, &lt;a href="http://vimdoc.sourceforge.net/htmldoc/usr_28.html" target="_blank"&gt;folds&lt;br/&gt;&lt;/a&gt;, registradores, os plugins e muitas outras features. Aprender vim é como se estivesse aprendendo piano e tudo ficará bem.&lt;/span&gt;&lt;/p&gt;
&lt;h2&gt;Fim do post&lt;/h2&gt;
&lt;p&gt;&lt;span&gt;Agora que voce ja sabe vim, use-o da maneira correta. Esqueça seu mouse, Ctrl-c + Ctrl+v, use as features do vim, se forçe a usa-las, eu garanto que depois que voce se sentir confortavel, vai voar.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Qualquer duvida e/ou critica podem deixar nos comentarios.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Até a proxima&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;strong&gt;OBS&lt;/strong&gt;: Post totalmente editado no VIM, usando &lt;a href="http://daringfireball.net/projects/markdown/" target="_blank"&gt;markdown&lt;/a&gt;.&lt;/span&gt;&lt;/p&gt;


&lt;/div&gt;</description><link>http://blog.tarsisazevedo.com/post/16543244858</link><guid>http://blog.tarsisazevedo.com/post/16543244858</guid><pubDate>Thu, 26 Jan 2012 18:54:00 -0400</pubDate><category>howto</category><category>programacao</category><category>programador</category><category>tutorial</category><category>vim</category></item><item><title>FISL 12 - A segunda vez é ainda melhor</title><description>&lt;div class="posterous_autopost"&gt;
&lt;div&gt;
&lt;p&gt;&lt;span&gt;Na ultima semana rolou em Porto Alegre mais um &lt;a href="http://softwarelivre.org/fisl12" target="_blank"&gt;FISL&lt;/a&gt; na PUC. Foram 4 dias conhecendo e conversando com muita gente, revendo amigos, comendo muito churrasco e sentindo muito frio!&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Esse foi meu segundo FISL, e como dizem: a segunda vez é ainda melhor!&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Fiquei grande parte do tempo no stand da globo.com, conversando com pessoas da comunidade python, conhecendo gente de todo brasil e fazendo novas amizades. Tive contato com muitos alunos e futuros programadores, uns mais interessados e outros só querendo brindes xD&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;No stand da globo.com apresentei uma &lt;a href="http://www.slideshare.net/tarsisazevedo/coding-dojo-pythoncampus" target="_blank"&gt;lightning talk sobre Coding Dojo&lt;/a&gt; e convidei a galera para participar de um dojo no sabado a tarde!&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt; &lt;/span&gt;&lt;/p&gt;
&lt;div class="p_embed p_image_embed"&gt;&lt;a href="http://getfile6.posterous.com/getfile/files.posterous.com/temp-2011-07-04/mwbuBheyCFapGCEwghfbfltisvqaullaCqHojHomeqHepuzoFGJJklthcqkw/dojo_globocom.jpg.scaled1000.jpg" target="_blank"&gt;&lt;img alt="Dojo_globocom" height="373" src="http://getfile9.posterous.com/getfile/files.posterous.com/temp-2011-07-04/mwbuBheyCFapGCEwghfbfltisvqaullaCqHojHomeqHepuzoFGJJklthcqkw/dojo_globocom.jpg.scaled500.jpg" width="500"/&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br/&gt;&lt;p&gt;&lt;span&gt;&lt;!-- more --&gt;E apareceram mais pessoas que eu esperava.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Junto com o &lt;a href="http://twitter.com/israelst" target="_blank"&gt;Israel Teixeira&lt;/a&gt;, do &lt;a href="http://dojorio.org" target="_blank"&gt;dojorio&lt;/a&gt;, guiamos um dojo em python colocando em pratica os conceitos de &lt;a href="http://www.slideshare.net/rhcarvalho/tdd-do-seu-jeito" target="_blank"&gt;TDD&lt;/a&gt; aprensentados por ele na sua palestra. O codigo e o feeback estao no &lt;a href="https://github.com/tarsis/dojo-fisl" target="_blank"&gt;github&lt;/a&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Tambem nesse FISL tive a oportunidade de apresentar &lt;a href="http://speakerdeck.com/u/tarsisazevedo/p/refactoring-comece-agora" target="_blank"&gt;minha primeira palestra&lt;/a&gt; em um grande evento, e o resultado nao poderia ser melhor!&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Sala cheia, muitas perguntas e elogios.&lt;/span&gt;&lt;/p&gt;
&lt;div class="p_embed p_image_embed"&gt;&lt;a href="http://getfile7.posterous.com/getfile/files.posterous.com/temp-2011-07-04/aqkBrhHvpBBFbfJymFFmnImbzoqDablcoanjqHDaEECpveCjmGEGEGaHbdxr/palestra.jpg.scaled1000.jpg" target="_blank"&gt;&lt;img alt="Palestra" height="281" src="http://getfile1.posterous.com/getfile/files.posterous.com/temp-2011-07-04/aqkBrhHvpBBFbfJymFFmnImbzoqDablcoanjqHDaEECpveCjmGEGEGaHbdxr/palestra.jpg.scaled500.jpg" width="500"/&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;&lt;span&gt;Esse FISL foi inesquecivel, agora que venha a QCON Br e a Python Brasil! Nos vemos lá!&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;ps: &lt;a href="http://yfrog.com/5gp2cz" target="_blank"&gt;veja o que o Henrique Bastos tem a dizer sobre o FISL 12!&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;

&lt;/div&gt;</description><link>http://blog.tarsisazevedo.com/post/16543160375</link><guid>http://blog.tarsisazevedo.com/post/16543160375</guid><pubDate>Thu, 26 Jan 2012 18:53:00 -0400</pubDate><category>dojo</category><category>fisl</category><category>palestra</category></item><item><title>Vagrant - Maquinas virtuais leves e rapidas</title><description>&lt;div class="posterous_autopost"&gt;
&lt;p&gt;Se voce é programador e precisa subir maquinas virtuais pra testar sites no IE 6/7/8/9, ou quer fazer deploy para ambientes iguais os de produção, e pra mais varias coisas que precisam ser rapidas e são mega chatas e demoradas, e voce usa VirtualBox – &lt;strong&gt;Voce esta fazendo isso errado&lt;/strong&gt;.&lt;/p&gt;
&lt;h2&gt;Ok, entao eu uso o que?&lt;/h2&gt;
&lt;p&gt;O &lt;a href="http://vagrantup.com/" target="_blank"&gt;vagrant&lt;/a&gt; é uma ferramenta para a construção e distribuição de ambientes dedesenvolvimento virtualizados, escrita em ruby que usa o VirtualBox da Oracle como base, e prove funcionalidades que permitem criar, distribuir, reproduzir e configurar Maquinas Virtuais(VM) de forma rapida (fonte: &lt;a href="https://github.com/mitchellh/vagrant" target="_blank"&gt;github do projeto&lt;/a&gt;).&lt;/p&gt;
&lt;h2&gt;&lt;!-- more --&gt;ComoFas&lt;/h2&gt;
&lt;hr&gt;&lt;p&gt;Como eu disse anterior mente é muito facil, basta ter o ruby, e a virtualbox instalada, uma internet boa ajuda tambem.&lt;/p&gt;
&lt;p&gt;Tendo isso instalado vamos começar:&lt;/p&gt;
&lt;p&gt;Execute esse comando:&lt;/p&gt;
&lt;div class="CodeRay"&gt;
&lt;div class="code"&gt;
&lt;pre&gt;$ gem install vagrant&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Certifique-se que tudo está instalado corretamente.&lt;/p&gt;
&lt;p&gt;Antes de criar sua maquina, crie uma pasta para abrigar os arquivos de configuraçao:&lt;/p&gt;
&lt;div class="CodeRay"&gt;
&lt;div class="code"&gt;
&lt;pre&gt;$ mkdir vagrant-machine&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Agora vamos criar uma VM com ubuntu 10.04&lt;/p&gt;
&lt;div class="CodeRay"&gt;
&lt;div class="code"&gt;
&lt;pre&gt;$ cd vagrant-machine $ vagrant box add lucid32 &lt;a href="http://files.vagrantup.com/lucid32.box" target="_blank"&gt;http://files.vagrantup.com/lucid32.box&lt;/a&gt; $ vagrant init lucid32 $ vagrant up&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Feito isso sua VM ja está pronta para ser acessada!&lt;/p&gt;
&lt;h2&gt;Mas é só isso mesmo?!&lt;/h2&gt;
&lt;p&gt;Claro que nao!!! Agora vamos configurar seu ambiente! Primeiro, abra o arquivo &lt;strong&gt;Vagrantfile&lt;/strong&gt; na pasta vagrant-machine e deixe ele assim:&lt;/p&gt;
&lt;div class="CodeRay"&gt;
&lt;div class="code"&gt;
&lt;pre&gt;&lt;span class="constant"&gt;Vagrant&lt;/span&gt;::&lt;span class="constant"&gt;Config&lt;/span&gt;.run &lt;span class="keyword"&gt;do&lt;/span&gt; |config| &lt;span class="comment"&gt;# Setup the box&lt;/span&gt; config.vm.box = &lt;span class="string"&gt;&lt;span class="delimiter"&gt;"&lt;/span&gt;&lt;span class="content"&gt;lucid32&lt;/span&gt;&lt;span class="delimiter"&gt;"&lt;/span&gt;&lt;/span&gt; &lt;span class="keyword"&gt;end&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Execute o comando de &lt;strong&gt;reload&lt;/strong&gt; para carregar suas modificações&lt;/p&gt;
&lt;div class="CodeRay"&gt;
&lt;div class="code"&gt;
&lt;pre&gt;$ vagrant reload&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Teste o acesso a sua VM para ver se está funcionando corretamente&lt;/p&gt;
&lt;div class="CodeRay"&gt;
&lt;div class="code"&gt;
&lt;pre&gt;$ vagrant ssh&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;OBS&lt;/strong&gt;: Tudo que voce colocar na pasta onde está seu Vagrantfile, aparecerá na VM na pasta &lt;strong&gt;/vagrant&lt;/strong&gt;. Para ter certeza, execute este comando na VM:&lt;/p&gt;
&lt;div class="CodeRay"&gt;
&lt;div class="code"&gt;
&lt;pre&gt;$ ls /vagrant&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;Agora acabou?&lt;/h2&gt;
&lt;p&gt;Bom agora voce tem que instalar os pacotes que voce precisa no seu ambiente. Para isso eu escolhi usar o &lt;a href="http://wiki.opscode.com/display/chef/A+Can+of+Condensed+Chef+Documentation" target="_blank"&gt;chef&lt;/a&gt; para gerenciar a instalação. Esse processo depende muito do seu ambiente, entao deixarei referencias para montagem de ambientes usando o chef.&lt;/p&gt;
&lt;p&gt;Para estudar o vagrant e o chef &lt;a href="http://github.com/tarsis/vagrant-ci/" target="_blank"&gt;eu fiz uma VM&lt;/a&gt; configurada para ser um servidor de &lt;a href="http://martinfowler.com/articles/continuousIntegration.html" target="_blank"&gt;CI&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Nela estao instalados os seguintes pacotes: * Django 1.3 * Apache * git * MySql * Jenkins (servidor de CI)&lt;/p&gt;
&lt;p&gt;&lt;a href="http://github.com/tarsis/vagrant-ci/" target="_blank"&gt;Download aqui&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;OBS&lt;/strong&gt;: Execute a VM e acesse o servidor de CI pela url &lt;strong&gt;&lt;a href="http://localhost:8080/" target="_blank"&gt;http://localhost:8080/&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;Referencias:&lt;/h2&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://vagrantup.com/docs/getting-started/" target="_blank"&gt;Tutorial em ingles&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.jedi.be/blog/2011/03/28/using-vagrant-as-a-team/" target="_blank"&gt;Using vagrant as a Team&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://vimeo.com/9976342" target="_blank"&gt;Video Tutorial&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://drnicwilliams.com/2010/11/09/making-ci-easier-to-do-than-not-to-with-hudson-ci-and-vagrant/" target="_blank"&gt;Making CI easier to do than not to with Hudson CI and Vagrant&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://wiki.opscode.com/display/chef/A+Can+of+Condensed+Chef+Documentation" target="_blank"&gt;Chef Docs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://unfoldthat.com/2011/05/06/using-vagrant-for-your-django-development.html" target="_blank"&gt;Using vagrant for you web development&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;Bom, é isso, divirtam-se com suas novas VMs rapidas e praticas.&lt;/p&gt;
&lt;p&gt;Duvidas e criticas, deixem nos comentarios.&lt;/p&gt;
&lt;p&gt;Até a proxima&lt;/p&gt;
&lt;/div&gt;</description><link>http://blog.tarsisazevedo.com/post/16543134478</link><guid>http://blog.tarsisazevedo.com/post/16543134478</guid><pubDate>Thu, 26 Jan 2012 18:53:00 -0400</pubDate><category>continuous integration</category><category>desenvolvimento web</category><category>maquina virtual</category><category>ruby</category><category>vagrant</category></item><item><title>Scaling Rails - Dicas simples que podem salvar sua vida!</title><description>&lt;div class="posterous_autopost"&gt;&lt;p&gt;&lt;span style="font-size: small;"&gt;&lt;span style="color: #333333; font-family: Helvetica, Arial, sans-serif; font-size: 14px; line-height: 20px;"&gt;Todo dia, toda hora alguém levanta a mesma questão: Rails escala? Djángo escala? &amp;lt;seu framework preferido&amp;gt; escala?Se você ainda faz essas perguntas, fique sabendo que se sua aplicação não escala, &lt;span style="text-decoration: line-through;"&gt;a culpa é toda sua&lt;/span&gt; provavelmente você esta fazendo &lt;span style="text-decoration: line-through;"&gt;merda&lt;/span&gt; algo de errado.&lt;p&gt;&lt;/p&gt;&lt;span style="font-size: large;"&gt;&lt;strong&gt;Ok, já que você disse, o que posso fazer pra melhorar?!&lt;/strong&gt;&lt;/span&gt;O Gregg Pollack, criou uma seria de vídeocasts dando dicas super rápidas e simples para escalar uma aplicação rails.&lt;p&gt;&lt;/p&gt; =&amp;gt; &lt;a href="http://railslab.newrelic.com/scaling-rails" target="_blank"&gt;VEJA OS VIDEOCAST AQUI&lt;/a&gt; &amp;lt;=São dicas como, page cache, expiration, load tests e mais outras coisas legais que podem ser aplicadas facilmente e rapidamente em qualquer projeto rails.&lt;p&gt;&lt;/p&gt;Para django, existe essa &lt;a href="http://stackoverflow.com/questions/886221/does-django-scale" target="_blank"&gt;thread no StackOverflow&lt;/a&gt; que explica varias formas de escalar uma aplicação django&lt;span style="font-size: large;"&gt;&lt;strong&gt;Legal, mas eu trabalho com outro framework&lt;/strong&gt;&lt;/span&gt;&lt;p&gt;&lt;/p&gt;Essas dicas podem ser aplicadas em quase todas as linguagens e frameworks. Basta fazer o paralelo entre a ferramenta mostrada no vídeo|thread e uma similar que pode ser usada com seu framework.Uma simpless pesquisa no google já traz sua resposta!&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;&lt;span style="font-size: small;"&gt;&lt;span style="color: #333333; font-family: Helvetica, Arial, sans-serif; font-size: 14px; line-height: 20px;"&gt;Se tiver outra indicaçao de material, ou dica, deixa ai nos comentarios,&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;Thanks.&lt;/p&gt;&lt;/div&gt;</description><link>http://blog.tarsisazevedo.com/post/16543034165</link><guid>http://blog.tarsisazevedo.com/post/16543034165</guid><pubDate>Thu, 26 Jan 2012 18:51:23 -0400</pubDate><category>dica</category><category>django</category><category>rails</category><category>scaling</category><category>stackoverflow</category></item><item><title>development |should| be_funny - Python e TDD</title><description>&lt;div class="posterous_autopost"&gt;
&lt;h2&gt;Should o que?!&lt;/h2&gt;
&lt;p&gt;O should-dsl é uma ferramenta de teste que tem como principal objetivo tornar o codigo mais legivel e limpo. (&lt;a href="http://www.should-dsl.info/)" target="_blank"&gt;&lt;a href="http://www.should-dsl.info/" target="_blank"&gt;http://www.should-dsl.info/&lt;/a&gt;)&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Ok, mas #comofas?&lt;/h2&gt;
&lt;p&gt;Depois de instalado (o site ensina como fazer) é bem simples começar a escrever os testes. Tá duvidando, então olha só:&lt;/p&gt;
&lt;h6&gt;Esse exemplo eh a implementacao das specs da musica &lt;a href="http://letras.terra.com.br/ventania/136246/" target="_blank"&gt;Só para Loucos – Ventania&lt;/a&gt;&lt;!-- more --&gt;&lt;/h6&gt;
&lt;h2&gt;So Para Loucos Spec Spec&lt;/h2&gt;
&lt;div class="CodeRay"&gt;
&lt;div class="code"&gt;
&lt;pre class="python"&gt;&lt;code&gt;
class Pessoa:
		louco = False
		careta = True

		def colher_cogumelos(self):
		    self.cogumelos = ['cogumelo1', 'cogumelo2', 'cogumelo3', 'cogumelo4', 'cogumelo5']
		    return self.cogumelos

		def fazer_cha(self, *ingredientes):
		    cha = ingredientes
		    return cha

		def beber(self, oque):
		    self.louco = True
		    self.careta = False
		    self.versos = ['espinho', 'espinho']

		    return self

		def guardar_cogumelos(self, cogumelos):
		    self.recanto_espiritual = cogumelos
		    return self.recanto_espiritual


	class TestSoParaLoucos(unittest.TestCase):
	    def setUp(self):
	    	self.pessoa = Pessoa()

	    def test_deve_ser_careta_sem_tomar_nada(self):
	    	self.pessoa |should| be_careta

	    def test_deve_estar_louco_depois_de_tomar_um_cha_de_cogumelo(self):
	    	cogumelos = self.pessoa.colher_cogumelos()

	    	cha_de_cogumelo = self.pessoa.fazer_cha(cogumelos)
	    	cha_de_cogumelo |should| contain(cogumelos)

	    	self.pessoa.beber(cha_de_cogumelo) |should| be_louco
	    	self.pessoa.versos |should| have(2).espinhos

	    def test_deve_guardar_cogumelos_escondidos(self):
	        cogumelos = self.pessoa.colher_cogumelos()
	    	self.pessoa.guardar_cogumelos(cogumelos)
	    	self.pessoa.recanto_espiritual |should| have(5).cogumelos

	if __name__ == '__main__':
	    unittest.main()
&lt;/code&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;Só isso?&lt;/h2&gt;
&lt;p&gt;Isso foi só um exemplo ludico, pra mostrar as possibilidades da ferramneta! Hoje ela contem varios matchers(as funções de teste) para os mais variados objetivos. Voce pode ver a &lt;a href="http://www.should-dsl.info/available_matchers.html" target="_blank"&gt;lista completa aqui&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Voce tambem pode fazer &lt;a href="http://www.should-dsl.info/custom_matchers.html" target="_blank"&gt;seus proprios matchers&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Acabou?&lt;/h2&gt;
&lt;p&gt;Se voce gostou do projeto e quer ajudar, &lt;a href="http://www.should-dsl.info/contributing.html" target="_blank"&gt;aqui vc encontra varias formas de contribuir!&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Entao eh isso, Até a proxima xD&lt;/p&gt;
&lt;/div&gt;</description><link>http://blog.tarsisazevedo.com/post/16542993887</link><guid>http://blog.tarsisazevedo.com/post/16542993887</guid><pubDate>Thu, 26 Jan 2012 18:50:00 -0400</pubDate><category>python</category><category>should-dsl</category><category>tdd</category></item><item><title>Django Trick: Hospedagem grátis no Alwaysdata</title><description>&lt;div class="posterous_autopost"&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;Quem programa em django, sente falta de um Heroku[1], como no rails para fazer deploy e colocar a aplicaçao online mais rapido e de graça.&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="font-size: medium;"&gt;Obervação: Existe um serviço que tem essa proposta, ser um Heroku pra Django, é o Djangy (&lt;/span&gt;&lt;a href="https://www.djangy.com/" target="_blank"&gt;&lt;a href="https://www.djangy.com/" target="_blank"&gt;https://www.djangy.com/&lt;/a&gt;&lt;/a&gt;), &lt;span style="text-decoration: line-through;"&gt;Porem ele esta em teste!&lt;/span&gt;&lt;span style="font-size: small;"&gt; Voce pode entrar e pedir um convite. &lt;span style="text-decoration: line-through;"&gt;Eu ja pedi mas nao foi aceito ainda! =/&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p&gt; &lt;/p&gt;  &lt;p&gt;&lt;span style="font-size: x-large;"&gt;&lt;strong&gt;Uma Solução&amp;#8230;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="font-size: medium;"&gt;&amp;#8230; pra esse problema é o alwaysdata.com . Eles tem varios planos de hospedagem, e um deles é totalmente free!!! xD&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="font-size: medium;"&gt;Assim, voce pode desenvolver sua aplicação e ja colocar no ar! &lt;/span&gt;&lt;/p&gt;    &lt;p&gt;&lt;span style="font-size: x-large;"&gt;&lt;strong&gt;Facil assim?&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="font-size: small;"&gt;Sim, fácil assim!! A interface deles é muito simples. Você configura seu servidor com a versão do python/django que usa com 1 clique.&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="font-size: medium;"&gt;Depois é só enviar a aplicação via ssh para o server, seguir os passos deles pra deploy[2] e pronto, sua aplicação django estará no ar!!!&lt;/span&gt;&lt;/p&gt;    &lt;p&gt;&lt;span style="font-size: x-large;"&gt;&lt;strong&gt;Que massa! Isso é perfeito!&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="font-size: medium;"&gt;Não!&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="font-size: medium;"&gt;Ele tem alguns pequenos problemas:&lt;/span&gt;&lt;/p&gt;  &lt;ol&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt;Algumas partes importantes do site estao em frances&lt;/span&gt;   &lt;ul&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt;pagina da wiki que ensina o deploy e o acesso via ssh&lt;/span&gt;&lt;/li&gt;  &lt;/ul&gt;&lt;/li&gt;  &lt;li&gt;&lt;span style="font-size: medium;"&gt;Não tem um script ou deploy automatizado como o Heroku&lt;/span&gt;   &lt;ul&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt;Isso pode ser feito com um shell script simples(&lt;strong&gt;No proximo artigo deste blog&lt;/strong&gt;)&lt;/span&gt;&lt;/li&gt;  &lt;li&gt;&lt;span style="font-size: small;"&gt;&lt;strong&gt;Pra agilizar&lt;/strong&gt;, voce pode habilitar o acesso ao ssh sem senha[3]&lt;/span&gt;&lt;/li&gt;  &lt;/ul&gt;&lt;/li&gt;  &lt;li&gt;&lt;span style="font-size: small;"&gt;O plano é fraco&lt;/span&gt;&lt;ol&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt;Mas, se seu objetivo é só &amp;#8220;testar&amp;#8221; em produção ele te atende!&lt;/span&gt;&lt;/li&gt;  &lt;li&gt;&lt;span style="font-size: small;"&gt;É uma forma de aprender fazendo &lt;/span&gt;&lt;/li&gt;  &lt;li&gt;&lt;span style="font-size: small;"&gt;E é de graça!!!&lt;/span&gt;&lt;/li&gt;  &lt;/ol&gt;&lt;/li&gt;  &lt;/ol&gt;&lt;p&gt;&lt;span style="font-size: small;"&gt;Até a proxima pessoal,&lt;/span&gt;&lt;/p&gt;    &lt;p&gt;&lt;span style="font-size: small;"&gt;Abraços.&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="font-size: small;"&gt;[1]&lt;/span&gt;&lt;a href="http://heroku.com/" target="_blank"&gt;&lt;a href="http://heroku.com/" target="_blank"&gt;http://heroku.com/&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;[2]&lt;a href="http://wiki.alwaysdata.com/wiki/D%C3%A9ployer_une_application_Django" target="_blank"&gt;&lt;a href="http://wiki.alwaysdata.com/wiki/D%C3%A9ployer_une_application_Django" target="_blank"&gt;http://wiki.alwaysdata.com/wiki/D%C3%A9ployer_une_application_Django&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;[3]&lt;a href="http://tarsisazevedo.posterous.com/truque-ssh-sem-senha" target="_blank"&gt;&lt;a href="http://tarsisazevedo.posterous.com/truque-ssh-sem-senha" target="_blank"&gt;http://tarsisazevedo.posterous.com/truque-ssh-sem-senha&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;    &lt;p&gt; &lt;/p&gt;    &lt;p&gt; &lt;/p&gt;&lt;/div&gt;</description><link>http://blog.tarsisazevedo.com/post/16542946813</link><guid>http://blog.tarsisazevedo.com/post/16542946813</guid><pubDate>Thu, 26 Jan 2012 18:49:57 -0400</pubDate><category>alwaysdata</category><category>deploy</category><category>django</category></item><item><title>Truque Ssh: Sem Senha</title><description>&lt;div class="posterous_autopost"&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;Voce tem que &lt;strong&gt;acessar um servidor muitas vezes ao dia&lt;/strong&gt;, e esta cansado de&lt;strong&gt; digitar senha toda hora&lt;/strong&gt;? Voce nao aguenta mais &lt;strong&gt;gravar mil senhas&lt;/strong&gt;? Tem que &lt;strong&gt;digitar todas as mil senhas&lt;/strong&gt; para tentar acessar sua maquina remota?&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="font-size: xx-small;"&gt;&lt;strong&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: x-large;"&gt;Seus problemas acabaram!!!&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="font-size: small;"&gt;Voce só vai precisar de:&lt;/span&gt;&lt;/p&gt;  &lt;ul&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt;Um terminal linux&lt;/span&gt;&lt;/li&gt;  &lt;li&gt;&lt;span style="font-size: small;"&gt;Senha da maquina que vc acessa (E só mais uma vez, eu garanto)&lt;/span&gt;&lt;/li&gt;  &lt;li&gt;&lt;span style="font-size: small;"&gt;Alguns comandos linux.&lt;/span&gt;   &lt;ul&gt;&lt;li&gt;&lt;span style="font-size: x-large;"&gt;&lt;span style="font-size: small;"&gt;&lt;strong&gt;Atenção: &lt;/strong&gt;se voce nao é muito experiente em linux, peça ajuda de um adulto xD,&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;  &lt;/ul&gt;&lt;/li&gt;  &lt;/ul&gt;&lt;p&gt;&lt;span style="font-size: small;"&gt;Tudo pronto? Entao&amp;#8230;&lt;/span&gt;&lt;/p&gt;    &lt;p&gt;&lt;span style="font-size: small;"&gt;Abra o terminal e digite:&lt;/span&gt;&lt;/p&gt;  &lt;blockquote&gt;  &lt;p&gt;&lt;span style="font-size: small;"&gt;ssh-keygen -t rsa&lt;/span&gt;&lt;/p&gt;  &lt;/blockquote&gt;    &lt;p&gt;&lt;span style="font-size: small;"&gt;Bom agora voce vai ver as seguintes mensagens:&lt;/span&gt;&lt;/p&gt;  &lt;blockquote&gt;  &lt;p&gt;&lt;span style="font-size: small;"&gt;Enter file in which to save the key (/home/user1/.ssh/id_rsa):&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="font-size: small;"&gt;Enter passphrase (empty for no passphrase):&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="font-size: small;"&gt;Enter same passphrase again:&lt;/span&gt;&lt;/p&gt;  &lt;/blockquote&gt;  &lt;p&gt;&lt;span style="font-size: small;"&gt; &lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="font-size: small;"&gt;&lt;strong&gt;APENAS TECLE ENTER PARA TODAS!!!!&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="font-size: small;"&gt;&lt;br/&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="font-size: small;"&gt;Agora faça o seguinte:&lt;/span&gt;&lt;/p&gt;  &lt;blockquote&gt;  &lt;p&gt;&lt;span style="font-size: small;"&gt;scp ~/.ssh/id_rsa.pub root@sua_maquina_remota:~&lt;/span&gt;&lt;/p&gt;  &lt;/blockquote&gt;    &lt;p&gt;&lt;span style="font-size: small;"&gt;Se isso deu certo, agora acesse sua maquina:&lt;/span&gt;&lt;/p&gt;  &lt;blockquote&gt;  &lt;p&gt;&lt;span style="font-size: small;"&gt;ssh root@sua_maquina_remota&lt;/span&gt;&lt;/p&gt;  &lt;/blockquote&gt;    &lt;p&gt;&lt;span style="font-size: small;"&gt;Estando na maquina faça o seguinte:&lt;/span&gt;&lt;/p&gt;  &lt;blockquote&gt;  &lt;p&gt;&lt;span style="font-size: medium;"&gt;cat id_rsa.pub&amp;#160;&amp;#187; .ssh/authorized_keys&lt;/span&gt;&lt;/p&gt;  &lt;/blockquote&gt;  &lt;p&gt;Se o diretorio .ssh nao existir, crie-o assim: mkdir .ssh&lt;/p&gt;    &lt;p&gt;&lt;span style="font-size: medium;"&gt;Feito isso, apenas saia da maquina remota e tente acessar novamente.&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="font-size: medium;"&gt;&lt;strong&gt;Agora voce nao precisa mais de senhas!!!&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p&gt;&lt;strong&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: x-large;"&gt;Porem&lt;/span&gt;&amp;#8230;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="font-size: medium;"&gt;Existe uma lei do universo que diz o seguinte: se algo pode dar errado, vai dar errado, entao&amp;#8230;&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="font-size: small;"&gt;Se depois de seguir todos esses passos, voce encontrar com esse erro:&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Lucida Grande, sans-serif; color: #444444; font-size: 10px;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;blockquote&gt;  &lt;p&gt;&lt;span style="font-family: Lucida Grande, sans-serif; font-size: 10px; color: #444444;"&gt; &lt;/span&gt;&lt;/p&gt;  &lt;h2 class="posttitle" style="font-size: 1,5em; color: #225588; font-family: Times New Roman, Times, serif; text-align: left; margin-top: 0px; margin-right: 0px; margin-bottom: 5px; margin-left: 0px; padding: 0px;"&gt;&lt;span style="font-size: medium;"&gt;“agent admitted failure to sign using the key”&lt;/span&gt;&lt;/h2&gt;    &lt;/blockquote&gt;  &lt;p&gt;&lt;span style="font-family: Lucida Grande, sans-serif; font-size: 10px; color: #444444;"&gt; &lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="font-size: medium;"&gt;Basta fazer o seguinte na maquina local, nao na maquina remota:&lt;/span&gt;&lt;/p&gt;    &lt;p&gt; &lt;/p&gt;  &lt;blockquote&gt;  &lt;p&gt;&lt;span style="font-size: medium;"&gt;sudo apt-get install ssh-add&lt;/span&gt;&lt;/p&gt;  &lt;/blockquote&gt;    &lt;p&gt;&lt;span style="font-size: small;"&gt;Por fim..&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="font-size: small;"&gt;deixe seu feedback(problemas, sugestoes, etc) nos comentarios.&lt;/span&gt;&lt;/p&gt;    &lt;p&gt;&lt;span style="font-size: small;"&gt;Obrigado, e até a proxima pessoal!&lt;/span&gt;&lt;/p&gt;    &lt;p&gt;&lt;span style="font-size: small;"&gt;Referencias:&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="font-size: small;"&gt;&lt;a href="http://polishlinux.org/apps/ssh-tricks/" target="_blank"&gt;&lt;a href="http://polishlinux.org/apps/ssh-tricks/" target="_blank"&gt;http://polishlinux.org/apps/ssh-tricks/&lt;/a&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="font-size: small;"&gt;&lt;a href="http://www.pedropereira.net/ssh-sem-senha-autenticacao-atraves-de-certificados-rsa/" target="_blank"&gt;&lt;a href="http://www.pedropereira.net/ssh-sem-senha-autenticacao-atraves-de-certificados-rsa/" target="_blank"&gt;http://www.pedropereira.net/ssh-sem-senha-autenticacao-atraves-de-certificados-rsa/&lt;/a&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="font-size: small;"&gt;&lt;a href="http://www.baptiste-wicht.com/2010/07/tip-how-to-solve-agent-admitted-failure-to-sign-using-the-key-error/" target="_blank"&gt;&lt;a href="http://www.baptiste-wicht.com/2010/07/tip-how-to-solve-agent-admitted-failure-to-sign-using-the-key-error/" target="_blank"&gt;http://www.baptiste-wicht.com/2010/07/tip-how-to-solve-agent-admitted-failure-to-sign-using-the-key-error/&lt;/a&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;</description><link>http://blog.tarsisazevedo.com/post/16542842657</link><guid>http://blog.tarsisazevedo.com/post/16542842657</guid><pubDate>Thu, 26 Jan 2012 18:48:15 -0400</pubDate><category>shell</category><category>tricks</category></item></channel></rss>
