<?xml version="1.0" encoding="UTF-8"?>
<feed xml:lang="en-US" xmlns="http://www.w3.org/2005/Atom">
  <title>Roberto - Home</title>
  <id>tag:roberto.techmobil.com.br,2008:mephisto/</id>
  <generator version="0.7.3" uri="http://mephistoblog.com">Mephisto Noh-Varr</generator>
  <link href="http://roberto.techmobil.com.br/feed/atom.xml" rel="self" type="application/atom+xml"/>
  <link href="http://roberto.techmobil.com.br/" rel="alternate" type="text/html"/>
  <updated>2007-11-25T01:38:33Z</updated>
  <entry xml:base="http://roberto.techmobil.com.br/">
    <author>
      <name>roberto</name>
    </author>
    <id>tag:roberto.techmobil.com.br,2007-07-15:18</id>
    <published>2007-07-15T19:49:25Z</published>
    <updated>2007-11-25T01:38:33Z</updated>
    <link href="http://roberto.techmobil.com.br/2007/7/15/models-e-migrations-mais-espertos" rel="alternate" type="text/html"/>
    <title>Models e Migrations mais espertos</title>
<content type="html">
            &lt;p&gt;Da série &#8220;Plugins que uso ;)&#8221;: Sexy Migrations, Validation Reflection e  Validate Attributes.&lt;/p&gt;


	&lt;p&gt;&lt;br /&gt;
&lt;h1&gt;Sexy Migrations&lt;/h1&gt;&lt;/p&gt;


	&lt;p&gt;Nome sugestivo? :) Talvez seu chefe não goste&#8230; (renomeie), mas a satisfação é garantida (ops!).&lt;/p&gt;


	&lt;p&gt;Por exemplo, sem &lt;a href='http://errtheblog.com/post/2381'&gt;Sexy Migrations&lt;/a&gt;:&lt;/p&gt;


&lt;pre&gt;    create_table :funcionarios do |t|
      t.column :nome, :string
      t.column :email, :string
      t.column :nascimento, :date, :null =&amp;gt; true
      t.column :empresa_id, :integer
      t.column :created_at
      t.column :updated_at
    end&lt;/pre&gt;

	&lt;p&gt;Com &lt;a href='http://errtheblog.com/post/2381'&gt;Sexy Migrations&lt;/a&gt;:&lt;/p&gt;


&lt;pre&gt;    create_table :funcionarios do |t|
      string :nome, :email
      date :nascimento, :null =&amp;gt; true
      fkey :empresa
      timestamps
    end&lt;/pre&gt;

	&lt;p&gt;Gostou? Acesse o &lt;a href='http://errtheblog.com/post/2381'&gt;&#8216;post&#8217; do projeto&lt;/a&gt;. :D
&lt;br /&gt;&lt;/p&gt;


&lt;h1&gt;Vaditation Reflection&lt;/h1&gt;

	&lt;p&gt;Que tal ter informações sobre as validações de um model? Para que? Para utilizar nos testes ou nos formulários. Como? É só instalar o &lt;a href='http://wiki.rubyonrails.org/rails/pages/Validation+Reflection'&gt;Validation Reflection&lt;/a&gt; e usar:&lt;/p&gt;


&lt;pre&gt;Funcionario.reflect_on_all_validations
Funcionario.reflect_on_validations_for(:nome)&lt;/pre&gt;

	&lt;p&gt;Isto retornará um vetor de &lt;a href='http://api.rubyonrails.org/classes/ActiveRecord/Reflection/MacroReflection.html'&gt;MacroReflection&lt;/a&gt;s , com informações sobre as validações do Model(ou de apenas um atributo). &lt;a href='http://api.rubyonrails.org/classes/ActiveRecord/Reflection/MacroReflection.html'&gt;MacroReflection&lt;/a&gt;s também são os mesmos utilizados para &lt;a href='http://api.rubyonrails.org/classes/ActiveRecord/Reflection/ClassMethods.html'&gt;armazenar informações sobre as agregações e associações&lt;/a&gt;.&lt;/p&gt;


	&lt;p&gt;Exemplo:&lt;/p&gt;


&lt;pre&gt;Funcionario.reflect_on_validations_for(:nome).detect do |v|
   v.macro == &quot;validates_uniqueness_of&quot; 
end.options[:scope]&lt;/pre&gt;

	&lt;p&gt;O &lt;a href='http://wiki.rubyonrails.org/rails/pages/Validation+Reflection'&gt;Validation Reflection&lt;/a&gt; também possui três métodos que define algumas validações baseadas no metadados da tabela:&lt;/p&gt;


&lt;pre&gt;validates_presence_of_mandatory_content_columns # v*_presence_of para atributos :null =&amp;gt; false
validates_lengths_of_string_attributes #v*_size_of para strings
validates_all_associated # v*_associated para todas as associações&lt;/pre&gt;

E se não fosse suficiente, ainda adiciona no &lt;em&gt;class&lt;/em&gt; das tags dos campos dos atributos informações sobre as validações, fazendo &lt;em&gt;text_field(&#8216;funcionario&#8217;,&#8217;nome&#8217;)&lt;/em&gt; obrigatório com limite 30 retornar:
&lt;pre&gt;&amp;lt;input id=&quot;funcionario_nome&quot; name=&quot;funcionario[nome]&quot; class=&quot;mandatory  validate_maxlength_30&quot; size=&quot;30&quot; type=&quot;text&quot; /&amp;gt;&lt;/pre&gt;
&lt;br /&gt;

&lt;h1&gt;Validate Attributes&lt;/h1&gt;

Com o &lt;a href='http://expressica.com/plugins/validate_attributes/'&gt;Validate Attributes&lt;/a&gt; podemos chamar o velho &lt;a href='http://api.rubyonrails.org/classes/ActiveRecord/Validations.html#M000928'&gt;valid?&lt;/a&gt; para um ou mais atributos. Exemplo:
&lt;pre&gt;@funcionario.validate_attributes(:only =&amp;gt; [&quot;nome&quot;, &quot;email&quot;])&lt;/pre&gt;

	&lt;p&gt;Interessante para testes, &lt;a href='http://en.wikipedia.org/wiki/Wizard_%28software%29'&gt;wizards&lt;/a&gt; e validações com ajax.&lt;/p&gt;


	&lt;p&gt;&lt;br /&gt;
Espero que (alguém) tenha gostado! :) E até as próximas dicas! :D&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://roberto.techmobil.com.br/">
    <author>
      <name>roberto</name>
    </author>
    <id>tag:roberto.techmobil.com.br,2007-07-09:19</id>
    <published>2007-07-09T01:19:08Z</published>
    <updated>2007-11-25T01:38:33Z</updated>
    <link href="http://roberto.techmobil.com.br/2007/7/9/flexperimentando-com-o-rails-weborb" rel="alternate" type="text/html"/>
    <title>Flexperimentando com o Rails/WebOrb</title>
