<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;CkIMSHszfip7ImA9WhRWFkQ.&quot;"><id>tag:blogger.com,1999:blog-31094122</id><updated>2012-01-04T13:23:09.586-02:00</updated><category term="couchdb" /><category term="Ruby Gems" /><category term="Smalltalk" /><category term="Ruby" /><category term="Rails Engine" /><category term="DRY" /><category term="test driven development" /><category term="Modularização. DRY" /><category term="Cherokee" /><category term="OSGI" /><category term="selenium" /><category term="Ruby on Rails" /><category term="seaside" /><category term="json" /><title>agnaldo4j</title><subtitle type="html">Tecnologia é assim!</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://agnaldo4j.blogspot.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://agnaldo4j.blogspot.com/" /><author><name>Agnaldo Oliveira</name><uri>https://profiles.google.com/114899998733576510265</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-HVmnTPpDaaE/AAAAAAAAAAI/AAAAAAAAAAA/hLhJIxOfyVE/s512-c/photo.jpg" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>3</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/blogspot/KuUQH" /><feedburner:info uri="blogspot/kuuqh" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry gd:etag="W/&quot;DUADSH88fip7ImA9WhRWFU4.&quot;"><id>tag:blogger.com,1999:blog-31094122.post-8277371135003904090</id><published>2012-01-02T18:38:00.003-02:00</published><updated>2012-01-02T18:56:19.176-02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-02T18:56:19.176-02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Rails Engine" /><category scheme="http://www.blogger.com/atom/ns#" term="Ruby on Rails" /><category scheme="http://www.blogger.com/atom/ns#" term="Ruby" /><category scheme="http://www.blogger.com/atom/ns#" term="OSGI" /><category scheme="http://www.blogger.com/atom/ns#" term="Modularização. DRY" /><category scheme="http://www.blogger.com/atom/ns#" term="Ruby Gems" /><title>Modularizando projetos com ruby e rails</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: large;"&gt;&lt;b&gt;Objetivo&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;Modularizar aplicações&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;a href="http://api.rubyonrails.org/"&gt;Ruby on Rails&lt;/a&gt;&amp;nbsp;utilizando&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;a href="http://api.rubyonrails.org/classes/Rails/Engine.html"&gt;Rails Engine&lt;/a&gt; e &lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;a href="http://guides.rubygems.org/"&gt;Ruby Gems&lt;/a&gt;.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: large;"&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: large;"&gt;&lt;b&gt;Como chegamos a solução&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: large;"&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;A algumas semanas&amp;nbsp;estávamos avaliando mudanças em nossa forma de desenvolver projetos web, já que a mais de um ano vinhamos utilizando um framework próprio escrito em Java para este fim, quando criamos o mesmo pensamos em uma forma de reutilizar módulos em outros projetos de forma a sermos mais rentáveis.&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;Este framework no quesito reutilização era muito bom mas no quesito velocidade de desenvolvimento era muito ruim, &amp;nbsp;sabe aquele ciclo usando maven? onde se tem que compilar, publicar e rodar como debug etc.&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;Em paralelo aos projetos maiores começamos a criar projetos menores usando&amp;nbsp;&lt;a href="http://api.rubyonrails.org/"&gt;Ruby on Rails&lt;/a&gt;&amp;nbsp;e começamos a conviver com uma velocidade de desenvolvimento nunca antes&amp;nbsp;praticada, começamos&amp;nbsp;então a medir essa performance, comparando com os projetos escritos no framework Java.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;
&lt;/span&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;div style="text-align: justify;"&gt;
&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;O &amp;nbsp;&lt;a href="http://api.rubyonrails.org/"&gt;Ruby on Rails&lt;/a&gt;&amp;nbsp;no quesito velocidade de&amp;nbsp;desenvolvimento&amp;nbsp;não deixava a desejar&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;, mas ainda&amp;nbsp;tínhamos&amp;nbsp;o problema de modularização, que nas&amp;nbsp;versões&amp;nbsp;anteriores ao&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;a href="http://api.rubyonrails.org/"&gt;Ruby on Rails&lt;/a&gt;&amp;nbsp;3.0 era feita via Plugins e era muito ruim.&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;
&lt;/span&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;Mas tivemos muita sorte, pois montamos nosso projeto de validação da&amp;nbsp;hipótese sobre&amp;nbsp;&lt;a href="http://api.rubyonrails.org/"&gt;Ruby on Rails&lt;/a&gt;&amp;nbsp;3.1.3, onde já existia uma forma de fazer esse trabalho de forma muito melhor, foi criada uma API no&amp;nbsp;&lt;a href="http://api.rubyonrails.org/"&gt;Ruby on Rails&lt;/a&gt;&amp;nbsp;chamada&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;a href="http://api.rubyonrails.org/classes/Rails/Engine.html"&gt;Rails Engine&lt;/a&gt;&amp;nbsp;e com a utilização de&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;a href="http://guides.rubygems.org/"&gt;Ruby Gems&lt;/a&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;conseguimos ter o mesmo modelo de modularização que no framework escrito Java usando &lt;a href="http://www.osgi.org/Main/HomePage"&gt;OSGI&lt;/a&gt;.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: large;"&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: large;"&gt;&lt;b&gt;Exemplos utilizados&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;Para aprender estes recursos usamos exemplos&amp;nbsp;disponíveis no &lt;a href="https://github.com/"&gt;github&lt;/a&gt;, voce pode utilizar vários exemplos aqui estão dois que usei para executar o que&amp;nbsp;queríamos&amp;nbsp;o primeiro é&amp;nbsp;&lt;a href="https://github.com/mankind/Rails-3-engine-example"&gt;Rails-3-engine-example&lt;/a&gt;&amp;nbsp;e o segundo é o&amp;nbsp;&lt;a href="https://github.com/flaviamissi/rails-engine-sample"&gt;rails-engine-sample&lt;/a&gt;.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: large;"&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: large;"&gt;&lt;b&gt;Projeto Portal&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;Para finalizar criamos um projeto chamado portal onde este depende das gems criadas.&lt;/span&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;Nesse projeto podemos mudar as configurações de html, css e javascripts e podemos&amp;nbsp;estender&amp;nbsp;as funcionalidades das gems sem destruir a estrutura base que pode ser usada por vários projetos ao mesmo tempo.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;&lt;b&gt;Finalizando&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;Espero com esta explicação simples ter passado todas as dicas necessárias de como reutilizar código entre projetos&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;a href="http://api.rubyonrails.org/"&gt;Ruby on Rails&lt;/a&gt;&amp;nbsp;3.1.3.&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31094122-8277371135003904090?l=agnaldo4j.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/w6caUAyAVPDGlquYKPtZTo0xyrI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/w6caUAyAVPDGlquYKPtZTo0xyrI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/w6caUAyAVPDGlquYKPtZTo0xyrI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/w6caUAyAVPDGlquYKPtZTo0xyrI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/KuUQH/~4/X1Tu2QwGI6Q" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://agnaldo4j.blogspot.com/feeds/8277371135003904090/comments/default" title="Postar comentários" /><link rel="replies" type="text/html" href="http://agnaldo4j.blogspot.com/2012/01/modularizando-projetos-com-ruby-e-rails.html#comment-form" title="0 Comentários" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/31094122/posts/default/8277371135003904090?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/31094122/posts/default/8277371135003904090?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/KuUQH/~3/X1Tu2QwGI6Q/modularizando-projetos-com-ruby-e-rails.html" title="Modularizando projetos com ruby e rails" /><author><name>Agnaldo Oliveira</name><uri>https://profiles.google.com/114899998733576510265</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-HVmnTPpDaaE/AAAAAAAAAAI/AAAAAAAAAAA/hLhJIxOfyVE/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://agnaldo4j.blogspot.com/2012/01/modularizando-projetos-com-ruby-e-rails.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkYNSXw8fip7ImA9WhRWFU0.&quot;"><id>tag:blogger.com,1999:blog-31094122.post-2308629322750184235</id><published>2010-12-07T12:19:00.003-02:00</published><updated>2012-01-02T10:43:18.276-02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-02T10:43:18.276-02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Cherokee" /><category scheme="http://www.blogger.com/atom/ns#" term="Smalltalk" /><category scheme="http://www.blogger.com/atom/ns#" term="seaside" /><title>Montando ambiente Cherokee para Seaside</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
Neste último ciclo de desenvolvimento usando &lt;a href="http://seaside.st/"&gt;seaside&lt;/a&gt;, resolvi configurar a estrutura de distribuição de arquivos estáticos.&lt;br /&gt;
&lt;br /&gt;
O&amp;nbsp;&lt;a href="http://seaside.st/"&gt;seaside&lt;/a&gt;&amp;nbsp;não disponibiliza estes arquivos, bom na verdade até faz mas isso deixa tudo muito&amp;nbsp;engessado&amp;nbsp;já que os arquivos estáticos são armazenados na &lt;a href="http://book.seaside.st/book/getting-started/pharo-squeak/what-is-image"&gt;imagem&lt;/a&gt; de distribuição, aumentando&amp;nbsp;a burocracia na manutenção de arquivos como folha de estilos, scripts e imagens.&lt;br /&gt;
&lt;br /&gt;
Existiam algumas opções para essa finalidade como &lt;a href="http://httpd.apache.org/"&gt;Apache&lt;/a&gt;,&amp;nbsp;&lt;a href="http://nginx.org/"&gt;nginx&lt;/a&gt; que são usadas por outras comunidades, mas então novamente encontrei esse video, que descreve como usar o&amp;nbsp;&lt;a href="http://www.cherokee-project.com/"&gt;Cherokee&lt;/a&gt; para servir o&amp;nbsp;conteúdo&amp;nbsp;estático para aplicações&amp;nbsp;&lt;a href="http://seaside.st/"&gt;seaside&lt;/a&gt;&amp;nbsp;e um pouco mais.&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: center;"&gt;
&lt;iframe frameborder="0" height="300" src="http://player.vimeo.com/video/14679673?byline=0&amp;amp;portrait=0" width="400"&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
Gostei muito da filosofia do&amp;nbsp;&lt;a href="http://www.cherokee-project.com/"&gt;Cherokee&lt;/a&gt;, ele tenta ser rápido como o&amp;nbsp;&lt;a href="http://nginx.org/"&gt;nginx&lt;/a&gt;&amp;nbsp;e mais fácil de configurar.&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
O&amp;nbsp;&lt;a href="http://www.cherokee-project.com/"&gt;Cherokee&lt;/a&gt;&amp;nbsp;também&amp;nbsp;&amp;nbsp;oferece alguns wizards&amp;nbsp;que configuram de forma automática ambientes mais conhecidos como&lt;a href="http://rubyonrails.org/"&gt; ruby on rails&lt;/a&gt;, &lt;a href="http://wordpress.org/"&gt;wordpress&lt;/a&gt;&amp;nbsp;etc.&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
Como podem ver no&amp;nbsp;vídeo&amp;nbsp;a configuração do&amp;nbsp;&lt;a href="http://www.cherokee-project.com/"&gt;Cherokee&lt;/a&gt;&amp;nbsp;com&amp;nbsp;&lt;a href="http://seaside.st/"&gt;seaside&lt;/a&gt;&amp;nbsp;e muito simples, isso tornou meu ambiente de desenvolvimento mais funcional e minha visão de ambiente de produção mais clara.&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;div style="text-align: center;"&gt;
&lt;div style="text-align: left;"&gt;
SoftSimples.com.br&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31094122-2308629322750184235?l=agnaldo4j.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/9SOwa3cCdIV0MoXNLBo97WUBKFM/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/9SOwa3cCdIV0MoXNLBo97WUBKFM/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/9SOwa3cCdIV0MoXNLBo97WUBKFM/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/9SOwa3cCdIV0MoXNLBo97WUBKFM/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/KuUQH/~4/Ttj2eajs7-M" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://agnaldo4j.blogspot.com/feeds/2308629322750184235/comments/default" title="Postar comentários" /><link rel="replies" type="text/html" href="http://agnaldo4j.blogspot.com/2010/12/montando-ambiente-cherokee-para-seaside.html#comment-form" title="0 Comentários" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/31094122/posts/default/2308629322750184235?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/31094122/posts/default/2308629322750184235?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/KuUQH/~3/Ttj2eajs7-M/montando-ambiente-cherokee-para-seaside.html" title="Montando ambiente Cherokee para Seaside" /><author><name>Agnaldo Oliveira</name><uri>https://profiles.google.com/114899998733576510265</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-HVmnTPpDaaE/AAAAAAAAAAI/AAAAAAAAAAA/hLhJIxOfyVE/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://agnaldo4j.blogspot.com/2010/12/montando-ambiente-cherokee-para-seaside.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0EGQHg-fyp7ImA9Wx9SF08.&quot;"><id>tag:blogger.com,1999:blog-31094122.post-7569548337594510886</id><published>2010-11-16T12:00:00.003-02:00</published><updated>2010-12-07T11:47:01.657-02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-12-07T11:47:01.657-02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="test driven development" /><category scheme="http://www.blogger.com/atom/ns#" term="Smalltalk" /><category scheme="http://www.blogger.com/atom/ns#" term="couchdb" /><category scheme="http://www.blogger.com/atom/ns#" term="json" /><category scheme="http://www.blogger.com/atom/ns#" term="selenium" /><category scheme="http://www.blogger.com/atom/ns#" term="seaside" /><category scheme="http://www.blogger.com/atom/ns#" term="DRY" /><title>Desenvolvendo aplicação web usando seaside.</title><content type="html">&lt;div&gt;&lt;div style="text-align: justify;"&gt;A algum tempo surgiu a idéia de desenvolver um determinado software, comecei então a estudar em qual tecnologia isso seria desenvolvido.&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div style="text-align: justify;"&gt;Estudei alguns frameworks para agilizar meu trabalho e que também fossem divertidos, já que seria um trabalho pessoal ou seja aqueles que fazemos na horas de folga.&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div style="text-align: justify;"&gt;Minhas pricipais preocupações eram que a tecnologia tivesse uma prototipação rápida, fortemente componentizável, de fácil manutenção, com suporte a &lt;a href="http://json.org/"&gt;JSON&lt;/a&gt;, com suporte a &lt;a href="http://couchdb.apache.org/"&gt;CouchDB&lt;/a&gt; e que não tivesse nenhuma ligação com o meu trabalho em horário comercial.&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div style="text-align: justify;"&gt;Minha escolha foi pelo framework &lt;a href="http://seaside.st/"&gt;seaside&lt;/a&gt;, que é escrito em smalltalk (&lt;a href="http://pharo-project.org/home"&gt;Pharo&lt;/a&gt;), comecei minha busca por materiais de estudo sobre as tecnologias envolvidas, existem vários &lt;a href="http://stephane.ducasse.free.fr/FreeBooks.html"&gt;livros disponíveis de graça sobre smalltalk&lt;/a&gt;, os que usei são: &lt;a href="http://book.seaside.st/book"&gt;Dinamic Web Development with Seaside&lt;/a&gt;, &lt;a href="http://pharobyexample.org/"&gt;Pharo by Example&lt;/a&gt;&amp;nbsp;e &lt;a href="http://www.squeakbyexample.org/"&gt;Squeak by Example&lt;/a&gt;, realmente uma ótima documentação que me deu o suporte para começar a fazer alguma coisa.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Ao iniciar o desenvolvimento eu precisava de ferramentas para testar a aplicação e uma API para acesso &amp;nbsp;ao&amp;nbsp;&lt;a href="http://couchdb.apache.org/"&gt;CouchDB&lt;/a&gt;&amp;nbsp;, busquei novamente na comunidade então descobri esse vídeo que explica como usar o &lt;a href="http://seleniumhq.org/projects/remote-control/"&gt;selenium&lt;/a&gt; para fazer testes em uma aplicação&amp;nbsp;&lt;a href="http://seaside.st/"&gt;seaside&lt;/a&gt;:&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div style="text-align: center;"&gt;&lt;iframe frameborder="0" height="300" src="http://player.vimeo.com/video/13973846" width="400"&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;br /&gt;
Também encontrei &lt;a href="http://www.squeaksource.com/SCouchDB/"&gt;essa API&lt;/a&gt;&amp;nbsp;para acesso ao&amp;nbsp;&lt;a href="http://couchdb.apache.org/"&gt;CouchDB&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Os documentos recuperados do&amp;nbsp;&lt;a href="http://couchdb.apache.org/"&gt;CouchDB&lt;/a&gt;, são parseados diretamente para um&amp;nbsp;JsonObject que herda de um&amp;nbsp;Dictionary, da mesma forma para salvar um documento basta criar um&amp;nbsp;JsonObject como no exemplo:&lt;br /&gt;
&lt;br /&gt;
| domain |&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;domain :=&amp;nbsp;JsonObject new.&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;domain name: 'teste'.&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;domain login: 'teste'.&lt;br /&gt;
&lt;br /&gt;
Neste exemplo ele de forma dinâmica cria os métodos de ajuste.&lt;br /&gt;
Para salvar no&amp;nbsp;&lt;a href="http://couchdb.apache.org/"&gt;CouchDB&lt;/a&gt;&amp;nbsp;usa-se este modelo:&lt;br /&gt;
&lt;br /&gt;
| database result &amp;nbsp;docID |&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;database := self openDBWithName: self databaseName.&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;domain&amp;nbsp;id isNil ifTrue: [&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;docID := database adaptor newUUID.&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;database documentAt: docID put: domain.&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;^database documentAt: docID.&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;] ifFalse: [&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;database documentAt: domain id put: domain.&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;^database documentAt: domain id.&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;].&lt;br /&gt;
&lt;br /&gt;
Continuarei a descrever esse desenvolvimento pois achei muito interessante e divertido.&lt;br /&gt;
A velocidade de desenvolvimento é boa e o reuso do código é muito bom, tentarei descrever isso melhor no próximo post.&lt;br /&gt;
&lt;br /&gt;
SoftSimples.com.br&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31094122-7569548337594510886?l=agnaldo4j.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/b49RJRJSwbX4kMvuHyYOxislQ7E/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/b49RJRJSwbX4kMvuHyYOxislQ7E/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/b49RJRJSwbX4kMvuHyYOxislQ7E/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/b49RJRJSwbX4kMvuHyYOxislQ7E/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/KuUQH/~4/ND-HosLblwI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://agnaldo4j.blogspot.com/feeds/7569548337594510886/comments/default" title="Postar comentários" /><link rel="replies" type="text/html" href="http://agnaldo4j.blogspot.com/2010/11/desenvolvendo-aplicacao-web-usando.html#comment-form" title="0 Comentários" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/31094122/posts/default/7569548337594510886?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/31094122/posts/default/7569548337594510886?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/KuUQH/~3/ND-HosLblwI/desenvolvendo-aplicacao-web-usando.html" title="Desenvolvendo aplicação web usando seaside." /><author><name>Agnaldo Oliveira</name><uri>https://profiles.google.com/114899998733576510265</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-HVmnTPpDaaE/AAAAAAAAAAI/AAAAAAAAAAA/hLhJIxOfyVE/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://agnaldo4j.blogspot.com/2010/11/desenvolvendo-aplicacao-web-usando.html</feedburner:origLink></entry></feed>

