<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>Andre Ferraro's RSS feed</title><link>http://softwarelivre.org/andre-ferraro</link><description>Andre Ferraro's content published at Software Livre Brasil</description><item><title>15 dias on Rails – Dia 2 – Por que Ruby on Rails?</title><description>&lt;div class="wp-caption aligncenter" style="width: 507px;"&gt;&lt;img class="size-full wp-image-542" title="Por que Ruby on Rails?" src="http://andreferraro.files.wordpress.com/2009/12/pq-ruby-on-rails.jpg?w=497&amp;amp;#038;h=173" height="173" alt="Por que Ruby on Rails?" width="497" /&gt;&lt;p class="wp-caption-text"&gt;Por que Ruby on Rails?&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;Quando eu comecei a estudar &lt;strong&gt;Ruby on Rails&lt;/strong&gt; e a partir daí comentar com colegas de trabalho e outros programadores que não conheciam o &lt;em&gt;framework&lt;/em&gt;, sempre surgia a mesma pergunta: “Por que estudar Rails se já existe PHP, .NET, Java e Python?”.&lt;span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Hm, essa pergunta é dificílima de responder (ainda mais por que Rails não é uma linguagem e sim um &lt;em&gt;framework&lt;/em&gt;), muito tem ligação com o prazer de conhecer algo novo e focado para web, apenas para web, porém com pilares que rementem a agilidade, colaboração, facilidade e abrangência.&lt;/p&gt;
&lt;p&gt;Separei nesse &lt;em&gt;post&lt;/em&gt;&lt;em&gt; &lt;/em&gt;os principais motivos para estudar e desenvolver aplicações web utilizando o &lt;em&gt;framework&lt;/em&gt; &lt;strong&gt;Ruby on Rails&lt;/strong&gt;.&lt;/p&gt;
&lt;h2&gt;Feito para Web.&lt;/h2&gt;
&lt;p&gt;A origem do &lt;em&gt;framework&lt;/em&gt; &lt;strong&gt;Ruby on Rails&lt;/strong&gt; já me remete ao seu principal foco, ou seja, &lt;strong&gt;aplicações web&lt;/strong&gt;. O &lt;strong&gt;Ruby on Rails&lt;/strong&gt; não foi concebido como um &lt;em&gt;framework&lt;/em&gt;, e sim foi gerado a partir do desenvolvimento da ferramenta Basecamp da 37Signals. Como padrão os &lt;em&gt;frameworks&lt;/em&gt;, sejam eles voltados para PHP, Java, Python ou .NET, são pensados e planejados como tal, porém a situação inversa vivenciada por Hansson fez com que o &lt;strong&gt;Rails&lt;/strong&gt; obtivesse sucesso, pois está intimamente ligada ao dia-a-dia e as principais demandas do desenvolvimento para Internet.&lt;/p&gt;
&lt;p&gt;Outro fator que considero ser importante é que por ser feito para web o &lt;strong&gt;Rails não se preocupa em ser a melhor ferramenta&lt;/strong&gt; para diversos objetivos, como é o caso do Java e .NET, sendo assim o foco é, e aparentemente continuará sendo, todo para desenvolvimento para Internet.&lt;/p&gt;
&lt;h2&gt;Ágil, Fácil e Eficiente&lt;/h2&gt;
&lt;p&gt;O Rails faz uso de convenções no lugar de configurações (&lt;strong&gt;Convention over Configuration&lt;/strong&gt;), mais abaixo vou falar delas, isso facilita muito o trabalho, pois não te obriga a fazer várias configurações antes de iniciar o projeto.&lt;/p&gt;
&lt;p&gt;Outro fator importante é a existência de ferramentas &lt;strong&gt;geradoras de código&lt;/strong&gt; (leia-se &lt;em&gt;scaffold&lt;/em&gt;) que possibilitam que sem nenhuma linha de código, apenas execução de comandos, que você consiga desenvolver uma aplicação &lt;em&gt;web&lt;/em&gt; simples, porém funcional, em alguns poucos minutos.&lt;/p&gt;
&lt;p&gt;O &lt;strong&gt;Ruby&lt;/strong&gt;, a linguagem utilizada na concepção do Rails, é &lt;strong&gt;orientado à objetos&lt;/strong&gt; como o Java, mas também é possível usá-lo para criar &lt;em&gt;scripts&lt;/em&gt; simples. O Ruby on Rails não necessita compilação, pois o &lt;strong&gt;Ruby é uma linguagem interpretada&lt;/strong&gt;, ou seja, a cada alteração, basta abrir o navegador e atualizar sua aplicação e verá o resultado.&lt;/p&gt;
&lt;p&gt;Até as &lt;strong&gt;validações de formulários&lt;/strong&gt; e entradas de dados em geral é muito simples, pois o &lt;em&gt;framework&lt;/em&gt; já foi preparado para isso. Mas não só as validações como dezenas de outras tarefas são partes integrantes do Rails, uma que eu particularmente acho muito interessante é a forma de fazer &lt;strong&gt;associações entre classes&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;David Heinemeier Hansson, criador do Ruby on Rails, mostra neste vídeo como &lt;strong&gt;criar um blog em 15 minutos&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;span style="text-align: center; display: block;"&gt;&lt;object height="350" width="425"&gt;&lt;param name="movie" value="http://www.youtube.com/v/Gzj723LkRJY&amp;amp;#038;rel=1&amp;amp;#038;fs=1&amp;amp;#038;showsearch=0&amp;amp;#038;showinfo=1&amp;amp;#038;iv_load_policy=1" /&gt; &lt;param name="allowfullscreen" value="true" /&gt; &lt;param name="wmode" value="opaque" /&gt; &lt;embed src="http://www.youtube.com/v/Gzj723LkRJY&amp;amp;#038;rel=1&amp;amp;#038;fs=1&amp;amp;#038;showsearch=0&amp;amp;#038;showinfo=1&amp;amp;#038;iv_load_policy=1" type="application/x-shockwave-flash" height="350" width="425"&gt;&lt;/embed&gt; &lt;/object&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h2&gt;Open Source e Comunidade Ativa!&lt;/h2&gt;
&lt;p&gt;Não só &lt;em&gt;&lt;strong&gt;open source&lt;/strong&gt;&lt;/em&gt; (código aberto), mas também independente de plataforma (como o Ruby), ou seja, roda no Linux, Mac OS e Windows. Isso significa que qualquer um é livre para modificar seu código e também não envolve custo de aquisição. Sendo &lt;strong&gt;multi-plataforma&lt;/strong&gt;, o Ruby on Rails possibilita a você (ou sua empresa) o “prazer” de não ficar “amarrado”  a um sistema operacional específico.&lt;/p&gt;
&lt;p&gt;Atualmente o &lt;strong&gt;Ruby&lt;/strong&gt; ocupa a 10a. colocação no &lt;em&gt;&lt;a href="http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html" title="TIOBE Programming Community Index for December 2009" target="_blank"&gt;TIOBE Programming Community Index&lt;/a&gt;&lt;/em&gt; e vem subindo a cada ano. Esse crescimento é resultado da quantidade de informação sobre a linguagem nas mais diversas fontes como Google, Yahoo, Bing, Wikipedia e Youtube.&lt;/p&gt;
&lt;p&gt;A comunidade é bem ativa, vide o caso do &lt;strong&gt;&lt;a href="http://github.com/" title="GitHub" target="_blank"&gt;GitHub&lt;/a&gt;&lt;/strong&gt; onde contém centenas de projetos e plugins que podem ser utilizados no Rails. O GitHub também funciona como uma rede social, pois é possível seguir os usuários que mais lhe interessar, além de assinar &lt;em&gt;feeds&lt;/em&gt; e participar do &lt;em&gt;wiki&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Uma busca no Google com certeza lhe revelará mais alternativas. Farei um &lt;em&gt;post&lt;/em&gt; específico sobre o &lt;strong&gt;ecossistema do Ruby on Rails&lt;/strong&gt;.&lt;/p&gt;
&lt;h2&gt;WebDesigners são bem-vindos&amp;#8230;&lt;/h2&gt;
&lt;p&gt;Parece besteira, mas quem trabalha ou trabalhou em equipes de desenvolvimento sabe que existe uma constante barreira entre programadores e webdesigners.&lt;/p&gt;
&lt;p&gt;O &lt;strong&gt;&lt;a href="http://pt.wikipedia.org/wiki/MVC" title="Wikipedia: Model-view-controller (MVC)" target="_blank"&gt;MVC&lt;/a&gt;&lt;/strong&gt; (&lt;em&gt;model-view-controller&lt;/em&gt;) já ajuda bastante nessa quebra de barreiras, pois o pessoal de sistema pode se preocupar mais com o modelo e o controlador, deixando que a equipe de webdesign atue sem problemas na camada de visualização. O código elegante e humanamente legível colabora bastante com isso também.&lt;/p&gt;
&lt;p&gt;A utilização do &lt;strong&gt;&lt;a href="http://www.radrails.org/" title="Aptana RadRails" target="_blank"&gt;IDE&lt;/a&gt;&lt;/strong&gt;&lt;a href="http://www.radrails.org/" title="Aptana RadRails" target="_blank"&gt; &lt;/a&gt;&lt;strong&gt;&lt;a href="http://www.radrails.org/" title="Aptana RadRails" target="_blank"&gt;RadRails&lt;/a&gt;&lt;/strong&gt;, também ajuda bastante, pois facilita o trabalho de quem conhece pouco de programação. Óbvio que para quem tem mais familiaridade e conceito, ferramentas como o RadRails são uma “mão na roda”.&lt;/p&gt;
&lt;p&gt;Outro fator bem bacana é a integração com o &lt;strong&gt;&lt;a href="http://script.aculo.us/" title="Script.aculo.us" target="_blank"&gt;Script.aculo.us&lt;/a&gt;&lt;/strong&gt;, &lt;strong&gt;&lt;a href="http://www.prototypejs.org/" title="Prototype" target="_blank"&gt;Prototype&lt;/a&gt;&lt;/strong&gt; e &lt;strong&gt;&lt;a href="http://jquery.com/" title="JQuery" target="_blank"&gt;JQuery&lt;/a&gt;&lt;/strong&gt;, que são conjuntos de bibliotecas Javascript que formam cada um desses &lt;em&gt;&lt;a href="http://en.wikipedia.org/wiki/Ajax_framework" title="Wikipedia: Ajax frameworks" target="_blank"&gt;frameworks Ajax&lt;/a&gt;. &lt;/em&gt;Para quem descobriu o quanto &lt;strong&gt;&lt;a href="http://pt.wikipedia.org/wiki/Internet_rica" title="Wikipedia: RIA" target="_blank"&gt;RIA&lt;/a&gt;&lt;/strong&gt; (&lt;em&gt;rich internet application&lt;/em&gt;) é valorizado, esse pode e deve ser um ponto positivo.&lt;/p&gt;
&lt;p&gt;E falando em RIA, com a utilização do &lt;a href="http://www.adobe.com/products/flex/" title="Adobe Flex" target="_blank"&gt;Adobe Flex&lt;/a&gt;, com certeza a aplicação será, pelo menos na questão visual, muito mais atrativa. Dê uma olhada nesse &lt;a href="http://imasters.uol.com.br/artigo/5093/ruby/flex_e_ruby_on_rails_rich_internet_aplication" title="Adobe Flex + Ruby on Rails" target="_blank"&gt;link&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Peças-chave na Agilidade e Praticidade.&lt;/h2&gt;
&lt;h3&gt;MVC&lt;/h3&gt;
&lt;p&gt;Um dos pontos fortes do Ruby on Rails é a forte utilização do padrão &lt;strong&gt;&lt;a href="http://pt.wikipedia.org/wiki/MVC" title="Wikipedia: MVC" target="_blank"&gt;MVC&lt;/a&gt;&lt;/strong&gt; (&lt;em&gt;model-view-controller&lt;/em&gt;) que tem como função isolar as regras de negócio da interface exibida ao usuário, permitindo assim, que programadores e &lt;em&gt;webdesigners&lt;/em&gt; possam trabalhar juntos e de forma eficiente.&lt;/p&gt;
&lt;p&gt;O MVC pode ser entendido como uma divisão de tarefas em um aplicativo. &lt;em&gt;View&lt;/em&gt; é a página HTML gerada, e o código que responsável por gerar os dados dinâmicos para o HTML é o &lt;em&gt;Controller&lt;/em&gt;. E, por fim, o &lt;em&gt;Model&lt;/em&gt; é a camada de comunicação com os dados armazenados, sejam eles em um banco de dados ou arquivos XML.&lt;/p&gt;
&lt;div class="wp-caption aligncenter" style="width: 310px;"&gt;&lt;a href="http://andreferraro.files.wordpress.com/2009/12/mvc.jpg"&gt;&lt;img class="size-medium wp-image-530" title="MVC - model-view-controller" src="http://andreferraro.files.wordpress.com/2009/12/mvc.jpg?w=300&amp;amp;#038;h=141" height="141" alt="MVC - model-view-controller" width="300" /&gt;&lt;/a&gt;&lt;p class="wp-caption-text"&gt;MVC - model-view-controller&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;ORM / ActiveRecord&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;ORM (&lt;em&gt;object-relational mapping&lt;/em&gt;) segue a implementação do padrão &lt;em&gt;Active Record&lt;/em&gt; pensado por &lt;strong&gt;Martin Fowler&lt;/strong&gt;, por isso o ORM do Ruby on Rails é conhecido como &lt;strong&gt;&lt;em&gt;ActiveRecord&lt;/em&gt;&lt;/strong&gt;. O ORM é uma técnica de desenvolvimento onde as tabelas do banco de dados são representadas através de classes e os registros de cada tabela são representados como instâncias das classes correspondentes.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Convention over Configuration&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Com o intuito de reduzir a necessidade de configuração pesada, a equipe por trás do Rails criou regras (convenções) para facilitar o trabalho de configuração da aplicação. Essas convenções tem como objetivo acelerar o desenvolvimento, além de manter o código legível e conciso.&lt;/p&gt;
&lt;h3&gt;Rake&lt;/h3&gt;
&lt;p&gt;É similar ao Ant, porém escrito em Ruby. A função do Rake é automatizar o desenvolvimento, é um utilitário importante para simplificar tarefas como por exemplo publicar em um banco de dados as configurações definidas no arquivo de migrações (você verá em um próximo &lt;em&gt;post&lt;/em&gt;).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;RESTful&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt; &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-weight: normal;"&gt;Caso não conheça o conceito de &lt;/span&gt;REST&lt;span style="font-weight: normal;"&gt;, sugiro dar uma lida neste &lt;a href="http://pt.wikipedia.org/wiki/REST" title="Wikipedia: REST" target="_blank"&gt;link&lt;/a&gt;. Porém, o básico é que uma &lt;em&gt;URL&lt;/em&gt; deve descrever o recurso disponibilizado, por exemplo: &lt;em&gt;http://www.seusite.com/carros/ford-fusion-2009-gasolina-preto&lt;/em&gt; e não algo que estamos acostumados como &lt;em&gt;http://www.seusite.com/carros?id=730&lt;/em&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-weight: normal;"&gt;Quem já programa aplicações web deve estar bem familiarizado com os métodos &lt;em&gt;GET&lt;/em&gt; e &lt;em&gt;POST&lt;/em&gt;, no Rails foram adicionados também os métodos &lt;em&gt;PUT&lt;/em&gt; (para modificação de dados) e &lt;em&gt;DELETE&lt;/em&gt; (exclusão de dados).&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-weight: normal;"&gt;Alguns benefícios da utilização de REST em uma aplicação &lt;em&gt;web&lt;/em&gt;:&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style="font-weight: normal;"&gt;URLs amigáveis;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight: normal;"&gt;Diferentes tipos de resposta como XML além do HTML;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight: normal;"&gt;Menos codificação;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight: normal;"&gt;Codificação mais clara e limpa.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Retrabalho? Tô fora! (DRY)&lt;/h2&gt;
&lt;blockquote&gt;&lt;p&gt;DRY (Don&amp;#8217;t Repeat Yourself, Não se repita) é o conceito por trás da técnica de definir nomes, propriedades e códigos em somente um lugar e reaproveitar essas informações em outros. &lt;a href="http://pt.wikipedia.org/wiki/Ruby_on_Rails#DRY" title="Wikipedia: Ruby on Rails - DRY" target="_blank"&gt;Wikipedia&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Para ajudar a manter o código limpo, o Rails segue o conceito &lt;em&gt;DRY&lt;/em&gt;. A idéia por trás dele, é simples: sempre que possível, reutilize código! Isto reduz as possibilidades de erros, mantém o seu código limpo e ainda o mais importante: é possível retirar uma boa carga de trabalho quando reutilizamos nosso código.&lt;/p&gt;
&lt;h2&gt;Mapa Mental desse post&lt;/h2&gt;
&lt;p&gt;&lt;em&gt; &lt;/em&gt;&lt;/p&gt;
&lt;div class="wp-caption aligncenter" style="width: 500px;"&gt;&lt;a href="http://andreferraro.files.wordpress.com/2009/12/por-que-rails.png"&gt;&lt;img class="size-medium wp-image-514" title="Por que Ruby on Rails?" src="http://andreferraro.files.wordpress.com/2009/12/por-que-rails.png?w=490&amp;amp;#038;h=271" height="271" alt="Por que Ruby on Rails?" width="490" /&gt;&lt;/a&gt;&lt;p class="wp-caption-text"&gt;Por que Ruby on Rails?&lt;/p&gt;&lt;/div&gt;
&lt;h2&gt;15 dias on Rails&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://andreferraro.wordpress.com/2009/12/14/15-dias-on-rails-dia-0/" title="15 dias on Rails – Dia 0" target="_self"&gt;Dia 0&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Dia 1
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://andreferraro.wordpress.com/2009/12/16/15-dias-on-rails-dia-1-introducao-ao-ruby/" title="15 dias on Rails – Dia 1 – Introdução ao Ruby" target="_self"&gt;Introdução ao Ruby&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://andreferraro.wordpress.com/2009/12/16/15-dias-on-rails-instalando-rubygems-ubuntu/" title="15 dias on Rails – Dia 1 – Instalando o Ruby e RubyGems no Ubuntu" target="_self"&gt;Instalando o Ruby e RubyGems no Ubuntu&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="http://andreferraro.wordpress.com/2009/12/25/15-dias-on-rails-dia-2-por-que-ruby-on-rails/" title="15 dias on Rails – Dia 2 – Por que Ruby on Rails?" target="_self"&gt;Dia 2 – Por que Ruby on Rails?&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Básico do Ruby on Rails&lt;/h2&gt;
&lt;p&gt;&lt;object data="http://static.slideshare.net/swf/ssplayer2.swf?id=2711021&amp;amp;#038;doc=rubyonrails-introducao-091213165942-phpapp01" type="application/x-shockwave-flash" height="418" width="510"&gt;&lt;param name="movie" value="http://static.slideshare.net/swf/ssplayer2.swf?id=2711021&amp;amp;#038;doc=rubyonrails-introducao-091213165942-phpapp01" /&gt;&lt;param name="allowFullScreen" value="true" /&gt;&lt;param name="allowScriptAccess" value="always" /&gt;&lt;/object&gt;&lt;/p&gt;
&lt;br /&gt;Publicado em Programação Tagged: ActiveRecord, adobe flex, ajax, Convention over Configuration, framework, howto, Internet, mvc, open source, opensource, orm, radrails, rails, ruby, ruby on rails, tutorial, webdesign &lt;a href="http://feeds.wordpress.com/1.0/gocomments/andreferraro.wordpress.com/506/"&gt;&lt;img src="http://feeds.wordpress.com/1.0/comments/andreferraro.wordpress.com/506/" border="0" alt="" /&gt;&lt;/a&gt; &lt;a href="http://feeds.wordpress.com/1.0/godelicious/andreferraro.wordpress.com/506/"&gt;&lt;img src="http://feeds.wordpress.com/1.0/delicious/andreferraro.wordpress.com/506/" border="0" alt="" /&gt;&lt;/a&gt; &lt;a href="http://feeds.wordpress.com/1.0/gofacebook/andreferraro.wordpress.com/506/"&gt;&lt;img src="http://feeds.wordpress.com/1.0/facebook/andreferraro.wordpress.com/506/" border="0" alt="" /&gt;&lt;/a&gt; &lt;a href="http://feeds.wordpress.com/1.0/gotwitter/andreferraro.wordpress.com/506/"&gt;&lt;img src="http://feeds.wordpress.com/1.0/twitter/andreferraro.wordpress.com/506/" border="0" alt="" /&gt;&lt;/a&gt; &lt;a href="http://feeds.wordpress.com/1.0/gostumble/andreferraro.wordpress.com/506/"&gt;&lt;img src="http://feeds.wordpress.com/1.0/stumble/andreferraro.wordpress.com/506/" border="0" alt="" /&gt;&lt;/a&gt; &lt;a href="http://feeds.wordpress.com/1.0/godigg/andreferraro.wordpress.com/506/"&gt;&lt;img src="http://feeds.wordpress.com/1.0/digg/andreferraro.wordpress.com/506/" border="0" alt="" /&gt;&lt;/a&gt; &lt;a href="http://feeds.wordpress.com/1.0/goreddit/andreferraro.wordpress.com/506/"&gt;&lt;img src="http://feeds.wordpress.com/1.0/reddit/andreferraro.wordpress.com/506/" border="0" alt="" /&gt;&lt;/a&gt; &lt;img src="http://stats.wordpress.com/b.gif?host=andreferraro.wordpress.com&amp;amp;blog=6980461&amp;amp;post=506&amp;amp;subd=andreferraro&amp;amp;ref=&amp;amp;feed=1" border="0" height="1" alt="" width="1" /&gt;</description><pubDate>Wed, 27 Oct 2010 20:22:03 -0200</pubDate><link>http://softwarelivre.org/andre-ferraro/blog/15-dias-on-rails-%E2%80%93-dia-2-%E2%80%93-por-que-ruby-on-rails</link><guid>http://softwarelivre.org/andre-ferraro/blog/15-dias-on-rails-%E2%80%93-dia-2-%E2%80%93-por-que-ruby-on-rails</guid></item><item><title>15 dias on Rails – Dia 1 – Instalando o Ruby e RubyGems no Ubuntu</title><description>&lt;div class="wp-caption alignleft" style="width: 225px;"&gt;&lt;img class="size-full wp-image-493" title="Instalando o Ruby e RubyGems no Ubuntu" src="http://andreferraro.files.wordpress.com/2009/12/ruby-on-rails-dia-1a.jpg?w=215&amp;amp;#038;h=300" height="300" alt="Instalando o Ruby e RubyGems no Ubuntu" width="215" /&gt;&lt;p class="wp-caption-text"&gt;Instalando o Ruby e RubyGems no Ubuntu&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;Depois do &lt;em&gt;post&lt;/em&gt; introdutório sobre Ruby (&lt;a href="http://andreferraro.wordpress.com/2009/12/16/15-dias-on-rails-dia-1-introducao-ao-ruby/" title="15 dias on Rails – Dia 1 – Introdução ao Ruby" target="_self"&gt;Introdução ao Ruby&lt;/a&gt;) e antes de iniciar minha trajetória no &lt;strong&gt;Ruby on Rails&lt;/strong&gt;, preciso instalar o &lt;strong&gt;Ruby&lt;/strong&gt; e o &lt;strong&gt;RubyGems&lt;/strong&gt; em meu computador que tem o Ubuntu como sistema operacional. O processo de instalação é bem tranquilo e instalar o Ruby e o RubyGems no Ubuntu é fácil. Antes de instalar vamos atualizar nossa lista de repositórios e também nosso sistema.&lt;span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;$ sudo apt-get update&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;$ sudo apt-get upgrade&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Depois de atualizarmos nosso Ubuntu, então vamos instalar o Ruby. Para isso execute o comando:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;$ sudo apt-get install ruby build-essential libopenssl-ruby ruby1.8-dev&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Os pacotes que serão instalados são:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Ruby&lt;/strong&gt; &amp;#8211; é o pacote que contém o Ruby;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Build-Essential&lt;/strong&gt; &amp;#8211; este pacote contém uma lista informativa de pacotes que são considerados essenciais para a construção de pacotes Debian;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;LibOpenSSL-Ruby&lt;/strong&gt; &amp;#8211; este pacote faz com que o Ruby esteja habilitado para usar a OpenSSL (basicamente utilizado para criptografia);&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ruby1.8-Dev&lt;/strong&gt; &amp;#8211; necessário para compilar módulos Ruby.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Após termos instalado o Ruby, então vamos verificar se tudo correu bem. Primeiramente vamos confirmar a versão instalada:&lt;br /&gt;
&lt;code&gt;$ ruby -v&lt;/code&gt;&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;ruby 1.8.7 (2009-06-12 patchlevel 174) [i486-linux]&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Agora vamos fazer um &amp;#8220;Alo Mundo&amp;#8221; só pra receber um &lt;em&gt;feedback&lt;/em&gt; que está tudo ok:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;$ ruby -ropenssl -rzlib -rreadline -e "puts :'Ola Mundo'";&lt;/code&gt;&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;Ola Mundo&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Pronto. Agora só falta instalar o RubyGems para o básico do Ruby estar presente em seu Ubuntu. Para isso vamos executar o comando:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;$ sudo apt-get install rubygems&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Após instalado, então também vamos ver se está ok. Eu sempre executo o comando com o parâmetro solicitando a versão:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;$ gem -v&lt;/code&gt;&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;1.3.5&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Tudo funcionando&amp;#8230; o próximo passo é conhecer e entender como funciona o Ruby on Rails.&lt;/p&gt;
&lt;h2&gt;15 dias on Rails&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://andreferraro.wordpress.com/2009/12/14/15-dias-on-rails-dia-0/" title="15 dias on Rails – Dia 0" target="_self"&gt;Dia 0&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Dia 1
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://andreferraro.wordpress.com/2009/12/16/15-dias-on-rails-dia-1-introducao-ao-ruby/" title="15 dias on Rails – Dia 1 – Introdução ao Ruby" target="_self"&gt;Introdução ao Ruby&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://andreferraro.wordpress.com/2009/12/16/15-dias-on-rails-instalando-rubygems-ubuntu/" title="15 dias on Rails – Dia 1 – Instalando o Ruby e RubyGems no Ubuntu" target="_self"&gt;Instalando o Ruby e RubyGems no Ubuntu&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="http://andreferraro.wordpress.com/2009/12/25/15-dias-on-rails-dia-2-por-que-ruby-on-rails/" title="15 dias on Rails – Dia 2 – Por que Ruby on Rails?" target="_self"&gt;Dia 2 – Por que Ruby on Rails?&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Básico do Ruby on Rails&lt;/h2&gt;
&lt;p&gt;&lt;object data="http://static.slideshare.net/swf/ssplayer2.swf?id=2711021&amp;amp;#038;doc=rubyonrails-introducao-091213165942-phpapp01" type="application/x-shockwave-flash" height="418" width="510"&gt;&lt;param name="movie" value="http://static.slideshare.net/swf/ssplayer2.swf?id=2711021&amp;amp;#038;doc=rubyonrails-introducao-091213165942-phpapp01" /&gt;&lt;param name="allowFullScreen" value="true" /&gt;&lt;param name="allowScriptAccess" value="always" /&gt;&lt;/object&gt;&lt;/p&gt;
&lt;br /&gt;Publicado em Programação, Redes Tagged: apt-get, howto, ruby, ruby on rails, rubygems, tutorial, ubuntu &lt;a href="http://feeds.wordpress.com/1.0/gocomments/andreferraro.wordpress.com/489/"&gt;&lt;img src="http://feeds.wordpress.com/1.0/comments/andreferraro.wordpress.com/489/" border="0" alt="" /&gt;&lt;/a&gt; &lt;a href="http://feeds.wordpress.com/1.0/godelicious/andreferraro.wordpress.com/489/"&gt;&lt;img src="http://feeds.wordpress.com/1.0/delicious/andreferraro.wordpress.com/489/" border="0" alt="" /&gt;&lt;/a&gt; &lt;a href="http://feeds.wordpress.com/1.0/gofacebook/andreferraro.wordpress.com/489/"&gt;&lt;img src="http://feeds.wordpress.com/1.0/facebook/andreferraro.wordpress.com/489/" border="0" alt="" /&gt;&lt;/a&gt; &lt;a href="http://feeds.wordpress.com/1.0/gotwitter/andreferraro.wordpress.com/489/"&gt;&lt;img src="http://feeds.wordpress.com/1.0/twitter/andreferraro.wordpress.com/489/" border="0" alt="" /&gt;&lt;/a&gt; &lt;a href="http://feeds.wordpress.com/1.0/gostumble/andreferraro.wordpress.com/489/"&gt;&lt;img src="http://feeds.wordpress.com/1.0/stumble/andreferraro.wordpress.com/489/" border="0" alt="" /&gt;&lt;/a&gt; &lt;a href="http://feeds.wordpress.com/1.0/godigg/andreferraro.wordpress.com/489/"&gt;&lt;img src="http://feeds.wordpress.com/1.0/digg/andreferraro.wordpress.com/489/" border="0" alt="" /&gt;&lt;/a&gt; &lt;a href="http://feeds.wordpress.com/1.0/goreddit/andreferraro.wordpress.com/489/"&gt;&lt;img src="http://feeds.wordpress.com/1.0/reddit/andreferraro.wordpress.com/489/" border="0" alt="" /&gt;&lt;/a&gt; &lt;img src="http://stats.wordpress.com/b.gif?host=andreferraro.wordpress.com&amp;amp;blog=6980461&amp;amp;post=489&amp;amp;subd=andreferraro&amp;amp;ref=&amp;amp;feed=1" border="0" height="1" alt="" width="1" /&gt;</description><pubDate>Wed, 27 Oct 2010 20:22:02 -0200</pubDate><link>http://softwarelivre.org/andre-ferraro/blog/15-dias-on-rails-%E2%80%93-dia-1-%E2%80%93-instalando-o-ruby-e-rubygems-no-ubuntu</link><guid>http://softwarelivre.org/andre-ferraro/blog/15-dias-on-rails-%E2%80%93-dia-1-%E2%80%93-instalando-o-ruby-e-rubygems-no-ubuntu</guid></item><item><title>15 dias on Rails – Dia 1 – Introdução ao Ruby</title><description>&lt;div class="wp-caption aligncenter" style="width: 507px;"&gt;&lt;img class="size-full wp-image-468" title="15 dias on Rails - Dia 1 - Introdução" src="http://andreferraro.files.wordpress.com/2009/12/ruby-on-rails-dia-1.jpg?w=497&amp;amp;#038;h=173" height="173" alt="15 dias on Rails - Dia 1 - Introdução" width="497" /&gt;&lt;p class="wp-caption-text"&gt;15 dias on Rails - Dia 1 - Introdução ao Ruby&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;O primeiro dia estudando &lt;strong&gt;Ruby on Rails&lt;/strong&gt; serviu para relembrar a origem deste framework, ou seja, fui reler sobre Ruby e seu paradigma, ví algumas apresentações no Slideshare e vídeos no Youtube. Aproveitei também para atualizar minha lista de pessoas que sigo no Twitter e adicionar algumas pessoas interessantes.&lt;span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h2&gt;A origem do Ruby&amp;#8230;&lt;/h2&gt;
&lt;p&gt;Para começar em Ruby on Rails é necessário conhecer e entender um pouco da linguagem &lt;strong&gt;Ruby&lt;/strong&gt;. Criado pelo japonês &lt;strong&gt;Matz&lt;/strong&gt; (Yukihiro Matsumoto) em 1995.&lt;/p&gt;
&lt;p&gt;Gosto muito da definição dada pelo site Ruby-Lang.org (&lt;a href="http://www.ruby-lang.org/pt/" title="Linguagem de Programação Ruby" target="_blank"&gt;http://www.ruby-lang.org/pt/&lt;/a&gt;):&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;Uma linguagem dinâmica, open source com foco na simplicidade e na produtividade. Tem uma sintaxe elegante de leitura natural e fácil escrita.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Segundo a &lt;a href="http://pt.wikipedia.org/wiki/Ruby_(linguagem_de_programação)" title="Wikipedia: Ruby" target="_blank"&gt;Wikipedia&lt;/a&gt;, Ruby é:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;Ruby é uma Linguagem de programação interpretada, com Tipagem Dinâmica e forte, orientada a objetos e, com várias semelhanças com Perl, Python e SmallTalk.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Segundo o site oficial, Matz reuniu também um pouco de suas linguagens favoritas Eiffel, Ada, e Lisp na criação do Ruby.&lt;/p&gt;
&lt;p&gt;Em &lt;strong&gt;Ruby&lt;/strong&gt;, tudo é um objeto. Cada trecho de informação e código podem receber as suas próprias propriedades e ações.&lt;/p&gt;
&lt;p&gt;Até o momento já foi lançada a versão 1.9.x do Ruby que basicamente corrige falhas de segurança da versão 1.8.x&lt;/p&gt;
&lt;p&gt;O Ruby está caminhando para a versão 2.0 que tem como principal vedete o projeto &lt;a href="http://www.atdot.net/yarv/" title="YARV: Yet another Ruby VM" target="_blank"&gt;YARV&lt;/a&gt; (&lt;strong&gt;Y&lt;/strong&gt;et &lt;strong&gt;A&lt;/strong&gt;nother &lt;strong&gt;R&lt;/strong&gt;uby &lt;strong&gt;V&lt;/strong&gt;M) que adiciona uma máquina virtual para acelerar a execução e fornecer um &lt;em&gt;&lt;a href="http://pt.wikipedia.org/wiki/Bytecode" title="Wikipedia: Bytecode" target="_blank"&gt;bytecode&lt;/a&gt;&lt;/em&gt; para compilação de scripts &lt;strong&gt;Ruby&lt;/strong&gt;. &lt;em&gt;&amp;#8220;Olha o Ruby executável aí gente!&amp;#8221;&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;Multi-plataforma&lt;/h2&gt;
&lt;p&gt;Esse é uma das características que mais me agradam em Ruby. Como o Java, C, Python entre outras, o Ruby é totalmente independente de plataforma, podendo ser utilizado tanto no Linux (minha preferência), quanto no Windows e também no Mac OS.&lt;/p&gt;
&lt;p&gt;Além de ser multi-plataforma o Ruby também possui implementações como o JRuby para Java e o IronRuby e Ruby.NET para a plataforma .NET da Microsoft.&lt;/p&gt;
&lt;h2&gt;IRB (&lt;em&gt;Interactive Ruby Shell&lt;/em&gt;)&lt;/h2&gt;
&lt;div class="wp-caption alignleft" style="width: 86px;"&gt;&lt;img class="size-full wp-image-479" title="IRB - Interative Ruby Shell" src="http://andreferraro.files.wordpress.com/2009/12/consoleirb.png?w=76&amp;amp;#038;h=76" height="76" alt="IRB - Interative Ruby Shell" width="76" /&gt;&lt;p class="wp-caption-text"&gt;IRBInteractive Ruby Shell&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;O IRB é um terminal interativo para Ruby. Básicamente você digita seus trechos de códigos Ruby e estes trechos são executados e retornados pelo IRB. Sua utilidade básica é testar trechos de códigos Ruby antes de inseri-los em seu programa, permitindo assim um teste simples que pode possibilitar uma rápida correção.&lt;/p&gt;
&lt;p&gt;No Linux, caso você tenha o Ruby instalado (veja mais abaixo: &lt;strong&gt;Instalando o Ruby no Ubuntu&lt;/strong&gt;). Basta acessar o console (terminal) e digitar &lt;strong&gt;irb&lt;/strong&gt; na linha de comandos:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;$ irb&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;A partir daí o IRB já está esperando pelos seus códigos. Por exemplo:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;$ irb&lt;/code&gt;&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;code&gt;irb(main):001:0&amp;gt; def media a, b&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;irb(main):002:1&amp;gt; (a + b) /2&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;irb(main):003:1&amp;gt; end&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;=&amp;gt; nil&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;irb(main):004:0&amp;gt; media 10, 20&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;=&amp;gt; 15&lt;/code&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;h2&gt;RubyGems, o APT do Ruby&lt;/h2&gt;
&lt;div class="wp-caption alignright" style="width: 86px;"&gt;&lt;img class="size-full wp-image-482" title="Ruby Gems" src="http://andreferraro.files.wordpress.com/2009/12/rubygems.png?w=76&amp;amp;#038;h=65" height="65" alt="Ruby Gems" width="76" /&gt;&lt;p class="wp-caption-text"&gt;Ruby Gems&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;RubyGems é um gerenciador de pacotes (os pacotes são chamados de gema ou &lt;em&gt;gem&lt;/em&gt; em inglês) no estilo &lt;a href="http://pt.wikipedia.org/wiki/Advanced_Packaging_Tool" title="Wikipedia: APT - Advanced Packaging Tool" target="_blank"&gt;APT&lt;/a&gt; das distribuições baseadas em Debian (isso inclui o Ubuntu), porém o RubyGems é para Ruby (meio óbivo, né?) e fornece um formato padrão para distribuição de bibliotecas e até programas escritos em Ruby. O RubyGems agora é uma biblioteca padrão da versão 1.9 do Ruby.&lt;/p&gt;
&lt;h3&gt;Características e Funcionalidades do RubyGems&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Fácil instalação e exclusão de pacotes RubyGems (e suas dependêncis também);&lt;/li&gt;
&lt;li&gt;Gerenciamento e controle dos pacotes &amp;#8220;baixados&amp;#8221;;&lt;/li&gt;
&lt;li&gt;Gerenciamento de dependência de pacotes;&lt;/li&gt;
&lt;li&gt;Consulta e listagem de pacotes instalados (locais) e remotos;&lt;/li&gt;
&lt;li&gt;Suporte a instalação de múltiplas versões de um pacote;&lt;/li&gt;
&lt;li&gt;Interface web para visualizar a documentação das gemas (&lt;em&gt;gems&lt;/em&gt;) instaladas;&lt;/li&gt;
&lt;li&gt;Interface que permite a criação dos suas próprias gemas.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;O RubyGems torna fácil, bem fácil, tarefa de instalar (ou remover) um plugin ou um programa em Ruby.&lt;/p&gt;
&lt;p&gt;Veja mais em: &lt;a href="http://www.rubygems.org/" title="RubyGems" target="_blank"&gt;www.rubygems.org&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Agora já conhecemos o básico sobre Ruby no próximo post vamos instalar o Ruby e o RubyGems no Ubuntu. Até a próxima.&lt;/p&gt;
&lt;h2&gt;Mapa Mental utilizado neste &lt;em&gt;post&lt;/em&gt;&lt;/h2&gt;
&lt;p&gt;&lt;em&gt; &lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt; &lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt; &lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt; &lt;/em&gt;&lt;/p&gt;
&lt;p style="text-align: center;"&gt;&lt;em&gt; &lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt; &lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;/p&gt;
&lt;div class="wp-caption aligncenter" style="width: 500px;"&gt;&lt;a href="http://andreferraro.files.wordpress.com/2009/12/mapa-mental-introducao-ruby.png?w=900"&gt;&lt;img class="size-medium wp-image-500 " title="Mapa Mental - Introdução ao Ruby" src="http://andreferraro.files.wordpress.com/2009/12/mapa-mental-introducao-ruby.png?w=490&amp;amp;#038;h=229" height="229" alt="Mapa Mental - Introdução ao Ruby" width="490" /&gt;&lt;/a&gt;&lt;p class="wp-caption-text"&gt;Mapa Mental - Introdução ao Ruby&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;15 dias on Rails&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://andreferraro.wordpress.com/2009/12/14/15-dias-on-rails-dia-0/" title="15 dias on Rails – Dia 0" target="_self"&gt;Dia 0&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Dia 1
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://andreferraro.wordpress.com/2009/12/16/15-dias-on-rails-dia-1-introducao-ao-ruby/" title="15 dias on Rails – Dia 1 – Introdução ao Ruby" target="_self"&gt;Introdução ao Ruby&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://andreferraro.wordpress.com/2009/12/16/15-dias-on-rails-instalando-rubygems-ubuntu/" title="15 dias on Rails – Dia 1 – Instalando o Ruby e RubyGems no Ubuntu" target="_self"&gt;Instalando o Ruby e RubyGems no Ubuntu&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="http://andreferraro.wordpress.com/2009/12/25/15-dias-on-rails-dia-2-por-que-ruby-on-rails/" title="15 dias on Rails – Dia 2 – Por que Ruby on Rails?" target="_self"&gt;Dia 2 – Por que Ruby on Rails?&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Básico do Ruby on Rails&lt;/h2&gt;
&lt;p&gt;&lt;object data="http://static.slideshare.net/swf/ssplayer2.swf?id=2711021&amp;amp;#038;doc=rubyonrails-introducao-091213165942-phpapp01" type="application/x-shockwave-flash" height="418" width="510"&gt;&lt;param name="movie" value="http://static.slideshare.net/swf/ssplayer2.swf?id=2711021&amp;amp;#038;doc=rubyonrails-introducao-091213165942-phpapp01" /&gt;&lt;param name="allowFullScreen" value="true" /&gt;&lt;param name="allowScriptAccess" value="always" /&gt;&lt;/object&gt;&lt;/p&gt;
&lt;br /&gt;Publicado em Programação Tagged: bytecode, irb, ironruby, jruby, linguagem interpretada, oop, orientação à objetos, rails, ruby, ruby on rails, ruby.net, rubygems, ubuntu, yarv &lt;a href="http://feeds.wordpress.com/1.0/gocomments/andreferraro.wordpress.com/467/"&gt;&lt;img src="http://feeds.wordpress.com/1.0/comments/andreferraro.wordpress.com/467/" border="0" alt="" /&gt;&lt;/a&gt; &lt;a href="http://feeds.wordpress.com/1.0/godelicious/andreferraro.wordpress.com/467/"&gt;&lt;img src="http://feeds.wordpress.com/1.0/delicious/andreferraro.wordpress.com/467/" border="0" alt="" /&gt;&lt;/a&gt; &lt;a href="http://feeds.wordpress.com/1.0/gofacebook/andreferraro.wordpress.com/467/"&gt;&lt;img src="http://feeds.wordpress.com/1.0/facebook/andreferraro.wordpress.com/467/" border="0" alt="" /&gt;&lt;/a&gt; &lt;a href="http://feeds.wordpress.com/1.0/gotwitter/andreferraro.wordpress.com/467/"&gt;&lt;img src="http://feeds.wordpress.com/1.0/twitter/andreferraro.wordpress.com/467/" border="0" alt="" /&gt;&lt;/a&gt; &lt;a href="http://feeds.wordpress.com/1.0/gostumble/andreferraro.wordpress.com/467/"&gt;&lt;img src="http://feeds.wordpress.com/1.0/stumble/andreferraro.wordpress.com/467/" border="0" alt="" /&gt;&lt;/a&gt; &lt;a href="http://feeds.wordpress.com/1.0/godigg/andreferraro.wordpress.com/467/"&gt;&lt;img src="http://feeds.wordpress.com/1.0/digg/andreferraro.wordpress.com/467/" border="0" alt="" /&gt;&lt;/a&gt; &lt;a href="http://feeds.wordpress.com/1.0/goreddit/andreferraro.wordpress.com/467/"&gt;&lt;img src="http://feeds.wordpress.com/1.0/reddit/andreferraro.wordpress.com/467/" border="0" alt="" /&gt;&lt;/a&gt; &lt;img src="http://stats.wordpress.com/b.gif?host=andreferraro.wordpress.com&amp;amp;blog=6980461&amp;amp;post=467&amp;amp;subd=andreferraro&amp;amp;ref=&amp;amp;feed=1" border="0" height="1" alt="" width="1" /&gt;</description><pubDate>Wed, 27 Oct 2010 20:22:01 -0200</pubDate><link>http://softwarelivre.org/andre-ferraro/blog/15-dias-on-rails-%E2%80%93-dia-1-%E2%80%93-introducao-ao-ruby</link><guid>http://softwarelivre.org/andre-ferraro/blog/15-dias-on-rails-%E2%80%93-dia-1-%E2%80%93-introducao-ao-ruby</guid></item><item><title>15 dias on Rails – Dia 0</title><description>&lt;div class="wp-caption alignleft" style="width: 225px;"&gt;&lt;img class="size-full wp-image-450" title="15 dias on Rails - Dia 0" src="http://andreferraro.files.wordpress.com/2009/12/ruby-on-rails-dia-0.jpg?w=215&amp;amp;#038;h=300" height="300" alt="15 dias on Rails - Dia 0" width="215" /&gt;&lt;p class="wp-caption-text"&gt;15 dias on Rails - Dia 0&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;Fiquei um pouco afastado do &lt;em&gt;blog&lt;/em&gt; devido a grande carga de trabalho para iniciar os trabalhos da &lt;a href="http://www.mundoclick.com.br" title="MundoClick Produtora Web" target="_blank"&gt;MundoClick Produtora Web&lt;/a&gt; focada em soluções para pequenas empresas e que utiliza softwares &lt;em&gt;open source&lt;/em&gt; em sua gama de soluções.&lt;/p&gt;
&lt;p&gt;Voltando ao &lt;em&gt;blog&lt;/em&gt;, a partir de amanhã vou dedicar &lt;strong&gt;15 dias sobre Ruby on Rails&lt;/strong&gt;, apesar de já estudar  esse &lt;em&gt;framework&lt;/em&gt; a mais de 2 meses, agora vou fazer de forma metódica e separar este período para mostrar minha experiência no desenvolvimento de uma aplicação web para o ramo automotivo.&lt;/p&gt;
&lt;p&gt;No primeiro dia vou postar o básico sobre &lt;strong&gt;Ruby on Rails&lt;/strong&gt;, ou seja, vou começar pelo “o que é Ruby on Rails”, como surgiu, o que é &lt;strong&gt;MVC&lt;/strong&gt;, conceito &lt;strong&gt;DRY&lt;/strong&gt;, &lt;strong&gt;Ruby Gems&lt;/strong&gt;, qual é sua estrutura de diretórios, sites desenvolvidos em Rails e também alguns links interessantes.&lt;span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Ao longo dos quinze dias vou colocando como instalar o Ruby on Rails com &lt;strong&gt;Phusion Passenger&lt;/strong&gt; e &lt;strong&gt;Ruby Enterprise Edition&lt;/strong&gt; no &lt;strong&gt;Ubuntu Hardy&lt;/strong&gt; (Ubuntu 8.04 LTS), depois vou documentar minha experiência de autenticação com o plugin &lt;strong&gt;AuthLogic&lt;/strong&gt;, como fazer upload de arquivos com o &lt;strong&gt;Paperclip&lt;/strong&gt;, como funciona o &lt;strong&gt;RestFUL&lt;/strong&gt;, o &lt;strong&gt;ActiveRecord&lt;/strong&gt;, o funcionamento do &lt;strong&gt;ORM&lt;/strong&gt; do Rails, utilização do Ajax entre outras coisas.&lt;/p&gt;
&lt;p&gt;Por enquanto, segue a apresentação básica de Rails que subi no Slideshare.net&lt;br /&gt;
&lt;object data="http://static.slideshare.net/swf/ssplayer2.swf?id=2711021&amp;amp;#038;doc=rubyonrails-introducao-091213165942-phpapp01" type="application/x-shockwave-flash" height="418" width="510"&gt;&lt;param name="movie" value="http://static.slideshare.net/swf/ssplayer2.swf?id=2711021&amp;amp;#038;doc=rubyonrails-introducao-091213165942-phpapp01" /&gt;&lt;param name="allowFullScreen" value="true" /&gt;&lt;param name="allowScriptAccess" value="always" /&gt;&lt;/object&gt;&lt;/p&gt;
&lt;h2&gt;15 dias on Rails&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://andreferraro.wordpress.com/2009/12/14/15-dias-on-rails-dia-0/" title="15 dias on Rails – Dia 0" target="_self"&gt;Dia 0&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Dia 1
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://andreferraro.wordpress.com/2009/12/16/15-dias-on-rails-dia-1-introducao-ao-ruby/" title="15 dias on Rails – Dia 1 – Introdução ao Ruby" target="_self"&gt;Introdução ao Ruby&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://andreferraro.wordpress.com/2009/12/16/15-dias-on-rails-instalando-rubygems-ubuntu/" title="15 dias on Rails – Dia 1 – Instalando o Ruby e RubyGems no Ubuntu" target="_self"&gt;Instalando o Ruby e RubyGems no Ubuntu&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="http://andreferraro.wordpress.com/2009/12/25/15-dias-on-rails-dia-2-por-que-ruby-on-rails/" title="15 dias on Rails – Dia 2 – Por que Ruby on Rails?" target="_self"&gt;Dia 2 – Por que Ruby on Rails?&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;Publicado em Programação Tagged: 15 dias, authlogic, framework, paperclip, rails, ruby, ruby on rails &lt;a href="http://feeds.wordpress.com/1.0/gocomments/andreferraro.wordpress.com/447/"&gt;&lt;img src="http://feeds.wordpress.com/1.0/comments/andreferraro.wordpress.com/447/" border="0" alt="" /&gt;&lt;/a&gt; &lt;a href="http://feeds.wordpress.com/1.0/godelicious/andreferraro.wordpress.com/447/"&gt;&lt;img src="http://feeds.wordpress.com/1.0/delicious/andreferraro.wordpress.com/447/" border="0" alt="" /&gt;&lt;/a&gt; &lt;a href="http://feeds.wordpress.com/1.0/gofacebook/andreferraro.wordpress.com/447/"&gt;&lt;img src="http://feeds.wordpress.com/1.0/facebook/andreferraro.wordpress.com/447/" border="0" alt="" /&gt;&lt;/a&gt; &lt;a href="http://feeds.wordpress.com/1.0/gotwitter/andreferraro.wordpress.com/447/"&gt;&lt;img src="http://feeds.wordpress.com/1.0/twitter/andreferraro.wordpress.com/447/" border="0" alt="" /&gt;&lt;/a&gt; &lt;a href="http://feeds.wordpress.com/1.0/gostumble/andreferraro.wordpress.com/447/"&gt;&lt;img src="http://feeds.wordpress.com/1.0/stumble/andreferraro.wordpress.com/447/" border="0" alt="" /&gt;&lt;/a&gt; &lt;a href="http://feeds.wordpress.com/1.0/godigg/andreferraro.wordpress.com/447/"&gt;&lt;img src="http://feeds.wordpress.com/1.0/digg/andreferraro.wordpress.com/447/" border="0" alt="" /&gt;&lt;/a&gt; &lt;a href="http://feeds.wordpress.com/1.0/goreddit/andreferraro.wordpress.com/447/"&gt;&lt;img src="http://feeds.wordpress.com/1.0/reddit/andreferraro.wordpress.com/447/" border="0" alt="" /&gt;&lt;/a&gt; &lt;img src="http://stats.wordpress.com/b.gif?host=andreferraro.wordpress.com&amp;amp;blog=6980461&amp;amp;post=447&amp;amp;subd=andreferraro&amp;amp;ref=&amp;amp;feed=1" border="0" height="1" alt="" width="1" /&gt;</description><pubDate>Wed, 27 Oct 2010 20:21:59 -0200</pubDate><link>http://softwarelivre.org/andre-ferraro/blog/15-dias-on-rails-%E2%80%93-dia-0</link><guid>http://softwarelivre.org/andre-ferraro/blog/15-dias-on-rails-%E2%80%93-dia-0</guid></item><item><title>15 dias on Rails – Dia 2 – Por que Ruby on Rails?</title><description>&lt;div class="snap_preview"&gt;&lt;br /&gt;&lt;div class="wp-caption aligncenter" style="width: 507px;"&gt;&lt;img title="Por que Ruby on Rails?" class="size-full wp-image-542" src="http://andreferraro.files.wordpress.com/2009/12/pq-ruby-on-rails.jpg?w=497&amp;amp;#038;h=173" height="173" alt="Por que Ruby on Rails?" width="497" /&gt;&lt;p class="wp-caption-text"&gt;Por que Ruby on Rails?&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;Quando eu comecei a estudar &lt;strong&gt;Ruby on Rails&lt;/strong&gt; e a partir daí comentar com colegas de trabalho e outros programadores que não conheciam o &lt;em&gt;framework&lt;/em&gt;, sempre surgia a mesma pergunta: “Por que estudar Rails se já existe PHP, .NET, Java e Python?”.&lt;span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Hm, essa pergunta é dificílima de responder (ainda mais por que Rails não é uma linguagem e sim um &lt;em&gt;framework&lt;/em&gt;), muito tem ligação com o prazer de conhecer algo novo e focado para web, apenas para web, porém com pilares que rementem a agilidade, colaboração, facilidade e abrangência.&lt;/p&gt;
&lt;p&gt;Separei nesse &lt;em&gt;post&lt;/em&gt;&lt;em&gt; &lt;/em&gt;os principais motivos para estudar e desenvolver aplicações web utilizando o &lt;em&gt;framework&lt;/em&gt; &lt;strong&gt;Ruby on Rails&lt;/strong&gt;.&lt;/p&gt;
&lt;h2&gt;Feito para Web.&lt;/h2&gt;
&lt;p&gt;A origem do &lt;em&gt;framework&lt;/em&gt; &lt;strong&gt;Ruby on Rails&lt;/strong&gt; já me remete ao seu principal foco, ou seja, &lt;strong&gt;aplicações web&lt;/strong&gt;. O &lt;strong&gt;Ruby on Rails&lt;/strong&gt; não foi concebido como um &lt;em&gt;framework&lt;/em&gt;, e sim foi gerado a partir do desenvolvimento da ferramenta Basecamp da 37Signals. Como padrão os &lt;em&gt;frameworks&lt;/em&gt;, sejam eles voltados para PHP, Java, Python ou .NET, são pensados e planejados como tal, porém a situação inversa vivenciada por Hansson fez com que o &lt;strong&gt;Rails&lt;/strong&gt; obtivesse sucesso, pois está intimamente ligada ao dia-a-dia e as principais demandas do desenvolvimento para Internet.&lt;/p&gt;
&lt;p&gt;Outro fator que considero ser importante é que por ser feito para web o &lt;strong&gt;Rails não se preocupa em ser a melhor ferramenta&lt;/strong&gt; para diversos objetivos, como é o caso do Java e .NET, sendo assim o foco é, e aparentemente continuará sendo, todo para desenvolvimento para Internet.&lt;/p&gt;
&lt;h2&gt;Ágil, Fácil e Eficiente&lt;/h2&gt;
&lt;p&gt;O Rails faz uso de convenções no lugar de configurações (&lt;strong&gt;Convention over Configuration&lt;/strong&gt;), mais abaixo vou falar delas, isso facilita muito o trabalho, pois não te obriga a fazer várias configurações antes de iniciar o projeto.&lt;/p&gt;
&lt;p&gt;Outro fator importante é a existência de ferramentas &lt;strong&gt;geradoras de código&lt;/strong&gt; (leia-se &lt;em&gt;scaffold&lt;/em&gt;) que possibilitam que sem nenhuma linha de código, apenas execução de comandos, que você consiga desenvolver uma aplicação &lt;em&gt;web&lt;/em&gt; simples, porém funcional, em alguns poucos minutos.&lt;/p&gt;
&lt;p&gt;O &lt;strong&gt;Ruby&lt;/strong&gt;, a linguagem utilizada na concepção do Rails, é &lt;strong&gt;orientado à objetos&lt;/strong&gt; como o Java, mas também é possível usá-lo para criar &lt;em&gt;scripts&lt;/em&gt; simples. O Ruby on Rails não necessita compilação, pois o &lt;strong&gt;Ruby é uma linguagem interpretada&lt;/strong&gt;, ou seja, a cada alteração, basta abrir o navegador e atualizar sua aplicação e verá o resultado.&lt;/p&gt;
&lt;p&gt;Até as &lt;strong&gt;validações de formulários&lt;/strong&gt; e entradas de dados em geral é muito simples, pois o &lt;em&gt;framework&lt;/em&gt; já foi preparado para isso. Mas não só as validações como dezenas de outras tarefas são partes integrantes do Rails, uma que eu particularmente acho muito interessante é a forma de fazer &lt;strong&gt;associações entre classes&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;David Heinemeier Hansson, criador do Ruby on Rails, mostra neste vídeo como &lt;strong&gt;criar um blog em 15 minutos&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;span style="text-align: center; display: block;"&gt;&lt;a href="http://andreferraro.wordpress.com/2009/12/25/15-dias-on-rails-dia-2-por-que-ruby-on-rails/"&gt;&lt;img src="http://img.youtube.com/vi/Gzj723LkRJY/2.jpg" alt="" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h2&gt;Open Source e Comunidade Ativa!&lt;/h2&gt;
&lt;p&gt;Não só &lt;em&gt;&lt;strong&gt;open source&lt;/strong&gt;&lt;/em&gt; (código aberto), mas também independente de plataforma (como o Ruby), ou seja, roda no Linux, Mac OS e Windows. Isso significa que qualquer um é livre para modificar seu código e também não envolve custo de aquisição. Sendo &lt;strong&gt;multi-plataforma&lt;/strong&gt;, o Ruby on Rails possibilita a você (ou sua empresa) o “prazer” de não ficar “amarrado”  a um sistema operacional específico.&lt;/p&gt;
&lt;p&gt;Atualmente o &lt;strong&gt;Ruby&lt;/strong&gt; ocupa a 10a. colocação no &lt;em&gt;&lt;a href="http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html" title="TIOBE Programming Community Index for December 2009" target="_blank"&gt;TIOBE Programming Community Index&lt;/a&gt;&lt;/em&gt; e vem subindo a cada ano. Esse crescimento é resultado da quantidade de informação sobre a linguagem nas mais diversas fontes como Google, Yahoo, Bing, Wikipedia e Youtube.&lt;/p&gt;
&lt;p&gt;A comunidade é bem ativa, vide o caso do &lt;strong&gt;&lt;a href="http://github.com/" title="GitHub" target="_blank"&gt;GitHub&lt;/a&gt;&lt;/strong&gt; onde contém centenas de projetos e plugins que podem ser utilizados no Rails. O GitHub também funciona como uma rede social, pois é possível seguir os usuários que mais lhe interessar, além de assinar &lt;em&gt;feeds&lt;/em&gt; e participar do &lt;em&gt;wiki&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Uma busca no Google com certeza lhe revelará mais alternativas. Farei um &lt;em&gt;post&lt;/em&gt; específico sobre o &lt;strong&gt;ecossistema do Ruby on Rails&lt;/strong&gt;.&lt;/p&gt;
&lt;h2&gt;WebDesigners são bem-vindos&amp;#8230;&lt;/h2&gt;
&lt;p&gt;Parece besteira, mas quem trabalha ou trabalhou em equipes de desenvolvimento sabe que existe uma constante barreira entre programadores e webdesigners.&lt;/p&gt;
&lt;p&gt;O &lt;strong&gt;&lt;a href="http://pt.wikipedia.org/wiki/MVC" title="Wikipedia: Model-view-controller (MVC)" target="_blank"&gt;MVC&lt;/a&gt;&lt;/strong&gt; (&lt;em&gt;model-view-controller&lt;/em&gt;) já ajuda bastante nessa quebra de barreiras, pois o pessoal de sistema pode se preocupar mais com o modelo e o controlador, deixando que a equipe de webdesign atue sem problemas na camada de visualização. O código elegante e humanamente legível colabora bastante com isso também.&lt;/p&gt;
&lt;p&gt;A utilização do &lt;strong&gt;&lt;a href="http://www.radrails.org/" title="Aptana RadRails" target="_blank"&gt;IDE&lt;/a&gt;&lt;/strong&gt;&lt;a href="http://www.radrails.org/" title="Aptana RadRails" target="_blank"&gt; &lt;/a&gt;&lt;strong&gt;&lt;a href="http://www.radrails.org/" title="Aptana RadRails" target="_blank"&gt;RadRails&lt;/a&gt;&lt;/strong&gt;, também ajuda bastante, pois facilita o trabalho de quem conhece pouco de programação. Óbvio que para quem tem mais familiaridade e conceito, ferramentas como o RadRails são uma “mão na roda”.&lt;/p&gt;
&lt;p&gt;Outro fator bem bacana é a integração com o &lt;strong&gt;&lt;a href="http://script.aculo.us/" title="Script.aculo.us" target="_blank"&gt;Script.aculo.us&lt;/a&gt;&lt;/strong&gt;, &lt;strong&gt;&lt;a href="http://www.prototypejs.org/" title="Prototype" target="_blank"&gt;Prototype&lt;/a&gt;&lt;/strong&gt; e &lt;strong&gt;&lt;a href="http://jquery.com/" title="JQuery" target="_blank"&gt;JQuery&lt;/a&gt;&lt;/strong&gt;, que são conjuntos de bibliotecas Javascript que formam cada um desses &lt;em&gt;&lt;a href="http://en.wikipedia.org/wiki/Ajax_framework" title="Wikipedia: Ajax frameworks" target="_blank"&gt;frameworks Ajax&lt;/a&gt;. &lt;/em&gt;Para quem descobriu o quanto &lt;strong&gt;&lt;a href="http://pt.wikipedia.org/wiki/Internet_rica" title="Wikipedia: RIA" target="_blank"&gt;RIA&lt;/a&gt;&lt;/strong&gt; (&lt;em&gt;rich internet application&lt;/em&gt;) é valorizado, esse pode e deve ser um ponto positivo.&lt;/p&gt;
&lt;p&gt;E falando em RIA, com a utilização do &lt;a href="http://www.adobe.com/products/flex/" title="Adobe Flex" target="_blank"&gt;Adobe Flex&lt;/a&gt;, com certeza a aplicação será, pelo menos na questão visual, muito mais atrativa. Dê uma olhada nesse &lt;a href="http://imasters.uol.com.br/artigo/5093/ruby/flex_e_ruby_on_rails_rich_internet_aplication" title="Adobe Flex + Ruby on Rails" target="_blank"&gt;link&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Peças-chave na Agilidade e Praticidade.&lt;/h2&gt;
&lt;h3&gt;MVC&lt;/h3&gt;
&lt;p&gt;Um dos pontos fortes do Ruby on Rails é a forte utilização do padrão &lt;strong&gt;&lt;a href="http://pt.wikipedia.org/wiki/MVC" title="Wikipedia: MVC" target="_blank"&gt;MVC&lt;/a&gt;&lt;/strong&gt; (&lt;em&gt;model-view-controller&lt;/em&gt;) que tem como função isolar as regras de negócio da interface exibida ao usuário, permitindo assim, que programadores e &lt;em&gt;webdesigners&lt;/em&gt; possam trabalhar juntos e de forma eficiente.&lt;/p&gt;
&lt;p&gt;O MVC pode ser entendido como uma divisão de tarefas em um aplicativo. &lt;em&gt;View&lt;/em&gt; é a página HTML gerada, e o código que responsável por gerar os dados dinâmicos para o HTML é o &lt;em&gt;Controller&lt;/em&gt;. E, por fim, o &lt;em&gt;Model&lt;/em&gt; é a camada de comunicação com os dados armazenados, sejam eles em um banco de dados ou arquivos XML.&lt;/p&gt;
&lt;div class="wp-caption aligncenter" style="width: 310px;"&gt;&lt;a href="http://andreferraro.files.wordpress.com/2009/12/mvc.jpg"&gt;&lt;img title="MVC - model-view-controller" class="size-medium wp-image-530" src="http://andreferraro.files.wordpress.com/2009/12/mvc.jpg?w=300&amp;amp;#038;h=141" height="141" alt="MVC - model-view-controller" width="300" /&gt;&lt;/a&gt;&lt;p class="wp-caption-text"&gt;MVC - model-view-controller&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;ORM / ActiveRecord&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;ORM (&lt;em&gt;object-relational mapping&lt;/em&gt;) segue a implementação do padrão &lt;em&gt;Active Record&lt;/em&gt; pensado por &lt;strong&gt;Martin Fowler&lt;/strong&gt;, por isso o ORM do Ruby on Rails é conhecido como &lt;strong&gt;&lt;em&gt;ActiveRecord&lt;/em&gt;&lt;/strong&gt;. O ORM é uma técnica de desenvolvimento onde as tabelas do banco de dados são representadas através de classes e os registros de cada tabela são representados como instâncias das classes correspondentes.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Convention over Configuration&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Com o intuito de reduzir a necessidade de configuração pesada, a equipe por trás do Rails criou regras (convenções) para facilitar o trabalho de configuração da aplicação. Essas convenções tem como objetivo acelerar o desenvolvimento, além de manter o código legível e conciso.&lt;/p&gt;
&lt;h3&gt;Rake&lt;/h3&gt;
&lt;p&gt;É similar ao Ant, porém escrito em Ruby. A função do Rake é automatizar o desenvolvimento, é um utilitário importante para simplificar tarefas como por exemplo publicar em um banco de dados as configurações definidas no arquivo de migrações (você verá em um próximo &lt;em&gt;post&lt;/em&gt;).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;RESTful&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt; &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-weight: normal;"&gt;Caso não conheça o conceito de &lt;/span&gt;REST&lt;span style="font-weight: normal;"&gt;, sugiro dar uma lida neste &lt;a href="http://pt.wikipedia.org/wiki/REST" title="Wikipedia: REST" target="_blank"&gt;link&lt;/a&gt;. Porém, o básico é que uma &lt;em&gt;URL&lt;/em&gt; deve descrever o recurso disponibilizado, por exemplo: &lt;em&gt;http://www.seusite.com/carros/ford-fusion-2009-gasolina-preto&lt;/em&gt; e não algo que estamos acostumados como &lt;em&gt;http://www.seusite.com/carros?id=730&lt;/em&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-weight: normal;"&gt;Quem já programa aplicações web deve estar bem familiarizado com os métodos &lt;em&gt;GET&lt;/em&gt; e &lt;em&gt;POST&lt;/em&gt;, no Rails foram adicionados também os métodos &lt;em&gt;PUT&lt;/em&gt; (para modificação de dados) e &lt;em&gt;DELETE&lt;/em&gt; (exclusão de dados).&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-weight: normal;"&gt;Alguns benefícios da utilização de REST em uma aplicação &lt;em&gt;web&lt;/em&gt;:&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style="font-weight: normal;"&gt;URLs amigáveis;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight: normal;"&gt;Diferentes tipos de resposta como XML além do HTML;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight: normal;"&gt;Menos codificação;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight: normal;"&gt;Codificação mais clara e limpa.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Retrabalho? Tô fora! (DRY)&lt;/h2&gt;
&lt;blockquote&gt;&lt;p&gt;DRY (Don&amp;#8217;t Repeat Yourself, Não se repita) é o conceito por trás da técnica de definir nomes, propriedades e códigos em somente um lugar e reaproveitar essas informações em outros. &lt;a href="http://pt.wikipedia.org/wiki/Ruby_on_Rails#DRY" title="Wikipedia: Ruby on Rails - DRY" target="_blank"&gt;Wikipedia&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Para ajudar a manter o código limpo, o Rails segue o conceito &lt;em&gt;DRY&lt;/em&gt;. A idéia por trás dele, é simples: sempre que possível, reutilize código! Isto reduz as possibilidades de erros, mantém o seu código limpo e ainda o mais importante: é possível retirar uma boa carga de trabalho quando reutilizamos nosso código.&lt;/p&gt;
&lt;h2&gt;Mapa Mental desse post&lt;/h2&gt;
&lt;p&gt;&lt;em&gt; &lt;/em&gt;&lt;/p&gt;
&lt;div class="wp-caption aligncenter" style="width: 500px;"&gt;&lt;a href="http://andreferraro.files.wordpress.com/2009/12/por-que-rails.png"&gt;&lt;img title="Por que Ruby on Rails?" class="size-medium wp-image-514" src="http://andreferraro.files.wordpress.com/2009/12/por-que-rails.png?w=490&amp;amp;#038;h=271" height="271" alt="Por que Ruby on Rails?" width="490" /&gt;&lt;/a&gt;&lt;p class="wp-caption-text"&gt;Por que Ruby on Rails?&lt;/p&gt;&lt;/div&gt;
&lt;h2&gt;15 dias on Rails&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://andreferraro.wordpress.com/2009/12/14/15-dias-on-rails-dia-0/" title="15 dias on Rails – Dia 0" target="_self"&gt;Dia 0&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Dia 1
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://andreferraro.wordpress.com/2009/12/16/15-dias-on-rails-dia-1-introducao-ao-ruby/" title="15 dias on Rails – Dia 1 – Introdução ao Ruby" target="_self"&gt;Introdução ao Ruby&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://andreferraro.wordpress.com/2009/12/16/15-dias-on-rails-instalando-rubygems-ubuntu/" title="15 dias on Rails – Dia 1 – Instalando o Ruby e RubyGems no Ubuntu" target="_self"&gt;Instalando o Ruby e RubyGems no Ubuntu&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="http://andreferraro.wordpress.com/2009/12/25/15-dias-on-rails-dia-2-por-que-ruby-on-rails/" title="15 dias on Rails – Dia 2 – Por que Ruby on Rails?" target="_self"&gt;Dia 2 – Por que Ruby on Rails?&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Básico do Ruby on Rails&lt;/h2&gt;
&lt;p&gt;&lt;object data="http://static.slideshare.net/swf/ssplayer2.swf?id=2711021&amp;amp;#038;doc=rubyonrails-introducao-091213165942-phpapp01" type="application/x-shockwave-flash" height="418" width="510"&gt;&lt;param name="movie" value="http://static.slideshare.net/swf/ssplayer2.swf?id=2711021&amp;amp;#038;doc=rubyonrails-introducao-091213165942-phpapp01" /&gt;&lt;param name="allowFullScreen" value="true" /&gt;&lt;param name="allowScriptAccess" value="always" /&gt;&lt;/object&gt;&lt;/p&gt;
Posted in Programação Tagged: ActiveRecord, adobe flex, ajax, Convention over Configuration, framework, howto, Internet, mvc, open source, opensource, orm, radrails, rails, ruby, ruby on rails, tutorial, webdesign &lt;a href="http://feeds.wordpress.com/1.0/gocomments/andreferraro.wordpress.com/506/"&gt;&lt;img src="http://feeds.wordpress.com/1.0/comments/andreferraro.wordpress.com/506/" border="0" alt="" /&gt;&lt;/a&gt; &lt;a href="http://feeds.wordpress.com/1.0/godelicious/andreferraro.wordpress.com/506/"&gt;&lt;img src="http://feeds.wordpress.com/1.0/delicious/andreferraro.wordpress.com/506/" border="0" alt="" /&gt;&lt;/a&gt; &lt;a href="http://feeds.wordpress.com/1.0/gostumble/andreferraro.wordpress.com/506/"&gt;&lt;img src="http://feeds.wordpress.com/1.0/stumble/andreferraro.wordpress.com/506/" border="0" alt="" /&gt;&lt;/a&gt; &lt;a href="http://feeds.wordpress.com/1.0/godigg/andreferraro.wordpress.com/506/"&gt;&lt;img src="http://feeds.wordpress.com/1.0/digg/andreferraro.wordpress.com/506/" border="0" alt="" /&gt;&lt;/a&gt; &lt;a href="http://feeds.wordpress.com/1.0/goreddit/andreferraro.wordpress.com/506/"&gt;&lt;img src="http://feeds.wordpress.com/1.0/reddit/andreferraro.wordpress.com/506/" border="0" alt="" /&gt;&lt;/a&gt; &lt;img src="http://stats.wordpress.com/b.gif?host=andreferraro.wordpress.com&amp;amp;blog=6980461&amp;amp;post=506&amp;amp;subd=andreferraro&amp;amp;ref=&amp;amp;feed=1" border="0" alt="" /&gt;&lt;/div&gt;</description><pubDate>Sat, 26 Dec 2009 04:00:54 -0200</pubDate><link>http://softwarelivre.org/andre-ferraro/blog/15-dias-on-rails-dia-2-por-que-ruby-on-rails</link><guid>http://softwarelivre.org/andre-ferraro/blog/15-dias-on-rails-dia-2-por-que-ruby-on-rails</guid></item><item><title>15 dias on Rails – Dia 1 – Instalando o Ruby e RubyGems no Ubuntu</title><description>&lt;div class="snap_preview"&gt;&lt;br /&gt;&lt;div class="wp-caption alignleft" style="width: 225px;"&gt;&lt;img title="Instalando o Ruby e RubyGems no Ubuntu" class="size-full wp-image-493" src="http://andreferraro.files.wordpress.com/2009/12/ruby-on-rails-dia-1a.jpg?w=215&amp;amp;#038;h=300" height="300" alt="Instalando o Ruby e RubyGems no Ubuntu" width="215" /&gt;&lt;p class="wp-caption-text"&gt;Instalando o Ruby e RubyGems no Ubuntu&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;Depois do &lt;em&gt;post&lt;/em&gt; introdutório sobre Ruby (&lt;a href="http://andreferraro.wordpress.com/2009/12/16/15-dias-on-rails-dia-1-introducao-ao-ruby/" title="15 dias on Rails – Dia 1 – Introdução ao Ruby" target="_self"&gt;Introdução ao Ruby&lt;/a&gt;) e antes de iniciar minha trajetória no &lt;strong&gt;Ruby on Rails&lt;/strong&gt;, preciso instalar o &lt;strong&gt;Ruby&lt;/strong&gt; e o &lt;strong&gt;RubyGems&lt;/strong&gt; em meu computador que tem o Ubuntu como sistema operacional. O processo de instalação é bem tranquilo e instalar o Ruby e o RubyGems no Ubuntu é fácil. Antes de instalar vamos atualizar nossa lista de repositórios e também nosso sistema.&lt;span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;$ sudo apt-get update&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;$ sudo apt-get upgrade&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Depois de atualizarmos nosso Ubuntu, então vamos instalar o Ruby. Para isso execute o comando:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;$ sudo apt-get install ruby build-essential libopenssl-ruby ruby1.8-dev&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Os pacotes que serão instalados são:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Ruby&lt;/strong&gt; &amp;#8211; é o pacote que contém o Ruby;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Build-Essential&lt;/strong&gt; &amp;#8211; este pacote contém uma lista informativa de pacotes que são considerados essenciais para a construção de pacotes Debian;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;LibOpenSSL-Ruby&lt;/strong&gt; &amp;#8211; este pacote faz com que o Ruby esteja habilitado para usar a OpenSSL (basicamente utilizado para criptografia);&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ruby1.8-Dev&lt;/strong&gt; &amp;#8211; necessário para compilar módulos Ruby.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Após termos instalado o Ruby, então vamos verificar se tudo correu bem. Primeiramente vamos confirmar a versão instalada:&lt;br /&gt;
&lt;code&gt;$ ruby -v&lt;/code&gt;&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;ruby 1.8.7 (2009-06-12 patchlevel 174) [i486-linux]&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Agora vamos fazer um &amp;#8220;Alo Mundo&amp;#8221; só pra receber um &lt;em&gt;feedback&lt;/em&gt; que está tudo ok:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;$ ruby -ropenssl -rzlib -rreadline -e "puts :'Ola Mundo'";&lt;/code&gt;&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;Ola Mundo&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Pronto. Agora só falta instalar o RubyGems para o básico do Ruby estar presente em seu Ubuntu. Para isso vamos executar o comando:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;$ sudo apt-get install rubygems&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Após instalado, então também vamos ver se está ok. Eu sempre executo o comando com o parâmetro solicitando a versão:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;$ gem -v&lt;/code&gt;&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;1.3.5&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Tudo funcionando&amp;#8230; o próximo passo é conhecer e entender como funciona o Ruby on Rails.&lt;/p&gt;
&lt;h2&gt;15 dias on Rails&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://andreferraro.wordpress.com/2009/12/14/15-dias-on-rails-dia-0/" title="15 dias on Rails – Dia 0" target="_self"&gt;Dia 0&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Dia 1
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://andreferraro.wordpress.com/2009/12/16/15-dias-on-rails-dia-1-introducao-ao-ruby/" title="15 dias on Rails – Dia 1 – Introdução ao Ruby" target="_self"&gt;Introdução ao Ruby&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://andreferraro.wordpress.com/2009/12/16/15-dias-on-rails-instalando-rubygems-ubuntu/" title="15 dias on Rails – Dia 1 – Instalando o Ruby e RubyGems no Ubuntu" target="_self"&gt;Instalando o Ruby e RubyGems no Ubuntu&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Básico do Ruby on Rails&lt;/h2&gt;
&lt;p&gt;&lt;object data="http://static.slideshare.net/swf/ssplayer2.swf?id=2711021&amp;amp;#038;doc=rubyonrails-introducao-091213165942-phpapp01" type="application/x-shockwave-flash" height="418" width="510"&gt;&lt;param name="movie" value="http://static.slideshare.net/swf/ssplayer2.swf?id=2711021&amp;amp;#038;doc=rubyonrails-introducao-091213165942-phpapp01" /&gt;&lt;param name="allowFullScreen" value="true" /&gt;&lt;param name="allowScriptAccess" value="always" /&gt;&lt;/object&gt;&lt;/p&gt;
Posted in 5584 Tagged: apt-get, howto, ruby, ruby on rails, rubygems, tutorial, ubuntu &lt;a href="http://feeds.wordpress.com/1.0/gocomments/andreferraro.wordpress.com/489/"&gt;&lt;img src="http://feeds.wordpress.com/1.0/comments/andreferraro.wordpress.com/489/" border="0" alt="" /&gt;&lt;/a&gt; &lt;a href="http://feeds.wordpress.com/1.0/godelicious/andreferraro.wordpress.com/489/"&gt;&lt;img src="http://feeds.wordpress.com/1.0/delicious/andreferraro.wordpress.com/489/" border="0" alt="" /&gt;&lt;/a&gt; &lt;a href="http://feeds.wordpress.com/1.0/gostumble/andreferraro.wordpress.com/489/"&gt;&lt;img src="http://feeds.wordpress.com/1.0/stumble/andreferraro.wordpress.com/489/" border="0" alt="" /&gt;&lt;/a&gt; &lt;a href="http://feeds.wordpress.com/1.0/godigg/andreferraro.wordpress.com/489/"&gt;&lt;img src="http://feeds.wordpress.com/1.0/digg/andreferraro.wordpress.com/489/" border="0" alt="" /&gt;&lt;/a&gt; &lt;a href="http://feeds.wordpress.com/1.0/goreddit/andreferraro.wordpress.com/489/"&gt;&lt;img src="http://feeds.wordpress.com/1.0/reddit/andreferraro.wordpress.com/489/" border="0" alt="" /&gt;&lt;/a&gt; &lt;img src="http://stats.wordpress.com/b.gif?host=andreferraro.wordpress.com&amp;amp;blog=6980461&amp;amp;post=489&amp;amp;subd=andreferraro&amp;amp;ref=&amp;amp;feed=1" border="0" alt="" /&gt;&lt;/div&gt;</description><pubDate>Thu, 17 Dec 2009 04:01:27 -0200</pubDate><link>http://softwarelivre.org/andre-ferraro/blog/15-dias-on-rails-dia-1-instalando-o-ruby-e-rubygems-no-ubuntu</link><guid>http://softwarelivre.org/andre-ferraro/blog/15-dias-on-rails-dia-1-instalando-o-ruby-e-rubygems-no-ubuntu</guid></item><item><title>15 dias on Rails – Dia 1 – Introdução ao Ruby</title><description>&lt;div class="snap_preview"&gt;&lt;br /&gt;&lt;div class="wp-caption aligncenter" style="width: 507px;"&gt;&lt;img title="15 dias on Rails - Dia 1 - Introdução" class="size-full wp-image-468" src="http://andreferraro.files.wordpress.com/2009/12/ruby-on-rails-dia-1.jpg?w=497&amp;amp;#038;h=173" height="173" alt="15 dias on Rails - Dia 1 - Introdução" width="497" /&gt;&lt;p class="wp-caption-text"&gt;15 dias on Rails - Dia 1 - Introdução ao Ruby&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;O primeiro dia estudando &lt;strong&gt;Ruby on Rails&lt;/strong&gt; serviu para relembrar a origem deste framework, ou seja, fui reler sobre Ruby e seu paradigma, ví algumas apresentações no Slideshare e vídeos no Youtube. Aproveitei também para atualizar minha lista de pessoas que sigo no Twitter e adicionar algumas pessoas interessantes.&lt;span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h2&gt;A origem do Ruby&amp;#8230;&lt;/h2&gt;
&lt;p&gt;Para começar em Ruby on Rails é necessário conhecer e entender um pouco da linguagem &lt;strong&gt;Ruby&lt;/strong&gt;. Criado pelo japonês &lt;strong&gt;Matz&lt;/strong&gt; (Yukihiro Matsumoto) em 1995.&lt;/p&gt;
&lt;p&gt;Gosto muito da definição dada pelo site Ruby-Lang.org (&lt;a href="http://www.ruby-lang.org/pt/" title="Linguagem de Programação Ruby" target="_blank"&gt;http://www.ruby-lang.org/pt/&lt;/a&gt;):&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;Uma linguagem dinâmica, open source com foco na simplicidade e na produtividade. Tem uma sintaxe elegante de leitura natural e fácil escrita.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Segundo a &lt;a href="http://pt.wikipedia.org/wiki/Ruby_(linguagem_de_programação)" title="Wikipedia: Ruby" target="_blank"&gt;Wikipedia&lt;/a&gt;, Ruby é:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;Ruby é uma Linguagem de programação interpretada, com Tipagem Dinâmica e forte, orientada a objetos e, com várias semelhanças com Perl, Python e SmallTalk.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Segundo o site oficial, Matz reuniu também um pouco de suas linguagens favoritas Eiffel, Ada, e Lisp na criação do Ruby.&lt;/p&gt;
&lt;p&gt;Em &lt;strong&gt;Ruby&lt;/strong&gt;, tudo é um objeto. Cada trecho de informação e código podem receber as suas próprias propriedades e ações.&lt;/p&gt;
&lt;p&gt;Até o momento já foi lançada a versão 1.9.x do Ruby que basicamente corrige falhas de segurança da versão 1.8.x&lt;/p&gt;
&lt;p&gt;O Ruby está caminhando para a versão 2.0 que tem como principal vedete o projeto &lt;a href="http://www.atdot.net/yarv/" title="YARV: Yet another Ruby VM" target="_blank"&gt;YARV&lt;/a&gt; (&lt;strong&gt;Y&lt;/strong&gt;et &lt;strong&gt;A&lt;/strong&gt;nother &lt;strong&gt;R&lt;/strong&gt;uby &lt;strong&gt;V&lt;/strong&gt;M) que adiciona uma máquina virtual para acelerar a execução e fornecer um &lt;em&gt;&lt;a href="http://pt.wikipedia.org/wiki/Bytecode" title="Wikipedia: Bytecode" target="_blank"&gt;bytecode&lt;/a&gt;&lt;/em&gt; para compilação de scripts &lt;strong&gt;Ruby&lt;/strong&gt;. &lt;em&gt;&amp;#8220;Olha o Ruby executável aí gente!&amp;#8221;&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;Multi-plataforma&lt;/h2&gt;
&lt;p&gt;Esse é uma das características que mais me agradam em Ruby. Como o Java, C, Python entre outras, o Ruby é totalmente independente de plataforma, podendo ser utilizado tanto no Linux (minha preferência), quanto no Windows e também no Mac OS.&lt;/p&gt;
&lt;p&gt;Além de ser multi-plataforma o Ruby também possui implementações como o JRuby para Java e o IronRuby e Ruby.NET para a plataforma .NET da Microsoft.&lt;/p&gt;
&lt;h2&gt;IRB (&lt;em&gt;Interactive Ruby Shell&lt;/em&gt;)&lt;/h2&gt;
&lt;div class="wp-caption alignleft" style="width: 86px;"&gt;&lt;img title="IRB - Interative Ruby Shell" class="size-full wp-image-479" src="http://andreferraro.files.wordpress.com/2009/12/consoleirb.png?w=76&amp;amp;#038;h=76" height="76" alt="IRB - Interative Ruby Shell" width="76" /&gt;&lt;p class="wp-caption-text"&gt;IRBInteractive Ruby Shell&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;O IRB é um terminal interativo para Ruby. Básicamente você digita seus trechos de códigos Ruby e estes trechos são executados e retornados pelo IRB. Sua utilidade básica é testar trechos de códigos Ruby antes de inseri-los em seu programa, permitindo assim um teste simples que pode possibilitar uma rápida correção.&lt;/p&gt;
&lt;p&gt;No Linux, caso você tenha o Ruby instalado (veja mais abaixo: &lt;strong&gt;Instalando o Ruby no Ubuntu&lt;/strong&gt;). Basta acessar o console (terminal) e digitar &lt;strong&gt;irb&lt;/strong&gt; na linha de comandos:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;$ irb&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;A partir daí o IRB já está esperando pelos seus códigos. Por exemplo:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;$ irb&lt;/code&gt;&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;code&gt;irb(main):001:0&amp;gt; def media a, b&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;irb(main):002:1&amp;gt; (a + b) /2&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;irb(main):003:1&amp;gt; end&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;=&amp;gt; nil&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;irb(main):004:0&amp;gt; media 10, 20&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;=&amp;gt; 15&lt;/code&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;h2&gt;RubyGems, o APT do Ruby&lt;/h2&gt;
&lt;div class="wp-caption alignright" style="width: 86px;"&gt;&lt;img title="Ruby Gems" class="size-full wp-image-482" src="http://andreferraro.files.wordpress.com/2009/12/rubygems.png?w=76&amp;amp;#038;h=65" height="65" alt="Ruby Gems" width="76" /&gt;&lt;p class="wp-caption-text"&gt;Ruby Gems&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;RubyGems é um gerenciador de pacotes (os pacotes são chamados de gema ou &lt;em&gt;gem&lt;/em&gt; em inglês) no estilo &lt;a href="http://pt.wikipedia.org/wiki/Advanced_Packaging_Tool" title="Wikipedia: APT - Advanced Packaging Tool" target="_blank"&gt;APT&lt;/a&gt; das distribuições baseadas em Debian (isso inclui o Ubuntu), porém o RubyGems é para Ruby (meio óbivo, né?) e fornece um formato padrão para distribuição de bibliotecas e até programas escritos em Ruby. O RubyGems agora é uma biblioteca padrão da versão 1.9 do Ruby.&lt;/p&gt;
&lt;h3&gt;Características e Funcionalidades do RubyGems&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Fácil instalação e exclusão de pacotes RubyGems (e suas dependêncis também);&lt;/li&gt;
&lt;li&gt;Gerenciamento e controle dos pacotes &amp;#8220;baixados&amp;#8221;;&lt;/li&gt;
&lt;li&gt;Gerenciamento de dependência de pacotes;&lt;/li&gt;
&lt;li&gt;Consulta e listagem de pacotes instalados (locais) e remotos;&lt;/li&gt;
&lt;li&gt;Suporte a instalação de múltiplas versões de um pacote;&lt;/li&gt;
&lt;li&gt;Interface web para visualizar a documentação das gemas (&lt;em&gt;gems&lt;/em&gt;) instaladas;&lt;/li&gt;
&lt;li&gt;Interface que permite a criação dos suas próprias gemas.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;O RubyGems torna fácil, bem fácil, tarefa de instalar (ou remover) um plugin ou um programa em Ruby.&lt;/p&gt;
&lt;p&gt;Veja mais em: &lt;a href="http://www.rubygems.org/" title="RubyGems" target="_blank"&gt;www.rubygems.org&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Agora já conhecemos o básico sobre Ruby no próximo post vamos instalar o Ruby e o RubyGems no Ubuntu. Até a próxima.&lt;/p&gt;
&lt;h2&gt;Mapa Mental utilizado neste &lt;em&gt;post&lt;/em&gt;&lt;/h2&gt;
&lt;p&gt;&lt;em&gt; &lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt; &lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt; &lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt; &lt;/em&gt;&lt;/p&gt;
&lt;p style="text-align: center;"&gt;&lt;em&gt; &lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;/p&gt;
&lt;div class="wp-caption aligncenter" style="width: 500px;"&gt;&lt;a href="http://andreferraro.files.wordpress.com/2009/12/mapa-mental-introducao-ruby.png?w=900"&gt;&lt;img title="Mapa Mental - Introdução ao Ruby" class="size-medium wp-image-500 " src="http://andreferraro.files.wordpress.com/2009/12/mapa-mental-introducao-ruby.png?w=490&amp;amp;#038;h=229" height="229" alt="Mapa Mental - Introdução ao Ruby" width="490" /&gt;&lt;/a&gt;&lt;p class="wp-caption-text"&gt;Mapa Mental - Introdução ao Ruby&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;15 dias on Rails&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://andreferraro.wordpress.com/2009/12/14/15-dias-on-rails-dia-0/" title="15 dias on Rails – Dia 0" target="_self"&gt;Dia 0&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Dia 1
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://andreferraro.wordpress.com/2009/12/16/15-dias-on-rails-dia-1-introducao-ao-ruby/" title="15 dias on Rails – Dia 1 – Introdução ao Ruby" target="_self"&gt;Introdução ao Ruby&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://andreferraro.wordpress.com/2009/12/16/15-dias-on-rails-instalando-rubygems-ubuntu/" title="15 dias on Rails – Dia 1 – Instalando o Ruby e RubyGems no Ubuntu" target="_self"&gt;Instalando o Ruby e RubyGems no Ubuntu&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Básico do Ruby on Rails&lt;/h2&gt;
&lt;p&gt;&lt;object data="http://static.slideshare.net/swf/ssplayer2.swf?id=2711021&amp;amp;#038;doc=rubyonrails-introducao-091213165942-phpapp01" type="application/x-shockwave-flash" height="418" width="510"&gt;&lt;param name="movie" value="http://static.slideshare.net/swf/ssplayer2.swf?id=2711021&amp;amp;#038;doc=rubyonrails-introducao-091213165942-phpapp01" /&gt;&lt;param name="allowFullScreen" value="true" /&gt;&lt;param name="allowScriptAccess" value="always" /&gt;&lt;/object&gt;&lt;/p&gt;
Posted in Programação Tagged: bytecode, irb, ironruby, jruby, linguagem interpretada, oop, orientação à objetos, rails, ruby, ruby on rails, ruby.net, rubygems, ubuntu, yarv &lt;a href="http://feeds.wordpress.com/1.0/gocomments/andreferraro.wordpress.com/467/"&gt;&lt;img src="http://feeds.wordpress.com/1.0/comments/andreferraro.wordpress.com/467/" border="0" alt="" /&gt;&lt;/a&gt; &lt;a href="http://feeds.wordpress.com/1.0/godelicious/andreferraro.wordpress.com/467/"&gt;&lt;img src="http://feeds.wordpress.com/1.0/delicious/andreferraro.wordpress.com/467/" border="0" alt="" /&gt;&lt;/a&gt; &lt;a href="http://feeds.wordpress.com/1.0/gostumble/andreferraro.wordpress.com/467/"&gt;&lt;img src="http://feeds.wordpress.com/1.0/stumble/andreferraro.wordpress.com/467/" border="0" alt="" /&gt;&lt;/a&gt; &lt;a href="http://feeds.wordpress.com/1.0/godigg/andreferraro.wordpress.com/467/"&gt;&lt;img src="http://feeds.wordpress.com/1.0/digg/andreferraro.wordpress.com/467/" border="0" alt="" /&gt;&lt;/a&gt; &lt;a href="http://feeds.wordpress.com/1.0/goreddit/andreferraro.wordpress.com/467/"&gt;&lt;img src="http://feeds.wordpress.com/1.0/reddit/andreferraro.wordpress.com/467/" border="0" alt="" /&gt;&lt;/a&gt; &lt;img src="http://stats.wordpress.com/b.gif?host=andreferraro.wordpress.com&amp;amp;blog=6980461&amp;amp;post=467&amp;amp;subd=andreferraro&amp;amp;ref=&amp;amp;feed=1" border="0" alt="" /&gt;&lt;/div&gt;</description><pubDate>Thu, 17 Dec 2009 04:01:26 -0200</pubDate><link>http://softwarelivre.org/andre-ferraro/blog/15-dias-on-rails-dia-1-introducao-ao-ruby</link><guid>http://softwarelivre.org/andre-ferraro/blog/15-dias-on-rails-dia-1-introducao-ao-ruby</guid></item><item><title>15 dias on Rails – Dia 0</title><description>&lt;div class="snap_preview"&gt;&lt;br /&gt;&lt;div class="wp-caption alignleft" style="width: 225px;"&gt;&lt;img title="15 dias on Rails - Dia 0" class="size-full wp-image-450" src="http://andreferraro.files.wordpress.com/2009/12/ruby-on-rails-dia-0.jpg?w=215&amp;amp;#038;h=300" height="300" alt="15 dias on Rails - Dia 0" width="215" /&gt;&lt;p class="wp-caption-text"&gt;15 dias on Rails - Dia 0&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;Fiquei um pouco afastado do &lt;em&gt;blog&lt;/em&gt; devido a grande carga de trabalho para iniciar os trabalhos da &lt;a href="http://www.mundoclick.com.br" title="MundoClick Produtora Web" target="_blank"&gt;MundoClick Produtora Web&lt;/a&gt; focada em soluções para pequenas empresas e que utiliza softwares &lt;em&gt;open source&lt;/em&gt; em sua gama de soluções.&lt;/p&gt;
&lt;p&gt;Voltando ao &lt;em&gt;blog&lt;/em&gt;, a partir de amanhã vou dedicar &lt;strong&gt;15 dias sobre Ruby on Rails&lt;/strong&gt;, apesar de já estudar  esse &lt;em&gt;framework&lt;/em&gt; a mais de 2 meses, agora vou fazer de forma metódica e separar este período para mostrar minha experiência no desenvolvimento de uma aplicação web para o ramo automotivo.&lt;/p&gt;
&lt;p&gt;No primeiro dia vou postar o básico sobre &lt;strong&gt;Ruby on Rails&lt;/strong&gt;, ou seja, vou começar pelo “o que é Ruby on Rails”, como surgiu, o que é &lt;strong&gt;MVC&lt;/strong&gt;, conceito &lt;strong&gt;DRY&lt;/strong&gt;, &lt;strong&gt;Ruby Gems&lt;/strong&gt;, qual é sua estrutura de diretórios, sites desenvolvidos em Rails e também alguns links interessantes.&lt;span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Ao longo dos quinze dias vou colocando como instalar o Ruby on Rails com &lt;strong&gt;Phusion Passenger&lt;/strong&gt; e &lt;strong&gt;Ruby Enterprise Edition&lt;/strong&gt; no &lt;strong&gt;Ubuntu Hardy&lt;/strong&gt; (Ubuntu 8.04 LTS), depois vou documentar minha experiência de autenticação com o plugin &lt;strong&gt;AuthLogic&lt;/strong&gt;, como fazer upload de arquivos com o &lt;strong&gt;Paperclip&lt;/strong&gt;, como funciona o &lt;strong&gt;RestFUL&lt;/strong&gt;, o &lt;strong&gt;ActiveRecord&lt;/strong&gt;, o funcionamento do &lt;strong&gt;ORM&lt;/strong&gt; do Rails, utilização do Ajax entre outras coisas.&lt;/p&gt;
&lt;p&gt;Por enquanto, segue a apresentação básica de Rails que subi no Slideshare.net&lt;br /&gt;
&lt;object data="http://static.slideshare.net/swf/ssplayer2.swf?id=2711021&amp;amp;#038;doc=rubyonrails-introducao-091213165942-phpapp01" type="application/x-shockwave-flash" height="418" width="510"&gt;&lt;param name="movie" value="http://static.slideshare.net/swf/ssplayer2.swf?id=2711021&amp;amp;#038;doc=rubyonrails-introducao-091213165942-phpapp01" /&gt;&lt;param name="allowFullScreen" value="true" /&gt;&lt;param name="allowScriptAccess" value="always" /&gt;&lt;/object&gt;&lt;/p&gt;
Posted in Programação Tagged: 15 dias, authlogic, framework, paperclip, rails, ruby, ruby on rails &lt;a href="http://feeds.wordpress.com/1.0/gocomments/andreferraro.wordpress.com/447/"&gt;&lt;img src="http://feeds.wordpress.com/1.0/comments/andreferraro.wordpress.com/447/" border="0" alt="" /&gt;&lt;/a&gt; &lt;a href="http://feeds.wordpress.com/1.0/godelicious/andreferraro.wordpress.com/447/"&gt;&lt;img src="http://feeds.wordpress.com/1.0/delicious/andreferraro.wordpress.com/447/" border="0" alt="" /&gt;&lt;/a&gt; &lt;a href="http://feeds.wordpress.com/1.0/gostumble/andreferraro.wordpress.com/447/"&gt;&lt;img src="http://feeds.wordpress.com/1.0/stumble/andreferraro.wordpress.com/447/" border="0" alt="" /&gt;&lt;/a&gt; &lt;a href="http://feeds.wordpress.com/1.0/godigg/andreferraro.wordpress.com/447/"&gt;&lt;img src="http://feeds.wordpress.com/1.0/digg/andreferraro.wordpress.com/447/" border="0" alt="" /&gt;&lt;/a&gt; &lt;a href="http://feeds.wordpress.com/1.0/goreddit/andreferraro.wordpress.com/447/"&gt;&lt;img src="http://feeds.wordpress.com/1.0/reddit/andreferraro.wordpress.com/447/" border="0" alt="" /&gt;&lt;/a&gt; &lt;img src="http://stats.wordpress.com/b.gif?host=andreferraro.wordpress.com&amp;amp;blog=6980461&amp;amp;post=447&amp;amp;subd=andreferraro&amp;amp;ref=&amp;amp;feed=1" border="0" alt="" /&gt;&lt;/div&gt;</description><pubDate>Tue, 15 Dec 2009 04:01:09 -0200</pubDate><link>http://softwarelivre.org/andre-ferraro/blog/15-dias-on-rails-dia-0</link><guid>http://softwarelivre.org/andre-ferraro/blog/15-dias-on-rails-dia-0</guid></item><item><title>Redes: O que é e como funciona um servidor DHCP</title><description>&lt;div class="snap_preview"&gt;&lt;br /&gt;&lt;div class="wp-caption alignleft" style="width: 225px;"&gt;&lt;img title="Entenda o funcionamento do DHCP" class="size-full wp-image-414" src="http://andreferraro.files.wordpress.com/2009/05/dhcp.jpg?w=215&amp;amp;#038;h=300" height="300" alt="Entenda o funcionamento do DHCP" width="215" /&gt;&lt;p class="wp-caption-text"&gt;Entenda o funcionamento do DHCP&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;Considero o &lt;strong&gt;DHCP&lt;/strong&gt; como um dos mais importantes serviços dentro da infra-estrutura de uma rede. É extremamente importante, pois é um grande facilitador tanto para o administrador da rede devido à atribuição de endereços &lt;em&gt;IPs&lt;/em&gt; dinamicamente, quanto aos usuários, pois não necessita qualquer interferência nas configurações da máquina para conectar-se à rede.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;O &lt;strong&gt;DHCP&lt;/strong&gt; ou &lt;em&gt;Dynamic Host Configuration Protocol&lt;/em&gt; é o serviço que centraliza a distribuição de configurações de endereçamento &lt;em&gt;IP&lt;/em&gt; de uma rede. &lt;span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;É possível atribuir &lt;em&gt;IPs&lt;/em&gt; de três maneiras diferentes, inclusive combinando-as:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt; &lt;strong&gt;Dinâmica&lt;/strong&gt; – método mais comum, pois o &lt;strong&gt;servidor DHCP&lt;/strong&gt; oferece as configurações de rede, porém estas não são permanentes e após certo período, geralmente após a máquina 	cliente ser desligada ou reiniciada, o endereçamento é atualizado;&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Automática&lt;/strong&gt; – semelhante a configuração dinâmica. Sua principal diferença é que o servidor &lt;strong&gt;DHCP&lt;/strong&gt; irá “preferir” fornecer o mesmo endereçamento utilizado na última solicitação de informações.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Manual&lt;/strong&gt; – o administrador vincula o &lt;a href="http://pt.wikipedia.org/wiki/Endereço_MAC" title="Wikipedia: Endereço MAC / MAC Address" target="_blank"&gt;&lt;em&gt;MAC Address&lt;/em&gt;&lt;/a&gt; do equipamento cliente a um endereço &lt;em&gt;IP&lt;/em&gt;;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Como funciona o serviço DHCP?&lt;/h2&gt;
&lt;p&gt; &lt;/p&gt;
&lt;div class="wp-caption alignleft" style="width: 220px;"&gt;&lt;a href="http://andreferraro.files.wordpress.com/2009/05/diagrama-funcionamento-dhcp.png" title="Diagrama DHCP"&gt;&lt;img title="Diagrama: Como funciona o DHCP" class="size-medium wp-image-403 " src="http://andreferraro.files.wordpress.com/2009/05/diagrama-funcionamento-dhcp.png?w=210&amp;amp;#038;h=330" height="330" alt="Diagrama: Como funciona o DHCP" width="210" /&gt;&lt;/a&gt;&lt;p class="wp-caption-text"&gt;Diagrama: Como funciona o DHCP&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;Para entendermos como funciona o processo de distribuição feita pelo &lt;strong&gt;servidor DHCP&lt;/strong&gt; vamos interpretar a imagem:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt; O computador cliente envia um pacote &lt;a href="http://pt.wikipedia.org/wiki/Protocolo_UDP" title="Wikipedia: Protocolo UDP" target="_blank"&gt;&lt;em&gt;UDP&lt;/em&gt;&lt;/a&gt; chamado de &lt;strong&gt;DHCPDiscover&lt;/strong&gt; para todos os equipamentos da rede (&lt;a href="http://en.wikipedia.org/wiki/Broadcasting_(computing)" title="Wikipedia: Broadcast" target="_blank"&gt;&lt;em&gt;broadcast&lt;/em&gt;&lt;/a&gt;);&lt;/li&gt;
&lt;li&gt; O computador responsável pelo serviço &lt;strong&gt;DHCP&lt;/strong&gt; responderá ao &lt;em&gt;DHCPDiscover&lt;/em&gt; oferecendo o endereçamento &lt;em&gt;IP&lt;/em&gt; para o cliente. Este passo é feito via o pacote &lt;strong&gt;DHCPOffer&lt;/strong&gt;;&lt;/li&gt;
&lt;li&gt; O computador cliente, então recebe o pacote &lt;em&gt;DHCPOffer&lt;/em&gt; e envia um pacote ao servidor  solicitando um “empréstimo” (&lt;em&gt;lease&lt;/em&gt;) das informações previamente oferecidas pelo &lt;em&gt;servidor DHCP&lt;/em&gt;. Este pacote é chamado de &lt;strong&gt;DHCPRequest&lt;/strong&gt;;&lt;/li&gt;
&lt;li&gt; O servidor &lt;em&gt;DHCP&lt;/em&gt; recebe o pacote &lt;em&gt;DHCPRequest&lt;/em&gt; por parte do cliente e reserva o endereçamento previamente oferecido. Por fim, o servidor DHCP também confirma o recebimento da solicitação do “empréstimo” com o pacote &lt;strong&gt;DHCP Ack&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Esse &lt;em&gt;post&lt;/em&gt; foi uma introdução a uma série sobre DHCP, DHCP e BIND, DHCP, BIND e Active Directory.&lt;/p&gt;
&lt;h2&gt;Fontes e Referências&lt;/h2&gt;
&lt;li&gt;&lt;a href="http://pt.wikipedia.org/wiki/DHCP" title="Wikipedia: DHCP" target="_blank"&gt;DHCP&lt;/a&gt;;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Dynamic_Host_Configuration_Protocol" title="Wikipedia: Dynamic Host Configuration Protocol" target="_blank"&gt;DHCP (em inglês)&lt;/a&gt;;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.ucb.br/prg/professores/maurot/RC-II-Mat/RCII-Mat_arqs/DHCP/DHCP.html" title="O protocolo DHCP" target="_blank"&gt;O protocolo DHCP&lt;/a&gt;;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://pt.wikipedia.org/wiki/Protocolo_UDP" title="Wikipedia: Protocolo UDP" target="_blank"&gt;Protocolo UDP&lt;/a&gt;;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://pt.wikipedia.org/wiki/Transmission_Control_Protocol" title="Wikipedia: TCP" target="_blank"&gt;TCP&lt;/a&gt;;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://technet.microsoft.com/en-us/library/cc940466.aspx" target="_blank"&gt;DHCP Across IP Routers&lt;/a&gt;;&lt;/li&gt;
Posted in Redes Tagged: dhcp, dhcpack, dhcpdiscover, dhcpoffer, dhcprequest, Redes, servidor, servidor dhcp &lt;a href="http://feeds.wordpress.com/1.0/gocomments/andreferraro.wordpress.com/402/"&gt;&lt;img src="http://feeds.wordpress.com/1.0/comments/andreferraro.wordpress.com/402/" border="0" alt="" /&gt;&lt;/a&gt; &lt;a href="http://feeds.wordpress.com/1.0/godelicious/andreferraro.wordpress.com/402/"&gt;&lt;img src="http://feeds.wordpress.com/1.0/delicious/andreferraro.wordpress.com/402/" border="0" alt="" /&gt;&lt;/a&gt; &lt;a href="http://feeds.wordpress.com/1.0/gostumble/andreferraro.wordpress.com/402/"&gt;&lt;img src="http://feeds.wordpress.com/1.0/stumble/andreferraro.wordpress.com/402/" border="0" alt="" /&gt;&lt;/a&gt; &lt;a href="http://feeds.wordpress.com/1.0/godigg/andreferraro.wordpress.com/402/"&gt;&lt;img src="http://feeds.wordpress.com/1.0/digg/andreferraro.wordpress.com/402/" border="0" alt="" /&gt;&lt;/a&gt; &lt;a href="http://feeds.wordpress.com/1.0/goreddit/andreferraro.wordpress.com/402/"&gt;&lt;img src="http://feeds.wordpress.com/1.0/reddit/andreferraro.wordpress.com/402/" border="0" alt="" /&gt;&lt;/a&gt; &lt;img src="http://stats.wordpress.com/b.gif?host=andreferraro.wordpress.com&amp;amp;blog=6980461&amp;amp;post=402&amp;amp;subd=andreferraro&amp;amp;ref=&amp;amp;feed=1" border="0" alt="" /&gt;&lt;/div&gt;</description><pubDate>Tue, 02 Jun 2009 03:10:57 -0300</pubDate><link>http://softwarelivre.org/andre-ferraro/blog/redes-o-que-e-e-como-funciona-um-servidor-dhcp</link><guid>http://softwarelivre.org/andre-ferraro/blog/redes-o-que-e-e-como-funciona-um-servidor-dhcp</guid></item><item><title>Linux: Integrando BIND do Debian Lenny 5.0 com Active Directory do Windows 2003 Server</title><description>&lt;div class="snap_preview"&gt;&lt;br /&gt;&lt;div class="wp-caption alignleft" style="width: 225px;"&gt;&lt;img title="Linux: Integrando BIND do Debian Lenny 5.0 com Active Directory do Windows 2003 Server" class="size-full wp-image-176" src="http://andreferraro.files.wordpress.com/2009/04/ubuntu-bind-dns-ad.jpg?w=215&amp;amp;#038;h=300" height="300" alt="Linux: Integrando BIND do Debian Lenny 5.0 com Active Directory do Windows 2003 Server" width="215" /&gt;&lt;p class="wp-caption-text"&gt;Linux: Integrando BIND do Debian Lenny 5.0 com Active Directory do Windows 2003 Server&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;Uma dor de cabeça tremenda! É assim que classifico os depoimentos lidos em fóruns e listas de discussão quando o assunto é integrar o &lt;strong&gt;BIND&lt;/strong&gt; (&lt;em&gt;servidor de nomes – DNS&lt;/em&gt;) do &lt;em&gt;Linux&lt;/em&gt; com o &lt;strong&gt;Active Directory&lt;/strong&gt; do &lt;em&gt;Windows 2003 Server&lt;/em&gt;. Eu realmente levei um bom tempo para conseguir cumprir esta tarefa, mas o mais interessante é que o processo de configuração é extremamente simples, porém não considero que o processo abaixo descrito possui as considerações de &lt;span style="text-decoration: underline;"&gt;segurança&lt;/span&gt; mínima.&lt;/p&gt;
&lt;p&gt; Para executar as configurações abaixo utilizei o ambiente descrito no &lt;em&gt;post&lt;/em&gt;: &lt;a href="http://andreferraro.wordpress.com/2009/04/13/linux-bind-dns-apache-ddns-active-directory-ubuntu/"&gt;Bind (DNS), Apache, DNS Cache, DDNS e integração com Active Directory&lt;/a&gt;.&lt;span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h2&gt;Configurando a atualização dinâmica (dynamic update) no BIND&lt;/h2&gt;
&lt;p&gt;Lembrando que, em nosso ambiente, o &lt;strong&gt;Active Directory&lt;/strong&gt;, cujo nome (&lt;em&gt;hostname&lt;/em&gt;) é &lt;em&gt;amoroso.bugre.local&lt;/em&gt;, está configurado para responder no IP &lt;em&gt;192.168.0.3&lt;/em&gt;. Já o &lt;strong&gt;servidor de nomes&lt;/strong&gt; (&lt;em&gt;DNS&lt;/em&gt;), que atende pelo nome &lt;em&gt;zenon.bugre.local&lt;/em&gt; está configurado com o IP &lt;em&gt;192.168.0.2&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Vale ressaltar também que já fizemos a instalação do &lt;strong&gt;BIND&lt;/strong&gt; no &lt;em&gt;post&lt;/em&gt; &lt;a href="http://andreferraro.wordpress.com/2009/04/15/linux-instalacao-do-bind-cache-de-dns-logging-e-bindgraph-no-ubuntu-intrepid-ibex-ubuntu-810/"&gt;Linux: Instalação do Bind, cache de DNS, logging e BindGraph no Ubuntu Intrepid Ibex (Ubuntu 8.10)&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;O primeiro passo é criar uma &lt;a href="http://pt.wikipedia.org/wiki/Access_Control_List"&gt;&lt;em&gt;ACL&lt;/em&gt;&lt;/a&gt;, que em meu exemplo, chama-se &lt;strong&gt;WinAD&lt;/strong&gt; no arquivo &lt;em&gt;/etc/bind/named.conf.local&lt;/em&gt;. Após criarmos a &lt;em&gt;ACL&lt;/em&gt;, então vamos editar as configurações da zona &lt;em&gt;bugre.local&lt;/em&gt;, para que seja permitida a atualização, consulta e transferência de zona pelo servidor &lt;em&gt;Windows 2003&lt;/em&gt; com &lt;em&gt;Active Directory&lt;/em&gt;. Depois vamos adicionar as mesmas regras na &lt;em&gt;zona reversa&lt;/em&gt;. Abaixo segue o trecho do arquivo &lt;strong&gt;named.conf.local&lt;/strong&gt;:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&lt;strong&gt;acl "WinAD" { 192.168.0.3; };&lt;/strong&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;zone "bugre.local" {&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;type master;&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;file "/etc/bind/zonas/db.bugre.local";&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;&lt;strong&gt;allow-update {WinAD;};&lt;/strong&gt;&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;&lt;strong&gt;allow-query {WinAD;};&lt;/strong&gt;&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;&lt;strong&gt;allow-transfer {WinAD;};&lt;/strong&gt;&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;};&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;zone "0.168.192.in-addr.arpa" {&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;type master;&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;notify no;&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;file "/etc/bind/zonas/db.192";&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;&lt;strong&gt;allow-update {WinAD;};&lt;/strong&gt;&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;&lt;strong&gt;allow-query {WinAD;};&lt;/strong&gt;&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;&lt;strong&gt;allow-transfer {WinAD;};&lt;/strong&gt;&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;};&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;As principais configurações, ou seja, que irão influenciar a comunicação entre o Active Directory e o BIND estão em &lt;strong&gt;negrito&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Agora vamos configurar as zonas necessárias para que o Active Directory funcione corretamente:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;zone "&lt;strong&gt;_msdcs&lt;/strong&gt;.bugre.local" {&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;check-names ignore;&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;type master;&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;file "/etc/bind/adzonas/_msdcs.bugre.local";&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;allow-update {WinAD;};&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;allow-query {WinAD;};&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;allow-transfer {WinAD;};&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;};&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;zone "&lt;strong&gt;_tcp&lt;/strong&gt;.bugre.local" {&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;check-names ignore;&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;type master;&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;file "/etc/bind/adzonas/_tcp.bugre.local";&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;allow-update {WinAD;};&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;allow-query {WinAD;};&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;allow-transfer {WinAD;};&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;};&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;zone "&lt;strong&gt;_udp&lt;/strong&gt;.bugre.local" {&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;check-names ignore;&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;type master;&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;file "/etc/bind/adzonas/_udp.bugre.local";&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;allow-update {WinAD;};&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;allow-query {WinAD;};&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;allow-transfer {WinAD;};&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;};&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;zone "&lt;strong&gt;_sites&lt;/strong&gt;.bugre.local" {&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;check-names ignore;&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;type master;&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;file "/etc/bind/adzonas/_sites.bugre.local";&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;allow-update {WinAD;};&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;allow-query {WinAD;};&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;allow-transfer {WinAD;};&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;};&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;zone "&lt;strong&gt;ForestDNSZones&lt;/strong&gt;.bugre.local" {&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;check-names ignore;&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;type master;&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;file "/etc/bind/adzonas/ForestDNSZones.bugre.local";&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;allow-update {WinAD;};&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;allow-query {WinAD;};&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;allow-transfer {WinAD;};&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;};&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;zone "&lt;strong&gt;DomainDNSZones&lt;/strong&gt;.bugre.local" {&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;check-names ignore;&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;type master;&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;file "/etc/bind/adzonas/DomainDNSZones.bugre.local";&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;allow-update {WinAD;};&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;allow-query {WinAD;};&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;allow-transfer {WinAD;};&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;};&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Após termos todas as zonas configuradas em nosso &lt;em&gt;named.conf.local&lt;/em&gt;, então agora precisamos criar o diretório das zonas, criar os arquivos de cada zona e por fim definir o usuário &lt;strong&gt;bind&lt;/strong&gt; como proprietário da pasta e dos arquivos.&lt;/p&gt;
&lt;p&gt;Serão necessários seis arquivos conforme a configuração acima. Abaixo segue a estrutura de cada um deles:&lt;/p&gt;
&lt;p&gt;Arquivo &lt;em&gt;/etc/bind/adzonas/DomainDNSZones.bugre.local&lt;/em&gt;:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;$TTL 3D&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;DomainDNSZones.bugre.local. IN      SOA     zenon.bugre.local.        root.zenon.bugre.local. (&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;        2009050301;Serial&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;        43200;Refresh&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;        900;Retry&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;        2419200;Expire&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;        3600);Negative Cache TTL&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;@       IN      NS      zenon.bugre.local.&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Arquivo &lt;em&gt;/etc/bind/adzonas/ForestDNSZones.bugre.local&lt;/em&gt;:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;$TTL 3D&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;ForestDNSZones.bugre.local. IN      SOA     zenon.bugre.local.        root.zenon.bugre.local. (&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;        2009050301;Serial&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;        43200;Refresh&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;        900;Retry&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;        2419200;Expire&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;        3600);Negative Cache TTL&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;@       IN      NS      zenon.bugre.local.&lt;/code&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Arquivo &lt;em&gt;/etc/bind/adzonas/_msdcs.bugre.local&lt;/em&gt;:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;$ORIGIN .&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;$TTL 3D&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;_msdcs.bugre.local. IN      SOA     zenon.bugre.local.        root.zenon.bugre.local. (&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;        2009050301;Serial&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;        43200;Refresh&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;        900;Retry&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;        2419200;Expire&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;        3600);Negative Cache TTL&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;@       IN      NS      zenon.bugre.local.&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;$ORIGIN _msdcs.mundoclick.corp.&lt;/code&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Arquivo &lt;em&gt;/etc/bind/adzonas/_sites.bugre.local&lt;/em&gt;:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;$ORIGIN .&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;$TTL 3D&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;_sites.bugre.local. IN      SOA     zenon.bugre.local.        root.zenon.bugre.local. (&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;        2009050301;Serial&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;        43200;Refresh&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;        900;Retry&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;        2419200;Expire&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;        3600);Negative Cache TTL&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;@       IN      NS      zenon.bugre.local.&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;$ORIGIN _sites.mundoclick.corp.&lt;/code&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Arquivo &lt;em&gt;/etc/bind/adzonas/_tcp.bugre.local&lt;/em&gt;:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;$ORIGIN .&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;$TTL 3D&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;_tcp.bugre.local. IN      SOA     zenon.bugre.local.        root.zenon.bugre.local. (&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;        2009050301;Serial&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;        43200;Refresh&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;        900;Retry&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;        2419200;Expire&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;        3600);Negative Cache TTL&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;@       IN      NS      zenon.bugre.local.&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;$ORIGIN _tcp.mundoclick.corp.&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Arquivo &lt;em&gt;/etc/bind/adzonas/_udp.bugre.local&lt;/em&gt;:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;$ORIGIN .&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;$TTL 3D&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;_udp.bugre.local. IN      SOA     zenon.bugre.local.        root.zenon.bugre.local. (&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;        2009050301;Serial&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;        43200;Refresh&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;        900;Retry&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;        2419200;Expire&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;        3600);Negative Cache TTL&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;@       IN      NS      zenon.bugre.local.&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;$ORIGIN _udp.mundoclick.corp.&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Após criarmos os seis arquivos contendo as configurações das zonas de &lt;strong&gt;DNS&lt;/strong&gt; para integração com o &lt;strong&gt;Active Directory&lt;/strong&gt;, agora precisamos definir o proprietário do diretório com o comando:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;# chown bind -R /etc/bind/adzonas&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Não esqueça de fazer o mesmo para o diretório onde ficam as configurações de zona do domínio, que no exemplo está em &lt;em&gt;/etc/bind/zonas&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Agora vamos reinicializar o &lt;strong&gt;BIND&lt;/strong&gt; com o comando:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;# /etc/init.d/bind9 restart&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Verifique o arquivo de log &lt;strong&gt;/var/log/syslog&lt;/strong&gt; se ocorreu algum problema:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;# tail -f -n 30 /var/log/syslog | grep named&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Se seguiu todos os passos então as informações contidas serão referentes ao carregamento correto das &lt;strong&gt;zonas DNS&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Agora no &lt;strong&gt;Windows 2003 Server&lt;/strong&gt; você precisará &amp;#8220;apontar&amp;#8221; o &lt;strong&gt;DNS&lt;/strong&gt; para o IP &lt;em&gt;192.168.0.2&lt;/em&gt; e proceder com a instalação do &lt;strong&gt;Active Directory&lt;/strong&gt;. Repare que após a configuração e a primeira reinicialização do Windows que na pasta &lt;em&gt;/etc/bind/adzonas&lt;/em&gt; serão criados arquivos &lt;strong&gt;JNL&lt;/strong&gt; que são arquivos onde são armazenadas as informações necessárias para que o Active Directory funcione corretamente.&lt;/p&gt;
Posted in Redes Tagged: 9.04, active directory, allow.query, allow.transfer, allow.update, atualização dinâmica, bind, bind9, configuração, configurando, debian, debian lenny, dns, DomainDNSZones, dynamic update, ForestDNSZones, howto, instalação, instalando, integração, jaunty, linux, named.conf.local, Redes, servidor, servidor de nomes, tutorial, ubuntu, ubuntu jaunty, windows, windows 2003, windows 2003 server, _msdcs, _sites, _tcp, _udp &lt;a href="http://feeds.wordpress.com/1.0/gocomments/andreferraro.wordpress.com/353/"&gt;&lt;img src="http://feeds.wordpress.com/1.0/comments/andreferraro.wordpress.com/353/" border="0" alt="" /&gt;&lt;/a&gt; &lt;a href="http://feeds.wordpress.com/1.0/godelicious/andreferraro.wordpress.com/353/"&gt;&lt;img src="http://feeds.wordpress.com/1.0/delicious/andreferraro.wordpress.com/353/" border="0" alt="" /&gt;&lt;/a&gt; &lt;a href="http://feeds.wordpress.com/1.0/gostumble/andreferraro.wordpress.com/353/"&gt;&lt;img src="http://feeds.wordpress.com/1.0/stumble/andreferraro.wordpress.com/353/" border="0" alt="" /&gt;&lt;/a&gt; &lt;a href="http://feeds.wordpress.com/1.0/godigg/andreferraro.wordpress.com/353/"&gt;&lt;img src="http://feeds.wordpress.com/1.0/digg/andreferraro.wordpress.com/353/" border="0" alt="" /&gt;&lt;/a&gt; &lt;a href="http://feeds.wordpress.com/1.0/goreddit/andreferraro.wordpress.com/353/"&gt;&lt;img src="http://feeds.wordpress.com/1.0/reddit/andreferraro.wordpress.com/353/" border="0" alt="" /&gt;&lt;/a&gt; &lt;img src="http://stats.wordpress.com/b.gif?host=andreferraro.wordpress.com&amp;amp;blog=6980461&amp;amp;post=353&amp;amp;subd=andreferraro&amp;amp;ref=&amp;amp;feed=1" border="0" alt="" /&gt;&lt;/div&gt;</description><pubDate>Tue, 02 Jun 2009 03:10:57 -0300</pubDate><link>http://softwarelivre.org/andre-ferraro/blog/linux-integrando-bind-do-debian-lenny-5.0-com-active-directory-do-windows-2003-server</link><guid>http://softwarelivre.org/andre-ferraro/blog/linux-integrando-bind-do-debian-lenny-5.0-com-active-directory-do-windows-2003-server</guid></item></channel></rss>