<content type="html">
            &lt;p&gt;Tirei um tempinho para testar o Flex e sua integração com o Rails utilizando o plugin WebOrb. Segue o passo a passo que realizei, que deve servir para quem quer iniciar e não sabe como. Boa leitura! :D&lt;/p&gt;


	&lt;p&gt;Antes de começar, aqui vai uma imagem do resultado:
&lt;a href='http://roberto.techmobil.com.br/wp-content/uploads/2007/07/demo_flex_usuarios.gif' title='Demo Flex Usuários'&gt;&lt;img src='http://roberto.techmobil.com.br/wp-content/uploads/2007/07/demo_flex_usuarios.thumbnail.gif' alt='Demo Flex Usuários' /&gt;&lt;/a&gt;&lt;/p&gt;


	&lt;p&gt;Utilizei o &lt;a href='http://www.adobe.com/products/flex/downloads/'&gt;Flex2 &lt;span class='caps'&gt;SDK&lt;/span&gt;&lt;/a&gt; e o &lt;a href='http://www.adobe.com/go/gntray_dl_getflashplayer'&gt;plugin 9 do Flash&lt;/a&gt; no Windows. Como só utilizaremos o &lt;span class='caps'&gt;SDK&lt;/span&gt; no final, pode deixar baixando enquanto está implementando. :)&lt;/p&gt;


Crie o projeto:
&lt;pre&gt;rails demo_flex&lt;/pre&gt;

Instale o plugin WebOrb (lembre de executar na pasta raiz do projeto):
&lt;pre&gt;ruby script/plugin install http://themidnightcoders.net:8089/svn/weborb&lt;/pre&gt;

	&lt;p&gt;Para verificar se tudo ocorreu bem já pode iniciar o servidor (ruby script/server ) e acessar: &lt;a href='http://localhost:3000/examples/main.html'&gt;http://localhost:3000/examples/main.html&lt;/a&gt; ou &lt;a href='http://localhost:3000/examples/example.html'&gt;http://localhost:3000/examples/example.html&lt;/a&gt;.&lt;/p&gt;


Entre os arquivos e pastas adicionados pela instalação do plugin temos:
&lt;ul&gt;
    &lt;li&gt;A pasta &lt;strong&gt;app/services&lt;/strong&gt; onde implementamos os serviços disponíveis para serem acessados via &lt;span class='caps'&gt;RPC&lt;/span&gt;. Nela encontramos alguns exemplos.&lt;/li&gt;
    &lt;li&gt;O arquivo &lt;strong&gt;config/WEB-INF/flex/remoting-config.xml&lt;/strong&gt; onde declaramos os serviços implementados.&lt;/li&gt;
        &lt;li&gt;A pasta &lt;strong&gt;public/examples&lt;/strong&gt; onde temos o código dos exemplos.&lt;/li&gt;
&lt;/ul&gt;

	&lt;p&gt;Partindo para a criação do nosso próprio exemplo: listar registros de uma tabela de usuários, crie seu database e edite o &lt;strong&gt;config/database.yml&lt;/strong&gt; de acordo.&lt;/p&gt;


Caso esteja usando MySQL, segue uma ajuda:
&lt;pre&gt;create database demo_flex_dev;
grant all on demo_flex_dev.* to 'demo_flex'@'localhost' identified by '123';
flush privileges;&lt;/pre&gt;
E no database.yml:
&lt;pre&gt;
development:
  adapter: mysql
  database: demo_flex_dev
  username: demo_flex
  password: 123
  host: localhost
&lt;/pre&gt;

	&lt;p&gt;Depois:&lt;/p&gt;


&lt;pre&gt;
ruby script/generate model Usuario login:string senha:string nome:string
rake db:migrate
&lt;/pre&gt;

Para verificar se até agora está tudo ok e aproveitar para adicionar alguns dados:
&lt;pre&gt;
ruby script/console
Usuario.create!(:login =&amp;gt; 'roberto', :senha =&amp;gt; '123', :nome =&amp;gt; 'Roberto Soares')
&lt;/pre&gt;

Agora crie o arquivo &lt;strong&gt;app/services/UsuarioService.rb&lt;/strong&gt;:
&lt;pre&gt;require 'weborb/context'
require 'rbconfig'

class UsuarioService
  def list
    Usuario.find(:all)
  end
end&lt;/pre&gt;

E declare-o no arquivo &lt;strong&gt;config\WEB-INF\flex\remoting-config.xml&lt;/strong&gt;:
&lt;pre&gt;    &amp;lt;destination id=&quot;UsuarioService&quot;&amp;gt;
        &amp;lt;properties&amp;gt;
            &amp;lt;source&amp;gt;UsuarioService&amp;lt;/source&amp;gt;
        &amp;lt;/properties&amp;gt;
    &amp;lt;/destination&amp;gt;&lt;/pre&gt;

	&lt;p&gt;Copie o arquivo &lt;strong&gt;public/examples/example.html&lt;/strong&gt; para &lt;strong&gt;public/examples/usuarios.html&lt;/strong&gt; substituindo todos &#8216;example&#8217; por &#8216;usuarios&#8217; para ganhar tempo. :)&lt;/p&gt;


Para finalizar crie o arquivo &lt;strong&gt;public/examples/usuarios.mxml&lt;/strong&gt; que pode ser baixado &lt;a href='http://roberto.techmobil.com.br/wp-content/uploads/2007/07/usuarios.zip' title='usuarios.mxml zipado'&gt;aqui&lt;/a&gt;.
&lt;pre&gt;&amp;lt;?xml version=&quot;1.0&quot;?&amp;gt;
&amp;lt;mx:Application xmlns:mx=&quot;http://www.adobe.com/2006/mxml&quot; 
    creationComplete=&quot;setUp();loadList();&quot;&amp;gt;

    &amp;lt;mx:Script&amp;gt;
    &amp;lt;![CDATA[    
        import mx.rpc.remoting.RemoteObject;
        import mx.controls.Alert;
        import mx.rpc.events.ResultEvent;
        import mx.rpc.events.FaultEvent;     

        private var remoteObject:RemoteObject;

        public function setUp():void
        {
            //objeto que representa o nosso servico
            remoteObject = new RemoteObject();
            remoteObject.destination = &quot;UsuarioService&quot;;

            //em caso de sucesso do método list do servico,
            //será chamado o método onList recebendo o resultado
            remoteObject.list.addEventListener(&quot;result&quot;, onList);

            //em caso de falha será chamado o onFault
            remoteObject.addEventListener(&quot;fault&quot;, onFault);        
        }

        public function loadList():void
        {
            //aqui é chamado o list do UsuarioService
            remoteObject.list();               
        }

        public function onList(event:ResultEvent):void
        {
            var usuarios:Array = event.result as Array;

            //atualizando o DataGrid
            listDataGrid.dataProvider = usuarios;
        }

        public function onFault (event:FaultEvent):void 
        {
            Alert.show(event.fault.faultString, 'Error');
        }

    ]]&amp;gt;
    &amp;lt;/mx:Script&amp;gt;

    &amp;lt;mx:TitleWindow title=&quot;Exemplo&quot; layout=&quot;vertical&quot; height=&quot;100%&quot; width=&quot;100%&quot;&amp;gt;

            &amp;lt;mx:Button label=&quot;Atualizar Lista&quot; click=&quot;loadList()&quot;/&amp;gt;

            &amp;lt;mx:DataGrid id=&quot;listDataGrid&quot; width=&quot;100%&quot; height=&quot;100%&quot;&amp;gt;
                &amp;lt;mx:columns&amp;gt;
                    &amp;lt;mx:DataGridColumn dataField=&quot;login&quot; headerText=&quot;Login&quot;/&amp;gt;
                    &amp;lt;mx:DataGridColumn dataField=&quot;senha&quot; headerText=&quot;Senha&quot;/&amp;gt;
                    &amp;lt;mx:DataGridColumn dataField=&quot;nome&quot; headerText=&quot;Nome&quot;/&amp;gt;
                &amp;lt;/mx:columns&amp;gt;
            &amp;lt;/mx:DataGrid&amp;gt;

    &amp;lt;/mx:TitleWindow&amp;gt;

