<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10portuguesefull.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">
  <title><![CDATA[Nome do Jogo]]></title>
  
  <link href="http://nomedojogo.com/" />
  <updated>2012-04-19T02:44:38-03:00</updated>
  <id>http://nomedojogo.com/</id>
  <author>
    <name><![CDATA[Carlos Brando]]></name>
    
  </author>
  <generator uri="http://octopress.org/">Octopress</generator>

  
    <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/NomeDoJogo" /><feedburner:info uri="nomedojogo" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:emailServiceId>NomeDoJogo</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><feedburner:feedFlare href="http://add.my.yahoo.com/rss?url=http%3A%2F%2Ffeeds.feedburner.com%2FNomeDoJogo" src="http://us.i1.yimg.com/us.yimg.com/i/us/my/addtomyyahoo4.gif">Subscribe with My Yahoo!</feedburner:feedFlare><feedburner:feedFlare href="http://www.bloglines.com/sub/http://feeds.feedburner.com/NomeDoJogo" src="http://www.bloglines.com/images/sub_modern11.gif">Subscribe with Bloglines</feedburner:feedFlare><feedburner:feedFlare href="http://www.netvibes.com/subscribe.php?url=http%3A%2F%2Ffeeds.feedburner.com%2FNomeDoJogo" src="http://www.netvibes.com/img/add2netvibes.gif">Subscribe with Netvibes</feedburner:feedFlare><feedburner:feedFlare href="http://fusion.google.com/add?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2FNomeDoJogo" src="http://buttons.googlesyndication.com/fusion/add.gif">Subscribe with Google</feedburner:feedFlare><feedburner:feedFlare href="http://www.pageflakes.com/subscribe.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2FNomeDoJogo" src="http://www.pageflakes.com/ImageFile.ashx?instanceId=Static_4&amp;fileName=ATP_blu_91x17.gif">Subscribe with Pageflakes</feedburner:feedFlare><feedburner:feedFlare href="http://www.live.com/?add=http%3A%2F%2Ffeeds.feedburner.com%2FNomeDoJogo" src="http://tkfiles.storage.msn.com/x1piYkpqHC_35nIp1gLE68-wvzLZO8iXl_JMledmJQXP-XTBOLfmQv4zhj4MhcWEJh_GtoBIiAl1Mjh-ndp9k47If7hTaFno0mxW9_i3p_5qQw">Subscribe with Live.com</feedburner:feedFlare><entry>
      




