<?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:blogger='http://schemas.google.com/blogger/2008' 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-7308500728033786786</id><updated>2024-10-24T01:02:56.607-07:00</updated><category term="cobra_fumou python clojure javafx jvm jython jruby ruby google guido_von_rossum llvm"/><category term="deployment"/><category term="fabric"/><category term="java"/><category term="lamp"/><category term="python ruby django rails apache"/><category term="algorithms"/><category term="algoritmos"/><category term="android"/><category term="bytecode"/><category term="cache"/><category term="capistrano"/><category term="clojure"/><category term="clojure functional concurrency performance"/><category term="clojure jruby python groovy google youtube rails"/><category term="cluster supercomputers sun"/><category term="coc"/><category term="collections"/><category term="cursos certificação"/><category term="dalvik"/><category term="data mining business intelligence ai weka"/><category term="datastructure"/><category term="dry"/><category term="estruturadedados"/><category term="glassifshv3"/><category term="google"/><category term="harmony"/><category term="icedtea"/><category term="java exception"/><category term="javase"/><category term="jruby ruby rails jvm"/><category term="jvm"/><category term="jython jsr223 jvm scriptlanguages"/><category term="jython python java jvm memory_model stack heap static class_loader"/><category term="licença opensource"/><category term="licença opensource bittorrent p2p networking socialnetwork industry"/><category term="lisp jvm fuctional concurrency threads"/><category term="lyme"/><category term="mapreduce hadoop machine_learning genetic_algorithms neural_networks clojure java"/><category term="memcache"/><category term="mysql"/><category term="netbeans java ruby clojure matisse visual web pack mobility"/><category term="netbeans jpa javadb swing matisse"/><category term="opensolaris dtrace ips zfs zones webstack rails mars"/><category term="oracle"/><category term="participation era"/><category term="postgresql"/><category term="python"/><category term="redhat"/><category term="robocode AI algoritmos geneticos agentes"/><category term="ruby jruby python django rails jvm script_languages programming programação"/><category term="sun"/><category term="sun oracle java business jcp"/><category term="teoria da computacao"/><category term="threads java multicore multithread"/><category term="ubuntu"/><category term="virtualização opensolaris virtualbox"/><category term="visualVM JMX  jconsole"/><category term="web container rails php ajax jmaki jsf glassfish javaee"/><category term="web frameworks"/><title type='text'>Let The Computer Decide</title><subtitle type='html'>First will check ever component inside out, next compile some data,then will let the computer decide!</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://amsterdaintelligence.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7308500728033786786/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://amsterdaintelligence.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/7308500728033786786/posts/default?start-index=26&amp;max-results=25&amp;redirect=false'/><author><name>@williamgouvea</name><uri>http://www.blogger.com/profile/16737800888418990640</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiXgCyNKh33yvHTbk83E03NP-2_VEgR6dAblD4Daus1Z6NoufJ-_ovu0KdlMO4KlMwqlDiHfgVPefrqERTjJ-nkKZP7_S41tqN6sQ9-suaiqjp622XDcN72QNXCLNB5SCg/s220/trabalho.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>32</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-7308500728033786786.post-4680277497795122398</id><published>2010-08-24T22:06:00.000-07:00</published><updated>2010-08-24T22:12:17.777-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="android"/><category scheme="http://www.blogger.com/atom/ns#" term="bytecode"/><category scheme="http://www.blogger.com/atom/ns#" term="clojure"/><category scheme="http://www.blogger.com/atom/ns#" term="dalvik"/><category scheme="http://www.blogger.com/atom/ns#" term="google"/><category scheme="http://www.blogger.com/atom/ns#" term="harmony"/><category scheme="http://www.blogger.com/atom/ns#" term="icedtea"/><category scheme="http://www.blogger.com/atom/ns#" term="java"/><category scheme="http://www.blogger.com/atom/ns#" term="javase"/><category scheme="http://www.blogger.com/atom/ns#" term="jvm"/><category scheme="http://www.blogger.com/atom/ns#" term="licença opensource"/><category scheme="http://www.blogger.com/atom/ns#" term="oracle"/><category scheme="http://www.blogger.com/atom/ns#" term="redhat"/><category scheme="http://www.blogger.com/atom/ns#" term="sun"/><title type='text'>Oracle pode ter uma arma secreta na mão?</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiVyn-j036tbhq97gtJqly8fQkqKkr1-mcqMey25LL64B__wbRQf-px8uRmoW-9KWJuulhqEP6cdjh_TCDc1AYL9Q8UG8pfUFhG1uQvcnOCprKiu4ItJdflDd12yC9dYMkwckmJve-ijAY/s1600/android-oracle-google.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiVyn-j036tbhq97gtJqly8fQkqKkr1-mcqMey25LL64B__wbRQf-px8uRmoW-9KWJuulhqEP6cdjh_TCDc1AYL9Q8UG8pfUFhG1uQvcnOCprKiu4ItJdflDd12yC9dYMkwckmJve-ijAY/s320/android-oracle-google.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
Em Agosto a Oracle surpreendeu, processando a Google devido á plataforma Android e a Dalvik VM.&lt;br /&gt;
&lt;br /&gt;
A gigante que englobou a SUN em 2009,&amp;nbsp; arrebatou no negocio o Java, OS Solaris e tambem muito Hardware junto.&lt;br /&gt;
&lt;br /&gt;
Agora diz que a Google com o seu&amp;nbsp; SDK Android sua DalvikVM e os aparelhos que rodam o OS Mobile&amp;nbsp; quebram 7 clausulas da patente original do Java e ferindo assim a propriedade intelectual da Oracle .&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjL9bwas5o9GsXAZ4SM46usr37bZZfLV_mT87ar-V8Yre8R84EgeN2oCNeRzp3P60_tTYDaV7wzPekzhnjypEIAy9BcRmKAO4sXB6p4693gdlIjpk62yBwmznBNBs8k-EX7MjM0De6Ou64/s1600/medo_fear.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjL9bwas5o9GsXAZ4SM46usr37bZZfLV_mT87ar-V8Yre8R84EgeN2oCNeRzp3P60_tTYDaV7wzPekzhnjypEIAy9BcRmKAO4sXB6p4693gdlIjpk62yBwmznBNBs8k-EX7MjM0De6Ou64/s320/medo_fear.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A Oracle alega ter direitos financeiros&amp;nbsp; sobre o projeto e com isso ameaça a comunidade opensource Java, que se vê receosa em prosseguir com Java em projetos criticos, enfraquecendo toda filosofia legada da SUN que dava, superpoderes aos Java.&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;A DalvikVM usa um fork do projeto Apache Harmony e compila parcialmente o&amp;nbsp; .class(bytecodes) para um formato intermediario chamado .dex (Dalvik Executable) que utiliza tambem instruções especiais para rodar na VM .&lt;br /&gt;
&lt;br /&gt;
Inclusive o projeto tentou atraves de uma carta enviada a SUN, ganhar o Technology Compatibility&amp;nbsp; Kit Java SE, mas o esforço foi em vão. &lt;br /&gt;
&lt;br /&gt;
Vale ressaltar que o AndroidSDK nao suporta Swing, AWT muito menos JavaME, o que mostra não ter nada a ver com desenvolvimento mobile até então feita pela Oracle/SUN.&lt;br /&gt;
&lt;br /&gt;
È engraçado como as vezes ,oportunidades estão proximas e não nos damos conta. Dois dos muitos excelentes projetos do Sun Labs, mostraram potencial no mundo pervasivo/movel:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Squawk VM&lt;/li&gt;
&lt;li&gt;SunSPOT&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;div style=&quot;color: red; text-align: center;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;b&gt;Squawk VM&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;color: red;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgO7Lz1vrNFMhOJfX5ACTvs0Vh3dgiV3k0wTN92cVPOnHKP-oWJOvKWoMl6jKqpTiD_6xZK5nxq2Wrk8YPbsf8EEtBGoYW1Kv3zqLHptSFCJ1MDk70WZR3RykVRyWzXcRyiDFHsZXoDpI8/s1600/Squawk_Archtecture.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;212&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgO7Lz1vrNFMhOJfX5ACTvs0Vh3dgiV3k0wTN92cVPOnHKP-oWJOvKWoMl6jKqpTiD_6xZK5nxq2Wrk8YPbsf8EEtBGoYW1Kv3zqLHptSFCJ1MDk70WZR3RykVRyWzXcRyiDFHsZXoDpI8/s400/Squawk_Archtecture.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style=&quot;color: red;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
&lt;span class=&quot;long_text&quot; id=&quot;result_box&quot;&gt;&lt;span style=&quot;background-color: white;&quot; title=&quot;&quot;&gt;Squawk é uma edição&amp;nbsp; movel da&amp;nbsp; máquina  virtual Java para sistemas embarcados e dispositivos de pequeno porte. &lt;/span&gt;&lt;span style=&quot;background-color: white;&quot; title=&quot;&quot;&gt;A maioria das  máquinas virtuais para a plataforma Java são escritos em linguagens nativas  de baixo nível, como C / C + + e assembler, o que faz Squawk diferente já que o seu&amp;nbsp; núcleo é na sua maioria escrito em Java. &lt;/span&gt;&lt;span style=&quot;background-color: white;&quot; title=&quot;&quot;&gt;(interpretador meta-circular).&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;long_text&quot; id=&quot;result_box&quot;&gt;&lt;span style=&quot;background-color: white;&quot; title=&quot;&quot;&gt; A aplicação Java fornece&amp;nbsp; facil&amp;nbsp;  portabilidade, alem de uma perfeita integração da máquina virtual com recursos  das aplicações, tais como objetos, threads, e as interfaces do sistema  operacional.&lt;br /&gt;
&lt;/span&gt;&lt;span style=&quot;background-color: white;&quot; title=&quot;&quot;&gt;A Squawk VM pode ser simplificada  como:&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;span class=&quot;long_text&quot; id=&quot;result_box&quot;&gt;&lt;span style=&quot;background-color: white;&quot; title=&quot;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span title=&quot;&quot;&gt; Escreva o máximo do Java VM  possível&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;&lt;span class=&quot;long_text&quot; id=&quot;result_box&quot;&gt;&lt;span title=&quot;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span title=&quot;&quot;&gt; Direcionamento de  recursos focado em pequenos dispositivos&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;long_text&quot; id=&quot;result_box&quot;&gt;&lt;span title=&quot;&quot;&gt; limitados&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;&lt;span class=&quot;long_text&quot; id=&quot;result_box&quot;&gt;&lt;span title=&quot;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: white;&quot; title=&quot;&quot;&gt; Permitir Java  para o desenvolvimento de micro-embedded&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;span class=&quot;long_text&quot; id=&quot;result_box&quot;&gt;&lt;span style=&quot;background-color: white;&quot; title=&quot;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span title=&quot;&quot;&gt;O  projeto de pesquisa foi inspirada pela VM do SmallTalk, Squeak. &lt;/span&gt;&lt;span title=&quot;&quot;&gt;Squawk herda muita coisa do&amp;nbsp; Java ME e possui uma pequeno footprint de&amp;nbsp;  memória.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;long_text&quot; id=&quot;result_box&quot;&gt;&lt;span title=&quot;&quot;&gt; Ela foi desenvolvida para ser simples com o mínimo de  dependências externas. &lt;/span&gt;&lt;span style=&quot;background-color: white;&quot; title=&quot;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;long_text&quot; id=&quot;result_box&quot;&gt;&lt;span style=&quot;background-color: white;&quot; title=&quot;&quot;&gt;A sua simplicidade á torna portátil , fácil de  depurar e manter. &lt;/span&gt;&lt;span title=&quot;&quot;&gt;Squawk também fornece um  mecanismo isolado pela qual uma aplicação é representada como um objeto.  &lt;/span&gt;&lt;span style=&quot;background-color: white;&quot; title=&quot;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;long_text&quot; id=&quot;result_box&quot;&gt;&lt;span style=&quot;background-color: white;&quot; title=&quot;&quot;&gt;Em  Squawk, uma ou mais aplicações podem rodar em uma unica JVM. &lt;/span&gt;&lt;span title=&quot;&quot;&gt;Conceitualmente, cada aplicação é completamente  isolada de todas as outras aplicações.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;color: red; text-align: center;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;b&gt;&lt;span class=&quot;long_text&quot; id=&quot;result_box&quot;&gt;&lt;span title=&quot;&quot;&gt;SunSPOT&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;color: red; text-align: center;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-ErWdP_Yx_4O_8_qGaMQkge6w0MxQlGdaUr3DZQzOHW7PqLnY0GVobiJ1VNEy5IEuiqHNlsX5hDh7sIzJS6jR8Wo_Y4uVtHyLUMtOWR0ikH4epFQ1vdCBBKcFjtcZ1LV5m35vangxzxk/s1600/sun_spot2.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;297&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-ErWdP_Yx_4O_8_qGaMQkge6w0MxQlGdaUr3DZQzOHW7PqLnY0GVobiJ1VNEy5IEuiqHNlsX5hDh7sIzJS6jR8Wo_Y4uVtHyLUMtOWR0ikH4epFQ1vdCBBKcFjtcZ1LV5m35vangxzxk/s400/sun_spot2.jpg&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style=&quot;color: red; text-align: center;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;span class=&quot;long_text&quot; id=&quot;result_box&quot;&gt;&lt;span title=&quot;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;long_text&quot; id=&quot;result_box&quot;&gt;&lt;span title=&quot;&quot;&gt;Estes  dispositivos podem ser usados em uma ampla gama de aplicações, incluindo  a robótica, monitoramento ambiental, controle de ativos, cuidados de  saúde pró-ativa e muitos outros.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;long_text&quot; id=&quot;result_box&quot;&gt;&lt;span title=&quot;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: white;&quot; title=&quot;&quot;&gt;Sun SPOT rodam em uma  máquina virtual especialmente projetada para pequenos dipositivos com baixo footprint de memoria a chamada  Squawk, que pode hospedar vários aplicativos simultaneamente, e não  requer nenhum sistema operacional subjacente.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;long_text&quot; id=&quot;result_box&quot;&gt;&lt;span style=&quot;background-color: white;&quot; title=&quot;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;background-color: white;&quot; title=&quot;&quot;&gt;Modulos  empilháveis incluem sensores para aplicações específicas e atuadores,  tais como acelerômetros, detectores de luz, sensores de temperatura,  LEDs, botões e I / O pins. &lt;/span&gt;&lt;span title=&quot;&quot;&gt;Os  dispositivos podem ser utilizados por dias com uma  única carga da sua bateria recarregável.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEik5tIfjLly22bh9Tz6TDRshSdU0zsqgUbqhfpt4DLQij6GuA6Df4OgBLiZgWdHWUEWWVRVvaMwUdEnMogMpG1FIcFA_q5NHDmQMfIXVtvYL8PgMwsvEV8mKNqetAu4b19Qd0uzuJpCv5g/s1600/sunSPOT.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;400&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEik5tIfjLly22bh9Tz6TDRshSdU0zsqgUbqhfpt4DLQij6GuA6Df4OgBLiZgWdHWUEWWVRVvaMwUdEnMogMpG1FIcFA_q5NHDmQMfIXVtvYL8PgMwsvEV8mKNqetAu4b19Qd0uzuJpCv5g/s400/sunSPOT.jpg&quot; width=&quot;287&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;long_text&quot; id=&quot;result_box&quot;&gt;&lt;span title=&quot;&quot;&gt;Com tudo isso nas mãos , a Oracle não só pode parar o avanço do&amp;nbsp; AndroidSDK como investir no mercado de forma agressiva , o que na minha humilde opinião ,não fugiria a estrategia da empresa.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;long_text&quot; id=&quot;result_box&quot;&gt;&lt;span title=&quot;&quot;&gt;Projetos Opensource como Arduino tambem tem um gigante atrativo nesta area já que constituem dos mesmos requisitos alem de ter uma comunidade empolgada e criativa e ser mais customizavel em geral.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiunI-JMWZnwHa4dR-jID6GE2UbisW_oTH6ggDz9MkvXbBfEg7q8B44RPojlqO6H4iksVTGVDYjtj9FtXkCUY7x1ZxmedaT9OXutbwZK3Lym-aLDC55myUz_uUP73WiKdczo6kqG_EbNKo/s1600/arduino1.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiunI-JMWZnwHa4dR-jID6GE2UbisW_oTH6ggDz9MkvXbBfEg7q8B44RPojlqO6H4iksVTGVDYjtj9FtXkCUY7x1ZxmedaT9OXutbwZK3Lym-aLDC55myUz_uUP73WiKdczo6kqG_EbNKo/s320/arduino1.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;long_text&quot; id=&quot;result_box&quot;&gt;&lt;span title=&quot;&quot;&gt;&amp;nbsp;A IBM mantem suas JVM&#39;s JikeVm e J9, assim como a RedHat tambem possuem a IceTea6 Vm , mais conhecida como OpenJDK6 que possui o Kit de Certificação dw Tecnologia da SUN e usa o GCJ para compilar seus bytecodes sendo assim uma tecnologia totalmente opensource.&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;long_text&quot; id=&quot;result_box&quot;&gt;&lt;span title=&quot;&quot;&gt; &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;long_text&quot; id=&quot;result_box&quot;&gt;&lt;span title=&quot;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;long_text&quot; id=&quot;result_box&quot;&gt;&lt;span title=&quot;&quot;&gt;Com isso seria possivel adicionar a VM no core do Fedora 9 dentre outras distros Linux .Existe ainda o projeto Shark , que cria um JITespecialmente projetado&amp;nbsp; para a IcedTea.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;long_text&quot; id=&quot;result_box&quot;&gt;&lt;span title=&quot;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;long_text&quot; id=&quot;result_box&quot;&gt;&lt;span title=&quot;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;/div&gt;&lt;span class=&quot;long_text&quot; id=&quot;result_box&quot;&gt;&lt;span title=&quot;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhWdstSTUGAL-2vILf_Ci_8qqyAziBO8WcpCQJODbLrQw9DlYxBepJhKC6MIlvqQdPyrEsc3QSgdkdPWZ4DtEbBRX8A6W9k5jXhnYlmbXOkCK8Vc2o_IFEppvl31ApxeAvM2HdLRE6btIA/s1600/drink_duke_java.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhWdstSTUGAL-2vILf_Ci_8qqyAziBO8WcpCQJODbLrQw9DlYxBepJhKC6MIlvqQdPyrEsc3QSgdkdPWZ4DtEbBRX8A6W9k5jXhnYlmbXOkCK8Vc2o_IFEppvl31ApxeAvM2HdLRE6btIA/s320/drink_duke_java.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;span class=&quot;long_text&quot; id=&quot;result_box&quot;&gt;&lt;span title=&quot;&quot;&gt;A RedHat possui a JBoss, divisão focada em&amp;nbsp; tecnologia Java, que costuma criar diversos projetos com grande força e penetração na comunidade como JBoss AS, Hibernate, JBPM, Drools e JBoss Seam.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;long_text&quot; id=&quot;result_box&quot;&gt;&lt;span title=&quot;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;long_text&quot; id=&quot;result_box&quot;&gt;&lt;span title=&quot;&quot;&gt;Seria o proximo passo da Oracle processar à Red Hat/JBoss e tentar exercer o controle, tambem dessas tecnologias?&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh48SF9jTXPUTbH_Rd_blsjMzs6xOOjJy6xR9FVsx2UM71m69uzo7dLhcjdBMifCWzS1rGlFpNGSTCG8cRKqU-aSNqSHL5RykgMJ3PA8e-_HnZOe_Dr2vW2jxrWqUcm7yRdEiHpaeXtfbo/s1600/fight.gif&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;327&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh48SF9jTXPUTbH_Rd_blsjMzs6xOOjJy6xR9FVsx2UM71m69uzo7dLhcjdBMifCWzS1rGlFpNGSTCG8cRKqU-aSNqSHL5RykgMJ3PA8e-_HnZOe_Dr2vW2jxrWqUcm7yRdEiHpaeXtfbo/s400/fight.gif&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span class=&quot;long_text&quot; id=&quot;result_box&quot;&gt;&lt;span title=&quot;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;long_text&quot; id=&quot;result_box&quot;&gt;&lt;span title=&quot;&quot;&gt;Agora é o momento da comunidade mostrar atitude e adaptar sua cultura ,para não &quot;bater de frente&quot; com os interesses da Oracle,&amp;nbsp; e mostrar que o&amp;nbsp; Java ainda é muito legal(como linguagem)&amp;nbsp; e ainda por cima de simbolo extremamente importante no cenario opensource/enterprise(como plataforma).&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgULNiHdfZMT6SxsvdIXT4e9jPBElUHAH8qv-JLP3IaGZP4IkVP-KxQJze14tBNxJljHh_N-cv_PNTxYJYnNyv6Hwj-IUgQxBB3UnbOOcjSUuZ-xi3cQFO9lQb4edDT_FuxrzEvZ_nAfvQ/s1600/larry-ellison.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;233&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgULNiHdfZMT6SxsvdIXT4e9jPBElUHAH8qv-JLP3IaGZP4IkVP-KxQJze14tBNxJljHh_N-cv_PNTxYJYnNyv6Hwj-IUgQxBB3UnbOOcjSUuZ-xi3cQFO9lQb4edDT_FuxrzEvZ_nAfvQ/s320/larry-ellison.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;span class=&quot;long_text&quot; id=&quot;result_box&quot;&gt;&lt;span title=&quot;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;long_text&quot; id=&quot;result_box&quot;&gt;&lt;span title=&quot;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;&lt;span class=&quot;long_text&quot; id=&quot;result_box&quot;&gt;&lt;span title=&quot;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;Referencias&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span class=&quot;long_text&quot; id=&quot;result_box&quot;&gt;&lt;span title=&quot;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;long_text&quot; id=&quot;result_box&quot;&gt;&lt;span title=&quot;&quot;&gt;http://mashable.com/2010/08/12/oracle-google-android-lawsuit/&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;long_text&quot; id=&quot;result_box&quot;&gt;&lt;span title=&quot;&quot;&gt; &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;long_text&quot; id=&quot;result_box&quot;&gt;&lt;span title=&quot;&quot;&gt;http://harmony.apache.org/&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;long_text&quot; id=&quot;result_box&quot;&gt;&lt;span title=&quot;&quot;&gt;http://en.wikipedia.org/wiki/Apache_Harmony&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;long_text&quot; id=&quot;result_box&quot;&gt;&lt;span title=&quot;&quot;&gt;http://www.arduino.cc/&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;long_text&quot; id=&quot;result_box&quot;&gt;&lt;span title=&quot;&quot;&gt;http://sunspotworld.com/&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;long_text&quot; id=&quot;result_box&quot;&gt;&lt;span title=&quot;&quot;&gt;http://en.wikipedia.org/wiki/Sun_SPOT &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;long_text&quot; id=&quot;result_box&quot;&gt;&lt;span title=&quot;&quot;&gt;http://en.wikipedia.org/wiki/Squawk_virtual_machine&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;long_text&quot; id=&quot;result_box&quot;&gt;&lt;span title=&quot;&quot;&gt;http://pt.wikipedia.org/wiki/IcedTea&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;long_text&quot; id=&quot;result_box&quot;&gt;&lt;span title=&quot;&quot;&gt;http://openjdk.java.net/&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;long_text&quot; id=&quot;result_box&quot;&gt;&lt;span title=&quot;&quot;&gt;http://pt.wikipedia.org/wiki/OpenJDK&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;long_text&quot; id=&quot;result_box&quot;&gt;&lt;span title=&quot;&quot;&gt;http://www.sunspotworld.com/docs/index.html&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;long_text&quot; id=&quot;result_box&quot;&gt;&lt;span title=&quot;&quot;&gt;&lt;a href=&quot;http://sunspotworld.com/Tutorial/index.html&quot;&gt;Tutorial SunSpot&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;long_text&quot; id=&quot;result_box&quot;&gt;&lt;span title=&quot;&quot;&gt;&lt;a href=&quot;http://www.youtube.com/watch?v=qbLlwz-HhpA&quot;&gt;Video com Eric Arsenau  sobre a Squawk VM&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;long_text&quot; id=&quot;result_box&quot;&gt;&lt;span title=&quot;&quot;&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;long_text&quot; id=&quot;result_box&quot;&gt;&lt;span title=&quot;&quot;&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;long_text&quot; id=&quot;result_box&quot;&gt;&lt;span title=&quot;&quot;&gt;&lt;/span&gt;&lt;/span&gt;</content><link rel='replies' type='application/atom+xml' href='http://amsterdaintelligence.blogspot.com/feeds/4680277497795122398/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://amsterdaintelligence.blogspot.com/2010/08/oracle-pode-ter-uma-arma-secreta-na-mao.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7308500728033786786/posts/default/4680277497795122398'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7308500728033786786/posts/default/4680277497795122398'/><link rel='alternate' type='text/html' href='http://amsterdaintelligence.blogspot.com/2010/08/oracle-pode-ter-uma-arma-secreta-na-mao.html' title='Oracle pode ter uma arma secreta na mão?'/><author><name>@williamgouvea</name><uri>http://www.blogger.com/profile/16737800888418990640</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiXgCyNKh33yvHTbk83E03NP-2_VEgR6dAblD4Daus1Z6NoufJ-_ovu0KdlMO4KlMwqlDiHfgVPefrqERTjJ-nkKZP7_S41tqN6sQ9-suaiqjp622XDcN72QNXCLNB5SCg/s220/trabalho.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiVyn-j036tbhq97gtJqly8fQkqKkr1-mcqMey25LL64B__wbRQf-px8uRmoW-9KWJuulhqEP6cdjh_TCDc1AYL9Q8UG8pfUFhG1uQvcnOCprKiu4ItJdflDd12yC9dYMkwckmJve-ijAY/s72-c/android-oracle-google.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7308500728033786786.post-668410238132448984</id><published>2010-06-05T00:55:00.000-07:00</published><updated>2010-06-05T01:10:19.222-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="capistrano"/><category scheme="http://www.blogger.com/atom/ns#" term="cobra_fumou python clojure javafx jvm jython jruby ruby google guido_von_rossum llvm"/><category scheme="http://www.blogger.com/atom/ns#" term="deployment"/><category scheme="http://www.blogger.com/atom/ns#" term="fabric"/><category scheme="http://www.blogger.com/atom/ns#" term="glassifshv3"/><category scheme="http://www.blogger.com/atom/ns#" term="lamp"/><category scheme="http://www.blogger.com/atom/ns#" term="lyme"/><category scheme="http://www.blogger.com/atom/ns#" term="python"/><category scheme="http://www.blogger.com/atom/ns#" term="python ruby django rails apache"/><category scheme="http://www.blogger.com/atom/ns#" term="ubuntu"/><title type='text'>Fabric</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgbwS236pYmu1LehY9gR7Okn8eAgycJRS19aOt2NrXbmoVZl_ZYm-169eboRIxE0k27rreN42aod6jXU6eKbHR7QU0aHQC6KSy9it9YY_eUQiDC3T9-jRU8e0-4HbtP_j8gvpw7-yU8REM/s1600/robot_automation_production.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;312&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgbwS236pYmu1LehY9gR7Okn8eAgycJRS19aOt2NrXbmoVZl_ZYm-169eboRIxE0k27rreN42aod6jXU6eKbHR7QU0aHQC6KSy9it9YY_eUQiDC3T9-jRU8e0-4HbtP_j8gvpw7-yU8REM/s400/robot_automation_production.jpg&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;span style=&quot;font-weight: bold;&quot;&gt;Em uma tarefa de deployment de uma aplicação em servidor LAMP  no estágio, eu e meu g gerente tivemos a idéia de usar o Fabric, ferramenta de deployment escrita em Python, opensource e que seria em tese o equivalente ao Capistrano para o Rails.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-weight: bold;&quot;&gt;Resumindo, o Fabric é uma biblioteca Python e uma ferramenta de linha de comando para o  uso de SSH para a implantação do aplicativos ou administração de tarefas  de sistemas.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhgWiyHY4hJTDFqN2PbbOmP5sW9pyayUxuDHo0F6K4frIDVKC-LDivi1c13xt9aiGjBSPk1ntuJCtHyoMx4PVPIhWydwgXNgV-vjYvVUyTTOiZER21T0c8mq8LthAt1S3ws-GgZC44PAsA/s1600/fabric_production_line_dog.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;307&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhgWiyHY4hJTDFqN2PbbOmP5sW9pyayUxuDHo0F6K4frIDVKC-LDivi1c13xt9aiGjBSPk1ntuJCtHyoMx4PVPIhWydwgXNgV-vjYvVUyTTOiZER21T0c8mq8LthAt1S3ws-GgZC44PAsA/s400/fabric_production_line_dog.jpg&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-weight: bold;&quot;&gt;Ele fornece um conjunto básico de operações para executar comandos shell localmente ou remotamente (normalmente ou via sudo) e fazer o upload / download de arquivos, bem como funcionalidades auxiliares, tais como prompt de usuário que está executando para a entrada, ou abortar a execução.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-weight: bold;&quot;&gt;Porem,  pesquisando sobre assunto, podemos ver poucos posts de blogs e informação disseminada sobre o assunto, em relação ao seu irmão do mundo Rails&lt;/span&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-weight: bold;&quot;&gt;Vendo a documentação , podemos notar que o projeto ainda esta no começo(v0.9), e tem muito potencial, devido ao poder que o Python proporciona á ferramenta.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-weight: bold;&quot;&gt;Basicamente você instala o Fabric no Ubuntu 9.10(Karmic)através do comando:&lt;/span&gt;&lt;br /&gt;
&lt;script src=&quot;http://pastie.org/992817.js&quot;&gt;
&lt;/script&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-weight: bold;&quot;&gt;Automaticamente o Fabric já esta no seu $PYTHONPATH e com isso a proxima tarefa seria criar um arquivo fab da seguinte forma:&lt;/span&gt;&lt;br /&gt;
&lt;script src=&quot;http://pastie.org/992712.js&quot;&gt;
&lt;/script&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Dentro do fabfile.py você deve escrever suas tarefas em Python.Sendo assim dentro deste arquivo você pode mesclar ShellScript com codigo Python, solução matadora em ambiente Linux(Ubuntu).&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Estando no mesmo diretorio do seu fabfile.py, você pode executar suas tarefas Fabric(metódos python) da seguinte forma:&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;script src=&quot;http://pastie.org/992822.js&quot;&gt;
&lt;/script&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-weight: bold;&quot;&gt;No tutorial basico encontrado no site, existe um bom exemplo de um script simples para fazer um deployment e montar um pack com a aplicação alem de rodar os testes do Django.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;script src=&quot;http://pastie.org/992824.js&quot;&gt;
&lt;/script&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-weight: bold;&quot;&gt;Partindo desse script, a idéia era fazer o deployment de varios build&#39;s sucessivos, de forma incremental, baseado nos seguintes requesitos :&lt;/span&gt;&lt;br /&gt;
&lt;ul style=&quot;font-weight: bold;&quot;&gt;&lt;li&gt;Tags do controle de versão , no caso, o Mercurial(HG)&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;Cobrir e rodar os testes da aplicação&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;package  com timestamp, versionando assim os releases&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;Deployment em varios servidores(staging, production)&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;Restart do Apache e do Memcached.&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;span style=&quot;font-weight: bold;&quot;&gt;Alem disso, uma boa estrategia no caso de ocorrer algo de errado no deployment de uma versão, ou até na versão atual, seria uma função de rollback, como acontece no Capistrano que resgataria o server para uma versão estavel da aplicação.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-weight: bold;&quot;&gt;Ao meu ver, qualquer tarefa administrativa pode ser executada de forma automatica usando o Fabric, mas claro, não existe bala de prata, e por isso devemos sempre colocar na balança os motivos e desvantagens de usar alguma tecnica.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-weight: bold;&quot;&gt;Algumas coisas como gerenciar o firewall,  ou proteger de bruteforce attacks, seriam simples, bastando apenas a criação de  uma fab_task que manipula o iptables,ou usa alguma ferramenta como o &lt;/span&gt;&lt;a href=&quot;https://help.ubuntu.com/9.10/serverguide/C/firewall.html&quot; style=&quot;font-weight: bold;&quot;&gt;UFW Uncomplicated Firewall&lt;/a&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-weight: bold;&quot;&gt;Em soluções onde ocorrem grandes e as vezes devastadoras mudanças de DBschema, o uso do &lt;/span&gt;&lt;a href=&quot;http://jazstudios.blogspot.com/2009/10/django-south-migrations.html&quot; style=&quot;font-weight: bold;&quot;&gt;SOUTH&lt;/a&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt; para criar migrations é interessante, tornando as modificações do DB transacionais ,consistentes e claro ,menos doloridas.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-weight: bold;&quot;&gt;O Fabric tambem pode ser alternativa para o deployment de  aplicações escritas em outras linguagens da plataforma LAMP, como:&lt;/span&gt;&lt;br /&gt;
&lt;ul style=&quot;font-weight: bold;&quot;&gt;&lt;li&gt;Perl&lt;/li&gt;
&lt;li&gt;PHP&lt;/li&gt;
&lt;li&gt;Python&lt;/li&gt;
&lt;li&gt;Erlang¹&lt;/li&gt;
&lt;/ul&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Fanatismos á parte, deve se levar em conta  o fato de que no Rails e para o mundo Ruby ,já existe uma otima ferramenta, o Capistrano.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-weight: bold;&quot;&gt;Fabric ao meu ver tem potencial para atuar como peça importante na pilha LAMP, sendo tambem  alternativa para automatização de tarefas em outras plataformas como Java² e PHP/MySQL.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-weight: bold;&quot;&gt;Erlang¹: ver &lt;/span&gt;&lt;a href=&quot;http://21ccw.blogspot.com/2008/02/lyme-vs-lamp-i.html&quot; style=&quot;font-weight: bold;&quot;&gt;LYME stack, Linux/Yaws/Mnesia(CouchDB)/Erlang&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;font-weight: bold; text-align: justify;&quot;&gt;Referencias:&lt;/div&gt;&lt;ul style=&quot;font-weight: bold;&quot;&gt;&lt;li&gt;&lt;a href=&quot;http://docs.fabfile.org/0.9.0/index.html&quot;&gt;Fabric&lt;/a&gt;&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Solution_stack&quot;&gt;Stack Solution&lt;/a&gt;&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://jazstudios.blogspot.com/2009/10/django-south-migrations.html&quot;&gt;South&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content><link rel='replies' type='application/atom+xml' href='http://amsterdaintelligence.blogspot.com/feeds/668410238132448984/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://amsterdaintelligence.blogspot.com/2010/06/fabric.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7308500728033786786/posts/default/668410238132448984'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7308500728033786786/posts/default/668410238132448984'/><link rel='alternate' type='text/html' href='http://amsterdaintelligence.blogspot.com/2010/06/fabric.html' title='Fabric'/><author><name>@williamgouvea</name><uri>http://www.blogger.com/profile/16737800888418990640</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiXgCyNKh33yvHTbk83E03NP-2_VEgR6dAblD4Daus1Z6NoufJ-_ovu0KdlMO4KlMwqlDiHfgVPefrqERTjJ-nkKZP7_S41tqN6sQ9-suaiqjp622XDcN72QNXCLNB5SCg/s220/trabalho.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgbwS236pYmu1LehY9gR7Okn8eAgycJRS19aOt2NrXbmoVZl_ZYm-169eboRIxE0k27rreN42aod6jXU6eKbHR7QU0aHQC6KSy9it9YY_eUQiDC3T9-jRU8e0-4HbtP_j8gvpw7-yU8REM/s72-c/robot_automation_production.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7308500728033786786.post-6426642432471738875</id><published>2010-05-23T02:06:00.000-07:00</published><updated>2010-05-28T06:32:08.826-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="cache"/><category scheme="http://www.blogger.com/atom/ns#" term="coc"/><category scheme="http://www.blogger.com/atom/ns#" term="deployment"/><category scheme="http://www.blogger.com/atom/ns#" term="dry"/><category scheme="http://www.blogger.com/atom/ns#" term="fabric"/><category scheme="http://www.blogger.com/atom/ns#" term="lamp"/><category scheme="http://www.blogger.com/atom/ns#" term="memcache"/><category scheme="http://www.blogger.com/atom/ns#" term="mysql"/><category scheme="http://www.blogger.com/atom/ns#" term="postgresql"/><category scheme="http://www.blogger.com/atom/ns#" term="python ruby django rails apache"/><category scheme="http://www.blogger.com/atom/ns#" term="teoria da computacao"/><category scheme="http://www.blogger.com/atom/ns#" term="web frameworks"/><title type='text'>Coisas legais do dia-a dia</title><content type='html'>Na ultima semana, em  um projeto interno da empresa onde trabalho, mais uma vez me dei conta de como conceitos basicos e bem consolidados podem fazer realmente a diferença entre algo simples ou complexo e sobre uma solução ser boa ou ruim.&lt;br /&gt;&lt;br /&gt;Conversando com a galera da empresa sobre frameworks web modernos, tecnologias atuais e o ciclo das tecnologias, tal como acontece nas artes, pude ver o quão a minha idéia realmente fazia sentido.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-size:180%;&quot;&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Principio da Localidade&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Basicamente a localidade define o melhor aproveitamento da hierarquia de memória em um sistema definindo assim o conceito de &lt;a href=&quot;http://en.wikipedia.org/wiki/Cache&quot;&gt;cache&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;O princípio da localidade de referência diz que o dado usado mais recentemente tem grande probabilidade de ser acessado novamente num futuro próximo (localidade temporal). Favorecendo-se o acesso a tais dados, aumenta-se o desempenho do sistema.&lt;br /&gt;&lt;br /&gt;Já o principio da localidade espacial diz que um endereço em memoria , tende a ter endereços proximos acessados em um futuro proximo, devido a natureza dos loops(repetição) e das estruturas de dados de armazenamento sequencial(vetores).&lt;br /&gt;&lt;br /&gt;Uma definição mais simples de cache poderia ser: uma área de armazenamento temporária onde os dados frequentemente acedidos são armazenados para acesso rápido.&lt;br /&gt;&lt;br /&gt;O uso do &lt;a href=&quot;http://en.wikipedia.org/wiki/Memcached&quot;&gt;Memcached&lt;/a&gt; se justifica devido a tudo isso, tornando aplicações que possuam muitos acessos  ao banco de dados incrivelmente performaticas.Quando o assunto for alta disponibilidade do banco de dados, o Memcached tambem pode ser uma ótima pedida.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-size:180%;&quot;&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Estrutura de Dados&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Saber implementar e entender as estruturas de dados faz grande diferença na hora de solucionar problemas.Saber onde e porque usar uma Stack, uma Queue, um Map, um Set ou uma Tree, suas politicas de uso e seus variados tipos de interface pode fazer você pensar Out-of-The-Box =).&lt;br /&gt;&lt;br /&gt;Na hora de parsear texto, inverter strings,  trabalhar com interpretação de linguagens, ou automatizar etapas , usar Stack/Pilha com politica LIFO é preciso!&lt;br /&gt;&lt;br /&gt;Em um contexto de concorrencia, eventos do tipo Publish/Subscribe,caixa de email e computação distribuida em geral, vale a pena dar uma boa olha em Queue/Fila com politica FIFO.&lt;br /&gt;&lt;br /&gt;Cache , Sessões, DNS entre outras aplicações ficam a cargo dos HashMaps.&lt;br /&gt;&lt;br /&gt;Para Foruns , Conceitos de Memória, e  Lógica em Geral vale a pena estudar sobre Arvores e Heaps.&lt;br /&gt;&lt;br /&gt;Existem milhares de aplicações individuais e conjuntas destas estruturas de dados e um  bom conhecimento sobre suas interfaces e aplicações pode fazer a diferença em muitos casos.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-size:180%;&quot;&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Teoria da Computação&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Coisas como O(1), O(n),O(logn) podem ser horriveis se você não gosta de matematica ou não entende seus algoritmos e sua &lt;a href=&quot;http://pt.wikipedia.org/wiki/Complexidade_computacional&quot;&gt;complexidade&lt;/a&gt;.Porem , se você olhar , mesmo que intuitivamente para seus algoritmos, poderá entender o que pode estar acontecendo e quem saber fazer isso acontecer mais rapido.&lt;br /&gt;&lt;br /&gt;Em uma dada tarefa, eu e meu gerente percebemos que em um script de deploy automatizado com o &lt;a href=&quot;http://docs.fabfile.org/0.9.0/&quot;&gt;Fabric&lt;/a&gt;, possuíamos um repositorio de estáticos, que devia ter  sua consistencia preservada após varios redeploys.&lt;br /&gt;&lt;br /&gt;O primeiro ataque ao problema foi copiar todo o repositorio para um repositorio auxiliar e posteriormente copia-los de volta. Basicamente um swap, que pra quem ja viu alguns  algoritmos de ordenação, pode ser custoso, já que em principio,neste caso, quanto maior o numero de arquivos estaticos, o tempo da tarefa passa a ser quadrado O(n²).&lt;br /&gt;&lt;br /&gt;O segundo ataque, em um passo de refatoração, foi de criar switch&#39;s com links simbolicos, de forma a manter a aplicação disponivel por maior tempo e tornar o tempo de consumo praticamente constante O(1) como num lookup feito em um hashmap .&lt;br /&gt;&lt;br /&gt;Tal raciocinio, nao leva em conta calculos avançados, benchmarks ou falacias da rede como banda infinita e rede sempre disponivel, sendo apenas um leve esboço de logica.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;font-size:180%;&quot; &gt;LAMP/Web Frameworks&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Podemos ver que &lt;a href=&quot;http://www.djangoproject.com/&quot;&gt;Django&lt;/a&gt;, &lt;a href=&quot;http://rubyonrails.org/&quot;&gt;Rails&lt;/a&gt; dentre outros  frameworks novos para desenvolvimento web, possuem comunidades fortes, principios notaveis como &lt;a href=&quot;http://en.wikipedia.org/wiki/Don%27t_repeat_yourself&quot;&gt;DRY &lt;/a&gt;E &lt;a href=&quot;http://en.wikipedia.org/wiki/Convention_over_configuration&quot;&gt;COC&lt;/a&gt;, arquitetura MVC, alem de manter suas raízes na pilha &lt;a href=&quot;http://en.wikipedia.org/wiki/Solution_stack&quot;&gt;LAMP&lt;/a&gt; OpenSource, revolucionando  ou reensinando a forma como se escreve para web nos dias de hoje.&lt;br /&gt;&lt;br /&gt;Contudo,no  mundo Java, que muitas vezes possui pensamentos megalomaniacos de contrução de foguetes(rsrsrs), podemos ver uma mudança de comportamento , dada a grande adoção de frameworks como &lt;a href=&quot;http://vraptor.caelum.com.br/en&quot;&gt;VRaptor&lt;/a&gt;, &lt;a href=&quot;http://www.playframework.org/&quot;&gt;Play&lt;/a&gt;  e &lt;a href=&quot;http://www.scooterframework.com/&quot;&gt;Scooter&lt;/a&gt; que aprenderam principalmente com o Rails como o desenvolvimento web pode ser produtivo, divertido e em Java.&lt;br /&gt;&lt;br /&gt;Coisas como JSF, Wicket, GWT, Struts podem até fazer sentido em alguns contextos, mas se você parar e pensar, pra que você precisa de milhares de build&#39;s complexos, milhões de dependencias, e lógica de processamento rebuscada que &quot;esconde&quot; as coisas do programador?&lt;br /&gt;&lt;br /&gt;Não é  preciso reinventar rodas, nem criar engenhocas complexas para web, apenas usar o bom senso e conceitos já batidos como:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Client-side com &lt;a href=&quot;http://jquery.com/&quot;&gt;JQuery&lt;/a&gt;,&lt;a href=&quot;http://www.extjs.com/&quot;&gt; ExtJS&lt;/a&gt;, &lt;a href=&quot;http://mootools.net/&quot;&gt;MooTools&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;WebFrameworks como Rails, Django&lt;/li&gt;&lt;li&gt;Linguagens Script como  Python,Ruby&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Linux como OS, geralmente &lt;a href=&quot;http://www.ubuntu.com/&quot;&gt;Ubuntu&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;MySQL/PostgreSQL como banco de dados&lt;/li&gt;&lt;li&gt;ApacheHTTPD, Ngix ou Lighttpd como servidor web&lt;/li&gt;&lt;/ul&gt;Conhecimentos sólidos em computação distribuida,arquitetura de sistemas, shell script, sql, http, smtp, javascript, e linguagens dinamicas pode ser uma boa opção de &quot;munição&quot; para seus combates diários na web.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Obrigado pelo seu tempo.</content><link rel='replies' type='application/atom+xml' href='http://amsterdaintelligence.blogspot.com/feeds/6426642432471738875/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://amsterdaintelligence.blogspot.com/2010/05/coisas-legais-do-dia-dia.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7308500728033786786/posts/default/6426642432471738875'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7308500728033786786/posts/default/6426642432471738875'/><link rel='alternate' type='text/html' href='http://amsterdaintelligence.blogspot.com/2010/05/coisas-legais-do-dia-dia.html' title='Coisas legais do dia-a dia'/><author><name>@williamgouvea</name><uri>http://www.blogger.com/profile/16737800888418990640</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiXgCyNKh33yvHTbk83E03NP-2_VEgR6dAblD4Daus1Z6NoufJ-_ovu0KdlMO4KlMwqlDiHfgVPefrqERTjJ-nkKZP7_S41tqN6sQ9-suaiqjp622XDcN72QNXCLNB5SCg/s220/trabalho.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7308500728033786786.post-7455744406824138235</id><published>2010-04-04T04:06:00.000-07:00</published><updated>2010-04-04T19:49:10.154-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="ruby jruby python django rails jvm script_languages programming programação"/><title type='text'>Ruby x Python</title><content type='html'>&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgG5kv6wGalk1IZ6bO0OB3YHucrJePlxg-dDrL6aQUBqep3iPRC52i7Nxx2hFeHbFn_po89J_TaN-VaFT0cG1ehyphenhyphen_llna05LtfVpRiDUrqWagZp7KziIH7t1gct_QVlbC9URi4g0xB8QIQ/s1600/gloves.jpg&quot;&gt;&lt;img style=&quot;margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 298px; height: 400px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgG5kv6wGalk1IZ6bO0OB3YHucrJePlxg-dDrL6aQUBqep3iPRC52i7Nxx2hFeHbFn_po89J_TaN-VaFT0cG1ehyphenhyphen_llna05LtfVpRiDUrqWagZp7KziIH7t1gct_QVlbC9URi4g0xB8QIQ/s400/gloves.jpg&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5456281894291022930&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;color: rgb(0, 153, 0);font-family:courier new;font-size:130%;&quot;  &gt; &lt;span style=&quot;font-weight: bold;&quot;&gt;Nos últimos tempos tenho metido a cara no Python, e também aprendendo Django,  para um projeto na Concrete e realmente gostei do que vi, como mostro aqui.Não é difícil se apaixonar pela linguagem devido a facilidade e  simplicidade de suas libs.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEht8LEwnncnyd_Gg8aDfwXa9wt-OhipQ4cbZrFAvi285H0QCzD1rZfTvg6-MdA4qEWuWgqk-2-QhV9BJhn4rAKdGdOPLDoPerHBSBO7yf1q4B0N24ADhX-nND5KLSQ4ZftrhXQUSVP9DgM/s1600/guido_van_rossum_oscon_2006.jpg&quot;&gt;&lt;img style=&quot;margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 267px; height: 400px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEht8LEwnncnyd_Gg8aDfwXa9wt-OhipQ4cbZrFAvi285H0QCzD1rZfTvg6-MdA4qEWuWgqk-2-QhV9BJhn4rAKdGdOPLDoPerHBSBO7yf1q4B0N24ADhX-nND5KLSQ4ZftrhXQUSVP9DgM/s400/guido_van_rossum_oscon_2006.jpg&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5456282084198959714&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style=&quot;color: rgb(0, 153, 0);font-family:courier new;font-size:130%;&quot;  &gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;No ultimo ano aprendi Ruby e Rails e consegui trabalhar em 2 projetos usando a tecnologia. &lt;/span&gt;  &lt;span style=&quot;font-weight: bold;&quot;&gt;Pra mim que era  ( e sou ainda!) Javaholic, mas não Shiita, foi totalmente gratificante, ainda mais ver o projeto JRuby decolando, e facilidade e bom gosto no uso da versão para JVM e seu ecossistema.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjHWHzXJoFSNv00ojODBRttm2VsweOnEM-leJVFseGFRF5FhaZ88arzubJr9pJpMwuGyqoZJqtEMInkQ1PftwGnDu9enJtoI4iimAwKhzA_lC5W0-Sm-3_iDt0JdXJPNZUgYitAIMrh60Q/s1600/java_vs_ruby1.jpg&quot;&gt;&lt;img style=&quot;margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 330px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjHWHzXJoFSNv00ojODBRttm2VsweOnEM-leJVFseGFRF5FhaZ88arzubJr9pJpMwuGyqoZJqtEMInkQ1PftwGnDu9enJtoI4iimAwKhzA_lC5W0-Sm-3_iDt0JdXJPNZUgYitAIMrh60Q/s400/java_vs_ruby1.jpg&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5456282961653680690&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style=&quot;color: rgb(0, 153, 0);font-family:courier new;font-size:130%;&quot;  &gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Alem das vantagens e desvantagens de cada mundo, coisas como OpenSource e consequentemente comunidade forte e vibrante, composta por muitos bons programadores facilita a queda livre no ambiente dessas linguagens .&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjVu7fsWgEyt51gjQWaTRAlw28aMuo4kwcEYYMWkJ2Ao6CCj2oPh50LTceGhZElQ484-4tls1qfqIY2MGHXSCXS9DhwrAWwFN3sMVIpM4OkaqlW1laaKtMWzYbmqAbhhsvJ8U5FgMF8Rek/s1600/freefall.jpg&quot;&gt;&lt;img style=&quot;margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 290px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjVu7fsWgEyt51gjQWaTRAlw28aMuo4kwcEYYMWkJ2Ao6CCj2oPh50LTceGhZElQ484-4tls1qfqIY2MGHXSCXS9DhwrAWwFN3sMVIpM4OkaqlW1laaKtMWzYbmqAbhhsvJ8U5FgMF8Rek/s400/freefall.jpg&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5456283979562962578&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style=&quot;color: rgb(0, 153, 0);font-family:courier new;font-size:130%;&quot;  &gt;&lt;span style=&quot;font-weight: bold;&quot; id=&quot;result_box&quot; class=&quot;long_text&quot;&gt;&lt;span style=&quot;background-color: rgb(255, 255, 255);&quot; title=&quot;My general advice on the Python vs. Ruby question boils down to asking &amp;quot;how does your brain work?&amp;quot;&quot;&gt;&lt;br /&gt;Meu conselho geral sobre a questão resume Python vs Ruby até perguntando &quot;como é seu trabalho de cérebro?&quot; &lt;/span&gt;&lt;span style=&quot;background-color: rgb(255, 255, 255);&quot; title=&quot;Because, really, the two languages are about equivalent for most practical purposes (except Unicode, but Ruby will be fixing that soon enough).&quot;&gt;Porque, realmente, as duas linguagens são aproximadamente equivalentes para a maioria dos efeitos práticos (excepto Unicode, Ruby, mas que será fixa em breve).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhKlVvbfnkzGToe0YBsgw-a7QQXvmWEwvTv37y67cmMWjXv4CnEz0D1F5PwoMd5fcCpjkFMTzmLi_gRXOzxPPnIcplQvOeKV_1NrSPayWj9AVNxmKYDmnB7OHAl-F1COYxuC0uuJHpWBUI/s1600/java-laser-level-python.png&quot;&gt;&lt;img style=&quot;margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 228px; height: 400px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhKlVvbfnkzGToe0YBsgw-a7QQXvmWEwvTv37y67cmMWjXv4CnEz0D1F5PwoMd5fcCpjkFMTzmLi_gRXOzxPPnIcplQvOeKV_1NrSPayWj9AVNxmKYDmnB7OHAl-F1COYxuC0uuJHpWBUI/s400/java-laser-level-python.png&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5456283388984937106&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style=&quot;color: rgb(0, 153, 0);font-family:courier new;font-size:130%;&quot;  &gt;&lt;span style=&quot;font-weight: bold;&quot; id=&quot;result_box&quot; class=&quot;long_text&quot;&gt;&lt;span style=&quot;background-color: rgb(255, 255, 255);&quot; title=&quot;Because, really, the two languages are about equivalent for most practical purposes (except Unicode, but Ruby will be fixing that soon enough).&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;background-color: rgb(255, 255, 255);&quot; title=&quot;The big difference is in the idioms and conventions of the languages; for example, Ruby programmers, IME, tend to be much more willing to do things like adding new functionality to the built-in classes, while Python programmers are generally hesitant to do &amp;quot;&quot;&gt;A grande diferença está no idioma e nas convenções como  por exemplo, os programadores de Ruby,  tendem a ser muito mais dispostos a fazer coisas como a adição de novas funcionalidades para o built-in classes(Ferramentas perigosas como disse Martin Fowler), enquanto que programadores Python geralmente hesitam em fazer &quot;&lt;/span&gt;&lt;span style=&quot;background-color: rgb(255, 255, 255);&quot; title=&quot;monkeypatching&amp;quot; anywhere (and can&#39;t do it to the built-ins, because they&#39;re not mutable).&quot;&gt;monkeypatching&quot; em qualquer lugar (e não pode fazê-lo para o built-ins, porque não são mutáveis).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt; &lt;span style=&quot;font-weight: bold;&quot; id=&quot;result_box&quot; class=&quot;long_text&quot;&gt;&lt;span style=&quot;background-color: rgb(255, 255, 255);&quot; title=&quot;Ruby&#39;s got quite a bit more syntactic sugar (some of which will be immediately familiar to the part of your brain that&#39;s assimilated Perl), but of course that comes with the overhead of having to learn how it works.&quot;&gt;Ruby tem muitos açucares sintaticos (alguns dos quais serão imediatamente familiares), mas é claro que vem com a sobrecarga de ter que aprender como eles funcionam. &lt;/span&gt;&lt;span style=&quot;background-color: rgb(255, 255, 255);&quot; title=&quot;Python has much less of that, but at the cost of being more verbose in plenty of situations.&quot;&gt;Python tem bem menos malabarismos, mas pode ser mais verboso as vezes.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgMrQbGsQ85ra-oVSM9J1878gYIgIZYiw8A1nWGbQ6NC2AsT5hB1Nqjl0SM9MgH4mg9X6D-VZmkJxq-gyPY6hY4O3zk9RKxxpfYO8eAf63jwII34b-hr0rTSCd2nKgIajYs4PN1rsLgG-I/s1600/juggler.jpg&quot;&gt;&lt;img style=&quot;margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 269px; height: 400px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgMrQbGsQ85ra-oVSM9J1878gYIgIZYiw8A1nWGbQ6NC2AsT5hB1Nqjl0SM9MgH4mg9X6D-VZmkJxq-gyPY6hY4O3zk9RKxxpfYO8eAf63jwII34b-hr0rTSCd2nKgIajYs4PN1rsLgG-I/s400/juggler.jpg&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5456284957830748418&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style=&quot;color: rgb(0, 153, 0);font-family:courier new;font-size:130%;&quot;  &gt;&lt;span style=&quot;font-weight: bold;&quot; id=&quot;result_box&quot; class=&quot;long_text&quot;&gt;&lt;span style=&quot;background-color: rgb(255, 255, 255);&quot; title=&quot;Python has much less of that, but at the cost of being more verbose in plenty of situations.&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt; &lt;span style=&quot;font-weight: bold;&quot; id=&quot;result_box&quot; class=&quot;long_text&quot;&gt;&lt;span style=&quot;background-color: rgb(255, 255, 255);&quot; title=&quot;Anyway, regardless of your choice you&#39;re going to have access to good documentation (Dive into Python is a great book, ditto the pickaxe book on the Ruby side), strong communities and motivated people writing heaps of solid, reusable code; it&#39;s a&quot;&gt;De qualquer forma, independentemente de sua escolha você vai ter acesso à documentação boa (Dive Into Python é um grande livro, idem o livro PickAxe no lado Ruby), comunidades fortes e as pessoas motivadas a escrever montes de código, sólidos e reutilizáveis, dispostos a vencer de &lt;/span&gt;&lt;span style=&quot;background-color: rgb(255, 255, 255);&quot; title=&quot;win either way, so I&#39;d say dip your toes in both pools, then follow through with the one you feel most comfortable programming in.&quot;&gt; qualquer maneira esta &quot;disputa&quot;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Para  web, tanto o Django quanto o Rails são frameworks MVC com principicos como DRY(Don&#39;t Repeat Yourself), COC(Convetion Over Configuration) alem de forte comunidade que geram muito codigo e documentação, o  que facilita e tornam mais doce a vida de qualquer equipe de desenvolvinento.&lt;br /&gt;&lt;br /&gt;Para deployment, a utilização do Google App Engine pode ser vantajosa e uma das primeiras linguagens que rodaram nessa plataforma de desenvolvimento foi o Python(Django), seguido pelo Java que tornou possivel o deployment de aplicações JRuby/Rails.&lt;br /&gt;&lt;br /&gt;&lt;object height=&quot;364&quot; width=&quot;445&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/v1gTI4BOPUw&amp;amp;hl=en_US&amp;amp;fs=1&amp;amp;color1=0x234900&amp;amp;color2=0x4e9e00&amp;amp;border=1&quot;&gt;&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot;&gt;&lt;param name=&quot;allowscriptaccess&quot; value=&quot;always&quot;&gt;&lt;embed src=&quot;http://www.youtube.com/v/v1gTI4BOPUw&amp;amp;hl=en_US&amp;amp;fs=1&amp;amp;color1=0x234900&amp;amp;color2=0x4e9e00&amp;amp;border=1&quot; type=&quot;application/x-shockwave-flash&quot; allowscriptaccess=&quot;always&quot; allowfullscreen=&quot;true&quot; height=&quot;364&quot; width=&quot;445&quot;&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;&lt;object width=&quot;445&quot; height=&quot;364&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/PfnP-8XbJao&amp;hl=en_US&amp;fs=1&amp;color1=0x234900&amp;color2=0x4e9e00&amp;border=1&quot;&gt;&lt;/param&gt;&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot;&gt;&lt;/param&gt;&lt;param name=&quot;allowscriptaccess&quot; value=&quot;always&quot;&gt;&lt;/param&gt;&lt;embed src=&quot;http://www.youtube.com/v/PfnP-8XbJao&amp;hl=en_US&amp;fs=1&amp;color1=0x234900&amp;color2=0x4e9e00&amp;border=1&quot; type=&quot;application/x-shockwave-flash&quot; allowscriptaccess=&quot;always&quot; allowfullscreen=&quot;true&quot; width=&quot;445&quot; height=&quot;364&quot;&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;object height=&quot;364&quot; width=&quot;445&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/PLUS00QrYWw&amp;amp;hl=en_US&amp;amp;fs=1&amp;amp;color1=0x234900&amp;amp;color2=0x4e9e00&amp;amp;border=1&quot;&gt;&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot;&gt;&lt;param name=&quot;allowscriptaccess&quot; value=&quot;always&quot;&gt;&lt;embed src=&quot;http://www.youtube.com/v/PLUS00QrYWw&amp;amp;hl=en_US&amp;amp;fs=1&amp;amp;color1=0x234900&amp;amp;color2=0x4e9e00&amp;amp;border=1&quot; type=&quot;application/x-shockwave-flash&quot; allowscriptaccess=&quot;always&quot; allowfullscreen=&quot;true&quot; height=&quot;364&quot; width=&quot;445&quot;&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt; &lt;span style=&quot;font-weight: bold;&quot; id=&quot;result_box&quot; class=&quot;long_text&quot;&gt;&lt;span style=&quot;background-color: rgb(255, 255, 255);&quot; title=&quot;win either way, so I&#39;d say dip your toes in both pools, then follow through with the one you feel most comfortable programming in.&quot;&gt;Eu diria que mergulhar seus dedos do pé em ambos os grupos, em seguida, seguir com o que você sente mais confortável dentro dos paradigmas de programação&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt; ajuda a se ambientar e ir sentindo o conhecimento aterrar no cérebro.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Pra quem ficou curioso e quer um teste drive com essas linguagens , referencias de &lt;a href=&quot;http://amsterdaintelligence.blogspot.com/2008/12/jruby.html&quot;&gt;Ruby(JRuby)&lt;/a&gt; e de &lt;a href=&quot;http://amsterdaintelligence.blogspot.com/2010/03/e-cobra-fumou.html&quot;&gt;Python.&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjvqVUUH__gSZv24j_tbSnzaAoI1aYaLLE0Zc0D8mpYhZ0rhMh4ZSdXMU5uFNEyo5f0ClyviKdsTxxOJd9Zi90lDCrE2WRa0EpaOCXV4GE7onrw2dy_A_v1vg3e_kAClPad5Q9YPCKXWlc/s1600/ruby_matz_python.jpg&quot;&gt;&lt;img style=&quot;margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 329px; height: 400px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjvqVUUH__gSZv24j_tbSnzaAoI1aYaLLE0Zc0D8mpYhZ0rhMh4ZSdXMU5uFNEyo5f0ClyviKdsTxxOJd9Zi90lDCrE2WRa0EpaOCXV4GE7onrw2dy_A_v1vg3e_kAClPad5Q9YPCKXWlc/s400/ruby_matz_python.jpg&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5456282515767780290&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size:180%;&quot;&gt;&lt;span style=&quot;font-weight: bold; color: rgb(255, 0, 0);&quot;&gt;Obrigado pelo seu tempo!&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://amsterdaintelligence.blogspot.com/feeds/7455744406824138235/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://amsterdaintelligence.blogspot.com/2010/04/ruby-x-python.html#comment-form' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7308500728033786786/posts/default/7455744406824138235'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7308500728033786786/posts/default/7455744406824138235'/><link rel='alternate' type='text/html' href='http://amsterdaintelligence.blogspot.com/2010/04/ruby-x-python.html' title='Ruby x Python'/><author><name>@williamgouvea</name><uri>http://www.blogger.com/profile/16737800888418990640</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiXgCyNKh33yvHTbk83E03NP-2_VEgR6dAblD4Daus1Z6NoufJ-_ovu0KdlMO4KlMwqlDiHfgVPefrqERTjJ-nkKZP7_S41tqN6sQ9-suaiqjp622XDcN72QNXCLNB5SCg/s220/trabalho.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgG5kv6wGalk1IZ6bO0OB3YHucrJePlxg-dDrL6aQUBqep3iPRC52i7Nxx2hFeHbFn_po89J_TaN-VaFT0cG1ehyphenhyphen_llna05LtfVpRiDUrqWagZp7KziIH7t1gct_QVlbC9URi4g0xB8QIQ/s72-c/gloves.jpg" height="72" width="72"/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7308500728033786786.post-890015248409972510</id><published>2010-03-22T23:15:00.000-07:00</published><updated>2010-03-28T14:29:44.494-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="cobra_fumou python clojure javafx jvm jython jruby ruby google guido_von_rossum llvm"/><title type='text'>E a cobra fumou!!!!!</title><content type='html'>&lt;span style=&quot;font-size:130%;&quot;&gt;   &lt;a style=&quot;color: rgb(51, 204, 0); font-weight: bold;&quot; onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhtlHWIX98Y3SvBT9ORAUBjeAwCT87KQNti4qpHv1HhoaeiGb-aQ8FtrBMQ71LZQqaLZp8mWKU0TwC-uhaZ5VTZPeX5k1LMZhbZxZls02DOH39Y5qQ_wl79IIyNLZ-iUAyoB_4a7d-SKMo/s1600-h/python-logo-glassy.png&quot;&gt;&lt;img style=&quot;margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 286px; height: 364px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhtlHWIX98Y3SvBT9ORAUBjeAwCT87KQNti4qpHv1HhoaeiGb-aQ8FtrBMQ71LZQqaLZp8mWKU0TwC-uhaZ5VTZPeX5k1LMZhbZxZls02DOH39Y5qQ_wl79IIyNLZ-iUAyoB_4a7d-SKMo/s400/python-logo-glassy.png&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5451728957041703618&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;span style=&quot;color: rgb(51, 204, 0); font-weight: bold;&quot;&gt;Apesar de ter ouvido falar muito do Python, como toda pessoa que vem do Java, e que conhece bem o ecossitema de bibliotecas e frameworks , olhava meio de &quot;cara feia&quot; para a linguagem.Usando Ubuntu, e fussando em blogs e artigos de desenvolvimento Web percebia que ele era muito usado e melhor, muito util.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt; &lt;a style=&quot;color: rgb(51, 204, 0); font-weight: bold;&quot; onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhL0QKHVaamfB_3wWzqhyphenhyphenOysmmeaYpOcrwiDzEzAozl4NK3kROIT56lsbTKMpiBZiGb2_Rp1sMtCXGkPP7Rx7pHD2_UZ8_q_ZFJpVVtFG7FQpT1d3Mi55Nu1ruapdDPkBWeIVxMd55-eRw/s1600-h/desprezo.jpg&quot;&gt;&lt;img style=&quot;margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 170px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhL0QKHVaamfB_3wWzqhyphenhyphenOysmmeaYpOcrwiDzEzAozl4NK3kROIT56lsbTKMpiBZiGb2_Rp1sMtCXGkPP7Rx7pHD2_UZ8_q_ZFJpVVtFG7FQpT1d3Mi55Nu1ruapdDPkBWeIVxMd55-eRw/s400/desprezo.jpg&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5451717055540149762&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;span style=&quot;color: rgb(51, 204, 0); font-weight: bold;&quot;&gt;&lt;br /&gt;&lt;br /&gt;Me  apeguei a estudar o Jython, versao portada para gerar bytecodes e rodar na JVM. Como gosto de linguagens e ja tinha experimentado(e gostado demais por sinal!) Groovy, Ruby(JRuby) , Clojure, JavaFX, por puro preconceito e ignorancia apenas, tornei meu foco apenas para a integração, e as informações mais famosas e &quot;hypes&quot;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj7PUzv7F3o1JquDEwTPepw0OnwLy-OjgsLkLMR6UxeAlbvZPbaLn93VZYDrXQ_2TbG7Y89oQp6yvulRpcgf2HbTpouFO3olENCiLOiXP3nQbBTL2l-s8aRIG8Ns41QnEmA6JZd0Zsjs8I/s1600-h/Jython.jpg&quot;&gt;&lt;img style=&quot;margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 240px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj7PUzv7F3o1JquDEwTPepw0OnwLy-OjgsLkLMR6UxeAlbvZPbaLn93VZYDrXQ_2TbG7Y89oQp6yvulRpcgf2HbTpouFO3olENCiLOiXP3nQbBTL2l-s8aRIG8Ns41QnEmA6JZd0Zsjs8I/s400/Jython.jpg&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5451742567401767554&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: rgb(51, 204, 0); font-weight: bold;&quot;&gt;Eis que  fui encubido de estudar Python/Django durante essa semana para um projeto  no  estagio. Recebi uma biblia(Learning Python da O&#39;Reilly), e muita informação sobre comunidade, projetos na pratica e produtividade em uma conversa com meu gerente.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt; &lt;a style=&quot;color: rgb(51, 204, 0); font-weight: bold;&quot; onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgLtyv21bFisIBc2Gq6ox3gQtOr6NX-cUKJQbWMNUN8LFDmYV5p9KhK-e7OCq45hrTph5a7A_LMc4vPoFZRTRqr3kPQc-3g1LK_brHSUXagS4xi-VaLZsYmIHbr6tFYoDQJnggVHsZd5fw/s1600-h/meeting.jpg&quot;&gt;&lt;img style=&quot;margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 247px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgLtyv21bFisIBc2Gq6ox3gQtOr6NX-cUKJQbWMNUN8LFDmYV5p9KhK-e7OCq45hrTph5a7A_LMc4vPoFZRTRqr3kPQc-3g1LK_brHSUXagS4xi-VaLZsYmIHbr6tFYoDQJnggVHsZd5fw/s400/meeting.jpg&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5451729470092266082&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;  &lt;span style=&quot;color: rgb(51, 204, 0); font-weight: bold;&quot;&gt;&lt;br /&gt;&lt;br /&gt;Fuçando a linguagem, revendo coisas que ja tinha lido por alto, e claro, buscando informação na comunidade, no Google e code snippets, em menos de uma semana alem de me viciar na linguagem, vi que ela é uma poderosissima arma no arsenal de qualquer desenvolvedor, desde a infraestrutura (redes, sistema de arquivos), parsers) até a web(otimos frameworks e api&#39;s).&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: rgb(51, 204, 0); font-weight: bold;&quot;&gt;Vindo do estudo e uso do Grails, Rails, VRaptor e sabendo dos prós e contras de cada mundo, olhei para o Django com admiração após brincar um pouco com o framework.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt; &lt;a style=&quot;color: rgb(51, 204, 0); font-weight: bold;&quot; onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgzmF7-8HXFRxyvIYY4HPS2bRoVuJqXqEymF8ma_jT9LQ-VXp1uG_rgEiiq6hdBfFPVh0QWc03VnhnKfYXlFvdkP0w2KnxDL-9l2BUm5pnidYqWFxeohRdO-c93jYctdTglABktQxJygj8/s1600-h/django-logo.jpg&quot;&gt;&lt;img style=&quot;margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 150px; height: 84px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgzmF7-8HXFRxyvIYY4HPS2bRoVuJqXqEymF8ma_jT9LQ-VXp1uG_rgEiiq6hdBfFPVh0QWc03VnhnKfYXlFvdkP0w2KnxDL-9l2BUm5pnidYqWFxeohRdO-c93jYctdTglABktQxJygj8/s400/django-logo.jpg&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5451731959449857634&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: rgb(51, 204, 0); font-weight: bold;&quot;&gt;O Django desde o começo é simples e o &lt;/span&gt;&lt;a style=&quot;color: rgb(51, 204, 0); font-weight: bold;&quot; href=&quot;http://docs.djangobrasil.org/intro/tutorial01.html&quot;&gt;tutorial no site do projeto&lt;/a&gt;&lt;span style=&quot;color: rgb(51, 204, 0); font-weight: bold;&quot;&gt; te mostra o poder que ele tem. Alguns livros como Django Pratical Projects, tem projetos simples com requisitos usados no dia-a-dia  da maioria dos projetos web.&lt;/span&gt;  &lt;span style=&quot;color: rgb(51, 204, 0); font-weight: bold;&quot;&gt;É a real historia do ver pra quer.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Pra quem vem do mundo OO, o Python tem todo o suporte ao paradigma, te dando um conjunto grande e robusto de libs integradas ( Redes, Threads, Arquivos, Strings, Coleções...) nas mais diversas areas de dominio.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt; &lt;/span&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;&lt;a style=&quot;color: rgb(51, 204, 0); font-weight: bold;&quot; onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi0yRsc1XUiPs1xfTe7FundDVhE-gq0GxLpotmGItVjR9NQFB5DuQ50wPhyphenhyphenmqubLN_vf4QYqEiMGOQSif6fIwW74PFyd-uFjhY_owwD89CKuVtDzKpgt_ZxYuqTln3jYTZvbNm39JBqi_g/s1600-h/dukePython.png&quot;&gt;&lt;img style=&quot;margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 304px; height: 304px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi0yRsc1XUiPs1xfTe7FundDVhE-gq0GxLpotmGItVjR9NQFB5DuQ50wPhyphenhyphenmqubLN_vf4QYqEiMGOQSif6fIwW74PFyd-uFjhY_owwD89CKuVtDzKpgt_ZxYuqTln3jYTZvbNm39JBqi_g/s400/dukePython.png&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5451722450895074850&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;/span&gt; &lt;span style=&quot;font-size:130%;&quot;&gt;&lt;span style=&quot;color: rgb(51, 204, 0); font-weight: bold;&quot;&gt;&lt;br /&gt;&lt;br /&gt;Alem de uma linguagem que permite construções rapidas, curtas e mortais, temos diversas caracteristicas do mundo funcional como funções map(), reduce(), filter()  alem de manipulação de listas como no LISP.&lt;/span&gt;   &lt;span style=&quot;color: rgb(51, 204, 0); font-weight: bold;&quot;&gt;&lt;br /&gt;&lt;br /&gt;Para quem se aventura no mundo LISP, ou adora coisas como metaprogramação no Ruby e no Clojure,  o Python possui ótimo suporte a reflexão   alem de menor rigor no uso de ; e {}.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: rgb(51, 204, 0); font-weight: bold;&quot;&gt;Me atreveria a dizer, com a minha pouca experiencia na linguagem, que ela seria um meio-termo entre o Java e o LISP.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: rgb(51, 204, 0); font-weight: bold;&quot;&gt;Nas universidades   Stanford(berço da Sun e da Google), Michigan(berço dos algoritmos geneticos) e muitas outras, o Python é a linguagem base nos cursos de Ciencia da Computação, pela sua expressividade( boa pra codar algoritmos de forma quase que em  lingua natural), facil aprendizado e vasto conjunto de bibliotecas.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBd9vm_4vyxs-817cVZO_29Y2hutBQxs25e-R6k-ykFqm6Vby9OrY2LcIDt0OcgtWrlUZI9DIeqqraA5aJT9_QJbs9c3MncnWl6lUFwUcwMsWSXmBYKeh0oWzSEtPqeLeVp9LUsyNoRXs/s1600-h/estante-escada-1.jpg&quot;&gt;&lt;img style=&quot;margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 266px; height: 400px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBd9vm_4vyxs-817cVZO_29Y2hutBQxs25e-R6k-ykFqm6Vby9OrY2LcIDt0OcgtWrlUZI9DIeqqraA5aJT9_QJbs9c3MncnWl6lUFwUcwMsWSXmBYKeh0oWzSEtPqeLeVp9LUsyNoRXs/s400/estante-escada-1.jpg&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5451733883426018626&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;&lt;span style=&quot;color: rgb(51, 204, 0); font-weight: bold;&quot;&gt; &lt;/span&gt;  &lt;span style=&quot;color: rgb(51, 204, 0); font-weight: bold;&quot;&gt;Empresas como a NASA, e a Google usam Python em muitos sistemas.A Google inclusive emprega o criador da linguagem, Guido Von Rossum e tem diversos projetos importantes codados na linguagem como Youtube, AppEngine, LLVM(Unladen Swallow) entre outros.&lt;br /&gt;&lt;/span&gt; &lt;span style=&quot;color: rgb(51, 204, 0); font-weight: bold;&quot;&gt;&lt;br /&gt;&lt;br /&gt;No mundo OpenSource o GIMP e o Blender , respectivamente, um editor de imagens completo com recursos equivalentes ao do Photoshop e um editor/modelador 3D poderoso, são aplicações escritas na linguagem e que possuem integração com plugins de terceiros tambem escritos em Python.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: rgb(51, 204, 0); font-weight: bold;&quot;&gt;Fatores como produtividade na web(Django,Pylons), comunidade opensource(documentação/foruns/suporte) , facilidade no aprendizado e poder nas abstrações fazem valer a pena estudar e ter um contato mais intimo com essa linguagem.&lt;/span&gt;  &lt;span style=&quot;color: rgb(51, 204, 0); font-weight: bold;&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Com certeza alem de te  tornar um programador melhor e  mais versatil , ele tambem sera uma fonte de inspiração e diversão na hora de programar.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;   &lt;/span&gt;&lt;ul style=&quot;color: rgb(51, 51, 255);&quot;&gt;&lt;li&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;&lt;a style=&quot;font-weight: bold;&quot; href=&quot;http://diveintopython.org/download/diveintopython-pdf-5.4.zip&quot;&gt;LIvro Dive into Python(Apress)&lt;/a&gt;&lt;span style=&quot;color: rgb(51, 204, 0); font-weight: bold;&quot;&gt;(ingles)&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul style=&quot;color: rgb(51, 51, 255);&quot;&gt;&lt;li&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;&lt;a style=&quot;font-weight: bold;&quot; href=&quot;http://www.python.org.br/wiki/DocumentacaoPython&quot;&gt;Tudo sobre Python em portugues no PythonBrasil!&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul style=&quot;color: rgb(51, 51, 255);&quot;&gt;&lt;li&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;&lt;a style=&quot;font-weight: bold;&quot; href=&quot;http://docs.djangobrasil.org/&quot;&gt;Projeto Django Brasil&lt;/a&gt;&lt;span style=&quot;color: rgb(51, 204, 0); font-weight: bold;&quot;&gt;(portugues)&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul style=&quot;color: rgb(51, 51, 255);&quot;&gt;&lt;li&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;&lt;a style=&quot;font-weight: bold;&quot; href=&quot;http://code.google.com/edu/languages/google-python-class/&quot;&gt;Curso Gratis para noob&#39;s no Google Code University&lt;/a&gt;&lt;span style=&quot;color: rgb(51, 204, 0); font-weight: bold;&quot;&gt;(ingles)&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul style=&quot;color: rgb(51, 51, 255);&quot;&gt;&lt;li&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;&lt;a style=&quot;font-weight: bold;&quot; href=&quot;http://docs.python.org/tutorial/&quot;&gt;Tutorial Oficial Python&lt;/a&gt;&lt;span style=&quot;color: rgb(51, 204, 0); font-weight: bold;&quot;&gt;(ingles)&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;  &lt;/span&gt;&lt;div style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;color: rgb(255, 0, 0);font-size:180%;&quot; &gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;OBRIGADO PELO SEU TEMPO!&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgxyBH5pOQTcGKxAzg-Y3ZVQxnK26O3LRsl4TbfgXvWXVnzvAEBEFPP7d_mDTOOvhCrPkUCEad7T2cvGRKJ0aaJhzgKHa1SHRVNS4az5ck8npm3_QVVIyssJkWGFcQj9DU8V_ST7G8QEu0/s1600-h/python.png&quot;&gt;&lt;img style=&quot;margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 267px; height: 235px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgxyBH5pOQTcGKxAzg-Y3ZVQxnK26O3LRsl4TbfgXvWXVnzvAEBEFPP7d_mDTOOvhCrPkUCEad7T2cvGRKJ0aaJhzgKHa1SHRVNS4az5ck8npm3_QVVIyssJkWGFcQj9DU8V_ST7G8QEu0/s400/python.png&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5451732810613819762&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;</content><link rel="related" href="python-cobra.com" title="E a cobra fumou!!!!!"/><link rel='replies' type='application/atom+xml' href='http://amsterdaintelligence.blogspot.com/feeds/890015248409972510/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://amsterdaintelligence.blogspot.com/2010/03/e-cobra-fumou.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7308500728033786786/posts/default/890015248409972510'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7308500728033786786/posts/default/890015248409972510'/><link rel='alternate' type='text/html' href='http://amsterdaintelligence.blogspot.com/2010/03/e-cobra-fumou.html' title='E a cobra fumou!!!!!'/><author><name>@williamgouvea</name><uri>http://www.blogger.com/profile/16737800888418990640</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiXgCyNKh33yvHTbk83E03NP-2_VEgR6dAblD4Daus1Z6NoufJ-_ovu0KdlMO4KlMwqlDiHfgVPefrqERTjJ-nkKZP7_S41tqN6sQ9-suaiqjp622XDcN72QNXCLNB5SCg/s220/trabalho.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhtlHWIX98Y3SvBT9ORAUBjeAwCT87KQNti4qpHv1HhoaeiGb-aQ8FtrBMQ71LZQqaLZp8mWKU0TwC-uhaZ5VTZPeX5k1LMZhbZxZls02DOH39Y5qQ_wl79IIyNLZ-iUAyoB_4a7d-SKMo/s72-c/python-logo-glassy.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7308500728033786786.post-1414502088023800746</id><published>2010-03-20T23:56:00.001-07:00</published><updated>2010-03-21T02:19:44.706-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="jython python java jvm memory_model stack heap static class_loader"/><title type='text'>Conceitos de Memoria na JVM</title><content type='html'>&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEidMcQ3pmCLGpl1aOP29bBK0UTXAvaA35_vb90O4m5xZQ1r7ZdIjGuE8UB_q4ZzEzBhMAxXAQFR0yGyuNAj9vT4FSw3GB36wxO3Us5stqQKBzDc4sCyCwIp_xPll5Ici5u8PKRHg4GWoyI/s1600-h/neo_matrix.jpg&quot;&gt;&lt;img style=&quot;margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 215px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEidMcQ3pmCLGpl1aOP29bBK0UTXAvaA35_vb90O4m5xZQ1r7ZdIjGuE8UB_q4ZzEzBhMAxXAQFR0yGyuNAj9vT4FSw3GB36wxO3Us5stqQKBzDc4sCyCwIp_xPll5Ici5u8PKRHg4GWoyI/s400/neo_matrix.jpg&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5450981788444388306&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;span style=&quot;color: rgb(51, 204, 0); font-family: times new roman; font-weight: bold;font-size:100%;&quot; &gt;&lt;br /&gt;&lt;/span&gt;&lt;div style=&quot;text-align: justify; color: rgb(51, 204, 0); font-weight: bold; font-family: times new roman;&quot;&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: rgb(51, 204, 0); font-family: times new roman;font-size:100%;&quot; &gt;Brincando a noite com Python, fui estudar a fundo a PVM, e a integração Java + Python =Jython!!&lt;/span&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: rgb(51, 204, 0); font-family: times new roman;font-size:100%;&quot; &gt;Logo, ja estava me aventurando no tema concorrencia, e recordando acerca do modelo de memoria compartilhada do Java, locks, semaforos , STM ,Actors...&lt;/span&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: rgb(51, 204, 0); font-family: times new roman;font-size:100%;&quot; &gt;Dai relembrei do conceito de Memoria Stack, Heap e onde a threads entram nessa historia.&lt;/span&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;color: rgb(255, 0, 0);font-size:100%;&quot; &gt;&lt;span style=&quot;font-size:180%;&quot;&gt;STACK&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style=&quot;color: rgb(51, 204, 0); font-family: times new roman;font-size:130%;&quot; &gt;Basicamente , &lt;/span&gt;&lt;span style=&quot;font-family: times new roman; color: rgb(51, 204, 0);font-size:130%;&quot; id=&quot;result_box&quot; class=&quot;long_text&quot; &gt;&lt;span style=&quot;background-color: rgb(255, 255, 255);&quot; title=&quot;Stack&quot; onmouseover=&quot;this.style.backgroundColor=&#39;#ebeff9&#39;&quot; onmouseout=&quot;this.style.backgroundColor=&#39;#fff&#39;&quot;&gt;na Memoria Stack &lt;/span&gt;&lt;span style=&quot;background-color: rgb(255, 255, 255);&quot; title=&quot;Each Java virtual machine thread has a private Java virtual machine stack, created at the same time as the thread.&quot; onmouseover=&quot;this.style.backgroundColor=&#39;#ebeff9&#39;&quot; onmouseout=&quot;this.style.backgroundColor=&#39;#fff&#39;&quot;&gt;cada thread(linha de execução) da máquina virtual Java(JVM) tem uma pilha privada da propria JVM, criada ao mesmo tempo que a thread. &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-family: times new roman;font-size:130%;&quot; &gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiLWVz_BMAkABReDCw2YW1DV-sEpDEBZcE7gjySe2SrFBikl9-9pMolFVNwmjoKr3vjcYkGqdOOubA51KoLy0wVeaHahF7JoetixfBn_W77bk-pEb_6MhHJr6rR2fCIJ6aRxi-p1_zNLnQ/s1600-h/pilhas_threads_jvm.jpg&quot;&gt;&lt;img style=&quot;margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 300px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiLWVz_BMAkABReDCw2YW1DV-sEpDEBZcE7gjySe2SrFBikl9-9pMolFVNwmjoKr3vjcYkGqdOOubA51KoLy0wVeaHahF7JoetixfBn_W77bk-pEb_6MhHJr6rR2fCIJ6aRxi-p1_zNLnQ/s400/pilhas_threads_jvm.jpg&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5450997919065208834&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;span style=&quot;font-family: times new roman;font-size:130%;&quot; &gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: times new roman; color: rgb(51, 204, 0);font-size:130%;&quot; id=&quot;result_box&quot; class=&quot;long_text&quot; &gt;&lt;span style=&quot;background-color: rgb(255, 255, 255);&quot; title=&quot;A Java virtual machine stack stores frames.&quot; onmouseover=&quot;this.style.backgroundColor=&#39;#ebeff9&#39;&quot; onmouseout=&quot;this.style.backgroundColor=&#39;#fff&#39;&quot;&gt;Uma JVM(máquina virtual Java) armazena frames de memoria. &lt;/span&gt;&lt;span style=&quot;background-color: rgb(255, 255, 255);&quot; title=&quot;It holds local variables and partial results, and plays a part in method invocation and return.&quot; onmouseover=&quot;this.style.backgroundColor=&#39;#ebeff9&#39;&quot; onmouseout=&quot;this.style.backgroundColor=&#39;#fff&#39;&quot;&gt;Ele contém as variáveis locais e resultados parciais, e desempenha um papel na invocação de método e de retorno. &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-family: times new roman;font-size:130%;&quot; &gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: times new roman; color: rgb(51, 204, 0);font-size:130%;&quot; id=&quot;result_box&quot; class=&quot;long_text&quot; &gt;&lt;span style=&quot;background-color: rgb(255, 255, 255);&quot; title=&quot;Because the Java virtual machine stack is never manipulated directly except to push and pop frames, frames may be heap allocated.&quot; onmouseover=&quot;this.style.backgroundColor=&#39;#ebeff9&#39;&quot; onmouseout=&quot;this.style.backgroundColor=&#39;#fff&#39;&quot;&gt;Ja que a JVM Stack não é manipulada diretamente, exceto por  push e pop de quadros, quadros tambem podem ser alocados na heap. &lt;/span&gt;&lt;span style=&quot;background-color: rgb(255, 255, 255);&quot; title=&quot;The memory for a Java virtual machine stack does not need to be contiguous.&quot; onmouseover=&quot;this.style.backgroundColor=&#39;#ebeff9&#39;&quot; onmouseout=&quot;this.style.backgroundColor=&#39;#fff&#39;&quot;&gt;A memória para uma JVM Stack não precisa ser contígua.&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-family: times new roman;font-size:130%;&quot; &gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: times new roman; color: rgb(51, 204, 0);font-size:130%;&quot; id=&quot;result_box&quot; class=&quot;long_text&quot; &gt;&lt;span style=&quot;background-color: rgb(255, 255, 255);&quot; title=&quot;The Java virtual machine specification permits Java virtual machine stacks either to be of a fixed size or to dynamically expand and contract as required by the computation.&quot; onmouseover=&quot;this.style.backgroundColor=&#39;#ebeff9&#39;&quot; onmouseout=&quot;this.style.backgroundColor=&#39;#fff&#39;&quot;&gt;A especificação Java máquina virtual permite que as pilhas da máquina virtual Java ou ter  um tamanho fixo ou dinamicamente expandir o contrato de acordo com o  exigido pela computação. &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-family: times new roman;font-size:130%;&quot; &gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: times new roman; color: rgb(51, 204, 0);font-size:130%;&quot; id=&quot;result_box&quot; class=&quot;long_text&quot; &gt;&lt;span style=&quot;background-color: rgb(255, 255, 255);&quot; title=&quot;If the Java virtual machine stacks are of a fixed size, the size of each Java virtual machine stack may be chosen independently when that stack is created.&quot; onmouseover=&quot;this.style.backgroundColor=&#39;#ebeff9&#39;&quot; onmouseout=&quot;this.style.backgroundColor=&#39;#fff&#39;&quot;&gt;Se a JVM Stack tiverem  um tamanho fixo, o tamanho de cada JVM Stack pode ser escolhido independentemente quando essa Stack é criada. &lt;/span&gt;&lt;span style=&quot;background-color: rgb(255, 255, 255);&quot; title=&quot;A Java virtual machine implementation may provide the programmer or the user control over the initial size of Java virtual machine stacks, as well as, in the case of dynamically expanding or contracting Java virtual machine stacks, control over the maximum and minimum sizes.&quot; onmouseover=&quot;this.style.backgroundColor=&#39;#ebeff9&#39;&quot; onmouseout=&quot;this.style.backgroundColor=&#39;#fff&#39;&quot;&gt;A implementação da máquina virtual Java pode fornecer ao programador ou ao utilizador o controle do tamanho inicial das pilhas da máquina virtual Java, bem como, no caso de expansão dinamica ou contração das JVMS Stack&#39;s,  modificando o controle sobre os tamanhos máximos e mínimos.&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-family: times new roman;font-size:130%;&quot; &gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: times new roman; color: rgb(51, 204, 0);font-size:130%;&quot; id=&quot;result_box&quot; class=&quot;long_text&quot; &gt;&lt;span style=&quot;background-color: rgb(255, 255, 255);&quot; title=&quot;The following exceptional conditions are associated with Java virtual machine stacks:&quot; onmouseover=&quot;this.style.backgroundColor=&#39;#ebeff9&#39;&quot; onmouseout=&quot;this.style.backgroundColor=&#39;#fff&#39;&quot;&gt;As seguintes condições excepcionais estão associados com as pilhas da máquina virtual Java: &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-family: times new roman;font-size:130%;&quot; &gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;ul style=&quot;font-family: times new roman; color: rgb(51, 204, 0); text-align: justify; font-weight: bold;&quot;&gt;&lt;li&gt;&lt;span id=&quot;result_box&quot; class=&quot;long_text&quot;  style=&quot;font-size:130%;&quot;&gt;&lt;span style=&quot;background-color: rgb(255, 255, 255);&quot; title=&quot;The following exceptional conditions are associated with Java virtual machine stacks:&quot; onmouseover=&quot;this.style.backgroundColor=&#39;#ebeff9&#39;&quot; onmouseout=&quot;this.style.backgroundColor=&#39;#fff&#39;&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;background-color: rgb(255, 255, 255);&quot; title=&quot;* If the computation in a thread requires a larger Java virtual machine stack than is permitted, the Java virtual machine throws a StackOverflowError.&quot; onmouseover=&quot;this.style.backgroundColor=&#39;#ebeff9&#39;&quot; onmouseout=&quot;this.style.backgroundColor=&#39;#fff&#39;&quot;&gt;Se o cálculo em um segmento exige um maior JVM Stack do que é permitido, a máquina virtual Java gera um StackOverflowError. &lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul style=&quot;font-family: times new roman; color: rgb(51, 204, 0); text-align: justify; font-weight: bold;&quot;&gt;&lt;li&gt;&lt;span id=&quot;result_box&quot; class=&quot;long_text&quot;  style=&quot;font-size:130%;&quot;&gt;&lt;span style=&quot;background-color: rgb(255, 255, 255);&quot; title=&quot;* If the computation in a thread requires a larger Java virtual machine stack than is permitted, the Java virtual machine throws a StackOverflowError.&quot; onmouseover=&quot;this.style.backgroundColor=&#39;#ebeff9&#39;&quot; onmouseout=&quot;this.style.backgroundColor=&#39;#fff&#39;&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;background-color: rgb(255, 255, 255);&quot; title=&quot;* If Java virtual machine stacks can be dynamically expanded, and expansion is attempted but insufficient memory can be made available to effect the expansion, or if insufficient memory can be made available to create the initial Java virtual machine stack for a new thread, the Java&quot; onmouseover=&quot;this.style.backgroundColor=&#39;#ebeff9&#39;&quot; onmouseout=&quot;this.style.backgroundColor=&#39;#fff&#39;&quot;&gt;Se o tamanho das JVM Stack&#39;s pode ser expandido de forma dinâmica, a expansão pode ser feita, mas a memória insuficiente pode ser disponibilizada para o efeito da expansão, ou se a memória insuficiente for  disponibilizada para criar a JVM Stack  incial de uma thread, a JVM lança um OutOfMemoryError*¹&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;text-align: justify; color: rgb(51, 204, 0); font-weight: bold; font-family: times new roman;&quot;&gt;&lt;div style=&quot;text-align: center;&quot;&gt;  &lt;span style=&quot;font-size:180%;&quot;&gt;&lt;span style=&quot;color: rgb(255, 0, 0);&quot; id=&quot;result_box&quot; class=&quot;long_text&quot;&gt;&lt;span style=&quot;background-color: rgb(255, 255, 255);&quot; title=&quot;Heap&quot;&gt;Heap&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-size:130%;&quot;&gt; &lt;/span&gt;&lt;/div&gt;&lt;span style=&quot;font-family: times new roman;font-size:130%;&quot; &gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: times new roman;font-size:130%;&quot; &gt;&lt;span id=&quot;result_box&quot; class=&quot;long_text&quot;&gt;&lt;span style=&quot;background-color: rgb(255, 255, 255);&quot; title=&quot;The Java virtual machine has a heap that is shared among all Java virtual machine threads.&quot;&gt;A máquina virtual Java tem uma pilha que é compartilhado entre todas as threads da máquina virtual Java. &lt;/span&gt;&lt;span style=&quot;background-color: rgb(255, 255, 255);&quot; title=&quot;The heap is the runtime data area from which memory for all class instances and arrays is allocated.&quot;&gt;A pilha é a área de dados de tempo de execução a partir do qual a memória de todas as instâncias de classes e arrays são atribuídas.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: times new roman;font-size:130%;&quot; &gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: times new roman;font-size:130%;&quot; &gt;&lt;span id=&quot;result_box&quot; class=&quot;long_text&quot;&gt;&lt;span style=&quot;background-color: rgb(255, 255, 255);&quot; title=&quot;The heap is created on virtual machine start-up.&quot;&gt;A Heap(Tipo de Fila de Prioridade) é criada no start da JVM. Um &lt;/span&gt;&lt;span style=&quot;background-color: rgb(255, 255, 255);&quot; title=&quot;Heap storage for objects is reclaimed by an automatic storage management system (known as a garbage collector); objects are never explicitly deallocated.&quot;&gt;Heap de armazenamento de objetos é recuperado por um sistema automático de gerenciamento de armazenamento (conhecido como um coletor de lixo(garbage collector); objetos nunca são explicitamente liberados*².&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgjc9ApGD6jLhYHxyzw4KnVpkRGk1YDb-dcAbg9vQWL4JE5p_v5xW5YdQ55eAeQwbxm7zlk1LGZM7zwEsy_uyUv8xKFafTZhx1oOfuHLsa7CJ1Gz4KgUfQ45WzLTu6LRg5Z-eWfrl15QU8/s1600-h/heap-array-example.png&quot;&gt;&lt;img style=&quot;margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 362px; height: 361px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgjc9ApGD6jLhYHxyzw4KnVpkRGk1YDb-dcAbg9vQWL4JE5p_v5xW5YdQ55eAeQwbxm7zlk1LGZM7zwEsy_uyUv8xKFafTZhx1oOfuHLsa7CJ1Gz4KgUfQ45WzLTu6LRg5Z-eWfrl15QU8/s400/heap-array-example.png&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5451003634834909442&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style=&quot;font-family: times new roman;font-size:130%;&quot; &gt;&lt;span id=&quot;result_box&quot; class=&quot;long_text&quot;&gt;&lt;span style=&quot;background-color: rgb(255, 255, 255);&quot; title=&quot;Heap storage for objects is reclaimed by an automatic storage management system (known as a garbage collector); objects are never explicitly deallocated.&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;background-color: rgb(255, 255, 255);&quot; title=&quot;The Java virtual machine assumes no particular type of automatic storage management system, and the storage management technique may be chosen according to the implementor&#39;s system requirements.&quot;&gt;A máquina virtual Java não assume qualquer tipo específico de sistema automático de gerenciamento de armazenamento(garbage collector), e a técnica de gerenciamento de armazenamento pode ser escolhida de acordo com os requisitos do implementador do sistema*³.&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-family: times new roman;font-size:130%;&quot; &gt;&lt;span id=&quot;result_box&quot; class=&quot;long_text&quot;&gt;&lt;span style=&quot;background-color: rgb(255, 255, 255);&quot; title=&quot;The Java virtual machine assumes no particular type of automatic storage management system, and the storage management technique may be chosen according to the implementor&#39;s system requirements.&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgY4QgKFSBkXuUq0PRMtZWcRBic4dcKrHV0QT1hG-VVNck0uiDTdYMYtsPmpflvsZOXhqIObUFw7qzdOpzz2HZY60ZtM1IqPtO94hRIG8NzDQQfq5pPHmYzH-tvh4GYy6BqHuTetEOVfnM/s1600-h/threads_gc_jvm.jpg&quot;&gt;&lt;img style=&quot;margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 242px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgY4QgKFSBkXuUq0PRMtZWcRBic4dcKrHV0QT1hG-VVNck0uiDTdYMYtsPmpflvsZOXhqIObUFw7qzdOpzz2HZY60ZtM1IqPtO94hRIG8NzDQQfq5pPHmYzH-tvh4GYy6BqHuTetEOVfnM/s400/threads_gc_jvm.jpg&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5451013940693395826&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style=&quot;font-family: times new roman;font-size:130%;&quot; &gt;&lt;span id=&quot;result_box&quot; class=&quot;long_text&quot;&gt;&lt;span style=&quot;background-color: rgb(255, 255, 255);&quot; title=&quot;The heap may be of a fixed size or may be expanded as required by the computation and may be contracted if a larger heap becomes unnecessary.&quot;&gt;A Heap pode ser de um tamanho fixo ou pode ser expandida conforme exigido pela computação e pode ser expandido se uma maior pilha torna-se desnecessário. &lt;/span&gt;&lt;span style=&quot;background-color: rgb(255, 255, 255);&quot; title=&quot;The memory for the heap does not need to be contiguous.&quot;&gt;A memória para a Heap não precisa ser contígua.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: times new roman;font-size:130%;&quot; &gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: times new roman;font-size:130%;&quot; &gt;&lt;span id=&quot;result_box&quot; class=&quot;long_text&quot;&gt;&lt;span style=&quot;background-color: rgb(255, 255, 255);&quot; title=&quot;The heap mainly store objects create using or class level variables.&quot;&gt;A pilha de objetos, &lt;/span&gt;&lt;/span&gt;&lt;span id=&quot;result_box&quot; class=&quot;long_text&quot;&gt;&lt;span style=&quot;background-color: rgb(255, 255, 255);&quot; title=&quot;The heap mainly store objects create using or class level variables.&quot;&gt;armazena &lt;/span&gt;&lt;/span&gt;&lt;span id=&quot;result_box&quot; class=&quot;long_text&quot;&gt;&lt;span style=&quot;background-color: rgb(255, 255, 255);&quot; title=&quot;The heap mainly store objects create using or class level variables.&quot;&gt;principalmente objetos ou variáveis de classe.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style=&quot;color: rgb(51, 204, 0); font-weight: bold; font-family: times new roman;font-family:times new roman;font-size:130%;&quot;  &gt;&lt;span id=&quot;result_box&quot; class=&quot;long_text&quot;&gt;&lt;span style=&quot;background-color: rgb(255, 255, 255);&quot; title=&quot;The heap mainly store objects create using or class level variables.&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;background-color: rgb(255, 255, 255);&quot; title=&quot;The following exceptional condition is associated with the heap:&quot;&gt;A seguinte condição excepcional está associado com a Heap:&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;ul style=&quot;color: rgb(51, 204, 0); font-weight: bold; font-family: times new roman;&quot;&gt;&lt;li&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;&lt;span id=&quot;result_box&quot; class=&quot;long_text&quot;&gt;&lt;span style=&quot;background-color: rgb(255, 255, 255);&quot; title=&quot;* If a computation requires more heap than can be made available by the automatic storage management system, the Java virtual machine throws an OutOfMemoryError&quot;&gt;Se um cálculo requer mais memoria Heap do que pode ser disponibilizado pelo sistema automático de gerenciamento de armazenamento, a máquina virtual Java gera um OutOfMemoryError&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgT0Qurt7iAlfzNswel9ccL0AWN4hvLZu8iDQHfnrc4l_msx_Ylc8yKXW4511T0G2t2O-xQ5G4cNhX2fkJXKmvltORghy_zqDD2C3WyFoZ5hW6-rKh7iDrz-XLHJLy9fT-Y0TwYnigGBpw/s1600-h/heap_jvm.gif&quot;&gt;&lt;img style=&quot;margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 300px; height: 400px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgT0Qurt7iAlfzNswel9ccL0AWN4hvLZu8iDQHfnrc4l_msx_Ylc8yKXW4511T0G2t2O-xQ5G4cNhX2fkJXKmvltORghy_zqDD2C3WyFoZ5hW6-rKh7iDrz-XLHJLy9fT-Y0TwYnigGBpw/s400/heap_jvm.gif&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5451013153426871810&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;div style=&quot;text-align: left; color: rgb(51, 255, 51);&quot;&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;color: rgb(51, 204, 0); font-family: times new roman; font-weight: bold;font-family:times new roman;font-size:130%;&quot;  &gt;&lt;span id=&quot;result_box&quot; class=&quot;long_text&quot;&gt;&lt;span style=&quot;background-color: rgb(255, 255, 255);&quot; title=&quot;* If a computation requires more heap than can be made available by the automatic storage management system, the Java virtual machine throws an OutOfMemoryError&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: rgb(255, 255, 255);&quot; title=&quot;The JVM size can be increased or decreased as needed:&quot;&gt;O tamanho da Heap da JVM pode ser aumentado ou diminuído, conforme necessário:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-weight: bold;font-size:130%;&quot; &gt; &lt;/span&gt;&lt;span style=&quot;font-weight: bold;font-size:130%;&quot; &gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(51, 204, 0); font-family: times new roman; font-weight: bold;font-family:times new roman;font-size:130%;&quot;  &gt;&lt;span id=&quot;result_box&quot; class=&quot;long_text&quot;&gt;&lt;span style=&quot;background-color: rgb(255, 255, 255);&quot; title=&quot;The old generation&#39;s default heap size can be overridden by using the -Xms and -Xmx switches to specify the initial and maximum sizes respectively:&quot;&gt;O tamanho da velha geração presente na  Heap padrão pode ser substituído usando o Xms-e-Xmx opções para especificar o tamanho inicial e máximo, respectivamente:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style=&quot;font-family:times new roman;font-size:100%;&quot;&gt;&lt;span style=&quot;font-weight: bold;&quot; id=&quot;result_box&quot; class=&quot;long_text&quot;&gt;&lt;span style=&quot;background-color: rgb(255, 255, 255);&quot; title=&quot;The old generation&#39;s default heap size can be overridden by using the -Xms and -Xmx switches to specify the initial and maximum sizes respectively:&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style=&quot;color: rgb(51, 255, 51);font-family:times new roman;font-size:100%;&quot;  &gt;&lt;span style=&quot;font-weight: bold; font-style: italic;&quot; id=&quot;result_box&quot; class=&quot;long_text&quot;&gt;&lt;span style=&quot;color: rgb(255, 0, 0);font-size:85%;&quot; &gt;&lt;span title=&quot;java -Xms&quot;&gt;java-Xms&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: rgb(255, 255, 255);&quot; title=&quot;&quot;&gt; -Xmx &lt;maximum&gt; program&quot;&gt;&lt;span style=&quot;color: rgb(255, 0, 0);font-size:85%;&quot; &gt;&lt;initial size=&quot;&quot;&gt; -Xmx &lt;maximum size=&quot;&quot;&gt; codigoQueFazAlgumaCoisa.class&lt;/maximum&gt;&lt;/initial&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-weight: bold;&quot; id=&quot;result_box&quot; class=&quot;long_text&quot;&gt;&lt;span style=&quot;background-color: rgb(255, 255, 255);&quot; title=&quot;&quot;&gt; -Xmx &lt;maximum&gt; program&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span title=&quot;For example:&quot;&gt;&lt;br /&gt;&lt;span style=&quot;color: rgb(51, 204, 0);&quot;&gt;Por exemplo:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: rgb(255, 0, 0);font-size:85%;&quot; &gt;&lt;span title=&quot;java -Xms64m -Xmx128m program&quot;&gt;java-Xms64m &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: rgb(255, 0, 0);font-size:85%;&quot; &gt;&lt;span style=&quot;font-weight: bold;&quot; id=&quot;result_box&quot; class=&quot;long_text&quot;&gt;&lt;span style=&quot;background-color: rgb(255, 255, 255);&quot; title=&quot;&quot;&gt; -Xmx &lt;maximum&gt; program&quot;&gt;codigoQueFazAlgumaCoisa&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-weight: bold;&quot; id=&quot;result_box&quot; class=&quot;long_text&quot;&gt;&lt;span title=&quot;java -Xms64m -Xmx128m program&quot;&gt; -Xmx128m&lt;/span&gt;&lt;/span&gt; &lt;/span&gt; &lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: rgb(51, 204, 0); font-weight: bold;font-size:130%;&quot; &gt;Durante uma de suas palestras e no curso de RubyonRails pela , Fabio Kung deu a seguinte afirmativa baseada em suas analises de como funcionava realmente o modelo de memoria das JVM&#39;s :&lt;/span&gt;&lt;span style=&quot;color: rgb(51, 204, 0); font-weight: bold;font-size:130%;&quot; &gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(51, 204, 0); font-weight: bold;font-size:130%;&quot; &gt;&quot;95% de mortalidade infantil, dentre seus objetos criados&quot;, ou seja, a maioria não passa pela etapa de coleta de lixo e são descartados da memoria.&lt;br /&gt;&lt;br /&gt;Existem gerações de objetos na Heap e eles são promovidos a areas especificas  conforme sobrevivem a coleta de lixo e ganham &quot;idade&quot;.&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-weight: bold; color: rgb(255, 102, 102);&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;  &lt;/span&gt;&lt;div style=&quot;text-align: center; color: rgb(51, 255, 51);&quot;&gt;&lt;span style=&quot;font-family: times new roman; font-weight: bold; font-style: italic;font-size:100%;&quot; &gt;&lt;span style=&quot;color: rgb(255, 0, 0);font-size:180%;&quot; &gt;Uma Curiosidade&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: times new roman; font-weight: bold;font-size:100%;&quot; &gt;&lt;span style=&quot;font-size:130%;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt; &lt;/div&gt;&lt;span style=&quot;color: rgb(51, 204, 0);font-family:times new roman;font-size:130%;&quot;  &gt; &lt;span style=&quot;font-weight: bold;&quot;&gt;Assim como campos estaticos(static)são atributos de classe, e não de instancia, podemos usar inicializadores estaticos para definir referencias  que necessitem estar presente na construção de objetos mais complexos, ou que são criadas apenas uma vez no ciclo de vidado objeto.&lt;/span&gt; &lt;/span&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;&lt;span style=&quot;font-family: times new roman; color: rgb(51, 204, 0);font-size:130%;&quot; &gt; &lt;/span&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;&lt;span style=&quot;font-weight: bold; color: rgb(51, 255, 51);font-family:times new roman;&quot; &gt;&lt;span style=&quot;font-size:130%;&quot;&gt;&lt;span style=&quot;color: rgb(51, 204, 0);&quot;&gt;Veja o codigo a seguir de tire algumas conclusões!&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-weight: bold;font-size:85%;&quot; &gt;&lt;code style=&quot;font-family: arial;&quot;&gt;public class LoadingBlocks {&lt;/code&gt;&lt;/span&gt; &lt;p style=&quot;font-weight: bold; font-family: arial;&quot;&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;static{&lt;br /&gt;System.out.println(&quot;Inside static&quot;);&lt;br /&gt;}&lt;/span&gt;&lt;/p&gt; &lt;p style=&quot;font-weight: bold; font-family: arial;&quot;&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;{&lt;br /&gt;System.out.println(&quot;Inside init&quot;);&lt;br /&gt;}&lt;br /&gt;public static void main(String args[]){&lt;br /&gt;new LoadingBlocks();&lt;br /&gt;new LoadingBlocks();&lt;br /&gt;new LoadingBlocks();&lt;br /&gt;}&lt;br /&gt;}&lt;/span&gt;&lt;/p&gt; &lt;p style=&quot;font-weight: bold; font-family: arial;&quot;&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;Output:&lt;/span&gt;&lt;/p&gt; &lt;p style=&quot;font-weight: bold; font-family: arial;&quot;&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;Inside static&lt;br /&gt;Inside init&lt;br /&gt;Inside init&lt;br /&gt;Inside init&lt;/span&gt;&lt;/p&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;&lt;span style=&quot;font-weight: bold;font-size:100%;&quot; &gt;&lt;br /&gt;Seguindo essa logica, poderiamos por exemplo setar um DAO em um objeto de negocios que necessitasse iniciar seu  estado atraves do banco de dados na hora de sua construção e isso acontecesse uma unica vez.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;font-family:arial;&quot; &gt;public class MeuModeloDeNegocios{&lt;br /&gt;&lt;/span&gt; &lt;span style=&quot;font-weight: bold;font-family:arial;&quot; &gt;  private static MeuModeloDAO;&lt;br /&gt;persistenciaDoMeuModelo;&lt;/span&gt; &lt;span style=&quot;font-weight: bold;font-family:arial;&quot; &gt; private List&lt;modelosdenegocio&gt; modelos;&lt;br /&gt;&lt;/modelosdenegocio&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; color: rgb(255, 0, 0);&quot;&gt;   static {&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-weight: bold; color: rgb(255, 0, 0);&quot;&gt;  persistenciaDoMeuModelo=new MeuModeloDAO();&lt;br /&gt;&lt;/span&gt; &lt;span style=&quot;font-weight: bold; color: rgb(255, 0, 0);&quot;&gt;}&lt;/span&gt; &lt;span style=&quot;font-weight: bold;font-family:arial;&quot; &gt;&lt;br /&gt;&lt;br /&gt;public  MeuModeloDeNegocios(){&lt;/span&gt;  &lt;span style=&quot;font-weight: bold;font-family:arial;&quot; &gt;     this.modelos=persistenciaDoMeuModelo.listaTodos();&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;font-family:arial;&quot; &gt;}&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;font-family:arial;&quot; &gt;}&lt;br /&gt;&lt;/span&gt; &lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-weight: bold; color: rgb(51, 204, 0);&quot;&gt;Com este codigo seguimos nossas especificações e assim que a classe é posta na memoria pelo ClassLoader nosso bloco de inicialização cria nosso DAO um unica vez, por mais que criemos milhoes de objetos!&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: rgb(51, 204, 0); font-weight: bold;&quot;&gt;Espero ter ajudado!&lt;/span&gt;  &lt;span style=&quot;color: rgb(51, 204, 0); font-weight: bold;&quot;&gt;Obirgado pelo seu tempo!&lt;/span&gt;  &lt;span style=&quot;color: rgb(51, 204, 0); font-weight: bold;&quot;&gt;[]&#39;s&lt;/span&gt;</content><link rel='replies' type='application/atom+xml' href='http://amsterdaintelligence.blogspot.com/feeds/1414502088023800746/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://amsterdaintelligence.blogspot.com/2010/03/conceitos-de-memoria-na-jvm.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7308500728033786786/posts/default/1414502088023800746'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7308500728033786786/posts/default/1414502088023800746'/><link rel='alternate' type='text/html' href='http://amsterdaintelligence.blogspot.com/2010/03/conceitos-de-memoria-na-jvm.html' title='Conceitos de Memoria na JVM'/><author><name>@williamgouvea</name><uri>http://www.blogger.com/profile/16737800888418990640</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiXgCyNKh33yvHTbk83E03NP-2_VEgR6dAblD4Daus1Z6NoufJ-_ovu0KdlMO4KlMwqlDiHfgVPefrqERTjJ-nkKZP7_S41tqN6sQ9-suaiqjp622XDcN72QNXCLNB5SCg/s220/trabalho.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEidMcQ3pmCLGpl1aOP29bBK0UTXAvaA35_vb90O4m5xZQ1r7ZdIjGuE8UB_q4ZzEzBhMAxXAQFR0yGyuNAj9vT4FSw3GB36wxO3Us5stqQKBzDc4sCyCwIp_xPll5Ici5u8PKRHg4GWoyI/s72-c/neo_matrix.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7308500728033786786.post-791246770170645513</id><published>2010-03-16T12:45:00.000-07:00</published><updated>2010-03-16T15:20:52.899-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="clojure jruby python groovy google youtube rails"/><title type='text'>Mundo das Linguagens, o futuro da programação!</title><content type='html'>&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjXYjQhPMAqtIdGCnYcsAwWMei1EKIAGdlf2e12wQiVkvmaMdSDpoZQQLENK24lrYnKwgkn9QGcWVt2Pi9uL0LEHRtCEhnv1DbLKvp0ToyCW1Ljs1Cu8UjtirYbbmswydEm6rvcsHWnoDw/s1600-h/House_Clojure.jpg&quot;&gt;&lt;img style=&quot;margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 300px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjXYjQhPMAqtIdGCnYcsAwWMei1EKIAGdlf2e12wQiVkvmaMdSDpoZQQLENK24lrYnKwgkn9QGcWVt2Pi9uL0LEHRtCEhnv1DbLKvp0ToyCW1Ljs1Cu8UjtirYbbmswydEm6rvcsHWnoDw/s400/House_Clojure.jpg&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5449360135186583154&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;color: rgb(51, 255, 51);font-size:180%;&quot; &gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Introdução&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; color: rgb(255, 102, 0);font-size:130%;&quot; &gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style=&quot;font-weight: bold; color: rgb(255, 102, 0);font-size:130%;&quot; &gt;Podemos ver uma tendencia de pequenas e grandes empresas  na area de software e tecnologia ,a fazer  pesquisas  na área de  produção de linguagens de programação , principalmente na area de web e concorrencia/paralelismo, atendendo as suas proprias estrategias especificas de mercado.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhUAa4GE1AvKIOM3H2o-v0IP8nTt0PPhC_VKTm7-PUCeikLwHpQHbccaFmNbELYe27_4j5czW1vbkazRQCcTrMTFnmXrRP6kwLaJ1-OXEp7xWxM1JDsQ3zqzFg_4I6ZCKfXkj8QGZArvh4/s1600-h/dukewithruby.png&quot;&gt;&lt;img style=&quot;margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 235px; height: 232px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhUAa4GE1AvKIOM3H2o-v0IP8nTt0PPhC_VKTm7-PUCeikLwHpQHbccaFmNbELYe27_4j5czW1vbkazRQCcTrMTFnmXrRP6kwLaJ1-OXEp7xWxM1JDsQ3zqzFg_4I6ZCKfXkj8QGZArvh4/s400/dukewithruby.png&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5449347118685253298&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div style=&quot;text-align: center; font-weight: bold;&quot;&gt;&lt;span style=&quot;font-size:180%;&quot;&gt;&lt;span style=&quot;color: rgb(51, 255, 51);&quot;&gt;JRubyonRails&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: rgb(255, 204, 51);font-size:180%;&quot; &gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style=&quot;color: rgb(255, 102, 0); font-weight: bold;font-size:130%;&quot; &gt;Um exemplo seria a &quot;extinta&quot; SUN que vendo o potencial do Ruby como linguagem e do Rails como framework Web para pilha LAMP, investiu pesadamente no projeto&lt;a href=&quot;http://jruby.org/&quot;&gt; JRuby&lt;/a&gt;, um versão da linguagem que compila para bytecode e roda na JVM.&lt;br /&gt;&lt;br /&gt;Para tanto ela contratou uma equipe de grandes desenvolvedores para ficar à frente do desenvolvimento e da comunidade, sendo eles: &lt;a href=&quot;http://blog.headius.com/&quot;&gt;Charles Nutter&lt;/a&gt;, &lt;a href=&quot;http://olabini.com/blog/&quot;&gt;Ola Bini&lt;/a&gt;, Thomas Enebo e Nick Sieger, alem de dar a tarefa de tornar o &lt;a href=&quot;http://netbeans.org/downloads/index.html&quot;&gt;Netbeans a melhor IDE para RubyonRails&lt;/a&gt; para Tor Norbye.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-weight: bold; font-style: italic;font-size:85%;&quot; &gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhev2In_HsdNkfhL9wcOa0K9FT_y4nc9jrfCPKfypAoP0ubuBMpOOiYuSQ4n5WtQDFIaqTyMC_J3f01UgMydE0PY_Bi0K13H2E9Hhn3iQwAy1o_QYvVpIFyy8PhjoDFJXDNd00fwb9rKlA/s1600-h/jruby_dudes_team.jpg&quot;&gt;&lt;img style=&quot;margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 329px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhev2In_HsdNkfhL9wcOa0K9FT_y4nc9jrfCPKfypAoP0ubuBMpOOiYuSQ4n5WtQDFIaqTyMC_J3f01UgMydE0PY_Bi0K13H2E9Hhn3iQwAy1o_QYvVpIFyy8PhjoDFJXDNd00fwb9rKlA/s400/jruby_dudes_team.jpg&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5449347372084924130&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style=&quot;color: rgb(255, 102, 0); font-weight: bold; font-style: italic;font-size:85%;&quot; &gt;Charles Nutter e Thomas Enebo&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style=&quot;color: rgb(255, 102, 0); font-weight: bold;font-size:130%;&quot; &gt;Contudo a SUN ia mal das pernas e em 2009 &lt;a href=&quot;http://www.computerworld.com.au/article/312659/sun_jruby_team_jumps_ship_engine_yard/?fp=16&quot;&gt;Charles Nutter junto com o time do JRuby se juntou a Engine Yard&lt;/a&gt;, uma empresa de web hosting , especializada em JRuby/Rails, e que já possuia um projeto de um VM para Ruby mais performatica e moderna, com o nome de &lt;a href=&quot;http://www.engineyard.com/technology/ror&quot;&gt;Rubinius&lt;/a&gt;.&lt;/span&gt;&lt;span style=&quot;color: rgb(255, 102, 0);font-size:130%;&quot; &gt;  &lt;span style=&quot;font-weight: bold;&quot;&gt;Alguns projeto em JRubyonRails.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;ul style=&quot;color: rgb(51, 102, 255);&quot;&gt;&lt;li style=&quot;font-weight: bold; font-style: italic;&quot;&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;Projeto Kenai mix de rede social, servidor de host de codigo, similar ao Sourceforge e Google Code, fechado pela Oracle, seŕa utilizado internamente.&lt;/span&gt;&lt;/li&gt;&lt;li style=&quot;font-weight: bold; font-style: italic;&quot;&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;MediaCast SUN, site de video para apresentação de palestras e tutoriais sobre tecnologias SUN&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://mix.oracle.com/&quot;&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;&lt;span style=&quot;font-weight: bold; font-style: italic;&quot;&gt;OracleMix rede social de desenvolvedores Oracle&lt;/span&gt;&lt;/span&gt;.&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEilFxI41c8GQ7-3Tl8XQNBssOaziQR4BcZvVPCVk0IktSDNfA8oKdH_jbV0DKli3jrf-vUhyuwE74O91VXY8JI6KGU31bAhEXAqGCWfYXDhfr3mhtR-XOA0pEEdQtYkGiYhitazycFd1e0/s1600-h/google-python-search-library.jpg&quot;&gt;&lt;img style=&quot;margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 298px; height: 214px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEilFxI41c8GQ7-3Tl8XQNBssOaziQR4BcZvVPCVk0IktSDNfA8oKdH_jbV0DKli3jrf-vUhyuwE74O91VXY8JI6KGU31bAhEXAqGCWfYXDhfr3mhtR-XOA0pEEdQtYkGiYhitazycFd1e0/s400/google-python-search-library.jpg&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5449356558643785090&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;color: rgb(51, 204, 0);font-size:180%;&quot; &gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Python, Java&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style=&quot;color: rgb(255, 102, 0);font-size:130%;&quot; &gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;A gigante Google, que possui varios dos seus grandes projetos em Python, traz em 2001 Guido Von Rossum, criador da linguagem e chamado de &quot;Ditador Benevolente&quot; já que até hoje controla os rumos de sua obra.&lt;/span&gt;  &lt;span style=&quot;font-weight: bold;&quot;&gt;Alguns Projetos do Google em Python.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt; &lt;ul style=&quot;color: rgb(51, 102, 255); font-weight: bold; font-style: italic;&quot;&gt;&lt;li&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;Youtube(Infraestrutura dos servidores de stream de video)&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://amsterdaintelligence.blogspot.com/2010/03/mapreduce-e-o-que-ha.html&quot;&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;MapReduce Algorithm&lt;br /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://code.google.com/apis/documents/overview.html&quot;&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;API do Google Docs&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://code.google.com/intl/pt-BR/appengine/docs/whatisgoogleappengine.html&quot;&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;AppEngine (plataforma com interpretador rapido e libs padrão)&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: rgb(255, 102, 0);font-size:130%;&quot; &gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Alem dos esforços em Python a Google possui uma forte area de desenvolvimento para Java, com produtos como &lt;a href=&quot;http://code.google.com/p/google-guice/&quot;&gt;Guice&lt;/a&gt;, &lt;a href=&quot;http://code.google.com/p/google-collections/&quot;&gt;Google Collections&lt;/a&gt;, &lt;a href=&quot;http://code.google.com/webtoolkit/&quot;&gt;GWT para Web com AJAX&lt;/a&gt; . Não podemos esquecer, que Joshua Bloch, aquele mesmo do Effective Java( Que continua efetivo até hoje =D) trabalha na Google desde de 2004, tendo criado na SUN coisas como o framework Collections, Generics entre outras bibliotecas Java.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhG5xXBdkHCjS8sIVJvSoor5cmtnQkz4y3nSs-LrUGKopqkAZzsycnGbKY8pcsxetgAX_0IAx60Pa9VqjTBMWXiAzUj0uxoPjAeKnnDPbJ-nG_z3P2Q5PajNnKvWY9glpfbVtDRZAx9X6I/s1600-h/groovy-logo-big.png&quot;&gt;&lt;img style=&quot;margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 197px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhG5xXBdkHCjS8sIVJvSoor5cmtnQkz4y3nSs-LrUGKopqkAZzsycnGbKY8pcsxetgAX_0IAx60Pa9VqjTBMWXiAzUj0uxoPjAeKnnDPbJ-nG_z3P2Q5PajNnKvWY9glpfbVtDRZAx9X6I/s400/groovy-logo-big.png&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5449358827505200658&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;color: rgb(51, 255, 51);font-size:180%;&quot; &gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Groovy&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style=&quot;color: rgb(255, 102, 0);font-size:130%;&quot; &gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;A Spring Source , &lt;a href=&quot;http://blogs.vmware.com/console/2009/08/vmware-acquires-springsource.html&quot;&gt;recentemente comprada pela VMWare&lt;/a&gt;, possui uma linguagem fortissima para o mundo enterprise, o &lt;a href=&quot;http://groovy.codehaus.org/Documentation&quot;&gt;Groovy&lt;/a&gt;.&lt;/span&gt;  &lt;span style=&quot;font-weight: bold;&quot;&gt;Empresas como IBM e a propria Spring investem pesadamente nessa linguagem, que roda nativamente na JVM, possuindo codigo sintaticamente valido que é reconhecido como codigo Java e compilado para bytecodes.&lt;/span&gt;  &lt;span style=&quot;font-weight: bold;&quot;&gt;Sua sintaxe aliada a sua tipagem dinamica faz do Groovy uma excelente linguagem para criação de DSL&#39;s, alem ser de facil aprendizado para quem já caminha bem pelo mundo Java.&lt;/span&gt;  &lt;span style=&quot;font-weight: bold;&quot;&gt;O Groovy possui o primo, para não dizer irmão do Rails, o  tambem e  nem tão famoso &lt;a href=&quot;http://www.grails.org/Tutorials&quot;&gt;Grails&lt;/a&gt;, framework montado com varias tecnologias Java de ponta:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul style=&quot;color: rgb(51, 102, 255); font-weight: bold; font-style: italic;&quot;&gt;&lt;li&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;Hibernate para persistencia&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;GSP(Groovy Server Pages) para views&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;Spring na camada de controle e no container de injeção de dependencias.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: rgb(255, 102, 0);font-size:130%;&quot; &gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Otimo framework que é montado sobre componentes já renomados do Java com Spring/Hibernate.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6YVdGksQJI1b1TyMbOEA1limglAiqeS_IBQRnrq9ouoeqlBAV_Pi9zYf20mp2aKMEeUeRMXt5wCa2OUFcmk8qeiIMT-lla2CWH8jA6Oke7NLe6uEBbwpXon1AYzQMah8EKrqng1ywcCA/s1600-h/clojure_logo.png&quot;&gt;&lt;img style=&quot;margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 110px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6YVdGksQJI1b1TyMbOEA1limglAiqeS_IBQRnrq9ouoeqlBAV_Pi9zYf20mp2aKMEeUeRMXt5wCa2OUFcmk8qeiIMT-lla2CWH8jA6Oke7NLe6uEBbwpXon1AYzQMah8EKrqng1ywcCA/s400/clojure_logo.png&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5449359583867869634&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size:180%;&quot;&gt;&lt;span style=&quot;color: rgb(51, 255, 51); font-weight: bold;&quot;&gt;Clojure&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; color: rgb(255, 102, 0);font-size:130%;&quot; &gt;&lt;br /&gt;&lt;/span&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-weight: bold; color: rgb(255, 102, 0);font-size:130%;&quot; &gt;Criada por Ritchie Hickey, tal linguagem tras o mundo funcional para dentro da JVM. Possuindo estruturas de dados imutaveis, memoria transacional, alem de todas as vantagens do LISP para metaprogramação e concorrencia.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;A empresa &lt;a href=&quot;http://thinkrelevance.com/&quot;&gt;Relevance&lt;/a&gt; , que atua amplamente no mercado de software em Ruby,JQuery ultimamente virou seus olhos para o Clojure, atraves da evangelização de &lt;a href=&quot;http://github.com/stuarthalloway&quot;&gt;Stuart Holloway&lt;/a&gt; que alem de contribuir/criar  projetos em Clojure, ainda comanda sessões que ajudam rubistas e javanianos a conhecer esta poderosa ferramenta.&lt;br /&gt;&lt;br /&gt;Projetos em Clojure&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul style=&quot;color: rgb(51, 102, 255);&quot;&gt;&lt;li style=&quot;font-weight: bold; font-style: italic;&quot;&gt;&lt;a href=&quot;http://www.infoq.com/articles/flightcaster-clojure-rails&quot;&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;FlyCaster , Sistema para calculo de atrasos/antecipação em voos usando Clojure, e uma lib para Estatisticas chamada Incanter , tambem escrita na linguagem.&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li style=&quot;font-weight: bold; font-style: italic;&quot;&gt;&lt;a href=&quot;http://www.infoq.com/news/2009/01/clojure_production&quot;&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;Projeto em integração de sistemas para hospital.&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li style=&quot;font-weight: bold; font-style: italic;&quot;&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;Lance , sistema para build de projetos Clojure baseado no APACHE ANT.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://compojure.org/&quot;&gt;&lt;span style=&quot;font-style: italic;font-size:130%;&quot; &gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Compojure , framework web mvc agil, com geração de templates, controladores com rotas rest e dsl para tratar da persistencia em sql atraves de JDBC.&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-style: italic; color: rgb(255, 102, 0);font-size:130%;&quot; &gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Breve historia sem fim, de qual sera a linguagem mainstream!&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;  &lt;/span&gt;&lt;ul style=&quot;color: rgb(51, 102, 255); font-weight: bold; font-style: italic;&quot;&gt;&lt;li&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;Sera o Java o novo COBOL?&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul style=&quot;color: rgb(51, 102, 255); font-weight: bold; font-style: italic;&quot;&gt;&lt;li&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;Ou mesmo JRuby, Clojure , Groovy terão realmente um forte papel no futuro sendo cada vez mais e mais usadas?&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;&lt;span style=&quot;color: rgb(255, 102, 0); font-weight: bold;&quot;&gt;No &lt;a href=&quot;http://tech.puredanger.com/2010/02/24/language-job-trends/&quot;&gt;blog PureDanger de Alex Miller, ex-programador da Terracotta, existe um otimo post&lt;/a&gt;, onde ele analisa e compara as tendencias de mercado em relação as novas linguagens script que tem claramente duas grandes area:&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;ul&gt;&lt;li style=&quot;color: rgb(51, 102, 255); font-weight: bold;&quot;&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;Concorrencia/Paralelism (Clojure, Scala, Erlang, Haskell)&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;&lt;span style=&quot;color: rgb(51, 102, 255); font-weight: bold;&quot;&gt;Web Agil 2.0 + AJAX ( Javascript, JavaFX, Ruby,Python)&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;&lt;span style=&quot;color: rgb(51, 102, 255); font-weight: bold;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;&lt;span style=&quot;color: rgb(255, 102, 0); font-weight: bold;&quot;&gt;Vale a pena conferir tais novidades no mundo da Computação!&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;text-align: center; color: rgb(51, 204, 0);&quot;&gt;&lt;span style=&quot;font-size:180%;&quot;&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Obrigado pelo seu tempo!&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://amsterdaintelligence.blogspot.com/feeds/791246770170645513/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://amsterdaintelligence.blogspot.com/2010/03/mundo-das-linguagens-o-futuro-da.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7308500728033786786/posts/default/791246770170645513'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7308500728033786786/posts/default/791246770170645513'/><link rel='alternate' type='text/html' href='http://amsterdaintelligence.blogspot.com/2010/03/mundo-das-linguagens-o-futuro-da.html' title='Mundo das Linguagens, o futuro da programação!'/><author><name>@williamgouvea</name><uri>http://www.blogger.com/profile/16737800888418990640</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiXgCyNKh33yvHTbk83E03NP-2_VEgR6dAblD4Daus1Z6NoufJ-_ovu0KdlMO4KlMwqlDiHfgVPefrqERTjJ-nkKZP7_S41tqN6sQ9-suaiqjp622XDcN72QNXCLNB5SCg/s220/trabalho.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjXYjQhPMAqtIdGCnYcsAwWMei1EKIAGdlf2e12wQiVkvmaMdSDpoZQQLENK24lrYnKwgkn9QGcWVt2Pi9uL0LEHRtCEhnv1DbLKvp0ToyCW1Ljs1Cu8UjtirYbbmswydEm6rvcsHWnoDw/s72-c/House_Clojure.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7308500728033786786.post-7910473583504711051</id><published>2010-03-16T04:01:00.000-07:00</published><updated>2010-03-16T04:06:00.180-07:00</updated><title type='text'>Entendo a persistencia em Java I</title><content type='html'>&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiCb3vYwHDH6ZEfN5VpyEiZYNqL5gIyHEQ9UTFpLXT9YclKurDpHAQDcDsoks0JD_ihNRRm6zbv7PiS4QDbP1T_uDQ8LwdBW1m9Qi7l6gKXXNDStNz2jBaDi86iuYwmc8-eeZ5fF2i-1gw/s1600-h/jpa-hibernate-tutorial_logo.jpg&quot;&gt;&lt;img style=&quot;margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 305px; height: 293px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiCb3vYwHDH6ZEfN5VpyEiZYNqL5gIyHEQ9UTFpLXT9YclKurDpHAQDcDsoks0JD_ihNRRm6zbv7PiS4QDbP1T_uDQ8LwdBW1m9Qi7l6gKXXNDStNz2jBaDi86iuYwmc8-eeZ5fF2i-1gw/s400/jpa-hibernate-tutorial_logo.jpg&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5449186173534102706&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style=&quot;font-size:100%;color:red;&quot;&gt;&lt;b&gt;&lt;br /&gt;&lt;br /&gt;JPA é uma especificação criada pela Sun, inspirada no Hibernate. Portanto o Hibernate é a implementação mais &quot;famosa&quot; do JPA. Sendo assim, JPA não é um substituto do Hibernate.&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;ul style=&quot;color: rgb(51, 204, 0);&quot;&gt;&lt;li&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;JPA é a especificação (Java Persistence API)&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;Hibernate é uma implementação da JPA&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt; &lt;span style=&quot;font-size:100%;color:red;&quot;&gt;&lt;b&gt;A confusão surge pois o Hibernate surgiu antes da especificação JPA, em uma epoca onde não exisitia uma solução padronizada para a camada de persistencia. A Sun se baseou no Hibernate para elaborar a especificação JSR220.&lt;br /&gt;&lt;br /&gt;O Hibernate oferece algumas alternativas a mais, como por exemplo a API de Criteria, que não faz parte da especificação JPA 1.0, que seŕa incluida na JPA 2.0 , que sera lançada junto com o Java EE 6 .Contudo apesar de fazer parte da epsecificação EJB 3.0(JSR220), a JPA tambem pode ser usada para modelar Entidades que mapeiam suas classes para o banco em aplicações Desktop.&lt;br /&gt;&lt;br /&gt;Você pode usar JPA utilizando em conjunto com qualquer biblioteca de persistencia, tanto o mais usado no mercado Hibernate, com suas perfeitas extensões de funcionalidades , como TopLink(Oracle) que tem a fama de ser a mais rapida(melhor performance) alem de funcionalidades especificas para bancos Oracle(10g/11g).&lt;br /&gt;&lt;br /&gt;Uma otima referência é o livro Pro EJB 3: Java Persistence API da Apress que da uma otima passada , mostrando todas as caracteristicas de implementação.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: rgb(51, 204, 0);font-size:130%;color:red;&quot;  &gt;&lt;b&gt;REFERENCIAS&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-size:130%;color:red;&quot;&gt;Compilações dos seguinte tópicos do GUJ(Grupo de Usuarios Java):&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://www.guj.com.br/posts/list/59209.java&quot;&gt;JPA, Como, Quando e Porque?&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://www.guj.com.br/posts/list/90946.java&quot;&gt;Hibernate e JPA&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://www.guj.com.br/posts/list/66149.java&quot;&gt;Tutorial JPA + Netbeans&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://www.guj.com.br/posts/list/137709.java&quot;&gt;É possivel usar JPA sem o Hibernate?&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-size:130%;color:red;&quot;&gt;Links da Sun&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://java.sun.com/javaee/6/docs/tutorial/doc/bnbpy.html&quot;&gt;Sessão sobre JPA no Java EE 6 Tutorial&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://java.sun.com/developer/technicalArticles/J2SE/Desktop/persistenceapi/&quot;&gt;Artigo em ingles, sobre como usar JPA em aplicações Desktop&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://java.sun.com/javaee/technologies/persistence.jsp&quot;&gt;Pagina da tecnologia JPA&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-size:130%;color:red;&quot;&gt;Videos&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://www.netbeans.org/download/flash/netbeans_55/screencast-5.5.1-pt_BR/screencast-nb-final.html&quot;&gt;Otimo video do Paulo Canedo sobre como criar uma aplicação Desktop ...&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://www.devmedia.com.br/articles/viewcomp.asp?comp=4590&quot;&gt;Tutorial e video da DevMedia empresa ligada a revista MundoJava&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://blog.caelum.com.br/2007/05/15/screencast-primeiros-passos-para-a-jpa/&quot;&gt;Otimo video feito por Fabio Kung, no blog da Caelum&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Espero ter ajudado e em breve farei no blog um post mostrando algumas caracteristicas da JPA 2.0!&lt;br /&gt;&lt;br /&gt;Participe do &lt;a href=&quot;http://osum.sun.com/&quot;&gt;OSUM&lt;/a&gt;, rede social de estudantes da SUN, sua participação é muito importante!&lt;br /&gt;&lt;br /&gt;Obrigado pelo seu tempo!&lt;/b&gt;&lt;/span&gt;</content><link rel='replies' type='application/atom+xml' href='http://amsterdaintelligence.blogspot.com/feeds/7910473583504711051/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://amsterdaintelligence.blogspot.com/2010/03/entendo-persistencia-em-java-i.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7308500728033786786/posts/default/7910473583504711051'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7308500728033786786/posts/default/7910473583504711051'/><link rel='alternate' type='text/html' href='http://amsterdaintelligence.blogspot.com/2010/03/entendo-persistencia-em-java-i.html' title='Entendo a persistencia em Java I'/><author><name>@williamgouvea</name><uri>http://www.blogger.com/profile/16737800888418990640</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiXgCyNKh33yvHTbk83E03NP-2_VEgR6dAblD4Daus1Z6NoufJ-_ovu0KdlMO4KlMwqlDiHfgVPefrqERTjJ-nkKZP7_S41tqN6sQ9-suaiqjp622XDcN72QNXCLNB5SCg/s220/trabalho.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiCb3vYwHDH6ZEfN5VpyEiZYNqL5gIyHEQ9UTFpLXT9YclKurDpHAQDcDsoks0JD_ihNRRm6zbv7PiS4QDbP1T_uDQ8LwdBW1m9Qi7l6gKXXNDStNz2jBaDi86iuYwmc8-eeZ5fF2i-1gw/s72-c/jpa-hibernate-tutorial_logo.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7308500728033786786.post-381542008202217978</id><published>2010-03-05T16:14:00.000-08:00</published><updated>2010-03-16T16:09:39.525-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="mapreduce hadoop machine_learning genetic_algorithms neural_networks clojure java"/><title type='text'>MapReduce é o que há!</title><content type='html'>&lt;object height=&quot;405&quot; width=&quot;500&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/yjPBkvYh-ss&amp;amp;hl=en_US&amp;amp;fs=1&amp;amp;color1=0xe1600f&amp;amp;color2=0xfebd01&amp;amp;border=1&quot;&gt;&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot;&gt;&lt;param name=&quot;allowscriptaccess&quot; value=&quot;always&quot;&gt;&lt;embed src=&quot;http://www.youtube.com/v/yjPBkvYh-ss&amp;amp;hl=en_US&amp;amp;fs=1&amp;amp;color1=0xe1600f&amp;amp;color2=0xfebd01&amp;amp;border=1&quot; type=&quot;application/x-shockwave-flash&quot; allowscriptaccess=&quot;always&quot; allowfullscreen=&quot;true&quot; height=&quot;405&quot; width=&quot;500&quot;&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjm_lQaBG6QCO5FyFL8BkhpZoiQlxZ6qxQeExwrFw8iZLgW7byCn0Hm33OQjHbkbDT59u16fvz_gnNM_0_EFhReWZBnfMxOc0xTuEr9D-m0SOD3k9gcwjaSTvAQ9-W3VzUn4SnsmXS2RZk/s1600-h/mapreduce.png&quot;&gt;&lt;br /&gt;&lt;/a&gt;&lt;div id=&quot;postButtons&quot;&gt;&lt;div class=&quot;cssButtonSize-small cssButtonSide-left&quot; dir=&quot;ltr&quot;&gt;&lt;div class=&quot;cssButtonColor-blue&quot;&gt;&lt;script type=&quot;text/javascript&quot;&gt;   document.write(&quot;\x3ca id\x3d\x22cancel\x22 class\x3d\x22cssButton\x22 href\x3d\x22javascript:void(0)\x22 target\x3d\x22\x22 onclick\x3d\x22if (this.className.indexOf(\x26quot;ubtn-disabled\x26quot;) \x3d\x3d -1) {window.close(); return false;} return false;\x22\x3e\x3cdiv class\x3d\x22cssButtonOuter\x22\x3e\x3cdiv class\x3d\x22cssButtonMiddle\x22\x3e\x3cdiv class\x3d\x22cssButtonInner\x22\x3e\x3c/div\x3e\x3c/div\x3e\x3c/div\x3e\x3c/a\x3e&quot;); &lt;/script&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt; &lt;/div&gt;&lt;div style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;color: rgb(0, 153, 0);font-size:180%;&quot; &gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;DESCRIÇÂO&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-size:180%;&quot;&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;font-size:130%;&quot; &gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style=&quot;color: rgb(255, 102, 0); font-weight: bold;font-size:130%;&quot; &gt;MapReduce é um framework patenteado, introduzido pelo Google para  computação distribuída em grandes conjuntos de dados e em  clusters(grids) de computadores.&lt;/span&gt;&lt;span style=&quot;font-weight: bold;font-size:130%;&quot; &gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjZEghyBoYRUw5Eykwig9DGCOcPZJRu_270wHW6VXhaVDHaotcDAXYykpSn8lvC1mE7dfqSxfSd7UHQ0R5NXWRnRcpIGAV8O-z6B_KxZwnn8YI4vIwDFkJ1wF9pzO2IDUF9eVxyquRhe5w/s1600-h/mapreduce.png&quot;&gt;&lt;img style=&quot;margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 383px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjZEghyBoYRUw5Eykwig9DGCOcPZJRu_270wHW6VXhaVDHaotcDAXYykpSn8lvC1mE7dfqSxfSd7UHQ0R5NXWRnRcpIGAV8O-z6B_KxZwnn8YI4vIwDFkJ1wF9pzO2IDUF9eVxyquRhe5w/s400/mapreduce.png&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5445340998732652498&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjm_lQaBG6QCO5FyFL8BkhpZoiQlxZ6qxQeExwrFw8iZLgW7byCn0Hm33OQjHbkbDT59u16fvz_gnNM_0_EFhReWZBnfMxOc0xTuEr9D-m0SOD3k9gcwjaSTvAQ9-W3VzUn4SnsmXS2RZk/s1600-h/mapreduce.png&quot;&gt;&lt;br /&gt;&lt;/a&gt;&lt;/span&gt;&lt;div style=&quot;font-weight: bold;&quot; id=&quot;postButtons&quot;&gt;&lt;div class=&quot;cssButtonSize-small cssButtonSide-left&quot; dir=&quot;ltr&quot;&gt;&lt;div class=&quot;cssButtonColor-blue&quot;&gt;&lt;script type=&quot;text/javascript&quot;&gt;   document.write(&quot;\x3ca id\x3d\x22cancel\x22 class\x3d\x22cssButton\x22 href\x3d\x22javascript:void(0)\x22 target\x3d\x22\x22 onclick\x3d\x22if (this.className.indexOf(\x26quot;ubtn-disabled\x26quot;) \x3d\x3d -1) {window.close(); return false;} return false;\x22\x3e\x3cdiv class\x3d\x22cssButtonOuter\x22\x3e\x3cdiv class\x3d\x22cssButtonMiddle\x22\x3e\x3cdiv class\x3d\x22cssButtonInner\x22\x3e\x3c/div\x3e\x3c/div\x3e\x3c/div\x3e\x3c/a\x3e&quot;); &lt;/script&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt; &lt;/div&gt;&lt;div style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-weight: bold;font-size:130%;&quot; &gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div style=&quot;text-align: justify; font-weight: bold;&quot;&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;&lt;span style=&quot;color: rgb(255, 102, 0);&quot;&gt;&lt;span style=&quot;text-decoration: underline;&quot;&gt;I&lt;/span&gt;nspirado pelas funções map() e reduce()  comumente usadas na programação funcional [embora os seus efeitos no âmbito do framework MapReduce não é o mesmo nas suas formas originais&lt;/span&gt;  &lt;span style=&quot;color: rgb(255, 102, 0);&quot;&gt;Bibliotecas MapReduce tem sido escritas em diversas linguagens de programação como  C + +, C #, Erlang, Java, Python, Ruby, F #, Haskell,Clojure.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;&lt;span style=&quot;color: rgb(255, 102, 0);&quot;&gt;MapReduce é uma estrutura para processamento de grandes conjuntos de dados sobre determinados tipos de problemas distribuiveis utilizando um grande número de computadores (nós), referidos coletivamente como um cluster. Processamento computacional pode ocorrer tanto em dados armazenados em um sistema de arquivos (não estruturadas) ou dentro de um banco de dados (estruturados).&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style=&quot;font-weight: bold;font-size:130%;&quot; &gt;&lt;br /&gt;&lt;a style=&quot;color: rgb(255, 102, 0);&quot; onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgkW3tY5bzixSCVwE5_cbcjlOhCqchR8IM7U83C9l3jaUvLvanNQMgP7Dhdmy6REiY2LFkHV758Sci1eQAUTMcncGSJpX-Zo3omWoHdPAyaoqm8WusSvA3lOTQLKTcnJZtkpz9zibz5nyM/s1600-h/parallel-dataflow.jpg&quot;&gt;&lt;img style=&quot;margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 254px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgkW3tY5bzixSCVwE5_cbcjlOhCqchR8IM7U83C9l3jaUvLvanNQMgP7Dhdmy6REiY2LFkHV758Sci1eQAUTMcncGSJpX-Zo3omWoHdPAyaoqm8WusSvA3lOTQLKTcnJZtkpz9zibz5nyM/s400/parallel-dataflow.jpg&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5445316487644439474&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;ol style=&quot;font-weight: bold;&quot;&gt;&lt;li&gt;&lt;span style=&quot;color: rgb(255, 102, 0);font-size:130%;&quot; &gt;&quot;Map&quot; : O nó mestre(master) recebe os dados de entrada, divide esses dados em pequenos sub-problemas, e os distribui para nós trabalhadores(workers). Um nó trabalhador pode fazer isso de novo, por sua vez, levando a uma estrutura multi-level da árvore de tarefas.&lt;/span&gt;&lt;span style=&quot;color: rgb(255, 102, 0);font-size:130%;&quot; &gt;A tecnica usada é a Divisão/Conquista amplamente usada em soluções de problemas top-down, utilizando recursão.&lt;/span&gt;&lt;span style=&quot;color: rgb(255, 102, 0);font-size:130%;&quot; &gt;Os nós trabalhadores processam as pequenas partes do problema, e passa a resposta de volta ao seu nó mestre.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;&lt;span style=&quot;color: rgb(255, 102, 0);&quot;&gt;&quot;Reduce&quot;: O nó mestre toma então as respostas para todas as sub-problemas e os combina de modo a obter os dados de saída - a resposta para o problema que originalmente o algoritmo tentava resolver.&lt;/span&gt;  &lt;span style=&quot;color: rgb(255, 102, 0);&quot;&gt;A vantagem de MapReduce é que ele permite o processamento distribuído da função map e das operações reduce. Já que cada operação de mapeamento é independente da outra, todos os map&#39;s podem ser executadas em paralelo - embora na prática seja limitado pela fonte de dados e / ou o número de CPUs para esses dados.&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;span style=&quot;font-weight: bold;font-size:130%;&quot; &gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: rgb(255, 102, 0);&quot;&gt;Da mesma forma, um conjunto de &quot;reduces&quot; podem executar a fase de redução - tudo o que é necessário é que todas as saídas da operação de map que compartilhem a mesma chave sejam apresentadas ao mesmo redutor, ao mesmo tempo. Embora este processo muitas vezes possa parecer ineficiente em relação aos algoritmos que são mais seqüenciais, MapReduce pode ser aplicada a conjuntos de dados significativamente maior do que aqueles algoritmos usados no mercado de servidores - um grande &quot;farm&quot; de servidores pode usar MapReduce para classificar um petabyte de dados em apenas alguns horas.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;p style=&quot;font-weight: bold; color: rgb(255, 102, 0);&quot;&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;A partes cruciais do algoritmos MapReduce podem ser resumidas em:&lt;br /&gt;&lt;/span&gt;&lt;/p&gt; &lt;ul style=&quot;color: rgb(255, 102, 0);&quot;&gt;&lt;li style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;an &lt;i&gt;&lt;span style=&quot;color: rgb(51, 204, 0);&quot;&gt;input reader&lt;/span&gt;(Leitor de Dados de Entrada)&lt;br /&gt;&lt;/i&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;a &lt;i style=&quot;color: rgb(51, 204, 0);&quot;&gt;Map&lt;/i&gt; function(Função de Mapeamento)&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;a &lt;i style=&quot;color: rgb(51, 204, 0);&quot;&gt;partition&lt;/i&gt; function(Função de Particionamento de Dados)&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;a &lt;i style=&quot;color: rgb(51, 204, 0);&quot;&gt;compare&lt;/i&gt; function(Função de Comparação de Dados)&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;a &lt;i style=&quot;color: rgb(51, 204, 0);&quot;&gt;Reduce&lt;/i&gt;&lt;span style=&quot;color: rgb(51, 204, 0);&quot;&gt; &lt;/span&gt;function(Função de Redução para achar Resultado Final)&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;color: rgb(255, 102, 0);font-size:130%;&quot; &gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;an &lt;/span&gt;&lt;/span&gt;&lt;i&gt;&lt;span style=&quot;color: rgb(255, 102, 0);font-size:130%;&quot; &gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;color: rgb(51, 204, 0);&quot;&gt;output writer&lt;/span&gt;(Escritor de Dados)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/i&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;font-size:130%;&quot; &gt;&lt;br /&gt;&lt;span style=&quot;color: rgb(255, 102, 0);&quot;&gt;O paralelismo também oferece possibilidade de recuperação de falha parcial de servidores e armazenamento durante a operação: se um mapeador ou redutor der falha, o trabalho pode ser remarcado - considerando que os dados de entrada ainda estejam disponíveis.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: rgb(255, 102, 0);&quot; id=&quot;result_box&quot; class=&quot;long_text&quot;&gt;&lt;span style=&quot;background-color: rgb(255, 255, 255);&quot; title=&quot;MapReduce é útil em uma ampla gama de aplicações e arquiteturas [5], incluindo: &amp;quot;distribuição grep, tipo distribuído, web-link reversão gráfico, termo-vetor por host, web stats log de acesso, construção de índice invertido, o agrupamento de&quot;&gt;MapReduce é útil em uma ampla gama de aplicações e arquiteturas , incluindo: &quot;grep distribuido, ordenação distribuida, reversão link &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: rgb(255, 102, 0);&quot; id=&quot;result_box&quot; class=&quot;long_text&quot;&gt;&lt;span style=&quot;background-color: rgb(255, 255, 255);&quot; title=&quot;MapReduce é útil em uma ampla gama de aplicações e arquiteturas [5], incluindo: &amp;quot;distribuição grep, tipo distribuído, web-link reversão gráfico, termo-vetor por host, web stats log de acesso, construção de índice invertido, o agrupamento de&quot;&gt; web-grafo&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: rgb(255, 102, 0);&quot; id=&quot;result_box&quot; class=&quot;long_text&quot;&gt;&lt;span style=&quot;background-color: rgb(255, 255, 255);&quot; title=&quot;MapReduce é útil em uma ampla gama de aplicações e arquiteturas [5], incluindo: &amp;quot;distribuição grep, tipo distribuído, web-link reversão gráfico, termo-vetor por host, web stats log de acesso, construção de índice invertido, o agrupamento de&quot;&gt;, vetor de termos por host, estatísticas web  de log de acesso, construção de índice invertido, o agrupamento de &lt;/span&gt;&lt;span style=&quot;background-color: rgb(255, 255, 255);&quot; title=&quot;documentos, aprendizado de máquina [6], a tradução automática estatística ... &amp;quot; Mais significativamente, quando MapReduce estava acabado, que era usado para regenerar completamente índice do Google da World Wide Web, e substituiu o antigo ad hoc programas que atualizou o índice&quot;&gt;documentos, aprendizado de máquina ,mineração de dados, tradução de maquina estatística ... &quot;Mais significativamente, quando MapReduce estava terminado, ele foi usado para regenerar completamente índices do Google da World Wide Web, e substituiu o antigos programas que atualizavam o índice &lt;/span&gt;&lt;span title=&quot;e funcionou a várias análises [7].&quot;&gt;e funcionavam com várias análises .&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: rgb(255, 102, 0);&quot; id=&quot;result_box&quot; class=&quot;long_text&quot;&gt;&lt;span style=&quot;background-color: rgb(255, 255, 255);&quot; title=&quot;Insumos estável MapReduce e saídas são normalmente armazenados em um sistema de arquivos distribuídos.&quot;&gt;Os inputs e outputs estaveis do algoritmo MapReduce são normalmente armazenados em um sistema de arquivos distribuídos. &lt;/span&gt;&lt;span style=&quot;background-color: rgb(255, 255, 255);&quot; title=&quot;Os dados transitória é normalmente armazenado no disco local e forçado remotamente pelo reduz.&quot;&gt;Os dados intermediarios são normalmente armazenados em um disco local e são pegos remotamente pelo redutor.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul style=&quot;font-weight: bold; font-family: verdana;&quot;&gt;&lt;li&gt;&lt;a href=&quot;http://code.google.com/edu/submissions/mapreduce-minilecture/listing.html&quot;&gt;Curso Google University sobre MapReduce Videos&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;ul style=&quot;font-weight: bold;&quot;&gt;&lt;li&gt;&lt;a style=&quot;font-weight: bold; font-family: verdana;&quot; href=&quot;http://code.google.com/edu/submissions/mapreduce-minilecture/MapReduceMiniSeriesReadingQuestions.doc&quot;&gt;Curso Google University  Exercicios&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;a href=&quot;http://atbrox.com/2010/02/08/parallel-machine-learning-for-hadoopmapreduce-a-python-example/&quot;&gt;&lt;br /&gt;&lt;/a&gt;&lt;ul style=&quot;font-weight: bold;&quot;&gt;&lt;li&gt;&lt;a href=&quot;http://atbrox.com/2010/02/08/parallel-machine-learning-for-hadoopmapreduce-a-python-example/&quot;&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;Hadoop in Python&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;ul style=&quot;font-weight: bold;&quot;&gt;&lt;li&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Google&quot;&gt;Mais informações sobre o Google&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;ul style=&quot;font-weight: bold;&quot;&gt;&lt;li&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;&lt;a href=&quot;http://ensinar.wordpress.com/2009/06/16/hadoop-introducao/&quot;&gt;Hadoop implementação Hadoop em Java da Apache&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;ul style=&quot;font-weight: bold;&quot;&gt;&lt;li&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;&lt;a href=&quot;http://blog.furiousbob.com/tag/hadoop/&quot;&gt;Hadoop e Amazon Elastic Computing(Poder de processamento!)&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;ul style=&quot;font-weight: bold;&quot;&gt;&lt;li&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;&lt;a href=&quot;http://www.ibm.com/developerworks/br/linux/library/au-cloud_apache/index.html&quot;&gt;Artigo sobre Hadoop , Linux na Cloud Computing da IBM&lt;/a&gt;&lt;/span&gt;   &lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://amsterdaintelligence.blogspot.com/feeds/381542008202217978/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://amsterdaintelligence.blogspot.com/2010/03/mapreduce-e-o-que-ha.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7308500728033786786/posts/default/381542008202217978'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7308500728033786786/posts/default/381542008202217978'/><link rel='alternate' type='text/html' href='http://amsterdaintelligence.blogspot.com/2010/03/mapreduce-e-o-que-ha.html' title='MapReduce é o que há!'/><author><name>@williamgouvea</name><uri>http://www.blogger.com/profile/16737800888418990640</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiXgCyNKh33yvHTbk83E03NP-2_VEgR6dAblD4Daus1Z6NoufJ-_ovu0KdlMO4KlMwqlDiHfgVPefrqERTjJ-nkKZP7_S41tqN6sQ9-suaiqjp622XDcN72QNXCLNB5SCg/s220/trabalho.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjZEghyBoYRUw5Eykwig9DGCOcPZJRu_270wHW6VXhaVDHaotcDAXYykpSn8lvC1mE7dfqSxfSd7UHQ0R5NXWRnRcpIGAV8O-z6B_KxZwnn8YI4vIwDFkJ1wF9pzO2IDUF9eVxyquRhe5w/s72-c/mapreduce.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7308500728033786786.post-1988666865074916936</id><published>2010-01-28T16:02:00.001-08:00</published><updated>2010-02-16T22:37:00.188-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="sun oracle java business jcp"/><title type='text'>Comissão Europeia aprova aquisição da Sun pela Oracle</title><content type='html'>&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjDWM_B6xmgwidF03CoiWlglcdDAL56Lcubp9no7K63JJO-17fHlQ_rZJTU5CSI28NQJcyNtO7Ce9GZLKMumG7Zj2tajyFoYlsxFcaCSxoC1K5uLtO30ZO9TKKH-IUvCGg7671EAk2QjIA/s1600-h/SunRIP.jpg&quot;&gt;&lt;img style=&quot;margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 313px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjDWM_B6xmgwidF03CoiWlglcdDAL56Lcubp9no7K63JJO-17fHlQ_rZJTU5CSI28NQJcyNtO7Ce9GZLKMumG7Zj2tajyFoYlsxFcaCSxoC1K5uLtO30ZO9TKKH-IUvCGg7671EAk2QjIA/s400/SunRIP.jpg&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5431945635767390674&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;span style=&quot;;font-family:verdana;font-size:100%;&quot;  &gt;&lt;br /&gt;&lt;/span&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;span style=&quot;;font-family:verdana;font-size:100%;&quot;  &gt;&lt;span style=&quot;font-weight: bold; color: rgb(51, 204, 0);&quot;&gt; O presidente-executivo         da Oracle, Larry Ellison, prometeu mudar o setor da tecnologia         com a aquisição da Sun Microsystems, transação que permitirá à         terceira maior produtora mundial de software ingressar no setor         de hardware.     &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;p  style=&quot;font-weight: bold; color: rgb(51, 204, 0); text-align: justify;font-family:verdana;&quot;&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;Ellison, 65, um ousado bilionário que fundou a Oracle mais de 30         anos atrás, disse que a aquisição da Sun por 7,5 bilhões de         dólares dá à Oracle a mais ampla gama de produtos, entre todas         as empresas de tecnologia.&lt;/span&gt;&lt;/p&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;p  style=&quot;font-weight: bold; color: rgb(51, 204, 0); text-align: justify;font-family:verdana;&quot;&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;&quot;A prova prática será fornecida pelos produtos integrados         que forneceremos aos nossos clientes&quot;, disse ele a clientes         e analistas em um evento na sede da empresa, em Redwood City,         Califórnia, agendado para celebrar a implementação do acordo com         a Sun.&lt;/span&gt;&lt;/p&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;span style=&quot;;font-family:verdana;font-size:100%;&quot;  &gt;&lt;span style=&quot;font-weight: bold; color: rgb(51, 204, 0);&quot;&gt;A empresa combinada será capaz de produzir tudo que as companhias         utilizam em suas centrais de processamento de dados, de         semicondutores e sistemas operacionais a servidores, bancos de         dados e software contábil.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;;font-family:verdana;font-size:100%;&quot;  &gt;&lt;span style=&quot;font-weight: bold; color: rgb(51, 204, 0);&quot;&gt;Essa noticia ja era de se esperar, porem o impacto foi grande para alguns usuarios do Java, Glassfish, Netbeans, VIrtual Box, que se depararam com o logo e as cores do layout da Oracle.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;;font-family:verdana;font-size:100%;&quot;  &gt;&lt;span style=&quot;font-weight: bold; color: rgb(51, 204, 0);&quot;&gt;Como diria Larry Ellison: &quot;Nós estamos nisso pra ganhar!&quot; ,este  é o lema, e os proximos anos prometem muitas novidades no mundo da tecnologia, principalmente na briga de Hardware entre IBM e Oracle.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;object width=&quot;480&quot; height=&quot;295&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/C1Hb9JGHLec&amp;hl=en_US&amp;fs=1&amp;color1=0x234900&amp;color2=0x4e9e00&quot;&gt;&lt;/param&gt;&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot;&gt;&lt;/param&gt;&lt;param name=&quot;allowscriptaccess&quot; value=&quot;always&quot;&gt;&lt;/param&gt;&lt;embed src=&quot;http://www.youtube.com/v/C1Hb9JGHLec&amp;hl=en_US&amp;fs=1&amp;color1=0x234900&amp;color2=0x4e9e00&quot; type=&quot;application/x-shockwave-flash&quot; allowscriptaccess=&quot;always&quot; allowfullscreen=&quot;true&quot; width=&quot;480&quot; height=&quot;295&quot;&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;;font-family:verdana;font-size:100%;&quot;  &gt;&lt;span style=&quot;font-weight: bold; color: rgb(51, 204, 0);&quot;&gt;Muitos veêm tal compra como o fim de algo, mas pelos planos da Oracle, na maioria todas as tecnologias serão integradas e as demissões serão poucas, cumprindo o cronograma ja estipulado no final  de 2009.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;;font-family:verdana;font-size:100%;&quot;  &gt;&lt;span style=&quot;font-weight: bold; color: rgb(51, 204, 0);&quot;&gt;Infelizmente morre o Kenai, um projeto em JRubyonRails de Repositorio de Codigo, com suporte a Mercurial, Wiki , e Hospedagem de Projetos.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;;font-family:verdana;font-size:100%;&quot;  &gt;&lt;span style=&quot;font-weight: bold; color: rgb(51, 204, 0);&quot;&gt;Porem a Oracle afirma investimento no MySQL, Netbeans, Glassfish e claro, Java, sendo a Hotspot(JVM SUN) e a JRockit(Oracle) sendo as JVM alvo a partir de agora na empresa.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;;font-family:verdana;font-size:100%;&quot;  &gt;&lt;span style=&quot;font-weight: bold; color: rgb(51, 204, 0);&quot;&gt;Com a aquisição a Oracle passa a ter maior peso nas decisões no conselho que estipula as mudanças a serem feitas na linguagem Java, de acordo com sua estrategia de mercado.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: rgb(255, 0, 0);font-family:verdana;font-size:100%;&quot;  &gt;&lt;a style=&quot;font-weight: bold;&quot; href=&quot;http://g1.globo.com/Noticias/Tecnologia/0,,MUL1466720-6174,00-COMPRA+DA+SUN+MUDARA+SETOR+DE+TECNOLOGIA+DIZ+CHEFE+DA+ORACLE.html&quot;&gt;Link da noticia no G1&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: rgb(255, 0, 0);font-family:verdana;font-size:100%;&quot;  &gt;&lt;a style=&quot;font-weight: bold;&quot; href=&quot;http://www.guj.com.br/posts/list/196711.java#986007&quot;&gt;Noticia GUJ&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: rgb(255, 0, 0);font-family:verdana;font-size:100%;&quot;  &gt;&lt;a style=&quot;font-weight: bold;&quot; href=&quot;http://www.oracle.com/events/productstrategy/index.html&quot;&gt;WebCasts sobre a Estrategia da Oracle em relação aos produtos SUN&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: rgb(255, 0, 0);font-family:verdana;font-size:100%;&quot;  &gt;&lt;a style=&quot;font-weight: bold;&quot; href=&quot;http://blogs.sun.com/jonathan/&quot;&gt;Blog do CEO Jonathan Schwarz com o anuncio&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://amsterdaintelligence.blogspot.com/feeds/1988666865074916936/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://amsterdaintelligence.blogspot.com/2010/01/comissao-europeia-aprova-aquisicao-da.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7308500728033786786/posts/default/1988666865074916936'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7308500728033786786/posts/default/1988666865074916936'/><link rel='alternate' type='text/html' href='http://amsterdaintelligence.blogspot.com/2010/01/comissao-europeia-aprova-aquisicao-da.html' title='Comissão Europeia aprova aquisição da Sun pela Oracle'/><author><name>@williamgouvea</name><uri>http://www.blogger.com/profile/16737800888418990640</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiXgCyNKh33yvHTbk83E03NP-2_VEgR6dAblD4Daus1Z6NoufJ-_ovu0KdlMO4KlMwqlDiHfgVPefrqERTjJ-nkKZP7_S41tqN6sQ9-suaiqjp622XDcN72QNXCLNB5SCg/s220/trabalho.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjDWM_B6xmgwidF03CoiWlglcdDAL56Lcubp9no7K63JJO-17fHlQ_rZJTU5CSI28NQJcyNtO7Ce9GZLKMumG7Zj2tajyFoYlsxFcaCSxoC1K5uLtO30ZO9TKKH-IUvCGg7671EAk2QjIA/s72-c/SunRIP.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7308500728033786786.post-255456963624420971</id><published>2010-01-26T19:42:00.000-08:00</published><updated>2010-01-26T20:15:06.600-08:00</updated><title type='text'>Introdução Basica a Inteligencia Artificial</title><content type='html'>&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgL80cWR-c6KVA4TrY33SDk4ty6DgJKocWZtk0KJLgHvbWqztkLeP8S8Enw8Bci776zrito6aiyl54QZkXr0ZToC_6BWqVEkjoDFOz7K8N9q4JDrEe7LiAmsjBeKjMQOJNFqVBjxpvfbbw/s1600-h/artificial-brain_48.jpg&quot;&gt;&lt;img style=&quot;margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 300px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgL80cWR-c6KVA4TrY33SDk4ty6DgJKocWZtk0KJLgHvbWqztkLeP8S8Enw8Bci776zrito6aiyl54QZkXr0ZToC_6BWqVEkjoDFOz7K8N9q4JDrEe7LiAmsjBeKjMQOJNFqVBjxpvfbbw/s400/artificial-brain_48.jpg&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5431264204997311618&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div  style=&quot;text-align: justify; color: rgb(0, 153, 0); font-weight: bold;font-family:verdana;&quot;&gt;&lt;span id=&quot;ytm:&quot; class=&quot;long_text&quot;&gt;&lt;span style=&quot;background-color: rgb(255, 255, 255);&quot; title=&quot;Artificial Intelligence is, in our opinion, the most exciting area of computer science.&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Inteligência Artificial é, na minha opinião, a área mais excitante de ciência da computação. &lt;/span&gt;&lt;span style=&quot;background-color: rgb(255, 255, 255);&quot; title=&quot;Artificial Intelligence (or AI, for short) is the name given to any attempt to have computers gain attributes of the human mind.&quot;&gt;Inteligência Artificial (ou IA, ou ainda AI em inglês) é o nome dado a qualquer tentativa de ter ganho de atributos da mente humana com computadores.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;background-color: rgb(255, 255, 255);&quot; title=&quot;Of course, this is a very vague statement, and much argument has happened over what exactly constitutes AI (mathematicians and scientists hate vague statements).&quot;&gt;Naturalmente, esta é uma afirmação muito vaga, e muito da discussão sobre o que  constitui realmente a inteligencia é tema de milhares de pesquisas. &lt;/span&gt;&lt;span style=&quot;background-color: rgb(255, 255, 255);&quot; title=&quot;There are essentially two schools of thought: Strong AI and Weak AI.&quot;&gt;Há essencialmente duas escolas de pensamento:  IA FORTE  e IA FRACA.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span title=&quot;Weak AI philosophers believe that computers, as advanced as they may get, will only be able to seem intelligent.&quot;&gt;Filósofos  da &quot;Weak AI&quot; acreditam que os computadores, por mais avançados que possam ser, só serão capazes de parecerem inteligentes. &lt;/span&gt;&lt;span style=&quot;background-color: rgb(255, 255, 255);&quot; title=&quot;The responses of the computer may seem like intelligent actions, but the Weak AI theory insists that the computers are just mindlessly manipulating data to produce &amp;quot;intelligent&amp;quot; actions.&quot;&gt;As respostas do computador podem até parecer  com ações inteligentes, mas a teoria da IA Fraca insiste em que os computadores  apenas fazem complexas  manipulações de dados para produzir ações &quot;pseudo-inteligentes&quot; . &lt;/span&gt;&lt;span title=&quot;Strong AI philosophers believe that computers someday can be as intelligent as humans.&quot;&gt;Filósofos da IA Forte, como eu,  acreditam que algum dia os computadores podem ser tão inteligentes quanto os humanos.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span title=&quot;Of course, the heart of the discussion is this: What is intelligence?&quot;&gt;Evidentemente, o cerne da discussão é a seguinte: O que é inteligência? &lt;/span&gt;&lt;span style=&quot;background-color: rgb(255, 255, 255);&quot; title=&quot;Normally, we declare that humans are the standard for intelligence, but then, isn&#39;t human intelligence, at the very basic level, just a bunch of mindless chemical reactions?&quot;&gt;Normalmente, nós declaramos que os seres humanos são o padrão de inteligência, mas vejamos se, não é a inteligência humana, a nível muito básico, apenas um monte de reações químicas simples?&lt;br /&gt;&lt;br /&gt;O buraco é mais embaixo quando conversamos sobre o assunto  com Geneticistas, Psicólogos, e Neuro Cientistas, Religiosos, Filósofos.Devido a isso ambas as correntes de pensamento tem grandes idéias e seguidores fanáticos.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: rgb(255, 255, 255);&quot; title=&quot;Aside from the philosophy of the Strong AI and the Weak AI debate, there is also another, related, division in AI: Connectionism and Classicalism.&quot;&gt;Para além da filosofia sobre AI forte e AI fraca, há também uma outra questão relacionada, a divisão da  AI em : Conexionismo e Classicismo.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span title=&quot;Classicalism is the AI that is found in Chess programs, weather diagnostics, and language processors.&quot;&gt;Classicismo seria o ramo da IA onde estão os  programas de xadrez, os de predição de series temporais estatísticas(Redes Bayesianas), e os processadores de linguagem. &lt;/span&gt;&lt;span style=&quot;background-color: rgb(255, 255, 255);&quot; title=&quot;Classicalism, also known as the top-down approach, approaches AI from the standpoint that human minds are computational by nature, that is, we manipulate data one piece at a time (serially) through a built in circuitry in our brains.&quot;&gt;Classicismo, também conhecida como a abordagem top-down, parte da premissa que  do ponto de vista pratico , que as mentes humanas são computacionalmente capazes, por natureza, isto é, nós manipulamos dados divididos em pedaços &quot;lidos&quot; serialmente através de um bem construído  circuito, o nosso cérebro. &lt;/span&gt;&lt;span title=&quot;So, much of the classical approach to AI consists of things like minimax trees, preprogrammed databases, and prewritten code.&quot;&gt;&lt;br /&gt;&lt;br /&gt;Assim, grande parte da abordagem clássica da IA consiste em coisas como árvores minimax, prolog,LISP , textmining, e motores de regras, sendo estes  &lt;/span&gt;&lt;span title=&quot;Expert systems are another name for Classical AI.&quot;&gt; sistemas especialistas sendo também um outro nome para IA Clássica.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span title=&quot;Connectionism is the newer form of AI.&quot;&gt;Conexionismo é a nova forma de inteligência artificial. &lt;/span&gt;&lt;span title=&quot;The problem with classicalism, connectionists say, is that it is too unlike the human mind.&quot;&gt;O problema com o classicismo, conexionistas dizer, é que é muito ao contrário da mente humana. &lt;/span&gt;&lt;span style=&quot;background-color: rgb(255, 255, 255);&quot; title=&quot;The human mind can learn, expand, and change, but many of the Expert systems are too rigid and don&#39;t learn.&quot;&gt;A mente humana pode aprender, expandir e mudar, mas muitos dos sistemas especialistas são muito rígidas e não aprendem.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;background-color: rgb(255, 255, 255);&quot; title=&quot;Connectionism is the AI that the media really likes, which is why it contains many famous names like Neural Networks and Parallel Processing.&quot;&gt;Conexionismo é a AI que a mídia realmente gosta, que é porque ele contém muitos nomes famosos, como redes neurais e processamento paralelo. &lt;/span&gt;&lt;span style=&quot;background-color: rgb(255, 255, 255);&quot; title=&quot;Connectionism seems a step closer to the human mind, since it uses networks of nodes that seem like the human brain&#39;s network of neurons.&quot;&gt;Conexionismo parece um passo mais perto da mente humana, uma vez que utiliza redes de nós que parecem rede do cérebro humano de neurônios.&lt;br /&gt;&lt;br /&gt;Outra grande teoria dentro da área conexionista é a Computação Evolucionaria, &lt;/span&gt;&lt;/span&gt; é um ramo da ciência da computação  que tem por base os mecanismos evolutivos encontrados na natureza. Esses mecanismos estão diretamente relacionados com a teoria da evolução de Darwin, onde ele afirma que a vida na &lt;span style=&quot;text-decoration: underline;&quot;&gt;Terra&lt;/span&gt; é o resultado de um processo de seleção, feito pelo meio ambiente, em que somente os mais aptos e adaptados possuirão chances de sobreviver e, consequentemente, reproduzir-se. &lt;br /&gt;&lt;br /&gt;Computação Evolucionaria vê os programas de computador como seres, que possuem código genético e vivem em um ambiente( o de execução!).John Holland criou na década de 60, uma sequência de passos, utilizando operadores &quot;genéticos&quot; que denominou Algoritmos Genéticos.&lt;br /&gt;&lt;br /&gt;Basicamente um algoritmo genético tem uma população de indivíduos,, codificados em  seus genes, que passam pelos processos de seleção, reprodução e mutação gerando indivíduos mais aptos segundo uma função de &quot;fitness&quot; ou aptidão.&lt;br /&gt;&lt;br /&gt;&lt;span id=&quot;wryw&quot; class=&quot;long_text&quot;&gt;&lt;span style=&quot;background-color: rgb(255, 255, 255);&quot; title=&quot;Connectionism, however, also has its flaws.&quot;&gt;Algumas das falhas do Conexionismo seriam a arquitetura dos sistemas atuais, já que computadores apesar de rápidos, não conseguem ser massivamente paralelos como nosso cérebro, não conseguindo dessa forma trabalhar com muitos dados.&lt;br /&gt;&lt;br /&gt;Alguns cientistas nas áreas de Computação e Neurociencia dizem que a  Web 3.0 será um prototipo de um super cérebro, onde cada um de nós, seria um neurónio que é estimulado ou não pelo ambiente captando e gerando informação para rede, e que programas como os  bots de busca/extração de informação, alem de agregadores e redes sociais formariam uma sociedade de entidades computacionais , sendo a abstração do nosso próprio ambiente.&lt;br /&gt;&lt;br /&gt;David&lt;/span&gt;&lt;/span&gt;&lt;b&gt; Gelernter&lt;/b&gt;, um cientista  e professor de ciência da computação em  Yale, afirma  que maquinas inteligentes, teriam a capacidade de sentir, já que logicamente, uma maquinas programada para imitar sentimentos humanos, teria que ser programada para mentir, já que ela  em verdade, não pode se sentir como um humano.&lt;br /&gt;&lt;br /&gt;Bill Joy, grande cientista da Computação, e um dos fundadores da SUN Microsystems afirma em seu &lt;a href=&quot;http://www.wired.com/wired/archive/8.04/joy_pr.html&quot;&gt;artigo&lt;/a&gt;, que as maquinas ao longo do tempo, poderão evoluir de forma catastrofica, devido a avanços na tecnologia na área da genética, computação paralela, automação industrial e computação quântica.&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;text-align: center; font-style: italic;&quot;&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;Referencias&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style=&quot;font-style: italic;font-size:130%;&quot; &gt; &lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://pt.wikipedia.org/wiki/Computa%C3%A7%C3%A3o_evolucion%C3%A1ria&quot;&gt;Computação Evolucionaria (Wikipedia)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Evolutionary_computation&quot;&gt;Evolutionary Computation (Wikipedia)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://www.aihorizon.com/essays/generalai/intro.htm&quot;&gt;Introdução a Inteligencia Artificial( em ingles)&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://amsterdaintelligence.blogspot.com/feeds/255456963624420971/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://amsterdaintelligence.blogspot.com/2010/01/introducao-basica-inteligencia.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7308500728033786786/posts/default/255456963624420971'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7308500728033786786/posts/default/255456963624420971'/><link rel='alternate' type='text/html' href='http://amsterdaintelligence.blogspot.com/2010/01/introducao-basica-inteligencia.html' title='Introdução Basica a Inteligencia Artificial'/><author><name>@williamgouvea</name><uri>http://www.blogger.com/profile/16737800888418990640</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiXgCyNKh33yvHTbk83E03NP-2_VEgR6dAblD4Daus1Z6NoufJ-_ovu0KdlMO4KlMwqlDiHfgVPefrqERTjJ-nkKZP7_S41tqN6sQ9-suaiqjp622XDcN72QNXCLNB5SCg/s220/trabalho.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgL80cWR-c6KVA4TrY33SDk4ty6DgJKocWZtk0KJLgHvbWqztkLeP8S8Enw8Bci776zrito6aiyl54QZkXr0ZToC_6BWqVEkjoDFOz7K8N9q4JDrEe7LiAmsjBeKjMQOJNFqVBjxpvfbbw/s72-c/artificial-brain_48.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7308500728033786786.post-6186141047236714095</id><published>2010-01-10T04:58:00.000-08:00</published><updated>2010-01-10T05:31:14.396-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="licença opensource bittorrent p2p networking socialnetwork industry"/><title type='text'>Propriedade Intelectual!</title><content type='html'>&lt;p style=&quot;text-align: center; color: rgb(255, 0, 0); font-style: italic;&quot;&gt;&lt;span style=&quot;font-size:180%;&quot;&gt;&lt;span style=&quot;font-weight: bold;&quot; id=&quot;result_box&quot; class=&quot;long_text&quot;&gt;&lt;span style=&quot;background-color: rgb(255, 255, 255);&quot; title=&quot;“It&#39;s completely legal to create technical solutions.&quot;&gt;&lt;blockquote&gt;&lt;/blockquote&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style=&quot;text-align: justify; color: rgb(255, 0, 0);&quot;&gt;&lt;span style=&quot;font-size:180%;&quot;&gt;&lt;span style=&quot;font-weight: bold;&quot; id=&quot;result_box&quot; class=&quot;long_text&quot;&gt;&lt;span style=&quot;background-color: rgb(255, 255, 255);&quot; title=&quot;“It&#39;s completely legal to create technical solutions.&quot;&gt;&quot;É completamente legal  criar soluções técnicas. &lt;/span&gt;&lt;span style=&quot;background-color: rgb(255, 255, 255);&quot; title=&quot;The reason people get dragged into legal proceedings is that they break copyright laws, which I have never done.&quot;&gt;A razão pela qual as pessoas entraram  em um processo judicial é que eles quebram leis de direitos autorais, coisa que eu nunca fiz.&quot;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;p style=&quot;text-align: center; color: rgb(255, 0, 0); font-style: italic;&quot;&gt;&lt;span style=&quot;font-size:180%;&quot;&gt;&lt;span style=&quot;font-weight: bold;&quot; id=&quot;result_box&quot; class=&quot;long_text&quot;&gt;&lt;span style=&quot;background-color: rgb(255, 255, 255);&quot; title=&quot;The reason people get dragged into legal proceedings is that they break copyright laws, which I have never done.&quot;&gt;&lt;blockquote&gt;&lt;/blockquote&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-weight: bold; color: rgb(255, 102, 0);font-size:130%;&quot; &gt;&lt;span style=&quot;font-style: italic;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;color: rgb(255, 102, 0); font-weight: bold;font-size:130%;&quot; &gt;DIREITO AUTORAL&lt;/span&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(51, 204, 0); font-weight: bold;&quot;&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;Direito autoral ou direitos autorais são as denominações utilizadas em referência ao &lt;span style=&quot;text-decoration: underline;&quot;&gt;rol&lt;/span&gt; de &lt;span style=&quot;text-decoration: underline;&quot;&gt;direitos&lt;/span&gt; aos &lt;span style=&quot;text-decoration: underline;&quot;&gt;autores&lt;/span&gt; de suas obras &lt;span style=&quot;text-decoration: underline;&quot;&gt;intelectuais&lt;/span&gt; que podem ser literárias, artísticas ou científicas. Neste rol encontram-se dispostos direitos de diferentes naturezas. A &lt;span style=&quot;text-decoration: underline;&quot;&gt;doutrina&lt;/span&gt; jurídica clássica coube por dividir estes direitos entre os chamados &lt;span style=&quot;text-decoration: underline;&quot;&gt;direitos morais&lt;/span&gt; que são os direitos de natureza pessoal e os &lt;span style=&quot;text-decoration: underline;&quot;&gt;direitos patrimoniais&lt;/span&gt; (direitos de natureza &lt;span style=&quot;text-decoration: underline;&quot;&gt;patrimonial&lt;/span&gt;).&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;div style=&quot;text-align: center;&quot;&gt;&lt;span id=&quot;result_box&quot; class=&quot;long_text&quot;&gt;&lt;span style=&quot;background-color: rgb(255, 255, 255);&quot; title=&quot;The 32-year-old New York native revolutionized the internet in 2001 through the development of BitTorrent technology, which makes file sharing fast and efficient.&quot;&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;&lt;span style=&quot;color: rgb(255, 102, 0); font-weight: bold;&quot;&gt;COPYRIGHT&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span id=&quot;result_box&quot; class=&quot;long_text&quot;&gt;&lt;span style=&quot;background-color: rgb(255, 255, 255);&quot; title=&quot;The 32-year-old New York native revolutionized the internet in 2001 through the development of BitTorrent technology, which makes file sharing fast and efficient.&quot;&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p style=&quot;font-weight: bold; color: rgb(51, 204, 0); text-align: justify;&quot;&gt;Direitos do Autor não são necessariamente o mesmo que &lt;span style=&quot;text-decoration: underline;&quot;&gt;&lt;span style=&quot;font-style: italic;&quot;&gt;copyright&lt;/span&gt;&lt;/span&gt; em inglês. O sistema &lt;span style=&quot;text-decoration: underline;&quot;&gt;anglo-saxão &lt;/span&gt;do copyright difere do de direito de autor. Os nomes respectivos já dão-nos conta da diferença: de um lado, tem-se um direito à &lt;span style=&quot;text-decoration: underline;&quot;&gt;cópia&lt;/span&gt;, copyright ou direito de &lt;span style=&quot;text-decoration: underline;&quot;&gt;reprodução&lt;/span&gt;, do outro, um direito de autor; neste, o foco está na pessoa do direito, o autor; naquele, no objeto do direito (a &lt;span style=&quot;text-decoration: underline;&quot;&gt;obra&lt;/span&gt;) e na prerrogativa patrimonial de se poder copiar.&lt;/p&gt;&lt;div style=&quot;color: rgb(51, 204, 0); text-align: justify;&quot;&gt; &lt;/div&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-weight: bold; color: rgb(51, 204, 0);&quot;&gt;Deve perceber as diferenças entre o direito autoral de origem &lt;/span&gt;&lt;a style=&quot;font-weight: bold; color: rgb(51, 204, 0);&quot; href=&quot;http://pt.wikipedia.org/wiki/Romano&quot; title=&quot;Romano&quot; class=&quot;mw-redirect&quot;&gt;romano&lt;/a&gt;&lt;span style=&quot;font-weight: bold; color: rgb(51, 204, 0);&quot;&gt;-germânica, com base no sistema continental europeu do chamado &lt;/span&gt;&lt;a style=&quot;font-weight: bold; color: rgb(51, 204, 0);&quot; href=&quot;http://pt.wikipedia.org/wiki/Sistema_romano-germ%C3%A2nico&quot; title=&quot;Sistema romano-germânico&quot;&gt;Sistema romano-germânico&lt;/a&gt;&lt;span style=&quot;font-weight: bold; color: rgb(51, 204, 0);&quot;&gt; e o sistema anglo-americano do copyright baseado no&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;text-decoration: underline; color: rgb(255, 0, 0);&quot;&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Common Law&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-weight: bold; color: rgb(51, 204, 0);&quot;&gt;, havendo por característica diferencial, o fato que o Direito Autoral tem por escopo fundamental a proteção do criador e ao contrário o Copyright protege a obra em si, ou seja o&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-weight: bold; color: rgb(255, 0, 0);&quot;&gt;produto&lt;/span&gt;&lt;span style=&quot;font-weight: bold; color: rgb(51, 204, 0);&quot;&gt;, dando ênfase a vertente &lt;/span&gt;&lt;span style=&quot;color: rgb(255, 0, 0); font-weight: bold;&quot;&gt;economica&lt;/span&gt;&lt;span style=&quot;font-weight: bold; color: rgb(51, 204, 0);&quot;&gt;, a exploração patrimonial das obras através do direito de reprodução. No efetuamento do direito de reprodução, o titular dos direitos autorais poderá colocar à disposição do público a obra, na forma, local e pelo tempo que desejar, a título oneroso ou gratuito.&lt;/span&gt;&lt;span class=&quot;editsection&quot;&gt;&lt;/span&gt; &lt;span class=&quot;mw-headline&quot; id=&quot;Aspectos_jur.C3.ADdicos&quot;&gt;&lt;/span&gt;&lt;/p&gt; &lt;span id=&quot;result_box&quot; class=&quot;long_text&quot;&gt;&lt;span style=&quot;background-color: rgb(255, 255, 255);&quot; title=&quot;The 32-year-old New York native revolutionized the internet in 2001 through the development of BitTorrent technology, which makes file sharing fast and efficient.&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;color: rgb(255, 102, 0);font-size:130%;&quot; &gt;&lt;span style=&quot;font-weight: bold;&quot; id=&quot;result_box&quot; class=&quot;long_text&quot;&gt;&lt;span style=&quot;background-color: rgb(255, 255, 255);&quot; title=&quot;The 32-year-old New York native revolutionized the internet in 2001 through the development of BitTorrent technology, which makes file sharing fast and efficient.&quot;&gt;BRAM COHEN, CEO DA BITTORRENT&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span id=&quot;result_box&quot; class=&quot;long_text&quot;&gt;&lt;span style=&quot;background-color: rgb(255, 255, 255);&quot; title=&quot;The 32-year-old New York native revolutionized the internet in 2001 through the development of BitTorrent technology, which makes file sharing fast and efficient.&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style=&quot;font-weight: bold;&quot; id=&quot;result_box&quot; class=&quot;long_text&quot;&gt;&lt;span style=&quot;background-color: rgb(255, 255, 255);&quot; title=&quot;The 32-year-old New York native revolutionized the internet in 2001 through the development of BitTorrent technology, which makes file sharing fast and efficient.&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div style=&quot;text-align: justify; color: rgb(51, 204, 0);&quot;&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;&lt;span style=&quot;font-weight: bold;&quot; id=&quot;result_box&quot; class=&quot;long_text&quot;&gt;&lt;span style=&quot;background-color: rgb(255, 255, 255);&quot; title=&quot;The 32-year-old New York native revolutionized the internet in 2001 through the development of BitTorrent technology, which makes file sharing fast and efficient.&quot;&gt;Um  nativo de NY, de 32 anos, que  revolucionou a internet em 2001, através do desenvolvimento da tecnologia BitTorrent, o que torna o compartilhamento de arquivos rápido e eficiente. &lt;/span&gt;&lt;span style=&quot;background-color: rgb(255, 255, 255);&quot; title=&quot;Today Cohen&#39;s company, which shares a name with the technology he developed, is a world leader in the file sharing business.&quot;&gt;Hoje a empresa de Cohen, que partilha um nome com a tecnologia que ele desenvolveu, é um líder mundial no negócio de compartilhamento de arquivos.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot; id=&quot;result_box&quot; class=&quot;long_text&quot;&gt;&lt;span style=&quot;background-color: rgb(255, 255, 255);&quot; title=&quot;Today Cohen&#39;s company, which shares a name with the technology he developed, is a world leader in the file sharing business.&quot;&gt;&lt;/span&gt;&lt;span style=&quot;background-color: rgb(255, 255, 255);&quot; title=&quot;Did the father of three anticipate the level of success enjoyed by the technology?&quot;&gt;Como será que o pai do &quot;fileshare&quot;  pensou nessa tecnologia?&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot; id=&quot;result_box&quot; class=&quot;long_text&quot;&gt;&lt;span style=&quot;background-color: rgb(255, 255, 255);&quot; title=&quot;Did the father of three anticipate the level of success enjoyed by the technology?&quot;&gt;&lt;/span&gt;&lt;span style=&quot;background-color: rgb(255, 255, 255);&quot; title=&quot;“My aim was to change the way people exchanged information over the internet but I didn&#39;t predict how big a role it was going to play,” he said.&quot;&gt;&quot;Meu objetivo era mudar a maneira como as pessoas trocaram informações sobre a internet, mas eu não previa a grande proporção disso&quot;, disse ele.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot; id=&quot;result_box&quot; class=&quot;long_text&quot;&gt;&lt;span style=&quot;background-color: rgb(255, 255, 255);&quot; title=&quot;“My aim was to change the way people exchanged information over the internet but I didn&#39;t predict how big a role it was going to play,” he said.&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot; id=&quot;result_box&quot; class=&quot;long_text&quot;&gt;&lt;span style=&quot;background-color: rgb(255, 255, 255);&quot; title=&quot;“My aim was to change the way people exchanged information over the internet but I didn&#39;t predict how big a role it was going to play,” he said.&quot;&gt;&lt;/span&gt;&lt;span style=&quot;background-color: rgb(255, 255, 255);&quot; title=&quot;Unlike Swedish file sharing site The Pirate Bay, Cohen has avoided any brushes with the law.&quot;&gt;Ao contrário do site de compartilhamento de arquivos sueco The Pirate Bay, Cohen tem evitado quaisquer problemascom a lei.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot; id=&quot;result_box&quot; class=&quot;long_text&quot;&gt;&lt;span style=&quot;background-color: rgb(255, 255, 255);&quot; title=&quot;Unlike Swedish file sharing site The Pirate Bay, Cohen has avoided any brushes with the law.&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot; id=&quot;result_box&quot; class=&quot;long_text&quot;&gt;&lt;span style=&quot;background-color: rgb(255, 255, 255);&quot; title=&quot;Unlike Swedish file sharing site The Pirate Bay, Cohen has avoided any brushes with the law.&quot;&gt;&lt;/span&gt;&lt;span style=&quot;background-color: rgb(255, 255, 255);&quot; title=&quot;“It&#39;s completely legal to create technical solutions.&quot;&gt;&quot;É completamente legal  criar soluções técnicas. &lt;/span&gt;&lt;span style=&quot;background-color: rgb(255, 255, 255);&quot; title=&quot;The reason people get dragged into legal proceedings is that they break copyright laws, which I have never done.&quot;&gt;A razão pela qual as pessoas entraram  em um processo judicial é que eles quebram leis de direitos autorais, coisa que eu nunca fiz.&quot;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-weight: bold;&quot; id=&quot;result_box&quot; class=&quot;long_text&quot;&gt;&lt;span style=&quot;background-color: rgb(255, 255, 255);&quot; title=&quot;The reason people get dragged into legal proceedings is that they break copyright laws, which I have never done.&quot;&gt;&lt;/span&gt;&lt;span style=&quot;background-color: rgb(255, 255, 255);&quot; title=&quot;“On the contrary, we can help the entertainment industry by allowing them to move their programmes and films to the internet and make older material available so people can see it when they want,” said Cohen.&quot;&gt;&quot;Pelo contrário, nós podemos ajudar a indústria de entretenimento, permitindo-lhes mover seus programas e filmes para a internet e fazer mais material disponível que as pessoas possam vê-lo quando quiserem&quot;, disse Cohen.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Einstein estava certo:&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;div style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;&lt;span style=&quot;font-weight: bold; font-style: italic; color: rgb(255, 0, 0);&quot; id=&quot;result_box&quot; class=&quot;long_text&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-weight: bold; font-style: italic; color: rgb(255, 0, 0);font-size:130%;&quot; &gt;&lt;span id=&quot;result_box&quot; class=&quot;long_text&quot;&gt;&lt;span style=&quot;background-color: rgb(255, 255, 255);&quot; title=&quot;“On the contrary, we can help the entertainment industry by allowing them to move their programmes and films to the internet and make older material available so people can see it when they want,” said Cohen.&quot;&gt; &quot;Criatividade é saber ocultar muito bem suas fontes!&quot;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;text-align: center; font-weight: bold; color: rgb(255, 102, 0);&quot;&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;LINKS E REFERENCIAS&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://pt.wikipedia.org/wiki/Direito_autoral&quot;&gt;Direito Autoral&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://pt.wikipedia.org/wiki/Direito_da_Propriedade_Intelectual&quot;&gt;Direito a Propriedade Intelectual&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://pt.wikipedia.org/wiki/Propriedade_intelectual&quot;&gt;Propriedade Intelectual&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style=&quot;text-align: center;&quot;&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;&lt;span style=&quot;font-weight: bold;&quot; id=&quot;result_box&quot; class=&quot;long_text&quot;&gt;&lt;span style=&quot;background-color: rgb(255, 255, 255);&quot; title=&quot;“On the contrary, we can help the entertainment industry by allowing them to move their programmes and films to the internet and make older material available so people can see it when they want,” said Cohen.&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://amsterdaintelligence.blogspot.com/feeds/6186141047236714095/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://amsterdaintelligence.blogspot.com/2010/01/propriedade-intelectual.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7308500728033786786/posts/default/6186141047236714095'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7308500728033786786/posts/default/6186141047236714095'/><link rel='alternate' type='text/html' href='http://amsterdaintelligence.blogspot.com/2010/01/propriedade-intelectual.html' title='Propriedade Intelectual!'/><author><name>@williamgouvea</name><uri>http://www.blogger.com/profile/16737800888418990640</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiXgCyNKh33yvHTbk83E03NP-2_VEgR6dAblD4Daus1Z6NoufJ-_ovu0KdlMO4KlMwqlDiHfgVPefrqERTjJ-nkKZP7_S41tqN6sQ9-suaiqjp622XDcN72QNXCLNB5SCg/s220/trabalho.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7308500728033786786.post-997101905598066004</id><published>2009-11-21T01:52:00.000-08:00</published><updated>2010-03-05T23:05:38.617-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="algorithms"/><category scheme="http://www.blogger.com/atom/ns#" term="algoritmos"/><category scheme="http://www.blogger.com/atom/ns#" term="collections"/><category scheme="http://www.blogger.com/atom/ns#" term="datastructure"/><category scheme="http://www.blogger.com/atom/ns#" term="estruturadedados"/><category scheme="http://www.blogger.com/atom/ns#" term="java"/><title type='text'>Framework Collections do Java ==Coleções ou Estruturas de Dados Reutilizaveis --Parte 1</title><content type='html'>&lt;p style=&quot;text-align: right;&quot;&gt;&lt;img src=&quot;http://api.ning.com/files/PX2SYCFXAnxWo9mbS2xxjz1wn4btgLwGdAnAAmmab0MS2X*J5Ap6AcR9utEXABgZxeXv8Zw7mzJ-C3aCASB6oq9QqB8b14Hu/milk_bottles400.jpg&quot; alt=&quot;&quot; height=&quot;300&quot; width=&quot;400&quot; /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: rgb(255, 102, 0);font-size:130%;&quot; &gt;&lt;br /&gt;&lt;/span&gt;&lt;div style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;color: rgb(255, 102, 0);font-size:130%;&quot; &gt;&lt;span style=&quot;font-size:180%;&quot;&gt;&lt;b&gt;&lt;i&gt;Framework Collections&lt;/i&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style=&quot;color: rgb(255, 102, 0);font-size:130%;&quot; &gt;&lt;br /&gt;&lt;/span&gt; &lt;span style=&quot;;font-size:85%;color:green;&quot;  &gt;&lt;b&gt;Uma coleção - às vezes chamada de container - é simplesmente um objeto que agrupa múltiplos elementos em uma única unidade. As coleções são utilizados para armazenar, recuperar, manipular e comunicar dados agregados. Normalmente, eles representam itens de dados que formam um grupo natural, como uma mão de poker (uma coleção de cartas), uma pasta de correio (uma coleção de cartas), ou uma lista telefônica (mapeamento de nomes para números de telefone).&lt;br /&gt;&lt;br /&gt;Se você já usou a linguagem de programação Java - ou praticamente qualquer outra linguagem de programação - você já está familiarizado com coleções. Implementações de Collection em anteriores (pré-1,2) versões da plataforma Java incluído Vector, Hashtable, e arrays. No entanto, essas versões não contêm um quadro coleções.&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Um o framework de coleções é uma arquitetura unificada para representação e manipulação de coleções. Todo framework de coleções deve conter o seguinte:&lt;/b&gt;&lt;br /&gt;&lt;/span&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;&lt;b&gt;&lt;span style=&quot;;font-size:85%;color:red;&quot;  &gt;Interfaces: Estes são os tipos de dados abstratos que representam coleções. Interfaces permitem coleções a serem manipuladas independentemente dos detalhes de sua representação. Em linguagens orientadas a objeto, interfaces geralmente formam uma hierarquia.&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;b&gt;&lt;span style=&quot;;font-size:85%;color:red;&quot;  &gt;Implementações: Estas são as implementações concretas da coleção de interfaces. Em essência, eles são estruturas de dados reutilizáveis.&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;b&gt;&lt;span style=&quot;;font-size:85%;color:red;&quot;  &gt;Algoritmos: Estes são os métodos que executam computações úteis, tais como busca e ordenação nos objetos que implementam as interfaces de coleta. Os algoritmos devem ser polimórficos, ou seja, o mesmo método pode ser usado em muitas implementações diferentes da interface de coleta apropriado. Em essência, os algoritmos de funcionalidade são reutilizáveis.&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;span style=&quot;;font-size:85%;color:green;&quot;  &gt;&lt;br /&gt;&lt;b&gt;O Java Collections Framework fornece os seguintes benefícios ao programador:&lt;/b&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style=&quot;;font-size:85%;color:red;&quot;  &gt;&lt;b&gt;Reduz o esforço de programação: Ao fornecer estruturas de dados e algoritmos úteis, com o Framework Collections você esta livre para concentrar-se as partes importantes de seu programa e não na parte de baixo nível &quot;infraestrutura&quot; necessária para faze-lo funcionar. Ao facilitar a interoperabilidade entre APIs não relacionadas, o Java Collections Framework te deixa livre para de escrever objetos ou adaptador de conversão de código para conectar-se API.&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;span style=&quot;;font-size:85%;color:red;&quot;  &gt;&lt;b&gt;Aumenta a performance do programa e da qualidade: Framework Collections oferece alto desempenho, com implementações de alta qualidade contando com estruturas de dados úteis e algoritmos. As várias implementações de cada interface são substituíveis, assim que os programas podem ser facilmente ajustado trocando implementações coleção. Porque você está livre da labuta de escrever suas próprias estruturas de dados, você terá mais tempo para se dedicar a programas de melhoria da qualidade e desempenho.&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;span style=&quot;;font-size:85%;color:red;&quot;  &gt;&lt;b&gt;Permite a interoperabilidade entre APIs não relacionadas: As interfaces de coleta são o vernáculo pelo qual APIs passar coleções frente e para trás. Se a minha administração de rede API fornece uma coleção de nomes de nó e se o seu kit de ferramentas GUI espera uma coleção de títulos de coluna, nossas APIs irá interoperar, mesmo que eles foram escritos de forma independente.&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;span style=&quot;;font-size:85%;color:red;&quot;  &gt;&lt;b&gt;Reduz o esforço para aprender e usar novas APIs: APIs Muitos, naturalmente, tomar coleções na entrada e fornecer-lhes a saída. No passado, cada uma API, como tinha um pequeno sub-API dedicada a manipular suas coleções. Houve pouca consistência entre estes ad hoc sub-coleções APIs, assim que você teve para aprender cada um a partir do zero, e era fácil cometer erros quando utilizá-los. Com o advento das interfaces de recolha normal, o problema foi embora.&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;span style=&quot;;font-size:85%;color:red;&quot;  &gt;&lt;b&gt;Reduz o esforço para conceber novas APIs: Este é o outro lado da vantagem anterior. Designers e implementadores não tem que reinventar a roda a cada vez que criar uma API que conta com coleções, em vez disso, eles podem usar as interfaces padrão coleção.&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;span style=&quot;;font-size:85%;color:red;&quot;  &gt;&lt;b&gt;Reutilização de software Fosters: Novas estruturas de dados que estejam em conformidade com as interfaces padrão coleção são, por natureza reutilizável. O mesmo vale para novos algoritmos que operam sobre os objetos que implementam essas interfaces.&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;b&gt;&lt;i&gt;&lt;span style=&quot;color: rgb(255, 102, 0);font-size:130%;&quot; &gt;&lt;br /&gt;&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;div style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size:180%;&quot;&gt;&lt;b&gt;&lt;i&gt;&lt;span style=&quot;color: rgb(255, 102, 0);&quot;&gt;Interfaces&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style=&quot;;font-size:85%;color:green;&quot;  &gt;&lt;br /&gt;&lt;b&gt;As interfaces principais do framework collection encapsulam diferentes tipos de coleções. Estas interfaces permitem que coleções sejam manipuladas independentemente dos detalhes de sua implementação. Tais Interfaces são a base do Java Collections Framework. Como você pode ver na figura seguinte, as interfaces principais formam uma hierarquia.&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;img src=&quot;http://api.ning.com/files/PX2SYCFXAnwjAWJiFDh6QX3UICPQCCao-UjFFWdFtjN2Qcgyfcp8gTto0n7WX82l8hViu-Mph-6y8Hvo20pWxnz8W9zYRui0/collections_images.gif&quot; alt=&quot;&quot; height=&quot;129&quot; width=&quot;438&quot; /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;;font-size:85%;color:green;&quot;  &gt;&lt;br /&gt;&lt;b&gt;Por exemplo, Set é um tipo de coleção, SortedSet é um tipo especial de Set e assim por diante.Temos que notar tambem, que a figura possui 2 hierarquias diferentes, ja que Map nao é de fato uma verdadeira Collection!&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi5k4Fgs-NB60JmZCYl8QI-cYtkc2BRldGuEacmsJ83cjqdYeVWUF6soi-PXcEXsxDR-TxuluOMxhb6fSmaIziOc_54_b_ZSlWO5BxmNFRRnJm8HkjSJQuCRnEZsxELaZRLxD6CKDXRkIg/s1600-h/collection_bola_de_gude_renter.jpg&quot;&gt;&lt;img style=&quot;margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 247px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi5k4Fgs-NB60JmZCYl8QI-cYtkc2BRldGuEacmsJ83cjqdYeVWUF6soi-PXcEXsxDR-TxuluOMxhb6fSmaIziOc_54_b_ZSlWO5BxmNFRRnJm8HkjSJQuCRnEZsxELaZRLxD6CKDXRkIg/s400/collection_bola_de_gude_renter.jpg&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5445407712154092034&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;&lt;b&gt;&lt;span style=&quot;;font-size:85%;color:red;&quot;  &gt;Set-uma coleção que não pode conter elementos duplicados. Este modelo de interface a abstração matemática definida são usados para representar conjuntos, tais como as cartas que compreendem uma mão de poker, os cursos que compõem a grade de um aluno, ou os processos em execução em uma máquina&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;&lt;/ul&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhifaIYbLRQPG3PujgtHPBbO0munp90lAg9RBRZZ9v-NtCpNjHjkxEIOrKPVGq69XR0ScywFm0gHYBIhGGJQC1bmh7LxONNhJVLNpj6p1by2LBRIpXQPm9KmAg515dAUuJlQkERHF5wGDQ/s1600-h/collection_ListaEncadeada.jpg&quot;&gt;&lt;img style=&quot;margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 140px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhifaIYbLRQPG3PujgtHPBbO0munp90lAg9RBRZZ9v-NtCpNjHjkxEIOrKPVGq69XR0ScywFm0gHYBIhGGJQC1bmh7LxONNhJVLNpj6p1by2LBRIpXQPm9KmAg515dAUuJlQkERHF5wGDQ/s400/collection_ListaEncadeada.jpg&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5445412129471354754&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;&lt;b&gt;&lt;span style=&quot;;font-size:85%;color:red;&quot;  &gt;List-uma coleção ordenada (algumas vezes chamado de seqüência). As listas podem conter elementos duplicados. O usuário de uma lista geral, tem um controle preciso sobre onde cada elemento é inserido na lista e pode acessar elementos pelo seu índice inteiro (posição). Se você já usou Vector, você está familiarizado com o sabor das listas em geral.&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;&lt;/ul&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgnZm4HsD9lAb7Jy3lUasj2_kQ03zLLDUQKLnrMAKgY7J0nzW8jdCmKxIWnYSobQ2NZVBQDzncJInzyJUYRb4yO2bmIEQlQu7h3Cuth-A-kr9edRvnLltBvOq2bxX1JfKQTvXKu2zsf4co/s1600-h/collection_fila.jpg&quot;&gt;&lt;img style=&quot;margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 183px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgnZm4HsD9lAb7Jy3lUasj2_kQ03zLLDUQKLnrMAKgY7J0nzW8jdCmKxIWnYSobQ2NZVBQDzncJInzyJUYRb4yO2bmIEQlQu7h3Cuth-A-kr9edRvnLltBvOq2bxX1JfKQTvXKu2zsf4co/s400/collection_fila.jpg&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5445412927403191218&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;&lt;b&gt;&lt;span style=&quot;;font-size:85%;color:red;&quot;  &gt;Queue-uma coleção usada para armazenar vários elementos, antes de serem processados, por exemplo. Além de operações básicas de Collection, uma fila provê operações especiais de uma fila como a inserção, extração e inspeção. As filas normalmente, mas não necessariamente, guardam seus elementos atraves da politica FIFO (first-in, first-out) As exceções são as filas de prioridade, onde os elementos sao ordenados de acordo com um comparador fornecido, ou sua &quot;ordenação natural. Qualquer que seja a ordenação utilizada, o primeiro de fila é o elemento que ira ser removido por uma chamada paos metodos remove ou poll. Em uma fila FIFO, todos os novos elementos são inseridos na cauda da fila. Outros tipos de filas podem usar regras de posicionamento diferentes. Cada implementação da fila deve especificar as suas propriedades de ordenação.&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;&lt;/ul&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiHW4F3wu08h7QEy6GcrLg6ijTunlxpinfqDcsJt_hmU7FSORnSh5SO6GOcbKWQWUzFN5nppT30hqadzQQaTzR5qzzE5a_LkIX3_kEVbDIRkl7WP1KVxmE_E601-f2aVH-uKY4Bei6O-3g/s1600-h/collection_mapa-do-brasil-2.gif&quot;&gt;&lt;img style=&quot;margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 358px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiHW4F3wu08h7QEy6GcrLg6ijTunlxpinfqDcsJt_hmU7FSORnSh5SO6GOcbKWQWUzFN5nppT30hqadzQQaTzR5qzzE5a_LkIX3_kEVbDIRkl7WP1KVxmE_E601-f2aVH-uKY4Bei6O-3g/s400/collection_mapa-do-brasil-2.gif&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5445413307586014834&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;&lt;span style=&quot;;font-size:85%;color:red;&quot;  &gt;Map-um objeto que mapeia chaves para valores. Um mapa não pode conter chaves duplicadas: cada chave pode mapear para, no máximo, um valor. Se você já usou Hashtable, você já está familiarizado com os princípios de um Mapa&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;&lt;/ul&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(255, 102, 0);font-size:130%;&quot; &gt;&lt;/span&gt;&lt;/b&gt;&lt;div style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size:180%;&quot;&gt;&lt;b  style=&quot;font-family:verdana;&quot;&gt;&lt;span style=&quot;color: rgb(255, 102, 0);&quot;&gt;&lt;i&gt;&lt;br /&gt;Implementações&lt;/i&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjA-xsVTU2UqhztZ-sYXiqUkXVk2eXy8qxJLfRafNjzF5nzzXUh5F6GUoyQ11w1SpErAdfb52hMYevteld-Lt3F5jp2cuaE0Sl_rDVNQxOuPowSZXsoCQvMkgFf0m0TTkN1nv8xQUQJr1A/s1600-h/collections_implementations_ferrari-f1-engine1.jpg&quot;&gt;&lt;img style=&quot;margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 293px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjA-xsVTU2UqhztZ-sYXiqUkXVk2eXy8qxJLfRafNjzF5nzzXUh5F6GUoyQ11w1SpErAdfb52hMYevteld-Lt3F5jp2cuaE0Sl_rDVNQxOuPowSZXsoCQvMkgFf0m0TTkN1nv8xQUQJr1A/s400/collections_implementations_ferrari-f1-engine1.jpg&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5445405644908557778&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;b&gt;&lt;span style=&quot;;font-size:85%;color:green;&quot;  &gt;Existem três implementações de Set com proposito geral- HashSet, TreeSet, e LinkedHashSet. Para as três , a utilização é geralmente simples. HashSet é muito mais rápido do que TreeSet (constante de tempo em função de log-tempo para a maioria das operações), mas não oferece garantias de ordenação. Se você precisa usar as operações na interface SortedSet, ou se a ordenação dos elementos é necessária, use TreeSet caso contrário use HashSet . É uma aposta justa que você vai acabar usando HashSet na maior parte do tempo.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Existem duas implementações com finalidades gerais de List - ArrayList e LinkedList. Na maioria das vezes, você provavelmente vai usar ArrayList, que oferece tempo constante de acesso e de posicionamento sendo simplesmente rápido. Ele não tem que alocar um objeto nó para cada elemento da lista, e pode tirar vantagem de System.arraycopy quando tem que movimentar vários elementos ao mesmo tempo. Pense em ArrayList como um vetor sem a sobrecarga de sincronização.&lt;br /&gt;&lt;br /&gt;Se você freqüentemente adiciona elementos no início da lista ou itera na lista para eliminar os elementos do seu interior, você deve considerar usar LinkedList. Essas operações exigem tempo constante em um LinkedList e tempo linear em um ArrayList. Mas você paga um preço grande no desempenho. Acesso posicional requer tempo linear em uma LinkedList e constante em um ArrayList. Além disso, o fator constante para LinkedList é muito pior. Se você acha que quer usar uma LinkedList, meça o desempenho de seu aplicativo tanto com LinkedList como com ArrayList antes de fazer sua escolha; ArrayList é geralmente bem mais rápido.&lt;br /&gt;&lt;br /&gt;As implementações de finalidade geral de Map são HashMap, TreeMap e LinkedHashMap. Se você precisa de operações como as de SortedMap ou necessita de uma iteração Collection-view, utilize TreeMap , se você quiser velocidade máxima e não se preocupa com a ordem de iteração, HashMap é a sua escolha, se você quiser um desempenho próximo de HashMap e inserção-iteração com ordem, LinkedHashMap sera a escolha.&lt;br /&gt;&lt;br /&gt;LinkedHashMap fornece duas capacidades que não estão disponíveis em um LinkedHashSet. Quando você cria um LinkedHashMap, você pode requisitá-lo com base na chave de acesso ao invés de inserção. Em outras palavras, apenas olhando para o valor associado com uma chave que traz a chave para o final do mapa. Além disso, LinkedHashMap fornece o método removeEldestEntry, que pode ser substituído para impor uma política de remoção de mapeamentos obsoletos automaticamente quando novos mapeamentos são adicionados ao mapa. Isto torna muito fácil de implementar um cache personalizado.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;LinkedList implementa a interface Queue, fornecendo um fila FIFO com operações para adicionar, remover da fila e assim por diante.&lt;br /&gt;&lt;br /&gt;A classe PriorityQueue é uma fila de prioridades com base na estrutura de dados Heap. Essa fila de elementos é ordenada de acordo com uma ordem especificada no momento da construção, que podem ser os elementos &quot;naturais ordenação ou a ordem imposta por um comparador explícito.&lt;br /&gt;&lt;br /&gt;Na fila existemas seguintes de operações de recuperação - poll, remove, peek, e element - para acessar o elemento na frente da fila. A cabeça da fila é o menor elemento que diz respeito à ordenação especificada. Se vários elementos estão ligados pelo valor, a cabeça é um desses elementos, os empates são resolvidos de forma arbitrária.&lt;br /&gt;&lt;br /&gt;PriorityQueue e seu iterador implementam todos os métodos opcionais da coleção e Iterator interfaces. O iterador previsto no iterador método não é garantido para percorrer os elementos da PriorityQueue em qualquer ordem particular. Se você precisa de condenação na iteração, considere o uso Arrays.sort (pq.toArray ()).&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;;font-size:100%;color:red;&quot;  &gt;&lt;br /&gt;&lt;i&gt;O framework Collections do Java é um tema simples, porem extenso e existem ainda muito mais informações que eu gostaria de compartilhar , por isso não percam os proximos posts, mostrando como funcionam os algoritmos de ordenação, shuffle, e uma serie de algoritmos muito uteis para se trabalhar com coleções, alem de particularidades da API e como usar coleções concorrentes ou thread-safe e criaremos uma coleção Wrapper para uma matriz quadrada com operações basicas de algebra linear, como exemplo.Outro tema muito abordado em conjunto é Generics(Genericos) ao qual falarei tambem em uma outra oportunidade.&lt;/i&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;;font-size:100%;color:red;&quot;  &gt;&lt;b&gt;Referencias&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;&lt;b&gt;&lt;a href=&quot;http://java.sun.com/docs/books/tutorial/collections/index.html&quot;&gt;Seção sobre Collections escrito pelo mestre Joshua Bloch , no tutorial oficial da SUN&lt;/a&gt;&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;&lt;b&gt;&lt;a href=&quot;http://java.sun.com/docs/books/tutorial/extra/generics/index.html&quot;&gt;Seção sobre Generics, escrita por Gilad Bracha, no tutorial oficial da SUN&lt;/a&gt;&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;&lt;b&gt;&lt;a href=&quot;http://www.caelum.com.br/curso/cs-14-algoritmos-estruturas-dados-java/&quot;&gt;Ótima apostila do pessoal da Caelum sobre estrutura de dados e framework Collection&lt;/a&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;</content><link rel='replies' type='application/atom+xml' href='http://amsterdaintelligence.blogspot.com/feeds/997101905598066004/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://amsterdaintelligence.blogspot.com/2009/11/framework-collections-do-java-colecoes.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7308500728033786786/posts/default/997101905598066004'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7308500728033786786/posts/default/997101905598066004'/><link rel='alternate' type='text/html' href='http://amsterdaintelligence.blogspot.com/2009/11/framework-collections-do-java-colecoes.html' title='Framework Collections do Java ==Coleções ou Estruturas de Dados Reutilizaveis --Parte 1'/><author><name>@williamgouvea</name><uri>http://www.blogger.com/profile/16737800888418990640</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiXgCyNKh33yvHTbk83E03NP-2_VEgR6dAblD4Daus1Z6NoufJ-_ovu0KdlMO4KlMwqlDiHfgVPefrqERTjJ-nkKZP7_S41tqN6sQ9-suaiqjp622XDcN72QNXCLNB5SCg/s220/trabalho.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi5k4Fgs-NB60JmZCYl8QI-cYtkc2BRldGuEacmsJ83cjqdYeVWUF6soi-PXcEXsxDR-TxuluOMxhb6fSmaIziOc_54_b_ZSlWO5BxmNFRRnJm8HkjSJQuCRnEZsxELaZRLxD6CKDXRkIg/s72-c/collection_bola_de_gude_renter.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7308500728033786786.post-5903356264895662918</id><published>2009-11-21T01:51:00.001-08:00</published><updated>2009-11-21T01:51:42.423-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="java exception"/><title type='text'>Não generalize, pois existem muitas exceções a regra!</title><content type='html'>&lt;p style=&quot;text-align: left;&quot;&gt;&lt;a class=&quot;noborder&quot; href=&quot;http://api.ning.com/files/Vk7Wysf3vNXrAjO2K7saeIOJQ-GHMYNHAamc3vPjLDjuetaRyXvi3cG4MhhgShKYiK*CvWqKZ20xr2qcZ1xkMfe5CBbnDGsN/paraquedas_acidente_excecao.jpg&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://api.ning.com/files/Vk7Wysf3vNXrAjO2K7saeIOJQ-GHMYNHAamc3vPjLDjuetaRyXvi3cG4MhhgShKYiK*CvWqKZ20xr2qcZ1xkMfe5CBbnDGsN/paraquedas_acidente_excecao.jpg&quot; alt=&quot;&quot; width=&quot;356&quot; height=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;&lt;span style=&quot;font-size:130%;color:red;&quot;&gt;&lt;br /&gt;&lt;b&gt;&lt;i&gt;&quot;Uma exceção é um evento, que ocorre durante a execução de um programa, que interrompe o fluxo normal das instruções do programa.&quot;&lt;/i&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-size:100%;color:green;&quot;&gt;&lt;b&gt;Quando um erro ocorre dentro de um método, o método cria um objeto e manda-opara o sistema de execução(Runtime). O objeto, chamado de um objeto de exceção(Exception), contém informações sobre o erro, incluindo seu tipo e o estado do programa quando ocorreu o erro(StackTrace). Criando um objeto de exceção e entregá-lo para o sistema de execução é chamado de lançar(throw) uma exceção.&lt;br /&gt;&lt;br /&gt;Depois de um método gerar uma exceção, o sistema de execução tenta achar alguem para lidar com a exceção. O conjunto de possíveis &quot;algumas coisas&quot; para tratar a exceção é a lista ordenada de métodos que tinha sido chamado para chegar ao método onde ocorreu o erro. A lista de métodos é conhecido como a pilha de chamadas (ver figura seguinte).&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;img src=&quot;http://api.ning.com/files/Vk7Wysf3vNVByXtbsLrilOvd641XNrn56H5LGxjP*yC7Doslnwrk6ubEodW72P7H-uRZpIiZx48IT-Pus77lV2DiPUzql2zX/exceptionscallstack.gif&quot; alt=&quot;&quot; width=&quot;218&quot; height=&quot;245&quot; /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-size:100%;color:green;&quot;&gt;&lt;b&gt;O sistema de tempo de execução procura a pilha de chamadas para um método que contém um bloco de código que pode manipular a exceção. Este bloco de código é chamado um manipulador de exceção. A busca começa com o método em que ocorreu o erro e continua através da pilha de chamadas na ordem inversa em que os métodos foram chamados. Quando um manipulador apropriado seja encontrado, o sistema de execução passa a exceção para o manipulador. Um manipulador de exceção é considerado adequado se o tipo do objeto de exceção acionada coincide com o tipo que pode ser tratada pelo manipulador.&lt;br /&gt;&lt;br /&gt;O manipulador de exceção escolhido é dito para capturar a exceção. Se o sistema de execução de forma exaustiva procura um manipulador para exceção na pilha de chamadas, sem encontrar um manipulador de exceção apropriado, como mostrado na figura ao lado, o sistema de execução (e, conseqüentemente, o programa) é encerrado(A thread principal no programa, que roda o main, morre, pois nao &quot;abriu o paraquedas&quot;!).&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-size:100%;color:green;&quot;&gt;&lt;b&gt;Basicamente existem 3 tipos de exceções que podem ocorrer na JVM:&lt;br /&gt;&lt;br /&gt;O primeiro tipo de exceção é a exceção verificada(checked). Estas são as condições excepcionais que uma aplicação bem escrita deve antecipar e recuperar. Por exemplo, suponha que um aplicativo solicita a um usuário para escrever um nome de arquivo de entrada, em seguida, abre o arquivo, passando o nome para o construtor para java.io.FileReader. Normalmente, o usuário fornece o nome de um arquivo, de forma legível, para a construção do objeto FileReader bem-sucedido, e para a execução do aplicativo continua normalmente. Mas às vezes o usuário fornece o nome de um arquivo inexistente, e o construtor lança(throws) um objeto java.io.FileNotFoundException. Um programa bem escrito vai pegar essa exceção e notificar o usuário do erro, possivelmente levando a um nome de arquivo corrigido.&lt;br /&gt;&lt;br /&gt;O segundo tipo de exceção é o erro(error). Estas são as condições excepcionais que são externas ao aplicativo, e que a aplicação normalmente, a qual o programa não pode se antecipar ou se recuperar. Por exemplo, suponha que uma aplicação com êxito abre um arquivo para a entrada, mas é incapaz de ler o arquivo por causa de um hardware ou mau funcionamento do sistema. A leitura mal feita jogará java.io.IOError. Um aplicativo pode optar por pegar essa exceção, a fim de notificar o usuário do problema - mas também pode fazer sentido para o programa para imprimir um rastreamento de pilha e sair,sendo sempre bo pratica a segunda opção.&lt;br /&gt;&lt;br /&gt;Os erros não estão sujeitos à requerimentos do tipo &quot;pegar ou especificar&quot;. Os erros são as exceções indicadas pelo erro e suas subclasses.&lt;br /&gt;&lt;br /&gt;O terceiro tipo de exceção é a exceção de runtime. Estas são as condições excepcionais que são internas à aplicação, e que a aplicação normalmente, não pode antecipar ou recuperar. Estes geralmente indicam erros de programação, como erros de lógica ou de utilização indevida de uma API. Por exemplo, considere a aplicação descrita anteriormente que passa um nome de arquivo para o construtor para FileReader. Se um erro de lógica faz com que um nulo para ser passado para o construtor, o construtor irá lançar NullPointerException. O aplicativo pode pegar essa exceção, mas provavelmente faz mais sentido para eliminar o erro que causou a exceção para ocorrer.&lt;br /&gt;&lt;br /&gt;Exceções de runtime tambem não estão sujeitos à requerimentos do tipo &quot;pegar ou especificar&quot;.&lt;br /&gt;&lt;br /&gt;Exceções de runtime são as indicadas pela classe RuntimeException e suas subclasses.&lt;br /&gt;&lt;br /&gt;Erros e exceções de runtime são conhecidas coletivamente como exceções nao checadas(unchecked).&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-size:100%;color:black;&quot;&gt;&lt;br /&gt;&lt;b&gt;&lt;i&gt;//Note: Essa classe nao compila por design!&lt;br /&gt;//O codigo abaixo mostra diversas má praticas de design&lt;br /&gt;//,porem tem carater meramente didático para o tema do post&lt;br /&gt;import java.io.*;&lt;br /&gt;import java.util.Vector;&lt;br /&gt;&lt;br /&gt;public class ListOfNumbers {&lt;br /&gt;&lt;br /&gt;private Vector vector;&lt;br /&gt;private static final int SIZE = 10;&lt;br /&gt;&lt;br /&gt;public ListOfNumbers () {&lt;br /&gt;vector = new Vector(SIZE);&lt;br /&gt;for (int i = 0; i &amp;lt; SIZE; i++) {&lt;br /&gt;vector.addElement(new Integer(i));&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public void writeList() {&lt;br /&gt;PrintWriter out = new PrintWriter(&lt;br /&gt;new FileWriter(&quot;OutFile.txt&quot;));&lt;br /&gt;&lt;br /&gt;for (int i = 0; i &amp;lt; SIZE; i++) {&lt;br /&gt;out.println(&quot;Value at: &quot; + i + &quot; = &quot; +&lt;br /&gt;vector.elementAt(i));&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;out.close();&lt;br /&gt;}&lt;br /&gt;}&lt;/i&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-size:100%;color:green;&quot;&gt;&lt;b&gt;O construtor inicializa um fluxo de saída em um arquivo. Se o arquivo não pode ser aberto, o construtor lança uma IOException. Aposisso, uma chamada ao método elementAt a classe Vector, que gera uma ArrayIndexOutOfBoundsException se o valor de seu argumento é muito pequeno (inferior a 0) ou muito grande (mais do que o número de elementos contidos no momento por vetores).&lt;br /&gt;&lt;br /&gt;Se você tentar compilar a classe ListOfNumbers, o compilador imprime uma mensagem de erro sobre a exceção lançada pelo construtor FileWriter. No entanto, ele não exibir uma mensagem de erro sobre a exceção lançada pelo elementAt. A razão é que a exceção lançada pelo construtor, IOException, é uma exceção verificada(checked), e a acionada pelo método elementAt, ArrayIndexOutOfBoundsException, é uma exceção desmarcada(unchecked).&lt;br /&gt;&lt;br /&gt;Agora que você está familiarizado com a classe ListOfNumbers e onde as exceções podem ser geradas dentro dela, você está pronto para escrever manipuladores de exceção para capturar e manipular as exceções.&lt;br /&gt;&lt;br /&gt;Para construir um manipulador de exceção para o método da classe writeList ListOfNumbers, coloque o codigo que pod elançar uma exceção ,do método writeList dentro de um bloco try. Há mais do que uma maneira de fazer isso. Você pode colocar cada linha de código que pode lançar uma exceção dentro do seu próprio bloco try e fornecer manipuladores de exceção em separado para cada um. Ou, você pode colocar todo o código writeList dentro de um bloco único e tentar associar vários manipuladores com ele. A listagem a seguir usa um bloco try do método, pois todo o código em questão é muito curto.&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-size:100%;color:black;&quot;&gt;&lt;i&gt;&lt;b&gt;//...codigo omitido&lt;br /&gt;private Vector vector;&lt;br /&gt;private static final int SIZE = 10;&lt;br /&gt;&lt;br /&gt;PrintWriter out = null;&lt;br /&gt;&lt;br /&gt;try {&lt;br /&gt;System.out.println(&quot;Entered try statement&quot;);&lt;br /&gt;out = new PrintWriter(new FileWriter(&quot;OutFile.txt&quot;));&lt;br /&gt;for (int i = 0; i &amp;lt; SIZE; i++) {&lt;br /&gt;out.println(&quot;Value at: &quot; + i + &quot; = &quot;&lt;br /&gt;+ vector.elementAt(i));&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;// catch e finally&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-size:100%;color:green;&quot;&gt;&lt;b&gt;Se ocorrer uma exceção dentro do bloco try, essa exceção é tratado por um manipulador de exceção a ela associados. Para associar um manipulador de exceção com um bloco try, você deve colocar um bloco catch depois do bloco try.&lt;/b&gt;&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-size:100%;color:black;&quot;&gt;&lt;b&gt;&lt;i&gt;&lt;br /&gt;try {&lt;br /&gt;&lt;br /&gt;} catch (ExceptionType name) {&lt;br /&gt;&lt;br /&gt;} catch (ExceptionType name) {&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/i&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-size:100%;color:green;&quot;&gt;&lt;b&gt;Cada bloco catch é um manipulador de exceção e manipula o tipo de exceção indicada pelo seu argumento. O tipo de argumento, ExceptionType, declara o tipo de exceção que o manipulador pode manipular e deve ser o nome de uma classe que herda da classe Throwable. O manipulador pode referir-se a exceção com o nome.&lt;br /&gt;&lt;br /&gt;O bloco catch contém código que é executado, se e quando o manipulador de exceção é invocado. O sistema de execução chama o manipulador de exceção quando o manipulador é o primeiro na pilha de chamadas cuja ExceptionType corresponde ao tipo da exceção lançada. O sistema considera que é um jogo jogado, se o objeto pode ser legalmente atribuído ao argumento do manipulador de exceção.&lt;br /&gt;&lt;br /&gt;Seguem dois manipuladores de exceção para o método writeList - um para dois tipos de exceções verificadas que podem ser jogadas dentro da declaração try.&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-size:100%;color:black;&quot;&gt;&lt;b&gt;&lt;i&gt;&lt;br /&gt;try {&lt;br /&gt;&lt;br /&gt;} catch (FileNotFoundException e) {&lt;br /&gt;System.err.println(&quot;FileNotFoundException: &quot;&lt;br /&gt;+ e.getMessage());&lt;br /&gt;throw new SampleException(e);&lt;br /&gt;&lt;br /&gt;} catch (IOException e) {&lt;br /&gt;System.err.println(&quot;Caught IOException: &quot;&lt;br /&gt;+ e.getMessage());&lt;br /&gt;}&lt;br /&gt;&lt;/i&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-size:100%;color:green;&quot;&gt;&lt;b&gt;&lt;br /&gt;Ambos os manipuladores imprimem uma mensagem de erro. O segundo manipulador faz mais nada. Pela captura de qualquer IOException que não é capturada pelo primeiro manipulador , ele permite que o programa continue executando.&lt;br /&gt;O primeiro manipulador, além de imprimir uma mensagem, gera uma exceção definida pelo usuário. Neste exemplo, quando o FileNotFoundException é pego, ele cria uma exceção definida pelo usuário chamado SampleException para ser acionada. Você pode querer fazer isso se você quiser que o seu programa possa tratar uma exceção desta situação de uma maneira específica.&lt;br /&gt;&lt;br /&gt;Manipuladores de exceção podem fazer mais do que apenas imprimir mensagens de erro ou parar o programa. Eles podem fazer a recuperação de erro, solicitar que o usuário tome uma decisão, ou propagar o erro até um manipulador de nível superior com exceções em cadeia.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Um bloco finally sempre é executado quando um bloco try ou catch retorna. Isso garante que o bloco finally será executado mesmo se ocorrer uma exceção inesperada. Mas, finalmente, é útil para mais do que apenas a manipulação de exceção - que permite o programador para evitar que um código de limpeza de recursos acidentalmente seja contornado por um return, continue, ou break. Colocar código de limpeza em um bloco finally é sempre uma boa prática, mesmo quando não há exceções são previstas.&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-size:100%;color:red;&quot;&gt;&lt;b&gt;Importante:&lt;/b&gt;&lt;/span&gt; &lt;span style=&quot;font-size:100%;color:green;&quot;&gt;&lt;b&gt;O bloco finally é um instrumento fundamental para a prevenção de vazamentos de recursos. Ao fechar um arquivo ou recuperação de recursos, colocar o código em um bloco finally para garante que o recurso é sempre recuperado.&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-size:100%;color:black;&quot;&gt;&lt;b&gt;&lt;i&gt;&lt;br /&gt;//metodo completo apos o refactoring para inserir tratamento de exceções!&lt;br /&gt;&lt;br /&gt;public void writeList() {&lt;br /&gt;PrintWriter out = null;&lt;br /&gt;&lt;br /&gt;try {&lt;br /&gt;System.out.println(&quot;Entering try statement&quot;);&lt;br /&gt;out = new PrintWriter(&lt;br /&gt;new FileWriter(&quot;OutFile.txt&quot;));&lt;br /&gt;for (int i = 0; i &amp;lt; SIZE; i++)&lt;br /&gt;out.println(&quot;Value at: &quot; + i + &quot; = &quot;&lt;br /&gt;+ vector.elementAt(i));&lt;br /&gt;&lt;br /&gt;} catch (ArrayIndexOutOfBoundsException e) {&lt;br /&gt;System.err.println(&quot;Caught &quot;&lt;br /&gt;+ &quot;ArrayIndexOutOfBoundsException: &quot;&lt;br /&gt;+ e.getMessage());&lt;br /&gt;&lt;br /&gt;} catch (IOException e) {&lt;br /&gt;System.err.println(&quot;Caught IOException: &quot;&lt;br /&gt;+ e.getMessage());&lt;br /&gt;&lt;br /&gt;} finally {&lt;br /&gt;if (out != null) {&lt;br /&gt;System.out.println(&quot;Closing PrintWriter&quot;);&lt;br /&gt;out.close();&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;else {&lt;br /&gt;System.out.println(&quot;PrintWriter not open&quot;);&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;/i&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-size:130%;color:red;&quot;&gt;&lt;b&gt;Referências&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;a href=&quot;http://java.sun.com/docs/books/tutorial/essential/exceptions/index.html&quot;&gt;Tutorial Oficial da Sun sobre Java, capitulo Exceptions&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-size:130%;color:red;&quot;&gt;&lt;b&gt;Artigos&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;a href=&quot;http://java.sun.com/docs/books/tutorial/essential/exceptions/throwing.html&quot;&gt;Como lançar suas próprias exceções&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://java.sun.com/docs/books/tutorial/essential/exceptions/runtime.html&quot;&gt;Exceções de runtime, A Controversia&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-size:100%;color:green;&quot;&gt;&lt;b&gt;&lt;br /&gt;Espero ter ajudado com este post!&lt;br /&gt;Obrigado pelo seu tempo!&lt;br /&gt;Participem do OSUM, sua participação é o mais importante!&lt;/b&gt;&lt;/span&gt;</content><link rel='replies' type='application/atom+xml' href='http://amsterdaintelligence.blogspot.com/feeds/5903356264895662918/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://amsterdaintelligence.blogspot.com/2009/11/nao-generalize-pois-existem-muitas.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7308500728033786786/posts/default/5903356264895662918'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7308500728033786786/posts/default/5903356264895662918'/><link rel='alternate' type='text/html' href='http://amsterdaintelligence.blogspot.com/2009/11/nao-generalize-pois-existem-muitas.html' title='Não generalize, pois existem muitas exceções a regra!'/><author><name>@williamgouvea</name><uri>http://www.blogger.com/profile/16737800888418990640</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiXgCyNKh33yvHTbk83E03NP-2_VEgR6dAblD4Daus1Z6NoufJ-_ovu0KdlMO4KlMwqlDiHfgVPefrqERTjJ-nkKZP7_S41tqN6sQ9-suaiqjp622XDcN72QNXCLNB5SCg/s220/trabalho.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7308500728033786786.post-4242948194149149592</id><published>2009-11-21T01:47:00.001-08:00</published><updated>2009-11-21T01:47:57.147-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="jython jsr223 jvm scriptlanguages"/><title type='text'>Jython</title><content type='html'>&lt;p style=&quot;text-align: center;&quot;&gt;&lt;img src=&quot;http://api.ning.com/files/JAEDnEplAm-fpLyXnmvgwgujj1pY3UnclZcpkm-CUHfByQ4VWUz5gO85w7CRDEZlDe18Pa7Nupfe*eVX-IGc4tih3M5dLhev/whatsisjython.jpg&quot; alt=&quot;&quot; width=&quot;530&quot; height=&quot;150&quot; /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style=&quot;font-size:85%;color:green;&quot;&gt;Jython é uma implementação do alto nível, dinâmica, orientada a objetos da linguagem Python perfeitamente integrada com a plataforma Java. O antecessor de Jython, JPython, é certificada como 100% puro Java. Jython está disponível livremente tanto para fins comerciais e não-comerciais e é distribuído com código fonte. Jython é complementar ao Java e é especialmente indicado para as seguintes tarefas:&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;&lt;b&gt;&lt;span style=&quot;font-size:85%;color:#FF6600;&quot;&gt;Scripts integrados - programadores Java podem adicionar as bibliotecas do Jython ao seu sistema para permitir que os usuários finais possam escrever scripts simples ou complicados que adicionem funcionalidade ao aplicativo.&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;b&gt;&lt;span style=&quot;font-size:85%;color:#FF6600;&quot;&gt;Experimentação Interactive - Jython fornece um interpretador interativo que pode ser usado para interagir com os pacotes Java ou com o funcionamento de aplicações Java. Isso permite que os programadores para experimentar e depurar qualquer sistema Java usando Jython.&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;b&gt;&lt;span style=&quot;font-size:85%;color:#FF6600;&quot;&gt;Desenvolvimento rápido de aplicações - programas em Python são tipicamente 2-10X menor que o programa em Java equivalente. Isto traduz-se diretamente ao aumento da produtividade do programador. A interação contínua entre Python e Java permite aos desenvolvedores livremente misturar as duas línguas, tanto durante o desenvolvimento e no transporte de produtos.&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style=&quot;font-size:85%;color:green;&quot;&gt;Em 2008 a SUN contratou os 2 desenvolvedores principais do projeto Jython, Ted Leung e Frank Wierzbicki para tornar o Jython uma escolha segura, potente e facil do Python para JVM.&lt;br /&gt;&lt;br /&gt;Com isso a SUN reconheceu o poder e difusão da linguagem, ja usada por milhares de desenvolvedores no contexto Linux e web.No repositorio padrao do OpenSolaris ja encontramos o Python 2.2.4, e no Netbeans ja existe a integração com o Python, sendo um projeto futuro, transformar o Netbeans na IDE perfeita para a dobradinha Jython/Django assim como os sucessos de JRuby/Rails e Groovy/Grails, com a mesma eficiencia e pragmatismo.&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://developers.sun.com/scripting/techart/python_qa.html&quot;&gt;Confira a entrevista para o developers.sun de Ted Leung e Frank Wierbicki&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Existem inúmeras linguagens alternativas implementadas para a Java VM. Os recursos a seguir ajudam o Jython a ser separado do resto:&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;&lt;b&gt;&lt;span style=&quot;font-size:85%;color:#FF6600;&quot;&gt;A compilação dinâmica de bytecodes Java - leva a melhor performance possível, sem sacrificar a interatividade.&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;b&gt;&lt;span style=&quot;font-size:85%;color:#FF6600;&quot;&gt;Capacidade de estender as classes Java existentes em Jython - permite o uso eficaz de classes abstratas.&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;b&gt;&lt;span style=&quot;font-size:85%;color:#FF6600;&quot;&gt;Opcional compilação estática - permite a criação de applets, servlets, beans,midlets,...&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;b&gt;&lt;span style=&quot;font-size:85%;color:#FF6600;&quot;&gt;Bean Propriedades - fazer uso de pacotes Java facilmente.&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;b&gt;&lt;span style=&quot;font-size:85%;color:#FF6600;&quot;&gt;Linguagem Python - combina poder notável com uma sintaxe muito clara. Ele também suporta um completo modelo de programação orientada a objetos o que o torna um ajuste natural para o projeto de Java OO, tornando aplicações Java mais poderosas em determinada situação.&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;hr/&gt;&lt;b&gt;&lt;i&gt;&lt;span style=&quot;font-size:100%;color:red;&quot;&gt;&lt;br /&gt;Para participar ativamente da comunidade, nas palavras de Ted Leung e Frank Wierzbicki , desenvolvedores Jython na SUN:&lt;br /&gt;&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;&lt;b&gt;&lt;i&gt;&lt;span style=&quot;font-size:100%;color:#FF6600;&quot;&gt;Join the Jython project. I&#39;m looking for folks who would be serious about contributing to a community-driven Python support module for NetBeans.&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;b&gt;&lt;i&gt;&lt;span style=&quot;font-size:100%;color:#FF6600;&quot;&gt;Join any of the other great Python projects, like Django, TurboGears, Twisted, pyglet, and so on.&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;b&gt;&lt;i&gt;&lt;span style=&quot;font-size:100%;color:#FF6600;&quot;&gt;Send Frank or me an email with your comments and suggestions. We&#39;ll probably set up something a bit more formal, but for now, our inboxes will do.&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;hr/&gt;&lt;b&gt;&lt;span style=&quot;font-size:100%;color:#FF6600;&quot;&gt;Alguns Links Interessantes:&lt;br /&gt;&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;i&gt;&lt;span style=&quot;font-size:85%;color:green;&quot;&gt;&lt;br /&gt;&lt;a href=&quot;http://developers.sun.com/learning/javaoneonline/j1sessn.jsp?sessn=TS-5548&amp;amp;yr=2008&amp;amp;track=tools&quot;&gt;Slide do JavaOne 2008 com os riadores do projeto dando dicas&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://www.djangoproject.com/&quot;&gt;Framework Web Agil similar ao Rails,usado por diversos sistemas como New York Times e sites da Google&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://www.diveintopython.org/&quot;&gt;Livro Dive in to Python, uma introdução basica sobre a linguagem&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://wiki.netbeans.org/Python&quot;&gt;Python no Netbeans IDE&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://www.jython.org/&quot;&gt;Site do projeto Jython&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://osum.sun.com/group/jython&quot;&gt;Grupo Jython OSUM&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style=&quot;font-size:85%;color:green;&quot;&gt;OBRIGADO PELO SEU TEMPO!&lt;/span&gt;&lt;/b&gt;</content><link rel='replies' type='application/atom+xml' href='http://amsterdaintelligence.blogspot.com/feeds/4242948194149149592/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://amsterdaintelligence.blogspot.com/2009/11/jython.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7308500728033786786/posts/default/4242948194149149592'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7308500728033786786/posts/default/4242948194149149592'/><link rel='alternate' type='text/html' href='http://amsterdaintelligence.blogspot.com/2009/11/jython.html' title='Jython'/><author><name>@williamgouvea</name><uri>http://www.blogger.com/profile/16737800888418990640</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiXgCyNKh33yvHTbk83E03NP-2_VEgR6dAblD4Daus1Z6NoufJ-_ovu0KdlMO4KlMwqlDiHfgVPefrqERTjJ-nkKZP7_S41tqN6sQ9-suaiqjp622XDcN72QNXCLNB5SCg/s220/trabalho.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7308500728033786786.post-6345714761442997524</id><published>2009-10-02T19:41:00.000-07:00</published><updated>2009-10-02T19:45:40.336-07:00</updated><title type='text'>Java vs Javascript</title><content type='html'>&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEie9XLUcTczrTKeVtqINAWpiutaA2GWsTQxChwI0xamrqDzS0XyVdWm-08cjhIJsPBIdUzu4sil9yxyLbDV4itW9U8ELnXPG1vUxNfSEbeVvWFaUOrCDkz6qCyFcLbPW1wcXeg3iCaBnGQ/s1600-h/rhino50.jpg&quot;&gt;&lt;img style=&quot;margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 398px; height: 200px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEie9XLUcTczrTKeVtqINAWpiutaA2GWsTQxChwI0xamrqDzS0XyVdWm-08cjhIJsPBIdUzu4sil9yxyLbDV4itW9U8ELnXPG1vUxNfSEbeVvWFaUOrCDkz6qCyFcLbPW1wcXeg3iCaBnGQ/s400/rhino50.jpg&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5388199357523796674&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style=&quot;;font-size:130%;color:red;&quot;  &gt;&lt;br /&gt;&lt;b&gt;JAVA&lt;/b&gt;&lt;br /&gt;&lt;/span&gt; &lt;span style=&quot;;font-size:100%;color:green;&quot;  &gt;&lt;br /&gt;&lt;b&gt;Em 1991, na Sun Microsystems, foi iniciado o Green Project, o berço do Java, uma linguagem de programação orientada a objetos. Os mentores do projeto eram Patrick Naughton, Mike Sheridan, e James Gosling. O objetivo do projeto não era a criação de uma nova linguagem de programação, mas antecipar e planejar a “próxima onda” do mundo digital. Eles acreditavam que, em algum tempo, haveria uma convergência dos computadores com os equipamentos e eletrodomésticos comumente usados pelas pessoas no seu dia-a-dia.A linguagem primeiramente se chamou &quot;Oak&quot;, porem em uma reuniao em uma cafeteria James Gosling resolveu chamar a linguagem de Java, onde em 1995 foi lançada oficialmente!&lt;br /&gt;&lt;br /&gt;Desde seu lançamento, em maio de 1995, a plataforma Java foi adotada mais rapidamente do que qualquer outra linguagem de programação na história da computação. Em 2004 Java atingiu a marca de 3 milhões de desenvolvedores em todo mundo[1]. Java continuou crescendo e hoje é uma referência no mercado de desenvolvimento de software. Java tornou-se popular pelo seu uso na Internet e hoje possui seu ambiente de execução presente em web browsers, mainframes, SOs, celulares, palmtops, cartões inteligentes etc.&lt;br /&gt;&lt;br /&gt;Programas Java não são traduzidos para a linguagem de máquina, como outras linguagens estaticamente compiladas e sim para uma representação intermediária, chamada de bytecodes.&lt;br /&gt;&lt;br /&gt;Principais Caracteristicas:&lt;/b&gt;&lt;br /&gt;&lt;span style=&quot;;font-size:100%;color:red;&quot;  &gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;&lt;span style=&quot;;font-size:100%;color:green;&quot;  &gt;&lt;span style=&quot;;font-size:100%;color:red;&quot;  &gt;Orientação a objeto - Baseado no modelo de Simula67&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;span style=&quot;;font-size:100%;color:green;&quot;  &gt;&lt;span style=&quot;;font-size:100%;color:red;&quot;  &gt;Portabilidade - Independência de plataforma - &quot;write once, run anywhere&quot;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;span style=&quot;;font-size:100%;color:green;&quot;  &gt;&lt;span style=&quot;;font-size:100%;color:red;&quot;  &gt;Segurança - Pode executar programas via rede com restrições de execução-Security Manager&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;span style=&quot;;font-size:100%;color:green;&quot;  &gt;&lt;span style=&quot;;font-size:100%;color:red;&quot;  &gt;Sintaxe similar a Linguagem C/C++ e principalmente, a C#&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;span style=&quot;;font-size:100%;color:green;&quot;  &gt;&lt;span style=&quot;;font-size:100%;color:red;&quot;  &gt;Desalocação de memória automática por processo de coletor de lixo (garbage collector-GC)&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;span style=&quot;;font-size:100%;color:green;&quot;  &gt;&lt;span style=&quot;;font-size:100%;color:red;&quot;  &gt;Compilador JIT(Just in Time) que aumenta a performance de execução dos bytecodes da JVM&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;;font-size:130%;color:red;&quot;  &gt;&lt;br /&gt;&lt;b&gt;JAVASCRIPT&lt;/b&gt;&lt;br /&gt;&lt;/span&gt; &lt;span style=&quot;;font-size:100%;color:green;&quot;  &gt;&lt;br /&gt;&lt;b&gt;JavaScript é uma linguagem de programação criada pela Netscape em 1995, que a princípio se chamava LiveScript, a Netscape após o sucesso inicial desta linguagem, recebe uma colaboração considerável da Sun, após esta colaboração, podemos dizer que o JavaScript é uma linguagem compatível com a linguagem Java, por esta razão, a semelhança dos nomes &quot;JavaScript&quot;.&lt;br /&gt;&lt;br /&gt;A linguagem foi criada para atender, principalmente, as seguintes necessidades:&lt;/b&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;;font-size:100%;color:red;&quot;  &gt;&lt;br /&gt;&lt;/span&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;&lt;span style=&quot;;font-size:100%;color:red;&quot;  &gt;Validação de formulários no lado cliente (programa navegador)&lt;/span&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;span style=&quot;;font-size:100%;color:red;&quot;  &gt;Interação com a página&lt;/span&gt;&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;span style=&quot;;font-size:100%;color:green;&quot;  &gt;&lt;br /&gt;&lt;b&gt;Assim, foi feita como uma linguagem de script. Javascript tem sintaxe semelhante à do Java, mas é totalmente diferente no conceito e no uso.&lt;br /&gt;&lt;br /&gt;De acordo com seu sistema de tipos JavaScript é:&lt;/b&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;;font-size:100%;color:red;&quot;  &gt;&lt;br /&gt;&lt;/span&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;&lt;span style=&quot;;font-size:100%;color:red;&quot;  &gt;fraca - sua tipagem é mutável&lt;/span&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;span style=&quot;;font-size:100%;color:red;&quot;  &gt;dinâmica - uma variável pode assumir vários tipos diferentes durante a execução&lt;/span&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;span style=&quot;;font-size:100%;color:red;&quot;  &gt;implícita - as variáveis são declaradas sem tipo&lt;/span&gt;&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;span style=&quot;;font-size:100%;color:green;&quot;  &gt;&lt;br /&gt;&lt;b&gt;1. É interpretada, ao invés de compilada;&lt;br /&gt;2. Possui ótimas ferramentas padrão para listagens (como as linguagens de script, de modo geral);&lt;br /&gt;3. Oferece bom suporte a expressões regulares (característica também comum a linguagens de script).&lt;br /&gt;&lt;br /&gt;Sua união com o CSS é conhecida como DHTML. Usando o Javascript, é possível modificar dinamicamente os estilos dos elementos da página em HTML.&lt;br /&gt;&lt;br /&gt;Nos dias de hoje o Javascript voltou a ganhar espaço devido ao AJAX (acrônimo em língua inglesa de Asynchronous Javascript And XML),que é o uso metodológico de tecnologias como Javascript e XML, providas por navegadores, para tornar páginas Web mais interativas com o usuário, utilizando-se de solicitações assíncronas de informações. AJAX não é somente um novo modelo, é também uma iniciativa na construção de aplicações Web mais dinâmicas e criativas. AJAX não é uma tecnologia — são realmente várias tecnologias conhecidas trabalhando juntas, cada uma fazendo sua parte, oferecendo novas funcionalidades. AJAX incorpora em seu modelo:&lt;/b&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;;font-size:100%;color:red;&quot;  &gt;&lt;br /&gt;&lt;/span&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;&lt;span style=&quot;;font-size:100%;color:red;&quot;  &gt;Apresentação baseada em padrões, usando XHTML e CSS&lt;/span&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;span style=&quot;;font-size:100%;color:red;&quot;  &gt;Exposição e interação dinâmica usando o DOM&lt;/span&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;span style=&quot;;font-size:100%;color:red;&quot;  &gt;Intercâmbio e manipulação de dados usando XML e XSLT&lt;/span&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;span style=&quot;;font-size:100%;color:red;&quot;  &gt;Recuperação assíncrona de dados usando o objeto XMLHttpRequest&lt;/span&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;span style=&quot;;font-size:100%;color:red;&quot;  &gt;JavaScript unindo todas elas em conjunto.&lt;/span&gt;&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;;font-size:100%;color:green;&quot;  &gt;&lt;br /&gt;&lt;b&gt;Portanto notamos que apesar do nome, as 2 linguagens sao muitíssimo diferentes em quase todos os aspectos, tendo cada uma sua área de dominio e aplicação.&lt;/b&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;;font-size:130%;color:red;&quot;  &gt;&lt;br /&gt;&lt;b&gt;O ELO PERDIDO&lt;/b&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;;font-size:100%;color:green;&quot;  &gt;&lt;br /&gt;&lt;b&gt;O Java 6 fornece suporte integrado da especificação JSR-223. Esta especificação oferece uma maneira conveniente e padrão de execução de linguagens de scripting na JVM e fornece acesso a recursos e classes Java a partir de scripts. Java 6 vem com um built-in de integração com o Mozilla Rhino, motor de JavaScript usado pelo Mozilla.&lt;br /&gt;&lt;br /&gt;As especificações JSR 223 são convenientes e fáceis de usar. Para trabalhar com scripts, você só precisa saber um par de classes fundamentais. A principal delas é a classe ScriptEngine, que lida com roteiro de interpretação e avaliação. Para instanciar um motor de script, você usa a classe ScriptEngineManager para recuperar um objeto ScriptEngine para a linguagem de script que você está interessado ,e cada linguagem de script tem um nome. A Mozilla Rhino ECMAScript linguagem de scripting (vulgarmente conhecida como JavaScript) é identificada por &quot;js&quot;.&lt;/b&gt;&lt;br /&gt;&lt;/span&gt; &lt;span style=&quot;font-size:85%;&quot;&gt;&lt;br /&gt;&lt;b&gt;&lt;i&gt;&lt;br /&gt;//...codigo anterior omitido&lt;br /&gt;ScriptEngineManager manager= new ScriptEngineManager();&lt;br /&gt;ScriptEngine engine = manager.getEngineByName(&quot;js&quot;);&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;;font-size:100%;color:green;&quot;  &gt;&lt;b&gt;&lt;br /&gt;JavaScript incorporado pode ser usado para uma variedade de finalidades. Uma vez que é mais flexível e mais fácil de configurar do que Java Hard-Code, que muitas vezes pode ser usado para codificar as regras de negócios que poderá mudar com freqüência. Scripting expressões são avaliadas usando o método eval(). Quaisquer variáveis utilizadas no ambiente de script pode ser atribuída a partir do seu código Java usando o put () method.&lt;/b&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;i&gt;ScriptEngineManager manager= new ScriptEngineManager();&lt;br /&gt;ScriptEngine engine= manager.getEngineByName(&quot;js&quot;);&lt;br /&gt;engine.put(&quot;age&quot;, 21);&lt;br /&gt;engine.eval(&quot;if (age &amp;gt;= 18){ &quot; +&lt;br /&gt;&quot; print(&#39;Old enough to vote!&#39;); &quot; +&lt;br /&gt;&quot;} else {&quot; +&lt;br /&gt;&quot; print (&#39;Back to school!&#39;);&quot; +&lt;br /&gt;&quot;}&quot;);&lt;br /&gt;//Result on console&lt;/i&gt;&lt;br /&gt;&amp;gt; Old enough to vote!&lt;/b&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;;font-size:100%;color:green;&quot;  &gt;&lt;br /&gt;&lt;b&gt;A partir do exemplo ScriptEngineManager, nós pedimos uma instancia de um motor de JavaScript usando o método getEngineByName. Sobre o mecanismo de script, o método eval é chamado a executar uma determinada string como código JavaScript! Para resumir, a manipulação de exceções não é mostrada nos exemplos. Existem Exceções Checadas(checked) e de Tempo de Execução(Runtime) API javax.script. Desnecessário dizer, você tem que lidar com as exceções de forma adequada.&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;&lt;br /&gt;&lt;i&gt;&lt;b&gt;//Hello World Javascript on the JVM!&lt;br /&gt;import javax.script.*;&lt;br /&gt;public class EvalScript {&lt;br /&gt;public static void main(String[] args) throws Exception {&lt;br /&gt;// cria um gerente para o motor de scripts&lt;br /&gt;ScriptEngineManager factory = new ScriptEngineManager();&lt;br /&gt;// cria o motor JavaScript como mostrado nos exemplos anteriores&lt;br /&gt;ScriptEngine engine = factory.getEngineByName(&quot;js&quot;);&lt;br /&gt;// interpreta o codigo Javascript&lt;br /&gt;engine.eval(&quot;print(&#39;Hello World, Javascript on the JVM&#39;)&quot;);&lt;br /&gt;}&lt;br /&gt;}&lt;/b&gt;&lt;/i&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;;font-size:100%;color:green;&quot;  &gt;&lt;br /&gt;&lt;b&gt;Com arquivos o codigo é um pouco diferente, e neste exemplo, podemos chamar o método eval() que aceita um java.io.Reader como entrada. O leitor lê o script a ser executado diretamente do fluxo . Desta forma é possível executar scripts a partir de arquivos, URLs e os recursos envolvendo os objetos relevantes fluxo de entrada como Readers.&lt;/b&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;&lt;br /&gt;&lt;i&gt;&lt;b&gt;import javax.script.*;&lt;br /&gt;public class EvalFile {&lt;br /&gt;public static void main(String[] args) throws Exception {&lt;br /&gt;// creia gerente para o motor de script&lt;br /&gt;ScriptEngineManager factory = new ScriptEngineManager();&lt;br /&gt;// cria motor JavaScript engine&lt;br /&gt;ScriptEngine engine = factory.getEngineByName(&quot;js&quot;);&lt;br /&gt;//interpreta o script Javascript vindo do arquivo, com nome dado no primeiro parametro&lt;br /&gt;engine.eval(new java.io.FileReader(args[0]));&lt;br /&gt;}&lt;br /&gt;}&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;;font-size:100%;color:green;&quot;  &gt;&lt;b&gt;&lt;br /&gt;Vamos dizer que exista um arquivo chamado &quot;test.js&quot; no diretorio onde executamos a aplicação com o seguinte codigo:&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;&lt;br /&gt;&lt;b&gt;println(&quot;Hello World lido do arquivo de nome test.js&quot;)&lt;/b&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;;font-size:100%;color:green;&quot;  &gt;&lt;b&gt;&lt;br /&gt;Rode o codigo da seguinte maneira:&lt;/b&gt;&lt;br /&gt;&lt;/span&gt; &lt;span style=&quot;font-size:85%;&quot;&gt;&lt;br /&gt;&lt;i&gt;&lt;b&gt;java EvalFile test.js&lt;/b&gt;&lt;/i&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;;font-size:130%;color:red;&quot;  &gt;&lt;b&gt;&lt;br /&gt;REFERENCIAS E LINKS&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://onjava.com/onjava/2006/04/26/mustang-meets-rhino-java-se-6-scripting.html&quot;&gt;&lt;b&gt;Artigo em OnJava sobre RHINO no Java 6&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://java.sun.com/javase/6/docs/technotes/guides/scripting/programmer_guide/index.html&quot;&gt;&lt;b&gt;Guia Oficial da Sun sobre JSR-223&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://pt.wikipedia.org/wiki/JavaScript&quot;&gt;&lt;b&gt;Wikipedia Javascript&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://pt.wikipedia.org/wiki/AJAX_%28programacao%29&quot;&gt;&lt;b&gt;Wikipedia AJAX&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://java.sun.com/developer/technicalArticles/J2SE/Desktop/scripting/&quot;&gt;&lt;b&gt;Excelente artigo da Sun sobre como usar Javascript na JVM com otimos exemplos e conteudo&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style=&quot;;font-size:100%;color:green;&quot;  &gt;&lt;br /&gt;&lt;b&gt;Espero ter ajudado com este post!&lt;br /&gt;Obrigado pelo seu tempo!&lt;br /&gt;Participem do OSUM!&lt;/b&gt;&lt;br /&gt;&lt;/span&gt;</content><link rel='replies' type='application/atom+xml' href='http://amsterdaintelligence.blogspot.com/feeds/6345714761442997524/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://amsterdaintelligence.blogspot.com/2009/10/java-vs-javascript.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7308500728033786786/posts/default/6345714761442997524'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7308500728033786786/posts/default/6345714761442997524'/><link rel='alternate' type='text/html' href='http://amsterdaintelligence.blogspot.com/2009/10/java-vs-javascript.html' title='Java vs Javascript'/><author><name>@williamgouvea</name><uri>http://www.blogger.com/profile/16737800888418990640</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiXgCyNKh33yvHTbk83E03NP-2_VEgR6dAblD4Daus1Z6NoufJ-_ovu0KdlMO4KlMwqlDiHfgVPefrqERTjJ-nkKZP7_S41tqN6sQ9-suaiqjp622XDcN72QNXCLNB5SCg/s220/trabalho.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEie9XLUcTczrTKeVtqINAWpiutaA2GWsTQxChwI0xamrqDzS0XyVdWm-08cjhIJsPBIdUzu4sil9yxyLbDV4itW9U8ELnXPG1vUxNfSEbeVvWFaUOrCDkz6qCyFcLbPW1wcXeg3iCaBnGQ/s72-c/rhino50.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7308500728033786786.post-3633381281976414443</id><published>2009-10-02T05:55:00.000-07:00</published><updated>2009-11-13T18:01:18.392-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="clojure functional concurrency performance"/><title type='text'>Aprendendo Clojure, Part-I Paradigma Funcional!</title><content type='html'>&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiWrkJASzZN1YRObmc1L3DdGqt0tY_aNI4_LcUWinmHW-XZ9f45Xe29Ukvt3LZe-oxxNIuyssxM6hoITNKgTmJrWeNIjcnfLFBzB5HLRpvCewrdh1AbNVdZiG9EyucdtfuXqN1P7tNMYY4/s1600-h/lambda_lisp.png&quot;&gt;&lt;img style=&quot;margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 375px; height: 375px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiWrkJASzZN1YRObmc1L3DdGqt0tY_aNI4_LcUWinmHW-XZ9f45Xe29Ukvt3LZe-oxxNIuyssxM6hoITNKgTmJrWeNIjcnfLFBzB5HLRpvCewrdh1AbNVdZiG9EyucdtfuXqN1P7tNMYY4/s400/lambda_lisp.png&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5403773508840180098&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style=&quot;;font-size:100%;color:green;&quot;  &gt;&lt;b&gt;&lt;br /&gt;Programação funcional é um desses termos infelizes na programação de abuso e envolta em confusão, mas que realmente não deve ser assim tão misterioso. Melhor entendida como uma alternativa ao paradigma de programação imperativa, programação funcional é caracterizada por:&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;&lt;span style=&quot;;font-size:100%;color:red;&quot;  &gt;&lt;b&gt;Funções sem efeitos colaterais&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;span style=&quot;;font-size:100%;color:green;&quot;  &gt;&lt;b&gt;O termo &quot;funcional&quot; vem da matemática, onde uma função só retorna um valor , baseado em zero ou mais valores de entrada e não produz efeitos colaterais, nem muda o seu comportamento com base em quaisquer outros valores que não os passados para ela. Uma função &quot;pura&quot; retorna a mesma coisa toda vez que é chamada com o mesmo conjunto de valores.&lt;br /&gt;&lt;br /&gt;Esta não é a forma de trabalho funciona em imperativo (sem programação) funcional. No código imperativo, muitas vezes funções:&lt;br /&gt;&lt;br /&gt;1. produzem efeitos colaterais (como escrever para um arquivo ou algum dispositivo de I / O)&lt;br /&gt;2. transformam suas entradas e variáveis globais&lt;br /&gt;3. modificação seu comportamento baseado em estado fora da função&lt;br /&gt;&lt;br /&gt;Funções puras têm duas grandes vantagens:&lt;br /&gt;&lt;br /&gt;1. Funções que evitam mutação de dados locais e evitam a leitura ou a mutação de dados globais são mais fáceis de entender e mais favorável às provas de regularidade ou simplesmente, testes!.&lt;br /&gt;2. Funções que evitam a leitura e a escrita de estado compartilhado podem ser executados simultaneamente sem as preocupações habituais de simultaneidade(concorrencia).&lt;br /&gt;&lt;br /&gt;Agora, a objeção óbvia a escrever todas as nossas funções para executar sem efeitos colaterais é que precisamos de efeitos colaterais para os nossos programas para finalmente fazer alguma coisa útil. Como diz o ditado, um programa sem efeitos colaterais não faz nada mais do que deixar o seu CPU quente. O ideal na programação funcional, então, é simplesmente isolar as mudanças de estado, e não eliminá-los totalmente. Em uma linguagens puramente funcionais, como Haskell, pureza funcional é forçado pelo compilador de tal forma que todos os possíveis efeitos colaterais devem ser expressamente circunscritos no código. Uma língua impuramente funcional, como Clojure, não faz essa exigencia: Clojure ajuda a estruturar o seu código de forma funcional, mas delega a você para a responsabilidade de manter os efeitos colaterais de seu código puramente funcional.&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style=&quot;;font-size:100%;color:red;&quot;  &gt;&lt;b&gt;Os dados imutáveis&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;span style=&quot;;font-size:100%;color:green;&quot;  &gt;&lt;b&gt;Se as funções evitamr a mutação do estado, e se estiverem a fim de evitar confiar em estado de mutação, faz sentido então de simplesmente fazer o máximo de dados possível imutável: se os dados não podem mudar, não há perigo de que talvez tenha mudado. Em Clojure, os tipos de coleção padrão são imutáveis e, de fato, mesmo as variáveis locais são imutáveis: uma vez definido, o valor vinculado a um local não muda.&lt;br /&gt;&lt;br /&gt;Você provavelmente está pensando que isso não soa pratico nem utilizavel, mas é surpreendente a quantidade de trabalho pode ser feito sem dados mutáveis. É verdade que os programas do mundo real não pode ter dados totalmente imutáveis, mas muito mais dados podem ser imutáveis do que é comumente aceito pelos programadores acostumados apenas a programação imperativa.&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style=&quot;;font-size:100%;color:red;&quot;  &gt;&lt;b&gt;Funções de primeira classe&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style=&quot;;font-size:100%;color:green;&quot;  &gt;&lt;b&gt;&lt;br /&gt;Na programação funcional, as funções são de &quot;primeira classe&quot;, ou seja, as funções são, elas próprias valores que podem ser passados como argumentos ou armazenados em variáveis. Muitas linguagens dinâmicas - Javascript, Ruby, Python, etc - têm funções de primeira classe, mas essas linguagens não são geralmente consideradas funcionais.&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style=&quot;;font-size:100%;color:red;&quot;  &gt;&lt;b&gt;A função de fluxo de controle baseado&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;span style=&quot;;font-size:100%;color:green;&quot;  &gt;&lt;b&gt;Em uma linguagem imperativa, o fluxo de controle é feito através de construções especiais, por exemplo, if-else, ou for/while. Em linguagens funcionais, mecanismos de controle de fluxo são ou funções ou, pelo menos,têm função semelhante na medida em que retornam valores. Por exemplo, se em Clojure você executar um dos dois ramos e retornar o valor para a função que chamou esta função. Essas construções permitem expressões que de outra forma exigirião mutação de variáveis.&lt;/b&gt;&lt;/span&gt;</content><link rel='replies' type='application/atom+xml' href='http://amsterdaintelligence.blogspot.com/feeds/3633381281976414443/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://amsterdaintelligence.blogspot.com/2009/10/aprendendo-clojure-part-i-paradigma.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7308500728033786786/posts/default/3633381281976414443'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7308500728033786786/posts/default/3633381281976414443'/><link rel='alternate' type='text/html' href='http://amsterdaintelligence.blogspot.com/2009/10/aprendendo-clojure-part-i-paradigma.html' title='Aprendendo Clojure, Part-I Paradigma Funcional!'/><author><name>@williamgouvea</name><uri>http://www.blogger.com/profile/16737800888418990640</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiXgCyNKh33yvHTbk83E03NP-2_VEgR6dAblD4Daus1Z6NoufJ-_ovu0KdlMO4KlMwqlDiHfgVPefrqERTjJ-nkKZP7_S41tqN6sQ9-suaiqjp622XDcN72QNXCLNB5SCg/s220/trabalho.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiWrkJASzZN1YRObmc1L3DdGqt0tY_aNI4_LcUWinmHW-XZ9f45Xe29Ukvt3LZe-oxxNIuyssxM6hoITNKgTmJrWeNIjcnfLFBzB5HLRpvCewrdh1AbNVdZiG9EyucdtfuXqN1P7tNMYY4/s72-c/lambda_lisp.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7308500728033786786.post-3428033578259283514</id><published>2009-08-25T23:48:00.000-07:00</published><updated>2009-08-26T01:05:21.161-07:00</updated><title type='text'>Clojure and the Clouds!</title><content type='html'>&lt;span style=&quot;color: rgb(255, 0, 0); font-style: italic; font-weight: bold;font-family:courier new;font-size:100%;&quot;  &gt;Depois de muito tempo sem poder postar, devido a programação compulsiva, estudos e algumas pesquisas passo para dar uma palavra acerca do Clojure!&lt;/span&gt;&lt;br /&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;;font-family:courier new;font-size:85%;&quot;  &gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;;font-family:courier new;font-size:130%;&quot;  &gt;&lt;span style=&quot;font-weight: bold; font-style: italic; color: rgb(0, 153, 0);&quot;&gt;IDÉIAS DE ECOSSITEMA PARA A CLOUD COMPUTING&lt;br /&gt;(1-LINGUAGENS F&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;;font-family:courier new;font-size:130%;&quot;  &gt;&lt;span style=&quot;font-weight: bold; font-style: italic; color: rgb(0, 153, 0);&quot;&gt;UNCIONAIS)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; font-style: italic; color: rgb(0, 153, 0);font-family:verdana;&quot; &gt;1.1 CLOJURE&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style=&quot;;font-family:courier new;font-size:85%;&quot;  &gt;&lt;br /&gt;&lt;/span&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgd-Kn7biqmb8YohZ7r0Bgbur7KsBVGo4OLEmjHPZayA_KPnnOpWlu6KmJvIsTqjQXwc6udI5LtfH6iVSrefh9Q6Z1g4_xX2Qln20QtFfTYg64kxLMCzhkCU9Q85C9GsIUAe_oItFY5Br8/s1600-h/montanha_clouds.jpg&quot;&gt;&lt;img style=&quot;margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 300px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgd-Kn7biqmb8YohZ7r0Bgbur7KsBVGo4OLEmjHPZayA_KPnnOpWlu6KmJvIsTqjQXwc6udI5LtfH6iVSrefh9Q6Z1g4_xX2Qln20QtFfTYg64kxLMCzhkCU9Q85C9GsIUAe_oItFY5Br8/s400/montanha_clouds.jpg&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5374179978675508626&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;color: rgb(255, 102, 0); font-weight: bold;font-family:courier new;font-size:100%;&quot;  &gt;Baseada no velho e &quot;concorrente&quot; Lisp, a linguagem Clojure é compilada diretamente para bytecode Java, e tem como plataforma de execução a JVM que é muito robusta, fazendo uso de tecnologias como JIT e GC Paralelo alem de outras  oluções brilhantes que facilitam a vida de quem migra para o paradigma funcional:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;ul style=&quot;color: rgb(0, 153, 0); font-weight: bold; text-align: justify;&quot;&gt;&lt;li&gt;&lt;span style=&quot;color: rgb(255, 102, 0);font-family:courier new;font-size:100%;&quot;  &gt; &lt;span style=&quot;color: rgb(0, 153, 0);&quot;&gt;Multimethods(Polimorfismo)&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul style=&quot;color: rgb(0, 153, 0); font-weight: bold; text-align: justify;&quot;&gt;&lt;li&gt;&lt;span style=&quot;color: rgb(255, 102, 0);font-family:courier new;font-size:100%;&quot;  &gt; &lt;span style=&quot;color: rgb(0, 153, 0);&quot;&gt;Estrutura de Dados Imutaveis ex: REF&#39;s&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul style=&quot;color: rgb(0, 153, 0); font-weight: bold; text-align: justify;&quot;&gt;&lt;li&gt;&lt;span style=&quot;color: rgb(255, 102, 0);font-family:courier new;font-size:100%;&quot;  &gt; &lt;span style=&quot;color: rgb(0, 153, 0);&quot;&gt;Metaprogramação extendida do LISP&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul style=&quot;color: rgb(0, 153, 0); font-weight: bold; text-align: justify;&quot;&gt;&lt;li&gt;&lt;span style=&quot;color: rgb(255, 102, 0);font-family:courier new;font-size:100%;&quot;  &gt; &lt;span style=&quot;color: rgb(0, 153, 0);&quot;&gt;STM ex:Agentes&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;span style=&quot;color: rgb(255, 102, 0); font-weight: bold;font-family:arial;font-size:100%;&quot;  &gt;Alem disso a comunidade e muito amigavel e existem muitas bibliotecas que ja englobam tecnologias de vanguarda como:&lt;/span&gt;&lt;br /&gt;&lt;ul style=&quot;text-align: justify;&quot;&gt;&lt;li style=&quot;color: rgb(0, 153, 0);&quot;&gt;&lt;a href=&quot;http://hadoop.apache.org/&quot;&gt;&lt;span style=&quot;color: rgb(255, 102, 0); font-weight: bold;font-family:arial;font-size:100%;&quot;  &gt;&lt;span style=&quot;color: rgb(0, 153, 0);&quot;&gt;Hadoop(MapReduce em Java)&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li style=&quot;color: rgb(0, 153, 0);&quot;&gt;&lt;a href=&quot;http://www.terracotta.org/&quot;&gt;&lt;span style=&quot;color: rgb(255, 102, 0); font-weight: bold;font-family:arial;font-size:100%;&quot;  &gt;&lt;span style=&quot;color: rgb(0, 153, 0);&quot;&gt;Terracotta(JVM Grid)&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li style=&quot;color: rgb(0, 153, 0);&quot;&gt;&lt;a href=&quot;http://neo4j.org/&quot;&gt;&lt;span style=&quot;color: rgb(255, 102, 0); font-weight: bold;font-family:arial;font-size:100%;&quot;  &gt;&lt;span style=&quot;color: rgb(0, 153, 0);&quot;&gt;Neo4J(DB de Grafos)&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://couchdb.apache.org/&quot;&gt;&lt;span style=&quot;color: rgb(255, 102, 0); font-weight: bold;font-family:arial;font-size:100%;&quot;  &gt;&lt;span style=&quot;color: rgb(0, 153, 0);&quot;&gt;CouchDB &lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;color: rgb(255, 102, 0); font-weight: bold;font-family:arial;font-size:100%;&quot;  &gt;Otimas para alta performance e paralelismo no tratamento de grandes quantidades de dados estas bibliotecas fazem com que o Clojure seja ideal para a Web2.0 e a futura Web 3.0&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: rgb(255, 102, 0); font-weight: bold;font-family:arial;font-size:100%;&quot;  &gt;Alem de novas tecnologias  existem alguns frameworks interessantes como o Compojure, voltado para Web, baseado na API Sevlet do Java, usando o padrao REST para as rotas, sendo totalmente adaptavel, devido a grande capacidade atribuida pela metaprogramação(macros), utilizando recursos e tecnicas presentes em muitos frameworks web modernos(Django,Rails,Grails,Symphony,VRaptor).&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: rgb(255, 102, 0); font-weight: bold;font-family:arial;font-size:100%;&quot;  &gt;Clojure  resgata conceitos sobre concorrencia ja resolvidos nos anos 50 quando JohnMcCarthy, criador do LISP usou a linguagem em pesquisas com inteligencia artificial, tendo inclusive cunhado o termo &quot;Cloud Computing&quot; ou &quot;Provedor de Serviços&quot; baseado na abstração dos sistemas de distribuição  eletrico e hidraulico em cidades .&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;font-family:courier new;font-size:100%;&quot;  &gt;&lt;span style=&quot;color: rgb(255, 102, 0);&quot;&gt;Podemos dizer que Clojure, juntamente com Scala e Erlang são as linguagens cuja classe define um novo paradigma chamado , POC(Programação Orientada a Concorrencia) e que são de suma importancia para a Cloud Computing&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: rgb(255, 102, 0);&quot;&gt;.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;div style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;color: rgb(255, 0, 0); font-weight: bold; font-style: italic;font-size:180%;&quot; &gt;Resumindo...&lt;/span&gt;&lt;span style=&quot;font-size:180%;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;ul style=&quot;color: rgb(0, 153, 0); text-align: justify;&quot;&gt;&lt;li&gt;&lt;span style=&quot;font-weight: bold; color: rgb(255, 102, 0);font-family:courier new;font-size:100%;&quot;  &gt;&lt;span style=&quot;color: rgb(0, 153, 0);&quot;&gt;Linguagens como Clojure, CommonLisp, Haskell,  geram codigo&lt;/span&gt; &lt;span style=&quot;color: rgb(0, 153, 0);&quot;&gt;puramente funcional, que é mais plugavel e facil de testar!&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul style=&quot;color: rgb(0, 153, 0); text-align: justify;&quot;&gt;&lt;li&gt;&lt;span style=&quot;font-weight: bold; color: rgb(255, 102, 0);font-family:courier new;font-size:100%;&quot;  &gt;&lt;span style=&quot;color: rgb(0, 153, 0);&quot;&gt;Com Clojure você pode utilizar o pacote de concorrencia (JSR-166)&lt;/span&gt; &lt;span style=&quot;color: rgb(0, 153, 0);&quot;&gt;de forma bem clara, inclusive englobando o padrão Fork/Join(Divisão&lt;/span&gt; &lt;span style=&quot;color: rgb(0, 153, 0);&quot;&gt;e Conquista) ou utilizando Executores(Master/Slave).&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul style=&quot;color: rgb(0, 153, 0); text-align: justify;&quot;&gt;&lt;li&gt;&lt;span style=&quot;font-weight: bold; color: rgb(255, 102, 0);font-family:courier new;font-size:100%;&quot;  &gt;&lt;span style=&quot;color: rgb(0, 153, 0);&quot;&gt;Com Clojure você se beneficia de uma API explicita e mutavel para se adequar as suas necessidades de concorrencia e escalabilidade!&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;div style=&quot;text-align: center; font-weight: bold; font-style: italic; color: rgb(255, 0, 0);&quot;&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;&lt;span style=&quot;font-size:180%;&quot;&gt;Links Interessantes:&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;ul style=&quot;text-align: justify;&quot;&gt;&lt;li&gt;&lt;a href=&quot;http://www.infoq.com/news/2009/01/clojure-interview-halloway&quot;&gt;Entrevista com Stuart Holloway, autor do livro Programmming Clojure publicado pela Pragmatic Programmers , sobre as  caracteristicas  e dicas sobre a linguagem(InfoQ)&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul style=&quot;text-align: justify;&quot;&gt;&lt;li&gt;&lt;a href=&quot;http://codemonkeyism.com/clojure-scala-part-2/&quot;&gt;Bom artigo falando sobre linguagens scripts para JVM , incluindo  o fator escalabilidade e concorrencia&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;a href=&quot;http://www.paulgraham.com/onlisp.html&quot;&gt;&lt;/a&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://www.paulgraham.com/onlisp.html&quot;&gt;Paul Graham, um dos lideres da corrente  para programação em LISP  tem em seu site alem de artigos o livro ONLISP, tendo como foco principal a utilização de  Macros&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://www.infoq.com/presentations/actors-scala-immutability-pollack&quot;&gt;Artigo sobre Actors e Scala on Lift para Web (InfoQ)&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://amsterdaintelligence.blogspot.com/feeds/3428033578259283514/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://amsterdaintelligence.blogspot.com/2009/08/cloud-computing-clojure-concorrencia.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7308500728033786786/posts/default/3428033578259283514'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7308500728033786786/posts/default/3428033578259283514'/><link rel='alternate' type='text/html' href='http://amsterdaintelligence.blogspot.com/2009/08/cloud-computing-clojure-concorrencia.html' title='Clojure and the Clouds!'/><author><name>@williamgouvea</name><uri>http://www.blogger.com/profile/16737800888418990640</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiXgCyNKh33yvHTbk83E03NP-2_VEgR6dAblD4Daus1Z6NoufJ-_ovu0KdlMO4KlMwqlDiHfgVPefrqERTjJ-nkKZP7_S41tqN6sQ9-suaiqjp622XDcN72QNXCLNB5SCg/s220/trabalho.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgd-Kn7biqmb8YohZ7r0Bgbur7KsBVGo4OLEmjHPZayA_KPnnOpWlu6KmJvIsTqjQXwc6udI5LtfH6iVSrefh9Q6Z1g4_xX2Qln20QtFfTYg64kxLMCzhkCU9Q85C9GsIUAe_oItFY5Br8/s72-c/montanha_clouds.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7308500728033786786.post-5065321672251687154</id><published>2009-02-28T04:47:00.000-08:00</published><updated>2009-02-28T05:39:49.758-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="cursos certificação"/><title type='text'>Dicas para Estudar!!!</title><content type='html'>&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjxCWto3u6DWEFF0tTQDVfCcbKkZI7gQtUIYP1uIGOpfsFR-hAL9adOwuVTyCpI2WAR6y7PBg1CVHq29iQBmk0f-nE9fbWi5WHX3hpZXTd_0Ep4ZO5Q3ZQtqeMFHjdRaXt_6WiHg2gQrZw/s1600-h/livros.jpg&quot;&gt;&lt;img style=&quot;margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 361px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjxCWto3u6DWEFF0tTQDVfCcbKkZI7gQtUIYP1uIGOpfsFR-hAL9adOwuVTyCpI2WAR6y7PBg1CVHq29iQBmk0f-nE9fbWi5WHX3hpZXTd_0Ep4ZO5Q3ZQtqeMFHjdRaXt_6WiHg2gQrZw/s400/livros.jpg&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5307842467938426802&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;color: rgb(102, 0, 204); font-weight: bold; font-style: italic;font-family:verdana;font-size:130%;&quot;  &gt;SOME RESOURCES!!!&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style=&quot;font-weight: bold; color: rgb(255, 102, 0);font-size:85%;&quot; &gt;Devido a grande disponibilidade de informações na web, muitos (assim como eu) se aventuram buscando informações, baixando livros(detalhe!!) e recorrendo a tutoriais postados em blogs e nos sites dos projetos.&lt;br /&gt;&lt;br /&gt;Contudo, não podemos descartar a leitura de bons livros que enfocam totalmente a area ou assunto, de forma didatica(nem todos!!) e geralmente contem informações muito importantes provenientes de inumeros experts , desenvolvedores.&lt;br /&gt;&lt;br /&gt;O intuito desse post é passar alguns links uteis na hora de estudar sobre alguns assuntos ou tecnologias especificas.&lt;br /&gt;&lt;br /&gt;Nos proximos posts ,falarei sobre algumas listas de livros considerados bestsellers para Java, OO,Web, Ruby,Metologias Ageis e muito mais!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-weight: bold; color: rgb(102, 0, 204); font-style: italic;font-size:130%;&quot; &gt;Sun Student Courses&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style=&quot;font-weight: bold; color: rgb(255, 102, 0);font-size:85%;&quot; &gt;Cursos gratuitos com certificado ao final focando os seguintes temas:&lt;br /&gt;&lt;/span&gt;&lt;ul style=&quot;font-weight: bold; color: rgb(255, 102, 0);&quot;&gt;&lt;li&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;SunSpot&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;OpenSolaris&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;RealWorld Technologies(JRuby,JavaFX,Matisse GuiBuilder,JavaME(Games)&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;color: rgb(102, 0, 204); font-weight: bold;font-size:130%;&quot; &gt;Java With Passion&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style=&quot;font-weight: bold; color: rgb(255, 102, 0);font-size:85%;&quot; &gt;Cursos ministrados pelo Sang Shin, evagelista de tecnologias da Sun , em parceria com muitos engenheiros renomados e criadores de tecnologia.Os cursos são online e ao final os concluintes tem seus nomes publicados e ganham um certificado&lt;br /&gt;&lt;/span&gt;&lt;ul style=&quot;font-weight: bold; color: rgb(255, 102, 0);&quot;&gt;&lt;li&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;Java e OO&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;Java EE(completo incluindo frameworks Web e hibernate)&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;WebServices&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;Ajax&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;JavaFX&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;JRubyonRails&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;div style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-weight: bold; color: rgb(102, 0, 204); font-style: italic;font-size:130%;&quot; &gt;Netbeans Tutorials e Netbeans TV&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style=&quot;font-weight: bold; color: rgb(255, 102, 0);font-size:85%;&quot; &gt;No site do projeto Netbeans você encontra milhares de tutoriais, de todas as tecnologias que sao utilizadas na plataforma, contando tambem com screencasts e muita dicas, alem de vasta documentação.Exite tambem a comunidade Netbeans TV , o Youtube do desenvolvedor!!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-weight: bold; color: rgb(102, 0, 204); font-style: italic;font-size:130%;&quot; &gt;Iniciativa JEDI&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style=&quot;font-weight: bold; color: rgb(255, 102, 0);font-size:85%;&quot; &gt;Cursos hospedados pela comunidade de usuarios Java de brasilia(DFJUG) que se baseiam nos modulos criados para o projeto original, oriundo das Filipinas com intuito de levar novas tecnologias para quem nao tem como pagar por ela.Cursos gratis e de alta qualidade.&lt;br /&gt;&lt;/span&gt;&lt;ul style=&quot;font-weight: bold; color: rgb(255, 102, 0);&quot;&gt;&lt;li&gt;&lt;span style=&quot;font-size:85%;&quot;&gt; Tecnicas de Programação I (Java)&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-size:85%;&quot;&gt; Tecnicas de Programção II (Java)&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-size:85%;&quot;&gt; Estruturas de Dados &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-size:85%;&quot;&gt; Engenharia de Requisitos&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-size:85%;&quot;&gt; Segurança&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-size:85%;&quot;&gt; Sistemas Operacionais&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-size:85%;&quot;&gt; Java Mobile&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-size:85%;&quot;&gt; Java para Web&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;e alguns mais!!&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;div style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;color: rgb(102, 0, 204); font-weight: bold; font-style: italic;font-size:130%;&quot; &gt;Caelum&lt;/span&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style=&quot;font-weight: bold; color: rgb(255, 102, 0);font-size:85%;&quot; &gt;A Caelum é lider em treinamentos Java e Scrum e possui diversos cursos com valores acessiveis alem de disponibilizar algumas apostilas para download.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div style=&quot;text-align: center; font-style: italic; color: rgb(102, 0, 204);&quot;&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;SUN&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style=&quot;font-weight: bold; color: rgb(255, 102, 0);font-size:85%;&quot; &gt;No site da Sun existe o SDN(sun Developer Networks) que conta com milhares de artigos, tutoriais e noticias sobre as novas tendencias e tecnologias das plataformas Java e dos inumeros produto como Glassfish, MySQL, OpenSolaris,JavaFX e muito mais.&lt;br /&gt;&lt;br /&gt;La você tambem encontra os tutoriais sobre Java SE, completissimo e referencia ate para certificação, Java EE e WebServices.&lt;br /&gt;&lt;br /&gt;Na categoria para estudantes você pode acessar facilidades como comunidades, foruns, descontos para certificações cursos internos.Você tambem  pode conferir informações importantes sobre os eventos JavaOne Online e o SunTechDays com palestras e slides dos eventos que deflagram novas tecnologias e tendencias.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Existem muitas outras fontes de informação na web...Atraves do Google você pode vasculhar e garimpar muita coisa usando opções como filetype:pdf ou filetype:ppt é possivel adquirir aulas neste formatos de inumeras faculdades.&lt;br /&gt;&lt;br /&gt;Outra dica seria usar a velha e boa Wikipedia e assinar feeds de varios blogs espalhados por ai, tendo como exemplo os blogs da sun, cuja categorias englobam diversos assuntos que são comentados pelos proprios funcionarios.&lt;br /&gt;&lt;br /&gt;Qualquer duvida sobre algum assunto, de sempre uma primeira olhada no Google antes de dizer que não sabe onde tem informação ou nao sabe como fazer.&lt;br /&gt;&lt;br /&gt;Se  precisar de mais ajuda...Existem as comunidades como GUJ, JavaFree, tendo estas foco em Java, que são foruns como milhares de usuarios.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-weight: bold; color: rgb(153, 51, 153);font-size:130%;&quot; &gt;&lt;span style=&quot;font-style: italic;&quot;&gt;Tem sempre alguem que ja passou pela sua duvida e sempre alguem que você pode ajudar.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style=&quot;font-weight: bold; color: rgb(255, 102, 0);font-size:85%;&quot; &gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: rgb(255, 102, 0); font-weight: bold; font-style: italic;font-size:130%;&quot; &gt;&lt;/span&gt;&lt;div style=&quot;text-align: center; font-weight: bold; font-style: italic;&quot;&gt;&lt;span style=&quot;color: rgb(153, 51, 153);font-size:130%;&quot; &gt;A maxima é participe sempre e fique por dentro!!&lt;/span&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;div style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;color: rgb(51, 204, 0);font-size:130%;&quot; &gt;&lt;span style=&quot;font-weight: bold; font-style: italic;&quot;&gt;Links Interessantes:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;ul&gt;&lt;li style=&quot;color: rgb(51, 255, 51); font-weight: bold; font-style: italic;&quot;&gt;&lt;a href=&quot;http://www.javapassion.com/&quot;&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;JavaPassion&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li style=&quot;color: rgb(51, 255, 51); font-weight: bold; font-style: italic;&quot;&gt;&lt;a href=&quot;http://www.sunstudentcourses.com/&quot;&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;Sun Student Courses&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li style=&quot;color: rgb(51, 255, 51); font-weight: bold; font-style: italic;&quot;&gt;&lt;a href=&quot;http://www.netbeans.org/kb/index.html&quot;&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;Netbeans Tutorials&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li style=&quot;color: rgb(51, 255, 51); font-weight: bold; font-style: italic;&quot;&gt;&lt;a href=&quot;http://netbeans.tv/&quot;&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;Netbeans TV&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li style=&quot;color: rgb(51, 255, 51); font-weight: bold; font-style: italic;&quot;&gt;&lt;a href=&quot;http://developers.sun.com/learning/javaoneonline/&quot;&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;JavaOne Online&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li style=&quot;color: rgb(51, 255, 51); font-weight: bold; font-style: italic;&quot;&gt;&lt;a href=&quot;http://java.sun.com/reference/api/&quot;&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;API e Documentação&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li style=&quot;color: rgb(51, 255, 51); font-weight: bold; font-style: italic;&quot;&gt;&lt;a href=&quot;http://developers.sun.com/events/techdays/&quot;&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;SunTechDays&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li style=&quot;color: rgb(51, 255, 51); font-weight: bold; font-style: italic;&quot;&gt;&lt;a href=&quot;http://www.dfjug.org/DFJUG/jedi/index.jsp&quot;&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;Iniciativa JEDI&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li style=&quot;color: rgb(51, 255, 51); font-weight: bold; font-style: italic;&quot;&gt;&lt;a href=&quot;http://www.caelum.com.br/&quot;&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;Caelum&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li style=&quot;color: rgb(51, 255, 51); font-weight: bold; font-style: italic;&quot;&gt;&lt;a href=&quot;http://java.sun.com/developer/onlineTraining/&quot;&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;Tutoriais SUN&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li style=&quot;color: rgb(51, 255, 51); font-weight: bold; font-style: italic;&quot;&gt;&lt;a href=&quot;http://www.sun.com/solutions/landing/industry/education/sai/index.xml&quot;&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;SAI(Sun Academic Initiative)&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li style=&quot;color: rgb(51, 255, 51); font-weight: bold; font-style: italic;&quot;&gt;&lt;a href=&quot;http://developers.sun.com/&quot;&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;SDN(Sun Developer Network)&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://www.sun.com/students/&quot;&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;&lt;span style=&quot;color: rgb(51, 255, 51); font-weight: bold; font-style: italic;&quot;&gt;Sun for Students&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;&lt;span style=&quot;color: rgb(51, 255, 51); font-weight: bold; font-style: italic;&quot;&gt;&lt;a href=&quot;http://www.sun.com/training/certification/java/index.xml?intecmp=1395&quot;&gt;Certificação Java/Solaris&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;&lt;span style=&quot;color: rgb(51, 255, 51); font-weight: bold; font-style: italic;&quot;&gt;&lt;a href=&quot;http://blogs.sun.com/&quot;&gt;Blogs Sun&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;</content><link rel='replies' type='application/atom+xml' href='http://amsterdaintelligence.blogspot.com/feeds/5065321672251687154/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://amsterdaintelligence.blogspot.com/2009/02/como-estudar.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7308500728033786786/posts/default/5065321672251687154'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7308500728033786786/posts/default/5065321672251687154'/><link rel='alternate' type='text/html' href='http://amsterdaintelligence.blogspot.com/2009/02/como-estudar.html' title='Dicas para Estudar!!!'/><author><name>@williamgouvea</name><uri>http://www.blogger.com/profile/16737800888418990640</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiXgCyNKh33yvHTbk83E03NP-2_VEgR6dAblD4Daus1Z6NoufJ-_ovu0KdlMO4KlMwqlDiHfgVPefrqERTjJ-nkKZP7_S41tqN6sQ9-suaiqjp622XDcN72QNXCLNB5SCg/s220/trabalho.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjxCWto3u6DWEFF0tTQDVfCcbKkZI7gQtUIYP1uIGOpfsFR-hAL9adOwuVTyCpI2WAR6y7PBg1CVHq29iQBmk0f-nE9fbWi5WHX3hpZXTd_0Ep4ZO5Q3ZQtqeMFHjdRaXt_6WiHg2gQrZw/s72-c/livros.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7308500728033786786.post-2486858105774781926</id><published>2009-02-14T11:59:00.000-08:00</published><updated>2009-02-14T17:30:09.981-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="web container rails php ajax jmaki jsf glassfish javaee"/><title type='text'>Glassfish o servidor para toda obra!!</title><content type='html'>&lt;div style=&quot;text-align: center;&quot;&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgwkrMUhHeWYFT8hoSojRcpbs6LhW_gV3L7QgC0PSj0gfi3U9BdYtX-eMhyphenhyphenpccyzGkabP5TUMnnAIIAaWG3DhtPWRv0xhGm_DZvFs_gxhyDykvjWN1P9TIqdJvw3pjlA0ITMi1CYf4Xa6I/s1600-h/2glassfish_logo_large_transparent.png&quot;&gt;&lt;img style=&quot;margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 202px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgwkrMUhHeWYFT8hoSojRcpbs6LhW_gV3L7QgC0PSj0gfi3U9BdYtX-eMhyphenhyphenpccyzGkabP5TUMnnAIIAaWG3DhtPWRv0xhGm_DZvFs_gxhyDykvjWN1P9TIqdJvw3pjlA0ITMi1CYf4Xa6I/s400/2glassfish_logo_large_transparent.png&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5302824840195528834&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;span style=&quot;font-weight: bold; font-style: italic; color: rgb(255, 102, 0);font-family:verdana;font-size:130%;&quot;  &gt;O QUE É GLASSFISH?&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;p  style=&quot;font-weight: bold; color: rgb(0, 0, 153);font-family:verdana;&quot;&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;Sun GlassFish Enterprise Server, previamente denominado Sun Java System Application Server é um servidor de aplicações líder no setor, rápido e fácil de usar, baseado na Plataforma Java e tecnologia Enterprise Edition (Java EE) para o desenvolvimento e entrega de aplicações e serviços web.&lt;/span&gt;&lt;/p&gt; &lt;p  style=&quot;font-weight: bold; color: rgb(0, 0, 153);font-family:verdana;&quot;&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;O GlassFish Enterprise Server, a implementação de referência Java EE, é um servidor de aplicações de código aberto de nível corporativo que oferece desempenho, confiabilidade, produtividade e facilidade de uso superiores a uma fração do custo de servidores de aplicações proprietários. Como a implementação de referência Java EE é construída em código aberto, o GlassFish elimina a dependência de fornecedores, e permite que clientes aproveitem os mais recentes padrões e inovações do setor.&lt;/span&gt;&lt;/p&gt;&lt;p  style=&quot;font-weight: bold; color: rgb(0, 0, 153); text-align: center;font-family:verdana;&quot;&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;&lt;span style=&quot;font-style: italic; color: rgb(255, 102, 0);&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p  style=&quot;font-weight: bold; color: rgb(0, 0, 153); text-align: center;font-family:verdana;&quot;&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;&lt;span style=&quot;font-style: italic; color: rgb(255, 102, 0);&quot;&gt;O QUE ELE TEM QUE POSSA ME AJUDAR??&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p  style=&quot;font-weight: bold; color: rgb(0, 0, 153);font-family:verdana;&quot;&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;Suporte maximo a tecnologia Java EE , contando os mais novos avanços e tecnologias, gerando mais facilidade e praticidade ao desenvolvedor.&lt;/span&gt;&lt;/p&gt;&lt;p  style=&quot;font-weight: bold; color: rgb(0, 0, 153);font-family:verdana;&quot;&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;Suporta JAX-WS 2.0, JAXB 2.0 e Open ESB, fornecendo uma arquitetura aberta e extensível para colaboração entre tecnologia de integração e serviços web em uma arquitetura orientada a serviços (SOA).&lt;/span&gt;&lt;/p&gt;&lt;p  style=&quot;font-weight: bold; color: rgb(0, 0, 153);font-family:verdana;&quot;&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;A IDE NetBeans com SOA suporta o desenvolvimento de aplicações Java EE 5 (incluindo módulos web e EJB 3.0) e fornece ferramentas de projeto visuais SOA para arquitetos e programadores.Ao usar o Netbeans 6.5 o servidor Glassfish vem integrado, nas versões v2 e v3, de forma leve e otimizada.&lt;/span&gt;&lt;/p&gt;&lt;p  style=&quot;font-weight: bold; color: rgb(0, 0, 153);font-family:verdana;&quot;&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;O Glassfish contem um numeroso conjunto  de tecnologias integradas como o JavaDB e a pilha para criação de webservices e serviços Rest(Metro e Jersey).A ferramenta de atualização conta com varios plugins para agregar funcionalidades diversas, onde você pode baixar plugins para JRubyonRails, JMaki(AJAX), IceFaces(JSF) e muito mais!&lt;/span&gt;&lt;/p&gt;&lt;p  style=&quot;font-weight: bold; color: rgb(0, 0, 153);font-family:verdana;&quot;&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;O Glassfish tambem possue gerenciamento centralizado devido a sua ferramenta asadmin que permite a utilização de qualquer recurso do servidor de forma facil e pratica, sem dores de cabeça.Alem disso, o servidor conta tambem com uma interface intuitiva no formato web onde você pode fazer deploy de aplicações, configuração de clusters, criação de pools de conexões e até monitoramento de recursos , graças a tecnolgia JMX integrada.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p  style=&quot;font-weight: bold; color: rgb(0, 0, 153);font-family:verdana;&quot;&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;È uma servdor otimizado para operar em maquinas com multiplas cpu&#39;s, ideal para o novo mercado de hardware, sendo  para operar no OpenSolaris, e nos processadores (Sparc)que compõe os servidores Sun, detentores da tecnologia de coolthreads.&lt;/span&gt;&lt;/p&gt;&lt;p  style=&quot;font-weight: bold; color: rgb(0, 0, 153);font-family:verdana;&quot;&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p  style=&quot;font-weight: bold; color: rgb(0, 0, 153); text-align: center;font-family:verdana;&quot;&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;&lt;span style=&quot;color: rgb(255, 102, 0);&quot;&gt;&lt;span style=&quot;font-style: italic;&quot;&gt;GLASSFISH V3 E O FUTURO DA WEB&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p  style=&quot;font-weight: bold; color: rgb(0, 0, 153);font-family:verdana;&quot;&gt;&lt;span style=&quot;font-size:85%;&quot;&gt; Na versão v3, o servidor Glassfish é uma plataforma leve para aplicações  Web 2.0, ideal para arquiteturas orientadas a serviços e aplicações ricas(RIA) utlizando Java EE, PHP, AJAX e JRuby.Devido ao grande acesso a essas aplicações, o servidor pode criar clusters de alta escalabilidade e disponibilidade, aumentando segurança e performance.&lt;/span&gt;&lt;/p&gt;&lt;p  style=&quot;font-weight: bold; color: rgb(0, 0, 153);font-family:verdana;&quot;&gt;&lt;span style=&quot;font-weight: bold;font-size:85%;&quot; &gt;A comunidade Glassfish é extensa e bem integrada, possuindo milhares de desenvolvedores que produzem diversos videos , alem de possuir extensa documentação e diversos tutoriais, o que auxilia a adoção e configuração desta bela ferramenta tanto em ambiente de desenvolvimento, quanto em ambiente de produção.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;font-weight: bold; color: rgb(255, 102, 0); font-family: verdana;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;font-family: verdana; color: rgb(255, 102, 0); text-align: center; font-weight: bold; font-style: italic;&quot;&gt;Links Interessantes&lt;/p&gt;&lt;ul&gt;&lt;li style=&quot;font-weight: bold; font-style: italic; color: rgb(255, 102, 0);&quot;&gt;&lt;a href=&quot;http://www.sun.com/software/products/glassfishv3_prelude/&quot;&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;Glassfish v3 home&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li style=&quot;font-weight: bold; font-style: italic; color: rgb(255, 102, 0);&quot;&gt;&lt;a href=&quot;https://glassfish.dev.java.net/downloads/quickstart/index.html&quot;&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;Guia de instalação e deploy basico&lt;br /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li style=&quot;font-weight: bold; font-style: italic; color: rgb(255, 102, 0);&quot;&gt;&lt;a href=&quot;http://wiki.glassfish.java.net/&quot;&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;Glassfish Wiki&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li style=&quot;font-weight: bold; font-style: italic; color: rgb(255, 102, 0);&quot;&gt;&lt;a href=&quot;http://wiki.glassfish.java.net/Wiki.jsp?page=Screencasts&quot;&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;Videos com muita informação agregada!&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li style=&quot;font-weight: bold; font-style: italic; color: rgb(255, 102, 0);&quot;&gt;&lt;a href=&quot;http://blogs.sun.com/theaquarium/&quot;&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;The Aquarium(blog com todas novidades sobre Glassfish)&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li style=&quot;color: rgb(255, 102, 0);&quot;&gt;&lt;a href=&quot;http://java.sun.com/developer/technicalArticles/glassfish/GFandMySQL_Part1.html&quot;&gt;&lt;span style=&quot;font-weight: bold; font-style: italic; color: rgb(255, 102, 0);font-size:85%;&quot; &gt;Artigo sobreGlassfish e MySQL &lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://https//glassfishplugins.dev.java.net/&quot;&gt;&lt;span style=&quot;font-weight: bold; font-style: italic; color: rgb(255, 102, 0);font-size:85%;&quot; &gt;&lt;span style=&quot;color: rgb(255, 102, 0);&quot;&gt;Plugins&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p  style=&quot;font-weight: bold; color: rgb(0, 0, 153);font-family:verdana;&quot;&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;&lt;br /&gt;&lt;span style=&quot;text-decoration: underline;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://amsterdaintelligence.blogspot.com/feeds/2486858105774781926/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://amsterdaintelligence.blogspot.com/2008/12/glassfish-o-servidor-para-toda-obra.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7308500728033786786/posts/default/2486858105774781926'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7308500728033786786/posts/default/2486858105774781926'/><link rel='alternate' type='text/html' href='http://amsterdaintelligence.blogspot.com/2008/12/glassfish-o-servidor-para-toda-obra.html' title='Glassfish o servidor para toda obra!!'/><author><name>@williamgouvea</name><uri>http://www.blogger.com/profile/16737800888418990640</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiXgCyNKh33yvHTbk83E03NP-2_VEgR6dAblD4Daus1Z6NoufJ-_ovu0KdlMO4KlMwqlDiHfgVPefrqERTjJ-nkKZP7_S41tqN6sQ9-suaiqjp622XDcN72QNXCLNB5SCg/s220/trabalho.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgwkrMUhHeWYFT8hoSojRcpbs6LhW_gV3L7QgC0PSj0gfi3U9BdYtX-eMhyphenhyphenpccyzGkabP5TUMnnAIIAaWG3DhtPWRv0xhGm_DZvFs_gxhyDykvjWN1P9TIqdJvw3pjlA0ITMi1CYf4Xa6I/s72-c/2glassfish_logo_large_transparent.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7308500728033786786.post-732784115521231305</id><published>2009-02-13T15:00:00.000-08:00</published><updated>2009-07-07T22:46:39.959-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="cluster supercomputers sun"/><title type='text'>A Uniao faz a força!!!</title><content type='html'>&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhKdimz1wdQwBQuyGftH3OFZMxbLUgw5Ze_wa0aDJGgzi19cAmAiN8dxv_IyPKkR-wRzfmvmF9WP_pIdzVY60QxvbXbm1tuqpF9RmIpvtX9frgduOU_lAXSxiJgmAfUQ3NX_GFHEWXk8kA/s1600-h/alien-magic-matrix-3d-neo-communication-trinity-screensaver-is-just-a-reminder-that-everething-is-possible-in-this-funny-world.jpg&quot;&gt;&lt;img style=&quot;margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 300px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhKdimz1wdQwBQuyGftH3OFZMxbLUgw5Ze_wa0aDJGgzi19cAmAiN8dxv_IyPKkR-wRzfmvmF9WP_pIdzVY60QxvbXbm1tuqpF9RmIpvtX9frgduOU_lAXSxiJgmAfUQ3NX_GFHEWXk8kA/s400/alien-magic-matrix-3d-neo-communication-trinity-screensaver-is-just-a-reminder-that-everething-is-possible-in-this-funny-world.jpg&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5302310478376737634&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-weight: bold; color: rgb(102, 0, 204);font-size:85%;&quot; &gt;&lt;span style=&quot;font-family:verdana;&quot;&gt;&lt;span style=&quot;font-style: italic;font-size:130%;&quot; &gt;OS PORQUES DOS CLUSTERS!!!&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style=&quot;font-weight: bold; color: rgb(51, 255, 51);font-size:85%;&quot; &gt;&lt;span style=&quot;font-family:verdana;&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: rgb(255, 153, 0);&quot;&gt;Hoje começaremos a falar de um tema bem extenso, porem tentarei resumir alguns conceitos,  e um consideravel sumario de sites e blogs sobre este tema!!&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: rgb(255, 153, 0);&quot;&gt;   &lt;/span&gt;&lt;span style=&quot;color: rgb(255, 153, 0);font-family:verdana;&quot; &gt;Um cluster de computadores significa um amontoado de um ou mais computadores(nodes), que juntos realizam alguma tarefa ou função.O objetivo na maioria das vezes é dividir o problema em partes menores de forma a resolve-los, algo como divir para conquistar(em termos de arquitetura).Cluster sao usados em diversas areas, podendo destacar algumas:&lt;/span&gt; &lt;/span&gt;&lt;ul  style=&quot;font-weight: bold; color: rgb(255, 153, 0);font-family:verdana;&quot;&gt;&lt;li&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;Web(Varios servidores de aplicações com balanceamento de carga e proxy reverso)&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;Aplicações que necessitam interagir em ambientes distribuidos como as da plataforma JavaEE(EJB)&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;Banco de Dados, replicados me varias maquinas de forma a promover alta disponibilidade e em alguns casos cache&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;Inteligencia Artificial conectivista que necessita de enorme poder computacional para processar  e simular as milhares de ações de suas redes e funções&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;Aplicações cientificas e matematicas que exigem alta performance para calculos como processamento de graficos 3D, imagens e analise de audio/video&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style=&quot;font-weight: bold; color: rgb(255, 153, 0);font-size:85%;&quot; &gt;&lt;span style=&quot;font-family:verdana;&quot;&gt;Basicamente podemos definir que clusters são usadas na maioria das vezes para aumentar o poder computacional, providenciar encapsulamento e segurança,ou mesmo criar um sistema com tolerancia a falhas.&lt;/span&gt;  &lt;span style=&quot;font-family:verdana;&quot;&gt;Podemos citar algumas tecnicas para criar os mais diversos tipos de cluster, que devem ser estudadas a fundo sendo muita delas parte da biblioteca java ou extensões dela como:&lt;/span&gt; &lt;/span&gt;&lt;ul  style=&quot;font-weight: bold; color: rgb(255, 153, 0);font-family:verdana;&quot;&gt;&lt;li&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;Redes de computadores(java.net/java.nio)&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;Sistemas Operacionais(OpenSolaris, CentOS, Linux)&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;Threads e Multithreaded(java.concurrent,OpenMP,POSIX)&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;Redes P2P(JXTA)&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;Java EE 5/6(Glassfish v2/v3(High Avaibility)&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;RMI/Corba/WebServices(Metro/Jersey)&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;Arquiteturas Avançadas(OpenSparc, Sun Fire T1000)&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style=&quot;font-weight: bold; color: rgb(255, 153, 0);font-size:85%;&quot; &gt;&lt;span style=&quot;font-family:verdana;&quot;&gt;A Sun é uma empresa que alem de providenciar milhares de linhas de codigo opensource, tambem possui produtos de alta qualidade, segurança e desempenho  para mercado empresarial.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div  style=&quot;text-align: justify; font-weight: bold; color: rgb(51, 255, 51);font-family:verdana;&quot;&gt;&lt;span style=&quot;color: rgb(255, 153, 0);font-size:85%;&quot; &gt;Iniciativas como o OpenSolaris, Glassfish v2/v3, OpenWebServer,MySQL,Metro(WebServices) são criada a partir de uma grande infraestrutura e tecnologia criada pela empresa, que abre os codigos de seus produtos sobre licenças e incentiva o crescimento e interação de comunidades de desenvolvimento, fazendo com que tais produtos opensource tenham qualidade fora do comum, alem de atender a aspectos essenciais de mercado, como segurança, facilidade de deployment,facilidade de administração, alta performance e tolerancia a falhas.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div style=&quot;text-align: center; color: rgb(255, 153, 0);&quot;&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;&lt;span style=&quot;font-style: italic; color: rgb(102, 0, 204);font-size:130%;&quot; &gt;UM HISTORIA DE SUCESSO E FORÇA BRUTA!!!&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style=&quot;color: rgb(255, 153, 0);font-size:85%;&quot; &gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgtIylxtob4vkSMILfOxVLCzTHqEAfbUnpU4PEVZPTd3z6ksniJBaH4wm05v-5m7SdsBntShoBivwlzQplC0d39NxKALiB3l2qd1Pu_6uwPGs5n23nS_BisUwp9JuZxBiw2SdWGtiCKgZE/s1600-h/texassupercomp.jpg&quot;&gt;&lt;img style=&quot;margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 240px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgtIylxtob4vkSMILfOxVLCzTHqEAfbUnpU4PEVZPTd3z6ksniJBaH4wm05v-5m7SdsBntShoBivwlzQplC0d39NxKALiB3l2qd1Pu_6uwPGs5n23nS_BisUwp9JuZxBiw2SdWGtiCKgZE/s400/texassupercomp.jpg&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5302324357163056658&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Pesquisas avançadissimas como calcular e simular os primeiros estagios do Universo, computando dados de telescopios poderosissimos, a reatores e aceleradores de particulas, ate a procura por vida fora da Terra, necessitam de monstros da computação que possam efetuar tais tarefas.&lt;br /&gt;&lt;br /&gt;Para certas perguntas ,por exemplo, qual o estado do universo nos primeiros 1.7 bilhões de anos é utilizado o maior supercomputador do mundo, hospedado no TACC(Texas Advanced Computer Center) é a plataforma Ranger( inspirado no laptop de Chuck Norris =)&lt;br /&gt;&lt;br /&gt;Brincadeiras á parte, o Ranger é uma maravilha da computação, sendo o unico exemplo de utilização de alta tecnologia pra pesquisa e ciência na maior plataforma de computação aberta do mundo!!&lt;br /&gt;&lt;br /&gt;A National Science Foundation é responsavel por prover este computador em larga escala como serviço para pesquisadores e cientistas .&lt;br /&gt;&lt;br /&gt;Esta maquina foi montada totalmente na Sun e transportada e instalada no laboratorio, contando com uma configuração invejável a qualquer computador da Terra!&lt;br /&gt;&lt;/span&gt;&lt;ul style=&quot;font-style: italic; text-align: left; color: rgb(255, 153, 0);&quot;&gt;&lt;li&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;6000 metros quadrados para o datacenter, consumindo menos 3 MWatts&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;Mais de 4000 laminas quad-core Sun/Opteron&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;Mais de 120 TB de memoria RAM&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;Capacidade de computação maior que 500 TFlops&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;Tarefas agendadas por um Sun Grid Engine&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;Conectado por 2 switches Magnum, não-bloqueantes de 100 Tbit&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;Gerenciado pelo sistema de arquivos  Lustre&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;Mais de 2 PB de armazenamento&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;Todo o sistema e monitarado e gerenciado pelo xVM OpsCenter&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt; &lt;div style=&quot;text-align: center; font-style: italic; color: rgb(255, 153, 0);&quot;&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;&lt;span style=&quot;color: rgb(255, 153, 0);&quot;&gt;Links Interessantes&lt;/span&gt; &lt;/span&gt;&lt;/div&gt;&lt;span style=&quot;color: rgb(255, 153, 0);font-size:85%;&quot; &gt; &lt;/span&gt;&lt;ul style=&quot;text-align: left; color: rgb(255, 153, 0);&quot;&gt;&lt;li&gt;&lt;a href=&quot;http://wiki.lustre.org/index.php?title=Main_Page&quot;&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;Lustre File System&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://blogs.sun.com/jonathan/&quot;&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;Blog do Jonathan Schwartz(Sun CEO)&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://www.tacc.utexas.edu/ta/ta_display.php?ta_id=100379&quot;&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;TACC&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://www.sun.com/servers/hpc/SunConstellationPreview.jsp&quot;&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;Sun Constellation&lt;br /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://amsterdaintelligence.blogspot.com/feeds/732784115521231305/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://amsterdaintelligence.blogspot.com/2008/12/union-make-strength.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7308500728033786786/posts/default/732784115521231305'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7308500728033786786/posts/default/732784115521231305'/><link rel='alternate' type='text/html' href='http://amsterdaintelligence.blogspot.com/2008/12/union-make-strength.html' title='A Uniao faz a força!!!'/><author><name>@williamgouvea</name><uri>http://www.blogger.com/profile/16737800888418990640</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiXgCyNKh33yvHTbk83E03NP-2_VEgR6dAblD4Daus1Z6NoufJ-_ovu0KdlMO4KlMwqlDiHfgVPefrqERTjJ-nkKZP7_S41tqN6sQ9-suaiqjp622XDcN72QNXCLNB5SCg/s220/trabalho.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhKdimz1wdQwBQuyGftH3OFZMxbLUgw5Ze_wa0aDJGgzi19cAmAiN8dxv_IyPKkR-wRzfmvmF9WP_pIdzVY60QxvbXbm1tuqpF9RmIpvtX9frgduOU_lAXSxiJgmAfUQ3NX_GFHEWXk8kA/s72-c/alien-magic-matrix-3d-neo-communication-trinity-screensaver-is-just-a-reminder-that-everething-is-possible-in-this-funny-world.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7308500728033786786.post-1579853067569393794</id><published>2009-02-13T11:00:00.000-08:00</published><updated>2010-03-26T13:29:44.463-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="visualVM JMX  jconsole"/><title type='text'>Ferramentas de Gerenciamento Java 6</title><content type='html'>&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjDvhZKOhD2Qpm81A4LH1i7rEslrJ6U5iyxHqNkNRmPB_GiwV-bHnPxhfyWSVudKledHV2lh4-Ja5d12OXmtuEoHoClogjKXg0VpSFjdBVU7othR-pKCGlAakrAXbpANlavijjZ-rn3REM/s1600-h/velocimetro.bmp.jpeg&quot;&gt;&lt;img style=&quot;margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 276px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjDvhZKOhD2Qpm81A4LH1i7rEslrJ6U5iyxHqNkNRmPB_GiwV-bHnPxhfyWSVudKledHV2lh4-Ja5d12OXmtuEoHoClogjKXg0VpSFjdBVU7othR-pKCGlAakrAXbpANlavijjZ-rn3REM/s400/velocimetro.bmp.jpeg&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5302435909258892578&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;color: rgb(255, 0, 0);font-size:130%;&quot; &gt;&lt;span style=&quot;font-weight: bold;font-family:verdana;&quot; &gt;&lt;br /&gt;&lt;span style=&quot;font-style: italic;&quot;&gt;Post sobre o cinto de utilidades do Java, ou seja, todas as ferramentas que acompanham seu jdk e muitas bibliotecas contidas nas diversas especificações e plataformas.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-weight: bold; color: rgb(255, 102, 0);font-family:verdana;&quot; &gt;Somente apos o lançamento do Java 5(Tiger) ,o Java passou a contar com um maior numero de bibliotecas no nucleo, e otimizações na maquina virtual melhorando performance e outros problemas, tornando a lingugem robusta e muito poderosa alem de famosa.&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-weight: bold; color: rgb(255, 102, 0);font-size:130%;&quot; &gt;&lt;br /&gt;&lt;br /&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(255, 102, 0); font-weight: bold;font-size:130%;&quot; &gt;&lt;span style=&quot;font-family:verdana;&quot;&gt;Ja na versão atual, o Java 6(Mustang) poucas modificações foram adicionadas, mas algumas ferramentas merecem ser citadas como as mostradas neste artigo, que tem a função de gerenciar processos ocorrendo em uma maquina virtual.&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-weight: bold; color: rgb(255, 102, 0);font-size:130%;&quot; &gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style=&quot;color: rgb(255, 0, 0);font-size:130%;&quot; &gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: rgb(255, 0, 0);font-size:130%;&quot; &gt;  &lt;/span&gt; &lt;div  style=&quot;text-align: center; color: rgb(255, 102, 0); font-style: italic;font-family:verdana;&quot;&gt;&lt;span style=&quot;color: rgb(0, 153, 0);font-size:130%;&quot; &gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;font-size:180%;&quot;&gt;JMX&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;  &lt;/div&gt; &lt;span style=&quot;color: rgb(255, 102, 0);font-size:130%;&quot; &gt;  &lt;/span&gt; &lt;div style=&quot;text-align: justify; color: rgb(255, 102, 0);&quot;&gt;&lt;div style=&quot;color: rgb(255, 102, 0);&quot;&gt;&lt;span style=&quot;color: rgb(255, 102, 0); font-weight: bold;font-size:130%;&quot; &gt;&lt;span style=&quot;font-family:verdana;&quot;&gt;A tecnologia JMX(Java Managed Extensions) providencia a construção de aplicações distribuidas, baseadas na web, modulares e dinamicas que sejam soluções otimas para gerenciar e monitorar dispositivos,aplicações, e serviços de rede(WebServices).Pelo seu design, este standart é apropriado para adaptação em sistemas legados, implementação de novas soluções de gerenciamento/monitoramento e que possam ser plugadas a estes no futuro.&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-weight: bold; color: rgb(255, 102, 0);font-size:130%;&quot; &gt;    &lt;/span&gt;&lt;span style=&quot;color: rgb(255, 102, 0); font-weight: bold;font-size:130%;&quot; &gt;&lt;span style=&quot;font-family:verdana;&quot;&gt;Iniciado no Java 5, a tecnologia foi incluida na plataforma Java SE 6, fazendo com que seu uso esteja disponivel para desenvolvedores que queiram construir ferramentas de gerenciamento/monitoração de alta performance, tendo estatisticas sobre os recursos mais importantes como CPU, Memoria, Heap,Threads de forma simples(POO) e portavel(JVM).&lt;/span&gt;&lt;/span&gt;      &lt;span style=&quot;font-size:130%;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;span style=&quot;color: rgb(255, 0, 0);font-size:130%;&quot; &gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: rgb(255, 0, 0);font-size:130%;&quot; &gt;&lt;/span&gt;&lt;div style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;color: rgb(0, 153, 0);font-size:180%;&quot; &gt;&lt;span style=&quot;font-style: italic;&quot;&gt;&lt;span style=&quot;font-weight: bold;font-family:verdana;&quot; &gt;VisualVM&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;p  style=&quot;font-weight: bold; color: rgb(255, 102, 0); text-align: justify;font-family:verdana;&quot;&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;Java VisualVM é uma interface de usuario grafica e intuitiva que prove informações detalhadas sobre  aplicações baseadas na tecnologia  Java(Java Applications) enquanto eles estejam sendo executados na JVM dada.&lt;/span&gt;&lt;/p&gt;&lt;p  style=&quot;font-weight: bold; color: rgb(255, 102, 0); text-align: justify;font-family:verdana;&quot;&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;O nome VisualVM se deve ao fato que a interface Java VisualVM prover informações sobre a sua JVM de maneira visual!!! SEM A DOR DO CONSOLE!!!&lt;/span&gt;&lt;/p&gt;&lt;p  style=&quot;font-weight: bold; color: rgb(255, 102, 0); text-align: justify;font-family:verdana;&quot;&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;JavaVisualVM combina varias utilidades de monitoramento,analise de erros e perfil em uma unica ferramenta.Por exemplo, muita da funcionalidade oferecidas pelas ferramentas de console jmap,jstat e jstackforam integradas no Java VisualVM.&lt;/span&gt;&lt;/p&gt;&lt;p  style=&quot;font-weight: bold; color: rgb(255, 102, 0); text-align: justify;font-family:verdana;&quot;&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;Outras funcionalidades como as da ferramenta JConsole podem ser incorporadas atraves de plugins.&lt;/span&gt;&lt;/p&gt;&lt;p  style=&quot;font-weight: bold; color: rgb(255, 102, 0); text-align: justify;font-family:verdana;&quot;&gt;&lt;span style=&quot;font-size:180%;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p  style=&quot;font-weight: bold; color: rgb(255, 102, 0); text-align: center;font-family:verdana;&quot;&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;&lt;span style=&quot;font-style: italic; color: rgb(0, 153, 0);font-size:180%;&quot; &gt;Alguns screenshot da VisualVM:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEge2z9G8ZP-_OnMPZkxBdSZUznFdwnDMRU7832lmBCTfqWViEgzQGNOWyhdKmKjKVerLrNyqIfofR3irizQlx3ar8HBTueYlmBFdgPQRsexDT9lzyp4P7aIfKFvB64kn3j96B_zolS3woE/s1600-h/vvm-start1.png&quot;&gt;&lt;img style=&quot;margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 262px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEge2z9G8ZP-_OnMPZkxBdSZUznFdwnDMRU7832lmBCTfqWViEgzQGNOWyhdKmKjKVerLrNyqIfofR3irizQlx3ar8HBTueYlmBFdgPQRsexDT9lzyp4P7aIfKFvB64kn3j96B_zolS3woE/s400/vvm-start1.png&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5302429046404505634&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgf0gOs2W78Z0EEBXAirLkShNZJ_T0lu1MCNs5-7ATAxhgETlOUu2_lCteZrREwCEWcniEDQ-53H6hXpBYN7O1JDOFOgSPml0C_2Fej9QpYtLh__94Ds7e1MWUJVmZEQCeZK8N3q3PHyIQ/s1600-h/visualvm.png&quot;&gt;&lt;img style=&quot;margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 252px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgf0gOs2W78Z0EEBXAirLkShNZJ_T0lu1MCNs5-7ATAxhgETlOUu2_lCteZrREwCEWcniEDQ-53H6hXpBYN7O1JDOFOgSPml0C_2Fej9QpYtLh__94Ds7e1MWUJVmZEQCeZK8N3q3PHyIQ/s400/visualvm.png&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5302428879593186946&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiML6G6sGL8ztV60WmXmQ8NyQiJFo4N3TGaXBFH7aI8_6ALUPmtBP47ApyyWJAcp6nAPGlHhjYufLYl_Yz7Qz0w6S2JOpf7gHeV1ZOx5Ihx7eOIrIs7x3NZvhTs_WxiCRHmar6IIwzVbDs/s1600-h/visualvm3.png&quot;&gt;&lt;img style=&quot;margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 262px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiML6G6sGL8ztV60WmXmQ8NyQiJFo4N3TGaXBFH7aI8_6ALUPmtBP47ApyyWJAcp6nAPGlHhjYufLYl_Yz7Qz0w6S2JOpf7gHeV1ZOx5Ihx7eOIrIs7x3NZvhTs_WxiCRHmar6IIwzVbDs/s400/visualvm3.png&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5302429212256348722&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiuUI98ZISWPMTzJS97L5IlHyjqMntgoSRptBPgGKO5eFaeeeOTyhvXcC-7naK65vQa1QK_a_r_ks_Kk7eZe0BA3aeOpBREV6ZlEPAXhVrDxJ2oPj_AezYo3zHJslPITrAeULP5dYO4I8o/s1600-h/visualvm2.png&quot;&gt;&lt;img style=&quot;margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 262px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiuUI98ZISWPMTzJS97L5IlHyjqMntgoSRptBPgGKO5eFaeeeOTyhvXcC-7naK65vQa1QK_a_r_ks_Kk7eZe0BA3aeOpBREV6ZlEPAXhVrDxJ2oPj_AezYo3zHJslPITrAeULP5dYO4I8o/s400/visualvm2.png&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5302429137465572370&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p  style=&quot;font-weight: bold; color: rgb(255, 102, 0); text-align: justify;font-family:verdana;&quot;&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p  style=&quot;font-weight: bold; color: rgb(255, 102, 0); text-align: justify;font-family:verdana;&quot;&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;Para utilizar a VisualVM você deve entrar na pasta onde instalou seu jdk e em seguida navegar até a pasta bin utlizando seguinte comando(Ubuntu 8.10):&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p  style=&quot;font-weight: bold; color: rgb(255, 102, 0); text-align: center;font-family:verdana;&quot;&gt;&lt;span style=&quot;font-size:180%;&quot;&gt;&lt;script src=&quot;http://pastie.org/388763.js&quot;&gt;&lt;/script&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 153, 0);font-size:180%;&quot; &gt;&lt;span style=&quot;font-weight: bold;font-family:verdana;&quot; &gt;Vejam outras tecnologias incorporadas no Java 6 nos proximos posts!!!&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p  style=&quot;font-weight: bold; color: rgb(255, 102, 0); text-align: center;font-family:verdana;&quot;&gt;&lt;span style=&quot;color: rgb(0, 153, 0);font-size:180%;&quot; &gt;&lt;span style=&quot;font-weight: bold;font-family:verdana;&quot; &gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt; &lt;/p&gt;&lt;div style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;color: rgb(0, 153, 0); font-weight: bold;font-size:180%;&quot; &gt;&lt;span style=&quot;font-style: italic;font-family:verdana;&quot; &gt;&lt;span style=&quot;color: rgb(255, 102, 0);&quot;&gt;Links interessantes:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;text-decoration: underline;font-size:130%;&quot; &gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;font-size:180%;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div style=&quot;text-align: left; color: rgb(0, 153, 0); font-weight: bold;&quot;&gt; &lt;ul&gt;&lt;li&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;&lt;a href=&quot;http://java.sun.com/javase/technologies/core/mntr-mgmt/javamanagement/best-practices.jsp&quot;&gt;Boas praticas com Mbeans e JMX&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;&lt;a href=&quot;http://java.sun.com/javase/technologies/core/mntr-mgmt/javamanagement/docs.jsp&quot;&gt;Documentação&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;&lt;a href=&quot;http://java.sun.com/javase/technologies/core/mntr-mgmt/javamanagement/articles.jsp&quot;&gt;Artigos&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt; &lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;text-align: left; color: rgb(255, 102, 0); font-weight: bold;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style=&quot;text-decoration: underline;&quot;&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://amsterdaintelligence.blogspot.com/feeds/1579853067569393794/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://amsterdaintelligence.blogspot.com/2009/01/ferramentas-de-gerenciamento-java-6.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7308500728033786786/posts/default/1579853067569393794'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7308500728033786786/posts/default/1579853067569393794'/><link rel='alternate' type='text/html' href='http://amsterdaintelligence.blogspot.com/2009/01/ferramentas-de-gerenciamento-java-6.html' title='Ferramentas de Gerenciamento Java 6'/><author><name>@williamgouvea</name><uri>http://www.blogger.com/profile/16737800888418990640</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiXgCyNKh33yvHTbk83E03NP-2_VEgR6dAblD4Daus1Z6NoufJ-_ovu0KdlMO4KlMwqlDiHfgVPefrqERTjJ-nkKZP7_S41tqN6sQ9-suaiqjp622XDcN72QNXCLNB5SCg/s220/trabalho.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjDvhZKOhD2Qpm81A4LH1i7rEslrJ6U5iyxHqNkNRmPB_GiwV-bHnPxhfyWSVudKledHV2lh4-Ja5d12OXmtuEoHoClogjKXg0VpSFjdBVU7othR-pKCGlAakrAXbpANlavijjZ-rn3REM/s72-c/velocimetro.bmp.jpeg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7308500728033786786.post-3128903897167652418</id><published>2009-02-11T10:58:00.001-08:00</published><updated>2009-02-11T12:16:34.826-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="threads java multicore multithread"/><title type='text'>Threads at Work PARTE 1</title><content type='html'>&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgDy-91B2XtwcR5vBybC1d_l_mo_ZyMNBSVlU0RZsFhDbYI62RzyfzMwuzb_yR8zjKyLI6hGQiliAH0qY27HnGuqLVZwsra2SXbmrihh-G2edEkzMZOXrFZy4qU-wASzymI_zDlLSQj8V0/s1600-h/man_at_work.jpg&quot;&gt;&lt;img style=&quot;margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 271px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgDy-91B2XtwcR5vBybC1d_l_mo_ZyMNBSVlU0RZsFhDbYI62RzyfzMwuzb_yR8zjKyLI6hGQiliAH0qY27HnGuqLVZwsra2SXbmrihh-G2edEkzMZOXrFZy4qU-wASzymI_zDlLSQj8V0/s400/man_at_work.jpg&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5301636125161758066&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div style=&quot;text-align: center; color: rgb(255, 102, 0); font-weight: bold; font-style: italic; font-family: verdana;&quot;&gt;&lt;span style=&quot;font-size:180%;&quot;&gt;&lt;br /&gt;THREADS&lt;/span&gt;&lt;span style=&quot;color: rgb(102, 0, 204);font-size:180%;&quot; &gt;&lt;span style=&quot;color: rgb(0, 153, 0);&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt; &lt;/div&gt;&lt;span style=&quot;color: rgb(102, 0, 204);font-size:85%;&quot; &gt; &lt;span style=&quot;font-weight: bold;font-family:verdana;&quot; &gt;Basicamente, threads são linhas de execuções que possuem mesmo contexto de software vinculados á espaços de memoria de um processo pai, porem possuem contexto de hardware diferente.Desta forma, podemos caracteriza-las como processos leves, ja que o escalonamento de threads é muito mais barato e leve do que o escalonamento de processos(OS que faz isso!!).&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;  &lt;/span&gt;&lt;div style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;color: rgb(255, 102, 0);font-size:85%;&quot; &gt;&lt;span style=&quot;font-weight: bold; font-style: italic;font-size:100%;&quot; &gt;&lt;span style=&quot;font-family:verdana;&quot;&gt;O QUE POSSO FAZER COM THREADS?&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; &lt;/div&gt;&lt;span style=&quot;color: rgb(102, 0, 204);font-size:85%;&quot; &gt; &lt;span style=&quot;font-weight: bold;font-family:verdana;&quot; &gt;A vantagem do uso de threads se mostra em diversas areas como:&lt;/span&gt; &lt;/span&gt;&lt;ul style=&quot;font-weight: bold; font-family: verdana; color: rgb(102, 0, 204);&quot;&gt;&lt;li&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;Swing(Aplicações Desktop)&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;I/O(Arquivos, Base de Dados)&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;Networking(Sockets, HTTP Connections)&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;Clusters(RMI, EJB,JXTA)&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;Robotics(Threads para sensores)&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style=&quot;color: rgb(102, 0, 204);font-size:85%;&quot; &gt; &lt;span style=&quot;font-weight: bold;font-family:verdana;&quot; &gt;Mas o ambiente de utilização de programação usando threads é muito maior.&lt;/span&gt; &lt;span style=&quot;font-weight: bold;font-family:verdana;&quot; &gt;Podemos fazer com que nossas aplicações façam calculos extensivos em tarefas diferentes e quando estes terminarem nossa GUI é então atualizada, sem que a interface fique congelada, algo que pode ocorrer em calculos muito complexos.&lt;/span&gt;  &lt;span style=&quot;font-weight: bold;font-family:verdana;&quot; &gt;Da mesma maneira, não precisamos esperar que todo um arquivo(ou stream de dados) seja transferido por completo, para que possamos fazer outras ações.&lt;/span&gt; &lt;span style=&quot;font-weight: bold;font-family:verdana;&quot; &gt;Alem disso, em muitas aplicações temos que atender a inumeras requisiçõesde inumeros clientes da aplicação, fazer milhares de calculos em paralelo ou esperar por inumeros eventos e executa-los de forma paralela.&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;color: rgb(255, 102, 0); font-family: verdana; font-style: italic;font-size:100%;&quot; &gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;O QUE É AMBIENTE MULTITHREAD OU MULTITAREFA??&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style=&quot;color: rgb(102, 0, 204);font-size:85%;&quot; &gt;&lt;span style=&quot;font-weight: bold;font-family:verdana;&quot; &gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: rgb(102, 0, 204);font-size:85%;&quot; &gt;&lt;span style=&quot;font-weight: bold;font-family:verdana;&quot; &gt;Um processo que pode se dividir sua missão em diversas tarefas, tornando sua execução multitarefa ou multithread.&lt;/span&gt;  &lt;span style=&quot;font-weight: bold;font-family:verdana;&quot; &gt;Porem a programação com threads tem alguns topicos que tornam aplicações com threads um vasto assunto e complexas, como o caso onde ocorre algum deadlock.&lt;/span&gt;  &lt;span style=&quot;font-weight: bold;font-family:verdana;&quot; &gt;Deadlock ou &quot;abraço da morte&quot;  pode ser entendido da seguinte maneira:&lt;/span&gt; &lt;/span&gt;&lt;ul style=&quot;font-weight: bold; font-family: verdana; color: rgb(102, 0, 204);&quot;&gt;&lt;li&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;Thread t1 invoca um metodo 1 que tenta acessar algum metodo 2 de uma Thread t2&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;Ao ser invocado, o metodo 2 da t2 chama o metodo 1 de t1 que ainda espera o retorno do metodo 2 que pelo que podemos notar, noa ira retornar&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style=&quot;color: rgb(102, 0, 204);font-size:85%;&quot; &gt;&lt;span style=&quot;font-weight: bold;font-family:verdana;&quot; &gt;Basicamente o que acontece é um loop infinito ,pois um sempre que uma thread invoca seu metodo ele espera retorno e o metodo intrinseco deste espera o retorno do primeiro metodo.&lt;/span&gt;  &lt;span style=&quot;font-weight: bold;font-family:verdana;&quot; &gt;Confuso não??Se é para você imagine para seus programas e seus clientes!!&lt;/span&gt; &lt;span style=&quot;font-weight: bold;font-family:verdana;&quot; &gt;Devemos sempre lembrar (pois todos conhecem de sistemas operacionais!!) que se você necessita que suas operações ocorram em um determinada ordem, você nao esta programando de forma multithreaded,e sim de forma convencional sequencial.&lt;/span&gt; &lt;span style=&quot;font-weight: bold;font-family:verdana;&quot; &gt;Se mesmo assim você utilizar  tal recurso, muitos bugs graves podem acontecer de forma a corromper seus dados.Tudo isso ocorre porque o programador não tem controle sobre como são escalonados suas threads, este papel e do sistema operacional.Portanto se tarefas necessitam ser executadas em paralelo, então elas devem ser mutuamente exclusivas ou seja, não devem &quot;depender de dados de outras tarefas&quot;.&lt;/span&gt;  &lt;span style=&quot;font-weight: bold;font-family:verdana;&quot; &gt;Um thread possui estados finitos que caracterizam basicamente seu ciclo de execução:&lt;/span&gt; &lt;/span&gt;&lt;ul style=&quot;font-weight: bold; font-family: verdana; color: rgb(102, 0, 204);&quot;&gt;&lt;li&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;criada&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;executando&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;pronto&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;bloqueio&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;termino&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style=&quot;color: rgb(255, 255, 0);font-size:85%;&quot; &gt;&lt;span style=&quot;font-weight: bold;font-family:verdana;&quot; &gt;&lt;span style=&quot;color: rgb(102, 0, 204);&quot;&gt;A thread é criada.Se ela for escalonada ela entra no estado de execução e e segue efetuando seus calculos.Se ocorre a troca de contexto, antes dela terminar , a thread entra na fila de threads prontas, que esperam uma proxima oportunidade para executar.No caso de uma operação I/O por exemplo, a thread é bloqueada enquanto aguarda o sinal de termino da operação, emitido por algum dispositivo,fazendo com que o sistema operacional escalone a thread que iniciou a operação para que esta possa continuar sua execução.Quando todos os calculos são concluidos, ela termina&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family: verdana; font-weight: bold; color: rgb(51, 204, 0);font-size:85%;&quot; &gt;Nos proximos posts mostraremos caracteristicas que fazem do Java uma otima linguagem para criar programas multitarefa, e muitos exemplos de como faze-lo!&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; color: rgb(255, 102, 0);font-size:85%;&quot; &gt; &lt;/span&gt;&lt;div style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-weight: bold; color: rgb(255, 102, 0);font-size:130%;&quot; &gt;&lt;span style=&quot;font-family:verdana;&quot;&gt;Links Interessantes&lt;/span&gt;&lt;/span&gt; &lt;/div&gt;&lt;ul&gt;&lt;li style=&quot;font-family: verdana; font-weight: bold; color: rgb(255, 102, 0);&quot;&gt;&lt;a href=&quot;http://java.sun.com/docs/books/tutorial/essential/concurrency/index.html&quot;&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;Sun Tutorial, sessão de threads&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://pt.wikipedia.org/wiki/Thread_%28ci%C3%AAncia_da_computa%C3%A7%C3%A3o%29&quot;&gt;&lt;span style=&quot;font-weight: bold; color: rgb(255, 102, 0);font-size:85%;&quot; &gt;&lt;span style=&quot;font-family:verdana;&quot;&gt;Wikipedia arigo sobre Threads&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;</content><link rel='replies' type='application/atom+xml' href='http://amsterdaintelligence.blogspot.com/feeds/3128903897167652418/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://amsterdaintelligence.blogspot.com/2009/02/threads-at-work-parte-1.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7308500728033786786/posts/default/3128903897167652418'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7308500728033786786/posts/default/3128903897167652418'/><link rel='alternate' type='text/html' href='http://amsterdaintelligence.blogspot.com/2009/02/threads-at-work-parte-1.html' title='Threads at Work PARTE 1'/><author><name>@williamgouvea</name><uri>http://www.blogger.com/profile/16737800888418990640</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiXgCyNKh33yvHTbk83E03NP-2_VEgR6dAblD4Daus1Z6NoufJ-_ovu0KdlMO4KlMwqlDiHfgVPefrqERTjJ-nkKZP7_S41tqN6sQ9-suaiqjp622XDcN72QNXCLNB5SCg/s220/trabalho.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgDy-91B2XtwcR5vBybC1d_l_mo_ZyMNBSVlU0RZsFhDbYI62RzyfzMwuzb_yR8zjKyLI6hGQiliAH0qY27HnGuqLVZwsra2SXbmrihh-G2edEkzMZOXrFZy4qU-wASzymI_zDlLSQj8V0/s72-c/man_at_work.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7308500728033786786.post-1484244434250527768</id><published>2009-02-10T07:57:00.000-08:00</published><updated>2009-02-10T15:56:56.855-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="virtualização opensolaris virtualbox"/><title type='text'>OpenSolaris e o VirtualBox</title><content type='html'>&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj27BkwCKveyi_YCtRTtnx3mtiRuYinxSWzdQrWnjoLw9eijRzMcYY75A0EMHNK7-KucKByRGULYloSPC72bZafWF9FLBKkuUSG5M5trCBpNBiZJTVBiSt4x8t6dQoBDvmXYFA5eTFTXwo/s1600-h/vbox_logo2_gradient.png&quot;&gt;&lt;img style=&quot;margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 140px; height: 180px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj27BkwCKveyi_YCtRTtnx3mtiRuYinxSWzdQrWnjoLw9eijRzMcYY75A0EMHNK7-KucKByRGULYloSPC72bZafWF9FLBKkuUSG5M5trCBpNBiZJTVBiSt4x8t6dQoBDvmXYFA5eTFTXwo/s400/vbox_logo2_gradient.png&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5301217674411853058&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;p style=&quot;font-weight: bold; color: rgb(102, 0, 204); text-align: center; font-style: italic;&quot;&gt; &lt;span style=&quot;font-size:100%;&quot;&gt;&lt;span class=&quot;searchword0&quot;&gt;PORQUE VIRTUALIZAR?!?!&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;font-weight: bold; color: rgb(51, 204, 0);&quot;&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;&lt;span class=&quot;searchword0&quot;&gt;A maioria das pessoas quando pensa em virtualizar, associa a coisa que não existem, ou imaginarias mas esquecem o que realmente esta por trás disto tudo.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;font-weight: bold; color: rgb(51, 204, 0);&quot;&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;&lt;span class=&quot;searchword0&quot;&gt;Basicamente virtualização significa capacidade de esconder os dados ou caracteristicas de um sistema do usuario, atraves de uma interface.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;font-weight: bold; color: rgb(51, 204, 0);&quot;&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;&lt;span class=&quot;searchword0&quot;&gt;No caso so Second Life por exemplo, atraves de avatares, faz com que pessoas trabalhem, se comuniquem, e criem interação em diversos niveis, sem basicamente expor suas vida reais!&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;font-weight: bold; color: rgb(51, 204, 0);&quot;&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;&lt;span class=&quot;searchword0&quot;&gt;Podemos verificar este conceito em diversas areas, como Designs Patterns Proxy e Facade muito usados em linguagens OO para fazer bom uso do encapsulamento(Programe sempre orientado a interface e não a implementação!).&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;font-weight: bold; color: rgb(51, 204, 0);&quot;&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;&lt;span class=&quot;searchword0&quot;&gt;Outra grande area seria na criação de soluções de computação distribuida, como cluster para diversas areas como:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;font-weight: bold; color: rgb(51, 204, 0);&quot;&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;&lt;span class=&quot;searchword0&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul style=&quot;font-weight: bold; color: rgb(51, 204, 0);&quot;&gt;&lt;li&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;&lt;span class=&quot;searchword0&quot;&gt;Alta Disponibilidade(Proxy Balance)&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;&lt;span class=&quot;searchword0&quot;&gt;Alta Performance(Metaclusters, Map/Reduce)&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;&lt;span class=&quot;searchword0&quot;&gt;Sistema de multicamada(RMI, EJB, Threads)&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;&lt;span class=&quot;searchword0&quot;&gt;Tolerancia a Falhas(RAID)&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;&lt;span class=&quot;searchword0&quot;&gt;CRUD(Banco de Dados)&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;&lt;span class=&quot;searchword0&quot;&gt;Pool de threads(JDBC/Glassfish Runtimes)&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;&lt;span class=&quot;searchword0&quot;&gt;Algoritmos Paralelos&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;&lt;span class=&quot;searchword0&quot;&gt;JVM(Maquinas Virtuais!!)&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;&lt;span class=&quot;searchword0&quot;&gt;Algoritmos Geneticos e Redes Neurais&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style=&quot;font-weight: bold; color: rgb(51, 204, 0);font-size:85%;&quot; &gt;Porem nosso foco de post(!!!) é sobre ambiente de virtualização em ambientes tanto desktop quanto em servidores, fazendo com que diversos sistemas operacionais possam rodar em um mesmo ambiente fisico, abstraindo as nuances e particularidades do hardware em questão como drivers e arquiteturas.Neste quesito aparece o Virtual Box!&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;p style=&quot;font-weight: bold; color: rgb(51, 204, 0);&quot;&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;&lt;span class=&quot;searchword0&quot;&gt;Virtual Box é uma familia de poderosos produtos de virtualização x86 para empresas e tambem para uso desktop.Não apenas  muito rico de caracteristicas, como tambem  é produto de altissima performance para clientes empresariais, sendo a unica solução disponivel de graça atraves do OpenSource sobre liçensa GPL(Gnu).&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;span style=&quot;font-weight: bold; color: rgb(51, 204, 0);font-size:85%;&quot; &gt;Virtual Box roda em Windows, Linux, Macintosh e OpenSolaris e suporta inumeros sistemas operacionais nao se limitando a Windows(XP,Server 2003,Vista),Linux(2.4 e 2.6), Solaris e OpenSolaris e OpenBSD.&lt;br /&gt;&lt;/span&gt;&lt;p style=&quot;font-weight: bold; color: rgb(51, 204, 0);&quot;&gt;&lt;span style=&quot;font-size:85%;&quot;&gt; Virtual Box é desenvolvido constantemente e disponibilizado frequentemente na forma d erelases, tendo sempre uma lista crescente de quesitos para suportar sistemas operacionais e plataformasao qual ele opera.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;font-weight: bold; color: rgb(51, 204, 0);&quot;&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;O suporte é dado pelo esforço da comunidade baseada em uma companhia dedicatada, ao qual qualquer um esta apto a contribuir, enquanto a SUN garante que o produto sempre possua uma padrão de qualidade professional.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style=&quot;font-weight: bold; color: rgb(51, 204, 0);font-size:85%;&quot; &gt;No site do oficial do Virtual Box  todos podem ter acesso á documentação, downloads, codigo-fonte e documentos com arquitetura e dicas.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-weight: bold; color: rgb(51, 204, 0);font-size:85%;&quot; &gt;Para instalação do OpenSolaris sobre qualquer sistema operacional,pode se usar o Virtual Box de forma que as configurações de boot da maquina nao sejam alteradas, proporcionando um ambiente facil e seguro para testar e desenvolver com OpenSolaris.  &lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;font-weight: bold; color: rgb(51, 204, 0);&quot;&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;Neste link, você pode ver um tutorial sobre como instalar o Virtual Box e OpenSolaris, criando imagens de disco rigido e setando algumas propriedades de performance.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;font-weight: bold; text-align: center; color: rgb(255, 102, 0);&quot;&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;Links Interessantes&lt;/span&gt;&lt;/p&gt;&lt;ul style=&quot;font-weight: bold; color: rgb(255, 102, 0);&quot;&gt;&lt;li&gt;&lt;a href=&quot;http://www.virtualbox.org/&quot;&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;Site Virtual Box&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://dlc.sun.com/osol/docs/content/IPS/virtualbox.html&quot;&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;OpenSolaris no Virtual Box&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;&lt;a href=&quot;http://blogs.sun.com/arungupta/entry/totd_64_opensolaris_2008_11&quot;&gt;Arun Gupta(instalando OpenSolaris 2008.11no VirtualBox)&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p style=&quot;font-weight: bold; color: rgb(255, 102, 0);&quot;&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://amsterdaintelligence.blogspot.com/feeds/1484244434250527768/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://amsterdaintelligence.blogspot.com/2009/02/opensolaris-e-o-virtualbox.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7308500728033786786/posts/default/1484244434250527768'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7308500728033786786/posts/default/1484244434250527768'/><link rel='alternate' type='text/html' href='http://amsterdaintelligence.blogspot.com/2009/02/opensolaris-e-o-virtualbox.html' title='OpenSolaris e o VirtualBox'/><author><name>@williamgouvea</name><uri>http://www.blogger.com/profile/16737800888418990640</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiXgCyNKh33yvHTbk83E03NP-2_VEgR6dAblD4Daus1Z6NoufJ-_ovu0KdlMO4KlMwqlDiHfgVPefrqERTjJ-nkKZP7_S41tqN6sQ9-suaiqjp622XDcN72QNXCLNB5SCg/s220/trabalho.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj27BkwCKveyi_YCtRTtnx3mtiRuYinxSWzdQrWnjoLw9eijRzMcYY75A0EMHNK7-KucKByRGULYloSPC72bZafWF9FLBKkuUSG5M5trCBpNBiZJTVBiSt4x8t6dQoBDvmXYFA5eTFTXwo/s72-c/vbox_logo2_gradient.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7308500728033786786.post-6285403717673309498</id><published>2009-02-09T16:31:00.000-08:00</published><updated>2009-02-09T17:20:23.837-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="netbeans jpa javadb swing matisse"/><title type='text'>Criando um aplicação de forma simples com Netbeans</title><content type='html'>&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjeSfFkWAnkG-7i4-T4X3x9vtxJyselJHWlWNj9P6wd4l0KuKlPV5DMNRf9DZg4UNlkKSrqkhIvueVkkB5_PnXYSIWB46sHsWred4tMQWwdqxDUx0FCvAv7gbWcgJ9_DN2BIn92xgf5rfI/s1600-h/JPA+Swing.png&quot;&gt;&lt;img style=&quot;margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 283px; height: 400px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjeSfFkWAnkG-7i4-T4X3x9vtxJyselJHWlWNj9P6wd4l0KuKlPV5DMNRf9DZg4UNlkKSrqkhIvueVkkB5_PnXYSIWB46sHsWred4tMQWwdqxDUx0FCvAv7gbWcgJ9_DN2BIn92xgf5rfI/s400/JPA+Swing.png&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5300972074364965042&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;span style=&quot;font-weight: bold; color: rgb(0, 0, 153);font-size:85%;&quot; &gt;&lt;span style=&quot;font-family:verdana;&quot;&gt;&lt;br /&gt;O Netbeans é uma IDE robusta, com suporte a inumeras linguagens e possui principalmente em Java, diversos recursos para o desenvolvimento de aplicaçoes sejam Desktop, Web ou Moveis.Ele possui uma gama imensa de componentes  e plug-ins utilizando o melhor do vasto ecossitema de tecnologias Java para as plataformas SE, EE, ME, FX.&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family:verdana;&quot;&gt; A especificação JPA(Java Persistence API) que reuniu e consolidou o mapeamento objeto-relacional orientado a objetos para Java.Muito inspirada pelo Hibernate(quase tudo!!) , que é uma implementação dessa especificação.&lt;br /&gt;&lt;br /&gt;Basicamente, tal API facilita a vida dos programadores na hora de mapear suas classes para banco de dados relacionais(MySQL, PostGreSQL, JavaDB) atraves de anotations que marcam seus atributos,classes e keys e oferencendo um gerenciador de entidades que faz o serviço sujo!!&lt;br /&gt;&lt;br /&gt;Muitos acreditam que este seria o fim do design pattern DAO onde são criadas classes que encapsulam a responsabilidade de persistire selecionar seus objetos.Outros perguntam o que seria melhor, Hibernate ou JPA.Podemos responder as duas perguntas da seguitne forma como a propria equipe de experts do Java EE:&lt;br /&gt;&lt;br /&gt;O padrão DAO faz com que o sistema fique coeso, encapsulado e facil de escalar e aplicar mnautenção, ja que os mecanismos com os quais a persistenciaé feita (atraves do JDBC) ficam invisiveis atras da interface para efetuar tais serviços.&lt;br /&gt;&lt;blockquote&gt;&lt;/blockquote&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-family: verdana; font-weight: bold; color: rgb(0, 0, 153);font-size:85%;&quot; &gt;A idéia da persistência O/R é reunir as vantagens de se utilizar um modelo orientado a objetos para a construção de uma aplicação, com a performace e a confiabilidade dos bancos de dados relacionais.&lt;/span&gt;&lt;br /&gt;&lt;div style=&quot;text-align: left; font-family: verdana; font-weight: bold; color: rgb(0, 0, 153);&quot;&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style=&quot;font-weight: bold; color: rgb(0, 0, 153);font-size:85%;&quot; &gt;&lt;span style=&quot;font-family:verdana;&quot;&gt;Antes, as complexidades do SQL era reduzidas atraves do JDBC, mas de forma ingenua, ja que o JDBC prove somente o acesso as operações basicas do bancos de dados, como CREATE,SELECT,DELETE,UPDATE, alem de criar conexões baseadas nos drivers para cada banco, ou seja, criam pontes para você criar suas tabelas, popula-las, edita-las e executar suas consultas, mas nao abstrai de você o codigo SQL  escrito por DBA&#39;s que nao pensam em OO, e nao se preocupam com portabilidade, manutenabilidade entre outras caracteristicas de um bom sistema OO.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; color: rgb(0, 0, 153);font-size:85%;&quot; &gt;&lt;span style=&quot;font-family:verdana;&quot;&gt;Dentre os inumeros tutoriais oferecidos no site do Netbeans, utilizando tecnologias de vanguarda e boas praticas podemos destacar, o da criação de uma aplicação desktop que acessa bano de dados, cujo esqueleto(MVC) é gerado proporcionando mapeamento de tabelas para objetos(JPA-JSR220), e uma interface de formulario com Swing contendo um frame principal , os componentes para cada tipo de dado, e a possibilidade de customização atraves da tecnologia de beans biding(JSR-295) que conecta atributos de objeto ou entidade á campos no formulario.&lt;/span&gt;  &lt;/span&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://www.netbeans.org/kb/60/java/gui-db.html&quot;&gt;&lt;span style=&quot;font-weight: bold; color: rgb(0, 0, 153);font-size:85%;&quot; &gt;&lt;span style=&quot;font-family:verdana;&quot;&gt;Tutorial no site do Netbeans&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://www.netbeans.org/download/flash/netbeans_6_gui_builder/netbeans_6_gui_builder.html&quot;&gt;&lt;span style=&quot;font-weight: bold; color: rgb(0, 0, 153);font-size:85%;&quot; &gt;&lt;span style=&quot;font-family:verdana;&quot;&gt;Video do tutorial(10 MINUTOS)&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; color: rgb(0, 153, 0);font-size:85%;&quot; &gt;&lt;span style=&quot;font-family:verdana;&quot;&gt;Links Interessantes:&lt;/span&gt;&lt;/span&gt;  &lt;ul&gt;&lt;li style=&quot;font-family: verdana; font-weight: bold; color: rgb(0, 153, 0);&quot;&gt;&lt;a href=&quot;http://java.sun.com/javaee/technologies/persistence.jsp&quot;&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;Overview, Tutoriais e Artigos sobre JPA&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li style=&quot;font-family: verdana; font-weight: bold; color: rgb(0, 153, 0);&quot;&gt;&lt;a href=&quot;https://beansbinding.dev.java.net/&quot;&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;Beans Biding(JSR-295)&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li style=&quot;font-family: verdana; font-weight: bold; color: rgb(0, 153, 0);&quot;&gt;&lt;a href=&quot;http://java.sun.com/developer/technicalArticles/javase/swingappfr/&quot;&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;Swing Framework(JSR-296)&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://developers.sun.com/javadb/&quot;&gt;&lt;span style=&quot;font-weight: bold; color: rgb(0, 153, 0);font-size:85%;&quot; &gt;&lt;span style=&quot;font-family:verdana;&quot;&gt;JavaDB(Apache Derby)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-weight: bold; color: rgb(255, 0, 0);font-size:100%;&quot; &gt;&lt;span style=&quot;font-family:verdana;&quot;&gt;BONS ESTUDOS E ATÉ O PROXIMO POST !!&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://amsterdaintelligence.blogspot.com/feeds/6285403717673309498/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://amsterdaintelligence.blogspot.com/2009/02/criando-um-aplicacao-de-forma-simples.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7308500728033786786/posts/default/6285403717673309498'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7308500728033786786/posts/default/6285403717673309498'/><link rel='alternate' type='text/html' href='http://amsterdaintelligence.blogspot.com/2009/02/criando-um-aplicacao-de-forma-simples.html' title='Criando um aplicação de forma simples com Netbeans'/><author><name>@williamgouvea</name><uri>http://www.blogger.com/profile/16737800888418990640</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiXgCyNKh33yvHTbk83E03NP-2_VEgR6dAblD4Daus1Z6NoufJ-_ovu0KdlMO4KlMwqlDiHfgVPefrqERTjJ-nkKZP7_S41tqN6sQ9-suaiqjp622XDcN72QNXCLNB5SCg/s220/trabalho.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjeSfFkWAnkG-7i4-T4X3x9vtxJyselJHWlWNj9P6wd4l0KuKlPV5DMNRf9DZg4UNlkKSrqkhIvueVkkB5_PnXYSIWB46sHsWred4tMQWwdqxDUx0FCvAv7gbWcgJ9_DN2BIn92xgf5rfI/s72-c/JPA+Swing.png" height="72" width="72"/><thr:total>0</thr:total></entry></feed>