&amp;lt;/mx:Application&amp;gt;&lt;/pre&gt;

Para terminar, compile o usuarios.mxml usando o mxmlc do Flex2SDK:
&lt;pre&gt;endereco_do_sdk\bin\mxmlc --compiler.services ../../config/WEB-INF/flex/services-config.xml -compiler.context-root ../../config/WEB-INF/flex usuarios.xml&lt;/pre&gt;

	&lt;p&gt;Dica: coloque a pasta bin do FlexSDK no &lt;span class='caps'&gt;PATH&lt;/span&gt; do sistema. ;)&lt;/p&gt;


	&lt;p&gt;Pronto! É só rodar o servidor ( ruby script/server ) e acessar &lt;a href='http://localhost:3000/examples/usuarios.html'&gt;http://localhost:3000/examples/usuarios.html&lt;/a&gt;.&lt;/p&gt;


	&lt;p&gt;&lt;a href='http://roberto.techmobil.com.br/wp-content/uploads/2007/07/demo_flex.zip' title='Demonstração FlexOnRails'&gt;Download do projeto completo do exemplo&lt;/a&gt;(1,09MB).&lt;/p&gt;


	&lt;p&gt;Gostou? Vá dar uma olhada em outras fontes:
&lt;a href='http://blog.egenial.com.br'&gt;http://blog.egenial.com.br&lt;/a&gt; &lt;em&gt;#olá instrutor&lt;/em&gt; :D
&lt;a href='http://flexonrails.net'&gt;http://flexonrails.net&lt;/a&gt;
&lt;a href='http://flexiblerails.com'&gt;http://flexiblerails.com&lt;/a&gt; &lt;em&gt;#primeiro livro FlexOnRails&lt;/em&gt;
&lt;a href='http://flex.org '&gt;http://flex.org &lt;/a&gt;
&lt;a href='http://livedocs.adobe.com/flex/2/langref/'&gt;http://livedocs.adobe.com/flex/2/langref/&lt;/a&gt; &lt;em&gt;#doc das classes do flex&lt;/em&gt;&lt;/p&gt;


	&lt;p&gt;Na próxima testarei com o &lt;a href='http://rubyforge.org/projects/forc/'&gt;FoRc&lt;/a&gt; que não utiliza &lt;a href='http://livedocs.adobe.com/flex/2/langref/mx/rpc/remoting/RemoteObject.html'&gt;RemoteObject&lt;/a&gt;, mas sim &lt;a href='http://livedocs.adobe.com/flex/2/langref/mx/rpc/http/HTTPService.html'&gt;HTTPService&lt;/a&gt;.&lt;/p&gt;


	&lt;p&gt;t+!&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://roberto.techmobil.com.br/">
    <author>
      <name>roberto</name>
    </author>
    <id>tag:roberto.techmobil.com.br,2007-06-20:17</id>
    <published>2007-06-20T23:55:29Z</published>
    <updated>2007-11-25T01:38:33Z</updated>
    <link href="http://roberto.techmobil.com.br/2007/6/20/aptana-suportando-adobe-air" rel="alternate" type="text/html"/>
    <title>Aptana suportando Adobe AIR</title>
<content type="html">
            &lt;p&gt;O pessoal do &lt;a href='http://aptana.com'&gt;aptana&lt;/a&gt; parece estar realmente com fome. Se já não bastasse ter engolido o &lt;a href='http://www.aptana.com/download_rails_rdt.php'&gt;Rails&lt;/a&gt;, agora quer abocanhar também o &lt;a href='http://en.wikipedia.org/wiki/Adobe_AIR'&gt;Adobe &lt;span class='caps'&gt;AIR&lt;/span&gt;&lt;/a&gt;. Eu, que estou no curso &lt;a href='http://www.egenial.com.br/curso/'&gt;FlexOnRails&lt;/a&gt; da &lt;a href='http://www.egenial.com.br'&gt;e-Genial&lt;/a&gt;, até gostei da idéia! :P&lt;/p&gt;


	&lt;p&gt;Ainda não experimentei, mas pelo &lt;a href='http://www.aptana.tv/movies/aptana_air/aptana_air.html'&gt;screencast&lt;/a&gt; dá para saber até onde já avançaram.&lt;/p&gt;


	&lt;p&gt;Por enquanto, continuo com meu &lt;a href='http://www.vim.org/'&gt;vim&lt;/a&gt;. :D&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://roberto.techmobil.com.br/">
    <author>
      <name>roberto</name>
    </author>
    <id>tag:roberto.techmobil.com.br,2007-05-27:16</id>
    <published>2007-05-27T23:42:43Z</published>
    <updated>2007-11-25T01:38:33Z</updated>
    <link href="http://roberto.techmobil.com.br/2007/5/27/estudando-a-l&#237;ngua-do-ruby-japon&#234;s" rel="alternate" type="text/html"/>
    <title>Estudando a l&#237;ngua do Ruby: Japon&#234;s</title>
<content type="html">
            &lt;p&gt;Algumas dicas para os interessados em aprender japonês:&lt;/p&gt;