<title type="html"><![CDATA[How I do my Computing &#9875;]]></title>
<link href="http://feedproxy.google.com/~r/NomeDoJogo/~3/R2SSD7kBEDA/stallman-computing.html" />
<updated>2012-04-09T11:10:00-03:00</updated>
<id>http://nomedojogo.com/2012/04/09/how-i-do-my-computing</id>

      <content type="html">&lt;p&gt;Que Richard Stallman tem um conceito bem extremista com respeito a software, todo mundo sabe. Mas é sempre interessante ler a respeito de suas convicções e da forma como ele usa o computador nos dias de hoje.&lt;/p&gt;
&lt;p&gt;&lt;a rel="bookmark" href="http://nomedojogo.com/2012/04/09/how-i-do-my-computing/"&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/NomeDoJogo/~4/R2SSD7kBEDA" height="1" width="1"/&gt;</content>
    <feedburner:origLink>http://stallman.org/stallman-computing.html</feedburner:origLink></entry>
  
    <entry>
      




<title type="html"><![CDATA[Burnout &#9875;]]></title>
<link href="http://feedproxy.google.com/~r/NomeDoJogo/~3/2XmVXiOHqH4/" />
<updated>2012-04-08T22:33:00-03:00</updated>
<id>http://nomedojogo.com/2012/04/08/burnout</id>

      <content type="html">&lt;p&gt;&lt;a href="http://pt.wikipedia.org/wiki/S%C3%ADndrome_de_Burnout"&gt;Síndrome de Burnout&lt;/a&gt; é muito comum em nossa profissão. Algumas vezes não percebemos os sintomas e em muitas outras simplesmente ignoramos.&lt;/p&gt;

&lt;p&gt;Ler o relato de um programador que passou por uma situação extrema de estresse pode servir como um bom alerta para aqueles que viram madrugadas e/ou trabalham por muitas horas sem descanso &lt;em&gt;achando&lt;/em&gt; que são super produtivos por isso.&lt;/p&gt;

&lt;p&gt;Os sintomas da síndrome de burnout começam com dores de cabeça, tonturas, tremores, falta de ar, oscilações de humor, distúrbios do sono, dificuldade de concentração e problemas digestivos.&lt;/p&gt;
&lt;p&gt;&lt;a rel="bookmark" href="http://nomedojogo.com/2012/04/08/burnout/"&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/NomeDoJogo/~4/2XmVXiOHqH4" height="1" width="1"/&gt;</content>
    <feedburner:origLink>http://geon.github.com/Personal/2012/04/07/burnout/</feedburner:origLink></entry>
  
    <entry>
      




<title type="html"><![CDATA[Enviando o link da página atual por e-mail]]></title>
<link href="http://feedproxy.google.com/~r/NomeDoJogo/~3/_aEzJiwasFM/" />
<updated>2012-04-06T12:01:00-03:00</updated>
<id>http://nomedojogo.com/2012/04/06/enviando-o-link-da-pagina-atual-por-e-mail</id>

      <content type="html">&lt;p&gt;Eu não conhecia esse atalho, mas já está sendo muito útil.&lt;/p&gt;

&lt;blockquote class="twitter-tweet tw-align-center"&gt;&lt;p&gt;hmm, wow.. just discovered ⌘-Shift-I  in Chrome (emails your current page) - that&amp;#8217;ll save me a lot of typing!&lt;/p&gt;&amp;mdash; Ilya Grigorik (@igrigorik) &lt;a href="https://twitter.com/igrigorik/status/188144881598869504" data-datetime="2012-04-06T06:03:29+00:00"&gt;April 6, 2012&lt;/a&gt;&lt;/blockquote&gt;


&lt;script src="http://nomedojogo.com//platform.twitter.com/widgets.js" charset="utf-8"&gt;&lt;/script&gt;

&lt;p&gt;&lt;a rel="bookmark" href="http://nomedojogo.com/2012/04/06/enviando-o-link-da-pagina-atual-por-e-mail/"&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/NomeDoJogo/~4/_aEzJiwasFM" height="1" width="1"/&gt;</content>
    <feedburner:origLink>http://nomedojogo.com/2012/04/06/enviando-o-link-da-pagina-atual-por-e-mail/</feedburner:origLink></entry>
  
    <entry>
      




<title type="html"><![CDATA[Heroku Add-ons Catalog &#9875;]]></title>
<link href="http://feedproxy.google.com/~r/NomeDoJogo/~3/2W6OO0tG_vM/" />
<updated>2012-04-05T09:05:00-03:00</updated>
<id>http://nomedojogo.com/2012/04/05/heroku-add-ons-catalog</id>

      <content type="html">&lt;p&gt;Um catálogo muito bem feito de todos os add-ons que o Heroku possui. Criado por Ivan Schneider.&lt;/p&gt;
&lt;p&gt;&lt;a rel="bookmark" href="http://nomedojogo.com/2012/04/05/heroku-add-ons-catalog/"&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/NomeDoJogo/~4/2W6OO0tG_vM" height="1" width="1"/&gt;</content>
    <feedburner:origLink>http://addons-catalog.herokuapp.com/</feedburner:origLink></entry>
  
    <entry>
      




<title type="html"><![CDATA[Finalmente um debug para o Ruby 1.9.3 &#9875;]]></title>
<link href="http://feedproxy.google.com/~r/NomeDoJogo/~3/oqUcnZ5ELmM/debugger" />
<updated>2012-04-04T16:30:00-03:00</updated>
<id>http://nomedojogo.com/2012/04/04/cldwalker-slash-debugger-github</id>

      <content type="html">&lt;p&gt;O &lt;code&gt;ruby-debug19&lt;/code&gt; está parado já faz um tempo, o último release foi em &lt;strong&gt;setembro de 2009&lt;/strong&gt;! Então &lt;a href="https://github.com/cldwalker"&gt;Gabriel Horner&lt;/a&gt; fez um fork do projeto e promete mantê-lo atualizado.&lt;/p&gt;

&lt;p&gt;Para instalar é simples:&lt;/p&gt;

&lt;figure class='code'&gt;&lt;div class="highlight"&gt;&lt;table&gt;&lt;tr&gt;&lt;td class="gutter"&gt;&lt;pre class="line-numbers"&gt;&lt;span class='line-number'&gt;1&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;td class='code'&gt;&lt;pre&gt;&lt;code class=''&gt;&lt;span class='line'&gt;$ gem install debugger&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;/figure&gt;


&lt;p&gt;Ou adicione em seu projeto Rails:&lt;/p&gt;

&lt;figure class='code'&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;div class="highlight"&gt;&lt;table&gt;&lt;tr&gt;&lt;td class="gutter"&gt;&lt;pre class="line-numbers"&gt;&lt;span class='line-number'&gt;1&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;td class='code'&gt;&lt;pre&gt;&lt;code class='ruby'&gt;&lt;span class='line'&gt;&lt;span class="n"&gt;gem&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;debugger&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;~&amp;gt; 1.0.0&amp;quot;&lt;/span&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;/figure&gt;

&lt;p&gt;&lt;a rel="bookmark" href="http://nomedojogo.com/2012/04/04/cldwalker-slash-debugger-github/"&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/NomeDoJogo/~4/oqUcnZ5ELmM" height="1" width="1"/&gt;</content>
    <feedburner:origLink>https://github.com/cldwalker/debugger</feedburner:origLink></entry>
  
    <entry>
      




<title type="html"><![CDATA[Cinco anos de Nome do Jogo]]></title>
<link href="http://feedproxy.google.com/~r/NomeDoJogo/~3/1rAI4RNiZa8/" />
<updated>2012-02-08T11:59:00-02:00</updated>
<id>http://nomedojogo.com/2012/02/08/cinco-anos-de-nome-do-jogo</id>

      <content type="html">&lt;p&gt;&lt;img class="center" src="http://farm8.staticflickr.com/7010/6841267943_82a3a6eac1_o.jpg"&gt;&lt;/p&gt;

&lt;p&gt;&lt;span class='pullquote-right' data-pullquote='Afinal, a melhor forma de aprender é ensinando'&gt;
A cinco anos atrás eu decidi escrever um blog com a finalidade de compartilhar meus estudos na área de desenvolvimento de software. Afinal, a melhor forma de aprender é ensinando. Confesso que escrever com uma boa regularidade não é uma tarefa fácil, mas nesses anos ter construído esse blog foi sem dúvida a melhor coisa que fiz pela minha carreira.&lt;/p&gt;

&lt;p&gt;Embora nos últimos anos eu tenho lido mais livros e menos blogs, eu ainda considero esse meio de comunicação muito eficiente. É possível escrever um artigo de forma relativamente rápida e espalhar o conhecimento de uma forma que nem um Twitter ou livro são capazes de fazer.&lt;/p&gt;

&lt;p&gt;Desse blog já saíram quase mil artigos, muitos vídeos, dois podcasts de sucesso, dois livros sobre Ruby on Rails (que foram traduzidos para 8 idiomas) e com o apoio de toda a comunidade a tradução do excelente &lt;a href="http://why.nomedojogo.com/"&gt;Why&amp;#8217;s (Poignant) Guide to Ruby&lt;/a&gt;. Sou muito grato aos meus fieis leitores e meu plano é continuar contribuindo para a formação de bons profissionais aqui e no &lt;a href="http://grokpodcast.com/"&gt;Grok Podcast&lt;/a&gt;.
&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;a rel="bookmark" href="http://nomedojogo.com/2012/02/08/cinco-anos-de-nome-do-jogo/"&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/NomeDoJogo/~4/1rAI4RNiZa8" height="1" width="1"/&gt;</content>
    <feedburner:origLink>http://nomedojogo.com/2012/02/08/cinco-anos-de-nome-do-jogo/</feedburner:origLink></entry>
  
    <entry>
      




<title type="html"><![CDATA[Mudanças no Ruby Inside Brasil]]></title>
<link href="http://feedproxy.google.com/~r/NomeDoJogo/~3/5z_Yc24PVJg/" />
<updated>2012-01-31T13:27:00-02:00</updated>
<id>http://nomedojogo.com/2012/01/31/mudancas-no-ruby-inside-brasil</id>

      <content type="html">&lt;blockquote&gt;&lt;p&gt;Salve,&lt;/p&gt;&lt;p&gt;Há uns 3 anos o Carlos Brando resolveu trazer o Ruby Inside para o Brasil, a idéia era ser um site de notícias de Ruby que iria traduzir o conteúdo do site original do Peter Cooper e também publicar conteúdo nacional, tudo para ajudar a divulgar o Ruby e o Rails no Brasil, que até então só era utilizado por uma pequena comunidade.&lt;/p&gt;&lt;p&gt;Eu fui um dos primeiros editores e acabei tocando boa parte das traduções, buscando parcerias com outros sites e eventos e as coisas andaram bem, mas chegou um momento onde eu me peguei pensando: porque estamos fazendo isso? Lembro de uma conversa que tive com o Cássio Marques em alguma lista, a ruby-sp ou a rails-br, onde ele falava que traduzir conteúdo não ajudava muito a comunidade, ela tinha que crescer, aprender inglês e ler os originais, e que a tradução não ajudava nisso. Na época discordei, mas depois de um tempo concordei com a opinião dele, e acabei parando as traduções, e o site ficou parado, só uso a conta do Twitter para repassar notícias que acredito ser relevantes para a comunidade.&lt;/p&gt;&lt;p&gt;Hoje o Ruby cresceu muito no Brasil, temos vários grupos de usuários, só o Guru-SP reune por volta de 50 pessoas todos os meses para falar sobre Ruby e tecnologias relacionadas, e a comunidade continua crescendo. Temos várias empresas e consultorias que usam Ruby todos os dias, rubistas famosos no Brasil e no exterior, e talvez o Ruby Inside possa voltar a ajudar a comunidade, mas espero que de uma forma diferente.&lt;/p&gt;&lt;p&gt;No momento, não tenho tempo ou vontade de voltar a tocar o site, e não temos mais o corpo editorial do início, então é o momento de trocarmos a guarda. Esse post é um convite público à comunidade para conversarmos sobre o que se pode fazer com o site, achar gente que esteja disposta a tocá-lo e fazê-lo voltar a ser útil.&lt;/p&gt;&lt;p&gt;Deixo claro que não terei nenhum envolvimento no projeto, só quero passar a tocha, mas quero fazer isso de uma forma que ajude a comunidade. Aguardo seus comentários.&lt;/p&gt;&lt;p&gt;Atenciosamente,&lt;br/&gt;Rafael Rosa Fu&lt;/p&gt;&lt;/blockquote&gt;


&lt;p&gt;Os interessados em assumir o projeto podem deixar um comentário nesse post preenchendo corretamente o campo de e-mail (que não aparece para todos). O Rafael Rosa entrará em contato.&lt;/p&gt;
&lt;p&gt;&lt;a rel="bookmark" href="http://nomedojogo.com/2012/01/31/mudancas-no-ruby-inside-brasil/"&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/NomeDoJogo/~4/5z_Yc24PVJg" height="1" width="1"/&gt;</content>
    <feedburner:origLink>http://nomedojogo.com/2012/01/31/mudancas-no-ruby-inside-brasil/</feedburner:origLink></entry>
  
    <entry>
      




<title type="html"><![CDATA[Ruby em todos os lugares e dispositivos]]></title>
<link href="http://feedproxy.google.com/~r/NomeDoJogo/~3/BV7EOuZPDpA/" />
<updated>2011-11-07T11:00:00-02:00</updated>
<id>http://nomedojogo.com/2011/11/07/ruby-em-todos-os-lugares-e-dispositivos</id>

      <content type="html">&lt;p&gt;Na última quinta e sexta-feira aconteceu em São Paulo o &lt;a href="http://www.rubyconf.com.br/"&gt;RubyConf 2011&lt;/a&gt;. O RubyConf é sem sombra de dúvida a melhor conferência nacional sobre programação na atualidade.&lt;/p&gt;

&lt;p&gt;As palestras, como sempre, foram acima da média. E esse ano a organização deu um passo além transmitindo online todas as apresentações. Se você não pôde estar presente é possível assistir ao evento inteiro no site da eventials, a empresa encarregada pela transmissão e gravação do evento. Segue o link: &lt;a href="http://www.eventials.com/rubyconfbr"&gt;http://www.eventials.com/rubyconfbr&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Eu também tive a oportunidade de palestrar, junto com meu amigo Luis Gustavo, e dessa vez o assunto foi sobre a nova máquina virtual Ruby compacta que estamos desenvolvendo aqui na &lt;a href="http://www.planobe.com.br/"&gt;Plano Bê&lt;/a&gt;. Para assistir a minha palestra, &lt;a href="http://www.eventials.com/rubyconfbr/recorded/M2UzZTJkMzY2MzdiNTg2NTUxNWM1MzI3NWY1YjRhMzYjIzM4Mw_3D_3D"&gt;clique aqui&lt;/a&gt;. Os slides estão abaixo.&lt;/p&gt;

&lt;script src="http://speakerdeck.com/embed/4eb3f4a7808474005101037d.js"&gt;&lt;/script&gt;


&lt;p&gt;Eu já participei de muitas conferências sobre Ruby e outras linguagens, mas nenhuma se compara a RubyConf. Eu sei que o custo envolvendo a entrada do evento, viagem, alimentação e outros pode ser um pouco pesado, principalmente se você está iniciando na área, mas vale cada centavo.&lt;/p&gt;
&lt;p&gt;&lt;a rel="bookmark" href="http://nomedojogo.com/2011/11/07/ruby-em-todos-os-lugares-e-dispositivos/"&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/NomeDoJogo/~4/BV7EOuZPDpA" height="1" width="1"/&gt;</content>
    <feedburner:origLink>http://nomedojogo.com/2011/11/07/ruby-em-todos-os-lugares-e-dispositivos/</feedburner:origLink></entry>
  
    <entry>
      




<title type="html"><![CDATA[Grok Podcast Extra - O que você achou?]]></title>
<link href="http://feedproxy.google.com/~r/NomeDoJogo/~3/OTgIzYYK8Fg/" />
<updated>2011-10-18T14:08:00-02:00</updated>
<id>http://nomedojogo.com/2011/10/18/grok-podcast-extra-o-que-voce-achou</id>

      <content type="html">&lt;p&gt;O &lt;a href="http://rubyconf2011.akitaonrails.com/br/index.html"&gt;RubyConf Brasil 2011&lt;/a&gt; está chegando e o &lt;a href="http://grokpodcast.com/"&gt;Grok Podcast&lt;/a&gt; vai te ajudar a participar do evento sem gastar um centavo. Estamos sorteando até sexta-feira &lt;strong&gt;4 ingressos&lt;/strong&gt; para o evento.&lt;/p&gt;

&lt;p&gt;Para participar é fácil. Basta &lt;a href="http://twitter.com/home?status=Participe%20da%20%23RubyConfBR%20by%20%23Locaweb%2C%20saiba%20mais%20sobre%20o%20evento%20em%20http%3A%2F%2Fgoo.gl%2FK5gHh%20e%20concorra%20a%204%20ingressos%20%2Fvia%20%23GrokPodcast"&gt;clicar aqui&lt;/a&gt; ou publicar a mensagem abaixo no seu Twitter:&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;Participe da #RubyConfBR by #Locaweb, saiba mais sobre o evento em http://goo.gl/K5gHh e concorra a 4 ingressos /via #GrokPodcast&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;Aproveite que está no Twitter e me siga em &lt;a href="http://twitter.com/#!/carlosbrando"&gt;@carlosbrando&lt;/a&gt;. ;)&lt;/p&gt;

&lt;p&gt;Esse episódio introduz um formato diferente. Episódios extras, fora da cronologia normal e patrocinados por uma empresa ou grupo. Não queremos em hipótese alguma fazer simples propaganda, pelo contrário somente conteúdo relevante e que agregue conhecimento serão aprovados para esse formato. Porém o patrocinador pode sugerir temas que estejam relacionados ao seu negócio.&lt;/p&gt;

&lt;p&gt;Esse primeiro episódio é apenas um piloto. O objetivo principal do Grok Podcast é informar e compartilhar conhecimento e não necessariamente lucrar com isso, porém com o crescimento de nossa audiência nossos gastos tem aumentado muito e esses anunciantes nos ajudam a manter o podcast no ar.&lt;/p&gt;

&lt;p&gt;Porém, nós estamos interessados em saber o que você achou desse piloto. Se você é um ouvinte, deixe um comentário dizendo como se sente em relação a esses episódios extras e quais as suas expectativas.&lt;/p&gt;

&lt;p&gt;O mesmo vale caso você tenha interesse em anunciar na série regular ou patrocinar um episódio extra. Nesse caso, entre em contato através da nossa &lt;a href="http://grokpodcast.com/contato/"&gt;página de contato&lt;/a&gt; e explicaremos em mais detalhes como isso funciona.&lt;/p&gt;
&lt;p&gt;&lt;a rel="bookmark" href="http://nomedojogo.com/2011/10/18/grok-podcast-extra-o-que-voce-achou/"&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/NomeDoJogo/~4/OTgIzYYK8Fg" height="1" width="1"/&gt;</content>
    <feedburner:origLink>http://nomedojogo.com/2011/10/18/grok-podcast-extra-o-que-voce-achou/</feedburner:origLink></entry>
  
    <entry>
      




<title type="html"><![CDATA[Contratos onde todos ganham]]></title>
<link href="http://feedproxy.google.com/~r/NomeDoJogo/~3/lu4m1Z_mW8g/" />
<updated>2011-09-12T11:09:00-03:00</updated>
<id>http://nomedojogo.com/2011/09/12/contratos-onde-todos-ganham</id>

      <content type="html">&lt;p&gt;Lidar com computadores não é fácil, por outro lado lidar com pessoas costuma ser ainda mais complicado. A muito tempo eu já me convenci que o relacionamento entre clientes e programadores sempre serão problemáticos.&lt;/p&gt;

&lt;p&gt;A forma mais simples de tentar diminuir a tensão entre os lados envolvidos são os contratos.&lt;/p&gt;

&lt;p&gt;Um bom contrato deve deixar claro quais são os direitos e responsabilidades de cada um dos envolvidos. Também não deve deixar dúvidas sobre qual será a repercussão no caso de uma das partes não cumprir com o acordo.&lt;/p&gt;

&lt;p&gt;Um tipo básico de contrato é o que define um preço fixo para o projeto. Esse tipo de contrato é a melhor opção para o cliente e a pior para o programador. Uma mudança no escopo ou um pequeno atraso e tudo vai para a conta do desenvolvedor, deixando todo o risco nas mãos do profissional. Normalmente esse é o tipo de contrato que mais dá problema, já que o programador costuma se sentir lesado por alterações no escopo do projeto e o cliente não se sente na obrigação de pagar mais por isso.&lt;/p&gt;

&lt;p&gt;Por outro lado um contrato de tempo e recurso, onde o cliente paga pelo tempo de cada profissional alocado no projeto é o melhor contrato para o programador, mas é o pior para o cliente. Nesse caso, atrasos e alterações no escopo caem sempre na conta do cliente, mesmo quando a culpa não é dele.&lt;/p&gt;

&lt;p&gt;Para beneficiar ambos os lados, talvez o mais interessante seja unir esses dois tipos de contratos em um contrato híbrido, onde o cliente e o programador definem um valor fixo menor e uma taxa por horas de trabalho.&lt;/p&gt;

&lt;p&gt;Funciona mais ou menos assim: se você estimar que serão necessárias aproximadamente duas semanas (80 horas) para finalizar o projeto e normalmente você cobra R$ 100,00 por hora, então o custo estimado para o projeto seria de R$ 8.000. Nesse tipo de contrato você definiria então com o cliente um pagamento fixo no valor de R$ 4.000 e mais uma taxa de R$ 50,00 reais por hora trabalhada no projeto.&lt;/p&gt;

&lt;p&gt;Se o projeto terminar dentro do prazo, o cliente terá pago exatamente o valor estimado para o projeto e todos ganham.&lt;/p&gt;

&lt;p&gt;Se o projeto terminar antes da data, o cliente terá pago menos e você terá ganho mais. Digamos que o projeto seja finalizado com 60 horas trabalhadas. Então o cliente pagará R$ 7.000 pelo serviço, que é menos do que o esperado. E você receberá R$ 1.000 a mais do que você receberia pelas 60 horas trabalhadas. Mais uma vez, todos ganham.&lt;/p&gt;

&lt;p&gt;Por outro lado, se algo acontecer e o projeto atrasar, então o cliente estará pagando adicionalmente metade da sua hora, dividindo assim igualmente o risco entre o cliente e o programador.&lt;/p&gt;

&lt;p&gt;Não importa se você usa uma metodologia ágil ou um modelo mais tradicional, contratos são essenciais em qualquer negocio e não será diferente em desenvolvimento de software. O importante é que você nunca feche um negócio sem assinar um antes.&lt;/p&gt;
&lt;p&gt;&lt;a rel="bookmark" href="http://nomedojogo.com/2011/09/12/contratos-onde-todos-ganham/"&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/NomeDoJogo/~4/lu4m1Z_mW8g" height="1" width="1"/&gt;</content>
    <feedburner:origLink>http://nomedojogo.com/2011/09/12/contratos-onde-todos-ganham/</feedburner:origLink></entry>
  
    <entry>
      




<title type="html"><![CDATA[Como convencer sua equipe a usar um sistema de controle de versão]]></title>
<link href="http://feedproxy.google.com/~r/NomeDoJogo/~3/CGhJpNuCDVA/" />
<updated>2011-08-25T02:02:00-03:00</updated>
<id>http://nomedojogo.com/2011/08/25/como-convencer-sua-equipe-a-usar-um-sistema-de-controle-de-vers-o</id>

      <content type="html">&lt;p&gt;Desenvolver software sem um sistema de controle de versão (ou SCM do inglês source code management) pode parecer irreal para muitos dos leitores desse blog, mas é importante esclarecer que muitas empresas e profissionais ainda não entendem o valor desse tipo de ferramenta.&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;Nota para o leitor: Se você não sabe o que é um SCM, recomendo ouvir a série sobre o assunto que gravamos recentemente para o &lt;a href="http://grokpodcast.com/tag/scm/"&gt;Grok Podcast&lt;/a&gt;.&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;A situação fica ainda mais dramática quando um programador &amp;#8220;iniciante&amp;#8221;, porém esclarecido, trabalha em uma empresa que ainda armazena o código-fonte de seus projetos em um diretório no servidor ou somente no computador do desenvolvedor. Nesse caso, como convencer seus colegas de trabalho e principalmente o seu chefe que eles precisam adotar uma ferramenta para controlar o código?&lt;/p&gt;

&lt;p&gt;A palavra-chave aqui é &lt;strong&gt;evangelização&lt;/strong&gt;. Comece implementando o seu próprio SCM particular. Existem dezenas de opções open-source que podem ser instaladas localmente em sua máquina ou em um servidor da empresa que você tenha acesso. Essa iniciativa fará com que ao menos o seu código tenha uma certa medida de segurança, o que lhe trará um pouco de tranquilidade.&lt;/p&gt;

&lt;p&gt;Com o tempo você, diferente de seus colegas, passará a ter a resposta para perguntas como: &amp;#8220;Exatamente que alteração foi realizada no módulo XYZ?&amp;#8221; e &amp;#8220;Quem foi o responsável pela alteração que quebrou o software?&amp;#8221;. É questão de tempo até que seu chefe e colegas se convençam das vantagens em adotar um sistema para gerenciar o código da sua empresa.&lt;/p&gt;

&lt;p&gt;Ainda outra opção é fazer com que sua equipe ouça o &lt;a href="http://grokpodcast.com/"&gt;Grok Podcast&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a rel="bookmark" href="http://nomedojogo.com/2011/08/25/como-convencer-sua-equipe-a-usar-um-sistema-de-controle-de-vers-o/"&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/NomeDoJogo/~4/CGhJpNuCDVA" height="1" width="1"/&gt;</content>
    <feedburner:origLink>http://nomedojogo.com/2011/08/25/como-convencer-sua-equipe-a-usar-um-sistema-de-controle-de-vers-o/</feedburner:origLink></entry>
  
    <entry>
      




<title type="html"><![CDATA[Blogando como um hacker]]></title>
<link href="http://feedproxy.google.com/~r/NomeDoJogo/~3/wrrXj2Kdrnw/" />
<updated>2011-08-19T10:48:00-03:00</updated>
<id>http://nomedojogo.com/2011/08/19/blogando-como-um-hacker</id>

      <content type="html">&lt;p&gt;Depois que me acostumei a somente &lt;a href="http://grokpodcast.com/"&gt;falar&lt;/a&gt; e a escrever em sentenças de &lt;a href="http://twitter.com/#!/carlosbrando"&gt;140 caracteres&lt;/a&gt;, blogar tem se tornado cada vez mais raro. Mas esse blog ainda é a menina dos meus olhos e de forma alguma ficará abandonado.&lt;/p&gt;

&lt;p&gt;Embora editar o audio do podcast dê um certo trabalho, falar é muito fácil. Da mesma forma, enviar uma mensagem pelo Twitter também já se tornou algo natural. Mas escrever um texto para o Nome do Jogo ainda exigia um certo ritual que não me agradava muito, que basicamente envolvia acessar a interface do Wordpress, escrever o post, editar os trechos de código no TextMate e exportar para HTML, editar as imagens, etc..&lt;/p&gt;

&lt;p&gt;Acostumado com ferramentas ricas e ao mesmo tempo simplistas, eu já estava decidido a mudar a engine desse blog e abandonar o Wordpress. Porém durante muito tempo não consegui encontrar uma ferramenta que justificasse o esforço da migração.&lt;/p&gt;

&lt;p&gt;Recentemente eu adquiri uma cópia do excelente aplicativo &lt;a href="http://www.iawriter.com/"&gt;iA Writer&lt;/a&gt; que é um editor de textos muito simples, que não possui nenhuma configuração e permite escrever usando a sintaxe do &lt;a href="http://daringfireball.net/projects/markdown/"&gt;Markdown&lt;/a&gt;. É engraçado, mas me livrar da preocupação com a formatação do texto reativou o meu prazer em escrever.&lt;/p&gt;

&lt;p&gt;Outra ferramenta importante nessa equação é o &lt;a href="http://octopress.org/"&gt;Octopress&lt;/a&gt;, uma engine baseada no &lt;a href="https://github.com/mojombo/jekyll"&gt;Jekyll&lt;/a&gt; para a publicação de blogs. A simplicidade do Octopress me permitiu migrar todo o conteúdo do Nome do Jogo (quase mil artigos) rapidamente. O maior trabalho que tive na migração foi ajustar alguns textos, mas como tudo é baseado em arquivos: Regex to the rescue!&lt;/p&gt;

&lt;p&gt;&lt;img class="center" src="http://farm7.static.flickr.com/6188/6058663657_21758df908_o.png"&gt;&lt;/p&gt;

&lt;p&gt;O que você está vendo agora é o novo blog Nome do Jogo, totalmente baseado no Octopress e com o tema padrão da ferramenta. Acredito que isso vai tornar muito mais fácil publicar meus artigos e certamente vai aumentar a freqüência de publicação.&lt;/p&gt;
&lt;p&gt;&lt;a rel="bookmark" href="http://nomedojogo.com/2011/08/19/blogando-como-um-hacker/"&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/NomeDoJogo/~4/wrrXj2Kdrnw" height="1" width="1"/&gt;</content>
    <feedburner:origLink>http://nomedojogo.com/2011/08/19/blogando-como-um-hacker/</feedburner:origLink></entry>
  
    <entry>
      




<title type="html"><![CDATA[A Regra Direita-Esquerda do C]]></title>
<link href="http://feedproxy.google.com/~r/NomeDoJogo/~3/et1FStqNTRQ/" />
<updated>2011-06-13T00:00:00-03:00</updated>
<id>http://nomedojogo.com/2011/06/13/a-regra-direita-esquerda-do-c</id>

      <content type="html">&lt;p&gt;Atualmente estou envolvido em um projeto envolvendo módulos específicos em Ruby, Erlang e C. Ruby e Erlang são mais tranquilos, mas C tem a desagradável característica de deixar alguns códigos &amp;#8220;meio&amp;#8221; complicados de entender.&lt;/p&gt;

&lt;p&gt;Porém, um &lt;a href="http://twitter.com/#!/marciogm"&gt;colega&lt;/a&gt; da Plano Bê me enviou um artigo que me ajudou muito e quero compartilhá-lo com vocês. O &lt;a href="http://ieng9.ucsd.edu/~cs30x/rt_lt.rule.html"&gt;artigo original&lt;/a&gt; parece ter sido escrito por Rick Ord da Universidade da California, em San Diego. Segue a tradução:&lt;/p&gt;

&lt;h2&gt;A Regra Direita-Esquerda do C&lt;/h2&gt;

&lt;p&gt;A regra &lt;strong&gt;direta-esquerda&lt;/strong&gt; é muito útil para decifrar declarações na linguagem C e também pode ser de grande ajuda ao escrever código. A regra é bem simples, toda vez que encontrar os seguintes símbolos no código, leia:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;*   como "um ponteiro para"      - sempre do lado esquerdo
[]  como "um array de"           - sempre do lado direito
()  como "uma função retornando" - sempre do lado direito
&lt;/code&gt;&lt;/pre&gt;

&lt;h2&gt;Passo 1&lt;/h2&gt;

&lt;p&gt;Encontre o identificador. Esse é o seu ponto de partida. Então, diga para si mesmo &lt;em&gt;&amp;#8220;o identificador é&amp;#8221;&lt;/em&gt;. É nesse ponto que iniciamos a declaração.&lt;/p&gt;

&lt;h2&gt;Passo 2&lt;/h2&gt;

&lt;p&gt;Comece pelos símbolos a direita do identificador. Digamos que você encontrou um &lt;code&gt;()&lt;/code&gt;, então você sabe que essa declaração é uma função. Então você deve dizer &lt;em&gt;&amp;#8220;o identificador é uma função retornando&amp;#8221;&lt;/em&gt;. Caso você tenha encontrado um &lt;code&gt;[]&lt;/code&gt;, então você deve dizer &lt;em&gt;&amp;#8220;o identificador é um array de&amp;#8221;&lt;/em&gt;. Continue avançando pela direita enquanto houver símbolos OU até encontrar um fecha parênteses &lt;code&gt;)&lt;/code&gt;. (continue seguindo caso você encontre um abre parênteses, falaremos sobre isso mais abaixo.)&lt;/p&gt;

&lt;h2&gt;Passo 3&lt;/h2&gt;

&lt;p&gt;Quando terminarem os símbolos a direita do identificador, então comece a procurar por símbolos a sua esquerda. Se você encontrar algo diferente dos símbolos mencionados acima (digamos, algo como &lt;code&gt;int&lt;/code&gt;), simplesmente repita o seu nome. Caso contrário, traduza o símbolo para o português usando a tabela. Continue seguindo pela esquerda enquanto houver símbolos OU até encontrar um abre parênteses &lt;code&gt;(&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Então, repita os passos 2 e 3 até terminar toda a sua declaração. Veja abaixo alguns exemplos:&lt;/p&gt;

&lt;figure class='code'&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;div class="highlight"&gt;&lt;table&gt;&lt;tr&gt;&lt;td class="gutter"&gt;&lt;pre class="line-numbers"&gt;&lt;span class='line-number'&gt;1&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;td class='code'&gt;&lt;pre&gt;&lt;code class='c'&gt;&lt;span class='line'&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;[];&lt;/span&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;/figure&gt;


&lt;ol&gt;
&lt;li&gt;Encontre o identificador.&lt;/li&gt;
&lt;/ol&gt;


&lt;figure class='code'&gt;&lt;div class="highlight"&gt;&lt;table&gt;&lt;tr&gt;&lt;td class="gutter"&gt;&lt;pre class="line-numbers"&gt;&lt;span class='line-number'&gt;1&lt;/span&gt;
&lt;span class='line-number'&gt;2&lt;/span&gt;
&lt;span class='line-number'&gt;3&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;td class='code'&gt;&lt;pre&gt;&lt;code class=''&gt;&lt;span class='line'&gt;int *p[];
&lt;/span&gt;&lt;span class='line'&gt;     ^
&lt;/span&gt;&lt;span class='line'&gt;"p é"&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;/figure&gt;


&lt;ol&gt;
&lt;li&gt;Siga pela direita enquanto encontrar um símbolo ou abre parênteses.&lt;/li&gt;
&lt;/ol&gt;


&lt;figure class='code'&gt;&lt;div class="highlight"&gt;&lt;table&gt;&lt;tr&gt;&lt;td class="gutter"&gt;&lt;pre class="line-numbers"&gt;&lt;span class='line-number'&gt;1&lt;/span&gt;
&lt;span class='line-number'&gt;2&lt;/span&gt;
&lt;span class='line-number'&gt;3&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;td class='code'&gt;&lt;pre&gt;&lt;code class=''&gt;&lt;span class='line'&gt;int *p[];
&lt;/span&gt;&lt;span class='line'&gt;      ^^
&lt;/span&gt;&lt;span class='line'&gt;"p é um array de"&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;/figure&gt;


&lt;ol&gt;
&lt;li&gt;Quando não puder mais mover para a direita (os símbolo acabaram), então siga para a esquerda e encontre:&lt;/li&gt;
&lt;/ol&gt;


&lt;figure class='code'&gt;&lt;div class="highlight"&gt;&lt;table&gt;&lt;tr&gt;&lt;td class="gutter"&gt;&lt;pre class="line-numbers"&gt;&lt;span class='line-number'&gt;1&lt;/span&gt;
&lt;span class='line-number'&gt;2&lt;/span&gt;
&lt;span class='line-number'&gt;3&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;td class='code'&gt;&lt;pre&gt;&lt;code class=''&gt;&lt;span class='line'&gt;int *p[];
&lt;/span&gt;&lt;span class='line'&gt;    ^
&lt;/span&gt;&lt;span class='line'&gt;"p é um array de ponteiros para"&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;/figure&gt;


&lt;ol&gt;
&lt;li&gt;Continue seguinte pela esquerda e encontre:&lt;/li&gt;
&lt;/ol&gt;


&lt;figure class='code'&gt;&lt;div class="highlight"&gt;&lt;table&gt;&lt;tr&gt;&lt;td class="gutter"&gt;&lt;pre class="line-numbers"&gt;&lt;span class='line-number'&gt;1&lt;/span&gt;
&lt;span class='line-number'&gt;2&lt;/span&gt;
&lt;span class='line-number'&gt;3&lt;/span&gt;
&lt;span class='line-number'&gt;4&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;td class='code'&gt;&lt;pre&gt;&lt;code class=''&gt;&lt;span class='line'&gt;int *p[];
&lt;/span&gt;&lt;span class='line'&gt;^^^
&lt;/span&gt;&lt;span class='line'&gt;"p é um array de ponteiros para int". 
&lt;/span&gt;&lt;span class='line'&gt;(ou "p é um array onde cada elemento é um ponteiro para um inteiro")&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;/figure&gt;


&lt;p&gt;Outro exemplo:&lt;/p&gt;

&lt;figure class='code'&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;div class="highlight"&gt;&lt;table&gt;&lt;tr&gt;&lt;td class="gutter"&gt;&lt;pre class="line-numbers"&gt;&lt;span class='line-number'&gt;1&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;td class='code'&gt;&lt;pre&gt;&lt;code class='c'&gt;&lt;span class='line'&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;func&lt;/span&gt;&lt;span class="p"&gt;())();&lt;/span&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;/figure&gt;


&lt;ol&gt;
&lt;li&gt;Encontre o identificador.&lt;/li&gt;
&lt;/ol&gt;


&lt;figure class='code'&gt;&lt;div class="highlight"&gt;&lt;table&gt;&lt;tr&gt;&lt;td class="gutter"&gt;&lt;pre class="line-numbers"&gt;&lt;span class='line-number'&gt;1&lt;/span&gt;
&lt;span class='line-number'&gt;2&lt;/span&gt;
&lt;span class='line-number'&gt;3&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;td class='code'&gt;&lt;pre&gt;&lt;code class=''&gt;&lt;span class='line'&gt;int *(*func())();
&lt;/span&gt;&lt;span class='line'&gt;       ^^^^
&lt;/span&gt;&lt;span class='line'&gt;"func é"&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;/figure&gt;


&lt;ol&gt;
&lt;li&gt;Vá para a direita.&lt;/li&gt;
&lt;/ol&gt;


&lt;figure class='code'&gt;&lt;div class="highlight"&gt;&lt;table&gt;&lt;tr&gt;&lt;td class="gutter"&gt;&lt;pre class="line-numbers"&gt;&lt;span class='line-number'&gt;1&lt;/span&gt;
&lt;span class='line-number'&gt;2&lt;/span&gt;
&lt;span class='line-number'&gt;3&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;td class='code'&gt;&lt;pre&gt;&lt;code class=''&gt;&lt;span class='line'&gt;int *(*func())();
&lt;/span&gt;&lt;span class='line'&gt;           ^^
&lt;/span&gt;&lt;span class='line'&gt;"func é uma função retornando"&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;/figure&gt;


&lt;ol&gt;
&lt;li&gt;Não dá para ir mais a direita devido ao fecha parênteses, então vá para a esquerda.&lt;/li&gt;
&lt;/ol&gt;


&lt;figure class='code'&gt;&lt;div class="highlight"&gt;&lt;table&gt;&lt;tr&gt;&lt;td class="gutter"&gt;&lt;pre class="line-numbers"&gt;&lt;span class='line-number'&gt;1&lt;/span&gt;
&lt;span class='line-number'&gt;2&lt;/span&gt;
&lt;span class='line-number'&gt;3&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;td class='code'&gt;&lt;pre&gt;&lt;code class=''&gt;&lt;span class='line'&gt;int *(*func())();
&lt;/span&gt;&lt;span class='line'&gt;      ^
&lt;/span&gt;&lt;span class='line'&gt;"func é uma função retornando um ponteiro para"&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;/figure&gt;


&lt;ol&gt;
&lt;li&gt;Não pode mais ir para a esquerda devido ao abre parênteses, então continue indo pela direita.&lt;/li&gt;
&lt;/ol&gt;


&lt;figure class='code'&gt;&lt;div class="highlight"&gt;&lt;table&gt;&lt;tr&gt;&lt;td class="gutter"&gt;&lt;pre class="line-numbers"&gt;&lt;span class='line-number'&gt;1&lt;/span&gt;
&lt;span class='line-number'&gt;2&lt;/span&gt;
&lt;span class='line-number'&gt;3&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;td class='code'&gt;&lt;pre&gt;&lt;code class=''&gt;&lt;span class='line'&gt;int *(*func())();
&lt;/span&gt;&lt;span class='line'&gt;              ^^
&lt;/span&gt;&lt;span class='line'&gt;"func é uma função retornando um ponteiro para uma função retornando"&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;/figure&gt;


&lt;ol&gt;
&lt;li&gt;Não dá mais para ir para a direita porque não há mais simbolos, então vá para a esquerda.&lt;/li&gt;
&lt;/ol&gt;


&lt;figure class='code'&gt;&lt;div class="highlight"&gt;&lt;table&gt;&lt;tr&gt;&lt;td class="gutter"&gt;&lt;pre class="line-numbers"&gt;&lt;span class='line-number'&gt;1&lt;/span&gt;
&lt;span class='line-number'&gt;2&lt;/span&gt;
&lt;span class='line-number'&gt;3&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;td class='code'&gt;&lt;pre&gt;&lt;code class=''&gt;&lt;span class='line'&gt;int *(*func())();
&lt;/span&gt;&lt;span class='line'&gt;    ^
&lt;/span&gt;&lt;span class='line'&gt;"func é uma função retornando um ponteiro para uma função retornando um ponteiro para"&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;/figure&gt;


&lt;ol&gt;
&lt;li&gt;E finalmente, o último símbolo a esquerda.&lt;/li&gt;
&lt;/ol&gt;


&lt;figure class='code'&gt;&lt;div class="highlight"&gt;&lt;table&gt;&lt;tr&gt;&lt;td class="gutter"&gt;&lt;pre class="line-numbers"&gt;&lt;span class='line-number'&gt;1&lt;/span&gt;
&lt;span class='line-number'&gt;2&lt;/span&gt;
&lt;span class='line-number'&gt;3&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;td class='code'&gt;&lt;pre&gt;&lt;code class=''&gt;&lt;span class='line'&gt;int *(*func())();
&lt;/span&gt;&lt;span class='line'&gt;^^^
&lt;/span&gt;&lt;span class='line'&gt;"func é uma função retornando um ponteiro para uma função retornando um ponteiro para um inteiro".&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;/figure&gt;


&lt;p&gt;Como você pode ver, essa regra pode ser muito útil. Ela também é ótima para manter a sua sanidade enquanto estiver criando declarações, além de ajudá-lo a identificar onde colocar o próximo símbolo ou parênteses.&lt;/p&gt;

&lt;p&gt;Algumas declarações podem parecer ainda mais complicadas quando definem o tamanho de um array ou informam uma lista de argumentos. Por exemplo, se você ver algo como &lt;code&gt;[3]&lt;/code&gt;, deve ler &lt;em&gt;&amp;#8220;um array (de tamanho 3) de&amp;#8230;&amp;#8221;&lt;/em&gt;. Mas se você ver algo como &lt;code&gt;(char *,int)&lt;/code&gt;, então deve ler &lt;em&gt;&amp;#8220;uma função esperando (char &lt;/em&gt;, int) e retornando&amp;#8230;&amp;#8221;*. Veja mais um exemplo:&lt;/p&gt;

&lt;figure class='code'&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;div class="highlight"&gt;&lt;table&gt;&lt;tr&gt;&lt;td class="gutter"&gt;&lt;pre class="line-numbers"&gt;&lt;span class='line-number'&gt;1&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;td class='code'&gt;&lt;pre&gt;&lt;code class='c'&gt;&lt;span class='line'&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;fun_one&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="kt"&gt;char&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="kt"&gt;double&lt;/span&gt;&lt;span class="p"&gt;))[&lt;/span&gt;&lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;/figure&gt;


&lt;p&gt;Eu não vou seguir cada passo para decifrar essa declaração. Mas o resultado será: &lt;em&gt;&amp;#8220;fun_one é um ponteiro para uma função esperando (char &lt;/em&gt;, double) e retornando um ponteiro para um array (tamanho 9) de um array (tamanho 20) de inteiros&amp;#8221;*.&lt;/p&gt;

&lt;p&gt;Fica mais fácil se você remover o tamanho dos arrays e as listas de argumentos:&lt;/p&gt;

&lt;figure class='code'&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;div class="highlight"&gt;&lt;table&gt;&lt;tr&gt;&lt;td class="gutter"&gt;&lt;pre class="line-numbers"&gt;&lt;span class='line-number'&gt;1&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;td class='code'&gt;&lt;pre&gt;&lt;code class='c'&gt;&lt;span class='line'&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;fun_one&lt;/span&gt;&lt;span class="p"&gt;)())[][];&lt;/span&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;/figure&gt;


&lt;p&gt;Uma boa opção é decifrar dessa maneira e só depois adicionar o tamanho dos arrays e a lista de argumentos.&lt;/p&gt;

&lt;h2&gt;Algumas considerações finais&lt;/h2&gt;

&lt;p&gt;É totalmente possível criar declarações ilegais usando essa regra, então algum conhecimento do que é aceitável e do que não é em C é necessário. Por exemplo, se você tiver algo assim:&lt;/p&gt;

&lt;figure class='code'&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;div class="highlight"&gt;&lt;table&gt;&lt;tr&gt;&lt;td class="gutter"&gt;&lt;pre class="line-numbers"&gt;&lt;span class='line-number'&gt;1&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;td class='code'&gt;&lt;pre&gt;&lt;code class='c'&gt;&lt;span class='line'&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;fun_one&lt;/span&gt;&lt;span class="p"&gt;)())[][];&lt;/span&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;/figure&gt;


&lt;p&gt;A declaração acima seria traduzida para &lt;em&gt;&amp;#8220;fun_one é um ponteiro para uma função retornando um array de arrays de ponteiros para inteiros&amp;#8221;&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Uma vez que uma função não pode retornar um array, mas somente um ponteiro para um array, essa declaração é ilegal.&lt;/p&gt;

&lt;p&gt;Combinações ilegais incluem:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;[]() - não pode haver um array de funções
()() - não pode haver uma função que retorna uma função
()[] - não pode haver uma função que retorna um array
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Em todos os casos acima, você provavelmente precisaria de um conjunto de parênteses para colocar um símbolo &lt;code&gt;*&lt;/code&gt; a esquerda entre cada &lt;code&gt;()&lt;/code&gt; e &lt;code&gt;[]&lt;/code&gt; para tornar uma declaração válida.&lt;/p&gt;

&lt;p&gt;Segue abaixo alguns exemplos válidos e inválidos para exercitar o que aprendemos:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;int i;           "i um inteiro"
int *p;          "p é um ponteiro para um inteiro"
int a[];         "a é um array de inteiros"
int f();         "f é uma função retornando um inteiro"
int **pp;        "pp é um ponteiro para um ponteiro para um inteiro"
int (*pa)[];     "pa é um ponteiro para um array de inteiros"
int (*pf)();     "pf é um ponteiro para uma função retornando um inteiro"
int *ap[];       "ap é um array de ponteiros para inteiros"
int aa[][];      "aa é um array de arrays de inteiros"
int af[]();      "af é um array de funções retornando um inteiro (ILEGAL)"
int *fp();       "fp é uma função retornando um ponteiro para um inteiro"
int fa()[];      "fa é uma função retornando um array de inteiros (ILEGAL)"
int ff()();      "ff é uma função retornando uma função retornando um inteiro (ILEGAL)"
int ***ppp;      "ppp é um ponteiro para um ponteiro para um ponteiro para um inteiro"
int (**ppa)[];   "ppa é um ponteiro para um ponteiro para um array de inteiros"
int (**ppf)();   "ppf é um ponteiro para um ponteiro para uma função retornando um inteiro"
int *(*pap)[];   "pap é um ponteiro para um array de ponteiros para inteiros"
int (*paa)[][];  "paa é um ponteiro para um array de arrays de inteiros"
int (*paf)[]();  "paf é um ponteiro para um array de funções retornando um inteiro (ILEGAL)"
int *(*pfp)();   "pfp é um ponteiro para uma função retornando um ponteiro para um inteiro"
int (*pfa)()[];  "pfa é um ponteiro para uma função retornando um array de inteiros (ILEGAL)"
int (*pff)()();  "pff é um ponteiro para uma função retornando uma função retornando um inteiro (ILEGAL)"
int **app[];     "app é um array de ponteiros para ponteiros para um inteiro"
int (*apa[])[];  "apa é um array de ponteiros para um array de inteiros"
int (*apf[])();  "apf é um array de ponteiros para funções retornando um inteiro"
int *aap[][];    "aap é um array de arrays de ponteiros para inteiros"
int aaa[][][];   "aaa é um array de arrays de arrays de inteiros"
int aaf[][]();   "aaf é um array de arrays de funções retornando um inteiro (ILEGAL)"
int *afp[]();    "afp é um array de funções retornando um ponteiro para um inteiro (ILEGAL)"
int afa[]()[];   "afa é um array de funções retornando um array de inteiros (ILEGAL)"
int aff[]()();   "aff é um array de funções retornando funções retornando um inteiro (ILEGAL)"
int **fpp();     "fpp é uma função retornando um ponteiro para um ponteiro para um inteiro"
int (*fpa())[];  "fpa é uma função retornando um ponteiro para um array de inteiros"
int (*fpf())();  "fpf é uma função retornando um ponteiro para uma função retornando um inteiro"
int *fap()[];    "fap é uma função retornando um array de ponteiros para inteiros (ILEGAL)"
int faa()[][];   "faa é uma função retornando um array de arrays de inteiros (ILEGAL)"
int faf()[]();   "faf é uma função retornando um array de funções retornando inteiros (ILEGAL)"
int *ffp()();    "ffp é uma função retornando uma função retornando um ponteiro para um inteiro (ILEGAL)"
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;a rel="bookmark" href="http://nomedojogo.com/2011/06/13/a-regra-direita-esquerda-do-c/"&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/NomeDoJogo/~4/et1FStqNTRQ" height="1" width="1"/&gt;</content>
    <feedburner:origLink>http://nomedojogo.com/2011/06/13/a-regra-direita-esquerda-do-c/</feedburner:origLink></entry>
  
    <entry>
      




<title type="html"><![CDATA[Colorific]]></title>
<link href="http://feedproxy.google.com/~r/NomeDoJogo/~3/uNY2iy0Yhbs/" />
<updated>2011-06-03T00:00:00-03:00</updated>
<id>http://nomedojogo.com/2011/06/03/colorific</id>

      <content type="html">&lt;p&gt;Já faz algum tempo que desenvolvi uma gem para imprimir o resultado dos meus testes de uma forma mais intuitiva, menos poluída e mais&amp;#8230; &lt;strong&gt;&lt;span style="color: #ff0000;"&gt;c&lt;/span&gt;&lt;span style="color: #ff9900;"&gt;o&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;l&lt;/span&gt;&lt;span style="color: #339966;"&gt;o&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;r&lt;/span&gt;&lt;span style="color: #666699;"&gt;i&lt;/span&gt;&lt;span style="color: #993366;"&gt;d&lt;/span&gt;&lt;span style="color: #333399;"&gt;a&lt;/span&gt;&lt;/strong&gt;! Não sei bem porque, mas não divulguei muito essa gem na época. De qualquer forma, ai está:&lt;/p&gt;

&lt;iframe width="560" height="349" src="http://www.youtube.com/embed/BQm4nFlJcco" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;


&lt;p&gt;Para instalar é fácil, basta adicionar o seguinte código no seu arquivo Gemfile:&lt;/p&gt;

&lt;figure class='code'&gt;&lt;div class="highlight"&gt;&lt;table&gt;&lt;tr&gt;&lt;td class="gutter"&gt;&lt;pre class="line-numbers"&gt;&lt;span class='line-number'&gt;1&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;td class='code'&gt;&lt;pre&gt;&lt;code class=''&gt;&lt;span class='line'&gt;gem 'colorific', :group =&gt; :test&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;/figure&gt;


&lt;p&gt;Se desejar contribuir com algo, essa biblioteca tem 78 linhas de código apenas. E todo o código encontra-se no GitHub: &lt;a href="https://github.com/carlosbrando/colorific/blob/master/lib/colorific.rb"&gt;https://github.com/carlosbrando/colorific/blob/master/lib/colorific.rb&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a rel="bookmark" href="http://nomedojogo.com/2011/06/03/colorific/"&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/NomeDoJogo/~4/uNY2iy0Yhbs" height="1" width="1"/&gt;</content>
    <feedburner:origLink>http://nomedojogo.com/2011/06/03/colorific/</feedburner:origLink></entry>
  
    <entry>
      




<title type="html"><![CDATA[Quem disse que gravar um podcast é fácil?]]></title>
<link href="http://feedproxy.google.com/~r/NomeDoJogo/~3/FdDYCzElr88/" />
<updated>2011-03-29T00:00:00-03:00</updated>
<id>http://nomedojogo.com/2011/03/29/quem-disse-que-gravar-um-podcast-e-facil</id>

      <content type="html">&lt;p&gt;Não deixe de acompanhar semanalmente o &lt;a href="http://grokpodcast.com/"&gt;Grok Podcast&lt;/a&gt;!&lt;/p&gt;

&lt;p&gt;&lt;audio controls='controls'&gt;&lt;source src='http://old.nomedojogo.com/wp-content/uploads/2011/03/Rafael-Rosa-Bruno-Douglas-Campos-on-2011-02-24-at-21.51.output.mp3 ' type='audio/mp3'/&gt;&lt;/audio&gt;&lt;/p&gt;
&lt;p&gt;&lt;a rel="bookmark" href="http://nomedojogo.com/2011/03/29/quem-disse-que-gravar-um-podcast-e-facil/"&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/NomeDoJogo/~4/FdDYCzElr88" height="1" width="1"/&gt;</content>
    <feedburner:origLink>http://nomedojogo.com/2011/03/29/quem-disse-que-gravar-um-podcast-e-facil/</feedburner:origLink></entry>
  
    <entry>
      




<title type="html"><![CDATA[Convite para o Grok Podcast!]]></title>
<link href="http://feedproxy.google.com/~r/NomeDoJogo/~3/uAOlNWtMEDM/" />
<updated>2011-03-24T00:00:00-03:00</updated>
<id>http://nomedojogo.com/2011/03/24/convite-para-o-grok-podcast</id>

      <content type="html">&lt;p&gt;Um convite formal para o próximo convidado especial do &lt;a href="http://grokpodcast.com/"&gt;Grok Podcast&lt;/a&gt;!&lt;/p&gt;

&lt;p&gt;&lt;audio controls='controls'&gt;&lt;source src='http://old.nomedojogo.com/wp-content/uploads/2011/03/Rafael-Rosa-Bruno-Douglas-Campos-on-2011-02-24-at-22.33.output.mp3 ' type='audio/mp3'/&gt;&lt;/audio&gt;&lt;/p&gt;
&lt;p&gt;&lt;a rel="bookmark" href="http://nomedojogo.com/2011/03/24/convite-para-o-grok-podcast/"&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/NomeDoJogo/~4/uAOlNWtMEDM" height="1" width="1"/&gt;</content>
    <feedburner:origLink>http://nomedojogo.com/2011/03/24/convite-para-o-grok-podcast/</feedburner:origLink></entry>
  
    <entry>
      




<title type="html"><![CDATA[Quatro anos de Nome do Jogo]]></title>
<link href="http://feedproxy.google.com/~r/NomeDoJogo/~3/ehzlIM1tbLs/" />
<updated>2011-02-08T00:00:00-02:00</updated>
<id>http://nomedojogo.com/2011/02/08/quatro-anos-de-nome-do-jogo</id>

      <content type="html">&lt;p&gt;&lt;img class="center" src="http://old.nomedojogo.com/wp-content/uploads/2011/02/247607315_a74fac5aa4.jpg" width="500" height="332"&gt;&lt;/p&gt;

&lt;p&gt;Hoje completam quatro anos desde que comecei a escrever esse blog. No total são 812 artigos e 4.305 comentários. Sempre mantive um ritmo muito bom de publicação, porém com o crescimento do Twitter (&lt;a href="http://twitter.com/#!/carlosbrando"&gt;@carlosbrando&lt;/a&gt;) como ferramenta de comunicação o tempo entre um artigo e outro diminuiu muito, eu tenho de confessar.&lt;/p&gt;

&lt;p&gt;Escrever e manter um blog por tanto tempo não é fácil, principalmente se você tem a intenção de publicar conteúdo de qualidade. Mas as recompensas valem muito a pena, nesses quatro anos esse blog gerou dois livros, muitos vídeos, um podcast semanal sobre &lt;a href="http://podcast.rubyonrails.pro.br/"&gt;Ruby on Rails&lt;/a&gt; e agora o &lt;a href="http://grokpodcast.com/"&gt;Grok Podcast&lt;/a&gt;. Sem contar todas as outras oportunidades que apareceram graças a essa iniciativa.&lt;/p&gt;

&lt;p&gt;Obrigado pela audiência!&lt;/p&gt;
&lt;p&gt;&lt;a rel="bookmark" href="http://nomedojogo.com/2011/02/08/quatro-anos-de-nome-do-jogo/"&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/NomeDoJogo/~4/ehzlIM1tbLs" height="1" width="1"/&gt;</content>
    <feedburner:origLink>http://nomedojogo.com/2011/02/08/quatro-anos-de-nome-do-jogo/</feedburner:origLink></entry>
  
    <entry>
      




<title type="html"><![CDATA[Grok Podcast 16 - O livro Rework]]></title>
<link href="http://feedproxy.google.com/~r/NomeDoJogo/~3/VNmrNVVrALw/" />
<updated>2011-01-27T00:00:00-02:00</updated>
<id>http://nomedojogo.com/2011/01/27/grok-podcast-16-%e2%80%93-o-livro-rework</id>

      <content type="html">&lt;p&gt;&lt;img class="center" src="http://grokpodcast.com/wp-content/uploads/2011/01/header.jpg"&gt;&lt;/p&gt;

&lt;p&gt;Depois de um bom período de férias, estamos de volta com o &lt;a href="http://grokpodcast.com/"&gt;Grok Podcast&lt;/a&gt;! E para começar o ano com tudo decidimos gravar uma série inteira sobre o controverso livro &lt;a href="http://37signals.com/rework/"&gt;Rework&lt;/a&gt; de Jason Fried e David Heinemeier Hansson (o criador do framework Ruby on Rails).&lt;/p&gt;

&lt;p&gt;Serão ao todo três episódios comentando os pontos-chave de cada um dos capítulos do livro. Se você já leu o livro será como bater um papo sobre a leitura e se você ainda não teve a oportunidade de ler, será como um bom resumo para atiçar a sua curiosidade.&lt;/p&gt;

&lt;p&gt;Espero que gostem e continuem acompanhando o &lt;a href="http://grokpodcast.com/"&gt;Grok Podcast&lt;/a&gt; nessa segunda temporada!&lt;/p&gt;

&lt;p&gt;Você pode adicionar o podcast ao seu iTunes &lt;a href="http://itunes.apple.com/us/podcast/grok-podcast/id393122038" target="_blank"&gt;clicando aqui&lt;/a&gt; ou atráves do nosso &lt;a href="http://grokpodcast.com/feed/" target="_blank"&gt;RSS&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a rel="bookmark" href="http://nomedojogo.com/2011/01/27/grok-podcast-16-%25e2%2580%2593-o-livro-rework/"&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/NomeDoJogo/~4/VNmrNVVrALw" height="1" width="1"/&gt;</content>
    <feedburner:origLink>http://nomedojogo.com/2011/01/27/grok-podcast-16-%25e2%2580%2593-o-livro-rework/</feedburner:origLink></entry>
  
    <entry>
      




<title type="html"><![CDATA[Como funcionam os métodos puts e print no Ruby]]></title>
<link href="http://feedproxy.google.com/~r/NomeDoJogo/~3/uwut1scepoI/" />
<updated>2011-01-03T00:00:00-02:00</updated>
<id>http://nomedojogo.com/2011/01/03/como-funcionam-os-metodos-puts-e-print-no-ruby</id>

      <content type="html">&lt;p&gt;Se você já experimentou Ruby com certeza já conheceu os famosos métodos &lt;code&gt;puts&lt;/code&gt;, &lt;code&gt;print&lt;/code&gt; e outros semelhantes a esses. Talvez você tenha notado que esses métodos, diferente de como aprendemos, podem ser executados sem que seja necessário informar um objeto.&lt;/p&gt;

&lt;p&gt;Se você vem de outra linguagem de programação talvez tenha logo especulado que eles sejam palavras reservadas do Ruby. Mas isso não é verdade. Ambos são métodos comuns, como qualquer outro. Veja por si mesmo:&lt;/p&gt;

&lt;figure class='code'&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;div class="highlight"&gt;&lt;table&gt;&lt;tr&gt;&lt;td class="gutter"&gt;&lt;pre class="line-numbers"&gt;&lt;span class='line-number'&gt;1&lt;/span&gt;
&lt;span class='line-number'&gt;2&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;td class='code'&gt;&lt;pre&gt;&lt;code class='ruby'&gt;&lt;span class='line'&gt;&lt;span class="no"&gt;Object&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;send&lt;/span&gt; &lt;span class="ss"&gt;:puts&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;um texto qualquer&amp;quot;&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="c1"&gt;# =&amp;gt; um texto qualquer&lt;/span&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;/figure&gt;


&lt;p&gt;Como você pode ver no exemplo acima, esses métodos foram inteligentemente incluidos na classe &lt;code&gt;Object&lt;/code&gt;, e como no Ruby tudo é um objeto&amp;#8230;&lt;/p&gt;

&lt;figure class='code'&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;div class="highlight"&gt;&lt;table&gt;&lt;tr&gt;&lt;td class="gutter"&gt;&lt;pre class="line-numbers"&gt;&lt;span class='line-number'&gt;1&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;td class='code'&gt;&lt;pre&gt;&lt;code class='ruby'&gt;&lt;span class='line'&gt;&lt;span class="nb"&gt;puts&lt;/span&gt; &lt;span class="nb"&gt;send&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;:class&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# =&amp;gt; Object&lt;/span&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;/figure&gt;


&lt;h2&gt;O módulo Kernel&lt;/h2&gt;

&lt;p&gt;Embora esses métodos sejam disponibilizados por meio de &lt;code&gt;Object&lt;/code&gt;, eles estão implementados em um módulo chamado &lt;code&gt;Kernel&lt;/code&gt;, que é então incluido na classe.&lt;/p&gt;

&lt;p&gt;O interessante é que você pode tirar proveito desse mecanismo. Se você adicionar um método ao módulo &lt;code&gt;Kernel&lt;/code&gt; ele funcionará exatamente como os métodos citados acima. Veja:&lt;/p&gt;

&lt;figure class='code'&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;div class="highlight"&gt;&lt;table&gt;&lt;tr&gt;&lt;td class="gutter"&gt;&lt;pre class="line-numbers"&gt;&lt;span class='line-number'&gt;1&lt;/span&gt;
&lt;span class='line-number'&gt;2&lt;/span&gt;
&lt;span class='line-number'&gt;3&lt;/span&gt;
&lt;span class='line-number'&gt;4&lt;/span&gt;
&lt;span class='line-number'&gt;5&lt;/span&gt;
&lt;span class='line-number'&gt;6&lt;/span&gt;
&lt;span class='line-number'&gt;7&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;td class='code'&gt;&lt;pre&gt;&lt;code class='ruby'&gt;&lt;span class='line'&gt;&lt;span class="k"&gt;module&lt;/span&gt; &lt;span class="nn"&gt;Kernel&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;print_line&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;        &lt;span class="nb"&gt;puts&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;-&amp;#39;&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;20&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;    &lt;span class="k"&gt;end&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="n"&gt;print_line&lt;/span&gt; &lt;span class="c1"&gt;# =&amp;gt; --------------------&lt;/span&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;/figure&gt;

&lt;p&gt;&lt;a rel="bookmark" href="http://nomedojogo.com/2011/01/03/como-funcionam-os-metodos-puts-e-print-no-ruby/"&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/NomeDoJogo/~4/uwut1scepoI" height="1" width="1"/&gt;</content>
    <feedburner:origLink>http://nomedojogo.com/2011/01/03/como-funcionam-os-metodos-puts-e-print-no-ruby/</feedburner:origLink></entry>
  
    <entry>
      




<title type="html"><![CDATA[Retrospectiva 2010]]></title>
<link href="http://feedproxy.google.com/~r/NomeDoJogo/~3/FpdHIorlunU/" />
<updated>2010-12-31T00:00:00-02:00</updated>
<id>http://nomedojogo.com/2010/12/31/retrospectiva-2010</id>

      <content type="html">&lt;p&gt;Mais um ano bem agitado se passou. Muito trabalho e diversão fizeram de 2010 um excelente ano para mim. Porém, o que mais me marcou esse ano foi o meu retorno ao mundo dos podcasts (algo que pessoalmente gosto muito de fazer) com o &lt;a href="http://grokpodcast.com/"&gt;Grok Podcast&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Mas a brincadeira ainda não acabou, tenho muitos projetos na cabeça e espero poder colocá-los em prática no ano que se segue.&lt;/p&gt;

&lt;h2&gt;Os artigos mais lidos do blog em 2010&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.nomedojogo.com/2010/01/20/a-filosofia-do-ruby/"&gt;A Filosofia do Ruby&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.nomedojogo.com/2010/02/17/programadores-incompetentes-sao-otimos-para-o-mercado/"&gt;Programadores incompetentes são ótimos para o mercado&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.nomedojogo.com/2010/02/10/quer-se-tornar-um-programador-de-sucesso-pare-de-escrever-codigo/"&gt;Quer se tornar um programador de sucesso? Pare de escrever código&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.nomedojogo.com/2010/02/03/o-efeito-do-codigo-na-mente-do-programador/"&gt;O Efeito do Código na Mente do Programador&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.nomedojogo.com/2010/03/28/nao-se-fazem-mais-programadores-como-antigamente/"&gt;Não se fazem mais programadores como antigamente&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.nomedojogo.com/2010/04/23/investir-em-ruby-era-muito-arriscado/"&gt;Investir em Ruby era muito arriscado&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.nomedojogo.com/2010/04/20/migrando-do-textmate-para-o-textmate/"&gt;Migrando do Textmate para o Textmate&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.nomedojogo.com/2010/05/06/um-pseudo-intellisense-para-o-textmate/"&gt;Um pseudo-intellisense para o Textmate&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.nomedojogo.com/2010/06/04/programadores-nem-sempre-o-time-que-esta-ganhando-esta-ganhando/"&gt;Programadores: Nem sempre o time que está ganhando está ganhando&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.nomedojogo.com/2010/07/01/eu-quebrei-o-codigo/"&gt;“Eu quebrei o código”&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.nomedojogo.com/2010/09/15/meu-novo-podcast/"&gt;Meu novo podcast&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Até o ano que vem!&lt;/p&gt;
&lt;p&gt;&lt;a rel="bookmark" href="http://nomedojogo.com/2010/12/31/retrospectiva-2010/"&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/NomeDoJogo/~4/FpdHIorlunU" height="1" width="1"/&gt;</content>
    <feedburner:origLink>http://nomedojogo.com/2010/12/31/retrospectiva-2010/</feedburner:origLink></entry>
  
</feed>

