tag:blogger.com,1999:blog-58834209922472057582024-02-19T22:44:39.799-03:00Blog do SpockBlog pessoal onde posso escrever livremente as minhas idéias e pensamentos, geralmente sobre tecnologia ...<br>
Build network make open source softwareDr. Spockhttp://www.blogger.com/profile/11219711170872890747noreply@blogger.comBlogger56125tag:blogger.com,1999:blog-5883420992247205758.post-17020104516288726952014-09-08T16:59:00.000-03:002014-09-08T16:59:22.178-03:00Raspberry Pi em 15 minutos<div style="text-align: center;">
<object height="360" width="480"><param name="movie" value="//www.youtube.com/v/SP1Vl__Slqg?hl=en_US&version=3&rel=0"></param>
<param name="allowFullScreen" value="true"></param>
<param name="allowscriptaccess" value="always"></param>
<embed src="//www.youtube.com/v/SP1Vl__Slqg?hl=en_US&version=3&rel=0" type="application/x-shockwave-flash" width="480" height="360" allowscriptaccess="always" allowfullscreen="true"></embed></object>
</div>
<div class="blogger-post-footer">Build network make open source software</div>Dr. Spockhttp://www.blogger.com/profile/11219711170872890747noreply@blogger.com0tag:blogger.com,1999:blog-5883420992247205758.post-66132842249769235312013-11-17T23:41:00.001-02:002013-11-17T23:43:18.550-02:00Trailer do Curso EAD de Java EE<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='320' height='266' src='https://www.youtube.com/embed/N1ueOODoB1U?feature=player_embedded' frameborder='0'></iframe></div>
<br /><div class="blogger-post-footer">Build network make open source software</div>Dr. Spockhttp://www.blogger.com/profile/11219711170872890747noreply@blogger.com0tag:blogger.com,1999:blog-5883420992247205758.post-74770731483055679632012-11-08T12:22:00.001-02:002012-11-08T12:30:59.698-02:00ScrumToys nominated to the Duke's Choice Award 2012<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjdSpqQtGzuwW2ilGvVNeyBkEAf3Gq6yg0cJVsaENS0bMFQDvpYPGL8LSL-jUCErEC8zQXYPsUZvv-_i_l4k4M4yewryP5vxtPHL72qZ_cWOLkZy6cv7KTG0q9oxvj3_UE3cX3Mh5zM7KI/s1600/scrum-thumb.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjdSpqQtGzuwW2ilGvVNeyBkEAf3Gq6yg0cJVsaENS0bMFQDvpYPGL8LSL-jUCErEC8zQXYPsUZvv-_i_l4k4M4yewryP5vxtPHL72qZ_cWOLkZy6cv7KTG0q9oxvj3_UE3cX3Mh5zM7KI/s1600/scrum-thumb.png" /></a></div>
Inside the JCP, Spec Leads struggle how to involve developers during the creation of the specification. How can you get people interested in testing, how can they understand the decisions, how can a normal developer give input in something that is still being created?<br />
<br />
The ScrumToys project show a fun and collaborative way to involve developers in participating in a JSR. An open source project developed by a Brazilian team during the evolution of the JSR-314, the Java Server Faces specification, ScrumToys joined together several efforts around JSR-314: the specification itself being written in the JCP, the reference implementation written in the Glassfish project, and the effort in Netbeans to support the new features. The main goal of the project was to test and showcase all the JavaServer Faces 2.0 new features while the spec was being finalized.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-HbDflMDgvbiRZTRaP76gU-sjRyeH99Z2A02V4cBxKwp7tIo61vYDwovrhzryGmc9Ch2HZHqZuxJvvDL4aClc2M-O-hBW-mZJoXD9bz5jJbz6q6HmC790t4tb8p7N5rpoOzou8c1Hl5E/s1600/telasScrumDemo_dashboard.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" height="150" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-HbDflMDgvbiRZTRaP76gU-sjRyeH99Z2A02V4cBxKwp7tIo61vYDwovrhzryGmc9Ch2HZHqZuxJvvDL4aClc2M-O-hBW-mZJoXD9bz5jJbz6q6HmC790t4tb8p7N5rpoOzou8c1Hl5E/s200/telasScrumDemo_dashboard.jpg" width="200" /></a></div>
By becoming a playground of features while the specification was being written, the ScrumToys project allowed thousands of developers around the world to try and learn JSF without any effort to setup or run. And, they could easily send feedback on what worked and what didn't, so the JSR expert group could also see how people were using the new features.<br />
<br />
To make this collaboration possible, ScrumToys offered a complete, ready to run sample application distributed with NetBeans and Glassfish. With this setup, developers can simply select the ScrumToys application, and start experimenting the newest features of the JSR without any special setup.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhtYn__nPcmxx2OYe13i9xFv8twxZtyFGz88SRJmWvzLVuhN3WVtSjEwksU0tfGUoDfCLc4d0wYhlLQuBS6oNl9ijgu-Y55lcDi7n7gbbcmrnIsza8Pxzejp7Kb8cTQl-s8CHBRIu9iMik/s1600/adopt_a_jsr.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="92" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhtYn__nPcmxx2OYe13i9xFv8twxZtyFGz88SRJmWvzLVuhN3WVtSjEwksU0tfGUoDfCLc4d0wYhlLQuBS6oNl9ijgu-Y55lcDi7n7gbbcmrnIsza8Pxzejp7Kb8cTQl-s8CHBRIu9iMik/s200/adopt_a_jsr.png" width="200" /></a></div>
The ScrumToys is an early example of involvement of JUGs with the JCP, as it was developed by people extremely involved with JSR-314 but not formally part of JSF Expert Group. More recently, the project has become an important part of SouJava's Adopt a JSR initiative. With more developers interested in helping, ScrumToys is now being updated and expanded to cover JSR-344, by supporting the new features of JSF 2.2 for the Java EE 7. With that, we expect that ScrumToys will once again showcase an important Java specification, and make it very easy for thousands of developers to learn, experiment and contribute back to make the future Java.<br />
<br />
<a href="http://www.globalcode.com.br/noticias/jsf2scrumdemo">More about Scrumtoys<span id="goog_1194867407"></span></a><br />
<a href="https://blogs.oracle.com/javaone/entry/duke_s_choice_awards_lad" target="_blank">More about the Duke's Choice Award 2012 (LAD)</a><br />
<a href="http://www.oracle.com/javaone/lad-en/home/index.html" target="_blank">More about the JavaOne 2012 Latin America</a><br />
<br />
By Spock and Java Brazilian Community<br />
<a href="http://twitter.spock.com.br/" target="_blank">@drspockbr</a><br />
<a href="http://about.me/drspockbr" target="_blank">http://about.me/drspockbr</a><br />
<a href="http://soujava.org.br/" target="_blank">http://soujava.org.br</a><br />
<br /><div class="blogger-post-footer">Build network make open source software</div>Dr. Spockhttp://www.blogger.com/profile/11219711170872890747noreply@blogger.com0tag:blogger.com,1999:blog-5883420992247205758.post-12926103770389040902012-10-26T13:17:00.000-02:002012-10-30T10:22:07.688-02:00Workshop de Introdução ao ScrumToysComo parte da iniciativa Adote uma JSR (adopt-a-jsr) promovida pelo grupo de usuários SouJava, foi realizado via web, um workshop de introdução sobre o projeto ScrumToys. Este projeto é uma pequena aplicação Web implementada com os recursos do JavaServer Faces 2.0 do Java EE 5 que foi incorporada à ferramenta NetBeans para demonstração das diversas funcionalidades do JSF. Neste workshop foram apresentados, ao longo de uma hora e meia, detalhes da arquitetura interna, as principais funcionalidades demonstradas do JSF e como contribuir nas evoluções futuras deste projeto.<br />
<br />
Está disponível no Youtube o vídeo do workshop de introdução ao projeto ScrumToys.<br />
<br />
<iframe width="427" height="240" src="http://www.youtube.com/embed/d9PvXhdlRD8" frameborder="0" allowfullscreen></iframe>
<br />
<br />
Os slides utilizados neste workshop já estão no slideshare.
<br />
<iframe src="http://www.slideshare.net/slideshow/embed_code/14899870?rel=0" width="427" height="356" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC;border-width:1px 1px 0;margin-bottom:5px" allowfullscreen> </iframe> <div style="margin-bottom:5px"> <strong> <a href="http://www.slideshare.net/drspockbr/workshop-de-introduo-ao-scrumtoys" title="Workshop de Introdução ao ScrumToys" target="_blank">Workshop de Introdução ao ScrumToys</a> </strong> from <strong><a href="http://www.slideshare.net/drspockbr" target="_blank">Dr. Spock</a></strong> </div>
Enjoy it!<br />
By Spock<br />
Twitter: <a href="http://twitter.com/drspockbr" target="_blank">@drspockbr</a><br />
<a href="http://blog.spock.com.br/" target="_blank">http://blog.spock.com.br/</a><br />
<a href="http://linkedin.spock.com.br/" target="_blank">http://linkedin.spock.com.br/</a><br /><div class="blogger-post-footer">Build network make open source software</div>Dr. Spockhttp://www.blogger.com/profile/11219711170872890747noreply@blogger.com0tag:blogger.com,1999:blog-5883420992247205758.post-37827352181723558112011-02-16T16:21:00.000-02:002011-02-16T16:21:49.174-02:00Criando uma aplicação no NetBeans com JPA 2.0 e JavaDBO vídeo tutorial a seguir apresenta a criação de um projeto desde o início, através da versão atual do NetBeans, para o uso do JPA 2 para persistência de uma entidade simples.<br />
<br />
Neste vídeo a IDE é usada para criar um projeto Java e demonstrar o uso do JPA via EclipseLink com o banco de dados JavaDB. Uma entidade simples Cliente é criada. Depois o DAO (Data Access Object) é implementado para realizar algumas operações de persistência.<br />
<br />
<center><iframe src="http://player.vimeo.com/video/19807733?title=0&portrait=0&color=ff9933" width="400" height="225" frameborder="0"></iframe></center><br />
O projeto completo criado neste tutorial pode ser baixado através do seguinte link: <a href="http://dl.dropbox.com/u/3027034/jee6/exemploJPA-1.0.zip">exemploJPA-1.0.zip</a><br />
<br />
Enjoy it!<br />
By Spock<br />
Twitter: <a href="http://twitter.spock.com.br/">@drspockbr</a><br />
<a href="http://linkedin.spock.com.br/">http://linkedin.spock.com.br/</a><br />
<a href="http://www.springbrasil.com.br/">http://www.springbrasil.com.br/</a><div class="blogger-post-footer">Build network make open source software</div>Dr. Spockhttp://www.blogger.com/profile/11219711170872890747noreply@blogger.com1tag:blogger.com,1999:blog-5883420992247205758.post-496313949176580202010-12-28T00:12:00.001-02:002010-12-28T00:39:12.130-02:00Slides JavaOne 2010 USA, Brasil e TDC2010<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi_LSA3mRWWS3lGZUaD01rzWbQHR7rwjM7BRxT8w5Rswc8_T-aF8WZVJGWAGnKM0IccgcpE9D19_J5MSQWj7MzBBuBL-bBh4t4Zu3npVlIdbTf9z7KMPdHkgSPAP3Guf5ZORBDxtz8DgpI/s1600/xicara-javaone-2010.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi_LSA3mRWWS3lGZUaD01rzWbQHR7rwjM7BRxT8w5Rswc8_T-aF8WZVJGWAGnKM0IccgcpE9D19_J5MSQWj7MzBBuBL-bBh4t4Zu3npVlIdbTf9z7KMPdHkgSPAP3Guf5ZORBDxtz8DgpI/s200/xicara-javaone-2010.png" width="150" /></a></div><b>Performance Tips and Tricks: Java EE, Java Persistence API and JavaServer Faces</b> foi o tema apresentado no JavaOne nos Estados Unidos (San Francisco) e aqui no Brasil este ano. Contudo, o título que melhor descreveria a apresentação seria <b>Dicas e Truques sobre performance em aplicações Web com JSF, JPA e AJAX</b>.<br />
<br />
Junto com o Danival Taffarel Calegari, fiz uma prévia deste tema no evento TDC2010 (<a href="http://www.thedevelopersconference.com.br/" target="_blank">The Developers Conference 2010 - Globalcode</a>) em português. Depois fizemos vários ajustes e a tradução para inglês antes do JavaOne 2010 USA. Quando soubemos que o evento seria trazido para o Brasil, encaminhamos o mesmo tema como proposta de palestra. Foi aprovada e, após uma nova tradução para o português e algumas melhorias, realizamos a palestra duas vezes aqui no Brasil.<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjb3BCaQulee_eLhWpYQvARN_cyTP4vocooWo5GqYxz-1tba043HkFPMjzZ7fFnsON9xNKu6syQ6WY2CgTrU25lYMOeBPstnV6WOpOvLLWlzIr_Ij1lLXtg8yadvQKBhqKul0Uhra_ipgU/s1600/e8_javaone_2010.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" height="112" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjb3BCaQulee_eLhWpYQvARN_cyTP4vocooWo5GqYxz-1tba043HkFPMjzZ7fFnsON9xNKu6syQ6WY2CgTrU25lYMOeBPstnV6WOpOvLLWlzIr_Ij1lLXtg8yadvQKBhqKul0Uhra_ipgU/s200/e8_javaone_2010.jpg" width="170" /></a></div>A primeira apresentação aqui no Brasil, no JavaOne, foi realizada no dia 08/12 (quarta-feira) às 16h. Para nossa surpresa, a lotação da sala foi máxima e infelizmente muitas pessoas ficaram de fora por falta de lugar. Mas, uma surpresa maior ainda foi sermos convidados para uma segunda apresentação no dia 09/12 (quinta-feira) às 14h. Esta segunda apresentação foi sugerida para atender aquelas pessoas que ficaram na fila e não conseguiram entrar na sala. Tivemos uma grande fila novamente, mas desta vez, todos puderam entrar na sala, mesmo alguns ficando em pé e outros sentados no chão, resultado numa nova lotação. Assim, fechamos 4 apresentações sobre o tema proposto.<br />
<br />
O feedback da nossa apresentação nos USA foi muito bom. Mas, o resultado das apresentações aqui no JavaOne do Brasil foi muito melhor ainda.<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_TlXdDPhXCM74XyRIXFr-9BlXZsuXoS5ns-4zulFJzaaodJx-13rtmV7JojmQuDQgMIUCQyHLqi9R-Hwluy2gmgReVSYw_-wxTV5lMU-ab3dXCoIv7njIXsm1bbwVWDmyEF0zG6y5jhU/s1600/javaone-brazil-2010-logo.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="60" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_TlXdDPhXCM74XyRIXFr-9BlXZsuXoS5ns-4zulFJzaaodJx-13rtmV7JojmQuDQgMIUCQyHLqi9R-Hwluy2gmgReVSYw_-wxTV5lMU-ab3dXCoIv7njIXsm1bbwVWDmyEF0zG6y5jhU/s400/javaone-brazil-2010-logo.png" width="400" /></a></div><br />
Agora compartilho os slides usados nestas quatro apresentações em três versões.<br />
<div id="__ss_6094618" style="width: 425px;"><strong style="display: block; margin: 12px 0 4px;"><a href="http://www.slideshare.net/drspockbr/dicas-e-truques-sobre-performance-em-javaee-jpa-e-jsf" title="Dicas e truques sobre performance em JavaEE, JPA e JSF">Dicas e truques sobre performance em JavaEE, JPA e JSF</a></strong><object height="355" id="__sse6094618" width="425"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=j1br2010-performancejavaee-101209155617-phpapp02&rel=0&stripped_title=dicas-e-truques-sobre-performance-em-javaee-jpa-e-jsf&userName=drspockbr" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed name="__sse6094618" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=j1br2010-performancejavaee-101209155617-phpapp02&rel=0&stripped_title=dicas-e-truques-sobre-performance-em-javaee-jpa-e-jsf&userName=drspockbr" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object></div><br />
<div id="__ss_6094636" style="width: 425px;"><strong style="display: block; margin: 12px 0 4px;"><a href="http://www.slideshare.net/drspockbr/performance-tips-and-tricks-java-ee-java-persistence-api-and-javaserver-faces" title="Performance Tips and Tricks: Java EE, Java Persistence API and JavaServer Faces">Performance Tips and Tricks: Java EE, Java Persistence API and JavaServer Faces</a></strong><object height="355" id="__sse6094636" width="425"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=j1us2010-performancejavaee-101209155902-phpapp02&rel=0&stripped_title=performance-tips-and-tricks-java-ee-java-persistence-api-and-javaserver-faces&userName=drspockbr" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed name="__sse6094636" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=j1us2010-performancejavaee-101209155902-phpapp02&rel=0&stripped_title=performance-tips-and-tricks-java-ee-java-persistence-api-and-javaserver-faces&userName=drspockbr" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object></div><br />
<div id="__ss_5053238" style="width: 425px;"><strong style="display: block; margin: 12px 0 4px;"><a href="http://www.slideshare.net/drspockbr/dicas-e-truques-sobre-performance-em-java-ee-jpa-e-jsf" title="Dicas e Truques sobre Performance em Java EE, JPA e JSF">Dicas e Truques sobre Performance em Java EE, JPA e JSF</a></strong><object height="355" id="__sse5053238" width="425"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=5053238&rel=0&stripped_title=dicas-e-truques-sobre-performance-em-java-ee-jpa-e-jsf&userName=drspockbr" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed name="__sse5053238" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=5053238&rel=0&stripped_title=dicas-e-truques-sobre-performance-em-java-ee-jpa-e-jsf&userName=drspockbr" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object></div><br />
Esta última versão contem um vídeo (screencast) da aplicação de demonstração (implementação de referência) desenvolvida para demonstrar as dicas e truques apresentadas nos slides.<br />
<br />
O projeto criado como implementação de referência das dicas e truques apresentadas está disponível como um projeto open source no SourceForge através do link: <b><a href="http://j1catalogproto2.sourceforge.net/" target="_blank">JavaOne Catalog Prototype</a></b>.<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhDuSzXuAhxvWr9Fpl6CdbpN3nXepHO861-HqD93eC9OdLp68P8r8-6sycgC1q2fodhKvOo1tTuCscSCLc2MfEo-wNW9m8olfeJVxuWBFIGGS-o_U4avK0r9OFzhOmJImBaJvAS4Eo3TDA/s1600/javaone-2010.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" height="69" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhDuSzXuAhxvWr9Fpl6CdbpN3nXepHO861-HqD93eC9OdLp68P8r8-6sycgC1q2fodhKvOo1tTuCscSCLc2MfEo-wNW9m8olfeJVxuWBFIGGS-o_U4avK0r9OFzhOmJImBaJvAS4Eo3TDA/s200/javaone-2010.png" width="200" /></a></div>Enjoy it!<br />
<br />
By Spock<br />
Twiiter: <a href="http://twitter.spock.com.br/" target="_blank">@drspockbr</a><br />
<a href="http://linkedin.spock.com.br/" target="_blank">http://linkedin.spock.com.br/</a><br />
<a href="http://facebook.spock.com.br/" target="_blank">http://facebook.spock.com.br/</a><br />
<a href="http://www.springbrasil.com.br/" target="_blank">http://www.springbrasil.com.br/</a><div class="blogger-post-footer">Build network make open source software</div>Dr. Spockhttp://www.blogger.com/profile/11219711170872890747noreply@blogger.com0tag:blogger.com,1999:blog-5883420992247205758.post-45485930694442598492010-12-25T15:29:00.002-02:002010-12-25T15:32:06.946-02:00Instalando ffmpeg no Mac OS X Snow LeopardHoje me deparei com a necessidade de converter um arquivo de áudio do formato <b>aac</b> para <b>mp3</b> e tinha disponível apenas o meu MacBookPro 13" com o Mac OS X Snow Leopard.<br />
<br />
Infelizmente, este sistema não disponibiliza um conversor já previamente instalado. Várias opções que achei na rede eram shareware ou pagas. Até quando encontrei o ffmpegX, mas também não é free. Foi quando resolvi baixar o ffmpeg puro e recompilar no Mac.<br />
<br />
Quando fiz isso, pude notar o quanto você precisa ser nerd para fazer coisas um pouquinho mais avançadas no Mac OS. As vezes até precisa ser mais nerd do que um nerd de Linux/Ubuntu/etc.<br />
<br />
Contudo, encontrei as seguintes referências na rede:<br />
<ul><li><a href="http://stephenjungels.com/jungels.net/articles/ffmpeg-howto.html" target="_blank">Installing and using FFmpeg on Mac OS X</a></li>
<li><a href="http://www.hiteshagrawal.com/ffmpeg/converting-audiovideos-using-ffmpeg" target="_blank">Converting Audio and Videos using FFMPEG</a></li>
<li><a href="http://www.ffmpeg.org/" target="_blank">FFmpeg home</a></li>
</ul>Então, após o download do <a href="http://sourceforge.net/projects/lame/" target="_blank">LAME</a>, <a href="http://www.audiocoding.com/faac.html" target="_blank">FAAC</a>, <a href="http://www.audiocoding.com/faad2.html" target="_blank">FAAD2</a> e descompactar os respectivos arquivos num diretorio, segui os passos indicados no roteiro indicado na primeira referência. Para isso, usei as seguintes instruções num terminal aberto:<br />
<pre name="code" class="javascript">cd lame-3.98.4
./configure
make
sudo make install
cd ../faac-1.28
./configure
make
sudo make install
cd ../faad2-2.7
./configure
make
sudo make install
cd ..
svn checkout \
svn://svn.ffmpeg.org/ffmpeg/trunk ffmpeg
cd ffmpeg
./configure --enable-libmp3lame \
--enable-shared --disable-mmx \
--arch=x86_64
make
sudo make install
</pre>Todo o processo de configuração, compilação e instalação de cada ferramenta ocorreu com sucesso. Então, para converter o arquivo desejado para "mp3", usei a seguinte linha de comando no terminal:<br />
<pre name="code" class="javascript">ffmpeg -i origem.aac \
-acodec 'libmp3lame' destino.mp3
</pre>Pronto ... simples assim! :)<br />
<br />
<i>Para ser um usuário PRO num Mac OS X as vezes precisamos ser mais nerd do que num Ubuntu que facilita a vida com o synaptic</i>.<br />
<br />
By spock<br />
<a href="http://linkedin.spock.com.br/" target="_blank">http://linkedin.spock.com.br/</a><br />
<a href="http://facebook.spock.com.br/" target="_blank">http://facebook.spock.com.br/</a><br />
<a href="http://www.springbrasil.com.br/" target="_blank">http://www.springbrasil.com.br/</a><div class="blogger-post-footer">Build network make open source software</div>Dr. Spockhttp://www.blogger.com/profile/11219711170872890747noreply@blogger.com2tag:blogger.com,1999:blog-5883420992247205758.post-6569870277312519772010-11-13T21:53:00.000-02:002010-11-13T21:53:51.422-02:00Vídeo Tutorial sobre Spring Roo + GWT + GAE<div class="separator" style="clear: both; text-align: center;"></div>Baseado na apresentação realizada no <a href="http://www.thedevelopersconference.com.br/tdc/2010/index.html" target="_blank">TDC 2010</a> em Florianópolis preparei um vídeo tutorial com narração desmonstrando o uso do <a href="http://www.blogger.com/www.springsource.org/roo" target="_blank">Spring Roo</a> gerando uma aplicação Web baseada no GWT (<a href="http://code.google.com/webtoolkit/" target="_blank">Google Web Toolkit</a>) e deploy no GAE (<a href="http://code.google.com/appengine/" target="_blank">Google App Engine</a>).<br />
<h2>Luz, Câmera, Ação!</h2><center><iframe frameborder="0" height="225" src="http://player.vimeo.com/video/16799511?title=0&portrait=0" width="400"></iframe></center><br />
Enjoy it!<br />
By spock<br />
<a href="http://linkedin.spock.com.br/" target="_blank">http://linkedin.spock.com.br/</a><br />
<a href="http://facebook.spock.com.br/" target="_blank">http://facebook.spock.com.br/</a><br />
<a href="http://www.springbrasil.com.br/" target="_blank">http://www.springbrasil.com.br/</a><div class="blogger-post-footer">Build network make open source software</div>Dr. Spockhttp://www.blogger.com/profile/11219711170872890747noreply@blogger.com3tag:blogger.com,1999:blog-5883420992247205758.post-34609665254092874942010-11-09T13:00:00.001-02:002010-11-13T21:39:12.956-02:00TDC2010 em Floripa foi sensacional!<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVP3wqRsfmOzDvkQ3oLEQK4vvIqQLO5JgTcXBzf82vWgy8yfkNOnIvg7ToP3IEjAxW3BzKbivPdGeyqFy9CiE7c_BzOmkUxuKAvkJ8cBIv59mQMCf9zDa6EXUioHO-Jx4ML5JgR8ZkrG4/s1600/banner-TDC2010-floripa-180x150.png" imageanchor="1" style="clear:right; float:right; margin-left:1em; margin-bottom:1em" target="_blank"><img border="0" height="150" width="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVP3wqRsfmOzDvkQ3oLEQK4vvIqQLO5JgTcXBzf82vWgy8yfkNOnIvg7ToP3IEjAxW3BzKbivPdGeyqFy9CiE7c_BzOmkUxuKAvkJ8cBIv59mQMCf9zDa6EXUioHO-Jx4ML5JgR8ZkrG4/s200/banner-TDC2010-floripa-180x150.png"></img></a></div>Neste último final de semana aconteceu em Florianópolis a terceira edição do "<b>The Developers Conference</b>" promovido pela <a href="http://www.globalcode.com.br/" target="_blank">Globalcode</a> e <a href="http://www.voffice.com.br/" target="_blank">V.Office</a>. O evento contou com mais de 500 inscrições, 6 trilhas de assuntos e 42 palestras. Eu tive a oportunidade ímpar de contribuir com 3 palestras de assuntos que gosto muito. Foi sensacional!<br />
<br />
Agora resolvi publicar aqui os slides que utilizei durante as palestras. A primeira palestra foi sobre computação física com Arduino, Program-ME e a plataforma Java. Apresentei nesta palestra o conceito de computação física, hardware open source, além de mostrar o Arduino e o Program-ME (exemplos de hardware open source) como excelentes meios de realizar/experimentar/aprender computação física.<br />
<div style="width:425px" id="__ss_5692870"><strong style="display:block;margin:12px 0 4px"><a href="http://www.slideshare.net/drspockbr/computao-fsica-com-arduino-programme-e-java" title="Computação Física com Arduino, Program-ME e Java" target="_blank">Computação Física com Arduino, Program-ME e Java</a></strong><object id="__sse5692870" width="425" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=tdc2010floripa-computacaofisica-spock-101107144925-phpapp01&rel=0&stripped_title=computao-fsica-com-arduino-programme-e-java&userName=drspockbr" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed name="__sse5692870" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=tdc2010floripa-computacaofisica-spock-101107144925-phpapp01&rel=0&stripped_title=computao-fsica-com-arduino-programme-e-java&userName=drspockbr" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object><div style="padding:5px 0 12px">View more <a href="http://www.slideshare.net/" target="_blank">presentations</a> from <a href="http://www.slideshare.net/drspockbr" target="_blank">Dr. Spock</a>.</div></div>Na segunda palestra falei sobre a plataforma Spring através do tema "<b>Spring 3: Uma plataforma além do framework</b>". O objetivo era apresentar os vários frameworks, linguagens, ferramentas e portes do Spring que começam a estabelecer uma nova plataforma de desenvolvimento de aplicações Java. Na segunda parte desta palestra tratei das funcionalidades e características presentes na versão 3.0 do Spring Framework.<br />
<div style="width:425px" id="__ss_5692858"><strong style="display:block;margin:12px 0 4px"><a href="http://www.slideshare.net/drspockbr/spring-3-uma-plataforma-alm-do-framework" title="Spring 3: Uma Plataforma além do Framework" target="_blank">Spring 3: Uma Plataforma além do Framework</a></strong><object id="__sse5692858" width="425" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=tdc2010floripa-plataformaspring-spock-101107135828-phpapp02&rel=0&stripped_title=spring-3-uma-plataforma-alm-do-framework&userName=drspockbr" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed name="__sse5692858" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=tdc2010floripa-plataformaspring-spock-101107135828-phpapp02&rel=0&stripped_title=spring-3-uma-plataforma-alm-do-framework&userName=drspockbr" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object><div style="padding:5px 0 12px">View more <a href="http://www.slideshare.net/" target="_blank">presentations</a> from <a href="http://www.slideshare.net/drspockbr" target="_blank">Dr. Spock</a>.</div></div>A terceira e última palestra foi para mostrar a ferramenta de geração de códigos chamada de <a href="http://www.springsource.org/roo" target="_blank">Spring Roo</a>. O objetivo desta palestra, além de definir e apresentar o Spring Roo, era de mostrar como gerar uma aplicação Web baseada em GWT (<a href="http://code.google.com/webtoolkit/" target="_blank">Google Web Toolkit</a>) e o deploy no GAE (<a href="http://code.google.com/appengine/" target="_blank">Google App Engine</a>). A aplicação gerada e demonstrada durante a palestra está disponível no GAE: <a href="http://scroomtoys.appspot.com/" target="_blank">Scrum ROO Toys</a>. Disponibilizei também o script para criação da aplicação demo através do ROO shell: <a href="http://bit.ly/scroomtoys" target="_blank">ScroomToys</a>.<br />
<div style="width:425px" id="__ss_5692803"><strong style="display:block;margin:12px 0 4px"><a href="http://www.slideshare.net/drspockbr/produtividade-com-spring-roo-no-google-app-engine" title="Produtividade com Spring Roo no Google App Engine" target="_blank">Produtividade com Spring Roo no Google App Engine</a></strong><object id="__sse5692803" width="425" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=tdc2010floripa-springroo-spock-101107144415-phpapp01&rel=0&stripped_title=produtividade-com-spring-roo-no-google-app-engine&userName=drspockbr" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed name="__sse5692803" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=tdc2010floripa-springroo-spock-101107144415-phpapp01&rel=0&stripped_title=produtividade-com-spring-roo-no-google-app-engine&userName=drspockbr" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object><div style="padding:5px 0 12px">View more <a href="http://www.slideshare.net/" target="_blank">presentations</a> from <a href="http://www.slideshare.net/drspockbr" target="_blank">Dr. Spock</a>.</div></div>Outras apresentação estão disponíveis no site oficial do evento: <a href="http://www.thedevelopersconference.com.br/tdc/2010/floripa/programacao" target="_blank">The Developers Conference 2010</a>.<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhGM7OolLYXyjoUBCuSt0H6ADM_3sZFmLkxnmU5w73S2Th4H_or4SUohX9jvTSVY_Ini-ZXabKMDZ3BK9ah5jTwIN3dP8P9dqVcph2EBJofWaxSpb9OdDpfclO9Oslvnoh4SIPfgvNgd0g/s1600/academiacerveja1.jpg" imageanchor="1" style="clear:right; float:right; margin-left:1em; margin-bottom:1em" target="_blank"><img border="0" height="150" width="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhGM7OolLYXyjoUBCuSt0H6ADM_3sZFmLkxnmU5w73S2Th4H_or4SUohX9jvTSVY_Ini-ZXabKMDZ3BK9ah5jTwIN3dP8P9dqVcph2EBJofWaxSpb9OdDpfclO9Oslvnoh4SIPfgvNgd0g/s200/academiacerveja1.jpg"></img></a></div>Como sempre, não pude deixar de visitar um pub local para beber uma cervejinha artezanal da região. Daí, o happy hour para network etílico aconteceu no <a href="http://www.choppdogus.com.br/" target="_blank">Chopp do Gus</a> (sábado) e na <a href="http://www.academiadacerveja.com.br/" target="_blank">Academia da Cerveja</a> (domingo).<br />
<br />
By spock<br />
<a href="http://linkedin.spock.com.br/" target="_blank">http://linkedin.spock.com.br/</a><br />
<a href="http://facebook.spock.com.br/" target="_blank">http://facebook.spock.com.br/</a><br />
<a href="http://www.springbrasil.com.br/" target="_blank">http://www.springbrasil.com.br/</a><div class="blogger-post-footer">Build network make open source software</div>Dr. Spockhttp://www.blogger.com/profile/11219711170872890747noreply@blogger.com0tag:blogger.com,1999:blog-5883420992247205758.post-51118515096863397972010-06-15T08:37:00.013-03:002010-06-15T12:59:13.279-03:00Arquitetura do ScrumToys influencia livro sobre JSF 2.0<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://blog.globalcode.com.br/2009/12/scrumtoys-disponivel-no-netbeans-68.html" target="_blank" title="Clique aqui e saiba mais sobre o ScrumToys!"><img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 119px; height: 108px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiHxuaMuoAwVWMAWhqzLnu44b5iccKnoqNaTiwIPIpkdAmVYPMWaouIs8jMBZy5J_vVi6PwOOlt2mdHd-f96HJQ24ZcTCPf2UgiRFlkZ8lAcRlKriITLgUEr3aLwS9oZL_ph0ezTNRtUBhz/s200/scrum-thumb.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5465269534034140786" /></a>Recentemente participei do desenvolvimento da aplicação exemplo chamada de <span style="font-weight:bold;">ScrumToys</span> para demonstrar o maior número possível de funcionalidades do JSF 2.0. Boa parte do refactoring da arquitetura de componentes na camada de controle e modelo foi realizado por mim.<br />
<br />
Alguns detalhes sobre as classes implementadas para suporte aos Managed Beans da aplicação ScrumToys estão disponíveis no blog da Globalcode: <a target="_blank" href="http://blog.globalcode.com.br/2010/06/um-pouco-sobre-arquitetura-do-scrumtoys.html">Um pouco sobre a arquitetura do ScrumToys</a>.<br />
<br />
<a target="_blank" title="Clique aqui para mais detalhes sobre este livro!" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://books.google.com/books?id=aNRq-8GlRYQC&printsec=frontcover#v=onepage&q&f=false"><img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 162px; height: 200px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhT6yfWhOTa1ZYZFngBBY88Nix2amHM_eZeWLi_G-tIyB5wETSsyySEm3H1TK_Vzb9ugQ_dbiL6hzvDxtn-OLaMMlFeF8He9GxpWzS2jI53CJky1jlQvJTUuy4wDy0DyzjYXHtOkzzVXkY9/s200/jsfcompref-cover-front.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5481568977566616274" /></a>As simplificações propostas nas classes implementadas na camada de controle serviram de referência para o desenvolvimento dos exemplos contidos no livro <span style="font-weight:bold;">JavaServer Faces 2.0, The Complete Reference</span>, escrito pelo <a href="http://www.java.net/blogs/edburns/" target="_blank">Ed Burns</a>, líder da especificação do JSF 2.0 no JCP, e pelo <a href="http://chrisschalk.com/blog/" target="_blank">Chris Schalk</a>, Developer Advocate no Google. Este livro implementa uma aplicação chamada <span style="font-style:italic;">Virtual Trainer</span> ao usar a modelagem para gerenciamento do contexto de persistência e demarcação da transação via JTA através de classes base abstratas para os Managed Beans do JSF 2.0 no ScrumToys.<br />
<br />
Um trecho do livro está disponível no Google Books e indica uma referência indireta à arquitetura proposta pelo ScrumToys.<br />
<br />
<center><iframe frameborder="0" scrolling="no" style="border:0px" src="http://books.google.com/books?id=aNRq-8GlRYQC&lpg=PP1&dq=javaserver%20faces%202.0%20the%20complete%20reference&pg=PA248&output=embed" width=400 height=550></iframe></center><br />
O projeto ScrumToys foi incorporado à versão final do NetBeans 6.8 como uma demonstração de aplicação Web. O vídeo a seguir ilustra o uso do NetBeans para criar este projeto a partir de um wizard da ferramenta e permitir o acesso aos códigos de demonstração do JSF 2.0:<br />
<br />
<object width="400" height="324" style="display:block; margin:0px auto 0px; text-align:center;cursor:pointer;"><param name="movie" value="http://www.youtube.com/v/3N9gzhXYQc4&hl=pt_BR&fs=1&rel=0&border=1"><param name="allowFullScreen" value="true"><param name="allowscriptaccess" value="always"><embed src="http://www.youtube.com/v/3N9gzhXYQc4&hl=pt_BR&fs=1&rel=0&border=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="400" height="324"></embed></object><br />
Em reconhecimento ao trabalho realizado, o Ed Burn faz referência à alguns desenvolvedores deste projeto no tópico <a target="_blank" href="http://books.google.com/books?id=aNRq-8GlRYQC&lpg=PP1&pg=PR23#v=onepage&q&f=false">Acknowledgments</a> do livro.<br />
<br />
Ed, muito obrigado!<br />
<br />
By Spock<br />
<a target="_blank" href="http://twitter.spock.com.br/">http://twitter.spock.com.br/</a><br />
<a target="_blank" href="http://www.springbrasil.com.br/">http://www.springbrasil.com.br/</a><div class="blogger-post-footer">Build network make open source software</div>Dr. Spockhttp://www.blogger.com/profile/11219711170872890747noreply@blogger.com1tag:blogger.com,1999:blog-5883420992247205758.post-21513649781141253222010-06-04T12:24:00.016-03:002010-06-04T21:55:20.633-03:00Motorola Milestone vesus Apple iPhone 3GSQual escolher? Qual o melhor? Êita decisão difícil!<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjaNW5-ADwNQNJ2mBtrKUxxJbKApEK-AFmEiYioJJFc15m-G9dcja4_nwxOqMRUOuwRQ-_-FU8TyV0_D7xO2jE7l0_0JaXRPJdMn7yGZKq-wFGyLvdQd67oEtOwTun7YU7JjQRJeZUWz2E/s1600/iPhoneVsMilestone.jpg" target="_blank" title="Clique aqui para ampliar!"><img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 200px; height: 110px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjaNW5-ADwNQNJ2mBtrKUxxJbKApEK-AFmEiYioJJFc15m-G9dcja4_nwxOqMRUOuwRQ-_-FU8TyV0_D7xO2jE7l0_0JaXRPJdMn7yGZKq-wFGyLvdQd67oEtOwTun7YU7JjQRJeZUWz2E/s200/iPhoneVsMilestone.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5478964087278686946" /></a>Num comparativo realizado pela <a href="http://info.abril.com.br/reviews/hardware/comparativos/motorola-milestone-x-apple-iphone-3gs.shtml" target="_blank">Info</a>, o iPhone 3GS levou a melhor em alguns quesitos, mas o Motorola Milestone, além do Android 2.0, ganha em alguns pontos no hardware. Apesar da Motorola já oferecer um outro celular com Android (o Motorola Dext), no momento o Milestone é a nossa única opção com a versão mais nova do Android.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh0CuqH3cG3ERlGKdOIhmlCV7u81V3xbrmcxk_AUWu0tnkHe5q19IXA0shF3F1zLBYZh8HtwhpeoUBKhyWnZWhPAB0Cp1OHHa4-1xm4vUCIAMPs3zXsMosPQP1vb1_ekkNxEi6hWkefV1s/s1600/milestone.jpg" target="_blank" title="Clique aqui para ampliar!"><img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 200px; height: 154px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh0CuqH3cG3ERlGKdOIhmlCV7u81V3xbrmcxk_AUWu0tnkHe5q19IXA0shF3F1zLBYZh8HtwhpeoUBKhyWnZWhPAB0Cp1OHHa4-1xm4vUCIAMPs3zXsMosPQP1vb1_ekkNxEi6hWkefV1s/s200/milestone.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5478964516691483554" /></a>O Motorola Milestone conta com uma câmera fotográfica de 5M pixels contra a câmera de 3M pixels do iPhone. Além disso, o Milestone oferece flash através de LED e um certo nível de zoom. Contudo, o design quadradão do Milestone desanima qualquer um. Inclusive é chamado de <a href="http://info.abril.com.br/reviews/hardware/smartphones/motorola-milestone-um-android-de-tiozao.shtml">Android de tiozão</a> pela Info.<br /><br />Tirando a câmera fotográfica e o sistema operacional aberto da Google (o Android) no Motorola Milestone, sem dúvida o iPhone se mostra melhor em vários aspectos, como comentado na avaliação da Info. O design e a usabilidade do iPhone são imbatíveis.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgcn_iXwc3zMNz6qahyphenhyphenN14AfwhmY5KbeQG13SaLnXhyphenhyphen7mVlYhERSrjHBVZe76dGKIs0FrkiUcHGY264ELcTC8Q8ewslZE9btSOcS4fB2hqdd5XPLUSjKcyebCf20ZN-EsFQO9QzjKGE0qk/s1600/iphone.jpg" target="_blank" title="Clique aqui para ampliar!"><img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 200px; height: 146px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgcn_iXwc3zMNz6qahyphenhyphenN14AfwhmY5KbeQG13SaLnXhyphenhyphen7mVlYhERSrjHBVZe76dGKIs0FrkiUcHGY264ELcTC8Q8ewslZE9btSOcS4fB2hqdd5XPLUSjKcyebCf20ZN-EsFQO9QzjKGE0qk/s200/iphone.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5478964926658637346" /></a>Apesar da velocidade proporcionada pelo Android, pela presença da Google, por ser mais simples de desenvolver aplicativos e disponibilizá-los sem muita burocracia para venda na loja online do Android, acabei optando pelo iPhone pelo design, facilidade de uso e excelente integração com o iTunes via um MacBook Pro que possuo. Contudo, achei muito chato não suportar multi-tarefa, ao sair do Skype para rodar outro aplicativo, o iPhone desconecta a minha conta Skype. Tem uma boa gambi para os programas serem atualizados periodicamente via a tecnologia de "push". Mas nem todo aplicativo suporta o "push".<br /><br />Como disse o <a href="http://twitter.com/carlos_netto" target="_blank">TK</a>, que tem em mãos as duas plataformas, no seu twitter: "O iPhone é realmente um belo trabalho que oferece uma ótima experiência para o usuário. Como este trabalho de criar uma boa UI é valioso." (<a href="http://twitter.com/carlos_netto/status/14949654533" target="_blank">link</a>) e "Testei o Android: funciona, rápido; muito legal e melhor que muito celular mais caro. Mas a interface com o usuário do iPhone é incomparável" (<a href="http://twitter.com/carlos_netto/status/14949510888" target="_blank">link</a>).<br /><br />Mais informações:<br /><div><ul><li><a href="http://info.abril.com.br/reviews/hardware/comparativos/motorola-milestone-x-apple-iphone-3gs.shtml" target="_blank">Motorola Milestone X Apple iPhone 3GS</a></li><li><a href="http://info.abril.com.br/reviews/hardware/smartphones/qual-e-a-do-iphone-3gs.shtml?5" target="_blank">Qual é a do iPhone 3GS?</a></li><li><a href="http://info.abril.com.br/reviews/hardware/smartphones/motorola-milestone-um-android-de-tiozao.shtml" target="_blank">Motorola Milestone, um Android de tiozão</a></li><li><a href="http://info.abril.com.br/reviews/hardware/smartphones/motorola-dext-o-android-da-geracao-y.shtml" target="_blank">Motorola DEXT, o Android da geração Y</a></li></ul>E aí está uma pequena galeria de fotos do iPhone assim que chegou em casa:</div><div><br /></div><center><embed type="application/x-shockwave-flash" src="http://picasaweb.google.com/s/c/bin/slideshow.swf" width="400" height="267" flashvars="host=picasaweb.google.com&hl=pt_BR&feat=flashalbum&RGB=0x000000&feed=http%3A%2F%2Fpicasaweb.google.com%2Fdata%2Ffeed%2Fapi%2Fuser%2Fblogdospock%2Falbumid%2F5478957983350856689%3Falt%3Drss%26kind%3Dphoto%26hl%3Dpt_BR" pluginspage="http://www.macromedia.com/go/getflashplayer"></embed></center><br />Não pude deixar de notar que a operadora aqui na região que comercializa os dois celulares, oferece o iPhone e Milestone por quase o mesmo preço para o meu perfil de consumo de ligações e 3G. Portanto, a escolha foi difícil!<div class="blogger-post-footer">Build network make open source software</div>Dr. Spockhttp://www.blogger.com/profile/11219711170872890747noreply@blogger.com2tag:blogger.com,1999:blog-5883420992247205758.post-39633018983664699712010-05-24T23:29:00.044-03:002010-05-31T12:36:48.300-03:00Palestra aceita para o JavaOne 2010<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiryRuyzD-sCey7HUb_jdEofc23GL-kThDY7MC_r4mf67Ls5JQ3pckZkeVGWLIPvYl_ayETvzKHU1cddybRauVdTiv_KiSDwg3YCWQ-73-X4P9LVwGvQGQMJZke767BRDl3f9aKy3U5KMQ/s1600/duke_j1.png"><img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 200px; height: 233px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiryRuyzD-sCey7HUb_jdEofc23GL-kThDY7MC_r4mf67Ls5JQ3pckZkeVGWLIPvYl_ayETvzKHU1cddybRauVdTiv_KiSDwg3YCWQ-73-X4P9LVwGvQGQMJZke767BRDl3f9aKy3U5KMQ/s400/duke_j1.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5475043368848423090" /></a>Este ano terei mais uma vez o privilégio de participar como palestrante do <a href="http://www.oracle.com/us/javaonedevelop/062264.html" target="_blank">JavaOne</a>, o maior evento Java do mundo.<br /><br />No ano passado, com o tema "<span style="font-style:italic;">Enterprise Web 2.0 Architecture: from pristine Java EE to fully-loaded frameworks</span>" (<a href="http://www.slideshare.net/drspockbr/enterprise-web-20-from-pristine-java-ee-to-fullyloaded-frameworks-1662529" target="_blank">slides</a>) e junto com o <a href="http://twitter.com/vsenger" target="_blank">Vinicius Senger</a> (sócio e co-fundador da <a href="http://www.globalcode.com.br/" target="_blank">Globalcode</a>), apresentamos este tema num período de 60 minutos para uma sessão do tipo <a href="http://en.wikipedia.org/wiki/Birds_of_a_Feather_(computing)" target="_blank">BoF</a> (Birds of a Feather). Foi uma experiência ímpar apresentar uma palestra neste evento e totalmente em inglês.<br /><br />Agora, para este ano, o tema será "<span style="font-weight:bold;">Performance Tips and Tricks: Java EE, Persistence API and JavaServer Faces</span>". Desta vez, vou apresentar junto com o <a href="http://twitter.com/danivaltc" target="_blank">Danival Calegari</a> (arquiteto de software na <a href="http://www.matera.com/" target="_blank">Matera Systems</a> e instrutor da unidade <a href="http://www.globalcode.com.br/" target="_blank">Globalcode</a> em Campinas).<br /><br />Neste evento teremos o objetivo de apresentar algumas técnicas (boas práticas atualizadas de desenvolvimento com JSF+JPA e design patterns) para melhorar a performance de aplicações Web 2.0 implementadas através de JSF com Ajax e acesso a banco de dados relacional via JPA com grande volume de dados. Para ilustrar estas técnicas, apresentaremos um estudo de caso através de uma aplicação usada como "implementação de referência" para ajudar a resolver problemas de performance encontrados em alguns projetos de consultoria realizados ao longo deste último ano.<br /><br />O vídeo a seguir apresenta uma versão simplificada da aplicação demo que será usada para apresentar as "dicas&truques" sobre performance em aplicações Web 2.0:<br /><br /><center><object width="400" height="337"><param name="movie" value="http://www.youtube.com/v/OsNBTerYrs4&hl=en_US&fs=1&rel=0&color1=0x2b405b&color2=0x6b8ab6&border=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/OsNBTerYrs4&hl=en_US&fs=1&rel=0&color1=0x2b405b&color2=0x6b8ab6&border=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="400" height="337"></embed></object></center><br />O JavaOne 2010 acontecerá dos dias 19 a 23 de setembro em San Francisco, USA.<br /><br />Segue uma tradução para português do resumo enviado para a organização do evento:<br /><br /><span style="font-weight:bold;">Dicas e Truques sobre performance em Java EE, JPA e JSF</span><br /><blockquote>"Desde o lançamento do JavaServer Faces no Java EE, tornou-se possível desenvolver aplicações Web 2.0 usando um modelo efetivo de componentes visuais com a mesma semântica de aplicações desktop baseando em Swing. O modelo de eventos tornou-se efetivo após a popularização do Ajax ao promover RIA. Todavia, performance e escalabilidade são afetadas por velhos padrões de projetos quando são aplicados na arquitetura da aplicação. Novos padrões de projeto devem ser aplicados para atingir os requisitos de performance neste novo cenário.<br /><br />Esta sessão apresentará algumas dicas e truques para melhoria efetiva da performance de interfaces Web usando Ajax e o gerenciamento do contexto de persistência JPA."</blockquote><br />Até a data do evento, vamos melhorar a aplicação de referência, preparar os slides em inglês e refinar o texto do que será dito durante a apresentação.<br /><br />Será uma aventura e tanto!<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.oracle.com/us/javaonedevelop/062264.html" target="_blank" title="Visite o site do JavaOne2010"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 43px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhcSTJZSG7oILNrl7RCZatLvPCVZH4iCn-9ZhmBBMva20PYjoGaFkj3BqF3fcnXc0C5vERE6jDc1AHQZatbI7RqSAyoBUukacy0WVR69pselski6aDFr1ETP3XH1J5aNLnRWJTCF-mkvb8/s400/javaone2010.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5475044701663420258" /></a><br /><a href="http://translate.google.com.br/translate?js=y&prev=_t&hl=pt-BR&ie=UTF-8&layout=1&eotf=1&u=http://blog.spock.com.br/2010/05/palestra-aceita-para-o-javaone-2010.html&sl=pt&tl=en&swap=1">Read it in English</a>!<div class="blogger-post-footer">Build network make open source software</div>Dr. Spockhttp://www.blogger.com/profile/11219711170872890747noreply@blogger.com0tag:blogger.com,1999:blog-5883420992247205758.post-7598522237051823632010-03-19T13:51:00.006-03:002010-03-19T13:59:33.740-03:007 argumentos para usar o OpenOffice<b>1. O software é open-source e uso livre</b><br /><br />Mais importante no momento é ser gratuito do que ser open-source. Entre uma instalação pirata e uma licença a ser paga variando de R$ 150,00 à R$ 800,00, é muito melhor usar uma opção gratuita que tem a mesma qualidade e oferece os mesmos recursos.<br /><br /><b>2. Disponível nas plataformas Linux, Windows e Mac</b><br /><br />Independência de plataforma. Temos defendido tanto isso com Java ... porque não com o editor de textos? O Open Document Format é um padrão aberto que vai além do OpenOffice, podemos enviar um mesmo documento para ser aberto em sistemas operacionais diferentes. Em pouco tempo poderíamos abrir os mesmos documentos em software diferentes. Eu uso muito o Ubuntu (Linux), outros só usam Windows e alguns fanboys usam o Mac. Temos tudo isso dentro de muitas empresas. Então porque não trabalhar com um pacote office que funciona em qualquer uma destas plataformas?<br /><br /><b>3. Oferece as mesmas funcionalidades que o MS Office</b><br /><br />Todas as funcionalidades que usamos no dia-a-dia do M$ Office estão disponíveis no OpenOffice. Podemos enumerar algumas: criação de estilos de formatação, registro de mudanças, fontes, figuras, ilustrações, gráficos, etc. Inclusive a criação de templates para permitir a criação rápida de novos documentos. Foi fácil importar os estilos visuais definidos nos documentos word para odf. O mesmo efeito visual foi reproduzido!<br /><br />A funcionalidade templates não é exclusiva do M$ Office. No OpenOffice é tão simples quanto no M$ Office a criação de um template. Podemos usar a mesma estratégia que muitos usam ao criar templates do M$O: limpa um documento já pronto e salva como template (Save as). A importação de um doc de restaurou todos os estilos visuais usados nas apostilas (tais como: TT_TITULO1, TT_TITULO2, TT_TITULO3, TT_CABECALHO, TT_CABECALHO_DIREITO, TT_CONTRACAPA e outros). Portanto, no OpenOffice conseguimos reproduzir perfeitamente o padrão visual de documentos importados do word. Este trabalho deve ser feito apenas uma vez, agora só salvar um template. Voialá! Podemos fazer o mesmo para o padrão de slides! Muitos templates estão disponíveis na rede, vários estão disponíveis no BROffice.org.<br /><br /><b>4. Permite abrir, editar e salvar nos formatos do MS Office (doc, ppt e xls)</b><br /><br />Se recebermos um documento criado no M$ Office conseguimos abrir facilmente através do OpenOffice. Claro que algumas formatações podem ser perdidas. Mas isso está tendendo a zero a cada nova versão do OO, e já nas últimas versões (3.1 e 3.2) é muito difícil encontrar algo que é perdido. Contudo, M$ Office não abre documentos do OpenOffice :(<br /><br /><b>5. Permite exportar para PDF a partir de qualquer documento</b><br /><br />Este é um recurso extra que já é nativo! Não precisamos instalar uma impressora especial ou algum plugin para o editor.<br /><br /><b>6. Tem disponível uma iniciativa brasileira através do BROffice.org</b><br /><br />BROffice é uma comunidade brasileira criada em torno do OO para uma distribuição bem regionalizada, com direito a dicionário de palavras em português para suportar o corretor ortográfico, corretor gramatical, dicionário de sinônimos e temáticos, repositório de templates abertos e livre com atas, termos, declarações, contratos, distratos, recibos, relatórios, requerimentos, trabalhos acadêmicos (monografia, projeto de pesquisa, outros), etc. Tam free e open-source!<br /><br /><b>7. Não usa VBA para programação de macros</b><br /><br />Uhuuu ... Podemos usar Java ou Javascript para criar macros! Tempos atrás eu comecei a fazer um script para abrir e exportar diversos slides (ODF presentation do Impress) para criar um book de slides num arquivo PDF. Funcionou bem! Todas as estruturas do OpenOffice estão disponíveis como classes e objetos Java na programação de macros ... mamão-com-açucar ... piece-of-cake! Não poderia ser mais fácil!<br /><br />Estes argumentos apresentam apenas um ponto de vista e um cenário que me permitiu justificar o uso do OpenOffice. Mas sei que em outros cenários o M$ Office é a melhor opção. Você teria algum outro argumento em favor do OpenOffice? Ou algum cenário em que seria mais apropriado o M$ Office? Ou quer invalidar algum argumento? Deixe os seus comentários.<br /><br /><ul><li><a href="http://www.openoffice.org/" target="_blank">OpenOffice.org - The Free and Open Productivity Suite</a></li><li><a href="http://www.broffice.org/" target="_blank">BrOffice.org</a></li></ul><div class="blogger-post-footer">Build network make open source software</div>Dr. Spockhttp://www.blogger.com/profile/11219711170872890747noreply@blogger.com6tag:blogger.com,1999:blog-5883420992247205758.post-53475523614564678782010-01-30T00:00:00.008-02:002010-01-30T00:51:37.443-02:00Algumas sugestões de podcastAlguns twitters atrás o brother <a href="http://twitter.com/rafanunes">@rafanunes</a> pediu algumas sugestões de podcast. Rapidamente eu enviei através do twitter algumas sugestões de podcast que acompanho. Sabiamente, por estar antenada e sempre ponderando em como tirar o melhor proveito do twitter, a <a href="http://twitter.com/yarasenger">@yarasenger</a> me alertou sobre a volatilidade do twitter e recomendou-me documentar as sugestões num post no blog. Ela citou que as mensagens no twitter podem se perder rapidamente dentro dos vários posts que uma pessoa recebe quando acompanha várias outras pessoas ou quando acessa com pouca freqüência o twitter. Então, aqui estão as sugestões que indiquei para o brother:<ul><br /><li><a href="http://bit.ly/bOPBFy">twit.tv - Leo Laporte and friends</a>: Este cara tem vários podcasts com notícias e comentários sobre segurança e tecnologia. Muito bom para desenvolver o ouvido para o inglês. As várias discussões usam o inglês na velocidade normal. Além de ajudar a se manter atualizado, nos ajuda a ter outros pontos de vista sobre a tecnologia com uma visão crítica.</li><br /><li><a href="http://bit.ly/bzmkg7">Buzz Out Loud</a>: Este podcast segue a linha do Leo Laporte. Tenho acompanhado este podcast a mais de 4 anos. Os primeiros episódios tinham um inglês numa velocidade moderada, agora são 3 pessoas discutindo tecnologia e as últimas novidades numa velocidade impressionante. Uma pessoa sempre interrompendo outra e comentando as notícias recentes. Eles publicam um episódio novo quase que diariamente. Considero um nível avançado. Muito bom! Já estão com mais de 1000 episódios gravados. Agora estão disponibilizando videocasts gravados com o vídeo gravado durante a realização dos episódios.</li><br /><li><a href="http://bit.ly/9pViBq">Java Posse</a>: São caras da Microsoft, Java e google falando de tudo sobre estas plataformas. Cada um tentando puxar a sardinha pro seu lado. Muito legal ...</li><br /><li><a href="http://bit.ly/beHLIs">BBC podcasts</a>: São podcasts dos mais variados assuntos, que vão desde tecnologia até música, atualidades e política internacional.</li><br /><li><a href="http://bit.ly/cmqOA7">World Nerds</a>: Discutem sobre a origem das palavras em inglês e o uso em diversos contextos. Além das diferenças entre o inglês britânico e americano (não apenas pronuncia, mas significados principalmente). Contudo, este podcast está um pouco parado.</li><br /><li><a href="http://bit.ly/91vXwo">ELSPOD - English as a Second Language Podcast</a>: Muito bom para desenvolver o ouvido pro inglês. Numa velocidade menor, assuntos sobre atualidades e cultura norte america são apresentados neste podcast. Por curiosidade, o narrador deste podcast foi o ator na serie Star War que interpretou o Chewbaca (bicho peludo que acompanhava o Han Solo - Harrison Ford).</li><br /><li><a href="http://bit.ly/9sKjEs">Maestro Billy</a>: Episódios semanais com uma compilação de várias músicas. Muito bom para saber o que anda rolando nas rádios e pistas.</li><br /><li><a href="http://bit.ly/9nrRf9">VOANews Learning English</a>: Muito bom para desenvolver o ouvido para o inglês. São narrações de textos, com direito a transcrição no site, de atualidades, história america, curiosidades, política, etc. Sempre num inglês claro, sem gírias, 1/3 da velocidade normal dos diálogos. Mas também tem uma rádio online, em velocidade normal de conversação, parecida com a CBN.</li><br /></ul>Acompanho todos estes podcasts através de configuração no Google Reader. Dá para rodar o áudio sem acessar o site de cada podcast, além de saber quando algum episódio novo está disponível.<br /><br />Caso tenha outras sugestões para complementar o portifólio apresentado, não deixe de escrever nos comentários. Seria muito bom estar atualizado com sugestões.<br /><br />[]'s<br />Spock<div class="blogger-post-footer">Build network make open source software</div>Dr. Spockhttp://www.blogger.com/profile/11219711170872890747noreply@blogger.com6tag:blogger.com,1999:blog-5883420992247205758.post-62648988559241739462010-01-04T23:44:00.025-02:002010-01-24T10:57:19.635-02:00EJB 3: Uma evolução sob os conceitos do Hibernate e SpringDefinitivamente o modelo de componentização definido no Java EE 5 e 6 evoluiu e melhorou muito. Mas, sem dúvida muita dessa evolução se deve às pressões do Hibernate e Spring Framework. Estes dois últimos frameworks nasceram baseados no conceito de POJO, que nada mais é do que a concepção de um modelo de componentização baseado em classes Java sem as regras impostas pelo EJB (curioso, sem o EJB não existiria o Hibernate ou o Spring).<br /><br />O Hibernate nasceu da idéia de promover um modelo de persistência mais simples que o proposto pelos EJBs do tipo Entity Beans definido na especificação EJB 2.x. Este foi o primeiro tipo de EJB a sofrer com a evasão de desenvolvedores com o surgimento deste framework e a conscientização sobre os problemas nos Entity Beans. A partir de um modelo baseado em JavaBeans e o uso do JDBC, o Hibernate usa a Reflection API para gerar os SQLs necessários para persistir o estado de beans em diversos banco de dados relacionais, além de definir o conceito de dialeto para resolver as diferenças de sintaxe do SQL usado entre as diferentes implementações de banco de dados. Ao resolver efetivamente a persistência dos objetos em banco de dados relacional, a morte dos entity beans estava decretada. Não foi atoa que no Java EE 5, numa tentativa de resgatar um padrão efetivo entre os desenvolvedores, surgiu o JPA usando os mesmos conceitos do Hibernate e promovendo uma API padrão com base em vários dos seus conceitos. A morte oficial dos entity beans no EJB!<br /><br />Já o Spring Framework nasceu para combater os problemas resultantes das idéias usadas nas definições de outro tipo fundamental de componente do modelo proposto pelos EJBs: os Session Beans. Usando a mesma proposta do Hibernate, o Spring Framework adotou o JavaBean como modelo de componentização aliado aos serviços enterprise com o auxílio da programação orientada a aspectos (AOP). Assim, o Spring Framework decretou a morte dos EJBs do tipo Session Beans.<br /><br />O Java EE 5, apesar de manter compatibilidade com as versões anteriores, aplica os mesmos conceitos usados pelo Hibernate e Spring Framework (JavaBeans e injeção de dependências, por exemplo), numa tentativa de evitar o êxodo de desenvolvedores da padronização. Dando o braço a torcer, o EJB 3 aplica um modelo baseado em POJOs (que ironia!) até eliminar a obrigatoriedade das interfaces home, remota e local (favorecendo uma modelagem OO efetiva, uso de herança, polimorfismo, design patterns e interfaces de negócios). Contudo, o Java EE 5 trouxe uma novidade que impôs uma evolução nos frameworks que foram os seus carrascos: O uso de anotações para eliminar configurações em XML. Poderíamos dizer que o EJB 3 não é uma mera cópia dos conceitos usados no Hibernate e Spring, mas também traz uma inovação ao fazer copy/paste/modify. Curioso foi ver que o Hibernate e o Spring foram obrigados a evoluir.<br /><br />Contudo, podemos notar que o EJB 3.0 deixou de fora muitas das melhorias já presentes no Hibernate/Spring. No JPA 1.0 podemos notar a falta do mecanismo de "Criteria" e no EJB a falta de uma modularização mais flexível além dos tradicionais JAR, WAR e EAR. Tanto que agora no EJB 3.1 e JPA 2.0, várias melhorias tentam eliminar as deficiências reclamadas pela comunidade que já não existiam em versões antigas do Hibernate e Spring Framework.<br /><br />Muitos se questionam hoje se deveriam usar o Hibernate e o Spring considerando as evoluções do EJB 3 e JPA estabelecidas pelo Java EE 5 e 6. Acredito que pela simplicidade e padronização proporcionados no Java EE deveríamos usar o EJB e JPA. Mas, considerando as limitações deveríamos levar em consideração o uso do Hibernate e do Spring Framework. Apesar de não serem frameworks padrões, e por isso mesmo, não estão limitados às imposições políticas de vários interesses, estes frameworks têm a liberdade de evoluir e experimentar idéias inviáveis até o momento no Java EE, além de propiciar a integração com outros frameworks que também não são padrões e são legados ainda em uso pela comunidade (por exemplo: Struts, iText, Quartz, etc). Muitos conhecem as vantagens de usar o Hibernate diretamente em detrimento das limitações do JPA. No Spring temos a modularização através de OSGi e o uso pleno do AOP como parte da modelagem dos componentes de negócios das aplicações enterprise.<br /><br />Apesar das melhorias amplamente comentadas no Java EE 6 através do EJB 3.1 e JPA 2.0, ainda é evidente muitas das vantagens do uso direto do Hibernate e do Spring Framework.<div class="blogger-post-footer">Build network make open source software</div>Dr. Spockhttp://www.blogger.com/profile/11219711170872890747noreply@blogger.com2tag:blogger.com,1999:blog-5883420992247205758.post-3594748231365154612009-11-08T12:57:00.005-02:002009-11-08T15:54:57.480-02:00Melhorando Performance de JPA com Spring Web FlowNo <a href="http://bit.ly/38wBwb" target="_blank">TDC2009</a> realizado pela <a href="http://www.globalcode.com.br/" target="_blank">Globalcode</a> em São Paulo eu apresentei um <span style="font-style: italic;">Lightning Talk</span> sobre um problema específico de performance em aplicações Web com JPA e uma possível solução usando o <a href="http://www.springsource.org/webflow" target="_blank">Spring Web Flow</a>.<br /><br />Num período de 15 minutos, os slides a seguir foram apresentados e seguidos de alguns vídeos de demonstração de uma aplicação Web em execução.<br /><div style="width: 425px; text-align: left;" id="__ss_2449797"><a style="margin: 12px 0pt 3px; font-family: Helvetica,Arial,Sans-serif; font-style: normal; font-variant: normal; font-weight: normal; font-size: 14px; line-height: normal; font-size-adjust: none; font-stretch: normal; display: block; text-decoration: underline;" href="http://www.slideshare.net/drspockbr/melhorando-performance-do-jpa-com-spring-web-flow" title="Melhorando performance do JPA com Spring Web Flow">Melhorando performance do JPA com Spring Web Flow</a><object style="margin: 0px;" height="355" width="425"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=lt-performancejpa-swf-091108072131-phpapp01&rel=0&stripped_title=melhorando-performance-do-jpa-com-spring-web-flow"><param name="allowFullScreen" value="true"><param name="allowScriptAccess" value="always"><embed src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=lt-performancejpa-swf-091108072131-phpapp01&rel=0&stripped_title=melhorando-performance-do-jpa-com-spring-web-flow" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" height="355" width="425"></embed></object><div style="font-size: 11px; font-family: tahoma,arial; height: 26px; padding-top: 2px;">View more <a style="text-decoration: underline;" href="http://www.slideshare.net/">presentations</a> from <a style="text-decoration: underline;" href="http://www.slideshare.net/drspockbr">Dr. Spock</a>.</div></div><br />Nesta apresentação foi dito que temos encontrado problemas de performance em aplicações Web que utilizam as tecnologias JSF + JPA + Ajax quando precisamos gerenciar um contexto de persistência (EntityManager). Este problemas se manifestam quando aplicamos uma resposta errada para a pergunta: Como gerenciar o contexto de persistência numa aplicação Web?<br /><br />Se as aplicações não usam Ajax e limitam-se ao modelo orientado a requisições, a solução mais comum é o uso do design pattern chamado "Open Session In View Filter". Através deste design pattern, um contexto de persistência novo é aberto no início de uma requisição Web através de um filtro e fechado ao final desta requisição pelo mesmo filtro. Durante o processamento da requisição, as entidades persistente carregadas não geram erros (LazyInitializationException, por exemplo) porque o contexto de persistência ainda esta aberto. Mas se estas entidades são armazenadas no escopo de sessão, muitos erros podem acontecer quando estes objetos são usados numa outra requisição. Para resolver estes erros, muitos desenvolvedores utilizam o artifício de navegar nas associações, ou reinserir (merge) as entidades no novo contexto de persistência ou recarregar/salvar várias vezes estas entidades. Estas implementações degradam consideravelmente a performance da aplicação, além de inviabilizar o uso efetivo de cache de objetos, normalmente encontrado nas implementações de JPA.<br /><br />O problema de performance é agravado quando a aplicação usa intensamente o modelo orientado a eventos. Este modelo é a tendência natural dos sistemas Web 2.0, principalmente pela mudança de paradigma de desenvolvimento Web proporcionado pelo JSF e Ajax. Ao longo de uma sessão de uso da aplicação e acesso às telas, muitas requisições assíncronas são enviadas para a aplicação no lado do servidor. A cada requisição, um novo contexto de persistência é aberto e fechado se o design pattern sugerido anteriormente é aplicado. Portanto, a resposta para a primeira pergunta não é o uso deste design pattern e muito menos os "workarounds" para os efeitos colaterais resultantes do uso deste padrão no novo modelo orientado a eventos.<br /><br />Uma solução proposta e aplicada na prática está baseada no uso do conceito de <span style="font-style: italic;">escopo de conversação</span>. Um escopo numa aplicação web define uma visibilidade e um tempo de vida dos objetos armazenados no servidor. Atualmente, um contâiner Web implementa os escopos de página, requisição, sessão e aplicação. O JSF 1.2 usa estes mesmos escopos e o JSF 2.0 adiciona os escopos View e Custom (que permite a criação de novos escopos). Já o Spring Framework disponibiliza os escopos singleton, prototype, request e session. Contudo, nenhum destes escopos tem a visibilidade por usuário e, ao mesmo tempo, o tempo de vida entre uma requisição e uma sessão como requerido pelo escopo de conversação. Mas, os frameworks <a href="http://www.springsource.org/webflow" target="_blank">Spring Web Flow</a>, <a href="http://www.seamframework.org/" target="_blank">Seam Framework</a> e <a href="http://myfaces.apache.org/orchestra/" target="_blank">Apache MyFaces Orchestra</a> implementam este escopo e permitem o gerenciamento automático de um contexto de persistência neste escopo.<br /><br />Então, uma solução efetiva para os problemas de performance e erros numa aplicação que usa JPA e o modelo orientado a eventos é o uso do escopo de conversação implementado por um dos frameworks sugeridos. Na aplicação web a ser demonstrada foi escolhido o Spring Web Flow por ser um dos produtos do <a href="http://www.springsource.org/projects" target="_blank">Spring Portifolio</a>, utilizar as mesmas boas práticas do <a href="http://www.springsource.org/" target="_blank">Spring Framework</a>, ter um baixo risco de se tornar um produto descontinuado e ser fácil de integrar numa arquitetura já baseada no Spring Framework + JSF + JPA.<br /><br />O uso do Spring Web Flow (SWF) permitiu o fim dos erros de LazyInitializationException, o uso efetivo de cache das entidades persistentes, redução da quantidade de objetos na sessão, suporte a paginação, filtro e ordenação já na camada de apresentação com uma forte integração com o mecanismo de persistência JPA. Contudo, o SWF na versão atual (v.2) ainda requer o uso de XML para determinar quando uma conversação é iniciada e quando será destruída. Além de ser necessário realizar um "merge" das entidades ao final da conversação para atualizar na base de dados as possíveis alterações em memória.<br /><br />Os vídeos de demonstração a seguir ilustram o funcionamento da uma aplicação web realizada através de uma implementação de referência que usa Spring Framework 2.5, JSF 1.2, JPA 1.0, Richfaces 3.3, Facelets 1.1.15, Spring Web Flow 2.0, Hibernate (JPA Provider) e MySQL 5.0.<br /><br /><span style="font-weight:bold;">TDC2009 Video Demo 1</span><br /><object width="340" height="285"><param name="movie" value="http://www.youtube.com/v/X0F5r1cswlQ&hl=en&fs=1&rel=0&border=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/X0F5r1cswlQ&hl=en&fs=1&rel=0&border=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="340" height="285"></embed></object><br /><br /><span style="font-weight:bold;">TDC2009 Video Demo 2</span><br /><object width="340" height="285"><param name="movie" value="http://www.youtube.com/v/OsNBTerYrs4&hl=en&fs=1&rel=0&border=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/OsNBTerYrs4&hl=en&fs=1&rel=0&border=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="340" height="285"></embed></object><br /><br /><span style="font-weight:bold;">TDC2009 Video Demo 3</span><br /><object width="340" height="285"><param name="movie" value="http://www.youtube.com/v/HzL00KP5rf8&hl=en&fs=1&rel=0&border=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/HzL00KP5rf8&hl=en&fs=1&rel=0&border=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="340" height="285"></embed></object><br /><br />Este último vídeo demonstra o poder do <span style="font-style: italic;">Lazy Loading</span> a medida que os painéis são abertos e fechados. Como o contexto de persistência permanece disponível durante o período do escopo de conversação aberto, tornou-se possível carregar da base de dados somente alguns objetos e depois os outros objetos a medida que os painéis são expandidos. Os logs apresentados através do NetBeans neste vídeo ilustram a carga sob demanda dos objetos. Também ilustra o uso do cache nos objetos já carregados quando painéis que já foram expandidos são abertos novamente. Neste caso, nenhum log de consulta ao banco de dados aparece no NetBeans.<br /><br />O <a href="http://bit.ly/38wBwb" target="_blank">TDC2009</a> em São Paulo foi fantástico!<br />By Spock<div class="blogger-post-footer">Build network make open source software</div>Dr. Spockhttp://www.blogger.com/profile/11219711170872890747noreply@blogger.com3tag:blogger.com,1999:blog-5883420992247205758.post-59717234222422400892009-08-24T17:03:00.002-03:002009-08-24T17:08:15.992-03:00Uma breve história do Java<object width="425" height="344" style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer;"><param name="movie" value="http://www.youtube.com/v/WAy9mgEYb6o&rel=0&color1=0xb1b1b1&color2=0xcfcfcf&hl=en&feature=player_embedded&fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowScriptAccess" value="always"></param><embed src="http://www.youtube.com/v/WAy9mgEYb6o&rel=0&color1=0xb1b1b1&color2=0xcfcfcf&hl=en&feature=player_embedded&fs=1" type="application/x-shockwave-flash" allowfullscreen="true" allowScriptAccess="always" width="425" height="344"></embed></object><div class="blogger-post-footer">Build network make open source software</div>Dr. Spockhttp://www.blogger.com/profile/11219711170872890747noreply@blogger.com1tag:blogger.com,1999:blog-5883420992247205758.post-12544667238690955072009-08-22T22:40:00.020-03:002009-08-24T12:50:44.220-03:00Hello Arduino World: Parte 3Na <a target="_blank" href="http://blog.spock.com.br/2009/07/hello-arduino-world-parte-2.html">segunda parte</a> deste tutorial mostrei o uso de 6 LEDs ligados ao Arduino e o programa necessário para acender e apagar em sequência estes LEDs. Depois o exemplo foi evoluído para receber um sinal digital de uma chave para controlar a direção ao apagar e acender os LEDs. Agora vamos à terceira parte do exemplo "Hello Arduino World".<br /><br /><a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgKQ7OECnZnSN0_9fBMovgbwrv3SxSU_AjbQ6gM75NojShZiyd9d_WPmJBNXqVMkka80QAilzWXMmXH7ckjNnD7rgToU4GpdcelII7UnvU02qBBbZYLRCgv2soWE3T8j1y08egHjtAUpVI/s1600-h/IMG_6901.JPG"><img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 200px; height: 150px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgKQ7OECnZnSN0_9fBMovgbwrv3SxSU_AjbQ6gM75NojShZiyd9d_WPmJBNXqVMkka80QAilzWXMmXH7ckjNnD7rgToU4GpdcelII7UnvU02qBBbZYLRCgv2soWE3T8j1y08egHjtAUpVI/s200/IMG_6901.JPG" title="Clique para ampliar" id="BLOGGER_PHOTO_ID_5372982106001036738" border="0"></a>Nesta terceira parte vou evoluir o programa usado para controlar a velocidade que os LEDs acendem e apagam ao fazer a leitura de uma informação analógica vindo de um potenciômetro (resistor com resistência variável a partir de um botão). Para mudar a velocidade, o potenciômentro será ligado a uma porta de entrada analógica para receber um tensão variável de 0 a 5 volts que resultará num valor inteiro entre 0 e 1023 no programa rodando no Arduino.<br /><br /><a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjvpewidZ0wzJcJhKyLETyN8bJzPCKVG-26TmiKfogwBVm9OKDQrRgYbS8o4Y62Nqt4LEFLK0UkQlvrnutjpi0toOH1omiZMufL39z2c6C_wVS4n6jLxg_E4MzZfDCXRuZW9PH2fg1EBm4/s1600-h/IMG_6902.JPG"><img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 200px; height: 150px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjvpewidZ0wzJcJhKyLETyN8bJzPCKVG-26TmiKfogwBVm9OKDQrRgYbS8o4Y62Nqt4LEFLK0UkQlvrnutjpi0toOH1omiZMufL39z2c6C_wVS4n6jLxg_E4MzZfDCXRuZW9PH2fg1EBm4/s200/IMG_6902.JPG" title="Clique para ampliar" id="BLOGGER_PHOTO_ID_5372984485501114514" border="0"></a>O potenciômetro tem 3 pinos, onde a resistência entre um dos pinos da borda e o pino central varia de 0 ohm ao máximo possível (10k ohms para o potenciômetro usado neste tutorial). Ao aplicar 5 volts num dos pinos da borda (fio vermelho) e 0 volt ao outro pino da borda (fio preto), teremos uma voltagem variável no pino central. Este pino central (fio laranja) é ligado à entrada analógica 0 do Arduino.<br /><pre name="code" class="Cpp">#define QTD_LEDS 6<br />#define portaChave 8<br />#define portaPot 0<br /><br />int porta[QTD_LEDS] = {2,3,4,5,6,7};<br />int pausa = 500;<br /><br />void setup() {<br /> for(int i = 0;i < QTD_LEDS; i++) {<br /> pinMode(porta[i],OUTPUT);<br /> }<br /> pinMode(portaChave,INPUT);<br />}<br /><br />void loop() {<br /> pausa = analogRead(portaPot);<br /> if (digitalRead(portaChave) == HIGH) {<br /> for(int i = 0;i < QTD_LEDS; i++) {<br /> digitalWrite(porta[i], HIGH);<br /> delay(pausa);<br /> digitalWrite(porta[i], LOW);<br /> }<br /> } else {<br /> for(int i = QTD_LEDS - 1;i >= 0; i--) {<br /> digitalWrite(porta[i], HIGH);<br /> delay(pausa);<br /> digitalWrite(porta[i], LOW);<br /> }<br /> }<br />}<br /></pre><br /><a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiKfDoT3F9XKFP61Dv95ID2VzdVAeXaR7kTw4jn4EbyHomX-4dQ-J8EaXzhvPLpG34KAefUwQiPpwG25XZnsAyJVPsbRbc0EAMoEwhyxxD_AiS8HZGzN2bH6VzNAn7Vm6hoCiAHItggwD4/s1600-h/IMG_6903b.JPG"><img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 200px; height: 150px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiKfDoT3F9XKFP61Dv95ID2VzdVAeXaR7kTw4jn4EbyHomX-4dQ-J8EaXzhvPLpG34KAefUwQiPpwG25XZnsAyJVPsbRbc0EAMoEwhyxxD_AiS8HZGzN2bH6VzNAn7Vm6hoCiAHItggwD4/s200/IMG_6903b.JPG" title="Clique para ampliar" id="BLOGGER_PHOTO_ID_5372986734786472498" border="0"></a>O programa acima, a ser instalado no Arduino, define uma constante com o nome <span style="font-weight: bold;">portaPot</span> com o valor 0. Este valor indica a porta analógica a qual está ligado o portenciômetro. Como as portas analógicas sempre são para entrada de um sinal analógico, não é necessário adicionar uma linha de configuração dentro da função "setup()". Mas, na primeira linha da função "loop()" é usada a função "analogRead()" para ler o valor atual na porta analógica indicada pela constante "portaPot". Esta função retornará um valor inteiro entre 0 e 1023 de acordo a tensão aplicada na porta analógica (entre 0 e 5 volts). Este valor é armazenado na variável global "pausa". Esta variável é usada nas linhas 20 e 26 para determinar o tempo em milisegundos entre o acender e apagar de um LED.<br /><br />O video a seguir mostra a execução do programa implementado acima já instalado e rodando dentro do Arduino.<br /><br /><iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='320' height='266' src='https://www.blogger.com/video.g?token=AD6v5dxJKdHYD8E5a4NZhLcT9y4C9ShS7ocySy3r6uPxHwko-Ah3kkXZGMaCSur1bcboYgxeGiWulh9D3w8IiCECAw' class='b-hbp-video b-uploaded' frameborder='0'></iframe><br /><br />O próximo exemplo, que será apresentando num novo post, ilustrará uma evolução do código acima para receber um sinal analógico vindo de um LDR (Resistor Dependente de Luz) para controlar o tempo que cada LED permanece aceso.<div class="blogger-post-footer">Build network make open source software</div>Dr. Spockhttp://www.blogger.com/profile/11219711170872890747noreply@blogger.com3tag:blogger.com,1999:blog-5883420992247205758.post-43502989546394435402009-08-02T19:39:00.008-03:002009-08-02T21:14:25.225-03:00Anotações, Áudio e Video sobre Robótica na GlobalcodeNo último <a target="_blank" href="http://www.casualclass.com.br/edicoes/robotica7/index.seam">Casual Class</a> realizado na Globalcode no dia 24 de julho, pedi a Ana Abrantes que usasse a <a target="_blank" href="http://blog.spock.com.br/2008/09/caneta-que-roda-java-de-1-milho-de.html">caneta mágica que roda Java</a> para registrar todo o evento. Agora fiz o upload do áudio e do conteúdo anotado por ela.<br /><br />Abaixo está o flash que permite reproduzir o áudio e ver algumas anotações. Não sei o aconteceu, mas a ferramenta Livescribe Desktop associou uma página a mais neste pencast. Então, para ver exatamente as anotações realizadas durente o evento, selecione a página 2 ou 3. Para isso, basta clicar no número que indica a página (no número 1) e selecionar a página 2. Para pular o áudio para um ponto específico basta clicar em qualquer parte da anotação.<br /><br /><div style="text-align: center;"><object width="228" height="316"><param name="movie" value="http://www.livescribe.com/media/swf/embedPlayer.swf"></param><param name="FlashVars" value="path=http%3A//www.livescribe.com/cgi-bin/WebObjects/LDApp.woa/wa/flashXML%3Fxml%3D0000C0A80116000009C63E28000001228568E8413BD6D2EB&embedversion=1;firstpage=2"></param><param name="allowFullScreen" value="true"></param></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.livescribe.com/media/swf/embedPlayer.swf?path=http%3A//www.livescribe.com/cgi-bin/WebObjects/LDApp.woa/wa/flashXML%3Fxml%3D0000C0A80116000009C63E28000001228568E8413BD6D2EB&embedversion=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="228" height="316"></embed></object><br />Clique no <b>play</b> ou na seta superior para full screen</div><br /><br />O pessoal da Globalcode preparou um video que foi disponibilizado no youtube. Este video contem algumas cenas gravadas durente o evento. Vocês poderão encontrar algumas participações do velho Spock.<br /><br /><object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/pmejCcJ-GpI&color1=0xb1b1b1&color2=0xcfcfcf&hl=pt-br&feature=player_embedded&fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowScriptAccess" value="always"></param><embed src="http://www.youtube.com/v/pmejCcJ-GpI&color1=0xb1b1b1&color2=0xcfcfcf&hl=pt-br&feature=player_embedded&fs=1" type="application/x-shockwave-flash" allowfullscreen="true" allowScriptAccess="always" width="425" height="344"></embed></object><br /><br />Este video foi originalmente publicado no site da <a target="_blank" href="http://www.globalcode.com.br/site/noticias/painel.seam?chave=VideoCCRobotica">Globalcode</a>.<br /><br />Then, enjoy it!<div class="blogger-post-footer">Build network make open source software</div>Dr. Spockhttp://www.blogger.com/profile/11219711170872890747noreply@blogger.com2tag:blogger.com,1999:blog-5883420992247205758.post-56174204155684909862009-07-22T00:58:00.025-03:002009-08-23T00:56:38.875-03:00Hello Arduino World: Parte 2Na <a href="http://blog.spock.com.br/2009/07/hello-arduino-world-parte-1.html" target="_blank">primeira parte</a> deste simples tutorial mostrei uma unidade de uso do Arduino ao ilustrar o uso de um LED e um resistor conectados a uma porta digital. Depois um simples programa implementado na IDE Processing, compilado e instalado no Arduino fez este LED acender e apagar. Agora Vamos à segunda parte do exemplo "Hello Arduino World".<br /><br />Nesta segunda parte vou evoluir o programa usado para controlar vários LEDs usando um loop baseado na instrução "for" suportada pelo microcontrolador do Arduino.<br /><br /><a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiZ_bYcug1qaX0ILVXOTDr-Cy49LVWCsuNSvK8rMVcnzDviNCXaSImblCIUZKWa0q9_ID9VtR00kx-kKWmcLiTXkNX6kzunKrXjuGbiD2kEW03Wal5VsCaMhOXH7YdLHSovOAH9tESndF4/s1600-h/img_6882.jpg"><img title="Clique para ampliar" style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 200px; height: 150px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiZ_bYcug1qaX0ILVXOTDr-Cy49LVWCsuNSvK8rMVcnzDviNCXaSImblCIUZKWa0q9_ID9VtR00kx-kKWmcLiTXkNX6kzunKrXjuGbiD2kEW03Wal5VsCaMhOXH7YdLHSovOAH9tESndF4/s200/img_6882.jpg" alt="Clique para ampliar" id="BLOGGER_PHOTO_ID_5361130568970292898" border="0" title="Clique para ampliar"></a>Os LEDs estão ligados da porta 2 até a porta 7, num total de 6 LEDs. Como ilustra a figura ao lado, foram usados LEDs vermelhos e verdes dispostos de maneira intercalada. Cada um ligado a um resistor de 10k e 1k ohms, respectivamente.<br /><br />O código a seguir contem as instruções necessárias para configurar as portas digitais como saída e acender/apagar os LEDs ligados a estas portas em sequência.<br /><pre name="code" class="Cpp"><br />#define QTD_LEDS 6<br /><br />int porta[QTD_LEDS] = {2,3,4,5,6,7};<br />int pausa = 500;<br /><br />void setup() {<br /> for(int i = 0;i < QTD_LEDS; i++) {<br /> pinMode(porta[i], OUTPUT);<br /> }<br />}<br /><br />void loop() {<br /> for(int i = 0;i < QTD_LEDS; i++) {<br /> digitalWrite(porta[i], HIGH);<br /> delay(pausa);<br /> digitalWrite(porta[i], LOW);<br /> }<br /> for(int i = QTD_LEDS - 1;i == 0; i--) {<br /> digitalWrite(porta[i], HIGH);<br /> delay(pausa);<br /> digitalWrite(porta[i], LOW);<br /> }<br />}<br /></pre><br />Na linha 3 do código acima é definido um array contendo em cada posição o número de cada porta ocupada por um LED. O uso da estrutura array facilita e simplifica o acesso em sequência ao número de cada porta usada para fazer a respectiva configuração na função "setup()" e o controle de cada LED em loop na função "loop()".<br /><br /><a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh4DE0EmXXlZPOiAMVjRcA6yYinQGWnkizRoIBxo_m_P5GfArfGQyLU76OJJlgXnrewzUMVQ7PQDBDtM3kPrKPOQCMOeaIXThULOkHf7Hk8zkGKvdU6z7LmrTJx1gUBhhoa5pqnn1wL7HI/s1600-h/img_6886.jpg"><img title="Clique aqui para ampliar" title="Clique para ampliar" style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 200px; height: 150px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh4DE0EmXXlZPOiAMVjRcA6yYinQGWnkizRoIBxo_m_P5GfArfGQyLU76OJJlgXnrewzUMVQ7PQDBDtM3kPrKPOQCMOeaIXThULOkHf7Hk8zkGKvdU6z7LmrTJx1gUBhhoa5pqnn1wL7HI/s200/img_6886.jpg" alt="" id="BLOGGER_PHOTO_ID_5361131270393684162" border="0"></a>Na função "setup()", implementada a partir da linha 7, cada porta é configurada dentro da instrução "for" que permite a execução da linha 8 num número conhecido de vezes. A cada execução uma das portas indicadas pelo array "porta" é configurada como saída (OUTPUT) através da execução da função "pinMode()".<br /><br /><a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQKiZa2BSGf4beBrBa2vWupRoLEXsTILS8vgfhVafGdSzyLhwLfiR0bl81T6dS7FolrlulhButyjOIYE-ExdvRPrjXCbAuWT-IzqxYtwskOJf-yKJrO77m5hl0x1qiC6VgfQuseqh6j50/s1600-h/img_6887.jpg"><img title="Clique para ampliar" style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 150px; height: 200px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQKiZa2BSGf4beBrBa2vWupRoLEXsTILS8vgfhVafGdSzyLhwLfiR0bl81T6dS7FolrlulhButyjOIYE-ExdvRPrjXCbAuWT-IzqxYtwskOJf-yKJrO77m5hl0x1qiC6VgfQuseqh6j50/s200/img_6887.jpg" alt="" id="BLOGGER_PHOTO_ID_5361133017962717298" border="0"></a>A função "loop()", que será executada infinitas vezes pelo microcontrolador do Arduino, usa duas vezes a instrução "for" para acender e apagar o LED conectado em cada porta. No primeiro uso, os LEDs acendem e apagam na sequência crescente e no segundo uso, os LEDs acendem e apagam na sequência decrescente.<br /><br />O video a seguir mostra a execução do programa implementado acima já instalado e rodando dentro do Arduino.<br /><br /><iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='320' height='266' src='https://www.blogger.com/video.g?token=AD6v5dwMseAMfGmgLyHYJdRNNVplKdp_EPOLiZLqZTfcXSIfq0TnLIOgBca4MIMraDvbBj-HV8p9znWmCYtTrBza8A' class='b-hbp-video b-uploaded' frameborder='0'></iframe><br /><br />Agora vamos fazer uma pequena evolução neste exemplo para incorporar uma chave que permite mandar um bit para o programa através de porta digital 8. Usando este bit podemos controlar a direção que os LEDs acendem/apagam ao aplicar a instrução "if" sobre as linhas de código que realizam o loop dentro da função "loop()".<br /><br /><a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg4bYtK-Tff7ccOtGveRX6JBVjy0KKrSIy91E9J_Ns8o6J32P4_YOdKpPiJ_enZFmmZqowHL255Hhe5cERBcR5YnvExUGzFUJXhelI0_UyoCpVFKCKQ42YNibAs946WdOChkFRHHtrVgmc/s1600-h/img_6897.jpg"><img title="Clique para ampliar" style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 200px; height: 150px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg4bYtK-Tff7ccOtGveRX6JBVjy0KKrSIy91E9J_Ns8o6J32P4_YOdKpPiJ_enZFmmZqowHL255Hhe5cERBcR5YnvExUGzFUJXhelI0_UyoCpVFKCKQ42YNibAs946WdOChkFRHHtrVgmc/s200/img_6897.jpg" alt="" id="BLOGGER_PHOTO_ID_5361133804201732066" border="0"></a>O programa ilustrado a seguir configura na linha 11 a porta digital 8 do Arduino como entrada digital. Na linha 15 deste programa o valor fornecido pela chave digital é lido através da chamada à função "digitalRead()". Se o valor retornado por esta função for igual a HIGH, os LEDs acendem/apagam na ordem da porta 2 até 7. Se o valor for LOW, os LEDs acendem/apagam na ordem da porta 7 até 2.<br /><pre name="code" class="Cpp">#define QTD_LEDS 6<br />#define portaChave 8<br /><br />int porta[QTD_LEDS] = {2,3,4,5,6,7};<br />int pausa = 500;<br /><br />void setup() {<br /> for(int i = 0;i < QTD_LEDS; i++) {<br /> pinMode(porta[i],OUTPUT);<br /> }<br /> pinMode(portaChave,INPUT);<br />}<br /><br />void loop() {<br /> if (digitalRead(portaChave) == HIGH) {<br /> for(int i = 0;i < QTD_LEDS; i++) {<br /> digitalWrite(porta[i], HIGH);<br /> delay(pausa);<br /> digitalWrite(porta[i], LOW);<br /> }<br /> } else {<br /> for(int i = QTD_LEDS - 1;i >= 0; i--) {<br /> digitalWrite(porta[i], HIGH);<br /> delay(pausa);<br /> digitalWrite(porta[i], LOW);<br /> }<br /> }<br />}<br /></pre><br /><a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj9pJd4lT4xNfauEht7A2thyphenhyphenLjTGuegYjatAwdszgH0_MtlmwjxfNM1OP3L_cPK7DD3u88IjwkCoeHbaLxfDnQTVK9l_ptkmHcUcwtSHPzgGWOn_IEZxG0Kcw5Ra9D_cBi4KvNCHYbNmc4/s1600-h/img_6896.jpg"><img title="Clique para ampliar" style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 200px; height: 150px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj9pJd4lT4xNfauEht7A2thyphenhyphenLjTGuegYjatAwdszgH0_MtlmwjxfNM1OP3L_cPK7DD3u88IjwkCoeHbaLxfDnQTVK9l_ptkmHcUcwtSHPzgGWOn_IEZxG0Kcw5Ra9D_cBi4KvNCHYbNmc4/s200/img_6896.jpg" alt="" id="BLOGGER_PHOTO_ID_5361134667703948866" border="0"></a>Na figura ao lado, a chave de duas posições e três pares de pinos é ligada ao aterramento (GND), à porta 8 (pino central) e à porta de 5v (fio laranja). Assim, quando mudamos a chave para uma posição, a porta 8 é ligada ao aterramento e estaremos enviando o bit 0 (LOW). Quando mudamos a chave para a outra posição, a porta 8 passa a ser ligada à tensão de 5v (bit igual a 1 ou HIGH).<br /><br />O video abaixo apresenta a execução do programa dentro do Arduino após compilar através da IDE na máquina desktop. Este video mostra os LEDs acendendo/apagando num sentido e após a mudança da posição da chave o sentido é invertido.<br /><br /><iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='320' height='266' src='https://www.blogger.com/video.g?token=AD6v5dxFEObodJFM-0yMYDEsfca6aWNdxmwZelufY_szfX3-9YeTUXqhXb0kSMVlot1XDbRTMpEkMGWPiIK7l6m78w' class='b-hbp-video b-uploaded' frameborder='0'></iframe><br /><br />O <a target="_blank" href="http://blog.spock.com.br/2009/08/hello-arduino-world-parte-3.html">próximo exemplo</a>, que será apresentando num novo post, ilustrará uma evolução do código acima para receber um sinal analógico vindo de um potenciômetro para controlar o tempo que cada LED permanece aceso.<div class="blogger-post-footer">Build network make open source software</div>Dr. Spockhttp://www.blogger.com/profile/11219711170872890747noreply@blogger.com2tag:blogger.com,1999:blog-5883420992247205758.post-78234453016167893702009-07-21T13:01:00.007-03:002009-07-21T13:37:04.425-03:00Novidades do JavaOne 2009A entrevista a seguir foi publicada originalmente no site da <a href="http://www.globalcode.com.br/site/noticias/painel.seam?chave=EntrevistaSpockJavaOne" target="_blank">Globalcode</a>.<br /><br />1. <span style="font-weight:bold;">Como foi o JavaOne 2009 ?</span><br /><br />Como diria o velho mister Spock: <span style="font-weight:bold;">Fascinating!</span>. Foi incrível participar deste mega evento lá nos USA. Pude ver os gurus do Java, aqueles que só conhecemos como autores de livros e de APIs do Java. Pude notar que são pessoas tão normais e mortais como nós, além de estarem numa faixa etária um pouco além da maioria dos nossos desenvolvedores. Todos estavam sempre dispostos a promover networking e responder as nossas questões sobre a tecnologia Java. Contudo, fantástico mesmo foi participar da entrevista com o Rod Johnson (o criador do Spring Framework). As considerações dele sobre o Java EE e o Spring foram legais. Breve veremos novamente as opiniões dele na Java Magazine.<br /><br />2. <span style="font-weight:bold;">Quais foram os assuntos mais falados no evento ?</span><br /><br />Não vi algum anúncio de novidade bombástica da tecnologia Java neste JavaOne. Contudo, a palavra chave foi "Cloud Computing" com muitas palestras suportando este tema, tanto no JavaOne quanto no CommunityOne (versão gratuita do JavaOne realizado no primeiro dia). Também notei que o JavaFX foi bastante reforçado pela Sun através de diversas palestras e demonstrações nas "general sessions". Os mesmos assuntos relacionados a Java EE 6 foram discutidos, como EJB 3.1, JSF 2.0, Servlets 3, JPA 2 e muitos comentários sobre modularização e OSGi. Mas, a palestra sobre Spring 3.0 lotou e bombou, resultando logo em seguida no comentário do Rod Johnson no seu <a href="http://bit.ly/BYY6P" target="_blank">twitter</a>: " (...) Pity so many people who wanted to attend couldn't get in". A novidade veio mesmo do conhecimento sobre o chamado <a href="http://bit.ly/2XlZXF" target="_blank">Spring Roo</a> que permite a geração de código para aplicações baseadas em Spring a partir de templates. Esta ferramenta poderá se tornar um grande concorrente ou parceiro do <a href="http://www.supercrud.com" target="_blank">SuperCRUD</a>, quem sabe?!<br /><br />3. <span style="font-weight:bold;">Sobre o que foi a apresentação de vocês ?</span><br /><br />O objetivo da nossa apresentação foi mostrar e consolidar os resultados dos nossos projetos de <a href="http://bit.ly/XCL6W" target="_blank">Trainamentoring</a> realizados no ano de 2008 e 2009 na Globalcode. Ou seja, apresentamos o resultado da nossa experiência na modelagem de arquiteturas de aplicações baseadas em Java com Java EE e frameworks. Com isso comentamos os requisitos não-funcionais normalmente importantes para um projeto e para empresas do nosso mercado. Tratamos de como as arquiteturas aplicadas por nós nos projetos puderam ajudar a endereçar estes requisitos. Cada arquitetura foi caracterizada com as suas vantagens, desvantagens e cenários recomendados para uso. Finalizamos esta apresentação com a demonstração do <a href="http://www.supercrud.com" target="_blank">SuperCRUD</a> como uma ferramenta "open source" que permite trabalhar com templates de código e todas as arquiteturas apresentadas para gerar uma aplicação CRUD numa velocidade quase superluminal.<br /><br />4. <span style="font-weight:bold;">Como vocês se prepararam para a apresentação ?</span><br /><br />Esta preparação foi um trabalho árduo. Tudo começou quando recebemos a notícia da aprovação do trabalho no evento. Comecei revisando o inglês com um professor particular e aula diária de 1 hora. Preparamos os slides e o professor ajudou a revisar e preparar a fala em inglês. Criamos várias versões dos slides, fizemos vários códigos e demos nas várias arquiteturas e no <a href="http://www.supercrud.com" target="_blank">SuperCRUD</a>. Além de tudo isso, enquanto estávamos nos USA e até mesmo durante o evento, fizemos vários ensaios (alguns desses ensaios foram no <a href="http://bit.ly/2XlZXF" target="_blank">Yerba Buena Garden</a>, junto ao Moscone Center). Não posso deixar de citar que vários colegas e amigos americanos nos ajudaram a fazer uma revisão técnica e do texto em inglês dos slides. Agradecimentos especiais para o Joe Coha, Reza Rahman, Ed Burns e Felipe Leme. Também participamos do chamado "speaker coaching" promovido pela organização do evento. Um profissional em apresentações em público foi disponibilizado para os palestrantes fazer uma prévia da apresentação e corrigir detalhes de pronúncia em inglês, vícios corporais e movimentação, slides, etc.<br /><br />5. <span style="font-weight:bold;">Como foi o coaching ?</span><br /><br />Para mim o "speaker coaching" foi muito bom. Saí de lá muito mais tranquilo para apresentar. O orientador deu várias dicas e nos falou que o inglês estava bom e o nosso comportamento em palco estava muito bom. Isso nos tranquilizou bastante. O curioso deste 'coaching' é que foi gravado pelo orientador e depois repassado num telão da sala onde nós pudemos nos observar e ouvir as orientações.<br /><br />6. <span style="font-weight:bold;">Qual feedback vocês tiveram depois da apresentação ?</span><br /><br />Os feedbacks foram muito positivos. Tivemos várias perguntas ao final. Muitos desenvolvedores interessados nos nossos resultados (consolidados num slide final e comparativo das arquiteturas), além do interesse especial pelo <a href="http://www.supercrud.com" target="_blank">SuperCRUD</a>. O retorno foi tão imediato que a nossa palestra e o <a href="http://www.supercrud.com" target="_blank">SuperCRUD</a> foram comentados em blogs. Isto resultou num crescimento imediato do número de inscritos na comunidade do <a href="http://www.supercrud.com" target="_blank">SuperCRUD</a>.<br /><br />7. <span style="font-weight:bold;">Qual foi a melhor coisa do JavaOne 2009 ?</span><br /><br />Na verdade duas coisas foram as melhores no JavaOne. A primeira foi a oportunidade de networking com vários desenvolvedores da tecnologia Java que atuam nos diversos cantos do mundo. A segunda foi a possibilidade de me atualizar com as informações mais recentes e com os profissionais responsáveis por criar e desenvolver as tecnologias Java. Mas, o melhor de tudo foi ter participado de uma feira de nerds e geeks chamada de "Maker Faire" que aconteceu em San Mateo/CA no final de semana antes do JavaOne. Infelizmente não tem nada a ver com o JavaOne nem com o Java. Então não considero exatamente uma resposta para essa pergunta. Mas eu não poderia deixar de citar e finalizar dizendo: <span style="font-weight:bold;">Fascinating!</span><div class="blogger-post-footer">Build network make open source software</div>Dr. Spockhttp://www.blogger.com/profile/11219711170872890747noreply@blogger.com0tag:blogger.com,1999:blog-5883420992247205758.post-25030480444437591932009-07-19T20:44:00.043-03:002009-07-30T12:13:18.198-03:00Hello Arduino World: Parte 1Para ilustrar o funcionamento básico do Arduino preparei uma sequência de exemplos com alguns códigos, fotos e videos. Neste post apenas tratarei do primeiro exemplo que implementa um programa bem simples e representa uma unidade de código que usa uma porta digital como saída do Arduino conectado a um LED (diodo emissor de luz). O programa que será instalado no Arduino apenas acenderá e apagará este LED ininterruptamente com uma pequena pausa.<br /><br /><a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiZMcvhDq7Xi5jC76A4PUXDWTTqADh2KGCFd0RmvqRt51vRYFzk04THp9VLpx5uIMbT7dVu6rS60UZrZm6dlj6gUl0AN2S7ixJfLv3eL4iuOhP6lVFhNDw0dkXnpjvG3cyS-VCA1ylUl-0/s1600-h/img_6864.jpg"><img title="Clique aqui para ampliar" style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 200px; height: 150px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiZMcvhDq7Xi5jC76A4PUXDWTTqADh2KGCFd0RmvqRt51vRYFzk04THp9VLpx5uIMbT7dVu6rS60UZrZm6dlj6gUl0AN2S7ixJfLv3eL4iuOhP6lVFhNDw0dkXnpjvG3cyS-VCA1ylUl-0/s200/img_6864.jpg" border="0" alt="Clique aqui para ampliar!" id="BLOGGER_PHOTO_ID_5360325750758226034" /></a>A foto ao lado ilustra os dois componentes usados neste primeiro exemplo. O LED vermelho está à esquerda e um resistor de 10k ohms está à direita. O LED tem polaridade, onde o fio metálico mais comprido é o positivo e o curto é o negativo. O resistor não tem polaridade.<br /><br /><a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhIk480dw44lel0XWO7XWgoJq1YGS5IoRJqx7RN4GOMrJrrkFPsWhAblhirLPeMSNXmaV3fRE2kd7mt6IFJetyvkvV5-tsZVUFa05rjIna9VwJR7uWLNi-yJwRNqrVsXp1uHKI5cbj7zGU/s1600-h/img_6867.jpg"><img title="Clique aqui para ampliar" style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 200px; height: 150px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhIk480dw44lel0XWO7XWgoJq1YGS5IoRJqx7RN4GOMrJrrkFPsWhAblhirLPeMSNXmaV3fRE2kd7mt6IFJetyvkvV5-tsZVUFa05rjIna9VwJR7uWLNi-yJwRNqrVsXp1uHKI5cbj7zGU/s200/img_6867.jpg" border="0" alt="Clique aqui para ampliar!" id="BLOGGER_PHOTO_ID_5360328226252938258" /></a>Com um barramento para montar circuitos eletrônicos (protoboard) uma das pontas do resistor está ligada ao fio metálico de polaridade negativa do LED. A polaridade positiva do LED será ligada à porta digital de numero 9 do Arduino. O outro fio metálico do resistor será ligado à porta de aterramento (GND - ground).<br /><br /><a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnMlIpWjgJgu_J_zMLH0JHGZxEkhEYVkWSVHCvF0p0PQGdl7eubReLgzSoi7CI5-ZyG3qWhh33-HJfJoeG8hgTYZx5co6wO2P_EU9lrr5BWIp03fbc25xrS0RSTQFC88xgY35B9LOn3uU/s1600-h/img_6872.jpg"><img title="Clique aqui para ampliar" style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 200px; height: 150px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnMlIpWjgJgu_J_zMLH0JHGZxEkhEYVkWSVHCvF0p0PQGdl7eubReLgzSoi7CI5-ZyG3qWhh33-HJfJoeG8hgTYZx5co6wO2P_EU9lrr5BWIp03fbc25xrS0RSTQFC88xgY35B9LOn3uU/s200/img_6872.jpg" border="0" alt="Clique aqui para ampliar!" id="BLOGGER_PHOTO_ID_5360347163081047426" /></a>A programação para o Arduino é realizada através da IDE implementada em Java chamada de Processing que pode ser baixada do site <a href="http://arduino.cc/en/Main/Software" target="_blank">arduino.cc</a>. Como ferramenta é implementada em Java, pressupõe-se ter um JRE devidamente instalado na máquina e com a variável PATH configurada para localizar este JRE. Contudo, os programas rodam dentro do microcontrolador do Arduino. Portanto, um compilador C externo a esta IDE é usado. Então, será necessário instalar o compilador avr-gcc antes de tentar escrever e compilar qualquer código para o Arduino através da IDE. Todos os passos necessários para <a href="http://www.arduino.cc/playground/Learning/Linux" target="_blank">configurar</a> este ambiente estão disponíveis no site do Arduino.<br /><br />A figura abaixo é um snapshot desta ferramenta com o código usado para controlar a porta 9 do Arduino para acender e apagar o LED.<br /><br /><a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgkf4FNbfe6UWWDZpvpWasyAqYr28HlfDph5nIxlrCH5MNCRdM47i_fCvaWiEtDJyOnpZjB_gC18RYrE7srb1H-1RgO6QD2wqApbulG3_aUJRhyGzVKDce_aCw6qHocfNpwbuCZzlELgBY/s1600-h/Exemplo01-IDE-codigo.png"><img title="Clique aqui para ampliar" style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 272px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgkf4FNbfe6UWWDZpvpWasyAqYr28HlfDph5nIxlrCH5MNCRdM47i_fCvaWiEtDJyOnpZjB_gC18RYrE7srb1H-1RgO6QD2wqApbulG3_aUJRhyGzVKDce_aCw6qHocfNpwbuCZzlELgBY/s320/Exemplo01-IDE-codigo.png" border="0" alt="Clique aqui para ampliar!" id="BLOGGER_PHOTO_ID_5360357069846421362" /></a><br />Um programa simples para rodar no Arduino deve ter as funções "setup()" e "loop()". A primeira função será executada apenas uma vez pelo Arduino no início da execução do programa. Esta função é usada para conter instruções para inicialização. Pode inicializar variáveis ou configurar as portas do Arduino. A segunda função será executada num loop infinito. Esta será a parte principal do programa.<br /><pre name="code" class="Cpp"><br />#define portaLED 9<br /><br />int pausa = 500;<br /><br />void setup() {<br /> pinMode(portaLED, OUTPUT);<br />}<br /><br />void loop() {<br /> digitalWrite(portaLED, HIGH);<br /> delay(pausa);<br /> digitalWrite(portaLED, LOW);<br /> delay(pausa);<br />}<br /></pre><br /><a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiz1gUvw-Zjaw7CksTW5-WPK-QVHapAhMu7DOPSPI3OvuMKNI5Igcfw_r_ymdZD6JxTZkduKUR2TXyPAI-Y60VBt-JkWMHzK-CSyK9xz30LZZv-FJy9Tm8tVSWPRoGsQvrBdLGDcSdyb5U/s1600-h/img_6869.jpg"><img title="Clique aqui para ampliar" style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 200px; height: 150px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiz1gUvw-Zjaw7CksTW5-WPK-QVHapAhMu7DOPSPI3OvuMKNI5Igcfw_r_ymdZD6JxTZkduKUR2TXyPAI-Y60VBt-JkWMHzK-CSyK9xz30LZZv-FJy9Tm8tVSWPRoGsQvrBdLGDcSdyb5U/s200/img_6869.jpg" border="0" alt="Clique aqui para ampliar!" id="BLOGGER_PHOTO_ID_5360387082656166562" /></a>O código da função "setup()" ilustrada acima chama a função "pinMode(...)" que configura a porta 9 como saída digital. Com esta configuração será possível ativar esta porta para mudar o estado de ligado para desligado ou vice-versa (do estado 1 para 0 ou HIGH para LOW). A função "loop()" usa as funções "digitalWrite()" e "delay()" para mudar o estado da porta 9 e realizar uma pequena pausa para que a mudança de estado seja percebida. Como o programa roda numa velocidade aproximada de 16KHz, sem a pausa não seria possível observar o LED conectado a esta porta acender e apagar. A linha 10 deste código muda o estado da porta 9 para HIGH. Ou seja, a porta 9 passa a ter a tensão de 5 volts que representa o bit igual a 1. Em seguinda, ocorre uma pausa de 500 milissegundos antes de mudar o estado da porta para LOW (equivalente a zero volts). Daí uma nova pausa antes de voltar a acender o LED quando o Arduino executa novamente a função "loop()".<br /><br />O video a seguir ilustra a execução do programa já compilado e instalado no Arduino através da IDE.<br /><br /><iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='320' height='266' src='https://www.blogger.com/video.g?token=AD6v5dze_n9AW8X5in33oYX35RcEc1GHF4q0dyYjtLuxLZoNEgtqjVm_NzMr-MdraHVA4EXV8bTZS3kA_Un2VILoTA' class='b-hbp-video b-uploaded' frameborder='0'></iframe><br />Na parte 2 (<a target="_blank" href="http://blog.spock.com.br/2009/07/hello-arduino-world-parte-2.html">num novo post</a>) será ilustrada uma evolução deste exemplo ao adicionar uma sequência de LEDs e um programa com loop para acender e apagar esta sequência.<div class="blogger-post-footer">Build network make open source software</div>Dr. Spockhttp://www.blogger.com/profile/11219711170872890747noreply@blogger.com2tag:blogger.com,1999:blog-5883420992247205758.post-88545140997555146782009-07-12T22:37:00.022-03:002009-07-23T11:12:32.873-03:00Arduino: Uma plataforma Open Source<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiwT0XBfMPoXjEFwIEswnGCKDLYKcAiy0q13YeyPvYnXCVMXqoKJ5Ff-bZNfZbFxpaC0aBNeI19WUwvFbdLEUFjGeWERUz5dyn-Sqz8GoBaHnZwQGhm_lw4dho1NbFplnl_Gr2o48yS2a0/s1600-h/ArduinoDuemilanove.jpg" target="_blank"><img title="Clique para ampliar" style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 200px; height: 144px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiwT0XBfMPoXjEFwIEswnGCKDLYKcAiy0q13YeyPvYnXCVMXqoKJ5Ff-bZNfZbFxpaC0aBNeI19WUwvFbdLEUFjGeWERUz5dyn-Sqz8GoBaHnZwQGhm_lw4dho1NbFplnl_Gr2o48yS2a0/s200/ArduinoDuemilanove.jpg" alt="" id="BLOGGER_PHOTO_ID_5357744681754456082" border="0" /></a>Quando participei do último <a href="http://www.thedevelopersconference.com.br/opentdc/2009/sp/index.seam" target="_blank">OpenTDC</a> promovido pela <a href="http://www.globalcode.com.br/" target="_blank">Globalcode</a> ouvi falar de um hardware open source chamado <a href="http://arduino.cc/" target="_blank">Arduino</a>. Até aquele momento nunca tinha ouvido falar da idéia de open source no mundo do hardware e sim somente no mundo do software. Minha santa ignorância! Mas, durante a minha visita aos Estados Unidos para participar do <a href="http://java.sun.com/javaone/" target="_blank">JavaOne</a> 2009 tive a oportunidade ímpar de participar de uma feira que aconteceu nos dias 30 e 31 de maio deste ano em San Mateo na California. A feira chamada de <a href="http://www.makerfaire.com/" target="_blank">Maker Faire</a> (um dos assuntos do próximo <a href="http://www.casualclass.com.br/" target="_blank">Casual Class</a> da Globalcode) foi um evento dedicado a mostrar os trabalhos de diversos pequenos inventores, fazedores, geeks, nerds e artesãos de todas as áreas. Nesta feira vi a presença maciça do Arduino através de diversos projetos, kits de eletrônica, robôs e outros equipamentos feitos pelos expositores que participaram do evento. Nesta feira fiquei mais curioso ainda pelo Arduino e sobre essa idéia de hardware open source. Por consequência, acabei trazendo para casa um kit para fazer pequenos projetos e experiências com o Arduino comprado na feira. E assim começou as minhas peripércias com este hardware simples e pequeno que tem fascinado tanto o mundo dos "makers".<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjamQLbr2lrdxlSMbjpFDS25Ndp_U08j-Clw7vjvtCn-fkGo-M1Peee_1Qf0kArpb2vQXs-oeudkMH7I-uQ14bIB5xV_uvo5GDeYNwwu0Bgv9HJMlhrZrGWG1-I8cXhKGekR3oWiHEvMSs/s1600-h/img_6861.jpg" target="_blank"><img title="Clique para ampliar" style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 200px; height: 150px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjamQLbr2lrdxlSMbjpFDS25Ndp_U08j-Clw7vjvtCn-fkGo-M1Peee_1Qf0kArpb2vQXs-oeudkMH7I-uQ14bIB5xV_uvo5GDeYNwwu0Bgv9HJMlhrZrGWG1-I8cXhKGekR3oWiHEvMSs/s200/img_6861.jpg" alt="" id="BLOGGER_PHOTO_ID_5357753758968507234" border="0" /></a>Estão, o que é <span style="font-weight: bold;">Arduino</span>? O Arduino é uma plataforma de <a href="http://en.wikipedia.org/wiki/Open_source_hardware" target="_blank">hardware open source</a> baseado em um microcontrolador com suporte a conexão via serial ou USB com o computador para receber programas. A palavra "plataforma" significa um hardware genérico o suficiente para permitir a criatividade dos desenvolvedores elaborar aplicações com interatividade com o mundo real (também chamado de "<a href="http://en.wikipedia.org/wiki/Physical_computing" target="_blank">physical computing</a>") através de alguns componentes eletrônicos como complemento.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg1A_Ouglg8t5IB2jq7xcWEvPQKIXkQuZmPwjEBuAhu93pJRTykED2GHcD8cJ_cuK39NvigOIMXQsRWawcpX0mXNCZIrAF5oacA0dlr2NjOPq4RfBIcsbWN9OV2qnZ4ak9_pCnkPG8YdWU/s1600-h/img_6855.jpg" target="_blank"><img title="Clique para ampliar" style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 200px; height: 150px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg1A_Ouglg8t5IB2jq7xcWEvPQKIXkQuZmPwjEBuAhu93pJRTykED2GHcD8cJ_cuK39NvigOIMXQsRWawcpX0mXNCZIrAF5oacA0dlr2NjOPq4RfBIcsbWN9OV2qnZ4ak9_pCnkPG8YdWU/s200/img_6855.jpg" alt="" id="BLOGGER_PHOTO_ID_5357754603607440578" border="0" /></a>A maior curiosidade sobre o Arduino não está na sua simplicidade, mas sim numa grande comunidade que se formou em torno desta idéia. Por ser um hardware aberto, aonde podemos baixar a lista de componentes, o diagrama esquemático e o desenho da placa de circuito e muita documentação para aqueles que desejam montar o seu próprio Arduino, esta tecnologia proporciona a democratrização do conhecimento para qualquer um usar ou contribuir. Com isso, podemos encontrar diversos projetos na rede contruídos com base no Arduino. Também podemos encontrar livros e revistas especializadas tratando do assunto, além de vários sites sobre o assunto. Alguns exemplos:<br /><ul><li><a href="http://oreilly.com/catalog/9780596155513/" target="_blank">Getting Started with Arduino</a></li><li><a href="http://oreilly.com/catalog/9780596510510/" target="_blank">Making Things Talk</a></li><li><a href="http://makezine.com/" target="_blank">Makezine</a></li><li><a href="http://hacknmod.com/hack/top-40-arduino-projects-of-the-web/" target="_blank">Top 40 Arduino Projects</a><br /></li></ul><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj2mUl1QoNYeJOoP_kmrTauDxty1N2uxAT3Fb5X4AtcKTkE6haBhku3l3Y4WSMj4Ytbg5Nw_gagiusnzx3pqfOnpUm4GIqn_SCZBBUc_rP_xnvdXczM4CNuw4nIPGODRiXFf3q7KIIsN2g/s1600-h/arduino316.jpg" target="_blank"><img title="Clique para ampliar" style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 200px; height: 139px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj2mUl1QoNYeJOoP_kmrTauDxty1N2uxAT3Fb5X4AtcKTkE6haBhku3l3Y4WSMj4Ytbg5Nw_gagiusnzx3pqfOnpUm4GIqn_SCZBBUc_rP_xnvdXczM4CNuw4nIPGODRiXFf3q7KIIsN2g/s200/arduino316.jpg" alt="" id="BLOGGER_PHOTO_ID_5357745417232669666" border="0" /></a>Na verdade o Arduino é bem simples. Na sua última versão, possui vários componentes simples como resistores, capacitores, diodos e um regulador de tensão. Mas a parte vital está num microcontrolador da <a href="http://www.atmel.com/" target="_blank">ATmel</a> que disponibiliza algumas portas digitais para entrada ou saída de bits e algumas portas analógicas para entrada de um sinal analógico e a respectiva conversão para um valor binário (int) no programa. O hardware do Arduino é tão simples que pode ser construído em casa após adquitir todos os componentes ou ser adquirido já ponto. A comunicação com o computador para receber os programas é realizado por porta serial ou USB do computador (depende da versão usada do Arduino). Através destas portas é possível conectar LEDs, potenciômetros, motores, sensores de luminosidade, relés ou qualquer outro dispositivo eletrônico que permita receber um bit para ativar algum equipamento externo ou simplesmente receber um sinal de um dispositivo e mandar para o programa. Com o Arduino não é difícil construir um hardware que controla alguns motores de um pequeno robô e receba os sinais de alguns sensores como um sensor ultrasônico. O sensor pode indicar a distância do robô de algum obstáculo para que o código em execução possa provocar uma reversão dos motores para evitar que o robô atinja ao alvo.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjH82M5mVlOOaFct9ZZpg1UHmDFHnubH468ebV5Toro9fGuDfQ9In7u6GCT3qZK032ueJUXUIK06SDX1JBkrKp7bk3qdgThc94Hos34W2ov9B7loHS7_8eyWHKJ_BGInwiBUj36Rx7yBPk/s1600-h/img_6857.jpg" target="_blank"><img title="Clique para ampliar" style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 150px; height: 200px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjH82M5mVlOOaFct9ZZpg1UHmDFHnubH468ebV5Toro9fGuDfQ9In7u6GCT3qZK032ueJUXUIK06SDX1JBkrKp7bk3qdgThc94Hos34W2ov9B7loHS7_8eyWHKJ_BGInwiBUj36Rx7yBPk/s200/img_6857.jpg" alt="" id="BLOGGER_PHOTO_ID_5357755846297405890" border="0" /></a>No site oficial do <a href="http://arduino.cc/" target="_blank">Arduino</a> podemos encontra toda <a href="http://arduino.cc/en/Guide/HomePage" target="_blank">documentação</a>, como programar, <a href="http://arduino.cc/en/Tutorial/HomePage" target="_blank">exemplos</a> de código, como usa através de Windows, <a href="http://www.arduino.cc/playground/Learning/Linux" target="_blank">Linux</a> ou Mac, além da descrição completa das várias versões do <a href="http://arduino.cc/en/Main/Hardware" target="_blank">hardware</a>. Neste site podemos fazer o <a href="http://arduino.cc/en/Main/Software" target="_blank">download</a> da ferramenta de desenvolvimento (IDE) para criar programas baseado na linguage "C" para instalar e rodar dentro do Arduino. Esta IDE chama-se "Processing" e está implementada em Java. Mas, como o programa, escrito em "C" e depois compilado, roda dentro do microcontrolador do Arduino, esta IDE apenas usa um compilador externo preparado para gerar códigos binários para os microcontroladores da ATmel. Também permite fazer o upload do programa compilado no computador para a memória do Arduino através da porta serial ou USB. Após o upload, o Arduino começa executar imediatamente.<br /><br />A imagem a seguir ilustra um programa de exemplo que acompanha a IDE de desenvolvimento para o Arduino.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiegyipv7WoYwSS7k0deBSzOiKeYPKxXP9GQyg7YdxocBiXyClJ_D4nigsLnU6aJbsFY8XsNHEbKshhYFYLYkyORj0rS-GqgATbHIcsZ7cAKjeAXa3OZ4kYQeuH1eebXs5u-rxNVs_1CDM/s1600-h/Screenshot-Arduino+-+0016.png" target="_blank"><img title="Clique para ampliar" style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 225px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiegyipv7WoYwSS7k0deBSzOiKeYPKxXP9GQyg7YdxocBiXyClJ_D4nigsLnU6aJbsFY8XsNHEbKshhYFYLYkyORj0rS-GqgATbHIcsZ7cAKjeAXa3OZ4kYQeuH1eebXs5u-rxNVs_1CDM/s400/Screenshot-Arduino+-+0016.png" alt="Exemplo de cógigo para o Arduino" id="BLOGGER_PHOTO_ID_5357741848268825906" border="0" /></a><br />Este programa configura a porta de número 13 do Arduino como saída digital através da função "setup()". Depois, num loop infinito, o Arduino executa as instruções que estão dentro da função "loop()". Estas instruções mudam o estado da porta 13 para HIGH (bit ligado que corresponde a 5 volts nesta porta) e após uma pausa mudam o estado para LOW (bit desligado que corresponde a 0 volt nesta porta). Assim, se ligarmos um dispositivo a esta porta, ele será ligado e desligado. Por exemplo, um LED pode ser usado para visualizarmos o estado desta porta. Ou até poderíamos ter um pequeno motor ligado a esta porta com um circuito apropriado de potência.<br /><br />Um passo-a-passo para fazer um exemplo bem simples com o Arduino e evoluí-lo gradativamente é apresentado na sequência de posts "Hello Arduino World":<br /><ul><li><a target="_blank" href="http://blog.spock.com.br/2009/07/hello-arduino-world-parte-1.html">Hello Arduino World: Parte 1</a></li><li><a target="_blank" href="http://blog.spock.com.br/2009/07/hello-arduino-world-parte-2.html">Hello Arduino World: Parte 2</a></li></ul>Then, enjoy them ...<div class="blogger-post-footer">Build network make open source software</div>Dr. Spockhttp://www.blogger.com/profile/11219711170872890747noreply@blogger.com2tag:blogger.com,1999:blog-5883420992247205758.post-52607399989236158602009-07-11T23:28:00.025-03:002009-07-12T01:34:36.452-03:00Ubuntu Netbook Remix e Acer Aspire One<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgO6f2dm8VKmpH5mSA-QLWRKLJolkabH-n2EGxwT6jdv2Xlzc1l_vS4Ffj6iPT-ZqAy1NtqpAmhBkS_sv_uDSGmhI0J_auNTiVbDZzBdwA81PxUFmcjUXFyNavpA-kH9gb0I6nvsWNBy8Q/s1600-h/acer-aspire-one-00.jpg"><img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 200px; height: 172px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgO6f2dm8VKmpH5mSA-QLWRKLJolkabH-n2EGxwT6jdv2Xlzc1l_vS4Ffj6iPT-ZqAy1NtqpAmhBkS_sv_uDSGmhI0J_auNTiVbDZzBdwA81PxUFmcjUXFyNavpA-kH9gb0I6nvsWNBy8Q/s200/acer-aspire-one-00.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5357412415491516514" /></a>Recentemente adquiri um netbook da <a href="http://en.wikipedia.org/wiki/Acer_Aspire_One" target="_blank">Acer Aspire One</a> (ZG5 - AOA150-1706) com o Windows XP Home previamente instalado. Uma excelente máquina, portátil e com boa performance. Contudo, fiquei extremamente decepcionado com o sistema operacional instalado. Não, porque era um Windows, e sim pelas limitações impostas pela Microsoft para esta distribuição do Windows. Eu estava disposto a manter este sistema operacional porque gostaria de ter uma cópia legalizada, além de poder rodar alguns programas que não tenho disponível para Linux. Mas, fui tentar instalar alguns softwares da própria Microsoft para conectividade com Unix e este sistema rejeitou a instalação. Também experimentei problemas ao copiar arquivos maiores que 2GB para um pendrive de 16GB. Esta foi a gota d'água para jogar na lixeira o Windows e instalar um Linux.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiQSrl8Rte-UjWL2ftHYqQGUp_WMf-CY7jGl0Vh5UTqpiKCkgbo3ZpCvIHfndN6rosPk8XcltKgErNB0MSMxSrGvZsGSfddFlbpmh2eEf7llj55LBzW0KJo-YPGuSQuDKw1Z0eXwH7tYlE/s1600-h/Screenshot-2.png"><img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 200px; height: 117px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiQSrl8Rte-UjWL2ftHYqQGUp_WMf-CY7jGl0Vh5UTqpiKCkgbo3ZpCvIHfndN6rosPk8XcltKgErNB0MSMxSrGvZsGSfddFlbpmh2eEf7llj55LBzW0KJo-YPGuSQuDKw1Z0eXwH7tYlE/s200/Screenshot-2.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5357414825200480386" /></a>Então, conheci o <a href="http://www.canonical.com/projects/ubuntu/unr" target="_blank">Ubuntu Netbook Remix</a> (UNR). Esta distribuição é uma versão do já conhecido <a href="http://www.ubuntu.com/" target="_blank">Ubuntu</a>, mas otimizado e testado para alguns netbooks disponíveis no mercado. Daí, não tive remorso. Fiz um backup da instalação original da máquina e instalei o UNR.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgOETFhPlkKBFLoIH4rPU5VIVtL5DGHKsYHVScITIUP_ITugaAkvLjc4oqbXtTymWreLfi8Io1CanNH2NUe7CWXVhNW_XRVhTK_Zkfbx2gbKFmLXx4iK2oj8jiWbYiJYYTw-2XfXKGGqNQ/s1600-h/acer_aspire_one.jpg"><img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 200px; height: 152px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgOETFhPlkKBFLoIH4rPU5VIVtL5DGHKsYHVScITIUP_ITugaAkvLjc4oqbXtTymWreLfi8Io1CanNH2NUe7CWXVhNW_XRVhTK_Zkfbx2gbKFmLXx4iK2oj8jiWbYiJYYTw-2XfXKGGqNQ/s200/acer_aspire_one.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5357419116877124802" /></a>Após a instalação do UNR no netbook, notei que todos os dispositivos funcionaram perfeitamente sem nenhuma configuração extra. Itens como webcam integrada, microfone embutido, mouse touchpad, wifi, áudio e xorg funcionaram perfeitamente. Foi fantástico ver que após uma instalação simples e rápida já estava disponível o Firefox, Pidgin, OpenOffice 3 e outros softwares para edição de imagens, tocar áudio e video. Sem muito esforço instalei o JDK da Sun através do Synaptic Package Manager e depois o Eclipse e NetBeans.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjj6EwuM6MRPSjwaZl8N8h0J5oaJxcJ87IsoPFds9KUeeVAAHyeJbfLfmcggm0zkLv9VftN1hcYkZb-d9WwAKhz8Qf_FhIPOhEwqdetB8UxE83DJ8HJ3pHAEMu9KNz8pPo5yZbT1FeDMmo/s1600-h/Screenshot-4.png"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 187px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjj6EwuM6MRPSjwaZl8N8h0J5oaJxcJ87IsoPFds9KUeeVAAHyeJbfLfmcggm0zkLv9VftN1hcYkZb-d9WwAKhz8Qf_FhIPOhEwqdetB8UxE83DJ8HJ3pHAEMu9KNz8pPo5yZbT1FeDMmo/s320/Screenshot-4.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5357404391376894178" /></a>Apesar de ser uma máquina de pouco poder de processamento, o Acer Aspire One com processador Intel Atom N270 de 1.6GHz, 1GB de RAM, 160GB de HD e tela de 8.9" (resolução máxima de 1024x600), os softwares responderam com uma excelente performance. Inclusive as IDEs de desenvolvimento em Java.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh9Vytkl2fMwZHCW9yViiSSgLCzVedii96ymG2L0euZps52qaS2BLovzf0LjZws8BX37nmsfjDB7GFgQzNVEFW4UvmLJRGyk2Ey7sJoxv_cRXXmkxViaJZBPg4ckX5NUSIrA1ZhDV-KvV0/s1600-h/Screenshot-3.png"><img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 200px; height: 117px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh9Vytkl2fMwZHCW9yViiSSgLCzVedii96ymG2L0euZps52qaS2BLovzf0LjZws8BX37nmsfjDB7GFgQzNVEFW4UvmLJRGyk2Ey7sJoxv_cRXXmkxViaJZBPg4ckX5NUSIrA1ZhDV-KvV0/s200/Screenshot-3.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5357415648491042594" /></a>Mesmo com toda a elegância da interface do UNR para o desktop no netbook, as vezes o tamanho da tela e as aplicações sempre iniciando maximizado incomodam um pouco. Também notei que o auto-falante embutido no netbook é horrível. Contudo, todos os codec instalados para mp3, DVD, mp4 e divX funcionaram muito bem. Até ficou parecendo com um daqueles DVD players portáteis que tem uma pequena tela embutida para ver filmes.<br /><br /><object width="340" height="285" style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer;"><param name="movie" value="http://www.youtube.com/v/P1QCiUKY9JQ&hl=en&fs=1&rel=0&border=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/P1QCiUKY9JQ&hl=en&fs=1&rel=0&border=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="340" height="285"></embed></object><br />A distribuição Ubuntu como sempre está evoluindo e se tornando cada vez mais fácil de instalar e usar. As vezes me pergunto porque as pessoas ainda insistem em usar um Windows limitado ou pirata quando já temos uma excelente solução disponível para todos.<div class="blogger-post-footer">Build network make open source software</div>Dr. Spockhttp://www.blogger.com/profile/11219711170872890747noreply@blogger.com2tag:blogger.com,1999:blog-5883420992247205758.post-62474892891962549712009-07-11T20:27:00.006-03:002009-07-11T21:18:39.878-03:00JavaOne 2009 - Slides disponíveis na redeParticipei do último JavaOne realizado em San Franciso (USA). Pude contribuir para este evento como palestrante junto com o Vinicius Senger (co-fundador e CEO da Globalcode). Após este evento e o <a href="http://www.casualclass.com.br/edicoes/javaone2009/index.seam" target="_blank">Casual Class</a> realizado pela Globalcode, coloquei os slides na rede para a comunidade através do slideshare.<br /><br /><div style="width:425px;text-align:left" id="__ss_1662529"><a style="font:14px Helvetica,Arial,Sans-serif;display:block;margin:12px 0 3px 0;text-decoration:underline;" href="http://www.slideshare.net/drspockbr/enterprise-web-20-from-pristine-java-ee-to-fullyloaded-frameworks-1662529" title="Enterprise Web 2.0: from pristine Java EE to fully-loaded frameworks">Enterprise Web 2.0: from pristine Java EE to fully-loaded frameworks</a><object style="margin:0px" width="425" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=javaone-fim-090630104813-phpapp01&stripped_title=enterprise-web-20-from-pristine-java-ee-to-fullyloaded-frameworks-1662529" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=javaone-fim-090630104813-phpapp01&stripped_title=enterprise-web-20-from-pristine-java-ee-to-fullyloaded-frameworks-1662529" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object><div style="font-size:11px;font-family:tahoma,arial;height:26px;padding-top:2px;">View more <a style="text-decoration:underline;" href="http://www.slideshare.net/">documents</a> from <a style="text-decoration:underline;" href="http://www.slideshare.net/drspockbr">Alberto Lemos</a>.</div></div><br />Detalhes da apresentação podem ser encontrados <a href="http://www28.cplan.com/cc230/session_details.jsp?isid=303952&ilocation_id=230-1&ilanguage=english" target="_blank">aqui</a>.<br /><br />Coloquei também algumas fotos tiradas durante o evento no álbum do picasaweb.<br /><br /><table style="width:194px;"><tr><td align="center" style="height:194px;background:url(http://picasaweb.google.com/s/c/transparent_album_background.gif) no-repeat left"><a href="http://picasaweb.google.com/blogdospock/JavaOne2009?authkey=Gv1sRgCNTG9qqt-ZfGmwE&feat=embedwebsite" target="_blank"><img src="http://lh6.ggpht.com/_Y-danigLb-k/SidORxGEyJE/AAAAAAAABtc/bZS5DWbeP_Q/s160-c/JavaOne2009.jpg" width="160" height="160" style="margin:1px 0 0 4px;"></a></td></tr><tr><td style="text-align:center;font-family:arial,sans-serif;font-size:11px"><a href="http://picasaweb.google.com/blogdospock/JavaOne2009?authkey=Gv1sRgCNTG9qqt-ZfGmwE&feat=embedwebsite" style="color:#4D4D4D;font-weight:bold;text-decoration:none;">JavaOne2009</a></td></tr></table><div class="blogger-post-footer">Build network make open source software</div>Dr. Spockhttp://www.blogger.com/profile/11219711170872890747noreply@blogger.com0