Livros:
&lt;ul&gt;
    &lt;li&gt;Japonês em Quadrinhos: Curso de Japonês Através do Mangá: &lt;a href='http://www.lojaconrad.com.br/produto.asp?id=826'&gt;Volume 1&lt;/a&gt; e &lt;a href='http://www.lojaconrad.com.br/produto.asp?id=957'&gt;Volume 2&lt;/a&gt;: Leitura fácil, bons exercícios.&lt;/li&gt;
    &lt;li&gt;&lt;a href='http://www.lojaconrad.com.br/produto.asp?id=180'&gt;Kanji Pictográfico&lt;/a&gt;: ainda não comprei, mas sei que deve ajudar e muito a aprender(leia-se decorar :D ) 1000 dos 1945 kanjis básicos.&lt;/li&gt;
    &lt;li&gt; &lt;a href='http://www.submarino.com.br/books_productdetails.asp?Query=ProductPage&#38;ProdTypeId=1&#38;ProdId=143248&#38;ST=SR'&gt;Dicionário Prático Português &#8211; Japonês&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt; &lt;a href='http://www.submarino.com.br/books_productdetails.asp?Query=ProductPage&#38;ProdTypeId=1&#38;ProdId=218543&#38;ST=SR'&gt; Dicionário Prático Japonês-Português&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

Vídeos:
    &lt;ul&gt;
&lt;li&gt;&lt;a href='http://edonkers.org/forum/viewtopic.php?t=22104'&gt;Curso de Nihongo em &lt;span class='caps'&gt;DVD&lt;/span&gt;&lt;/a&gt;: Professora japonesa particular com direito a pause! Fantástico. (Desejava saber a origem deste vídeo&#8230;)&lt;/li&gt;&lt;/ul&gt;

Sites: &lt;ul&gt;
    &lt;li&gt;&lt;a href='http://op.xisde.net/'&gt;Otaku Project&lt;/a&gt;: Excelente apoio, com letras de músicas, rádio, banco de kanjis, fórum e muito mais.&lt;/li&gt;
&lt;/ul&gt;

	&lt;p&gt;Conhece outro recurso? Comenta! :)&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://roberto.techmobil.com.br/">
    <author>
      <name>roberto</name>
    </author>
    <id>tag:roberto.techmobil.com.br,2007-04-24:15</id>
    <published>2007-04-24T21:31:27Z</published>
    <updated>2007-11-25T01:38:33Z</updated>
    <link href="http://roberto.techmobil.com.br/2007/4/24/radiant-0-6" rel="alternate" type="text/html"/>
    <title>Radiant 0.6</title>
<content type="html">
            &lt;p&gt;&lt;a href='http://radiantcms.org/'&gt;Radiant&lt;/a&gt; é um &#8216;simples&#8217; Content Management System(&lt;a href='http://en.wikipedia.org/wiki/Content_management_system'&gt;&lt;span class='caps'&gt;CMS&lt;/span&gt;&lt;/a&gt;) desenvolvido com &lt;a href='http://www.rubyonrails.org'&gt;RubyOnRails&lt;/a&gt; e utilizado no próprio &lt;a href='http://www.ruby-lang.org'&gt;site do Ruby&lt;/a&gt;.&lt;/p&gt;


	&lt;p&gt;Após 6 meses de jejum, &lt;a href='http://rubyforge.org/forum/forum.php?forum_id=13868'&gt;lançaram uma nova versão&lt;/a&gt;, tendo como maior novidade uma forma fácil de extendê-lo (ainda vou dar uma olhada nisso).&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://roberto.techmobil.com.br/">
    <author>
      <name>roberto</name>
    </author>
    <id>tag:roberto.techmobil.com.br,2007-04-21:14</id>
    <published>2007-04-21T12:10:38Z</published>
    <updated>2007-11-25T01:38:33Z</updated>
    <link href="http://roberto.techmobil.com.br/2007/4/21/aptana-merge-radrails-merge-rdt" rel="alternate" type="text/html"/>
    <title>Aptana. merge!(RadRails). merge!(RDT)!!!</title>
<content type="html">
            &lt;p&gt;O pessoal do &lt;a href='http://www.aptana.com/'&gt;Aptana&lt;/a&gt; &lt;a href='http://www.aptana.com/rdt.php'&gt;anunciou&lt;/a&gt; a contratação do líder do &lt;a href='http://rubyeclipse.sourceforge.net/'&gt;&lt;span class='caps'&gt;RDT&lt;/span&gt;&lt;/a&gt; para trabalhar no &lt;a href='http://www.aptana.com/blog/?p=108'&gt;&#8220;Ajax and Rails &lt;span class='caps'&gt;IDE&lt;/span&gt;&#8221;&lt;/a&gt;. Com certeza uma excelente notícia para muitos desenvolvedores. :D&lt;/p&gt;


	&lt;p&gt;Cheguei até a pensar que o RadRails morreria :( . Ainda bem que não. :)&lt;/p&gt;


	&lt;p&gt;&lt;strong&gt;&lt;span class='caps'&gt;UPDATE&lt;/span&gt;:&lt;/strong&gt; &lt;a href='http://aptana.com/download_rails_rdt.php'&gt;Download disponível do &#8220;Aptana Rails &lt;span class='caps'&gt;IDE&lt;/span&gt; Beta with RadRails and &lt;span class='caps'&gt;RDT&lt;/span&gt;&#8221;&lt;/a&gt;&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://roberto.techmobil.com.br/">
    <author>
      <name>roberto</name>
    </author>
    <id>tag:roberto.techmobil.com.br,2007-04-19:13</id>
    <published>2007-04-19T13:25:27Z</published>
    <updated>2007-11-25T01:38:33Z</updated>
    <link href="http://roberto.techmobil.com.br/2007/4/19/ubuntu-feisty-fawn-lan&#231;ado" rel="alternate" type="text/html"/>
    <title>Ubuntu Feisty Fawn Lan&#231;ado</title>
<content type="html">
            &lt;p&gt;Hoje foi &#8216;oficialmente&#8217; lançado.
Como já estava usando-o, a única novidade que lembro é o melhor suporte a wireless, realmente significativo para mim. ;)
A página inicial do &lt;a href='http://www.ubuntu.com/'&gt;site oficial&lt;/a&gt; foi substituída por uma com  mirrors para &lt;a href='http://espelhos.edugraf.ufsc.br/ubuntu-releases/feisty/'&gt;download da nova versão&lt;/a&gt; (pelo menos por hoje deve ficar assim).&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://roberto.techmobil.com.br/">
    <author>
      <name>roberto</name>
    </author>
    <id>tag:roberto.techmobil.com.br,2007-04-15:12</id>
    <published>2007-04-15T02:47:10Z</published>
    <updated>2007-11-25T01:38:33Z</updated>
    <link href="http://roberto.techmobil.com.br/2007/4/15/liberado-c&#243;digo-do-clockingit" rel="alternate" type="text/html"/>
    <title>Liberado C&#243;digo do ClockingIt</title>
