<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-1913030929498963580</id><updated>2011-07-28T18:18:54.784-07:00</updated><category term='bases'/><category term='railssummit'/><category term='babinha'/><category term='javascript'/><category term='a2c'/><category term='rumble'/><category term='rails'/><category term='conexão'/><category term='railsrumble'/><category term='swf'/><category term='bancos'/><category term='ubuntu'/><category term='summit'/><category term='acts_as_state_machine'/><category term='summit 2009'/><category term='FSM'/><category term='gonow'/><category term='database'/><title type='text'>Run to Rails...</title><subtitle type='html'>Ruby, Rails, JavaScript, Mootools, JQuery, CSS, Interface, filosofia e o que der na telha =P</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://www.hamonrails.com.br/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1913030929498963580/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://www.hamonrails.com.br/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Henry Hamon</name><uri>http://www.blogger.com/profile/09885794876419895686</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://bp1.blogger.com/_D0ghLJMcv1c/SD3rYtRIGYI/AAAAAAAAACY/qKNaCZsz1CQ/S220/C%C3%B3pia+de+avatar.png'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>12</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-1913030929498963580.post-408162672140067239</id><published>2009-10-20T19:32:00.000-07:00</published><updated>2009-10-21T09:06:55.432-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='summit 2009'/><category scheme='http://www.blogger.com/atom/ns#' term='railssummit'/><category scheme='http://www.blogger.com/atom/ns#' term='rails'/><category scheme='http://www.blogger.com/atom/ns#' term='summit'/><title type='text'>Rails Summit 2009 - Retrospectiva</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_D0ghLJMcv1c/St6DwRZn5yI/AAAAAAAAARc/vETGAkkZlW4/s1600-h/DSC01100.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="http://1.bp.blogspot.com/_D0ghLJMcv1c/St6DwRZn5yI/AAAAAAAAARc/vETGAkkZlW4/s400/DSC01100.JPG" alt="" id="BLOGGER_PHOTO_ID_5394894268964267810" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;O evento, como no ano passado, foi fantástico!&lt;br /&gt;Infelizmente perdemos o início do evento devido a problemas logísticos, como bom brasileiro deixamos tudo para a última hora =D&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_D0ghLJMcv1c/St6D-NL-pJI/AAAAAAAAARk/aH7NP37XZfY/s1600-h/DSC01088.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="http://3.bp.blogspot.com/_D0ghLJMcv1c/St6D-NL-pJI/AAAAAAAAARk/aH7NP37XZfY/s400/DSC01088.JPG" alt="" id="BLOGGER_PHOTO_ID_5394894508351464594" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Enfim o evento foi muito bem organizado, um excelente time de palestrantes, patrocinadores de peso, mais locawebzetes, muito mais participantes do que no ano passado (esta foi a minha impressão não tenho os dados exatos) e por incrível que pareça &lt;span style="font-style: italic; font-weight: bold;"&gt;tinha muito mais mulheres participando do evento&lt;br /&gt;&lt;/span&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_D0ghLJMcv1c/St5-7uNBCQI/AAAAAAAAARU/jhnX0Kyly38/s1600-h/MulheresMundoReal-2009-16.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 345px;" src="http://4.bp.blogspot.com/_D0ghLJMcv1c/St5-7uNBCQI/AAAAAAAAARU/jhnX0Kyly38/s400/MulheresMundoReal-2009-16.JPG" alt="" id="BLOGGER_PHOTO_ID_5394888968116439298" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Um Resumo das palestras que assisti:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Primeiro Dia&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;h4&gt;José Valim – Aprenda a customizar os geradores do Rails 3.0&lt;/h4&gt;Palestra mt boa onde foi apresentado o Thor e os geradores presentes no Rails 3.&lt;br /&gt;&lt;br /&gt;Thor = Rake + Sake + Rubigen + Rails template&lt;br /&gt;&lt;br /&gt;&lt;a href="http://blog.plataformatec.com.br/2009/10/thor-e-devise-no-rails-summit-latin-america-2009/"&gt;Slides da apresentação&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;Fabio Kung – Ruby, dinamismo e metaprogramação na construção de DSLs&lt;/h4&gt;Uma aula de &lt;span style="font-weight: bold;"&gt;magia negra&lt;/span&gt; em ruby, foi uma palestra bem técnica mas extremamente prática pois o Fábio codificou uma dsl ao vivo.&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;Fabio Akita – Agile, além do caos&lt;/h4&gt;Para mim esta foi a melhor palestra do primeiro dia, uma palestra sobre agilidade com uma visão completamente diferente, quebrando os paradigmas do tema e apresentando a teoria do caos baseado em sua pesquisa em áreas como física, psicologia, sociologia, biologia, etc.&lt;br /&gt;&lt;br /&gt;&lt;object height="300" width="400"&gt;&lt;param name="allowfullscreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=7099091&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=&amp;amp;fullscreen=1"&gt;&lt;embed src="http://vimeo.com/moogaloop.swf?clip_id=7099091&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=&amp;amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" height="300" width="400"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;p&gt;&lt;a href="http://vimeo.com/7099091"&gt;Além do Caos - Pensamentos Aleatórios sobre Agilidade&lt;/a&gt; from &lt;a href="http://vimeo.com/locaweb"&gt;Locaweb&lt;/a&gt; on &lt;a href="http://vimeo.com/"&gt;Vimeo&lt;/a&gt;.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;Matt Aimonetti – O Futuro do Ruby &amp;amp; Rails&lt;/h4&gt;Foi apresentado toda a flexibilidade e novidades que a nova versão do rails irá ter. Ele também falou sobre otimização interna do rails 3 que deixou de 2 a 3 vezes mais rápido que a versão anterior exibindo benchmarks feito por ele.&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;Desconferência&lt;/h4&gt;Ao final do primeiro dia teve a desconferência, ano passado o @elomar deu um show e neste ano foi a vez do @aldofilho irmãozinho dele de 11 anos contando sua divertidíssima jornada no aprendizado do rails, e para provar que realmente sabia do que falava ele codificou um blog ao vivo.&lt;br /&gt;Vale apena conferir:&lt;br /&gt;&lt;embed src="http://blip.tv/play/AYGnlTEC" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" height="390" width="480"&gt;&lt;/embed&gt;&lt;br /&gt;entre outras apresentações destaque para o pessoal do guru sp, oxente rails, ruby inside e principalmente o @lfcipriani com seu case de aplicação: &lt;a href="http://www.maratonadebasquete.com.br/marathons/1"&gt;Maratona de Basquete&lt;/a&gt; um placar eletrônico que é uma aplicação com um mega esquema de arquitetura envolvendo Rails, jQuery, XMPP, bots Ruby e tudo mais. &lt;a href="http://prezi.com/-9hz7py6rkkc/"&gt;veja&lt;/a&gt;&lt;br /&gt;E para finalizar @danicuki cantou o "samba do akita"&lt;br /&gt;&lt;object height="340" width="560"&gt;&lt;param name="movie" value="http://www.youtube.com/v/RAfoEnlbGq4&amp;amp;hl=en&amp;amp;fs=1&amp;amp;"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/RAfoEnlbGq4&amp;amp;hl=en&amp;amp;fs=1&amp;amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" height="340" width="560"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Segundo Dia&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center;" alt="" src="http://www.akitaonrails.com/assets/2009/10/17/4008589268_7079c412a1_original.jpg"/&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;h4&gt;Richard Kilmer  – MacRuby&lt;/h4&gt;Foi apresentado o MacRuby, HotCocoa e a união entre Ruby e Objective-C.&lt;br /&gt;&lt;h4&gt;Carlos Villela  – Ruby na ThoughtWorks&lt;/h4&gt;Carlos contou sobre a experiência da Thoughtworks em projetos de Ruby.&lt;br /&gt;&lt;h4&gt;Marcos Tapajós – CouchDB no Rails&lt;/h4&gt; Foi um &lt;span style="font-style: italic;"&gt;Overview&lt;/span&gt; bem completo do CouchDb, o Tapajós também contou sobre sua experiência com mudança de paradigma da saída de um banco relacional para ir para um banco orientado a documentos.&lt;br /&gt;&lt;h4&gt;Bruno Miranda – Rails não escala&lt;/h4&gt; Esta palestra seria feita junto com o &lt;a href="http://jasonseifer.com/"&gt;Jason Seifer&lt;/a&gt;, mas devido a problemas que o Jason teve com o visto não pode vir, mas ele acabou gravando em vídeo a palestra. Bruno apresentou o projeto &lt;a href="http://br.msn.cyloop.com/" onclick="javascript:urchinTracker('/outbound/br.msn.cyloop.com/?ref=http_//akitaonrails.com/2009/10/17/rails-summit-2009-retrospectiva');"&gt;Cyloop&lt;/a&gt;, canal de música do msn, projetinho que recebe nada menos que 13500 requisições por minuto, e como eles conseguiram manter uma infra escalável usando Rails.&lt;br /&gt;&lt;h4&gt;Vinicius Teles – De serviço para produto&lt;/h4&gt; Para mim este foi o melhor do evento, Vinicius deu um show contando suas experiências como empreendedor e dando dicas a la &lt;span style="font-style: italic;"&gt;Getting Real&lt;/span&gt;, vale apena conferir&lt;br /&gt;&lt;embed src="http://blip.tv/play/AYGnz18C" type="application/x-shockwave-flash" width="480" height="390" allowscriptaccess="always" allowfullscreen="true"&gt;&lt;/embed&gt; &lt;br /&gt;&lt;br /&gt;&lt;h4&gt;Obie Fernandes – Dominando a arte do desenvolvimento de aplicações&lt;/h4&gt;  Fechando com chave de ouro, comparando desenvolvimento com arte, tanto música, pintura e artes marciais.&lt;br /&gt;Falando sobre tempo de estudo, não é “apenas estudo” por que pratica não leva a perfeição,  “prática perfeita leva a perfeição”, e que Software é criatividade.&lt;br /&gt;&lt;br /&gt;Keep Practicing&lt;br /&gt;&lt;br /&gt;&lt;embed src="http://blip.tv/play/AYGohSwC" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" height="390" width="480"&gt;&lt;/embed&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1913030929498963580-408162672140067239?l=www.hamonrails.com.br' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.hamonrails.com.br/feeds/408162672140067239/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1913030929498963580&amp;postID=408162672140067239' title='3 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1913030929498963580/posts/default/408162672140067239'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1913030929498963580/posts/default/408162672140067239'/><link rel='alternate' type='text/html' href='http://www.hamonrails.com.br/2009/10/rails-summit-2009-retrospectiva.html' title='Rails Summit 2009 - Retrospectiva'/><author><name>Henry Hamon</name><uri>http://www.blogger.com/profile/09885794876419895686</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://bp1.blogger.com/_D0ghLJMcv1c/SD3rYtRIGYI/AAAAAAAAACY/qKNaCZsz1CQ/S220/C%C3%B3pia+de+avatar.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_D0ghLJMcv1c/St6DwRZn5yI/AAAAAAAAARc/vETGAkkZlW4/s72-c/DSC01100.JPG' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1913030929498963580.post-5465036454622907517</id><published>2009-10-05T09:50:00.000-07:00</published><updated>2009-10-20T20:04:13.499-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='summit'/><title type='text'>Está chegando a Rails Summit 2009</title><content type='html'>&lt;object width="560" height="340"&gt;&lt;param name="movie" value="http://www.youtube.com/v/aR7zOHDzsPM&amp;amp;hl=en&amp;amp;fs=1&amp;amp;"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/aR7zOHDzsPM&amp;amp;hl=en&amp;amp;fs=1&amp;amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="560" height="340"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://www.railssummit.com.br/?utm_campaign=Railssummit&amp;amp;utm_source=banner_parceiros&amp;amp;utm_medium=banner&amp;amp;utm_content=vouParticipar_210x60%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20"&gt;&lt;img src="http://railssummit.com.br/images/banners/vouParticipar_210x60.jpg" alt="Rails Summit 2009" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;E já está as portas o maior evento rails da américa latina, e este ano promete ser melhor... ano passado já foi fantástico, estou ansioso para este =D&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1913030929498963580-5465036454622907517?l=www.hamonrails.com.br' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.hamonrails.com.br/feeds/5465036454622907517/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1913030929498963580&amp;postID=5465036454622907517' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1913030929498963580/posts/default/5465036454622907517'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1913030929498963580/posts/default/5465036454622907517'/><link rel='alternate' type='text/html' href='http://www.hamonrails.com.br/2009/10/rails-summit-2009.html' title='Está chegando a Rails Summit 2009'/><author><name>Henry Hamon</name><uri>http://www.blogger.com/profile/09885794876419895686</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://bp1.blogger.com/_D0ghLJMcv1c/SD3rYtRIGYI/AAAAAAAAACY/qKNaCZsz1CQ/S220/C%C3%B3pia+de+avatar.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1913030929498963580.post-6498390517607443578</id><published>2009-08-21T07:41:00.000-07:00</published><updated>2009-08-21T07:53:16.367-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rumble'/><category scheme='http://www.blogger.com/atom/ns#' term='rails'/><category scheme='http://www.blogger.com/atom/ns#' term='railsrumble'/><category scheme='http://www.blogger.com/atom/ns#' term='gonow'/><category scheme='http://www.blogger.com/atom/ns#' term='a2c'/><title type='text'>Rumble!!!</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_D0ghLJMcv1c/So6yVuWMLfI/AAAAAAAAARM/QQ6mxvBfBQ4/s1600-h/rumble.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 301px;" src="http://3.bp.blogspot.com/_D0ghLJMcv1c/So6yVuWMLfI/AAAAAAAAARM/QQ6mxvBfBQ4/s400/rumble.png" alt="" id="BLOGGER_PHOTO_ID_5372427491787681266" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Hoje às 21.00hs (horario de brasilia) começa a #RailsRumble 2009 e junto com o @esdras_mayrink e o @evandrodutra formamos a&lt;a href="http://r09.railsrumble.com/teams/ninjacrowd"&gt; NinjaCrowd&lt;/a&gt;.&lt;br /&gt;Para os menos informados, a Rumble é uma competição de desenvolvimento em rails, onde pequenas equipes com no máximo 4 integrantes tem o desafio de desenvolver um aplicativo completo em 48 horas.&lt;br /&gt;A &lt;a href="http://www.gonow.com.br/"&gt;GoNow&lt;/a&gt; acredita no potencial dos desenvolvedores brasileiros e está patrocinando 3 equipes, a minha é uma delas que também conta com o apoio e patrocínio da &lt;a href="http://seja.a2c.com.br"&gt;A2C&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;O evento será transmitido ao vivo pela GoNow via streaming, acompanhem por este link &lt;a href="http://www.gonow.com.br/rumble/"&gt;http://www.gonow.com.br/rumble/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1913030929498963580-6498390517607443578?l=www.hamonrails.com.br' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.hamonrails.com.br/feeds/6498390517607443578/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1913030929498963580&amp;postID=6498390517607443578' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1913030929498963580/posts/default/6498390517607443578'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1913030929498963580/posts/default/6498390517607443578'/><link rel='alternate' type='text/html' href='http://www.hamonrails.com.br/2009/08/rumble.html' title='Rumble!!!'/><author><name>Henry Hamon</name><uri>http://www.blogger.com/profile/09885794876419895686</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://bp1.blogger.com/_D0ghLJMcv1c/SD3rYtRIGYI/AAAAAAAAACY/qKNaCZsz1CQ/S220/C%C3%B3pia+de+avatar.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_D0ghLJMcv1c/So6yVuWMLfI/AAAAAAAAARM/QQ6mxvBfBQ4/s72-c/rumble.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1913030929498963580.post-6970637138965472098</id><published>2009-04-02T21:16:00.000-07:00</published><updated>2009-04-02T21:17:55.811-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Venha o Jaunty Jackalop</title><content type='html'>&lt;script type="text/javascript" src="http://www.ubuntu.com/files/countdown/display2.js"&gt;&lt;/script&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1913030929498963580-6970637138965472098?l=www.hamonrails.com.br' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.hamonrails.com.br/feeds/6970637138965472098/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1913030929498963580&amp;postID=6970637138965472098' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1913030929498963580/posts/default/6970637138965472098'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1913030929498963580/posts/default/6970637138965472098'/><link rel='alternate' type='text/html' href='http://www.hamonrails.com.br/2009/04/venha-o-jaunty-jackalop.html' title='Venha o Jaunty Jackalop'/><author><name>Henry Hamon</name><uri>http://www.blogger.com/profile/09885794876419895686</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://bp1.blogger.com/_D0ghLJMcv1c/SD3rYtRIGYI/AAAAAAAAACY/qKNaCZsz1CQ/S220/C%C3%B3pia+de+avatar.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1913030929498963580.post-4011148017066679154</id><published>2009-04-01T18:47:00.000-07:00</published><updated>2009-04-01T18:50:30.058-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><title type='text'>O Poder do Javascript. [Jogos]</title><content type='html'>&lt;p style="text-align: left;"&gt;Escrevi este artigo para a comunidade da A2C, como esta difícil atualizar este blog(principalmente depois que criei a &lt;a href="http://eeebrails.ning.com"&gt;eeebrasil&lt;/a&gt;), republico ele aqui.&lt;br /&gt;&lt;/p&gt;&lt;p style="text-align: center;"&gt;&lt;img src="http://api.ning.com/files/MI4OkBHq3NXaKkB5Ct1L5EjZZLDTdneLeRpE2WR34puzNsO509NhzaeGHroCqkk04ukcdF-g46MrYd-JN5q8ZD1iidxH1ECj/js.png" alt="" width="450" height="269" /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p style="text-align: right;"&gt;&lt;a href="http://www.youtube.com/watch?v=-xEzGIuY7kw" target="blank" style="text-align: right; font-size: 9px;"&gt;foto&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Sempre que os programadores Flash/ActionScript e Flex me mostram algum efeito diferente eu digo que consigo fazer o mesmo em Javascript. Mesmo que na maior parte do tempo seja pura implicância, mais para ficar aquela disputa saudável da melhor linguagem de programação e coisas do tipo, pretendo escrever alguns artigos para mostrar que isto realmente é possível.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Hoje em dia Javascript não é mais um pesadelo, graças aos frameworks como: "MooTools, JQuery, Prototype, Dojo, etc..."&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Claro que para todo programador o santo graal dos desafios são os jogos e todas as suas complexidades e técnicas. Então por quê não começar com jogos?&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;A listagem abaixo servirá mais do que exemplificar e sim como fonte de inspiração, portanto não aprecie com moderação xD&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a style="padding: 5px; background-color: rgb(153, 153, 153); color: rgb(255, 255, 255); font-weight: bold; text-decoration: none;" href="http://www.themaninblue.com/experiment/BunnyHunt/" target="blank"&gt;Bunny Hunt&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.themaninblue.com/experiment/BunnyHunt/" target="blank"&gt;&lt;/a&gt;&lt;p style="text-align: center;"&gt;&lt;img src="http://api.ning.com/files/cFWlWv1NqxBr7Z*cdY1EfbkUHD6-w2qNq-2b8oyCYSTRDWE1wHRjBEIkpgIyEs3hwFhkP0Zafgf72FvItOFDp0Rpo6h1lBh4/huntingjavascriptgame.gif" alt="" /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Um clássico jogo de tiro, com uma interface simples.&lt;br /&gt;Olha o poder em misturar &lt;b&gt;XHTML, CSS e &lt;u&gt;JavaScript puro.&lt;/u&gt;&lt;/b&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a style="padding: 5px; background-color: rgb(153, 153, 153); color: rgb(255, 255, 255); font-weight: bold; text-decoration: none;" href="http://www.travians.com/" target="blank"&gt;Travians&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.travians.com/" target="blank"&gt;&lt;/a&gt;&lt;p style="text-align: center;"&gt;&lt;img src="http://api.ning.com/files/gu9dA-kBo9tAlxC3ngFVjixVaPpwJ0ucc3K*ZdDM-qm5q0E-DaEkc12JK5JpC184201wb1-3NngfxnvjjOSuSjOXRneR9ncp/ajaxgametravians.jpg" alt="" width="480" height="130" /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Um jogo do tipo "The Sims" onde você é um aldeão.&lt;br /&gt;É um jogo multiplayer e com recursos 100% &lt;b&gt;Ajax&lt;/b&gt;.&lt;br /&gt;&lt;b&gt;Framework utilizado:&lt;/b&gt;&lt;a href="http://xajaxproject.org/"&gt;Xajax&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a style="padding: 5px; background-color: rgb(153, 153, 153); color: rgb(255, 255, 255); font-weight: bold; text-decoration: none;" href="http://www.rebelideas.co.uk/games/invamars/" target="blank"&gt;Invaders From Mars&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.rebelideas.co.uk/games/invamars/"&gt;&lt;/a&gt;&lt;p style="text-align: left;"&gt;&lt;img src="http://api.ning.com/files/IP2xMDdxQMlW*4SIqNfqfbSvby18aezITPiA408yRZ2FmLXFP*TSaLTXT*kS9zBAPlvAYRQLDTJtV8AXgyecT5-ytTrT9Qli/javascriptshootergame.jpg" alt="" width="480" height="130" /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Outro joguinho clássico e com uma fantástica implementação.&lt;br /&gt;&lt;a href="http://rebelfive.wordpress.com/"&gt;O blog dos desenvolvedores&lt;/a&gt; está recheado de informação de como fazer um jogo como este.&lt;br /&gt;&lt;b&gt;Framework utilizado:&lt;/b&gt;&lt;a href="http://www.schillmania.com/projects/soundmanager2/"&gt;SoundManager2&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a style="padding: 5px; background-color: rgb(153, 153, 153); color: rgb(255, 255, 255); font-weight: bold; text-decoration: none;" href="http://worldofsolitaire.com/index-dev.html" target="blank"&gt;Jogos de Cartas&lt;/a&gt;&lt;br /&gt;&lt;a href="http://worldofsolitaire.com/index-dev.html"&gt;&lt;/a&gt;&lt;p style="text-align: center;"&gt;&lt;img src="http://api.ning.com/files/IP2xMDdxQMlrNas4VKtAsi1eDeCd6aFBJ1AOcpt61TRTxVurbDIN*U1xMVAiYrNNlTqMgbPUiRcLxQ8VhGkTMwn-arPz9zO8/javascriptsolitaire.jpg" alt="" width="480" height="130" /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Um conjunto com vários jogos de carta do tipo Solitarie(Freecel, Yukon, etc...)&lt;br /&gt;&lt;b&gt;Frameworks utilizados:&lt;/b&gt;&lt;a href="http://developer.yahoo.com/yui/"&gt;YUI&lt;/a&gt;,&lt;a href="http://mochikit.com/"&gt;Mochikit&lt;/a&gt;,&lt;a href="http://www.liquidx.net/plotkit/"&gt;Plotkit&lt;/a&gt; e &lt;a href="http://mootools.net/"&gt;MooTools&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a style="padding: 5px; background-color: rgb(153, 153, 153); color: rgb(255, 255, 255); font-weight: bold; text-decoration: none;" href="http://www.digitalinsane.com/archives/2008/08/30/pacman/" target="blank"&gt;PacMan&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.digitalinsane.com/archives/2008/08/30/pacman/" target="blank"&gt;&lt;/a&gt;&lt;p style="text-align: center;"&gt;&lt;img src="http://api.ning.com/files/Gps2xOh6U07ffbtn9ONVERdYQcpSRxFXDCaRA3mQ8a48cuKn1HCY9Vj2qkXemRV9XGsH*f2*PQqsb8ZjCoZS95I5j-Py8aZv/javascriptpacman.gif" alt="" width="480" height="130" /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;O mais clássico de todos os jogos. Refinado com o toque do JavaScript &amp;amp; XHTML e com o belo uso de &lt;i&gt;sprites&lt;/i&gt; em CSS&lt;br /&gt;&lt;b&gt;Framework utilizado:&lt;/b&gt;&lt;a href="http://developer.yahoo.com/yui/"&gt;YUI&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a style="padding: 5px; background-color: rgb(153, 153, 153); color: rgb(255, 255, 255); font-weight: bold; text-decoration: none;" href="http://www.e-forum.ro/bomberman/dynagame.html" target="blank"&gt;Bomberman&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.e-forum.ro/bomberman/dynagame.html" target="blank"&gt;&lt;/a&gt;&lt;p style="text-align: center;"&gt;&lt;img src="http://api.ning.com/files/Gps2xOh6U04JBuf0cmSL2AWTeX5rIqFfZ8Fto0D2aMqpKMrCj4zuvK0Czts9*YAlLB-e17fGqfLx0cw6K8bnhTs3dPzqR4Ra/javascriptbomberman.jpg" alt="" width="480" height="130" /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Ainda é possível jogar contra outro jogador &lt;a href="http://www.e-forum.ro:8080/dynagame/index"&gt;aqui&lt;/a&gt;.&lt;br /&gt;&lt;b&gt;Framework utilizado:&lt;/b&gt;&lt;a href="http://mootools.net/"&gt;MooTools&lt;/a&gt; e &lt;a href="http://www.schillmania.com/projects/soundmanager2/"&gt;SoundManager2&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a style="padding: 5px; background-color: rgb(153, 153, 153); color: rgb(255, 255, 255); font-weight: bold; text-decoration: none;" href="http://www.tomscott.com/realworldracer/" target="blank"&gt;Real World Racer&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.tomscott.com/realworldracer/" target="blank"&gt;&lt;/a&gt;&lt;p style="text-align: center;"&gt;&lt;img src="http://api.ning.com/files/nXAlo7yewMqA2rDbupCj4TMd42X33QPesHA6ATdA9MQotIRfPgFzHWPd*gyv2JJLa80uBUnvf73s3FIgu*q292p1-1DxP78g/googlemapgame.jpg" alt="" width="480" height="130" /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Dispute uma corrida pelo google map(Google Maps API).&lt;br /&gt;&lt;a style="padding: 5px; background-color: rgb(153, 153, 153); color: rgb(255, 255, 255); font-weight: bold; text-decoration: none;" href="http://ajaxchess.pragmaticlogic.com/" target="blank"&gt;Ajax Chinese Chess&lt;/a&gt; &lt;a href="http://ajaxchess.pragmaticlogic.com/" target="blank"&gt;&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;&lt;p style="text-align: center;"&gt;&lt;img src="http://api.ning.com/files/nXAlo7yewMq*fTKWRvseecu1e0ou95K5uKaUNGzqZ9cXV5*Z0oG5AFFog0dLJ*3GIyKx91ZsmOO9T6GCRetlxCf6pEqJkeuR/ajaxchinesechess.jpg" alt="" width="480" height="130" /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Um xadres chinês com ajaxt&lt;br /&gt;&lt;b&gt;Framework utilizado:&lt;/b&gt;&lt;a href="http://mootools.net/"&gt;MooTools&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a style="padding: 5px; background-color: rgb(153, 153, 153); color: rgb(255, 255, 255); font-weight: bold; text-decoration: none;" href="http://games.funnygames.nl/lemmings/index.html" target="blank"&gt;Lemmings&lt;/a&gt;&lt;br /&gt;&lt;a href="http://games.funnygames.nl/lemmings/index.html" target="blank"&gt;&lt;/a&gt;&lt;p style="text-align: center;"&gt;&lt;img src="http://api.ning.com/files/nXAlo7yewMq07QQcyDe8qn83EU8HcXF-8EpLWAZdFc-D78wxMFLWOyY49BFUJ3r3jDJOE3XaI4CzxP0FTNqeLSCNno*Uwi5X/javascriptlemmings.jpg" alt="" width="480" height="130" /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Outro clássico, e este ficou similar ao original. Em puro&lt;b&gt;Javascript:&lt;/b&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a style="padding: 5px; background-color: rgb(153, 153, 153); color: rgb(255, 255, 255); font-weight: bold; text-decoration: none;" href="http://www.markus-inger.de/test/game.php" target="blank"&gt;BeSlimed&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.markus-inger.de/test/game.php" target="blank"&gt;&lt;/a&gt;&lt;p style="text-align: center;"&gt;&lt;img src="http://api.ning.com/files/nXAlo7yewMpDna2Vf2pWNDXWqgDMY8E-u0-kFZ9*vlrQu2V0ZPax15DAXtrqMuVn9pvhy*5fgafO9LJ8obzc2ajsgDMDi3pV/javascriptbejeweled.jpg" alt="" width="392" height="130" /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Versão do popular Bejeweled.&lt;br /&gt;&lt;b&gt;Framework utilizado:&lt;/b&gt;&lt;a href="http://mootools.net/"&gt;MooTools&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a style="padding: 5px; background-color: rgb(153, 153, 153); color: rgb(255, 255, 255); font-weight: bold; text-decoration: none;" href="http://www.sinkmyship.com/" target="blank"&gt;Battleship&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.sinkmyship.com/" target="blank"&gt;&lt;/a&gt;&lt;p style="text-align: center;"&gt;&lt;img src="http://api.ning.com/files/nXAlo7yewMrRFVMTy9lmMLeDm6ohwi3E-0Agv5XqljA5X-h0WOaA54PQNwytwrH9Pbvpxb3CIu6HSTMZIXUw5G4qpYe4LMcd/javascriptbattleship.jpg" alt="" width="480" height="130" /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Jogo de batalha naval multiplayer.&lt;br /&gt;&lt;b&gt;Framework utilizado:&lt;/b&gt;&lt;a href="http://www.prototypejs.org/"&gt;Prototype&lt;/a&gt; e &lt;a href="http://script.aculo.us/"&gt;Script.aculo.us&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a style="padding: 5px; background-color: rgb(153, 153, 153); color: rgb(255, 255, 255); font-weight: bold; text-decoration: none;" href="http://blog.nihilogic.dk/2008/05/javascript-super-mario-kart.html" target="blank"&gt;Javascript Super Mario Kart&lt;/a&gt;&lt;br /&gt;&lt;a href="http://blog.nihilogic.dk/2008/05/javascript-super-mario-kart.html" target="blank"&gt;&lt;/a&gt;&lt;p style="text-align: center;"&gt;&lt;img src="http://api.ning.com/files/nXAlo7yewMriQbfgotpJ1dnvmQubMR0BUu0JiOHDozceL1CN-Qd64qLLGg3FeC32i0W33bgY2Mj2E*q2U1Uuhy9LbbsPXje4/javascriptmariogame.gif" alt="" width="320" height="130" /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;O ícone da minha geração, Super Mario Kart versão em puro Javascript. Confira também o clássico &lt;a href="http://blog.nihilogic.dk/2008/04/super-mario-in-14kb-javascript.html" target="blank"&gt;Super Mario&lt;/a&gt; em JS com apenas 14kb.&lt;a href="http://blog.nihilogic.dk/2008/04/super-mario-in-14kb-javascript.html"&gt;&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;&lt;p style="text-align: left;"&gt;&lt;img src="http://api.ning.com/files/JZ2aYp7X9ATYHUK1sn5le9ih-XDH*Xm7XxNpa5gQOjWrRkEu50GjCw3U3pRwB0Gpf13bx*f8kJ3dgiqhh5wpIfq2RgE9Me-1/javascriptmario.jpg" alt="" width="170" height="130" /&gt;&lt;/p&gt;&lt;br /&gt;&lt;a href="http://blog.nihilogic.dk/2008/04/super-mario-in-14kb-javascript.html" target="blank"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;espero que tenham gostado e até a próxima..&lt;br /&gt;( @henryhamon ) me twittem!!!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1913030929498963580-4011148017066679154?l=www.hamonrails.com.br' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.hamonrails.com.br/feeds/4011148017066679154/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1913030929498963580&amp;postID=4011148017066679154' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1913030929498963580/posts/default/4011148017066679154'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1913030929498963580/posts/default/4011148017066679154'/><link rel='alternate' type='text/html' href='http://www.hamonrails.com.br/2009/04/o-poder-do-javascript-jogos.html' title='O Poder do Javascript. [Jogos]'/><author><name>Henry Hamon</name><uri>http://www.blogger.com/profile/09885794876419895686</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://bp1.blogger.com/_D0ghLJMcv1c/SD3rYtRIGYI/AAAAAAAAACY/qKNaCZsz1CQ/S220/C%C3%B3pia+de+avatar.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1913030929498963580.post-4539696860470033466</id><published>2008-10-21T09:21:00.000-07:00</published><updated>2008-10-21T12:14:21.192-07:00</updated><title type='text'>#RailsSummit, Inesquecível!!!</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_D0ghLJMcv1c/SP4p-xdhflI/AAAAAAAAAGE/Y99G7GoFPuU/s1600-h/2961582767_67fe192ebd.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_D0ghLJMcv1c/SP4p-xdhflI/AAAAAAAAAGE/Y99G7GoFPuU/s400/2961582767_67fe192ebd.jpg" alt="" id="BLOGGER_PHOTO_ID_5259687573221113426" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Enfrentar 8 horas de estrada debaixo de um sol de rachar realmente não foi&lt;br /&gt;facil.&lt;br /&gt;Pior foi sair da rodoviária de São Paulo e pegar um taxi para o hotel, que&lt;br /&gt;depois de diversas voltas ao descer do taxi percebemos que o hotel era na&lt;br /&gt;frente da rodoviária (Maldito Taxista)... Mas valeu apena participar de&lt;br /&gt;um evento que marcou a historia.&lt;br /&gt;Faltam adjetivos para descrever a experiência ímpar que foi a Rails Summit&lt;br /&gt;2008.&lt;br /&gt;O impressionante foi um evento específico com uma abordagem extremamente&lt;br /&gt;ampla, o foco foi muito pouco em código e mais em metodologia, filosofia,&lt;br /&gt;empreendedorismo e claro TESTES e mais TESTES, tudo isto recheado de muita&lt;br /&gt;originalidade e bom humor.&lt;br /&gt;&lt;br /&gt;A estrutura do evento foi fabulosa, tomadas em todos os lugares, recepção&lt;br /&gt;com mulheres maravilhosas e wi-fi(este deixou um pouco a desejar,&lt;br /&gt;principalmente pela quantidade de acessos era dificil se conectar, tenho&lt;br /&gt;pesadelos com a vex até hoje =P)&lt;br /&gt;&lt;br /&gt;PRIMEIRO DIA&lt;br /&gt;&lt;br /&gt;A abertura foi com Gilberto Mautner CEO da locaweb, contando a historia da&lt;br /&gt;Locaweb e sua experiência com o Rails.&lt;br /&gt;Em seguida, a primeira mudança na programação, videoconferência com David&lt;br /&gt;Hansson, uma sessão de perguntas e respostas sobre o futuro do Rails.&lt;br /&gt;Não posso deixar de citar o fantastico vídeo que o pessoal do RailsEnvy&lt;br /&gt;fez para a Summit, outra vez Jason e Greg mostram o lado criativo e&lt;br /&gt;divertido do Rails, Mas Que Bueno!!&lt;br /&gt;&lt;br /&gt;Mas até então a Summit era apenas mais um evento de tecnologia, só que&lt;br /&gt;quando Chad Fowler entrou em cena com sua palestra:&lt;br /&gt;"O que significa ser um desenvolvedor Rails em uma má economia?" falando&lt;br /&gt;da importância de se fazer aquilo que se ama e saber vender a você mesmo&lt;br /&gt;fazendo barulho, ficou claro que muito estava por vir.&lt;br /&gt;"Você será a mesma pessoa que é hoje daqui a 5 anos exceto pelas pessoas&lt;br /&gt;que conhecerá e pelos livros que lerá", Chad Fowler falou eloquentemente&lt;br /&gt;sobre ser NOTÁVEL.&lt;br /&gt;&lt;br /&gt;* Be remarkable. “remarkable means something that is remarked on” *&lt;br /&gt;&lt;br /&gt;Depois chegou a vez de dr.Nic Williams, uma das maiores atrações, falando&lt;br /&gt;sobre "O futuro você", recheado de piadas foi mais um Stand Up Comedy do&lt;br /&gt;que uma palestra.&lt;br /&gt;&lt;br /&gt;"O futuro você que será agradecido por ter blogado sobre seu código e por&lt;br /&gt;ter investido em um projeto Open Source"&lt;br /&gt;&lt;br /&gt;Em suma Dr. Nic trouxe a necessidade de auxiliar em projetos Open Source.&lt;br /&gt;&lt;br /&gt;Logo chegou a vez de George Malamidis e Danilo Sato falarem sobre REST,&lt;br /&gt;passando por protocolos XMPP, SMTP e HTTP. Destaque para a trilha sonora&lt;br /&gt;do final, Black in Black do AC/DC.&lt;br /&gt;&lt;br /&gt;Finalizando as palestras do primeiro dia Chris 'Defunkt' Wanstrath, com um&lt;br /&gt;discurso contando a historia da computação e do GitHub. Uma coisa que&lt;br /&gt;gostei foi que ele usou a propria ferramenta(Gist) para a apresentação.&lt;br /&gt;Destaque também para as mensagem enfatizadas por ele:&lt;br /&gt;&lt;br /&gt;"Pare de perder tempo lendo RSS, deixe que outras pessoas filtrem para&lt;br /&gt;você. As grandes coisas irão te achar"&lt;br /&gt;"Brinque com novos frameworks, como sinatra, rhino ou johnson"&lt;br /&gt;"Usuários de vi, aprendam porquê as pessoas gostam de Emacs e use esta&lt;br /&gt;informação contra elas"&lt;br /&gt;&lt;br /&gt;Então iniciou o "Bird of Fether" ou Desconferência, qualquer pessoa podia&lt;br /&gt;chegar lá e apresentar algo, tudo bem que saíram alguns "bolas foras" como&lt;br /&gt;protestos para que as urnas eletrônicas fosse Open Source (Detalhe que as&lt;br /&gt;Urnas deste ano rodam Linux e 30 dias antes das eleições o código é&lt;br /&gt;aberto) mas tivemos destaques como os chineses da Phusion que ensinaram&lt;br /&gt;como montar um Parser e um Compilador e o Eleomar que ficou famoso&lt;br /&gt;mostrando os valores em montar um grupo.&lt;br /&gt;&lt;br /&gt;SEGUNDO DIA&lt;br /&gt;&lt;br /&gt;Ninh Bui e Hongli Lai da Phusion fizeram a melhor apresentação de todo o&lt;br /&gt;evento, explicaram o funcionamento do Passenger recheando de citações a&lt;br /&gt;cultura NERD, detalhe que teve até participação especial do Darth Vader.&lt;br /&gt;Por fim Ninh Bui montou um Blog em 5 minutos, tá certo que usando o plugin&lt;br /&gt;criado pelo Hongli Lai é facil fazer isto.&lt;br /&gt;&lt;br /&gt;Após fui prestigiar as palestras dos Brazucas acompanhando o que acontecia&lt;br /&gt;nas outras palestras pelo Twitter.&lt;br /&gt;George Guimarães, sobre escalabilidade e como encontrar gargalos em sua&lt;br /&gt;aplicação.&lt;br /&gt;Vinícius Teles com uma aula de motivação e sucesso, detalhe para a&lt;br /&gt;apresentação que ele criou com desenhos de zé palito feito a mão&lt;br /&gt;(realmente muito criativo =] )&lt;br /&gt;&lt;br /&gt;Como citei acima, uma das estrelas do evento foi o Twitter, a&lt;br /&gt;interatividade da comunidade durente o evento foi impressionante, graças&lt;br /&gt;ao LiveStream criado pelo blogblogs era possivel saber o que estava&lt;br /&gt;acontecendo em todas as salas.&lt;br /&gt;&lt;br /&gt;De nada valeriam as palestras se não fossem colocadas em prática, e&lt;br /&gt;motivados pela palestra do dr.Nic (acho que ele deve ter ficado orgulhoso)&lt;br /&gt;a comunidade criou um projeto chamado "Morena Open Source" para que&lt;br /&gt;contribuíssem com fotos e vídeos das maravilhosas Locawebzetes. Incrível&lt;br /&gt;como em poucos minutos já existiam centenas de fotos, mas o que poderiamos&lt;br /&gt;esperar de um monte de nerds magrelos e lindas morenas para colocá-los na&lt;br /&gt;"linha" hehehe&lt;br /&gt;&lt;br /&gt;Encerrando com chave de ouro, Obie Fernandez contando os segredos do&lt;br /&gt;sucesso da HashRocket&lt;br /&gt;eXtreme Programming total com todas as características(Programação em Par,&lt;br /&gt;Fluidez, etc) prova como é possível desenvolver com qualidade e agilidade.&lt;br /&gt;&lt;br /&gt;  "TAFT- Test All the Fuc*** Time"&lt;br /&gt;&lt;br /&gt;Todas as apresentações foram originais e fugiram do estilo tradicional, o&lt;br /&gt;evento foi muito bem organizado, as palestras e palestrantes de alto nível&lt;br /&gt;e muito bom humor transformaram o evento memorável.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1913030929498963580-4539696860470033466?l=www.hamonrails.com.br' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.hamonrails.com.br/feeds/4539696860470033466/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1913030929498963580&amp;postID=4539696860470033466' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1913030929498963580/posts/default/4539696860470033466'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1913030929498963580/posts/default/4539696860470033466'/><link rel='alternate' type='text/html' href='http://www.hamonrails.com.br/2008/10/railssummit-inesquecvel.html' title='#RailsSummit, Inesquecível!!!'/><author><name>Henry Hamon</name><uri>http://www.blogger.com/profile/09885794876419895686</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://bp1.blogger.com/_D0ghLJMcv1c/SD3rYtRIGYI/AAAAAAAAACY/qKNaCZsz1CQ/S220/C%C3%B3pia+de+avatar.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_D0ghLJMcv1c/SP4p-xdhflI/AAAAAAAAAGE/Y99G7GoFPuU/s72-c/2961582767_67fe192ebd.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1913030929498963580.post-3642782699638886624</id><published>2008-07-15T04:49:00.000-07:00</published><updated>2008-12-10T16:26:19.881-08:00</updated><title type='text'>Off Topic: Na corrida para Dominar o Mundo</title><content type='html'>&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_D0ghLJMcv1c/SHyPXSzAczI/AAAAAAAAAEw/-uJ-XAYRwq0/s1600-h/3_pinky-brain-cage.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_D0ghLJMcv1c/SHyPXSzAczI/AAAAAAAAAEw/-uJ-XAYRwq0/s400/3_pinky-brain-cage.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5223207298188473138" /&gt;&lt;/a&gt;O &lt;a href="http://www.monteiro.eti.br/"&gt;Júlio Monteiro&lt;/a&gt; sempre diz uma frase que é: "O sonho de todo programador Rails é Dominar o Mundo".&lt;div&gt;Ainda não completou um ano, quando eu entrei em contato com meu amigo Millnitz pedindo umas dicas para um projeto que estava planejando desenvolver em .Net, ele simplesmente me disse: "Esqueça .Net e começe a investir em rails" e me enviou este &lt;a href="http://gettingreal.37signals.com/GR_por.php"&gt;link&lt;/a&gt;. Minha cabeça explodiu quando li o &lt;span class="Apple-style-span" style="font-style: italic;"&gt;&lt;a href="http://gettingreal.37signals.com/GR_por.php"&gt;Caindo na Real&lt;/a&gt;&lt;/span&gt;, nunca mais fui o mesmo, entrei de cabeça no mundo do Rails.&lt;/div&gt;&lt;div&gt;E qual foi a minha surpresa quando recebi um email do &lt;a href="http://www.via6.com/acidio"&gt;Acídio&lt;/a&gt; sobre a  oportunidade de fazer parte do time de Rails da A2C junto com o meu mestre o &lt;a href="http://www.monteiro.eti.br/"&gt;Júlio.&lt;/a&gt;&lt;/div&gt;&lt;div&gt; Não posso deixar de agradecer ao Gilmar da &lt;a href="http://www.freeline.inf.br/"&gt;FreeLine&lt;/a&gt;, onde apesar de ter passado pouco tempo lá fiz grandes amigos tais como Onório, Geisa "Filé", César, &lt;a href="http://rafaelfbflex.blogspot.com/"&gt;Rafael&lt;/a&gt;, Aline, etc... Espero encontrá-los na Rails Summit.&lt;/div&gt;&lt;div&gt;E fazendo minha as palavras do Júlio: "Os Railers vão Dominar o Mundo"&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;img src="http://4.bp.blogspot.com/_D0ghLJMcv1c/SHyQMS0YdSI/AAAAAAAAAE4/RnE1tFQseJM/s400/a2c_brand.gif" /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;Rumo à A2C&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/1913030929498963580-3642782699638886624?l=www.hamonrails.com.br' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.hamonrails.com.br/feeds/3642782699638886624/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1913030929498963580&amp;postID=3642782699638886624' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1913030929498963580/posts/default/3642782699638886624'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1913030929498963580/posts/default/3642782699638886624'/><link rel='alternate' type='text/html' href='http://www.hamonrails.com.br/2008/07/off-topic-na-corrida-para-dominar-o.html' title='Off Topic: Na corrida para Dominar o Mundo'/><author><name>Henry Hamon</name><uri>http://www.blogger.com/profile/09885794876419895686</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://bp1.blogger.com/_D0ghLJMcv1c/SD3rYtRIGYI/AAAAAAAAACY/qKNaCZsz1CQ/S220/C%C3%B3pia+de+avatar.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_D0ghLJMcv1c/SHyPXSzAczI/AAAAAAAAAEw/-uJ-XAYRwq0/s72-c/3_pinky-brain-cage.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1913030929498963580.post-1212231776143053355</id><published>2008-06-25T20:15:00.000-07:00</published><updated>2008-12-10T16:26:20.722-08:00</updated><title type='text'>Ajudando na tradução do o livro Why’s (Poignant) Guide to Ruby</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_D0ghLJMcv1c/SGMKKBjMMTI/AAAAAAAAADA/y8rOlAhYGME/s1600-h/dev-1.gif"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_D0ghLJMcv1c/SGMKKBjMMTI/AAAAAAAAADA/y8rOlAhYGME/s400/dev-1.gif" alt="" id="BLOGGER_PHOTO_ID_5216023960756171058" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Já estou a um bom tempo sem postar nada, pois fora alguns contratempos e outras correrias agora estou ajudando na tradução do livro do Why, que diga-se de passagem é ser mais insano do planeta =]&lt;br /&gt;Com isto além de estar aprendendo mais de Ruby e lapidando ainda mais meu inglês já estou com trilhões de idéias para colocar aqui...&lt;br /&gt;&lt;br /&gt;Agora se você conhece um pouco de inglês e quiser um pouco de desafio &lt;a href="http://www.nomedojogo.com/2008/06/24/precisamos-de-tradutores/"&gt;clique aqui&lt;/a&gt; e ajude a traduzir o livro &lt;strong&gt;Why’s (Poignant) Guide to Ruby&lt;/strong&gt; para português.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1913030929498963580-1212231776143053355?l=www.hamonrails.com.br' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.hamonrails.com.br/feeds/1212231776143053355/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1913030929498963580&amp;postID=1212231776143053355' title='2 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1913030929498963580/posts/default/1212231776143053355'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1913030929498963580/posts/default/1212231776143053355'/><link rel='alternate' type='text/html' href='http://www.hamonrails.com.br/2008/06/ajudando-na-traduo-do-poignant-guide.html' title='Ajudando na tradução do o livro Why’s (Poignant) Guide to Ruby'/><author><name>Henry Hamon</name><uri>http://www.blogger.com/profile/09885794876419895686</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://bp1.blogger.com/_D0ghLJMcv1c/SD3rYtRIGYI/AAAAAAAAACY/qKNaCZsz1CQ/S220/C%C3%B3pia+de+avatar.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_D0ghLJMcv1c/SGMKKBjMMTI/AAAAAAAAADA/y8rOlAhYGME/s72-c/dev-1.gif' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1913030929498963580.post-61719968718207084</id><published>2008-05-10T07:17:00.003-07:00</published><updated>2008-12-10T16:26:21.032-08:00</updated><title type='text'>Off Topic: The Joke MAKER...</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_D0ghLJMcv1c/SCWuuxyH3CI/AAAAAAAAACM/pnhWvJdtJkU/s1600-h/Deus_gerar_universo.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_D0ghLJMcv1c/SCWuuxyH3CI/AAAAAAAAACM/pnhWvJdtJkU/s400/Deus_gerar_universo.jpg" alt="" id="BLOGGER_PHOTO_ID_5198753463529888802" border="0" /&gt;&lt;/a&gt;&lt;div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse;font-family:arial;font-size:13;"  &gt;&lt;p id="ubgz8" style="margin: 0px;"&gt;&lt;span class="Apple-style-span"  style="font-size:13;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p id="ubgz8" style="margin: 0px;"&gt; Nesta semana meu chefe me pediu para que eu analisa-se uma ferramenta de desenvolvimento nacional chamada de &lt;a href="http://www.softwell.com.br/"&gt;MAKER&lt;/a&gt; que ele tinha lido na info e ficou interessado. A revista (&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;que para mim &lt;/span&gt;não entendem nada, mas acham que entendem) elogia muito a ferramenta, que através de desenhos lógicos ela gera todo o código para você.&lt;/p&gt;&lt;p id="ubgz8" style="margin: 0px;"&gt; Confesso que sempre quando ouço algo sobre ferramentas geradoras de código sinto um frio na espinha,&lt;br /&gt;cerca de quatro anos atrás trabalhava em uma softwarehouse que resolveu apostar numa ferramenta nacional&lt;br /&gt;que prometia ser "revolucionária" chamada de &lt;a href="http://www.webintegrator.com.br/"&gt;WebIntegrator&lt;/a&gt;, que com alguns poucos cliques e arrastes&lt;br /&gt;gerava o código da aplicação em jsp. Bom de fato para fazer um cadastro simples de usuários era prático e rápido mas também só...&lt;br /&gt;Depois de algo em torno de R$15.000,00 gastos e mais algumas semanas de treinamento, a primeira e única&lt;br /&gt;aplicação construída nesta ferramenta foi um fracasso total, hoje esta empresa tenta esquecer que&lt;br /&gt;algum dia investiu no WebIntegrator.&lt;br /&gt;Mas vamos ao Maker, realmente depois de ler a matéria realizada pela revista info e o site da&lt;br /&gt;Softwell esta ferramenta parece ser a 8° maravilha do mundo, algo em que o desenvolvedor teria que&lt;br /&gt;se preocupar unica e exclusivamente com a lógica do aplicativo e ele faz o resto, gerando no final&lt;br /&gt;todo o seu Banco de Dados, Stored Procedures, Triggers e o seu aplicativo em .wad ou .jar que são as&lt;br /&gt;"compilações" do Java.&lt;br /&gt;Dentro das premissas interessantes da ferramenta estão: a promessa de reutilização de código, velocidade no&lt;br /&gt;desenvolvimento, deploy fácil e uma curva de aprendizagem pequena. O primeiro ponto negativo que encontrei é que&lt;br /&gt;não existe uma versão de avaliação da ferramenta, apenas exemplos de aplicativos criados por ela (que são muito lentos).&lt;br /&gt;Pelo fato de não poder testar para saber se a ferramenta "engessa" e como nunca vi um vendedor&lt;br /&gt;falar mal de seu produto, fui em busca de casos com os reais benefícios,&lt;br /&gt;não foi difícil de encontrar um tópico quente num forum respeitado no mundo de desenvolvimento Java&lt;br /&gt;que é o GUJ (&lt;a href="http://www.guj.com.br/posts/list/78806.java" target="_blank" id="ubgz27" style="color: rgb(0, 0, 204);"&gt;www.guj.com.br/posts/list&lt;wbr id="ubgz28"&gt;/78806.java&lt;/a&gt;).&lt;br /&gt;Infelizmente os usuários de Maker e os 'defensores' não conseguiram responder sobre o impacto&lt;br /&gt;num ambiente de desenvolvimento complexo, sempre que alguem fazia uma pergunta mais técnica se enrolavam para responder, foram levantados também diversos pontos negativos tais como:&lt;br /&gt;- Fluxograma&lt;br /&gt;Todo o desenvolvimento do Maker é baseado em Fluxograma, ou seja, uma ferramenta de análise da&lt;br /&gt;programação procedural, ou seja, regredir uns 30 anos, voltamos a desenvolver proceduralmente perdendo todas as&lt;br /&gt;vantagens e a estruturação da Orientação a Objetos. pois como se faria uma reutilização no maker?&lt;br /&gt;Como definir objetos? Como usar herança e polimorfismo?&lt;br /&gt;- Manutenção&lt;br /&gt;Por mais que este produto permita entregar sistemas rapidamente (disso não há duvidas),&lt;br /&gt;a manutenção sempre tem um custo exponencial.&lt;br /&gt;- Debugger&lt;br /&gt;Como seria possível fazer um debugger de fluxograma? Refactoring e busca estruturada?&lt;br /&gt;- Testes Autômatos&lt;br /&gt;Até então o Maker não demonstra nenhum tipo de ferramenta de automação de teste, sendo que&lt;br /&gt;hoje em dia um projeto moderno prima pela automação dos testes já que a manutenção sempre será&lt;br /&gt;progressivamente mais cara.&lt;br /&gt;- Custo&lt;br /&gt;Pela revista o custo da ferramenta está em torno de R$ 13.900,00 fora o treinamento&lt;br /&gt;que sai por R$ 1.950,00&lt;/p&gt;&lt;p id="ubgz51" style="margin: 0px;"&gt;&lt;br /&gt;&lt;/p&gt;&lt;p id="ubgz51" style="margin: 0px;"&gt;Não quero fazer aquelas discussões de qual a melhor linguagem de programação que acho baboseira e perda de tempo, sou fã confesso de Rails e mesmo tendo que usar linha de código para desenvolver com ele (e bem poucas linhas =D )  o desenvolvimento é ágil e com total liberdade.&lt;/p&gt;&lt;p id="ubgz51" style="margin: 0px;"&gt;Mas mesmo assim se alguem tenha vontade de utilizar estas ferramentas RAD, aconcelho o uso das ferramentas de  UML/MDA tais como o AndroMDA, mas é necessário muito cuidado com as ferramentas RAD, aconcelho a leitura deste&lt;/p&gt;&lt;p id="ubgz51" style="margin: 0px;"&gt;artigo (&lt;a href="http://blog.fragmental.com.br/2008/01/20/programacao-radioativa/" target="_blank" id="ubgz56" style="color: rgb(0, 0, 204);"&gt;http://blog.fragmental.com.br&lt;wbr id="ubgz57"&gt;/2008/01/20/programacao&lt;wbr id="ubgz58"&gt;-radioativa/&lt;/a&gt;)&lt;/p&gt;&lt;p id="ubgz59" style="margin: 0px;"&gt;&lt;span id="ubgz60"&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: rgb(0, 0, 204); text-decoration: underline;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&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/1913030929498963580-61719968718207084?l=www.hamonrails.com.br' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.hamonrails.com.br/feeds/61719968718207084/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1913030929498963580&amp;postID=61719968718207084' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1913030929498963580/posts/default/61719968718207084'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1913030929498963580/posts/default/61719968718207084'/><link rel='alternate' type='text/html' href='http://www.hamonrails.com.br/2008/05/joke-maker.html' title='Off Topic: The Joke MAKER...'/><author><name>Henry Hamon</name><uri>http://www.blogger.com/profile/09885794876419895686</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://bp1.blogger.com/_D0ghLJMcv1c/SD3rYtRIGYI/AAAAAAAAACY/qKNaCZsz1CQ/S220/C%C3%B3pia+de+avatar.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_D0ghLJMcv1c/SCWuuxyH3CI/AAAAAAAAACM/pnhWvJdtJkU/s72-c/Deus_gerar_universo.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1913030929498963580.post-7737080106574055389</id><published>2008-04-23T19:59:00.000-07:00</published><updated>2008-12-10T16:26:21.395-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='FSM'/><category scheme='http://www.blogger.com/atom/ns#' term='acts_as_state_machine'/><title type='text'>A Máquina de Estado Finito</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_D0ghLJMcv1c/SA_38gQjq9I/AAAAAAAAAB8/IFTyyVCtfWg/s1600-h/legenda_66.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_D0ghLJMcv1c/SA_38gQjq9I/AAAAAAAAAB8/IFTyyVCtfWg/s400/legenda_66.jpg" alt="" id="BLOGGER_PHOTO_ID_5192641514205064146" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Calma não se assuste, não vou falar de nenhum maquinário tecnológico maluco. A Máquina de Estado Finito ou FSM( Finite State Machine ) é uma forma de programar.&lt;br /&gt;O conceito de uma Máquina de Estado Finito segundo a &lt;a title="wikipedia" href="http://pt.wikipedia.org/wiki/M%C3%A1quina_de_estado_finito" id="bavf"&gt;wikipedia&lt;/a&gt; é: Uma modelagem de um comportamento, composto por estados, transições e ações.&lt;br /&gt;Num modo prático, se você já participou de uma "&lt;a title="aventura solo" href="http://pt.wikipedia.org/wiki/Aventuras_Solo" id="s513"&gt;aventura solo&lt;/a&gt;" dos antigos livros-jogo, clássicos para iniciação ao mundo do RPG, naturalmente entenderá a FSM. Eu como todo bom NERD passei a infância rodeado dos livros-jogos de Peter Jackson e Ian Livingstone.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_D0ghLJMcv1c/SA_4TQQjq-I/AAAAAAAAACE/cCAWtxhGkfI/s1600-h/A_Cidadela_do_Caos__Capa_A_small.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://2.bp.blogspot.com/_D0ghLJMcv1c/SA_4TQQjq-I/AAAAAAAAACE/cCAWtxhGkfI/s400/A_Cidadela_do_Caos__Capa_A_small.jpg" alt="" id="BLOGGER_PHOTO_ID_5192641905047088098" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Os livros-jogos são livros interativos em que o leitor encarna um personagem inserido em várias situações, ele era todo dividido em trechos numerados onde no final de cada um destes  exisitiam escolhas em que o leitor precisava escolher uma que conduziria para outro trecho.&lt;br /&gt;Apenas para exemplificar segue um pedaços de uma aventura retirado da revista &lt;span id="p046"&gt;&lt;i id="f1b:"&gt;Só Aventuras #2 da Dragão Brasil.&lt;br /&gt;&lt;br /&gt;&lt;/i&gt;&lt;/span&gt;&lt;span id="p046"&gt;&lt;span id="d874"&gt;&lt;span id="l.tm"&gt;&lt;i id="m77."&gt;"&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;span id="d874"&gt;&lt;b id="zku1"&gt;1)&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;span id="p046"&gt; &lt;i id="p4kf"&gt;Você é um jovem iniciante nas artes mágicas. Tudo o que sabe atualmente foi ensinado por um velho homem da cidade que, outrora, foi considerado um grande feiticeiro.&lt;br /&gt;Mas este&lt;/i&gt;&lt;/span&gt;&lt;span id="p046"&gt;&lt;i id="p4kf"&gt; conhecimento não é o suficiente para você. Sua sede pela magia, têm motivado-o a buscar mais conhecimentos mágicos.&lt;br /&gt;Você ouve boatos sobre um lugar ao norte, além da Floresta&lt;/i&gt;&lt;/span&gt;&lt;span id="p046"&gt;&lt;i id="p4kf"&gt; Maldita, onde a magia reina absoluta.&lt;br /&gt;O unico caminho que leva a Floresta Maldita dizem que esta repleto de ladrões e criaturas famintas. Após horas de caminhada, você tem a impressão de que alguém o&lt;/i&gt;&lt;/span&gt;&lt;span id="p046"&gt;&lt;i id="p4kf"&gt; observa, mas não vê nada, continua a andar até que escuta um graveto estalar muito próximo.&lt;br /&gt;Quando subitamente quatro criaturas saltam para a trilha. Pele cinzenta, cheiram mal e empunham espadas curtas. Um deles, toma a frente e grita:&lt;br /&gt;'Passe suas moedas para cá!'&lt;br /&gt;&lt;br /&gt;&lt;/i&gt;&lt;span id="k6_7"&gt;&lt;b id="bs:g"&gt;&lt;i id="n9-q"&gt;O que você faz? &lt;/i&gt;&lt;/b&gt;&lt;/span&gt;&lt;span id="k6_7"&gt;&lt;i id="w._k"&gt;&lt;br /&gt;Entrega as moedas para evitar confusão. Vá para 4&lt;/i&gt;&lt;/span&gt;&lt;span id="k6_7"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span id="p046"&gt;&lt;i id="vqxb"&gt;&lt;br /&gt;Saca o punhal e enfrenta os assaltantes. vá para 2&lt;/i&gt;&lt;/span&gt; &lt;span id="p046"&gt;&lt;i id="qdkx"&gt;&lt;br /&gt;Tenta uma magia. vá para 3&lt;br /&gt;&lt;br /&gt;&lt;/i&gt;&lt;/span&gt;&lt;span id="p046"&gt;&lt;b id="pfy-"&gt;2)&lt;/b&gt;&lt;/span&gt;&lt;span id="p046"&gt; &lt;i id="zj4u"&gt;&lt;br /&gt;Você saca seu punhal de prata e grita: "Venham criaturas! E encontrem a morte em minha lâmina!" Mas... o que você pensa que está fazendo? É um mago, não um guerreiro. Esta tolice lhe custou a vida.&lt;br /&gt;&lt;br /&gt;&lt;/i&gt;&lt;/span&gt;&lt;span id="p046"&gt;&lt;b id="hbix"&gt;3)&lt;/b&gt;&lt;/span&gt;&lt;span id="p046"&gt;&lt;br /&gt;&lt;i id="o8.o"&gt;Você recorda que já ouviu falar dessas criaturas, são goblins, seres imensamente covardes, com pavor de magia. Você começa a dizer as palavras mágicas e fazer gestos necessários para invocar um feitiço, mas antes que consiga terminar o encantamento, aquele que parece o líder grita:&lt;br /&gt;'Ele é um feiticeiro! Vai nos transformar em humanos feios! Fujam!!'&lt;br /&gt;E você segue o seu caminho tranquilo.  &lt;/i&gt;&lt;/span&gt;&lt;span id="p046"&gt;&lt;b id="l.0q"&gt;&lt;br /&gt;&lt;br /&gt;4)&lt;/b&gt;&lt;/span&gt; &lt;span id="p046"&gt;&lt;i id="rpim"&gt;&lt;br /&gt;Achando mais prudente entregar as moedas às pequenas criaturas, voc6e joga a pequena bolsa de veludo para o líder. Então eles fogem por entre as árvores, sumindo da visão deixando-o livre para prosseguir sua jornada." &lt;/i&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Tá bom mas o que isto tem a ver com Máquina de Estado Finito? Bom, tudo...&lt;br /&gt;Seguindo a estória apresentada no trecho 1 nos deparamos com 3 escolhas, ao escolher uma destas alternativas é gerado um evento que acarreta numa consequência, a opção 2 leva a morte =D&lt;br /&gt;&lt;br /&gt;Assim como no jogo você possui opções pré-definidas na FSM você determina as ações de acordo com o estado.&lt;br /&gt;&lt;br /&gt;Agora vamos utilizar a FSM no Rails, um plugin bem funcional é o &lt;a id="tlxa" href="http://elitists.textdriven.com/svn/plugins/acts_as_state_machine/trunk/README"&gt;acts_as_state_machine&lt;/a&gt;, existe muito pouco material sobre ele.&lt;br /&gt;A instalação não tem segredo:&lt;code id="hpfd"&gt;&lt;br /&gt;./script/plugin install http://elitists.textdriven.com/svn/plugins/acts_as_state_machine/trunk/ &lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Vamos criar uma FSM para controlar um Forno Microondas em Rails para entender o funcionamento do &lt;code id="hpfd"&gt;acts_as_state_machine&lt;/code&gt;.&lt;br /&gt;&lt;br /&gt;Funcionamento do Forno Microondas:&lt;br /&gt;O Forno tem um botão de Ligar para iniciar e um Temporizador que determina o período de cozimento. O Cozimento pode ser interrompido a qualquer momento que a porta do Forno for aberta. Depois de fechada a porta o cozimento continua. O cozimento irá terminar quando o temporizador estiver zerado.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="komodo"&gt;&lt;br /&gt;&lt;span class="linenumbers"&gt;1 &lt;/span&gt;&lt;span class="keywords"&gt;class&lt;/span&gt;&lt;span class="default"&gt; &lt;/span&gt;&lt;span class="classes"&gt;Microondas&lt;/span&gt;&lt;span class="default"&gt; &lt;/span&gt;&lt;span class="operators"&gt;&amp;lt;&lt;/span&gt;&lt;span class="default"&gt; &lt;/span&gt;&lt;span class="identifiers"&gt;ActiveRecord&lt;/span&gt;&lt;span class="operators"&gt;::&lt;/span&gt;&lt;span class="identifiers"&gt;Base&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="linenumbers"&gt;2 &lt;/span&gt;&lt;span class="default"&gt;  &lt;/span&gt;&lt;span class="comments"&gt;# Inicialmente o Microondas estará no estado "Desligado"&lt;/span&gt;&lt;br /&gt;&lt;span class="linenumbers"&gt;3 &lt;/span&gt;&lt;span class="default"&gt;  &lt;/span&gt;&lt;span class="identifiers"&gt;acts_as_state_machine&lt;/span&gt;&lt;span class="default"&gt; &lt;/span&gt;&lt;span class="symbols"&gt;:initial&lt;/span&gt;&lt;span class="default"&gt; &lt;/span&gt;&lt;span class="operators"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="default"&gt; &lt;/span&gt;&lt;span class="symbols"&gt;:desligado&lt;/span&gt;&lt;br /&gt;&lt;span class="linenumbers"&gt;4 &lt;/span&gt;&lt;br /&gt;&lt;span class="linenumbers"&gt;5 &lt;/span&gt;&lt;span class="default"&gt;  &lt;/span&gt;&lt;span class="identifiers"&gt;state&lt;/span&gt;&lt;span class="default"&gt; &lt;/span&gt;&lt;span class="symbols"&gt;:desligado&lt;/span&gt;&lt;br /&gt;&lt;span class="linenumbers"&gt;6 &lt;/span&gt;&lt;span class="default"&gt;  &lt;/span&gt;&lt;span class="identifiers"&gt;state&lt;/span&gt;&lt;span class="default"&gt; &lt;/span&gt;&lt;span class="symbols"&gt;:ligado&lt;/span&gt;&lt;br /&gt;&lt;span class="linenumbers"&gt;7 &lt;/span&gt;&lt;span class="default"&gt;  &lt;/span&gt;&lt;span class="identifiers"&gt;state&lt;/span&gt;&lt;span class="default"&gt; &lt;/span&gt;&lt;span class="symbols"&gt;:interrompido&lt;/span&gt;&lt;br /&gt;&lt;span class="linenumbers"&gt;8 &lt;/span&gt;&lt;span class="default"&gt;  &lt;/span&gt;&lt;span class="identifiers"&gt;state&lt;/span&gt;&lt;span class="default"&gt; &lt;/span&gt;&lt;span class="symbols"&gt;:concluido&lt;/span&gt;&lt;br /&gt;&lt;span class="linenumbers"&gt;9 &lt;/span&gt;&lt;br /&gt;&lt;span class="linenumbers"&gt;10 &lt;/span&gt;&lt;span class="default"&gt;  &lt;/span&gt;&lt;span class="comments"&gt;# No evento 'iniciar' eh realizada a transicao do estado "pendente" para "iniciada"&lt;/span&gt;&lt;br /&gt;&lt;span class="linenumbers"&gt;11 &lt;/span&gt;&lt;span class="default"&gt;  &lt;/span&gt;&lt;span class="identifiers"&gt;event&lt;/span&gt;&lt;span class="default"&gt; &lt;/span&gt;&lt;span class="symbols"&gt;:iniciar&lt;/span&gt;&lt;span class="default"&gt; &lt;/span&gt;&lt;span class="keywords"&gt;do&lt;/span&gt;&lt;br /&gt;&lt;span class="linenumbers"&gt;12 &lt;/span&gt;&lt;span class="default"&gt; &lt;/span&gt;&lt;span class="identifiers"&gt;transitions&lt;/span&gt;&lt;span class="default"&gt; &lt;/span&gt;&lt;span class="symbols"&gt;:from&lt;/span&gt;&lt;span class="default"&gt; &lt;/span&gt;&lt;span class="operators"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="default"&gt; &lt;/span&gt;&lt;span class="symbols"&gt;:desligado&lt;/span&gt;&lt;span class="operators"&gt;,&lt;/span&gt;&lt;span class="default"&gt; &lt;/span&gt;&lt;span class="symbols"&gt;:to&lt;/span&gt;&lt;span class="default"&gt; &lt;/span&gt;&lt;span class="operators"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="default"&gt; &lt;/span&gt;&lt;span class="symbols"&gt;:ligado&lt;/span&gt;&lt;br /&gt;&lt;span class="linenumbers"&gt;13 &lt;/span&gt;&lt;span class="default"&gt;  &lt;/span&gt;&lt;span class="keywords"&gt;end&lt;/span&gt;&lt;br /&gt;&lt;span class="linenumbers"&gt;14 &lt;/span&gt;&lt;br /&gt;&lt;span class="linenumbers"&gt;15 &lt;/span&gt;&lt;span class="default"&gt;  &lt;/span&gt;&lt;span class="identifiers"&gt;event&lt;/span&gt;&lt;span class="default"&gt; &lt;/span&gt;&lt;span class="symbols"&gt;:concluir&lt;/span&gt;&lt;span class="default"&gt; &lt;/span&gt;&lt;span class="keywords"&gt;do&lt;/span&gt;&lt;br /&gt;&lt;span class="linenumbers"&gt;16 &lt;/span&gt;&lt;span class="default"&gt; &lt;/span&gt;&lt;span class="identifiers"&gt;transitions&lt;/span&gt;&lt;span class="default"&gt; &lt;/span&gt;&lt;span class="symbols"&gt;:from&lt;/span&gt;&lt;span class="default"&gt; &lt;/span&gt;&lt;span class="operators"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="default"&gt; &lt;/span&gt;&lt;span class="symbols"&gt;:ligado&lt;/span&gt;&lt;span class="operators"&gt;,&lt;/span&gt;&lt;span class="default"&gt; &lt;/span&gt;&lt;span class="symbols"&gt;:to&lt;/span&gt;&lt;span class="default"&gt; &lt;/span&gt;&lt;span class="operators"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="default"&gt; &lt;/span&gt;&lt;span class="symbols"&gt;:concluido&lt;/span&gt;&lt;span class="default"&gt; &lt;/span&gt;&lt;span class="keywords"&gt;unless&lt;/span&gt;&lt;span class="default"&gt; &lt;/span&gt;&lt;span class="keywords"&gt;self&lt;/span&gt;&lt;span class="operators"&gt;.&lt;/span&gt;&lt;span class="identifiers"&gt;temporizador&lt;/span&gt;&lt;span class="default"&gt; &lt;/span&gt;&lt;span class="operators"&gt;&amp;gt;&lt;/span&gt;&lt;span class="default"&gt; &lt;/span&gt;&lt;span class="numbers"&gt;0&lt;/span&gt;&lt;br /&gt;&lt;span class="linenumbers"&gt;17 &lt;/span&gt;&lt;span class="default"&gt;  &lt;/span&gt;&lt;span class="keywords"&gt;end&lt;/span&gt;&lt;br /&gt;&lt;span class="linenumbers"&gt;18 &lt;/span&gt;&lt;br /&gt;&lt;span class="linenumbers"&gt;19 &lt;/span&gt;&lt;span class="default"&gt;  &lt;/span&gt;&lt;span class="identifiers"&gt;event&lt;/span&gt;&lt;span class="default"&gt; &lt;/span&gt;&lt;span class="symbols"&gt;:interromper&lt;/span&gt;&lt;span class="default"&gt; &lt;/span&gt;&lt;span class="keywords"&gt;do&lt;/span&gt;&lt;br /&gt;&lt;span class="linenumbers"&gt;20 &lt;/span&gt;&lt;span class="default"&gt; &lt;/span&gt;&lt;span class="identifiers"&gt;transitions&lt;/span&gt;&lt;span class="default"&gt; &lt;/span&gt;&lt;span class="symbols"&gt;:from&lt;/span&gt;&lt;span class="default"&gt; &lt;/span&gt;&lt;span class="operators"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="default"&gt; &lt;/span&gt;&lt;span class="symbols"&gt;:ligado&lt;/span&gt;&lt;span class="operators"&gt;,&lt;/span&gt;&lt;span class="default"&gt; &lt;/span&gt;&lt;span class="symbols"&gt;:to&lt;/span&gt;&lt;span class="default"&gt; &lt;/span&gt;&lt;span class="operators"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="default"&gt; &lt;/span&gt;&lt;span class="symbols"&gt;:interrompido&lt;/span&gt;&lt;br /&gt;&lt;span class="linenumbers"&gt;21 &lt;/span&gt;&lt;span class="default"&gt;  &lt;/span&gt;&lt;span class="keywords"&gt;end&lt;/span&gt;&lt;br /&gt;&lt;span class="linenumbers"&gt;22 &lt;/span&gt;&lt;br /&gt;&lt;span class="linenumbers"&gt;23 &lt;/span&gt;&lt;span class="default"&gt;  &lt;/span&gt;&lt;span class="identifiers"&gt;event&lt;/span&gt;&lt;span class="default"&gt; &lt;/span&gt;&lt;span class="symbols"&gt;:continuar&lt;/span&gt;&lt;span class="default"&gt; &lt;/span&gt;&lt;span class="keywords"&gt;do&lt;/span&gt;&lt;br /&gt;&lt;span class="linenumbers"&gt;24 &lt;/span&gt;&lt;span class="default"&gt;   &lt;/span&gt;&lt;span class="identifiers"&gt;transitions&lt;/span&gt;&lt;span class="default"&gt; &lt;/span&gt;&lt;span class="symbols"&gt;:from&lt;/span&gt;&lt;span class="default"&gt; &lt;/span&gt;&lt;span class="operators"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="default"&gt; &lt;/span&gt;&lt;span class="symbols"&gt;:interrompido&lt;/span&gt;&lt;span class="operators"&gt;,&lt;/span&gt;&lt;span class="default"&gt; &lt;/span&gt;&lt;span class="symbols"&gt;:to&lt;/span&gt;&lt;span class="default"&gt; &lt;/span&gt;&lt;span class="operators"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="default"&gt; &lt;/span&gt;&lt;span class="symbols"&gt;:ligado&lt;/span&gt;&lt;br /&gt;&lt;span class="linenumbers"&gt;25 &lt;/span&gt;&lt;span class="default"&gt;  &lt;/span&gt;&lt;span class="keywords"&gt;end&lt;/span&gt;&lt;br /&gt;&lt;span class="linenumbers"&gt;26 &lt;/span&gt;&lt;span class="keywords"&gt;end&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;pre id="cuk0"&gt;&lt;b id="e:4a"&gt;OBS:&lt;/b&gt; O plugin assume que o estado de seu model fica no campo &lt;code id="tmhn"&gt;state&lt;/code&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="komodo"&gt;&lt;br /&gt;&lt;span class="linenumbers"&gt;1 &lt;/span&gt;&lt;span class="identifiers"&gt;microondas&lt;/span&gt;&lt;span class="default"&gt; &lt;/span&gt;&lt;span class="operators"&gt;=&lt;/span&gt;&lt;span class="default"&gt; &lt;/span&gt;&lt;span class="identifiers"&gt;Microondas&lt;/span&gt;&lt;span class="operators"&gt;.&lt;/span&gt;&lt;span class="identifiers"&gt;create&lt;/span&gt;&lt;br /&gt;&lt;span class="linenumbers"&gt;2 &lt;/span&gt;&lt;span class="identifiers"&gt;microondas&lt;/span&gt;&lt;span class="operators"&gt;.&lt;/span&gt;&lt;span class="identifiers"&gt;state&lt;/span&gt;&lt;span class="default"&gt; &lt;/span&gt;&lt;span class="comments"&gt;# "desligado"&lt;/span&gt;&lt;br /&gt;&lt;span class="linenumbers"&gt;3 &lt;/span&gt;&lt;span class="identifiers"&gt;microondas&lt;/span&gt;&lt;span class="operators"&gt;.&lt;/span&gt;&lt;span class="identifiers"&gt;temporizador&lt;/span&gt;&lt;span class="default"&gt; &lt;/span&gt;&lt;span class="operators"&gt;=&lt;/span&gt;&lt;span class="default"&gt; &lt;/span&gt;&lt;span class="numbers"&gt;5&lt;/span&gt;&lt;br /&gt;&lt;span class="linenumbers"&gt;4 &lt;/span&gt;&lt;span class="identifiers"&gt;microondas&lt;/span&gt;&lt;span class="operators"&gt;.&lt;/span&gt;&lt;span class="identifiers"&gt;iniciar?&lt;/span&gt;&lt;span class="default"&gt; &lt;/span&gt;&lt;span class="comments"&gt;# true  &lt;/span&gt;&lt;br /&gt;&lt;span class="linenumbers"&gt;5 &lt;/span&gt;&lt;span class="identifiers"&gt;microondas&lt;/span&gt;&lt;span class="operators"&gt;.&lt;/span&gt;&lt;span class="identifiers"&gt;interromper&lt;/span&gt;&lt;br /&gt;&lt;span class="linenumbers"&gt;6 &lt;/span&gt;&lt;span class="identifiers"&gt;microondas&lt;/span&gt;&lt;span class="operators"&gt;.&lt;/span&gt;&lt;span class="identifiers"&gt;state&lt;/span&gt;&lt;span class="default"&gt; &lt;/span&gt;&lt;span class="comments"&gt;# "interrompido"&lt;/span&gt;&lt;br /&gt;&lt;span class="linenumbers"&gt;7 &lt;/span&gt;&lt;span class="identifiers"&gt;microondas&lt;/span&gt;&lt;span class="operators"&gt;.&lt;/span&gt;&lt;span class="identifiers"&gt;continuar&lt;/span&gt;&lt;br /&gt;&lt;span class="linenumbers"&gt;8 &lt;/span&gt;&lt;span class="identifiers"&gt;microondas&lt;/span&gt;&lt;span class="operators"&gt;.&lt;/span&gt;&lt;span class="identifiers"&gt;state&lt;/span&gt;&lt;span class="default"&gt; &lt;/span&gt;&lt;span class="comments"&gt;# "ligado"&lt;/span&gt;&lt;br /&gt;&lt;span class="linenumbers"&gt;9 &lt;/span&gt;&lt;span class="identifiers"&gt;microondas&lt;/span&gt;&lt;span class="operators"&gt;.&lt;/span&gt;&lt;span class="identifiers"&gt;concluir?&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;A utilização de uma FSM é além dos limites da imaginação. Um exemplo clássico de utilização é um cadastro de usuário.&lt;br /&gt;O cadastro de usuário pode ter, por exemplo, os seguintes estados:&lt;br /&gt;Recém Cadastrado (aguardando confirmacao de email), Membro e Banido(desativado).&lt;br /&gt;Outro exemplo seriam os estados de um documento dentro de um GED(gestor eletronico de documentos), ou um projeto em um gestor de projetos, ou um ticket em um BPM (bussiness process management).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Mais sobre aventuras-solo &lt;a title="http://www.sobresites.com/rpg/aventurassolo.htm" href="http://www.sobresites.com/rpg/aventurassolo.htm" id="kpcx"&gt;http://www.sobresites.com/rpg/aventurassolo.htm&lt;/a&gt;&lt;br /&gt;Mais sobre FSM &lt;a id="e1xd" onclick="return top.js.OpenExtLink(window,event,this)" href="http://www.programmingbasics.org/en/fsm.html" target="_blank"&gt;http://www.programmingbasics&lt;wbr id="bna9"&gt;.org/en/fsm.html&lt;/a&gt;&lt;br /&gt;&lt;a title="http://www.brasiltech.net/developez/2008/02/22/mini-tutorial-de-maquina-de-estado-state-machine-parte-1/" href="http://www.brasiltech.net/developez/2008/02/22/mini-tutorial-de-maquina-de-estado-state-machine-parte-1/" id="yi56"&gt;http://www.brasiltech.net/developez/2008/02/22/mini-tutorial-de-maquina-de-estado-state-machine-parte-1/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1913030929498963580-7737080106574055389?l=www.hamonrails.com.br' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.hamonrails.com.br/feeds/7737080106574055389/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1913030929498963580&amp;postID=7737080106574055389' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1913030929498963580/posts/default/7737080106574055389'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1913030929498963580/posts/default/7737080106574055389'/><link rel='alternate' type='text/html' href='http://www.hamonrails.com.br/2008/04/mquina-de-estado-finito.html' title='A Máquina de Estado Finito'/><author><name>Henry Hamon</name><uri>http://www.blogger.com/profile/09885794876419895686</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://bp1.blogger.com/_D0ghLJMcv1c/SD3rYtRIGYI/AAAAAAAAACY/qKNaCZsz1CQ/S220/C%C3%B3pia+de+avatar.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_D0ghLJMcv1c/SA_38gQjq9I/AAAAAAAAAB8/IFTyyVCtfWg/s72-c/legenda_66.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1913030929498963580.post-3887257805659443146</id><published>2008-03-23T20:42:00.000-07:00</published><updated>2008-12-10T16:26:21.603-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='swf'/><category scheme='http://www.blogger.com/atom/ns#' term='babinha'/><title type='text'>Usando SWF no Rails</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_D0ghLJMcv1c/R-c-ZE5Xn0I/AAAAAAAAAB0/rydMfSf_cDQ/s1600-h/swfobject.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_D0ghLJMcv1c/R-c-ZE5Xn0I/AAAAAAAAAB0/rydMfSf_cDQ/s400/swfobject.png" alt="" id="BLOGGER_PHOTO_ID_5181178496845061954" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Caso queira colocar um arquivo SWF na view de seu projeto rails, irá se deparar com um pequeno dilema: Qual tag devo usar?&lt;br /&gt;Isto se deve ao fato no Mozilla(firefox, etc) a tag correta é &lt;span style="font-style: italic;"&gt;&amp;lt;embed&amp;gt;&lt;/span&gt; já no Internet Explorer é &lt;span style="font-style: italic;"&gt;&amp;lt;object&amp;gt;&lt;/span&gt;.&lt;br /&gt;Para resolver este entre outros existe uma biblioteca javascript  chamada de SWFObject&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Vamos colocar nos trilhos&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Nivel de Dificuldade:&lt;/span&gt; Babinha&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Utilidade:&lt;/span&gt; Inserção de banners, videos e uma infinidade de recursos que um SWF pode oferecer.&lt;br /&gt;&lt;br /&gt;Primeiro baixe o SWFObject ( http://code.google.com/p/swfobject/ )&lt;br /&gt;descompacte o conteúdo do arquivo na pasta /public/javascript do seu projeto&lt;br /&gt;&lt;br /&gt;Inclua a chamada ao arquivo js no layout&lt;br /&gt;&lt;span style="font-style: italic;"&gt; &lt;%= javascript_include_tag 'swfobject' %&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Crie uma pasta chamada swf em /public e adicione os seus arquivos swf.&lt;br /&gt;&lt;br /&gt;Agora para a chamada do swf na view vamos criar um helper, adicione no arquivo  /app/helper/application_helper.rb o seguinte código:&lt;br /&gt;&lt;br /&gt;&lt;div class="komodo"&gt;&lt;p&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="linenumbers"&gt; 1  &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="linenumbers"&gt; 2  &lt;/span&gt;&lt;span class="keywords"&gt;module&lt;/span&gt;&lt;span class="default"&gt; &lt;/span&gt;&lt;span class="modules"&gt;ApplicationHelper&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="linenumbers"&gt; 3  &lt;/span&gt;&lt;span class="default"&gt;  &lt;/span&gt;&lt;span class="comments"&gt;# swfobject Helper&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="linenumbers"&gt; 4  &lt;/span&gt;&lt;span class="default"&gt;  &lt;/span&gt;&lt;span class="keywords"&gt;def&lt;/span&gt;&lt;span class="default"&gt; &lt;/span&gt;&lt;span class="functions"&gt;swf_object&lt;/span&gt;&lt;span class="operators"&gt;(&lt;/span&gt;&lt;span class="identifiers"&gt;swf&lt;/span&gt;&lt;span class="operators"&gt;,&lt;/span&gt;&lt;span class="default"&gt; &lt;/span&gt;&lt;span class="identifiers"&gt;id&lt;/span&gt;&lt;span class="operators"&gt;,&lt;/span&gt;&lt;span class="default"&gt; &lt;/span&gt;&lt;span class="identifiers"&gt;width&lt;/span&gt;&lt;span class="operators"&gt;,&lt;/span&gt;&lt;span class="default"&gt; &lt;/span&gt;&lt;span class="identifiers"&gt;height&lt;/span&gt;&lt;span class="operators"&gt;,&lt;/span&gt;&lt;span class="default"&gt; &lt;/span&gt;&lt;span class="identifiers"&gt;flash_version&lt;/span&gt;&lt;span class="operators"&gt;,&lt;/span&gt;&lt;span class="default"&gt; &lt;/span&gt;&lt;span class="identifiers"&gt;background_color&lt;/span&gt;&lt;span class="operators"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="linenumbers"&gt; 5  &lt;/span&gt;&lt;span class="default"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="linenumbers"&gt; 6  &lt;/span&gt;&lt;span class="default"&gt;    &lt;/span&gt;&lt;span class="identifiers"&gt;output&lt;/span&gt;&lt;span class="default"&gt; &lt;/span&gt;&lt;span class="operators"&gt;=&lt;/span&gt;&lt;span class="default"&gt; &lt;/span&gt;&lt;span class="strings"&gt;"&amp;lt;script type=’text/javascript’&amp;gt;"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="linenumbers"&gt; 7  &lt;/span&gt;&lt;span class="default"&gt;    &lt;/span&gt;&lt;span class="identifiers"&gt;output&lt;/span&gt;&lt;span class="default"&gt; &lt;/span&gt;&lt;span class="operators"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="default"&gt; &lt;/span&gt;&lt;span class="strings"&gt;"var so = new SWFObject(’&lt;/span&gt;&lt;span class="operators"&gt;#{&lt;/span&gt;&lt;span class="identifiers"&gt;swf&lt;/span&gt;&lt;span class="operators"&gt;}&lt;/span&gt;&lt;span class="strings"&gt;‘, ‘&lt;/span&gt;&lt;span class="operators"&gt;#{&lt;/span&gt;&lt;span class="identifiers"&gt;id&lt;/span&gt;&lt;span class="operators"&gt;}&lt;/span&gt;&lt;span class="strings"&gt;‘, ‘&lt;/span&gt;&lt;span class="operators"&gt;#{&lt;/span&gt;&lt;span class="identifiers"&gt;width&lt;/span&gt;&lt;span class="operators"&gt;}&lt;/span&gt;&lt;span class="strings"&gt;‘, ‘&lt;/span&gt;&lt;span class="operators"&gt;#{&lt;/span&gt;&lt;span class="identifiers"&gt;height&lt;/span&gt;&lt;span class="operators"&gt;}&lt;/span&gt;&lt;span class="strings"&gt;‘,&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="linenumbers"&gt; 8  &lt;/span&gt;&lt;span class="strings"&gt;          ‘&lt;/span&gt;&lt;span class="operators"&gt;#{&lt;/span&gt;&lt;span class="identifiers"&gt;flash_version&lt;/span&gt;&lt;span class="operators"&gt;}&lt;/span&gt;&lt;span class="strings"&gt;‘, ‘&lt;/span&gt;&lt;span class="operators"&gt;#{&lt;/span&gt;&lt;span class="identifiers"&gt;background_color&lt;/span&gt;&lt;span class="operators"&gt;}&lt;/span&gt;&lt;span class="strings"&gt;‘);"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="linenumbers"&gt; 9  &lt;/span&gt;&lt;span class="default"&gt;    &lt;/span&gt;&lt;span class="identifiers"&gt;output&lt;/span&gt;&lt;span class="default"&gt; &lt;/span&gt;&lt;span class="operators"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="default"&gt; &lt;/span&gt;&lt;span class="strings"&gt;"so.write(’&lt;/span&gt;&lt;span class="operators"&gt;#{&lt;/span&gt;&lt;span class="identifiers"&gt;id&lt;/span&gt;&lt;span class="operators"&gt;}&lt;/span&gt;&lt;span class="strings"&gt;‘);"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="linenumbers"&gt; 10  &lt;/span&gt;&lt;span class="default"&gt;    &lt;/span&gt;&lt;span class="identifiers"&gt;output&lt;/span&gt;&lt;span class="default"&gt; &lt;/span&gt;&lt;span class="operators"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="default"&gt; &lt;/span&gt;&lt;span class="strings"&gt;"&amp;lt;/script&amp;gt;"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="linenumbers"&gt; 11  &lt;/span&gt;&lt;span class="default"&gt;  &lt;/span&gt;&lt;span class="keywords"&gt;end&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="linenumbers"&gt; 12  &lt;/span&gt;&lt;span class="keywords"&gt;end&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Para utilizar é simples, na view chame o método swf_object do helper passando os parâmetros apropriados:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="komodo"&gt;&lt;p&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="linenumbers"&gt; 1  &lt;/span&gt;&lt;span class="operators"&gt;&amp;lt;%=&lt;/span&gt;&lt;span class="default"&gt; &lt;/span&gt;&lt;span class="identifiers"&gt;swf_object&lt;/span&gt;&lt;span class="operators"&gt;(&lt;/span&gt;&lt;span class="strings"&gt;"/swfs/apresentacao.swf"&lt;/span&gt;&lt;span class="operators"&gt;,&lt;/span&gt;&lt;span class="default"&gt; &lt;/span&gt;&lt;span class="strings"&gt;"flash_id"&lt;/span&gt;&lt;span class="operators"&gt;,&lt;/span&gt;&lt;span class="default"&gt; &lt;/span&gt;&lt;span class="strings"&gt;"550"&lt;/span&gt;&lt;span class="operators"&gt;,&lt;/span&gt;&lt;span class="default"&gt; &lt;/span&gt;&lt;span class="strings"&gt;"400"&lt;/span&gt;&lt;br /&gt;&lt;span class="operators"&gt;,&lt;/span&gt;&lt;span class="default"&gt; &lt;/span&gt;&lt;span class="strings"&gt;"9"&lt;/span&gt;&lt;span class="operators"&gt;,&lt;/span&gt;&lt;span class="default"&gt; &lt;/span&gt;&lt;span class="strings"&gt;"#000000"&lt;/span&gt;&lt;span class="operators"&gt;)&lt;/span&gt;&lt;span class="default"&gt; &lt;/span&gt;&lt;span class="operators"&gt;%&amp;gt;&lt;/span&gt;&lt;/p&gt;   &lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Vamos incrementar o nosso helper um pouco mais, adicionando uma mensagem dizendo qual a versão do flash necessária. Podemos também passar parâmetros via swfobject.&lt;br /&gt;&lt;div class="komodo"&gt;&lt;p&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="linenumbers"&gt;; 1   &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="linenumbers"&gt; 2   &lt;/span&gt;&lt;span class="keywords"&gt;module&lt;/span&gt;&lt;span class="default"&gt; &lt;/span&gt;&lt;span class="modules"&gt;ApplicationHelper&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="linenumbers"&gt; 3   &lt;/span&gt;&lt;span class="default"&gt;  &lt;/span&gt;&lt;span class="comments"&gt;# swfobject Helper&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="linenumbers"&gt; 4   &lt;/span&gt;&lt;span class="default"&gt;  &lt;/span&gt;&lt;span class="keywords"&gt;def&lt;/span&gt;&lt;span class="default"&gt; &lt;/span&gt;&lt;span class="functions"&gt;swf_object&lt;/span&gt;&lt;span class="operators"&gt;(&lt;/span&gt;&lt;span class="identifiers"&gt;swf&lt;/span&gt;&lt;span class="operators"&gt;,&lt;/span&gt;&lt;span class="default"&gt; &lt;/span&gt;&lt;span class="identifiers"&gt;id&lt;/span&gt;&lt;span class="operators"&gt;,&lt;/span&gt;&lt;span class="default"&gt; &lt;/span&gt;&lt;span class="identifiers"&gt;width&lt;/span&gt;&lt;span class="operators"&gt;,&lt;/span&gt;&lt;span class="default"&gt; &lt;/span&gt;&lt;span class="identifiers"&gt;height&lt;/span&gt;&lt;span class="operators"&gt;,&lt;/span&gt;&lt;span class="default"&gt; &lt;/span&gt;&lt;span class="identifiers"&gt;flash_version&lt;/span&gt;&lt;span class="operators"&gt;,&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="linenumbers"&gt; 5   &lt;/span&gt;&lt;span class="default"&gt;                 &lt;/span&gt;&lt;span class="identifiers"&gt;background_color&lt;/span&gt;&lt;span class="operators"&gt;,&lt;/span&gt;&lt;span class="default"&gt; &lt;/span&gt;&lt;span class="identifiers"&gt;params&lt;/span&gt;&lt;span class="default"&gt; &lt;/span&gt;&lt;span class="operators"&gt;=&lt;/span&gt;&lt;span class="default"&gt; &lt;/span&gt;&lt;span class="operators"&gt;{},&lt;/span&gt;&lt;span class="default"&gt; &lt;/span&gt;&lt;span class="identifiers"&gt;vars&lt;/span&gt;&lt;span class="default"&gt; &lt;/span&gt;&lt;span class="operators"&gt;=&lt;/span&gt;&lt;span class="default"&gt; &lt;/span&gt;&lt;span class="operators"&gt;{},&lt;/span&gt;&lt;span class="default"&gt; &lt;/span&gt;&lt;span class="identifiers"&gt;create_div&lt;/span&gt;&lt;span class="default"&gt; &lt;/span&gt;&lt;span class="operators"&gt;=&lt;/span&gt;&lt;span class="default"&gt; &lt;/span&gt;&lt;span class="keywords"&gt;false&lt;/span&gt;&lt;span class="operators"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="linenumbers"&gt; 6   &lt;/span&gt;&lt;span class="default"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="linenumbers"&gt; 7  &lt;/span&gt;&lt;span class="default"&gt;    &lt;/span&gt;&lt;span class="identifiers"&gt;create_div&lt;/span&gt;&lt;span class="default"&gt; &lt;/span&gt;&lt;span class="operators"&gt;?&lt;/span&gt;&lt;span class="default"&gt; &lt;/span&gt;&lt;span class="identifiers"&gt;output&lt;/span&gt;&lt;span class="default"&gt; &lt;/span&gt;&lt;span class="operators"&gt;=&lt;/span&gt;&lt;span class="default"&gt; &lt;/span&gt;&lt;span class="strings"&gt;"&amp;lt;div id=’&lt;/span&gt;&lt;span class="operators"&gt;#{&lt;/span&gt;&lt;span class="identifiers"&gt;id&lt;/span&gt;&lt;span class="operators"&gt;}&lt;/span&gt;&lt;span class="strings"&gt;‘&amp;gt;Este site requer&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="linenumbers"&gt; 8   &lt;/span&gt;&lt;span class="strings"&gt;         &amp;lt;a href=’http://www.adobe.com/shockwave/download/download.cgi?P1_Prod_Version=ShockwaveFlash&amp;amp;promoid=BIOW’&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="linenumbers"&gt; 9   &lt;/span&gt;&lt;span class="strings"&gt;         target=’_blank’&amp;gt;Flash player&amp;lt;/a&amp;gt; &lt;/span&gt;&lt;span class="operators"&gt;#{&lt;/span&gt;&lt;span class="identifiers"&gt;flash_version&lt;/span&gt;&lt;span class="operators"&gt;}&lt;/span&gt;&lt;span class="strings"&gt; or higher.&amp;lt;/div&amp;gt;&amp;lt;script type=’text/javascript’&amp;gt;"&lt;/span&gt;&lt;span class="operators"&gt;:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="linenumbers"&gt; 10  &lt;/span&gt;&lt;span class="default"&gt;          &lt;/span&gt;&lt;span class="identifiers"&gt;output&lt;/span&gt;&lt;span class="default"&gt; &lt;/span&gt;&lt;span class="operators"&gt;=&lt;/span&gt;&lt;span class="default"&gt; &lt;/span&gt;&lt;span class="strings"&gt;"&amp;lt;script type=’text/javascript’&amp;gt;"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="linenumbers"&gt; 11  &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="linenumbers"&gt; 12  &lt;/span&gt;&lt;span class="default"&gt;    &lt;/span&gt;&lt;span class="identifiers"&gt;output&lt;/span&gt;&lt;span class="default"&gt; &lt;/span&gt;&lt;span class="operators"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="default"&gt; &lt;/span&gt;&lt;span class="strings"&gt;"var so = new SWFObject(’&lt;/span&gt;&lt;span class="operators"&gt;#{&lt;/span&gt;&lt;span class="identifiers"&gt;swf&lt;/span&gt;&lt;span class="operators"&gt;}&lt;/span&gt;&lt;span class="strings"&gt;‘, ‘&lt;/span&gt;&lt;span class="operators"&gt;#{&lt;/span&gt;&lt;span class="identifiers"&gt;id&lt;/span&gt;&lt;span class="operators"&gt;}&lt;/span&gt;&lt;span class="strings"&gt;‘, ‘&lt;/span&gt;&lt;span class="operators"&gt;#{&lt;/span&gt;&lt;span class="identifiers"&gt;width&lt;/span&gt;&lt;span class="operators"&gt;}&lt;/span&gt;&lt;span class="strings"&gt;‘, ‘&lt;/span&gt;&lt;span class="operators"&gt;#{&lt;/span&gt;&lt;span class="identifiers"&gt;height&lt;/span&gt;&lt;span class="operators"&gt;}&lt;/span&gt;&lt;span class="strings"&gt;‘,&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="linenumbers"&gt; 13  &lt;/span&gt;&lt;span class="strings"&gt;          ‘&lt;/span&gt;&lt;span class="operators"&gt;#{&lt;/span&gt;&lt;span class="identifiers"&gt;flash_version&lt;/span&gt;&lt;span class="operators"&gt;}&lt;/span&gt;&lt;span class="strings"&gt;‘, ‘&lt;/span&gt;&lt;span class="operators"&gt;#{&lt;/span&gt;&lt;span class="identifiers"&gt;background_color&lt;/span&gt;&lt;span class="operators"&gt;}&lt;/span&gt;&lt;span class="strings"&gt;‘);"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="linenumbers"&gt; 14  &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="linenumbers"&gt; 15  &lt;/span&gt;&lt;span class="default"&gt;    &lt;/span&gt;&lt;span class="identifiers"&gt;params&lt;/span&gt;&lt;span class="operators"&gt;.&lt;/span&gt;&lt;span class="identifiers"&gt;each&lt;/span&gt;&lt;span class="default"&gt;  &lt;/span&gt;&lt;span class="operators"&gt;{|&lt;/span&gt;&lt;span class="identifiers"&gt;key&lt;/span&gt;&lt;span class="operators"&gt;,&lt;/span&gt;&lt;span class="default"&gt; &lt;/span&gt;&lt;span class="identifiers"&gt;value&lt;/span&gt;&lt;span class="operators"&gt;|&lt;/span&gt;&lt;span class="default"&gt; &lt;/span&gt;&lt;span class="identifiers"&gt;output&lt;/span&gt;&lt;span class="default"&gt; &lt;/span&gt;&lt;span class="operators"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="default"&gt; &lt;/span&gt;&lt;span class="strings"&gt;"so.addParam(’&lt;/span&gt;&lt;span class="operators"&gt;#{&lt;/span&gt;&lt;span class="identifiers"&gt;key&lt;/span&gt;&lt;span class="operators"&gt;}&lt;/span&gt;&lt;span class="strings"&gt;‘, ‘&lt;/span&gt;&lt;span class="operators"&gt;#{&lt;/span&gt;&lt;span class="identifiers"&gt;value&lt;/span&gt;&lt;span class="operators"&gt;}&lt;/span&gt;&lt;span class="strings"&gt;‘);"&lt;/span&gt;&lt;span class="operators"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="linenumbers"&gt; 16  &lt;/span&gt;&lt;span class="default"&gt;    &lt;/span&gt;&lt;span class="identifiers"&gt;vars&lt;/span&gt;&lt;span class="operators"&gt;.&lt;/span&gt;&lt;span class="identifiers"&gt;each&lt;/span&gt;&lt;span class="default"&gt;    &lt;/span&gt;&lt;span class="operators"&gt;{|&lt;/span&gt;&lt;span class="identifiers"&gt;key&lt;/span&gt;&lt;span class="operators"&gt;,&lt;/span&gt;&lt;span class="default"&gt; &lt;/span&gt;&lt;span class="identifiers"&gt;value&lt;/span&gt;&lt;span class="operators"&gt;|&lt;/span&gt;&lt;span class="default"&gt; &lt;/span&gt;&lt;span class="identifiers"&gt;output&lt;/span&gt;&lt;span class="default"&gt; &lt;/span&gt;&lt;span class="operators"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="default"&gt; &lt;/span&gt;&lt;span class="strings"&gt;"so.addVariable(’&lt;/span&gt;&lt;span class="operators"&gt;#{&lt;/span&gt;&lt;span class="identifiers"&gt;key&lt;/span&gt;&lt;span class="operators"&gt;}&lt;/span&gt;&lt;span class="strings"&gt;‘, ‘&lt;/span&gt;&lt;span class="operators"&gt;#{&lt;/span&gt;&lt;span class="identifiers"&gt;value&lt;/span&gt;&lt;span class="operators"&gt;}&lt;/span&gt;&lt;span class="strings"&gt;‘);"&lt;/span&gt;&lt;span class="operators"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="linenumbers"&gt; 17  &lt;/span&gt;&lt;span class="default"&gt;    &lt;/span&gt;&lt;span class="identifiers"&gt;output&lt;/span&gt;&lt;span class="default"&gt; &lt;/span&gt;&lt;span class="operators"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="default"&gt; &lt;/span&gt;&lt;span class="strings"&gt;"so.write(’&lt;/span&gt;&lt;span class="operators"&gt;#{&lt;/span&gt;&lt;span class="identifiers"&gt;id&lt;/span&gt;&lt;span class="operators"&gt;}&lt;/span&gt;&lt;span class="strings"&gt;‘);"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="linenumbers"&gt; 18  &lt;/span&gt;&lt;span class="default"&gt;    &lt;/span&gt;&lt;span class="identifiers"&gt;output&lt;/span&gt;&lt;span class="default"&gt; &lt;/span&gt;&lt;span class="operators"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="default"&gt; &lt;/span&gt;&lt;span class="strings"&gt;"&amp;lt;/script&amp;gt;"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="linenumbers"&gt; 19  &lt;/span&gt;&lt;span class="default"&gt;  &lt;/span&gt;&lt;span class="keywords"&gt;end&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="linenumbers"&gt; 20  &lt;/span&gt;&lt;span class="keywords"&gt;end&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;/div&gt;Chamando na View:&lt;br /&gt;&lt;div class="komodo"&gt;&lt;p&gt;&lt;br /&gt;&lt;span class="linenumbers"&gt; 1  &lt;/span&gt;&lt;span class="operators"&gt;&amp;lt;%=&lt;/span&gt;&lt;span class="default"&gt; &lt;/span&gt;&lt;span class="identifiers"&gt;swf_object&lt;/span&gt;&lt;span class="operators"&gt;(&lt;/span&gt;&lt;span class="strings"&gt;"/swfs/apresentacao.swf"&lt;/span&gt;&lt;span class="operators"&gt;,&lt;/span&gt;&lt;span class="default"&gt; &lt;/span&gt;&lt;span class="strings"&gt;"flash_id"&lt;/span&gt;&lt;span class="operators"&gt;,&lt;/span&gt;&lt;span class="default"&gt; &lt;/span&gt;&lt;span class="strings"&gt;"550"&lt;/span&gt;&lt;span class="operators"&gt;,&lt;/span&gt;&lt;span class="default"&gt; &lt;/span&gt;&lt;span class="strings"&gt;"400"&lt;/span&gt;&lt;span class="operators"&gt;,&lt;/span&gt;&lt;span class="default"&gt; &lt;/span&gt;&lt;span class="strings"&gt;"9"&lt;/span&gt;&lt;span class="operators"&gt;,&lt;/span&gt;&lt;span class="default"&gt; &lt;/span&gt;&lt;span class="strings"&gt;"#000000"&lt;/span&gt;&lt;span class="operators"&gt;,&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="linenumbers"&gt; 2  &lt;/span&gt;&lt;span class="default"&gt;        &lt;/span&gt;&lt;span class="operators"&gt;{&lt;/span&gt;&lt;span class="strings"&gt;:quality&lt;/span&gt;&lt;span class="default"&gt; &lt;/span&gt;&lt;span class="operators"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="default"&gt; &lt;/span&gt;&lt;span class="strings"&gt;"high"&lt;/span&gt;&lt;span class="operators"&gt;},&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="linenumbers"&gt; 3  &lt;/span&gt;&lt;span class="default"&gt;        &lt;/span&gt;&lt;span class="operators"&gt;{&lt;/span&gt;&lt;span class="strings"&gt;:var_nome&lt;/span&gt;&lt;span class="default"&gt; &lt;/span&gt;&lt;span class="operators"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="default"&gt; &lt;/span&gt;&lt;span class="strings"&gt;"Henry"&lt;/span&gt;&lt;span class="operators"&gt;,&lt;/span&gt;&lt;span class="default"&gt; &lt;/span&gt;&lt;span class="strings"&gt;:var_sobrenome&lt;/span&gt;&lt;span class="default"&gt; &lt;/span&gt;&lt;span class="operators"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="default"&gt; &lt;/span&gt;&lt;span class="strings"&gt;"Hamon"&lt;/span&gt;&lt;span class="operators"&gt;})&lt;/span&gt;&lt;span class="default"&gt; &lt;/span&gt;&lt;span class="operators"&gt;%&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Dentro do swf as variáveis alimentadas estariam estariam na raiz, '_level0.var_nome' para o AS2 e 'Application.application.parameters.var_nome' no Flex.&lt;br /&gt;&lt;br /&gt;Referências:&lt;br /&gt;&lt;a href="http://blog.eleventyten.com/2007/06/08/embedding-swf-content-with-ror/"&gt;http://blog.eleventyten.com/2007/06/08/embedding-swf-content-with-ror/&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.nomedojogo.com/2008/01/24/screencast-5-dry-evitando-repeticoes-no-html/"&gt;http://www.nomedojogo.com/2008/01/24/screencast-5-dry-evitando-repeticoes-no-html/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Gostaria de agradeçer ao Julio, Jair, Millnitz, &lt;a href="http://felipesantiago.net/"&gt;Felipe Santiago&lt;/a&gt; e a &lt;a href="http://theenglishcrowd.blogspot.com/"&gt;Nelci&lt;/a&gt; pelo apoio e ao Paulo Cassiano pelo conselho e apoio também.&lt;br /&gt;Até a próxima semana!!!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1913030929498963580-3887257805659443146?l=www.hamonrails.com.br' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.hamonrails.com.br/feeds/3887257805659443146/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1913030929498963580&amp;postID=3887257805659443146' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1913030929498963580/posts/default/3887257805659443146'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1913030929498963580/posts/default/3887257805659443146'/><link rel='alternate' type='text/html' href='http://www.hamonrails.com.br/2008/03/usando-swf-no-rails.html' title='Usando SWF no Rails'/><author><name>Henry Hamon</name><uri>http://www.blogger.com/profile/09885794876419895686</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://bp1.blogger.com/_D0ghLJMcv1c/SD3rYtRIGYI/AAAAAAAAACY/qKNaCZsz1CQ/S220/C%C3%B3pia+de+avatar.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_D0ghLJMcv1c/R-c-ZE5Xn0I/AAAAAAAAAB0/rydMfSf_cDQ/s72-c/swfobject.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1913030929498963580.post-8166466666904133983</id><published>2008-03-17T00:51:00.000-07:00</published><updated>2008-12-10T16:26:21.869-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='bancos'/><category scheme='http://www.blogger.com/atom/ns#' term='conexão'/><category scheme='http://www.blogger.com/atom/ns#' term='bases'/><category scheme='http://www.blogger.com/atom/ns#' term='babinha'/><category scheme='http://www.blogger.com/atom/ns#' term='database'/><title type='text'></title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_D0ghLJMcv1c/R94y2DGT38I/AAAAAAAAABs/zE1ma9sA5AE/s1600-h/homemmultiplo.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_D0ghLJMcv1c/R94y2DGT38I/AAAAAAAAABs/zE1ma9sA5AE/s400/homemmultiplo.png" alt="" id="BLOGGER_PHOTO_ID_5178632525648748482" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;No RailsPodCast.br #8 foi lançado um desafio para escrever um artigo para poder ganhar a promoção da PeepCode, bom como eu sou mais ligeiro que uma lesma paraplégica, até decidir sobre o que escrever a promoção já tinha passado.&lt;br /&gt;&lt;br /&gt;Num projeto que estava desenvolvendo para um cliente surgiu algo bem peculiar, pois tive que conectar a minha aplicação em 2 banco de dados distintos, logo imaginei que teria que enfrentar um "bicho de sete cabeças" mas depois de umas buscas na api do rails vi que fazer isto é muito simples, bom chega de bla bla blá e vamos ao que interessa.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Nível de Dificuldade:&lt;/span&gt; Babinha, Mamão com Açúcar&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Utilidade:&lt;/span&gt; SDS (Só Deus Sabe)&lt;br /&gt;&lt;br /&gt;A primeira coisa e a mais óbvia a ser feita é a conexão no &lt;span style="font-style: italic;"&gt;database.yml&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;primario: &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  adapter: mysql&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  database: aplicacao&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  username: root&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  password: xyz&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  host: servidorprincipal&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;secundario:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  adapter: mysql&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  database: dbauxiliar&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  username: admin&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  password: yyz&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  host: servidorsecundario&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Agora o complicado, na classe &lt;span style="font-style: italic;"&gt;ActiveRecord&lt;/span&gt; existe um método chamado de &lt;span style="font-style: italic;"&gt;establish_connection&lt;/span&gt; que como o próprio nome diz 'estabelece uma conexão'&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;class Client &lt; ActiveRecord::Base&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  establish_connection "primario"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;end&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;class User &lt; ActiveRecord::Base&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  establish_connection "secundario"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;end&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;isto funcionará em todos os &lt;span style="font-style: italic;"&gt;enviroments&lt;/span&gt;, claro desde que seja especificado no&lt;span style="font-style: italic;"&gt; database.yml&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;primario_development:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;# blablabla&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;primario_test:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;# blablabla&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;primario_production:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;# blablabla&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;secundario_development:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;# blablabla&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;secundario_test:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;# blablabla&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;secundario_production:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;# blablabla&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;agora use a constante RAILS_ENV no método &lt;span style="font-style: italic;"&gt;establish_connection&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;class Client &lt; ActiveRecord::Base&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  establish_connection "primario_#{RAILS_ENV}"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;end&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;class User &lt; ActiveRecord::Base&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  establish_connection "secundario_#{RAILS_ENV}"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;end&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Bom é isto... levei mais tempo pensando no que escrever do que escrevendo em si, mas foi o primeiro artigo, não chega nem aos pés dos escritos pelo Akita ou os do Carlos Eduardo...&lt;br /&gt;&lt;br /&gt;Comentem, estou preparado para "caneladas" e "chutes no saco" hehehehe...&lt;br /&gt;&lt;br /&gt;Abraços&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1913030929498963580-8166466666904133983?l=www.hamonrails.com.br' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.hamonrails.com.br/feeds/8166466666904133983/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1913030929498963580&amp;postID=8166466666904133983' title='3 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1913030929498963580/posts/default/8166466666904133983'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1913030929498963580/posts/default/8166466666904133983'/><link rel='alternate' type='text/html' href='http://www.hamonrails.com.br/2008/03/no-railspodcast.html' title=''/><author><name>Henry Hamon</name><uri>http://www.blogger.com/profile/09885794876419895686</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://bp1.blogger.com/_D0ghLJMcv1c/SD3rYtRIGYI/AAAAAAAAACY/qKNaCZsz1CQ/S220/C%C3%B3pia+de+avatar.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_D0ghLJMcv1c/R94y2DGT38I/AAAAAAAAABs/zE1ma9sA5AE/s72-c/homemmultiplo.png' height='72' width='72'/><thr:total>3</thr:total></entry></feed>
