<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-33115344</id><updated>2011-04-21T23:17:38.035-03:00</updated><category term='Hi tech e marketing'/><category term='Linguagens funcionais'/><category term='História'/><category term='Geral'/><category term='Web Services'/><category term='Eclipse'/><category term='Links'/><category term='Abobrinhas'/><category term='Configuração'/><category term='JMS'/><category term='Programação concorrente'/><category term='Exceptions'/><category term='Google'/><category term='JavaFX'/><title type='text'>Windshifts - Luca Bastos</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://lucabastos.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/33115344/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://lucabastos.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Luca Bastos</name><uri>http://www.blogger.com/profile/08105913026457778167</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>18</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-33115344.post-7896622643305536418</id><published>2007-09-12T22:15:00.000-03:00</published><updated>2007-09-12T22:32:18.407-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Links'/><title type='text'>25 links recolhidos dentre meus favoritos</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_6-xLHhv2Rak/RuiR24obLHI/AAAAAAAAACk/i4vz43OwmgA/s1600-h/cabo.GIF"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://bp0.blogger.com/_6-xLHhv2Rak/RuiR24obLHI/AAAAAAAAACk/i4vz43OwmgA/s200/cabo.GIF" alt="" id="BLOGGER_PHOTO_ID_5109494149352729714" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span class="postbody"  style="font-family:arial;"&gt;Para não pensarem que abandonei o blog só porque ando ocupado tratando de um antigo legado em Fortran e envolvido com sistemas não lineares, engenharia, matemática, computação gráfica e outras xaropadas, resolvi colocar aqui uma lista rápida de 25 links. Não inclui todos os melhores que conheço porque evitei colocar blogs que são as minhas melhores fontes. O poucos blogs que aparecem são o do Almaer, que costuma publicar bons links, e o da Caelum, que tem vários ótimos autores.&lt;br /&gt;&lt;br /&gt;&lt;a class="snap_shots" href="http://www.almaer.com/blog/" target="_blank" rel="nofollow"&gt;http://www.almaer.com/blog/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a class="snap_shots" href="http://www.apl.jhu.edu/%7Ehall/java/" target="_blank" rel="nofollow"&gt;http://www.apl.jhu.edu/~hall/java/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a class="snap_shots" href="http://www.artima.com/index.jsp" target="_blank" rel="nofollow"&gt;http://www.artima.com/index.jsp&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a class="snap_shots" href="http://blog.caelum.com.br/" target="_blank" rel="nofollow"&gt;http://blog.caelum.com.br/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a class="snap_shots" href="http://www.cafeaulait.org/" target="_blank" rel="nofollow"&gt;http://www.cafeaulait.org/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a class="snap_shots" href="http://www.ddj.com/" target="_blank" rel="nofollow"&gt;http://www.ddj.com/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a class="snap_shots" href="http://dev2dev.bea.com/" target="_blank" rel="nofollow"&gt;http://dev2dev.bea.com/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a class="snap_shots" href="http://www.developer.com/" target="_blank" rel="nofollow"&gt;http://www.developer.com/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a class="snap_shots" href="http://www.ibm.com/developerworks/" target="_blank" rel="nofollow"&gt;http://www.ibm.com/developerworks/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a class="snap_shots" href="http://www.infoq.com/" target="_blank" rel="nofollow"&gt;http://www.infoq.com/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a class="snap_shots" href="http://www.java-channel.org/" target="_blank" rel="nofollow"&gt;http://www.java-channel.org/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a class="snap_shots" href="http://www.javalobby.org/" target="_blank" rel="nofollow"&gt;http://www.javalobby.org/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a class="snap_shots" href="http://java.net/" target="_blank" rel="nofollow"&gt;http://java.net/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a class="snap_shots" href="http://www.java.net/pub/ct/javaonecommunitycorner" target="_blank" rel="nofollow"&gt;http://www.java.net/pub/ct/javaonecommunitycorner&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a class="snap_shots" href="http://www.javaperformancetuning.com/" target="_blank" rel="nofollow"&gt;http://www.javaperformancetuning.com/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a class="snap_shots" href="http://javaposse.com/" target="_blank" rel="nofollow"&gt;http://javaposse.com/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a class="snap_shots" href="http://www.javaranch.com/" target="_blank" rel="nofollow"&gt;http://www.javaranch.com/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a class="snap_shots" href="http://java.sys-con.com/" target="_blank" rel="nofollow"&gt;http://java.sys-con.com/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a class="snap_shots" href="http://www.javaworld.com/" target="_blank" rel="nofollow"&gt;http://www.javaworld.com/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a class="snap_shots" href="http://www.jot.fm/issues/issue_2007_09/" target="_blank" rel="nofollow"&gt;http://www.jot.fm/issues/issue_2007_09/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a class="snap_shots" href="http://www.nist.gov/dads/" target="_blank" rel="nofollow"&gt;http://www.nist.gov/dads/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a class="snap_shots" href="http://www.onjava.com/" target="_blank" rel="nofollow"&gt;http://www.onjava.com/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a class="snap_shots" href="http://www.parleys.com/display/PARLEYS/Home" target="_blank" rel="nofollow"&gt;http://www.parleys.com/display/PARLEYS/Home&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a class="snap_shots" href="http://www.softbear.com/people/larry/javalm.htm" target="_blank" rel="nofollow"&gt;http://www.softbear.com/people/larry/javalm.htm&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a class="snap_shots" href="http://www.theserverside.com/" target="_blank" rel="nofollow"&gt;http://www.theserverside.com/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Quase tudo em inglês porque quem não consegue ler inglês técnico com fluência é melhor abandonar a área de TI. &lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/33115344-7896622643305536418?l=lucabastos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lucabastos.blogspot.com/feeds/7896622643305536418/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=33115344&amp;postID=7896622643305536418' title='11 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/33115344/posts/default/7896622643305536418'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/33115344/posts/default/7896622643305536418'/><link rel='alternate' type='text/html' href='http://lucabastos.blogspot.com/2007/09/25-links-recolhidos-dentre-meus.html' title='25 links recolhidos dentre meus favoritos'/><author><name>Luca Bastos</name><uri>http://www.blogger.com/profile/08105913026457778167</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp0.blogger.com/_6-xLHhv2Rak/RuiR24obLHI/AAAAAAAAACk/i4vz43OwmgA/s72-c/cabo.GIF' height='72' width='72'/><thr:total>11</thr:total></entry><entry><id>tag:blogger.com,1999:blog-33115344.post-2347803479131564716</id><published>2007-06-29T23:20:00.000-03:00</published><updated>2007-06-30T01:38:17.619-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><title type='text'>O Eclipse do jeito que a gente precisa</title><content type='html'>&lt;span style="font-size:100%;"&gt;&lt;a style="font-family: arial;" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_6-xLHhv2Rak/RoW-qN7gYXI/AAAAAAAAACc/3GFo7le_12k/s1600-h/Eclipse.JPG"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://bp3.blogger.com/_6-xLHhv2Rak/RoW-qN7gYXI/AAAAAAAAACc/3GFo7le_12k/s200/Eclipse.JPG" alt="" id="BLOGGER_PHOTO_ID_5081677387060502898" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:arial;font-size:100%;"&gt;Antigamente eu achava que o bom do Eclipse era ser do jeito que a gente precisava. Com uma arquitetura de plug-ins muito bem bolada, a gente baixava o núcleo central e ia adicionando os plug-ins. Mas infelizmente a vida mansa durou pouco.&lt;br /&gt;&lt;br /&gt;Por ser relativamente fácil escrever um plug-in, surgiram um monte deles que a gente baixava e ia instalando por cima dos outros. Só que, às vezes, isto dava conflito. E acontecia mesmo depois que o Eclipse passou a se basear em OSGI, que parece ser uma das melhores promessas de coisas deste gênero disponíveis por aí.&lt;br /&gt;&lt;br /&gt;Então surgiu algum "gênio" e pensou: vamos empacotar tudo de uma vez só. Foi então criado o monstro Calisto, enorme engolidor de recursos do meu pobre PC. Diga-se de passagem, que o tal gênio deve ter mudado de emprego porque a mesma idéia "genial" de IDE gulosa, foi copiada pela turma do Netbeans, que na minha máquina exige paciência de Jó durante a carga.&lt;br /&gt;&lt;br /&gt;Hoje foi lançado o &lt;a href="http://www.eclipse.org/europa/"&gt;Europa&lt;/a&gt;. Percebi que retrocederam alguns passos e agora criaram 3 sabores diferentes de pacotes. A opção customizada é semelhante a primeira com a recomendação de usar o update. No fim escreverei sobre ela.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div style="font-family: arial;" align="center"&gt;&lt;span style="font-size:100%;"&gt;&lt;img src="http://www.eclipse.org/europa/images/developerBar4.jpg" usemap="#developerBarMap" /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div style="text-align: left;"&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;span style="font-family:arial;font-size:100%;"&gt;Para verificar se ficou bom mesmo, parti para instalar as versões de desenvolvedor que na verdade se divide em duas outras:&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;a style="font-family: arial;" href="http://www.eclipse.org/downloads/download.php?file=/technology/epp/downloads/release/20070628/eclipse-java-europa-win32.zip"&gt;Eclipse IDE for Java Developers&lt;/a&gt;&lt;/span&gt;&lt;span style="font-family:arial;font-size:100%;"&gt; e &lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;a style="font-family: arial;" href="http://www.eclipse.org/downloads/download.php?file=/technology/epp/downloads/release/20070628/eclipse-jee-europa-win32.zip"&gt;Eclipse IDE for Java EE Developers&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:arial;font-size:100%;"&gt;A primeira delas é mais enxuta e o download é de somente (?) 80 Mb. Vem tudo que eu preciso quando quero examinar um código de um  projeto Open Source que é coisa que faço de vez em quando.&lt;br /&gt;&lt;br /&gt;Para verificar a possibilidade de adições, resolvi instalar o Test and Performance Tools (&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;a style="font-family: arial;" href="http://www.eclipse.org/tptp"&gt;TPTP&lt;/a&gt;&lt;/span&gt;&lt;span style="font-family:arial;font-size:100%;"&gt;). Podia seguir o caminh&lt;span style="font-family: arial;"&gt;o mais fácil que é baixa&lt;span style="font-family: arial;"&gt;r &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: arial;font-family:arial;font-size:100%;"  &gt;&lt;a style="font-family: arial;" href="http://www.eclipse.org/downloads/download.php?file=/tptp/4.4.0/TPTP-4.4.0/tptp.runtime.allInOne.win32.win32.x86-TPTP-4.4.0.zip"&gt;TPTP all-in-one package&lt;/a&gt;&lt;span style="font-family: arial;"&gt;.  Só que este bicho tem quase 200 Mb e vem com um monte de coisas com mais sentido para o Eclipse para JEE.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;Assim baixei o tal&lt;/span&gt; &lt;/span&gt;&lt;span style="font-family:arial;font-size:100%;"&gt;&lt;span style="font-family: arial;"&gt;Eclipse Modeling Framewor&lt;/span&gt;k (EMF and XSD) &lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;a style="font-family: arial;" href="http://www.eclipse.org/downloads/download.php?file=/modeling/emf/emf/downloads/drops/2.3.0/R200706262000/emf-sdo-xsd-SDK-2.3.0.zip"&gt;2.3.0,&lt;/a&gt;&lt;/span&gt;&lt;span style="font-family:arial;font-size:100%;"&gt; que é pré-requisito para o TPTP, e depois baixei o All TPTP plugins &lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;a style="font-family: arial;" href="http://www.eclipse.org/downloads/download.php?file=/tptp/4.4.0/TPTP-4.4.0/tptp.runtime-TPTP-4.4.0.zip"&gt;Runtime&lt;/a&gt;&lt;/span&gt;&lt;span style="font-family:arial;font-size:100%;"&gt;.&lt;br /&gt;&lt;br /&gt;Aí foi só instalar primeiro o EMF, depois o TPTP e tudo ficou como eu queria. Melhor dizendo, quase do jeito que eu queria porque o tal zip que eu baixei, veio com GEF e integração do TPTP com o BIRT e com o WTP. Depois de instalado este Eclipse 3.3 ocupa 217 Mb no meu HD.&lt;br /&gt;&lt;br /&gt;Não gostei da granulometria dos pacotes do Eclipse. Ainda é como se a gente fosse comprar um carro para trabalhar e nos empurrassem um tração 4x4, mais dispendioso e com "vantagens" que não vamos usar no asfalto.&lt;br /&gt;&lt;br /&gt;Partindo do pressuposto que nós somos desenvolvedores, isto é, gente que entende um mínimo de informática, então deveria ser possível montar nosso Eclipse de forma fácil.&lt;br /&gt;&lt;br /&gt;Então fui ver como funciona a tal versão customizada. &lt;/span&gt;&lt;span style="font-family:arial;font-size:100%;"&gt;Ela acaba sendo customizada mesmo. Fiz assim: download do eclipse básico que nem vou entrar em detalhes. Aí entrei no update manager para instalar o TPTP e apareceu toda a plataforma do Europa para que escolher o que quero. Selecionei o TPTP e PUFT!&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:arial;font-size:100%;"&gt;Pipocaram várias dependências. Como me acho do ramo, fui catando os nomes compridões e buscando um a um onde se localizavam na árvore de update. Ufa, deu trabalho mas selecionei todas as dependências e alguns muitos minutos depois, fiquei com um eclipse só com o que eu queria. &lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:arial;font-size:100%;"&gt;&lt;br /&gt;Não consegui ainda entender porque a versão que a gente baixa para depois customizar é tão maior do que qualquer uma das versões para desenvolvedores. Depois da instalação via update este eclipse ocupa 276 Mb do meu HD (contra 217 Mb do modo anterior).&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:arial;font-size:100%;"&gt;Depois disto tudo, fiquei pensando e ainda me pergunto. Não fosse eu tão novidadeiro, seria melhor ao invés de gastar tanto tempo com as idiossincrasias do update do eclipse, usar o &lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;h2 style="font-family: arial;"&gt;&lt;span style="font-size:100%;"&gt;&lt;a href="http://www.easyeclipse.org/site/distributions/index.html"&gt;&lt;img src="http://www.easyeclipse.org/site/images/home/easyeclipse-1.2.png" alt="EasyEclipse 1.2" height="44" width="266" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/h2&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;img style="font-family: arial;" src="file:///C:/DOCUME%7E1/Luca/LOCALS%7E1/Temp/moz-screenshot.jpg" alt="" /&gt;&lt;img style="font-family: arial;" src="file:///C:/DOCUME%7E1/Luca/LOCALS%7E1/Temp/moz-screenshot-1.jpg" alt="" /&gt;&lt;img style="font-family: arial;" src="file:///C:/DOCUME%7E1/Luca/LOCALS%7E1/Temp/moz-screenshot-2.jpg" alt="" /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/33115344-2347803479131564716?l=lucabastos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lucabastos.blogspot.com/feeds/2347803479131564716/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=33115344&amp;postID=2347803479131564716' title='12 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/33115344/posts/default/2347803479131564716'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/33115344/posts/default/2347803479131564716'/><link rel='alternate' type='text/html' href='http://lucabastos.blogspot.com/2007/06/o-eclipse-do-jeito-que-gente-precisa.html' title='O Eclipse do jeito que a gente precisa'/><author><name>Luca Bastos</name><uri>http://www.blogger.com/profile/08105913026457778167</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp3.blogger.com/_6-xLHhv2Rak/RoW-qN7gYXI/AAAAAAAAACc/3GFo7le_12k/s72-c/Eclipse.JPG' height='72' width='72'/><thr:total>12</thr:total></entry><entry><id>tag:blogger.com,1999:blog-33115344.post-4870916477179618708</id><published>2007-06-19T18:29:00.001-03:00</published><updated>2007-06-19T22:49:44.536-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='História'/><title type='text'>Você sabia que o tiger era o gato da filha do Bruce Scott?</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_6-xLHhv2Rak/RnhZky29zfI/AAAAAAAAACM/8dHTLlIFiVg/s1600-h/oracle30_1.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://bp2.blogger.com/_6-xLHhv2Rak/RnhZky29zfI/AAAAAAAAACM/8dHTLlIFiVg/s320/oracle30_1.jpg" alt="" id="BLOGGER_PHOTO_ID_5077907068522712562" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;p class="MsoNormal"&gt;&lt;span style="font-family:Arial;"&gt;Pois, é. Precisou a Oracle completar 30 anos no último 16 de junho para eu aprender &lt;a href="http://searchoracle.techtarget.com/originalContent/0,289142,sid41_gci1261162,00.html"&gt;isto&lt;/a&gt;. O Bruce Scott escreveu os códigos das primeiras versões do Oracle junto com o Bob Miner, que morreu de câncer em 1994.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-family:Arial;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-family:Arial;"&gt;Meu primeiro contato com o banco de dados Oracle foi com a versão 5.3 preparando uma cotação para um projeto que infelizmente não ganhei. Mas como muitos de nós que trabalhamos com TI, já ganhei um bom dinheiro com projetos usando o Oracle. Por isto fui procurar saber um pouco da história dele e do Larry Ellison.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-family:Arial;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-family:Arial;"&gt;Disse o Larry Ellison em uma entrevista a Nicole Ricci em 1998:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 35.4pt;"&gt;&lt;span  lang="EN-US" style="font-family:Arial;"&gt;“Realmente, quando fundei a Oracle, o objetivo nunca foi chegar a ser uma grande empresa. No máximo esperava ter umas 50 pessoas na empresa e viver bem. Depois de 5 anos, ficou claro que os horizontes eram ilimitados. Os únicos limites erámos nós.”&lt;br /&gt;&lt;!--[if !supportLineBreakNewLine]--&gt;&lt;br /&gt;&lt;!--[endif]--&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-family:Arial;"&gt;O próprio Bruce Scott contou em entrevista ao&lt;strong&gt;&lt;span style="font-weight: normal;font-family:Arial;" &gt; Rich Niemiec em 2001:&lt;/span&gt;&lt;/strong&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 35.4pt;"&gt;&lt;span style="font-family:Arial;"&gt;“Precisávamos ligar nossos terminais ao computador na sala ao lado e ainda não tínhamos idéia de como passar os fios. Larry pegou uma marreta, abriu um buraco na parede e disse: agora já podem passar os fios. Era o modo de pensar dele: fazer a coisa acontecer de qualquer jeito”.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p class="MsoNormal"&gt;&lt;span style="font-family:Arial;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;br /&gt;Vamos ver um pouco da história dos bancos de dados relacionais antes da Oracle&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p class="MsoNormal"&gt;&lt;span style="font-family:Arial;"&gt;1970 –Dr. Edgar Codd publica &lt;a href="http://www.acm.org/classics/nov95/toc.html"&gt;A Relational Model of Data for Large Shared Data Banks&lt;/a&gt;, sua teoria de modelagem relacional de dados.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p class="MsoNormal"&gt;&lt;span style="font-family:Arial;"&gt;1972 –&lt;/span&gt; &lt;span style="font-family:Arial;"&gt;Michael Stonebraker começa a desenvolver o que viria a ser o INGRES. Junto com Eugene “Gene” Wong e outros, incluindo estudantes, usam QUEL ao invés de SQL no Ingres. (Em 1985 o Stonebraker ainda em Berkeley, criou o Post-Ingres, isto é, o Postgres que virou PostgreSQL a partir de 1996).&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span  lang="EN-US" style="font-family:Arial;"&gt;1976 – Stonebraker, Wong, Kreps e Held publicam na ACM: &lt;a href="http://portal.acm.org/citation.cfm?doid=320473.320476"&gt;The Design and Implemenation of INGRES&lt;/a&gt;. &lt;/span&gt;&lt;span style="font-family:Arial;"&gt;Percebe-se alguma hostilidade entre Berkeley e o grupo IBM.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p class="MsoNormal"&gt;&lt;span style="font-family:Arial;"&gt;1974 – Os estudantes de Berkeley, Jerry Held e Karel Youseffi criam o NonStopSQL (Tandem) baseado no Ingres. Robert Epstein, programador chefe em Berkeley, junto com os estudantes Paula Hawthorne, Mike Ubelland e Eric Allman, formam a Sybase.&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;span style="font-family:Arial;"&gt;Alguns fatos dos primeiros 10 anos da Oracle&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-family:Arial;"&gt;1977 – Com 2000 dólares, Larry Ellison, Bob Miner, Ed Oates e Bruce Scott criam a Software Development Laboratories (SDL). O Bob era o chefe do Larry na Ampex onde trabalharam para a CIA em um &lt;span style=""&gt; &lt;/span&gt;projeto chamado &lt;span style=""&gt; &lt;/span&gt;"Oracle". Bob e Bruce começam a desenvolver o database.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-family:Arial;"&gt;1978 – A CIA é o primeiro cliente, mesmo antes do produto ser lançado comercialmente. Depois a SDL muda o nome para Relational Software Inc. (RSI).&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-family:Arial;"&gt;1979 – RSI faz o primeiro lançamento comercial da versão 2. A V1 nunca saiu por medo de que as pessoas não comprassem software na primeira versão. A base de dados foi escrita em Assembler. A primeira venda foi para Wright-Patterson Air Force Base. Foi o primeiro RDBMS do mercado.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-family:Arial;"&gt;1981 – Lançada a primeira ferramenta, Interactive Application Facility (IAF), predecessora do futuro Oracle SQL*Forms. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-family:Arial;"&gt;1982 – RSI muda de nome para Oracle Systems Corporation (OSC) e depois simplificado para Oracle Corporation.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-family:Arial;"&gt;1983 – Lançada a Versão 3, escrita em C para ser portável. O genial Bob Miner, enquanto ainda suportava a versão V2 escrita em Assembler, escreve metade do código e o Bruce Scott a outra metade. Trata-se do primeiro RDBMS 32-bit.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-family:Arial;"&gt;1984 – Lançada a Versão 4 já com várias ferramentas e primeiro database com consistência de leitura. O Oracle foi portado também para o PC.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-family:Arial;"&gt;1985 – Lançadas as Versões 5 e 5.1 e o primeiro database Parallel Server para o VMS/VAX.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-family:Arial;"&gt;1986 – Oracle faz uma oferta pública de ações em 12 de março, um dia antes da Microsoft e 8 dias depois da &lt;span style=""&gt; &lt;/span&gt;Sun. As ações abriram a US $15 e fecharam a US $20.75. É lançado o primeiro database client/server.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-family:Arial;"&gt;1987 – Oracle é a maior empresa de DBMS. Aparece o primeiro database SMP (symmetrical multi-processing).&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-family:Arial;"&gt;1987 – Rich Niemiec junto com Brad Brown e Joe Trezzo, trabalhando para a Oracle (TUSC), implementam a primeira aplicação client/server rodando Oracle em um 286 com 16 usuários concorrentes client/server para a NEC Corporation.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;      &lt;p class="MsoNormal"&gt;&lt;span style="font-family:Arial;"&gt;&lt;o:p&gt;&lt;br /&gt;&lt;/o:p&gt;O resto da história vocês podem conferir em:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-family:Arial;"&gt;&lt;a href="http://www.nyoug.org/Presentations/2007/200703_Niemiec_Keynote.pdf"&gt;http://www.nyoug.org/Presentations/2007/200703_Niemiec_Keynote.pdf&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-family:Arial;"&gt;&lt;a href="http://www.oracle.com/oramag/profit/07-may/p27anniv_timeline.pdf"&gt;http://www.oracle.com/oramag/profit/07-may/p27anniv_timeline.pdf&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;        &lt;p class="MsoNormal"&gt;&lt;span style="font-family:Arial;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="font-family:Arial;"&gt;Parabéns Oracle.&lt;o:p&gt;&lt;br /&gt;&lt;/o:p&gt;&lt;br /&gt;Como velejador só posso dizer: Bons Ventos &lt;a href="http://bmworacleracing.com/en/index.html"&gt;Larry Ellison&lt;/a&gt;.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;&lt;/span&gt;&lt;span style="font-family:arial;"&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/33115344-4870916477179618708?l=lucabastos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lucabastos.blogspot.com/feeds/4870916477179618708/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=33115344&amp;postID=4870916477179618708' title='2 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/33115344/posts/default/4870916477179618708'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/33115344/posts/default/4870916477179618708'/><link rel='alternate' type='text/html' href='http://lucabastos.blogspot.com/2007/06/voc-sabia-que-o-tiger-era-o-gato-da.html' title='Você sabia que o tiger era o gato da filha do Bruce Scott?'/><author><name>Luca Bastos</name><uri>http://www.blogger.com/profile/08105913026457778167</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_6-xLHhv2Rak/RnhZky29zfI/AAAAAAAAACM/8dHTLlIFiVg/s72-c/oracle30_1.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-33115344.post-5141982416695907251</id><published>2007-06-15T16:35:00.000-03:00</published><updated>2007-06-15T17:06:30.534-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linguagens funcionais'/><category scheme='http://www.blogger.com/atom/ns#' term='Programação concorrente'/><title type='text'>Todo programador Java ruim que eu conheço...</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_6-xLHhv2Rak/RnLqbi29zdI/AAAAAAAAAB8/T4AxF_n6rdc/s1600-h/Figura.GIF"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://bp3.blogger.com/_6-xLHhv2Rak/RnLqbi29zdI/AAAAAAAAAB8/T4AxF_n6rdc/s400/Figura.GIF" alt="" id="BLOGGER_PHOTO_ID_5076377488934686162" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;p class="MsoNormal"&gt;&lt;span style="font-family:Arial;"&gt;Meu amigo &lt;a href="http://lixo.org/"&gt;Carlos Villela&lt;/a&gt;, o famoso fera &lt;a href="http://www.guj.com.br/user/profile/883.java"&gt;CV&lt;/a&gt; que já ajudou muita gente no &lt;a href="http://www.guj.com.br"&gt;GUJ&lt;/a&gt; incluindo a mim, criou um &lt;a href="http://www.guj.com.br/posts/list/61615.java"&gt;tópico no GUJ&lt;/a&gt; com o título acima que incendiou a galera. É um dos tópicos mais lidos nos últimos tempos e muita gente respondeu, sendo que alguns mais de uma vez. Fora o esperado &lt;a href="http://en.wikipedia.org/wiki/Flame_war"&gt;flame war&lt;/a&gt;, que acho que era o que o CV esperava que fosse mais divertido, muitas respostas boas apareceram. Até acredito que algumas poderiam ser coletadas em um manual de bons conselhos e outras em pit stop para o riso. Eu também respondi lá mais de uma vez. E vou responder de novo, só que desta vez por aqui.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-family:Arial;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="font-family:Arial;"&gt;Todo programador Java ruim que eu conheço...&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-family:Arial;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 35.4pt;"&gt;&lt;span style="font-family:Arial;"&gt;Deve estar preocupado sabendo que os fabricantes de chips quase não fabricam mais CPUs mono cores e que no futuro precisarão aprender outras linguagens muito mais complexas com facilidades de computação paralela para aproveitar os multi cores.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-family:Arial;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-family:Arial;"&gt;Como muitos já perceberam, a industria de processadores se deparou com o chamado "muro de potência" e não consegue mais crescer a velocidade de processamento seguindo o mesmo ritmo de antes. Antes a &lt;a href="http://en.wikipedia.org/wiki/Moore%27s_law"&gt;lei de Moore&lt;/a&gt; previa a duplicação de desempenho a cada 18 ou 24 meses de um processador mono core. As projeções atuais, baseadas no que vem acontecendo nos últimos anos, indicam que o ciclo de duplicação deste tipo de processador é de no mínimo 5 anos. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-family:Arial;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-family:Arial;"&gt;Assim não é estranho que aumentar a freqüência do clock não seja mais o principal meio de melhorar a capacidade do processador. Já que não se pode crescer para cima o jeito é ir para os lados. O investimento atual é no paralelismo com o crescimento da capacidade de processamento utilizando vários núcleos. Um processador de 2 núcleos consome muito menos energia do que um de 1 só núcleo com o dobro de velocidade.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-family:Arial;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-family:Arial;"&gt;O hardware está mudando e o mundo do software, que se baseou durante anos no processamento seqüencial, terá que mudar. Já tem gente mudando porque a turma acadêmica de processamento científico e de Data Minning, já está relativamente adiantada na pesquisa de uso de métodos paralelos. O primeiro grandão que percebeu a necessidade de mudanças foi o Google. Eles foram buscar no &lt;a href="http://renil.wordpress.com/2007/05/03/mapreduce-functional-programming-lisp/"&gt;Lisp&lt;/a&gt; o algoritmo &lt;a href="http://en.wikipedia.org/wiki/MapReduce"&gt;MapReduce&lt;/a&gt; que se transformou em uma das chaves do sucesso do seu sistema. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-family:Arial;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-family:Arial;"&gt;Fiquem atentos, já vi o mundo mudar antes e acredito que ainda vou assistir isto acontecer outras vezes nos próximos anos. As mudanças sempre chegam oferecendo oportunidades de sucesso para gente inovadora. Tenho a certeza que não será diferente desta vez. Não duvidem que em futuro não muito longínquo, os Tomcats, JBoss, WebLogics e mais todos os ESBs da vida, não sejam mais escritos em Java e sim em &lt;a href="http://www.scala-lang.org/"&gt;Scala&lt;/a&gt;, &lt;a href="http://www.erlang.org/"&gt;Erlang&lt;/a&gt; ou outra linguagem qualquer com suporte mais fácil ao aproveitamento de mais processadores. Quem sabe o programador seqüencial Java que estamos malhando hoje não seja um novo “&lt;a href="http://en.wikipedia.org/wiki/Marc_Fleury"&gt;Marc Fleury&lt;/a&gt;” ou “&lt;a href="http://en.wikipedia.org/wiki/Ray_Ozzie"&gt;Ray Ozzie&lt;/a&gt;” no mundo da computação paralela?&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/33115344-5141982416695907251?l=lucabastos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lucabastos.blogspot.com/feeds/5141982416695907251/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=33115344&amp;postID=5141982416695907251' title='5 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/33115344/posts/default/5141982416695907251'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/33115344/posts/default/5141982416695907251'/><link rel='alternate' type='text/html' href='http://lucabastos.blogspot.com/2007/06/todo-programador-java-ruim-que-eu.html' title='Todo programador Java ruim que eu conheço...'/><author><name>Luca Bastos</name><uri>http://www.blogger.com/profile/08105913026457778167</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp3.blogger.com/_6-xLHhv2Rak/RnLqbi29zdI/AAAAAAAAAB8/T4AxF_n6rdc/s72-c/Figura.GIF' height='72' width='72'/><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-33115344.post-5920925604908912967</id><published>2007-06-05T23:49:00.000-03:00</published><updated>2007-06-06T11:05:45.013-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JavaFX'/><title type='text'>Consumer JRE</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_6-xLHhv2Rak/RmZDcy29zcI/AAAAAAAAAB0/Mim9k7y5xnY/s1600-h/kernelcomparisonsm.png"&gt;&lt;img style="cursor: pointer;" src="http://bp0.blogger.com/_6-xLHhv2Rak/RmZDcy29zcI/AAAAAAAAAB0/Mim9k7y5xnY/s320/kernelcomparisonsm.png" alt="" id="BLOGGER_PHOTO_ID_5072816192247156162" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_6-xLHhv2Rak/RmZCXi29zbI/AAAAAAAAABs/DAhPBJbyeL8/s1600-h/kernelcomparisonsm.png"&gt;&lt;br /&gt;&lt;/a&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-family:Arial;"&gt;Na reunião do SouJava desta terça feira foi abordado o último &lt;a href="http://developers.sun.com/learning/javaoneonline/"&gt;JavaOne&lt;/a&gt;. Falaram &lt;a href="http://wiki.java.net/bin/view/People/BrunoSouza"&gt;Bruno Souza&lt;/a&gt;, &lt;a href="http://wiki.java.net/bin/view/People/FabioVelloso"&gt;Fábio Veloso&lt;/a&gt;, &lt;a href="http://www.tridedalo.com.br/fabiane/"&gt;Fabiane Nardon&lt;/a&gt; e o &lt;a href="http://weblogs.java.net/blog/maltron/"&gt;Maurício Leal&lt;/a&gt;. Eles mostraram filmes, contaram histórias, inclusive do quanto os brasileiros são festivamente recebidos por lá e é claro, falaram do &lt;a href="http://www.google.com/search?q=JavaFX"&gt;JavaFX&lt;/a&gt; e do &lt;a href="http://www.google.com/search?q=Consumer+JRE"&gt;Consumer JRE&lt;/a&gt;.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-family:Arial;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-family:Arial;"&gt;Na verdade a reunião foi um grande bate papo e foi bastante discutida a questão do tamanho do tal Consumer JRE. O Bruno disse que ele ficará em torno de 40% do tamanho atual e que será modularizado. Isto é, se o cara precisa de pouca coisa, só isto será baixado.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-family:Arial;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-family:Arial;"&gt;Quando cheguei em casa fui conferir algumas coisas.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-family:Arial;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-family:Arial;"&gt;1. A partir de uma interessante informação do Fábio, descobri que há um JRE somente para o Windows, de mais ou menos 7.1MB para instalação on line, que talvez já use um pouco deste conceito de não baixar tudo. Quem souber mais se é assim que funciona, por favor me confirme.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-family:Arial;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 35.4pt;"&gt;&lt;span style="font-family:Arial;"&gt;Download do JRE a partir de &lt;a href="http://java.sun.com/javase/downloads/index.jsp" target="_blank"&gt;http://java.sun.com/javase/downloads/index.jsp&lt;/a&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 35.4pt;"&gt;&lt;span style="font-family:Arial;"&gt;jre-6u1-windows-i586-p.exe&lt;span style=""&gt;           &lt;/span&gt;=    13.16 MB&lt;br /&gt;jre-6u1-linux-i586-rpm.bin&lt;span style=""&gt;               &lt;/span&gt;    =    17.67 MB  &lt;!--[if !supportLineBreakNewLine]--&gt;  &lt;!--[endif]--&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 35.4pt;"&gt;&lt;span style="font-family:Arial;"&gt;&lt;a href="http://java.com/en/download/help/5000010100.xml#automatic"&gt;Download automático&lt;/a&gt; a partir de &lt;a href="http://java.com/"&gt;http://java.com/&lt;/a&gt; para instalação on line&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 35.4pt;"&gt;&lt;span style="font-family:Arial;"&gt;JRE para o Windows&lt;a name="verify"&gt;&lt;span style=""&gt;                      &lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;a style="font-family: arial;" name="verify"&gt;            =     7.1MB&lt;/a&gt;&lt;span style="font-family:Arial;"&gt;&lt;span class="bodytext"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-family:Arial;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-family:Arial;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p class="MsoNormal"&gt;&lt;span style="font-family:Arial;"&gt;2. Microsoft Silverlight&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-family:Arial;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-family:Arial;"&gt;Muito se fala no &lt;a href="http://silverlight.net/GetStarted/"&gt;Silverlight&lt;/a&gt; e no tamanho do seu download que é de apenas 1.38MB na versão 1.0 beta mas chega a 4.24 MB na versão 1.1 alpha.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-family:Arial;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-family:Arial;"&gt;O pessoal que compara com o tamanho do JRE esquece que o Silverlight necessita também do &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=0856EACB-4362-4B0D-8EDD-AAB15C5E04F5&amp;displaylang=en"&gt;Microsoft.NET Framework Version 2.0 Redistributable Package (x86)&lt;/a&gt; cuja versão 2.0 tem 22.4 MB de tamanho para download. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-family:Arial;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-family:Arial;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p class="MsoNormal"&gt;&lt;span style="font-family:Arial;"&gt;3. Consumer JRE&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-family:Arial;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-family:Arial;"&gt;O &lt;a href="http://java.sun.com/developer/technicalArticles/javase/consumerjre/"&gt;Consumer JRE&lt;/a&gt; ainda está em desenvolvimento mas o objetivo é diminuir&lt;/span&gt;&lt;span style="font-family:Arial;"&gt; em 60%&lt;/span&gt;&lt;span style="font-family:Arial;"&gt; o tamanho do download do JRE para aplicações Swing de porte médio.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-family:Arial;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-family:Arial;"&gt;A idéia é modularizar o download do JRE de modo que se possa colocar para funcionar uma aplicação com o mínimo possível do que ela precisa. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-family:Arial;"&gt;Download em passos:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;ol style="margin-top: 0cm;" start="1" type="1"&gt;&lt;li class="MsoNormal" style=""&gt;&lt;span style="font-family:Arial;"&gt;Funcionalidades básicas que todas as aplicações      precisam: VM, gc, security, classloader e o mínimo de facilidades de rede      para possibilitar o download do resto;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;&lt;span style="font-family:Arial;"&gt;Dependências adicionais exigidas pela aplicação;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;&lt;span style="font-family:Arial;"&gt;Classes responsáveis por qualquer exceção Class      not found lançada;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;&lt;span style="font-family:Arial;"&gt;Resto do JRE em paralelo até que complete o      release completo no sistema do usuário.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-family:Arial;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-family:Arial;"&gt;A figura lá em cima deste blog, mostra números preliminares em MB, de pacotes da JRE necessários a algumas aplicações para mostrar como se comparam com o JRE completo.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-family:Arial;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-family:Arial;"&gt;Mas não é só isto. Haverão melhorias também no processo de instalação, os canais gráficos do Swing diretos com o Windows estão sendo reescritos para se prevalecerem das vantagens de rapidez e confiabilidade do &lt;a href="http://msdn2.microsoft.com/en-us/xna/aa937781.aspx"&gt;DirectX&lt;/a&gt; usando a Direct3D library on Windows e um novo look and feel &lt;/span&gt;&lt;span style="font-family:Arial;"&gt;chamado &lt;/span&gt;&lt;span style="font-family:Arial;"&gt;Nimbus &lt;/span&gt;&lt;span style="font-family:Arial;"&gt;de aparência mais moderna&lt;/span&gt;&lt;span style="font-family:Arial;"&gt;&lt;/span&gt;&lt;span style="font-family:Arial;"&gt;. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-family:Arial;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-family:Arial;"&gt;A previsão de lançamento do Consumer JRE é para o início de 2008. Mas o próximo update 2 do Java 6, previsto para o fim deste mês de junho, já incluirá a melhoria no processo de instalação.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-family:Arial;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-family:Arial;"&gt;A partir do conhecimento do projeto do Consumer JRE, a idéia do &lt;a href="https://openjfx.dev.java.net/"&gt;JavaFX&lt;/a&gt; fica bem mais viável. Já há plug-ins para o Netbeans 6.0M9 e para o Eclipse 3.2 facilitando a escrita do JavaFX script. Resta agora a comunidade desenvolver ferramentas com capacidades gráficas para construir e renderizar os componentes de modo mais fácil do que o &lt;a href="http://download.java.net/general/openjfx/demos/javafxpad.jnlp"&gt;JavaFX Script JavaFXPad Demo&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-family:Arial;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-family:Arial;"&gt;Galera, vamos botar a mão na massa!&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/33115344-5920925604908912967?l=lucabastos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lucabastos.blogspot.com/feeds/5920925604908912967/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=33115344&amp;postID=5920925604908912967' title='3 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/33115344/posts/default/5920925604908912967'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/33115344/posts/default/5920925604908912967'/><link rel='alternate' type='text/html' href='http://lucabastos.blogspot.com/2007/06/consumer-jre.html' title='Consumer JRE'/><author><name>Luca Bastos</name><uri>http://www.blogger.com/profile/08105913026457778167</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp0.blogger.com/_6-xLHhv2Rak/RmZDcy29zcI/AAAAAAAAAB0/Mim9k7y5xnY/s72-c/kernelcomparisonsm.png' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-33115344.post-5795627594143906111</id><published>2007-06-05T11:12:00.000-03:00</published><updated>2007-06-05T16:28:43.322-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Exceptions'/><title type='text'>Tratamento de exceções parte 3 - Discussão sobre a remoção das checked exceptions da linguagem Java</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_6-xLHhv2Rak/RmVwWS29zaI/AAAAAAAAABk/kF6ElAGj0kE/s1600-h/java_giant.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://bp1.blogger.com/_6-xLHhv2Rak/RmVwWS29zaI/AAAAAAAAABk/kF6ElAGj0kE/s200/java_giant.jpg" alt="" id="BLOGGER_PHOTO_ID_5072584083624545698" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Continuação de tratamento de exceções:&lt;/span&gt;&lt;br /&gt;&lt;a href="http://lucabastos.blogspot.com/2007/06/tratamento-de-excees-parte-1-um-pouco.html"&gt;Parte 1 – Um pouco de história&lt;/a&gt;&lt;br /&gt;&lt;a href="http://lucabastos.blogspot.com/2007/06/tratamento-de-excees-parte-2-mudanas-no.html"&gt;Parte 2 – Mudanças no conceito de uso das exceções&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:Arial;font-size:12;"  &gt;Há muita gente que sonha com um fork do Java redundando em um Java mais enxuto, com as APIs limpas de deprecateds e também mais poderoso com a inclusão de algumas facilidades que são difíceis de adicionar ao Java com a atual arquitetura da JVM. Entre as inclusões sonhadas, algumas estão na &lt;a href="http://blogs.sun.com/ahe/entry/java_se_7_wish_list"&gt;Java 7 Wish List do Peter Ahé&lt;/a&gt;. &lt;/span&gt;&lt;span style=";font-family:Arial;font-size:12;"  &gt;Juntando os desejos dele com mais alguns outros, sem pretensão de esgotar o assunto, podemos fazer uma lista de facilidades tais como real closures, improved type inference, continuations, tail recursion optimization e até mesmo o assunto desta trilogia que são modificações no tratamento das exceções.&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:Arial;font-size:12;"  &gt;&lt;/span&gt;&lt;p class="MsoNormal"&gt;&lt;span style="font-family:Arial;"&gt;Antes que alguém reclame de me ver escrevendo sobre fork do Java, lembro que a quebra de compatibilidade já aconteceu antes. O Swing no Java 2 quebrou as pernas do Java 1.1.6 baseado em AWT e o novo tratamento do foco no Java 1.4 impediu a migração de alguns sistemas feitos com Java 1.3, inclusive um em que eu trabalhava. Então o tal famoso argumento de que o Java sempre é compatível com si mesmo não é muito verdadeiro. Mas vou deixar este assunto para outra rodada de choppe e vou me ater às questões que me propus levantar sobre o tratamento de exceções.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;    &lt;span style=";font-family:Arial;font-size:12;"  &gt;No ultimo dia 26 de maio, o &lt;a href="http://gafter.blogspot.com/"&gt;Neal Gafter&lt;/a&gt; em seu blog, em resposta ao &lt;/span&gt;&lt;span style=";font-family:Arial;font-size:12;"  &gt;colega seu no Google&lt;/span&gt;&lt;span style=";font-family:Arial;font-size:12;"  &gt; &lt;a href="http://mattshulman.blogspot.com/"&gt;Matt Shulman&lt;/a&gt;, &lt;/span&gt;&lt;span style=";font-family:Arial;font-size:12;"  &gt;abordou a questão de &lt;a href="http://gafter.blogspot.com/2007/05/removing-language-features.html"&gt;remover as checked exceptions da linguagem Java&lt;/a&gt;.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial;"&gt;&lt;br /&gt;Ele&lt;/span&gt;&lt;span style="font-family:Arial;"&gt; termina com uma pergunta:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;  &lt;p class="MsoNormal" style="margin-left: 35.4pt;"&gt;&lt;span  lang="EN-US" style="font-family:Arial;"&gt;“This isn't a question I had thought much about. &lt;/span&gt;&lt;span style="font-family:Arial;"&gt;I believe the language could be simplified by treating all exception types as unchecked without breaking existing programs. This could also result in a simplification of future language extensions and APIs. &lt;/span&gt;&lt;span  lang="EN-US" style="font-family:Arial;"&gt;But would the language and platform be better off without checked exceptions?”&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;span style="font-family:Arial;"&gt;Isto é claro que ele suscitou muita polêmica. Li os 55 comentários e sem revelar ainda minha posição, vou resumir aqui&lt;/span&gt;&lt;span style="font-family:Arial;"&gt; alguns&lt;/span&gt;&lt;span style="font-family:Arial;"&gt; favoráveis às mudanças:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;    &lt;p class="MsoNormal"&gt;&lt;a href="http://jroller.com/page/jadda" name="comment-6454559293419811884"&gt;&lt;/a&gt;&lt;a href="http://jroller.com/page/jadda"&gt;&lt;span style="font-family:Arial;"&gt;&lt;span style="" lang="EN-US"&gt;Stefan Schulz&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span  lang="EN-US" style="font-family:Arial;"&gt; said...&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 35.4pt;"&gt;&lt;span  lang="EN-US" style="font-family:Arial;"&gt;I think that removing checked exceptions would be a feature and a benefit.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p class="MsoNormal"&gt;&lt;span  lang="EN-US" style="font-family:Arial;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;a href="http://mernst.org/blog/"&gt;Matthias Ernst&lt;/a&gt; said...&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 35.4pt;"&gt;&lt;span  lang="EN-US" style="font-family:Arial;"&gt;Number one on &lt;/span&gt;&lt;a href="http://mernst.org/blog/rss.xml#How-Far-is-Fidji"&gt;&lt;span style="font-family:Arial;"&gt;&lt;span style="" lang="EN-US"&gt;my list&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span  lang="EN-US" style="font-family:Arial;"&gt;!&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;a href="http://crazybob.org/index.php"&gt;&lt;span style="font-family:Arial;"&gt;&lt;span style="" lang="EN-US"&gt;Bob&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span  lang="EN-US" style="font-family:Arial;"&gt; said... &lt;a href="http://crazybob.org/index.php"&gt;&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 35.4pt;"&gt;&lt;span  lang="EN-US" style="font-family:Arial;"&gt;Count me in.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;a href="http://plesner.quenta.org/"&gt;&lt;span style="font-family:Arial;"&gt;&lt;span style="" lang="EN-US"&gt;Christian Plesner Hansen&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span  lang="EN-US" style="font-family:Arial;"&gt; said... &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style="margin-left: 36pt;"&gt;&lt;span  lang="EN-US" style="font-family:Arial;"&gt;I ran my own little crusade against checked exceptions a while back. I opened an &lt;a href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6376696"&gt;RFE (#6376696)&lt;/a&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;span  lang="EN-US" style="font-family:Arial;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;span  lang="EN-US" style="font-family:Arial;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;  &lt;p class="MsoNormal"&gt;&lt;a href="http://digital-sushi.org/"&gt;&lt;span  lang="EN-US" style="font-family:Arial;"&gt;Peter von der Ahé &lt;/span&gt;&lt;/a&gt;&lt;span  lang="DE" style="font-family:Arial;"&gt;&lt;a href="http://blogs.sun.com/ahe/"&gt;&lt;span style="" lang="EN-US"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;span  lang="EN-US" style="font-family:Arial;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 35.4pt;"&gt;&lt;span  lang="EN-US" style="font-family:Arial;"&gt;I don't think it would work to make it a compiler option (which is why I was in favor of closing &lt;/span&gt;&lt;a href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6376696"&gt;&lt;span style="font-family:Arial;"&gt;&lt;span style="" lang="EN-US"&gt;RFE 6376696&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span  lang="EN-US" style="font-family:Arial;"&gt;). However, turning checked exception compile-time errors into compile-time warnings makes a lot of sense to me.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;a href="http://www.oreillynet.com/pub/au/1738"&gt;&lt;span style="font-family:Arial;"&gt;&lt;span style="" lang="EN-US"&gt;Tim O'Brien&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span  lang="EN-US" style="font-family:Arial;"&gt; said... &lt;/span&gt;&lt;st1:city&gt;&lt;st1:place&gt;&lt;span  lang="EN-US" style="font-family:Arial;"&gt;(autor de Jakarta&lt;/span&gt;&lt;/st1:place&gt;&lt;/st1:city&gt;&lt;span  lang="EN-US" style="font-family:Arial;"&gt; commons Cookbook e Maven, a Developer Notebook)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;  &lt;p style="margin-left: 36pt;"&gt;&lt;span  lang="EN-US" style="font-family:Arial;"&gt;I think we need an annotation that would allow us to automate the wrapping of checked exceptions with Runtime.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p class="MsoNormal"&gt;  &lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="font-family:Arial;"&gt;Não vou listar muitos comentários a favor da manutenção das checked exceptions. Somente listo 2, sendo que o segundo me chamou muita atenção:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-family:Arial;"&gt;&lt;a href="http://beust.com/weblog/"&gt;Cedric&lt;/a&gt; said... &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 35.4pt;"&gt;&lt;span style="font-family:Arial;"&gt;Count me firmly on the side of people who find checked exceptions very important to build API's on big code bases. Sure, they can be misused, but unchecked exceptions are being overused in a lot of places as well.&lt;br /&gt;&lt;br /&gt;When I use a method from a library, I want to rely on the compiler to tell me what can go wrong, not on the documentation.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p class="MsoNormal"&gt;&lt;span style="font-family:Arial;"&gt;&lt;a href="http://www.blogger.com/profile/10552530993349739781"&gt;&lt;span style="" lang="EN-US"&gt;Edson&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;span  lang="EN-US" style="font-family:Arial;"&gt; said... &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style="margin-left: 36pt;"&gt;&lt;span  lang="EN-US" style="font-family:Arial;"&gt;We develop systems using Java and .NET.&lt;br /&gt;We deal with checked exceptions encapsulating them in a framework exception (ugly but documented); but exceptions in .NET are totally undocumented (the Microsoft API does not document all possible exceptions, neither our programmers) and we have very big headaches with unexpected exceptions found in production phase.&lt;br /&gt;We desperately need checked exceptions in .NET; don't remove checked exceptions from Java.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;span style=";font-family:Arial;font-size:12;"  lang="EN-US" &gt;Vale a pena acompanhar a discussão toda, inclusive baixar o PDF da apresentação do Marko Van Dooren &lt;a href="http://www.cs.kuleuven.be/%7Emarko/?q=publications"&gt;Combining the robustness of checked exceptions with the flexibility of unchecked exceptions using anchored exception declarations&lt;/a&gt;, onde ele aborda o uso de facilidade da linguagem Eiffel para corrigir problemas das checked exceptions. &lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:Arial;font-size:12;"  &gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:Arial;font-size:12;"  &gt;Não posso deixar de citar a resposta do &lt;/span&gt;&lt;span style=";font-family:Arial;font-size:12;"  &gt;do &lt;a href="http://cafe.elharo.com/"&gt;Elliotte Rusty Harold&lt;/a&gt; &lt;/span&gt;&lt;span style=";font-family:Arial;font-size:12;"  &gt;em seu próprio blog com &lt;a href="http://cafe.elharo.com/java/voting-for-checked-exceptions/"&gt;veemente defesa das checked exceptions&lt;/a&gt; (80 comentários até agora e o Luca que respondeu lá não sou eu).&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial;"&gt;&lt;br /&gt;O que posso concluir depois de ler tanto sobre o tratamento de exceções no Java?&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;span style="font-family:Arial;"&gt;&lt;br /&gt;&lt;br /&gt;Confesso que são tantas opiniões bem fundamentadas que fiquei confuso. Certamente sou favorável a um fork do Java, mas não para tirar as checked exceptions. Antes disto, acho que precisariam limpar os "deprecateds" para tornar mais enxuto o tal de JRE consumer. E incluir algumas facilidades que andam falando por aí.&lt;br /&gt;&lt;br /&gt;Sobre o que fazer com as checked exceptions, gostaria de ver aplicada, em alguns casos, a sugestão do Ahé de fazer com que elas redundem em warnings ao invés de erros de compilação, principalmente nas APIs do tipo JDBC e java.io em que há uso abusivo. Com a ressalva de que se for adotada em todas APIs, dá medo pensar o que um programador relaxado será capaz de fazer em termos de Exception Hidding.&lt;br /&gt;&lt;br /&gt;Pelo medo que descrevi na última frase, acho boa a sugestão do Tim O’Brien de criar uma anotação para facilitar o empacotamento automático das exceções checkeds em uncheckeds. Uma anotação do tipo da @ApplicationException do EJB 3.0 para todo o Java SE também parece interessante.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Espero pelo menos ter chamado a atenção para a importância de discutir o assunto dentro do seu projeto para não ser vítima futura da ira do help desk.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/33115344-5795627594143906111?l=lucabastos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lucabastos.blogspot.com/feeds/5795627594143906111/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=33115344&amp;postID=5795627594143906111' title='3 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/33115344/posts/default/5795627594143906111'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/33115344/posts/default/5795627594143906111'/><link rel='alternate' type='text/html' href='http://lucabastos.blogspot.com/2007/06/tratamento-de-excees-parte-3-discusso.html' title='Tratamento de exceções parte 3 - Discussão sobre a remoção das checked exceptions da linguagem Java'/><author><name>Luca Bastos</name><uri>http://www.blogger.com/profile/08105913026457778167</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp1.blogger.com/_6-xLHhv2Rak/RmVwWS29zaI/AAAAAAAAABk/kF6ElAGj0kE/s72-c/java_giant.jpg' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-33115344.post-3642328585188686411</id><published>2007-06-04T21:17:00.000-03:00</published><updated>2007-06-05T01:43:42.575-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Exceptions'/><title type='text'>Tratamento de exceções - Parte 2 – Mudanças no conceito de uso das exceções</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_6-xLHhv2Rak/RmSuCS29zZI/AAAAAAAAABc/IJF9iNPU3ug/s1600-h/105_10b.gif"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp0.blogger.com/_6-xLHhv2Rak/RmSuCS29zZI/AAAAAAAAABc/IJF9iNPU3ug/s400/105_10b.gif" alt="" id="BLOGGER_PHOTO_ID_5072370434771373458" border="0" /&gt;&lt;/a&gt;Continuação de &lt;a href="http://lucabastos.blogspot.com/2007/06/tratamento-de-excees-parte-1-um-pouco.html"&gt;Tratamento de exceções - Parte 1 – Um pouco de história&lt;/a&gt;&lt;br /&gt;&lt;p class="MsoNormal"&gt;&lt;span style=";font-family:Arial;font-size:100%;"  &gt;Tendência mais moderna de tratar as exceções no Java.&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="font-family:Arial;"&gt;Vamos começar dando a palavra a um dos criadores do Java, James Gosling em uma &lt;a href="http://www.artima.com/intv/solidP.html"&gt;entrevista publicada em setembro de 2003 ao Bill Venners da artima&lt;/a&gt;:&lt;/span&gt; &lt;span style="font-family:Arial;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 35.4pt;"&gt;&lt;span  lang="EN-US" style="font-family:Arial;"&gt;“Lots of newbie's coming in from the C world complain about exceptions and the fact that they have to put exception handling all over the place—they want to just write their code. But that's stupid: most C code never checks return codes and so it tends to be very fragile. If you want to build something really robust, you need to pay attention to things that can go wrong, and most folks don't in the C world because it's just too damn hard. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 35.4pt;"&gt;&lt;span  lang="EN-US" style="font-family:Arial;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 35.4pt;"&gt;&lt;span  lang="EN-US" style="font-family:Arial;"&gt;One of the design principles behind Java is that I don't care much about how long it takes to slap together something that kind of works. The real measure is how long it takes to write something solid. ”&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal"&gt;&lt;span style="font-family: Arial;"&gt;Como disse no blog anterior, quando aprendi Java, não questionei muito o modelo de tratamento de exceções e era um newbie vindo do mundo C. Mas, como quase todo mundo, achei um pouco complicado a obrigação tratar de exceções das classes da API do Java. Como exemplo de exceções difíceis de entender porque eram checked, lembro de algumas das exceções das versões antigas do JDBC, que ao meu ver deveriam ser consideradas como erros irrecuperáveis.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p class="MsoNormal"&gt;&lt;span style="font-family: Arial;"&gt;&lt;o:p&gt;&lt;/o:p&gt;Naquela época não havia uma boa fonte para entender de forma clara como fazer tratamento de exceções como é o capítulo 8 do livro &lt;a href="http://java.sun.com/docs/books/effective/"&gt;Effective Java do Joshua Bloch&lt;/a&gt; ou o artigo &lt;a href="http://blog.caelum.com.br/2006/10/07/lidando-com-exceptions/"&gt;Lidando com Exceptions do nosso amigo Fábio Kung&lt;/a&gt;.&lt;span style="text-decoration: underline;"&gt;&lt;/span&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p class="MsoNormal"&gt;&lt;span style="font-family: Arial;"&gt;&lt;o:p&gt;&lt;/o:p&gt;O Fábio abordou com muita propriedade o uso das unchecked exceptions e das checked exceptions de acordo com as recomendações do Java pois afinal a Caelum onde dá aulas, entre outras coisas, prepara alunos para certificação Java.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p class="MsoNormal"&gt;&lt;span style="font-family: Arial;"&gt;Vamos ver a &lt;a href="http://java.sun.com/docs/books/tutorial/essential/exceptions/runtime.html"&gt;recomendação oficial da Sun para usar as unchecked exceptions&lt;/a&gt;:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p class="MsoNormal"&gt;&lt;span style="font-family: Arial;" lang="EN-US"&gt;No fim está escrito: &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 35.4pt;"&gt;&lt;span style="font-family: Arial;" lang="EN-US"&gt;“Here's the bottom line guideline: If a client can reasonably be expected to recover from an exception, make it a checked exception. If a client cannot do anything to recover from the exception, make it an unchecked exception.”&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p class="MsoNormal"&gt;&lt;span style="font-family: Arial;"&gt;Na visão dos tutoriais oficiais do Java, unchecked exceptions devem ser usadas só para os erros.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p class="MsoNormal"&gt;&lt;span style="font-family: Arial;"&gt;Este assunto das exceções do Java já causou muita briga e com certeza é um dos mais controversos da linguagem. Como já disse antes, nenhuma outra linguagem adota as checked exceptions.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;    &lt;span style="font-size: 12pt; font-family: Arial;"&gt;São muitas as críticas em cima das checked exceptions do Java. Alguns autores as abominam e recomendam procedimentos alternativos para transformar ou embalar algumas delas em unchecked exceptions. Uma &lt;a href="http://www.google.com/search?q=java+checked+exceptions"&gt;busca no google&lt;/a&gt; mostra que a discussão do assunto é interminável.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: Arial;"&gt;&lt;br /&gt;No meu caso, ao contrário de ter a visão newbie e estúpida citada pelo Gosling, talvez apenas não tenha enxergado com muita profundidade que as coisas poderiam ser de outro jeito e as aceitei sem discutir. Assim, minha primeira reação foi de surpresa quando li as primeiras críticas sobre as recomendações de uso das checked e unchecked exceptions. &lt;span style=""&gt; &lt;/span&gt;Algumas das reclamações partiram de gente muito influente na comunidade Java e causaram bastante polêmica. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: 12pt; font-family: Arial;"&gt;O primeiro autor que vi se insurgindo contra as checked exceptions foi o Bruce Eckel, autor do livro &lt;a href="http://www.mindview.net/Books/TIJ/"&gt;Thinking in Java disponível para download&lt;/a&gt;. &lt;/span&gt;&lt;span style="font-family: Arial;"&gt;Na 3ª edição lançada em dezembro de 2002, no capítulo 9 Error Handling with Exceptions, vejam o título Perspectives. Nele o Bruce escreve bastante contra as checked exceptions, apesar de que na minha opinião, não resume claramente porque elas não foram uma boa idéia. &lt;/span&gt;&lt;span style="font-family: Arial;" lang="EN-US"&gt;Ele cita que o Martin Fowler pensava o mesmo e atribui ao Fowler a seguinte frase: “...on the whole I think that exceptions are good, but Java checked exceptions are more trouble than they are worth”. &lt;/span&gt;&lt;span style="font-family: Arial;"&gt;No mesmo capítulo sob o título Converting checked to unchecked exceptions há um exemplo de um wrapper para “desligar” as checked exceptions. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;span style="font-family: Arial;"&gt;Ver também:&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: Arial;"&gt;&lt;a href="http://mindview.net/WebLog/log-0025"&gt;http://mindview.net/WebLog/log-0025&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: Arial;"&gt;&lt;a href="http://www.mindview.net/Etc/Discussions/CheckedExceptions"&gt;http://www.mindview.net/Etc/Discussions/CheckedExceptions&lt;/a&gt;&lt;/span&gt;&lt;span style="font-family: Arial;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: 12pt; font-family: Arial;"&gt;O segundo a me alertar foi para ter cuidado com o uso delas foi Rod Johnson no livro de 2003, &lt;a href="http://www.wrox.com/WileyCDA/WroxTitle/productCd-0764543857.html"&gt;J2EE Design and Development&lt;/a&gt;. É um ótimo livro e para mim, o capítulo 4 é leitura recomendada para qualquer desenvolvedor. O capítulo 4 pode ser baixado em &lt;a href="http://www.theserverside.com/tt/articles/article.tss?l=RodJohnsonInterview"&gt;http://www.theserverside.com/tt/articles/article.tss?l=RodJohnsonInterview&lt;/a&gt;&lt;/span&gt;&lt;span style="font-size: 12pt; font-family: Arial;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: Arial;"&gt;&lt;br /&gt;Neste capítulo 4, sob o título Exception handling – Checked or Unchecked Exceptions, ele tece importantes considerações e diz que o uso de checked exceptions acarreta alguns problemas tais como:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;  &lt;ul style="margin-top: 0cm;" type="disc"&gt;&lt;li class="MsoNormal" style=""&gt;&lt;span style="font-family: Arial;"&gt;Aumentar o tamanho do código,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;&lt;span style="font-family: Arial;"&gt;Torna o código mais difícil de ler&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;&lt;span style="font-family: Arial;"&gt;Incentivar o empacotamento e relançamento de      exceções que deveriam interromper o processamento&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;&lt;span style="font-family: Arial;"&gt;Fragilizar a assinatura dos métodos&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;&lt;span style="font-family: Arial;"&gt;Não funcionar bem com interfaces&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;  &lt;span style="font-size: 12pt; font-family: Arial;"&gt;O Rod é menos radical que o Bruce e acredita que há lugar para as checked exceptions. Porém não recomenda seu uso, a menos que se possa lidar com o problema dentro da lógica do sistema, como por exemplo um limite de gastos excedido em uma dada compra. Na dúvida sobre o que usar, sugere optar por unchecked exceptions. O seu framework Spring provê uma infra-estrutura baseada em unchecked exceptions para encapsular as inadequadas checked exceptions do JDBC e de versões antigas do Hibernate. Mas em uma das famosas brigas sobre este assunto &lt;a href="http://www.theserverside.com/news/thread.tss?thread_id=21538#96817"&gt;nas discussões do TheServerSide&lt;/a&gt;, comentando a entrevista do James Gosling,&lt;/span&gt;&lt;span style="font-family: Arial;"&gt; ele escreveu:&lt;/span&gt;&lt;span style="font-family: Arial;"&gt;&lt;br /&gt;&lt;/span&gt;  &lt;p class="MsoNormal" style="margin-left: 35.4pt;"&gt;&lt;span style="font-family: Arial;"&gt;“I actually like the fact that Java has checked exceptions. I use them to enforce callers to react to recoverable conditions. I think I would miss that in C#. It's just that I see an important role for unchecked exceptions as well.”&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;br /&gt; &lt;span style="font-size: 12pt; font-family: Arial;"&gt;Acho que devo citar também a entrevista do Anders Hejlsberg na artima com o título &lt;a href="http://www.artima.com/intv/handcuffsP.html"&gt;The Trouble with Checked Exceptions&lt;/a&gt; onde ele defende porque o C# não adotou as checked exceptions.&lt;br /&gt;&lt;/span&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-family: Arial;"&gt;Repito que durante muitos anos usei as checked exceptions sem maiores questionamentos. Talvez alguns de vocês ainda tenham a mesma posição. Mas é sintomático o que vem acontecendo:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;    &lt;ul style="margin-top: 0cm;" type="disc"&gt;&lt;li class="MsoNormal" style=""&gt;&lt;span style="font-family: Arial;"&gt;No EJB até a versão 2.1, era necessário capturar      ou lançar um monte de exceções sendo algumas delas de pouco significado. Definir      o local para fazer o tratamento correto das exceções era uma das      dificuldades de usar os já complicadíssimos EJBs. Havia também uma      diferença de conceito entre as exceções unchecked e checked em que nestas      últimas, o container não fazia roll back e era feito o commit da transação      com erro. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;&lt;span style="font-family: Arial;"&gt;Com o modelo de POJOs do EJB 3.0 estas questões      ficaram mais simples. E das 16 exceções do EJB 3.0, 11 são do tipo      unchecked &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;&lt;span style="font-family: Arial;"&gt;No EJB 3.0 apareceu a anotação @ApplicationException      para indicar a política de roll back para exceção a ser lançada por erro      de lógica do negócio em contraposição aos erros do sistema. Antigamente isto      era papel das checked exceptions.&lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;&lt;span style="font-family: Arial;"&gt;No Hibernate anterior a versão 3.0, todas as      exceções lançadas eram checked. Isto foi feito influenciado pelo JDBC que      somente lança este tipo. Mas exceções em operações de bases de dados em      geral são erros fatais e assim muita gente fazia como o Spring e as empacotava      como subtipo de RuntimeException que é unchecked. O Hibernate &lt;span style=""&gt; &lt;/span&gt;da versão 3.0 em diante só lança      unchecked exceptions.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;&lt;span style="font-family: Arial;"&gt;No JPA as exceções são todas unchecked      possivelmente por influência da turma do Hibernate, do Toplink e do JDO que      também são unchecked&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;&lt;span style="font-family: Arial;"&gt;A API do JSF se baseia em unchecked exceptions      enquanto outras mais antigas como Servlets e JMS, só tem checked exceptions&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;&lt;span style="font-family: Arial;"&gt;A API java.io, seguindo o mau modelo do JDBC,      usa checked exceptions enquanto o java.nio usa unchecked&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;&lt;span style="font-family: Arial;"&gt;O JDBC 4.0 que saiu com o Java 6 não mudou o      conceito de checked para unchecked como muitos gostariam. Mas deu uma bela      repaginada nas suas exceções permitindo mostrar erros um pouco mais      significativos.&lt;/span&gt;&lt;span style="font-family: Arial;"&gt;&lt;o:p&gt;&lt;br /&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;      &lt;p class="MsoNormal"&gt;&lt;span style="font-family: Arial;"&gt;Acho que poderia encontrar mais exemplos. A lista acima mostra que o entendimento das exceções mudou, mesmo dentro da Sun. No mínimo se pode dizer que antigamente se abusava do uso das checked exceptions e que agora as novas APIs as usam menos ou usam melhor como no JDBC 4.0 e no EJB 3.0.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Arial;"&gt;Se até a Sun está rediscutindo o uso das exceptions, então é claro que &lt;/span&gt;&lt;span style="font-size: 12pt; font-family: Arial;"&gt;definir uma política coerente para tratamento das exceções deve ser motivo de discussão dentro das equipes de projeto para que esta importante facilidade do Java seja bem usada.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="font-size: 12pt; font-family: Arial;"&gt;Sem regras claras, programadores simples mortais como nós, às vezes perdem a paciência com tanta exceção para tratar e acabam esquecendo de gravar em log. Isto é tão ruim que o &lt;a href="http://www.kumpera.net/blog/"&gt;Rodrigo Kumpera&lt;/a&gt;, cansado de tanto encontrar esta falha por aí, a denominou de Exception hidding e a incluiu no excelente texto &lt;a href="http://www.kumpera.net/blog/index.php/2007/03/07/metrica-definitiva-da-qualidade-de-um-projeto-j2ee/#comments"&gt;Métrica definitiva da qualidade de um projeto J2EE&lt;/a&gt;. &lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;  &lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-family: Arial;"&gt;As &lt;a href="http://blog.caelum.com.br/2006/10/07/lidando-com-exceptions/"&gt;recomendações do Fabio Kung&lt;/a&gt; são um ótimo ponto de partida para as equipes que ainda não criaram suas próprias regras. E quem usa regras antigas, deve fazer como a Sun e o Gavin King do Hibernate e reavaliar como elas são aplicadas atualmente na prática.&lt;o:p&gt;&lt;br /&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;span style="font-size: 12pt; font-family: Arial;"&gt;No próximo blog vamos ver o que escrevem por aí sobre a remoção das checked exceptions do Java.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/33115344-3642328585188686411?l=lucabastos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lucabastos.blogspot.com/feeds/3642328585188686411/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=33115344&amp;postID=3642328585188686411' title='3 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/33115344/posts/default/3642328585188686411'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/33115344/posts/default/3642328585188686411'/><link rel='alternate' type='text/html' href='http://lucabastos.blogspot.com/2007/06/tratamento-de-excees-parte-2-mudanas-no.html' title='Tratamento de exceções - Parte 2 – Mudanças no conceito de uso das exceções'/><author><name>Luca Bastos</name><uri>http://www.blogger.com/profile/08105913026457778167</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp0.blogger.com/_6-xLHhv2Rak/RmSuCS29zZI/AAAAAAAAABc/IJF9iNPU3ug/s72-c/105_10b.gif' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-33115344.post-4641209546555025916</id><published>2007-06-04T17:53:00.000-03:00</published><updated>2007-06-04T21:17:32.736-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Exceptions'/><title type='text'>Tratamento de exceções - Parte 1 – Um pouco de história</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_6-xLHhv2Rak/RmR8i28pIKI/AAAAAAAAAA8/xvL26ALEpDw/s1600-h/debugging.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://bp2.blogger.com/_6-xLHhv2Rak/RmR8i28pIKI/AAAAAAAAAA8/xvL26ALEpDw/s200/debugging.jpg" alt="" id="BLOGGER_PHOTO_ID_5072316018633285794" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-size: 12pt; font-family: Arial;"&gt;Um pouco da história do porque das exceções do Java serem como são.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:Arial;font-size:12;"  &gt;Conta o &lt;a href="http://www.research.att.com/%7Ebs/dne.html"&gt;Bjarne Stroutrup&lt;/a&gt;, &lt;/span&gt;&lt;span style=";font-family:Arial;font-size:12;"  &gt;que lá pelos idos de 1984 a 1986, durante o projeto do C++, foi considerada a possibilidade de incluir o tratamento de exceções logo na primeira versão. Isto foi adiado por medo da complexidade adicional que acarretaria à linguagem e também para dar mais tempo ao estudo das suas conseqüências no projeto e na implementação. A avaliação do mecanismo de exceções se estendeu de 1984 até 1989. Foi a primeira facilidade do C++ aberta para discussão pública. &lt;/span&gt;&lt;span style="font-family:Arial;"&gt;O &lt;a href="http://www.awprofessional.com/authors/bio.asp?a=50d7e43c-64d1-4200-916c-c8b29e712877&amp;rl=1"&gt;Andrew Koenig&lt;/a&gt;, o tal do famoso livro “C Traps and Pitfalls”, e o próprio Bjarne Stroutrup, se dedicaram muito a esta causa. Mas muitos outros tiveram papel importante nas complexas discussões. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-family:Arial;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;span style=";font-family:Arial;font-size:12;"  &gt;Para sentirem o tom das argumentações, o professor &lt;/span&gt;&lt;span style=";font-family:Arial;font-size:12;"  &gt;&lt;a href="http://www.cs.dartmouth.edu/%7Edoug/"&gt;Doug McIlroy&lt;/a&gt;&lt;/span&gt;&lt;span style=";font-family:Arial;font-size:12;"  &gt;, um dos gênios do &lt;a href="http://en.wikipedia.org/wiki/Bell_Labs"&gt;Bell Labs&lt;/a&gt;, &lt;/span&gt;&lt;span style="font-family:Arial;"&gt;se colocou contra a inclusão dizendo que os programadores escreveriam código menos confiável lançando exceções ao invés de entender a causa do problema [1]. O Bjarne contra argumentava, que nenhuma facilidade de linguagem consegueria impedir a escrita de código ruim. A primeira implementação de C++ com exceções em um compilador de uso geral só apareceu em 1992. Uma das premissas básicas era a de que elas deveriam ser usadas somente para tratamento de erros [2]. Outra premissa era que não deveria haver a intenção de fazer com que cada função fosse tolerante a falha.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="font-family:Arial;"&gt;O desenvolvimento do Java começou no início de 1991 a partir de idéias do Bill Joy para uma nova linguagem. Em uma reunião em Aspen, no Colorado, Bill Joy, James Gosling, Mike Sheradin, Patrick Naughton e outros, deram início ao projeto Stealth, que mais tarde se chamou projeto Green. A insatisfação com o uso de C++ no projeto, levou a criação da linguagem que mais tarde se chamou de Java [3].&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="font-family:Arial;"&gt;Como disse, o C++ já tinha tratamento de exceções desde 1992. Só &lt;/span&gt;&lt;span style="font-family:Arial;"&gt;que ainda não era muito usado por ser opcional. &lt;/span&gt;&lt;span style="font-family:Arial;"&gt;E&lt;/span&gt;&lt;span style="font-family:Arial;"&gt;ra importante para o Java ser lançado com tratamento de exceções pois precisava mostrar vantagens sobre as linguagens existentes, ao menos em termos de marketing.&lt;/span&gt;&lt;/p&gt;    &lt;p class="MsoNormal"&gt;&lt;span style="font-family:Arial;"&gt;&lt;o:p&gt;E&lt;/o:p&gt;m março de 1995 apareceu o Java 1.02a, que foi a primeira versão alfa tornada pública. Durante os muitos anos dos projetos que redundaram no Java, muitas facilidades de outras linguagens foram estudadas. Fora o C++ e poucas outras linguagens, o tratamento de erros &lt;/span&gt;&lt;span style="font-family:Arial;"&gt;na época, &lt;/span&gt;&lt;span style="font-family:Arial;"&gt;era feito com as funções retornando -1 ou pelo famigerado &lt;i&gt;on error goto&lt;/i&gt; do Basic.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="font-family:Arial;"&gt;O Java foi lançado contemplando o tratamento de exceções tal como é hoje, o que na ocasião foi divulgado como uma das suas grandes vantagens.&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;        &lt;p class="MsoNormal"&gt;&lt;span style="font-family:Arial;"&gt;No Java o tratamento das exceções de jeito semelhante às outras linguagens é feito por classes que estendem &lt;i&gt;RuntimeException&lt;/i&gt; ou &lt;i&gt;Error&lt;/i&gt;. São as chamadas &lt;i&gt;unchecked exceptions&lt;/i&gt;.&lt;o:p&gt;&lt;br /&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="font-family:Arial;"&gt;&lt;o:p&gt;&lt;/o:p&gt;Mas o Java apareceu também com um conceito novo chamado de &lt;i&gt;checked exceptions&lt;/i&gt;. É um conjunto especial de exceções estendendo a classe &lt;i&gt;Exception&lt;/i&gt;. São checadas em tempo de compilação para conferir se o programador tratou a condição excepcional dentro de uma seqüência &lt;span style="font-style: italic;"&gt;try-catch-finally&lt;/span&gt; ou a lançou para cima para ser tratada por quem chamou o método.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="font-family:Arial;"&gt;Como disse o James Gosling no livro &lt;a href="http://java.sun.com/docs/books/javaprog/"&gt;The Java Programming Language de 1996&lt;/a&gt;: "As &lt;i&gt;checked exceptions&lt;/i&gt; forçam o programador considerar o que fazer com os erros onde eles ocorrem no código". Segundo ele, isto seria muito bom porque as exceções seriam notificadas em tempo de compilação ao invés de ocorrerem em tempo de execução como ocorre com as &lt;i&gt;unchecked exceptions&lt;/i&gt;.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="font-family:Arial;"&gt;Forçar o programador a tratar as &lt;i&gt;checked exceptions&lt;/i&gt; foi resposta do Java ao fato de que o conceito de exceções existia opcionalmente no C++ e era pouco usado, talvez porque, na maior parte dos casos só eram capturadas em tempo de execução. &lt;o:p&gt;&lt;br /&gt;&lt;/o:p&gt;&lt;br /&gt;Na verdade, o modo de tratar exceções do Java não fez tanto sucesso como o James Gosling esperava porque poucas linguagens adotaram coisas semelhantes e as que o fizeram, usaram condições mais relaxadas. Exatamente como no Java, eu particularmente não tenho notícia de nenhuma outra linguagem. Só para lembrar, o C# não tem as checked exceptions.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p class="MsoNormal"&gt;&lt;span style="font-family:Arial;"&gt;Finalizo a história do tratamento de exceções dizendo que quando aprendi Java em 1996, achei muito boa esta novidade do tratamento de exceções e apesar de ter achado um pouco complicado, gostei muito das checked exceptions.&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;br /&gt;&lt;span style="font-family:Arial;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;      &lt;p class="MsoNormal"&gt;&lt;span style="font-family:Arial;"&gt;&lt;o:p&gt;[1&lt;/o:p&gt;] O Doug foi um dos 6 pioneiros do Multics, um projeto extremamente ousado da Bell Labs e anterior ao Unix. Aliás, o nome Unix veio justamente de uma piada do Brian Kernighan em relação ao Multics:&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial;"&gt;Unix = "One of whatever Multics was many of" ou "Multics without balls". Ver: &lt;a href="http://www.multicians.org/unix.html"&gt;http://www.multicians.org/unix.html&lt;/a&gt;&lt;o:p&gt;&lt;br /&gt;&lt;/o:p&gt;&lt;br /&gt;[2] O livro do Bjarne Stroutrup, &lt;a href="http://www.research.att.com/%7Ebs/2nd.html"&gt;C++ Programming Language 2nd Ed de 1991&lt;/a&gt;, descreve as exceções mais diz que não há nenhuma implementação disponível. Lá ele enfatiza que sempre que possível se deve manter fidelidade ao princípio: “exception handling is error handling”.&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;  &lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="font-family:Arial;"&gt;[3] &lt;a href="http://ei.cs.vt.edu/book/chap1/java_hist.html"&gt;History of the World Wide Web - 1.4. History of Java&lt;/a&gt;&lt;/span&gt;&lt;span  lang="EN-US" style="font-family:Arial;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;br /&gt;&lt;span style="font-family:Arial;"&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/33115344-4641209546555025916?l=lucabastos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lucabastos.blogspot.com/feeds/4641209546555025916/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=33115344&amp;postID=4641209546555025916' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/33115344/posts/default/4641209546555025916'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/33115344/posts/default/4641209546555025916'/><link rel='alternate' type='text/html' href='http://lucabastos.blogspot.com/2007/06/tratamento-de-excees-parte-1-um-pouco.html' title='Tratamento de exceções - Parte 1 – Um pouco de história'/><author><name>Luca Bastos</name><uri>http://www.blogger.com/profile/08105913026457778167</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_6-xLHhv2Rak/RmR8i28pIKI/AAAAAAAAAA8/xvL26ALEpDw/s72-c/debugging.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-33115344.post-4626719451855675701</id><published>2007-06-04T17:06:00.000-03:00</published><updated>2007-06-04T17:52:39.146-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Exceptions'/><title type='text'>Tratamento das exceções no Java</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_6-xLHhv2Rak/RmR4G28pIII/AAAAAAAAAAs/Kt6Ejs5GkvI/s1600-h/Java_train_crash.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://bp2.blogger.com/_6-xLHhv2Rak/RmR4G28pIII/AAAAAAAAAAs/Kt6Ejs5GkvI/s200/Java_train_crash.jpg" alt="" id="BLOGGER_PHOTO_ID_5072311139550437506" border="0" /&gt;&lt;/a&gt;&lt;br /&gt; &lt;p class="MsoNormal"&gt;&lt;span style="font-family:Arial;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-family:Arial;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="font-family:Arial;"&gt;&lt;span style="font-weight: bold;"&gt;Trilogia sobre o tratamento das exceções no Java&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;  &lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Arial;"&gt;Trilogia, s.m. = Poema dramático composto de 3 tragédias apresentadas nos jogos solenes da Grécia antiga. Também conjunto de três obras ligadas entre si por um tema comum.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;    &lt;ul style="margin-top: 0cm;" type="disc"&gt;&lt;li class="MsoNormal" style=""&gt;&lt;span style="font-family:Arial;"&gt;Parte 1 – Um pouco de história&lt;br /&gt;   Um pouco da história do porque das exceções do Java serem como são.&lt;br /&gt;    &lt;!--[if !supportLineBreakNewLine]--&gt;&lt;br /&gt;    &lt;!--[endif]--&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;&lt;span style="font-family:Arial;"&gt;Parte 2&lt;/span&gt;&lt;span style="font-family:Arial;"&gt; – &lt;/span&gt;&lt;span style="font-family:Arial;"&gt;Mudanças no conceito de uso das exceções&lt;br /&gt;   Tendência mais moderna de tratar as exceções no Java.&lt;br /&gt;    &lt;!--[if !supportLineBreakNewLine]--&gt;&lt;br /&gt;    &lt;!--[endif]--&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;&lt;span style="font-family:Arial;"&gt;Parte 3&lt;/span&gt;&lt;span style="font-family:Arial;"&gt; – &lt;/span&gt;&lt;span style="font-family:Arial;"&gt;Discussão sobre a remoção das checked      exceptions do Java&lt;br /&gt;   Comentários sobre o blog do Gafter&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-family:Arial;"&gt;&lt;span style="font-family: arial;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: arial;font-family:verdana;font-size:85%;"  &gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/33115344-4626719451855675701?l=lucabastos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lucabastos.blogspot.com/feeds/4626719451855675701/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=33115344&amp;postID=4626719451855675701' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/33115344/posts/default/4626719451855675701'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/33115344/posts/default/4626719451855675701'/><link rel='alternate' type='text/html' href='http://lucabastos.blogspot.com/2007/06/tratamento-das-excees-no-java.html' title='Tratamento das exceções no Java'/><author><name>Luca Bastos</name><uri>http://www.blogger.com/profile/08105913026457778167</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_6-xLHhv2Rak/RmR4G28pIII/AAAAAAAAAAs/Kt6Ejs5GkvI/s72-c/Java_train_crash.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-33115344.post-5870277852477267870</id><published>2007-05-31T01:45:00.000-03:00</published><updated>2007-05-31T02:50:43.636-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Google'/><title type='text'>Ecosistema do Google se expandindo</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_6-xLHhv2Rak/Rl5TTW8pIHI/AAAAAAAAAAk/-bjfV3gVzYo/s1600-h/gears_sm.png"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://bp2.blogger.com/_6-xLHhv2Rak/Rl5TTW8pIHI/AAAAAAAAAAk/-bjfV3gVzYo/s200/gears_sm.png" alt="" id="BLOGGER_PHOTO_ID_5070581822508310642" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;Só dá o Google. Comecei a usar o Google praticamente quando ele começou e virou logo sinônimo de busca. Agora já uso um monte de coisas "Google" como Search, Blogger, Orkut, Groups, Maps, Reader, Analytics, Images, Video, Labs, Code, Calendar, alguns que baixei, mas não uso, como o GWT, Picasa e o Desktop e os que ainda não experimentei, entre eles o Docs &amp; Spreadsheets. Isto sem falar no monte de APIs para Search, Maps, AdWords, AdSense, GData, etc..&lt;/span&gt;&lt;span id="articleBody"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;&lt;br /&gt;Hoje acontece o Google Developer Day e eles estão lançando mais uma novidade: &lt;a href="http://gears.google.com/"&gt;Gears&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;O que vem a ser isto? Tirado do &lt;a href="http://code.google.com/support/bin/answer.py?answer=69197&amp;topic=11629"&gt;Developer Knowledge Base&lt;/a&gt; e de &lt;a href="http://geekbeers.blogspot.com/2007/05/google-gears-offline-ajax.html"&gt;Google Gears - Offline Ajax&lt;/a&gt;:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;&lt;br /&gt;O Google Gears é uma extensão open source com licença BSD para o browser&lt;span style="font-family: arial;"&gt;&lt;/span&gt;&lt;span style="font-family: arial;"&gt;,&lt;/span&gt; que permite aos desenvolvedores criar aplicações web que podem ser executadas offline. O Gears provê 3 facilidades principais:&lt;br /&gt;&lt;/span&gt;&lt;ul&gt;&lt;li style="font-family: arial;"&gt;Um servidor local que adiciona um cache especial ao browser e que serve recursos tais como HTML, JavaScript, imagens, etc.. O framework sincroniza com o servidor de tempos em tempos permitindo alternar o trabalho nos modos online/offline;&lt;br /&gt;&lt;/li&gt;&lt;li style="font-family: arial;"&gt;Um banco de dados (SQLite) para acessar e guardar dados a partir do Browser;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family: arial;"&gt;Um pool de work threads que provê uma API thread-like não bloqueante para o JavaScript possibilitando as aplicações web responder melhor por efetuar operações mais custosas em background.&lt;/span&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-family: arial;"&gt;Ainda tem a ferramenta de banco de dados&lt;span style="font-family: arial;"&gt; &lt;/span&gt;dbquery.html&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: arial;"&gt;Brinde: capacidade full text search usando SQLite e o projeto open source "FTS2" do &lt;/span&gt;&lt;span style="font-family: arial;"&gt;Google&lt;/span&gt;&lt;span style="font-family: arial;"&gt;. Isto suporta milhões de documentos.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;&lt;br /&gt;Segundo eles, ainda é um lançamento do tipo early-access para desenvolvedores e não deve ser usado em produção.&lt;br /&gt;&lt;br /&gt;O que pensar? O mesmo que eu pensei para o &lt;a href="http://www.microsoft.com/surface/"&gt;Microsoft Surface&lt;/a&gt;&lt;/span&gt;&lt;span style="font-family: arial;"&gt; também lançado hoje e que é impublicável.&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/33115344-5870277852477267870?l=lucabastos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lucabastos.blogspot.com/feeds/5870277852477267870/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=33115344&amp;postID=5870277852477267870' title='3 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/33115344/posts/default/5870277852477267870'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/33115344/posts/default/5870277852477267870'/><link rel='alternate' type='text/html' href='http://lucabastos.blogspot.com/2007/05/ecosistema-do-google-se-expandindo.html' title='Ecosistema do Google se expandindo'/><author><name>Luca Bastos</name><uri>http://www.blogger.com/profile/08105913026457778167</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_6-xLHhv2Rak/Rl5TTW8pIHI/AAAAAAAAAAk/-bjfV3gVzYo/s72-c/gears_sm.png' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-33115344.post-1683635432815892841</id><published>2007-05-29T15:04:00.000-03:00</published><updated>2007-05-29T15:45:30.265-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Abobrinhas'/><title type='text'>'If Java didn't exist, would .NET?'</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_6-xLHhv2Rak/Rlxwgm8pIGI/AAAAAAAAAAc/7x-MyYvILHU/s1600-h/thepowerofevents.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://bp1.blogger.com/_6-xLHhv2Rak/Rlxwgm8pIGI/AAAAAAAAAAc/7x-MyYvILHU/s200/thepowerofevents.jpg" alt="" id="BLOGGER_PHOTO_ID_5070050986025361506" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Pois é, hoje está todo mundo comentando a frase com que o &lt;a href="http://colmsmyth.blogspot.com/"&gt;Colm Smyth&lt;/a&gt; encerrou seu &lt;/span&gt;&lt;a style="font-family: arial;" href="http://colmsmyth.blogspot.com/2007/05/sun-and-bea-no-good-deed-goes.html"&gt;blog&lt;/a&gt;&lt;span style="font-family:arial;"&gt;. Engraçado que o assunto do blog dele nem é a Microsoft. Ele fala da BEA e também  não fala do que todo mundo está falando hoje que é o &lt;/span&gt;&lt;a style="font-family: arial;" href="http://www.infoworld.com/article/07/05/28/bea-events_1.html"&gt;lançamento&lt;/a&gt;&lt;span style="font-family:arial;"&gt; do &lt;/span&gt;&lt;a style="font-family: arial;" href="http://www.bea.com/framework.jsp?CNT=overview.htm&amp;amp;FP=/content/products/weblogic/event_server/"&gt;servidor de eventos da BEA&lt;/a&gt;&lt;span style="font-family:arial;"&gt;.  &lt;/span&gt;  &lt;span style="font-family:arial;"&gt;&lt;br /&gt;&lt;br /&gt;Como eu acho que as arquiteturas baseadas em eventos serão as próximas bolachas do pacote, para mim o lançamento de um servidor de eventos é muito mais importante do que a discussão do Colm que nem recomendo tanto assim. Mas inegavelmente a frase dele criou polêmicas.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;'If Ford didn't exist, would Chevrolet?'&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;'Quem nasceu antes o ovo ou a galinha'&lt;/span&gt;  &lt;span style="font-family:arial;"&gt;&lt;br /&gt;&lt;br /&gt;Por aí vai.  Onde eu quero chegar?&lt;/span&gt;  &lt;span style="font-family:arial;"&gt;Pois é, muito mais longe do que vocês imaginam.&lt;br /&gt;&lt;br /&gt;Estou escrevendo me lembrando como era produtivo meu dia sem blogs para ler. Alguém tem a receita? Preciso produzir mais e ler menos. Se alguém souber de um tratamento eficaz me avise. Pode ser até com injeção na veia. Só não posso é ficar sem Internet como fiquei em Paraty porque me dá crises de abstinência e desando a ler livros feito um desesperado.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Para os viciados como eu, aviso que já tenho mais alguns posts no forno com assuntos com menos abobrinhas.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/33115344-1683635432815892841?l=lucabastos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lucabastos.blogspot.com/feeds/1683635432815892841/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=33115344&amp;postID=1683635432815892841' title='3 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/33115344/posts/default/1683635432815892841'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/33115344/posts/default/1683635432815892841'/><link rel='alternate' type='text/html' href='http://lucabastos.blogspot.com/2007/05/if-java-didnt-exist-would-net.html' title='&apos;If Java didn&apos;t exist, would .NET?&apos;'/><author><name>Luca Bastos</name><uri>http://www.blogger.com/profile/08105913026457778167</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp1.blogger.com/_6-xLHhv2Rak/Rlxwgm8pIGI/AAAAAAAAAAc/7x-MyYvILHU/s72-c/thepowerofevents.jpg' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-33115344.post-1951189097467038289</id><published>2007-05-11T22:36:00.000-03:00</published><updated>2007-05-15T01:33:12.642-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linguagens funcionais'/><title type='text'>Linguagens funcionais - parte 2</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_6-xLHhv2Rak/RkXJFkmZ-xI/AAAAAAAAAAM/Y7Pwf7fnqAo/s1600-h/Lambda-shuttle-dotNETJava.GIF"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://bp2.blogger.com/_6-xLHhv2Rak/RkXJFkmZ-xI/AAAAAAAAAAM/Y7Pwf7fnqAo/s200/Lambda-shuttle-dotNETJava.GIF" alt="" id="BLOGGER_PHOTO_ID_5063674453609282322" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Vou viajar ao mundo dos betas .NET. Vale a pena porque as novidades parecem interessantes. Vou rumo ao desconhecido porque tenho pouca vivência com este outro mundo. Comentários corrigind&lt;span style="font-family:arial;"&gt;o algo que não entendi direito serão muito bem vindos. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:arial;font-size:12;"  &gt;&lt;span style="font-size:100%;"&gt;Siglas, quando acabo de aprender uma surge mais um monte. Algumas deixo de lado até que um dia fico curioso e procuro meu amigo google como fiz hoje. Queria saber o que é este tal de LINQ que a turma do .NET diz que é o futuro em termos de acesso de dados. Vou colocar aqui algumas coisas que aprendi navegando no google.&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;p style="font-family: arial;" class="MsoNormal"&gt;&lt;a href="http://msdn2.microsoft.com/pt-br/netframework/aa904594.aspx"&gt;&lt;span style="font-size:100%;"&gt;L&lt;/span&gt;INQ&lt;/a&gt; = &lt;span style="font-weight: bold;"&gt;L&lt;/span&gt;anguage &lt;span style="font-weight: bold;"&gt;IN&lt;/span&gt;tegrated &lt;span style="font-weight: bold;"&gt;Q&lt;/span&gt;uery&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p style="font-family: arial;" class="MsoNormal"&gt;&lt;o:p&gt;É uma nova extensão para as próximas versões das linguagens da plataforma .NET também em sua próxima versão. Por enquanto só pode ser experimentada baixando versões beta do Visual Studio (orca) e da plataforma .NET. Foi concebida para simplificar consultas a dados na memória &lt;/o:p&gt;em coleções &lt;o:p&gt;como arrays e listas,  dados armazenados em bases de dados, dados em documentos XML, dados em arquivos ou em qualquer outra fonte de dados. Atende as questões de mapeamento O/R fazendo com que operações de consultas, tais como instruções SQL, façam parte da linguagem. O trocadilho do nome é para aparecer como o link que integra as consulta aos dados e as linguagens de propósito geral.&lt;br /&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;p style="font-family: arial;" class="MsoNormal"&gt;&lt;o:p&gt;Algumas linguagens antigas como Clipper e FoxPro &lt;/o:p&gt;já tinham o acesso às bases de dados de forma embutida na linguagem.&lt;o:p&gt; Esta facilidade acabou quando se passou a adotar o modelo cliente/servidor com as bases de dados acessadas via SQL. Pelo menos no que tange ao acesso às bases de dados, o futuro deixará a programação .NET de um jeito semelhante aos velhos Clipper e FoxPro. É claro que o LINQ vai muito mais além porque acessa diferentes fontes de dados usando os mesmos conceitos e é isto que é a novidade.&lt;br /&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;p style="font-family: arial;" class="MsoNormal"&gt;&lt;o:p&gt;Em termos de inclusão na arquitetura .NET, o LINQ se posiciona como uma camada entre o programa e seus dados. As ferramentas do LINQ se integram na plataforma .NET como um conjunto de extensões onde cada uma tem um sabor para cada tipo de fonte de dados: LINQ para objetos, LINQ para SQL, LINQ para XML, etc.&lt;/o:p&gt;&lt;/p&gt;&lt;p style="font-family: arial;" class="MsoNormal"&gt;&lt;o:p&gt;Trata-se de mais um tentativa da Microsoft de minimizar o problema de descasamento de impedância entre as linguagens de programação e as bases de dados. Não é a &lt;/o:p&gt;sua &lt;o:p&gt;primeira tentativa e este projeto também não é tão novo assim. Antes parecia que o caminho passaria pelo &lt;a href="http://msdn2.microsoft.com/en-us/library/ms971512.aspx"&gt;ObjectSpaces&lt;/a&gt;. Agora surge o LINQ oriundo do projeto &lt;a href="http://research.microsoft.com/Comega/"&gt;&lt;span style="font-family:arial;"&gt;C&lt;/span&gt;&lt;/a&gt;&lt;/o:p&gt;&lt;a href="http://research.microsoft.com/Comega/"&gt;&lt;span style="font-family:arial;"&gt;&lt;span style="font-family:arial;"&gt;ω&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family:arial;"&gt;&lt;span style="font-family:arial;"&gt;.&lt;/span&gt;&lt;/span&gt;&lt;o:p&gt;&lt;span style="font-family:arial;"&gt; Não será na primeira versão do LINQ que todos os problemas serão resolvidos como se pode ler no PDF &lt;a href="http://research.microsoft.com/%7Eemeijer/Papers/LINQ20.pdf"&gt;LINQ 2.0: Democratizing the Cloud&lt;/a&gt;. Mas é sobre a versão 1.0 ainda a ser lançada que escrevo.&lt;/span&gt;&lt;/o:p&gt;&lt;span style="font-family:arial;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;span style=";font-family:arial;font-size:100%;"  lang="EN-US" &gt;Vamos comparar um Alo Mundo bem simples atual e como será usando o LINQ. De cara alerto que o exemplo é simples demais mas acho que serve para mostrar o jeitão da coisa:&lt;br /&gt;1. Alo Mundo Velho como é hoje:&lt;/span&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;using System;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(127, 0, 85);"&gt;&lt;b&gt;static class &lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;AloMundoVelho &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;  &lt;/span&gt;&lt;span style="color: rgb(127, 0, 85);"&gt;&lt;b&gt;static &lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(127, 0, 85);"&gt;&lt;b&gt;void &lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Main&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;() {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;    &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;string&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;[] &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;words = &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;{ &lt;/span&gt;&lt;span style="color: rgb(42, 0, 255);"&gt;"Alo"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;, &lt;/span&gt;&lt;span style="color: rgb(42, 0, 255);"&gt;"Maravilhoso"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;, &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;                       &lt;/span&gt;&lt;span style="color: rgb(42, 0, 255);"&gt;"Mundo"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;, &lt;/span&gt;&lt;span style="color: rgb(42, 0, 255);"&gt;"Velho"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;, &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;                       &lt;/span&gt;&lt;span style="color: rgb(42, 0, 255);"&gt;"Microsoft" &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;}&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;    &lt;/span&gt;&lt;span style="color: rgb(63, 127, 95);"&gt;// Pega palavras ate 5 letras e imprime&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;    &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;foreach &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;string word in words&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;) {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;      &lt;/span&gt;&lt;span style="color: rgb(127, 0, 85);"&gt;&lt;b&gt;if &lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;word.Length &amp;lt;= &lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;5&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;                &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Console.WriteLine&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;word&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;)&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;    &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;}     &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;  &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;&lt;/span&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;span style=";font-family:arial;font-size:100%;"  lang="EN-US" &gt;&lt;br /&gt;2. Alo Mundo Linq quando puder usar o LINQ:&lt;/span&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;using System;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;using System.Linq;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(127, 0, 85);"&gt;&lt;b&gt;static class &lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;AloMundo &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;  &lt;/span&gt;&lt;span style="color: rgb(127, 0, 85);"&gt;&lt;b&gt;static &lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(127, 0, 85);"&gt;&lt;b&gt;void &lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Main&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;() {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;    &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;string&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;[] &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;words = &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;{ &lt;/span&gt;&lt;span style="color: rgb(42, 0, 255);"&gt;"Alo"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;, &lt;/span&gt;&lt;span style="color: rgb(42, 0, 255);"&gt;"Maravilhoso"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;, &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;                       &lt;/span&gt;&lt;span style="color: rgb(42, 0, 255);"&gt;"Mundo"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;, &lt;/span&gt;&lt;span style="color: rgb(42, 0, 255);"&gt;"Linq"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;, &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;                       &lt;/span&gt;&lt;span style="color: rgb(42, 0, 255);"&gt;"Microsoft" &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;}&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;    &lt;/span&gt;&lt;span style="color: rgb(63, 127, 95);"&gt;// Pega palavras ate 5 letras&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;    &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;var shortWords =&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;                &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;from word in words&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;                &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;where word.Length &amp;lt;= &lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;5&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;                &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;select word;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;    &lt;/span&gt;&lt;span style="color: rgb(63, 127, 95);"&gt;// Imprime&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;    &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;foreach &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;var word in shortWords&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;      &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Console.WriteLine&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;word&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;)&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;  &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;&lt;/span&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;span style=";font-family:arial;font-size:100%;"  lang="EN-US" &gt;Mostrei o uso do LINQ acessando um array na memória do mesmo jeito que faria se fosse uma base de dados ou um XML.Por ser &lt;/span&gt;&lt;span style=";font-family:arial;font-size:100%;"  lang="EN-US" &gt;muito simplório, &lt;/span&gt;&lt;span style=";font-family:arial;font-size:100%;"  lang="EN-US" &gt;o uso do LINQ só complicou e isto é o que normalmente acontece quando a gente adota um padrão genérico, como o bridge, por exemplo. Na medida em que as consultas se complicarem, as vantagens do LINQ prevalecerão.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:arial;font-size:100%;"  lang="EN-US" &gt;O LINQ &lt;/span&gt;&lt;span style="font-family:arial;"&gt;define um conjunto de operadores de consultas padronizados&lt;/span&gt;&lt;span style="font-family:arial;"&gt; &lt;/span&gt;&lt;span style=";font-family:arial;font-size:100%;"  &gt;que permitirá filtrar, enumerar e criar projeções de vários tipos de collections usando a mesma sintaxe. Tais collections podem incluir arrays, classes enumeráveis, XML, datasets oriundos de bancos de dados e outras fontes de dados&lt;/span&gt;&lt;span style=";font-family:arial;font-size:100%;"  lang="EN-US" &gt;. O&lt;/span&gt;&lt;span style="font-family:arial;"&gt;s operadores &lt;/span&gt;&lt;span style=";font-family:arial;font-size:100%;"  lang="EN-US" &gt;&lt;span style="font-family:arial;"&gt;fornecem um meio uniforme de obter dados a partir de qualquer objeto que implemente a interface IEnumerable&lt;t&gt;. É assim que arrays, collections, dados relacionais e &lt;/t&gt;&lt;/span&gt;XML são potenciais fontes de dados.&lt;br /&gt;Abaixo mais um exemplo onde aparece o uso de uma expressão de consulta (query expression). Reparem na inicialização da variável local expr :&lt;/span&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;using System;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;using System.Query;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;using System.Collections.Generic;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(127, 0, 85);"&gt;&lt;b&gt;class &lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Gujeiros &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;  &lt;/span&gt;&lt;span style="color: rgb(127, 0, 85);"&gt;&lt;b&gt;static &lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(127, 0, 85);"&gt;&lt;b&gt;void &lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Main&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;() {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;    &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;string&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;[] &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;nomes = &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;{ &lt;/span&gt;&lt;span style="color: rgb(42, 0, 255);"&gt;"Paulo"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;, &lt;/span&gt;&lt;span style="color: rgb(42, 0, 255);"&gt;"Philip"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;, &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;                       &lt;/span&gt;&lt;span style="color: rgb(42, 0, 255);"&gt;"Fabio"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;, &lt;/span&gt;&lt;span style="color: rgb(42, 0, 255);"&gt;"Carlos"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;, &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;                       &lt;/span&gt;&lt;span style="color: rgb(42, 0, 255);"&gt;"Guilherme"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;, &lt;/span&gt;&lt;span style="color: rgb(42, 0, 255);"&gt;"Daniel"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;, &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;                        &lt;/span&gt;&lt;span style="color: rgb(42, 0, 255);"&gt;"Meyer"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;, &lt;/span&gt;&lt;span style="color: rgb(42, 0, 255);"&gt;"Luca"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;, &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;                       &lt;/span&gt;&lt;span style="color: rgb(42, 0, 255);"&gt;"Mauricio"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;, &lt;/span&gt;&lt;span style="color: rgb(42, 0, 255);"&gt;"Louds"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;, &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;                       &lt;/span&gt;&lt;span style="color: rgb(42, 0, 255);"&gt;"Rafael"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;, &lt;/span&gt;&lt;span style="color: rgb(42, 0, 255);"&gt;"thingol"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;}&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;    &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;IEnumerable&amp;lt;string&amp;gt; expr = &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;                          &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;from s in nomes &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;                          &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;where s.Length == &lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;5&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;                          &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;orderby s&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;                          &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;select s.ToUpper&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;()&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;    &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;foreach &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;string item in expr&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;      &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Console.WriteLine&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;item&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;)&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;  &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;span style=";font-family:arial;font-size:100%;"  lang="EN-US" &gt;Nenhum dos exemplos mostra, mas é preciso deixar claro que a solução não pretende esconder a base de dados como faz o Hibernate. E é claro também que o Java não tem nada parecido com isto.&lt;br /&gt;&lt;br /&gt;Sem o LINQ, o atual programador .NET precisa conhecer e usar linguagens como SQL, XML ou XPath, várias tecnologias e APIs como ADO.NET ou System.Xml. Isto não será  mais necessário com &lt;/span&gt;&lt;span style=";font-family:arial;font-size:100%;"  &gt;os programas escritos em linguagens que incluem o LINQ&lt;/span&gt;&lt;span style=";font-family:arial;font-size:100%;"  lang="EN-US" &gt;&lt;span style="font-family:arial;"&gt;. &lt;/span&gt;&lt;/span&gt;&lt;span style=";font-family:arial;font-size:100%;"  lang="EN-US" &gt;Para o programador menos avançado o LINQ pode ser considerado &lt;/span&gt;&lt;span style="font-family:arial;"&gt;o que se chama de &lt;a href="http://en.wikipedia.org/wiki/Syntactic_sugar"&gt;syntatic sugar&lt;/a&gt;, isto é, alguma coisa que se acrescenta sem afetar a funcionalidade e apenas torna mais "doce" o seu uso ou entendimento.&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt; &lt;span style="font-family:arial;"&gt;Realmente seu uso diminuirá bastante a codificação.&lt;br /&gt;&lt;br /&gt;O LINQ tem uma outra faceta que pode ser novidade para alguns programadores .NET: o mundo dele é strongly-typed. As vantagens imediatas do uso do LINQ é que as consultas serão verificadas em tempo de compilação e o programador ainda pode se beneficiar das sugestões do VisualStudio IntelliSense.&lt;br /&gt;&lt;br /&gt;O LINQ se posiciona um passo acima da programação declarativa comum e é aqui que começo a escrever algo que tem a ver com o título deste blog. Como disse no meu texto anterior sobre linguagens funcionais, SQL é uma linguagem funcional. Só pela a inclusão do LINQ nas linguagens do .NET, já há um toque nelas de linguagem funcional. Porém, o LINQ usado com o C# 3.0, tem mais características de linguagem funcional porque o próprio C# 3.0 inclui novidades oriundas das linguagens funcionais.&lt;br /&gt;&lt;br /&gt;Novidades do C# 3.0 (em cinza o que não é exatamente oriundo de linguagens funcionais):&lt;br /&gt;&lt;/span&gt;&lt;ul style="color: rgb(102, 102, 102);"&gt;&lt;li style="color: rgb(0, 0, 0);"&gt;&lt;span style="font-family:arial;"&gt;Local Variable Type Inference - é o var que mostrei no exemplo Alo Mundo. Exemplos de var:&lt;br /&gt;&lt;/span&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-family:arial;"&gt;var i = 5;                                      // equivalente a: int i = 5;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:arial;"&gt;var s = "isto eh uma string";      // equivalente a: string s = "isto eh uma string";&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:arial;"&gt;Extension Methods (adiciona novas funções aos métodos existentes sem editar o fonte da classe)&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:arial;"&gt;Anonymous Types&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:arial;"&gt;Objects &amp; Collections Initializers (dispensa múltiplos construtores)&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="color: rgb(0, 0, 0);font-family:arial;" &gt;Lambda Expressions&lt;br /&gt;É o cálculo lambda oriundo das linguagens funcionais e que existe no Lisp, Ruby e Phyton. Exemplo:&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);font-family:arial;" &gt;&lt;br /&gt;Func &lt;int,&gt; incremento = i &lt;/int,&gt;&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0);font-family:arial;" &gt;=&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);font-family:arial;" &gt; i + 1;&lt;br /&gt;Incremento(5);      // o resultado é 6&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="color: rgb(0, 0, 0);font-family:arial;" &gt;Expression Trees - representa Lambda Expressions como estrutura de dados&lt;/span&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="color: rgb(0, 0, 0);font-family:arial;" &gt;Mudanças como estas já motivaram algumas manifestações como:&lt;/span&gt;&lt;ul&gt;&lt;li  style="font-family:arial;"&gt;&lt;span style="font-size:100%;"&gt;&lt;a href="http://blogs.msdn.com/madst/archive/2007/01/23/is-c-becoming-a-functional-language.aspx"&gt;Is C# becoming a functional language?&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;&lt;li  style="font-family:arial;"&gt;&lt;span style="font-size:100%;"&gt;&lt;a href="http://channel9.msdn.com/ShowPost.aspx?PostID=300436"&gt;&lt;span style=""&gt;Infoq-&lt;/span&gt;Is C# becoming a functional language?&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=";font-family:arial;font-size:100%;"  &gt;&lt;a href="http://channel9.msdn.com/ShowPost.aspx?PostID=300436"&gt;Linq, Functional Vs Declarative programming&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style=";font-family:arial;font-size:100%;"  &gt;Final da história.&lt;br /&gt;&lt;br /&gt;A Microsoft está incluindo facilidades das linguagens funcionais na sua plataforma. Aliás, ela pesquisa sua própria linguagem funcional baseada em coisas do Phyton, ML, OCaml, MATLAB, Scheme e do próprio C#. O &lt;a href="http://research.microsoft.com/fsharp/fsharp.aspx"&gt;site de pesquisa da F#&lt;/a&gt; &lt;/span&gt;&lt;span style="font-family:arial;"&gt;descreve o seguinte objetivo:&lt;i&gt;          Combining the efficiency, scripting, strong typing and productivity of ML with the          stability, libraries, cross-language working and tools of .NET. &lt;/i&gt; E mais: &lt;/span&gt;&lt;span style="font-style: italic;font-family:arial;" &gt;F# is a programming language that provides the much sought-after combination of   &lt;/span&gt;&lt;b style="font-family: arial; font-style: italic;"&gt;type safety&lt;/b&gt;&lt;span style="font-style: italic;font-family:arial;" &gt;,  &lt;/span&gt;&lt;b style="font-family: arial; font-style: italic;"&gt;performance&lt;/b&gt;&lt;span style="font-style: italic;font-family:arial;" &gt; and &lt;/span&gt;&lt;b style="font-family: arial; font-style: italic;"&gt;scripting&lt;/b&gt;&lt;span style="font-style: italic;font-family:arial;" &gt;, with all the advantages of running on a high-quality,   well-supported modern runtime system.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;E a Sun? Bem, como disse antes as closures vem aí. Volta e meia alguém suspira por continuations. Já li que algumas sonhadas facilidades das linguagens funcionais seriam difíceis de incluir com segurança na JVM e continuations é uma delas.&lt;br /&gt;&lt;br /&gt;Mas se o Java está limitado, se pode procurar outros caminhos. A possibilidade de rodar scripts na JVM e ainda usar dentro do código Java, oferece algumas perspectivas de estender o Java. Na linha de pesquisa deste blog, se alguém tiver know how, tempo e coragem, vale a pena experimentar alguns engines do &lt;a href="https://scripting.dev.java.net/"&gt;scripting.dev.java.net&lt;/a&gt;. Lá tem engine para Haskell e Scheme com Jaskell e SISC respectivamente, Phyton com Jhyton, Ruby com JRuby e o Groovy.&lt;br /&gt;&lt;br /&gt;Conclusão e recomendação:&lt;br /&gt;Como disse no outro post, mudanças estão acontecendo e algumas novidades vem justamente das linguagens funcionais. Conhecer um pouco de uma delas não toma tanto tempo assim e pode ter a sua utilidade mesmo que não seja você um Neal Gafter, Doug Lea ou um Gilad Bracha. No mínimo você estará preparado para entender o que vem por aí.&lt;br /&gt;&lt;br /&gt;Duas alternativas de linguagens funcionais que me atraem são &lt;a href="http://www.erlang.org/"&gt;erlang&lt;/a&gt; e &lt;a href="http://www.scala-lang.org/docu/started.html"&gt;Scala&lt;/a&gt;. Ambas tem seu valor e são adequadas para processos concorrentes. Escolhi começar pelo &lt;a href="http://www.pragmaticprogrammer.com/titles/jaerlang/"&gt;erlang&lt;/a&gt; que é uma linguagem funcional do tipo do Haskel e é orientada para concorrência. Parece muito adequada para o hardware de hoje em que os processadores estão crescendo mais rapidamente de tamanho do que na capacidade de processamento. O aumento de tamanho é porque as CPUs agora tem mais núcleos sendo já comuns os processadores dual core e quad core. Em breve isto irá longe e haja software para explorar. Estou apostando no erlang com a crença de que com ele será mais fácil encarar o desafio de usar corretamente estas facilidades de hardware.  Espero que o erlang me dê também as noções mínimas de programação funcional que acho necessárias para seguir entendendo as mudanças no mundo do desenvolvimento de sistemas.&lt;br /&gt;&lt;/span&gt;&lt;p:colorscheme style="color: rgb(0, 0, 0); font-family: arial;" colors="#FFFFFF,#000000,#DEF5FA,#464646,#2DA2BF,#DA1F28,#FF8119,#44B9E8"&gt;  &lt;/p:colorscheme&gt;&lt;div shape="_x0000_s1026" class="O"&gt;  &lt;div  style="color: rgb(0, 0, 0);font-family:arial;"&gt;&lt;span style="font-size:150;"&gt;&lt;span style="position: absolute; left: -3.57%; top: 0.49em;font-size:65;" &gt;}&lt;/span&gt;&lt;/span&gt;&lt;span style=";font-family:arial;font-size:100%;"  &gt;&lt;span lang="EN-US"  style="font-size:27;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;code&gt;&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/33115344-1951189097467038289?l=lucabastos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lucabastos.blogspot.com/feeds/1951189097467038289/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=33115344&amp;postID=1951189097467038289' title='6 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/33115344/posts/default/1951189097467038289'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/33115344/posts/default/1951189097467038289'/><link rel='alternate' type='text/html' href='http://lucabastos.blogspot.com/2007/05/linguagens-funcionais-parte-2-vamos.html' title='Linguagens funcionais - parte 2'/><author><name>Luca Bastos</name><uri>http://www.blogger.com/profile/08105913026457778167</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_6-xLHhv2Rak/RkXJFkmZ-xI/AAAAAAAAAAM/Y7Pwf7fnqAo/s72-c/Lambda-shuttle-dotNETJava.GIF' height='72' width='72'/><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-33115344.post-4899105187447814265</id><published>2007-05-11T17:16:00.000-03:00</published><updated>2007-05-13T19:57:47.616-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linguagens funcionais'/><title type='text'>Linguagens funcionais</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_6-xLHhv2Rak/RkY31kmZ-yI/AAAAAAAAAAU/FCZPqy0JIiU/s1600-h/lambda.GIF"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 67px; height: 99px;" src="http://bp3.blogger.com/_6-xLHhv2Rak/RkY31kmZ-yI/AAAAAAAAAAU/FCZPqy0JIiU/s200/lambda.GIF" alt="" id="BLOGGER_PHOTO_ID_5063796224522058530" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;  &lt;p class="MsoPlainText"&gt;&lt;span style="font-family:Arial;"&gt;Há alguns dias atrás coloquei a seguinte &lt;a href="http://www.guj.com.br/posts/list/58616.java"&gt;pergunta no GUJ&lt;/a&gt;:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p class="MsoPlainText"&gt;&lt;span style="font-family:Arial;"&gt;Sei que muitas faculdades lá fora ensinam linguagens funcionais de programação e fiquei curioso de fazer uma pequena enquete no GUJ. Perguntei:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;    &lt;ol style="font-family: arial;"&gt;&lt;li&gt;Você já ouviu falar ou já usou alguma linguagem funcional?&lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;&lt;li&gt;Você aprendeu alguma linguagem funcional? Qual? Foi na faculdade? Qual faculdade?&lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;&lt;li&gt;Se aprendeu alguma linguagem funcional, você acredita que conhecer uma linguagem funcional pode lhe dar alguma vantagem no futuro?&lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;&lt;li&gt;Se aprendeu alguma linguagem funcional, você admite que no futuro haverá espaço para programadores em linguagens como erlang, links, scala ou outra qualquer do gênero?&lt;/li&gt;&lt;/ol&gt;  &lt;p class="MsoPlainText"&gt;&lt;span style="font-family:Arial;"&gt;Vale a pena ler as respostas uma a uma. Colocarei aqui minha impressão sobre esta pesquisa. No fim revelarei parte dos motivos que me levaram a fazê-la. Em outro post, abordarei um tema que deixará claro porque acho que há motivos imediatos para que a gente procure saber mais sobre linguagens funcionais.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoPlainText"&gt;&lt;span style="font-family:Arial;"&gt;Mas antes de falar sobre as respostas listarei algumas definições encontradas com ajuda do google:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoPlainText"&gt;&lt;span  lang="EN-US" style="font-family:Arial;"&gt;&lt;o:p&gt;Java, C, Pascal, etc. são o que se chamam de linguagens imperativas no sentido em que consistem em uma seqüência de comandos. Mas o que caracteriza uma linguagem funcional?&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoPlainText"&gt;&lt;span  lang="EN-US" style="font-family:Arial;"&gt;&lt;o:p&gt;Segundo a &lt;a href="http://www.haskell.org/haskellwiki/Introduction"&gt;introdução ao Haskell&lt;/a&gt;, um programa funcional é uma expressão e é executado avaliando a expressão. O texto lembra que quem usou uma planilha já tem experiência com programação funcional. Nas planilhas se especifica o valor de uma célula em função dos valores de outras. O foco está no &lt;span style="font-style: italic;"&gt;que&lt;/span&gt; é calculado e não no &lt;span style="font-style: italic;"&gt;como&lt;/span&gt; é calculado. Outro exemplo citado é o da linguagem de consultas SQL onde se escreve a expressão sem se preocupar como ela será implementada pelo sistema gerenciador de base de dados.&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoPlainText"&gt;&lt;span  lang="EN-US" style="font-family:Arial;"&gt;&lt;o:p&gt;Segundo &lt;/o:p&gt;&lt;a href="http://www.nist.gov/dads/HTML/purelyfnctnl.html"&gt;http://www.nist.gov/dads/HTML/purelyfnctnl.html&lt;/a&gt;, linguagem funcional não permite nenhuma ação destrutiva do tipo sobrescrever dados. As linguagens puramente funcionais são livres de "side effects", isto é, a chamada de uma função não tem nenhum efeito além de avaliar o resultado da função.&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoPlainText"&gt;&lt;span  lang="EN-US" style="font-family:Arial;"&gt;Segundo &lt;a href="http://cbbrowne.com/info/functional.html"&gt;http://cbbrowne.com/info/functional.html&lt;/a&gt;, programação funcional é um estilo de programar que enfatiza a avaliação de expressões ao invés da execução de comandos. As espressões nestas linguagens são formadas usando funções para combinar valores básicos. Uma linguagem funcional é uma linguagem que suporta e encoraja a programação no estilo funcional.&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoPlainText"&gt;&lt;span  lang="EN-US" style="font-family:Arial;"&gt;Acho que estas definições ainda não deixaram as coisas 100% claras mas o google está aí para resolver esta lacuna. Chega de definições e vamos aos finalmentes.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoPlainText"&gt;&lt;span  lang="EN-US" style="font-family:Arial;"&gt;Não sei se o número de respostas permite tirar muitas conclusões porque apesar do tópico ter sido lido por quase 600 gujeiros, só 17 responderam.&lt;br /&gt;&lt;br /&gt;O que consegui entender das respostas foi:&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;span  lang="EN-US" style="font-family:Arial;"&gt;Algumas faculdades ensinam algum tipo de linguagem funcional;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span  lang="EN-US" style="font-family:Arial;"&gt;Alguns desenvolvedores mais interessados já estudaram alguma linguagem funcional, mas não ficou claro com qual profundidade;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span  lang="EN-US" style="font-family:Arial;"&gt;Foi citado que a exposição a uma linguagem funcional torna mais fácil entender algumas novidades pois elas muitas vezes são oriundas de alguma linguagem funcional;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span  lang="EN-US" style="font-family:Arial;"&gt;A maioria não acredita que vá usar alguma linguagem funcional em sua vida profissional&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p class="MsoPlainText"&gt;&lt;span  lang="EN-US" style="font-family:Arial;"&gt;O que eu posso dizer sem antecipar o assunto do meu próximo post?&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoPlainText"&gt;&lt;span  lang="EN-US" style="font-family:Arial;"&gt;Muitos esqueceram que já usam linguagens funcionais nas consultas SQL, nas planilhas, nas transformações XSLT e em muitas outras áreas. Ninguém se lembrou de que o conceito de generics do Java veio de uma extensão do Java chamada &lt;a href="http://homepages.inf.ed.ac.uk/wadler/gj/"&gt;GJ&lt;/a&gt;. Esta é baseada em outra extensão do Java chamada &lt;a href="http://pizzacompiler.sourceforge.net/"&gt;pizza&lt;/a&gt;, que por sua vez incorpora princípios de linguagens funcionais e closures é um deles. Ah, acho que quase todo mundo no GUJ já ouviu falar em closures que é, mais um conceito do mundo das linguagens funcionais e que a gente vai usar com o Java 7.&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoPlainText"&gt;&lt;span  lang="EN-US" style="font-family:Arial;"&gt;E porque fiz esta pesquisa com nossos homens de Java?&lt;/span&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;span  lang="EN-US" style="font-family:Arial;"&gt;Porque &lt;/span&gt;&lt;span  lang="EN-US" style="font-family:Arial;"&gt;neste modelo de programação, &lt;/span&gt;&lt;span  lang="EN-US" style="font-family:Arial;"&gt;há muita pesquisa acadêmica que repercurte também em grandes empresas como a Microsoft, por exemplo. Devido a isto, há alguns indícios que estamos em meio a uma revolução no modo de escrever programas, com as linguagens pouco a pouco incorporando as facilidades das linguagens funcionais.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;&lt;span  lang="EN-US" style="font-family:Arial;"&gt;Porque no Java serão incluídos alguns conceitos oriundos das linguagens funcionais já no Java 7 e possivelmente alguns outros nas versões subseqüentes. Apesar de que, no Java esta evolução será mais lenta do que nas linguagens dominadas pela Microsoft. O motivo do Java evoluir mais devagar é porque em casa que todo mundo manda ninguém tem razão. A vantagem da padronização feita em grupo do tipo JCP vira transtorno no momento de decidir rápido por mudanças mais radicais que o mercado pode exigir.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;&lt;span  lang="EN-US" style="font-family:Arial;"&gt;Para entender conceitos novos como closures e continuations.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;&lt;span  lang="EN-US" style="font-family:Arial;"&gt;Para estar apto a executar tarefas específicas programando em outras linguagens com mais facilidades de conviver com máquinas multiprocessadas como Scala ou erlang.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-family:arial;"&gt;Há outros motivos. A motivação mais forte e imediata para aprender pelo menos um mínimo de linguagens funcionais, será assunto do meu próximo post quando falarei um pouco de .NET.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span  lang="EN-US" style="font-family:Arial;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/33115344-4899105187447814265?l=lucabastos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lucabastos.blogspot.com/feeds/4899105187447814265/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=33115344&amp;postID=4899105187447814265' title='5 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/33115344/posts/default/4899105187447814265'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/33115344/posts/default/4899105187447814265'/><link rel='alternate' type='text/html' href='http://lucabastos.blogspot.com/2007/05/linguagens-funcionais-h-alguns-dias.html' title='Linguagens funcionais'/><author><name>Luca Bastos</name><uri>http://www.blogger.com/profile/08105913026457778167</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp3.blogger.com/_6-xLHhv2Rak/RkY31kmZ-yI/AAAAAAAAAAU/FCZPqy0JIiU/s72-c/lambda.GIF' height='72' width='72'/><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-33115344.post-2110626884492532052</id><published>2007-05-08T19:42:00.000-03:00</published><updated>2007-05-13T19:56:23.353-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Hi tech e marketing'/><title type='text'>Como uma nação prova que é avançada tecnologicamente</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.bymnews.com/photos/albums/AM_Cup_3/normal_China-Team-12.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 200px;" src="http://www.bymnews.com/photos/albums/AM_Cup_3/normal_China-Team-12.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;A &lt;a href="http://www.americascup.com/"&gt;America's Cup&lt;/a&gt; é a mais antiga competição esportiva que eu tenho notícia. Ela é uma competição entre países e é disputada desde 1852. Tem atraído mais público em Valência na Espanha na marina onde ancoram os barcos do que qualquer clássico de futebol brasileiro decidindo título. É enorme a atenção da mídia e as regatas passam nas TVs de quase todo mundo (mais de 150 países e o Brasil fora disto).&lt;br /&gt;&lt;br /&gt;A Louis Vuitton Cup é a competição que define o desafiante do barco da Suiça &lt;a href="http://www.alinghi.com/"&gt;Alinghi&lt;/a&gt;, o atual detentor da America's Cup e que levou a taça de volta para a Europa depois de mais de 150 anos. A LV Cup está quase na semifinal e já tem definidos os participantes: &lt;a href="http://www.bmworacleracing.com/"&gt;BMW Oracle Racing&lt;/a&gt;, &lt;a href="http://www.emiratesteamnz.com/"&gt;Emirates Team New Zeland&lt;/a&gt;,  &lt;a href="http://www.lunarossachallenge.com/"&gt;Luna Rossa Chalenge&lt;/a&gt; e &lt;a href="http://www.desafioespanol2007.com/"&gt;Desafío Español 2007&lt;/a&gt;. Falta apenas a rodada de amanhã para acabar o round robin 2 (2o turno). Nesta rodada o barco da &lt;a href="http://www.china-team.org/"&gt;China&lt;/a&gt;, que está na foto, ficou como bye e não compete mais. Hoje foi o último adeus do Dragão.&lt;br /&gt;&lt;br /&gt;Estes barcos são extremamente sofisticados e representam o estado da arte em termos de projeto e construção naval pois a&lt;/span&gt;&lt;span style="font-family:arial;"&gt; America's Cup é considerada a Fórmula 1 da vela. O orçamento de uma equipe para participar competitivamente beira ou ultrapassa os 200 milhões de Euros. Os recursos computacionais usados no projeto dos barcos são comparáveis aos do projeto de um carro de fórmula 1. Os barcos também passam por diversos ensaios em túneis de vento. Os materiais empregados são sempre de última geração causando inusitadas dificuldades de fabricação tando do casco como da mastreação e das velas.&lt;br /&gt;&lt;br /&gt;Como eu disse antes, é uma competição entre países e o regulamento exige que o barco seja construído no país origem da equipe. Pode haver mais de um barco por país e os velejadores podem ser de qualquer nacionalidade. Como não temos um barco brasileiro, o nosso campeoníssmo Torben Grael é quem decide os rumos, ou seja, é o tático do excelente barco italiano Luna Rossa patrocinado pela Prada, Tim, mais um grande banco italiano e outros grandões que nem me lembro.&lt;br /&gt;&lt;br /&gt;Provar ao mundo que detém conhecimentos e tecnologias inovadoras como as necessárias para construir um barco destes, é um dos meios usados como ferramenta de marketing para convencer aos  importadores do resto do mundo, de que os produtos de um país são bem fabricados. Os japoneses fazem muito isto quando anunciam aqueles robozinhos que não servem para nada mas que nos deixa todos extasiados com a sua tecnologia. &lt;/span&gt;&lt;span style="font-family:arial;"&gt;&lt;br /&gt;&lt;br /&gt;Pois bem, foi isto que fizeram os chineses. Entraram para a America's Cup, perderam quase de todo mundo mas estão lá no seleto grupo de países capazes de fazer isto.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:arial;"&gt;&lt;br /&gt;E porque não fazemos igual no Brasil? &lt;/span&gt;&lt;span style="font-family:arial;"&gt;Não é por falta de &lt;a href="http://www.boteco1.com/"&gt;torcida&lt;/a&gt;. &lt;/span&gt;&lt;span style="font-family:arial;"&gt;Acho que é por falta de visão do nossos industriais exportadores ou dos órgãos governamentais que fomentam as exportações. E é isto que está emperrando o deslanche do projeto de repetir o feito de 2005/2006 quando aconteceu a nossa maravilhosa participação na regata de volta ao mundo &lt;a href="http://www.volvooceanrace.com/"&gt;Volvo Ocean Race&lt;/a&gt; com uma equipe quase toda de brasileiros e o super barco &lt;a href="http://www.brasil1.com.br/site/home/home.aspx"&gt;Brasil 1&lt;/a&gt; construído aqui.&lt;br /&gt;&lt;br /&gt;Chinês tem olho fechadinho mas parece que enxerga mais longe do que os brasileiros.&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/33115344-2110626884492532052?l=lucabastos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lucabastos.blogspot.com/feeds/2110626884492532052/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=33115344&amp;postID=2110626884492532052' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/33115344/posts/default/2110626884492532052'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/33115344/posts/default/2110626884492532052'/><link rel='alternate' type='text/html' href='http://lucabastos.blogspot.com/2007/05/como-uma-nao-prova-que-avanada.html' title='Como uma nação prova que é avançada tecnologicamente'/><author><name>Luca Bastos</name><uri>http://www.blogger.com/profile/08105913026457778167</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-33115344.post-1188211872829684981</id><published>2007-05-06T15:44:00.000-03:00</published><updated>2007-05-13T19:56:55.401-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Web Services'/><title type='text'>Lançado o Apache CXF 2.0 RC</title><content type='html'>&lt;span class="postbody"  style="font-family:arial;"&gt;&lt;br /&gt;&lt;br /&gt;O Dan Diephouse anunciou hoje em seu &lt;a href="http://netzooid.com/blog/2007/05/06/cxf-20-rc-is-released/" target="_new" rel="nofollow"&gt;blog&lt;/a&gt; que foi lançado o tão aguardado, pelo menos por mim, &lt;a href="http://incubator.apache.org/cxf/index.html" target="_new" rel="nofollow"&gt;Apache CXF 2.0&lt;/a&gt; que pretende ser um framework de serviços Open Source intuitivo e fácil de usar.&lt;br /&gt;&lt;br /&gt;Suporta:&lt;br /&gt;- WS-Addressing, WS-Policy, WS-RM e WS-Security&lt;br /&gt;- Integração com Spring 2.0&lt;br /&gt;- Construção de web services a partir de POJOs (sem annotations)&lt;br /&gt;- Transporte HTTP, JMS e local (in-JVM)&lt;br /&gt;- Serviços RESTful incluindo serviços JSON.&lt;br /&gt;&lt;br /&gt;Download em &lt;a href="http://incubator.apache.org/cxf/apache-cxf-20-rc-incubating-release-notes.html" target="_blank" rel="nofollow"&gt;http://incubator.apache.org/cxf/apache-cxf-20-rc-incubating-release-notes.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Ele implementa os padrões de web services, inclusive os do JCP. Os serviços são definidos usando contratos WSDL e podem ser acessados por meio de diferentes formatos de mensagens (bindings) e protocolos de rede (transporte) incluindo SOAP por HTTP, SOAP por JMS, XML por HTTP e XML por JMS. Pretende prover uma arquitetura plugável que suporte não somente XML mas também outros tipos de formatos de mensagens com qualquer tipo de transporte.&lt;br /&gt;&lt;br /&gt;Suporta também modelos como JAX-WS, JBI, SCA e serviços CORBA. Foi projetado para deployment flexível em vários containers incluindo os baseados em Spring, JBI, SCA, Servlet e J2EE.&lt;br /&gt;&lt;br /&gt;Os motivos do lançamento do substituto do XFire e do Celtix ainda como Release Candidate são principalmente dois:&lt;br /&gt;- Ainda estão finalizando os testes de compatibilidade com o JAX-WS TCK, apesar de que a compatibilidade total só virá na versão 2.0.1.&lt;br /&gt;- Liberando logo, mais pessoas usarão e mais chance de descobrir eventuais bugs.&lt;br /&gt;&lt;br /&gt;Recomenda-se aos usuários do Celtix e do XFire que avaliem a migração para este que é uma junção melhorada dos dois projetos. Porém databindings JiBX e XMLBeans, só serão suportados na versão 2.1. Como foi desenvolvido para o Java 5, quem usa Java 1.4 precisa se valer do &lt;a href="http://retrotranslator.sourceforge.net/" target="_new" rel="nofollow"&gt;Retrotranslator&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;A maior parte dos serviços escritos para o &lt;a href="http://xfire.codehaus.org/" target="_new" rel="nofollow"&gt;XFire&lt;/a&gt; devem ser compatíveis com o CXF. Porém serão necessárias mudanças nos arquivos relativos ao deployment ou na configuração xml para aproveitar as vantagens das APIs melhoradas e das melhorias nos formatos XML. Vejam o &lt;a href="http://cwiki.apache.org/CXF20DOC/xfire-migration-guide.html" target="_new" rel="nofollow"&gt;XFire migration guide&lt;/a&gt; para saber os detalhes.&lt;br /&gt;&lt;br /&gt;Vantagens sobre o XFire:&lt;br /&gt;  - Melhor suporte a WSDL&lt;br /&gt;  - Melhor suporte a JAX-WS&lt;br /&gt;  - Melhoria no transporte JMS&lt;br /&gt;  - Plugins Maven&lt;br /&gt;  - Suporte a sintaxe Spring 2.0&lt;br /&gt;  - Melhor suporte a WS-*&lt;br /&gt;  - API mais limpa para construir serviços&lt;br /&gt;  - Fácil de usar pontos de extensão&lt;br /&gt;  - Suporte a RESTful&lt;br /&gt;  - Suporte para um binding XML cru, que não inclui um envelope SOAP&lt;br /&gt;&lt;br /&gt;PS: Os indianos são minoria esmagadora dentre os 20 commiters.  &lt;img src="http://www.guj.com.br/images/smilies/8a80c6485cd926be453217d59a84a888.gif" border="0" /&gt;  &lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/33115344-1188211872829684981?l=lucabastos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lucabastos.blogspot.com/feeds/1188211872829684981/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=33115344&amp;postID=1188211872829684981' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/33115344/posts/default/1188211872829684981'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/33115344/posts/default/1188211872829684981'/><link rel='alternate' type='text/html' href='http://lucabastos.blogspot.com/2007/05/lanado-o-apache-cxf-2.html' title='Lançado o Apache CXF 2.0 RC'/><author><name>Luca Bastos</name><uri>http://www.blogger.com/profile/08105913026457778167</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-33115344.post-6024632525991844289</id><published>2007-04-26T10:15:00.000-03:00</published><updated>2007-05-13T19:59:18.840-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Configuração'/><title type='text'>Não gosto de configuração programática</title><content type='html'>&lt;span style="font-family:arial;"&gt;&lt;br /&gt;&lt;br /&gt;Não queria escrever sobre nada fora do meu foco atual mas estou com um assunto engasgado que preciso colocar minha opinião pelo menos para marcar presença. Sei que muitos amigos detestam o monte de XML que precisam escrever para configurar os frameworks que usam e entendo porque não gostam de XML.&lt;br /&gt;&lt;br /&gt;Fui um dos primeiros entusiastas na adoção de XML na integração de sistemas ainda quando trabalhava com EDI em 2000. O uso de XML tem um monte de vantagens e algumas poucas, porém quase fatais, desvantagens. Só vou falar de algumas desvantagens: violam TDD, são difíceis de localizar erros, acarretam lentidão quando usadas com parsers inadequados e principalmente ser fácil de abusar do seu uso.&lt;br /&gt;&lt;br /&gt;Tendo em vista as desvantagens, alguns programadores resolveram expurgar o XML das suas configurações e passaram a fazer a chamada configuração programática.&lt;br /&gt;&lt;br /&gt;Entendo por configuração aqueles parâmetros que servem apenas para permitir a instalação e ajuste fino das aplicações em diversos ambientes. Lá devem ficar as informações que podem ser alteradas pelos profissionais de suporte.&lt;br /&gt;&lt;br /&gt;Porém nos últimos tempos há um claro abuso deste conceito. Houve uma febre para tornar os sistemas flexíveis e customizáveis. &lt;/span&gt;&lt;span style="font-family:arial;"&gt;Os arquivos de configuração cresceram muito. &lt;/span&gt;&lt;span style="font-family:arial;"&gt;Alguns contêm informações que só dizem respeito ao desenvolvedor do sistema e nunca deveriam estar expostos como configuração. Os arquivos enormes ficaram tão difíceis de alterar que as empresas precisam dispor de programadores especialistas nos frameworks que nada mais fazem do que gerenciar as configurações (&lt;a href="http://worsethanfailure.com/Articles/The_Inner-Platform_Effect.aspx"&gt;Inner-Platform Effect)&lt;/a&gt;. Ficou mais complexo configurar um sistema do que usar os 237 botões do controle remoto do seu home theater.&lt;br /&gt;&lt;br /&gt;1. Solução natural do problema:&lt;br /&gt;&lt;/span&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-family:arial;"&gt;Configurar por convenção onde se pode saber por experiência onde estão as coisas.&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:arial;"&gt;Permitir mudanças nas convenções por convenção de forma centralizada para fazer uma vez só na vida com alterações em um único lugar.&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:arial;"&gt;Limitar as configurações somente àquilo que um profissional de suporte pode fazer em poucos minutos para apagar um "incêndio".&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:arial;"&gt;Configurações que só dizem respeito aos programadores preferencialmente devem ser feitas com anotações. É claro que respeitando as limitações e imposições dos frameworks de IoC, AOP, etc..&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-family:arial;"&gt;2. Solução adotada pelos defensores de configuração programática&lt;br /&gt;&lt;/span&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-family:arial;"&gt;Configurar via programação Java&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-family:arial;"&gt;Talvez eu esteja ficando um velho ranzinza mas acho absurdo trocar um configuration manager por outro programador e obrigar que todas as modificações sejam feitas em ambientes de desenvolvimento com Java instalado mais toda a parafernália de IDE, dependências, etc. Para mim a solução de configuração programática apenas engessa os sistemas e não toca no real problema de excesso de customização para gente que não precisa disto.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/33115344-6024632525991844289?l=lucabastos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lucabastos.blogspot.com/feeds/6024632525991844289/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=33115344&amp;postID=6024632525991844289' title='6 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/33115344/posts/default/6024632525991844289'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/33115344/posts/default/6024632525991844289'/><link rel='alternate' type='text/html' href='http://lucabastos.blogspot.com/2007/04/no-gosto-de-configurao-programtica.html' title='Não gosto de configuração programática'/><author><name>Luca Bastos</name><uri>http://www.blogger.com/profile/08105913026457778167</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-33115344.post-1249570660005088468</id><published>2007-04-24T17:06:00.000-03:00</published><updated>2007-05-13T19:59:55.709-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JMS'/><title type='text'>Aplicações corporativas nunca funcionam isoladas. Mensagens síncronas x mensagens assíncronas</title><content type='html'>&lt;span style="font-family:arial;"&gt;&lt;br /&gt;&lt;br /&gt;Nas empresas há dezenas de sistemas que precisam trocar informações. Estes sistemas, algumas vezes, foram desenvolvidos de forma independente visando resolver algum problema isolado. Sendo assim ou não, quase todos precisam se integrar aos demais, trocando informações e serviços.&lt;br /&gt;&lt;br /&gt;Muitos programadores desenvolvem as trocas de mensagens e as chamadas a comandos em outros sistemas usando mensagens síncronas. Isto geralmente exige algum esforço de programação para ter garantias de que as mensagens chegam ao destino. Talvez a maior parte das aplicações que usam web services para integrar aplicações o façam trocando mensagens síncronas.&lt;br /&gt;&lt;br /&gt;Este post serve apenas para lembrar que há vantagens na integração de sistemas usando troca de mensagens assíncronas que usa a abordagem "envie e esqueça": Quem envia as mensagens ou pedidos de execução de comandos não precisa ficar parado esperando a resposta. Esta pode vir posteriormente e ser recebida via callback por alguma thread que a escute. As principais vantagens são:&lt;br /&gt;&lt;/span&gt;&lt;ol&gt;&lt;li&gt;&lt;span style="font-family:arial;"&gt;As mensagens ou chamadas a comando podem ser retransmitidas e assim a confiabilidade global do sistema aumenta muito.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:arial;"&gt;Por não precisar ficar bloqueado esperando resposta, melhora o uso dos recursos dos sistemas e assim também a escalabilidade.&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;span style="font-family:arial;"&gt;&lt;br /&gt;Usar mensagens assíncronas não é mais difícil nem mais caro. Apenas exige que se inclua na arquitetura um provedor de serviços de mensageria. Para a nossa sorte há vários provedores gratuitos com bom desempenho com boas facilidades de gerenciamento.&lt;br /&gt;&lt;br /&gt;Em termos de programação Java o esforço não aumenta muito por 2 motivos:&lt;br /&gt;&lt;/span&gt;&lt;ol&gt;&lt;li&gt;&lt;span style="font-family:arial;"&gt;A API JMS é boa, estável e fácil de programar mesmo sem auxílio de Message Driven Beans;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:arial;"&gt;A parte "suja" da programação para garantir o recebimento das mensagens fica por conta do provedor de mensageria.&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;span style="font-family:arial;"&gt;&lt;br /&gt;Então o que você está esperando para mudar seus paradigmas e diminuir o acoplamento entre seus sistemas? Se é por falta de livros seus problemas acabaram pois aí vão 2 dicas boas:&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;span style="font-family:arial;"&gt;Java Messaging do Eric Bruno&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:arial;"&gt;&lt;a href="http://www.enterpriseintegrationpatterns.com/"&gt;Enterprise Integration Patterns&lt;/a&gt; de Gregor Hohpe e Bobby Woolf com várias contribuições de outros.&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/33115344-1249570660005088468?l=lucabastos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lucabastos.blogspot.com/feeds/1249570660005088468/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=33115344&amp;postID=1249570660005088468' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/33115344/posts/default/1249570660005088468'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/33115344/posts/default/1249570660005088468'/><link rel='alternate' type='text/html' href='http://lucabastos.blogspot.com/2007/04/aplicaes-corporativas-nunca-funcionam.html' title='Aplicações corporativas nunca funcionam isoladas. Mensagens síncronas x mensagens assíncronas'/><author><name>Luca Bastos</name><uri>http://www.blogger.com/profile/08105913026457778167</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-33115344.post-5916611447842618383</id><published>2007-04-24T15:24:00.000-03:00</published><updated>2007-05-13T20:00:29.760-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Geral'/><title type='text'>Pois é, comecei. Alia jacta est</title><content type='html'>&lt;span style="font-family:arial;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt; &lt;/span&gt;&lt;span style="font-family:arial;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Será que conseguirei tempo para escrever alguma coisa por aqui? Sei lá, vou tentar.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Meu interesse atual é &lt;/span&gt;&lt;a style="font-family: arial;" href="http://en.wikipedia.org/wiki/Complex_event_processing"&gt;CEP&lt;/a&gt;&lt;span style="font-family:arial;"&gt;/&lt;/span&gt;&lt;a style="font-family: arial;" href="http://en.wikipedia.org/wiki/Event_Stream_Processing"&gt;ESP&lt;/a&gt;&lt;span style="font-family:arial;"&gt;/&lt;/span&gt;&lt;a style="font-family: arial;" href="http://en.wikipedia.org/wiki/Event_Driven_Architecture"&gt;EDA&lt;/a&gt;&lt;span style="font-family:arial;"&gt;, isto é, sistemas movidos por eventos. Quais são estes sistemas? Quase todos os sistemas corporativos que trocam mensagens dependem de eventos ou usam regras baseadas em fluxos de eventos para tomada de decisões.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Já que falei em trocas de mensagens, é claro que JMS, ESB, SOA  e Web Services também fazem parte dos meus interesses e talvez escreva sobre isto. Se possível usando o &lt;/span&gt;&lt;a style="font-family: arial;" href="http://activemq.apache.org/camel/"&gt;Apache Camel&lt;/a&gt;&lt;span style="font-family:arial;"&gt;  para modelar as mensagens como tenho feito em brincadeiras caseiras.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Finalmente há 2 assuntos, que se sobrar tempo, pretendo abordar, pois são antigos interesses meus: aplicações servidoras e JMX, sendo este último assunto uma das jóias raras do Java.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Ah, e porque windshifts que significa rondadas de vento? Como antigo velejador, espero que as rondadas de vento me sejam favoráveis e me dêem motivação para escrever.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;É isso aí, jogo feito, as cartas estão na mesa.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/33115344-5916611447842618383?l=lucabastos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lucabastos.blogspot.com/feeds/5916611447842618383/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=33115344&amp;postID=5916611447842618383' title='2 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/33115344/posts/default/5916611447842618383'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/33115344/posts/default/5916611447842618383'/><link rel='alternate' type='text/html' href='http://lucabastos.blogspot.com/2007/04/pois-comecei.html' title='Pois é, comecei. Alia jacta est'/><author><name>Luca Bastos</name><uri>http://www.blogger.com/profile/08105913026457778167</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry></feed>