<content type="html">
            &lt;p&gt;Para quem não conhece, &lt;a href='http://www.clockingit.com/'&gt;ClockingIt&lt;/a&gt; é uma ferramenta de gerenciamento de projetos (com um excelente sistema de timetracking)  desenvolvida em Rails :) por um casal da Noruega (Erlend and Ellen Simonsen, um desenvolvedor e uma webdesigner).&lt;/p&gt;


	&lt;p&gt;Disponível como serviço desde o ano passado(conheci em setembro/2006) e, felizmente, &#8216;agora&#8217; (3 de abril) teve seu código &lt;a href='http://clockingit.wordpress.com/2007/04/03/clockingit-going-open-source/'&gt;liberado&lt;/a&gt; sob a licença &lt;span class='caps'&gt;MIT&lt;/span&gt;.&lt;/p&gt;


	&lt;p&gt;Dando uma olhada no &lt;a href='http://wiki.clockingit.com/wiki:source'&gt;código&lt;/a&gt; já deu para perceber que necessita de algumas modificações para se tornar &#8216;distribuível&#8217;. Muitos links tem referência ao domínio do projeto, por exemplo. :(&lt;/p&gt;


	&lt;p&gt;Estou finalizando a tradução (pt_BR) e depois estudarei que pontos poderei auxiliar no projeto.&lt;/p&gt;


	&lt;p&gt;Tendo novidades posto aqui. :)&lt;/p&gt;


	&lt;p&gt;&lt;strong&gt;&lt;span class='caps'&gt;UPDATE&lt;/span&gt;&lt;/strong&gt;: &lt;a href='http://wiki.clockingit.com/wiki:brazilianportuguese'&gt;A tradução já está no wiki do projeto&lt;/a&gt;.&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://roberto.techmobil.com.br/">
    <author>
      <name>roberto</name>
    </author>
    <id>tag:roberto.techmobil.com.br,2007-04-06:7</id>
    <published>2007-04-06T14:48:47Z</published>
    <updated>2007-11-25T01:38:33Z</updated>
    <link href="http://roberto.techmobil.com.br/2007/4/6/rspec-behaviour-driven-development-on-ruby" rel="alternate" type="text/html"/>
    <title>RSpec: Behaviour-Driven Development On Ruby</title>
<content type="html">
            &lt;p&gt;Escrevi um pouco apressado, estarei &lt;a href='http://pt.wikipedia.org/wiki/Porto_Seguro'&gt;viajando&lt;/a&gt; daqui a pouco e como já tinha uma parte no &#8216;draft&#8217;, resolvi publicar logo. :)&lt;/p&gt;


	&lt;p&gt;O código apresentado nos exemplos está utilizando os métodos da versão do RSpec 0.9, que foi lançado ontem na &lt;a href='http://rubyforge.org/mail/?group_id=797'&gt;lista de usuários&lt;/a&gt; e o site do projeto ainda apresenta a versão 0.8.2(até o momento), porém nada complicado de &#8220;converter&#8221;.&lt;/p&gt;


	&lt;p&gt;Então, aqui vamos. :)
&lt;br /&gt;
&lt;h2&gt;Pequena Introdução&lt;/h2&gt;&lt;/p&gt;


	&lt;p&gt;Muito, e há muito tempo, tem se falado de Desenvolvimento orientado a Testes, ou &lt;a href='http://dojofloripa.wordpress.com/tag/tdd/'&gt;&lt;span class='caps'&gt;TDD&lt;/span&gt;(Test-Driven Development&lt;/a&gt;).
Metodologias, como a Extreme Programming, que fazem sua utilização, além de frameworks e ferramentas para as mais diversas linguagens.
&#8220;Mas será que estamos fazendo corretamente? &lt;span class='caps'&gt;TDD&lt;/span&gt; é realmente sobre testes?&#8221;. Foram alguns dos questionamentos que levaram a &lt;a href='http://blog.daveastels.com/articles/2005/07/05/a-new-look-at-test-driven-development'&gt;Dave Astels&lt;/a&gt; e &lt;a href='http://dannorth.net/introducing-bdd'&gt;Dan North&lt;/a&gt; a criarem outra alternativa: &lt;a href='http://behaviour-driven.org/'&gt;&lt;span class='caps'&gt;BDD&lt;/span&gt;, Behaviour Driven Development&lt;/a&gt;, ou Desenvolvimento orientado a Comportamento.
&lt;a href='http://behaviour-driven.org/TDDAdoptionProfile'&gt;Notaram que experientes praticantes de &lt;span class='caps'&gt;TDD&lt;/span&gt; chegavam a um ponto que percebiam que não estavam escrevendo testes e sim definindo comportamentos&lt;/a&gt;. 
Tendo isso em mente, desenvolveram frameworks que permitissem um melhor foco nessas definições: &lt;a href='http://jbehave.org/'&gt;JBehave&lt;/a&gt; e &lt;a href='http://rspec.rubyforge.org'&gt;RSpec&lt;/a&gt;(tema deste post).&lt;/p&gt;


	&lt;p&gt;&lt;br /&gt;
&lt;h2&gt;Instalando&lt;/h2&gt;
&lt;br /&gt;&lt;/p&gt;


&lt;pre&gt;gem install rspec&lt;/pre&gt;

	&lt;p&gt;Possui algumas dependências como o rcov e o rake, acesse &lt;a href='http://rspec.rubyforge.org/rdoc/index.html'&gt;a documentação&lt;/a&gt; para outras.
&lt;br /&gt;
&lt;h2&gt;Estrutura básica&lt;/h2&gt;
&lt;br /&gt;
&lt;pre&gt;#no &quot;describe&quot; descrevemos o que estamos especificando no momento
describe Carteira do 

    #este método é chamado antes de cada &quot;it&quot;, pode ser utilizado para indicar um estado dos objetos envolvidos e mocks.
    setup do
        ...
    end

    #nos métodos &quot;it&quot; é onde realmente trabalhamos
    it &quot;deve ter um método para entrada $&quot; do
        ...
    end

    it &quot;não deve estar vazia&quot; {
        ...
    }

end

#podemos definir mais de um describe por arquivo.
describe Carteira, &quot; (validações)&quot; do #este describe resultaria em: &quot;Carteira (validações)&quot; 
    ...
