<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Entrevistas | AkitaOnRails.com</title><link>https://akitaonrails.github.io/tags/entrevistas/</link><description>Blog do Fabio Akita do Canal do YouTube 'Akitando' falando sobre tecnologia, carreira e coisas geek.</description><generator>Hugo -- gohugo.io</generator><language>pt-BR</language><lastBuildDate>Mon, 19 Oct 2026 23:20:48 +0000</lastBuildDate><atom:link href="https://akitaonrails.github.io/tags/entrevistas/index.xml" rel="self" type="application/rss+xml"/><item><title>Participando em Podcasts</title><link>https://akitaonrails.github.io/2017/06/02/participando-em-podcasts/</link><guid isPermaLink="true">https://akitaonrails.github.io/2017/06/02/participando-em-podcasts/</guid><pubDate>Fri, 02 Jun 2017 10:34:00 -0300</pubDate><description>&lt;p&gt;&lt;strong&gt;Atualização 11/10/17&lt;/strong&gt;: mais um podcast pelo Ruby Rogues, entitulado &lt;a href="https://devchat.tv/ruby-rogues/rr-331-30-days-elixir-crystal-back-ruby-fabio-akita"target="_blank" rel="noopener"&gt;&amp;ldquo;RR 331: 30 days to Elixir then Crystal and back again to Ruby with Fabio Akita&amp;rdquo;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Este ano, por total coincidência, tive a oportunidade de participar de 3 canais de podcast. Quero deixar meus agradecimentos ao Paulo Silveira, Charles Max Wood, Lucas Caton, Fellipe Azambuja e Ramon Sanches.&lt;/p&gt;
&lt;p&gt;O primeiro na verdade saiu no fim do ano passado, em Novembro, pelo &lt;a href="https://devchat.tv/ruby-rogues/"target="_blank" rel="noopener"&gt;Ruby Rogues&lt;/a&gt; com o tema &lt;a href="https://devchat.tv/ruby-rogues/285-rr-ruby-conf-brazil-and-building-communities-with-fabio-akita"target="_blank" rel="noopener"&gt;&amp;ldquo;Ruby Conf Brazil and Building Communities&amp;rdquo;&lt;/a&gt; (em inglês) onde o Charles Wood e eu discutimos um pouco sobre a história da comunidade Ruby no Brasil, como eu tentei começar, o que tentei fazer, blog, palestras, eventos. Além de pontos mais específicos como um pequeno panorama da linguagem Ruby e meu conceito sobre não se limitar a somente uma linguagem ou tecnologia. Se você é novo na comunidade Ruby talvez ajude a ter uma idéia de como chegamos onde estamos hoje.&lt;/p&gt;</description><content:encoded><![CDATA[<p><strong>Atualização 11/10/17</strong>: mais um podcast pelo Ruby Rogues, entitulado <a href="https://devchat.tv/ruby-rogues/rr-331-30-days-elixir-crystal-back-ruby-fabio-akita"target="_blank" rel="noopener">&ldquo;RR 331: 30 days to Elixir then Crystal and back again to Ruby with Fabio Akita&rdquo;</a></p>
<p>Este ano, por total coincidência, tive a oportunidade de participar de 3 canais de podcast. Quero deixar meus agradecimentos ao Paulo Silveira, Charles Max Wood, Lucas Caton, Fellipe Azambuja e Ramon Sanches.</p>
<p>O primeiro na verdade saiu no fim do ano passado, em Novembro, pelo <a href="https://devchat.tv/ruby-rogues/"target="_blank" rel="noopener">Ruby Rogues</a> com o tema <a href="https://devchat.tv/ruby-rogues/285-rr-ruby-conf-brazil-and-building-communities-with-fabio-akita"target="_blank" rel="noopener">&ldquo;Ruby Conf Brazil and Building Communities&rdquo;</a> (em inglês) onde o Charles Wood e eu discutimos um pouco sobre a história da comunidade Ruby no Brasil, como eu tentei começar, o que tentei fazer, blog, palestras, eventos. Além de pontos mais específicos como um pequeno panorama da linguagem Ruby e meu conceito sobre não se limitar a somente uma linguagem ou tecnologia. Se você é novo na comunidade Ruby talvez ajude a ter uma idéia de como chegamos onde estamos hoje.</p>
<p>O segundo saiu em fevereiro, no podcast do Paulo Silveira, o <a href="http://hipsters.tech"target="_blank" rel="noopener">Hipsters Ponto Tech</a> e o assunto foi <a href="http://hipsters.tech/carreira-em-tecnologia-hipsters-31/"target="_blank" rel="noopener">&ldquo;Carreira em Tecnologia&rdquo;</a>. Participaram os grandes Guilherme Silveira e Sérgio Lopes, e nessa conversa demos uma pincelada nos principais aspectos para quem está começando na carreira de programação. Vejam também os comentários, pois vários outros pontos de vista, opiniões e dicas surgiram dos ouvintes. De curiosidade, esse deu um pouquinho de trabalho porque gravamos um anterior mas como o Paulo ainda estava no início do podcast, ele refinou o processo e pediu para regravar este que acabou saindo. O formato e os temas mudaram um pouco para ficar mais focado, o que tornou a conversa melhor. Alguns dos assuntos que eu abordei na primeira tentativa acabei retomando nos podcasts seguintes desta lista.</p>
<p>O terceiro saiu no meio de maio a convite do Lucas Caton, que me apresentou ao Montanha e Ramon do podcast <a href="http://devnaestrada.com.br"target="_blank" rel="noopener">Dev na Estrada</a> e o tema foi <a href="http://devnaestrada.com.br/2017/05/18/vale-a-pena-ruby-on-rails.html"target="_blank" rel="noopener">&ldquo;Vale a pena? Ruby on Rails com Lucas Caton e Akita&rdquo;</a> onde novamente eu retomo um pouco da parte história da comunidade Ruby internacional e porque Ruby on Rails é diferente de todas as outras comunidades e porque ainda vale a pena investir seu tempo nesse ecossistema.</p>
<p>O quarto saiu no fim de maio e o Charles Wood me convidou novamente para o Ruby Rogues com o título de <a href="https://devchat.tv/ruby-rogues/ruby-story-fabio-akita"target="_blank" rel="noopener">&ldquo;My Ruby Story&rdquo;</a> (em inglês), mas desta vez para eu contar um pouco da minha história pessoal. Como comecei minha carreira. Como comecei com Ruby particularmente. O contexto histórico no mundo da tecnologia nos últimos 20 anos.</p>
<p>O quinto e último até agora saiu hoje, começo de junho. Retorno novamente com o Montanha do Dev na Estrada numa <a href="http://devnaestrada.com.br/2017/06/02/entrevista-fabio-akita.html"target="_blank" rel="noopener">&ldquo;Entrevista&rdquo;</a> para repetir um pouco do tema do Ruby Rogues sobre meu começo de carreira. Mas enquanto no Ruby Rogues eu passo muito rápido sobre o começo e vou para os últimos 10 anos onde foquei mais em Ruby, neste com o Montanha eu foco muito mais realmente no comecinho da minha carreira, particularmente os anos 90 e uma pincelada de 30 anos atrás até 10 anos atrás. Os anteriores são longos (média de 1h cada) mas esse em particular é MUITO longo (quase 2h!), peço desculpas pelo tamanho. Mas o Montanha começou &ldquo;conta do começo&rdquo; &hellip; eu tentei resumir e só contar alguns poucos pontos, mas mesmo assim ficou BEM longo!</p>
<p>Quem chegou a escutar um dos podcasts? O que acharam? Deixem seus comentários abaixo.</p>
]]></content:encoded><category>entrevistas</category><category>carreira</category><category>pessoal</category></item><item><title>Lost in Translation</title><link>https://akitaonrails.github.io/2010/07/29/lost-in-translation/</link><guid isPermaLink="true">https://akitaonrails.github.io/2010/07/29/lost-in-translation/</guid><pubDate>Thu, 29 Jul 2010 16:08:00 -0300</pubDate><description>&lt;p&gt;For the longest time, since I migrated my blog from Mephisto to Enki, I lost a few of my interviews and didn’t notice it. Fortunately I had an old backup from where I could recover all of them, so if you missed some of the interviews, here they are again:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://akitaonrails.github.io/2007/04/16/conversando-com-dr-nic/"&gt;Dr. Nic&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://akitaonrails.github.io/2007/04/21/conversando-com-geoffrey-grosenbach/"&gt;Geoffrey Grosenbach&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://akitaonrails.github.io/2007/05/07/conversando-com-chad-fowler/"&gt;Chad Fowler&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://akitaonrails.github.io/2007/05/11/conversando-com-david-black/"&gt;David Black&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://akitaonrails.github.io/2007/06/21/conversando-com-ola-bini-jruby-core-team-member/"&gt;Ola Bini&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://akitaonrails.github.io/2007/07/20/conversando-com-carl-youngblood/"&gt;Carl Youngblood&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://akitaonrails.github.io/2007/08/06/conversando-com-jamis-buck/"&gt;Jamis Buck&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://akitaonrails.github.io/2007/11/12/conversando-com-john-lam-ironruby/"&gt;John Lam&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://akitaonrails.github.io/2007/12/15/conversando-com-avi-bryant-parte-1/"title="Part 1"&gt;Avi Bryant&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://akitaonrails.github.io/2007/12/22/conversando-com-avi-bryant-parte-2/"title="Part 2"&gt;Avi Bryant&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://akitaonrails.github.io/2008/01/01/conversando-com-adrian-holovaty/"&gt;Adrian Holovaty&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://akitaonrails.github.io/2008/01/09/conversando-com-peter-cooper/"&gt;Peter Cooper&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://akitaonrails.github.io/2008/01/09/conversando-com-hal-fulton"&gt;Hal Fulton&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://akitaonrails.github.io/2008/02/11/conversando-com-evan-phoenix/"&gt;Evan Phoenix&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description><content:encoded><![CDATA[<p>For the longest time, since I migrated my blog from Mephisto to Enki, I lost a few of my interviews and didn’t notice it. Fortunately I had an old backup from where I could recover all of them, so if you missed some of the interviews, here they are again:</p>
<ul>
<li><a href="/2007/04/16/conversando-com-dr-nic/">Dr. Nic</a></li>
<li><a href="/2007/04/21/conversando-com-geoffrey-grosenbach/">Geoffrey Grosenbach</a></li>
<li><a href="/2007/05/07/conversando-com-chad-fowler/">Chad Fowler</a></li>
<li><a href="/2007/05/11/conversando-com-david-black/">David Black</a></li>
<li><a href="/2007/06/21/conversando-com-ola-bini-jruby-core-team-member/">Ola Bini</a></li>
<li><a href="/2007/07/20/conversando-com-carl-youngblood/">Carl Youngblood</a></li>
<li><a href="/2007/08/06/conversando-com-jamis-buck/">Jamis Buck</a></li>
<li><a href="/2007/11/12/conversando-com-john-lam-ironruby/">John Lam</a></li>
<li><a href="/2007/12/15/conversando-com-avi-bryant-parte-1/"title="Part 1">Avi Bryant</a></li>
<li><a href="/2007/12/22/conversando-com-avi-bryant-parte-2/"title="Part 2">Avi Bryant</a></li>
<li><a href="/2008/01/01/conversando-com-adrian-holovaty/">Adrian Holovaty</a></li>
<li><a href="/2008/01/09/conversando-com-peter-cooper/">Peter Cooper</a></li>
<li><a href="/2008/01/09/conversando-com-hal-fulton">Hal Fulton</a></li>
<li><a href="/2008/02/11/conversando-com-evan-phoenix/">Evan Phoenix</a></li>
</ul>
]]></content:encoded><category>entrevistas</category><category>blog</category></item><item><title>Conversando com Adam Jacob</title><link>https://akitaonrails.github.io/2009/11/18/conversando-com-adam-jacob/</link><guid isPermaLink="true">https://akitaonrails.github.io/2009/11/18/conversando-com-adam-jacob/</guid><pubDate>Wed, 18 Nov 2009 11:46:00 -0200</pubDate><description>&lt;p&gt;&lt;img src="http://s3.amazonaws.com/akitaonrails/assets/2009/11/18/Opscode_logo_final_full_aspect_medium_original.png" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;p&gt;Gerenciamento de Configuração é um assunto complicado. Para quem não está familiarizado: quando você é um desenvolvedor com poucos servidores para cuidar, geralmente dá para se virar gerenciando-os manualmente. As pessoas provavelmente estão acostumadas a colocar um CD, dar duplo clique no programa &amp;ldquo;instalar&amp;rdquo; e clicar &amp;ldquo;avançar&amp;rdquo;, &amp;ldquo;avançar&amp;rdquo; até o fim, depois entrar manualmente para fazer backup (quando se lembra), e às vezes até aplicar atualizações de segurança quando se lembra delas.&lt;/p&gt;</description><content:encoded><![CDATA[<p><img src="http://s3.amazonaws.com/akitaonrails/assets/2009/11/18/Opscode_logo_final_full_aspect_medium_original.png" alt=""  loading="lazy" /></p>
<p>Gerenciamento de Configuração é um assunto complicado. Para quem não está familiarizado: quando você é um desenvolvedor com poucos servidores para cuidar, geralmente dá para se virar gerenciando-os manualmente. As pessoas provavelmente estão acostumadas a colocar um CD, dar duplo clique no programa &ldquo;instalar&rdquo; e clicar &ldquo;avançar&rdquo;, &ldquo;avançar&rdquo; até o fim, depois entrar manualmente para fazer backup (quando se lembra), e às vezes até aplicar atualizações de segurança quando se lembra delas.</p>
<p>Mas quando você tem mais de uma dúzia de máquinas, as coisas começam a ficar feias. Você acaba cometendo mais erros, esquecendo etapas importantes, e de repente gerenciar máquinas vira um pesadelo. Você acaba sendo acordado no meio da noite porque esqueceu de instalar algum componente crucial, e por aí vai.</p>
<p>Da mesma forma que você precisa de testes e ferramentas de integração contínua como desenvolvedor, você também precisa de ferramentas automatizadas, confiáveis e flexíveis para o papel de administrador de sistemas. É aí que ferramentas como o <strong>Chef</strong> entram para ajudar.</p>
<p>Da <a href="http://opscode.com/"target="_blank" rel="noopener">Opscode Inc.</a>, temos <a href="http://twitter.com/adamhjk"target="_blank" rel="noopener">Adam Jacob</a> (CTO) e <a href="http://twitter.com/jesserobbins"target="_blank" rel="noopener">Jesse Robbins</a> (CEO) para falar sobre o novo concorrente no campo de administração de sistemas automatizada, o <a href="http://www.opscode.com/chef/"target="_blank" rel="noopener">Chef</a>, já em uso em muitas empresas que se esforçam na vanguarda para manter seus datacenters.</p>
<p><strong>AkitaOnRails:</strong> Para começar esta entrevista, seria ótimo ter mais informações de background sobre vocês. Como vocês chegaram ao espaço de gerenciamento de configuração?</p>
<p><img src="http://s3.amazonaws.com/akitaonrails/assets/2009/11/18/adam_jacob_original_original.png" alt=""  loading="lazy" /></p>
<p><strong>Adam:</strong> Sou administrador de sistemas há 13 anos e, na maior parte desse tempo, trabalhei em empresas que faziam muitas fusões e aquisições. A cada dois meses adquiríamos uma nova empresa e era minha função ajudar a descobrir como absorver essas empresas no todo. Fiquei muito bom em analisar uma aplicação com a qual não tinha nada a ver com a criação e descobrir o que precisava ser feito para escalá-la (ou pelo menos fazê-la funcionar).</p>
<p>Uma coisa que não podíamos fazer era dizer às pessoas que construíram as aplicações que elas precisavam ser radicalmente alteradas — em muitos casos, elas nem estavam mais lá. O que isso significava na prática era que precisávamos de uma arquitetura subjacente muito flexível e modular — tudo que fazíamos tinha que servir à aplicação, e não o contrário. Por necessidade, isso significou me tornar um desenvolvedor de ferramentas — se não tivéssemos as ferramentas de que precisávamos, nunca conseguiríamos fazer o trabalho diante de nós.</p>
<p>Eventualmente cofundei uma empresa de consultoria chamada HJK Solutions. Construímos infraestrutura totalmente automatizada para startups — desde a instalação do SO até o deployment de aplicações, tudo totalmente automatizado (incluindo Gerenciamento de Identidade, Monitoramento e Tendências, etc.). Ao longo dos dois anos seguintes, construímos infraestrutura para 12 startups diferentes, cujos produtos iam de gerenciamento de frotas de carros elétricos a namoro online.</p>
<p>Então chego ao gerenciamento de configuração pelas trincheiras — como administrador de sistemas de linha tentando facilitar minha vida, como consultor ajudando outros a colher os benefícios, e agora como construtor de ferramentas tentando avançar o estado da arte.</p>
<p><img src="http://s3.amazonaws.com/akitaonrails/assets/2009/11/18/Jesse_Robbins_original_original.png" alt=""  loading="lazy" /></p>
<p><strong>Jesse:</strong> Jesse Robbins é CEO da Opscode (criadores do Chef) e um especialista reconhecido em Infraestrutura, Operações Web e Gerenciamento de Emergências. Atua como co-presidente da Velocity Web Performance &amp; Operations Conference e contribui para o O&rsquo;Reilly Radar. Antes de cofundar a Opscode, trabalhou na Amazon.com com o título de &ldquo;Master of Disaster&rdquo; onde era responsável pela disponibilidade do site para todas as propriedades com a marca Amazon. Jesse é bombeiro voluntário/técnico de emergências médicas e gerente de emergências, e liderou uma força-tarefa implantada na Operação Furacão Katrina. Suas experiências no serviço de bombeiros influenciam profundamente seus esforços em tecnologia, e ele se esforça para destilar seu conhecimento desses dois mundos e aplicá-lo em serviço de ambos.</p>
<p><strong>AkitaOnRails:</strong> Qual é a história por trás da Opscode, qual é sua missão e qual é a história da criação do Chef?</p>
<p><strong>Opscode:</strong> A história por trás da Opscode realmente começa quando conhecemos Jesse. Ele havia escrito um artigo para o O&rsquo;Reilly Radar sobre <a href="http://radar.oreilly.com/2007/10/operations-is-a-competitive-ad.html"target="_blank" rel="noopener">Operações sendo o novo molho secreto</a> para startups. Ele e eu tomamos um café, nos tornamos amigos e ficamos em contato. Jesse entende a cultura de operações de forma visceral, e está muito bem conectado a uma enorme comunidade de pessoas com mentalidade semelhante que eu nem sabia que existia.</p>
<p>À medida que nossa empresa de consultoria crescia, chegamos a uma encruzilhada — claramente tínhamos um bom negócio, e não era difícil encontrar mais trabalho. O que era difícil era encontrar pessoas com as habilidades para de fato fazer o deploy de uma nova infraestrutura e adaptar a stack que desenvolvemos para uma nova aplicação. Não podíamos evitar o fato de que havia algumas semanas de trabalho muito intenso necessário para colocar toda a infraestrutura funcionando para um novo cliente.</p>
<p>Tentamos recrutar Jesse durante esse período, já que ele era um daquelas pessoas raras que podiam fazer esse engajamento inicial intenso. Ele recusou — principalmente porque via o que fazíamos: poderíamos construir uma empresa de consultoria enorme, mas ainda seria nas trincheiras todos os dias. A menos que conseguíssemos superar esse obstáculo, provavelmente havia formas menos estressantes de ganhar a vida. :)</p>
<p>Então começamos a analisar o que nos impedia de conseguir essa parte inicial do engajamento o mais rapidamente possível. O que nos impedia de literalmente fazer um cliente preencher um questionário e deixar esses dados orientar 95% das decisões sobre a infraestrutura?</p>
<p>A resposta, em uma palavra, era &ldquo;tudo&rdquo;. Toda a stack de ferramentas open source que estávamos usando havia sido construída em uma era diferente e via o mundo por uma lente muito diferente. Precisávamos que tudo tivesse uma API, precisávamos que tudo fosse mais aberto com seus dados e precisávamos que tudo fosse flexível o suficiente para lidar com a próxima evolução das arquiteturas de aplicações (seja lá o que isso fosse ser).</p>
<p>Com essa revelação, o próximo passo foi descobrir como seria uma &ldquo;nova stack&rdquo; de verdade. Se pudéssemos começar do zero, o que levaríamos e o que deixaríamos para trás? A Amazon havia feito um trabalho tão bom mostrando como uma API sobre o processo de bootstrapping poderia parecer, e os benefícios que poderiam ser obtidos com essa abordagem. Supondo que algo assim existisse para bootstrapping, e a próxima camada da stack (configuração)?</p>
<p>Começamos a experimentar com o Chef durante esse período de questionamentos. Começamos a trabalhar no Chef com o objetivo de nos colocar fora dos negócios — tornando a barreira de entrada para ter uma infraestrutura totalmente automatizada tão baixa que qualquer desenvolvedor ou administrador de sistemas pudesse simplesmente fazê-lo. Construímos um protótipo, mostramos para Jesse e ele concordou em se juntar ao time.</p>
<p>A Opscode nasceu então, e nossa missão surgiu desses experimentos: estamos levando a Automação de Infraestrutura para as Massas. Queremos derrubar as barreiras de entrada que impedem as pessoas de ter uma infraestrutura realmente ótima, repetível e automatizada. Nosso papel é trazer aos desenvolvedores e administradores de sistemas as melhores ferramentas possíveis para que possam construir os sistemas que sempre quiseram.</p>
<p>Captamos 2,5 milhões da DFJ em janeiro de 2009 com essa visão e desde então temos trabalhado nisso.</p>
<p><strong>AkitaOnRails:</strong> Gostaria de dizer que apenas sysadmins amadores fazem tudo manualmente, mas acho que a maioria das corporações pequenas e médias ainda faz tudo manualmente ou com scripts aleatórios espalhados por todo lugar. A noção de &ldquo;gerenciamento de configuração&rdquo; ainda é nova para muita gente. Você poderia explicar brevemente o que é e por que é importante?</p>
<p><strong>Opscode:</strong> Para mim, &ldquo;Gerenciamento de Configuração&rdquo; em sua essência é tudo que você precisa fazer para levar um sistema de &ldquo;rodando um sistema operacional&rdquo; para &ldquo;fazendo seu trabalho&rdquo;. Quando um administrador de sistemas configura um sistema manualmente e posta suas notas em um Wiki, ele está praticando a forma mais primitiva de Gerenciamento de Configuração.</p>
<p>Ter essas notas é melhor que nada — quando ela precisar fazer aquela tarefa de novo, pode pelo menos voltar e lê-las para se lembrar do que fez da última vez. Mas ainda precisa fazer tudo de novo — e a repetição cansa. Então ela começa a escrever scripts que encapsulam esse conhecimento em código, de modo que agora só precisa executar uma série de comandos menores.</p>
<p>O tempo passa, porém, e a entropia entra em ação. Os sistemas começam a derivar de onde estavam quando o administrador escreveu os scripts. Logo os scripts não rodam mais, ou se rodam, a configuração que constroem está errada. Nossa destemida admin começa então a editar os scripts ou criar novos para lidar com o sistema nesse novo estado. Isso é o estágio que chamamos de &ldquo;tool sprawl&rdquo; — você tem uma ferramenta para cada fase diferente do ciclo de vida observável de um sistema.</p>
<p>As ferramentas modernas de gerenciamento de configuração resolvem esse problema fornecendo um framework para descrever o estado final em que um sistema deve estar, em vez dos passos discretos que devemos seguir para chegar lá em qualquer momento. Em vez de escrever um script que lista os comandos para instalar o Apache, escrever o arquivo de configuração e iniciar o serviço, você descreveria que &ldquo;apache deve estar instalado&rdquo;, o arquivo de configuração &ldquo;deve ter esta aparência&rdquo; e o serviço &ldquo;deve estar rodando&rdquo;.</p>
<p>Quando o sistema de gerenciamento de configuração roda, ele analisa cada uma dessas descrições individualmente e garante que estejam no estado adequado. Não nos importa mais qual é o estado inicial do sistema — o sistema de gerenciamento de configuração só tomará ação em cada etapa se o sistema não estiver no estado que você descreveu. Se você rodar novamente e nada tiver mudado, o sistema não toma nenhuma ação. (Os geeks de gerenciamento de configuração chamam essa propriedade de <a href="http://en.wikipedia.org/wiki/Idempotence"target="_blank" rel="noopener">idempotência</a>)</p>
<p>Isso significa que você pode descrever seus sistemas uma vez em código e, à medida que mudam com o tempo, simplesmente atualizar esse código para refletir o estado desejado. O impacto desse modelo no dia a dia de um administrador de sistemas não pode ser subestimado — torna tudo mais fácil.</p>
<p>Também tem impactos enormes fora do mundo dos administradores de sistemas. Você agora tem um documento vivo que descreve como todos os seus servidores estão configurados — pode compartilhá-lo, colocá-lo em controle de versão, imprimi-lo para um auditor. Processos de negócios que antes exigiam intervenção manual frequentemente podem ser reduzidos a mudanças discretas. Quanto mais você trabalha dessa forma, mais os impactos se espalham pela organização.</p>
<p><strong>AkitaOnRails:</strong> Embora a comunidade Ruby provavelmente compare Chef com Puppet, acho que um dos sistemas mais amplamente utilizados é o CFEngine2. Como o Chef se compara ao CFEngine2?</p>
<p><strong>Opscode:</strong> O Cfengine 2 é onde quase todo mundo no mundo do gerenciamento de configuração aprendeu. Mark Burgess é responsável pelos artigos acadêmicos que delinearam a ideia de que cada parte do sistema deve ser idempotente, e seu trabalho estudando como sistemas do mundo real podem ser gerenciados em escala fez mais para impactar a evolução do gerenciamento de configuração do que qualquer outro indivíduo.</p>
<p>Além da ideia de recursos idempotentes, Burgess introduziu o conceito maior de &ldquo;convergência&rdquo;. A ideia básica aqui é que se você tem a descrição de como cada recurso finito deve ser configurado, dado tempo suficiente, esses recursos trarão o sistema para um estado compatível. A ordem em que os recursos rodam fundamentalmente não importa — eventualmente, todos chegarão ao lugar certo.</p>
<p>Embora esse modelo funcione em um nível fundamental, tem algumas ineficiências bastante dramáticas. O Cfengine aplica recursos com base em seu tipo — todos os arquivos são gerenciados de uma vez, depois todos os serviços, depois todos os pacotes. Você pode controlar a ordem em que são executados com o &lsquo;actionsequence&rsquo;, mas cada sistema tem apenas uma ordem. Então se você precisa copiar um arquivo, instalar um pacote e reiniciar um serviço, é fácil o suficiente de modelar. Quando você começa a entrar em configurações mais complexas, porém, fica cada vez mais difícil montar um actionsequence que permite configurar todo o seu sistema em uma única execução.</p>
<p>Isso não é um bug no Cfengine — é por design. A convergência é a resposta — não tem problema precisar rodar mais de uma vez; eventualmente chegará lá. Se você está pensando demais sobre a ordem em que as coisas devem acontecer, provavelmente não está pensando em descrições idempotentes.</p>
<p>Na minha experiência, porém, isso era frustrante em escala. Significava que o tempo necessário para configurar um sistema aumentava à medida que a configuração ficava mais complicada, e sua capacidade de modelar interações complexas no sistema tornava-se cada vez mais opaca.</p>
<p>Para a era em que foi escrito, esse problema importava muito menos. Se leva de 6 a 8 semanas para pedir um servidor, depois mais uma semana para instalá-lo no rack e instalar o SO, o fato de que o Cfengine precisa rodar 3 vezes para configurá-lo não importa muito. (Você tem problemas muito maiores!) Em um mundo onde muitos de nós podemos ir de bare-metal a um sistema operacional rodando em 5 minutos, seja por nossos próprios sistemas de instalação ou por uma chamada de API à AWS, isso começa a importar muito.</p>
<p>O Chef adota uma abordagem diferente. Começamos com a ideia de um &ldquo;recurso&rdquo; idempotente — um pacote, um serviço, etc. Adicionamos a ideia de &ldquo;ações&rdquo; — todos os diferentes estados que você pode querer solicitar que um recurso esteja. Depois você coloca esses recursos em &ldquo;recipes&rdquo;, que são avaliadas na ordem em que são escritas. Você pode então fazer com que recipes dependam de outras recipes que tenham sido concluídas antes de serem executadas, dando-lhe a capacidade de dizer &ldquo;certifique-se de que o Apache está instalado antes de configurar minha Aplicação Web&rdquo;.</p>
<p>O objetivo é que, com Chef, você sempre possa trazer o sistema ao estado adequado com uma única execução do Chef. Ele vê a convergência como uma resposta a um bug — um sistema que está 1/2 configurado está, de fato, quebrado. Se a causa do bug for ambiental — um serviço de rede não está disponível, por exemplo — então rodar o Chef novamente provavelmente corrigirá as coisas. Se o problema é que você não especificou a ordem em que quer que os recursos sejam configurados, então é um bug em suas recipes. Se você não consegue escrever uma recipe para configurar seu sistema em uma única execução do Chef, é um bug no Chef.</p>
<p>Isso também tem efeitos colaterais para raciocinar sobre o sistema em escala. Dada a mesma configuração e atributos, o Chef sempre se comportará da mesma forma, em todos os sistemas. À medida que você adiciona mais e mais coisas ao sistema, ainda é fácil raciocinar sobre quando e como elas serão configuradas.</p>
<p>Curiosamente, o Cfengine 3 implementa um sistema muito similar ao Chef. Em vez de uma actionsequence global única, usa um &lsquo;bundlesequence&rsquo;, onde bundles são aproximadamente análogos ao conceito de recipe do Chef.</p>
<p>Outra diferença importante é que o Chef permite que você &lsquo;olhe para cima&rsquo; em toda a sua infraestrutura ao configurar um sistema. Essa capacidade é útil quando você quer fazer coisas como configurar um sistema de monitoramento ou um load balancer. Você pode fazer perguntas ao Chef como &ldquo;quais são todos os servidores rodando minha aplicação em produção&rdquo; e usar a resposta para configurar seu sistema. (Você pode ver um exemplo disso no <a href="http://www.opscode.com/blog/2009/10/07/preview-chef-0-8-and-the-opscode-platform/"target="_blank" rel="noopener">nosso blog</a>)</p>
<p>Do ponto de vista de arquitetura de sistemas, Chef e Cfengine são na verdade bastante similares. Ambos empurram a maior parte do trabalho difícil de configurar um sistema para os próprios sistemas. Isso é muito vantajoso em escala — os servidores do Chef e do Cfengine são na verdade sistemas glorificados de transferência de arquivos.</p>
<p>Diferimos bastante em nossa abordagem sobre como deve ser uma linguagem para gerenciamento de configuração, mas falarei mais sobre isso numa pergunta posterior.</p>
<p>O Cfengine está em uso em alguns dos maiores datacenters da indústria e alterou fundamentalmente o panorama do gerenciamento de sistemas. Embora não seja mais a ferramenta que quero, não se pode subestimar o impacto que teve no design de todas as ferramentas de gerenciamento de configuração que vieram depois — incluindo o Chef.</p>
<p><strong>AkitaOnRails:</strong> O Chef tem muitos componentes. Você pode descrever brevemente todos os principais componentes que trabalham juntos? O lado do cliente, o lado do servidor, os cookbooks?</p>
<p><strong>Opscode:</strong> Claro! A parte mais importante do Chef são os cookbooks — é onde você realmente descreve sua configuração. Eles coletam recipes e todos os assets necessários para a recipe rodar (arquivos, templates, etc.). <a href="http://cookbooks.opscode.com"target="_blank" rel="noopener">Cookbooks</a> são muito frequentemente compartilháveis e já existem muitos deles.</p>
<p>O Chef pode executar seus cookbooks em dois modos — um modo cliente/servidor (chef-client) ou um modo standalone (chef-solo). Quando você executa chef-solo, passa uma URL para um tarball cheio dos cookbooks que você quer rodar. Não há mais infraestrutura do que isso — coloque seus tarballs em algum lugar onde possa baixá-los e se divirta.</p>
<p>No modo cliente/servidor, cada cliente Chef é configurado para se comunicar com um Chef Server. O servidor armazena informações sobre cada cliente (muitas delas — coisas como endereços IP, módulos de kernel carregados e mais) e distribui os cookbooks de que precisam para se configurar. Ele também fornece uma API REST e uma interface Web interativa, para que você possa alterar facilmente a configuração de seus sistemas de forma centralizada. Por fim, todos os dados que o servidor coleta são indexados e pesquisáveis — você pode usar isso em suas recipes para configurar serviços que requerem configuração complexa e dinâmica. (Alguns exemplos seriam descobrir dinamicamente um servidor MySQL master ou encontrar todos os servidores memcached em um cluster)</p>
<p><strong>AkitaOnRails:</strong> O que você diria sobre a maturidade do Chef? O CFEngine tem mais de uma década de uso, o que é difícil de superar. Você diria que é &ldquo;maduro o suficiente&rdquo;? Ou seja, já está em produção em empresas de muitos tamanhos, suas APIs não mudam muito e meus cookbooks provavelmente funcionarão se eu atualizar para uma versão mais nova do Chef?</p>
<p><strong>Opscode:</strong> O Chef tem pouco mais de um ano — foi lançado ao público em 15 de janeiro de 2009. Desde então, 42 desenvolvedores diferentes contribuíram para o <a href="https://www.ohloh.net/p/opscode-chef/factoids/2025809"target="_blank" rel="noopener">projeto</a>, sendo que cerca de 5 trabalham para a Opscode. Está em uso em produção no Engine Yard Cloud desde o dia do lançamento. Desde então, foi adotado por empresas e universidades de todos os tamanhos, de pequenas startups a grandes empresas com requisitos de compliance muito pesados.</p>
<p>Então definitivamente é &ldquo;maduro o suficiente&rdquo; para uso no mundo real — muitas pessoas o usam e dependem dele todos os dias. Equilibrar esse conhecimento com a realidade de que o projeto está em rápida evolução é importante, e tentamos fazer isso de várias formas:</p>
<ol>
<li>A sintaxe de recipe é considerada basicamente &ldquo;completa&rdquo;. Se fizermos mudanças, elas são retrocompatíveis com lançamentos anteriores do Chef. Salvo algo verdadeiramente incrível que altere radicalmente a forma do universo, isso permanecerá verdadeiro.</li>
<li>Testamos muito. O Chef tem mais de 2000 unit tests e functional tests que cobrem toda a API REST e muitos dos recursos individuais (visamos 100% de cobertura de testes de features). Há mais linhas de código testando o Chef do que linhas de código no próprio Chef.</li>
<li>Se de fato quebrarmos compatibilidade retroativa, tentamos fazer isso apenas quando incrementamos a revisão minor. Se você tem uma versão 0.7.x do Chef instalada, ela deve sempre funcionar com outras versões do Chef no mesmo ciclo de lançamento.</li>
</ol>
<p>A maior parte do trabalho no Chef atualmente é sobre adicionar mais funcionalidades, não em mudar a forma como as funcionalidades existentes funcionam. É seguro usar o Chef hoje — no futuro, você continuará recebendo mais ingredientes para adicionar ao mix, em vez de ter que refatorar profundamente a forma como você faz as coisas.</p>
<p>Por fim, a Comunidade Chef é verdadeiramente épica — temos muitas pessoas que dedicam quantidades significativas do seu tempo ao Chef. Mesmo que não estejam contribuindo código, estão respondendo perguntas, escrevendo documentação, ficando no IRC e oferecendo cupcakes. É um grupo de pessoas focadas em resolver problemas do mundo real e ajudar umas às outras a fazer o mesmo. É de longe o que mais me orgulha e acho que tem um impacto significativo em se o Chef está pronto para o prime time. O banco é realmente muito profundo.</p>
<p><strong>AkitaOnRails:</strong> O Chef usa Ruby diretamente, o que alguns diriam ser uma bênção e uma maldição. Provavelmente é perfeito para Rubistas, mas sinto que a maioria dos sysadmins está acostumada com Bash, Python e não é muito flexível a mudanças. Por que você escolheu usar Ruby em vez de uma linguagem mais simples?</p>
<p><strong>Opscode:</strong> A resposta para a pergunta de por que usamos Ruby diretamente para a linguagem de configuração tem duas partes: por que estendemos uma linguagem 3GL em vez de construir uma DSL declarativa ou uma linguagem de modelagem completa, e por que escolhemos Ruby como essa 3GL.</p>
<p>Primeiro, por que estendemos uma 3GL. Ferramentas como Cfengine e Puppet constroem uma DSL declarativa para gerenciamento de configuração — uma linguagem customizada que fornece um modelo dentro do qual administradores de sistemas ou desenvolvedores de software podem trabalhar para automatizar seu sistema. Outras ferramentas como o EDML e ECML da Elastra, o DCML da OpsWare ou o Bcfg2 dão a você um schema XML para descrever como o sistema deve se comportar.</p>
<p>O problema com essas abordagens é que, por definição, elas devem construir uma abstração para cada tarefa que o usuário final pode querer realizar: uma façanha impossível. O nível de complexidade inerente à automação, aliado à incapacidade de recorrer a construções de linguagem 3GL quando necessário, resulta em um sistema que só pode lidar com um subconjunto da complexidade total, em vez de permitir que os usuários encontrem soluções inovadoras para seus problemas específicos. Ao aproveitar o Ruby, adicionar suporte para outros casos de uso é uma questão de adicionar novos conjuntos de classes base mantendo consistência e acessibilidade no design de sua interface, porque o escopo completo da linguagem está disponível.</p>
<p>Nosso objetivo com o Chef era manter a simplicidade que vem de ter o foco na declaração de recursos idempotentes, enquanto dá a você a flexibilidade de uma 3GL completa. Em termos práticos, tudo que você pode fazer com Ruby, você pode fazer com Chef — e como Ruby é uma 3GL, isso equivale a essencialmente qualquer coisa.</p>
<p>Larry Wall, o criador do Perl, tem uma citação que adoro:</p>
<blockquote>
  <p>&ldquo;Para a maioria das pessoas, a utilidade percebida de uma linguagem de computador é inversamente proporcional ao número de eixos teóricos que a linguagem pretende afiar.&rdquo;</p>

</blockquote>
<p>Como queríamos que o Chef tivesse a máxima utilidade, ativamente tentamos remover o maior número possível de eixos teóricos — a crença de que podemos imaginar a amplitude total do espaço do problema sendo um deles. Há mais de uma forma de fazer isso com Chef, e o único critério válido para avaliar o sucesso do seu projeto de automação é se ele resolve seus problemas de forma confiável.</p>
<p>Na prática, você precisa saber muito pouco de Ruby para usar o Chef. Aqui está um exemplo de instalação do programa &ldquo;screen&rdquo;:</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-ruby" data-lang="ruby"><span class="line"><span class="cl"><span class="n">package</span> <span class="s2">&#34;screen&#34;</span> <span class="k">do</span>
</span></span><span class="line"><span class="cl"> <span class="n">action</span> <span class="ss">:install</span>
</span></span><span class="line"><span class="cl"><span class="k">end</span></span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>O mesmo em Puppet:</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-ruby" data-lang="ruby"><span class="line"><span class="cl"><span class="n">package</span> <span class="p">{</span> <span class="s2">&#34;screen&#34;</span><span class="p">:</span>
</span></span><span class="line"><span class="cl"> <span class="k">ensure</span> <span class="o">=&gt;</span> <span class="n">present</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span></span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>E em Cfengine 2:</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-ruby" data-lang="ruby"><span class="line"><span class="cl"><span class="ss">packages</span><span class="p">:</span>
</span></span><span class="line"><span class="cl"> <span class="n">screen</span> <span class="n">action</span><span class="o">=</span><span class="n">install</span></span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>Embora todos esses sistemas exijam aprender a sintaxe, em um nível base não há muita diferença entre eles em termos de aprendizado bruto necessário. A diferença é que quando você atinge uma limitação no Chef, você tem a capacidade de inovar facilmente, e quando atinge as mesmas limitações em outras ferramentas, você não tem.</p>
<p>Escolhemos Ruby por sua capacidade bastante única de criar nova sintaxe facilmente. Ferramentas como Rspec são bons exemplos de formas como você pode manipular Ruby de forma útil e que são muito difíceis de replicar em outras ferramentas. Queríamos garantir que, mesmo estando &ldquo;em&rdquo; uma 3GL, você não precisasse passar por obstáculos adicionais para fazer as coisas simples funcionarem. Ruby era a linguagem em que eu me sentia suficientemente confortável e que eu sabia ter a capacidade de tornar isso realidade.</p>
<p>Dito isso, um de nossos objetivos é estender a capacidade de escrever recipes Chef para outras 3GLs. Já temos um exemplo disso com Perl — e não fizemos nenhuma mudança no código fonte do Chef para isso. Você pode ver o <a href="http://search.cpan.org/~holoway/Chef-0.01/lib/Chef.pm"target="_blank" rel="noopener">demo aqui no CPAN</a>. Funciona usando a API JSON do Chef para enviar os recursos compilados para a biblioteca Ruby para execução, e ao longo do tempo estaremos estendendo essas interfaces. Você poderá ter recipes escritas em Python interoperando com recipes escritas em Ruby e Perl.</p>
<p><strong>AkitaOnRails:</strong> O Chef tem (ou precisa de) algo como o Augeas, que o Puppet está tentando suportar?</p>
<p><strong>Opscode:</strong> O Augeas é interessante. O Chef não tem suporte ao Augeas hoje, e a razão é que ninguém precisou tanto a ponto de escrever a integração. Uma razão é que, com o Chef, é bastante fácil adicionar dinamicamente a um recurso (como, por exemplo, um template) ou pesquisar sistemas específicos que correspondam a um critério. Isso significa que o caso de uso do Augeas (que edita arquivos in-place) é menos necessário — você muitas vezes pode obter os dados necessários para renderizar um template, em vez de precisar construí-lo ao longo do tempo com edições incrementais.</p>
<p>Achamos que isso é uma prática melhor em geral, pois garante que todos os sistemas que você está gerenciando sempre possam ser restaurados a um estado funcional a partir apenas do repositório de cookbooks. Se você usa o Augeas para permitir mudanças idempotentes de linhas individuais de um arquivo de configuração, ele incentiva o comportamento de administradores individuais editando arquivos in-place, o que é um anti-padrão de gerenciamento de configuração.</p>
<p><strong>AkitaOnRails:</strong> Sysadmins acostumados ao CFEngine reclamam das dependências do Ruby e do peso geral. Porque para o Chef rodar você precisa do Ruby instalado. Nem todas as distros têm Ruby na mesma versão (embora a maioria já tenha migrado para 1.8.7). Depois há o problema do peso. Não estou familiarizado com o Chef, mas o Puppet pode chegar a centenas de megabytes. O que não querem é ter clusters de máquinas Chef (que, por si só, também precisam de manutenção, adicionando à complexidade geral). Como vocês lidam com datacenters com milhares de servidores? Sei que é difícil medir com precisão, mas qual seria uma proporção razoável entre servidores Chef x servidores gerenciados?</p>
<p><strong>Opscode:</strong> Ao avaliar a escalabilidade de sistemas de gerenciamento de configuração, você quer analisar dois eixos diferentes. O horizontal, que é o número de sistemas que podem ser gerenciados por um único servidor de gerenciamento de configuração a uma taxa específica de mudança, e o vertical, que é quanto da sua infraestrutura pode ser automatizada pela ferramenta.</p>
<p>No eixo vertical, acho que o Chef é o claro vencedor, por razões que acho bem resumidas pela minha resposta à pergunta 7. Colocaria o Puppet em segundo lugar e o Cfengine por último.</p>
<p>No eixo horizontal, o Cfengine é o claro vencedor. É escrito em C e tem o componente de servidor mais fino possível — basicamente não faz nada além de autenticar clientes e servir arquivos. Conheço em primeira mão datacenters que estão rodando enormes quantidades de servidores com um único servidor cfengine.</p>
<p>Uma métrica importante a ter em mente ao discutir a escalabilidade horizontal de uma solução de gerenciamento de configuração é que a métrica mais importante é a <strong>taxa de mudança</strong>. Todas as ferramentas sobre as quais estamos falando são baseadas em &lsquo;pull&rsquo; — os clientes fazem check-in em um &lsquo;intervalo&rsquo; com o servidor e aplicam um <em>&lsquo;splay&rsquo;</em> para garantir que nem todos os sistemas façam check-in de uma vez. Uma configuração out-of-the-box comum é um intervalo de 30 minutos com um splay de 15 minutos. (Isso significa que um servidor faz check-in a cada 30-45 minutos, dependendo.) Se você se sentir confortável em aumentar esse intervalo, obterá mais escalabilidade com menos recursos (reduzindo a quantidade de concorrência).</p>
<p>Então, quando alguém disser &ldquo;tenho 10 mil servidores em um único servidor de gerenciamento de configuração&rdquo;, pergunte &ldquo;a que intervalo?&rdquo;.</p>
<p>O Chef escala como uma aplicação web. O próprio servidor é bastante leve e é responsável por autenticar clientes, transferir arquivos, armazenar o estado dos nós e fornecer uma interface de busca. Ele escala horizontalmente adicionando novos Servidores Chef conforme necessário. A API é RESTful e não há estado de sessão entre os clientes e o servidor (pelo menos não no Chef 0.8+). Quando você encontra problemas de escalabilidade com o Chef, as ferramentas que você aplica são as mesmas que você aplica a qualquer aplicação web bem projetada.</p>
<p>Você perguntou especificamente sobre utilização de memória — o Chef se sai muito bem nesse aspecto. Os processos de servidor individuais geralmente têm entre 14-50MB residente. O próprio cliente, rodando em modo daemon, geralmente fica em torno de 28MB residente.</p>
<p>Em nossos testes, o gargalo atual em um servidor Chef é CPU. O Chef é inteligente sobre como lida com transferências de arquivos — transferimos apenas arquivos que mudaram no servidor. Para suportar isso, calculamos um checksum para cada arquivo solicitado e atualmente não armazenamos os resultados em cache. Planejamos corrigir isso para o próximo lançamento principal do Chef (0.8.0), o que deve mudar o gargalo para a RAM.</p>
<p>Com o Chef 0.7, você deve ser capaz de suportar milhares de clientes a um intervalo de meia hora e splay de quinze minutos em hardware commodity razoável. As mudanças no Chef 0.8 devem elevar esse número dramaticamente — voltarei com alguns benchmarks assim que os patches estiverem prontos. :)</p>
<p><strong>AkitaOnRails:</strong> Provavelmente relacionado à pergunta anterior: parece que especialmente após a Sarbanes-Oxley houve um interesse crescente em coisas como ITIL e CoBit. Você já viu implementações bem-sucedidas desses em infraestrutura no estilo Web? Quero dizer, posso vê-los funcionando em Bancos, Aeroespacial e Defesa, etc., mas não consigo ver funcionando conforme anunciado em um ambiente muito dinâmico como hospedagem de serviços Web. Quais são suas experiências com essa questão?</p>
<p><strong>Opscode:</strong> Bem, acho que você pode pensar em ITIL da mesma forma que pensa no modelo clássico &lsquo;Waterfall&rsquo; de desenvolvimento de software. Para alguns tipos de projetos e empresas, é essencial — é difícil imaginar trabalhar de outra forma. Na maioria das vezes, são empresas com grandes preocupações de fabricação ou controle de qualidade — saúde médica, aeroespacial, bancário e financeiro, etc.</p>
<p>O mesmo se aplica ao ITIL — quanto maior a organização, mais rigorosos os requisitos e maior o prazo de entrega, mais os processos que descrevem começam a fazer sentido. Como todos os grandes processos, porém, tendem a diminuir o elemento humano — as pessoas têm papéis a desempenhar e formulários a preencher. :)</p>
<p>Na cultura de Web Ops, as coisas são diferentes. Nunca vi um casamento bem-sucedido entre ITIL e Web Ops, e a razão é que os domínios são muito diferentes. Se há um bug no site, é melhor enviar a correção agora do que esperar por um processo de gestão de lançamento para garantir que o site não terá mais problemas com base na sua correção, por exemplo. Também é um ajuste cultural ruim — nas melhores equipes de Web Ops, o foco é intenso em comunicação, agilidade e respeito, em vez de processo, formalismo e ferramentas. A mudança que você começa a ver nas grandes empresas de Web Ops é que seu pessoal de operações se torna habilitador da organização, em vez de bloqueadores de linha final de mudanças (para manter a estabilidade alta).</p>
<p>Em geral, acho que os 4 passos descritos no visible ops para gestão de emergências não são ruins, mas o diabo está sempre nos detalhes. A pessoa que você deveria realmente perguntar sobre isso é Jesse — ele é em grande parte responsável pela cultura operacional da Amazon e sabe o que significa começar a hackear esse tipo de coisa de dentro de grandes organizações.</p>
<p><strong>AkitaOnRails:</strong> Incrível, acho que é isso. Muito obrigado por esta entrevista!</p>
]]></content:encoded><category>entrevistas</category><category>devops</category><category>automacao</category></item><item><title>Conversando com Luke Kanies</title><link>https://akitaonrails.github.io/2009/11/18/conversando-com-luke-kanies/</link><guid isPermaLink="true">https://akitaonrails.github.io/2009/11/18/conversando-com-luke-kanies/</guid><pubDate>Wed, 18 Nov 2009 11:45:00 -0200</pubDate><description>&lt;p&gt;Gerenciamento de Configuração é um assunto complicado. Para quem não está familiarizado: quando você é um desenvolvedor com poucos servidores para cuidar, geralmente dá para se virar gerenciando-os manualmente. As pessoas provavelmente estão acostumadas a colocar um CD, dar duplo clique no programa &amp;ldquo;instalar&amp;rdquo; e clicar &amp;ldquo;avançar&amp;rdquo;, &amp;ldquo;avançar&amp;rdquo; até o fim, depois entrar manualmente para fazer backup (quando se lembra), e às vezes até aplicar atualizações de segurança quando se lembra delas.&lt;/p&gt;</description><content:encoded><![CDATA[<p>Gerenciamento de Configuração é um assunto complicado. Para quem não está familiarizado: quando você é um desenvolvedor com poucos servidores para cuidar, geralmente dá para se virar gerenciando-os manualmente. As pessoas provavelmente estão acostumadas a colocar um CD, dar duplo clique no programa &ldquo;instalar&rdquo; e clicar &ldquo;avançar&rdquo;, &ldquo;avançar&rdquo; até o fim, depois entrar manualmente para fazer backup (quando se lembra), e às vezes até aplicar atualizações de segurança quando se lembra delas.</p>
<p>Mas quando você tem mais de uma dúzia de máquinas, as coisas começam a ficar feias. Você acaba cometendo mais erros, esquecendo etapas importantes, e de repente gerenciar máquinas vira um pesadelo. Você acaba sendo acordado no meio da noite porque esqueceu de instalar algum componente crucial, e por aí vai.</p>
<p><img src="http://s3.amazonaws.com/akitaonrails/assets/2009/11/18/pic2_original.jpg" alt=""  loading="lazy" /></p>
<p>Da mesma forma que você precisa de testes e ferramentas de integração contínua como desenvolvedor, você também precisa de ferramentas automatizadas, confiáveis e flexíveis para o papel de administrador de sistemas. É aí que ferramentas como o <strong>Puppet</strong> entram para ajudar.</p>
<p>Desta vez entrevistei <a href="http://twitter.com/puppetmasterd"target="_blank" rel="noopener">Luke Kanies</a>, do <a href="http://reductivelabs.com/"target="_blank" rel="noopener">Reductive Labs</a>, ex-contribuidor da famosa ferramenta CFEngine e criador do <a href="http://github.com/reductivelabs/puppet"target="_blank" rel="noopener">Puppet</a>, uma das ferramentas de gerenciamento de configuração mais aclamadas para datacenters do século XXI.</p>
<p><strong>AkitaOnRails:</strong> Para começar esta entrevista, seria ótimo ter mais informações de background sobre você. Como você chegou ao campo de gerenciamento de configuração? Entendo que você tem uma longa história com o desenvolvimento do CFEngine, certo?</p>
<p><img src="http://s3.amazonaws.com/akitaonrails/assets/2009/11/18/luke_kanies_portrait_original.jpg" alt=""  loading="lazy" /></p>
<p><strong>Luke:</strong> Fui administrador Unix desde 1997, sempre escrevendo scripts e ferramentas para economizar tempo, e por volta de 2001 percebi que não deveria precisar escrever tudo sozinho — que alguém em algum lugar deveria ser capaz de me poupar tempo. Após muita pesquisa e experimentação, me fixei no Cfengine e tive sucesso suficiente com ele para começar a fazer consultoria, publicar e contribuir para o projeto.</p>
<p><strong>AkitaOnRails:</strong> Qual é a história por trás do Reductive Labs, qual é sua missão e qual é a história da criação do Puppet?</p>
<p><strong>Luke:</strong> Depois de alguns anos com o Cfengine, tinha muito mais insight, mas estava frustrado porque ainda parecia difícil demais — ninguém estava compartilhando código Cfengine e havia alguns problemas que exigiam muito trabalho para resolver. O maior problema, porém, era que seu desenvolvimento era muito fechado — era difícil contribuir com muito mais do que apenas correções de bugs.</p>
<p>Fiquei frustrado o suficiente para parar de fazer consultoria e procurar outras opções. Trabalhei brevemente no BladeLogic, uma empresa de software comercial nesse espaço, mas no final decidi que o insight que tinha e a falta de uma ótima solução eram um bom começo para um negócio — então decidi transformar minha empresa de consultoria em uma empresa de software e escrever uma nova ferramenta.</p>
<p><strong>AkitaOnRails:</strong> Gostaria de dizer que apenas sysadmins amadores fazem tudo manualmente, mas acho que a maioria das corporações pequenas e médias ainda faz tudo manualmente ou com scripts aleatórios espalhados por todo lugar. A noção de &ldquo;gerenciamento de configuração&rdquo; ainda é nova para muita gente. Você poderia explicar brevemente o que é e por que é importante?</p>
<p><strong>Luke:</strong> É surpreendentemente difícil descrever de forma concisa, mas para mim há duas regras principais: você não deveria precisar se conectar diretamente a uma máquina para alterar sua configuração, e deveria ser capaz de reimplantar qualquer máquina na sua rede muito rapidamente.</p>
<p>Essas duas regras combinadas exigem automação e/ou centralização abrangente de tudo que é necessário para fazer uma máquina funcionar. Irritantemente, elas também introduzem imediatamente ciclos de dependência, porque o seu servidor de automação precisa ser capaz de se construir, o que sempre é um pequeno desafio.</p>
<p><strong>AkitaOnRails:</strong> Acho que um dos sistemas mais amplamente utilizados é o CFEngine2. Como o Puppet se compara a ele? Ou seja, qual o valor agregado ao migrar para o Puppet e quais são as ressalvas conhecidas?</p>
<p><strong>Luke:</strong> Há várias diferenças funcionais importantes. A maior é a <strong>Resource Abstraction Layer</strong> do Puppet, que permite que os usuários do Puppet evitem muitos detalhes com os quais não se preocupam realmente, como como rpm, adduser ou init scripts funcionam — eles falam sobre usuários, grupos e pacotes, e o Puppet descobre os detalhes.</p>
<p>Também temos suporte explícito a dependências, o que faz uma enorme diferença — é fácil ordenar recursos relacionados e reiniciar serviços quando seus arquivos de configuração mudam, por exemplo.</p>
<p>A linguagem também é um pouco mais poderosa. Como o Cfengine, temos uma linguagem customizada simples, mas a linguagem do Puppet fornece melhor suporte para heterogeneidade, além de uma construção de recurso composto que permite criar facilmente tipos de recursos em linguagem como virtual hosts Apache que modelam recursos mais complexos compostos por múltiplos recursos simples.</p>
<p><strong>AkitaOnRails:</strong> O Puppet tem muitos componentes. Você pode descrever brevemente alguns dos principais que trabalham juntos? O lado do cliente, o lado do servidor, as recipes?</p>
<p><strong>Luke:</strong> A maioria das pessoas usa o Puppet no modo cliente/servidor, onde o servidor central é a única máquina que tem acesso a todo o código, e ele executa um processo capaz de compilar esse código em configurações específicas para cada host. Então cada máquina executa um cliente (incluindo o servidor), que recupera e aplica essa configuração específica do host. Isso tem boas implicações de segurança porque você não enviou seu código para cada máquina na rede.</p>
<p>Se esse modelo não funcionar para você, também é fácil executar o Puppet de forma standalone, onde cada máquina tem todo o código e o compila separadamente. Vários usuários do Puppet fazem isso por várias razões. Esse executável &lsquo;puppet&rsquo; standalone é um interpretador padrão — pode ser usado para executar scripts de 1 linha ou milhares de linhas em uma configuração completa.</p>
<p>Além disso, temos alguns outros executáveis interessantes, como para acessar nossa funcionalidade de autoridade de certificação, e um executável interessante chamado &lsquo;ralsh&rsquo; que fornece uma forma simples de gerenciar recursos diretamente do shell Unix, sem precisar escrever um script separado.</p>
<p><strong>AkitaOnRails:</strong> O que você diria sobre a maturidade do Puppet? O CFEngine tem mais de uma década de uso, o que é difícil de superar. Você diria que é &ldquo;maduro o suficiente&rdquo;? Ou seja, já está em produção em empresas de muitos tamanhos, suas APIs não mudam muito e minhas recipes provavelmente funcionarão se eu atualizar para uma versão mais nova do Puppet? Acho que a versão 0.x deixa algumas pessoas nervosas :-)</p>
<p><strong>Luke:</strong> Na verdade deveríamos ter chamado uma versão de 2007 de 1.0, mas é difícil saber o quão estável um lançamento será até que ele esteja disponível há algum tempo. :)</p>
<p>É obviamente difícil competir com a longa vida do Cfengine, embora eles estejam de certa forma migrando forçosamente para o Cfengine 3, que é uma reescrita completa, então essa maturidade não vale tanto assim agora.</p>
<p>No entanto, o Puppet está em uso em produção ao redor do mundo desde 2006 e atualmente é usado por mais grandes empresas do que eu poderia razoavelmente nomear — Twitter, Digg, Google, Sun, Red Hat e muitas outras — e nossa comunidade e base de clientes o consideram maduro. A virada aconteceu em algum momento no início do ano passado, quando descobri que a grande maioria dos problemas das pessoas eram problemas do lado deles, em vez de alguma falha ou limitação no Puppet.</p>
<p>Em geral as APIs são bastante estáveis e acho que nos saímos muito bem em manter a compatibilidade retroativa quando as APIs precisaram mudar. O ponto sobre estabilidade de API em um lançamento 1.0 não é tanto diferenciá-lo de esforços anteriores quanto fazer uma promessa para o futuro. Isso importa especialmente para empresas como a Canonical, que querem um lançamento que possam suportar no Ubuntu por cinco anos.</p>
<p><strong>AkitaOnRails:</strong> O Puppet tem sua própria linguagem e você pode usar Ruby para os casos avançados. Provavelmente é perfeito para Rubistas, mas sinto que a maioria dos sysadmins está acostumada com Bash, Python e não é muito flexível a mudanças. Por que você escolheu usar Ruby em vez de uma linguagem mais difundida? O que os sysadmins precisam perceber para mudar de paradigmas?</p>
<p><strong>Luke:</strong> Parte disso é que a maioria das pessoas não precisa realmente saber nada de Ruby para ser eficaz com o Puppet. Claro, você pode ter mais poder se souber, mas se você não é uma pessoa de linguagens, funciona perfeitamente com apenas Puppet.</p>
<p>Outra coisa boa é que temos uma escala bastante suave em termos de conhecimento de Ruby — você pode começar escrevendo templates ERB ou extensões de cinco linhas para o <a href="http://github.com/reductivelabs/facter"target="_blank" rel="noopener">Facter</a>, que é nosso sistema de consulta do lado do cliente, e crescer suavemente até escrever tipos de recursos customizados.</p>
<p>No fim das contas, escolhi Ruby porque era mais produtivo nele. Provavelmente deveria ter escolhido Python, dado seu benefício de velocidade e popularidade no Red Hat e outros lugares, mas descobri que simplesmente não conseguia escrever código nele. Comecei a pensar em Ruby depois de apenas algumas horas de uso, então era impossível para mim me afastar dele.</p>
<p><strong>AkitaOnRails:</strong> Sysadmins acostumados ao CFEngine reclamam das dependências do Ruby e do peso geral. Porque para o Puppet rodar você precisa do Ruby instalado. Nem todas as distros têm Ruby na mesma versão (embora a maioria já tenha migrado para 1.8.7). Depois há o problema do peso. O Puppet pode chegar a centenas de megabytes. O que não querem é ter clusters de máquinas Puppet (que, por si só, também precisam de manutenção, adicionando à complexidade geral). Como você lida com datacenters com milhares de servidores? Sei que é difícil medir com precisão, mas qual seria uma proporção razoável entre servidores Puppet x servidores gerenciados?</p>
<p><strong>Luke:</strong> É tão impossível te dizer quantos clientes um servidor Puppet pode atender quanto é te dizer quantos clientes um servidor Rails pode atender — tudo depende da complexidade das tarefas. O Google escalou para 4500 máquinas clientes em um único servidor, mas a maioria das pessoas tende a adicionar outro servidor em torno de 500-1000 clientes.</p>
<p>É verdade que é difícil manter o uso de memória baixo em um processo Ruby, mas fizemos grandes avanços nos nossos lançamentos recentes fazendo coisas como deduplicar strings em memória e ser mais eficiente em nossos code paths. Mas na verdade gastamos muito mais tempo em features e correções de bugs e menos tempo em otimização — até recentemente éramos uma equipe de desenvolvimento pequena e simplesmente não tínhamos largura de banda para isso.</p>
<p>Agora que minha empresa, Reductive Labs, tem algum investimento, conseguimos adicionar três desenvolvedores em tempo integral, o que vai ajudar muito nessa área.</p>
<p>Quanto a dependências, essa é uma área onde nos afastamos fortemente da comunidade Ruby — não exigimos uma única gem, a não ser nossa própria ferramenta Facter (e normalmente não é enviada como gem). Os Rubistas tendem a não se preocupar muito com dependências de pacotes — eles simplesmente colocam no vendor, como gosto de dizer — mas isso não funciona quando você tem que implantar milhares de cópias. Então sim, você pode ter que instalar Ruby, mas não haverá outras dependências com as quais você tenha que lidar, o que simplifica muito.</p>
<p>Geralmente é tão difícil saber como você precisará dimensionar seu puppetmaster quanto seria dimensionar um servidor web — depende de quão complicada é a carga de trabalho. Em geral, em algum ponto entre 500 e 5000 clientes, você precisará de um segundo servidor, mas a maioria das pessoas provavelmente encontra isso mais perto de 500. Mas, se você tem 3000 clientes acessando um serviço, provavelmente quer torná-lo horizontalmente escalável para estabilidade além de performance.</p>
<p><strong>AkitaOnRails:</strong> Segurança é uma grande preocupação hoje em dia. O Puppet se preocupou desde o início com o procedimento de handshake entre clientes e servidor. Você pode descrevê-lo um pouco? Também existe alguma recipe embutida para hardening de máquinas, por exemplo? Ou pelo menos algum desejo de adicionar tais ferramentas no futuro?</p>
<p><strong>Luke:</strong> O Puppet usa certificados SSL padrão para autenticação e criptografia, incluindo uma fase de assinatura de certificados. Por padrão, o cliente gera uma chave e uma requisição de certificado (CSR) e depois envia o CSR para seu servidor. Esse envio, junto com o download posterior do certificado, são as únicas conexões não autenticadas permitidas por padrão.</p>
<p>A partir daí, um humano normalmente precisa acionar a assinatura do certificado do cliente, mas muitas organizações, incluindo o Google, assinam automaticamente os certificados dos clientes porque confiam em sua rede interna.</p>
<p>Quanto ao hardening automático, não há recipes que eu saiba agora, mas é algo que definitivamente me interessa. Anos atrás era grande fã do TITAN, que é um pacote de hardening para várias plataformas *NIX, e foi parte da inspiração para escrever o Puppet — sempre quis uma política de segurança portável e executável.</p>
<p><strong>AkitaOnRails:</strong> O puppetmaster usa Webrick por padrão, mas a documentação também descreve o uso do Mongrel ou Passenger. Há ganhos reais em usá-los? É mais para conveniência ou temos melhorias de performance/robustez?</p>
<p><strong>Luke:</strong> Nossa, o Webrick é lento. É realmente fantástico para provas de conceito — sobe e roda em minutos. Uma vez que você passa dessa prova de conceito, porém, você realmente precisa mudar para Mongrel ou Passenger. Se você tiver mais de uma conexão concorrente no Webrick, seus clientes começam a sofrer, mas você pode escalar para muito mais com as outras soluções disponíveis.</p>
<p><strong>AkitaOnRails:</strong> Há algum caso de clientes sobre o qual você pode falar? Ou seja, mais detalhes sobre o tipo de infraestrutura, dificuldades, ressalvas, boas práticas?</p>
<p><strong>Luke:</strong> As possibilidades aqui são bastante abertas. O Google usa o Puppet para manter seu TI corporativo, o que significa que o estão executando em milhares de laptops e desktops — o que é bem diferente. A MessageOne, uma divisão da Dell, é realmente interessante porque seus desenvolvedores têm que enviar código Puppet para gerenciar as aplicações que enviam, então se um app não está aparando seus logs ou fazendo backup de si mesmo, é um bug que o desenvolvedor do app tem que corrigir em vez do sysadmin. Isso realmente ajuda a fazer a ponte entre dev e ops, o que funcionou muito bem para eles.</p>
<p>Fora isso, há muitas histórias e boas práticas, mas temo que isso seria um segundo artigo completo. :)</p>
<p><strong>AkitaOnRails:</strong> Já vi Andrew Shafer falar sobre <a href="http://www.slideshare.net/littleidea/agile-infra-agileroots-2009"target="_blank" rel="noopener">Agile Infrastructure</a> por alguns anos, mas ainda acho que a maioria das organizações de TI desconhece esse conceito. Você pode elaborar o que significa ser Ágil fora do campo de desenvolvimento?</p>
<!-- dead Flash embed removed (service offline): flash -->
<p><strong>Luke:</strong> Acho que a Infraestrutura Ágil tem ainda menos adoção do que o Desenvolvimento Ágil. A grande maioria dos departamentos de TI não mudou as práticas significativamente em anos e está amplamente despreparada para o crescimento no número de servidores que estão experimentando. Eles tentam principalmente escalar adicionando mais pessoas, que chamamos de <em>meatcloud</em>, em vez de escalar suas ferramentas e práticas.</p>
<p><strong>AkitaOnRails:</strong> Provavelmente relacionado à pergunta anterior: parece que especialmente após a Sarbanes-Oxley houve um interesse crescente em coisas como ITIL e CoBit. Você já viu implementações bem-sucedidas dessas em infraestrutura no estilo Web? Quero dizer, posso vê-las funcionando em Bancos, Aeroespacial e Defesa, etc., mas não consigo ver funcionando conforme anunciado em um ambiente muito dinâmico como hospedagem de serviços Web. Quais são suas experiências com essa questão?</p>
<p><strong>Luke:</strong> Em geral, acho que esses tipos de políticas de alto nível são ótimas para fins regulatórios, mas não são tão boas para realmente resolver problemas. Quanto maior a empresa e mais pública ela for, mais provável é que se importem com ITIL e similares, mas na minha experiência isso não as ajuda realmente a resolver problemas além do aspecto de relações públicas. Você pode ser compatível com ITIL e disfuncional, ou completamente fora de conformidade, mas em ótima forma. Considerando que os melhores padrões são derivados de implementação e boas práticas — o que poucos desses são —, não tenho muita esperança de que eles sejam adotados pelas melhores equipes por aí.</p>
<p>Minha experiência pessoal é que muito poucas empresas perguntam ou se importam com esses padrões, e as que se importam geralmente o fazem de uma forma de checklist — querem garantir que podem marcar coisas como CMDB, mas não estão realmente preocupadas com os detalhes.</p>
<p><strong>AkitaOnRails:</strong> Acho que é isso! Muito obrigado por esta conversa!</p>
]]></content:encoded><category>entrevistas</category><category>devops</category><category>automacao</category></item><item><title>Conversando com Joshua Peek</title><link>https://akitaonrails.github.io/2008/09/27/conversando-com-joshua-peek/</link><guid isPermaLink="true">https://akitaonrails.github.io/2008/09/27/conversando-com-joshua-peek/</guid><pubDate>Sat, 27 Sep 2008 21:54:00 -0300</pubDate><description>&lt;p&gt;&lt;a href="http://www.locaweb.com.br/railssummit"target="_blank" rel="noopener"&gt;&lt;img src="http://s3.amazonaws.com/akitaonrails/assets/2008/8/1/468x60.gif" alt="" loading="lazy" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Desta vez passei algum tempo com &lt;a href="http://joshpeek.com/"target="_blank" rel="noopener"&gt;&lt;strong&gt;Joshua Peek&lt;/strong&gt;&lt;/a&gt;. Foi &lt;a href="http://weblog.rubyonrails.org/2008/8/16/josh-peek-officially-joins-the-rails-core"target="_blank" rel="noopener"&gt;anunciado&lt;/a&gt; recentemente que ele é o novo membro da Equipe Rails Core.&lt;/p&gt;
&lt;p&gt;Ele conseguiu a honra por causa do seu duro trabalho para o próximo Rails 2.2 resolvendo o problema de &lt;strong&gt;thread-safety&lt;/strong&gt; no Rails. Por causa do seu projeto no Google Summer of Code, guiado por Michael Koziarski, eles foram capazes de tornar o Ruby on Rails verdadeiramente seguro para threads, o que pode ser muito importante para máquinas virtuais com suporte a threads nativas, como o JRuby.&lt;/p&gt;</description><content:encoded><![CDATA[<p><a href="http://www.locaweb.com.br/railssummit"target="_blank" rel="noopener"><img src="http://s3.amazonaws.com/akitaonrails/assets/2008/8/1/468x60.gif" alt=""  loading="lazy" /></a></p>
<p>Desta vez passei algum tempo com <a href="http://joshpeek.com/"target="_blank" rel="noopener"><strong>Joshua Peek</strong></a>. Foi <a href="http://weblog.rubyonrails.org/2008/8/16/josh-peek-officially-joins-the-rails-core"target="_blank" rel="noopener">anunciado</a> recentemente que ele é o novo membro da Equipe Rails Core.</p>
<p>Ele conseguiu a honra por causa do seu duro trabalho para o próximo Rails 2.2 resolvendo o problema de <strong>thread-safety</strong> no Rails. Por causa do seu projeto no Google Summer of Code, guiado por Michael Koziarski, eles foram capazes de tornar o Ruby on Rails verdadeiramente seguro para threads, o que pode ser muito importante para máquinas virtuais com suporte a threads nativas, como o JRuby.</p>
<p>A parte interessante: ele tem apenas 19 anos e 4 anos atrás sequer era programador. Ele começou no Ruby com o <a href="http://pine.fm/LearnToProgram/"target="_blank" rel="noopener">Learn to Program</a> e agora é membro do Rails Core. Vamos conhecê-lo melhor.</p>
<p><strong>AkitaOnRails:</strong> Ok, então vamos começar. Primeiramente, seria legal saber mais sobre você. Por exemplo como encontrou Ruby, porque se enganchou nele.</p>
<p><strong>Josh Peek:</strong> Como muitas pessoas, eu originalmente encontrei Ruby através do Rails. Na época, eu estava apenas fazendo web design como html, css, js. Eu não tinha experiência de programação. Acho que cheguei a comprar um livro de php, mas nunca fui muito adiante. Então ouvi falar sobre esse tal de “Rails” e fui olhar. Eu rapidamente aprendi que precisava aprender como programar e aprender Ruby, então eu peguei os livros <a href="http://pragprog.com/titles/ruby/programming-ruby"target="_blank" rel="noopener">Pickaxe</a> e <a href="http://pragprog.com/titles/rails3/agile-web-development-with-rails-third-edition"target="_blank" rel="noopener">Agile Web Development with Rails</a> e fui dali.</p>
<p><strong>AkitaOnRails:</strong> Isso é interessante, um dos meus objetivos de te entrevistar é porque eu vi que você é bem jovem e existem muitos jovens programadores que acham que aprender Ruby é difícil. E você ainda diz que nunca programou antes de Ruby, então como foi a curva de aprendizado para você?</p>
<p><strong>Josh Peek:</strong> Sim, eu tenho agora <strong>19 anos</strong> e comecie a programar Ruby cerca de 3 anos atrás. Antes de ler o Pickaxe, encontrei este pequeno livro de programação com Ruby do <a href="http://pine.fm/LearnToProgram/"target="_blank" rel="noopener">Chris Pine</a>. Me ajudou muito a entender como programar. A parte mais difícil sobre programação, para mim, foi entender os conceitos de orientação-a-objetos. Realmente é uma coisa que você precisa praticar para realmente entender.</p>
<p><strong>AkitaOnRails:</strong> Oh, esqueci de perguntar, de onde você é? E você é estudante de ciências da computação?</p>
<p><strong>Josh Peek:</strong> Atualmente estou morando em Chicago, Illinois onde eu frequento a faculdade. E sim, estou estudando Ciências da Computação.</p>
<p><strong>AkitaOnRails:</strong> Quando você começou a programar com Rails, o que mais te incomodava, se é que tinha algo?</p>
<p><strong>Josh Peek:</strong> Hmm, não consigo pensar em alguma coisa que me “incomodava”. Nunca foi um problema porque você poderia fazer <a href="http://en.wikipedia.org/wiki/Monkey_patch"target="_blank" rel="noopener">monkey patch</a> ou consertar e liberar para o resto da comunidade Rails.</p>
<p><strong>AkitaOnRails:</strong> Então você começou a trabalhr com Rails como freelancer? Você fez alguma gem ou plugin open source também?</p>
<p><strong>Josh Peek:</strong> Sim, comecei como freelancer. Tecnicamente ainda sou. Eu costumava publicar toneladas de plugins de Rails. Acho que exagerei um pouco no começo. Realmente não tenho mais nenhum deles por aí, mas seria legal dar uma olhada neles de novo para ver quanto minha visão de programação mudou desde então.</p>
<p>Agora mesmo, todos os meus plugins e códigos atuais estão no <a href="http://github.com/josh"target="_blank" rel="noopener">github.com/josh</a>. Eu acabo publicando todo projeto pessoal em que estou trabalhando no Github mesmo que não esteja pronto ou eu ache que será útil.</p>
<p><strong>AkitaOnRails:</strong> Ok, então ao prato principal, Thread-Safety! Você disse que não estava particularmente “incomodado” por nada no Rails, mas decidiu atacar esse desafio mesmo assim, como tudo isso começou?</p>
<p><img src="http://s3.amazonaws.com/akitaonrails/assets/2008/9/26/TwextGoogleSOC2008.png" alt=""  loading="lazy" /></p>
<p><strong>Josh Peek:</strong> Eu realmente queria participar de um projeto no <a href="http://code.google.com/soc/2008/ruby/appinfo.html?csaid=AE462A3EF48107C3"target="_blank" rel="noopener">Google Summer of Code</a> por algum tempo. Entretanto quando fui me inscrever acabei fazendo tudo de última hora, e perguntei pelo Rails Core e algumas idéias apareceram, uma delas foi thread safety.</p>
<p>Eu não estava realmente muito interessado em fazer isso, eu queria mesmo trabalhar no <a href="http://github.com/rails/rails/tree/master/activemodel/README"target="_blank" rel="noopener">ActiveModel</a> como meu projeto. Entretanto o projeto de thread safe foi o único que foi aceito, então fiquei preso nele. Antes de começar o projeto, eu não tinha experiência alguma com threads.</p>
<p>Eu não sabia sequer o que era um mutex, mas eu aceitei isso como uma boa experiência de aprendizado.</p>
<p><strong>AkitaOnRails:</strong> Talvez fosse interessante se você desse um resumo de como o Google Summer of Code funciona. Quero dizer, quais os objetivos, como participar, quão difícil é. Alguns brasileiros provavelmente não estão familiarizados com isso.</p>
<p><strong>Josh Peek:</strong> Google Summer of Code é um programa controlado pelo Google que patrocina estudantes para trabalhar em projetos open source. Os estudantes criam propostas de projetos para a organização com quem querem trabalhar, no meu caso foi a Ruby Central, e eles aprovam ou não o projeto.</p>
<p>Você também trabalhar com um mentor da organização. Michael Koziarski (Rails Core) originalmente sugeriu que eu fizesse o projeto e então “demos um jeito” para trabalharmos juntos.</p>
<p>Ao fim do programa, você envia seu código e se você completou o projeto então recebe USD 5.000. E eu acho que USD 500 vai para a organização open source.</p>
<p><strong>AkitaOnRails:</strong> E você completou o projeto?</p>
<p><strong>Josh Peek:</strong> Sim.</p>
<p><strong>AkitaOnRails:</strong> Legal, e quanto tempo durou o programa?</p>
<p><strong>Josh Peek:</strong> Acho que cerca de 3 meses.</p>
<p><strong>AkitaOnRails:</strong> Ok, de volta à parte mais técnica. Tem uma coisa que me perturba um pouquinho. Claro que é um grande trabalho tornar o Rails thread-safe e isso é uma coisa que muitas pessoas já queriam. Mas por outro lado, o Ruby MRI não tem threads nativas, o que essencialmente significa que eles nunca são executados de forma verdadeiramente concorrente, correto? Talvez outros projetos como JRuby podem se beneficiar? Existe algum benefício para o MRI?</p>
<p><strong>Josh Peek:</strong> Correto. JRuby é a única solução de verdade se você quiser concorrência real de threads. Ruby 1.9 suporta threads “reais”, entretanto a maior parte do código interno em C não é thread-safe então existe uma interrupção ao redor desses métodos, mas estou esperançoso que talvez o Ruby 2.0 seja totalmente thread-safe.</p>
<p><strong>AkitaOnRails:</strong> Você provavelmente rodou testes para ambos o MRI e JRuby? Notou melhorias de performance/responsividade por causa do novo código thread-safe? Ou ele acaba adicionando um peso extra em vez disso?</p>
<p><strong>Josh Peek:</strong> Nossos testes mostraram melhorias pequenas no MRI, entretanto a aplicação que estávamos testando era muito simples. Não tínhamos uma aplicação real que pudéssemos usar para benchmark já que nada era thread-safe na época. JRuby demonstrou algumas boas melhorias, novamente, não era uma aplicação de uso real.</p>
<p><strong>AkitaOnRails:</strong> Você mirou apenas para as partes thread-safe ou também encontrou e consertou outros tipos de gargalo no framework? Você provavelmente andou pelo código todo várias e várias vezes e já conhece de cabeça para baixo, certo?</p>
<p><strong>Josh Peek:</strong> Eu fiz vários trabalhos em pré-carga de caches no momento do boot. O jeito fácil de sair disso seria simplesmente colocar um mutex ao redor desses caches e pronto, entretanto eu tinha tempo sobrando então re-escrevi uma tonelada de código de ActionView.</p>
<p>Pré-carga significa que estamos construindo o cache no boot de forma que ele não precise ser modificado (ou sincronizado) enquanto estiver servindo requisições e isso deve beneficiar aplicação que não usam threads também.</p>
<p>E é uma grande vantagem para o Passenger, se você estiver usando a funcionalidade de copy-on-write, já que caches construídos no boot do Rails serão compartilhados entre múltiplos processos.</p>
<p><strong>AkitaOnRails:</strong> Muito legal, o pessoal da <a href="http://www.modrails.com/"target="_blank" rel="noopener">Phusion</a> vai gostar de ouvir isso. E eu sei que algumas pessoas ficarão perdidas ouvindo sobre <a href="http://en.wikipedia.org/wiki/Mutual_exclusion"target="_blank" rel="noopener">mutexes</a>, poderia explicar um pouco disso para o público?</p>
<p><strong>Josh Peek:</strong> O maior problema de múltiplos threads rodando ao mesmo tempo é a memória compartilhada. Se duas threads tentarem acessar e modificar o mesmo objeto, isso pode causar grandes problemas. Um “mutex” é um tipo de trava que “sincroniza” suas threads de forma que apenas uma thread possa acessar um pedaço da memória de cada vez.</p>
<p>Entretanto, isso tem um impacto de performance porque outras threads precisam parar enquanto uma está acessando a memória compartilhada.</p>
<p><strong>AkitaOnRails:</strong> Eu acho que esse é um trabalho incrível, especialmente para o JRuby. Você chegou a conversar com o Charles, Nick ou alguém do JRuby Core? Eu lembro de ter entrevistado o Charles e ele me disse que embora eles estejam avançando muito na otimização do runtime JRuby, a performance de aplicações Rails não estava melhorando tanto, então o próximo passo seria tentar descobrir como modificar o próprio Rails para se comportar melhor. Você ouviu alguma coisa a respeito?</p>
<p><strong>Josh Peek:</strong> Sim, nós trabalhamos com o Charles em otimizações específicas de JRuby. Ele foi uma grande ajuda e respondeu todas as minhas questões relacionadas a como o JRuby sincroniza threads e quais operações são atômicas.</p>
<p><a href="http://blog.nicksieger.com/"target="_blank" rel="noopener">Nick Sieger</a> realmente se voluntariou (antes do GSoC) para lidar com o <a href="http://ryandaigle.com/articles/2008/9/7/what-s-new-in-edge-rails-connection-pools"target="_blank" rel="noopener">pool de conexões</a> do ActiveRecord. Realmente um grande obrigado ao Nick, eu realmente não tenho experiência em lidar com esse problema e ele fez um grande trabalho com isso.</p>
<p><strong>AkitaOnRails:</strong> Ok, embora o Ruby VM não tenha threads concorrentes verdadeiras, ele tem que lidar com recursos concorrentes, nesse caso conexões de banco de dados, então um pool foi necessário. Foi um problema grande de implementar? Foi alguma coisa que você teve que fazer do zero ou havia trabalho anterior com pools de conexão para Ruby?</p>
<p><strong>Josh Peek:</strong> Bem, eu acho melhor perguntar isso ao Nick. Mas aqui vai o que entendo sobre isso: a implementação anterior de conexões do ActiveRecord suportava threadas, entretanto era fácil maximizar o número permitido de conexões ao banco se o servidor fosse sobrecarregado.</p>
<p>O pool de conexões basicamente recicla conexões antigas e previne o ActiveRecord de estabelecer muitas. Você pode configurar o máximo de conexões no seu database.yml com a opção “pool”. Ach que o padrão são 3.</p>
<p><strong>AkitaOnRails:</strong> E como o papel de mentor funciona? Quero dizer, o <a href="http://www.koziarski.com/"target="_blank" rel="noopener">Koziarski</a> te guiou em pontos específicos que ele queria que você olhasse?</p>
<p><img src="http://s3.amazonaws.com/akitaonrails/assets/2008/9/26/506281043_419fd4e72d.jpg" alt=""  loading="lazy" /></p>
<p><strong>Josh Peek:</strong> O Koz realmente me ajudou a me manter na linha. Ele fez muita auditoria de código, e apontou locais específicos que eu deveria olhar por problemas na grande base de códigos do Rails.</p>
<p><strong>AkitaOnRails:</strong> Olhando de fora provavelmente deve parecer ‘fácil’ dizer <em>‘ok, nós adicionamos suporte thread-safe no Rails’</em>, mas isso não é como uma gem ou plugin externo, você realmente precisa lidar com as entranhas do framework. Como você pode ter certeza que realmente tocou em todas as partes do código que precisavam de medidas de segurança para concorrência?</p>
<p><strong>Josh Peek:</strong> Isso é realmente a parte difícil de tornar o código ‘thread safe’: não existe maneira de saber com certeza. Você pode escrever um monte de testes unitários e dizer <em>‘olhe, eu posso provar que está tudo certo’</em>. Entretanto, os maiores problemas não estão visíveis. De agora em diante, decidimos classificar qualquer novo problema com thread safe como bugs normais.</p>
<p><strong>AkitaOnRails:</strong> Você acha que isso já está pronto para lançamento? Ou ainda pretende refinar mais?</p>
<p><strong>Josh Peek:</strong> Acho que já está pronto para as pessoas que estavam esperando por um Rails thread-safe. As pessoas precisam começar a auditar e testar suas próprias aplicações para problemas thread-safe e se alguma coisa aparecer, nós vamos corrigir no Core. É realmente difícil testar as coisas a menos que pessoas reais comecem a testar contra aplicações reais.</p>
<p><strong>AkitaOnRails:</strong> Pelo menos dizer <em>“Rails não é thread-safe”</em> já não é mais um argumento bom o bastante para não se usar Rails. Isso deve calar os críticos. Esse Rails 2.2 será interessante, derrubando algumas críticas. A outra é <em>“Rails não suporta internacionalização”</em>, graças a <a href="http://www.artweb-design.de/2008/9/6/the-future-of-i18n-in-ruby-on-rails-railsconf-europe-2008"target="_blank" rel="noopener">Sven</a>. O que você gosta mais na próxima versão do Rails?</p>
<p><strong>Josh Peek:</strong> Meu próximo pequeno projeto no Rails é mudar para usar <a href="http://rack.rubyforge.org/"target="_blank" rel="noopener">Rack</a>. O Rails 2.2 incluirá um processador Rack que o deixa usar qualquer servidor Rack, entretanto ainda não estamos mudando totalmente para Rack. No 2.2 o Rack será opcional.</p>
<p>O ./script/server ainda rodará o antigo processador CGI. Espero ver CGI deprecado na próxima versão para que possamos ter o Rack somente lá pelo 3.0.</p>
<p><strong>AkitaOnRails:</strong> Quais os benefícios de ir para Rack? Pode não ser muito óbvio para muitas pessoas sobre porque mudar código que já está funcionando (a parte CGI).</p>
<p><strong>Josh Peek:</strong> Deve haver alguns benefícios de performance, entretanto isso não seria suficiente para convencer. Agora mesmo temos toneladas de hacks de CGI no Rails. Isso deve limpar as coisas um pouco.</p>
<p>O que eu realmente gosto é a interface padronizada para Rails. Isso significa uma API mais universal para escrever plugins relacionados a ActionController que funcionarão com qualquer framework compatível com Rack. Eu espero que isso significa mais plugins Rails que funcionarão com Merb e vice-versa.</p>
<p><strong>AkitaOnRails:</strong> Tendo terminado seu projeto GSoC lhe deu as chaves para o repositório oficial do Rails, correto? Como o Rails Core se organiza? Cada pessoa é responsável por alguma parte em particular, ou todos olham um pouco de tudo?</p>
<p><strong>Josh Peek:</strong> Parece que cada um tem suas pequenas responsabilidades dependendo no que estavam trabalhando. Já que eu reescrevi uma tonelada do ActionView, devo assumir qualquer problema ou tickets relacionados com isso. Não acho que qualquer um tenha uma área pré-determinada. As pessoas mudam seus interesses o que está bem.</p>
<p><strong>AkitaOnRails:</strong> Mas agora você pode dar ‘git push’ em qualquer coisa no Edge? E aliás, você mencionou que mexeu bastante no ActionView, mas o que exatamente mudou?</p>
<p><strong>Josh Peek:</strong> Sim, eu já tinha acesso de commit um pouco antes do projeto GSoC (pouco antes de mudarmos para git). O ActionView foi refatorado para suportar o esquema de pré-carga que falei antes. Então templates ERB são pré-compilados e colocados em cache no boot em vez de em tempo de execução.</p>
<p><strong>AkitaOnRails:</strong> Então, em 3 anos você foi do zero para o Rails Core, realmente o “problema de thread-safety” e ainda conseguindo tempo para estudar e trabalhar em projetos como freelance. Como se sente, olhando em retrospectiva? Alguma vez pensou que fosse contribuir tanto?</p>
<p><strong>Josh Peek:</strong> 4 anos atrás, eu realmente nunca me vi programando. Eu definitivamente nunca pensei que acabaria no Core Team do Rails.</p>
<p><strong>AkitaOnRails:</strong> Depois de tanto que aprendeu, quais as áreas em computação que te interessam mais? Desenvolvimento web, ou outra área como compiladores, sistemas operacionais, etc? O que pretende fazer agora?</p>
<p><strong>Josh Peek:</strong> Eu ainda adoro desenvolvimento web. Eu recentemente tentei programação de iPhone, mas ainda não sei como me sinto sobre isso.</p>
<p>Eu gostaria de tentar coisas de mais baixo nível. Eu ainda não tive a chance de usar a API C do Ruby e ouvi dizer que é legal. Ultimamente tenho feito muito trabalho em um projeto javascript que será anunciado em breve e será open source.</p>
<p><strong>AkitaOnRails:</strong> Oh, e falando nisso, você também é usuário de Mac? :-) E eu acho que é isso! Alguma consideração sobre o que falamos?</p>
<p><strong>Josh Peek:</strong> Sim, tenho usado Macs por cerca de 6 anos já. Não sou um desses que mudou depois de descobrir Ruby :-)</p>
<p>E acho que é isso … eu fui puxado para falar no RubyConf este ano, pela coisa do GSoC. Então vocês provavelmente vão ouvir sobre “thread safety” por lá. Provavelmente é a última vez que vou falar sobre Rails e threads de novo.</p>
<p>Obrigado pelas questões.</p>
]]></content:encoded><category>entrevistas</category><category>rails</category><category>performance</category></item><item><title>Conversando com Luis Lavena (Ruby no Windows)</title><link>https://akitaonrails.github.io/2008/07/02/conversando-com-luis-lavena-ruby-on-windows/</link><guid isPermaLink="true">https://akitaonrails.github.io/2008/07/02/conversando-com-luis-lavena-ruby-on-windows/</guid><pubDate>Wed, 02 Jul 2008 14:16:00 -0300</pubDate><description>&lt;p&gt;Desta vez entrevistei &lt;a href="http://blog.mmediasys.com/"target="_blank" rel="noopener"&gt;&lt;strong&gt;Luis Lavena&lt;/strong&gt;&lt;/a&gt;. Se você é um desenvolvedor Ruby trabalhando no Windows, deve muito a ele! Afinal, ele é o mantenedor do &lt;a href="http://github.com/luislavena/rubyinstaller/tree"target="_blank" rel="noopener"&gt;One-Click Ruby Installer&lt;/a&gt;, a principal distribuição de Ruby para Windows. É muito trabalho manter uma distribuição dessas e Luis explica todos os obstáculos necessários para isso. A mensagem principal: precisamos de mais colaboradores! Qualquer um pode reclamar, mas poucos descem do pedestal e colocam a mão na massa.&lt;/p&gt;</description><content:encoded><![CDATA[<p>Desta vez entrevistei <a href="http://blog.mmediasys.com/"target="_blank" rel="noopener"><strong>Luis Lavena</strong></a>. Se você é um desenvolvedor Ruby trabalhando no Windows, deve muito a ele! Afinal, ele é o mantenedor do <a href="http://github.com/luislavena/rubyinstaller/tree"target="_blank" rel="noopener">One-Click Ruby Installer</a>, a principal distribuição de Ruby para Windows. É muito trabalho manter uma distribuição dessas e Luis explica todos os obstáculos necessários para isso. A mensagem principal: precisamos de mais colaboradores! Qualquer um pode reclamar, mas poucos descem do pedestal e colocam a mão na massa.</p>
<p><a href="http://www.flickr.com/photos/diegal/325572435/"target="_blank" rel="noopener"><img src="http://s3.amazonaws.com/akitaonrails/assets/2008/7/2/325572435_f1f1382372.jpg" alt=""  loading="lazy" /></a></p>
<p><strong>AkitaOnRails:</strong> Ok. Vamos começar. Primeiramente, obrigado pelo seu tempo. É curioso porque temos como 5 horas de diferença. Você está em Paris agora, mas entendo que é da Argentina. Pode nos contar o que está fazendo atualmente?</p>
<p><strong>Luis Lavena:</strong> Sim, curioso mesmo. Agora sou Diretor Técnico de uma agência de design e interação com escritórios em NY e Paris. Meu trabalho é fazer a ponte entre o campo de design e o tecnológico, principalmente no desenvolvimento de aplicações web.</p>
<p>Sou da Argentina, moro lá, família e amigos. Agora me mudei por alguns meses para impulsionar alguns desenvolvimentos e dar os primeiros passos na nova organização.</p>
<p>Sou de uma pequena província chamada Tucumán, na área noroeste da Argentina (1200 km de Buenos Aires, para ser exato).</p>
<p><strong>AkitaOnRails:</strong> Incrível. Você já foi ao Brasil? Tem contato com outros Railers da América Latina?</p>
<p><strong>Luis Lavena:</strong> Apesar de o Brasil ser tão perto da Argentina, nunca fui lá, o que é uma pena. Tenho vários amigos que moraram lá ao longo dos anos.</p>
<p>Mantenho contato com vários Rubistas e Railers da América Latina, mas principalmente com os da Argentina por causa de vários encontros que tivemos ao longo dos anos em que a lista <a href="http://lista.rubyargentina.com.ar"target="_blank" rel="noopener">RubyArg</a> vem funcionando.</p>
<p><strong>AkitaOnRails:</strong> Tenho muito interesse em entender como os Railers estão se organizando na Argentina, já que nós, no Brasil, somos uma comunidade em crescimento também. Você vê novos programadores indo direto para Rails ou é o movimento habitual de Java/outros para Rails? As empresas estão adotando, ou Ruby/Rails ainda tem um longo caminho a percorrer por lá também?</p>
<p><strong>Luis Lavena:</strong> Bem, há um número enorme de desenvolvedores que vieram de Java e dotNET (principalmente Java) e estão experimentando Rails. Também há muitos desenvolvedores que usam Ruby para tarefas administrativas ou até para criar jogos.<br>
As empresas de desenvolvimento de software ainda precisam adotar Ruby/Rails nos seus negócios. O maior problema é a falta de suporte na forma de empresas como a Sun ou alguns serviços de consultoria para Java — ou mesmo Microsoft.</p>
<p><strong>AkitaOnRails:</strong> Voltando ao passado, como você começou na programação em geral? Estudou ciência da computação, ou chegou até lá de outra forma? E, finalmente, como você tropeçou no Ruby e no Rails?</p>
<p><strong>Luis Lavena:</strong> É engraçado. Comecei a programar em 1989, brincando com sprites e GOTOs em BASIC num computador Z80.</p>
<p>Oficialmente não terminei minha graduação em CC, porque trabalho e diversão me distraíram. Conheci o Ruby pela primeira vez em 2001, adorei a sintaxe, gostei da sua verbosidade, mas não estava maduro o suficiente para as minhas necessidades, pelo menos não no Windows.</p>
<p>Embora eu tenha usado Python por muitos anos, internamente usava Ruby para gerenciar várias coisas, desde scripts simples até rake tasks que nos ajudavam a construir nossas ferramentas.</p>
<p>Com Rails foi diferente — começamos a procurar alternativas ao Zope e apostamos no Rails naquela época (versão 0.10 ou 0.12, se a memória não me trai).</p>
<p>Posso dizer que não me arrependo da aposta no Rails naquela época.</p>
<p><strong>AkitaOnRails:</strong> É muito interessante ver profissionais como você saindo da zona de conforto em direção ao &ldquo;desconhecido&rdquo; como Ruby e Rails. A maioria dos programadores é muito defensiva e até agressiva na busca de justificativas para não usar nenhum dos dois. Você se sentiu assim na época? O que te levou ao Ruby?</p>
<p><strong>Luis Lavena:</strong> Bem, estou acostumado a mudar de linguagens conforme minhas necessidades.<br>
Considere que nossa primeira escolha foi a era pré-J2EE ou o dotNET. Analisamos o que nos daria melhores soluções a longo prazo e decidimos evitá-los.</p>
<p>As coisas de Java pareciam — e ainda parecem até hoje — caras para os negócios. A Argentina não é um país onde você vai encontrar clientes com orçamentos enormes para cobrar o custo de usar ferramentas desenhadas para outros mercados.</p>
<p>Bancos e similares podem se dar ao luxo de ter tudo rodando com J2EE, mas isso não funciona quando você tenta ser menor e ágil — baseado principalmente em experiências com o fluxo do mercado na Argentina.</p>
<p><strong>AkitaOnRails:</strong> É ainda mais desafiador considerando que você decidiu que queria Ruby no Windows, provavelmente não encontrou nada razoável e decidiu atacar o problema você mesmo. Foi assim que aconteceu?</p>
<p><strong>Luis Lavena:</strong> Fui obrigado a usar Windows por muitos anos, principalmente relacionado ao desenvolvimento de hardware no campo de transmissão de vídeo. Além disso, sou usuário de BSD e Linux, até brinquei alguns anos com Macs e ultimamente com OSX.</p>
<p>Então essa restrição me forçou a construir a maior parte das minhas ferramentas em torno dessa limitação.<br>
O Ruby me permitiu aproveitar essa limitação sendo expressivo, o que me tornou mais produtivo nessa área.</p>
<p>Ruby não é capaz de lidar com meus requisitos principais para processamento de vídeo, mas ainda alimenta 70% do meu ambiente, junto com software Open Source e Freeware.</p>
<p>Usei Ruby por tanto tempo que pensei que a comunidade, agora que estava crescendo, talvez valorizasse a experiência e a disposição de ajudar nesse cenário específico.</p>
<p>Então, em vez de continuar coçando minha coceira nas sombras, decidi contribuir de volta e ajudar outros que buscam a mesma coisa. Pode dizer que estou tentando equilibrar meu karma.</p>
<p><strong>AkitaOnRails:</strong> Os americanos provavelmente não entendem isso, mas em países emergentes como o Brasil, as pessoas não têm muita escolha. A maioria não tem instrução suficiente (<em>cof</em> inglês <em>cof</em>) e encontra muitas barreiras. O último recurso para todo mundo é o Windows. Acho que é a mesma coisa na Argentina. Os Railers aqui não simplesmente migram para Macs ou Linux — diria que pelo menos 90% de todos os desenvolvedores estão presos ao Windows por um motivo ou outro. É a mesma coisa na Argentina, imagino?</p>
<p><strong>Luis Lavena:</strong> Mesmo que eu não goste, tenho que concordar. Felizmente as universidades começaram a mudar isso alguns anos atrás, dando palestras e sendo mais abertas à comunidade Linux, que cresceu muito.</p>
<p>Ainda assim, há muitos usuários e desenvolvedores presos em ambientes corporativos/médios ou que precisam rodar Windows por algum hardware proprietário ou similar.</p>
<p>Então, nós (como comunidade) não conseguimos chegar a esses desenvolvedores sem sermos mais abertos ou fornecer ferramentas que facilitem o caminho entre o ambiente atual deles e ferramentas alternativas.</p>
<p><strong>AkitaOnRails:</strong> Mas por algum motivo parece haver quase zero interesse da comunidade em suportar Ruby no Windows. Quer dizer, existem pessoas como você, alguns desenvolvedores de RubyGems que se dão ao trabalho de disponibilizar binários para win32, mas parece não ser suficiente. Como o <a href="http://rubyforge.org/projects/rubyinstaller/"target="_blank" rel="noopener">One-Click Ruby Installer</a> começou? Você o criou ou herdou?</p>
<p><strong>Luis Lavena:</strong> Sim, concordo, mas não posso culpá-los — afinal, cada um coça sua própria coceira. ;-)</p>
<p>Herdei o One-Click Installer do <a href="http://curthibbs.wordpress.com/"target="_blank" rel="noopener">Curt Hibbs</a>, que também herdou do <a href="http://en.wikipedia.org/wiki/Andy_Hunt_%28author%29"target="_blank" rel="noopener">Andy Hunt</a> e outros contribuidores.</p>
<p>A verdade é que por muitos anos usei minha própria versão do Ruby, compilada internamente, então tínhamos controle sobre ela. Não a modificávamos de forma alguma — gostamos de ter todo o processo documentado e automatizado, para poder identificar os componentes específicos atualizados que introduziram conflitos.</p>
<p>O One-Click Installer, por outro lado, depende de builds feitos pelos atuais desenvolvedores e mantenedores do ruby-core, o que torna o processo de encontrar as dependências corretas um pouco difícil. Esse build também impôs outros problemas, mas isso exigiria mais tempo para explicar.</p>
<p><strong>AkitaOnRails:</strong> Haha, quero mergulhar nas partes mais técnicas para que as pessoas possam entender melhor a situação atual no Windows. Quão diferente é o Ruby no Windows comparado ao Ruby no Linux? A coisa mais óbvia é que qualquer Gem com Extensões C sem binários adequados para Windows vai falhar. Tentar executar comandos shell vai falhar e o <a href="http://www.zenspider.com/ZSS/Products/RubyInline/"target="_blank" rel="noopener">RubyInline</a> também. O que mais?</p>
<p><strong>Luis Lavena:</strong> Hehe, isso é só a ponta do iceberg. Deixe-me mostrar um exemplo. Suponha que você tem um pacote ABC construído para sua distribuição atual de Linux. Essa versão específica de Linux está vinculada a um runtime comum que cuida de comandos básicos como manipulação de arquivos, console, etc. Isso é geralmente chamado de CRT (C Runtime) e no Linux é a glibc.</p>
<p>Então sua distribuição de Linux está vinculada a esta versão glibc A.B.C. Se sua distribuição atualiza a versão da glibc (por exemplo de 2.2 para 2.5), você é forçado a:</p>
<ol>
<li>atualizar todos os seus pacotes instalados, ou</li>
<li>recompilar tudo do zero.</li>
</ol>
<p>Já ouvi de algumas dessas atualizações dando tão errado que os usuários são forçados a começar do zero. O Windows, por outro lado, não pode quebrar 2 bilhões de aplicações por causa de uma mudança de CRT, então mantém versões antigas e preserva a compatibilidade no arquivo MSVCRT.dll (onde a versão base é 6.0).</p>
<p>Uma vantagem do Windows é que você pode ter vários CRTs coexistindo no seu sistema operacional. A parte ruim é que você não pode vincular com segurança a um CRT e usar componentes que se vinculam a outra versão sem se preocupar com segfaults e afins.</p>
<p>Tentei condensar essas informações <a href="http://blog.mmediasys.com/2008/01/17/ruby-for-windows-part-1/"target="_blank" rel="noopener">num post</a> algum tempo atrás. Como você pode ver, a falta de ferramentas de desenvolvimento não é o pior problema no desenvolvimento Windows.</p>
<p><strong>AkitaOnRails:</strong> Interessante. E outra coisa é o compilador Visual Studio vs <a href="http://www.mingw.org/"target="_blank" rel="noopener">MinGW</a>. Você pode nos dar uma ideia de por que escolheu o MinGW? É só porque o VS é comercial e os desenvolvedores teriam que pagar?</p>
<p><strong>Luis Lavena:</strong> O Visual Studio é ótimo, mas só quando você pode pagá-lo. As versões gratuitas carecem de algumas coisas muito úteis, como a Profile-Guided Optimization (PGO) que está sendo usada para construir binários Windows do Python, por exemplo.</p>
<p>O problema com o VS, mesmo as versões gratuitas, é que você não tem permissão de distribuí-las. Acho que é até ilegal vincular à URL/página de download. Então, mesmo para o nosso projeto de sandbox automatizado, o Visual Studio precisaria ser baixado, instalado e configurado manualmente.</p>
<p>Felizmente nas últimas versões você não precisa instalar o Platform SDK, que era 1GB. As versões do VS se vinculam apenas à versão mais recente do MSVCRT, o que nos força a relinkar cada biblioteca da qual o Ruby depende (e o código fonte do Ruby depende de muitos externos).</p>
<p>Além disso, o Ruby não usa a versão safe do CRT para funções de cópia de strings, então você precisa de flags de compilador só para evitar isso&hellip; Então depois de semanas de muito trabalho para compilar com VC8 e todas as dependências, você acaba com algo que tem performance quase igual, já que não há ganho de performance — mas agora você tem menos cabelos.</p>
<p>O MinGW, por outro lado, era mais próximo de um ambiente Linux, então a maioria das ferramentas funcionava imediatamente. A parte boa é que não precisávamos compilar todas as dependências com ele, já que por padrão tudo se vincula ao MSVCRT (o CRT padrão no Windows). O MinGW também fornece algumas ferramentas de cross-compilação que permitem construir, usando o ambiente Linux, bibliotecas compartilhadas (dll) e executáveis para Windows.<br>
Considero isso uma vantagem, não sei o que os outros pensam.</p>
<p><strong>AkitaOnRails:</strong> Uau, isso é realmente avassalador e recomendo a qualquer pessoa interessada nos detalhes que dê uma olhada no seu <a href="http://blog.mmediasys.com/"target="_blank" rel="noopener">blog</a>. Mas tudo isso dito, agora você tem tudo no lugar, um processo adequado e tal, presumo. Se eu sou um desenvolvedor C Windows e quero contribuir, onde devo ir primeiro para saber quais ferramentas usar, como compilar as coisas, etc.?</p>
<p><strong>Luis Lavena:</strong> Essa é a parte boa! <a href="http://blog.robustlunchbox.com/"target="_blank" rel="noopener">Gordon Thiesfeld</a> e eu temos trabalhado em dois pacotes para o novo One-Click Installer: Runtime e Developer Kit.</p>
<p>O Runtime vem com o mínimo de Ruby+RubyGems para você começar e também pode ser usado como módulo para outras instalações. O DevKit fornece o ambiente MinGW para você criar extensões Ruby ou mesmo instalar aquelas que não são pré-compiladas para Windows mas são fáceis de obter.</p>
<p>Este DevKit não vai apenas facilitar o trabalho com Ruby no Windows (e dar acesso a algumas ótimas Rubygems), mas também permitir que você contribua de volta para o projeto Ruby. Como? Fácil — o projeto Ruby Installer (no <a href="http://github.com/luislavena/rubyinstaller/tree/master"target="_blank" rel="noopener">Github</a>) é auto-hospedado. O que isso significa? É possível replicar nosso ambiente de desenvolvimento em qualquer lugar, hackear suas mudanças ou até debugar o próprio código C do Ruby e contribuir de volta para a comunidade. Temos feito isso por vários meses e está funcionando. Que legal, né?</p>
<p><strong>AkitaOnRails:</strong> Parece incrível. Não sabia disso e aposto que muitos desenvolvedores também não. Espero que os desenvolvedores C que leram isso possam se atualizar agora. Outro detalhe: RubyGems. Quão difícil é portar uma Gem com Extensões C para fornecer um binário Windows quando você a instala?</p>
<p><strong>Luis Lavena:</strong> Oh, isso requer que alguns desenvolvedores não caiam em truques específicos de plataforma para fazer suas ferramentas funcionarem. Um exemplo, que também é uma má prática, é usar caminhos hard-coded&hellip;</p>
<p>Outro é depender da existência de algumas ferramentas externas que às vezes não estão disponíveis ou os desenvolvedores/usuários não instalaram. E não estou falando de problemas de plataforma Linux-Windows — mesmo entre distribuições Linux isso é um problema.</p>
<!-- dead Flash embed removed (service offline): flash -->  
<p><a href="http://www.vimeo.com/1266418?pg=embed&amp;sec=1266418"target="_blank" rel="noopener">Instalando Gems no RubyInstaller</a> de <a href="http://www.vimeo.com/luislavena?pg=embed&amp;sec=1266418"target="_blank" rel="noopener">Luis Lavena</a> no <a href="http://vimeo.com?pg=embed&amp;sec=1266418"target="_blank" rel="noopener">Vimeo</a>.</p>
<p><strong>AkitaOnRails:</strong> Então depende bastante da qualidade da Gem original, certo? Quanto mais limpo o código, mais fácil de portar, claro. Mas seu DevKit fornece alguns atalhos para isso? E quanto ao RubyInline, ele simplesmente quebra?</p>
<p><strong>Luis Lavena:</strong> Sim, aprendi ao longo dos anos que você não deve supor nada sobre o ambiente em que sua aplicação vai rodar — assim você evita esses erros.</p>
<p>Felizmente o RubyInline funciona bem com o Ruby Installer (One-Click Installer que usa MinGW) há algumas versões atrás — graças ao Ryan Davis por incluir esses patches.</p>
<p>O build atual em VC6 do One-Click Installer não é seguro, pois você precisa do VS6 para funcionar, que não está mais disponível. Já ouvi de usuários aproveitando Sequel, Ambition e ImageScience no Windows graças a esses patches.</p>
<p><strong>AkitaOnRails:</strong> Me corrija se estiver errado, mas não é uma forma de incorporar snippets de código C misturado com código Ruby? Isso significa que ele compila nativamente esse snippet para executar? Como consegue isso num ambiente Windows que não tem compiladores por padrão?</p>
<p><strong>Luis Lavena:</strong> Conseguimos incluir alguns patches no Hoe e no RubyInline que &ldquo;empacotam&rdquo; as extensões pré-compiladas dentro das gems, então os usuários não precisam de um compilador nesses casos.</p>
<p>De qualquer forma, agora usar o build VC6 do Ruby exige mão de obra para manter essas gems e acompanhar os novos lançamentos, o que leva tempo. Até agora era só eu na jogada (já que temos algumas licenças VC6). Construir tudo para todo mundo é um fardo que estou ansioso para transferir para o DevKit.</p>
<p><strong>AkitaOnRails:</strong> São vocês que mantêm as versões Windows das Gems ou cada desenvolvedor cuida do seu próprio projeto? Há um repositório central para Gems prontas para Windows? O DevKit já está disponível, aliás?</p>
<p><strong>Luis Lavena:</strong> Para alguns projetos sou o único que mantém gems para Windows; para outros apenas contribuí com patches e outros usuários gerenciam os builds. Não há repositório central para gems Windows porque quero que o RubyForge seja o central.<br>
De qualquer forma, estou publicando as específicas do MinGW baseadas em forks do github aqui:</p>
<pre><code>gem list --remote --source http://gems.rubyinstaller.org</code></pre>
<p>O devkit já está disponível, mas estamos embrulhando-o num bom pacote de instalação Windows. Você pode sujar as mãos e pegar o projeto sandbox do <a href="http://github.com/luislavena/rubyinstaller">Github</a> para ter seu ambiente, ou simplesmente <a href="http://www.rubyinstaller.org/sandbox/">baixar os pacotes</a>.</p>
<p><strong>AkitaOnRails:</strong> Então, no que diz respeito a ferramentas e processos, você está fazendo um ótimo trabalho. Mas então há o código Ruby que, por si só, é um grande desafio pelo que ouço. Você me mencionou que nem parece C. Quais são os maiores problemas? Técnicos ou conseguir ajuda da lista ruby-core, ou ambos? E quanto aos test suites, como você está eliminando bugs de compatibilidade?</p>
<p><strong>Luis Lavena:</strong> Para ser honesto, às vezes olhar para o código C do Ruby me dá dor de cabeça. Há muitas macros, definições e condições de macro que aparecem no meio de um bloco if..else... A parte mais difícil, além de rastrear o bug, é obter feedback do ruby-core. Várias vezes <a href="http://blog.mmediasys.com/2008/03/06/is-windows-a-supported-platform-for-ruby-i-guess-not/">expressei</a> minhas preocupações em listas de e-mail, IRC e no meu blog.</p>
<p>Várias vezes perguntei se era OK ter alguns erros nos unit tests do próprio Ruby e às vezes obtive respostas, mas às vezes não. Felizmente não precisamos mais basear nossa qualidade de testes nos unit tests incluídos no Ruby. Começamos a encontrar problemas com a implementação do Ruby no Windows usando as Ruby Specs criadas pelo pessoal do projeto Rubinius e que a maioria das implementações (IronRuby e jRuby) contribui ativamente e usa como base de seus interpretadores.</p>
<p><strong>AkitaOnRails:</strong> Falando nisso, <a href="http://blog.emptyway.com/2008/04/06/the-rubyspecs-quick-starting-guide/">RubySpecs</a> — quão longe está o Ruby no Windows de passar por elas? Ou já passa?</p>
<p><strong>Luis Lavena:</strong> Bem, é uma tarefa grande. Primeiro começamos fazendo o MSpec funcionar corretamente no Windows, já que o RubySpec requer alguma auditoria para remover caminhos hard-coded. Então começamos a adicionar guards em torno de coisas que não são suportadas ou não funcionam no Windows no <span class="caps">MRI</span>.</p>
<p>Isso leva mais tempo já que precisamos revisar os resultados em cada plataforma, mergulhar na documentação do Ruby (que às vezes é insuficiente) ou respirar fundo e olhar para o código C para descobrir o que está fazendo.</p>
<p>Se tivéssemos <strong>mais mão de obra</strong>, talvez conseguíssemos terminar de proteger todo o código e ter specs rodando limpas no Windows. Agora há muitas que simplesmente falham ou causam segfault.</p>
<p><strong>AkitaOnRails:</strong> Você deveria documentar esse processo para que as pessoas possam ajudar, se ainda não o fez :-) Agora falando de coisas mais práticas: Ruby no Windows, hoje, é um runtime viável para rodar apps Rails no Windows? Mesmo apps em produção? Você trabalhou com Zed Shaw no Mongrel para Windows, certo? Experimentou o mais recente suporte FastCGI da Microsoft para <span class="caps">IIS</span>?</p>
<p><strong>Luis Lavena:</strong> Hehee, documentação, documentação — é totalmente superestimada. Planejamos ter vários screencasts no site do RubyInstaller, mas continua como <em>'em breve'</em> por enquanto.</p>
<p>Não só você pode desenvolver aplicações Rails no Windows (como eu também faço), mas conheço várias empresas que rodam lado a lado com <span class="caps">IIS</span> ou mesmo Tomcat.</p>
<p>Mesmo 2 anos após o Zed tê-lo criado, o Mongrel ainda domina o cenário de servidores web Ruby. Não fiz muito ao próprio Mongrel, já que o Zed criou algo que funcionava no Windows com pequenos ajustes.</p>
<p>Criei algo para rodar o Mongrel como serviço (mongrel_service), o que ajudou várias pessoas a introduzir Ruby e Rails em seus ambientes corporativos, inclusive conversando com servidores <span class="caps">MSSQL</span>.</p>
<p>Pessoalmente não testei o <a href="http://mvolo.com/blogs/serverside/archive/2007/02/18/10-steps-to-get-Ruby-on-Rails-running-on-Windows-with-IIS-FastCGI.aspx">suporte a <span class="caps">FCGI</span> no <span class="caps">IIS</span></a>, mas fui eu quem o corrigiu para ser incluído no One-Click Installer para que alguns usuários pudessem aproveitá-lo. Podemos dizer que funciona.</p>
<p><strong>AkitaOnRails:</strong> Sobre performance, o Windows parece ter uma condição inerente: na mesma máquina quando inicio, digamos, um simples <span class="caps">IRB</span> no Windows, depois dou dual boot para Linux e rodo, parece abrir muito mais rápido (não é exatamente um experimento científico :-). Qual é sua experiência com a performance do Ruby no Windows?</p>
<p><strong>Luis Lavena:</strong> Há problemas de performance relacionados ao código C gerado pelo compilador e problemas relacionados ao SO e I/O gerenciados por ele. Carregar o <span class="caps">IRB</span> no Windows pode estar exigindo RubyGems em segundo plano, que por sua vez precisa varrer e carregar todas as especificações de gems. Tento manter <code>RUBYOPT=rubygems</code> fora das minhas variáveis de ambiente.</p>
<p><strong>AkitaOnRails:</strong> Aliás, por que tenho a impressão de que vejo <span class="caps">RUBYOPT</span>=rubygems sendo recomendado em todo tutorial Windows que vejo?</p>
<p><strong>Luis Lavena:</strong> <code>RUBYOPT=rubygems</code> é a parte da mágica que devemos evitar.<br>
No Linux, se você começa a criar um script e precisa de uma gem, começa com:</p>
<hr>
<pre><code>require 'rubygems'
require 'some_gem'</code></pre>
<p>O mesmo deveria ser feito para Windows. Não é doloroso, é boa prática. <span class="caps">RUBYOPT</span> é um atalho que não gosto — nunca vi uma distribuição Linux que ative isso por padrão e não gosto que seja configurado no Windows (é claro, esse é meu ponto de vista pessoal).</p>
<p>Então, para evitar cair em procedimentos de teste padrão, continuo usando um solver de sudoku simples mas bom que exercita recursão, arrays e condições da VM em vez de ser I/O bound.</p>
<p>Você pode ver isso, com resultados interessantes no <a href="http://blog.mmediasys.com/2008/04/24/contributions-speedup-and-less-quirks-for-us/">meu blog</a> (veja a seção <em>"Rubinius, RubySpecs, and speed."</em> do post).</p>
<p>O principal é que o VC6 torna tudo lento. Depois você tem as coisas I/O bound (I/O no Windows não é tão bom quanto no Linux). Considero o build padrão VC6 do Ruby no Windows dolorosamente lento. Por outro lado, o do MinGW é mais ágil, mas ainda acho que há um longo caminho a percorrer para melhorias.</p>
<p><strong>AkitaOnRails:</strong> Então, no geral, Ruby no Windows está sempre evoluindo — o que é ótimo —, roda bem no Windows — o que é notável —, mas poderia usar um pouco mais de ajuda, certo? Você acha que mais desenvolvedores C Windows ajudariam? Ou seja, adicionar mais mãos ajudaria a melhorar a qualidade?</p>
<p><strong>Luis Lavena:</strong> Definitivamente!</p>
<p><strong>AkitaOnRails:</strong> Que tipo de desenvolvedores — o que uma pessoa deveria saber para ajudar?</p>
<p><strong>Luis Lavena:</strong> Não sei se o "core" do Ruby vai aceitar isso — ultimamente só ouço a palavra fork em torno do Ruby <span class="caps">MRI</span>. Além disso, podemos corrigir bugs na implementação Ruby para Windows, mas não podemos melhorar muito a qualidade já que essas mudanças afetariam outras plataformas também.</p>
<p>A parte ruim é que não há separação clara por plataforma de código específico — tudo é uma série de macros e condições de compilação que dificultam o rastreamento (para desenvolvedores não-masoquistas).</p>
<p><strong>AkitaOnRails:</strong> O que me lembra o pessoal da Phusion com a sua <a href="http://www.rubyenterpriseedition.com/">Enterprise Edition</a>, que é um fork do <span class="caps">MRI</span>. Você tentou analisar os patches de GC copy-on-write deles? Talvez incluí-los na versão Windows? O Ruby no Windows em si é um "fork". Você acaba tendo que sincronizar seu trunk com o deles — é assim que funciona?</p>
<p><strong>Luis Lavena:</strong> Honestamente não tive tempo de analisar a Enterprise Edition, mesmo tendo acompanhado todos os posts e a discussão desses patches no ruby-core. O engraçado é que os últimos lançamentos da branch Ruby 1.8.6 estão me dando dores de cabeça (mais do que olhar para o código C). Eles não conseguem nem completar os self-tests e causam segfault com algumas extensões como a gem mysql.</p>
<p><strong>AkitaOnRails:</strong> Sim, tem gerado muito barulho na comunidade — e com razão. Espero que possam resolver logo. Bem, acho que já tomei muito do seu tempo. Há algum assunto que você gostaria de abordar, ou pelo menos alguma mensagem para a comunidade brasileira mais jovem?</p>
<p><strong>Luis Lavena:</strong> Sim — não tenha medo de fazer perguntas, não se envergonhe de usar Windows como plataforma. Você pode realizar ótimas aplicações usando Windows e pode se infiltrar mais facilmente em ambientes corporativos com ele.</p>
<p><strong>AkitaOnRails:</strong> Ah, o que me lembra de uma última pergunta que todo mundo me faz o tempo todo — e vou repassar para você, já que é um desenvolvedor Windows: quais são suas ferramentas preferidas para editar projetos Ruby/Rails?</p>
<p><strong>Luis Lavena:</strong> Uso principalmente coisas gratuitas ou open source, então tenho usado o <a href="http://www.activestate.com/store/download.aspx?prdGUID=20f4ed15-6684-4118-a78b-d37ff4058c5f">Komodo Edit</a> (não Pro) e o <a href="http://www.pnotepad.org/">Programmer Notepad</a>, já que às vezes os uso para trabalhar com código C, FreeBASIC e Assembler para hardware embarcado.</p>
<p>Ultimamente tenho usado um editor leve chamado <a href="http://intype.info/home/index.php">Intype</a> que vem com alguns bundles para imitar o TextMate, mas realmente não aproveito muito. Usei NetBeans por um tempo, mas depois de 500MB simplesmente fechei :-)</p>
<p><strong>AkitaOnRails:</strong> Haha, e o que você recomendaria para um programador Rails iniciante?</p>
<p><strong>Luis Lavena:</strong> Para começar, o NetBeans é bom, mas com a prática aprenderão que até o notepad é suficiente para programar.</p>
<p>(PS: Já estamos incluindo os patches da Enterprise para os últimos problemas no build MinGW! :-)</p>
<p><strong>AkitaOnRails:</strong> Haha, certo. Bem, acho que é isso. Espero que isso alcance um público mais amplo e chame atenção dos desenvolvedores Windows por aí. Muito obrigado!</p>
<p><strong>Luis Lavena:</strong> Obrigado a você, Fabio.</p>
<p style="text-align: center; margin: 5px"><a href="http://www.flickr.com/photos/diegal/325555121/"><img src="http://s3.amazonaws.com/akitaonrails/assets/2008/7/2/325555121_e6e22ea444.jpg" alt=""></a></p>
]]></content:encoded><category>entrevistas</category><category>ruby</category><category>microsoft</category></item><item><title>Conversando com Blaine Cook (Twitter)</title><link>https://akitaonrails.github.io/2008/06/17/conversando-com-blaine-cook-twitter/</link><guid isPermaLink="true">https://akitaonrails.github.io/2008/06/17/conversando-com-blaine-cook-twitter/</guid><pubDate>Tue, 17 Jun 2008 00:29:00 -0300</pubDate><description>&lt;p&gt;Ruby on Rails é &lt;strong&gt;grande&lt;/strong&gt;. Twitter é &lt;strong&gt;grande&lt;/strong&gt;. E por isso eles se tornaram alvos fáceis para a mídia e os pundits frustrados em busca de mais pageviews. Blaine Cook foi um dos desenvolvedores do Twitter e gentilmente concordou em participar de uma das minhas entrevistas. E, claro, ele vai responder à pergunta: &lt;em&gt;&amp;ldquo;Rails Escala?&amp;rdquo;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.flickr.com/photos/hyku/2299866775/"target="_blank" rel="noopener"&gt;&lt;img src="http://s3.amazonaws.com/akitaonrails/assets/2008/6/17/2299866775_385f7af555.jpg" alt="" loading="lazy" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;AkitaOnRails:&lt;/strong&gt; Então, deixa eu explicar primeiro que meu principal objetivo ao entrevistar pessoas de alto perfil como você é trazer informação de qualidade para nossa crescente comunidade Rails no Brasil. É sempre bom perguntar sobre seu background, como você chegou ao Rails e qual foi sua experiência com ele.&lt;/p&gt;</description><content:encoded><![CDATA[<p>Ruby on Rails é <strong>grande</strong>. Twitter é <strong>grande</strong>. E por isso eles se tornaram alvos fáceis para a mídia e os pundits frustrados em busca de mais pageviews. Blaine Cook foi um dos desenvolvedores do Twitter e gentilmente concordou em participar de uma das minhas entrevistas. E, claro, ele vai responder à pergunta: <em>&ldquo;Rails Escala?&rdquo;</em></p>
<p><a href="http://www.flickr.com/photos/hyku/2299866775/"target="_blank" rel="noopener"><img src="http://s3.amazonaws.com/akitaonrails/assets/2008/6/17/2299866775_385f7af555.jpg" alt=""  loading="lazy" /></a></p>
<p><strong>AkitaOnRails:</strong> Então, deixa eu explicar primeiro que meu principal objetivo ao entrevistar pessoas de alto perfil como você é trazer informação de qualidade para nossa crescente comunidade Rails no Brasil. É sempre bom perguntar sobre seu background, como você chegou ao Rails e qual foi sua experiência com ele.</p>
<p><strong>Blaine Cook:</strong> Comecei com Rails num projeto pessoal pequeno em dezembro de 2004, depois que Evan Henshaw-Plath (<a href="http://2008.xtech.org/public/schedule/speaker/283"target="_blank" rel="noopener">rabble</a>) ficou muito animado com Ruby e Rails.</p>
<p><a href="http://www.flickr.com/photos/foolswisdom/43021932/"target="_blank" rel="noopener"><img src="http://s3.amazonaws.com/akitaonrails/assets/2008/6/17/43021932_545efed570.jpg" alt=""  loading="lazy" /></a></p>
<p>Logo depois, comecei a trabalhar no <a href="http://www.odeo.com"target="_blank" rel="noopener">Odeo</a>. Gosto muito de Rails e tive uma experiência excelente com ele. Construir web apps costumava ser um parto (ou seja, uma chatice) porque você acabava reconstruindo as mesmas peças repetidamente.</p>
<p>O Rails resolveu isso. Já existiam frameworks antes, mas o Rails reformulou a questão de forma humana, e é isso que vemos em todos os outros frameworks que vieram depois.</p>
<p><strong>AkitaOnRails:</strong> E o que você fazia antes do Rails? Java Enterprise? Coisas Microsoft? Outros projetos open source?</p>
<p><strong>Blaine Cook:</strong> Fazia principalmente PHP e Perl, no contexto de projetos open source e trabalhos de consultoria.</p>
<p><strong>AkitaOnRails:</strong> Então <strong>Odeo</strong> e <strong>Twitter</strong> são seus maiores projetos em Rails? Antes de entrar no Twitter, pode nos contar como foi seu trabalho no Odeo?</p>
<p><strong>Blaine Cook:</strong> Claro — o Odeo foi OK. O grande problema lá era foco. O podcasting ainda não tinha provado seu valor (e a forma que o podcasting assumiu hoje é bem diferente do que as pessoas imaginavam em 2004/2005), então era difícil ganhar tração com o produto.</p>
<p>Construímos coisas incríveis, muitas das quais estão só agora virando produtos. Coisas como mixagem multilista na web, mensagens em vídeo (como o <a href="http://www.seesmic.com/"target="_blank" rel="noopener">seesmic</a>), etc.</p>
<p><strong>AkitaOnRails:</strong> É um assunto paralelo interessante: podcasting. Faço um <a href="http://podcast.rubyonrails.pro.br/"target="_blank" rel="noopener">podcast brasileiro de Rails</a> com um amigo e hoje em dia as pessoas estão muito acostumadas com podcasts. Qual era a visão 3, 4 anos atrás sobre o que o podcasting se tornaria?</p>
<p><strong>Blaine Cook:</strong> Acho que é razoavelmente parecida, mas parece que a maior tração (ou seja, ouvintes) do podcasting veio de programas de rádio que buscavam distribuição mais ampla.</p>
<p>Havia um sentimento de que o podcasting seria muito mais popular entre blogueiros em geral. Todo mundo ia ter um podcast.</p>
<p>Mas na realidade é um meio com muito menos publicadores do que o blog.</p>
<p><a href="http://www.flickr.com/photos/jolieani/2303816926/"target="_blank" rel="noopener"><img src="http://s3.amazonaws.com/akitaonrails/assets/2008/6/17/2303816926_beafddbb5c.jpg" alt=""  loading="lazy" /></a></p>
<p><strong>AkitaOnRails:</strong> Você ajudou a fundar o Odeo, ou seja, você foi um dos criadores? Ou foi contratado para resolver o problema deles? E por que você saiu do Odeo?</p>
<p><strong>Blaine Cook:</strong> Não — entrei no Odeo alguns meses depois que o desenvolvimento tinha começado. Na verdade nunca saí formalmente do Odeo — o produto foi vendido, e a empresa continuou como Obvious. O Twitter era um projeto paralelo dentro do Odeo.</p>
<p><strong>AkitaOnRails:</strong> Ok, e o Twitter é enorme hoje. Você pode nos dar uma ideia de como surgiu toda a ideia do <em>&ldquo;O que você está fazendo&rdquo;</em>? Na época você achava que se tornaria um sucesso tão grande?</p>
<p><strong>Blaine Cook:</strong> O Twitter começou como um projeto paralelo no Odeo, mas na verdade era uma ideia que o <a href="http://www.stonetemple.com/articles/interview-jack-dorsey.shtml"target="_blank" rel="noopener">Jack</a> já vinha desenvolvendo de diversas formas há vários anos.</p>
<p>Ele e <strong>Noah Glass</strong> (o fundador do Odeo) criaram uma subempresa dentro do Odeo para trabalhar nisso, na primavera de 2006. Inicialmente, eu detestei a ideia, principalmente porque era para ser só via SMS.</p>
<p>Olhando para trás, é difícil dizer, mas na época eu diria que o Twitter tinha poucas chances de dar certo. Acho que o sucesso teve muito a ver com sorte e abertura.</p>
<p><strong>AkitaOnRails:</strong> Então, talvez um dos maiores motivos para o sucesso do Twitter fosse também seu calcanhar de Aquiles? Ou seja, o acesso via API que ele tem hoje?</p>
<p><strong>Blaine Cook:</strong> Sim, com certeza.</p>
<p><strong>AkitaOnRails:</strong> Entrando no assunto espinhoso: é bastante óbvio que o <a href="http://www.techcrunch.com/2008/04/23/amateur-hour-over-at-twitter/"target="_blank" rel="noopener">Michael Arrington</a> não gosta do Twitter. E especialmente parece que ele tem algo <a href="http://www.alleyinsider.com/2008/4/lead_architect_blaine_cook_out_at_twitter"target="_blank" rel="noopener">contra você</a> pessoalmente, pelo menos considerando o tom dos artigos dele no Techcrunch. Você pode comentar isso?</p>
<p><strong>Blaine Cook:</strong> Não muito — não sei por que ele tem esse ranço. É levemente irritante, mas no fim das contas faz o Techcrunch parecer mais uma fofoqueira do que um veículo de notícias respeitável. Perda dele.</p>
<p><strong>AkitaOnRails:</strong> E não só isso: parece que parte da mídia de tecnologia quer correlacionar a instabilidade do Twitter com o fato de que parte do front-end é movido a Ruby on Rails, daí a discussão <em>&ldquo;Rails Escala?&rdquo;</em>. Como Railer, me parece óbvio que relacionar Rails e instabilidade gera muitos pageviews. Você acha que é isso mesmo?</p>
<p><strong>Blaine Cook:</strong> Acho que é pelo menos parte disso. Pageviews são uma atração enorme, obviamente.</p>
<p><strong>AkitaOnRails:</strong> Talvez fosse útil alguém como você explicar para nossa audiência a diferença entre <strong>&lsquo;performance&rsquo;</strong> e <strong>&rsquo;escalabilidade&rsquo;</strong>, já que a maioria das pessoas parece não saber a diferença entre as duas.</p>
<p><strong>Blaine Cook:</strong> Performance e escalabilidade são coisas muito diferentes. Performance é como o limite de velocidade — é uma questão de quão rápido você vai do ponto A ao ponto B. Nesse caso, estamos falando de quão rápido você consegue renderizar e entregar uma página ao usuário.</p>
<p>Escalabilidade é uma questão de quantos usuários você consegue atender. Estradas, por natureza, não escalam — quando estão cheias, você tem engarrafamento. Em arquiteturas web, o que buscamos são sistemas que expandem (geralmente adicionando mais hardware) para lidar com mais tráfego.</p>
<p>Obviamente estão relacionadas — se você tem um engarrafamento, o limite de velocidade efetivo é menor que o teórico. Mas aumentar o limite de velocidade não resolve engarrafamentos.</p>
<p>Há várias formas de diminuir o congestionamento — adicionar mais faixas na estrada, incentivar as pessoas a usar transporte público, ou melhor ainda incentivá-las a trabalhar mais perto de casa.</p>
<p>Da mesma forma, existem muitas técnicas para tornar sites mais escaláveis, e a maioria delas não envolve tornar as coisas muito mais &ldquo;rápidas&rdquo;.</p>
<p><a href="http://www.flickr.com/photos/gavinbell/2476619970/"target="_blank" rel="noopener"><img src="http://s3.amazonaws.com/akitaonrails/assets/2008/6/17/2476619970_af72edc5ef.jpg" alt=""  loading="lazy" /></a></p>
<p><strong>AkitaOnRails:</strong> Ótima explicação. O Twitter se envolveu em várias controvérsias desde o ano passado, e acho que você não estava envolvido na maioria delas, mas talvez possa lançar luz sobre essas questões já que nem todo mundo acompanha todas as notícias. A primeira foi aquela entrevista em que <a href="http://www.radicalbehavior.com/5-question-interview-with-twitter-developer-alex-payne/"target="_blank" rel="noopener">Alex Payne</a> reclamou que o Rails não suportava múltiplos bancos de dados. <strong>David Hansson</strong> respondeu irritado. Depois o <a href="http://drnicwilliams.com/2007/04/12/magic-multi-connections-a-facility-in-rails-to-talk-to-more-than-one-database-at-a-time/"target="_blank" rel="noopener">Dr. Nic</a> iniciou uma solução. Você pode explicar esse assunto para nossa audiência?</p>
<p><strong>Blaine Cook:</strong> Claro — é verdade que o Rails não suporta múltiplos bancos de dados out of the box, mas isso é facilmente resolvido. Acho que a entrevista com o Alex não entrou nos detalhes e deturpou nossos desafios.</p>
<p>Se fosse apenas uma questão de suportar múltiplas conexões com banco de dados, isso seria facilmente resolvido. O problema real era muito mais complexo e tinha a ver com sharding customizado para nosso dataset específico.</p>
<p><strong>Eran Hammer-Lahav</strong> tem uma série excelente (partes <a href="http://www.hueniverse.com/hueniverse/2008/03/on-scaling-a-mi.html"target="_blank" rel="noopener">1</a>, <a href="http://www.hueniverse.com/hueniverse/2008/03/scaling-a-micro.html"target="_blank" rel="noopener">2</a>, <a href="http://www.hueniverse.com/hueniverse/2008/04/scaling-a-micro.html"target="_blank" rel="noopener">3</a>) em que ele descreve alguns dos desafios associados a construir sites de microblogging para escalar.</p>
<p>Nada do que ele descreve no artigo é difícil de fazer com Rails. De fato, acho que o David (Hansson) está errado quando diz que Rails não é flexível — ele é muito mais flexível do que a maioria dos outros frameworks.</p>
<p><strong>AkitaOnRails:</strong> Certo. E a outra controvérsia recente é, claro, por causa do <a href="http://www.techcrunch.com/2008/05/31/hey-twitter-i-have-a-few-questions-too/"target="_blank" rel="noopener">TechCrunch</a> de novo, onde dizem que o Twitter tem apenas meia dúzia de servidores e é por isso que cai com frequência. Você pode descrever grosseiramente como é a arquitetura de hardware do Twitter?</p>
<p><strong>Blaine Cook:</strong> O Twitter tem muitos servidores, definitivamente mais do que meia dúzia. Não posso entrar em mais detalhes sobre o hardware, mas posso dizer que o back-end é um sistema assíncrono baseado em mensagens. O <a href="http://rubyforge.org/projects/starling/"target="_blank" rel="noopener">Starling</a> (o servidor de filas que eu escrevi e que o Twitter lançou em janeiro) é o mecanismo usado para passar mensagens entre processos.</p>
<p>O maior problema é que o Twitter lida com muitas requisições de API caras devido ao polling frequente necessário para manter os tweets dos seus amigos atualizados. O grande desafio era encontrar uma forma barata de tornar essas requisições caras mais baratas.</p>
<p>Usamos memcache extensivamente e tínhamos um monte de caching em operação há mais de um ano, mas não era suficiente.</p>
<p><strong>AkitaOnRails:</strong> No ano passado, Alex e Britt falaram na RailsConf sobre <a href="http://www.slideshare.net/eraz/scaling-rails-presentation/"target="_blank" rel="noopener">Scaling Rails</a> e parecia que o problema do Twitter logo acabaria. Era principalmente sobre caching e otimizações do tipo, e uma das mensagens principais era <em>&ldquo;faça cache de tudo&rdquo;</em>. Vi você falando este ano sobre database sharding e como é diferente arquitetar para 1 mil pessoas e para 1 milhão e que não dá pra prever o que fazer antes. O Twitter ainda cai às vezes, então o que mudou entre o ano passado e agora em relação a Scaling Rails?</p>
<p><a href="http://www.flickr.com/photos/x180/2329021397/"target="_blank" rel="noopener"><img src="http://s3.amazonaws.com/akitaonrails/assets/2008/6/17/2329021397_3dde02123a.jpg" alt=""  loading="lazy" /></a></p>
<p><strong>Blaine Cook:</strong> Sim — sabíamos há muito tempo que o sharding de banco de dados era importante, mas por várias razões não conseguimos avançar nisso.</p>
<p>O negócio com sharding é que, enquanto alguém não aparecer com algo parecido com o que o Google tem (e não me refiro ao Bigtable), a forma que sua aplicação assume antes do sharding é muito diferente da forma depois. O sharding torna certas coisas mais difíceis e é geralmente caro.</p>
<p>Quando as pessoas falam em &ldquo;sharding&rdquo; ou &ldquo;denormalização&rdquo;, o que querem dizer é <em>&ldquo;duplicar dados de formas específicas para tornar certas consultas mais rápidas.&rdquo;</em></p>
<p>Isso sempre envolve custo adicional. Se você está construindo um app novo que provavelmente nunca verá centenas de milhares de usuários — ou se você não sabe se verá ou não — geralmente não vale investir muito dinheiro em hardware e tempo de engenharia para construir uma arquitetura &ldquo;escalável&rdquo;.</p>
<p>A realidade é que a maioria dos desenvolvedores conhece SQL e consegue construir aplicações CGI com PHP, Rails ou o que for, mas relativamente poucos têm experiência em pegar esses datasets normalizados e diretos e quebrá-los em sistemas sharded muito mais complexos.</p>
<p><strong>AkitaOnRails:</strong> Claro, às vezes as pessoas acham que vão construir o &ldquo;próximo&rdquo; Twitter. <a href="/2008/6/5/railsconf-2008-brazil-rails-podcast-special-edition">Entrevistei o Ezra</a>, da Engine Yard, na RailsConf e ele reconhece que o grafo de amigos-de-amigos é um problema tão complexo que quem resolver vai ganhar muito dinheiro. Ou seja, designs SQL tradicionais não funcionam sempre, né?</p>
<p><strong>Blaine Cook:</strong> Claro — a questão é: o que mais você vai usar? O Google tem uma arquitetura que permite gastar quantidades infinitas de dinheiro para construir listas denormalizadas de tudo e acessar essas listas rapidamente. Há vários projetos — HBase, Hypertable, CouchDB e muitos outros — que visam resolver esses problemas, mas nenhum deles está pronto para uso em produção.</p>
<p>A realidade é que 10 anos atrás as pessoas construíam aplicações web com tcsh, e agora temos ferramentas melhores.</p>
<p><strong>AkitaOnRails:</strong> Onde o Twitter está hospedado? Por alguma razão vi a Engine Yard falando muito sobre questões de escalabilidade durante toda a RailsConf deste ano. Você acha que o meme &ldquo;Rails não escala&rdquo; está deixando os Railers preocupados com perspectivas futuras? Mesmo que não devesse assustar tanto assim, já que temos sites de alto tráfego como Scribd e YellowPages no topo da lista — embora as arquiteturas sejam completamente diferentes, é claro. O que você acha?</p>
<p><strong>Blaine Cook:</strong> Não tenho certeza, mas acho que o Twitter tem mais tráfego que o YellowPages ou Scribd — a API é realmente poderosa.</p>
<p><strong>AkitaOnRails:</strong> Ah, entendo. O Alexa e outros não contabilizam requisições de API, né?</p>
<p><strong>Blaine Cook:</strong> O Twitter está hospedado na NTT/Verio. Acho que houve um post no blog sobre isso em fevereiro. Certo, o Alexa não contabiliza tráfego de API/SMS/XMPP.</p>
<p>Quanto à perspectiva de que Rails não escala — acho que é um efeito colateral infeliz dos problemas do Twitter, com certeza, e acho que algumas pessoas se preocupam com isso. Para contextualizar, porém, o Friendster foi escrito em Java inicialmente e migrou para PHP. O Myspace foi escrito em ColdFusion e migrou para ASP.NET.</p>
<p>Quando as pessoas têm problemas ao escalar sites frequentemente pensam que a linguagem é o problema, mas acho que raramente é o caso.</p>
<p>Ruby é mais lento que PHP ou Java (dependendo de qual framework você usa) ou, bem, a maioria das linguagens, mas está ficando mais rápido. E &ldquo;mais lento&rdquo; se traduz apenas em custo adicional.</p>
<p><strong>AkitaOnRails:</strong> O que me lembra da última controvérsia: o <a href="http://www.techcrunch.com/2008/05/01/twitter-said-to-be-abandoning-ruby-on-rails/"target="_blank" rel="noopener">Twitter abandonando Rails</a>. O fato é que você já tem um ambiente misto, certo? A maioria dos pundits acha que &ldquo;sabe&rdquo; resolver os problemas do Twitter, embora não façam ideia do que estão falando. Alguns culpam o Rails, outros culpam o MySQL (<em>&ldquo;vá para Oracle&rdquo;</em>, dizem). Você pode elaborar sobre isso?</p>
<p><strong>Blaine Cook:</strong> Certo — a maior parte do nosso desenvolvimento era em Ruby/Rails, mas havia código em outras linguagens. Python, Java, e alguns experimentos com Scala. O que ignora o fato de que rodávamos partes significativas da nossa infraestrutura com código não-Ruby — Apache, Mongrel, MySQL, memcached, ejabberd, etc., são todas aplicações excelentes e críticas para construir sites escaláveis.</p>
<p>O Oracle definitivamente tem algumas dessas coisas resolvidas, mas é muito mais fácil contratar para MySQL, e as taxas de licenciamento e suporte do Oracle não são de se desprezar.</p>
<p>Construir sua arquitetura em torno de um sistema que só vai ficar mais barato com o tempo, em vez de mais caro, é sempre uma boa ideia.</p>
<p><strong>AkitaOnRails:</strong> E tenho que perguntar: você pode divulgar alguns números significativos, ou ordens de grandeza, como tweets por dia, tempo médio de inatividade, ou algo assim, só para termos uma ideia do tamanho dos problemas do Twitter? Vindo de alguém que de fato teve que lidar com uma situação tão enorme — que a maioria das pessoas provavelmente nunca vai enfrentar —, o que você diria serem as melhores funcionalidades do Ruby/Rails para você?</p>
<p><strong>Blaine Cook:</strong> Infelizmente, não — há muitas estimativas na web, mais notavelmente o compete e os números de fan-out do Dave Winer.</p>
<p>Acho que o melhor recurso do Ruby é que é <strong>divertido de desenvolver</strong> com ele. E nunca deixa de ser divertido. É uma linguagem expressiva e poderosa. O Rails torna o desenvolvimento web indolor, comparado a fazer tudo na mão. Isso é algo que não deveria ser subestimado, ou cujo valor deveria ser esquecido.</p>
<p>Além disso, são muito flexíveis. Precisávamos construir uma ferramenta de denormalização, por exemplo, e fazer isso em Ruby era tão fácil/difícil quanto em qualquer outra linguagem, exceto na hora de integrá-la ao restante do sistema — sem busca e substituição, sem subclasses nem nada. É só ligar e funciona.</p>
<p><a href="http://www.flickr.com/photos/niallkennedy/440202833/"target="_blank" rel="noopener"><img src="http://s3.amazonaws.com/akitaonrails/assets/2008/6/17/440202833_77152b8080.jpg" alt=""  loading="lazy" /></a></p>
<p><strong>AkitaOnRails:</strong> Por fim, você pode nos contar por que saiu do Twitter? Quais são seus novos projetos? O Twitter sobreviveu à WWDC da semana passada, o que é muito, considerando que eventos tão grandes costumavam derrubá-lo no passado.</p>
<p><strong>Blaine Cook:</strong> Estou me mudando para o Reino Unido, e o Twitter entrou/está entrando numa fase em que o foco principal é confiabilidade. Quando saí, a esperança era que o sistema estava estabilizado e o roadmap estava claro para colocá-los em melhor posição. Na época, eles tinham tido um período prolongado de uptime ininterrupto e haviam sobrevivido com louvor à <a href="http://sxsw.com/"target="_blank" rel="noopener">SXSW</a>. Infelizmente não durou, mas parece que as coisas estão melhores de novo.</p>
<p>Ainda não estou pronto para revelar o que vem a seguir, mas tenho várias coisas empolgantes acontecendo. Vou continuar mantendo o Starling e o <a href="http://code.google.com/p/xmpp4r-simple/"target="_blank" rel="noopener">xmpp4r-simple</a>, e ainda estou ativo no grupo de trabalho da especificação OAuth.</p>
<p><strong>AkitaOnRails:</strong> No fim das contas, o Twitter já se tornou quase parte da nossa cultura (pelo menos no nosso mundo tech). As pessoas reclamam quando cai porque agora dependem tanto dele. Pessoas como Michael Arrington, Robert Scoble, Leo Laporte vivem reclamando, dizendo que vão migrar para Pownce ou Jaiku, mas continuam lá. Você tem algum palpite de por que os usuários do Twitter são tão fiéis?</p>
<p><strong>Blaine Cook:</strong> Não! Acho que o rico ecossistema de ferramentas que você pode usar para interagir com o Twitter nos seus próprios termos é uma grande parte disso. Muitos usuários têm um investimento pessoal e querem ver esse investimento retornar.</p>
<p><strong>AkitaOnRails:</strong> Ok, acho que cobrimos tudo. Alguma consideração final para nossa jovem comunidade Rails brasileira?</p>
<p><strong>Blaine Cook:</strong> A web é notavelmente jovem, e há muito espaço para acontecerem coisas incríveis. Fico sempre animado ao ver o que as pessoas estão construindo e o que é possível com essa coisa toda chamada Internet. Com todos os comentários mesquinhos e desinformados do Arrington, acho que sites como Techcrunch, <a href="http://www.mashable.com"target="_blank" rel="noopener">Mashable</a> e <a href="http://www.alleyinsider.com"target="_blank" rel="noopener">Silicon Alley Insider</a> são interessantes porque apresentam um fluxo interminável de coisas incríveis que as pessoas estão construindo na web.</p>
<p>O foco financeiro é infeliz, já que há muitos apps que sobrevivem e proporcionam renda para seus criadores sem precisar escalar para proporções galácticas.</p>
<p>O ponto principal é que há muito a fazer, e não se preocupe com escalabilidade ou modelo de negócios ou qualquer coisa — a menos que você seja apaixonado pelo que está fazendo, nada disso importa.</p>
<p>Se você é apaixonado pelo que está fazendo, há uma boa chance de você descobrir os detalhes no caminho.</p>
<p><strong>AkitaOnRails:</strong> Fantástico! Muito obrigado pela sua gentileza, tenho certeza que minha audiência vai adorar. E só para você saber: nós, brasileiros, <strong>tweetamos</strong> muito sim! :-) Valeu!</p>
<p><strong>Blaine Cook:</strong> Que ótimo! Não foi nada, obrigado por ser um ótimo entrevistador.</p>
<p><a href="http://www.flickr.com/photos/briandewitt/2300104137/"target="_blank" rel="noopener"><img src="http://s3.amazonaws.com/akitaonrails/assets/2008/6/17/2300104137_96c83ac13d.jpg" alt=""  loading="lazy" /></a></p>
]]></content:encoded><category>entrevistas</category><category>performance</category><category>sistemas-distribuidos</category></item><item><title>Conversando com Hongli Lai e Ninh Bui (Phusion)</title><link>https://akitaonrails.github.io/2008/05/06/conversando-com-hongli-lai-e-ninh-bui-phusion/</link><guid isPermaLink="true">https://akitaonrails.github.io/2008/05/06/conversando-com-hongli-lai-e-ninh-bui-phusion/</guid><pubDate>Tue, 06 May 2008 21:39:00 -0300</pubDate><description>&lt;p&gt;&lt;img src="http://s3.amazonaws.com/akitaonrails/assets/2008/5/7/Picture_4.png" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Hongli Lai&lt;/strong&gt; e &lt;strong&gt;Ninh Bui&lt;/strong&gt;, da Phusion, sacudiram o mundo Rails alguns dias atrás. Eles lançaram o Santo Graal do deploy Rails: o &lt;strong&gt;mod_rails&lt;/strong&gt;, recebido com muito entusiasmo — e merecidamente.&lt;/p&gt;
&lt;p&gt;Eles finalmente resolveram o grande problema que &lt;a href="http://www.rubyinside.com/no-true-mod_ruby-is-damaging-rubys-viability-on-the-web-693.html"target="_blank" rel="noopener"&gt;envergonhava&lt;/a&gt; os Railers no passado. Isso também vai aliviar dezenas de serviços de hospedagem que não faziam ideia de como resolver essa equação. Agora, esses dois estudantes de ciência da computação estão acima de todos com essa solução inteligente. E ainda têm mais por vir.&lt;/p&gt;</description><content:encoded><![CDATA[<p><img src="http://s3.amazonaws.com/akitaonrails/assets/2008/5/7/Picture_4.png" alt=""  loading="lazy" /></p>
<p><strong>Hongli Lai</strong> e <strong>Ninh Bui</strong>, da Phusion, sacudiram o mundo Rails alguns dias atrás. Eles lançaram o Santo Graal do deploy Rails: o <strong>mod_rails</strong>, recebido com muito entusiasmo — e merecidamente.</p>
<p>Eles finalmente resolveram o grande problema que <a href="http://www.rubyinside.com/no-true-mod_ruby-is-damaging-rubys-viability-on-the-web-693.html"target="_blank" rel="noopener">envergonhava</a> os Railers no passado. Isso também vai aliviar dezenas de serviços de hospedagem que não faziam ideia de como resolver essa equação. Agora, esses dois estudantes de ciência da computação estão acima de todos com essa solução inteligente. E ainda têm mais por vir.</p>
<p>Tive a sorte de conseguir entrevistá-los. Acho que esta é a segunda entrevista — a InfoQ furou a notícia com esta outra <a href="http://www.infoq.com/news/2008/04/phusion-passenger-mod-rails-gc"target="_blank" rel="noopener">entrevista</a>, que recomendo muito para entender melhor os mecanismos internos do Passenger. Eles são muito tranquilos e foi um prazer conversar com eles.</p>
<p><img src="http://s3.amazonaws.com/akitaonrails/assets/2008/5/7/Picture_3.png" alt=""  loading="lazy" /></p>
<p><strong>AkitaOnRails:</strong> Acho que a primeira coisa que gostaria de saber são os seus históricos. O que veio primeiro? <a href="http://www.modrails.com/"target="_blank" rel="noopener">mod_rails</a> ou <a href="http://www.phusion.nl"target="_blank" rel="noopener">Phusion</a>? Ou seja, vocês tinham uma empresa chamada Phusion que acabou desenvolvendo mod_rails, ou foi o mod_rails que motivou a criação do negócio?</p>
<p><strong>Phusion:</strong> Bem, como você provavelmente já leu, somos ambos estudantes de ciência da computação na <a href="http://www.utwente.nl/en/"target="_blank" rel="noopener">Universidade de Twente</a> e estamos atualmente nas etapas finais para concluir nossos bacharelados. Desde o início, já inferíamos que o estudo não pode te ensinar tudo, então ao longo dos anos também fizemos muito trabalho tanto comercialmente quanto para a comunidade open source.</p>
<p>Depois de nos familiarizarmos com as habilidades, filosofias e traços pessoais um do outro e com base em nossa experiência anterior trabalhando em TI, achamos que seria uma boa ideia combinar nossas forças em uma empresa que pudéssemos chamar de nossa, e assim surgiu a Phusion.</p>
<p>Então a Phusion veio antes do Passenger (mod_rails). Mais especificamente, nossa intenção era criar uma empresa que fornecesse estritamente produtos, ideias e serviços de TI de primeira linha para apoiar os negócios de nossos clientes. Passenger, coincidentemente, acaba sendo nosso primeiro produto, e pelo que temos ouvido tanto da comunidade quanto das empresas, parece estar perfeitamente alinhado com a filosofia da nossa empresa.</p>
<p>Além disso, depois de anos de desenvolvimento (web) em outras linguagens/frameworks como PHP, J2EE, ASP.NET etc., chegamos a realmente apreciar Ruby on Rails. Achamos que é realmente elegante e fácil de usar. Infelizmente o deploy parecia estar fora de linha com o resto da experiência Rails, especialmente a parte de convenção sobre configuração. É por isso que criamos o Passenger: queremos que a experiência de deploy seja igualmente tranquila.</p>
<p><strong>AkitaOnRails:</strong> Phusion é uma empresa de consultoria ou uma empresa de produto? Agora vocês lançaram um dos projetos mais interessantes do mundo Rails até agora, que é o mod_rails. Agora vocês estão preparando o lançamento do Ruby Enterprise Edition. Algum produto novo no pipeline que possam nos contar?</p>
<p><strong>Phusion:</strong> Bem, a Phusion é primariamente uma empresa orientada a serviços e achamos que nossa declaração de missão responde melhor a essa pergunta:</p>
<p><em>&ldquo;Fornecer exclusivamente produtos, serviços e ideias de primeira linha, a fim de apoiar os negócios de nossos clientes.&rdquo;</em></p>
<p>Se os negócios de nossos clientes exigirem consultoria, também somos capazes de fornecer isso, uma vez que temos alguns anos de experiência nessa linha de negócios específica.</p>
<p><img src="http://s3.amazonaws.com/akitaonrails/assets/2008/5/7/Picture_1.png" alt=""  loading="lazy" /></p>
<p>Para alcançar essa missão, é crucial para nós sermos bem versados em uma variedade de habilidades e estamos bem cientes do ditado <em>&ldquo;pau para toda obra, mestre em nenhuma&rdquo;</em>. É por essa razão que nossa equipe é composta apenas de pessoas altamente qualificadas das áreas da indústria que são de particular interesse para os negócios de nossos clientes. O leitor provavelmente notará que isso permite uma configuração dinâmica na organização, além de manter o trabalho desafiador: não acreditamos em <a href="http://thedailywtf.com/Articles/Up-or-Out-Solving-the-IT-Turnover-Crisis.aspx"target="_blank" rel="noopener">manter pessoas por tempo indefinido sem razões racionais</a>, então é crucial que nossos funcionários continuem aprendendo dentro da nossa organização (daí o apelido, <em>&ldquo;a empresa de ciência da computação&rdquo;</em>). Isso não só abre muitas portas no lado da inovação, mas também resulta em pessoas se tornando mestres em várias áreas. Então <em>&ldquo;pau para toda obra, mestre em nenhuma&rdquo;</em> pode ser verdade, mas acreditamos que <em>&ldquo;mestre em muitas áreas&rdquo;</em> pode ser igualmente verdade. Desnecessário dizer que isso é crucial, pois ciência da computação e TI cobrem uma área tão vasta, e isso é particularmente verdade para os negócios de nossos clientes.</p>
<p>Ruby Enterprise Edition foi na verdade concebido como resultado do Passenger: ele se esforça para reduzir dramaticamente o uso de memória de aplicações Ruby on Rails executadas através do Passenger.</p>
<p>Quanto a novos produtos, atualmente estamos trabalhando em alguns serviços web baseados em assinatura. Nosso amigo David Heinemeier Hansson recentemente deu uma palestra sobre startups que elabora sobre as razões pelas quais alguém gostaria de seguir esse caminho. Recomendamos muito ao leitor <a href="http://www.justin.tv/hackertv/97862/DHH_Talk__Startup_School_2008"target="_blank" rel="noopener">conferir isso</a> e, por razões estratégicas, gostaríamos de deixar por aqui por ora.</p>
<p><img src="http://s3.amazonaws.com/akitaonrails/assets/2008/5/7/2400947055_2ce7bcf70b.jpg" alt=""  loading="lazy" /><br>
Hongli Lai</p>
<p><strong>AkitaOnRails:</strong> Por muito tempo toda a comunidade Rails estava um tanto confortável demais com a solução Mongrel. Quando Zed Shaw fez seu rant sobre a comunidade, foi um alerta e a partir daí vimos alternativas surgindo da noite para o dia como Thin e Ebb. O que vocês acharam dessa situação na época?</p>
<p><strong>Phusion:</strong> Pelo que entendemos, soluções como Mongrel, Thin e Ebb se enquadram na mesma categoria conceitual. Ou seja, para o usuário final, funcionam de maneira similar, mesmo sendo tecnicamente diferentes. Em outras palavras, Thin e Ebb parecem ser como <em>&ldquo;Mongrel, mas mais rápido/menor&rdquo;</em>.</p>
<p>No entanto, o Passenger adotou uma abordagem de deploy diferente do Mongrel e afins: pretende tornar o deploy o mais simples possível e reduzir ao máximo o overhead de manutenção do sistema. Por exemplo, enquanto o Passenger lida com isso automaticamente, Mongrel, Thin e Ebb exigem que o administrador gerencie clusters. Como você disse, os mais técnicos já se familiarizaram bastante com a última abordagem, mas também é preciso levar em conta os iniciantes. Para eles, é um obstáculo considerável simplesmente fazer o deploy de uma aplicação. Se considerarmos os históricos desses iniciantes, muitos deles provavelmente já estão familiarizados com a forma de deploy do PHP, ou seja, de upload-and-go. Com o Passenger tentamos acomodar essas pessoas, pois achamos que isso é importante para o crescimento do mercado Ruby on Rails. Isso não quer dizer, no entanto, que não levamos em conta questões como robustez, performance e estabilidade.</p>
<p>De fato, testes independentes já mostraram que o Passenger está em paridade ou é mais rápido do que as soluções mencionadas. Outro problema é que os hosts compartilhados já estão rodando Apache como seu principal servidor web, e já vimos que configuração é necessária para colocar um cluster Mongrel funcionando com Apache&hellip; Desnecessário dizer que isso é bastante tedioso e propenso a erros, mesmo para muitos técnicos. O Passenger literalmente reduz esse processo para questão de segundos em vez de minutos. Isso não só economizaria muito tempo de uma empresa de hospedagem, mas também manteria seus administradores de servidor sãos (e pela nossa <a href="http://blog.dreamhost.com/2008/01/07/how-ruby-on-rails-could-be-much-better/"target="_blank" rel="noopener">experiência</a>, eles são as últimas pessoas que você quer ofender ;-)).</p>
<p>Além disso, configurar um cluster tipo Mongrel requer bastante recursos em um host compartilhado, e é por razões como essas que os custos dos planos de hospedagem compartilhada de Ruby on Rails são geralmente mais altos do que os de hosts PHP. O Passenger, no entanto, aborda esse problema também ao fornecer eficiência melhorada em relação às soluções mencionadas, especialmente em conjunto com o Ruby Enterprise Edition. Testes iniciais já mostraram que isso resultou em uma redução dramática no uso de memória e elaboraremos sobre isso em breve.</p>
<p>Se considerarmos esses fatores, fica evidente que o Passenger (em conjunto com o Ruby Enterprise Edition) tem o potencial de desencadear uma revolução na hospedagem compartilhada. Não só na redução de custos para empresas de hospedagem (e esperançosamente para os consumidores), mas também no aumento da popularidade do Ruby on Rails.</p>
<p><strong>AkitaOnRails:</strong> mod_ruby parece estar estagnado há muito tempo e precisa de carinho. Dizem que funciona razoavelmente bem para sites pequenos, mas a muita &ldquo;magia negra&rdquo; do Rails o torna inadequado para mod_ruby. O que torna mod_rails diferente de mod_ruby, na forma fundamental como operam com frameworks complexos como Rails?</p>
<p><strong>Phusion:</strong> Na verdade não conseguimos comentar sobre isso, porque não somos intimamente familiarizados com mod_ruby. No entanto, o mod_ruby não é mantido ativamente e há muitos comentários negativos sobre ele em geral (como na wiki do Ruby on Rails). Também parece que ninguém realmente o usa. É por essas razões que nunca realmente experimentamos o mod_ruby.</p>
<p>Do mencionado acima e do que as pessoas costumam esquecer é que entregar apenas um produto (excelente) não é suficiente. Marketing e promoção são realmente importantes para a aceitação de um produto. Não só fizemos muito desenvolvimento, mas também passamos muito tempo promovendo o Passenger. O fato de estarmos tendo esta entrevista agora é provavelmente o resultado de nossa campanha de promoção, então estamos bastante satisfeitos com isso. Nesse sentido, o mod_ruby não parece ser ativamente promovido, e talvez seja uma das razões pelas quais é relativamente desconhecido.</p>
<p><strong>AkitaOnRails:</strong> Por que vocês acham que demorou tanto para alguém criar uma solução para um módulo Apache que pudesse operar de forma similar ao habitual mod_php ou mod_python? O que vocês acharam que foi o aspecto mais desafiador no desenvolvimento do mod_rails?</p>
<p><strong>Phusion:</strong> Bem, como você disse, acreditamos que desenvolvedores experientes de Ruby on Rails não consideram o deploy um problema — no máximo chato. Eles automatizaram/padronizaram bastante o processo de deploy com scripts Capistrano. Os iniciantes, no entanto, veem o deploy como um problema intransponível. Consequentemente, acabamos numa situação em que as pessoas que podem resolver o problema ou não o veem como problema ou não estão motivadas o suficiente para corrigi-lo, enquanto as pessoas que veem o problema não conseguem resolvê-lo.</p>
<p>Além disso, por nossas experiências pessoais, os iniciantes geralmente querem ver resultados imediatos. É muito desmotivador para essas pessoas continuar usando Ruby on Rails se tiverem que gerenciar toneladas de configurações e clusters obscuros para <em>&ldquo;simplesmente fazer o deploy de uma aplicação com sucesso&rdquo;</em>. Isso leva a conclusões muito inteligentes, como &ldquo;Ruby on Rails é uma porcaria&rdquo;. ;-)</p>
<p>O aspecto mais desafiador é provavelmente o suporte multiplataforma e para elaborar isso em poucas palavras:</p>
<ul>
<li>Precisamos suportar uma grande variedade de sistemas baseados em Unix, como Linux, BSD e OS X. O Passenger trabalha em um nível bastante baixo (ou seja, usa recursos avançados do sistema Unix), e diferentes sistemas tendem a se comportar de formas sutilmente diferentes de tal forma que podem quebrar o Passenger se não formos cuidadosos.</li>
<li>Muitos desafios são criados pelo MacOS X e pelo Apache. Há literalmente toneladas de maneiras diferentes pelas quais o Apache pode ser compilado e instalado, e isso é especialmente verdade no MacOS X. Cada instalação do Apache pode ser ligeiramente diferente, e precisamos suportar todas elas. Tivemos que escrever centenas de linhas de código de auto-detecção do Apache para tornar a instalação o mais tranquila possível. E o suporte para coisas específicas do OS X como binários universais não tornou o desafio mais fácil.</li>
</ul>
<p><img src="http://s3.amazonaws.com/akitaonrails/assets/2008/5/7/134717629_6_Q1hc.jpeg" alt=""  loading="lazy" /><br>
Ninh Bui</p>
<p><strong>AkitaOnRails:</strong> A abordagem habitual de Shared Hosting com Rails envolve FastCGI; acho que é aí que mod_rails vai causar o maior impacto primeiro. Na arena de VPS, as pessoas geralmente estão mais confortáveis apenas subindo um cluster mongrel, talvez um monit ou god para monitorá-los ou até mesmo usar Swiftply para melhor controlar as instâncias mongrel. Há algum ajuste envolvido em ter interpretadores Ruby permanentes rodando, isso se deve principalmente ao fato de que se em algum momento a VM precisar de mais memória, ela vai alocar o quanto precisar, mas não devolver de volta ao SO. O mod_rails tem algum mecanismo para evitar um sistema de monitoramento como Monit, ou ele ainda é necessário?</p>
<p><strong>Phusion:</strong> Levamos esse desafio em conta também. Aplicações Rails que ficaram ociosas por um tempo são desligadas, liberando todos os seus recursos para o sistema operacional. Além disso, é possível usar o Passenger em conjunto com ferramentas de monitoramento como Monit. Se o Monit matar um processo Rails, o Passenger automaticamente o (re)iniciará quando necessário, como se nada de ruim tivesse acontecido.</p>
<p><strong>AkitaOnRails:</strong> Entendo que mod_rails opera mais ou menos como um gerenciador para um pool de VMs Ruby. Você tem um número mínimo e máximo de processos permitidos, mod_rails inicia tantos quanto necessário dependendo da carga e se um processo estiver ocioso, ele o matará após um período de timeout. Na maior parte do tempo, uma quantidade mínima de processos ficará rodando. É assim que funciona?</p>
<p><strong>Phusion:</strong> É como você descreve, com a exceção de que não existe tal coisa como uma quantidade mínima de processos. O motivo para isso é que, uma vez que uma aplicação para um certo diretório Rails é iniciada, esse processo de aplicação não pode ser reutilizado para um diretório Rails diferente. Isso torna o conceito de uma quantidade mínima bastante inútil, exceto em servidores que hospedam apenas uma única aplicação Rails.</p>
<p>Claro, não ter uma quantidade mínima de processos significa que a primeira requisição após o timeout de ociosidade sofrerá uma penalidade de performance e será lenta. Resolvemos esse problema usando servidores spawner. Os servidores spawner fazem cache do código do framework Ruby on Rails e do código da aplicação, e podem reduzir o tempo de spawn em aproximadamente 50% e 90%, respectivamente. Você pode ter notado esses processos de servidor spawner na saída do &lsquo;ps&rsquo;. O segredo para reduzir o tempo de spawn estaria em alterar os timeouts de ociosidade desses servidores spawner. Atualmente estamos trabalhando em uma série de artigos em que elaboramos sobre os tempos de spawn das aplicações Rails, quais são os papéis exatos dos servidores spawner e como os administradores de sistema podem otimizar as configurações do servidor para reduzir o tempo de spawn.</p>
<p>Boa parte da mágica que reside no Passenger ainda precisa ser revelada e mal começamos, mas isso é principalmente para as pessoas interessadas, ou seja, os mais técnicos. Há um ditado em holandês que resume o pensamento por trás de por que não fizemos isso até agora: <em>&ldquo;Goede wijn behoeft geen krans&rdquo;</em>, que se traduz aproximadamente como &ldquo;um bom produto não precisa de elaboração de apoio&rdquo;. Uma publicação científica, por outro lado, precisa desse tipo de elaboração e é também por essa razão que estamos escrevendo esses artigos.</p>
<p><strong>AkitaOnRails:</strong> Ficando no mesmo espaço de memória que o próprio Apache, você não tem o overhead de uma chamada FastCGI ou HTTP para uma instância mongrel. Essa diferença pesa muito nos seus benchmarks? Geralmente, pela sua experiência, quanto mais rápido é mod_rails agora comparado a um cluster mongrel básico rodando as mesmas aplicações? Os ganhos de velocidade são constantes ou variam o suficiente para não serem realmente mensuráveis?</p>
<p><strong>Phusion:</strong> Na verdade isso não é verdade: os processos Rails não residem no mesmo espaço de memória do Apache. Em vez disso, são realmente processos separados, cada um podendo ser individualmente desligado sem afetar todos os outros. Não é uma boa ideia embutir um interpretador Ruby no Apache por causa de vários problemas, como estabilidade, fragmentação de heap e inchaço desnecessário do tamanho de VM de um processo. Pelo que entendemos, o mod_ruby adota a abordagem de embutir Ruby dentro do Apache, e suspeitamos que esse seja um dos motivos pelos quais as pessoas relatam tantos problemas com ele.</p>
<p>Nossos próprios testes mostraram que a performance do Passenger é mais rápida do que um cluster Mongrel atrás de Apache+mod_proxy_balancer. Testes independentes mostraram que a performance do Passenger está em paridade ou é ligeiramente mais rápida do que o cluster Mongrel, e isso parece estar perfeitamente alinhado com o que fomos capazes de inferir. Até agora não vimos nenhum teste em que o Passenger seja mais lento que um cluster Mongrel. Os ganhos de velocidade não são constantes: dependem da aplicação específica.</p>
<p><img src="http://s3.amazonaws.com/akitaonrails/assets/2008/5/7/2400947461_dfa24d2212.jpg" alt=""  loading="lazy" /><br>
Galera da Phusion no <a href="http://www.fngtps.com"target="_blank" rel="noopener">Fingertips</a></p>
<p><strong>AkitaOnRails:</strong> Ruby Enterprise Edition, pelo que entendo, é o resultado daquela série sobre &ldquo;copy-on-write&rdquo; da qual falamos. Essencialmente uma forma de patchear a VM Ruby para habilitar um GC modificado que não vai marcar cada objeto, permitindo assim que COW faça seu trabalho e economize uma quantidade considerável de memória. Você citou 33%. Assumiria que é &ldquo;até 33%&rdquo;, certo? Qual é o intervalo usual de memória economizada que vocês experimentam nos seus testes? O que mais afeta isso em apps Rails típicos, algum gotcha que vale mencionar para desenvolvedores Rails?</p>
<p><strong>Phusion:</strong> Os 33% mencionados não são um máximo, mas uma média. Testamos com aplicações reais como Typo, e até agora inferimos uma economia média de memória de 33%. A economia real de memória depende da aplicação específica, então os resultados podem variar.</p>
<p>Não há gotchas para desenvolvedores de aplicações. Se sua aplicação funciona com Passenger, então Ruby Enterprise Edition também vai funcionar, sem necessidade de opções complicadas de configuração. Em outras palavras, é um aumento transparente. Em qualquer caso, podemos garantir que o uso de memória não será maior do que quando você usa o Ruby padrão.</p>
<p><strong>AkitaOnRails:</strong> Entendo que vocês vão falar mais sobre a Enterprise Edition na RailsConf, mas esperava que pudessem revelar um pouco mais sobre ela. Vocês estão terminando a segunda rodada de doações para licenças Enterprise (eu doei! :-). Em primeiro lugar: quando vão lançá-la? Esse produto vai ficar comercial apenas ou vocês pretendem contribuir o patch do GC de volta ao trunk do Ruby algum dia?</p>
<p><strong>Phusion:</strong> Obrigado por doar, e quanto ao último ponto: sim, é nossa intenção que um dia seja incorporado upstream. O leitor atento provavelmente vai notar que desviamos de uma pergunta como Neo desviou das balas do Agente Smith na Matrix: habilidosamente, exceto pela última bala, que na verdade acertou — mas chega disso por ora ;-).</p>
<p><strong>AkitaOnRails:</strong> &ldquo;mod_rails&rdquo; é na verdade o alias para &ldquo;Passenger&rdquo;. Algumas pessoas estão perguntando se isso vai continuar sendo apenas para Rails ou se vocês pretendem torná-lo compatível com Rack para que outros frameworks como Merb e Ramaze possam rodar sob seu controle. É possível? Vocês estão considerando?</p>
<p><strong>Phusion:</strong> Digamos apenas que preferiríamos que você o chamasse de Passenger em vez de apenas mod_rails eventualmente. ;-)</p>
<p><strong>AkitaOnRails:</strong> Apache é a potência dos servidores web e faz muito sentido para um módulo Apache. Talvez esteja especulando demais, mas vocês acham que é possível refatorá-lo para módulos de outros servidores web como nGinx ou Litespeed? Por causa da falta de um bom mod_rails no passado, a comunidade Rails se afastou para outras alternativas. É razoável esperar módulos não-Apache?</p>
<p><strong>Phusion:</strong> É tecnicamente possível. Para manter vocês em suspense e continuar especulando sobre essas questões, não vamos nos aprofundar nisso por enquanto. ;-)</p>
<p><img src="http://s3.amazonaws.com/akitaonrails/assets/2008/5/7/2401777262_a7fa751c79.jpg" alt=""  loading="lazy" /><br>
Passenger sendo instalado!</p>
<p><strong>AkitaOnRails:</strong> Do jeito que está agora, parece que mod_rails é um substituto plug-and-play para qualquer estratégia que tínhamos antes usando Apache. Há algum gotcha que vale mencionar para quem planeja migrar? Acho que regras mod_rewrite complicadas seriam a primeira coisa?</p>
<p><strong>Phusion:</strong> Há um gotcha menor. Por padrão, sobrescrevemos o mod_rewrite da melhor forma possível. Isso ocorre porque projetos Rails vêm com um arquivo .htaccess por padrão, e esse .htaccess contém regras mod_rewrite que resultam em todas as requisições sendo encaminhadas para CGI ou FastCGI.</p>
<p>Isso é trivialmente resolvido deletando o .htaccess padrão e habilitando uma opção de configuração que diz ao Passenger para não sobrescrever o mod_rewrite. Isso permite que o desenvolvedor use regras mod_rewrite arbitrárias a seu gosto.</p>
<p>Além disso, o gotcha restante seria que o deploy de Rails se tornou bem entediante graças ao Passenger, pelo menos é o que as pessoas dizem. ;-)</p>
<p>Por fim, gostaríamos de agradecer a todos vocês pelo amor e suporte (financeiro) ao Passenger. Realmente apreciamos!</p>
<p>Com os melhores cumprimentos, seus amigos da Phusion,</p>
<p>Hongli Lai</p>
<p>Ninh Bui</p>
]]></content:encoded><category>entrevistas</category><category>rails</category><category>devops</category></item><item><title>Conversando com Chris Wanstrath (Err the Blog/Github)</title><link>https://akitaonrails.github.io/2008/04/21/conversando-com-chris-wanstrath-err-the-blog-github/</link><guid isPermaLink="true">https://akitaonrails.github.io/2008/04/21/conversando-com-chris-wanstrath-err-the-blog-github/</guid><pubDate>Mon, 21 Apr 2008 19:12:00 -0300</pubDate><description>&lt;p&gt;Chris é um cara muito acessível e tranquilo, e bastou pegá-lo pelo AIM para a entrevista começar de cara. Para quem nunca ouviu falar de &lt;strong&gt;Chris Wanstrath&lt;/strong&gt;, ele é também conhecido pelo Err the Blog e, mais recentemente, como um dos caras por trás do fenômeno &lt;strong&gt;Github&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Ele respondeu tudo com riqueza de detalhes e conversamos bastante sobre seus projetos open source, performance, escalabilidade e, claro, muito sobre Git e Github. Espero que isso deixe as pessoas ainda mais animadas com o ritmo em que a comunidade Ruby/Rails está movendo as coisas pra frente.&lt;/p&gt;</description><content:encoded><![CDATA[<p>Chris é um cara muito acessível e tranquilo, e bastou pegá-lo pelo AIM para a entrevista começar de cara. Para quem nunca ouviu falar de <strong>Chris Wanstrath</strong>, ele é também conhecido pelo Err the Blog e, mais recentemente, como um dos caras por trás do fenômeno <strong>Github</strong>.</p>
<p>Ele respondeu tudo com riqueza de detalhes e conversamos bastante sobre seus projetos open source, performance, escalabilidade e, claro, muito sobre Git e Github. Espero que isso deixe as pessoas ainda mais animadas com o ritmo em que a comunidade Ruby/Rails está movendo as coisas pra frente.</p>
<p><strong>AkitaOnRails:</strong> Ok, de onde você é?</p>
<p><strong>Chris Wanstrath:</strong> Atualmente moro em San Francisco, mas cresci em Cincinnati, Ohio. Me mudei para San Francisco em 2005 para trabalhar na C|NET, onde fiz PHP por um tempo em sites como <a href="http://gamespot.com"target="_blank" rel="noopener">gamespot.com</a>, <a href="http://mp3.com"target="_blank" rel="noopener">mp3.com</a> e <a href="http://tv.com"target="_blank" rel="noopener">tv.com</a>.</p>
<p>Em 2006 me mudei para o site <a href="http://chowhound.com"target="_blank" rel="noopener">chowhound.com</a> dentro da C|NET para trabalhar com Rails, algo que eu vinha fazendo nas horas vagas há um tempo. Enquanto estava lá, <strong>P.J. Hyett</strong> e eu trabalhamos no chowhound.com e depois construímos o <a href="http://chow.com"target="_blank" rel="noopener">chow.com</a>, que lançamos mais tarde naquele ano. Então em abril de 2007 os dois saímos da C|NET para formar nossa empresa de consultoria, Err Free.</p>
<p>Em dezembro de 2007 lançamos o <a href="http://famspam.com/"target="_blank" rel="noopener">FamSpam</a>, um site para manter contato com sua família. É basicamente uma versão simplificada do Google Groups com ênfase em participar de uma thread pelo menos uma vez por semana e encontrar facilmente fotos ou outros arquivos enviados.</p>
<p>Enquanto P.J. e eu trabalhávamos no FamSpam, <strong>Tom Preston-Werner</strong> e eu trabalhávamos no GitHub nas horas vagas. Começamos em outubro trabalhando noites e fins de semana. Queríamos basicamente uma maneira fácil, bonita e cheia de recursos de jogar nossos repositórios Git no ar e compartilhá-los com as pessoas. Conforme fomos nos aprofundando, percebemos como coisas como o dashboard poderiam mudar a forma como lidamos com contribuições open source. Depois disso, todas as funcionalidades sociais começaram a se encaixar. O beta privado do Github foi lançado em janeiro e em abril vimos o lançamento público.</p>
<p><strong>AkitaOnRails:</strong> Uau, cara, você é muito ocupado mesmo. Quero entrar em detalhes em cada tópico que você mencionou, mas primeiro: eu soube que você trabalhava na C|Net por causa das suas palestras sobre memcached. Tenho 2 perguntas: você era programador PHP, o que te fez mudar para Ruby on Rails? E aí, trabalhar para uma rede de alto perfil como a C|Net te expôs a sites muito exigentes. Como você descobriu como aproveitar o memcached com Rails e depois o plugin cache_fu?</p>
<p><strong>Chris Wanstrath:</strong> Comecei a fazer Rails no início de 2005 e peguei meu primeiro emprego com PHP em fevereiro de 2005 (antes disso eu fazia ASP e Perl, sobre os quais prefiro não falar). Então, honestamente, nunca me considerei um &ldquo;programador PHP&rdquo; mais do que um programador Rails. Eu realmente gostava de sites e sabia que podia me pagar fazendo PHP, então foi o que fiz. Enquanto isso, estava constantemente fazendo Ruby nas horas vagas.</p>
<p>Quando a C|Net começou a fazer Rails, soube que seria uma combinação perfeita para mim. Eu gostava muito de PHP e adorava Gamespot, mas era simplesmente absurdo passar a noite inteira brincando com Ruby enquanto trabalhava profissionalmente com PHP.</p>
<p>Na verdade, uma das coisas que me contrataram no Gamespot foi meu parser de yaml em PHP puro chamado <a href="http://spyc.sourceforge.net/"target="_blank" rel="noopener">SPYC</a> (simple PHP yaml class). Foi inspirado (obviamente) no parser syck yaml do _why. Eu queria uma forma fácil, sem extensões, de lidar com YAML em PHP porque estava muito mimado pelo Ruby.</p>
<p>Acho que hoje os frameworks CakePHP e Symfony o usam e fazem suas configurações em yaml. Mas mesmo escrevendo PHP eu queria estar escrevendo Ruby. O motivo principal pelo qual aprendi Ruby foi que eu conhecia PHP e Perl, mas queria algo que pudesse usar tanto para escrever sites quanto scripts de linha de comando. Perl era ótimo para scripts e PHP era ótimo para sites, mas eu estava simplesmente cansado de usar os dois.</p>
<p>Então enquanto estava aprendendo Python, o Rails apareceu.</p>
<p>Quanto ao <a href="http://errtheblog.com/posts/57-kickin-ass-w-cachefu"target="_blank" rel="noopener">cache_fu</a>, eu tinha muito interesse nos aspectos de &ldquo;escalabilidade&rdquo; de manter um site enquanto trabalhava no Gamespot.</p>
<p>Embora bom design OOP e afins possam ser aprendidos por qualquer um que escreva código suficiente, não dá para aprender sobre escalabilidade a não ser que você esteja trabalhando em um site grande. Há truques demais e partes móveis demais, e é muito difícil simular a carga em um ambiente controlado.</p>
<p>Então, enquanto estava no Gamespot, como disse, tentei aprender o máximo possível sobre coisas como replicação MySQL, clustering de bancos de dados, sharding de bancos de dados e memcached com base em como os caras espertos da C|Net configuraram tudo ao longo dos anos. Eles tinham muitas máquinas servindo muito tráfego, então era perfeito.</p>
<p>No Chowhound, estávamos reescrevendo um antigo site HTML estático em Rails e preocupados com a transição de arquivos planos para chamadas de banco de dados dinâmicas e geração de páginas. Tinha um tráfego considerável de um grupo de fãs fanáticos, e sabíamos que o novo visual &ldquo;web 2.0&rdquo; do site não iria agradar os usuários mais antigos, então pelo menos queríamos que o site fosse performático para dar a eles um motivo a menos para reclamar. Então basicamente pegamos muito do que eu aprendi no Gamespot e as informações disponíveis livremente na internet em listas de e-mail e discussões, e tentamos fazer uma forma mais amigável ao Rails de cache de objetos com memcached.</p>
<p>Ruby é tão bom em eliminar repetição e criar APIs amigáveis. Por isso o cache_fu faz cache de fragmentos e cache de objetos, porque em sites maiores você acaba usando ambos para propósitos diferentes, que foi basicamente como era no Gamespot.</p>
<p><strong>AkitaOnRails:</strong> Interessante. E não é muito comum eu encontrar pessoas que lidaram com sites realmente grandes. Você pode nos dar uma ideia de que tipo de carga seus apps Rails tiveram que suportar? Alguns especialistas que conheço reclamam da distribuição vanilla do Rails e recomendam muitos ajustes como abandonar completamente o ActiveRecord e vários outros hacks. Você precisou hackear muito o Rails para atingir a escalabilidade que precisava, ou acha que a maior parte é boa o suficiente para evitar muito tweaking?</p>
<p><strong>Chris Wanstrath:</strong> Não consideraria o Chowhound um grande site Rails mais. Agora que temos scribd, twitter, friends for sale e Yellowpages, o Chowhound não entra mais na lista.</p>
<p>Acabamos fazendo muita otimização prematura naquele site e pouca otimização do mundo real. Aprendi muitas lições lá que apliquei em outros sites pelo caminho. No entanto, recentemente tive a chance de trabalhar com os caras do friends for sale no app deles para Facebook, que recebe milhões de visualizações de página por dia e lida com uma quantidade insana de registros no banco.</p>
<p>Pelo que sei, o único hack no AR que fizemos foi aplicar o patch de atualizações parciais do Pratik Naik. Isso porque, com tantas linhas e índices tão grandes, você quer evitar modificar índices quando não precisa, então salvar apenas as colunas/atributos alterados pode ter um ganho de performance bem grande. Felizmente, as atualizações parciais agora estão no Rails Core.</p>
<p>Na minha experiência, você passa muito mais tempo tentando escalar o SQL antes mesmo de precisar endereçar o AR. E quando chega na parte do AR, geralmente é o código da sua aplicação. Buscar e salvar registros demais em callbacks de before/after_save, gravações de linhas completas como eu acabei de descrever, e geralmente não ser um bom cidadão SQL. Só abandonaria o AR completamente se sentisse que não tinha controle sobre o SQL gerado por ele. O que, como qualquer um sabe, não é o caso — você tem muito controle sobre ele.</p>
<p>Há momentos, no entanto, em que o AR é exagero e você realmente precisa de velocidade. No Github, precisamos autenticar você toda vez que tenta fazer pull ou push de um repositório via ssh. Carregar um ambiente Rails inteiro, ou mesmo o activerecord, era notavelmente lento, então mudamos para usar sequel em um script ruby simples. Como não precisamos do enorme conjunto de funcionalidades do AR e das boas capacidades de OOP para uma busca de linha única tão simples, fez muito sentido para nós.</p>
<p><strong>AkitaOnRails:</strong> Concordo com isso, foi o que experimentei também em relação ao AR. Então, você é também autor de vários outros plugins Rails famosos como will_paginate, Ambition, o original Sexy Migrations. Pode comentar brevemente sobre cada um? Estou esquecendo algum outro plugin? Parte do que você fez se tornou o padrão &ldquo;de facto&rdquo; para desenvolvimento Rails, algumas pessoas aqui usam esses plugins sem realmente saber que você fez todos eles.</p>
<p><img src="http://s3.amazonaws.com/akitaonrails/assets/2008/4/21/113964679_23c106ba1b.jpg" alt=""  loading="lazy" /><br>
<em>P.J Hyett na SXSW'06</em></p>
<p><strong>Chris Wanstrath:</strong> <a href="http://errtheblog.com"target="_blank" rel="noopener">Err the blog</a> são na verdade duas pessoas, P.J. Hyett e eu. Eu não escrevi o <a href="http://errtheblog.com/posts/56-im-paginating-again"target="_blank" rel="noopener">will_paginate</a> — P.J. escreveu a versão original e depois Mislav Marohnić a reescreveu. Mislav é agora o mantenedor. Mas eu ainda fico com todo o crédito, o que me está bem.</p>
<p>Quanto aos outros plugins, há mofo, ambition, sexy migrations, cache_fu, acts_as_textiled, fixture_scenarios_builder e gibberish.</p>
<p><a href="http://errtheblog.com/posts/35-me-and-uformats"target="_blank" rel="noopener">Mofo</a> é um parser de microformatos baseado em Hpricot. Está no Github e infelizmente não recebe tanto carinho meu ultimamente, mas pelo que sei ainda é o padrão ouro para parsing de microformatos em Ruby.</p>
<p>Foi o primeiro gem que lancei que também funcionava como plugin Rails, que é como acho que a maioria dos plugins deveria ser distribuída no futuro. Gems já têm um sistema de distribuição sólido e esquema de versionamento, e se o Github se tornar uma fonte de gems então praticamente não há razão para não lançar plugins como gems.</p>
<p><a href="http://errtheblog.com/posts/51-sexy-migrations"target="_blank" rel="noopener">Sexy migrations</a> foram inspiradas pelo Hobo. Infelizmente a versão deles era específica para Hobo, então escrevi uma versão amigável para plugins. O DHH depois escreveu sua própria versão e incorporou ao core, totalizando 3 implementações distintas de sexy migrations.</p>
<p><a href="http://errtheblog.com/posts/55-ya-talkin-gibberish"target="_blank" rel="noopener">Gibberish</a> é um plugin de localização bem divertido que escrevi <em>pro bono</em> para um cliente, simplesmente porque sentia que as APIs de todos os plugins de localização existentes eram muito difíceis de trabalhar. Esperançosamente, com a ajuda de quem tiver interesse, podemos começar a localizar o Github em breve.</p>
<p><a href="http://errtheblog.com/posts/64-even-more-ambitious"target="_blank" rel="noopener">Ambition</a> foi inspirado por uma incursão no Erlang. Li um post de blog explicando que a sintaxe de consulta do <a href="http://www.infoq.com/news/2007/08/mnesia"target="_blank" rel="noopener">mnesia</a>, que é toda compreensão de listas (basicamente a versão Ruby do módulo Enumerable), foi possibilitada pela capacidade de percorrer a árvore de parse e construir uma consulta mnesia dessa forma.</p>
<p>Então comecei a brincar com o gem parse_tree para ver se conseguia fazer o mesmo para Ruby. Agora é, claro, um framework completo para gerar consultas arbitrárias para qualquer RubyGem baseado em Enumerable. Para consultas simples, realmente gosto de tratar tabelas como arrays — parece muito natural.</p>
<p><a href="http://errtheblog.com/posts/12-actsastextiled"target="_blank" rel="noopener">Acts_as_textiled</a> foi o primeiro plugin Rails que lancei. É uma prova do Rails que o plugin ainda funciona na versão edge hoje. A única outra coisa notável que o Err iniciou é o termo &ldquo;vendor everything&rdquo;, que agora faz parte do Rails através do <a href="http://ryandaigle.com/articles/2008/4/1/what-s-new-in-edge-rails-gem-dependencies"target="_blank" rel="noopener">config.gems</a>.</p>
<p>Isso e o gem <a href="http://errtheblog.com/posts/21-cheat"target="_blank" rel="noopener">Cheat</a> (e o site).</p>
<p><img src="http://s3.amazonaws.com/akitaonrails/assets/2008/4/21/322610984_f5d9e82bda.jpg" alt=""  loading="lazy" /><br>
<em>Tom Preston-Werner</em></p>
<p><strong>AkitaOnRails:</strong> (Claro, me desculpe P.J.!) E isso desperta outra curiosidade minha: de onde veio o nome &ldquo;Err&rdquo;? É tanto para o <a href="http://errtheblog.com/"target="_blank" rel="noopener">Err the Blog</a> quanto para a <a href="http://errfree.com/"target="_blank" rel="noopener">Err Free</a>, que é sua empresa. Você mencionou P.J. e Tom. E vocês três são Railers em tempo integral, certo? Como vocês se uniram e decidiram começar a própria empresa? Muitas pessoas me perguntam sobre empreendedorismo e você é mais um bom exemplo.</p>
<p><strong>Chris Wanstrath:</strong> &ldquo;err&rdquo; é uma espécie de trocadilho com &ldquo;Typo&rdquo;, que era o motor de blogging em Rails mais popular quando começamos nosso blog, então pode ser um pouco confuso, mas na verdade sou cofundador de duas empresas distintas.</p>
<p>Há a <strong>Err Free</strong> e a <strong>Logical Awesome</strong>. Err Free é consultoria e treinamento em Ruby &amp; Rails. P.J. e eu somos donos da empresa, e a usamos para fazer trabalho de cliente, palestras, treinamento corporativo, esse tipo de coisa. Ela também é dona e operadora do FamSpam, que usamos com nossas próprias famílias.</p>
<p>Logical Awesome, no entanto, foi fundada por mim e Tom. Isso porque eu estava desenvolvendo FamSpam com P.J. e GitHub com Tom ao mesmo tempo, separadamente. Hoje, no entanto, P.J. faz parte da Logical Awesome e é um dos desenvolvedores do GitHub.</p>
<p>Tom trabalha na <strong>Powerset</strong> e na verdade não faz muito Rails para o GitHub — ele faz principalmente flash, haxe, C, css, design e ruby. E porque ele é o autor do <a href="http://god.rubyforge.org/"target="_blank" rel="noopener">God</a>, faço ele escrever todos os arquivos de config também. Quanto à decisão de começar uma empresa, sou alguém que precisa estar envolvido em tudo o que faço em todos os níveis. Na C|Net, há um limite de quanto você pode contribuir num site que emprega 30 pessoas, especialmente quando há pessoas dedicadas de produto e &ldquo;visão&rdquo;, enquanto no Github somos apenas eu, Tom e P.J.</p>
<p>Se o site for lento, confuso, ruim ou não melhorar seu fluxo de trabalho, posso assumir responsabilidade por isso. Mas se for rápido, simples, incrível e transformador, também fico com essa responsabilidade. O que é muito gratificante.</p>
<p>Também significa que, quando você é cofundador de uma empresa majoritariamente técnica, as discussões são muito mais lógicas. Vi decisões sendo tomadas na C|Net que contradiziam diretamente estatísticas de A/B que tínhamos coletado. Na Logical Awesome, isso nunca aconteceria. Não é nem lógico nem incrível. Basicamente: queria encontrar a empresa ideal, então encontrei boas pessoas e a fundei.</p>
<p><strong>AkitaOnRails:</strong> Ok, chegamos ao prato principal do dia: o <a href="http://github.com"target="_blank" rel="noopener">Github</a>! Não consigo pensar em melhor exemplo de produto inovador que aproveita tão bem o poder do Git. Estou muito curioso para entender como você teve essa ideia. Ao mesmo tempo, muita gente ainda não consegue entender por que os Railers como um todo começaram a usar Git tão maciçamente de repente. O pessoal do Mercurial e Bazaar está muito desconfortável. O que você acha que o Git tem que atraiu os Railers em bando? Ou pelo menos o que você acha que o Git tem que nenhum outro tem? Comecei a evangelizar Git aqui no Brasil no ano passado depois de ouvir Randall Schwartz, e recentemente alguém me perguntou qual seria minha escolha para um killer-app Rails e Github me veio à mente imediatamente. Então você tem boa presença mental também.</p>
<p><a href="http://github.com"target="_blank" rel="noopener"><img src="http://s3.amazonaws.com/akitaonrails/assets/2008/4/21/Picture_1.png" alt=""  loading="lazy" /></a></p>
<p><strong>Chris Wanstrath:</strong> Github é super emocionante para mim porque é realmente um site feito para mim. Tom e eu somos bem parecidos no sentido de que ambos temos uma quantidade considerável de projetos open source, todos usados e corrigidos por pessoas que nunca conhecemos.</p>
<p>Lidar com isso do jeito antigo estava bom até que eu e P.J. começamos a trabalhar no FamSpam&hellip; à medida que meu tempo livre diminuía, minha capacidade de manter meus projetos open source diminuía também. E isso é definitivamente um problema de fluxo de trabalho. Às vezes quando você não consegue encontrar tempo suficiente para fazer algo, você só precisa fazer esse algo demorar menos tempo.</p>
<p>Github foi literalmente escrito para chronic, god, ambition, will_paginate e o resto dos nossos projetos. Queríamos tornar muito simples para as pessoas contribuírem, e isso realmente não é possível sem Git.</p>
<p>Comecei a usar Git logo depois de assistir à <a href="http://www.youtube.com/watch?v=4XpnKHJAok8"target="_blank" rel="noopener">palestra técnica do Linus</a> em maio de 2007, que é muito boa para explicar Git de um nível conceitual bem alto. Então quando esse problema de tempo surgiu, eu já usava Git há alguns meses e Tom, coincidentemente, estava tentando resolver o mesmo problema.</p>
<p>Conversamos depois de um meetup local de Ruby em San Francisco, num bar é claro (onde todas as grandes ideias e parcerias começam), e decidimos trabalhar no problema juntos. Eu estava brincando com um Gitweb específico do Err, mas Github é obviamente muito mais ambicioso em escopo.</p>
<p>Quanto à adoção do Git, não tenho ideia do que foi o ponto de inflexão. Quando começamos a trabalhar no app em outubro, estávamos preocupados com ./script/plugin e tarballs e windows e espelhamento de svn. Não tínhamos nem certeza se conseguiríamos construir um negócio em torno de Git, porque o subversion ainda era tão dominante.</p>
<p>Como todos sabemos, no entanto, Git chegou ao ponto de inflexão no início de 2008 e todo mundo de alguma forma encontrou tempo para experimentá-lo. Talvez leve uns dois segundos para perceber o quanto é mais rápido, e depois mais alguns segundos para perceber o quanto é mais incrível. Então não é grande surpresa que esteja conquistando convertidos.</p>
<p>Quanto à comunidade Rails, definitivamente é por causa dos projetos. Quando Merb, Rubinius e Ruby on Rails todos migram para Git, você não tem escolha. É para onde a comunidade está indo. Quanto a outras linguagens, temos um grande número de projetos não-Ruby no Github. PHP, Java, Javascript, Lisp, Python — há alguns forks de Django, por exemplo, as linguagens de programação <a href="http://www.iolanguage.com/"target="_blank" rel="noopener">io</a> e <a href="http://programming.nu/"target="_blank" rel="noopener">nu</a> também estão hospedadas no Github.</p>
<p>Então o que realmente importa são os early adopters, acho. Nu é um lisp escrito em Objective-C, muito novo e muito de ponta. As pessoas que o usam agora são pessoas que percebem o quanto é poderoso e incrível rodar uma linguagem tão dinâmica em uma plataforma tão madura e estável. E naturalmente, os pensadores progressistas por trás do nu sabem que Git (e controle de versão distribuído) é um conceito igualmente poderoso e igualmente de ponta.</p>
<p>Com Prototype e Scriptaculous migrados, e rumores de outros frameworks Javascript migrando, é só uma questão de tempo até Git se tornar ainda mais difundido.</p>
<p>Acho que os Railers simplesmente gostam muito de blogar.</p>
<p>Quanto a outras soluções, é Rails vs Django de novo. Se você usa Mercurial, tudo bem. Os dois são tão parecidos (sim, <a href="http://kylecordes.com/2008/03/22/git-windows-works/"target="_blank" rel="noopener">Git funciona ótimo no Windows</a>) que enquanto as pessoas migrarem para controle de versão distribuído, ainda é uma vitória.</p>
<p>Ah, mas espera, Mercurial não tem Github :-)</p>
<p><img src="http://s3.amazonaws.com/akitaonrails/assets/2008/4/21/Picture_3.png" alt=""  loading="lazy" /></p>
<p><strong>AkitaOnRails:</strong> Exatamente :-) E me pergunto quais foram os desafios de montar algo como o Github. Não é um simples app Rails, com código Ruby muito rápido e puro. Você provavelmente está lidando com milhares de chamadas de sistema para binários Git, vários jobs em background, manutenção, segurança. O que você acha que foram os maiores desafios ao montar o Github antes de lançá-lo recentemente ao público?</p>
<p><strong>Chris Wanstrath:</strong> Bem, você acertou em cheio&hellip; escalar Rails é a parte fácil. Escalar sshd, Git, Git-daemon e nossos jobs em background é a parte difícil.</p>
<p>Chamamos Git diretamente muitas vezes por página, precisamos processar jobs que entram de muitos lugares diferentes (criar um repositório no site, fazer push de um repositório via ssh), precisamos ser seguros (ssl e ssh para todos os repositórios privados o tempo todo), precisamos garantir que tudo rode rápido (memcached tanto para chamadas Git quanto para o banco), precisamos garantir que você esteja <em>&ldquo;por dentro&rdquo;</em> com um feed de notícias agregando informações de todas as fontes diferentes dentro do nosso sistema (quase 1 milhão de linhas na tabela de feed quando lançamos).</p>
<p>Então definitivamente não foi fácil. Sem mencionar que ssl é essencialmente o &ldquo;modo lento&rdquo; para http, então precisamos garantir que estamos indo rápido porque coisas como seu dashboard já têm uma desvantagem de velocidade. Como exemplo, o sshd armazena suas chaves num arquivo authorized_keys. Bem, nem tínhamos terminado nosso beta ainda e o arquivo de chaves tinha mais de 4 megabytes de texto puro. Então tivemos um dos gurus de C da Engine Yard patcheando o sshd para nós para fazer pesquisas baseadas em MySQL, nos dando pesquisas mais rápidas e sem o custo de acrescentar/escrever num arquivo massivo.</p>
<p>Matthew Palmer é o referido guru, e planejamos tornar esse código open source em breve.</p>
<p>Também temos hooks de post-receive (quando você faz &ldquo;Git push&rdquo;) rodando que hospedamos e entregamos — então se você fizer push, faremos POST para uma URL arbitrária com JSON dos commits. Mas você também pode nos dar algumas informações e faremos post para campfire, irc, twitter ou lighthouse com payloads customizados.</p>
<p>Como temos flash, flash com haxe, Python, C, ruby, scripts bash, muito Javascript e algum erlang por vir nos bastidores, é definitivamente uma mistura interessante.</p>
<p>Temos a sorte de estar hospedados na <strong>Engine Yard</strong>, no entanto. Se não os tivéssemos, estaríamos perdidos. A configuração incrível de cluster deles com GFS significa que podemos hospedar nossos potencialmente centenas de gigabytes de repositórios em um drive compartilhado com RAID, redundância e backups. Se estivéssemos rodando Github em um VPS barebones, nem sei como compartilharíamos acesso a esses repositórios. Não seria divertido.</p>
<p>Eles também têm muitos especialistas disponíveis 24/7, o que é ótimo porque tenho tendência a esquecer de dormir e trabalhar até as 7 da manhã. Esses caras tiram muito da dor de rodar um site muito dependente de Unix.</p>
<p><a href="http://www.flickr.com/photos/ozmm/487496000/"target="_blank" rel="noopener"><img src="http://s3.amazonaws.com/akitaonrails/assets/2008/4/21/Picture_5.png" alt=""  loading="lazy" /></a></p>
<p><strong>AkitaOnRails:</strong> Interessante, Erlang? Adoraria saber o que você está fazendo com ele. Voltando, acho que vi um clone Git do trunk do Rails no Github muito antes de o DHH anunciar isso alguns dias atrás. Acho que foi Michael Koziarski quem fez primeiro, sem muito alarde. Vocês estavam planejando isso junto com o pessoal da 37signals, ou a migração do Rails Core para o Github foi algo que aconteceu naturalmente? E vocês têm algum tipo de parceria com o pessoal do Lighthouse também, porque vocês já têm alguns hooks para gerenciar tickets do Lighthouse através de mensagens de commit do Github, certo?</p>
<p><strong>Chris Wanstrath:</strong> O material de Erlang vai ser muito legal, prometo. Faremos muito barulho sobre isso quando estiver pronto. Quanto ao Rails, o koz de fato tinha um espelho do seu repositório Git-svn no Github durante o beta. Era não oficial. Então em fevereiro ele escreveu um <a href="http://www.koziarski.net/archives/2008/2/23/on-Git"target="_blank" rel="noopener">post explicando</a> que o core estava pensando em migrar para Git.</p>
<p>Quando vi o post, enviei um e-mail para ele e conversamos um pouco sobre o que precisaria ser feito para mover Rails para o Github, que era obviamente algo que amo em um número enorme de níveis. Ele disse que voltaria a falar comigo, e então algumas semanas depois o time Core nos contactou e queria discutir a migração. O resto é história.</p>
<p>Realmente respeito o trabalho que o time do <a href="http://www.lighthouseapp.com/"target="_blank" rel="noopener">Lighthouse</a> faz. O bug tracker é ótimo, e o novo redesign é ainda melhor, mas não temos nenhuma parceria oficial com eles. Escrevemos o hook post-receive do lighthouse porque queríamos, o Rails queria e um grande número dos nossos usuários queria.</p>
<p><strong>AkitaOnRails:</strong> Muitos outros começaram a migrar para o Github durante o Beta. Acho que o Merb foi mais óbvio por causa do envolvimento do Ezra com a Engine Yard. Dr. Nic começou a usá-lo para os bundles do Textmate. Você pode apontar algum outro projeto relacionado a Rails de alto perfil hospedado no Github agora?</p>
<p><strong>Chris Wanstrath:</strong> Merb foi na verdade o motivo pelo qual o Github entrou em beta. Lançamos o beta para que eles pudessem começar a usar o site para a reescrita 0.9 do merb-core. Quanto a projetos populares, a melhor coisa a fazer é verificar <a href="http://Github.com/popular/watched"target="_blank" rel="noopener">http://Github.com/popular/watched</a> e <a href="http://Github.com/popular/forked"target="_blank" rel="noopener">http://Github.com/popular/forked</a>. Datamapper, Rspec e Mephisto são alguns dos populares.</p>
<p><strong>AkitaOnRails:</strong> Você está usando código Git vanilla, ou o customizou de alguma forma para melhor se adaptar ao seu ambiente? Já conversou com Junio Hamano ou algum outro mantenedor do core do Git? Com o Github provavelmente consumindo muito do seu tempo, como estão o Chow e o FamSpam agora? Como você está gerenciando todos esses produtos ao mesmo tempo?</p>
<p><strong>Chris Wanstrath:</strong> Patcheamos o Git-daemon para registrar estatísticas, que em breve vamos surfacear no site na forma de atividade melhor e mais granular. Você poderá ver quantas vezes seu projeto foi clonado, projetos populares nas últimas 24 horas, projetos mais clonados de todos os tempos, esse tipo de coisa.</p>
<p>Enviamos e-mail para os caras do core do Git sobre o site, só para dizer obrigado por escreverem o Git e para informá-los sobre o Github, mas na verdade não tivemos ocasião de conversar sobre nada em particular. Se algum dia me cruzar com algum deles, definitivamente vou pagar algumas doses.</p>
<p>Na verdade, não trabalho mais no Chow. Meu último dia na C|NET foi há quase exatamente um ano, então meu tempo com Ruby é gasto no FamSpam, Github, open source e fazendo trabalho de cliente ocasionalmente.</p>
<p>FamSpam está indo bem. Agora que o Github foi lançado, há alguns recursos que queremos adicionar. Por sorte, no entanto, o site está muito polido e rodando sem precisar de muita intervenção. O que adoraríamos fazer, porque no fundo é uma ótima lista de e-mail baseada em Rails, é experimentar alguns conceitos diferentes.</p>
<p>Talvez um para open source, ou uma versão para times de liga juvenil — qualquer um que precise manter contato e ter seu fluxo de e-mail e compartilhamento de documentos otimizado. Por ora, no entanto, tento gastar o máximo de tempo possível no Github. Há tantos lugares para onde queremos levá-lo.</p>
<p><strong>AkitaOnRails:</strong> Provavelmente já ultrapassei o tempo da entrevista (me desculpe por isso), mas essa conversa é super interessante. Um projeto que acabei de lembrar é o Sake. Para mim o Sake é muito bacana porque muita gente reclama de quão &ldquo;difícil e complexa&rdquo; é a linha de comando do Git, e soluções como Sake facilitam muito o fluxo de trabalho. Por exemplo, meu fluxo de trabalho Git inteiro para projetos Rails são apenas 4 pequenas tarefas sake como Git:update e Git:push. Se não me engano, alguém do Err fez o Sake, certo? Você ainda está evoluindo ele?</p>
<p><strong>Chris Wanstrath:</strong> Sim, eu escrevi o <a href="http://errtheblog.com/posts/60-sake-bomb"target="_blank" rel="noopener">Sake</a>. Não é um plugin Rails, mas foi escrito para ajudar no desenvolvimento Rails. As &ldquo;tarefas Git&rdquo; para Sake estão ficando bem populares, pois Git realmente facilita um fluxo de trabalho melhor. Se você quiser implementá-lo, ou diferentes ramificações desse fluxo, você pode facilmente empacotar alguns comandos numa tarefa rake ou script bash.</p>
<p>E enquanto scripts bash são ótimos, as tarefas sake são portáteis. Muito do sake foi inspirado, de forma muito livre, no Git — você pode importar tarefas sake de qualquer arquivo de texto, seja na web ou local, e sake vem com seu próprio daemon para servir suas tarefas.</p>
<p>Então você poderia compartilhar tarefas via wifi, por exemplo, da mesma forma que poderia compartilhar repositórios Git numa rede adhoc. Sake está no Github, então fique à vontade para adicionar funcionalidades que achar que devem existir.</p>
<p><strong>AkitaOnRails:</strong> Outra coisa sobre a qual gostaria de ouvir sua opinião. Recentemente fiz uma apresentação sobre estratégias de deploy Rails para iniciantes. A arquitetura simples mais comum gira em torno de Apache/Nginx/Litespeed + Mongrel/Evented Mongrel/Thin/Ebb. Geralmente é uma questão de balanceamento de carga entre um servidor web usando algum tipo de IPC para distribuir a carga de volta para VMs Ruby rodando sua app Rails.</p>
<p>Agora temos mod_Rails. Qual é sua opinião sobre ter todas essas escolhas, você tem alguma receita particular que prefere ou depende das necessidades de cada aplicação? Você teve tempo de testar mod_Rails? Acho que Hongli Lai está fazendo um trabalho ótimo em relação a coisas como mongrel_light_cluster e seus esforços para tornar o GC do Ruby mais amigável ao copy-on-write. Você deu uma olhada nisso?</p>
<p><strong>Chris Wanstrath:</strong> A coisa boa da Engine Yard é que eles cuidam de tudo isso para mim. Então, enquanto antes passava muito tempo fazendo benchmark e brincando com diferentes soluções, como Mongrel vs Emongrel, agora simplesmente deixo os especialistas cuidarem disso para que eu possa me concentrar no Github.</p>
<p>Então não, ainda não brinquei com mod_Rails porque não estou numa situação em que pudesse implantá-lo mesmo que quisesse usá-lo. Que na minha opinião é a melhor situação para se estar, e é basicamente a razão pela qual mod_Rails foi escrito.</p>
<p><strong>AkitaOnRails:</strong> E a propósito, você vai fazer alguma apresentação na RailsConf este ano?</p>
<p><strong>Chris Wanstrath:</strong> Vou. Vou falar sobre <em>&ldquo;Beyond cap deploy&rdquo;</em>, que será basicamente um olhar aprofundado na arquitetura do Github, e depois vou estar num painel com Ben Curtis, Geoff Grosenbach, P.J. e Tom sobre ser um &ldquo;programador lucrativo&rdquo; com projetos paralelos.</p>
<p><strong>AkitaOnRails:</strong> Estou muito satisfeito por ter tido a oportunidade de conversar com você.</p>
<p><strong>Chris Wanstrath:</strong> Eu também. Obrigado!</p>
]]></content:encoded><category>entrevistas</category><category>open-source</category><category>arquitetura-de-software</category></item><item><title>Interviewed by FiveRuns</title><link>https://akitaonrails.github.io/2008/04/04/interviewed-by-fiveruns/</link><guid isPermaLink="true">https://akitaonrails.github.io/2008/04/04/interviewed-by-fiveruns/</guid><pubDate>Fri, 04 Apr 2008 13:31:00 -0300</pubDate><description>&lt;p&gt;&lt;a href="http://blog.fiveruns.com/2008/4/4/rails-application-monitoring-takefive-five-questions-with-fabio-akita"target="_blank" rel="noopener"&gt;&lt;img src="http://s3.amazonaws.com/akitaonrails/assets/2008/4/4/Picture_1.png" alt="" loading="lazy" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Monday, Apr 1st, I was invited to participate in a series of interviews being published at FiveRun’s blog, called &lt;a href="http://blog.fiveruns.com/2008/4/4/rails-application-monitoring-takefive-five-questions-with-fabio-akita"target="_blank" rel="noopener"&gt;TakeFive&lt;/a&gt;. It was just published.&lt;/p&gt;
&lt;p&gt;Thanks a lot for FiveRuns for choosing me, I am flattered as I don’t yet consider myself in the same luminary league as &lt;a href="http://blog.fiveruns.com/2008/1/12/takefive-five-questions-with-chad-fowler"target="_blank" rel="noopener"&gt;Chad Fowler&lt;/a&gt;, &lt;a href="http://blog.fiveruns.com/2008/1/25/rails-application-monitoring-takefive-five-questions-with-peter-cooper"target="_blank" rel="noopener"&gt;Peter Cooper&lt;/a&gt;, &lt;a href="http://blog.fiveruns.com/2008/2/22/rails-application-monitoring-takefive-five-questions-with-pat-eyler"target="_blank" rel="noopener"&gt;Pat Eyler&lt;/a&gt;, &lt;a href="http://blog.fiveruns.com/2008/3/28/rails-application-monitoring-takefive-five-questions-with-satish-talim"target="_blank" rel="noopener"&gt;Satish Talim&lt;/a&gt; and all the others in the series. I hope to get up there, though :-)&lt;/p&gt;
&lt;p&gt;This series revolves around 5 questions out of 15 that I could choose. Being prolific – as you well know – I actually answered all 15 of them. So I will publish here the remaining 10 that didn’t make into the interview. Hope you like’em.&lt;/p&gt;</description><content:encoded><![CDATA[<p><a href="http://blog.fiveruns.com/2008/4/4/rails-application-monitoring-takefive-five-questions-with-fabio-akita"target="_blank" rel="noopener"><img src="http://s3.amazonaws.com/akitaonrails/assets/2008/4/4/Picture_1.png" alt=""  loading="lazy" /></a></p>
<p>Monday, Apr 1st, I was invited to participate in a series of interviews being published at FiveRun’s blog, called <a href="http://blog.fiveruns.com/2008/4/4/rails-application-monitoring-takefive-five-questions-with-fabio-akita"target="_blank" rel="noopener">TakeFive</a>. It was just published.</p>
<p>Thanks a lot for FiveRuns for choosing me, I am flattered as I don’t yet consider myself in the same luminary league as <a href="http://blog.fiveruns.com/2008/1/12/takefive-five-questions-with-chad-fowler"target="_blank" rel="noopener">Chad Fowler</a>, <a href="http://blog.fiveruns.com/2008/1/25/rails-application-monitoring-takefive-five-questions-with-peter-cooper"target="_blank" rel="noopener">Peter Cooper</a>, <a href="http://blog.fiveruns.com/2008/2/22/rails-application-monitoring-takefive-five-questions-with-pat-eyler"target="_blank" rel="noopener">Pat Eyler</a>, <a href="http://blog.fiveruns.com/2008/3/28/rails-application-monitoring-takefive-five-questions-with-satish-talim"target="_blank" rel="noopener">Satish Talim</a> and all the others in the series. I hope to get up there, though :-)</p>
<p>This series revolves around 5 questions out of 15 that I could choose. Being prolific – as you well know – I actually answered all 15 of them. So I will publish here the remaining 10 that didn’t make into the interview. Hope you like’em.</p>
<p><strong>FireRuns:</strong> What was your first <em>“ah-ha”</em> moment with Ruby and/or Rails and when did you know that the framework was a good fit for you (or your organization)?</p>
<p><strong>AkitaOnRails:</strong> Back in 2005 I was a Java/SAP consultant creating web applications that integrates smoothly with SAP’s underlying processes and technologies. As an eager RSS reader since than, I suddenly started seeing a lot of buzz around Rails. I already knew about the Ruby language but never did anything with it, so I decided to take a closer look. Coming from a Java background, seeing Rails in action blew me away immediately. So decided to learn it, and once I got ahold of the basics I wanted to dig deeper and read the entire Rails source-code. The outcome of this journey was my book ‘Repensando a Web com Rails’, which is a comprehensive documentation of Rails written exclusively for the brazilian audience. As I was doing SAP stuff I also documented Pier Harding’s Rails connector for SAP.</p>
<p><strong>FireRuns:</strong> In his RubyConf 2007 Keynote presentation Matz stated that <em>“The suits people are surrounding us”</em> – is this increasingly the case with the community, and what does this mean for the future of Ruby?</p>
<p><strong>AkitaOnRails:</strong> Everytime I do a presentation about Ruby or Rails I emphasize that the best thing about them is not only the tecnology, but the community. The reason for Rails catching up so fast is that the community embraced it very deeply and rapidly started to fill in the several gaps. This lead to many amazing products such as RSpec. The Ruby oriented tools now surpasses those from other platforms in many ways now.</p>
<p>I firmly believe that adoption begins from the inside. The suits guys will not decide by themselves. The developers working inside will make the switch first and start convincing their coleagues and bosses. It is a time consuming process, but done correcly, can change the way we develop for corporations.</p>
<p><strong>FireRuns:</strong> Do you have any secret techniques, tools, or other Jedi strategies that you can share with our readers?</p>
<p><strong>AkitaOnRails:</strong> Unfortunately I am not in the same league as Rick Olson and other Ruby Jedi Masters. My job has been mainly trying to help our local community through information. I am a very prolific writer and I try to help the word-of-mouth process here, though we are still way behind the US in Rails adoption.</p>
<p>What I always recommend is to learn your tool. The first mistake many novice programmers do when they switch to Ruby is try to write in the same way they wrote C# or Java. That’s also one reason some novice programmers get frustrated because the resulting code becomes very ugly and different from those they see in the various screencasts and blogs. Buy <a href="http://www.amazon.com/Beginning-Ruby-Novice-Professional/dp/1590597664"target="_blank" rel="noopener">Beginning Ruby</a>, from Peter Cooper; <a href="http://www.amazon.com/Ruby-Way-Second-Addison-Wesley-Professional/dp/0672328844"target="_blank" rel="noopener">The Ruby Way</a>, the classic from Hal Fulton and watch as many <a href="http://www.peepcode.com"target="_blank" rel="noopener">Peepcode</a>, <a href="http://www.railscasts.com"target="_blank" rel="noopener">Railscasts</a> screencasts as possible. Learning is part of the process that makes adopting Ruby so enjoyable.</p>
<p><strong>FireRuns:</strong> Where do you go for Rails-related news and insight – any particular website, blogs, forums, etc. that are of particular value?</p>
<p><strong>AkitaOnRails:</strong> Of course. Actually I subscribe to a lot of RSS feeds, dozens. So the only website I go is Google Reader. Some of my favorites are Peter Cooper’s <a href="http://www.rubyinside.com"target="_blank" rel="noopener">Ruby Inside</a>, probably the best source of Rails related news. <a href="http://www.dzone.com"target="_blank" rel="noopener">DZone</a>, to me, is becoming more and more relevant. Some of my favorite blogs incluse <a href="http://errtheblog.com"target="_blank" rel="noopener">Err the Blog</a>, Josh Susser’s <a href="http://blog.hasmanythrough.com"target="_blank" rel="noopener">has_many :through</a>, Charles Nutter’s <a href="http://headius.blogspot.com"target="_blank" rel="noopener">Headius</a>, etc. There are so many great blogs that it’s, again, difficult to list them all. <a href="http://weblog.jamisbuck.org"target="_blank" rel="noopener">Jamis Buck</a>, <a href="http://blog.obiefernandez.com"target="_blank" rel="noopener">Obie Fernandez</a>, <a href="http://geoffreygrosenbach.com"target="_blank" rel="noopener">Geoffrey Grosenbach</a>, <a href="http://brainspl.at/"target="_blank" rel="noopener">Ezra Zygmuntowicz</a> and so on. I usually read the digest version of the Ruby on Rails Core and Ruby on Rails Talk Google Groups as well, which are very informative.</p>
<p><strong>FireRuns:</strong> Let’s talk about Rubinius – what do you see as the major advantage here, even though we’re obviously in the early stages? A test suite at last? A VM that folk can easily hack?</p>
<p><strong>AkitaOnRails:</strong> As I always say in my blog, Rubinius is the technology that will become the most important one for the future of the Ruby community. Sorry Matz, but Rubinius is ‘Ruby done Right’. But don’t get me wrong, I don’t say this in a way to diminish the MRI. On the contrary, I love the MRI for what it is, but Rubinius are making all the bold decisions that will make it or break it.</p>
<p>I like Avi Bryant’s motto of <em>‘Turtles all the way’</em>, and Rubinius represents what I would love to have: Ruby written in Ruby. Just that would be excellent. But Evan is not stopping there, he is making several breakthrough stuff in this project. For instance, I believe the Git buzz in the Rails community really started when Rubinius adopted it. The way of giving the keys to the castle to every single person that contributes is another different paradigm shift as well.</p>
<p>The marriage of Rubinius and Engine Yard is delivering in spades. Rubinius was also probably important to make RSpec even more well known. Now we finally have a full suite technically describing and testing the MRI that both JRuby and IronRuby are making good use of. So it should make Ruby implementations that much more compatible and well behaving.</p>
<p>Evan is a very clever engineer. The way he approached a new Ruby implementation using Smalltalk’s concepts is spot on. So we get the best of both world: the elegant architecture of a Smalltalk VM with the elegance of the Ruby language. It’s a win-win situation. As soon as web framework such as Rails and Merb run without modification on Rubinius, that’s when adoption rates will explode, without a doubt.</p>
<p><strong>FireRuns:</strong> Is Rails still waiting for its killer app, or are we already there with Basecamp, Highrise, Twitter, Hulu, Revolution Health, etc.?</p>
<p><strong>AkitaOnRails:</strong> You probably listed all the high profile Rails apps out there. Twitter is definitely a killer-app but I am not sure if it is ‘the’ killer-app. For coders, in my opinion, Github has the potential of growing to become a killer app as well. But up until this point I will be honest and say that no, we still don’t have that kind of killer app that would make people come in flocks to Rails.</p>
<p><strong>FireRuns:</strong> There was a great article recently on the Rails community in Austin and the Austin on Rails user group specifically. Are you part of a local user group? Tell us about your local community, what you love about it, how it is grown, and what challenges the group sees ahead of itself, in both the near and long term.</p>
<p><strong>AkitaOnRails:</strong> Yes, I subscribe to many groups though I don’t participate actively on all of them. Our local group is Rails-br at Google Groups where brazilian Railers discuss about several Rails related subjects everyday. There are a lot of noobs and we try to answer their questions and also we help each other.</p>
<p>It’s growing very slowly, unfortunaly. Different than the US or Europe is that Brazil is an under-developed country. As such, people here give less value to quality of life and enjoyment of their work. They want to be hired, that’s all. And right now people learn Java and C# because they need to. So Ruby adoption is very slow over here. We still wasn’t able to get enough traction to start a positive spiral. There is only my book in portuguese about Rails, the community is small, the media is also small and not paying attention, therefore companies don’t want to try Rails because of shortage of programmers, and programmers don’t want to learn Rails because there are not that many jobs. I hope we can reverse this situation soon.</p>
<p><strong>FireRuns:</strong> Obie Fernandez’s new startup Hashrocket, which has been blogged about extensively, is all about being ultra-productive in 3 days. Obie has written about ultra- productivity here, but we have to ask – what are your own tips around, to paraphrase Obie and 37Signals, getting real — on steroids?</p>
<p><strong>AkitaOnRails:</strong> I’ve been working with <a href="http://www.surgeworks.com"target="_blank" rel="noopener">Surgeworks</a>, which is a consulting firm, since June last year. So, I have less than a year of full time Rails experience. Before that I wasn’t doing full time Rails works. But we learned a lot and we still do a lot of mistakes, it’s part of the learning process. If someone tells you that they don’t make mistakes, they are lying.</p>
<p>Getting Real is about being pragmatic. It’s easier if you’re a startup, or yourself a product oriented team. But if you’re a more traditional company, the ‘Getting Real’ approach may feel too radical. It’s funny to say this, but it’s the truth. For them, low prices are higher priority than better quality. They expect Rails to deliver both very high quality and very low prices. There is a lot of convincing and explaining to be able to fully delivery Rails apps that the clients are going to really like.</p>
<p>To me, being a pragmatist is remembering Fred Brooks: ‘there is no silver bullet’. Rails is amazing but is no Silver Bullet either. It is a more elegant tool. But not every tool is able to fit in every job. Some projects are just not suitable for Rails, that’s a fact, but it doesn’t mean Rails is less good, on the contrary: it is great on the kinds of problems it was built to solve.</p>
<p>Programmers have to learn more than simply code. They have to get acquainted with processes and how companies operate. Being an offshore outsourced developer makes it even harder to use Agile methods, for example, so we have to stretch very hard to compensate for that. Communication is key. If the client is not willing to communicate, the project will fail, be it in Rails or not.</p>
<p><strong>FireRuns:</strong> The Rails community at large, like many open-source communities, is in our mind very much defined by its charitable work, from the recent acts_as conference Merb/Runinius sessions, to Chad and Marcel’s yearly RailsConf testing tutorials. Is charity in many ways the glue that binds the community together? Any charitable events or initiatives that you’d like to see happen over the next year?</p>
<p><strong>AkitaOnRails:</strong> What binds the community together is the common excitement around a subject: in this case Rails. As when you fall in love, passion vanishes very fast if you don’t maintain it. Events are a good way of doing that. You have two for one: you gain exposure for yourself, your project and your company and at the same time you contribute back with knowledge and guidance, helping promote the community all around the country. Whenever Ezra talks, it accumulates more positive points for Engine Yard and makes this brand that more easier to remember by all attendants. Marketing is very important.</p>
<p>In the US there are plenty of events already and still room for more. I would really like to see more action here in Brazil. But without sponsor and more support it is very difficult to make something on the scale of a RailsConf, which is sad. We will keep trying, though.</p>
<p><strong>FireRuns:</strong> Charles Nutter recently said that <em>“Not liking JRuby because it is written in Java is like not liking Ruby because it is written in C.”</em> That objection put aside, what is the single greatest challenge for JRuby going forward? Peter Cooper has suggested that Ruby’s only real downside is its lethargic start-up time compared to MRI, do you agree?</p>
<p><strong>AkitaOnRails:</strong> I agree with Peter about JRuby being slow to start up, but that’s something that Charles can’t do much about because the JVM behaves like that for everything, not only JRuby. The important part about JRuby is it being fully compatible with the MRI, making it easy to develop using the MRI and then deploying into a Java application server over JRuby.</p>
<p>Being a former Java programmer I don’t dislike. On the contrary, I think it is a great platform, with several amazing libraries and tools that the Ruby community still don’t have. Dismiss Java is a mistake, the same way it is a mistake to dismiss C: everything is written in C.</p>
<p>JRuby is the second most important Ruby project, Rubinius being the first. On the other hand, JRuby is more mature and available right now so you can run your Rails app inside your corporation’s Java servers. It’s very important for a niche that needs access to legacy software – lots of old Java code. It is also important for making the point that Java doesn’t need to be the sole language to run on top of the JVM and helped making Sun more flexible towards new advancements.</p>
]]></content:encoded><category>entrevistas</category><category>carreira</category><category>rails</category></item><item><title>Conversando com Scott Hanselman</title><link>https://akitaonrails.github.io/2008/02/18/conversando-com-scott-hanselman/</link><guid isPermaLink="true">https://akitaonrails.github.io/2008/02/18/conversando-com-scott-hanselman/</guid><pubDate>Mon, 18 Feb 2008 09:45:00 -0300</pubDate><description>&lt;p&gt;Esta semana entrevistei mais uma pessoa do campo Microsoft, &lt;a href="http://www.hanselman.com/"target="_blank" rel="noopener"&gt;Scott Hanselman&lt;/a&gt;. Eu o conheço pelo seu podcast &lt;a href="http://www.hanselminutes.com/"target="_blank" rel="noopener"&gt;Hanselminutes&lt;/a&gt;. Em um episódio ele &lt;a href="https://akitaonrails.github.io/2007/07/08/hanselminutes-entrevista-com-david-hansson-e-martin-fowler/"&gt;entrevistou&lt;/a&gt; tanto Martin Fowler quanto David Hansson na RailsConf do ano passado — uma conversa realmente notável.&lt;/p&gt;
&lt;p&gt;&lt;img src="http://s3.amazonaws.com/akitaonrails/assets/2008/2/18/1370206727_84d760de06.jpg" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;p&gt;Ele também postou um excelente &lt;a href="http://www.hanselman.com/blog/ASPNET35ExtensionsPlusMVCHowToScreencast.aspx"target="_blank" rel="noopener"&gt;screencast&lt;/a&gt; sobre o novo framework MVC alternativo da Microsoft e achei que seria ótimo tê-lo aqui no blog para falar sobre tecnologia e frameworks web. Como já disse antes, acho que não devemos ficar alheios ao que está acontecendo em outras frentes, e Scott é uma pessoa de pensamento avançado e mente aberta.&lt;/p&gt;</description><content:encoded><![CDATA[<p>Esta semana entrevistei mais uma pessoa do campo Microsoft, <a href="http://www.hanselman.com/"target="_blank" rel="noopener">Scott Hanselman</a>. Eu o conheço pelo seu podcast <a href="http://www.hanselminutes.com/"target="_blank" rel="noopener">Hanselminutes</a>. Em um episódio ele <a href="/2007/07/08/hanselminutes-entrevista-com-david-hansson-e-martin-fowler/">entrevistou</a> tanto Martin Fowler quanto David Hansson na RailsConf do ano passado — uma conversa realmente notável.</p>
<p><img src="http://s3.amazonaws.com/akitaonrails/assets/2008/2/18/1370206727_84d760de06.jpg" alt=""  loading="lazy" /></p>
<p>Ele também postou um excelente <a href="http://www.hanselman.com/blog/ASPNET35ExtensionsPlusMVCHowToScreencast.aspx"target="_blank" rel="noopener">screencast</a> sobre o novo framework MVC alternativo da Microsoft e achei que seria ótimo tê-lo aqui no blog para falar sobre tecnologia e frameworks web. Como já disse antes, acho que não devemos ficar alheios ao que está acontecendo em outras frentes, e Scott é uma pessoa de pensamento avançado e mente aberta.</p>
<p><strong>AkitaOnRails:</strong> Antes de tudo, deixa eu te parabenizar sr. <a href="http://www.hanselman.com/blog/BlueBadge.aspx"target="_blank" rel="noopener">progman.exe</a> :-) Entendo que isso foi algo pelo qual você estava muito animado. Pode nos contar um pouco mais sobre sua transição para a Microsoft e suas novas responsabilidades?</p>
<p><strong>Scott Hanselman:</strong> Estou trabalhando para Simon Muzio, que cuida de <a href="http://www.asp.net"target="_blank" rel="noopener">www.asp.net</a>, <a href="http://www.iis.net"target="_blank" rel="noopener">www.iis.net</a> e grandes sites cheios de conteúdo como esses. Gosto de pensar que meu trabalho é escrever um livro que nunca vai terminar, onde esse livro são posts de blog, artigos, screencasts, vídeos, palestras, etc. No fundo sou um professor, então mesmo tendo o título de &ldquo;Community Liaison&rdquo;, prefiro &ldquo;Professor&rdquo;.</p>
<p><strong>AkitaOnRails:</strong> Conta pra gente sobre sua história. Como você começou no mundo da computação? Você sempre foi mais voltado para Windows ou tinha uma base no mundo Unix também? E antes de sua recente saída para a Microsoft você trabalhava na <a href="http://www.hanselman.com/blog/CheckFreeClosesDealToAcquireCorillianNowTheRealWorkBegins.aspx"target="_blank" rel="noopener">Corillian</a>. Qual era sua função lá?</p>
<p><img src="http://s3.amazonaws.com/akitaonrails/assets/2008/2/18/computerolympics.jpg" alt=""  loading="lazy" /></p>
<p><strong>Scott Hanselman:</strong> <a href="http://www.hanselman.com/blog/TeachingChildrenAndKidsToProgramTheOldSchoolWay.aspx"target="_blank" rel="noopener">Este post de blog</a> fala sobre meus primeiros anos na escola.</p>
<blockquote>
  <p>Viu aquele livro à direita? Foi assim que aprendi a programar. Esse livro era O livro em 1984. Digitei o livro inteiro num Commodore 64.</p>

</blockquote>
<p>E uma professora MUITO <a href="http://www.hanselman.com/blog/MrsMayfieldHillMyFifthGradeTeacher.aspx"target="_blank" rel="noopener">influente</a> que me colocou no caminho certo.</p>
<blockquote>
  <p>Marianne Mayfield é minha professora da quinta série e a razão pela qual estou em computação hoje. Ela esteve no meu casamento, em formaturas, em eventos de família. Vinte anos depois ainda somos próximos. Quando eu era jovem, ela reconheceu que eu estava &ldquo;em risco de dar problema&rdquo; e se sentou com minha família para encontrar uma forma de me colocar de volta nos trilhos. Ela viu que eu estava fascinado pelo Apple II na nossa sala de aula e arranjou para que a gente pudesse levar o computador para fora da escola, desde que estivesse de volta antes do domingo à noite sem que ninguém notasse.</p>

</blockquote>
<p>(clique nos links acima para mais detalhes)</p>
<p><strong>Scott Hanselman:</strong> Eu era o Arquiteto-Chefe na Corillian, trabalhando com outros engenheiros e arquitetos em toda a empresa, planejando, projetando e codando a próxima geração da Plataforma de Internet Banking da Corillian.</p>
<p><strong>AkitaOnRails:</strong> Aplaudo sua campanha <a href="http://www.hanselman.com/blog/TeamHanselmanAndDiabetesWalk2007.aspx"target="_blank" rel="noopener">Team Hanselman</a> para ajudar no combate à Diabetes. Entendo que você também tem Diabetes e que, felizmente, conseguiu controlá-la hoje em dia. Pode nos contar essa história e os objetivos da sua campanha?</p>
<p><strong>Scott Hanselman:</strong> Minha história pessoal está <a href="http://hanselman.com/fightdiabetes"target="_blank" rel="noopener">aqui</a>:</p>
<blockquote>
  <p>Atualmente tomo três injeções de Symlin por dia enquanto uso uma bomba de insulina 24 horas por dia, inclusive enquanto durmo. A bomba me poupa de mais seis injeções por dia, que tomei durante 8 anos antes da bomba. Meço minha glicose picando meu dedo entre 8 e 10 vezes por dia — são cerca de 46.500 picadas até agora, e ainda há um longo caminho pela frente.</p>

</blockquote>
<p>E tem uma boa explicação da diabetes <a href="http://www.hanselman.com/blog/ScottsDiabetesExplanationTheAirplaneAnalogy.aspx"target="_blank" rel="noopener">aqui</a>:</p>
<blockquote>
  <p>É aqui que a analogia fica interessante. Lembre que na analogia estamos voando de Los Angeles para Nova York, mas só podemos verificar nossa altitude sete vezes. E só podemos mudar de altitude (tomar insulina) menos de dez vezes. Mas quando verifico minha glicose, estou vendo o passado. Estou vendo uma leitura de como estava minha glicose há 15 minutos. E quando tomo insulina, ela só começa a reduzir minha glicose depois de pelo menos 30 minutos.</p>

</blockquote>
<p>A campanha acabou arrecadando mais de USD$30.000, e esse dinheiro será aplicado em pesquisa, educação e programas relacionados à diabetes.</p>
<p><strong>AkitaOnRails:</strong> <em>&ldquo;O que diabos você estava fazendo numa RailsConf?&rdquo;</em> Isso é o que acho que pessoas de fora do mundo de blogs Microsoft perguntariam a você :-) Então, você é apenas curioso sobre Rails, ou chega a desenvolver aplicações baseadas em Rails? Estou muito interessado em conhecer sua opinião sobre Rails. Como você o encontrou? O que você acha de melhor no Rails? E mais importante, o que você acha que Rails poderia melhorar?</p>
<p><strong>Scott Hanselman:</strong> Estou sempre experimentando diferentes linguagens de programação e frameworks. Tenho feito Rails de vez em quando há cerca de 18 meses, mas ainda não clicou pra mim. Tenho certeza que vai em breve. O padrão MVC é muito antigo… eu fazia isso em Java há mais de 10 anos, e certamente o padrão remonta a 30 anos. Acho que Rails é um bom framework considerando sua pouca idade. Mas acho que é o Ruby que tem a magia de verdade, e vejo que a estética do Ruby está muito em linha com a minha.</p>
<p><strong>AkitaOnRails:</strong> Então, seguindo minhas preferências tendenciosas, o próximo artigo de que gosto é seu <a href="http://www.hanselman.com/blog/ASPNET35ExtensionsPlusMVCHowToScreencast.aspx"target="_blank" rel="noopener">screencast</a> sobre o framework CTP ASP.NET MVC. Vejo que esse novo framework se parece muito com Rails. Claro, pode parecer assim apenas porque ambos implementam MVC. Por outro lado, ele usa expressões muito similares ao Rails em todo lugar. Falta um pouco de &ldquo;mágica de convenção-sobre-configuração&rdquo;, mas pelo que vi parece muito melhor do que fazer ASP.NET convencional. O que você acha dele? Pode resumir um pouco para quem não conhece esse produto? E o que você acha que ainda vai melhorar nele?</p>
<p><strong>Scott Hanselman:</strong> Se alguém aponta para Rails e diz &ldquo;isso é MVC&rdquo; então tudo mais vai se parecer com Rails, claro. Qualquer bom framework MVC precisa não só seguir o padrão adequadamente, mas também abstrair o HTTP (assumindo que é um framework web) de forma limpa, mas não completa. A implementação do ASP.NET MVC ainda carrega alguma bagagem que sempre vai precisar carregar porque o ASP.NET WebForms veio primeiro e não foi projetado do zero com testabilidade em mente. Dito isso, tudo se resume a alternativas. Use o framework que te deixa feliz e em que você se sente mais produtivo. Alguma fração, talvez 20%, dos desenvolvedores ASP.NET vai preferir MVC. Agora eles têm uma opção com suporte da Microsoft e boa integração com C# 3.0.</p>
<p><img src="http://s3.amazonaws.com/akitaonrails/assets/2008/2/18/505403549_2ad6d13ce7.jpg" alt=""  loading="lazy" /><br>
na RailsConf'07</p>
<p><strong>AkitaOnRails:</strong> E o que seria o mundo tech sem discussões e flame wars? Entendo que a maioria dos desenvolvedores .NET nem presta atenção a Rails ou outros frameworks. Até ouvi que há alguns desenvolvedores questionando coisas como <em>&ldquo;Por que mais um framework web se o ASP.NET já existe?&rdquo;</em> Ou seja, por que reinventar a roda e dividir atenções? Particularmente acho que esse novo MVC é o caminho a seguir, mas é inegável que o velho ASP.NET tem muito mais aceitação e suporte. Como reconciliar os dois pontos de vista?</p>
<p><strong>Scott Hanselman:</strong> Isso é puro FUD (fear, uncertainty, and doubt — medo, incerteza e dúvida). Que pensem o que quiserem, esse framework é apenas sobre alternativas. WebForms é ótimo, e se você está fazendo aplicações Line of Business (LOB) com grids complexos e afins, ele não vai a lugar nenhum. No entanto, se você é uma equipe ágil que preza TDD e ficou frustrado com ViewState, então confira ASP.NET MVC. Não há nada a reconciliar. Algumas pessoas vão de carro, outras de moto, outras a pé. O que importa é chegar do ponto A ao ponto B e se sentir bem durante a jornada.</p>
<p><strong>AkitaOnRails:</strong> Falando em flame wars, há provavelmente um assunto que me dá arrepios: as teorias conspiratórias paranoicas sobre Miguel de Icaza e o <a href="http://www.hanselman.com/blog/MonoAndItsManyFacetsScreencast.aspx"target="_blank" rel="noopener">Mono</a>. Muita gente acredita de fato que Miguel está &ldquo;vendendo&rdquo; parte do mundo open source para a Microsoft. Você já usou? O que você ouve da comunidade e qual é sua opinião sobre o assunto?</p>
<p><strong>Scott Hanselman:</strong> Sim, já usei Mono e acho que é uma ótima forma de fazer sua aplicação .NET funcionar no Linux ou Mac. Acho Miguel brilhante e um excelente dançarino. Ouço na comunidade que as pessoas estão felizes por Mono existir e estar disponível como uma opção.</p>
<p><strong>AkitaOnRails:</strong> Provavelmente vou levar uma maldição por isso, mas não sou &ldquo;fortemente&rdquo; contra a Microsoft como alguns fundamentalistas são. É público e notório que a Microsoft é uma grande corporação e, como tal, cometeu sua parte de atos equivocados. Muitos deles já foram resolvidos na justiça. Então é mais complexo do que as pessoas geralmente pensam. Prefiro assumir que dentro da Microsoft há muitas pessoas muito inteligentes.</p>
<p><strong>Scott Hanselman:</strong> Fico fora de questões legais. A Microsoft é uma empresa enorme com muita gente inteligente, mas na prática é muitas empresas de porte médio trabalhando juntas (geralmente). Não posso falar sobre &ldquo;atos equivocados&rdquo;. Só posso dizer que faço meu melhor todo dia para não ser mau, assim como meus colegas de trabalho. Não há nenhum plano maléfico mestre no meu grupo.</p>
<p><strong>AkitaOnRails:</strong> Particularmente gosto do roadmap para Windows Server 2008 (com sua abordagem minimalista, finalmente tendo instalado apenas o que você precisa). No ano passado você estava experimentando o <a href="http://www.hanselman.com/blog/ScreencastHowToIIS7AndPHPWithFastCGI.aspx"target="_blank" rel="noopener">IIS 7</a> e seu novo suporte a FastCGI. Acho que era destinado principalmente ao suporte de PHP mas teoricamente poderia lidar com Ruby on Rails também. Você já tentou Rails lá? Acho que a Microsoft claramente está indo atrás do segmento de menor custo com Windows Server 2008 + IIS 7, contra as caixas baratas de Linux+Apache. Acho que não conseguirão chegar lá em termos de preço, mas o que você acha dele como competidor de serviços de internet?</p>
<p><strong>Scott Hanselman:</strong> Tenho pouco poder nessa arena, mas toda vez que alguém quiser ouvir estou defendendo um SKU barato de Servidor Web. Sou um grande fã do IIS7 e gostaria que o máximo de pessoas possível o experimentasse. Não testei IIS7+Rails mas ouvi rumores de pessoas conseguindo fazer funcionar.</p>
<p><strong>AkitaOnRails:</strong> Há muitos recursos novos no .NET 3.5. LINQ é o que mais me interessa. Pode nos dar uma breve descrição de por que é tão interessante? E o que você acha das melhores melhorias da versão 3.5? Você já está usando o Orcas? Qual é sua opinião? Ah, e você conhece o projeto <a href="http://www.sapphiresteel.com/"target="_blank" rel="noopener">Sapphire in Steel</a>?</p>
<p><strong>Scott Hanselman:</strong> LINQ é interessante porque é sua própria Linguagem de Domínio Específico para consultar objetos de todos os tipos, e está vivendo diretamente dentro de VB e C#. É um compilador MUITO mais inteligente e é um prazer trabalhar com ele. Instalei o Sapphire In Steel e conheço algumas pessoas que adoram. Estou animado para ver Rails no .NET.</p>
<p><strong>AkitaOnRails:</strong> Uma das vantagens da estratégia Microsoft .NET foi estar preparada desde o primeiro dia para ser agnóstica em relação a linguagens. Agora temos o DLR que foi derivado dos trabalhos no IronPython e não no IronRuby. Mas há ainda outra linguagem interessante que poucas pessoas conhecem: F#, a linguagem inspirada em OCaml. Você já experimentou?</p>
<p><strong>Scott Hanselman:</strong> Sim, e fiz dois podcasts sobre ela, um com <a href="http://www.hanselman.com/blog/HanselminutesPodcast76FWithRobertPickering.aspx"target="_blank" rel="noopener">Robert Pickering</a>, autor de um livro sobre F# e outro com <a href="http://www.hanselman.com/blog/HanselminutesPodcast96StartingSmallWithFWithDustinCampbell.aspx"target="_blank" rel="noopener">Dustin Campbell</a>, um entusiasta. Estou animadíssimo que ela vai ser uma linguagem de primeira classe dentro do VS.</p>
<p><img src="http://s3.amazonaws.com/akitaonrails/assets/2008/2/18/1930668335_0719ad4d3f.jpg" alt=""  loading="lazy" /><br>
com John Lam</p>
<p><strong>AkitaOnRails:</strong> Não sou contra comparações técnicas, precisamos fazer esse tipo de coisa para decidir nossos passos em projetos. Mas sou contra desafios sem sentido. Rails está longe de ser perfeito e sou o primeiro a dizer isso. Dito isso, é ótimo para um nicho específico de desenvolvimento web. Costumo recomendar que bons programadores devem expandir seus horizontes e aprender o máximo possível de coisas novas. Não dá para saber tudo perfeitamente, mas é sempre bom estar ciente das possibilidades. Você <a href="http://www.hanselman.com/blog/TheProgrammingLanguageExplosion.aspx"target="_blank" rel="noopener">escreveu algo</a> nessa linha. O que você acha disso?</p>
<p><strong>Scott Hanselman:</strong> Rails é bom no que faz dentro do seu nicho. Você não cria aplicativos desktop Windows com Rails e tudo bem. É por isso que não comparamos Rails com WPF, mas com frameworks web. Comparação é boa e sempre há algo bom para encontrar dos dois lados. Evito flame wars também. É inútil. Se o sapato aperta, não use. Mas experimente o máximo de sapatos que puder!</p>
<p><strong>AkitaOnRails:</strong> No ano passado você escreveu um <a href="http://www.hanselman.com/blog/TheSkynetComputeCloudIThinkThereIsAWorldMarketForMaybeFiveComputers.aspx"target="_blank" rel="noopener">post interessante</a> sobre o futuro. Google é esse grande gigante, Amazon lançou produtos surpreendentemente bons nos últimos meses como S3, EC2, SimpleDb. Não estou bem a par da estratégia atual do Microsoft Live. Pode dizer algo sobre para onde está rumando?</p>
<p><strong>Scott Hanselman:</strong> Não estou nesse grupo então não tenho nenhum conhecimento além do que já foi dito. No entanto, ainda mantenho minhas previsões naquele post!</p>
<blockquote>
  <p>A computação vai se mover para a Nuvem. Já está acontecendo, estamos 20% lá. A ideia existe desde o começo e vai, na minha opinião, continuar surgindo até que realmente aconteça e construamos a Skynet. Uma dessas nuvens de computação vai certamente acabar em órbita.</p>

</blockquote>
<p><strong>AkitaOnRails:</strong> E claro, de certa forma &ldquo;preciso&rdquo; te perguntar isso: você usa Windows Vista? Como tem sido para você considerando que há uma enorme campanha underground contra ele? Você acha que é tão ruim quanto todo mundo diz? Não posso comentar porque nunca o testei fora da minha máquina virtual (sou um cara de Mac), mas eles venderam 100 milhões de licenças.</p>
<p><strong>Scott Hanselman:</strong> Com certeza. Rodo Vista 64-bit em 3 máquinas e Vista 32-bit em 2 máquinas. Foi difícil nos primeiros 3 meses enquanto o suporte a drivers deixava a desejar, mas agora está ótimo. Tenho 2 máquinas com Vista que não foram reinicializadas há meses, apenas colocadas em modo de suspensão e acordadas. Depois que você consegue bons drivers de vídeo, geralmente tá tranquilo.</p>
<p>As pessoas implicam com o Vista, mas esquecem a vasta gama de hardware em que ele tem que rodar. O OS X só precisa rodar em Macs, e em uma faixa estreita deles. O Vista tem que rodar em milhões de combinações de hardware. Drivers de terceiros são DE LONGE o que mais trava o Vista, e ele leva a culpa. Por isso rodo 64-bit e uso apenas drivers assinados. Estou encantado com o 64-bit. Funciona muito bem.</p>
<p><strong>AkitaOnRails:</strong> Ok, é isso :-) Muito obrigado!</p>
<p><img src="http://s3.amazonaws.com/akitaonrails/assets/2008/2/18/90081476_85f9a226dd.jpg" alt=""  loading="lazy" /></p>
]]></content:encoded><category>entrevistas</category><category>microsoft</category><category>desenvolvimento-web</category></item><item><title>Conversando com Evan Phoenix</title><link>https://akitaonrails.github.io/2008/02/11/conversando-com-evan-phoenix/</link><guid isPermaLink="true">https://akitaonrails.github.io/2008/02/11/conversando-com-evan-phoenix/</guid><pubDate>Mon, 11 Feb 2008 20:43:00 -0200</pubDate><description>&lt;p&gt;&lt;img src="http://s3.amazonaws.com/akitaonrails/assets/2008/2/11/524655980_8e68a871a0.jpg" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;English Readers:&lt;/strong&gt; click &lt;a href="https://akitaonrails.github.io/2008/02/11/chatting-with-evan-phoenix/"&gt;here&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Foi &lt;a href="https://akitaonrails.github.io/2007/12/15/conversando-com-avi-bryant-parte-1/"&gt;Avi&lt;/a&gt; &lt;a href="https://akitaonrails.github.io/2007/12/22/conversando-com-avi-bryant-parte-2/"&gt;Bryant&lt;/a&gt; que evangelizou a idéia de “tartarugas o caminho todo”, querendo dizer que para uma linguagem se considerar ‘completa’ ela deveria ser capaz de estender a si própria. Então, o mundo ideal teria Ruby sendo estendido por Ruby, não em C. JRuby vai tão longe quanto pode construindo um sandbox para código Ruby rodar sobre a JVM. Por mais legal que seja, ainda precisamos de Java para podermos estendê-la.&lt;/p&gt;</description><content:encoded><![CDATA[<p><img src="http://s3.amazonaws.com/akitaonrails/assets/2008/2/11/524655980_8e68a871a0.jpg" alt=""  loading="lazy" /></p>
<p><strong>English Readers:</strong> click <a href="/2008/02/11/chatting-with-evan-phoenix/">here</a></p>
<p>Foi <a href="/2007/12/15/conversando-com-avi-bryant-parte-1/">Avi</a> <a href="/2007/12/22/conversando-com-avi-bryant-parte-2/">Bryant</a> que evangelizou a idéia de “tartarugas o caminho todo”, querendo dizer que para uma linguagem se considerar ‘completa’ ela deveria ser capaz de estender a si própria. Então, o mundo ideal teria Ruby sendo estendido por Ruby, não em C. JRuby vai tão longe quanto pode construindo um sandbox para código Ruby rodar sobre a JVM. Por mais legal que seja, ainda precisamos de Java para podermos estendê-la.</p>
<p>Entra <a href="http://rubini.us/"target="_blank" rel="noopener">Rubinius</a> e seu autor <strong>Evan Phoenix</strong> , atualmente contratado em tempo integral pela <a href="http://www.engineyard.com/"target="_blank" rel="noopener">EngineYard</a>. Rubinius pega pesadamente emprestado dos conceitos de virtual machine de Smalltalk e faz o menos possível em C somente para conseguir o boot inicial e todo o resto é desenvolvido em Ruby puro.</p>
<p>Rubinius responde a várias questões sobre o futuro do Ruby MRI mas também levanta diversas perguntas que espero que possamos responder hoje nesta entrevista com o próprio Evan.</p>
<p>Então, vamos começar.</p>
<p><strong>AkitaOnRails:</strong> Já é uma tradição em minhas entrevistas perguntar sobre o histórico do programador. Qual foi seu caminho? Quero dizer, o que o fez entrar no mundo da programação e como entrou em Ruby?</p>
<p><strong>Evan Phoenix:</strong> Eu comecei a programar no colégio com um amigo meu. Começamos uma pequena empresa de computador fazendo várias coisas e eu realmente entrei nisso de cabeça. Eu entrei em Linux alguns anos atrás, então programação se tornou uma extensão natural no meu uso de Linux.</p>
<p>Quando entrei pra faculdade, apliquei para o curso de Ciências da Computação, e venho fazendo isso desde então eu acho.</p>
<p>Sobre Ruby, eu entrei nisso mais ou menos em 2002, logo que me mudei para Seattle. Um amigo tinha acabado de descobri-la e estava escrevendo coisas legais nela e eu peguei por sugestão dele. Eventualmente, encontrei o grupo seattle.rb e tenho trabalhado em Ruby desde então.</p>
<p><a href="http://www.engineyard.com/"target="_blank" rel="noopener"><img src="http://s3.amazonaws.com/akitaonrails/assets/2008/2/11/ey_logo.png" alt=""  loading="lazy" /></a></p>
<p><strong>AkitaOnRails:</strong> A EngineYard parece ter uma grande fé no futuro do Rubinius. Como esse relacionamento começou? Pode nos dizer quais são as expectativas da EngineYard sobre seu trabalho para eles?</p>
<p><strong>Evan Phoenix:</strong> O relacionamento começou principalmente com eles se aproximando de mim sobre trabalhar para eles, no Rubinius. Então eles viram promessa no Rubinius por conta própria, das minhas apresentações e tal, e eles se aproximaram.</p>
<p>As expectativas deles é que eu faça Rubinius ser a melhor VM de Ruby que possa existir. Essa é a minha ordem básica deles. Eles são provavelmente os melhores supervisores para esse projeto. Eles me permitem trabalhar no ritmo que quiser, eles entendem os rigores do trabalho que estou fazendo, e me dão muita liberdade.</p>
<p><strong>AkitaOnRails:</strong> Agora, vamos entrar no Rubinius. Para iniciantes como você definiria Rubinius? Todos sabemos que é uma implementação alternativa de Ruby, então talvez fosse interessante dizer o que o torna diferente do MRI. Quais são os objetivos do projeto?</p>
<p><strong>Evan Phoenix:</strong> Um dos objetivos primários é ter o máximo possível do sistema escrito no próprio Ruby. No MRI, nenhuma das classes principais são escritas em Ruby, tudo é em C. Então nós queríamos um sistema que fosse fácil de se trabalhar, e portanto escrito no próprio Ruby.</p>
<p>Outra coisa que fizemos é enriquecer o número de coisas que são objetos, o que adiciona poder considerável. Um exemplo simples é a classe CompiledMethod que o Rubinius tem. Ele contém a representação em bytecode de um método e ele pode ser inspecionado, manipulado, etc, como qualquer outro objeto. Isso abre várias portas em relação a como problemas podem ser resolvidos.</p>
<p><img src="http://s3.amazonaws.com/akitaonrails/assets/2008/2/11/Picture_1_1.png" alt=""  loading="lazy" /></p>
<p><strong>AkitaOnRails:</strong> Não é tão óbvio para a audiência brasileira falar sobre “Squeak”, “Garnet”. Smalltalk é provavelmente menos conhecido por aqui do que Ruby (estou chutando). O que quero dizer é que é bem sabido que você se inspirou na maneira como Squeak é implementado. Isso levou a funcionalidades como “Cuby”. Pode nos explicar o que é tão legal sobre a maneira como Squeak é implementado e como isso o ajuda no projeto Rubinius?</p>
<p><strong>Evan Phoenix:</strong> Bem, estamos atualmente no processo de desenvolvimento do Garnet/Cuby, então essas ferramentas ainda não estão em uso. Mas quase toda a arquitetura do sistema do Rubinius é modelado a partir da Virtual Machine Smalltalk-80 original. Ele definia coisas como CompiledMethod, etc, que eu copiei nome por nome no Rubinius.</p>
<p>Além disso, o modelo de execução do Rubinius é quase idêntico ao Squeak. Um bom exemplo é a maneira como o sistema chama métodos e entende como rastrear o retorno de controle ou quando uma chamada de método retorna. Toda essa informação é mantida em objetos de primeira classe chamadas MethodContexts. Em uma linguagem como C, essa informação é armazenada na pilha de memória dos processos. Mantendo os dados em objetos de primeira classe, somos capazes de consultá-los diretamente para encontrar informações sobre o sistema em execução. Isso também largamente simplifica como o garbage collector funciona.</p>
<p><strong>AkitaOnRails:</strong> Hoje vocês tem o Shotgun. Li em algum lugar que você considera isso ‘trapaça’ porque não é um interpretador para Ruby escrito em Ruby, e isso nos levaria a Cuby. É mais um tipo de facilidade para o desenvolvimento. Qual o estado atual do shotgun, podemos usá-lo fora de seu propósito de desenvolvimento do Rubinius?</p>
<p><strong>Evan Phoenix:</strong> Shotgun é uma virtual machine escrita em C que fornece instruções e operações primitivas para rodar uma linguagem parecida com Ruby. O Shotgun por si próprio não tem conhecimento sobre parsing, compilação, etc. Ele tem uma maneira muito simples de carregar código nele, e uma maneira de executá-la. Você poderia facilmente desenvolver uma linguagem para o shotgun, de fato, <a href="/2007/06/21/chatting-with-ola-bini-jruby-core-team-member/">Ola Bini</a> e eu falamos algumas vezes sobre escrever uma linguagem simples no estilo de Lisp que rodaria diretamente no shotgun.</p>
<p>As operações primitivas que ele fornece são meio parecidas com syscalls em um sistema unix. Ele fornece operações bem de baixo nível. Por exemplo, existe uma primitiva de adição que adiciona objetos Fixnum juntos e coloca o resultado na pilha.</p>
<p><strong>AkitaOnRails:</strong> Isso é apenas uma curiosidade pessoal. O MRI hoje usa um simples garbage collector (GC) mark and sweep enquanto o Java usa um altamente customizável GC de geração. O que você escolheu como gerenciamento de memória na VM do Rubinius?</p>
<p><strong>Evan Phoenix:</strong> Rubinius usa um GC de geração, combinando um copy collector para objetos jovens, com um coletor mark and sweep para a geração velha. Isso de provou funcionar bem para nós. O truque tem sido otimizar quanto tempo um objeto existe antes de promovê-lo para o espaço de objetos velhos. Otimizamos apenas um pouco. Há muito mais trabalho que poderia ser feito no GC, e ele é arquitetado para apenas interagir com o resto do sistema em alguns poucos pontos, então sua lógica é completamente substituível se for preciso sem atrapalhar nada de fora.</p>
<p><img src="http://s3.amazonaws.com/akitaonrails/assets/2008/2/11/421875792_79acde1fba.jpg" alt=""  loading="lazy" /></p>
<p><strong>AkitaOnRails:</strong> Temos partidos que favorecem green threads, outros que são pró-threads nativas. Como está lidando com o assunto de threads no Rubinius? Ainda vamos ter o mesmo tipo de trava global que o MRI tem hoje?</p>
<p><strong>Evan Phoenix:</strong> No momento, Rubinius tem somente green threads, construídos sobre os objetos MethodContext de primeira classe. Isso atualmente usa libevent para permitir threads esperar objetos de IO rapidamente.</p>
<p>O plano (provavelmente para 2.0) é suportar threads nativas também em paralelo às green threads. Você será capaz de alocar um pool de threads nativas que as green threads podem compartilhar. Então talvez você tenha 100 green threads, e poderia alocar 10 threads nativas para elas dividirem o tempo entre elas. Por causa da arquitetura, é trivial migrar entre green threads e threads nativas.</p>
<p>Sobre a trava global em threads nativas, não, não consideramos uma trava global uma solução para usar threads nativas. Se existir uma trava, não há razão para usá-las em vez de green threads. Como muito do Rubinius é escrito em Ruby, temos mais facilidade de entender como travar coisas apropriadamente para manter todos os objetos no sistema seguros. Na realidade ainda nem começamos esse trabalho, mas têm se falado bastante sobre isso.</p>
<p><strong>AkitaOnRails:</strong> O objetivo atual é provavelmente fazer o Rubinius o mais compatível com o MRI 1.8 quanto possível. Já começaram algum trabalho em direção à compatibilidade com YARV? E falando em YARV, ela é a virtual machine e compilador de bytecodes oficial para a próxima versão do Ruby. Existe alguma chance de fazer Rubinius e YARV terem bytecodes compatíveis ou isso não é um objetivo de curto prazo?</p>
<p><strong>Evan Phoenix:</strong> Estamos ativamente trabalhando em direção à compatibilidade com 1.8.6. Esse é um grande objetivo porque existe muita funcionalidade lá. Faremos um lançamento 1.0 do Rubinius quando ele for capaz de rodas todas as especificações do 1.8.6 e rodar Rails apropriadamente, que é um bom benchmark.</p>
<p>Não, não fizemos nenhum trabalho em direção a compatibilidade com YARV, mas da forma como as coisas foram arquitetadas, talvez sejamos capazes de simplesmente criar um flag —yarv que você passará ao Rubinius para que ele use coisas compatíveis com YARV.</p>
<p>Não estamos atualmente trabalhando em direção a um bytecode comum entre Rubinius e YARV, principalmente porque não há nada a se ganhar fazendo isso. Da última vez que olhei, o bytecode do YARV é uma coisa interna do YARV somente, e você não poderia facilmente salvá-la para um arquivo. O Rubinius primariamente trabalhar sobre arquivos .rbc, que contém um CompileMethod serializado, e portanto contém os bytecodes. Isso dito, eles são similares e poderiam ser unificados se virmos necessidade disso.</p>
<p><img src="http://s3.amazonaws.com/akitaonrails/assets/2008/2/11/2211693208_bf14710240.jpg" alt=""  loading="lazy" /></p>
<p><strong>AkitaOnRails:</strong> Performance é sempre assunto para muita discussão e ainda é prematuro falar sobre performance no Rubinius, já que ainda é um trabalho em andamento. Mas eu li no seu blog que ele está ficando rápido depressa, mesmo ultrapassando o MRI em muitos testes. Como a performance está evoluindo?</p>
<p><strong>Evan Phoenix:</strong> Atualmente, a performance está evoluindo devagar. Isso principalmente porque não é uma prioridade para as pessoas escrevendo o kernel do Rubinius (a maior parte do código Ruby que a constrói). À medida que formos chegando mais próximos da compatibilidade, começaremos a otimizar as coisas. Isso dito, eu realmente escrevo código para tornar Rubinius mais rápido aqui e ali. Fomos adiante e implementamos operações matemáticas rápidas para acelerar a matemática mais comum que as pessoas fazem. Temos um profiler simples que pode ser facilmente ligado para dar feedback aos desenvolvedores sobre como seu código está rodando.</p>
<p><strong>AkitaOnRails:</strong> Um dos principais problemas para qualquer implementação alternativa do Ruby é que ele tem um monte de extensões em C, incluindo um monte de bibliotecas principais. Então, se quiser se manter “Ruby-puro” tem que reimplementar todas elas em Ruby. O pessoal do JRuby teve que passar por algo assim. Existe alguma colaboração entre projetos sobre esse assunto?</p>
<p><strong>Evan Phoenix:</strong> Na realidade, isso não é bem verdade. Também vimos que Ruby inclui muitas extensões em C. Para tornar a migração para o Rubinius mais rápida, escrevemos uma camada no Rubinius que permite que todas essas extensões C rodem (quase) sem modificação, somente requerendo uma recompilação. Funciona de tal maneira que coisas como ImageScience, RMagick, bindings de postgres, etc possam ser usadas sobre Rubinius sem ter que ser reescritas.</p>
<p><strong>AkitaOnRails:</strong> Ainda sobre código C, sei que é difícil entregar bytecode de virtual machine e ainda ser dependente de código C não-gerenciado. Java tem coisas como JNA, .NET tem pinvoke. Você planeja algo similar para Rubinius de tal forma que ele possa mais ou menos facilmente falar com bibliotecas em C?</p>
<p><strong>Evan Phoenix:</strong> De fato nós suportamos diretamente um mecanismo chamado de FFI (Foreign Function Interface), que permite a um desenvolvedor ligar funções C diretamente como chamadas de métodos. Aqui vai um exemplo simples:</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-ruby" data-lang="ruby"><span class="line"><span class="cl"><span class="k">module</span> <span class="nn">LibC</span>
</span></span><span class="line"><span class="cl"> <span class="n">attach_function</span> <span class="kp">nil</span><span class="p">,</span> <span class="ss">:puts</span><span class="p">,</span> <span class="o">[</span><span class="ss">:string</span><span class="o">]</span><span class="p">,</span> <span class="ss">:void</span>
</span></span><span class="line"><span class="cl"><span class="k">end</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="no">LibC</span><span class="o">.</span><span class="n">puts</span> <span class="s2">&#34;hello!&#34;</span></span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>Essa linha de attach_function é a interface primária para o FFI. Você simplesmente indica em qual biblioteca a função está (nesse caso, nil é usado porque está dentro do próprio processo), o nome da função (puts), os tipos dos argumentos que ele leva (apenas 1, um string) e, finalmente, o tipo do retorno (void, ou seja, nada).</p>
<p>Usando isso, você pode ligar diretamente a funções C sem ter que escrever um wrapper em C.</p>
<p><a href="http://rubini.us/"target="_blank" rel="noopener"><img src="http://s3.amazonaws.com/akitaonrails/assets/2008/2/11/Picture_2.png" alt=""  loading="lazy" /></a></p>
<p><strong>AkitaOnRails:</strong> Você está muito certo quando diz que especificações formais de linguagem muito cedo podem dificultar como a linguagem evolui. Ruby tem crescido nos últimos 10 anos já, e parece que este é o momento certo de começarmos a pensar em alguma coisa desse tipo, de tal forma que tenhamos uma base a partir de onde qualquer outra implementação alternativa possa começar. Você vê esforços para isso?</p>
<p><strong>Evan Phoenix:</strong> Nós temos ativamente trabalhado no desenvolvimento de um conjunto de especificações (em formato <a href="http://rspec.info/"target="_blank" rel="noopener">rSpec</a>) para o 1.8. Isso forma o mecanismo principal como qual testamos como o Rubinius está indo. Essas especificações estão sendo ativamente utilizadas pelo JRuby e IronRuby para testar seus respectivos ambientes Ruby. Estamos atualmente no processo de mover essas especificações em um projeto genérico de especificações Ruby para tentar a começar a mover as coisas para um padrão mais formal.</p>
<p><strong>AkitaOnRails:</strong> Outra pergunta recorrente é sobre Rails, claro. Qualquer nova implementação de Ruby hoje terá que encarar a pergunta inevitável: ele já roda Ruby? :-) Rails está servindo meio que como uma ‘mini suite de testes’ e uma base para a maioria das implementações. Como Rubinius está nesse sentido?</p>
<p><strong>Evan Phoenix:</strong> Quando rodarmos Rails, saberemos que estamos próximos o 1.0 :-)</p>
<p><strong>AkitaOnRails:</strong> Você tem uma proposta interessante em relação a gerenciamento de projeto open source: todos que lhe enviam bons patches ganham acesso de commit ao repositório. Como isso está funcionando para você? Não é um pouco confuso ou as pessoas tendem a seguir sua liderança e sua lista de prioridades?</p>
<p><strong>Evan Phoenix:</strong> De fato está funcionando muito bem até agora. Por ser orientado a especificações/testes, as novas pessoas tem um lugar por onde começar, seja escrevendo especificações que estão faltando ou fazendo as existentes passar. Isso se tornou uma grande introdução a todo o sistema para eles. Então eles começam a explorar um pouco mais e normalmente encontrar mais e mais do que gostar a ajudar. Como temos um monte de trabalho a fazer em várias diferentes partes, as pessoas não tem que se preocupar com minha lista de prioridades, já que ela envolve coisas que os outros não precisam ficar ativamente preocupados a respeito.</p>
<p>Realmente o que eu disse não é suficiente para descrever como as pessoas tem contribuído. A barreira de um patch provou funcionar muito bem porque embora tenhamos mais de 60 committers, nenhuma vez precisei revogar esse acesso de alguém. Claro, as pessoas erram, mas em todos os casos, a pessoa corrigiu o comportamento e/ou código.</p>
<p><strong>AkitaOnRails:</strong> Um sub-produto nesse esquema de acesso de commit é a integração com o rSpec no projeto Rubinius de tal forma que você tem uma ótima ferramenta de requerimentos e uma suíte de testes. Você pratica Behavior Driven Development? Ou isso está cobrindo apenas um pequeno sub-conjunto do projeto?</p>
<p><strong>Evan Phoenix:</strong> Eu sou ainda um amador em testes, simplesmente seguindo guias feitos pelo Brian Ford, o principal mantenedor de especificações do projeto. Isso se provou ser uma grande ferramenta para ver como o projeto está progredindo.</p>
<p><strong>AkitaOnRails:</strong> Assim como muitos projetos Ruby, Rubinius também é gerenciado sobre GIT. Tem havido muito barulho sobre Git e Ruby ultimamente. Você acha que é uma nova tendência? Por que decidiu ir com Git?</p>
<p><strong>Evan Phoenix:</strong> Sim, acho que Git está pegando como uma tendência, por causa das funcionalidades que ele oferece sobre o subversion, principalmente.</p>
<p>A grande razão para nós foi seu conjunto de funcionalidades. Uma grande que eu adoro são branches locais, permitindo a uma pessoa gerenciar várias mudanças grandes sem atropelar os outros.</p>
<p>Ainda não fizemos, mas planejamos exercitar as grandes capacidades de merge e branches públicas.</p>
<p><img src="http://s3.amazonaws.com/akitaonrails/assets/2008/2/11/504590792_2819a866a8.jpg" alt=""  loading="lazy" /></p>
<p><strong>AkitaOnRails:</strong> Ouvimos do Ezra <a href="http://podcast.rubyonrails.org/programs/1/episodes/ezra-zygmuntowicz"target="_blank" rel="noopener">numa entrevista recente</a> sobre seu novo experimento sobre multi-VM. Isso seria uma bênção para deployment sem ter que lidar com diversos processos em um cluster mongrel. Poderia nos descrever essa funcionalidade e apontar suas vantagens?</p>
<p><strong>Evan Phoenix:</strong> Atualmente é bastante experimental, mas ele vai se estabilizar com o tempo. A idéia é que você pode subir uma nova VM no processo atual. Essa nova VM é completamente separada das outras VMs, vivendo em sua própria thread nativa e tendo seu próprio garbage collector, etc.</p>
<p>Existe um mecanismo para as VMs se comunicarem entre si, e isso permite que elas coordenem tarefas. Isso poderia significar que uma thread primária poderia aceitar novas conexões, então passá-las a uma nova VM para realmente processar. Isso lhe permite processar conexões realmente em paralelo, e além disso, como as VMs estão completamente separadas, isso funciona até mesmo para aplicações que não são thread-safe como Rails.</p>
<p><strong>AkitaOnRails:</strong> Ezra também mencionou sobre um possível mod_rubinius no forno. Como isso está indo? Isso definitivamente torna o pacote Rubinius ainda mais forte. Junto com Merb, Rubinius mais capacidades de multi-VM mais mod_rubinius seriam um pacote de deployment matador.</p>
<p><strong>Evan Phoenix:</strong> Sim, um projeto mod_rubinius está apenas começando. O código de multi-VM e do mod_rubinius se sobrepõe um pouco, então você será capaz de ter pools de VMs para sites, todas gerenciadas através do Apache. Esperamos que mod_rubinius possa realmente simplificar o cenário de deployment Rails/Ruby. Ele operará de maneira similar ao mod_python, permitindo a uma VM permanecer rodando entre requisições, e talvez até rodando tarefas em background.</p>
<p><strong>AkitaOnRails:</strong> Quanto tempo acha que estamos de um lançamento totalmente compatível com o MRI 1.8?</p>
<p><strong>Evan Phoenix:</strong> Ainda não temos uma data firme, principalmente porque o que é ser compatível com MRI 1.8 ainda é incerto. Ainda estamos adicionando especificações, trabalhando para definir apropriadamente o 1.8. Isso dito, estamos realmente atingindo um ponto decisivo e avançando rapidamente. Estamos muito próximos de rodar apropriadamente o Rubygems. Ezra recentemente foi capaz de rodar o Merb sobre Rubinius, rodando sobre Webrick.</p>
<p>Estarei lançando uma versão 0.9 esta semana, porque fizemos muito progresso desde a 0.8. Minha grande esperança é que até a RailsConf, em maio, seremos capazes de rodar Rails. Mas não me comprometa. Isso é um projeto open source afinal de contas. :-)</p>
<p><strong>AkitaOnRails:</strong> Obrigado! Acho que isso é tudo.</p>
<p><strong>Evan Phoenix:</strong> Muito obrigado pela paciência.</p>
]]></content:encoded><category>entrevistas</category><category>ruby</category><category>linguagens-de-programacao</category></item><item><title>Conversando com Hal Fulton</title><link>https://akitaonrails.github.io/2008/01/09/conversando-com-hal-fulton/</link><guid isPermaLink="true">https://akitaonrails.github.io/2008/01/09/conversando-com-hal-fulton/</guid><pubDate>Wed, 09 Jan 2008 21:27:00 -0200</pubDate><description>&lt;p&gt;&lt;img src="http://s3.amazonaws.com/akitaonrails/assets/2008/1/9/n767352779_362954_175.jpg" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://rubyhacker.com/"target="_blank" rel="noopener"&gt;The Ruby Way&lt;/a&gt; é, sem discussão, o livro obrigatório na estante de qualquer Rubyist. Em vez de ser um livro de referência, ele explica o que é preciso para mergulhar de verdade nas sutilezas e maravilhas do estilo de programação Ruby.&lt;/p&gt;
&lt;p&gt;Hoje estou muito feliz em conseguir bater um papo com um dos meus autores favoritos, &lt;strong&gt;Hal Fulton&lt;/strong&gt;. Foi uma conversa excelente e tenho certeza que o pessoal vai curtir bastante. Ele é um dos veteranos do Ruby e, com certeza, tem muito a compartilhar. Então, vamos lá:&lt;/p&gt;</description><content:encoded><![CDATA[<p><img src="http://s3.amazonaws.com/akitaonrails/assets/2008/1/9/n767352779_362954_175.jpg" alt=""  loading="lazy" /></p>
<p><a href="http://rubyhacker.com/"target="_blank" rel="noopener">The Ruby Way</a> é, sem discussão, o livro obrigatório na estante de qualquer Rubyist. Em vez de ser um livro de referência, ele explica o que é preciso para mergulhar de verdade nas sutilezas e maravilhas do estilo de programação Ruby.</p>
<p>Hoje estou muito feliz em conseguir bater um papo com um dos meus autores favoritos, <strong>Hal Fulton</strong>. Foi uma conversa excelente e tenho certeza que o pessoal vai curtir bastante. Ele é um dos veteranos do Ruby e, com certeza, tem muito a compartilhar. Então, vamos lá:</p>
<p><strong>AkitaOnRails:</strong> Antes de tudo, é tradição aqui no blog perguntar sobre a trajetória do convidado. Há quanto tempo você está na carreira de programação? Como tudo começou? O que te inspira no mundo da computação?</p>
<p><strong>Hal Fulton:</strong> Comecei a faculdade no curso de física, mas percebi que estava fazendo disciplinas de computação por prazer. Migrei para ciência da computação e o resto é história.</p>
<p>Ao contrário da maioria dos jovens de hoje, só tive contato com computadores aos dezesseis anos, porque computadores pessoais eram muito menos comuns na minha época. Fiquei viciado imediatamente. Enxerguei o computador como uma &ldquo;caixa mágica&rdquo; capaz de fazer qualquer coisa que eu fosse inteligente o suficiente para programar. Honestamente, ainda me sinto assim.</p>
<p><strong>AkitaOnRails:</strong> Já virou quase um clichê, mas preciso perguntar: você foi um dos Rubyists de &ldquo;primeira geração&rdquo;. Como você descobriu Ruby e o que foi que &ldquo;encaixou&rdquo; pra você na linguagem?</p>
<p><strong>Hal:</strong> Eu estava em um contrato na IBM em Austin no outono de 99. Numa conversa com um amigo do corredor, me queixei de que nunca estava no início de nenhuma tecnologia nova — sempre era um adotante tardio. Ele disse: <em>&ldquo;Bom, então você deveria aprender Ruby.&rdquo;</em> E eu respondi: <em>&ldquo;O que é isso?&rdquo;</em> Aí entrei na lista de e-mails em inglês e comecei a aprender Ruby (versão 1.4).</p>
<p>Minha experiência anterior era com linguagens muito estáticas. Tinha começado (como muita gente na época) com BASIC, FORTRAN e Pascal. Depois aprendi C, C++, Java e várias outras coisas pelo caminho. Mas nunca me aprofundei em LISP e nunca conheci Smalltalk. Então o conceito inteiro de linguagem dinâmica era um pouco estranho pra mim. Eu sempre soube que queria mais poder, mas não sabia exatamente o quê. Tentei imaginar macros que me dessem a flexibilidade que buscava, mas parecia a solução errada.</p>
<p>Aí aprendi Ruby e senti que não tinha dado um salto, mas três saltos de uma vez. Ficou claro que era muito parecido com o que eu vinha buscando inconscientemente.</p>
<p><strong>AkitaOnRails:</strong> O Pickaxe é outro livro indispensável, mas cumpre o papel de livro de &ldquo;referência&rdquo; completo, enquanto o seu trata das entranhas e fundamentos da linguagem — caramba, você gasta 40 páginas só falando de String, se isso não é detalhado o suficiente eu não sei o que seria. Qual era sua intenção quando escreveu a 1ª edição? Como ela surgiu?</p>
<p><strong>Hal:</strong> Conheci Dave Thomas e Andy Hunt online naquela lista de e-mails. Na época, o excelente livro deles <em>The Pragmatic Programmer</em> tinha acabado de sair e eles estavam trabalhando no livro de Ruby. Fui um dos revisores — ajudando a corrigir imprecisões e problemas.</p>
<p><img src="http://s3.amazonaws.com/akitaonrails/assets/2008/1/9/0672328844.jpg" alt=""  loading="lazy" /></p>
<p>Um pouco depois, a Sams Publishing foi em busca de alguém para escrever um livro. Na época, a lista de e-mails em inglês tinha pouquíssimos falantes nativos de inglês, então eu tinha boas chances de ser escolhido. Enviei uma proposta e eles gostaram.</p>
<p>O Pickaxe ainda não estava nas prateleiras, mas eu tinha conhecimento íntimo do seu conteúdo. Então quando montei a proposta do meu livro, me certifiquei de que <strong>não</strong> seria concorrência direta — queria que fosse complementar. Se você olhar a página de elogios da primeira edição, há uma citação minha dizendo &ldquo;Este é o primeiro livro de Ruby que você deve comprar.&rdquo; Mas em privado eu já pensava: <em>&ldquo;E eu sei qual deveria ser o segundo.&rdquo;</em></p>
<p><strong>AkitaOnRails:</strong> Por mais detalhado e completo que você tente ser, Ruby tem várias sutilezas e nuances difíceis de capturar. Havia algo que você não cobriu na época mas teria gostado de explorar mais?</p>
<p><strong>Hal:</strong> Certamente existem algumas sutilezas sobre classes e módulos, reflexão, metaprogramação e afins que não foram mencionadas ou não foram suficientemente enfatizadas. Mas, em geral, um programador não deveria tentar ser &ldquo;esperto demais&rdquo; no código de qualquer forma.</p>
<p>A omissão mais gritante, na minha opinião, é a ausência de cobertura sobre como escrever extensões em C. Na primeira edição, simplesmente fiquei sem tempo, energia e espaço — não consegui cobrir isso. Na segunda edição, omiti porque achei que a API C passaria por mudanças radicais conforme nos aproximávamos do Ruby 2.0 — mudanças mais radicais do que as classes principais, por exemplo. Isso, no entanto, está se mostrando incorreto.</p>
<p><strong>AkitaOnRails:</strong> Você provavelmente encontrou muitos estudantes e entusiastas de Ruby aprendendo através do seu livro. Pela sua experiência, o que você acha que mais impressiona as pessoas na linguagem, e quais são os recursos que mordem os iniciantes logo de cara?</p>
<p><strong>Hal:</strong> Acho que a concisão é um recurso muito atraente. Dê uma olhada nesta única linha de Ruby, que cria dois acessores para uma classe:</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-ruby" data-lang="ruby"><span class="line"><span class="cl"><span class="kp">attr_accessor</span> <span class="ss">:alpha</span><span class="p">,</span> <span class="ss">:beta</span></span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>Como você faria isso em C++? Você declararia dois atributos; depois escreveria um par de funções &ldquo;leitoras&rdquo; e um par de funções &ldquo;escritoras&rdquo;. Isso é pelo menos sete linhas de código ali. Mas aí, e se você quiser atribuir tipos diferentes a esses atributos? Aí você entra no overloading. Vira um pesadelo rapidinho. Enquanto isso, em Ruby — continua sendo uma única linha de código.</p>
<p><strong>AkitaOnRails:</strong> O que você mais gosta no Ruby que o diferencia de outras linguagens similares?</p>
<p><strong>Hal:</strong> Uma das melhores características do Ruby é a tipagem dinâmica. Variáveis não têm tipos; apenas objetos têm tipos (ou devo dizer, classes). A tipagem estática estava tão enraizada em mim que eu <strong>assumia</strong> que era o jeito certo. Mas quando a abandonei, senti como se tivesse removido pesos que nem sabia que estava carregando.</p>
<p>Sua <strong>regularidade</strong> também é um recurso atraente. Por exemplo, uma classe em Ruby é, em certo sentido, algo &ldquo;especial&rdquo; — mas muito menos especial do que em C++, por exemplo. Uma classe é &ldquo;apenas um objeto&rdquo;, então você pode fazer com classes o que faz com outros objetos — passá-las adiante, armazená-las em arrays, testar seus valores, e assim por diante.</p>
<p><strong>AkitaOnRails:</strong> E o que você melhoraria se fosse o guardião da linguagem?</p>
<p>Primeiro de tudo, fico feliz de não ser o guardião. Matz faz um trabalho excelente e é muito mais inteligente do que eu. Acho que existem alguns problemas com reflexão e programação dinâmica que precisam ser resolvidos — exatamente como, não tenho certeza.</p>
<p>Aguardo ansiosamente uma máquina virtual realmente usável e alguma forma de combinação de métodos (pre, post, wrap). Admito que há pequenas mudanças de sintaxe e de núcleo que gostaria de fazer — na maioria, bem pequenas.</p>
<p>Por exemplo, sempre quis um operador &ldquo;in&rdquo; que fosse açúcar sintático para chamar o método include? — por exemplo, <em>&ldquo;x in y&rdquo;</em> significaria <em>&ldquo;y.include?(x)&rdquo;</em> — esse operador seria essencialmente igual ao operador de pertinência de conjuntos da matemática (em vez de ser o inverso) e às vezes tornaria o código mais legível, inclusive tornando parênteses desnecessários em alguns casos. Uso o operador &ldquo;in&rdquo; do Pascal desde os 18 anos; Python tem ele, SQL também em certa medida. Queria que Ruby também tivesse.</p>
<p>Várias vezes senti necessidade de uma estrutura de dados que fosse acessada como um hash, mas que preservasse a ordem especificada no código. Por exemplo, imagine um tipo de &ldquo;case statement dinâmico&rdquo; — passamos possíveis correspondências e código para executar (como procs) para cada uma delas. (Teria a vantagem sobre um case statement de podermos controlar o número de ramificações e o código associado em tempo de execução.) Vamos implementá-lo como um método chamado &ldquo;choose&rdquo; que chamamos assim:</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-ruby" data-lang="ruby"><span class="line"><span class="cl"><span class="n">choose</span> <span class="n">regex1</span> <span class="o">=&gt;</span> <span class="nb">proc</span> <span class="p">{</span> <span class="n">handle_case1</span> <span class="p">},</span> <span class="n">regex2</span> <span class="o">=&gt;</span> <span class="nb">proc</span> <span class="p">{</span> <span class="n">handle_case2</span><span class="p">}</span></span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>Qual é o problema? A sintaxe nos engana a pensar que regex1 de alguma forma precede regex2 — mas quando iteramos sobre um hash, a ordem não é garantida como no código. (Isso é uma propriedade dos hashes, claro, não um bug.) Então não podemos controlar ou prever a ordem em que eles são aplicados. E encontrei vários outros casos onde queria algo assim — um array associativo, um conjunto de tuplas, com sintaxe conveniente para literais e com uma ordem.</p>
<p>Há duas respostas usuais para meu desejo de um &ldquo;hash ordenado&rdquo;. Alguns dizem que estou louco, que hash não é ordenado e pronto. Outros dizem que posso sempre criar minha própria classe que se comportasse assim — o que é verdade, exceto que não teria a conveniência de representá-lo como &ldquo;cidadão de primeira classe&rdquo; na sintaxe Ruby. Afinal, um hash &ldquo;poderia&rdquo; ser representado como cidadão de segunda classe também — eu poderia escrever:</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-ruby" data-lang="ruby"><span class="line"><span class="cl"><span class="no">Hash</span><span class="o">[</span><span class="s2">&#34;a&#34;</span><span class="p">,</span><span class="mi">2</span><span class="p">,</span><span class="s2">&#34;b&#34;</span><span class="p">,</span><span class="mi">4</span><span class="p">,</span><span class="s2">&#34;c&#34;</span><span class="p">,</span><span class="mi">6</span><span class="o">]</span></span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>em vez de:</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-ruby" data-lang="ruby"><span class="line"><span class="cl"><span class="p">{</span><span class="s2">&#34;a&#34;</span> <span class="o">=&gt;</span> <span class="mi">2</span><span class="p">,</span> <span class="s2">&#34;b&#34;</span> <span class="o">=&gt;</span> <span class="mi">4</span><span class="p">,</span> <span class="s2">&#34;c&#34;</span> <span class="o">=&gt;</span> <span class="mi">6</span><span class="p">}</span></span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>Mas sou grato pela expressividade desta última sintaxe.</p>
<p><strong>AkitaOnRails:</strong> Sua segunda edição cobre Ruby 1.8. Você já está pesquisando sobre Ruby 1.9 (YARV)? Sendo um veterano de Ruby, o que você acha das direções que Matz e Koichi vêm escolhendo para a próxima versão? Te satisfaz? Para você, quais são o bom, o ruim e o feio sobre Ruby agora e na próxima versão?</p>
<p><strong>Hal:</strong> Houve pontos menores onde discordei de Matz de vez em quando. Mas como eu disse, fico feliz que ele esteja no comando. Gosto do YARV pelo que vi até agora. Estou ansioso para que fique 100% estável para que eu possa realmente ter uma noção de como funciona.</p>
<p><strong>AkitaOnRails:</strong> Seu livro está na segunda edição e é um livro enorme, cobrindo não só a linguagem em si mas alguns componentes de terceiros como o pdf_writer. Você está trabalhando em uma 3ª edição? Talvez teremos <em>&ldquo;The YARV Way&rdquo;</em>?</p>
<p><strong>Hal:</strong> Não estou trabalhando em uma terceira edição e acho que seria muito difícil escrever uma. A segunda foi mais difícil do que eu esperava — embora muito conteúdo tenha sido reaproveitado, ainda precisou ser reexaminado linha por linha — e mais de 50 erros ainda se infiltraram nessas 800+ páginas.</p>
<p>Uma vez brinquei que se houvesse uma 3ª edição, talvez precisaria ser dois volumes. Mas na verdade, não seria uma má ideia — conceitos básicos e classes principais em um volume, bibliotecas padrão e de terceiros no segundo. Mas isso é especulação. <strong>Há</strong> uma espécie de complemento para o livro sendo planejado — mas não vou mencionar isso até sabermos mais detalhes. Me pergunte daqui a alguns meses.</p>
<p>Quanto ao YARV — acho que Ruby sempre será Ruby. Podemos mudar o interior, mas o nome permanecerá o mesmo pelo futuro previsível.</p>
<p><strong>AkitaOnRails:</strong> Por volta de 2002 Ruby não era amplamente adotado e apenas um punhado de hobbyistas e entusiastas o usavam e ajudavam a melhorar a linguagem. Você mesmo, David Black, Nathaniel Talbott, e muitos outros pesados do que chamo de &ldquo;primeira geração Ruby&rdquo;. Mas em 2004 surgiu esse framework web completo chamado Rails que tornou Ruby publicamente conhecido e reconhecido, atraindo muitas mentes brilhantes mas também muitos trolls e amadores. Ouço dizer que alguns da primeira geração lamentam isso, porque o que era uma comunidade tranquila e perspicaz ficou muito barulhenta. O que você acha desse status de celebridade repentino que Ruby ganhou e seus efeitos colaterais?</p>
<p><strong>Hal:</strong> Bem, Ruby não é um clube privado. Será que os japoneses se sentiram ofendidos quando europeus e outros começaram a se interessar por ela? Acho que certamente perdemos um pouco dos velhos tempos, mas não perco tempo pensando nisso. Também ganhamos bastante. E é interessante que a &ldquo;amizade&rdquo; da comunidade escalou melhor do que muitos de nós esperávamos. Ruby ainda é Ruby e Rubyists ainda são Rubyists. Apenas há mais de nós agora — também mais projetos, mais atividade, mais oportunidades. Só pode ser algo bom.</p>
<p><strong>AkitaOnRails:</strong> Você trabalha com desenvolvimento de sistemas em Ruby puro ou usa Ruby on Rails para desenvolvimento web hoje? Qual é sua ocupação ou trabalho principal?</p>
<p><strong>Hal:</strong> Fiz um pouco de trabalho com Rails aqui e ali, mas sou mais um generalista antiquado. Não sou um cara de web. Muitos programadores mais jovens, claro, parecem não perceber que existe qualquer outro tipo de programação a ser feita. Mas se você estivesse escrevendo um compilador ou interpretador, um servidor web customizado, qualquer tipo de daemon ou aplicação de rede em background… você pegaria seu livro de Rails? Claro que não.</p>
<p>Já fiz trabalho em nível de sistema no passado, mas não consigo imaginar Ruby sendo adequado para os tipos de coisas que eu fazia naquela época. Para essas coisas, usávamos C (o assembly universal). No meu trabalho principal, estou feliz codando Ruby todos os dias — trabalhando remotamente para uma empresa de Dallas chamada <a href="http://www.personifi.com"target="_blank" rel="noopener">Personifi</a>. Descreveria meu trabalho como aplicações e ferramentas internas — muita análise de texto e indexação, um pouco de crunching de números e muito crunching de palavras.</p>
<p><strong>AkitaOnRails:</strong> Aqui no Brasil temos muita gente que foi inicialmente atraída pela máquina de hype do Rails e agora está se batendo para aprender a linguagem Ruby. Metaprogramação, Closures, Mixins deixam o pessoal maluco. Você tem recomendações para os iniciantes?</p>
<p><strong>Hal:</strong> Qual seria um bom jeito de começar a experimentar com a linguagem? Bem, você pode manter uma cópia de <em>The Ruby Way</em> por perto. :-)</p>
<p>Na verdade, tenho apenas três recomendações. Primeiro de tudo, a lista de e-mails ou newsgroup é uma poderosa fonte de informação e ainda há pessoas simpáticas e conhecedoras lá que responderão suas perguntas. Segundo, há milhões de linhas de código Ruby lá fora. Estude e aprenda com eles. Terceiro, e mais importante: Apenas brinque! Você não aprende realmente uma linguagem lendo sobre ela, mas usando-a.</p>
<p><strong>AkitaOnRails:</strong> A propósito, você já está escrevendo uma nova edição? :-)</p>
<p><strong>Hal:</strong> Não estou e não consigo enxergar tão longe. Mas espere seis ou sete meses, e espero ter uma pequena surpresa para você…</p>
<p><img src="http://s3.amazonaws.com/akitaonrails/assets/2008/1/9/p4250004_1.jpg" alt=""  loading="lazy" /></p>
<p><strong>AkitaOnRails:</strong> À luz do episódio atual do Zed, ele disse muita coisa especificamente contra o Pickaxe. Uma das coisas é a alegação dele de que o Pickaxe não mencionou claramente toda a questão de metaprogramação. Depois fui conversar com &lsquo;arton&rsquo; — um autor de livros Ruby do Japão — e ele me lembrou: americanos e japoneses parecem fazer Ruby de jeitos diferentes. Ele disse que eles normalmente não fazem toda aquela metaprogramação no nível que o Rails faz, por exemplo. Como você disse, eles não tentam ser &ldquo;espertos demais&rdquo;.</p>
<p>Agora, não quero ser apologético porque não acho que Dave precisa disso, mas isso explica bastante considerando que o Pickaxe tinha apenas fontes japonesas como referência lá em 2001. Pessoalmente aprendi boa parte do meu Ruby lendo o código-fonte do Rails no início (e livros como o seu depois). O que você acha disso? (quero dizer, sobre o episódio do Zed em geral, e sobre os estilos de programação americano/japonês diferentes?)</p>
<p><strong>Hal:</strong> Quanto ao Zed, não vou tomar partido nessa discussão. Zed pode dizer o que quiser, e normalmente faz. Tenho certeza que há alguma verdade dos dois lados em qualquer controvérsia.</p>
<p>Quanto à metaprogramação — bem, acho que essas capacidades estão no Ruby por um motivo. Foram pensadas para serem usadas. Mas qualquer ferramenta tem usos adequados e inadequados. É impossível generalizar e dizer &ldquo;isso é sempre ruim&rdquo;, mas certamente a metaprogramação pode ser mal utilizada.</p>
<p>Quanto ao Rails em si, não tenho dúvida de que há código bom e ruim nele. Suspeito que os desenvolvedores que trabalham nele admitiriam isso. É possível que tenham usado &ldquo;magia demais&rdquo; aqui e ali, embora eu não possa dizer especificamente onde. Mas o Rails poderia existir sem recursos de metaprogramação? No seu sentido atual — em qualquer sentido significativo, diria que não.</p>
<p><strong>AkitaOnRails:</strong> Entrevistei Avi Bryant, famoso pelo Seaside, e um dos seus lemas é que &ldquo;uma linguagem não está terminada até poder se estender&rdquo; ou &ldquo;tartarugas até o fim&rdquo; como ele diz. Significa que Ruby ainda depende muito de extensões C até hoje. Claro, as motivações iniciais para Ruby são diferentes das do Smalltalk. Por outro lado, pessoas como Evan Phoenix estão perseguindo exatamente esse objetivo: tornar Ruby extensível usando Ruby puro. O que você acha dessa nova direção?</p>
<p><strong>Hal:</strong> Gosto da ideia de &ldquo;Ruby em Ruby&rdquo; em geral, embora Matz não goste. E estou impressionado com o que vi do Rubinius até agora — acho que é um projeto importante e vai crescer em importância.</p>
<p>Se for possível caminhar para a eliminação de extensões C sem sacrificar velocidade, suponho que seja algo bom. Não tenho certeza se é possível. Poderíamos pelo menos criar um &ldquo;Ruby em Ruby&rdquo; que não dependa diretamente do MRI (Matz&rsquo;s Ruby Interpreter). Mas não espero ver o &ldquo;Ruby original&rdquo; ser substituído tão cedo.</p>
<p><strong>AkitaOnRails:</strong> Foi uma conversa muito esclarecedora, obrigado!</p>
]]></content:encoded><category>entrevistas</category><category>ruby</category><category>aprendizado</category></item><item><title>Conversando com Peter Cooper</title><link>https://akitaonrails.github.io/2008/01/09/conversando-com-peter-cooper/</link><guid isPermaLink="true">https://akitaonrails.github.io/2008/01/09/conversando-com-peter-cooper/</guid><pubDate>Wed, 09 Jan 2008 11:24:00 -0200</pubDate><description>&lt;p&gt;&lt;strong&gt;English readers, click &lt;a href="https://akitaonrails.github.io/2008/01/04/chatting-with-peter-cooper/"&gt;here&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;O &lt;a href="http://www.rubyinside.com/"target="_blank" rel="noopener"&gt;Ruby Inside&lt;/a&gt; é um dos maiores websites de Ruby/Rails disponível e uma grande fonte de notícias. Seu criador é o empreendedor britânico &lt;a href="http://www.petercooper.co.uk/"target="_blank" rel="noopener"&gt;&lt;strong&gt;Peter Cooper&lt;/strong&gt;&lt;/a&gt;, também autor do livro recentemente publicado &lt;a href="http://www.apress.com/book/view/9781590597668"target="_blank" rel="noopener"&gt;Beginning Ruby, from Novice to Professional&lt;/a&gt;, uma excelente fonte para qualquer um querendo aprender a linguagem Ruby.&lt;/p&gt;
&lt;p&gt;&lt;img src="http://s3.amazonaws.com/akitaonrails/assets/2008/1/4/peter-good4.jpg" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;p&gt;Peter fala sobre Ruby on Rails, negócios, iniciantes e, como um exclusivo de última hora, ele comenta o recente episódio &lt;a href="http://www.akitaonrails.com/2008/1/3/zed-is-not-dead"target="_blank" rel="noopener"&gt;nuclear do Zed&lt;/a&gt; que chocou muitas pessoas da comunidade. Apenas para deixar claro, Peter respondeu minhas perguntas antes do Ano Novo, é somente a última pergunta que foi adicionada depois.&lt;/p&gt;</description><content:encoded><![CDATA[<p><strong>English readers, click <a href="/2008/01/04/chatting-with-peter-cooper/">here</a></strong></p>
<p>O <a href="http://www.rubyinside.com/"target="_blank" rel="noopener">Ruby Inside</a> é um dos maiores websites de Ruby/Rails disponível e uma grande fonte de notícias. Seu criador é o empreendedor britânico <a href="http://www.petercooper.co.uk/"target="_blank" rel="noopener"><strong>Peter Cooper</strong></a>, também autor do livro recentemente publicado <a href="http://www.apress.com/book/view/9781590597668"target="_blank" rel="noopener">Beginning Ruby, from Novice to Professional</a>, uma excelente fonte para qualquer um querendo aprender a linguagem Ruby.</p>
<p><img src="http://s3.amazonaws.com/akitaonrails/assets/2008/1/4/peter-good4.jpg" alt=""  loading="lazy" /></p>
<p>Peter fala sobre Ruby on Rails, negócios, iniciantes e, como um exclusivo de última hora, ele comenta o recente episódio <a href="http://www.akitaonrails.com/2008/1/3/zed-is-not-dead"target="_blank" rel="noopener">nuclear do Zed</a> que chocou muitas pessoas da comunidade. Apenas para deixar claro, Peter respondeu minhas perguntas antes do Ano Novo, é somente a última pergunta que foi adicionada depois.</p>
<p><strong>AkitaOnRails:</strong> Para a comunidade Ruby Peter Cooper significa <a href="http://www.rubyinside.com/"target="_blank" rel="noopener">Ruby Inside</a>. Eu pessoalmente gosto de ler seu website já que ele acumula a maioria dos websites importantes de Ruby e Rails por aí. Deixe-me agradecer novamente por adicionar meu blog à lista do seu site. Mas como ele começou? O que você acha que foram os passos mais importante que tomou para construir sua boa reputação?</p>
<p><strong>Peter Cooper:</strong> Ruby Inside começou como um veículo para promover meu livro (já lançado) “Beginning Ruby.” O nome mesmo veio de um comentário feito numa entrevista para o podcast de Rails por Geoffrey Grosenbach onde alguém adaptou Ruby no velho slogan “Intel Inside”, que soou como um grande nome para um blog cobrindo coisas de Ruby. Inicialmente, o blog foi simplesmente para promover o livro, mas rapidamente se tornou um resumo de notícias de toda a comunidade Ruby. Acho que a chave de seu sucesso foram os grandes blogs Ruby da época, o blog de Ruby da O’Reilly sendo um bom exemplo, estavam postando cada vez mesmo uma vez que seus escritores estavam pegando mais e mais trabalhos de Ruby. Ruby Inside preencheu o buraco de fornecer notícias altamente digeridas de toda a comunidade Ruby, com apenas um ou dois posts por dia, permitindo desenvolvedores Ruby se manter atualizados com as coisas, mas sem precisar assinar centenas de blogs.</p>
<p><strong>AkitaOnRails:</strong> Olhando seu perfil no <a href="http://www.linkedin.com/in/petercooper"target="_blank" rel="noopener">LinkedIn</a> vejo que esteve bastante envolvido com negócios de internet nos últimos 10 anos. Você também se descrever como um ‘empreendedor serial’. Empreendedorismo é algo muito, muito difícil aqui no Brasil, principalmente por causa da economia e da quantidade absurda de burocracia envolvida. Quão difícil é na Inglaterra para ter seu próprio negócio?</p>
<p><strong>Peter:</strong> É muito fácil começar um negócio na Inglaterra. Dependendo do que quer fazer, pode apenas dizer que é um negócio logo de cara, sem preencher nenhum documento (embora você precise contactar o departamento tributário para que eles saibam!), e operar como um <a href="http://www.howtobooks.co.uk/employment/self-employment/sole-trader.asp"target="_blank" rel="noopener">sole trader</a>. Registrar um negócio oficialmente, entretanto, é razoavelmente fácil também e lhe dá várias proteções legais e uma imagem mais profissional. Receber investimento e tal não é particularmente fácil aqui, comparado com os Estados Unidos, mas se estiver disposto a começar, então o Reino Unido é muito bom por bancos fáceis, comunicação rápida e negócios com o resto do mundo. Com a vantagem natural da linguagem inglesa, o mercado americano é fácil de mirar do Reino Unido.</p>
<p><strong>AkitaOnRails:</strong> Seus outros produtos bem conhecidos devem ser <a href="http://snippets.dzone.com/"target="_blank" rel="noopener">Code Snippets</a> e <a href="http://www.feeddigest.com/"target="_blank" rel="noopener">Feed Digest</a>. Poderia apresentar ambos aos brasileiros que podem não conhecê-los? Como a idéia lhe ocorreu? Foi algo como <em>“coçar a própria coceira”</em> ou foi algo totalmente não relacionado e talvez seguindo alguma tendência que identificou? Que ferramentas usou para construí-las? Muitas pessoas tem interesse em saber o que é necessário para construir um produto de sucesso. O que acha que é necessário para ser um bom empreendedor na internet?</p>
<p><strong>Peter:</strong> Code Snippets foi o primeiro repositório de trechos de código “tagueados” no estilo del.icio.us. De fato, acho que foi a primeira aplicação Rails a usar tags, já que eu escrevi o código inicial que foi apropriado em várias bibliotecas de taggings. O site foi lançado no começo de 2005 e eu o vendi em fevereiro de 2007 para a DZone. Feed Digest é um serviço para mashing, processamento e republicação de feeds RSS e Atom para outros formatos, como HTML, Javascript, Flash, imagens e assim por diante. Eu vendi a uma empresa russa no verão de 2007.</p>
<p>Ambos os negócios / sites foram resultado de <em>“coçar a própria coceira”</em> como disse. Eu precisava de um sistema para armazenar trechos de código com tags, e del.icio.us não servia para isso, então Code Snippets saiu depois de uma maratona de 24 horas, foi lançada publicamente, e então cresceu para milhares de usuários com o tempo. Feed Digest evoluiu de um serviço inicial chamado RSS Digest que eu criei para coçar outra coceira, republicar meus links del.icio.us para o cabeçalho do meu blog. Ele cresceu para bem mais que isso, e agora tem mais de 25 mil usuários e serve talvez meio bilhão de requests todo mês. Eu não possuo nem tenho interesse direto em nenhum desses projetos agora, mas eu devo estar indo bem na lista de pessoas vendendo aplicações Rails!</p>
<p><img src="http://s3.amazonaws.com/akitaonrails/assets/2008/1/3/9781590597668.gif" alt=""  loading="lazy" /></p>
<p><strong>AkitaOnRails:</strong> Eu o parabenizo pelo livro recentemente publicado, pela Apress, <a href="http://approachingnormal.com/2007/11/27/book-review-beginning-ruby-from-novice-to-professional"target="_blank" rel="noopener">Beginning Ruby, from Novice to Professional</a>. Como Larry Wright diz em seu review, ele está certo que o Pickaxe é um bom livro de referência, mas você toma um caminho diferente sendo mais cuidadoso sobre o aspecto ‘didático’ do ambiente. Ele preenche um vazio já que há cada vez mais pessoas interessadas em aprender Rails mas não tem um livro introdutório para aprender o próprio Ruby. Por favor, descreva seu livro para nossa audiência já que acho que muitos brasileiros ainda não conhecem seu livro. Qual é seu público-alvo? Do que você fala?</p>
<p><strong>Peter:</strong> O livro atualmente está disponível apenas em inglês, infelizmente, então os Estados Unidos foram definitivamente o maior mercado alvo até agora. Sobre o conteúdo, o livro é muito remanescente dos livros “clássicos” de ensino de programação que eu tinha nos anos 80. Ele é bem passo-a-passo, com a instalação do Ruby vindo primeiro, seguindo por um passo-a-passo dos conceitos principais sobre orientação-a-objetos, sintaxe do Ruby, e a idéia básica de tipos de dados. Eventualmente, pelo final do livro, o leitor passou por operações em arquivos, uso de banco de dados (há até uma introdução a SQL), desenvolveu um jogo de aventura em texto, construiu uma simples aplicação Rails e assim por diante. É realmente um livro para iniciantes, do começo ao fim, e então ele pode ir para livros mais avançados como o Pickaxe ou The Ruby Way. Quem sabe não vemos o livro em português um dia!</p>
<p><strong>AkitaOnRails:</strong> E falando em iniciantes, novamente eu acho engraçado ler seu perfil no LinkedIn: <em>“‘Larguei a escola aos 16’ conta? Se sim, estou dentro. Educação é boa pra maioria, mas superestimado se você for um autônomo…”</em> Eu também larguei a faculdade para trabalhar na bolha da internet (embora não como empreendedor, o que eu me arrependo). Eu não recomendo que as pessoas larguem a faculdade como eu fiz, claro, é uma escolha pessoal e todos devem tomar decisões conscientes sobre seu próprio futuro. Mas existem muitas pessoas – pelo menos aqui no Brasil – que se orgulham de certificações e diplomas mais do que experiência. Claro, existem grandes desenvolvedores certificados, mas há mais maus desenvolvedores que realmente ‘acreditam’ em seus próprios certificados como garantia de competência! Eu não vejo nenhuma correlação entre diplomas e bons desenvolvedores. Qual sua opinião sobre isso?</p>
<p><strong>Peter:</strong> Tenho muito respeito por pessoas que seguem a rota acadêmica, e acho que no geral eles se tornam melhores no trabalho do que as menos educadas. Uma das desvantagens de ser doutrinado pela academia, entretanto, é que pessoas com muitos graus, certificações e diplomas normalmente agem como autômatos tecnológicos, somente entendendo um caminho de ação, sem capacidade de pensar dinamicamente em tempo real, e incapazes de tentar novas direções radicais. Há muito espaço no mundo para pessoas assim, mas por outro lado precisamos muito de pessoas “loucas” que tentam coisas que inicialmente parecem idiotas ou radicais.</p>
<p>O outro problema com pessoas que exibem suas certificações é que em muitos casos eles estão apenas provando que conseguiram passar um teste. Passar um teste e ter muito conhecimento não significa necessariamente que você desenvolve boa capacidade de resolução de problemas ou consegue trabalhar como um verdadeiro desenvolvedor, arquitetando soluções do zero. Por exemplo, um peão pode ser excelente construindo casas, mas ele provavelmente é muito ruim em realmente desenhar construções, que é o trabalho de um arquiteto. Em TI, especialmente em empresas pequenas, normalmente é necessário que os desenvolvedores usar ambos chapéu de arquiteto e desenvolvedor, e muitas pessoas com certificação, mas pouca experiência real, penam com desenho de sistemas.</p>
<p><strong>AkitaOnRails:</strong> Somos ambos evangelistas de Ruby e Rails, claro, mas como eu, não o vejo como um desenvolvedor ‘cego’, quer dizer, do tipo que precisa fazer todo o resto parecer ruim para justificar colocar Ruby num pedestal. Eu realmente acredito na <em>‘ferramenta certa para cada trabalho’</em>. Nem mesmo DHH afirma que Rails é a solução para todos os casos de uso. Isso dito, acho que Rails é o melhor para um nicho de desenvolvimento web. Recentemente eu me envolvi – e me arrependo disso – contra um troll defensor de .NET. Não desgosto de .NET, longe disso. De qualquer forma, você se vê envolvido em discussões como essa? Ou você tenta evitá-los totalmente? Qual sua opinião sobre esse tipo de discussão ‘X vs Y’?</p>
<p><img src="http://s3.amazonaws.com/akitaonrails/assets/2008/1/4/Picture_1.png" alt=""  loading="lazy" /></p>
<p><strong>Peter:</strong> Acho que é possível ter jogos políticos interessantes em qualquer situação. Como um ser humano normal eu tenho, claro, minhas preferências, mas é importante reconhecê-los pelo que são e ainda ser capaz de enxergar o quadro completo. Acredito em tentar usar a ferramenta certa para o trabalho (ou, mais especificamente, a ferramenta mais eficiente para o trabalho – eu não vou aprender uma linguagem nova para resolver apenas um problema), então o Ruby Inside roda em <strong>WordPress</strong> , uma plataforma de weblog em PHP. Em termos de predisposição, eu certamente sou meio anti-Microsoft, embora precise admitir que para desenvolvimento de aplicações GUI eles estejam anos-luz à frente de todo mundo.</p>
<p>Eu não tenho evitar me meter em discussões do tipo X vs Y, embora eu tende a ser meio advogado-do-diabo nesses casos. É importante se manter o mais científico e objetivo quanto possível nessas situações, mas eu certamente deixarei um pouco de predisposição se mostrar de tempos em tempos, como qualquer humano faria. Por exemplo, eu (e estou longe de ser o único nisso, embora muitos não queiram atirar pedras publicamente) particularmente não sou muito chegado na proteção excessiva do David Heinemeir Hansson dos termos Ruby e Ruby on Rails, e especialmente o logotipo Rails ao ponto de rejeitar seu uso em livros em que ele não trabalhou pessoalmente. Não tenho medo de mostrar alguma predisposição e problemas de referência como essa de tempos em tempos.</p>
<p><strong>AkitaOnRails:</strong> Isso nos leva à outra questão: todos os dias as pessoas aqui me perguntam <em>“Por que eu deveria escolher Ruby on Rails em vez de X?”</em> Pessoalmente, acho que não há resposta clara para isso. Sendo experiente em muitas plataformas como ASP.NET, Java, PHP, Perl, eu fiz minha escolha baseado não apenas em performance bruta (que Ruby não tem, por enquanto), nem mesmo um conjunto maduro de bibliotecas (que está evoluindo depressa). Algumas razões foram baseadas unicamente em eu estar feliz com esta plataforma. Acredito que Ruby me permite escrever mais código ‘bonito’ como Marcel Molina Jr. explica. Mas <em>“a beleza está nos olhos de quem vê.”</em> Qual sua opinião? Sendo um programador experiente em outras plataformas, por que escolheu Rails?</p>
<p><strong>Peter:</strong> Eu era um desenvolvedor Perl antes de cruzar com Ruby e Rails, e quando vi Rails, a primeira coisa que fiz foi tentar cloná-lo em Perl. Infelizmente, eu definitivamente não estou entre na elite de programadores, nem de longe, então minha tentativa foi bagunçada. Tentei usar Rails diretamente, meio relutante, com uma promessa a mim mesmo de não me deixar envolver e aprender uma nova linguagem, mas meramente para desenvolver o que eu precisava na época. Claro, o resto é história e eu me converti inteiramente a Ruby, pela sua consistência, facilidade de uso, e pela forma como ela parece uma linguagem “natural”.</p>
<p>Em 2004, a biblioteca Ruby era pobre, RubyGems não era popular, e não haviam muitos livros disponíveis, então parecia uma escolha ruim, mas essas coisas mudaram muito rápido, e eu diria que a biblioteca Ruby em 2007 compete muito fortemente com, digamos, Python, e mesmo estando atrás em quantidade numérica ao CPAN do Perl, a qualidade e modernidade das bibliotecas Ruby superam isso. Ruby é agora uma forte escolha.</p>
<p><strong>AkitaOnRails:</strong> Eu preciso estender esse tema porque acho que é relevante já que vemos mais e mais pessoas mudando para Rails. Eu vejo 2 tipos de desenvolvedores vindo à bordo: o primeiro sendo programadores experientes que não estão satisfeitos com seus trabalhos atuais e ferramentas e querem tentar algo novo e renovador. O segundo sendo desenvolvedores iniciantes que acham que Java ou .NET tem uma curva de aprendizado muito mais alta do que Rails. Eles me preocupam um pouco porque tendem a pensar que Rails é fácil demais para ser considerado profissionalmente e outros se frustram em descobrir que Ruby não é Basic, e você precisa se esforçar para aprender seus caminhos. Você faz treinamentos também, qual sua experiência lidando com iniciantes?</p>
<p><strong>Peter:</strong> Nunca lidei com alguém que seja completamente novo à desenvolvimento de aplicações Web, então não posso dar uma resposta concreta. Entretanto, eu certamente não acho que as pessoas estejam escolhendo aprender Ruby ou Rails porque são percebidas como “fáceis”. De fato, acho que são os desenvolvedores mais experientes que consideram Rails fácil, e é por isso que estão a estão experimentando. Iniciantes tendem a ir com seja lá que esteja na moda no momento ou o que é mais popular. Não há falta de iniciantes para todas as maiores linguagens agora, é somente que Ruby está finalmente recebendo sua fatia.</p>
<p><strong>AkitaOnRails:</strong> 3 anos atrás a maioria dos desenvolvedores previram a “queda” do Rails como uma alternativa viável. Hoje vemos Rails 2.0 saindo e a comunidade Rails crescendo depressa e mais forte a cada dia. Agora as pessoas acham que Rails é o competidor a derrotar. Acho que é algo bom porque nós tendemos a correr mais rápido (desenvolver mais gems, inovar mais) quando estamos sobre pressão. Você acha que as pessoas estão aceitando Rails mais ou ainda vê barreiras para a adoção do Rails, pelo menos aí na Inglaterra ou Europa em geral?</p>
<p><strong>Peter:</strong> Não concordo que 3 anos atrás a maioria dos desenvolvedores previam a queda do Rails. Acho que haviam apenas muitos programadores defensivos escolhendo ignorá-la. Não acho que a maioria dos desenvolvedores de outras plataformas vejam Rails como algo a se derrotar. Na realidade há muita cegueira nos galhos da comunidade de programação para os esforços feitos em outros galhos. A maioria dos programadores .NET não se importam, e muito provavelmente nem ouviram falar disso, Ruby on Rails. Desenvolvedores em plataformas que estão morrendo, como Cold Fusion, estão mais familiarizados com Rails, simplesmente porque eles tem procurado alternativas, mas Java e .NET ainda estão tomando os novos desenvolvedores a uma taxa muito maior que Ruby e Rails. Existe uma grande diferença no que os blogs e a mídia online quer relatar e o que realmente está acontecendo por aí.</p>
<p><strong>AkitaOnRails:</strong> Existem muitas coisas que o Ruby ainda não tem e agora estamos vendo Ruby 1.9 sendo lançado. Ainda não é um 2.0 estável mas é um sinal claro que a linguagem está evoluindo depressa como uma plataforma madura. Performance de graça sempre é bem vinda, mas este lançamento quebrará muitas coisas. Já está usando 1.9 ou sente que ele ainda não está pronto para começar?</p>
<p><strong>Peter:</strong> Eu brinquei com Ruby 1.9 um pouco, mas não uso rotineiramente. Eu não me considero um programador no sentido acadêmico. Gosto de saber e brincar brevemente com tecnologias extremas, mas não sou um desses super-programadores que fazem download digamos, de Erlang ou Haskell e tentam aprendê-los num fim de semana. Ruby 1.8 definitivamente continuará sendo meu interpretador Ruby por pelo menos mais alguns meses.</p>
<p><strong>AkitaOnRails:</strong> Nossa comunidade brasileira ainda é muito jovem e pequena, eu normalmente a descrevo como a comunidade americana em 2004 ~ 2005. Ainda não atingimos massa crítica. Como estão as coisas por aí na Inglaterra ou Europa? Sua comunidade já é grande o suficiente o suficiente para o mercado já demandar profissionais relacionados a Rails?</p>
<p><strong>Peter:</strong> O mercado no Reino Unido ainda é muito pequeno. Não houve literalmente nada em 2005 mas as coisas cresceram rapidamente nos últimos anos, embora ainda seja talvez um milionésimo do tamanho do mercado para serviços de Java ou .NET. Existe normalmente alguns trabalhos relacionados a Rails flutuando por aí, mas até agora descobri que Rails é uma tecnologia que agências estão usando para seus clientes por trás das cenas, em vez de ser algo sendo ativamente demandado. Não estou diretamente envolvido na comunidade britânica de Ruby ou Rails, entretanto, então não posso dar muitos detalhes disso.</p>
<p><strong>AkitaOnRails:</strong> Isso é só pela brincadeira: se você fosse DHH ou Matz o que gostaria de mudar no Rails ou Ruby? Ou talvez, para onde vê os dois indo?</p>
<p><strong>Peter:</strong> Se eu fosse o DHH, provavelmente Rails não existiria, simplesmente porque eu acho que muito muito do seu excelente evangelismo de Rails é dirigido por uma ponta de vontade de fama. Por um lado mais prático, eu faria Rails menos ‘opinionated’ (de opinião) e mais customizável, simplesmente porque muitas das opiniões são muito rígidas para serem práticas no mundo real. A opinião inicial de depender do banco de dados para dar informações sobre a estrutura do Model foi legal, mas então vieram as migrations … e de repente estamos definindo layout de tabelas no código afinal, normalmente em muitas dezenas de arquivos! Por que não colocar os atributos diretamente no Model e deixar Rails tomar conta das mudanças de schema transparentemente? DataMapper faz isso, e ActiveRecord está começando a ficar para trás em comparação com esse estilo bizarro.</p>
<p>Do lado do Ruby, acho que Matz fez um excelente trabalho tecnicamente, embora apesar do DHH pontuar mais alto na escala de Relações Públicas, Matz parece relutante em promover o Ruby. Acho que ambos é um pouco de modéstia ser uma coisa honrável na cultura japonesa, mas também porque Ruby é algo que ele desenvolveu para coçar uma coceira, e outros milhão de desenvolvedores usando a linguagem não o beneficiaria significantemente. Ele é um grande cara, mas falta a loucura de um Larry Wall (Perl) e a autoridade de Guido van Rossum (Python) e tem muita sorte que pode depender de uma comunidade muito forte e vocal para promover Ruby. Um dos benefícios do jeito mão-na-massa do Matz é que as pessoas sentem que podem ter autoridade sobre várias áreas da linguagem e comunidade para si sem ter que perguntar à uma autoridade maior.</p>
<p>Do lado técnico, a única coisa que eu talvez faria se estivesse em controle do desenvolvimento da linguagem Ruby seria fazer investidas mais fortes em direção a construções mais funcionais. JavaScript e Perl 6 estão andando bastante no mundo da programação funcional, e Ruby precisa seguir. Eu também consideraria concorrência muito fortemente e tornar isso um foco principal para desenvolvimento de novas funcionalidades na linguagem.</p>
<p><strong>AkitaOnRails:</strong> Qual seria sua recomendação para iniciantes em Rails aqui no Brasil? Quero dizer, para aqueles que querem aprender tanto Ruby e Rails mas podem precisar de alguma guia no começo?</p>
<p><strong>Peter:</strong> Bem, se você consegue falar inglês, então naturalmente eu sugeriria meu livro “Beginning Ruby” publicado pela Apress! Infelizmente não tenho familiaridade com recursos em português para aprender Ruby ou Rails, embora tenho certeza que você tenha! Um recurso grátis que eu definitivamente recomendaria a novos desenvolvedores é o “Aprenda a Programar” de Chris Pine. Está disponível como livro, mas tem uma versão mais crú disponível para ler <a href="http://pine.fm/LearnToProgram/"target="_blank" rel="noopener">grátis online</a>.</p>
<p><img src="http://s3.amazonaws.com/akitaonrails/assets/2008/1/3/467593017_cd7871742c.jpg" alt=""  loading="lazy" /></p>
<p><strong>AkitaOnRails:</strong> Agora, falando em informação, tivemos um começo de ano bem explosivo. Zed Shaw literalmente <a href="http://www.akitaonrails.com/2008/1/3/zed-is-not-dead"target="_blank" rel="noopener">explodiu</a> em reclamações, ofensas e toda forma de comunicação agressiva. Como eu disse num artigo anterior, eu me choquei no começo, mas lendo até o fim – tentando filtrar todo o ódio e maneirismos não civilizados – e realmente há alguma informação enterrada lá. Qual sua opinião sobre esse episódio?</p>
<p><strong>Peter:</strong> Pessoalmente, acho que o Zed acertou em cheio. Não gosto do jeito que ele especialmente ataca algumas pessoas (Kevin Clark, por exemplo) por causa de pequenas infrações. Sua linguagem é severa, e ele claramente tem muito ácido. Por trás de todas as palavras de ofensas e bater no peito, entretanto, há muita verdade. Eu simpatizo com seus argumentos principais, especialmente aqueles levantados na atualização do “Round 2” publicado em 3 de janeiro.</p>
<p>Zed toca na maneira como as pessoas se formam em gangues elitistas e dirigidas pelo ego, como o Rails Core e o <a href="http://blog.caboo.se/"target="_blank" rel="noopener">caboo.se</a>. Eu me envolvi com o caboo.se por um tempo, e tenho muito respeito por muitos membros (Courtenay Gasking e Amy Hoy, por examplo), mas a coisa tanto fedia muito elitismo para mim, e eu me distanciei de toda essa socialização online relacionada a Rails. Eu me lembro de alguns incidentes condescendentes patéticos de membros dessas comunidades, mas ao contrário de Zed eu deixei quieto. Acho que uma das maiores causas dessa tensão, formação de gangues e infantilidade generalizada é que muitas das pessoas envolvidas com essas gangues não tem vida social fora dessa comunidade. Isso provavelmente explica esses joguinhos medievais como <a href="http://headius.blogspot.com/2007/11/is-werewolf-killing-conference-hackfest.html"target="_blank" rel="noopener">Werewolf</a> (Máfia) e bobagenzinhas em geral são tão populares nas conferências, em vez de, digamos, realmente revolucionar a área.</p>
<p>Por fim, Zed acertou em cheio com seus comentários sobre o livro “Programming Ruby” mais comumente conhecido como o “Pickaxe.” Eu tendo a me manter politicamente correto nesse assunto, especialmente porque tenho um livro concorrente, mas o Pickaxe realmente é incrível na sua mediocridade. Ele vende bem porque tem a vantagem de ter sido o primeiro com nome reconhecido, e ninguém se incomodou em escrever um livro de referência melhor (The Ruby Way é excelente, mas não é um livro de referência). Por ter o único livro de referência de Ruby impresso, Dave Thomas merece crédito, mas ainda assim é medíocre.</p>
<p><strong>AkitaOnRails:</strong> Para o bem ou para o mal, tenho sentimentos misturados sobre esse episódio. Não vou julgar ninguém ainda. Vejamos como isso se desenrola. E claro, eu realmente agradeço a paciência do Peter Cooper comigo, gentilmente respondendo todas as minhas perguntas. Muito obrigado!</p>
]]></content:encoded><category>entrevistas</category><category>ruby</category><category>blog</category></item><item><title>Conversando com Adrian Holovaty</title><link>https://akitaonrails.github.io/2008/01/01/conversando-com-adrian-holovaty/</link><guid isPermaLink="true">https://akitaonrails.github.io/2008/01/01/conversando-com-adrian-holovaty/</guid><pubDate>Tue, 01 Jan 2008 16:47:00 -0200</pubDate><description>&lt;p&gt;&lt;strong&gt;English readers, click &lt;a href="https://akitaonrails.github.io/2008/01/01/chatting-with-adrian-holovaty/"&gt;here&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Traducción en &lt;a href="http://www.marcelor.com/2008/01/conversando-con-adrian-holovaty-creador-del-proyecto-django-traduccion.html"target="_blank" rel="noopener"&gt;Español&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Como prometi depois da entrevista com &lt;a href="http://www.akitaonrails.com/2007/12/15/conversando-com-avi-bryant-parte-1"target="_blank" rel="noopener"&gt;Avi Bryant&lt;/a&gt; , aqui vai outra grande conversa com &lt;a href="http://www.holovaty.com/"target="_blank" rel="noopener"&gt;Adrian Holovaty&lt;/a&gt;, o conhecido criador do framework web &lt;a href="http://www.djangoproject.com/"target="_blank" rel="noopener"&gt;Django&lt;/a&gt; escrito em Python.&lt;/p&gt;
&lt;p&gt;&lt;img src="http://s3.amazonaws.com/akitaonrails/assets/2007/12/31/387373570_870fa6257c.jpg" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;p&gt;Para mim esta é uma matéria importante porque eu sempre disse que tecnologia não tem que ser sobre divórcio. Tecnologia é sobre integração. Sou um programador e evangelista Ruby on Rail tempo integral, mas acima de tudo, eu tento ser um ‘bom’ programador. E bons programadores reconhecem boa tecnologia e a conquista de seus criadores. E o Django de Adrian é uma dessa conquistas excepcionais que merecem a atenção e o sucesso.&lt;/p&gt;</description><content:encoded><![CDATA[<p><strong>English readers, click <a href="/2008/01/01/chatting-with-adrian-holovaty/">here</a></strong></p>
<p><strong>Traducción en <a href="http://www.marcelor.com/2008/01/conversando-con-adrian-holovaty-creador-del-proyecto-django-traduccion.html"target="_blank" rel="noopener">Español</a></strong></p>
<p>Como prometi depois da entrevista com <a href="http://www.akitaonrails.com/2007/12/15/conversando-com-avi-bryant-parte-1"target="_blank" rel="noopener">Avi Bryant</a> , aqui vai outra grande conversa com <a href="http://www.holovaty.com/"target="_blank" rel="noopener">Adrian Holovaty</a>, o conhecido criador do framework web <a href="http://www.djangoproject.com/"target="_blank" rel="noopener">Django</a> escrito em Python.</p>
<p><img src="http://s3.amazonaws.com/akitaonrails/assets/2007/12/31/387373570_870fa6257c.jpg" alt=""  loading="lazy" /></p>
<p>Para mim esta é uma matéria importante porque eu sempre disse que tecnologia não tem que ser sobre divórcio. Tecnologia é sobre integração. Sou um programador e evangelista Ruby on Rail tempo integral, mas acima de tudo, eu tento ser um ‘bom’ programador. E bons programadores reconhecem boa tecnologia e a conquista de seus criadores. E o Django de Adrian é uma dessa conquistas excepcionais que merecem a atenção e o sucesso.</p>
<p>Então, como meu primeiro post do ano (publicado às 0:01h!), gostaria de celebrar as grandes mentes da nossa comunidade de ‘desenvolvimento’, esperando que os bons desenvolvedores usem seu tempo criando grandes tecnologias em vez de desperdiçar em guerrinhas inúteis.</p>
<p><strong>AkitaOnRails:</strong> Como sempre faço, vamos começar falando um pouco sobre você. Há quanto tempo é programador?</p>
<p><strong>Adrian Holovaty:</strong> Vamos ver – venho lidando com computadores desde que era um garoto brincando com o Commodore 64 no meio dos anos 80.</p>
<p>Um programa que escrevi na época foi para a calculadora TI-85 na classe de matemática do colégio. Quando me graduei um monte de estudantes estavam usando, porque eu tinha todas as fórmulas e coisas assim.</p>
<p>Eu não levei nenhuma dessas coisas a sério até a faculdade, quando estudei ciência da computação. Mas não terminei o curso, que é uma coisa que sempre me incomodou.</p>
<p>Meu curso principal na faculdade foi em jornalismo, pois originalmente eu queria ser um repórter de jornal, mas depois que eu trabalhei com um web site no jornal do campus (<a href="http://www.themaneater.com/"target="_blank" rel="noopener">The Maneater</a> – o melhor nome de jornal que já vi!), percebi que seria muito mais divertido trabalhar online do que com um produto em papel.</p>
<p>Então acabei achando uma maneira de combinar jornalismo/notícias e programação, e eu tive vários trabalhos fazendo exatamente isso!</p>
<p><strong>AkitaOnRails:</strong> E o que o levou ao mundo dos computadores?</p>
<p><strong>Adrian:</strong> Acho que foi minha criação, já que meu pai foi programador de computador desde os anos 70, nos dias do cartão perfurado. Eu lembro de ver todos os tipos de cartões em nossa casa enquanto crescia.</p>
<p><img src="http://s3.amazonaws.com/akitaonrails/assets/2007/12/31/247456700_94dbcdbf86.jpg" alt=""  loading="lazy" /></p>
<p><strong>AkitaOnRails:</strong> E, claro, como conheceu e se apaixonou por Python?</p>
<p><strong>Adrian:</strong> Meu caminho de desenvolvimento web foi (eu acho) bem típico, pelo menos baseado nas experiência de meus amigos e colegas. Eu originalmente aprendi a escrever scripts CGI em Perl em um curso de desenvolvimento web da faculdade. Então eu me ensinei PHP porque alguém me recomendou.</p>
<p>Depois de fazer desenvolvimento Web com PHP por alguns anos, eu meio que me cansei disso. Naquela época, estava trabalhando com Simon Willison no website de um jornal na cidade de Lawrence, no Kansas. Simon e eu estávamos cansados de PHP e decidimos “mergulhar em Python” (trocadilho intencional) lendo o excelente livro de mesmo nome do <a href="http://en.wikipedia.org/wiki/Mark_Pilgrim"target="_blank" rel="noopener">Mark Pilgrim</a> , que foi lançado na época. Isso deve ter sido no fim de 2002.</p>
<p>Imediatamente nos apaixonamos por Python. E quando eu digo “imediatamente”, realmente quero dizer isso. Foi como uma revelação, algum tipo de momento divino. Foi o equivalente em programação à amor à primeira vista.</p>
<p>Então Simon e eu decidimos que, dali em diante, iríamos codificar tudo em Python. Essa é uma das coisas interessantes em se trabalhar em um pequeno grupo de desenvolvimento Web – podíamos tomar esse tipo de decisões instantâneas!</p>
<p><strong>AkitaOnRails:</strong> Eu fui apresentado a Python pela primeira vez acho que em 2000. Mas foi através de desenvolvimento web usando <a href="http://www.zope.org/"target="_blank" rel="noopener">Zope</a>. Acho que ele ganhou muita atenção naquela época. Você já tentou ele?</p>
<p><strong>Adrian:</strong> Não, nunca tentei Zope. Ainda, até hoje, nunca tentei. E me disseram que isso foi uma coisa boa, porque evidentemente ele afastou algumas pessoas de Python na época, seja lá por qual razão. (A versão nova supostamente é muito melhor, mas eu não mexi com ele, também).</p>
<p><strong>AkitaOnRails:</strong> Você está certo, e é meio engraçado porque um monte de pythonistas brasileiros ainda usam <a href="http://plone.org/"target="_blank" rel="noopener">Plone</a> (eu acho que ele evoluiu do Zope mas eu não tentei ele também). Então, todos sabemos que Django nasceu da necessidade quando você estava desenvolvendo websites para a World Online. Por favor nos descreva como você começou e como é o dia-a-dia de trabalho lá. Talvez o que o levou a Django durante seus dias de trabalho.</p>
<p><strong>Adrian:</strong> Claro! Bem, geralmente quando as pessoas pensam em jornais, elas pensam em editores irritados e ultrapassados e repórteres rascunhando em blocos de papel com lápis. Esse jornal do Kansas em que trabalhei era o oposto disso. Está além do escopo desta entrevista, mas por várias razões o website desse jornal atraiu (e ainda atrai até hoje) uma grande equipe de desenvolvimento – uma que eu colocaria contra qualquer equipe 10 vezes o seu tamanho.</p>
<p>Estávamos fazendo coisas “Web 2.0” em 2002 e 2003, e estávamos construindo aplicações web em dias, não semanas ou meses. Isso era principalmente devido ao ambiente jornalístico – pessoal de jornal gosta de datas.</p>
<p>Então estávamos nessa cultura de <em>“desenvolvimento web com datas de jornalismo”</em> e precisávamos de ferramentas que nos deixassem criar aplicações web rapidamente. Olhamos algumas bibliotecas Python que haviam na época (2003), e terminamos decidindo escrever nossas próprias coisas.</p>
<p>Não decidimos parar para fazer um framework – foi um caminho bem clássico e clichê, na realidade! O que aconteceu foi, nós construímos um site com Python. Então construímos mais um, e percebemos que os sites tem uma boa parte de código em comum, então fizemos a coisa certa e extraímos os pedaços comuns em uma biblioteca.</p>
<p>Continuamos a fazer isso – extraindo e extraindo, baseado em cada nova aplicação Web que criávamos – e eventualmente tínhamos um framework.</p>
<p><strong>AkitaOnRails:</strong> Como anotação, realmente isso é meio que interessante! Eu adoraria ouvir o que você acha que a World Online tinha que atraía bons desenvolvedores como você para lá! Apenas um resumo está bom. É o tipo de percepção que empresas brasileiras precisam aprender melhor. Deixá-los usar Python provavelmente foi uma delas :-)</p>
<p><strong>Adrian:</strong> Sim, meio que recai em <strong>dar poder aos empregados</strong>. Meu chefe, que liderava a equipe Web, delegava todas as decisões de tecnologia para mim e o Simon. Esse tipo de cultura realmente encoraja trabalho de qualidade, porque torna todos da equipe mais investidos.</p>
<p><img src="http://s3.amazonaws.com/akitaonrails/assets/2007/12/31/1454328380_6b6053d1c9.jpg" alt=""  loading="lazy" /></p>
<p>￼<br>
<strong>AkitaOnRails:</strong> É verdade. Empresas tradicionais preferem um estilo mais hierárquico (e burocrático), com um gerente idiota segurando o chicote. Mas voltando ao assunto. Então, eu particularmente não gosto desses tipos de comparação linguagem x VS linguagem y ou framework a Vs framework b. Em vez disso gostaria de ouvir o que você acha que é legal sobre Python – a linguagem e a plataforma – e Django. Quais as funcionalidades em Django que você mais gosta, quero dizer, aqueles pedaços que realmente acha para você como “as” grandes idéias?</p>
<p><strong>Adrian:</strong> Bem, eu amo abstrações – como, eu suspeito, qualquer programador. No seu núcleo, Django é somente um conjunto de abstrações comuns às tarefas de desenvolvimento Web. Me dá muito prazer criar abstrações de algo nível, para encapsular problemas maiores de uma maneira que as torna simples.</p>
<p>O que eu realmente gosto sobre Django é a profundidade e extensão das abstrações que ele dá. E em muitos casos (eu espero!), são limpas, fáceis de usar e entender. Deixe-me dar um exemplo de uma abstração: criar um feed RSS.</p>
<p>Quando se cria um feed RSS, você não quer se lembrar de cada tag, da exata formatação do feed – você apenas de importa sobre os itens no feed. Então Django dá uma biblioteca bem simples que recebe um punhado de itens e cria o feed a partir delas.</p>
<p>Isso foi um exemplo óbvio, mas o que realmente me empolga são as abstrações de alto nível, como o conceito de um “site admin”. Django vem com uma aplicação completamente dinâmica que cria um maravilhoso site CRUD pronto para produção para seu banco de dados. Não há código para escrever – é apenas um pouco de configuração opcional. Também tem algo chamado <a href="http://www.djangoproject.com/documentation/databrowse/"target="_blank" rel="noopener"><strong>Databrowse</strong></a>, que é uma abstração do conceito de <em>“Me mostre meus dados, como hiper-textos inteligentes”</em>.</p>
<p>Então, sempre que explico Django a alguém, eu sempre termino dizendo, <em>“é apenas um monte de abstrações de tarefas comuns em desenvolvimento Web”</em> – do encapsulamento de baixo nível de HTTP para conceitos de maior nível. Quanto mais alto nível, mais produtivo você pode ser. Desculpe se isso foi muito conceitual!</p>
<p><img src="http://s3.amazonaws.com/akitaonrails/assets/2007/12/31/1496211063_262b298650.jpg" alt=""  loading="lazy" /></p>
<p>Já sobre Python – o que posso dizer? É maravilhoso. É como poesia. É tão limpo, tão lógico, tão regular, tão óbvio. E o sistema de importação é de morrer.</p>
<p>Muitas pessoas dizem que código Python é fácil de ler/entender por causa da consistência de espaços em branco e simplicidade da linguagem. Eu concordo com isso, mas eu acho que também tem a ver com a elegância do sistema de importação. Por que? Porque se quiser saber como <strong>qualquer</strong> módulo Python funciona, apenas olhe para o código, e olhe para os módulos que ele importa. Como o <a href="http://www.python.org/dev/peps/pep-0020/"target="_blank" rel="noopener">Zen do Python</a> diz, <em>“Namespaces é uma grande idéia buzinante – vamos fazer mais disso!”</em></p>
<p><strong>AkitaOnRails:</strong> Comunidades de tecnologia são legais porque são tão energéticas e apaixonadas. Por um lado você tem aqueles que contribuem e fazem a tecnologia crescer mais depressa. Do outro, tem os espertalhões e trolls que gostam de guerrinhas. Você se queima de vez em quando, ou tende a evitar esse tipo de discussão? Especialmente, algum tempo atrás você e o DHH estiveram juntos na apresentação <a href="http://www.djangoproject.com/snakesandrubies/"target="_blank" rel="noopener">Snakes and Rubies</a>. Eu acho que foi muito legal porque não acabou em mais uma guerrinha. Qual sua opinião sobre esse tipo de discussão aberta e não inflamatória?</p>
<p><strong>Adrian:</strong> A resposta a isso é óbvia – claramente discussões construtivas são mais produtivas.</p>
<p>Por vezes, eu tive minhas paixões por Python/Django tirarem o melhor de mim, mas eu melhorei muito com o tempo. Percebi uma coisa: no fim do dia, o que realmente importa são os sites que as pessoas criam com essas ferramentas, não as ferramentas em si. Se você vai julgar alguém, julgue os sites que essa pessoa faz, em vez das ferramentas que ela usa.</p>
<p>Atualmente, se eu me envolvo em algum tipo de discussão desse tipo, normalmente é para tentar acalmar as pessoas</p>
<p><strong>AkitaOnRails:</strong> Bem dito. Voltando às funcionalidades, você mencionou ‘Databrowse’ antes. Eu gostaria de saber mais sobre isso. Acho que o Django não tinha isso na época em que eu tentei da primeira vez. É uma nova funcionalidade (ou eu estou atrasado?) Poderia elaborar mais essa construção?</p>
<p><strong>Adrian:</strong> Databrowse ainda é pouco conhecido! Aqui vai o Caso de Uso.</p>
<p>Digamos que você tem um monte de dados no seu banco de dados, e tudo que quer é <strong>olhar</strong> para ele. Aqui vão suas opções atuais: você pode cair no console do psql ou mysql e rodar um punhado de SELECTs, mas isso fica cansativo. Você poderia rodar alguma coisa como PHPMyAdmin, mas isso é mais uma ferramenta administrativa do que uma ferramenta de <strong>navegação</strong>. Você poderia usar algum tipo de aplicação externa que permite navegar pelas tabelas do banco, no estilo MS Access, mas isso está no domínio de aplicações de desktop.</p>
<p>Databrowse automaticamente cria um site web que mostra seus dados, de forma que você pode clicar por aí como quiser.</p>
<p>A outra coisa que ele faz é apontar pesquisas interessante e não-óbvias. Por exemplo, se tiver uma tabela que tem uma coluna DATE (tipo Data), ele automaticamente criará uma visão de calendário dessa tabela.</p>
<p>O objetivo não é para as pessoas usarem isso para criar sites públicos – o objetivo é que as pessoas usem isso para explorar seus dados, sem nenhum esforço adicional.</p>
<p>Outro caso de uso vem do mundo do jornalismo. Eu costumava trabalhar para um cara chamado Derek Willis no jornal Washington Post. O trabalho dele era adquirir enormes bancos de dados e colocá-los na intranet do jornal, para que os repórteres pudessem procurar e navegar pelos dados para pesquisas.</p>
<p><img src="http://s3.amazonaws.com/akitaonrails/assets/2007/12/31/179099354_6199af510a.jpg" alt=""  loading="lazy" /></p>
<p>Derek não queria ter que fazer uma nova aplicação Web toda vez que recebesse um novo conjunto de dados, então ele usou Databrowse para fazer sites de intranet que mostrasse seus bancos de dados – com pouco ou nenhum esforço.</p>
<p>Isso volta para o que eu estava dizendo sobre abstrações de alto-nível. Databrowse é um tipo particular de abstração, e é realmente legal que ele incluiu algo assim para as pessoas usarem, se precisarem.</p>
<p><strong>AkitaOnRails:</strong> Parece muito legal, espero poder usar isso logo. Até certo ponto se parece um pouco com <a href="http://dabbledb.com"target="_blank" rel="noopener">Dabble Db</a> – apesar que é dentro da sua aplicação. Acho que você conhece <a href="http://www.akitaonrails.com/2007/12/15/conversando-com-avi-bryant-parte-1"target="_blank" rel="noopener">Avi Bryant</a> ? Acabei de entrevistá-lo e foi uma conversa muito legal. Você já tentou Seaside? (apenas de curiosidade eu tenho uma foto de você e Avi olhando para o macbook dele sentados na grama, o que foi aquilo?)</p>
<p><img src="http://s3.amazonaws.com/akitaonrails/assets/2007/12/19/627957460_48e4181526.jpg" alt=""  loading="lazy" /></p>
<p><strong>Adrian:</strong> Sim, isso foi inspirado no DabbleDB – é essencialmente uma simplificação do DabbleDB para seus próprios dados. Mas eu não diria nem isso, porque DabbleDB é todo um universo mais sofisticado do que Databrowse. DabbleDB é incrível.</p>
<p>Sim, eu me encontrei com Avi diversas vezes e sempre gosto de sua companhia. Até tocamos música juntos – ele é um fantástico tocador de harmônica!</p>
<p>A foto a que você se refere foi tirada na Foo Camp 2007. Eu nunca tentei Seaside, mas está na minha lista de tarefas. Se um dia eu tiver que desenvolver uma aplicação como DabbleDB que precisa manter uma <strong>tonelada</strong> de estado, eu me viraria para Seaside primeiro.</p>
<p><strong>AkitaOnRails:</strong> Entendo, eu sinto que bons músicos tendem a ser bons programadores também. Então, meu primeiro parabéns a você é sobre seu <a href="http://www.amazon.com/Definitive-Guide-Django-Development-Right/dp/1590597257"target="_blank" rel="noopener">novo livro de Django</a> que acabou de ser lançado. Acredito que seja uma grande conquista para a comunidade Django. Mais do que isso você conseguiu torná-lo <a href="http://www.djangobook.com"target="_blank" rel="noopener">disponível online</a> sobre uma licença Creative Commons.</p>
<p>Como você se envolveu com esse livro? Foi difícil convencer sua editora a ter um livro prontamente disponível online? Pergunto isso porque pelo menos no Brasil essa é uma idéia que é MUITO difícil de empurrar para as editoras. Nos conte mais sobre sua experiência escrevendo, os desafios e obstáculos pelo caminho.</p>
<p><strong>Adrian:</strong> Muito obrigado. Não há muita história aqui – o co-conspirador Jacob e eu fomos contatados pelo pessoal da Apress, que estavam interessados em publicar um livro de Django, e fizemos. Bem, devo completar: nos tomou <strong>um longo tempo</strong> , mas fizemos. Não foi difícil convencer a Apress a nos deixar disponibilizar o livro online. Eles tiveram uma experiência anterior fazendo o mesmo com o livro <a href="http://www.diveintopython.org/"target="_blank" rel="noopener">Dive Into Python</a> de Mark Pilgrim e eles são pessoas legais.</p>
<p>Em retrospecto, publicar o livro online foi uma decisão fantástica. Não somente o livro final está disponível online, mas tornamos capítulos disponíveis online enquanto as escrevíamos, com uma funcionalidade muito legal de comentários por parágrafo que deixa os leitores enviar erros, opiniões pelos quais estamos imensamente agradecidos. Tendo experimentado isso, eu não gostaria de publicar um livro de tecnologia de outra maneira.</p>
<p><strong>AkitaOnRails:</strong> Agora, meu segundo parabéns é por causa do <a href="http://www.j-lab.org/batten05winners.shtml"target="_blank" rel="noopener">Batten Award</a> por conquista excepcional em jornalismo online. O <a href="http://www.chicagocrime.org/"target="_blank" rel="noopener">ChicagoCrime.org</a> é muito legal e um bom exemplo de <a href="http://en.wikipedia.org/wiki/Mashup_%28web_application_hybrid%29"target="_blank" rel="noopener">mashup</a> feito direito. Infelizmente nosso governo local e instituições públicas têm muito pouco ou nenhum dado disponível online para usarmos. De onde veio sua idéia? Como foi seu desenvolvimento?</p>
<p><strong>Adrian:</strong> Obrigado – e não deixe isso os assustar de visitar a maravilhosa cidade de Chicago. ￼</p>
<p><img src="http://s3.amazonaws.com/akitaonrails/assets/2007/12/31/adrian_oscon_2006.png" alt=""  loading="lazy" /></p>
<p><strong>AkitaOnRails:</strong> haha, eu moro em São Paulo. Não pode ser pior ;-)</p>
<p><strong>Adrian:</strong> A idéia para o chicagocrime.org veio quando eu estava olhando o web site oficial do <a href="http://www.cityofchicago.org/police"target="_blank" rel="noopener">Departamento de Polícia de Chicago</a> e descobri que eles publicavam dados sobre crimes – embora em uma interface que é mais adequada para procura do que para navegação. Pensei, <em>“uau, são dados muito legais!”</em> e comecei a escrever um extrator de tela em uns 10 minutos.</p>
<p>Na mesma época, eu estava lidando com o site do Google Maps, que havia acabado de ser lançado, para ver se poderia colocar mapas do Google em meus próprios web sites. Eu percebi que dados de crime dariam uma grande aplicação de mapas, então coloquei os dois juntos, e nascia um dos primeiros mashups de Google Maps. Enquanto estava desenvolvendo o site, <a href="http://www.housingmaps.com"target="_blank" rel="noopener">HousingMaps.com</a> (<a href="http://www.craigslist.org/"target="_blank" rel="noopener">Craigslist</a> + Google Maps) saiu, então ele me venceu ao ser o <strong>primeiro</strong> machup real de Google Maps – mas chicagocrime.org veio logo depois.</p>
<p>A coisa que eu mais me orgulho disso foi o fato de chicagocrime.org ter sido um dos sites que influenciou o Google a abrir sua API de mapas. Na época quando os primeiros mashups apareceram, tínhamos que fazer engenharia-reversa do Javascript do Google!</p>
<p><strong>AkitaOnRails:</strong> Sei que você provavelmente tem duas grandes paixões em sua carreira: uma é desenvolvimento baseado em Python, claro, e a outra é jornalismo (não sei a ordem correta aqui). Você criou uma grande reputação na mídia online. Você está trabalhando para o Washington Post agora, correto? Eu li um artigo no <a href="http://www.ojr.org/ojr/stories/060605niles/"target="_blank" rel="noopener">OJR</a> onde você explicou sobre tecnologia sendo usada para dar poderes aos jornalistas. Você pretende ser um repórter algum dia, ou está mais para o back-end do jornalismo? Acho que você tem opiniões fortes sobre o futuro do jornalismo na Era da Internet, não é?</p>
<p><strong>Adrian:</strong> Bem, eu diria que minha <strong>principal</strong> paixão é música, mas é difícil viver disso. (Django foi batizado inspirado no famoso músico de jazz <a href="http://en.wikipedia.org/wiki/Django_Reinhardt"target="_blank" rel="noopener">Django Reinhardt</a>)<br>
￼<br>
Eu não estou mais trabalhando no Washington Post. No meio de 2007 eu ganhei um prêmio de dois anos da <a href="http://www.holovaty.com/blog/archive/2007/05/23/1145"target="_blank" rel="noopener">Knight Foundation</a> para criar um site de notícias local. Então fundei a <a href="http://everyblock.com"target="_blank" rel="noopener">EveryBlock</a> em Julho. Somos uma equipe de quatro pessoas e estamos trabalhando duro para fazer uma aplicação realmente legal.</p>
<p><img src="http://s3.amazonaws.com/akitaonrails/assets/2007/12/31/Picture_2.png" alt=""  loading="lazy" /></p>
<p>Mas sim, voltando à sua pergunta, eu certamente tenho fortes opiniões sobre como o jornalismo é praticado na Internet. Isso provavelmente é fora do escopo dessa entrevista, mas você pode ler meu artigo/reclamação estranhamente entitulado <a href="http://www.holovaty.com/blog/archive/2006/09/06/0307/"target="_blank" rel="noopener">Uma maneira fundamental que sites de notícias precisam mudar</a> para terem uma idéia.</p>
<p><strong>AkitaOnRails:</strong> Agora, isso é novidade para mim. Não sabia que você havia começado sua própria empresa (desculpe, eu ainda preciso alcançar a comunidade Python). Poderia nos dizer mais sobre sua nova empreitada?</p>
<p><strong>Adrian:</strong> Ei, não posso te culpar – estamos nos mantendo fora dos radares. Não há muito a se dizer sobre a EveryBlock neste ponto além do que é um chicagocrime.org vitaminado. É como chicagocrime, mas para mais cidades do que somente Chicado e mais informações do que somente crime.</p>
<p><strong>AkitaOnRails:</strong> Você deveria tentar para o Brasil :-)</p>
<p><strong>Adrian:</strong> Graças à internacionalização do framework Django, isso é inteiramente possível.</p>
<p><strong>AkitaOnRails:</strong> Sim, e falando nisso (fugindo um pouco do assunto) eu recomendo o filme brasileiro <a href="http://en.wikipedia.org/wiki/Tropa_de_Elite"target="_blank" rel="noopener">Tropa de Elite</a> agora que sei que você se interessa por dados relacionados a crimes ;-)</p>
<p><strong>Adrian:</strong> Anotado! Adicionei “Tropa de Elite” à minha lista de FILMES_PARA_ASSISTIR.TXT :-)</p>
<p><a href="http://leahculver.com/"target="_blank" rel="noopener"><img src="http://s3.amazonaws.com/akitaonrails/assets/2007/12/31/1529992544_f8e9fc67b2.jpg" alt=""  loading="lazy" /></a></p>
<p><strong>AkitaOnRails:</strong> Prosseguindo. Muitos grandes websites já são desenvolvidos em Django. Seus próprios trabalhos na World Online, Washington Post sendo alguns deles. Outro grande novo é o <a href="http://pownce.com/leahculver/"target="_blank" rel="noopener">Pownce</a> de <a href="http://en.wikipedia.org/wiki/Kevin_Rose"target="_blank" rel="noopener">Kevin Rose’s</a> (o criador do <a href="http://digg.com"target="_blank" rel="noopener">Digg</a>). Você, Kevin e outras pessoas influentes costumam de encontrar durante conferências, não é? O que acha que o influenciou a tentar Django? Outra coisa legal sobre o Pownce tem que ser <a href="http://leahculver.com/"target="_blank" rel="noopener">Leah Culver</a>. Uma programadora como ela simplesmente inexiste aqui no Brasil, o que é uma pena. Você deveria torná-la símbolo oficial do Django!</p>
<p><strong>Adrian:</strong> Nunca me encontrei com Kevin Rose, mas pelo que ouvi falar, acredito que Leah escolheu Django porque ou foi recomendado a ela ou ela gosta de Python, ou algo assim. Não conheço os bastidores. Também não me encontrei com Leah, mas ela foi legal o bastante para viajar a Lawrence, no Kansas, para nosso último <a href="http://leahculver.com/2007/12/01/django-sprint-part-2/"target="_blank" rel="noopener">Django sprint</a> algumas semanas atrás (que eu não pude ir pessoalmente, infelizmente).</p>
<p><strong>AkitaOnRails:</strong> Não é uma regra escrita em pedra, mas na comunidade Rails nós ‘tendemos’ a gostar de tecnologias relacionadas a Mac. Claro, não é um requerimento para nenhuma linguagem e Linux é tão bom quanto. Mas o que posso dizer? Sou um fã de Apple. Eu gostaria de saber qual é seu ambiente de desenvolvimento. Quais ferramentas você usa para desenvolver websites baseados em Django?</p>
<p><strong>Adrian:</strong> Recentemente mudei para Mac depois de muitos anos usando Linux no desktop, mas não assuma nada lendo isso – não sou um fã, nem de Linux ou Mac. Eu sinto falta do Linux, para ser honesto, e em diversas coisas não me impressionei pelas funcionalidades Unix do OS X. (Coisas básicas como suporte a readline no Python padrão está quebrado, etc).</p>
<p>As coisas legais sobre o Mac fazem valer a pena a mudança, entretanto. Mesmo depois de ter usado Mac como minha máquina principal por 6 meses, eu ainda me impressiono que eu posso somente fechar o laptop e ele dorme automaticamente. Isso nunca funcionou com Linux!</p>
<p><strong>AkitaOnRails:</strong> Pergunto isso porque muitas pessoas olhando para Rails ou Django são programadores Java ou C# acostumados a ter uma IDE completa. Eu normalmente digo que qualquer editor de texto comum faz o serviço, e se realmente quiser poder, vim e emacs se encaixam perfeitamente. O que diz disso?</p>
<p><strong>Adrian:</strong> Eu nunca usei uma IDE para programar, então sou a pessoa errada para perguntar. Na realidade, mais ou menos – eu usei algo como uma IDE na faculdade para programar em assembly. Ele mostrava o conteúdo de acumuladores e coisas assim.</p>
<p><strong>AkitaOnRails:</strong> Oh, quase esqueci de perguntar: você e o <a href="http://www.python.org/~guido/"target="_blank" rel="noopener">Guido van Rossum</a> já se encontraram? Gostaria de saber sua opinião sobre o desenvolvimento do <a href="http://www.python.org/dev/peps/pep-3000/"target="_blank" rel="noopener">Python 3000</a> . Tem alguma coisa na nova versão que você espera muito?</p>
<p><strong>Adrian:</strong> Sim, eu me encontrei com Guido várias vezes e tiver sorte o suficiente para jantar com ele uma vez! É quase idiota e desnecessário dizer isso, mas ele é incrivelmente esperto.</p>
<p>Eu realmente gosto dos novos conceitos e funcionalidades no Python 3000, e eu tive a oportunidade de participar do <a href="http://www.artima.com/weblogs/viewpost.jsp?thread=212259"target="_blank" rel="noopener">sprint no Google</a> Chicago alguns meses atrás. Minha funcionalidade favorita é a migração para strings Unicode por padrão, porque isso força os assuntos sobre encoding.</p>
<p><img src="http://s3.amazonaws.com/akitaonrails/assets/2007/12/31/Picture_3.png" alt=""  loading="lazy" /></p>
<p><strong>AkitaOnRails:</strong> Finalmente, o que foi esse barulho sobre o Django ser versionado 1.0 ou pular direto para 2.0? Não segui as discussões, apenas li os títulos algum tempo atrás. E o que as pessoas podem esperar da próxima versão do Django? Entendo que você não faz grandes lançamentos que mudam o jogo, mas o que você vê sendo lançado nos próximos meses em termos de novas funcionalidades?</p>
<p><strong>Adrian:</strong> Há – essa é uma história engraçada. Eu me cansei das pessoas constantemente perguntando <em>“Quando o 1.0 vai sair? Quando o 10 vai sair?”</em> Minha resposta sempre é, <em>“Por que você precisa de um número arbitrário assinalado no produto? Muitas pessoas estão usando a versão corrente, então não se segure. Números de versões são muito sem sentido.”</em></p>
<p>Então eu sugeri na lista <a href="http://groups.google.com/group/django-developers/browse_thread/thread/b4c237ad76f9eeca/86e2d86b9fa8280f?lnk=gst&amp;q=version&#43;2.0#86e2d86b9fa8280f"target="_blank" rel="noopener">django-developers</a> para assinalar uma versão “2.0” para reforçar o fato que números de versões são de fato arbitrários. Mas, tendo pensado mais sobre isso, mudei de idéia. A quantidade de confusão que isso causaria não justificaria a quantidade de prazer de rebelião que eu teria nisso.</p>
<p>E sobre funcionalidades vindo, existe alguns branches acontecendo no código Django que eventualmente serão unificadas no trunk principal. Um desses branches é chamado <a href="http://code.djangoproject.com/wiki/NewformsAdminBranch"target="_blank" rel="noopener">newforms-admin,</a> que dramaticamente melhora a quantidade de customização que os desenvolvedores precisam fazer para o site admin do Django. Outro é o <a href="http://code.djangoproject.com/wiki/QuerysetRefactorBranch"target="_blank" rel="noopener">queryset-refactor,</a> que é um refatoramento da camada de banco de dados, novamente, para torná-lo mais extensível. Fora isso, existem pequenas funcionalidades que precisamos terminar, e aí será a hora para 1.0.</p>
<p><strong>AkitaOnRails:</strong> Haha, Acho que você está certo, eu não gosto desse ‘culto do ponto-zero’ também, é bem sem sentido para um projeto open source que está em constante evolução. Mas algumas pessoas se preocupam com isso principalmente em ambientes mais corporativos. De qualquer forma, e para pessoas que querem ver Django em ação, quais websites você recomendaria que elas visitem? Alguns do Washington Post, talvez? Claro, algumas das grandes funcionalidades – como o site admin – são apenas para admins (duh) Mas as pessoas gostam de ver coisa ‘vivas’ em vez de um monte de tutoriais.</p>
<p><strong>Adrian:</strong> Apenas para comentar, vejo que o David, do Rails, escreveu <a href="http://www.loudthinking.com/posts/20-dont-overestimate-the-power-of-versions"target="_blank" rel="noopener">uma reclamação</a> sobre esse mesmo tópico.</p>
<p>Bons sites em Django? Vejamos – existe o <a href="http://www.tabblo.com/"target="_blank" rel="noopener">Tabblo</a>, um site de edição e compartilhamento de fotos que tem algumas funcionalidades interativas muito legais. Existe o <a href="http://curse.com"target="_blank" rel="noopener">Curse.com</a>, site de um jogo massivamente online. Tem o <a href="http://lawrence.com"target="_blank" rel="noopener">lawrence.com</a>, um site que eu ajudei a construir, que é um dos melhores sites de entretenimento local do mundo (se posso dizer isso!). E tem um site (esqueci o nome) que imprimirá um livro em papel de uma série de artigos do Wikipedia que você especificar – isso me impressionou muito da primeira vez que vi.</p>
<p><strong>AkitaOnRails:</strong> Então, acho que acabamos :-) Foi uma conversa muito prazerosa. Espero que você tenha um grande Ano Novo!</p>
<p><strong>Adrian:</strong> Obrigado pelas grandes perguntas e a conversa, e Feliz Ano Novo!</p>
<p><img src="http://s3.amazonaws.com/akitaonrails/assets/2007/12/31/Picture_1.png" alt=""  loading="lazy" /></p>
]]></content:encoded><category>entrevistas</category><category>desenvolvimento-web</category></item><item><title>Conversando com Avi Bryant - Parte 2</title><link>https://akitaonrails.github.io/2007/12/22/conversando-com-avi-bryant-parte-2/</link><guid isPermaLink="true">https://akitaonrails.github.io/2007/12/22/conversando-com-avi-bryant-parte-2/</guid><pubDate>Sat, 22 Dec 2007 20:13:00 -0200</pubDate><description>&lt;p&gt;&lt;strong&gt;For english-speaking readers, click &lt;a href="http://www.akitaonrails.com/2007/12/22/conversando-com-avi-bryant-parte-2"target="_blank" rel="noopener"&gt;here&lt;/a&gt; for the original version&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Se ainda não leu, dê uma olhada na &lt;a href="https://akitaonrails.github.io/2007/12/15/conversando-com-avi-bryant-parte-1/"&gt;Parte 1&lt;/a&gt; onde conhecemos mais sobre Avi Bryant e seu incrível produto &lt;a href="http://www.dabbledb.com"target="_blank" rel="noopener"&gt;Dabble DB&lt;/a&gt;. Nesta &lt;strong&gt;Parte 2&lt;/strong&gt; Avi elabora um pouco mais suas opiniões e pontos de vista acerca de tecnologia. Uma leitura muito inspiradora para todo programador.&lt;/p&gt;
&lt;p&gt;Como sempre diso – e Avi é competente em apontar -, Ruby tem seus problemas – muitos sendo melhorados no Ruby 1.9, JRuby e Rubinius. Avi nos dá boas razões de porque Smalltalk é mais uma grande plataforma para se aprender, trazendo décadas de evolução e maturidade. Então, aqui vai, a versão completa da entrevista.&lt;/p&gt;</description><content:encoded><![CDATA[<p><strong>For english-speaking readers, click <a href="http://www.akitaonrails.com/2007/12/22/conversando-com-avi-bryant-parte-2"target="_blank" rel="noopener">here</a> for the original version</strong></p>
<p>Se ainda não leu, dê uma olhada na <a href="/2007/12/15/conversando-com-avi-bryant-parte-1/">Parte 1</a> onde conhecemos mais sobre Avi Bryant e seu incrível produto <a href="http://www.dabbledb.com"target="_blank" rel="noopener">Dabble DB</a>. Nesta <strong>Parte 2</strong> Avi elabora um pouco mais suas opiniões e pontos de vista acerca de tecnologia. Uma leitura muito inspiradora para todo programador.</p>
<p>Como sempre diso – e Avi é competente em apontar -, Ruby tem seus problemas – muitos sendo melhorados no Ruby 1.9, JRuby e Rubinius. Avi nos dá boas razões de porque Smalltalk é mais uma grande plataforma para se aprender, trazendo décadas de evolução e maturidade. Então, aqui vai, a versão completa da entrevista.</p>
<p><img src="http://s3.amazonaws.com/akitaonrails/assets/2007/12/19/539949594_f012918cd3.jpg" alt=""  loading="lazy" /></p>
<p>E fiquem ligados! Espero ter Evan Phoenix, Hal Fulton, Peter Cooper e Adrian Holovaty como meus próximos convidados. Muito material para começar 2008 em grande estilo!</p>
<p><strong>AkitaOnRails:</strong> Algumas pessoas tentam fazer o caso a favor de Smalltalk como sendo <em>“a linguagem OO mais pura</em>. Mesmo isso sendo um fato, você acha que esse motivo apenas é suficiente para criar um caso com todas as outras linguagens, como Ruby que é meio que uma linguagem multi-paradigma? Espero que você não seja ‘chato’ sobre ‘pureza de linguagem’ :-)</p>
<p><strong>Avi Bryant:</strong> Na realidade, eu sou chato sobre isso – não de um ponto de vista acadêmica ou estético, mas pragmático. Linguagens ‘puras’ tornam muitas coisas mais fáceis: ferramentas de desenvolvimento, VMs e infraestrutura como sistemas de objetos distribuídos ou persistência transparente, tudo fica mais simples e melhor quando se tem uma linguagem pequena e consistente.</p>
<p>Uma experiência que eu tive, por exemplo, foi ser contratado para portar minha biblioteca cliente para o banco de dados de objetos GOODS de Smalltalk para Python; eu gastei um tempo enorme lidando com casos especiais na semântica Python (isso é uma classe? um tipo? um novo tipo de classe? implementado em python ou em C?) que nunca apareceria em Smalltalk.</p>
<p>Ruby faz muito bem nesse ponto, melhor que a maioria das linguagens de script – eu não chamaria Ruby de “multi-paradigma”, aliás – mas ele poderia fazer ainda melhor.</p>
<p><strong>AkitaOnRails:</strong> Acho que uma vez você disse que considera uma linguagem “finalizada” quando ela é rápida o suficiente para estender a si mesma. Isso é muito verdade no caso de Smalltalk, Java e outras plataformas. Ruby sem dúvida está devendo na sua posição atual. Foi uma das razões de termos esforços em paralelo como o IronRuby de John Lam, JRuby de Charles e Thomas e o Rubinius de Evan. Um dos pontos mais criticados no Ruby é não ter uma especificação formal para a linguagem ou suas bibliotecas padrão. Você também disse que a Java VM não é boa o suficiente como Strongtalk seria, por exemplo. Isso ainda se mantém hoje, agora que estamos vendo JRuby 1.1 no horizonte?</p>
<p><strong>Avi Bryant:</strong> Ainda se mantém. O JRuby atualmente parece ter um benchmark no mesmo nível do MRI, e os melhores números de qualquer outra implementação Ruby são talvez 3 vezes mais que o MRI na média. Acho que podemos fazer <strong>25 vezes mais</strong> para funcionalidades básicas da linguagem (envio de mensagens, execução de blocos, etc), que deveria ser o suficiente para tornar possível a implementação das bibliotecas padrão no próprio Ruby. Mesmo que o resultado final seja similar aos números atuais, os benefícios colaterais seriam de extremo valor.</p>
<p><img src="http://s3.amazonaws.com/akitaonrails/assets/2007/12/19/200126067_a2fc0a9fec.jpg" alt=""  loading="lazy" /></p>
<p><strong>AkitaOnRails:</strong> Lembro que você começou o projeto <a href="http://rubyforge.org/projects/smalltalk/"target="_blank" rel="noopener">Smalltalk.rb</a> há algum tempo, e se não estou enganado era um esforço para traduzir Ruby em código equivalente em Smalltalk para que ele pudesse rodar em qualquer das VMs Smalltalk que existem. Esse projeto ainda está andando, você acha que é possível perseguir esse objetivo?</p>
<p><strong>Avi Bryant:</strong> Ainda acho que é um objetivo que vale a pena e realista. O projeto ainda está andando no sentido que eu ainda estou falando às pessoas sobre como fazer isso acontecer, mas não tenho tempo para escrever código eu mesmo no momento. Tenho motivos para acreditar que esse projeto fará progressos mais concretos no ano que vem, mas vamos ver.</p>
<p><strong>AkitaOnRails:</strong> Algum tempo atrás eu li um trecho de uma transcrição de chat via IRC entre você, Evan, Chad e até Charles. Você começou falando sobre padronização de primitivas (que são em C no MRI de hoje). Minha aposta é que Rubinius é o projeto destinado a ser a “próxima grande coisa” para a comunidade Ruby. Para mim parece que você e Evan colaboram bastante, é correto dizer isso?</p>
<p><strong>Avi Bryant:</strong> Eu não diria isso, mas o <a href="http://rubini.us/"target="_blank" rel="noopener">Rubinius</a> é certamente o projeto Ruby que mais perto se alinha com meus próprios interesses e objetivos no momento, e é muito legal ver quanto esforço está sendo posto nele. A Engine Yard merece muitos parabéns por seu suporte financeiro ao projeto.</p>
<p>Tenho grande esperança que o trabalho de Evan e sua equipe serão de grande benefício não apenas para Rubinius mas para todas as implementações Ruby – que foi o motivo de porque eu estava defendendo um conjunto padrão de primitivas.</p>
<p><strong>AkitaOnRails:</strong> Você conhece muitas pessoas, eu imagino se já conversou com o próprio Koichi Sasada para discutir suas idéias para o projeto YARV, já que ele será a virtual machine Ruby ‘oficial’ daqui alguns meses.</p>
<p><strong>Avi Bryant:</strong> Não, acho que nunca nos falamos. Eu certamente adoraria encontrá-lo qualquer dia.</p>
<p><strong>AkitaOnRails:</strong> Então, subimos um nível acima para aplicações. Seu framework Seaside é muito incrível. Você está muito certo sobre <a href="http://developer.apple.com/tools/webobjects/"target="_blank" rel="noopener">WebObjects</a> também. Como um programador Java eu sempre lamentei que ele nunca se tornou popular. Hoje está basicamente relegado a websites relacionados à Apple, enquanto frameworks menores Java tomaram a dianteira. Tapestry e Cayenne tentam chegar às funcionalidades do WebObjects mas parece que ainda estão longe. Você ainda programa em Java? Quais suas opiniões sobre frameworks populares da atualidade como Spring, JSF? Para iniciantes, o que havia em WebObjects que o tornava diferente dos demais?</p>
<p><strong>Avi Bryant:</strong> Eu não faço mais nenhum trabalho Java (felizmente), então não poderia dar uma opinião de qualidade sobre o estado dos frameworks de agora. Entretanto, a principal coisa que acho que o WebObjects fazia direito era focar no estado e comportamento da aplicação, em vez das mecânicas de URLs e HTML e requisições HTTP.</p>
<p>Então em vez de se preocupar sobre como um campo era nomeado, você apenas diria <em>“este campo é ligado à esta variável de instância no meu model”</em>, e em vez de se preocupar sobre qual URL um link iria, você diria <em>“este link ativa este método no objeto da minha página”</em>.</p>
<p>Transicionar entre página era feito construindo um novo objeto de página e configurando-o diretamente em Java, em vez de construir uma URL que seria decomposta para construir a página. Essa atitude direta e estilo geral é algo que pesadamente influenciaram Seaside.</p>
<p><img src="http://s3.amazonaws.com/akitaonrails/assets/2007/12/19/504096000_40e4e00b75.jpg" alt=""  loading="lazy" /></p>
<p><strong>AkitaOnRails:</strong> Muitas pessoas podem não entender imediatamente, já que é uma palavra nova a muitos: <em>“continuações”</em>. Significa que em vez de manualmente controlar o fluxo entre eventos, com serialização e desserialização manual de objetos, você programa tudo como um fluxo coeso e contínuo. Poderia explicar isso de uma maneira que um novato possa entender? Quais os benefícios e desvantagens dessa técnica?</p>
<p><strong>Avi Bryant:</strong> Bem, realmente tem tudo a ver com ser capaz de um comportamento model a uma aplicação web. Em uma aplicação desktop, por exemplo, você ocasionalmente poderia ter uma chamada como <em>“file = chooseFile()”</em> ou <em>“color = pickColor()”</em> que abriria um janela dialog modal, pegaria um resultado do usuário, e seguiria dali.</p>
<p>O uso de continuações do Seaside é somente para permitir exatamente esse tipo de interação no contexto da Web. A parte complicada é que por causa do ‘botão-voltar’ dos browsers, o usuário poderia escolher um cor diferente do mesmo dialog depois, e a chamada <em>“pickColor()”</em> teria que retornar uma segunda vez. Isso é confuso de se pensar, mas na maioria dos casos apenas funciona.</p>
<p>Do ponto de vista de implementação, o que estamos fazendo é salvando uma cópia da pilha no momento em que a chamada é feita para que possamos retornar depois, mais de uma vez se for preciso.</p>
<p><strong>AkitaOnRails:</strong> Você começou esses conceitos em Ruby com IOWA. Há muito tempo havia um framework chamado Borges que também foi descontinuado. Então Koichi mencionou tirar o suporte a continuações do próximo Ruby. Você acha que Ruby estará dando um passo para trás sem suporte a continuações?</p>
<p><strong>Avi Bryant:</strong> Continuações são uma grande abstração, e permite um monte de experimentações interessantes com semântica de linguagens. Entretanto, eu não consideraria uma tragédia se isso desaparecesse de Ruby; existem coisas mais importantes com o que se preocupar. Da perspectiva de web, eu acho que AJAX está começando a substituir um monte de casos de uso onde ter lógica model server-side costumava ser importante – Dabble DB, por exemplo, <strong>praticamente não usa</strong> as funcionalidades de continuações de Seaside.</p>
<p><img src="http://s3.amazonaws.com/akitaonrails/assets/2007/12/19/106824107_67074eaf0b.jpg" alt=""  loading="lazy" /></p>
<p><strong>AkitaOnRails:</strong> Seu blog tem um nome peculiar, <a href="http://www.cincomsmalltalk.com/userblogs/avi/View.ssp"target="_blank" rel="noopener">HREF considered harmful</a> (HREF consideradas perigosas). Você provavelmente tirou sua inspiração do artigo de Edsger Dijkstra/Niklaus Wirth’s chamado <a href="http://en.wikipedia.org/wiki/Considered_Harmful"target="_blank" rel="noopener">Goto Statement Considered Harmful</a> (GOTO considerado perigoso), onde Edsger tornou famoso seu caso contra o comando GOTO. No nível de assembler é impossível não fazer JMP (salto) o tempo todo (pelo menos não sem alguma ajuda de macros) mas no nível de C você pode evitar totalmente GOTOs. Mesmo Basic tinha tanto GOTO quanto GOSUB e você poderia simplesmente ignorar o primeiro. Estou sendo simplista aqui, mas agora você está meio que dizendo que URLs tem um papel similar pela maneira que interrompem o fluxo normal, indo para trás de maneira imprevisíveis e assim por diante. Por outro lado a Internet talvez não fosse o que é sem URLs. Como lidar com esse dilema?</p>
<p><img src="http://s3.amazonaws.com/akitaonrails/assets/2007/12/19/461207306_3f23831032.jpg" alt=""  loading="lazy" /></p>
<p><strong>Avi Bryant:</strong> Não acho que seja um dilema. Acho que sua analogia é muito boa: é impossível não fazer JMP o tempo todo, e também é impossível não usar URLs o tempo todo, mas não precisamos ficar alertas o tempo todo sobre nenhuma das duas. Antigamente quando todos escreviam assembler, as pessoas provavelmente era obcecadas sobre ter etiquetas de JMP com significado e “bonitas” da mesma maneira que hoje existe a obcessão em ter URLs bonitas. Acho que precisamos nos permitir a dar o mesmo salto de abstração na web que fizemos com linguagens de programação de alto nível.</p>
<p>Não estou dizendo que <strong>nunca</strong> devemos pensar sobre URLs: qualquer website precisa exportar URLs com significado para serem referenciadas e usadas externamente, assim como qualquer biblioteca C precisa exportar nomes de funções significativas para que possam ser ligadas a outros programas. Mas é o máximo até onde precisamos ir.</p>
<p><strong>AkitaOnRails:</strong> Componentes foram uma grande coisa no começo dos anos 90, com ferramentas RAD e assim por diante. Hoje parecem que estão se mostrando mais devagar, com iniciativas como JSF e ASP.NET. Rails inicialmente vinha com um suporte bem crú a ‘componentes’ mas foi derrubado logo no começo por ser ruim (por causa da maneira meio gambiarra em que foi implementada). Nada de novo veio substituí-lo o que parece sugerir que não havia muita necessidade disso de qualquer forma no Rails. Por outro lado Seaside é pesado em componentização. Poderia expôr um pouco mais sobre as diferenças nessas técnicas?</p>
<p><strong>Avi Bryant:</strong> “Componente” é um desses termos como “MVC” ou “aberto” que são usadas para descrever tantas coisas diferentes que é difícil falar seriamente sobre elas. Uma funcionalidade concreta na forma Seaside é que cada peça da interface gráfica é bem independente de outras peças de interface na mesma página.</p>
<p>Não existe um controlador central que é responsável por processamento de requisições, escolhendo um template e assim por diante – todas essas responsabilidades são distribuídas entre muitos pequenos objetos. Também não há chance de conflitos de nomes porque você não nomeia links ou campos de formulários diretamente, então se pode ter muitas cópias do mesmo form/widget/etc na mesma página sem nenhuma confusão.</p>
<p>Isso permite um nível de modularidade que é muito difícil de reproduzir em frameworks mais tradicionais.</p>
<p><strong>AkitaOnRails:</strong> Outra coisa que pode chocar algumas pessoas é que não existe um sistema tradicional de template no Seaside, sem mistura de código e tags HTML por todos os lados. Em vez disso todo HTML é abstraído em uma hierarquia de objetos que renderiza a si mesmo. Em Rails existem algumas alternativas que tentam algo parecido como HAML, Markaby. O que você acha que são as principais diferenças?</p>
<p><strong>Avi Bryant:</strong> A API de renderização de HTML é uma peça muito chave no Seaside, e uma boa parte do framework foi desenhada com essa aproximação interna em mente. Acho que a principal diferença quando comparada com HAML ou Markaby, é que elas foram feitas para serem jogadas em outros frameworks.</p>
<p>Uma vez que você se livra de templates e muda para a geração de HTML programático, o espaço de design muda completamente, e você precisa reconsiderar quase toda decisão que faz – esse foi um processo que eu passei com Seaside entre o lançamento inicial, que usava templates e as versões 2.x, que não usavam.</p>
<p>Então acho que precisaremos ver um framework que usar, digamos, Markaby como o ponto de partida e se pergunta “para onde podemos ir daqui” antes de fazer qualquer comparação real.</p>
<p><img src="http://s3.amazonaws.com/akitaonrails/assets/2007/12/19/627957460_48e4181526.jpg" alt=""  loading="lazy" /><br>
com Adrian Holovaty, do Django</p>
<p><strong>AkitaOnRails:</strong> Você também discute a respeito do dilema ‘shared-nothing’ vs ‘share-all’ (não compartilha nada vs compartilha tudo). E você obviamente tem um caso forte porque isso não é apenas baboseira tecnológica mas você tem um produto de sucesso rodando sobre essa visão. Ainda acha que vale a pena sacrificar um pouco de performance por código mais limpo e produtividade? De certa forma é meio o que o próprio DHH disse sobre Rails quando as pessoas disseram que ele é mais lento que PHP ou Perl. De fato isso tem a ver com sua conversa sobre ser ‘herético’ no sentido que está fazendo coisas de maneira diferente do que todos nós agora. Poderia elaborar sobre isso?</p>
<p><strong>Avi Bryant:</strong> <em>“Share nothing”</em> é um grande conselho para tirar o máximo uso dos recursos do seu servidor. Para sites como yahoo.com ou Facebook, isso é claramente muito importante porque seu modelo de negócio é servir milhões de usuários todos os dias.</p>
<p><em>“Share everything”</em> é realmente pesado nos seus servidores, mas ele faz máximo uso dos recursos de seus desenvolvedores. Para uma startup como Dabble DB, onde temos 4 desenvolvedores, isso é realmente importante. E já que nosso modelo de faturamento somente requer servir milhares de usuários todos os dias, não milhões, está tudo bem gastar um pouco mais por usuário em hardware de servidor. Tem sido uma troca muito vantajosa para nós.</p>
<p><strong>AkitaOnRails:</strong> E falando de DHH, vocês provavelmente se encontraram em várias ocasiões. Ambos são pessoas de muita opinião com visões antagônicas. Smalltalk vs Ruby. Seaside vs Rails. Share-all vs Share-nothing. Alguém poderia ser tentado a desenhá-los numa disputa como Super Homen vs Batman. Embora eu saiba que pessoas inteligentes não brigam sobre mesquinharias. O que acha dele e suas idéias, como acha que ambas as comunidades poderiam cooperar, se houver alguma chance disso?</p>
<p><strong>Avi Bryant:</strong> Tenho um grande respeito por David. A única ocasião onde me senti antagônico a ele foi no verão passado na Foo Camp. Estávamos jogando <a href="http://en.wikipedia.org/wiki/Mafia_%28game%29"target="_blank" rel="noopener">Werewolf</a>, eu era o Werewolf e ele era um camponês. Agora, como werewolf a melhor coisa que você pode fazer é fazer a pessoa mais próxima a confiar em você, e aconteceu de ser o DHH. E isso funcionou – Kevin Rose estava totalmente sobre mim mas David conseguiu persuadí-lo a não me linchar, e eu comi os dois e ganhei o jogo! :-)</p>
<p>Enfim, provavelmente existe uma lição nisso em algum lugar. Também, em uma disputa entre mim e DHH, <a href="http://en.wikipedia.org/wiki/Neal_Stephenson"target="_blank" rel="noopener">Neal Stephenson</a> ganharia.</p>
<p><strong>AkitaOnRails:</strong> Finalmente, o Brasil ainda tem uma comunidade jovem e em crescimento. Algum comentário final para nossa audiência?</p>
<p><strong>Avi Bryant:</strong> Olá e boa sorte! Me disseram que o Rio é ainda mais bonito que minha cidade de Vancouver, e espero visitá-los algum dia.</p>
<p><a href="http://twit.tv/floss21"target="_blank" rel="noopener"><img src="http://s3.amazonaws.com/akitaonrails/assets/2007/12/19/1057077803_3bd0155620.jpg" alt=""  loading="lazy" /></a><br>
<em>Não perca a entrevista no podcast TWiT com Avi!</em></p>
]]></content:encoded><category>entrevistas</category><category>linguagens-de-programacao</category><category>arquitetura-de-software</category></item><item><title>Conversando com Avi Bryant - Parte 1</title><link>https://akitaonrails.github.io/2007/12/15/conversando-com-avi-bryant-parte-1/</link><guid isPermaLink="true">https://akitaonrails.github.io/2007/12/15/conversando-com-avi-bryant-parte-1/</guid><pubDate>Sat, 15 Dec 2007 10:18:00 -0200</pubDate><description>&lt;p&gt;&lt;strong&gt;Read the Interview in English &lt;a href="http://www.akitaonrails.com/2007/12/15/conversando-com-avi-bryant-parte-1"target="_blank" rel="noopener"&gt;here&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Alguém uma vez desafiou todos os outros frameworks implicando que ninguém conseguiria chegar ao nível de Rails … exceto por Avi. Seaside é tão diferente do status quo que o próprio Avi o descreve como um framework herético. E ele está certo. Ele voltou na história e pegou o que é considerado “o” pai – e provavelmente “a” melhor implementação – das linguagens orientadas a objeto: Smalltalk.&lt;/p&gt;</description><content:encoded><![CDATA[<p><strong>Read the Interview in English <a href="http://www.akitaonrails.com/2007/12/15/conversando-com-avi-bryant-parte-1"target="_blank" rel="noopener">here</a></strong></p>
<p>Alguém uma vez desafiou todos os outros frameworks implicando que ninguém conseguiria chegar ao nível de Rails … exceto por Avi. Seaside é tão diferente do status quo que o próprio Avi o descreve como um framework herético. E ele está certo. Ele voltou na história e pegou o que é considerado “o” pai – e provavelmente “a” melhor implementação – das linguagens orientadas a objeto: Smalltalk.</p>
<p>Pegando dicas do venerável Apple WebObjects, ele implementou Seaside e seu produto de grande sucesso, <a href="http://www.dabbledb.com"target="_blank" rel="noopener">Dabble DB</a>. Vejam aqui quem é o homem, quais suas opiniões e porque ele é tão relevante na comunidade Ruby e Rails mesmo sendo defensor de outra linguagem e outro framework. Parece estranho, mas quando Avi fala, você ouve.</p>
<p><img src="http://s3.amazonaws.com/akitaonrails/assets/2007/12/15/n517961878_373676_1188.jpg" alt=""  loading="lazy" /></p>
<p>Ele foi muito gentil de me dar uma longa entrevista. Tão longa que eu dividi em 2 partes. Esta é a primeira. Vou liberar a segunda em alguns dias. Espero que todos gostem.</p>
<p><strong>AkitaOnRails:</strong> Legal. Eu estou meio nervoso. Até agora somente entrevistei o pessoal de Ruby on Rails, incluindo Matz e DHH, esta é a primeira vez que estou procurando por um ponto de vista de fora.</p>
<p>E eu sei que você tem muitas opiniões a respeito de Smalltalk e Seaside, mas ao mesmo tempo tem conexões fortes com a comunidade Ruby. Posso começar perguntando mais sobre Avi Bryant, a pessoa? Quero dizer, qual sua história no campo de programação?</p>
<p><strong>Avi Bryant:</strong> Comecei a programar quando era bem jovem; foi uma coisa que eu fazia com meu irmão e meu pai de brincadeira, na maior parte escrevendo jogos em C nos primeiros Mac. Quando fui chegando próximo à faculdade, meu interesse se voltou mais ao cinema e filmes, então quando comecei a universidade foi essencialmente no curso de filmes.</p>
<p>Mas com o passar do tempo, ciências da computação me sugou, e eu terminei me graduando em computação e trabalhando e um laboratório de engenharia de software no campus. Foi quando comecei a programar sério, e particularmente onde me tornei especialmente interessado em ferramentas de software.</p>
<p>Foi na época quando as primeiras construções do Mac OS X – quando era essencialmente ainda apenas NeXTStep, sem Aqua ou Carbon ou qualquer coisa – começaram a se tornar disponíveis, e como eu sempre programei para Mac me coloquei a aprender Objective-C e Cocoa. Essa foi minha primeira exposição à OO “real”, e foi viciante.</p>
<p>Ao mesmo tempo, estava fazendo consultoria web por fora para ganhar um extra, então estava procurando por uma linguagem que me lembrasse de Objective-C mas fosse mais dinâmico e mais indicado para a web, e então eventualmente cruzei com Ruby, que se encaixava muito bem.</p>
<p><img src="http://s3.amazonaws.com/akitaonrails/assets/2007/12/15/n517961878_39359_1867.jpg" alt=""  loading="lazy" /></p>
<p>Eu ainda estava enamorado com tudo sobre NeXT e Objective-C, então comecei a trabalhar em ferramentas web para Ruby. Eu peguei o framework WebOjects da NeXT como meu modelo, e terminei com IOWA, que é muito próximo de ser um port do WebObjects para Ruby. Eu o apresentei na primeira RubyConf, que foi, acho, em 2000.</p>
<p>RubyConf aconteceu próximo com a OOPSLA nesse ano, que eu também estava participando para falar da minha pesquisa no laboratório de engenharia de software. Agora, quando o OOPSLA começou, estava cheio de Smalltalkers, e mesmo que o mainstream de desenvolvimento de software OO – e portanto o foco principal da OOPSLA – moveu de Java para C#, os Smalltalkers continuaram comparecendo. Mas em vez de participar do resto da conferência, eles faziam um semi-oficial “Camp Smalltalk” com seus próprios projetores e cronograma e hackeavam e demonstravam coisas de Smalltalk o dia todo.</p>
<p>Claro que eu conhecia Smalltalk, como a fonte de um monte de idéias por trás de coisas que eu me interessava – Objective-C e Ruby, obviamente, mas também TDD, wikis, mesmo o Mac até certo ponto – mas eu nunca realmente o usei; os ambientes eram muito diferentes, a documentação muito esparsa, etc.</p>
<p>Sentado por um dia no Camp Smalltalk foi o empurrão que eu precisava para ultrapassar isso. E uma vez que senti o gostinho de Smalltalk, eu não consegui mais largar – eu comecei imediatamente um port do IOWA para Smalltalk, e convenci meus próximos clientes em projetos web que eu deveria usar Smalltalk em vez de Ruby. Esse port se tornou Seaside, e nos muitos anos seguintes construí um negócio de consultoria ao redor de treinamento de Seaside e desenvolvimento.</p>
<p>Desenvolvimento web com Smalltalk pode parecer um pequeno nicho onde construir um negócio, mas o fato é que <strong>ninguém</strong> mais estava fazendo isso na época (também, ninguém estava fazendo desenvolvimento web com Ruby na época – esta situação é um pouco diferente agora).</p>
<p>Algumas pessoas para mencionar nesta história – Julian Fitzell foi meu antigo parceiro de projetos web, e trabalhamos juntos na primeira versão do Seaside. Colin Putney foi um dos primeiros clientes, que veio até mim baseado no meu trabalho com Ruby e eu tive que trabalhar duro para convencê-lo a usar Smalltalk; ele agora é um Smalltalker e trabalha comigo no Dabble DB. Andrew Catton trabalhou comigo no laboratório e foi um colaborador freqüente em vários projetos pelos anos.</p>
<p>Alguns anos depois, um pouco cansado de consultoria, Andrew e eu começamos a trabalhar em um projeto por fora, e isso se tornou Dabble DB. No verão passado, tivemos sorte para conseguir funding para trabalhar nisso tempo integral, e é o que estamos fazendo desde então.</p>
<p><strong>AkitaOnRails:</strong> Vejo que você gosta do fato que Smalltalk não é “mainstream” como Java. Posso ver as vantagens e concordo com você. É como dizer <em>“somos um pequeno grupo, mas de pessoas muito inteligentes.”</em> Muito parecido com a campanha da Apple <em>“Think Different”</em>. Por outro lado as massas tendem a gostar de grande marketing e suporte. O que acha dessa diferença cultural? A parte mais importante é: aqui no Brasil o mercado é muito fechado para tecnologia não-largamente-comercialmente-suportadas. O que significa que a maioria não gosta de nada diferente de Java ou .NET. Como você convence seus clientes sobre Smalltalk – se isso de fato for um problema aí nos EUA?</p>
<p><strong>Avi Bryant:</strong> Sim, isso é um equilíbrio complicado. Algumas das pessoas que conheci nos primeiros dias da popularidade de Ruby – após-Pickaxe, mas pré-Rails – reclamavam sobre quão popular Ruby ficou ultimamente, porque inevitavelmente a taxa de sinal claro vs. barulho vai pra baixo nos mailing lists e conferências. Smalltalk não tem esse problema – em particular, Smalltalk tem uma boa mistura de hackers muito experientes – pessoas como Dan Ingalls, que escreve implementações de linguagens por mais de 30 anos, e tem um profundo conhecimento para compartilhar – e jovens encrenqueiros como eu. Quando você se torna muito popular muito rápido, recebe um grande fluxo de jovens, inexperientes, pessoas enérgicas, e a voz da experiência tende a afundar. Não que novas idéias não tenham valor – elas são essenciais – mas acho que nesta área tendemos a ignorar a história demais.</p>
<p><img src="http://s3.amazonaws.com/akitaonrails/assets/2007/12/15/198438575_ff982238f7.jpg" alt=""  loading="lazy" /></p>
<p>Sobre usar tecnologias não-padrão, acho que a melhor forma de olhar para isso é como uma vantagem competitiva. Paul Graham aponta que na média, startups falham, e o mesmo pode provavelmente ser dito sobre projetos de software em geral. Então se você não quiser falhar, você precisa fazer <strong>alguma coisa</strong> diferente da média, e usar tecnologias melhores é uma grande forma de fazer isso.</p>
<p>Mas você claramente precisa estar numa situação onde resultados importam mais do que política – é praticamente impossível vender Smalltalk para departamentos corporativos de TI. Por outro lado, um dono de um negócio pequeno não está nem aí para qual tecnologia você usa para lhe construir a aplicação – não é que ele tem um exército de desenvolvedores Java que irão dar manutenção nele.</p>
<p>Em geral, quanto mais próximo o alinhamento entre a pessoa que usa a aplicação, e a pessoa que assina os cheques, mais irão se importar em ter alguma coisa que de fato funcione, e menos sobre palavrinhas de marketing.</p>
<p>Essa foi minha estratégia quando fazia consultoria de Smalltalk, e essa é nossa estratégia com Dabble DB – vendemos para usuários, não CIOs.</p>
<p><strong>AkitaOnRails:</strong> É exatamente como penso. O que me leva às startups. Posso entender se cansar de consultoria, mas o que o levou a escolher abrir sua própria empresa para vender seus próprios produtos? Ouvi dizer que Tim Bray também é um investidor para sua empresa? Muitas pessoas não gostariam de perder seus empregos confortáveis por algo tão arriscado como isso. Qual foi a razão para essa direção na sua carreira?</p>
<p><strong>Avi Bryant:</strong> Quando fazíamos consultoria, ficou muito claro para Andrew e eu que a) a maioria das empresas, especialmente negócios pequenos, não podiam nos pagar, e b) mesmo os que podiam, apenas nos contratariam para os projetos realmente importantes. A única maneira de escalar nosso negócio, e ajudar o máximo de pessoas possível, seria efetivamente nos substituir com software: construir um produto que os deixariam fazer os projetos simples eles mesmos.</p>
<p>Não abandonamos tudo para construir isso, entretanto – mantivemos nossos clientes (de fato, pegamos alguns novos para conseguir um capital extra para contratar um web designer, etc), e trabalhamos no produto à noite, aos fins de semana, onde podíamos.</p>
<p>À medida que o projeto avançava, e se tornava mais e mais claro que seria alguma coisa que valia a pena, começamos a trabalhar com mais afinco, mas ainda mantendo alguma renda entrando com consultoria.</p>
<p>Eventualmente, quando o produto estava pronto para ser lançado, sabíamos que não poderíamos lidar com clientes Dabble DB ao mesmo tempo que nossos clientes de consultoria, então os abandonamos completamente. Foi quando pegamos algum investimento da Ventures West e Tim Bray.</p>
<p>Então foi uma transição razoavelmente gradual, o que foi mais fácil para nós.</p>
<p><img src="http://s3.amazonaws.com/akitaonrails/assets/2007/12/15/dabbledb.gif" alt=""  loading="lazy" /></p>
<p><strong>AkitaOnRails:</strong> E na época, vocês faziam apenas consultoria de Smalltalk/Seaside? Ou trabalhavam em diferentes linguagens/frameworks para clientes e Smalltalk depois do trabalho? E para os iniciantes como você brevemente descreveria <a href="http://www.dabbledb.com"target="_blank" rel="noopener">Dabble DB</a>? Ouvi dizer que estão para lançar um produto companheiro para ele, não é? Como o descreveria?</p>
<p><strong>Avi Bryant:</strong> Durante esse período, a consultoria era toda ao redor de Seaside, sim – houve períodos negros no começo quando eu tinha que pegar trabalhos em Java :-)</p>
<p>Dabble DB é uma aplicação web para empresas pequenas e equipes que precisam de algum tipo de gerenciamento customizado de dados – talvez precisem de gerenciamento customizado de projetos, ou um banco de dados de contatos, ou uma aplicação customizada de RH, ou planejamento de eventos, ou suas coleções de DVD, seja qual for a razão os softwares de caixinha não tem o que eles precisam. Dabble permite a eles interativamente construir relatórios muito ricos dos seus dados, com agrupamento estruturado e filtro, cálculos simples e sub-totais, e os mostra como uma tabela, ou um gráfico, ou um mapa, ou um calendário. Daí você pode compartilhar esses relatórios com pessoas, ou convidá-los a entrar e modificar os próprios dados.</p>
<p>O produto companheiro que você se referem, acho que é Dabble Pages. Isso é realmente apenas uma nova funcionalidade sobre o Dabble DB, que todos os clientes atuais tem. O que descobrimos é que numa organização normalmente existe um pequeno número de pessoas que querem o poder total da interface de usuário do Dabble DB, e querem construir novos relatórios ou adicionar campos ou re-estruturar seus dados, etc. Mas também existem um grande número de pessoas que querem apenas uma simples página web onde possam entrar com novos dados ou ver relatórios. Então Pages permite um pequeno grupo construa alguma coisa para um grupo maior. É algo como uma versão misturada de construtor de forms como WuFoo, mas com Dabble DB como o backend administrativo.</p>
<p>Isso torna o Dabble DB <strong>quase</strong> como uma ferramenta de desenvolvimento web, no sentido que os usuários administrativos estão realmente construindo aplicações simples para as pessoas nas suas empresas – mas sem nenhuma programação, então claro que as aplicações são bem limitadas.</p>
<p><img src="http://s3.amazonaws.com/akitaonrails/assets/2007/12/15/Picture_2.png" alt=""  loading="lazy" /></p>
<p><strong>AkitaOnRails:</strong> Mudando de assunto um pouquinho, uma coisa que admiro a seu respeito é seu relacionamento com a comunidade Ruby/Rails. São paradigmas e tecnologias diferentes, mas você nunca mergulha em flame wars como ‘Smalltalk é melhor que Ruby’ do nada. Pelo contrário, para mim parece que você gosta de Ruby, e até apresentou na RailsConf sobre a possibilidade de rodar Ruby sobre uma VM moderna como da GemStone. Mas, você migrou de Ruby para Smalltalk. O que que ‘clicou’ para você sobre Smalltalk? Continuations? A história de codificar dentro do runtime? A integração mais estreita com o ambiente?</p>
<p><strong>Avi Bryant:</strong> Então, primeiramente, realmente gosto de Ruby, tanto é que DabbleDB inclui mais ou menos 3000 linhas de código Ruby (acabei de confirmar), junto com todo o código Smalltalk (e um bocado de Python).</p>
<p>O que me chamou a atenção sobre Smalltalk foram algumas coisas: um foi simplesmente a maturidade, tanto da comunidade e da tecnologia. Implementações Smalltalk foram refinadas durante 25 anos, e eles realmente se beneficiaram disso.</p>
<p>Um dos maiores benefícios, na minha opinião, é que VMs Smalltalk são rápidas o suficiente que é razoável implementar todas as bibliotecas padrão – Array, Hash, Thread, etc – no próprio Smalltalk. Então não há barreiras onde você muda do código Ruby para a implementação C por baixo; é ‘tartaruga do começo ao fim’. Isso pode não parecer grande coisa mas uma vez que tem isso, é realmente difícil desistir.</p>
<p>Rubinius, claro, está se movendo nessa direção para Ruby, e muitos parabéns a Evan e todos trabalhando nesse projeto.</p>
<p>Para mim, o ambiente Smalltalk é também chave.</p>
<p>De alguma forma é a mesma coisa que falo com Dabble DB: você não tem que escolher um jeito de organizar seus dados, você pode ter uma visão agrupada por data e outra filtrada por cliente e outra onde um mapa é a única maneira de entender. Em Smalltalk, você não precisa escolher um layout de arquivo ou ordem dos métodos e classes no seu código; você está constantemente mudando visões sobre o que é basicamente um banco de dados de código.</p>
<p>Meu amigo Brian Marick odeia isso, porque você perde qualquer ‘narrativa’ que poderia ter existido colocando seu código em uma certa ordem em um arquivo, e é difícil se acostumar a isso, mas para mim, essa é a mais poderosa ferramenta para hackear grandes bases de código.</p>
<p><img src="http://s3.amazonaws.com/akitaonrails/assets/2007/12/15/n517961878_38879_9189.jpg" alt=""  loading="lazy" /></p>
<hr>
<p>Esta foi a Primeira Parte. Fiquem ligados para mais Avi falando sobre Smalltalk e Ruby na segunda parte da entrevista.</p>
]]></content:encoded><category>entrevistas</category><category>ruby</category></item><item><title>Conversando com John Lam (IronRuby)</title><link>https://akitaonrails.github.io/2007/11/12/conversando-com-john-lam-ironruby/</link><guid isPermaLink="true">https://akitaonrails.github.io/2007/11/12/conversando-com-john-lam-ironruby/</guid><pubDate>Mon, 12 Nov 2007 16:59:00 -0200</pubDate><description>&lt;p&gt;&lt;strong&gt;English-version:&lt;/strong&gt; &lt;a href="https://akitaonrails.github.io/2007/11/12/conversando-com-john-lam-ironruby/"&gt;here&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.iunknown.com/"target="_blank" rel="noopener"&gt;&lt;img src="http://s3.amazonaws.com/akitaonrails/assets/2007/11/12/n685772348_7884.jpg" alt="" loading="lazy" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Faz algum tempo desde minha última entrevista internacional, e estou de volta com ninguém menos que um dos responsáveis pelo Ruby rodar sobre a plataforma .NET. Isso mesmo, eu tenho coberto muito sobre JRuby e Rubinius mas não podemos negligenciar que uma das maiores plataformas do mercado está recebendo tratamento de Ruby também. Então convidei &lt;a href="http://www.iunknown.com/"target="_blank" rel="noopener"&gt;John Lam&lt;/a&gt; , que gentilmente respondeu diversas perguntas sobre essa empreitada.&lt;/p&gt;
&lt;p&gt;Lembrando que &lt;a href="http://www.ironruby.net/"target="_blank" rel="noopener"&gt;IronRuby&lt;/a&gt; – nomeado depois de &lt;a href="http://www.ironpython.com/"target="_blank" rel="noopener"&gt;IronPython&lt;/a&gt;, a primeira das principais linguagens dinâmicas construídas sobre o .NET – é um &lt;a href="http://www.opensource.org/node/207"target="_blank" rel="noopener"&gt;verdadeiro projeto open source&lt;/a&gt;, e também tem um add-on de terceiros para Visual Studio.NET, de forma que programadores acostumados ao fluxo de trabalho do VS.NET poderão vir à bordo com uma curva menor de aprendizado.&lt;/p&gt;</description><content:encoded><![CDATA[<p><strong>English-version:</strong> <a href="/2007/11/12/conversando-com-john-lam-ironruby/">here</a></p>
<p><a href="http://www.iunknown.com/"target="_blank" rel="noopener"><img src="http://s3.amazonaws.com/akitaonrails/assets/2007/11/12/n685772348_7884.jpg" alt=""  loading="lazy" /></a></p>
<p>Faz algum tempo desde minha última entrevista internacional, e estou de volta com ninguém menos que um dos responsáveis pelo Ruby rodar sobre a plataforma .NET. Isso mesmo, eu tenho coberto muito sobre JRuby e Rubinius mas não podemos negligenciar que uma das maiores plataformas do mercado está recebendo tratamento de Ruby também. Então convidei <a href="http://www.iunknown.com/"target="_blank" rel="noopener">John Lam</a> , que gentilmente respondeu diversas perguntas sobre essa empreitada.</p>
<p>Lembrando que <a href="http://www.ironruby.net/"target="_blank" rel="noopener">IronRuby</a> – nomeado depois de <a href="http://www.ironpython.com/"target="_blank" rel="noopener">IronPython</a>, a primeira das principais linguagens dinâmicas construídas sobre o .NET – é um <a href="http://www.opensource.org/node/207"target="_blank" rel="noopener">verdadeiro projeto open source</a>, e também tem um add-on de terceiros para Visual Studio.NET, de forma que programadores acostumados ao fluxo de trabalho do VS.NET poderão vir à bordo com uma curva menor de aprendizado.</p>
<p>A despeito de opiniões contrárias à Microsoft apenas com o objetivo de criticar, o fato persiste que Java e .NET representam os maiores mercados de desenvolvimento corporativo hoje. E também é um fato que a influência Ruby está se espalhando depressa. Poder rodar sobre ambos JVM e CLR representa permitir o Ruby em mercados de nicho que ele não alcançaria de outra maneira, e isso é um grande ganho. Eu falei um pouco sobre isso no meu artigo <a href="/2007/10/23/para-eu-ganhar-o-outro-precisa-perder">Para eu ganhar o outro precisa perder</a>. Existem pessoas muito inteligentes na Microsoft, John Lam sendo um deles.</p>
<p>Isso dito, vamos começar:</p>
<p><strong>AkitaOnRails:</strong> Primeiro de tudo, eu sempre pergunto a meus convidados sobre suas carreiras: qual foi seu caminho até aqui? Quero dizer, como você começou com computação, o que o trouxe até aqui?</p>
<p><strong>John Lam:</strong> Eu escrevi muito software antes de me formar no colegial, em 1986. Lancei vários softwares comerciais para a ‘plataforma’ Commodore (como PET, VIC-20, C-64/128) lá atrás. Em 1986 decidi que não havia futuro em computação (que mostra porque as pessoas não devem levar minhas opiniões muito a sério :)) e decidi estudar ciência física na universidade. Me graduei em 1995 com um doutorado em Química Orgânica e decidi que não havia futuro em química (que, se vocês olharem como a engenharia reversa da vida hoje é baseada em muita interação entre disciplinas com outros galhos de ciências da vida, mostra porque as pessoas não devem levar minhas opiniões muito a sério :))</p>
<p>Quando decidi trabalhar com computação novamente, eu peguei uma nova e obscura plataforma de desenvolvimento chamada Delphi que lançou a versão 1.0 na época que voltei a esse campo. Gastei bastante tempo trabalhando na integração de Delphi com COM, que é onde eu originalmente suspendi meu chapéu. O lado negro do COM me puxou à sua órbita e tenho trabalhado com coisas relacionadas à Microsoft desde então.</p>
<p><strong>AkitaOnRails:</strong> Vejo que está na Microsoft desde janeiro de 2007, é isso? Como entrou lá, você foi contratado por causa do projeto IronRuby? Essa é sua tarefa principal hoje?</p>
<p><strong>John Lam:</strong> Sim, comecei em janeiro. Antes de integrar a empresa, trabalhei em uma ponte open source entre Ruby e o CLR chamado “RubyCLR”. Quando decidi começar a promover esse trabalho nas conferências, cruzei meu caminho com a equipe do DLR da Microsoft. Mahesh Prakriya gentilmente doou metade do seu tempo na Tech Ed em 2006 para que eu pudesse falar sobre o RubyCLR. Depois de muita ansiedade e condicionamento mental acabei aceitando a oferta deles de trabalhar em tempo integral em uma implementação de Ruby sobre o DLR e nós (minha mulher, dois filhos e um cachorro) chegamos em Redmond em janeiro.</p>
<p><img src="http://s3.amazonaws.com/akitaonrails/assets/2007/11/12/166261351_2b04ab1086.jpg" alt=""  loading="lazy" /></p>
<p><strong>AkitaOnRails:</strong> Qual foi a motivação para começar IronRuby? Como ele iniciou? Você foi o único desenvolvedor original da implementação de Ruby sobre o .NET?</p>
<p><strong>John Lam:</strong> Queríamos demonstrar que o DLR é um verdadeiro runtime para múltiplas linguagens dinâmicas, então precisávamos construir várias linguagens sobre ela. Ruby certamente se encaixava nesse critério: dinâmica, forte comunidade de usuários, muita atenção, então fazia sentido implementá-la. IronRuby definitivamente forçou muitas decisões de mudanças no DLR, tornando-a menos “Pythônica” o que é uma coisa boa para outras pessoas interessadas em construir linguagens dinâmicas sobre nossa plataforma.</p>
<p>Definitivamente não sou o único desenvolvedor do IronRuby. Temos dois grandes desenvolvedores trabalhando no projeto: Tomas Matousek e John Messerly, e eles estão fazendo um trabalho incrível. Nossa pessoa de testes, Haibo Luo, está fazendo um grande trabalho para garantir que vamos lançar uma implementação de alta qualidade. O trabalho de Haibo será lançado junto com o IronRuby, o que significa que a comunidade vai se beneficiar desta suíte de testes.</p>
<p><strong>AkitaOnRails:</strong> Nem todos estão familiarizados com o DLR e Silverlight. Poderia descrever rapidamente para os iniciantes? O que torna o “DLR” diferente do “CLR” além de saltar da letra “C” para “D”? :-)</p>
<p><strong>John Lam:</strong> O DLR é uma plataforma que forma uma camada sobre o CLR. Isso significa que podemos rodar em qualquer lugar onde o CLR rodar, o que obviamente inclui Silverlight. Silverlight é nossa plataforma “multi-plataforma” baseada em browsers que roda em Windows, Mac e Linux (através do projeto Moonlight). Nós lançamos uma versão multi-plataforma do CLR o que significa que você será capaz de rodar linguagens baseadas em DLR com um download inicial de apenas 5Mb no seu browser web.</p>
<p><strong>AkitaOnRails:</strong> Isto é delicado: uma vez eu li Ola Bini e Charles Nutter criticando o “jeito Microsoft”, dizendo que seria extremamente difícil – se não impossível – para você escrever uma implementação 100% completa do Ruby 1.8 sobre o .NET sem poder olhar para seu código-fonte. A razão disso por causa da política da empresa em relação a licenças open source. Foi esse o caso?</p>
<p><strong>John Lam:</strong> Acho que o IronPython é a prova de existência que você pode construir uma implementação compatível de uma linguagem dinâmica sem olhar para o código-fonte original. Em nosso trabalho com IronRuby, posso lhe dizer que não poder olhar o código-fonte não nos impediu de entender como o Ruby atinge certas funcionalidades – tem tudo a ver com desenvolver os experimentos certos.</p>
<p><strong>AkitaOnRails:</strong> Também vi que IronRuby será lançado sob uma licença compatível com open source, da Microsoft, fazendo dela o primeiro projeto verdadeiramente open source da Microsoft. O que significa que vocês não apenas permitiriam as pessoas a dar uma olhada no código-fonte mas também de contribuir de volta. Quão longe estamos disso?</p>
<p><strong>John Lam:</strong> A Microsoft Public License foi oficialmente sancionada pelo OSI no começo de outubro. IronRuby, IronPython e o DLR estão todos sob essa licença.</p>
<p>Nós já aceitamos contribuições de volta da comunidade, e estamos continuando a aceitar mais contribuições.</p>
<p>Na realidade não somos o primeiro projeto Open Source na Microsoft a aceitar contribuições de volta da comunidade. Essa honra pertence ao <a href="http://www.asp.net/ajax/ajaxcontroltoolkit/samples/"target="_blank" rel="noopener">AJAX control toolkit</a> do ASP.NET que é um projeto enormemente bem sucedido com mais de 1 milhão de downloads até hoje.</p>
<p><img src="http://s3.amazonaws.com/akitaonrails/assets/2007/11/12/166261286_d084c57e46.jpg" alt=""  loading="lazy" /></p>
<p><strong>AkitaOnRails:</strong> O DLR foi originalmente concebido como um jeito experimental de rodar Python sobre .NET. Isso tornou mais fácil para uma implementação Ruby ou você acha que Python e Ruby são diferentes o suficiente para garantir muitos ajustes no DLR para torná-la possível?</p>
<p><strong>John Lam:</strong> É justo chamar a versão original do DLR como “Python Language Runtime”. Adicionar Ruby à mistura forçou várias mudanças adicionais ao DLR, a mais significante sendo a refatoração do runtime para migrar todos os idiomas específicos de Python (que pensaram ser genéricas mas acabou não sendo o caso) para o IronPython.dll. O que restou é um núcleo que nossas 4 linguagens desenvolvidas pela MSFT (IronRuby, IronPython, Managed JScript and VB) continuam a usar efetivamente hoje.</p>
<p><strong>AkitaOnRails:</strong> É um objetivo ser 100% compatível com o MRI 1.8? Ou vocês estão na direção de um sub-conjunto da implementação Ruby? Isso tornaria possível escrever programas .NET em Ruby, usando o conjunto completo de bibliotecas .NET e frameworks como ASP.NET, Windows.Forms, LINQ, etc. Ou estão planejando uma implementação totalmente compatível com o MRI, o suficiente para conseguir rodar uma aplicação inteira de Rails?</p>
<p><strong>John Lam:</strong> Nossa prioridade nr. 1 é ser tão compatível com o MRI 1.8.x quanto possível. A única funcionalidade que não vamos suportar é continuações, o que é consistente com JRuby. Além disso (e na falta de uma especificação de Ruby), a compatibilidade será julgada se podemos rodar aplicações reais de Ruby e suítes de teste desenvolvidos pela comunidade. Obviamente Rails é uma aplicação Ruby extremamente importante, que nós absolutamente vamos rodar sobre o IronRuby.</p>
<p>Interoperabilidae .NET é nossa prioridade nr. 2. Vamos integrar com a plataforma .NET e permitir escrever aplicações Ruby usando o rico conjunto de bibliotecas .NET. Obviamente coisas como Silverlight, WPF, LINQ, WinForms e ASP.NET serão suportadas.</p>
<p><strong>AkitaOnRails:</strong> Ruby cresceu como um esforço coletivo e discreto que realmente explodiu 3 anos atrás por causa de Rails. É uma das razões porque ninguém nunca se importou em escrever uma especificação formal e uma suíte de testes. Temos Alioth, a suíte de testes do YARV. Você teve dificuldades por causa da falta de uma especificação formal? Você está em contato com pessoas como Charles do JRuby, Koichi Sasada do YARV ou Evan Phoenix do Rubinius? O que acha de todos esses esforços acontecendo em paralelo? Há alguma maneira onde vocês possam contribuir entre vocês?</p>
<p><strong>John Lam:</strong> Estamos usando a suíte de especificações do Rubinius hoje, e planejamos lançá-lo junto com nossos fontes para garantir que iremos pegar bugs de compatibilidade cedo no processo. Sou culpado de não participar tanto quanto gostaria em falar mais com Charlie, Evan e Koichi sobre colaboração em especificações. Estamos focados em trazer o núcleo da linguagem rodando hoje, e temos vários outros projetos acelerados negligenciando documentar as coisas que temos aprendido. Quando desacelerarmos um pouco, serei capaz de gastar mais tempo me comunicando com os outros implementadores.</p>
<p><strong>AkitaOnRails:</strong> Ruby tem várias deficiências conhecidas. Koichi está tentando melhorar algumas delas para o Ruby 1.9. Como você está lidando com problemas como a falta de threading nativo, o garbage collector mark and sweep simples, nenhuma máquina virtual e portanto nenhuma compilação em byte-code, problemas de performance, falta de internacionalização nativa (Unicode), várias extensões escritas em C?</p>
<p><strong>John Lam:</strong> Nós ganhamos muitas coisas de ‘graça’ ao rodar sobre o CLR. Threading nativo é suportado em IronRuby. Nós usamos o garbage collector do CLR, que é um GC de classe mundial. Nós compilamos nativamente para IL, e nosso IL é compatível com o GC também o que é uma ótima coisa para aplicações de servidor que ficam de pé por um longo período. Nós obviamente suportaremos strings do CLR, que são strings Unicode e também suportaremos strings mutáveis do Ruby, que são baseadas em array de bytes. Não vamos suportar extensões baseadas em C, em vez disso estamos portando as bibliotecas baseadas em C, existentes no Ruby Standard Library para C# (ou Ruby).</p>
<p><strong>AkitaOnRails:</strong> Existe algum benchmark comparando IronRuby ao MRI? Vocês acham que já o ultrapassaram? Existe algum problema hoje sobre a performance do Ruby sobre o DLR? Ou mais interessante: existe alguma comparação entre Ruby no DLR e C# ou VB.NET sobre o CLR?</p>
<p><strong>John Lam:</strong> Somos mais rápidos que o MRI nos benchmarks do YARV, mas esse número muda diariamente. Uma coisa ótima sobre nossa equipe é que temos uma suíte de testes de regressão de performance que rodamos regularmente por todo nosso código. Isso torna trivial localizar uma compilação que causa uma regressão na performance, mesmo que deixemos para lidar com isso para mais tarde.</p>
<p>Não temos feito nenhuma otimização de performance até agora, estamos apenas usando funcionalidades que existem no DLR hoje, como caches inline polimórficos para caching eficiente de métodos call-site. À medida que nossa implementação amadurece, vamos otimizar IronRuby para performar bem em benchmarks de nível de aplicações (não micro-benchmarks, que são úteis para nós mas não tão interessantes para clientes reais). O DLR (e CLR) está se tornando mais rápido o tempo todo, e qualquer linguagem dinâmica construída sobre ele se beneficiará dessas melhorias.</p>
<p>Obviamente, linguagens como C# e VB.NET são mais rápidos que Ruby hoje. Mas estamos confiantes que podemos diminuir essa diferença significativamente com o tempo.</p>
<p><strong>AkitaOnRails:</strong> E sobre ferramental? Vi que você mexeu no seu Visual Studio.NET para ter o tema Vibrant Ink que nós – usuários de Textmate – estamos acostumados, e ficou legal. Vi também uma foto de tela de code folding do Ruby dentro do Visual Studio. Como está esse suporte para Ruby?</p>
<p><strong>John Lam:</strong> Neste momento nossa equipe não está envolvida com integração VS. Entretanto, o pessoal da <a href="http://www.sapphiresteel.com/IronRuby-Visual-Designer"target="_blank" rel="noopener">Sapphire in Steel</a> está fazendo um grande trabalho integrando IronRuby ao VS.</p>
<p><a href="http://www.sapphiresteel.com/IronRuby-Visual-Designer"target="_blank" rel="noopener"><img src="http://s3.amazonaws.com/akitaonrails/assets/2007/11/12/editing_small.gif" alt=""  loading="lazy" /></a></p>
<p><strong>AkitaOnRails:</strong> Você mencionou numa entrevista sobre a possibilidade de Ruby rodando sobre o Silverlight. Quão possível isso é hoje?</p>
<p><strong>John Lam:</strong> Demonstramos IronRuby rodando sobre o Silverlight na RubyConf. A conversa deve ser publicada logo. Estamos planejando em convergir com o Silverlight a tempo para seu próximo CTP (fim deste ano, começo do ano que vem). Nessa época, vocês serão capazes de codificar Ruby que roda no seu browser.</p>
<p><strong>AkitaOnRails:</strong> A Microsoft está aprendendo como lidar com as comunidades open source. Você acha que a adoção de tecnologias como Python e Ruby estão ajudando a empresa a entender o jeito open source? O que acha que ainda precisa melhorar? Quero dizer, se pudesse, o que você mudaria?</p>
<p><strong>John Lam:</strong> A Microsoft é uma empresa grande e estamos trabalhando com muito empenho em colaborar com a comunidade Open Source. IronRuby é um dos projetos open source mais visíveis da empresa, e estamos ajudando a pavimentar o caminho para outras equipes que querem se engajar com a comunidade open source. Mudanças acontecem incrementalmente em grandes empresas e tem sido legal fazer parte dessa mudança!</p>
<p><strong>AkitaOnRails:</strong> Silverlight foi lançado sobre uma licença open source também, de tal forma que o pessoal do <a href="http://www.mono-project.com/Main_Page"target="_blank" rel="noopener">Mono</a> foi capaz de rodá-lo muito rapidamente sobre o Mono. Você é próximo a Miguel de Icaza? O que pensa sobre o Mono? Um IronRuby rodando sobre ele significa um Ruby multi-plataforma que pode rodar sobre o Linux (com .NET). Se você atingir 100% de compatibilidade com o MRI e Rails, isso significa rodar sobre um Apache+mod_mono no Linux e sobre o IIS no Windows, tudo desenvolvido sobre Orcas. Existe algum plano para esse tipo de integração e solução ponta-a-ponta?</p>
<p><strong>John Lam:</strong> Na realidade, o Silverlight não está sob uma licença Open Source. O DLR, IronPython e IronRuby estão todos sob a Microsoft Public License, o que torna possível para Michel e sua equipe lançá-lo sobre sua implementação <a href="http://www.mono-project.com/Moonlight"target="_blank" rel="noopener">Moonlight</a> (que é a versão open source do Silverlight).</p>
<p>Eu adoro quão pragmático o Miguel é. Ele mostrou IronRuby rodando sobre o Mono na RubyConf e isso foi em grande parte por causa da equipe Mono consertar um monte de bugs de última hora para que pudéssemos fazer a demonstração (valeu!). DLR + Iron* tende a empurrar fortemente o C# e o CLR. Nós encontramos bugs no compilador C# da Microsoft, e também no gmcs do Mono. Mas felizmente, ambas as equipes de C# e Mono têm sido ótimos consertando esses bugs para nos desbloquear.</p>
<p><img src="http://s3.amazonaws.com/akitaonrails/assets/2007/11/12/481182714_62e1d07f7c.jpg" alt=""  loading="lazy" /></p>
<p><strong>AkitaOnRails:</strong> Acho que é isso por hoje. Algum comentário para a audiência brasileira?</p>
<p><strong>John Lam:</strong> Muito obrigado por enviar um grande conjunto de perguntar! Boa sorte com suas aventuras Ruby e espero que tenham uma chance para checar IronRuby no futuro.</p>
]]></content:encoded><category>entrevistas</category><category>ruby</category><category>linguagens-de-programacao</category></item><item><title>Conversando com Jamis Buck</title><link>https://akitaonrails.github.io/2007/08/06/conversando-com-jamis-buck/</link><guid isPermaLink="true">https://akitaonrails.github.io/2007/08/06/conversando-com-jamis-buck/</guid><pubDate>Mon, 06 Aug 2007 13:03:00 -0300</pubDate><description>&lt;p&gt;&lt;img src="http://s3.amazonaws.com/akitaonrails/assets/2007/8/3/245186199_71f55cc3c7.jpg" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;English Original:&lt;/strong&gt; &lt;a href="https://akitaonrails.github.io/2007/08/03/chatting-with-jamis-buck/"&gt;here&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Esta é outra grande entrevista. Desta vez com Jamis Buck, o programador que ajudou o próprio David Hansson bem no começo da Era Rails, na 37signals.&lt;/p&gt;
&lt;p&gt;Hoje é mais conhecido por suas conquistas com Capistrano e um monte de outras bibliotecas Ruby como os bindings sqlite-ruby e Net::SSH. Jamis foi muito gentil de nos dar a oportunidade de conhecer mais sobre sua carreira e o começo da história de Ruby on Rails.&lt;/p&gt;</description><content:encoded><![CDATA[<p><img src="http://s3.amazonaws.com/akitaonrails/assets/2007/8/3/245186199_71f55cc3c7.jpg" alt=""  loading="lazy" /></p>
<p><strong>English Original:</strong> <a href="/2007/08/03/chatting-with-jamis-buck/">here</a></p>
<p>Esta é outra grande entrevista. Desta vez com Jamis Buck, o programador que ajudou o próprio David Hansson bem no começo da Era Rails, na 37signals.</p>
<p>Hoje é mais conhecido por suas conquistas com Capistrano e um monte de outras bibliotecas Ruby como os bindings sqlite-ruby e Net::SSH. Jamis foi muito gentil de nos dar a oportunidade de conhecer mais sobre sua carreira e o começo da história de Ruby on Rails.</p>
<p><strong>AkitaOnRails:</strong> Ok, então vamos começar. A primeira coisa que pergunto a todos os meus convidados: qual é seu passado? Quero dizer, quando, como, por que você começou com programação? Foi o começo clássico, como um hobby, ou foi uma coisa mais recente por causa da carreira ou coisa parecida?</p>
<p><strong>Jamis Buck:</strong> Eu comecei a programar quando estava na décima série, quando minha mãe um novíssimo computador pessoal Tandy. Ele tinha 20 Mb de espaço em disco, e vinha com <a href="http://en.wikipedia.org/wiki/GW-BASIC"target="_blank" rel="noopener">GW-BASIC</a>. Eu tinha programado antes, gráficos-tartaruga e um pouco de BASIC, mas foi com o Tandy que comecei a levar a sério. Eu me ensinei GW-BASIC com o pequeno livro de referência que veio com o computador e escrevi alguns jogos simples e utilitários. Então eu me ensinei Turbo Pascal e Turbo C++ na 11a e 12a séries, e começou daí :)</p>
<p><strong>AkitaOnRails:</strong> Então você decidiu ir para Ciência da Computação na faculdade? Eu li no seu perfil no <a href="http://www.workingwithrails.com/person/5309-jamis-buck"target="_blank" rel="noopener">WorkingWithRails</a> que você é um programador Java arrependido? Quanto tempo você programa em Java?</p>
<p><strong>Jamis Buck:</strong> Sim, então eu pulei para Ciência da Computação quando entrei na faculdade. Me graduei um pouco tarde, em 1999, depois de trabalhar tempo integral para a universidade (<a href="http://www.byu.edu/webapp/home/index.jsp"target="_blank" rel="noopener">BYU</a>) como programador por alguns anos. Foi onde fiz todo meu trabalho com Java. Na realidade nós fazíamos aplicações Web em C, o que não é tão insano quanto parece! Mas então tivemos uma mudança de liderança quando um novo CIO chegou, e ele basicamente deu uma ordem cega: <em>“aprendam Java, enterrem C!”</em> Então tivemos que re-ferramentar massivamente, tirar certificados e assim por diante. Eu estava na equipe que liderou a pesquisa sobre que ferramentas Java deveríamos usar, então ganhamos muita experiência com isso. Eu trabalhei com Java em tempo integral lá por uns 2 anos, até a <a href="http://37signals.com/"target="_blank" rel="noopener">37signals</a> chegar em Fevereiro de 2005 e me fazer uma oferta melhor, e eu nunca mais olhei para trás!</p>
<p><strong>AkitaOnRails:</strong> Uau, então você pulou direto de Java na universidade para Rails na 37signals? Ainda é um pouco cedo do que eu esperava, mas já que você mencionou: como você entrou em contato com o pessoal da 37signals? Como começou em Ruby estando tão ocupado com Java antes?</p>
<p><strong>Jamis Buck:</strong> Bem, eu estava envolvido com Ruby (primariamente como hobby) desde cerca de 2001. Eu escrevi algumas bibliotecas como os bindings <a href="http://sqlite-ruby.rubyforge.org/"target="_blank" rel="noopener">sqlite</a> e sqlite3, e na RailsConf 2004, eu conheci o DHH. Eu fiz alguns trabalhos lá na conferência para fazer Rails falar com banco de dados sqlite. Depois disso, lá para Novembro de 2004, eu acho, David me perguntou se eu não estaria interessado em fazer alguma consultoria para a 37signals. Em Dezembro de Janeiro fiz alguns trabalhos esquisitos para eles como adicionar SFTP e suporte a time zones no Basecamp. E então, em Fevereiro, eles me fizeram voar para Seattle para participar do workshop <a href="http://www.37signals.com/workshop-062504.php"target="_blank" rel="noopener">Building of Basecamp</a> lá e eles me fizeram uma oferta.</p>
<p><strong>AkitaOnRails:</strong> Eu entendo que a 37signals é uma empresa pequena em termos de número de empregados e muito da sua força interna vem justamente desse fato. Ela mudou muito desde que você começou, quero dizer, nos últimos 2 ou 3 anos? O que você gostava mais na época e o que gosta mais agora?</p>
<p><img src="http://s3.amazonaws.com/akitaonrails/assets/2007/8/3/conf_room.jpg" alt=""  loading="lazy" /></p>
<p><strong>Jamis Buck:</strong> Bem, quando eu cheguei, eu fui o quinto empregado, e o segundo programador. Antes de eu chegar, David fazia toda a programação e trabalho de administração de sistemas, então eu acho que foi um grande alívio para ele ter alguém com quem dividir a carga! Certa de um ano atrás, contratamos mais dois programadores, e desde então contratamos mais duas pessoas, incluindo um administrador de sistemas tempo integral. Eu não consigo expressar quanto eu odiava ser um administrador, já que eu tinha pouca idéia do que estava fazendo!</p>
<p><strong>AkitaOnRails:</strong> Você parece ser o tipo de pessoa que gosta do <em>encanamento</em> porque esteve envolvido com coisas de ‘baixo-nível’ como bindings sqlite, Net::SSH e assim por diante. Esse é o tipo de coisa que o empolga mais? Ou é apenas coincidência e na realidade você prefere trabalho com GUI também?</p>
<p><strong>Jamis Buck:</strong> Na realidade eu jurei, alguns anos atrás, que eu nunca seria um desenvolvedor de aplicações web :) Eu sempre preferi escrever as ferramentas do que escrever as aplicações. Mas eu realmente gostei de descrever aplicações web na 37signals. A equipe é ótima e o ferramental (Rails!) é fantástico. Eu ainda gosto de escrever bibliotecas (trabalhando no <a href="http://raa.ruby-lang.org/project/net-ssh/"target="_blank" rel="noopener">Net::SSH</a> e <a href="http://raa.ruby-lang.org/project/net-sftp/"target="_blank" rel="noopener">Net::SFTP</a> v2 agora mesmo, de fato) mas aplicações não são tão ruins também :)</p>
<p><strong>AkitaOnRails:</strong> Mas lá atrás quando você literalmente era segundo-em-comando não tinha muita escolha, tinha? Aposto que você fez muitas interfaces do Basecamp? E você mencionou que não gosta muito do trabalho de administração porque não sabia muito bem o que fazia, mas provavelmente agora é um expert porque Capistrano arrasa nesse campo. Eu lembro dele ser chamado de SwitchTower antes. Pode nos contar essa história?</p>
<p><strong>Jamis Buck:</strong> Eu trabalhei um pouco em todos as aplicações, algumas mais do que outras. Eu realmente não escrevo a interface (esse é o domínio de Jason Fried e Ryan Singer), mas eu as conecto e faço funcionar.</p>
<p>Aprendi uma tonelada de coisas sobre administração de sistemas desde que comecei. Ainda sou um grande amador nisso mas aprendi mais do que imaginava aprender sobre como mysql realmente funciona, por exemplo :)</p>
<p>Quando lancei Capistrano da primeira vez, um ano e meio atrás mais ou menos, ele era chamado de SwitchTower, mas por volta de Março de 2006 eu recebi uma <a href="http://en.wikipedia.org/wiki/Cease_and_desist"target="_blank" rel="noopener">carta e desistência</a> de uma empresa que tinha o nome registrado, e então eu procurei por um novo nome. O Core Team do Rails ajudou imensamente na época, eles ofereceram uma tonelada de sugestões para nomes. Marcel eventualmente me mandou uma mensagem e sugeriu “Capistrano” que simplesmente “clicou” para mim e eu fui com esse. Recebi críticas de algumas pessoas, que acharam o nome pobre, mas eu rio agora porque a maioria das pessoas que usam Cap hoje provavelmente chegaram a ele depois da mudança de nome e nunca souberam o outro nome, e nem pensam duas vezes sobre isso.</p>
<p><img src="http://s3.amazonaws.com/akitaonrails/assets/2007/8/3/logo-big.png" alt=""  loading="lazy" /></p>
<p><strong>AkitaOnRails:</strong> Você provavelmente está muito ocupado agora por causa do lançamento do Capistrano 2.0. Ele é um grande desvio do 1.4.1, se entendo corretamente. Você reescreveu muita coisa, teve que quebrar a compatibilidade. Acha que conseguiu o que queria com o lançamento ou está querendo mais em um lançamento 3.0?</p>
<p><strong>Jamis Buck:</strong> Cap2 é basicamente o que eu queria que fosse. Existem alguns pequenos ajustes na minha fila, mas nada significante. Ele é cerca de 90% compatível com Cap1, então a maioria das pessoas não deveria ter problemas na troca. E desde o lançamento do 2.0, a carga de manutenção para cap tem sido realmente pequeno. Estou muito satisfeito com ele. Ainda preciso me ocupar com documentação, no entanto :) Isso é o que ainda segura muitas pessoas para trás.</p>
<p><strong>AkitaOnRails:</strong> O que é o que você mais gosta sobre cap? Obviamente usou-o em seus próprios deployments na 37signals. Eu fantasio que você tinha um monte de scripts shell, mais de um ano atrás, então os costurou juntos para construir o que foi o primeiro lançamento do Capistrano.</p>
<p><strong>Jamis Buck:</strong> Antes de SwitchTower/Capistrano, tínhamos uma ferramenta escrita pelo David para deployment do Basecamp. Na época, Basecamp rodava em um único servidor, então o deployment não era mais do que um “svn up”. Mais tarde, movemos Basecamp para múltiplos servidores e lançamos o Backpack, e então entendemos que precisávamos de algo mais poderoso para deployments. Então eu fui incumbido de escrever alguma coisa e Capistrano foi o resultado. O “cap shell”, em particular, o deixa imediatamente e facilmente executar comandos arbitrários em múltiplos servidores, simultaneamente, o que é muito útil. Claro, “cap deploy” é legal também :)</p>
<p><strong>AkitaOnRails:</strong> Me lembro de um episódio onde David relatou sobre 72 horas de um problema que deixou Basecamp fora do ar. Você estava envolvido nesse episódio? :-) Dores de cabeça como esse parecem engraçados quando nos lembramos deles agora, mas obviamente não tão engraçados na ocasião.</p>
<p><strong>Jamis Buck:</strong> Ha, sim, isso realmente aconteceu alguns dias depois que fui contratado :) Estávamos adicionando suporte a UTF-8 no Basecamp e a migração de banco de dados não se deu bem. Varamos noite. Uma bela apresentação da cultura da 37signals :) Felizmente, esse tipo de coisa não aconteceu desde então, embora tenhamos tido nossa cota de emergências, claro.</p>
<p><strong>AkitaOnRails:</strong> Lições aprendidas? Acho que é o que melhor se pode tirar dessas situações :-)</p>
<p><strong>Jamis Buck:</strong> A lição principal que aprendi na época: quando brincando com charsets, garanta que tenha testado no maior número de charsets não-Latin1 quanto possível :) Naturalmente, nós testamos muitas vezes antes do deployment, mas realmente não pensamos em checar dados em russo ou japonês que estavam no banco de dados depois do teste, o que parece óbvio vendo agora. Nós tentamos alguns alfabetos não-Latin1 durante os testes mas os que tentamos funcionavam apesar da existência de alguns bugs. Outra lição aprendida: não importa quão bem você se prepare, alguma coisa sempre vai dar errado!</p>
<p><img src="http://s3.amazonaws.com/akitaonrails/assets/2007/8/3/245186199_71f55cc3c73.png" alt=""  loading="lazy" /></p>
<p><strong>AkitaOnRails:</strong> Eu liderei uma equipe de voluntários e traduzimos seu livro <a href="http://gettingreal.37signals.com/GR_por.php"target="_blank" rel="noopener">Getting Real</a> para português do Brasil algum tempo atrás. Acredito que você se envolveu nisso também? Esse livro é uma referência ao espírito da 37signals, eu acho. Vocês realmente se movem da forma como está escrito? :-)</p>
<p><strong>Jamis Buck:</strong> Na realidade eu não estava tão envolvido na composição do livro, embora tenha dado minha contribuição no processo de escrita. Mas sim, o livro descreve nossos processos. Realmente não há qualquer coisa no livro que não fazemos.</p>
<p><strong>AkitaOnRails:</strong> Como vocês operam? Acredito que nem todos trabalhem no mesmo local físico? Vocês fazem muito trabalho remoto? Quantos programadores/administradores/designers trabalham lá agora?</p>
<p><strong>Jamis Buck:</strong> Chicago é definitivamente o “coração” da 37signals: Jason, Ryan, David e Sam todos moram e trabalham lá. Temos um escritório lá também, e eles vão para lá regularmente trabalhar (embora eles também trabalhem de casa). Matt Linderman é nosso escritor, ele mora e trabalha em Nova Iorque. Mark Imbriaco, nosso administrador de sistemas, mora e trabalha em Chesapeake, na Virginia e Jeremy Kemper é outro programador, morando em Pasadena, na California agora. A natureza distribuída disso funciona muito bem para nós. Eu realmente amo trabalhar de casa, isso me possibilita estar mais envolvido com a vida de meus filhos, por exemplo, do que seria possível de outra maneira.</p>
<p><img src="http://s3.amazonaws.com/akitaonrails/assets/2007/8/3/building_djd.jpg" alt=""  loading="lazy" /></p>
<p><strong>AkitaOnRails:</strong> Ouvi que você é de Provo, em Utah? É uma coincidência porque meu chefe atual, <a href="/2007/07/20/conversando-com-carl-youngblood/">Carl Youngblood</a>, também é de lá e também estudou na BYU :-) Por acaso vocês não se conhecem?</p>
<p><strong>Jamis Buck:</strong> Na realidade moro em Caldwell, em Idaho, mas eu fui de Provo por cerca de 8 anos e sim, eu conheço Carl! Ambos participávamos do <a href="http://groups.google.com/group/urug?hl=en"target="_blank" rel="noopener">Utah Ruby Users Group</a>. Ele é um grande cara.</p>
<p><strong>AkitaOnRails:</strong> Você participou de muitas conferências para a comunidade Ruby. Não me lembro se escreveu algum livro. Está escrevendo algum agora?</p>
<p><strong>Jamis Buck:</strong> Eu ia originalmente escrever um livro sobre Capistrano para a Apress, mas isso esfriou. Não estou ativamente envolvido em nenhum livro no momento, e realmente não tenho muito interesse nisso, honestamente. Eu prefiro muito mais escrever software! E eu tento postar no meu blog de vez em quando também.</p>
<p><strong>AkitaOnRails:</strong> Sim, o <a href="http://weblog.jamisbuck.org/"target="_blank" rel="noopener">buckblog</a>, tem dicas muito legais que eu gosto de ler. Você começou o blog por cause de Rails ou já tinha um blog de Java na época?</p>
<p><strong>Jamis Buck:</strong> Eu comecei antes de Rails. Se ler os primeiros artigos, verá que sou bem eclético. Ainda estava tentando entender esse negócio todo de “blog” :) Desde então foco em desenvolvimento de software e uso o meu <a href="http://family.jamisbuck.org"target="_blank" rel="noopener">blog familiar</a> para posts mais pessoais atualmente.</p>
<p><strong>AkitaOnRails:</strong> Eu também fui um programador Java e ainda tento me manter informado sobre o que está acontecendo em outras comunidades como Java, algum PHP, Python. O que você acha ou sente sobre outros frameworks e tecnologias como CakePHP, o <a href="http://www.seaside.st/"target="_blank" rel="noopener">Seaside</a> de Avi Bryant ou mesmo Django?</p>
<p><strong>Jamis Buck:</strong> Honestamente, estou um pouco envergonhado de admitir que não tenho acompanhado outros frameworks tanto quanto deveria. Seaside tem idéias legais e meu desejo de melhorar minhas habilidades de programação Smalltalk me tem feito querer cutucar isso mais a fundo. Mas mais do que isso, não tenho pesquisado muito (para meu detrimento pessoal, estou certo).</p>
<p><strong>AkitaOnRails:</strong> E ainda sobre Java, ando muito empolgado atualmente sobre JRuby. Eu entrevistei <a href="/2007/06/21/conversando-com-ola-bini-jruby-core-team-member/">Ola Bini</a> e meio que estou perseguindo Charles Nutter. Você conheceu esse pessoal? Se interessou sobre isso?</p>
<p><strong>Jamis Buck:</strong> Sei quem são, e eu encontrei Charles em algumas conferências, mas nunca tive a chance de conversar com ele mais a fundo. JRuby definitivamente soa empolgante. Estou muito curioso, de fato, de saber se ele pode suportar Net::SSH ou não já que isso significa que você poderia rodar Capistrano sobre ele. Mas não tive a chance de realmente tentar isso.</p>
<p><strong>AkitaOnRails:</strong> Insistindo no assunto de Java, eu postei algum tempo atrás sobre algumas discussões sobre Design Patterns apontarem <a href="/2007/07/30/gof-design-patterns-sobreviveu-ao-teste-do-tempo/">defeitos nas linguagens</a>, e eu acabei de ler <a href="http://weblog.jamisbuck.org/2007/7/29/net-ssh-revisited"target="_blank" rel="noopener">um post</a> que você escreveu sobre Dependency Injection e sua biblioteca Net::SSH. O que acha de Design Patterns agora que é um programador Ruby em tempo integral?</p>
<p><strong>Jamis Buck:</strong> Design Patterns são maravilhosos. Eles nos dão uma linguagem para falar mais concisamente sobre programação. É muito mais fácil dizer “use um método factory” do que dizer muitas palavras e confundir uns aos outros. Sobre design patterns específicos, alguns são mais úteis que outros em diferentes ambientes. Como escrevi no meu post, Dependency Injection é uma das coisas que você não precisa em Ruby, mas em ambientes como Java, pode ser um salva-vidas.</p>
<p><img src="http://s3.amazonaws.com/akitaonrails/assets/2007/8/3/276456883_dd0ae43334.jpg" alt=""  loading="lazy" /></p>
<p><strong>AkitaOnRails:</strong> Sobre a 37signals novamente, vocês estão bem comprometidos com produtos Apple. Eu vi aquele vídeo na <a href="http://www.apple.com/education/whymac/compsci/video.html"target="_blank" rel="noopener">Apple Education</a> com Jason e David. Agora vemos que o <a href="http://weblog.rubyonrails.org/2006/8/7/ruby-on-rails-will-ship-with-os-x-10-5-leopard"target="_blank" rel="noopener">Leopard</a> não trará somente Ruby mas também Rails, Mongrel e até mesmo Capistrano. Como é a relação de vocês com a Apple?</p>
<p><strong>Jamis Buck:</strong> Não diria que existe qualquer “relacionamento” com a Apple. Somos grandes fãs de seus designs e interfaces e acho que isso reflete em nosso próprio trabalho. A própria Apple está incluindo Rails, Mongrel e Capistrano por causa do despertar de sucesso dessas ferramentas. Mac OS X realmente é um ambiente poderoso para programadores e adicionar essas ferramentas no pacote os fazem maiores ainda. Faz sentido incluir as populares ferramentas Ruby também, já que Ruby se tornará um <a href="http://rubycocoa.sourceforge.net/HomePage"target="_blank" rel="noopener">cidadão de primeira classe</a> no desenvolvimento de aplicações OS X, graças à adoção pela Apple dos bindings de Cocoa para Ruby.</p>
<p><strong>AkitaOnRails:</strong> Você obviamente usa um Mac para seu trabalho. Quais são as ferramentas que usa mais além do Textmate?</p>
<p><strong>Jamis Buck:</strong> Bem, Capistrano :) Firefox com Firebug, Parallels (para testes com IE), iTerm (embora eu esteja aguardando o novo Terminal.app no Leopard), <a href="http://www.campfirenow.com"target="_blank" rel="noopener">Campfire</a> é indispensável, AdiumX, NetNewsWire, Knox (para acesso simples a filesystem encriptado). Eu ainda decaio e uso vim de vez em quando, para edições rápidas. Provavelmente tem mais :) Mas não consigo lembrar deles de cabeça.</p>
<p><strong>AkitaOnRails:</strong> Existe muita conversa sobre <a href="http://en.wikipedia.org/wiki/Getting_Things_Done"target="_blank" rel="noopener">GTD</a> hoje em dia. Acho que vi seu perfil no 43folders. Você está por dentro desse tipo de filosofia de organização também? Como você mantém sua rotina organizada? Muitas pessoas (eu incluso) sofrem para diferenciar trabalho de hobby e para nos manter dentro das datas dos projetos e tal.</p>
<p><img src="http://s3.amazonaws.com/akitaonrails/assets/2007/8/3/502950270_7175d894c8.jpg" alt=""  loading="lazy" /></p>
<p><strong>Jamis Buck:</strong> Eu não sou um fanático por GTD. Eu acho que tento ser bem pragmático sobre isso. Embora seja terrível com procrastinação. Na maior parte, das 8 às 5 eu tento me focar nas tarefas que foram assinaladas para mim e fora disso, trabalho com meus hobbies … que acabam cruzando com trabalho de vez em quanto :) Realmente sou a pessoa errada para perguntar sobre ser organizado! Se não fosse pela minha esposa, acho que faria muito pouca coisa, na realidade.</p>
<p><strong>AkitaOnRails:</strong> No que está mais interessado atualmente além de Rails, Capistrano? Não necessariamente sobre tecnologia. Algum hobby?</p>
<p><strong>Jamis Buck:</strong> Recentemente tenho me interessado sobre história militar, o que me levou a ler sobre a Guerra Civil Americana entre outras coisas. Minha esposa e eu realmente estamos gostando do Harry Potter 7 neste instante também :) E estou muito ligado a meu Nintendo Wii ultimamente! Eu costumava gostar de RPG, mas não tenho jogado por alguns anos. Ainda tenho uma tonelada de livros para <a href="http://en.wikipedia.org/wiki/Dungeons_&amp;_Dragons"target="_blank" rel="noopener">D&amp;D</a>, embora, talvez algum dia me livre deles :) Gosto de gastar tempo com meus filhos (Nathaniel tem 5 anos e Katie tem 3). Vamos sair para acampar por alguns dias em uma semana ou duas, na realidade. Sempre alguma coisa para me manter ocupado!</p>
<p><strong>AkitaOnRails:</strong> Haha, entendo. E você viaja bastante? Fora dos Estados Unidos, quero dizer.</p>
<p><strong>Jamis Buck:</strong> Não realmente. Ano passado eu fui para Londres pela primeira vez, para a RailsConf lá, e este ano eu fui para a República Tcheca. Mas fora disso, sou muito caseiro. Eu até gostaria de viajar mais, mas não gosto de viajar sozinho, e ter crianças põe um freio no aspecto espontâneo de “levantar e ir” viajar. Fazemos viagens ocasionais de carro, o que é legal.</p>
<p><strong>AkitaOnRails:</strong> Você ouve sobre o que acontecer nas comunidades Ruby/Rails pelo mundo? O que sente sobre o crescimento meteórico de Rails nos Estados Unidos? A 37signals, claro, foi o combustível para tudo isso e a razão que nós – ambos Rubistas agora – estamos conversando hoje.</p>
<p><strong>Jamis Buck:</strong> Eu ouço algumas notícias, mas eu limei bastante meus feeds. Acho que assino somente de 30 a 40 feeds agora. Foi realmente empolgante ir para a República Tcheca e ver a excitação lá sobre Rails. Me lembrou muito de como as coisas eram nos Estados Unidos alguns anos atrás.</p>
<p>O crescimento de Rails tem sido incrível. Existem dores decorrentes do crescimento, claro. Com uma adoção maior se começa a acumular pessoas que não estão apaixonadas pela ferramenta, e somente querem aprender por causa do currículo, ou porque um cliente pediu por isso, e eu acho que isso dilui bastante as águas. Mas sempre haverá um núcleo de usuários apaixonados e é isso que torna a comunidade tão maravilhosa. Tem sido uma experiência realmente fantástica ser parte desse núcleo, quase desde o começo de Rails.</p>
<p><strong>AkitaOnRails:</strong> Você tem a rara oportunidade de ver tudo isso de uma perspectiva de um VIP, perto de Jason e David. E claro, você mesmo, sendo um dos propulsores da comunidade. Muitas pessoas pensam no David como um <a href="http://www.flickr.com/photos/eugevon/130610241/"target="_blank" rel="noopener">arrogante</a> :-) Eu posso entender perfeitamente seu ponto de vista de opiniões. O que acha disso, da perspectiva de alguém que realmente conhece o homem?</p>
<p><img src="http://s3.amazonaws.com/akitaonrails/assets/2007/8/3/245186199_71f55cc3c72.png" alt=""  loading="lazy" /></p>
<p><strong>Jamis Buck:</strong> David é uma das pessoas mais confiantes que já conheci. Minha maior frustração com ele é que ele está CERTO quase sempre. Ele é um pensador muito claro e pula direto ao núcleo das questões, o que pode ser bem desconcertante se não estiver acostumado. Todos esses atributos combinam, eu acho, para fazer as pessoas que não o conhecem considerá-lo “arrogante”. Mas ele não é arrogante. Ele não coloca as pessoas para baixo para se parecer acima. Ele é apenas extremamente talentoso, muito esperto e não divaga. Estou muito honrado de poder conhecê-lo. Aprendi muito com ambos, ele e Jason.</p>
<p><strong>AkitaOnRails:</strong> Não sei se entendi corretamente mas Jason Fried foi quem começou a 37signals? Poe nos dar uma pequena pincelada sobre as origens da empresa? Eu sei que David não dos Estados Unidos, como eles se conheceram?</p>
<p><strong>Jamis Buck:</strong> Jason co-fundou a 37signals, no final dos anos 90. Originalmente era uma consultoria de design. Em 2003, Jason começou a trabalhar em um projeto em PHP, e perguntava online sempre que travava. David respondia suas perguntas diversas vezes e Jason finalmente perguntou se David não escreveria o projeto. David veio como meio-período por um tempo então, já que estava terminando seus estudos. Mas eventualmente, Jason quis escrever Basecamp, e David fez todo o trabalho, meio-período, em Ruby. Suas experiências com aquilo, claro, levaram a Rails. E eventualmente David se tornou um parceiro na empresa. Isso foi em 2004, se me lembro corretamente.</p>
<p><strong>AkitaOnRails:</strong> Legal. E voltando a falar de você. Agora que Capistrano 2.0 foi finalmente lançado, você está envolvido em alguma nova ferramenta open source?</p>
<p><strong>Jamis Buck:</strong> Com Cap2 lançado, estou realmente focado em reescrever Net::SSH e Net::SFTP. Algumas frustrações com suas limitações escrevendo cap2 tornaram isso necessário :) A única coisa “nova” que saiu disso é Net::SCP, que é uma implementação de um cliente SCP em Ruby e que vou lançar quando lançar a versão 2 do Net::SSH e Net::SFTP.</p>
<p><strong>AkitaOnRails:</strong> Oh, e falando nisso, eu lembro que o antigo Cap 1.4.1 não tocava muito bem em Windows. Isso é correto? Algum avanço nessa área ou você acha que suportar Windows é muita coisa?</p>
<p><img src="http://s3.amazonaws.com/akitaonrails/assets/2007/8/3/506252072_642ad7ea39.jpg" alt=""  loading="lazy" /></p>
<p><strong>Jamis Buck:</strong> Bem, até onde eu sei, cap 1.4.1 funcionava bem em Windows. A limitação é que você não poderia fazer deploy PARA máquinas Windows. Deployment A PARTIR de Windows funciona bem. E sobre fazer cap deploy funcionar PARA Windows, não tenho planos. A dificuldade é que Windows não é um ambiente POSIX, que é uma das premissas do Capistrano, a respeito das máquinas destino.</p>
<p><strong>AkitaOnRails:</strong> Ah sim, eu nunca tentei isso, daí minha confusão. Você está certo. Bem, eu acho que já tirei muito de você. Alguma coisa que gostaria de dizer à comunidade Brasileira? :-)</p>
<p><strong>Jamis Buck:</strong> <em>“Mantenham-se apaixonados”</em> :) Mantenha a paixão por Rails queimando, é o que faz valer a pena pertencer à comunidade.</p>
<p><strong>AkitaOnRails:</strong> Não poderia ser melhor. Algum plano de vir para cá?</p>
<p><strong>Jamis Buck:</strong> Ha, nenhum no futuro imediato :) Tenho um bebê chegando em Setembro, o que coloca um freio em planos de viagem :) Mesmo assim, eu adoraria visitar o Brasil algum dia.</p>
<p><strong>AkitaOnRails:</strong> Não sabia disso. Parabéns!</p>
<p><strong>Jamis Buck:</strong> Obrigado.</p>
<p><strong>AkitaOnRails:</strong> Bem, muito obrigado por seu tempo. Foi uma conversa muito instrutiva. Sei que as pessoas vão gostar disso</p>
<p><strong>Jamis Buck:</strong> Muito obrigado, Fabio. Estou muito grato por esta oportunidade!</p>
]]></content:encoded><category>entrevistas</category><category>devops</category><category>ruby</category></item><item><title>Conversando com Carl Youngblood</title><link>https://akitaonrails.github.io/2007/07/20/conversando-com-carl-youngblood/</link><guid isPermaLink="true">https://akitaonrails.github.io/2007/07/20/conversando-com-carl-youngblood/</guid><pubDate>Fri, 20 Jul 2007 11:53:00 -0300</pubDate><description>&lt;p&gt;&lt;img src="https://akitaonrails.s3.amazonaws.com/files/carl.934570.jpeg" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;p&gt;Essa será uma entrevista interessante. Meu convidado desta vez é ninguém menos que meu chefe. Ele não somente é funcionário da Surgeworks mas também um contribuinte ativo na comunidade Ruby e participa principalmente do Grupo de Usuários de Utah (URUG). Muitos dos seus valores e idéias são parecidas com as minhas.&lt;/p&gt;
&lt;p&gt;Carl Youngblood trabalhou profissionalmente como engenheiro de software por mais de 10 anos e atualmente é Rails Practice Manager na &lt;a href="http://surgeworks.com"target="_blank" rel="noopener"&gt;Surgeworks&lt;/a&gt;, uma consultoria de engenharia de software (onde, por acaso, eu também estou :-). Além disso Carl também é dono da &lt;a href="http://confreaks.com"target="_blank" rel="noopener"&gt;Confreaks&lt;/a&gt;, uma empresa que grava conferência, seminários e grupos de trabalho, e também é diretor da &lt;a href="http://transfigurism.org"target="_blank" rel="noopener"&gt;Mormon Transhumanist Association&lt;/a&gt;. Ele se formou bacharel em Língua Portuguesa pela &lt;a href="http://www.byu.edu"target="_blank" rel="noopener"&gt;Universidade Brigham Young&lt;/a&gt; e também em Ciências da Computação pela &lt;a href="http://www.washington.edu"target="_blank" rel="noopener"&gt;Universidade de Washington&lt;/a&gt;.&lt;/p&gt;</description><content:encoded><![CDATA[<p><img src="https://akitaonrails.s3.amazonaws.com/files/carl.934570.jpeg" alt=""  loading="lazy" /></p>
<p>Essa será uma entrevista interessante. Meu convidado desta vez é ninguém menos que meu chefe. Ele não somente é funcionário da Surgeworks mas também um contribuinte ativo na comunidade Ruby e participa principalmente do Grupo de Usuários de Utah (URUG). Muitos dos seus valores e idéias são parecidas com as minhas.</p>
<p>Carl Youngblood trabalhou profissionalmente como engenheiro de software por mais de 10 anos e atualmente é Rails Practice Manager na <a href="http://surgeworks.com"target="_blank" rel="noopener">Surgeworks</a>, uma consultoria de engenharia de software (onde, por acaso, eu também estou :-). Além disso Carl também é dono da <a href="http://confreaks.com"target="_blank" rel="noopener">Confreaks</a>, uma empresa que grava conferência, seminários e grupos de trabalho, e também é diretor da <a href="http://transfigurism.org"target="_blank" rel="noopener">Mormon Transhumanist Association</a>. Ele se formou bacharel em Língua Portuguesa pela <a href="http://www.byu.edu"target="_blank" rel="noopener">Universidade Brigham Young</a> e também em Ciências da Computação pela <a href="http://www.washington.edu"target="_blank" rel="noopener">Universidade de Washington</a>.</p>
<p><strong>Original English Version:</strong> <a href="/2007/07/20/chatting-with-carl-youngblood/">Chatting with Carl Youngblood</a></p>
<p><strong>AkitaOnRails:</strong> Então, vamos começar. É bem estranho entrevistar alguém que já se conhece. Mas vamos tentar. Antes de falarmos sobre Ruby, a primeira coisa que muitos dos meus leitores ficam intrigados é sobre suas excelentes habilidades com o Português. Pode nos dizer o que levou a isso?</p>
<p><strong>Carl Youngblood:</strong> Sim. Minha primeira introdução ao Português foi como um missionário Mórmon no Brasil. Eu cheguei em São Paulo tendo recebido um curso rápido de dois meses de Português. Quando cheguei aqui, me pareceu que eu teria que aprender tudo de novo – essa não era a linguagem que nos ensinaram! Mas depois de passar dois anos no Brasil em um contexto em que era imperativo conversar com as pessoas, eu aprendi Português bem. Entretanto, eu diria que minhas habilidades eram primariamente de conversação. Mais tarde eu descobri a literatura portuguesa e desenvolvi melhor minhas habilidades de escrita.</p>
<p>Ao retornar aos Estados Unidos, eu decidi fazer duas faculdades, de Português e Ciências da Computação. Decidi aprender Português porque gostei muito da língua, e senti que tinha talento para isso. Escolhi Computação porque me apaixonei por computadores desde que tinha 12 anos e ganhei meu primeiro Commodore 64. Ou talvez tenha sido 10 anos. Não lembro exatamente.</p>
<p><strong>AkitaOnRails:</strong> Onde ficou durante esses dois anos no Brasil? Quais eram suas responsabilidades aqui?</p>
<p><strong>Carl Youngblood:</strong> Eu fiquei em <a href="http://en.wikipedia.org/wiki/Monte_Mor"target="_blank" rel="noopener">Monte Mor</a> (uma pequena cidade perto de <a href="http://en.wikipedia.org/wiki/Campinas"target="_blank" rel="noopener">Campinas</a>), <a href="http://en.wikipedia.org/wiki/Campinas"target="_blank" rel="noopener">Campinas</a>, <a href="http://en.wikipedia.org/wiki/Marilia"target="_blank" rel="noopener">Marilia</a>, <a href="http://en.wikipedia.org/wiki/Umuarama"target="_blank" rel="noopener">Umuarama</a>, <a href="http://en.wikipedia.org/wiki/Maring%C3%A1"target="_blank" rel="noopener">Maringá</a> e <a href="http://en.wikipedia.org/wiki/Campo_Grande"target="_blank" rel="noopener">Campo Grande</a>.</p>
<p><strong>AkitaOnRails:</strong> Mas você fazia alguma coisa relacionada com computadores aqui durante esse período? As pessoas aqui ficariam interessadas em saber o que achou do nosso país, sendo um estrangeiro que passou um bom tempo entre nós. Quais suas impressões pessoais sobre o país, as pessoas, a cultura, nossos hábitos locais? Talvez algumas palavras sobre algumas coisas boas e ruins :-)</p>
<p><strong>Carl Youngblood:</strong> Meus primeiros quatro meses foram gastos na maior parte encontrando com pessoas nas ruas e em suas casas e tentando ensiná-los sobre nossas <a href="http://mormon.org/mormonorg/eng"target="_blank" rel="noopener">doutrinas</a>. Apenas para deixar claro, Mórmon é um apelido dado à minha igreja porque eles acreditam em um livro de escrituras chamado <a href="http://scriptures.lds.org/en/bm/contents"target="_blank" rel="noopener">O Livro do Mórmon</a>, junto com a Bíblia. Mas o nome completo da igreja é A Igreja de Jesus Cristo dos Santos dos Últimos Dias. De qualquer forma, gastei os primeiros quatro meses ensinando as pessoas e ajudando a conduzir reuniões da igreja e andando <em>um bocado</em> – andávamos mais de 20 km por dia, e eu frequentemente me lembro de andar no meio da noite com dores nas pernas :-) Depois dos primeiros quatro meses, fui chamado para trabalhar no escritório da missão em Campinas como Historiador da Missão – um tipo de secretário. Aí minhas habilidades de computação foram usadas.</p>
<p>Depois de gastar quatro meses em Campinas como historiador da missão, fui chamado para ajudar a abrir uma nova missão em Marília, e gastei outros quatro meses trabalhando no escritório dessa missão no computador.</p>
<p>Eu realmente não desenvolvi nenhum grande software para a missão, embora eu tenha ajudado a desenhar um banco de dados Access que imediatamente caiu em desuso depois que eu fui embora :-)</p>
<p><img src="https://akitaonrails.s3.amazonaws.com/files/campinas_lds_mormon_temple.jpg" alt=""  loading="lazy" /></p>
<p>De maneira geral eu realmente gostei muito do meu tempo no Brasil. Eu descobri o quanto gosto de aprender outra língua, e essa fascinação recém-descoberta me levou a estudar essa língua mais tarde na universidade. As pessoas brasileiras que conheci foram na maior parte muito amigáveis. Não era incomum ser convidado às casas das pessoas para comer mesmo antes de nos conhecermos, e eles normalmente estavam dispostos a dar mais do que podiam oferecer. Eu também gosto muito de música Brasileira, especialmente <a href="http://en.wikipedia.org/wiki/M%C3%BAsica_Popular_Brasileira"target="_blank" rel="noopener">Música Popular Brasileira</a> (MPB). <a href="http://en.wikipedia.org/wiki/Tom_Jobim"target="_blank" rel="noopener">Tom Jobim</a> é meu herói, junto com outras lendas como <a href="http://en.wikipedia.org/wiki/Joao_Gilberto"target="_blank" rel="noopener">João Gilberto</a>, <a href="http://en.wikipedia.org/wiki/Luiz_Bonfa"target="_blank" rel="noopener">Luiz Bonfá</a>, <a href="http://en.wikipedia.org/wiki/Luiz_Bonfa"target="_blank" rel="noopener">Vinícius de Moraes</a>, e outros artistas mais modernos como <a href="http://en.wikipedia.org/wiki/Caetano_Veloso"target="_blank" rel="noopener">Caetano Veloso</a>, <a href="http://en.wikipedia.org/wiki/Gilberto_Gil"target="_blank" rel="noopener">Gilberto Gil</a> e <a href="http://en.wikipedia.org/wiki/Djavan"target="_blank" rel="noopener">Djavan</a>. Foi maravilhoso descobrir um mundo completamente novo de música e literatura que se abriu para mim quando aprendi Português. A comida foi muito boa também, embora eu tenha sentido falta de alguns itens de casa, como milho frito e manteiga de amendoim, por mais estranho que pareça.</p>
<p>Por outro lado, eu frequentemente notava uma profunda falta de ambição. A maioria dos Brasileiros que conhecemos se contentavam em ter um teto sobre suas cabeças, comida na geladeira e uma TV. Claro, minhas observações devem ser meio limitadas pelo fato de ter interagido mais com a classe mais pobre da população que não moravam em grandes condomínios, que eram difíceis para nós visitarmos sem ter agendado com antecedência. Um dos problemas mais difíceis do Brasil é a grande disparidade entre rico e pobre e a conseqüente pequena classe média. Quando o Brasil aboliu a escravidão (um dos últimos países a fazer isso), pouco ou nenhum esforço foi feito para assistir os escravos emancipados na transição para empregos no novo sistema econômico, que levou ao desenvolvimento de muitas cidades autônomas <em>cruas</em> que eram praticamente completamente isoladas dos mais “respeitáveis” centros de comércio. Essa isolação continua hoje. Não é incomum ver um subúrbio bem abastado bem ao lado de uma favela decadente, como se uma estivesse ignorando a existência da outra. Apesar disso, no geral o Brasil está avançando e o padrão de vida melhorando dramaticamente.</p>
<p>Um evento que eu me lembro bem foi o advento da internet pública e a <a href="http://en.wikipedia.org/wiki/WWW"target="_blank" rel="noopener">WWW</a> em 1995 enquanto eu estava em Maringá, acredito. Antes eu comentava sempre com meu irmão, na época das BBS baseadas em texto que seria legal criar uma linguagem de markup que permitisse computadores renderizar gráficos através de uma conexão discada de modem. Quando eu vi a WWW em 1995, disse, “Alguém roubou minha idéia!” :-)</p>
<p><strong>AkitaOnRails:</strong> Haha, então você estava envolvido em atividades online desde antes do advento da Web propriamente dita? E, você entrou na faculdade depois desses dois anos aqui?</p>
<p><strong>Carl Youngblood:</strong> Eu estava envolvido em <a href="http://en.wikipedia.org/wiki/BBS"target="_blank" rel="noopener">BBSes</a> baseadas em modem em nossa cidade de Provo, Utah, desde 1990 mais ou menos. Meu irmão tinha uma BBS chamada ‘London after Midnight’. Ele estava meio que nesse cenário de gótico/cyberpunk (ou pelo menos queria estar :-). Na maior parte do tempo usávamos para piratear joguinhos, antes de eu crescer e entender que outras pessoas estavam tentando se sustentar com essas coisas.</p>
<p>Eu já tinha feito um ano de faculdade de música (performance de Clarinete) antes de ir para a missão. Depois da missão eu retornei à faculdade e mudei de cursos.</p>
<p><img src="https://akitaonrails.s3.amazonaws.com/files/carl.fidonet.jpg" alt=""  loading="lazy" /></p>
<p>Falando nisso, também estávamos conectados a uma rede mundial chamada <a href="http://en.wikipedia.org/wiki/Fidonet"target="_blank" rel="noopener">Fidonet</a>, onde participávamos de grupos de notícias e tínhamos discussões offline. Toda noite nosso computador discava para um sistema em Nevada para baixar as novas mensagens.</p>
<p><strong>AkitaOnRails:</strong> Oh, isso é legal. Voltando ao assunto, eu também estava em BBSes por causa do meu vizinho. Ele tinha uma BBS hacker chamada Medusa e nós brincávamos muito de quebrar senhas, usávamos Blue Box e assim por diante. (Caramba, estamos confessando muitos crimes aqui, espero que ninguém nos processe ;-) ) De qualquer forma, então você também foi pego na época da Bolha da Internet? Fazendo sites PHP e coisas do tipo?</p>
<p><strong>Carl Youngblood:</strong> Haha, bem lembrado. Essa época de BBS foi divertida. Nos sentíamos como se estivéssemos na vanguarda. Omniture (chamado de MyComputer.com na época) estava no meio de uma aquisição pela <a href="http://www.netobjects.com"target="_blank" rel="noopener">NetObjects</a>. Entretanto, antes da aquisição ter sido fechada o preço das ações da NetObjects caíram ao ponto deles serem depreciados para a metade do custo da aquisição, o que basicamente significava que isso não ia acontecer. A MyComputer.com demitiu muitas pessoas, mas eu saí alguns meses antes disso acontecer. Meu chefe, falando depois do acontecido, me disse que eu teria conseguido me manter no trabalho (fui um dos primeiros empregados), mas vi sinais de problemas e tive outra oportunidade, então peguei o emprego na Legato Systems desenvolvendo drivers de espelhamento no Windows.</p>
<p><strong>AkitaOnRails:</strong> Mesma coisa para mim aqui no Brasil. Eu estava envolvido com empresas ponto-com que faliram mas eu pude sair com alguns meses de antecedência. De qualquer forma, então você foi direto para programação baixo nível. Quantas habilidades de programação você tem? De assembler de baixo-nível até Ruby, sem mencionar Pascal, VB, PHP, etc?</p>
<p><strong>Carl Youngblood:</strong> A Legato acabou fechando seus escritórios em Orem, Utah, e nesse ponto eu voltei para a escola para me graduar. Eu comecei pensando em fazer mestrado em Português e eventualmente trabalhar como um professor de uma universidade depois de pegar meu PhD. Entretanto, eu me via constantemente trabalhando com projetos de software, mesmo quando eu lecionava aulas de português e fazia meus estudos de graduação. Eventualmente decidi que deveria encarar o óbvio e continuar minha paixão por desenvolvimento de software. Então eu mudei para o departamento de Ciências da Computação e comecei a trabalhar na direção de um mestrado em Computação. Tudo isso foi na Universidade Brigham Young em Provo, Utah.</p>
<p><img src="https://akitaonrails.s3.amazonaws.com/files/carl.provo.jpg" alt=""  loading="lazy" /></p>
<p>Primeiro eu aprendi <a href="http://en.wikipedia.org/wiki/Pascal_%28programming_language%29"target="_blank" rel="noopener">Pascal</a> e C++ no colégio. Minha primeira experiência profissional foi como programador C++ desenvolvendo aplicações Windows usando <a href="http://en.wikipedia.org/wiki/Microsoft_Foundation_Class_Library"target="_blank" rel="noopener">MFC</a>. Então consegui um emprego fazendo desenvolvimento PHP/MySQL para a <a href="http://www.omniture.com"target="_blank" rel="noopener">Omniture</a>. Depois disso eu estava fazendo drivers Windows em C mas também fazendo Ruby, Perl e PHP em paralelo. Drivers são bichos totalmente diferentes porque você não tem nem mesmo as bibliotecas comuns ANSI C disponíveis para você. Então a sintaxe C é a mesma, mas é só isso. Mais tarde consegui um trabalho na Boeing fazendo mais desenvolvimento C++ em plataforma Linux, e ao mesmo tempo aumentando minhas habilidades em Ruby/Rails com projetos paralelos. Eu também aprendi programação funcional com<br>
<a href="http://en.wikipedia.org/wiki/Scheme_%28programming_language%29"target="_blank" rel="noopener">Scheme</a>, assim como com algumas outras linguagens como <a href="http://en.wikipedia.org/wiki/OCaml"target="_blank" rel="noopener">OCaml</a>, <a href="http://en.wikipedia.org/wiki/Prolog"target="_blank" rel="noopener">Prolog</a> e <a href="http://www.cs.washington.edu/research/zpl/home/index.html"target="_blank" rel="noopener">ZPL</a> durante meu mestrado. Eu não me chamaria mais que um amador na maioria dessas linguagens, mas eles definitivamente abriram minha mente para novos paradigmas de desenvolvimento.</p>
<p><strong>AkitaOnRails:</strong> Você tem seguido muito dos caminhos descritos pelos Pragmatic Programmers como David Thomas e Chad Fowler: aprender novas linguagens, especialmente as que tem paradigmas diferentes. Você já conhecia o trabalho deles sobre essas recomendações? Ou foi somente uma curiosidade natural que o levou a aprender tantas linguagens?</p>
<p><img src="https://akitaonrails.s3.amazonaws.com/files/thepragmaticprogrammer_thomas.jpg" alt=""  loading="lazy" /></p>
<p><strong>Carl Youngblood:</strong> Bem, os programas de Ciências da Computação que estudei em (BYU e Universidade de Washington) fizeram um bom trabalho em nos dar pelo menos alguma exposição para uma gama grande de conceitos e linguagens. Eu certamente estou agradecido pela minha educação porque me apresentou a novas idéias e conceitos que eu provavelmente não teria estudado se não fosse por isso. Eu também tinha lido Pragmatic Programmer e tentei seguir os conselhos de sempre aprender novas coisas e me expor a novas linguagens. Eu também sou meio que um viciado em informação. Eu sou praticamente viciado no meu leitor de feeds RSS, e me sinto incrivelmente ansioso se começo a ficar para trás na minha leitura – quase como se eu estive sendo deixado para trás enquanto o mundo se reinventa. A verdade é que normalmente não perco qualquer coisa extremamente revolucionária por estar fora do computador por alguns dias, mas algumas vezes me sinto assim.</p>
<p>Ou ainda, eu me preocupo que isso poderia acontecer :-) Pode ser um problema. É difícil chegar a um equilíbrio, especialmente com esposa e filhos para dar atenção também.</p>
<p><strong>AkitaOnRails:</strong> Você está certo. Isso é outra coisa que eu sempre grito nos posts do meu blog: ser bem informado, sempre. Não há desculpas com ferramentas como agregadores de RSS atualmente. E se um americano pôde ir tão longe para aprender Português e ainda assim ser um especialista em tecnologia como você, há ainda menos desculpas para brasileiros não melhorarem seus Inglês e ler mais.</p>
<p><strong>Carl Youngblood:</strong> Tenho certeza que você conhece <a href="http://www.ornery.org/essays/warwatch/2005-02-20-1.html"target="_blank" rel="noopener">a teoria</a> de Maximizadores vs Satisfeitores. Eu li sobre isso no blog de alguém, tirado de um livro (que não me lembro qual). Algumas vezes eu … me preocupo tanto que possa existir uma solução mais elegante lá fora que eu não consigo me decidir quando está bom o suficiente e ir direto para o negócio de codificar.</p>
<p><strong>AkitaOnRails:</strong> hm, sim, acredito que já li alguma coisa sobre isso.</p>
<p><strong>Carl Youngblood:</strong> Esse é um problema nessa era de rápida inovação. Sempre é um alvo em movimento., e algumas vezes você tem que dizer que algo está bom o suficiente e seguir em frente.</p>
<p>Joel Spolsky <a href="http://www.joelonsoftware.com/articles/fog0000000339.html"target="_blank" rel="noopener">falou sobre isso</a> e compara às táticas militares de colocar a cobertura de fogo em camadas e atirar enquanto avança. Raramente uma nova tecnologia ou palavreado novo é tudo que promete ser, mas isso mantém a competição brigando pelo seu lugar.</p>
<p>Em geral, parece que a sociedade está avançando em direção a níveis de crescimento constante de abstração. <a href="http://rubyonrails.com"target="_blank" rel="noopener">Rails</a> é um bom exemplo disso. Toda sua mentalidade é predizer o máximo possível as coisas que os desenvolvedores vão querer fazer o tempo todo e tornar as abstrações convenientes para eles. Mas estou certo que esse é apenas o começo. Podemos esperar futuros frameworks fazer mais e mais do trabalho pesado para nós, que por sua vez nos capacitará a atingir mais e mais com menos e menos esforço.</p>
<p><strong>AkitaOnRails:</strong> Sim, é um bom ponto de vista. Porque as pessoas tendem a ‘se apaixonar’ com uma super-nova tecnologia em particular e esquecer sobre todo o resto. Isso leva a pura obsessão. E depois de um tempo, essa ‘nova tendência’ é esquecida totalmente e você apenas perdeu seu tempo.</p>
<p><strong>Carl Youngblood:</strong> Sim, precisamos nos manter atualizados em novas tecnologias mas tentar não se tornar muito dogmáticos sobre eles. A <a href="http://mtnwestrubyconf2007.confreaks.com/keynote.html"target="_blank" rel="noopener">recente apresentação</a> de Chad Fowler na <a href="http://mtnwestruby.org"target="_blank" rel="noopener">MountainWest Ruby Conference</a> falou sobre isso.</p>
<p><img src="https://akitaonrails.s3.amazonaws.com/files/carl.fullmtnwestlogo.png" alt=""  loading="lazy" /></p>
<p><strong>AkitaOnRails:</strong> Ei, perdoe o trocadilho, mas vindo de alguém com tanta formação dogmática religiosa formal como você, é uma coisa muito interessante de ouvir: <em>‘não seja tão dogmático.’</em> No fim é tudo uma questão de bom senso, mas mesmo bom senso tem que ser treinado. Daí a necessidade de se manter sempre bem informado, constantemente estudando e mantendo a mente aberta para coisas novas e não fechando os olhos para todo o resto.</p>
<p><strong>Carl Youngblood:</strong> Eu acredito que a estrutura de crença de qualquer um nunca deve ser tão rígido a ponto de não permitir modificações. Eu estou sempre disposto a re-examinar minhas crenças sob a luz de novas evidência e estou pronto a rejeitar ou modificar crenças que parecem erradas ou mal-informadas quando colocadas sob escrutínio.</p>
<p>Em defesa da minha instrução Mórmon, embora seja uma religião meio conservadora, ela valoriza boa educação, o que inevitavelmente leva à iluminação e normalmente à modificação de crenças anteriores. Felizmente meus colegas paróquios ainda me recebem bem, embora algumas das minhas crenças pareçam um pouco não-ortodoxas e são diferentes daquelas que eu tinha quando era mais jovem.</p>
<p><strong>AkitaOnRails:</strong> Nós precisamos mais desse tipo de pensamento no Brasil: pragmatismo. Enfim, voltando outra vez, você esteve ocupado por um longo tempo. Aprendendo português, terminando sua graduação, trabalhando em companhias de Internet, companhias tradicionais. E todo esse tempo Ruby estava pelos lados, aguardando. Quando você finalmente entendeu que queria fazer mais Ruby? Foi durante algum projeto no seu trabalho, ou foi algo que você decidiu por si mesmo?</p>
<p><strong>Carl Youngblood:</strong> Acho que acordei de verdade com o crescimento meteórico de Rails e da evangelização da <a href="http://37signals.com"target="_blank" rel="noopener">37signals</a> sobre a mentalidade <a href="http://gettingreal.37signals.com"target="_blank" rel="noopener">Caindo na Real</a>. Eu assisti à palestra <a href="http://www.37signals.com/svn/archives/000971.php"target="_blank" rel="noopener">Construindo Basecamp</a> em Seattle e fui à primeira RailsConf. Eu estava realmente inspirado pelo <a href="http://joeydevilla.com/2006/06/27/railsconf-2006-nathaniel-talbott-homesteading-a-thrivers-guide"target="_blank" rel="noopener">discurso de Nathaniel Talbott</a> sobre homesteading.</p>
<p>Uma coisa que me pegou sobre minha experiência na RailsConf foi que eu vi colegas lá que começaram a usar Ruby ao mesmo tempo que eu e cujos nomes apareciam nas listas de discussão de Ruby junto com o meu. A principal diferença entre nós é que eles decidiram se tornar ativamente envolvidos, a desenvolver projetos open source deles mesmos, e a construir uma reputação para eles na comunidade, enquanto eu enrolava em Ruby mais como um hobby. Avançando quatro ou cinco anos à frente e eles já estavam dirigindo suas próprias empresas e realmente fazendo uma carreira em Ruby. A RailsConf foi um grande toque para eu entender que eu precisava estar mais envolvido na comunidade.</p>
<p>Então decidi lançar alguns trabalhos anteriores meus como gem e dar uma apresentação na nossa conferência Ruby local Mountain West. Eu lancei o gem <a href="http://sbn.rubyforge.org"target="_blank" rel="noopener">SBN</a> (Simple Bayesian Networks). Preparar minha apresentação e código foi estressante mas valeu a pena.</p>
<p>Alguns colegas e eu também estamos trabalhando em um negócio de gravação de conferências chamada <a href="http://www.confreaks.com"target="_blank" rel="noopener">Confreaks</a>. Estamos esperando fazer uma trabalho melhor em gravar e disseminar conferências técnicas para motivos de posteridade. É uma vergonha que todas essas grandes conferências estão acontecendo e ninguém está gravando.</p>
<p><img src="https://akitaonrails.s3.amazonaws.com/files/carl.DSC_0006.sized.jpg" alt=""  loading="lazy" /></p>
<p>De qualquer forma, meu envolvimento crescente na comunidade tem me ajudado a acelerar minha carreira e me permitiu codificar em Ruby como um trabalho.</p>
<p><strong>AkitaOnRails:</strong> Mas onde você estava na época em que Rails começou a chamar atenção? Seu trabalho permitia ter tempo suficiente para dedicar a Ruby ou você já tinha trocado de emprego? Quero dizer, você não estava satisfeito com o estado da época da sua carreira e as tecnologias que usava? Qual foi seu ‘ponto de virada’? Apenas ver a RailsConf e as notícias sobre Rails?</p>
<p><strong>Carl Youngblood:</strong> Eu estava trabalhando para a Boeing quando Rails apareceu. Era um emprego confortável e sem muita pressão e um <a href="http://www.army.mil/fcs"target="_blank" rel="noopener">projeto do Departamento de Defesa</a> com um cronograma fixo e longo que me permitia tempo para estudar. Eu já tinha o hábito de me manter atualizado nas tecnologias atuais (Ruby em particular) e ler vários tipos de blogs regularmente. Eu teria aceito uma posição de Ruby a qualquer momento mas ainda era difícil de arranjar. Quando pedi, meu chefe me pagou para que eu pudesse ir à RailsConf, então eu já estava bem interessado. Eu já vinha trabalhando em um projeto freelance que eu tinha escrito antes em PHP, e ofereci para reconstruir em Rails com um grande desconto apenas para ganhar experiência em Rails. Então você poderia dizer que eu estava bem interessado em tudo relacionado a Ruby desde 2000 mas apenas recentemente o mercado de trabalho começou a suportar posições Ruby em tempo integral.</p>
<p><strong>AkitaOnRails:</strong> E sua primeira empreitada em direção a Ruby foi seu projeto open source SBN e a palestra na Mountain West? Poderia nos descrever como foi? Pelo menos para mim, quando eu quero ‘dizer’ alguma coisa, eu fico muito empolgado e particularmente ansioso em ter tudo escrito (no meu caso, em posts no meu blog). Eu posso imaginar que você quase não deve ter dormido antes da conferência. :-)</p>
<p><strong>Carl Youngblood:</strong> Sim, eu fiquei acordado muitas noites preparando <a href="http://mtnwestrubyconf2007.confreaks.com/session03.html"target="_blank" rel="noopener">minha palestra</a>. De fato, a maior parte das minhas noites foram gastas deixando o código pronto para consumo humano. Saber que o mundo em geral vai usar seu código o faz querer refinar mais que o normal, escrever mais testes unitários, etc. Então eu gastei um mês ou dois antes da conferência trabalhando no código e só tive uma semana para preparar os slides. O material da minha apresentação era bem técnica, então eu acabei escrevendo minha palestra como anotações nos slides, só para garantir que eu não explicaria alguma coisa errada por causa da pressão do momento. Se eu tivesse mais tempo eu gostaria de ter memorizado os pontos chave para que a apresentação ter sido mais natural, mas no geral fiquei contente de como as coisas funcionaram. Eu também estava trabalhando no projeto da Confreaks de gravar a conferência, então eu estive ocupado em duas frentes, sem mencionar meu emprego.</p>
<p><img src="https://akitaonrails.s3.amazonaws.com/files/carl.DSC_0017.sized.jpg" alt=""  loading="lazy" /></p>
<p><strong>AkitaOnRails:</strong> E nessa época você ainda estava na Boeing? Ou você já estava na Surgeworks? Como começou a trabalhar na Surgeworks em tempo integral?</p>
<p><strong>Carl Youngblood:</strong> Na época em que eu estava terminando o mestrado em Ciência da Computação na <a href="http://www.washington.edu"target="_blank" rel="noopener">Universidade de Washington</a> enquanto estava trabalhando na Boeing, eu recebi a oferta de um amigo para retornar à Utah e trabalhar para ele como CTO de uma construtora chamada <a href="http://ccsloans.com"target="_blank" rel="noopener">Construction Capital Source</a>. Uma das minhas responsabilidades seria desenvolver o sistema deles em uma tecnologia de minha escolha, que por acaso foi Rails. Eu mordi a isca e passei por um grande momento pelo ano e meio seguinte. Mas a empresa passou por dificuldades com o crash recente no mercado de construção. Embora seus clientes tivessem excelentes taxas de crédito, o mercado passou um pano por toda a indústria, e nossos investidores ficaram assustados. Eu terminei deixando minha posição e aceitando um trabalho na <a href="http://surgeworks.com"target="_blank" rel="noopener">Surgeworks</a> como “Rails Practice Manager,” o que significa que eu supervisiono todos os projetos de Rails da empresa, e com sorte gastando pelo menos metade do meu tempo codificando, embora no momento ainda não tenha funcionado bem assim. Temos ganhado muito mais trabalho desde que comecei, então muito do meu tempo tem sido gasto escrevendo propostas e estimativas de projeto até agora, mas estou estabilizando.</p>
<p><strong>AkitaOnRails:</strong> Mas como você conheceu a Surgeworks? Lembro você ter mencionado que já conhecia Dane Falkner de outro lugar?</p>
<p><strong>Carl Youngblood:</strong> Dane e eu ambos participamos das reuniões do <a href="http://groups.google.com/group/urug"target="_blank" rel="noopener">grupo local de usuários de Ruby</a> em Salt Lake City, então eu o conhecia de lá. Depois de deixar a CCS, eu postei uma mensagem na lista do URUG e fiquei feliz em ver que havia muitas posições de Ruby disponíveis. Acredito que não terei problemas em encontrar trabalho com Ruby no futuro enquanto estiver interessado em codificar em Ruby :-)</p>
<p><strong>AkitaOnRails:</strong> Isso é legal. Existem vários grupos locais aqui também. Ainda estamos no começo desses grupos aqui no Brasil. O que você pode dizer sobre o crescimento e entusiasmo da comunidade? O que você vê para Rails daqui para frente?</p>
<p><strong>Carl Youngblood:</strong> Na minha experiência, a chave para o sucesso de grupos de usuários é ter um ou dois indivíduos dedicados com paixão para organizar e promover as reuniões e alinhar o interesse nas apresentações. Se fizer isso, as pessoas vão participar. Nossos grupos locais passaram por altos e baixos dependendo do nível do entusiasmo dos organizadores. Outra coisa que parece ajudar é gerar conteúdo destinado a vários níveis de capacitação. Garantir que está recepcionando e ajudando iniciantes é importante. A comunidade ainda está crescendo, como evidenciado por muitas conferências regionais de Ruby que estão nascendo por todo os EUA.</p>
<p>Eu estava empolgado pelos planos das funcionalidades para o Rails 2.0 do DHH e sua retórica mais contida em oposição à primeira RailsConf, o qual alguns comentaram que pareciam mais um rally de Nuremburg :-) Acho que Rails vai continuar a amadurecer e tem pelo menos 2-3 anos de grande sucesso antes de sofre a eclipse de algum novo paradigma.</p>
<p><strong>AkitaOnRails:</strong> Isso é importante e talvez você possa dar algumas idéias. Muitos dos principais colaboradores de Ruby e Rails no Brasil, dos nossos fóruns locais, grupos de usuários, blogs e websites ainda não tiveram a oportunidade de trabalhar em tempo integral com Rails. Então eles tem pouco ou quase nenhum tempo para devotar a Ruby ainda. Acredito que já houve um tempo assim aí nos EUA. O que você acha que foi o ponto de virada para a comunidade florescer?</p>
<p><strong>Carl Youngblood:</strong> Acredito que acima de tudo, o incrível sucesso (especialmente o sucesso de marketing) do Rails tenha sido o maior colaborador para essa mudança. Mas isso não impediu desenvolvedores de Ruby apaixonados de trilharem seu próprio caminho antes disso. Eu acho que o que precisa mudar no Brasil é a mentalidade de <em>“é somente mais um trabalho”</em>. As pessoas precisam começar a seguir algumas das recomendações da Pragmatic Programmer a sério e encontrar tempo para atividades de capacitação extra-curriculares, incluindo reuniões de Ruby. Foi o que o pessoal nos EUA fizeram e eu acho que algo similar seja necessário no Brasil. Também acho que exista uma diferença cultural que podemos culpar parcialmente. Não quero afirmar que qualquer um dos sistemas seja superior, mas acho que Americanos (pelo menos os tipos ambiciosos que estão na comunidade Ruby) gastam mais de 40 horas por semana focando na sua arte, e por outro lado acredito que muitas pessoas no Brasil olham para desenvolvimento de software como algo apenas para pagar as contas.</p>
<p>Claro que temos muitos programadores aqui com a mesma mentalidade.</p>
<p><strong>AkitaOnRails:</strong> Falando em paixão, David sempre reafirma sobre o senso de estética da comunidade, seu senso essencial de beleza em relação à codificação. Você sentiu isso quando começou? Muitos dizem que essa é uma das razões para a comunidade Ruby e Rails ser tão focada em direção a Macs. O que acha disso?</p>
<p><img src="https://akitaonrails.s3.amazonaws.com/files/carl_iphone.jpg" alt=""  loading="lazy" /></p>
<p><strong>Carl Youngblood:</strong> Eu concordo. Matz normalmente menciona o <a href="http://oneproverb.net/bwfolder/chinesebw.html"target="_blank" rel="noopener">provérbio Chines</a> que diz algo como <em>“o começo da sabedoria é dar nomes corretos às coisas”</em>. O pessoal de Ruby tende a gastar muito tempo focando na semântica e garantindo que o código não só é útil mas elegante. Acredito que quanto você procura maximizar seu nível de abstração e, por conseqüência, seu poder de programação, esses tipos de coisas são muito importantes e podem fornecer um enorme ganho de produtividade.</p>
<p>A <a href="http://www.apple.com"target="_blank" rel="noopener">Apple</a> parece refletir uma mentalidade similar em seus designs.</p>
<p><strong>AkitaOnRails:</strong> Eu acho que seria legal mencionar que eu fiquei bastante surpreso de ver quase todo mundo na Surgeworks sendo fãs Apple. Nunca esperei por isso. Acho que a Apple está ganhando a mesa dos desenvolvedores valorizada como uma ferramenta de produtividade. Bem, eu sei que já abusei de você por muito tempo :-) Algum outro comentário para a audiência Brasileira?</p>
<p><strong>Carl Youngblood:</strong> Acho que muito da paixão da Surgeworks por Apple vem do Dane, que é um grande fã. Meu principal conselho aos meus amigos no Brasil é de reconhecer a importância que seu esforço individual pode ter. Vocês tem uma <a href="http://www.ita.doc.gov/exportamerica/NewsFromCommerce/nfc_BrazilIT.pdf"target="_blank" rel="noopener">indústria de TI</a> relativamente forte para a América do Sul uma <a href="http://www.mazine.ws/node/160"target="_blank" rel="noopener">comunidade open source</a> crescente. Eu tenho ficado muito impressionado com alguns dos techies Brasileiros de maior voz como você, Fabio, que começou a compartilhar suas opiniões na Internet. Mudança não é trazida pelas massas, mas por indivíduos corajosos e preocupados que se libertam do status quo. Quanto mais brasileiros levarem isso a seu interior, mais cedo os trabalhos de Ruby vão começar a aparecer. Eu me lembro de uma citação que dizia algo assim:</p>
<p><em>“Nunca duvide que um pequeno grupo de cidadãos cuidadosos e dedicados possa mudar o mundo. Aliás, é só assim que acontece.”</em> (<a href="http://en.wikipedia.org/wiki/Margaret_Mead"target="_blank" rel="noopener">Margaret Mead</a>)</p>
<p><strong>AkitaOnRails:</strong> Muito bom. Bem, acho que podemos encerrar por hoje. Muito obrigado! Acho que as pessoas vão gostar disso.</p>
<p><strong>Carl Youngblood:</strong> Legal! Obrigado por seu tempo, Fabio.</p>
<p><img src="https://akitaonrails.s3.amazonaws.com/files/carl.JamesAndJoseph11.sized.jpg" alt=""  loading="lazy" /></p>
]]></content:encoded><category>entrevistas</category><category>ruby</category></item></channel></rss>