end&lt;/pre&gt;
&lt;br /&gt;
&lt;h2&gt;Should e Expectations&lt;/h2&gt;
&lt;br /&gt;
O RSpec adiciona os métodos should(&#8216;devia&#8217;) e should_not(&#8216;não devia&#8217;) à Object, tornando disponível para qualquer objeto de sua aplicação (durantes os testes :) ):
&lt;pre&gt;#exemplos
carteira.should_not ...
post.should_not ...
post.save!.should ...&lt;/pre&gt;&lt;/p&gt;


E também define um conjunto de Expectations(&#8216;expectativas&#8217;) para que possamos definir os comportamentos esperados.
&lt;pre&gt;#exemplos
be_...(...)
have(...).(...)
raise_error(...)&lt;/pre&gt;

&#8216;Juntando&#8217;:
&lt;pre&gt;carteira.should_not be_a_kind_of(Carro)
#carteira não devia ser do tipo Carro

post.should_not have(3).comentarios
#post não deve ter 3 comentários

post.save!.should raise_error
#post.save! devia causar erro&lt;/pre&gt;

	&lt;p&gt;A leitura flui melhor do que &lt;a href='http://rspec.rubyforge.org/documentation/test_unit.html'&gt;&#8216;assert aquilo&#8217;&lt;/a&gt;, não? :) &lt;a href='http://rspec.rubyforge.org/documentation/expectations.html'&gt;Veja outros Expectations&lt;/a&gt;.
&lt;br /&gt;
&lt;h2&gt;Exemplo&lt;/h2&gt;
&lt;br /&gt;
Como exemplo vamos definir o comportamento de Carteira.&lt;/p&gt;


Primeiro criamos o &#8220;esqueleto&#8221;:
&lt;pre&gt;#arquivo carteira_spec.rb
require 'carteira' #vamos criar mais abaixo
describe Carteira do

    setup do
        @carteira = Carteira.new
    end
end&lt;/pre&gt;

	&lt;p&gt;Agora vamos para o primeiro comportamento:&lt;/p&gt;


&lt;ul&gt;
    &lt;li&gt;o valor inicial de dinheiro deve ser 0. :|&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;

&lt;pre&gt;it &quot;o valor inicial de dinheiro deve ser 0 :|&quot; do
    @carteira.dinheiro.should == 0
    @carteira.dinheiro.should eql?(0) #alternativa 1
    @carteira.dinheiro.should be_zero #alternativa 2        
end&lt;/pre&gt;

	&lt;p&gt;Três formas de (d)escrever. Na última o &#8220;be_zero&#8221; na verdade está utilizando o método &#8220;zero?&#8221; de dinheiro(Fixnum), servindo para qualquer &#8216;predicate&#8217; (método terminado em &#8217;?&#8217;). Ex: be_include (Array:include?), be_empty(String:empty?).&lt;/p&gt;


Mais dois comportamentos:
&lt;ul&gt;
    &lt;li&gt;o método ganho(x) deve incrementar o dinheiro em x. :)&lt;/li&gt;
    &lt;li&gt;o método gasto(x) deve decrementar o dinheiro em x, lançar erro SemGranaError caso o valor for se tornar negativo. :(&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;pre&gt;it &quot;o método ganho(x) deve incrementar o dinheiro em x. :)&quot; do
    @carteira.ganho(3)
    @carteira.dinheiro.should == 3 #outra forma! =]        
end

it &quot;o método gasto(x) deve decrementar o dinheiro em x, lançar erro SemGranaError caso o valor for se tornar negativo. :(&quot; do
    lambda{ @carteira.gasto(3) }.should raise_error(SemGranaError)

    @carteira.ganho(3)
    @carteira.gasto(3).should == 0        
end&lt;/pre&gt;

	&lt;p&gt;Fácil, não? Agora vamos criar nossa Carteira, para podermos executar os testes(?):&lt;/p&gt;


&lt;pre&gt;#arquivo carteira.rb
class Carteira

    attr_accessor :dinheiro

    def initialize
    end

    def ganho(dinheiro)
    end

    def gasto(dinheiro)
    end

end&lt;/pre&gt;

Para executar: &lt;strong&gt;spec carteira_spec.rb&lt;/strong&gt;. Como saída teremos:
&lt;pre&gt;FFF

1)
NoMethodError in 'Carteira o valor inicial de dinheiro deve ser 0 :|'
undefined method `dinheiro' for #&amp;lt;Carteira:0xb7c51270&amp;gt;
./carteira_spec.rb:10:

2)
NoMethodError in 'Carteira o método ganho(x) deve incrementar o dinheiro em x. :)'
undefined method `dinheiro' for #&amp;lt;Carteira:0xb7c3b484&amp;gt;
./carteira_spec.rb:17:

3)
NameError in 'Carteira o método gasto(x) deve decrementar o dinheiro em x, lançar erro SemGranaError caso o valor for se tornar negativo. :('
uninitialized constant SemGranaError
./carteira_spec.rb:21:

Finished in 0.009035 seconds

3 examples, 3 failures&lt;/pre&gt;

	&lt;p&gt;Cada &#8216;F&#8217; no início representa uma falha e cada tópico descreve uma falha. É interessante que tudo falhe na primeira vez, para sabermos que funcionou depois que implementamos (oras!).&lt;/p&gt;


Implementando a primeira especificação:
&lt;pre&gt;    def initialize
        @dinheiro = 0
    end&lt;/pre&gt;

Executando(spec carteira_spec.rb), temos:
&lt;pre&gt;.FF

1)
'Carteira o método ganho(x) deve incrementar o dinheiro em x. :)' FAILED
expected 3, got 0 (using ==)
./carteira_spec.rb:17:

2)
NameError in 'Carteira o método gasto(x) deve decrementar o dinheiro em x, lançar erro SemGranaError caso o valor for se tornar negativo. :('
uninitialized constant SemGranaError
./carteira_spec.rb:21:

Finished in 0.008884 seconds

3 examples, 2 failures&lt;/pre&gt;

	&lt;p&gt;&#8220;E cadê o que eu fiz?&#8221;. Virou um &#8217;.&#8217;, aquele pontinho quer dizer que funcionou.&lt;/p&gt;


Finalizando implementando o resto:
&lt;pre&gt;#arquivo carteira.rb
class Carteira

    attr_accessor :dinheiro

    def initialize
        @dinheiro = 0
    end

    def ganho(dinheiro)
        @dinheiro = @dinheiro + dinheiro
    end

    def gasto(dinheiro)
        raise SemGranaError if (@dinheiro - dinheiro) &amp;lt; 0
        @dinheiro = @dinheiro - dinheiro
    end

end

class SemGranaError &amp;lt; StandardError

end&lt;/pre&gt;

Saída:
&lt;pre&gt;...

Finished in 0.007725 seconds

3 examples, 0 failures&lt;/pre&gt;

	&lt;p&gt;Experimente outras opções de formatação, para olhar as opções execute: &lt;strong&gt;spec &#8211; -help&lt;/strong&gt;
&lt;br /&gt;
&lt;h2&gt;Fim!&lt;/h2&gt;&lt;/p&gt;


	&lt;p&gt;Gostou? Se sim, no próximo projeto utilize o RSpec, ou alguma ferramenta &lt;span class='caps'&gt;BDD&lt;/span&gt; ou &lt;span class='caps'&gt;TDD&lt;/span&gt;, seu aplicativo ficará &lt;a href='http://blog.improveit.com.br/articles/2007/01/06/software-saudavel'&gt;saudável&lt;/a&gt;, não tem mais &lt;a href='http://dojofloripa.wordpress.com/2006/11/03/top-5-desculpas-de-quem-nao-quer-programar-orientado-a-testes/'&gt;desculpa&lt;/a&gt;. (Não preparei nada para a alternativa &#8216;não&#8217; :D ).&lt;/p&gt;


	&lt;p&gt;Já estou preparando posts sobre mock e rspec_on_rails.&lt;/p&gt;


	&lt;p&gt;Comporte-se e até a próxima.&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://roberto.techmobil.com.br/">
    <author>
      <name>roberto</name>
    </author>
    <id>tag:roberto.techmobil.com.br,2007-04-05:11</id>
    <published>2007-04-05T15:39:07Z</published>
    <updated>2007-11-25T01:38:33Z</updated>
    <link href="http://roberto.techmobil.com.br/2007/4/5/pr&#234;mio-disciplina-e-divers&#227;o-com-xp" rel="alternate" type="text/html"/>
    <title>Pr&#234;mio: Disciplina e divers&#227;o com XP</title>
<content type="html">
            &lt;p&gt;Meu prêmio do &lt;a href='http://rubyonbr.org/destaques/2007/02/02/railsrally-2007/'&gt;RailsRally2007&lt;/a&gt; chegou hoje: &#8220;&lt;a href='http://www.improveit.com.br/livroxp'&gt;Extreme Programming&lt;/a&gt;: Aprenda como encantar seus usuários desenvolvendo software com agilidade e alta qualidade&#8221;, de &lt;a href='http://www.improveit.com.br/vinicius'&gt;Vinícius Teles&lt;/a&gt;.
Desde o início da empresa que nosso processo &#8216;segue rumo à XP&#8217;, onde fomos aderindo às suas práticas incrementalmente.
Para escrever as &lt;a href='http://www.improveit.com.br/xp/praticas/historias'&gt;histórias&lt;/a&gt;/tarefas já utilizamos cartões, passamos para &lt;a href='http://moinmoin.wikiwikiweb.de/'&gt;Wiki&lt;/a&gt; e atualmente usando o &lt;a href='http://www.activecollab.com'&gt;activecollab&lt;/a&gt;, já de olho no &lt;a href='http://www.redmine.org'&gt;redmine&lt;/a&gt;.
De práticas &lt;a href='http://www.improveit.com.br/xp/praticas/programacao_par'&gt;programamos em par&lt;/a&gt;(de vez em quando em trio, quarteto), todos na &lt;a href='http://www.improveit.com.br/xp/praticas/sentar_junto'&gt;mesma sala&lt;/a&gt; (que possui &lt;a href='http://www.improveit.com.br/xp/praticas/ambiente_informativo'&gt;mural e quadro branco&lt;/a&gt;), &lt;a href='http://www.improveit.com.br/xp/praticas/tdd'&gt;desenvolvendo orientado a testes&lt;/a&gt; (no &#8216;estilo&#8217; &lt;a href='http://behaviour-driven.org/'&gt;&lt;span class='caps'&gt;BDD&lt;/span&gt;&lt;/a&gt;), etc e tal (ufa!). :)&lt;/p&gt;


	&lt;p&gt;E esse &lt;a href='http://www.improveit.com.br/livroxp'&gt;livro&lt;/a&gt; só vem a agregar.&lt;/p&gt;


	&lt;p&gt;Obrigado &lt;a href='http://rubyonbr.org'&gt;RubyOnBr&lt;/a&gt;! Obrigado &lt;a href='http://www.improveit.com.br/vinicius'&gt;Vinícius&lt;/a&gt;!&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://roberto.techmobil.com.br/">
    <author>
      <name>roberto</name>
    </author>
    <id>tag:roberto.techmobil.com.br,2007-04-04:10</id>
    <published>2007-04-04T02:03:22Z</published>
    <updated>2007-11-25T01:38:33Z</updated>
    <link href="http://roberto.techmobil.com.br/2007/4/4/pdf-write-hello-world" rel="alternate" type="text/html"/>
    <title>pdf.write "Hello World"</title>
<content type="html">
            &lt;pre&gt;gem install pdf-writer -y
rails recibo
cd recibo
ruby script/plugin install svn://rubyforge.org//var/svn/railspdfplugin/railspdf/
script/generate controller recibos
echo &quot;pdf.text 'Hello, World', :font_size =&amp;gt; 72, :justification =&amp;gt; :center &quot; &amp;gt; app/views/recibos/print.rpdf
ruby script/server&lt;/pre&gt;

	&lt;p&gt;Pronto, agora é só jogar em um &lt;a href='http://en.wikipedia.org/wiki/Bourne_shell'&gt;.sh&lt;/a&gt;, rodar e abrir o navegador :D .&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://roberto.techmobil.com.br/">
    <author>
      <name>roberto</name>
    </author>
    <id>tag:roberto.techmobil.com.br,2007-03-31:9</id>
    <published>2007-03-31T02:16:40Z</published>
    <updated>2007-11-25T01:38:33Z</updated>
    <link href="http://roberto.techmobil.com.br/2007/3/31/fksearch-meu-1&#176;-plugin-rails" rel="alternate" type="text/html"/>
    <title>FkSearch: meu 1&#176; plugin rails</title>
<content type="html">
            &lt;p&gt;Utilizando o &lt;a href='http://demo.script.aculo.us/ajax/autocompleter'&gt;auto_completer&lt;/a&gt; do &lt;a href='http://script.aculo.us '&gt;script.aculo.us &lt;/a&gt;, criei um helper para ser usado para indicar uma associação &#8220;&lt;a href='http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html#M000644'&gt;belongs_to&lt;/a&gt;&#8221;.&lt;/p&gt;


Escrevendo:
&lt;pre&gt;Category &amp;lt;%= fk_field :post, 'category_id', :search_by =&amp;gt; 'name' %&amp;gt;&lt;/pre&gt;

	&lt;p&gt;Resultaria em:&lt;/p&gt;


	&lt;p&gt;&lt;img src='http://roberto.techmobil.com.br/wp-content/uploads/2007/03/fk_search_1.GIF' alt='screenshot 1 de fk_search' /&gt;&lt;/p&gt;


	&lt;p&gt;O fk_field gera, além do text_field(para a busca), um hidden_field para armazenar o id, que no exemplo seria &lt;em&gt;post[category_id]&lt;/em&gt;. Também foi implementado o preenchimento do valor inicial, tanto do text_field quanto do hidden_field, para o caso de telas de edição.&lt;/p&gt;


	&lt;p&gt;Para instalar: &lt;strong&gt;ruby script/plugin install &lt;a href='http://svn.roberto.techmobil.com.br/plugins/fk_search'&gt;http://svn.roberto.techmobil.com.br/plugins/fk_search&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;


	&lt;p&gt;O código foi extraído de um projeto da minha &lt;a href='http://www.techmobil.com.br'&gt;empresa&lt;/a&gt; e ainda não foi finalizado. No arquivo &lt;span class='caps'&gt;TODO&lt;/span&gt; tem algumas features que pretendo implementar e também estou aceitando sugestões. &lt;a href='http://subtlety.errtheblog.com/O_o/139.xml'&gt;As modificações podem ser acompanhadas via rss.&lt;/a&gt;&lt;/p&gt;


	&lt;p&gt;Tendo maiores novidades, escrevo outro post. :)&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://roberto.techmobil.com.br/">
    <author>
      <name>roberto</name>
    </author>
    <id>tag:roberto.techmobil.com.br,2007-03-26:8</id>
    <published>2007-03-26T13:42:00Z</published>
    <updated>2007-12-03T02:05:57Z</updated>
    <link href="http://roberto.techmobil.com.br/2007/3/26/svn-feed-com-subtlety" rel="alternate" type="text/html"/>
    <title>svn feed com Subtlety</title>
<content type="html">
            &lt;p&gt;Que tal acompanhar versões daquele plugin ou projeto que você adora?&lt;/p&gt;


	&lt;p&gt;Adicione o endereço do repositório (público) no &lt;a href='http://subtlety.errtheblog.com/'&gt;Subtlety&lt;/a&gt; e ganhe um &lt;span class='caps'&gt;RSS&lt;/span&gt; feed das mudanças do mesmo.&lt;/p&gt;


	&lt;p&gt;Use e abuse.&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://roberto.techmobil.com.br/">
    <author>
      <name>roberto</name>
    </author>
    <id>tag:roberto.techmobil.com.br,2007-03-23:6</id>
    <published>2007-03-23T20:33:00Z</published>
    <updated>2007-12-03T02:04:17Z</updated>
    <link href="http://roberto.techmobil.com.br/2007/3/23/&#218;ltimo-lugar-no-railsrally" rel="alternate" type="text/html"/>
    <title>&#218;ltimo lugar no RailsRally</title>
<content type="html">
            &lt;blockquote&gt;O pneu não furou, o carburador não entupiu, o radiador não perdeu água, a suspensão aguentou até o final, mas acabamos cruzando a linha de chegada em último lugar, ou melhor, segundo, tanto faz. &lt;em&gt;(&lt;a href='http://gigiogallindo.multiply.com/'&gt;Giovanni&lt;/a&gt;, co-piloto da equipe)&lt;/em&gt;&lt;/blockquote&gt;

	&lt;p&gt;Parabéns a &lt;a href='http://www.simplesideias.com.br'&gt;Nando Vieira&lt;/a&gt; e um abraço para toda turma do &lt;a href='http://www.rubyonbr.org'&gt;RubyOnBr&lt;/a&gt;.&lt;/p&gt;


	&lt;p&gt;Em posts futuros escreverei sobre algumas ferramentas e técnicas usadas no XodóWEB e sobre &lt;a href='http://improveit.com.br/livroxp'&gt;meu prêmio&lt;/a&gt; (valeu &lt;a href='http://improveit.com.br/vinicius'&gt;Vinícius&lt;/a&gt;).&lt;/p&gt;


	&lt;p&gt;&lt;a href='http://www.rubyonbr.org/destaques/2007/02/02/railsrally-2007/'&gt;Sobre a competição&lt;/a&gt;.&lt;/p&gt;


	&lt;p&gt;&lt;a href='http://www.rubyonbr.org/destaques/2007/03/23/ganhadores-do-rally/'&gt;Resultado&lt;/a&gt;.&lt;/p&gt;


	&lt;p&gt;Definitivamente não implemento mais nada &lt;a href='http://roberto.techmobil.com.br/wp-content/uploads/2007/03/concurso_webmobile_marcado.gif' title='Resultado de outra competição...'&gt;&#8220;com paquera&#8221;&lt;/a&gt;. :D&lt;/p&gt;


	&lt;p&gt;&lt;strong&gt;&lt;span class='caps'&gt;UPDATE&lt;/span&gt;:&lt;/strong&gt; &lt;a href='http://simplesideias.com.br/saiu-o-resultado-do-rails-rally-2007/'&gt;Post&lt;/a&gt; de &lt;a href='http://simplesideias.com.br'&gt;Nando Vieira&lt;/a&gt;, vencedor do Rally.&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://roberto.techmobil.com.br/">
    <author>
      <name>roberto</name>
    </author>
    <id>tag:roberto.techmobil.com.br,2007-03-17:5</id>
    <published>2007-03-17T09:17:00Z</published>
    <updated>2007-12-03T02:03:06Z</updated>
    <link href="http://roberto.techmobil.com.br/2007/3/17/aptana-merge-radrails" rel="alternate" type="text/html"/>
    <title>Aptana.merge! RadRails</title>
<content type="html">
            &lt;p&gt;Mal acordo, vou dar uma espiada no fórum do RubyOnBr e &lt;a href='http://blog.egenial.com.br'&gt;Carlos (o cara e-genial)&lt;/a&gt; manda &lt;a href='http://forum.rubyonbr.org/forums/4/topics/1061'&gt;uma bomba&lt;/a&gt; (notícias do tipo deveriam ser dadas apenas a partir do meio-dia nos finais de semana). Pelo menos era bomba de chocolate.&lt;/p&gt;


	&lt;p&gt;&lt;a href='http://www.aptana.com/radrails.php'&gt;Anúncio no site do Aptana&lt;/a&gt; [com comentários]:&lt;/p&gt;


&lt;blockquote&gt;Dear RadRails Users[está falando comigo],

	&lt;p&gt;There was a recent outage with the &lt;span class='caps'&gt;DNS&lt;/span&gt; servers that the radrails.org site relied on[tentei entrar a semana toda&#8230;]. Unfortunately, this coincided with our announcement of the Aptana &lt;span class='caps'&gt;IDE&lt;/span&gt; / RadRails merger[aqui a bomba]. I want to assure you that the two events are completely unrelated and merely coincidental. We have created a link to the mirrored radrails.org site here: &lt;a href='http://www.aptana.com/radrails'&gt;http://www.aptana.com/radrails&lt;/a&gt;. Aptana is excited to embrace the Ruby on Rails developer and we&#8217;ll work hard to create the very best Rails development experience possible[aê!].&lt;/p&gt;


	&lt;p&gt;Thank you,
Paul Colton, Founder
Aptana, Inc.&lt;/blockquote&gt;&lt;/p&gt;


	&lt;p&gt;No &lt;a href='http://www.aptana.com/radrails'&gt;site do radrails&lt;/a&gt; dá para encontrar a outra &lt;del datetime='2007-03-17T12:06:21+00:00'&gt;versão&lt;/del&gt; visão da história :-D .&lt;/p&gt;


	&lt;p&gt;Por enquanto o &lt;a href='http://www.aptana.com/download_radrails.php'&gt;download&lt;/a&gt; é separado, mas no &lt;a href='http://www.aptana.com'&gt;site do aptana&lt;/a&gt; encontra-se o &lt;a href='http://www.aptana.com/docs/index.php/Integrating_RadRails_with_Aptana'&gt;velho guia para integração&lt;/a&gt;.&lt;/p&gt;


	&lt;p&gt;Sucesso ao projeto!&lt;/p&gt;
          </content>  </entry>
</feed>
