<?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-3179991594448154975</id><updated>2026-05-08T05:17:17.983-03:00</updated><category term="Java"/><category term="IDE"/><category term="Ciências da Computação"/><category term="Exames"/><category term="POSCOMP"/><category term="Pós-Graduação"/><category term="E-learning"/><category term="Banco de Dados"/><category term="Big Data"/><category term="Classpath"/><category term="Data Science"/><category term="DevOps"/><category term="English"/><category term="Eventos"/><category term="Google Spreadsheet"/><category term="H2"/><category term="JavaScript"/><category term="Linux"/><category term="Netbeans"/><category term="OCJP"/><category term="PaaS"/><category term="Pastebin"/><category term="R"/><category term="SCM"/><category term="SQL"/><category term="Scala"/><category term="Skype"/><category term="Web Scale"/><category term="Weblogic"/><title type='text'>Anthony Accioly</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://a.accioly.7rtc.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3179991594448154975/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://a.accioly.7rtc.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Anthony Accioly</name><uri>http://www.blogger.com/profile/11204999973940488842</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>17</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-3179991594448154975.post-3089187286072802259</id><published>2015-08-13T19:35:00.001-03:00</published><updated>2015-08-13T20:34:43.474-03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="IDE"/><category scheme="http://www.blogger.com/atom/ns#" term="JavaScript"/><title type='text'>Life&#39;s too short not to be Irish! E um pouco de bruxaria com Emmet</title><content type='html'>&lt;div style=&quot;text-align: justify;&quot;&gt;
Pessoal, sei que o blog anda meio (muito) encostado, mas vou fazer o possível para publicar um &lt;i&gt;post&lt;/i&gt; de vez em quando. O motivo da minha ausência prolongada? Me mudei para a cidadezinha de &lt;a href=&quot;https://en.wikipedia.org/wiki/Athlone&quot; target=&quot;_blank&quot;&gt;Athlone&lt;/a&gt; no centro da Irlanda. A vida é boa aqui na terra do &lt;a href=&quot;https://en.m.wikipedia.org/wiki/Bono&quot; target=&quot;_blank&quot;&gt;Bono Vox&lt;/a&gt;, mas tudo que é novo demanda uma certa dose de energia, tempo e dedicação. Em breve pretendo escrever um pouco sobre como funciona o processo de imigração e as vantagens e desafios de viver no exterior.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Enquanto não tenho mais como dar aulas presenciais em São Paulo, continuo disponível para dar aulas remotas. Para aqueles que necessitam de aulas presenciais tenho boas indicações de instrutores. &amp;nbsp;A melhor maneira de falar comigo continua sendo o &lt;a href=&quot;http://a.accioly.7rtc.com/p/aulas-particulares-e-treinamento.html&quot; target=&quot;_blank&quot;&gt;formulário de contato&lt;/a&gt;.&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Para não escrever um &lt;i&gt;post&lt;/i&gt; sem nenhum conteúdo técnico, segue um pouco de bruxaria com o &lt;a href=&quot;http://emmet.io/&quot;&gt;Emmet&lt;/a&gt;.&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://emmet.io/&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgUyqY5WYWXzoS_uRL1jMAhxFuIoft96y5vjRMhV6wJmVHT_JOrHVXYP7gpOP_1ybJgKzrOM5rrJdRbmZA4l6Gl6a7RAXqnLhEqs8AUBa9GwLs_RnQ-engE0NvghuDGE-Dzx55iw_fYuhw/s1600/logo-large%255B1%255D.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
O que é o Emmet você me pergunta? É mais fácil mostrar do que explicar!&lt;br /&gt;
&lt;br /&gt;
Abra o bom e velho &lt;a href=&quot;https://jsfiddle.net/&quot; target=&quot;_blank&quot;&gt;JSFiddle&lt;/a&gt;, clique no quadro para HTML, digite o conteúdo abaixo e aperte &lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;TAB&lt;/span&gt;.

&lt;/div&gt;
&lt;pre class=&quot;prettyprint&quot; style=&quot;padding: 10px; text-align: justify;&quot;&gt;table.minhaClasse&amp;gt;tr#linha_$*3&amp;gt;td{Coluna 1 - $}+td{Coluna 2 - $}&lt;/pre&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Mágico não? Perfeito para HTML e CSS; flexível o suficiente para rodar no seu navegador, no seu editor de texto e no seu IDE.&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Eu tenho me divido entre Java e Python no dia a dia. Independentemente da linguagem &lt;i&gt;server side&lt;/i&gt;, o Emmet vem me ajudado muito no &lt;i&gt;front end&lt;/i&gt;. Tanto o &lt;a href=&quot;https://www.jetbrains.com/idea/&quot; target=&quot;_blank&quot;&gt;IntelliJ IDEA&lt;/a&gt; quanto o &lt;a href=&quot;https://www.jetbrains.com/pycharm/&quot; target=&quot;_blank&quot;&gt;PyCharm&lt;/a&gt; possuem suporte nativo para Emmet. Existem também&amp;nbsp;&lt;i&gt;plugins&lt;/i&gt; para &lt;a href=&quot;https://github.com/emmetio/netbeans&quot; target=&quot;_blank&quot;&gt;Netbeans&lt;/a&gt; e &lt;a href=&quot;https://github.com/emmetio/emmet-eclipse&quot; target=&quot;_blank&quot;&gt;Eclipse&lt;/a&gt;. Até o pessoal do&amp;nbsp;&lt;a href=&quot;https://www.visualstudio.com/&quot; target=&quot;_blank&quot;&gt;Visual Studio&lt;/a&gt; pode usufruir da funcionalidade com o &lt;a href=&quot;http://vswebessentials.com/&quot; target=&quot;_blank&quot;&gt;Web Essentials&lt;/a&gt;. Você torce o nariz para IDES? Sem problemas, existem &lt;i&gt;plugins&lt;/i&gt; para &lt;a href=&quot;https://github.com/mattn/emmet-vim&quot; target=&quot;_blank&quot;&gt;vim&lt;/a&gt;, &lt;a href=&quot;https://github.com/sergeche/emmet-sublime&quot; target=&quot;_blank&quot;&gt;Sublime&lt;/a&gt;, &lt;a href=&quot;https://github.com/smihica/emmet-mode&quot; target=&quot;_blank&quot;&gt;Emacs &lt;/a&gt;e até mesmo para o &lt;a href=&quot;http://sourceforge.net/projects/npp-plugins/&quot; style=&quot;font-style: italic;&quot;&gt;Notepad++&lt;/a&gt;&lt;i&gt;.&lt;/i&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Eu uso o Emmet em tantas janelas diferentes que chego a me esquecer que o suporte não é nativo do SO.&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
O&amp;nbsp;Emmet na verdade é escrito em JavaScript. O fato de boa parte desses &lt;i&gt;plugins&lt;/i&gt; estarem levantando &lt;i&gt;engines&amp;nbsp;&lt;/i&gt;de JavaScript como o &lt;a href=&quot;https://code.google.com/p/v8/&quot; target=&quot;_blank&quot;&gt;V8&lt;/a&gt;&amp;nbsp;dá nó na cabeça desse dinossauro que vos fala. Com a morte do&amp;nbsp;&lt;a href=&quot;https://en.wikipedia.org/wiki/NPAPI&quot; target=&quot;_blank&quot;&gt;NPAPI&lt;/a&gt;&amp;nbsp;(pelas mãos da&amp;nbsp;&lt;a href=&quot;http://blog.chromium.org/2014/11/the-final-countdown-for-npapi.html&quot; target=&quot;_blank&quot;&gt;Google&lt;/a&gt;), podemos dar por encerrada a era dos moribundos&amp;nbsp;&lt;a href=&quot;https://en.wikipedia.org/wiki/Java_applet&quot; target=&quot;_blank&quot;&gt;Java&amp;nbsp;Applets&lt;/a&gt;.&amp;nbsp;Enquanto isso JavaScript nunca esteve mais vivo...&amp;nbsp;&lt;i&gt;Java&lt;b&gt;Script&lt;/b&gt; is everywhere!&lt;/i&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/div&gt;
&lt;hr /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;i&gt;Software development: Private classes and onsite training - &lt;a href=&quot;http://a.accioly.7rtc.com/p/contato.html&quot; target=&quot;_blank&quot;&gt;get in touch&lt;/a&gt;.&lt;/i&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://a.accioly.7rtc.com/feeds/3089187286072802259/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3179991594448154975/3089187286072802259' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3179991594448154975/posts/default/3089187286072802259'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3179991594448154975/posts/default/3089187286072802259'/><link rel='alternate' type='text/html' href='http://a.accioly.7rtc.com/2015/08/lifes-too-short-not-to-be-irish-e-um.html' title='Life&#39;s too short not to be Irish! E um pouco de bruxaria com Emmet'/><author><name>Anthony Accioly</name><uri>http://www.blogger.com/profile/11204999973940488842</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgUyqY5WYWXzoS_uRL1jMAhxFuIoft96y5vjRMhV6wJmVHT_JOrHVXYP7gpOP_1ybJgKzrOM5rrJdRbmZA4l6Gl6a7RAXqnLhEqs8AUBa9GwLs_RnQ-engE0NvghuDGE-Dzx55iw_fYuhw/s72-c/logo-large%255B1%255D.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3179991594448154975.post-6810650773251788463</id><published>2014-09-25T19:25:00.000-03:00</published><updated>2015-08-14T10:38:17.352-03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Big Data"/><category scheme="http://www.blogger.com/atom/ns#" term="Data Science"/><category scheme="http://www.blogger.com/atom/ns#" term="E-learning"/><category scheme="http://www.blogger.com/atom/ns#" term="R"/><title type='text'>O que é Data Science? Por onde começar?</title><content type='html'>&lt;div style=&quot;text-align: justify;&quot;&gt;
Essa é uma era de revoluções: Computação em nuvem; popularização do acesso a Internet com conexões de dezenas (ou mesmo centenas) de megabits; &lt;i&gt;data sets&lt;/i&gt; históricos com petabytes (ou mesmo exabytes) de informações; milhões de dados &quot;quentes&quot; sendo produzidos e consumidos por sistemas de sistemas a cada piscar de olhos; computação ubíqua e infinitas possibilidades.&lt;br /&gt;
&lt;br /&gt;
Todos esses avanço vêm alavancando novas tendências de mercado. Estão se popularizando tecnologias e técnicas antes dominadas por poucos, restritas principalmente aos meios acadêmico, governamental, militar e financeiro; utilizadas apenas por instituições que possuíam os recursos e &lt;i&gt;expertise&lt;/i&gt; necessários para operar nessa escala.&lt;br /&gt;
&lt;i&gt;&lt;br /&gt;&lt;/i&gt;
&lt;i&gt;Buzzwords&lt;/i&gt; como &lt;a href=&quot;http://en.wikipedia.org/wiki/Big_data&quot; target=&quot;_blank&quot;&gt;&lt;i&gt;Big Data&lt;/i&gt;&lt;/a&gt; e &lt;i&gt;Fast Data&lt;/i&gt; estão na boca dos profissionais de TI, analistas de negócios e empreendedores. Esses tópicos andam sendo discutidos abertamente em todo tipo de conferência de mercado. Livros (inclusive romances) foram escritos sobre o obscuro mundo dos &lt;a href=&quot;http://en.wikipedia.org/wiki/Quantitative_analyst&quot;&gt;Quants&lt;/a&gt;: Nerds com seus PhDs em estatística, física e matemática aplicada. Figuras curiosas que deixaram (ou foram rejeitados) pela academia e ganharam o mercado... Gênios renegados com seus modelos para troca automatizada de títulos, com seus portfólios para gestão de riscos e com suas gordas contas bancárias.&lt;br /&gt;
&lt;br /&gt;
Mas afinal o que é &lt;i&gt;Data Science&lt;/i&gt;? &lt;a href=&quot;http://en.wikipedia.org/wiki/Data_science&quot; target=&quot;_blank&quot;&gt;De acordo com a Wikipedia&lt;/a&gt;, &lt;i&gt;Data Science&lt;/i&gt; é o estudo da extração de conhecimento a partir de dados. Uma ciência que incorpora técnicas e teorias das mais diversas áreas de conhecimento (computação, engenharia, matemática, estatística, economia, etc).&lt;br /&gt;
&lt;br /&gt;
A demanda por profissionais especializados em &lt;i&gt;Data Science&lt;/i&gt; cresce em ritmo acelerado. Aos poucos isso tudo está despertando o nosso interesse. Nós &quot;programadores comuns&quot;, escritores de &quot;&lt;i&gt;Software commodity&lt;/i&gt;&quot; que mantém o mundo girando. Assuntos como aprendizado de máquina, inferência estatística e modelos de regressão deixam de ser exclusividade de dissertações e artigos acadêmicos, perdem a aura de superioridade e caem no gosto das abelhas e zangões trabalhadores. Há muito a aprender; um passo de cada vez. A hora de soprar o pó da capa daquele velho livro de &lt;a href=&quot;http://www.editorasaraiva.com.br/produto/universitario/matematica-e-estatistica/estatistica-basica/&quot;&gt;estatística básica&lt;/a&gt;&amp;nbsp;encostado na prateleira finalmente chegou.   &lt;br /&gt;
&lt;br /&gt;
E se você é como eu, há muito a aprender. Já fui um aluno muito orgulhoso do meu desempenho, sempre ostentando meu parco conhecimento sobre estatística com um livro do &lt;a href=&quot;http://www1.folha.uol.com.br/cotidiano/917724-wilton-bussab-1940-2011---foi-estatisticamente-significante.shtml&quot; target=&quot;_blank&quot;&gt;Bussab&lt;/a&gt;&amp;nbsp;em mãos.&amp;nbsp;Fui uma das três ovelhas da minha turma que conseguiu passar direto em estatística na primeira oferta da disciplina da &lt;a href=&quot;http://each.uspnet.usp.br/site/&quot; target=&quot;_blank&quot;&gt;USP Leste&lt;/a&gt; (com uma &quot;excelente&quot; nota 7.2, a melhor nota da turma... Considerando a dificuldade da disciplina na época 7 valia mais do que 10). Passei a dar aulas particulares de estatística para alunos com as mais diversas origens (meus colegas, alunos de administração e economia da FGV e Mackenzie, alunos de outros cursos e departamentos da USP, etc). Eis uma época em que eu &quot;conhecia&quot; distribuições como a normal, binomial, hipergeométrica, Poisson, t de Student, etc; também &quot;sabia&quot; fazer testes de hipóteses, calcular erros e taxas de confiança de cabeça e até mesmo ousava me aventurar um pouquinho com inferência e o básico de Estatística Bayesiana.&lt;br /&gt;
&lt;br /&gt;
O problema é que tudo isso está para &lt;i&gt;Data Science&lt;/i&gt; como um curso de lógica de programação está para desenvolvimento de software (ou ainda como o Ping Pong está para o Tênis de Mesa) . O que aprendi naquela época é importante, porém esses são apenas fundamentos. O básico do básico em um nível de abstração bem distante daquele que está sendo utilizado para resolver problemas na prática.&lt;br /&gt;
&lt;br /&gt;
Na verdade &lt;i&gt;Data Science&lt;/i&gt; possui três grandes pilares muito bem ilustrados nesse &lt;a href=&quot;http://drewconway.com/zia/2013/3/26/the-data-science-venn-diagram&quot; target=&quot;_blank&quot;&gt;Diagrama de Venn do site do Drew Conway&lt;/a&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;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;a href=&quot;http://drewconway.com/zia/2013/3/26/the-data-science-venn-diagram&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;305&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiivbh7J4r60-e9aE0-JPcexS_RDNPYZp7OzERj3PXKhZ2Qglr7RiE29yhDXOeh_5EhXqoQ9zpJBh5dAXA5MZ2Vz68qHftsAsMWpXBUYnXDqL9Ka9lr5kVdIGlnEdXa_B_oCmz1bbKcfyE/s1600/Data_Science_VD.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;http://drewconway.com/zia/2013/3/26/the-data-science-venn-diagram&quot; target=&quot;_blank&quot;&gt;Diagrama de Venn do Drew Conway&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Em resumo, você pode ser um hacker excepcional, aprender sobre ferramentas e técnicas de ponta, conhecer muito sobre determinado assunto, porém não ter conhecimento matemático suficiente para entender o que está fazendo (muito menos interpretar resultados). Essa é a frente &quot;perigosa&quot; que mais comete erros do tipo tomar uma correlação por causa e efeito sem investigar &lt;a href=&quot;http://en.wikipedia.org/wiki/Confounding&quot; target=&quot;_blank&quot;&gt;variáveis de confusão&lt;/a&gt;.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Na outra ponta não é muito difícil você esbarrar com acadêmicos que possuem grande conhecimento tecnológico e estatístico, porém com pouco conhecimento sobre o assunto no qual estão trabalhando. Geralmente o conhecimento desse grupo sobre o problema que estão tentando resolver é de natureza teórica (e muitas vezes extremamente desatualizado); sabe aquele grupo que faz complexos experimentos de laboratório sem nunca ter realmente vivenciado ou entendido o problema que está tentando resolver? Esse tipo de profissional pode produzir estudos bem interessantes,&amp;nbsp;&lt;strike&gt;distorcer&lt;/strike&gt; categorizar dados e chegar a conclusões &lt;strike&gt;insignificantes&lt;/strike&gt; únicas. Podem até mesmo propor soluções &quot;geniais&quot; para problemas em aberto (que geralmente são inviáveis ou de aplicação muito limitada por esbarrarem em alguma&amp;nbsp;&lt;i&gt;constraint &lt;/i&gt;básica desconhecida pelo autor). Enquanto penso que esse grupo é menos perigoso do que o primeiro, a quantidade de estudos do tipo Seinfeld (sobre o nada) gerando ruído na comunidade científica também é bastante preocupante.&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Finalmente a pesquisa tradicional continuará existindo e continuará sendo relevante. Porém, sem o componente hacker pesquisa não é &lt;i&gt;Data Science&lt;/i&gt;. Muitos autores criticam &lt;i&gt;Data Science&lt;/i&gt; como um termo mercadológico para descrever estatística. Enquanto essa critica não é totalmente injusta, acredito que há uma distinção válida. Conhecer a distribuição normal não me faz um estatístico; saber criar um modelo e rodar uma simulação no &lt;a href=&quot;http://www.mathworks.com/products/matlab/&quot; target=&quot;_blank&quot;&gt;MATLAB&lt;/a&gt; não faz do estatístico um &lt;i&gt;Data Scientist.&lt;/i&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
O aspecto hacker da coisa rapidamente me encantou. Tenho que admitir que passei muito tempo engatinhando, brincando com diversas ferramentas e possibilidades, lendo livros e tutorais puramente focados em tecnologia. Eu poderia passar horas falando de &lt;a href=&quot;http://en.wikipedia.org/wiki/Supercomputer&quot; target=&quot;_blank&quot;&gt;HPC&lt;/a&gt;&amp;nbsp;e&amp;nbsp;&lt;a href=&quot;http://en.wikipedia.org/wiki/High-throughput_computing&quot; target=&quot;_blank&quot;&gt;HTC&lt;/a&gt;. Poderia falar de&amp;nbsp;&lt;a href=&quot;http://en.wikipedia.org/wiki/Business_intelligence&quot; target=&quot;_blank&quot;&gt;BI&lt;/a&gt;,&amp;nbsp;&lt;a href=&quot;http://en.wikipedia.org/wiki/Complex_event_processing&quot; target=&quot;_blank&quot;&gt;CEP&lt;/a&gt;&amp;nbsp;e &lt;a href=&quot;http://en.wikipedia.org/wiki/Data_warehouse&quot; target=&quot;_blank&quot;&gt;DW&lt;/a&gt;. Poderia falar&amp;nbsp;de soluções analíticas na nuvem como &lt;a href=&quot;https://cloud.google.com/bigquery/&quot; target=&quot;_blank&quot;&gt;BigQuery&lt;/a&gt;&amp;nbsp;e &lt;a href=&quot;http://aws.amazon.com/redshift&quot; target=&quot;_blank&quot;&gt;Redshift&lt;/a&gt;. Ainda vou escrever um artigo dedicado ao&amp;nbsp;ecossistema&amp;nbsp;&lt;a href=&quot;http://en.wikipedia.org/wiki/Apache_Hadoop&quot; target=&quot;_blank&quot;&gt;Hadoop&lt;/a&gt;. Enfim, há muita coisa a ser aprendida nessa frente.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Apesar disso tenho que reconhecer minha pequenez. Quanto mais explorava esse Universo mais me deparava com &lt;i&gt;papers&lt;/i&gt; descrevendo soluções altamente sofisticadas para problemas que eu desconhecia (geralmente usando abstrações matemáticas que eu também desconheço). Foi nesse momento que resolvi desmanchar o castelo de cartas que construí e começar do zero. E não é que a vida fica mais fácil quando procuramos conhecimento de base?&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Sou um grande fã da &lt;a href=&quot;https://www.coursera.org/&quot; target=&quot;_blank&quot;&gt;Coursera&lt;/a&gt;, e acabei me deparando com a &lt;a href=&quot;https://www.coursera.org/specialization/jhudatascience/1?utm_medium=dashboard&quot; target=&quot;_blank&quot;&gt;especialização gratuita sobre Data Science&lt;/a&gt;. Uma verdadeira &quot;pós-graduação&quot; com nove cursos (e um projeto final). A espacialização aborta o básico sobre métodos estatísticos e ferramentas computacionais, passa por técnicas de tratamento e visualização de dados, inferência, modelos de regressão, aprendizado de máquina e finalmente produtos baseados em dados. Essa especialização é um verdadeiro &lt;i&gt;Data Science tour de force&lt;/i&gt; elaborado por três professores do &lt;a href=&quot;http://www.jhsph.edu/departments/biostatistics/&quot; target=&quot;_blank&quot;&gt;Departamento de Bioestatística&lt;/a&gt; da &lt;a href=&quot;http://www.jhu.edu/&quot; target=&quot;_blank&quot;&gt;Johns Hopkins University&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Achei muito interessante como os primeiros cursos da especialização conseguem ensinar cientistas a utilizarem ferramentas com &lt;a href=&quot;http://git-scm.com/&quot;&gt;Git&lt;/a&gt; e um &lt;a href=&quot;http://en.wikipedia.org/wiki/Integrated_development_environment&quot;&gt;IDE&lt;/a&gt; enquanto ensinam nerds da computação sobre métodos estatísticos e afins. Apear do material denso, os cursos não são difíceis ou massantes. A abordagem é bastante prática, focada em &lt;a href=&quot;http://www.r-project.org/&quot; target=&quot;_blank&quot;&gt;R&lt;/a&gt;&amp;nbsp;e seu enorme ecossistema (incluindo pacotes e tecnologias correlatas). Você vai aprender sim sobre métodos estatísticos, experimentando na prática com &lt;i&gt;data sets&lt;/i&gt; reais.&lt;br /&gt;
&lt;br /&gt;
R é uma tecnologia &quot;simples&quot;, porém o caminho para se tornar um especialista é longo e pode ser desafiador até para programadores experientes. A linguagem é extremamente expressiva, própria para tratamento estatístico e visualização de dados em memória (ainda que essa não seja toda a verdade, veja&amp;nbsp;&lt;a href=&quot;http://pt.stackoverflow.com/questions/30631/estrat%C3%A9gias-para-analisar-bases-de-dados-muito-grandes-em-r-que-n%C3%A3o-caibam-na-m/30683#30683&quot; target=&quot;_blank&quot;&gt;minha resposta no Stack Overflow&lt;/a&gt;&amp;nbsp;sobre como utilizar R com&amp;nbsp;&lt;i&gt;data sets&lt;/i&gt;&amp;nbsp;grandes demais para serem tratados inteiramente em memória), utilizando uma combinação de elementos que podem parecer estranhos para programadores de linguagens&amp;nbsp;&lt;i&gt;C-Like&lt;/i&gt;. Para mencionar alguns pontos: A linguagem adota algumas características da programação funcional (o curso de &lt;a href=&quot;http://a.accioly.7rtc.com/2013/09/mooc-principios-de-programacao.html&quot;&gt;Programação Funcional em Scala&lt;/a&gt; me ajudou muito nessa frente), também conta com a expressividade da vetorização, escopo léxico e diversas tentativas de implementar orientação a objetos (que coexistem na linguagem).&lt;br /&gt;
&lt;br /&gt;
100%&lt;i&gt; Open source &lt;/i&gt;e parte do &lt;a href=&quot;http://www.gnu.org/gnu/thegnuproject.html&quot; target=&quot;_blank&quot;&gt;Projeto GNU&lt;/a&gt;, o ambiente R se tornou a base de um fortíssimo ecossistema para aplicações científicas. Esqueça suas experiências traumatizantes com código da plataforma &lt;a href=&quot;http://www.cs.waikato.ac.nz/ml/weka/&quot; target=&quot;_blank&quot;&gt;Weka&lt;/a&gt;, esqueça aquelas implementações de &lt;a href=&quot;http://en.wikipedia.org/wiki/Learning_vector_quantization&quot; target=&quot;_blank&quot;&gt;LVQ&lt;/a&gt;&amp;nbsp;e &lt;a href=&quot;http://en.wikipedia.org/wiki/Self-organizing_map&quot; target=&quot;_blank&quot;&gt;SOM&lt;/a&gt;&amp;nbsp;caseiras feitas em C, Python e Java (sim, eu também fiz isso na faculdade). Tome a pílula vermelha e venha brincar com os pacotes do &lt;a href=&quot;http://cran.r-project.org/&quot; target=&quot;_blank&quot;&gt;CRAN&lt;/a&gt;&amp;nbsp;(bem como pacotes mais especializados de fontes como o &lt;a href=&quot;http://www.bioconductor.org/&quot; target=&quot;_blank&quot;&gt;Biocondutor&lt;/a&gt;). Use o que há de mais moderno em termos no mercado; use implementações extremamente robustas de algoritmos clássicos; brinque com código instável recém saído do forno (da acadêmia e da indústria). Há soluções para todos os gosto. &lt;br /&gt;
&lt;br /&gt;
Ainda não cheguei na parte mais avançada do curso (atualmente estou cursando o terceiro módulo - &lt;a href=&quot;https://www.coursera.org/course/getdata&quot; target=&quot;_blank&quot;&gt;&lt;i&gt;Getting and Cleaning Data&lt;/i&gt;&lt;/a&gt; - pela terceira vez, por pura falta de tempo). Mas o que já aprendi sobre métodos e variáveis estatísticas, tratamento de dados, etc, compensou. Com certeza a especialização já me tornou um programador melhor... Mas o mais importante de toda essa experiência foi que, com os cursos, percebi toda a enormidade teórica e a base matemática sustentando as&amp;nbsp;&lt;i&gt;Buzzwords&lt;/i&gt;&amp;nbsp;de mercado. Não há o que temer nessas frentes (com paciência, bons livros e bons instrutores você consegue dominar qualquer assunto).&lt;br /&gt;
&lt;hr /&gt;
&lt;br /&gt;
P.S. Pelo preço simbólico de $49 você pode obter um certificado verificado para o curso (obviamente isso também requer que você passe no curso com um &lt;i&gt;score&lt;/i&gt; mínimo). Enquanto o certificado atualmente não tem muito valor (seja no mercado seja na acadêmia), não é de todo ruim possuir um certificado com o logo da &lt;a href=&quot;https://www.coursera.org/maestro/api/certificate/get_certificate?verify-code=4N98367455&quot; target=&quot;_blank&quot;&gt;Johns Hopkins&lt;/a&gt;. Enquanto não coloco esses certificados no meu currículo oficial, já os incluí no meu perfil do &lt;a href=&quot;https://www.linkedin.com/in/aaccioly&quot; target=&quot;_blank&quot;&gt;LinkedIn&lt;/a&gt;&amp;nbsp;(e, contrariando minhas expectativas, isso está chamando a atenção de empresas dentro e fora do país).&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://a.accioly.7rtc.com/feeds/6810650773251788463/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3179991594448154975/6810650773251788463' title='12 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3179991594448154975/posts/default/6810650773251788463'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3179991594448154975/posts/default/6810650773251788463'/><link rel='alternate' type='text/html' href='http://a.accioly.7rtc.com/2014/09/o-que-e-data-science-e-por-onde-comecar.html' title='O que é Data Science? Por onde começar?'/><author><name>Anthony Accioly</name><uri>http://www.blogger.com/profile/11204999973940488842</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiivbh7J4r60-e9aE0-JPcexS_RDNPYZp7OzERj3PXKhZ2Qglr7RiE29yhDXOeh_5EhXqoQ9zpJBh5dAXA5MZ2Vz68qHftsAsMWpXBUYnXDqL9Ka9lr5kVdIGlnEdXa_B_oCmz1bbKcfyE/s72-c/Data_Science_VD.png" height="72" width="72"/><thr:total>12</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3179991594448154975.post-6413415085114990616</id><published>2014-09-22T21:35:00.001-03:00</published><updated>2014-10-31T11:58:54.192-02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Ciências da Computação"/><category scheme="http://www.blogger.com/atom/ns#" term="Exames"/><category scheme="http://www.blogger.com/atom/ns#" term="POSCOMP"/><category scheme="http://www.blogger.com/atom/ns#" term="Pós-Graduação"/><title type='text'>Média POSCOMP 2014</title><content type='html'>&lt;div style=&quot;text-align: justify;&quot;&gt;
Pessoal, peço desculpas pelo longo intervalo sem postar aqui no Blog. Além das atividades da &lt;a href=&quot;https://www.facebook.com/SevenRTC&quot; target=&quot;_blank&quot;&gt;7RTC&lt;/a&gt;&amp;nbsp;(agradeço quem puder dar um jóinha no Facebook), estou com algumas coisas novas acontecendo, incluindo:&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;Um novo emprego em uma empresa especializada em conciliação chamada &lt;a href=&quot;https://www.ainstec.com.br/&quot; target=&quot;_blank&quot;&gt;Ainstec&lt;/a&gt;&amp;nbsp;(estamos contratando Programadores Java, Programadores APEX, Programadores PL/SQL e Analistas de Negócios; interessados por favor &lt;a href=&quot;http://a.accioly.7rtc.com/p/contato.html&quot; target=&quot;_blank&quot;&gt;entrem em contato&lt;/a&gt;).&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;Algumas atividades de treinamento e desenvolvimento para uma empresa parceira da&amp;nbsp;&lt;a href=&quot;http://www.zimbra.com/&quot; target=&quot;_blank&quot;&gt;Zimbra&lt;/a&gt;.&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;Dois projetos &lt;i&gt;freelancer &lt;/i&gt;para empresas no exterior&lt;i&gt;.&lt;/i&gt;&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;
Com tudo isso acontecendo ao mesmo tempo fiquei com pouco tempo livre. Quando consigo uma folguinha venho tentado contribuir com o &lt;a href=&quot;http://pt.stackoverflow.com/&quot; target=&quot;_blank&quot;&gt;Stack Overflow Em Português&lt;/a&gt;; responder perguntas por lá é uma maneira bem interessante de &quot;devolver&quot; para a comunidade (aguardem um &lt;i&gt;post &lt;/i&gt;sobre minhas &quot;melhores contribuições&quot; para o SOpt).&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Bom, vamos ao que interessa. A pedido dos leitores do blog &amp;nbsp;estou &lt;a href=&quot;http://a.accioly.7rtc.com/2013/10/poscomp-2013.html&quot;&gt;repetindo a dose de 2013&lt;/a&gt; e compartilhando uma planilha para estimativa da média do &lt;a href=&quot;http://www.cops.uel.br/concursos/174_poscomp_2014/&quot; target=&quot;_blank&quot;&gt;POSCOMP 2014&lt;/a&gt;&amp;nbsp;(exame unificado para ingresso na Pós-Graduação em Computação). Também relanço aqui a planilha para&amp;nbsp;correção da prova conforme &lt;a href=&quot;http://www.cops.uel.br/concursos/174_poscomp_2014/G17401.PDF&quot; target=&quot;_blank&quot;&gt;gabarito provisório de 2014&lt;/a&gt;. Seguem os links:&lt;/div&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://goo.gl/ttRJnF&quot; target=&quot;_blank&quot;&gt;&lt;b&gt;Planilha de resultados / média (http://goo.gl/ttRJnF):&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;&lt;div style=&quot;margin: 25px 0; text-align: center;&quot;&gt;
&lt;iframe frameborder=&quot;0&quot; height=&quot;300&quot; src=&quot;https://docs.google.com/spreadsheet/pub?key=0AkgDjaMl5oSpdFYtMkNLMHFkdXJPU1pJelV4NXdYcEE&amp;amp;output=html&amp;amp;widget=true&quot; width=&quot;500&quot;&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://goo.gl/EGQHhk&quot; target=&quot;_blank&quot;&gt;&lt;b&gt;Planilha para correção da prova (http://goo.gl/EGQHhk):&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;&lt;div style=&quot;margin: 25px 0px; text-align: center;&quot;&gt;
&lt;iframe frameborder=&quot;0&quot; height=&quot;300&quot; src=&quot;https://docs.google.com/spreadsheet/pub?key=0AuWjdMbvu0badFY4cU9LamtMaXgwbTdvZTFjZkVYMEE&amp;amp;output=html&amp;amp;widget=true&quot; width=&quot;500&quot;&gt;&lt;/iframe&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Sintam-se livres para divulgar os links como bem entenderem (as visões da planilha aqui no site podem estar defasadas em relação ao conteúdo no &lt;a href=&quot;https://docs.google.com/spreadsheet/&quot; target=&quot;_blank&quot;&gt;&lt;i&gt;Google Spreadsheet&lt;/i&gt;&lt;/a&gt;; recomendo acompanhar os resultados diretamente pelo &lt;a href=&quot;http://goo.gl/ttRJnF&quot; target=&quot;_blank&quot;&gt;link&lt;/a&gt;).&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Ajuda para administrar e melhorar a planilha é sempre bem vinda (interessados por favor &lt;a href=&quot;http://a.accioly.7rtc.com/p/contato.html&quot;&gt;entrem em contato&lt;/a&gt;).&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Quem quiser mais informações sobre o exame podem encontrá-las &lt;a href=&quot;http://a.accioly.7rtc.com/2013/10/poscomp-2013.html&quot;&gt;nesse &lt;i&gt;post&lt;/i&gt; de 2013&lt;/a&gt; e no &lt;a href=&quot;http://a.accioly.7rtc.com/2010/11/exame-poscomp-2010.html&quot;&gt;&lt;i&gt;post&lt;/i&gt; anterior de 2010&lt;/a&gt;.&lt;/div&gt;
&lt;br /&gt;
&lt;hr /&gt;
&lt;h4&gt;
UPDATES&lt;/h4&gt;
&lt;div style=&quot;margin: 15px 0; text-align: justify;&quot;&gt;
&lt;ul&gt;
&lt;li&gt;25/09 14:30 - A planilha já conta com aproximadamente 200 entradas, a média estimada está em 26.1 pontos. Obrigado ao Iago do &lt;a href=&quot;https://www.facebook.com/groups/534642839963442/&quot; target=&quot;_blank&quot;&gt;Grupo de Facebook POSCOMP 2014&lt;/a&gt; por ter colocado a planilha no ar e divulgado para a galera. Por sugestão do pessoal do grupo foram incluídos colunas opcionais para o nome e a instituição de origem.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;18/10 14:00 - No dia 16 foi divulgado o&amp;nbsp;&lt;a href=&quot;http://www.cops.uel.br/concursos/174_poscomp_2014/provas-gabaritos-def/&quot; target=&quot;_blank&quot;&gt;gabarito definitivo&lt;/a&gt;&amp;nbsp;do POSCOMP 2014. As questões 24, 32 e 33 foram anuladas. A &lt;a href=&quot;http://goo.gl/EGQHhk&quot; target=&quot;_blank&quot;&gt;planilha para correção&lt;/a&gt;&amp;nbsp;da prova já foi atualizada. A &lt;a href=&quot;http://goo.gl/ttRJnF&quot; target=&quot;_blank&quot;&gt;planilha para estimativa da média&lt;/a&gt; permitirá, temporariamente, a edição dos resultados (por favor evitem duplicar entradas).&lt;/li&gt;
&lt;li&gt;31/10 11:30 - O &lt;a href=&quot;http://www.cops.uel.br/concursos/153_poscomp_2013/resultado/1/&quot; target=&quot;_blank&quot;&gt;resultado oficial&lt;/a&gt; foi divulgado. Média oficial &lt;b&gt;24,1&lt;/b&gt; - Desvio Padrão &lt;b&gt;6,5&lt;/b&gt;. Esse ano tivemos uma participação menor (276 vs 445 pessoas do ano passado). A média oficial ficou um pouco abaixo da média amostral. Infelizmente a média oficial ficou também fora do intervalo de confiança por exatamente 1 ponto (que bom que eu não trabalho no Datafolha :). De qualquer maneira agradeço a todos que participaram!&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://a.accioly.7rtc.com/feeds/6413415085114990616/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3179991594448154975/6413415085114990616' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3179991594448154975/posts/default/6413415085114990616'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3179991594448154975/posts/default/6413415085114990616'/><link rel='alternate' type='text/html' href='http://a.accioly.7rtc.com/2014/09/media-poscomp-2014-estimativa.html' title='Média POSCOMP 2014'/><author><name>Anthony Accioly</name><uri>http://www.blogger.com/profile/11204999973940488842</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3179991594448154975.post-4510571374848154794</id><published>2013-10-08T16:38:00.001-03:00</published><updated>2024-09-05T12:46:34.447-03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="English"/><category scheme="http://www.blogger.com/atom/ns#" term="IDE"/><category scheme="http://www.blogger.com/atom/ns#" term="Java"/><title type='text'>Java IDES - One shortcut to rule them all</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&quot;Three IDES for the Java-kings under the sky,&lt;/div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
Seven were once famous in their halls of stone,&lt;/div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
Plenty of others for Mortal Men doomed to die,&lt;/div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
One shortcut to the Productivity Lord on his dark throne&lt;/div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
In the Land of Java where the Shadows lie.&lt;/div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
One shortcut to rule them all, One shortcut to find them,&lt;/div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
One setting to bring them all and in the darkness bind them&lt;/div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
In the Land of Java where the Shadows lie.&quot;&lt;/div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
- &lt;b&gt;J. R. R. Tolkien&lt;/b&gt;, &lt;i&gt;The Lord of the Rings&lt;/i&gt; (slightly hacked)&lt;/div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
I&#39;ve been a polyglot programmer and multi-IDE user for several years... And as any all-arounder, I am not the most productive expert on any of them. IDES are huge beasts! It takes time to learn and to allow all of its functionality to sink in and it takes even more time to learn how to do things efficiently.&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Memorizing highly specific keyboards shortcuts of each IDE is one of the many actives that can become tedious or even completely unachievable if you switch between IDES frequently. Still, all in all I do prefer this road, since every IDE has its unique qualities. I&#39;m a huge believer of the motto &quot;Use the right tool for the job.&quot; Quoting Abraham H. Maslow&#39;s Psychology of Science: &quot;I suppose it is tempting, if the only tool you have is a hammer, to treat everything as if it were a nail.&quot; Please avoid temptation!&lt;br /&gt;
&lt;br /&gt;
So let&#39;s check out how to cheat and increase productivity by learning &quot;Tool tamer&quot; shortcuts for the most popular IDES in Javaland.&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/AVvXsEiOIHaF03sVRdxnTQtwpAiPiUjdhFgtRb7uQblP0cd6Rcka7bGCYTMkJRJsZwnQR-6xpwVxvSmM7XqLMINSYtq_11HYmbJqbaCD2EllLELD_MpBrsHppPQGHDGbWQRjBhvSFdEEZR95Pqc/s1600/Java+IDES.png&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/AVvXsEiOIHaF03sVRdxnTQtwpAiPiUjdhFgtRb7uQblP0cd6Rcka7bGCYTMkJRJsZwnQR-6xpwVxvSmM7XqLMINSYtq_11HYmbJqbaCD2EllLELD_MpBrsHppPQGHDGbWQRjBhvSFdEEZR95Pqc/s1600/Java+IDES.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
The idea behind this article is that if you can learn how to find desired functionality in the sea of options that one IDE has to offer, then you can teach yourself to be more productive with it. If you can configure all of your IDES to use the same shortcut to access the desired functionality then congratulations, you have just created a shortcut to rule them all.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;h2 style=&quot;text-align: left;&quot;&gt;
Eclipse&lt;/h2&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;
If you make a living out of Java, chances are that you have spent some time with &lt;a href=&quot;http://www.eclipse.org/&quot; target=&quot;_blank&quot;&gt;Eclipse&lt;/a&gt;, either because you love it or because that&#39;s what everyone else in your company uses! Eclipse is the only IDE that an entire army of (not that enthusiastic) Java Developers have ever learned how to use: it often offers the &lt;strike&gt;only&lt;/strike&gt; best third-party plugins for a certain software stack. Eclipse is the most popular IDE in Javaland. Developed by an impressive foundation - backed by a giant group of technology companies and fueled by a vibrant community - the extremely customizable &lt;a href=&quot;http://www.eclipse.org/swt/&quot; target=&quot;_blank&quot;&gt;SWT&lt;/a&gt;-based IDE conceived by &lt;a href=&quot;http://www.ibm.com/%E2%80%8E&quot; target=&quot;_blank&quot;&gt;IBM&lt;/a&gt; isn&#39;t going away anytime soon.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
If you don&#39;t know how to do something in Eclipse, just resort to the handy &lt;i&gt;Quick Access&lt;/i&gt; functionality (&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;Ctrl+3&lt;/span&gt;) and type the desired action  (say, &quot;Extract Variable&quot;).&lt;br /&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/AVvXsEjCwjcj5AtEkukYRMwGXTY8LKaHqRfGLuvHCkzSv89640_snT5J8C0-mdOqOHGTxkY_rGqBAL-v-U7Dgn9YblWyX8l-1xSiHjfgCamJaXg13sTWZbWpyXoDJ-ybmHOGvYCDaztgpe17UTI/s1600/Eclipse+-+Quick+Access.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;202&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjCwjcj5AtEkukYRMwGXTY8LKaHqRfGLuvHCkzSv89640_snT5J8C0-mdOqOHGTxkY_rGqBAL-v-U7Dgn9YblWyX8l-1xSiHjfgCamJaXg13sTWZbWpyXoDJ-ybmHOGvYCDaztgpe17UTI/s400/Eclipse+-+Quick+Access.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
If you don&#39;t like &lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;Ctrl+3&lt;/span&gt; just bind the &lt;i&gt;Quick Access&lt;/i&gt; command to some other key combination. In order to do this follow these steps:&lt;/div&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;/ul&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;ol&gt;
&lt;li&gt;Navigate to Windows &lt;span class=&quot;sign&quot;&gt;→&lt;/span&gt; Preferences&lt;/li&gt;
&lt;li&gt;In the right menu open General &lt;span class=&quot;sign&quot;&gt;→ Keys&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class=&quot;sign&quot;&gt;Locate and select &lt;i&gt;Quick Access&lt;/i&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class=&quot;sign&quot;&gt;Change its binding to the desired key combination&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class=&quot;sign&quot;&gt;Click on Apply and OK&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;span class=&quot;sign&quot;&gt;&amp;nbsp;&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;/div&gt;
&lt;div style=&quot;text-align: center;&quot;&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/AVvXsEhYAQoDT11UDVCVjtzdqz1lQEuR7SM0kUhffNriHmNgfz7q1F1mothbmpOy4BIo2-74YG9_TT9F9iNlVY6jahnN3c2Cg5nOvybHDvK3zk24yqlc5oK9b9Q67S2oN49l0U9zb1SQe2_dxfg/s1600/Eclipse+-+Keys.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;202&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhYAQoDT11UDVCVjtzdqz1lQEuR7SM0kUhffNriHmNgfz7q1F1mothbmpOy4BIo2-74YG9_TT9F9iNlVY6jahnN3c2Cg5nOvybHDvK3zk24yqlc5oK9b9Q67S2oN49l0U9zb1SQe2_dxfg/s400/Eclipse+-+Keys.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;h2 style=&quot;text-align: left;&quot;&gt;
Netbeans&lt;/h2&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;
&quot;The only IDE you need&quot; was the &lt;a href=&quot;https://netbeans.org/&quot; target=&quot;_blank&quot;&gt;Netbeans&lt;/a&gt; motto back when &lt;a href=&quot;http://en.wikipedia.org/wiki/Sun_Microsystems&quot; target=&quot;_blank&quot;&gt;Sun shined&lt;/a&gt;. It is intriguing to observe how a lot of my colleagues dismiss this very crafty IDE as &quot;slow&quot;... This might have been true once upon a time when Netbeans hadn&#39;t yet reached its fourth release, the VMs were not optimized for &lt;a href=&quot;http://en.wikipedia.org/wiki/Swing_%28Java%29&quot; target=&quot;_blank&quot;&gt;Swing&lt;/a&gt; Applications, and computers were shipped with way less memory and very poor graphic cards. Nowadays Netbeans is a very responsive IDE with amazing UI Design Tools (&lt;a href=&quot;http://www.oracle.com/technetwork/java/javafx/overview/index.html&quot; target=&quot;_blank&quot;&gt;JavaFX&lt;/a&gt; anyone?), a great out-of the-box experience for Java SE and Java EE, out-of-the-box support for a variety of Java tools and frameworks, plus a surprisingly competent out-of-the-box support for other programming languages (such as PHP, Groovy and C/C++). Netbeans surely live&lt;span style=&quot;background-color: white;&quot;&gt;s up&lt;/span&gt; to its motto, and does this with a clean, hassle-free philosophy which makes it the perfect IDE to use in classroom.&lt;br /&gt;
&lt;br /&gt;
Much in the same fashion of Eclipse, Netbeans exposes a &lt;i&gt;Quick Find&lt;/i&gt; command which can be triggered with &lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;Ctrl+l&lt;/span&gt;. Although unlike Eclipse, Netbeans tries to find a lot of things by default (Types, Symbols, Help references, Maven artifacts and so on). So if your goal is to find an IDE functionality it is advisable to narrow the search category (accessible with &lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;Shift+F10&lt;/span&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt; when the cursor is on the search bar&lt;/span&gt;) to &lt;i&gt;Action.&lt;/i&gt;&lt;/div&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/AVvXsEh1PJnPel8q4HZssH7-jVdNFFvSN1AzVIKYi4NLsTWDkiXF9RkbOinUEgnAdWuJa1-DNJNrnBdeQTzoBDrNkJy0pUTgQQnlw8S5WWIub2lpUqE7YiP_xgi92tEL7TLniMdpZ2jUERxUOtM/s1600/Netbeans+-+Quick+Search.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;202&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh1PJnPel8q4HZssH7-jVdNFFvSN1AzVIKYi4NLsTWDkiXF9RkbOinUEgnAdWuJa1-DNJNrnBdeQTzoBDrNkJy0pUTgQQnlw8S5WWIub2lpUqE7YiP_xgi92tEL7TLniMdpZ2jUERxUOtM/s400/Netbeans+-+Quick+Search.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
I have never really liked &lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;Ctrl+l &lt;/span&gt;as a shortcut to &lt;i&gt;Quick Find&lt;/i&gt;. So &lt;a href=&quot;http://www.youtube.com/watch?v=gd6vrpHh4f4&quot; target=&quot;_blank&quot;&gt;Thanks Sun&lt;/a&gt; for shortcut customization. To change your keymap, do the following:&lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;Navigate to Tools &lt;span class=&quot;sign&quot;&gt;→&lt;/span&gt; Options&lt;/li&gt;
&lt;li&gt;Click twice on the Keymap button located at the top Toolbar &lt;/li&gt;
&lt;li&gt;Look for &quot;Quick search&quot;&lt;/li&gt;
&lt;li&gt;Click in the Shortcut cell (or on the small ellipsis button) to edit&lt;/li&gt;
&lt;li&gt;Type your new key combination&lt;/li&gt;
&lt;li&gt;Click on OK&lt;/li&gt;
&lt;/ol&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/AVvXsEjyy1I-kTmzlOrVsHhekekJdbxNsFPM_XVH410xOgcSIt6fbLOiiHk6q3ynneJ-YSBP0nbao6xQ9jNEzntxh7-DyIZOl7ksz4FsVcFuSyQcGRlaNznFwm0L2osZRy_dox7Q31DoiNfI4gw/s1600/Netbeans+-+Keymap.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;202&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjyy1I-kTmzlOrVsHhekekJdbxNsFPM_XVH410xOgcSIt6fbLOiiHk6q3ynneJ-YSBP0nbao6xQ9jNEzntxh7-DyIZOl7ksz4FsVcFuSyQcGRlaNznFwm0L2osZRy_dox7Q31DoiNfI4gw/s400/Netbeans+-+Keymap.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;h2 style=&quot;text-align: left;&quot;&gt;
IntelliJ IDEA&lt;/h2&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;
How does a company make money out of a Java IDE when programmers can just download very good IDES such as Eclipse and Netbeans for free? Easy, you make the best tool on the market! And that&#39;s exactly what JetBrains did with &lt;a href=&quot;http://www.jetbrains.com/idea/&quot; target=&quot;_blank&quot;&gt;IntellliJ IDEA&lt;/a&gt;. But don&#39;t take my word for it: just read what Martin Fowler &lt;a href=&quot;http://martinfowler.com/bliki/PostIntelliJ.html&quot; target=&quot;_blank&quot;&gt;has to say about IntelliJ&lt;/a&gt; (in its way, Martin Fowler is the IT version of Tom Hanks, we can always borrow his credibility). While there is a free Community Edition (which is good enough to run the amazing Scala Plugin, light years ahead of the competition) the good stuff comes with a price tag.&lt;br /&gt;
Is it worth it? Sure! I think that IntelliJ is indeed the Best Java and Polyglot IDE there is. I feel that developing with IntelliJ is a pleasure. Yes, I think that it can read my mind. And yes, I&#39;m sold. But no, I&#39;m not on commission, although if someone at Jetbrains ever reads this article and feel like donating a lifetime IntelliJ license, I&#39;m all for it!&lt;br /&gt;
&lt;br /&gt;
God is in the details! And IntelliJ &lt;i&gt;Find Actions&lt;/i&gt; command has a very different (and, in my option, way better) approach for searching actions than Eclipse and Netbeans top right corner search boxes... &lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;Ctrl+Shift+a&lt;/span&gt; makes IntelliJ pop up a contextual menu right in the middle of your code. Easy, fast and to the point.&lt;/div&gt;
&lt;div style=&quot;text-align: left;&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/AVvXsEjoargjvvNNJdONKtmiC6N1jWR8pHD0LxDAysN7WUnloo3DBg2ISMY2T6GCMQNkR4FTfOTN9KWctmufTCJQFaN2D0RNGx1lqk0CbraRTuBhyphenhyphenkqywrD1t6c8nhENGTlfMtmRR6V6eYTftec/s1600/Intellij+-+Find+Actions.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;202&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjoargjvvNNJdONKtmiC6N1jWR8pHD0LxDAysN7WUnloo3DBg2ISMY2T6GCMQNkR4FTfOTN9KWctmufTCJQFaN2D0RNGx1lqk0CbraRTuBhyphenhyphenkqywrD1t6c8nhENGTlfMtmRR6V6eYTftec/s400/Intellij+-+Find+Actions.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
If &lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;Ctrl+Shift+a&lt;span style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt; &lt;/span&gt;&lt;/span&gt;stresses your fingers (or your brain), no problem - here is the receipt to change it:&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;Navigate to File &lt;span class=&quot;sign&quot;&gt;→ Settings&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class=&quot;sign&quot;&gt;At the left menu click on Keymap&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class=&quot;sign&quot;&gt;Look for &lt;span style=&quot;font-family: inherit;&quot;&gt;&quot;Find action&quot;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class=&quot;sign&quot;&gt;Click twice on it to customize the shortcuts&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class=&quot;sign&quot;&gt;Click on Apply and OK&lt;/span&gt;&lt;/li&gt;
&lt;/ol&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/AVvXsEjh6hUHy_t2Iq_EpintgHZix1NJm3N-of66lW4rkHo17CbSVT3ObOQIQBk8UTXymQLYfyRxHNEXT5qv1ZWBfgmxJ-pd6FdCtvYagjx41Jgl-OCo0XP8ePlSxoCr10Powh998MWiZk0iJ4E/s1600/IntelliJ+-+Keymap.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;281&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjh6hUHy_t2Iq_EpintgHZix1NJm3N-of66lW4rkHo17CbSVT3ObOQIQBk8UTXymQLYfyRxHNEXT5qv1ZWBfgmxJ-pd6FdCtvYagjx41Jgl-OCo0XP8ePlSxoCr10Powh998MWiZk0iJ4E/s400/IntelliJ+-+Keymap.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;hr /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
And that&#39;s all: you&#39;ve learned how to find your actions and teach yourself new shortcuts using three of the most popular Java IDES. Plus you have mastered how to customize key bindings according to your desires. Now come on, don&#39;t be a Hobbit (or eight Hobbits, also know as a Hobbyte)! Use the precious shortcut... Rule them all!&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://a.accioly.7rtc.com/feeds/4510571374848154794/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3179991594448154975/4510571374848154794' title='3 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3179991594448154975/posts/default/4510571374848154794'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3179991594448154975/posts/default/4510571374848154794'/><link rel='alternate' type='text/html' href='http://a.accioly.7rtc.com/2013/10/java-ides-one-shortcut-to-rule-them-all.html' title='Java IDES - One shortcut to rule them all'/><author><name>Anthony Accioly</name><uri>http://www.blogger.com/profile/11204999973940488842</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiOIHaF03sVRdxnTQtwpAiPiUjdhFgtRb7uQblP0cd6Rcka7bGCYTMkJRJsZwnQR-6xpwVxvSmM7XqLMINSYtq_11HYmbJqbaCD2EllLELD_MpBrsHppPQGHDGbWQRjBhvSFdEEZR95Pqc/s72-c/Java+IDES.png" height="72" width="72"/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3179991594448154975.post-8638105204531107574</id><published>2013-10-01T00:18:00.001-03:00</published><updated>2014-09-23T10:58:41.547-03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Ciências da Computação"/><category scheme="http://www.blogger.com/atom/ns#" term="Exames"/><category scheme="http://www.blogger.com/atom/ns#" term="POSCOMP"/><category scheme="http://www.blogger.com/atom/ns#" term="Pós-Graduação"/><title type='text'>POSCOMP 2013</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;h3 style=&quot;text-align: center; background-color: white; border: 1px solid black; filter: alpha(opacity=30); margin: 30px 60px; opacity: 0.6;&quot;&gt;
&lt;a href=&quot;http://a.accioly.7rtc.com/2014/09/media-poscomp-2014-estimativa.html&quot;&gt;PARA POSCOMP 2014 CLIQUE AQUI&lt;/a&gt;&lt;/h3&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Quem leu meu artigo &lt;a href=&quot;http://a.accioly.7rtc.com/2010/11/exame-poscomp-2010.html&quot; target=&quot;_blank&quot;&gt;&quot;POSCOMP 2010&quot;&lt;/a&gt;&amp;nbsp;sabe que o &lt;a href=&quot;http://www.sbc.org.br/index.php?option=com_content&amp;amp;view=category&amp;amp;layout=blog&amp;amp;id=237&amp;amp;Itemid=182&quot; target=&quot;_blank&quot;&gt;POSCOMP&lt;/a&gt; é um exame de múltipla escolha com 70 questões, exigido pelos melhores programas de pós-graduação em Ciências da Computação / Engenharia da Computação / Engenharia de Sistemas / Sistemas de Informação / Informática e áreas correlatas no Brasil.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Se você pretende entrar em programas de mestrado / doutorado em computação na USP, UNICAMP, UFSCar, UNIFESP, PUC-Rio, UFRJ, UFMG, UNB, UFPE, UFPR, IME–RJ, UFRGS, UFSC, etc é recomendável prestar o exame. Esses programas geralmente usam o POSCOMP tanto na seleção de mestrandos e doutorandos quanto como critério para distribuição de bolsas.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
O exame é divido em três grandes áreas: Matemática, Fundamentos da Computação (que contém a maior parte das questões) e Tecnologia da Computação.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
O objetivo dos candidatos buscando vagas em programas de excelência é ficar acima da média geral. Essa é historicamente baixa. A média de acertos entre 2002 e 2011 foi de aproximadamente 25 questões (~35%). Isso mostra o nível de exigência do exame.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Eu prestei o exame em 2010. Com os resultados do exame garanti vagas em bons programas de pós-graduação, incluindo o &lt;a href=&quot;http://www.cos.ufrj.br/&quot; target=&quot;_blank&quot;&gt;Programa de Engenharia de Sistemas e Computação na COPPE / UFRJ&lt;/a&gt; e no &lt;a href=&quot;http://www.inf.puc-rio.br/&quot; target=&quot;_blank&quot;&gt;Departamento de Informática da PUC-Rio&lt;/a&gt;, ambos conhecidos pela excelente produção científica e pelo conceito máximo na &lt;a href=&quot;http://conteudoweb.capes.gov.br/conteudoweb/ProjetoRelacaoCursosServlet?acao=pesquisarIes&amp;amp;codigoArea=10300007&amp;amp;descricaoArea=CI%CANCIAS+EXATAS+E+DA+TERRA+&amp;amp;descricaoAreaConhecimento=CI%CANCIA+DA+COMPUTA%C7%C3O&amp;amp;descricaoAreaAvaliacao=CI%CANCIA+DA+COMPUTA%C7%C3O&quot; target=&quot;_blank&quot;&gt;avaliação da CAPES&lt;/a&gt;.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
É claro que esses programas levam em consideração muitas outras coisas além do POSCOMP. Dentre elas: histórico acadêmico, cartas de recomendação, envolvimento com atividades de pesquisa (Iniciação Científica e publicações), currículo, etc. Um fator importante é buscar uma área de pesquisa de seu interesse e, dentro dessa área, orientadores que possam guiá-lo em suas atividades de pesquisa (é costumeiro que alunos de pós-graduação sigam a linha de pesquisa de seus orientadores).&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Nesse domingo (29/09/2013) voltei ao IME-USP para prestar o POSCOMP pela segunda vez. Segue a prova com gabarito oficial&lt;/div&gt;
&lt;div style=&quot;-x-system-font: none; display: block; font-family: Helvetica,Arial,Sans-serif; font-size-adjust: none; font-size: 14px; font-stretch: normal; font-style: normal; font-variant: normal; font-weight: normal; line-height: normal; margin: 12px auto 6px auto;&quot;&gt;
&lt;a href=&quot;http://www.scribd.com/doc/178786144/POSCOMP-2013&quot; style=&quot;text-decoration: underline;&quot; title=&quot;View POSCOMP-2013 on Scribd&quot;&gt;POSCOMP-2013&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;iframe class=&quot;scribd_iframe_embed&quot; data-aspect-ratio=&quot;0.706896551724138&quot; data-auto-height=&quot;false&quot; frameborder=&quot;0&quot; height=&quot;600&quot; id=&quot;doc_58665&quot; scrolling=&quot;no&quot; src=&quot;//www.scribd.com/embeds/178786144/content?start_page=1&amp;amp;view_mode=scroll&amp;amp;access_key=key-o909hab6m4smtnxlhjg&amp;amp;show_recommendations=true&quot; width=&quot;100%&quot;&gt;&lt;/iframe&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Para candidatos interessados em prestar o POSCOMP em 2014, tomei a liberdade de fazer &lt;i&gt;upload&lt;/i&gt; dos 4 últimos exames para o &lt;a href=&quot;http://www.scribd.com/collections/4356586/POSCOMP&quot; target=&quot;_blank&quot;&gt;Scribd&lt;/a&gt; (extraídos do site da &lt;a href=&quot;http://www.sbc.org.br/&quot; target=&quot;_blank&quot;&gt;SBC&lt;/a&gt;).&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Segue o link:&amp;nbsp;&lt;a href=&quot;http://www.scribd.com/collections/4356586/POSCOMP&quot; target=&quot;_blank&quot;&gt;http://www.scribd.com/collections/4356586/POSCOMP&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Boa sorte a todos que estão aguardando os resultados oficiais!&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
PS: Se você prestou o POSCOMP por favor deixe um comentário com suas impressões sobre o exame.&lt;/div&gt;
&lt;br /&gt;
&lt;hr /&gt;
&lt;h4&gt;
UPDATES&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;
    &lt;div style=&quot;text-align: justify;&quot;&gt;
Criei uma planilha no Google para estimarmos a média de 2013. &lt;br /&gt;
Link: &lt;a href=&quot;http://goo.gl/wZmkUk&quot; target=&quot;_blank&quot;&gt;Média POSCOMP 2013&lt;/a&gt;
    &lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
      Gabarito provisório substituído pelo definitivo.
  &lt;/li&gt;
&lt;li&gt;
      Planilha para correção da prova conforme gabarito definitivo. &lt;br /&gt;
      Link: &lt;a href=&quot;http://goo.gl/Xkrjtx&quot; target=&quot;_blank&quot;&gt;Correção POSCOMP 2013&lt;/a&gt;
  &lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://a.accioly.7rtc.com/feeds/8638105204531107574/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3179991594448154975/8638105204531107574' title='60 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3179991594448154975/posts/default/8638105204531107574'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3179991594448154975/posts/default/8638105204531107574'/><link rel='alternate' type='text/html' href='http://a.accioly.7rtc.com/2013/10/poscomp-2013.html' title='POSCOMP 2013'/><author><name>Anthony Accioly</name><uri>http://www.blogger.com/profile/11204999973940488842</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>60</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3179991594448154975.post-8229780722675430175</id><published>2013-09-21T22:50:00.003-03:00</published><updated>2013-09-22T20:36:19.733-03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="E-learning"/><category scheme="http://www.blogger.com/atom/ns#" term="Java"/><category scheme="http://www.blogger.com/atom/ns#" term="Scala"/><title type='text'>MOOC - Princípios de Programação Funcional em Scala</title><content type='html'>&lt;div style=&quot;text-align: justify;&quot;&gt;
Gostaria de aproveitar esse &lt;i&gt;post&lt;/i&gt; para divulgar um excelente curso online gratuito na &lt;a href=&quot;https://www.coursera.org/&quot; target=&quot;_blank&quot;&gt;Coursera&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Trata-se do curso&amp;nbsp;Princípios de Programação Funcional em Scala (&lt;i&gt;Functional Programming Principles in Scala&lt;/i&gt;). Segue link:&amp;nbsp;&lt;a href=&quot;https://www.coursera.org/course/progfun&quot; target=&quot;_blank&quot;&gt;https://www.coursera.org/course/progfun&lt;/a&gt;.&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
O instrutor do curso é ninguém menos do que &lt;a href=&quot;http://en.wikipedia.org/wiki/Martin_Odersky&quot; target=&quot;_blank&quot;&gt;Martin Odersky&lt;/a&gt;, criador da linguagem &lt;a href=&quot;http://www.scala-lang.org/&quot; target=&quot;_blank&quot;&gt;Scala&lt;/a&gt;, fundador da empresa &lt;a href=&quot;http://typesafe.com/&quot; target=&quot;_blank&quot;&gt;Typesafe&lt;/a&gt; e Pesquisador na&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://www.epfl.ch/&quot; target=&quot;_blank&quot;&gt;École Polytechnique Fédérale de Lausanne&lt;/a&gt;.&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Eu acompanhei a segunda versão do curso fora de época e posso atestar a qualidade em primeira mão. De fato o curso da Coursera é utilizado &lt;a href=&quot;http://lamp.epfl.ch/teaching/progp&quot; target=&quot;_blank&quot;&gt;como parte das atividades&lt;/a&gt; na EPFL, ou seja, alunos do Professor Odersky se matriculam normalmente na Coursera junto a outros milhares de candidatos ao redor do mundo; na primeira versão do curso mais de 50.000 pessoas se inscreveram (&lt;a href=&quot;http://docs.scala-lang.org/news/functional-programming-principles-in-scala-impressions-and-statistics.html&quot; target=&quot;_blank&quot;&gt;veja as estatísticas&lt;/a&gt;).&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
O tom do curso é bastante acadêmico, entrando em detalhes sobre modelo de substituição logo na primeira aula e navegando no mundo de funções de alta ordem, &lt;i&gt;currying&lt;/i&gt;, covariância, contravariância, &lt;i&gt;pattern matching&lt;/i&gt;, tuplas, parâmetros implícitos, monoides, streams, etc. Mas acredito ele seja também de grande valia para a indústria. Meus colegas de trabalho sempre me escutam tagarelando sobre Scala... Principalmente quando esbarro em pedaços de&amp;nbsp;código longos e difíceis de ler em Java com contrapartidas intuitivas e sucintas em Scala. Além disso, cada vez mais linguagens Orientadas a Objetos vem adotando construções típicas de linguagens Funcionais como genéricos (&lt;a href=&quot;http://en.wikipedia.org/wiki/Generics_in_Java&quot; target=&quot;_blank&quot;&gt;introduzidos no Java 5&lt;/a&gt;) e expressões &lt;i&gt;lambda&lt;/i&gt; (suportadas em&amp;nbsp;&lt;a href=&quot;http://en.wikipedia.org/wiki/C_Sharp_3.0&quot; target=&quot;_blank&quot;&gt;C# desde a versão 3.0&lt;/a&gt; e e pelo&amp;nbsp;&lt;a href=&quot;http://docs.oracle.com/javase/tutorial/java/javaOO/lambdaexpressions.html&quot; target=&quot;_blank&quot;&gt;Java 8&lt;/a&gt; previsto para Março de 2014).&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Nada como adicionar uma linguagem &quot;híbrida&quot;, concebida com expressividade e escalabilidade em mente, 100% interoperável com Java (e seu enorme ecossistema) e altamente&amp;nbsp;&lt;a href=&quot;http://benchmarksgame.alioth.debian.org/u64q/benchmark.php?test=all&amp;amp;lang=scala&amp;amp;data=u64q&quot; target=&quot;_blank&quot;&gt;performática&lt;/a&gt;&amp;nbsp;ao seu conjunto de &lt;i&gt;skills&lt;/i&gt;. Além do que, aprender a mentalidade da programação funcional te faz um programador melhor em geral... Após minha experiência com Scala acabei descobrindo jóias do &lt;a href=&quot;http://commons.apache.org/&quot; target=&quot;_blank&quot;&gt;Apache Commons&lt;/a&gt; e &lt;a href=&quot;https://code.google.com/p/guava-libraries/&quot; target=&quot;_blank&quot;&gt;Google Guava&lt;/a&gt; que possibilitam escrever código Java muito mais limpo. Também reforcei meu padrão de pensar mais / escrever menos código (os exercícios do curso realmente te fazem quebrar a cabeça, e no fim das contas as soluções são sempre simples).&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
O curso tem duração de sete semanas. A cada semana o aluno recebe o material de estudo (incluindo vídeos do Martin Odersky) e uma atividade de programação (com data de entrega para a próxima semana). O aluno pode submeter os exercícios através de um &lt;i&gt;plugin &lt;/i&gt;do &lt;a href=&quot;http://www.scala-sbt.org/&quot; target=&quot;_blank&quot;&gt;sbt&lt;/a&gt; (ferramenta de &lt;i&gt;build&lt;/i&gt; popular entre desenvolvedores Scala). A correção dos exercícios é feita automaticamente em servidores (&lt;a href=&quot;http://aws.amazon.com/ec2/&quot; target=&quot;_blank&quot;&gt;no Amazon EC2&lt;/a&gt;) que rodam testes unitários e analisadores estáticos de código contra a solução submetida. O aluno recebe uma nota de 0 a 10 e &lt;i&gt;feedback &lt;/i&gt;sobre seu exercício &amp;nbsp;de maneira quasi-instantânea. A correção leva em consideração:&lt;/div&gt;
&lt;ul&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;Testes unitários&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;Estilo (indentação, espaços em branco, etc)&amp;nbsp;&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;Boas práticas da programação funcional em Scala (evitar casts, variáveis locais mutáveis, uso de &lt;i&gt;return&lt;/i&gt;, etc)&amp;nbsp;&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;Prazo de entrega (cada dia de atraso desconta 20% da nota)&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
O aluno pode submeter respostas para o mesmo exercício até cinco vezes com o objetivo de refinar sua implementação. São aprovados no curso (com direito a certificado oficial) alunos que obtiverem média acima de 60%.&lt;/div&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Além do arsenal para correção automática de exercícios, o curso conta com um rico fórum de discussão em que alunos podem interagir, formar grupos de estudo e submeter / responder questões. Os fóruns são moderados por assistentes voluntários (comunidade) e &lt;i&gt;staff&lt;/i&gt; oficial do curso para garantir a qualidade das discussões (bem como evitar que os alunos &quot;colem&quot;).&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
A experiência do curso é muito enriquecedora, definitivamente vale a pena.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
E ainda dá tempo de se matricular! A data de entrega para o primeiro exercício é dia 25/09/2013... No pior caso, se você perder essa data é possível passar no curso sem entregar o primeiro exercício (obtendo boas notas nos demais exercícios).&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Então o que está esperando? &lt;a href=&quot;https://www.coursera.org/course/progfun&quot; target=&quot;_blank&quot;&gt;Venha participar&lt;/a&gt;!&lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://a.accioly.7rtc.com/feeds/8229780722675430175/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3179991594448154975/8229780722675430175' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3179991594448154975/posts/default/8229780722675430175'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3179991594448154975/posts/default/8229780722675430175'/><link rel='alternate' type='text/html' href='http://a.accioly.7rtc.com/2013/09/mooc-principios-de-programacao.html' title='MOOC - Princípios de Programação Funcional em Scala'/><author><name>Anthony Accioly</name><uri>http://www.blogger.com/profile/11204999973940488842</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3179991594448154975.post-4935953484454667472</id><published>2013-09-17T21:19:00.002-03:00</published><updated>2017-03-24T16:28:18.007-03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="DevOps"/><category scheme="http://www.blogger.com/atom/ns#" term="Eventos"/><category scheme="http://www.blogger.com/atom/ns#" term="PaaS"/><category scheme="http://www.blogger.com/atom/ns#" term="Web Scale"/><title type='text'>Slides- Escalabilidade Web / DevOps e PaaS</title><content type='html'>Slides da palestra &quot;Escalabilidade Web:&amp;nbsp;Sharding, Indexação, CDN, NoSQL, DevOps, Cloud, PaaS e a Vida Real&quot; na EACH - USP Leste.&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Agradeço ao Professor Eler e a todos que participaram!&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;iframe src=&#39;https://onedrive.live.com/embed?cid=361F02617EBF7982&amp;resid=361F02617EBF7982%215894&amp;authkey=ALhffRYZiIe_qsc&amp;em=2&amp;wdAr=1.7777777777777777&#39; width=&#39;610px&#39; height=&#39;367px&#39; frameborder=&#39;0&#39; style=&quot;display: block; margin: 0 auto;&quot;&gt;This is an embedded &lt;a target=&#39;_blank&#39; href=&#39;https://office.com&#39;&gt;Microsoft Office&lt;/a&gt; presentation, powered by &lt;a target=&#39;_blank&#39; href=&#39;https://office.com/webapps&#39;&gt;Office Online&lt;/a&gt;.&lt;/iframe&gt;</content><link rel='replies' type='application/atom+xml' href='http://a.accioly.7rtc.com/feeds/4935953484454667472/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3179991594448154975/4935953484454667472' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3179991594448154975/posts/default/4935953484454667472'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3179991594448154975/posts/default/4935953484454667472'/><link rel='alternate' type='text/html' href='http://a.accioly.7rtc.com/2013/09/slides-escalabilidade-web-devops-e-paas.html' title='Slides- Escalabilidade Web / DevOps e PaaS'/><author><name>Anthony Accioly</name><uri>http://www.blogger.com/profile/11204999973940488842</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3179991594448154975.post-7611550809018244229</id><published>2013-09-08T05:42:00.000-03:00</published><updated>2013-09-08T17:23:53.599-03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Linux"/><title type='text'>Linux em 2013 - Primeiras impressões do openSUSE 12.3 e KDE 4</title><content type='html'>&lt;div style=&quot;text-align: justify;&quot;&gt;
Recentemente, um pouco decepcionado com o&amp;nbsp;&lt;a href=&quot;http://www.ubuntu.com/&quot; target=&quot;_blank&quot;&gt;Ubuntu&lt;/a&gt; 13.04, comecei a procurar outras &lt;i&gt;distros&lt;/i&gt;&amp;nbsp;Linux para uso no dia a dia.&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
E como o cenário das &lt;i&gt;&lt;a href=&quot;http://distrowatch.com/&quot; target=&quot;_blank&quot;&gt;distros&lt;/a&gt; &lt;/i&gt;mudou de alguns anos para cá! &amp;nbsp;Eu sou da época em que suas escolhas se resumiam a:
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;distribuições baseadas em &lt;a href=&quot;http://www.gnome.org/&quot; target=&quot;_blank&quot;&gt;Gnome&lt;/a&gt; ou &lt;a href=&quot;http://www.kde.org/&quot; target=&quot;_blank&quot;&gt;KDE&lt;/a&gt;,&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Deb_(file_format)&quot; target=&quot;_blank&quot;&gt;DEB&lt;/a&gt;, &lt;a href=&quot;http://en.wikipedia.org/wiki/RPM_Package_Manager&quot; target=&quot;_blank&quot;&gt;RPM&lt;/a&gt; ou &quot;compile você mesmo&quot; (&lt;a href=&quot;http://www.gentoo.org/&quot; target=&quot;_blank&quot;&gt;Gentoo&lt;/a&gt; &lt;i&gt;style!&lt;/i&gt;).&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
Não me leve a mal, já existiam várias &lt;i&gt;distros&lt;/i&gt; voltadas a&amp;nbsp;&lt;i&gt;desktops &lt;/i&gt;e&amp;nbsp;outros sistemas de arquivo além do &lt;a href=&quot;http://en.wikipedia.org/wiki/Extended_file_system&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;ext&lt;/a&gt;, mas a vida para o típico usuário Linux costuma ser bem mais simples.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
No servidor boa parte de nós rodava &lt;a href=&quot;http://www.redhat.com/products/enterprise-linux/&quot; target=&quot;_blank&quot;&gt;RHEL&lt;/a&gt;, seu primo &lt;a href=&quot;http://www.centos.org/&quot; target=&quot;_blank&quot;&gt;CentOS&lt;/a&gt; ou o &lt;a href=&quot;http://www.debian.org/&quot; target=&quot;_blank&quot;&gt;Debian&lt;/a&gt;. Para o &lt;i&gt;desktop&lt;/i&gt; os grandes nomes eram Ubuntu e&amp;nbsp;&lt;a href=&quot;http://fedoraproject.org/&quot; target=&quot;_blank&quot;&gt;Fedora&lt;/a&gt;. Aqui no Brasil, nosso querido (e descontinuado) &lt;a href=&quot;http://www.hardware.com.br/kurumin/&quot; target=&quot;_blank&quot;&gt;Kurumin&lt;/a&gt; escrito pelo &lt;a href=&quot;http://pt.wikipedia.org/wiki/Carlos_Eduardo_Morimoto&quot; target=&quot;_blank&quot;&gt;Carlos Morimoto&lt;/a&gt;, bem como o &lt;a href=&quot;http://distrowatch.com/table.php?distribution=conectiva&quot; target=&quot;_blank&quot;&gt;Conectiva Linux&lt;/a&gt; (que, após fusão com o Mandrake, deu origem ao &lt;a href=&quot;http://en.wikipedia.org/wiki/Mandriva_Linux&quot; target=&quot;_blank&quot;&gt;Mandriva Linux&lt;/a&gt; que deu origem ao &lt;a href=&quot;http://www.mageia.org/&quot; target=&quot;_blank&quot;&gt;Mangeia&lt;/a&gt;) fizeram muito sucesso...&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Mas nada pode parar a evolução. Foram lançados os controversos &lt;a href=&quot;https://wiki.gnome.org/GnomeShell&quot; target=&quot;_blank&quot;&gt;Gnome Shell&lt;/a&gt;&amp;nbsp;e&amp;nbsp;KDE 4, que desagradaram parte dos usuários acostumados com a tradicional &lt;a href=&quot;http://pt.wikipedia.org/wiki/Met%C3%A1fora_de_escrit%C3%B3rio&quot; target=&quot;_blank&quot;&gt;metáfora de escritório&lt;/a&gt;. A Canonical lançou o&amp;nbsp;&lt;a href=&quot;https://unity.ubuntu.com/&quot; target=&quot;_blank&quot;&gt;Unity&lt;/a&gt;&amp;nbsp;e começou a distribuí-lo por padrão com o Ubuntu; surgiram também outros projetos como&amp;nbsp;&lt;a href=&quot;http://mate-desktop.org/&quot; target=&quot;_blank&quot;&gt;MATE&lt;/a&gt; para agradar os usuários leais ao Gnome 2 e &lt;a href=&quot;http://cinnamon.linuxmint.com/&quot; target=&quot;_blank&quot;&gt;Cinnamon&lt;/a&gt;&amp;nbsp;para quem desejava uma interface tradicional em cima do Gnome 3 (ambos distribuídos com Linux &lt;a href=&quot;http://www.linuxmint.com/&quot; target=&quot;_blank&quot;&gt;Mint&lt;/a&gt;, outra &lt;i&gt;distro&lt;/i&gt; fantástica que pretendo revisar em breve). Projetos como o &lt;a href=&quot;http://www.xfce.org/&quot; target=&quot;_blank&quot;&gt;Xfce&lt;/a&gt; e &lt;a href=&quot;http://lxde.org/&quot; target=&quot;_blank&quot;&gt;LXDE&lt;/a&gt;, que antes viviam na escuridão também ganharam popularidade.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Eu não tenho &lt;i&gt;cojones&lt;/i&gt; para tecer opiniões sobre a fragmentação dos ambientes de &lt;i&gt;desktop&lt;/i&gt; Linux (nem na camada mais baixa dos&amp;nbsp;&lt;a href=&quot;http://en.wikipedia.org/wiki/Display_server&quot; target=&quot;_blank&quot;&gt;&lt;i&gt;display servers&lt;/i&gt;&lt;/a&gt; como&amp;nbsp;&lt;a href=&quot;http://www.x.org/wiki/&quot; target=&quot;_blank&quot;&gt;X11&lt;/a&gt;, &lt;a href=&quot;http://wayland.freedesktop.org/&quot; target=&quot;_blank&quot;&gt;Wayland&lt;/a&gt; e &lt;a href=&quot;https://wiki.ubuntu.com/Mir/&quot; target=&quot;_blank&quot;&gt;Mir&lt;/a&gt;). Então deixo um vídeo do &lt;a href=&quot;http://lunduke.com/&quot; target=&quot;_blank&quot;&gt;Bryan Lunduke&lt;/a&gt;, apaixonado o suficiente por Linux para cutucar a ferida:&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;iframe allowfullscreen=&#39;allowfullscreen&#39; webkitallowfullscreen=&#39;webkitallowfullscreen&#39; mozallowfullscreen=&#39;mozallowfullscreen&#39; width=&#39;320&#39; height=&#39;266&#39; src=&#39;https://www.youtube.com/embed/QKwWPQ1Orzs?feature=player_embedded&#39; frameborder=&#39;0&#39;&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
(Assistam também &lt;a href=&quot;http://youtu.be/pSxX8a_TC7I&quot; target=&quot;_blank&quot;&gt;Why Linux Doesn&#39;t Suck - 2013&lt;/a&gt;)&lt;/div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
Enfim, com ou sem fragmentação, eu brinquei o suficiente com o &lt;a href=&quot;http://windows.microsoft.com/%E2%80%8E&quot; target=&quot;_blank&quot;&gt;Windows&lt;/a&gt;, &lt;a href=&quot;http://www.apple.com/osx/&quot; target=&quot;_blank&quot;&gt;OS X&lt;/a&gt; e primos do Linux como &lt;a href=&quot;http://www.oracle.com/us/products/servers-storage/solaris/index.html&quot; target=&quot;_blank&quot;&gt;Solaris&lt;/a&gt; e &lt;a href=&quot;http://www.freebsd.org/&quot; target=&quot;_blank&quot;&gt;FreeBSD&lt;/a&gt;&amp;nbsp;para saber em qual SO quero desenvolver... E esse SO é o Linux! De preferência em uma &lt;i&gt;distro&lt;/i&gt; com UI agradável e responsiva.&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Fico feliz quando o sistema vem pré-instalado com o &lt;a href=&quot;http://www.compiz.org/&quot; target=&quot;_blank&quot;&gt;Compiz&lt;/a&gt;&amp;nbsp;(ou similar) e tem&amp;nbsp;todo o &lt;i&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Compositing_window_manager#Usability_and_eye_candy&quot; target=&quot;_blank&quot;&gt;eye candy&lt;/a&gt;&lt;/i&gt;&amp;nbsp;para as tarefas mundanas. Fico ainda mais feliz quando o sistema me permite desativar todos os efeitos visuais com um &lt;i&gt;click &lt;/i&gt;ou tecla de atalho, de forma que eu possa rodar uma instância do &lt;a href=&quot;http://www.eclipse.org/&quot; target=&quot;_blank&quot;&gt;Eclipse&lt;/a&gt;, outra do &lt;a href=&quot;http://www.oracle.com/technetwork/developer-tools/jdev/overview/index.html&quot; target=&quot;_blank&quot;&gt;JDeveloper&lt;/a&gt;, uma terceira do &lt;a href=&quot;http://www.oracle.com/technetwork/developer-tools/sql-developer/overview/index.html&quot; target=&quot;_blank&quot;&gt;SQL Developer&lt;/a&gt;, dois domínios do &lt;a href=&quot;http://www.oracle.com/technetwork/middleware/weblogic/overview/index.html&quot; target=&quot;_blank&quot;&gt;Weblogic&lt;/a&gt;, um terminal com 5 abas em &lt;a href=&quot;http://en.wikipedia.org/wiki/Secure_Shell&quot; target=&quot;_blank&quot;&gt;SSH&lt;/a&gt;&amp;nbsp;e o &lt;a href=&quot;https://www.google.com/intl/en/chrome/browser/&quot; target=&quot;_blank&quot;&gt;Chrome&lt;/a&gt; com 30 abas abertas sem que o sistema tenha que desperdiçar recursos com transparência e efeitos de transição (sim, estou falando sério, já trabalhei com tudo isso tudo - e muito mais - simultaneamente!). Nessas situações extremas você pode perceber a eficiência do mecanismo de&amp;nbsp;&lt;a href=&quot;http://pt.wikipedia.org/wiki/Mem%C3%B3ria_virtual&quot; target=&quot;_blank&quot;&gt;memória virtual&lt;/a&gt;&amp;nbsp;e&amp;nbsp;&lt;a href=&quot;http://pt.wikipedia.org/wiki/Sistema_de_ficheiros&quot; target=&quot;_blank&quot;&gt;sistema de arquivos&lt;/a&gt;&amp;nbsp;do Linux.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Um outro fator importante para decidir entre &lt;i&gt;distros&lt;/i&gt; é o ciclo de vida. Enquanto o suporte de 5 anos para versões &lt;a href=&quot;https://wiki.ubuntu.com/LTS&quot; target=&quot;_blank&quot;&gt;LTS&lt;/a&gt; do Ubuntu é interessante, eu sempre preciso de algum aplicativo de versões mais novas do SO (nem sempre disponíveis através de &lt;a href=&quot;https://help.ubuntu.com/community/UbuntuBackports&quot; target=&quot;_blank&quot;&gt;Backports&lt;/a&gt;). O suporte por apenas 9 meses das versões comuns do Ubuntu é insano para uso no trabalho (infelizmente o Mint, baseado em Ubuntu, segue o mesmo ciclo de vida de 9 meses). Esse é um ponto muito positivo do &lt;a href=&quot;http://www.opensuse.org/en/&quot; target=&quot;_blank&quot;&gt;openSUSE&lt;/a&gt; que mantém suporte por pelo menos 18 meses (na verdade, &lt;a href=&quot;http://en.opensuse.org/Lifetime&quot; target=&quot;_blank&quot;&gt;duas releases + dois meses&lt;/a&gt;).&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Outro ponto positivo do openSUSE é a forte&amp;nbsp;comunidade&amp;nbsp;(não tão grande quanto a do Ubuntu ou Fedora, mas muito prestativa, educada e entusiástica) e o &quot;apadrinhamento&quot; pela &lt;a href=&quot;http://www.novell.com/home/&quot; target=&quot;_blank&quot;&gt;Novell&lt;/a&gt;. &amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Quem me conhece sabe que eu costumo torcer o nariz para &lt;i&gt;distros&lt;/i&gt;&amp;nbsp;com KDE e RPM (más experiências com o Fedora), mas a recomendação de amigos e a elegância da distribuição me levaram a experimentar algo novo (no &lt;a href=&quot;https://www.virtualbox.org/&quot; target=&quot;_blank&quot;&gt;VirtualBox&lt;/a&gt; é claro).&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Pouco mais de uma semana após a instalação e estou tão satisfeito que em breve promoverei o SO à sua própria partição (junto ao Windows 7 - &lt;strike&gt;como me arrependo de ter instalado o Windows 8&lt;/strike&gt; - e Mint 15).&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
O &lt;a href=&quot;http://software.opensuse.org/123/en&quot;&gt;download &lt;/a&gt;e instalação são muito simples (estilo &lt;i&gt;next&lt;/i&gt;, &lt;i&gt;next&lt;/i&gt;, &lt;i&gt;next&lt;/i&gt;). Estão disponíveis Live CDs Gnome e KDE, bem como um DVD capaz de instalar ambos os &lt;i&gt;desktops&lt;/i&gt; e uma vasta seleção de software (o DVD funciona como um repositório).&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
O &lt;i&gt;boot&lt;/i&gt; é rápido; a interface é limpa, bem trabalhada e fluída. O KDE, na minha opinião, sempre deixou o Gnome no chinelo em termos de configuração / customização, mas sempre me pareceu demasiadamente burocrático e pesado... Não é o caso dessa versão.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Eu vou ser honesto e admitir que ainda sou, por natureza, um usuário Gnome 2 / Unity e que fico um pouco perdido com conceitos do KDE como &lt;a href=&quot;http://userbase.kde.org/Plasma#Activities&quot; target=&quot;_blank&quot;&gt;atividades&lt;/a&gt;. Dito isso, para um dinossauro até que não demorei muito para me encontrar no &lt;a href=&quot;http://www.kde.org/workspaces/plasmadesktop/&quot; target=&quot;_blank&quot;&gt;Plasma&lt;/a&gt;... É tudo muito intuitivo, não leva mais de alguns minutos para descobrir e entender os painéis, &lt;i&gt;widgets&lt;/i&gt; e &lt;i&gt;folder views&lt;/i&gt;.&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhNo-hDZ8WwCIL0qlehAal1ytnyA2b6L17Mx8T2nXtIecHORyTwEMMCc3DjmGm24NxCEhDS0SUE-tvK2bGexvuXfoY_D_d2lZcufjUGOmv0aAX8tKjfJm8L2ZHLcqZ3ktgCnXvigrUzP10/s1600/1274456_10151658901558105_408143470_o.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;360&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhNo-hDZ8WwCIL0qlehAal1ytnyA2b6L17Mx8T2nXtIecHORyTwEMMCc3DjmGm24NxCEhDS0SUE-tvK2bGexvuXfoY_D_d2lZcufjUGOmv0aAX8tKjfJm8L2ZHLcqZ3ktgCnXvigrUzP10/s640/1274456_10151658901558105_408143470_o.jpg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Plasma&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Nem me dei ao trabalho de customizar a aparência do sistema. Na verdade essa foi a &lt;i&gt;distro&lt;/i&gt; com o tema padrão mais bonito que já encontrei (isso é, para quem gosta de preto).&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Isso não significa que não existam maneiras de personalizar papéis de parede, temas, decorações de janela, etc; inclusive os aplicativos de customização do KDE contam com botões para baixar mais recursos na internet (um bom site para começar é&amp;nbsp;&lt;a href=&quot;http://kde-look.org/&quot; target=&quot;_blank&quot;&gt;http://kde-look.org/&lt;/a&gt;)&lt;/div&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgtvkpQnqfdptdXOkA_jyfvxlvtp_H-f54sT_NUUH5mIMipW733Z4cC76s4Ax4gHqUg7rjbf82-jn_IwXUWDSvAJM9I980e9oixNQEMyFwA26sirpPAJuNmwCdExRJyMi1rx16qFfu9AtY/s1600/Window+Manager.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;296&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgtvkpQnqfdptdXOkA_jyfvxlvtp_H-f54sT_NUUH5mIMipW733Z4cC76s4Ax4gHqUg7rjbf82-jn_IwXUWDSvAJM9I980e9oixNQEMyFwA26sirpPAJuNmwCdExRJyMi1rx16qFfu9AtY/s400/Window+Manager.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Decorações de Janela&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Outro ponto que me preocupava é se eu conseguiria instalar versões razoavelmente atuais dos softwares que uso. Para minha surpresa não senti tanta falta do gigantesco repositório do Ubuntu e seu ecossistema de &lt;a href=&quot;http://en.wikipedia.org/wiki/Personal_Package_Archive&quot; target=&quot;_blank&quot;&gt;PPAs&lt;/a&gt;. Entre os repositórios padrões do openSuse, RPMs disponíveis na internet e os típicos softwares distribuídos nos formatos &lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;bin&lt;/span&gt; e &lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;tar.gz&lt;/span&gt; encontrei tudo que precisava (&lt;a href=&quot;http://en.opensuse.org/SDB:Installing_Java&quot; target=&quot;_blank&quot;&gt;Java&lt;/a&gt;, &lt;a href=&quot;http://www.scala-lang.org/&quot; target=&quot;_blank&quot;&gt;Scala&lt;/a&gt;, IDEs, versões recentes do &lt;a href=&quot;http://mercurial.selenic.com/&quot; target=&quot;_blank&quot;&gt;Mercurial&lt;/a&gt;, &lt;a href=&quot;http://git-scm.com/&quot; target=&quot;_blank&quot;&gt;Git&lt;/a&gt;, &lt;a href=&quot;http://maven.apache.org/&quot; target=&quot;_blank&quot;&gt;Maven&lt;/a&gt;, &lt;a href=&quot;http://www.scala-sbt.org/&quot; target=&quot;_blank&quot;&gt;sbt&lt;/a&gt;, etc). Mesmo &lt;a href=&quot;http://www.oracle.com/technetwork/middleware/downloads/fusion-downloads-1714164.html&quot;&gt;softwares da Oracle&lt;/a&gt; que historicamente sempre foram &quot;seletivos&quot; em relação a&amp;nbsp;&lt;i&gt;distros&lt;/i&gt; instalaram sem nenhum problema (ainda não usei todos exaustivamente, mas por enquanto tudo parece estar em ordem).&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Um ponto forte do openSUSE é o mecanismo &lt;i&gt;&lt;a href=&quot;http://en.opensuse.org/openSUSE:One_Click_Install&quot; target=&quot;_blank&quot;&gt;One Click Install&lt;/a&gt; &lt;/i&gt;que adiciona repositórios, verifica dependências, faz a instalação e configura atualizações automáticas para determinado software em um único passo através de botões em websites e arquivos YMP distribuídos pela internet. Combine esse mecanismo com um &lt;a href=&quot;http://software.opensuse.org/123/en&quot; target=&quot;_blank&quot;&gt;portal&lt;/a&gt; que agrega pacotes oficiais e não oficiais e você tem o melhor dos mundos.&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgLAHuBXh1G-SVL1ETPdow3fPcg994EKQNh8puurKaiSdvUvtMFIoJ9ObeWJTy2yVAJhrhRY-Ybu0mszinnS-i8SasyU0sx9tZFrFqSa-N8tgXBG5ToR8ckVf7CtcXttgzUngyYj3QMYI4/s1600/Package+Search.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;322&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgLAHuBXh1G-SVL1ETPdow3fPcg994EKQNh8puurKaiSdvUvtMFIoJ9ObeWJTy2yVAJhrhRY-Ybu0mszinnS-i8SasyU0sx9tZFrFqSa-N8tgXBG5ToR8ckVf7CtcXttgzUngyYj3QMYI4/s400/Package+Search.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Package Search&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;
Falando em atualizações, essa é uma área muito transparente e funcional no openSUSE. Atualizações disponíveis aparecem na área de notificação e, caso o usuário deseje atualizar um pacote, os softwares &lt;a href=&quot;http://userbase.kde.org/Apper&quot; target=&quot;_blank&quot;&gt;Apper&lt;/a&gt; e &lt;a href=&quot;http://en.opensuse.org/YaST_Software_Management&quot; target=&quot;_blank&quot;&gt;YaST&lt;/a&gt; (esse último é muito superior ao&amp;nbsp;&lt;a href=&quot;https://help.ubuntu.com/community/SoftwareCenterFAQ&quot; target=&quot;_blank&quot;&gt;Ubuntu Software Center&lt;/a&gt;, e, na minha opinião, mais intuitivo do que o&amp;nbsp;&lt;a href=&quot;http://www.nongnu.org/synaptic/&quot; target=&quot;_blank&quot;&gt;Synaptic&lt;/a&gt;) se encarregam de todo o processo.&lt;/div&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj0Vrw_ldN1zEoML8iIavnu47W8qcXFzMujcL1UciKJgfhtkNKcKEhDiMjnbW4VnpSem99sR8BtF4W0JSzPQesagYbpB_-GOnm5Qw1OM-U-W4qP7_AiPs087QeVJBjdo0EaGnUwe3tnnNU/s1600/Updates.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;237&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj0Vrw_ldN1zEoML8iIavnu47W8qcXFzMujcL1UciKJgfhtkNKcKEhDiMjnbW4VnpSem99sR8BtF4W0JSzPQesagYbpB_-GOnm5Qw1OM-U-W4qP7_AiPs087QeVJBjdo0EaGnUwe3tnnNU/s320/Updates.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Apper&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi_YilqZCRKP8EVLT3vF80CihPVU6me4AC6YGpk54hh0i6bC-E1JBbUHxrL4OQR867brV-UeMJ-lft2TDLQBwOLgKYCuxJzQ04mtV0Kgu130eJk4-15qlWtsLUDM8qtwgHAtT0N94xm-w8/s1600/Updates3.jpeg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;180&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi_YilqZCRKP8EVLT3vF80CihPVU6me4AC6YGpk54hh0i6bC-E1JBbUHxrL4OQR867brV-UeMJ-lft2TDLQBwOLgKYCuxJzQ04mtV0Kgu130eJk4-15qlWtsLUDM8qtwgHAtT0N94xm-w8/s320/Updates3.jpeg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;YaST&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&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: justify;&quot;&gt;
Algo admirável do KDE é a flexibilidade para customização das teclas de atalho. O ambiente oferece configurações para atalhos globais, atalhos específicos de cada aplicação e mesmo de aplicativos no menu. Olha o &lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;Alt+Shift+F12&lt;/span&gt; para desabilitar os efeitos visuais aí ;).&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg-HZF7KhTTGU3WKNOIhqlGuR0yS0ra_8mt-kXEruQYHcT3b-a9wuWCgTuryOOGhkp6nX4tmvln7cnEihYds_LmrTN7_b0PjLP-_bK03T83u4HswbuYdgyiy8H_DkW4QBjVTW_qMeIclgY/s1600/Shortcuts2.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;228&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg-HZF7KhTTGU3WKNOIhqlGuR0yS0ra_8mt-kXEruQYHcT3b-a9wuWCgTuryOOGhkp6nX4tmvln7cnEihYds_LmrTN7_b0PjLP-_bK03T83u4HswbuYdgyiy8H_DkW4QBjVTW_qMeIclgY/s320/Shortcuts2.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Configuração de atalhos globais&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;
É claro que, por melhor que uma &lt;i&gt;distro&lt;/i&gt; seja, sempre existem alguns probleminhas:&lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;Esbarrei em um &lt;a href=&quot;https://bugzilla.novell.com/show_bug.cgi?id=837959&quot; target=&quot;_blank&quot;&gt;&lt;i&gt;bug&lt;/i&gt; do &lt;i&gt;kdesu&lt;/i&gt;&lt;/a&gt; quando a senha do root contém aspas duplas (&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;&quot;&lt;/span&gt;)&lt;/li&gt;
&lt;li&gt;A &lt;i&gt;performance&lt;/i&gt; do flash é abismal (mas pode ser culpa da VM)
&lt;/li&gt;
&lt;li&gt;A versão do &lt;a href=&quot;http://amarok.kde.org/&quot; target=&quot;_blank&quot;&gt;Amarok&lt;/a&gt;&amp;nbsp;pré-instalada é muito bonita, mas achei bastante instável:&lt;/li&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; margin-top: 10px; text-align: justify;&quot;&gt;
&lt;/div&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-Jt0_ecZwNlnaWwzivakqX3p7QFqb_VCDWDGcTP6JJjw4yJ_WTVUcIygqYyMN6xkNgsONCwt01t3TnxFh21VRhGxHkOoe87FekH1pdY3dxtFNa4vJC0RTUQSLjiOzhDG9DmRff-kLoDs/s1600/Amarok2.jpeg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;195&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-Jt0_ecZwNlnaWwzivakqX3p7QFqb_VCDWDGcTP6JJjw4yJ_WTVUcIygqYyMN6xkNgsONCwt01t3TnxFh21VRhGxHkOoe87FekH1pdY3dxtFNa4vJC0RTUQSLjiOzhDG9DmRff-kLoDs/s400/Amarok2.jpeg&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Amarok&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;li&gt;Não consegui fazer o &lt;a href=&quot;http://confluence.jetbrains.com/display/IDEADEV/IDEA+13+EAP&quot; target=&quot;_blank&quot;&gt;IntelliJ 13 EAP&lt;/a&gt; funcionar (admito que isso é pedir um pouco demais)&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;Chrome resolveu achar que o 7u25 não é a versão mais atual do Java e bloquear o &lt;i&gt;plugin&lt;/i&gt; (nada que um&amp;nbsp;&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;--allow-outdated-plugins&lt;/span&gt; não resolva, e pelos &lt;a href=&quot;https://code.google.com/p/chromium/issues/detail?id=137388&quot; target=&quot;_blank&quot;&gt;reports&lt;/a&gt; que li isso não tem nada a ver com o openSUSE)&lt;/li&gt;
&lt;/ol&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;b&gt;Em suma:&lt;/b&gt; O openSUSE é uma &lt;i&gt;distro&lt;/i&gt; rápida, polida, completa, bem documentada, com vasto apoio da comunidade e da Novell; além disso possui excelentes ferramentas de administração e um ecossistema de &lt;i&gt;software&lt;/i&gt; de fazer inveja em muitas&amp;nbsp;&lt;i&gt;distros&lt;/i&gt; por aí. Definitivamente recomendo para trabalho e dia a dia.&lt;/div&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: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://a.accioly.7rtc.com/feeds/7611550809018244229/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3179991594448154975/7611550809018244229' title='2 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3179991594448154975/posts/default/7611550809018244229'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3179991594448154975/posts/default/7611550809018244229'/><link rel='alternate' type='text/html' href='http://a.accioly.7rtc.com/2013/09/linux-em-2013-primeiras-impressoes-do.html' title='Linux em 2013 - Primeiras impressões do openSUSE 12.3 e KDE 4'/><author><name>Anthony Accioly</name><uri>http://www.blogger.com/profile/11204999973940488842</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhNo-hDZ8WwCIL0qlehAal1ytnyA2b6L17Mx8T2nXtIecHORyTwEMMCc3DjmGm24NxCEhDS0SUE-tvK2bGexvuXfoY_D_d2lZcufjUGOmv0aAX8tKjfJm8L2ZHLcqZ3ktgCnXvigrUzP10/s72-c/1274456_10151658901558105_408143470_o.jpg" height="72" width="72"/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3179991594448154975.post-5346586308679094971</id><published>2013-06-23T17:29:00.000-03:00</published><updated>2013-09-19T09:25:33.010-03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="IDE"/><category scheme="http://www.blogger.com/atom/ns#" term="Java"/><title type='text'>IDE Updates</title><content type='html'>&lt;div style=&quot;text-align: justify;&quot;&gt;
Após longo período em hiato, segue um breve relate das novidades no mundo dos IDES Java:&lt;/div&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
O &lt;a href=&quot;https://netbeans.org/community/releases/73/&quot; target=&quot;_blank&quot;&gt;Netbeans 7.3.1&lt;/a&gt; está fantástico. Definitivamente ganhou a corrida por novas &lt;i&gt;features&lt;/i&gt; (destaque para o suporte a Java EE 7, HTML 5 e JPQL). Tratando-se de primeira impressões esse me parece ser o melhor IDE do ano.&lt;/div&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
A &lt;a href=&quot;http://confluence.jetbrains.com/display/IDEADEV/IDEA+13+EAP&quot; target=&quot;_blank&quot;&gt;&lt;i&gt;Early Access Preview do IntelliJ&lt;/i&gt; IDEA 13&lt;/a&gt; também promete! Apesar do foco da nova versão ser desenvolvimento &lt;a href=&quot;http://developer.android.com/sdk/installing/studio.html&quot; target=&quot;_blank&quot;&gt;Android&lt;/a&gt;, tive a impressão de que o IDE está bem mais rápido no que em sua encarnação 12. Apesar do pessoal da Jetbrains alertar novos usuários de que a qualidade de versões EAP pode ser inferior a de versões Beta, achei a v13 bastante estável. Recomendo!&amp;nbsp;&lt;/div&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Sobre o &lt;a href=&quot;http://www.eclipse.org/downloads/index-developer.php&quot; target=&quot;_blank&quot;&gt;Eclipse Kepler&lt;/a&gt; (atualmente na versão RC3), enquanto na minha máquina (Ubuntu - 64 bits) o ambiente ficou um pouco instável (com exceções em &lt;i&gt;background&lt;/i&gt; e &lt;i&gt;freezes&lt;/i&gt;), &amp;nbsp;a diferença de &lt;i&gt;performance&lt;/i&gt; em comparação ao Juno é notável. As novas versões do &lt;a href=&quot;http://eclipse.org/m2e/&quot; target=&quot;_blank&quot;&gt;m2e&lt;/a&gt; e &lt;a href=&quot;http://www.eclipse.org/m2e-wtp/&quot; target=&quot;_blank&quot;&gt;m2e-wtp&lt;/a&gt; melhoraram bastante o suporte a projetos&amp;nbsp;&lt;a href=&quot;http://maven.apache.org/&quot; target=&quot;_blank&quot;&gt;Maven&lt;/a&gt;&amp;nbsp; (configurações intrusivas à parte, pela primeira vez o Eclipse parece estar se aproximando das outras IDES nesse quesito); para os usuários de &lt;a href=&quot;http://git-scm.com/&quot; target=&quot;_blank&quot;&gt;Git&lt;/a&gt; o &lt;a href=&quot;http://www.eclipse.org/egit/&quot; target=&quot;_blank&quot;&gt;EGit&lt;/a&gt; está quase tolerável... Destaque para a força do ecossistema, com parceiros abraçando o Kepler antes mesmo da sua primeira versão estável: &lt;a href=&quot;http://www.oracle.com/technetwork/developer-tools/eclipse/downloads/index.html&quot; target=&quot;_blank&quot;&gt;OEPE&lt;/a&gt;, &lt;a href=&quot;http://www.jboss.org/tools&quot; target=&quot;_blank&quot;&gt;JBoss Tools&lt;/a&gt; e &lt;a href=&quot;http://marketplace.eclipse.org/content/spring-tool-suite-sts-eclipse-kepler-43&quot; target=&quot;_blank&quot;&gt;STS&lt;/a&gt; sendo alguns dos principais exemplos.
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;P.S.&lt;/b&gt; Tive meu primeiro contato com o IntelliJ em uma versão EAP, antes da primeira versão comunitária ser lançada... Desde então comprei e renovei licenças do IDE duas vezes!&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://a.accioly.7rtc.com/feeds/5346586308679094971/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3179991594448154975/5346586308679094971' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3179991594448154975/posts/default/5346586308679094971'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3179991594448154975/posts/default/5346586308679094971'/><link rel='alternate' type='text/html' href='http://a.accioly.7rtc.com/2013/06/ide-updates.html' title='IDE Updates'/><author><name>Anthony Accioly</name><uri>http://www.blogger.com/profile/11204999973940488842</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3179991594448154975.post-1642104630455051167</id><published>2012-12-29T02:41:00.001-02:00</published><updated>2012-12-29T09:18:56.465-02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Classpath"/><category scheme="http://www.blogger.com/atom/ns#" term="Java"/><category scheme="http://www.blogger.com/atom/ns#" term="Weblogic"/><title type='text'>JAR Hell - Um guia prático</title><content type='html'>&lt;h2&gt;
O que é &lt;i&gt;JAR Hell&lt;/i&gt;?&lt;/h2&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;i&gt;JAR Hell&lt;/i&gt; é um termo cunhado para descrever de forma genéricas problemas relacionados ao &lt;a href=&quot;http://docs.oracle.com/javase/7/docs/api/java/lang/ClassLoader.html&quot; target=&quot;_blank&quot;&gt;&lt;i&gt;ClassLoader&lt;/i&gt;&lt;/a&gt;. Suas variações mais comuns acontecem quando:&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;&lt;/ul&gt;
&lt;ol&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;Duas ou mais classes diferentes, com o exato mesmo nome qualificado acabam sendo incluídas no projeto (e.g, duas versões diferentes da biblioteca &lt;a href=&quot;http://asm.ow2.org/&quot; target=&quot;_blank&quot;&gt;ASM&lt;/a&gt; no&amp;nbsp;&lt;i&gt;Classpath&lt;/i&gt;).&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;Duas ou mais bibliotecas no &lt;i&gt;Classpath &lt;/i&gt;dependem de versões diferentes das mesmas classes (e.g., &lt;a href=&quot;http://www.hibernate.org/&quot; target=&quot;_blank&quot;&gt;Hibernate&lt;/a&gt; e &lt;a href=&quot;http://www.springsource.org/&quot; target=&quot;_blank&quot;&gt;Spring&lt;/a&gt; dependendo de versões diferentes da biblioteca ASM).&lt;/li&gt;
&lt;/ol&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;ul&gt;&lt;/ul&gt;
&lt;h2&gt;
Sintomas do &lt;i&gt;JAR Hell&lt;/i&gt;&lt;/h2&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;i style=&quot;font-style: italic;&quot;&gt;JAR Hells&lt;/i&gt; possuem algumas peculiaridades marcantes, mesmo assim nem sempre seu diagnóstico é óbvio; várias vezes uma situação de &lt;i style=&quot;font-style: italic;&quot;&gt;JAR Hell&lt;/i&gt;&lt;i style=&quot;font-style: italic;&quot;&gt; &lt;/i&gt;vem mixada com outros tipos de problemas como ausência de&amp;nbsp;dependências transitivas&amp;nbsp;no&lt;i style=&quot;font-style: italic;&quot;&gt; Classpath &lt;/i&gt;e&amp;nbsp;omissões em arquivos de configuração&lt;i&gt;.&lt;/i&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Eis alguns sintomas quem indicam um problema de &lt;i&gt;JAR Hell&lt;/i&gt;:&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li style=&quot;text-align: left;&quot;&gt;Estão sendo disparados &lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;NoSuchMethodError&lt;/span&gt;, &lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;NoSuchFieldError &lt;/span&gt;ou &lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;IllegalAccessError&lt;/span&gt;.&lt;/li&gt;
&lt;li style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;ClassCastException&lt;/span&gt;&amp;nbsp;entre classes iguais ou compatíveis.&lt;/li&gt;
&lt;li style=&quot;text-align: left;&quot;&gt;Problemas de serialização / deserialização.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Outra pista que aponta para uma situação de&lt;i&gt; JAR Hell&lt;/i&gt; acontece quando um ou mais dos problemas mencionados acontecem de forma intermitente, e particularmente quando dão a impressão de estarem relacionados a questões de &lt;i&gt;build &lt;/i&gt;/ ambiente (e.g., aparecem no ambiente de homologação mas não no de desenvolvimento;&amp;nbsp;&lt;i&gt;builds &lt;/i&gt;pelo IDE funcionam /&amp;nbsp;&lt;i&gt;builds&lt;/i&gt; pela ferramenta de Integração Contínua não;&amp;nbsp;com o servidor em modo de desenvolvimento tudo funciona mas em modo de produção não; com JVMs da Sun tudo funciona e com JRockit não).&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Isso ocorre pois quando há&amp;nbsp;duas ou mais classes com o mesmo nome qualificado no&amp;nbsp;&lt;i&gt;Classpath, &lt;/i&gt;a lógica que determina qual delas será carregada fica codificada no &lt;i&gt;ClassLoader&lt;/i&gt;&amp;nbsp;utilizado, ou em última instância, na lógica dos&amp;nbsp;&lt;i&gt;ClassLoaders &lt;/i&gt;de base&lt;i&gt;&amp;nbsp;&lt;/i&gt;da própria JVM.&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Prever qual versão de uma classe será carregada é uma tarefa difícil devido a cadeia complexa de &lt;i&gt;ClassLoaders &lt;/i&gt;tipicamente presente em soluções &lt;i&gt;enterprise.&amp;nbsp;&lt;/i&gt;O próprio &lt;i&gt;ClassLoader &lt;/i&gt;escolhido para abrir determinada classe pode variar conforme o estado do &lt;i&gt;container&lt;/i&gt; e código da aplicação.&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Em geral o &lt;i&gt;ClassLoader &lt;/i&gt;que carrega uma classe também fica responsável por carregar todas as outras classes utilizadas por ela; essas classes e o valor de suas variáveis estáticas são então cacheados em memória (e.g., na famigerada&amp;nbsp;&lt;i&gt;PermGen&lt;/i&gt;). Isso significa que -&amp;nbsp;salvo exceções em que o &lt;i&gt;ClassLoader&lt;/i&gt;&amp;nbsp;se torna elegível para &lt;i&gt;Garbage Collection&lt;/i&gt; e a JVM é otimizada para fazer &lt;i&gt;unloading &lt;/i&gt;de classes - uma vez que determinada versão de uma classe seja carregada ela permanece em memória, em um &lt;i&gt;namespace &lt;/i&gt;relacionado ao&amp;nbsp;&lt;i&gt;ClassLoader&lt;/i&gt;, até fim do processo.&lt;/div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;h2&gt;
Resolvendo Problemas de JAR Hell&lt;/h2&gt;
&lt;br /&gt;
Os passos lógicos para resolver&lt;i&gt; JAR Hells&lt;/i&gt;&amp;nbsp;são:&lt;br /&gt;
&lt;ul&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;No caso de classes duplicadas dentro do domínio da sua aplicação: Detectar e excluir versões antigas da classe duplicada. Preferencialmente deixar somente uma classe de cada tipo no &lt;i&gt;Classpath&lt;/i&gt;, i.e., não há necessidade da mesma classe estar presente em vários JARS da aplicação, sendo recomendável refatorar as classes repetidas para um JAR a parte.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;No caso de incompatibilidade entre bibliotecas de terceiros: Fazer &lt;i&gt;upgrades&lt;/i&gt;&amp;nbsp;e / ou &lt;i&gt;downgrades&lt;/i&gt; das bibliotecas para uma combinação com dependências transitivas compatíveis. Uma ferramenta para gerenciar dependências ajuda muito.&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Se por algum motivo não for possível eliminar versões duplicadas de uma classe ou encontrar bibliotecas compatíveis, como último recurso é possível escrever &lt;i&gt;ClassLoaders&lt;/i&gt; personalizados. Esse é um tópico avançado que fico devendo para um próximo &lt;i&gt;post&lt;/i&gt;. Classifico o uso de &lt;i&gt;ClassLoaders &lt;/i&gt;customizados como um último recurso pois eles aumentam a Entropia do &lt;i&gt;Software&lt;/i&gt;, são de difícil manutenção e, se não forem bem arquitetados, podem gerar todo tipo de problemas (&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;NoClassDefFoundError&lt;/span&gt;, 
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;java.lang.OutOfMemoryError: PermGen space&lt;/span&gt;, etc).&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;h2&gt;
Encontrando classes duplicadas&lt;/h2&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Geralmente essas classes estão em bibliotecas do EAR (&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;APP-INF/lib&lt;/span&gt;), WAR (&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;/WEB-INF/lib&lt;/span&gt;), ou do Servidor de Aplicação.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Para saber de que JAR / diretório determinada classe está sendo lida utilize os seguintes métodos:&lt;/div&gt;
&lt;/div&gt;
&lt;pre class=&quot;prettyprint lang-java&quot; style=&quot;padding: 10px;&quot;&gt;public static URL getLocation(Class clazz) {
    return clazz.getProtectionDomain().getCodeSource().getLocation();
}
public static URL getLocation(String className) 
    throws ClassNotFoundException {
    return getLocation(Class.forName(className));
}&lt;/pre&gt;
&lt;div&gt;
Exemplos de chamada e resposta (para um projeto &lt;i&gt;mavenized&lt;/i&gt;):&lt;/div&gt;
&lt;pre class=&quot;prettyprint lang-java&quot; style=&quot;padding: 10px;&quot;&gt;System.out.println(getLocation(EntityManager.class)); 
/* 
 * file:/home/anthony/.m2/repository/javax/persistence/
 * javax.persistence/2.0-SNAPSHOT/javax.persistence-2.0-SNAPSHOT.jar 
 */
System.out.println(getLocation(
    &quot;org.apache.commons.lang.builder.ReflectionToStringBuilder&quot;)); 
/* 
 * file:/home/anthony/.m2/repository/commons-lang/commons-lang/
 * 2.6/commons-lang-2.6.jar 
 */&lt;/pre&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Um bom lugar a ser analisado são clientes de Web services gerados automaticamente, principalmente quando mais de um serviço depende do mesmo XSD. Nesse cenário é comum que vários clientes sejam gerados a partir de WSDLs diferentes, todos contendo suas próprias versões da mesma classe.&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Na verdade todo tipo de código gerado automaticamente merece atenção: Classes JAXB geradas com &lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;xjc&lt;/span&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;,&lt;/span&gt;&amp;nbsp;entidades JPA repetidas em diferentes projetos EJB, etc.&amp;nbsp;&lt;/div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;h2&gt;
Problemas de compatibilidade entre bibliotecas de terceiros&lt;/h2&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Para resolver esse tipo de &lt;i&gt;JAR Hell&lt;/i&gt; é necessário encontrar versões compatíveis das bibliotecas (e.g., uma versão do Spring e do Hibernate que possam funcionar com a mesma versão da biblioteca ASM), ou, em casos de total incompatibilidade, escrever &lt;i&gt;ClassLoaders &lt;/i&gt;customizados.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Geralmente esse tipo de erro acontece com bibliotecas populares como como &lt;a href=&quot;http://commons.apache.org/&quot; target=&quot;_blank&quot;&gt;Apache Commons&lt;/a&gt;, &lt;a href=&quot;http://www.csg.ci.i.u-tokyo.ac.jp/~chiba/javassist/&quot; target=&quot;_blank&quot;&gt;Javassist&lt;/a&gt; e ASM que são dependências para uma grande quantidade de &lt;i&gt;frameworks &lt;/i&gt;e bibliotecas.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Devido a dependências transitivas (e.g., seu projeto depende da biblioteca A que por sua vez depende da biblioteca B que depende da&amp;nbsp;biblioteca&amp;nbsp;C e assim sucessivamente), encontrar versões compatíveis de bibliotecas pode se tornar uma tarefa enfadonha. &amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Para aliviar o trabalho do programador ferramentas poderosas como &lt;a href=&quot;http://maven.apache.org/&quot; target=&quot;_blank&quot;&gt;Maven&lt;/a&gt;, &lt;a href=&quot;http://ant.apache.org/ivy/&quot; target=&quot;_blank&quot;&gt;Ivy&lt;/a&gt;&amp;nbsp;e &lt;a href=&quot;http://buildr.apache.org/&quot; target=&quot;_blank&quot;&gt;Buildr&lt;/a&gt;&amp;nbsp;estão disponíveis. Com essas ferramentas é possível especificar as bibliotecas (e versões / intervalos de versões) que seu projeto necessita&amp;nbsp;em arquivos de configurações;&amp;nbsp;essas ferramentas fazem então o download dos artefatos - e suas dependências transitivas - a partir de uma&amp;nbsp;hierarquia&amp;nbsp;de repositórios de software (como o gigantesco &lt;a href=&quot;http://search.maven.org/&quot; target=&quot;_blank&quot;&gt;Repositório Central&lt;/a&gt;), ajustam o&amp;nbsp;&lt;i&gt;Classpath &lt;/i&gt;da aplicação para compilação / execução / testes e ainda empacotam bibliotecas dentro dos&amp;nbsp;&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;EARs&lt;/span&gt;, &lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;WARs&lt;/span&gt;, etc para distribuição quando cabível.&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Caso ocorra algum conflito o desenvolvedor pode trocar facilmente a versão de determinada biblioteca no arquivo de configuração e deixar que a ferramenta faça o trabalho duro por ele.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Enquanto uma ferramenta como o Maven não se aplica a todo tipo de projeto (pois introduz suas próprias complexidades), eu costumo usá-lo pelo menos para fazer download das dependências do projeto e exportá-las com o&lt;i&gt;&amp;nbsp;&lt;/i&gt;&lt;a href=&quot;http://maven.apache.org/plugins/maven-dependency-plugin/&quot; target=&quot;_blank&quot;&gt;Dependency plugin&lt;/a&gt;. Fico devendo um tutorial sobre esse assunto para um próximo &lt;i&gt;post&lt;/i&gt;.&lt;/div&gt;
&lt;br /&gt;
&lt;h2&gt;
Bibliotecas do Servidor de Aplicação vs Bibliotecas do Projeto
&lt;/h2&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Pessoalmente tento, sempre que possível, usar bibliotecas do próprio servidor (que passaram por todo o processo de homologação do &lt;i&gt;Java EE&lt;/i&gt;, e, por via de regra - mas não como verdade absoluta - são compatíveis). Para esclarecer, não estou pedindo para ninguém abrir mão das bibliotecas (por favor, reuso na cabeça!), apenas recomendo pesquisar se o próprio servidor de aplicação já não fornece uma versão da biblioteca desejada ou algo equivalente (e.g., Hibernate x &lt;a href=&quot;http://www.eclipse.org/eclipselink/&quot; target=&quot;_blank&quot;&gt;Eclipselink&lt;/a&gt;&amp;nbsp;para JPA).&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Não se preocupe em sempre incluir a versão&lt;i&gt; bleedin edge&lt;/i&gt; de uma biblioteca no projeto. Geralmente as versões disponibilizadas pelo &lt;i&gt;Application Server&lt;/i&gt; são mais do que suficientes (salvo exceções em lugares que ainda estão rodando &lt;i&gt;Application Servers&lt;/i&gt; homologados para versões anteriores ao &lt;i&gt;Java EE 5&lt;/i&gt;). Minha experiência nesse ponto é que quando você coloca uma biblioteca&lt;i&gt; bleedin edge&lt;/i&gt; no projeto ela acaba permanecendo lá por mutos anos e eventualmente se torna legada (ninguém quer mexer em bibliotecas da aplicação por motivos óbvios, incluindo &lt;i&gt;JAR Hells&lt;/i&gt;), enquanto que ao fazer referência as bibliotecas do &lt;i&gt;App Server&lt;/i&gt;, a evolução vem lenta porém certamente conforme &lt;i&gt;upgrades&lt;/i&gt; planejados para versões mais novas do &lt;i&gt;container&lt;/i&gt;.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Enquanto há bons argumentos contra depender do &lt;i&gt;container &lt;/i&gt;(e.g., reduzir o trabalho de infraestrutura ao fazer &lt;i&gt;deploy &lt;/i&gt;das bibliotecas; ter menos problemas ao fazer &lt;i&gt;upgrade &lt;/i&gt;do servidor de aplicação e ter mais controle sobre o que está sendo utilizado no projeto), eu pessoalmente acho que é um&lt;i&gt; trade-off&lt;/i&gt; válido.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Eis um exemplo de como referenciar uma biblioteca no &lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;weblogic-application.xml&lt;/span&gt; (EAR).&lt;/div&gt;
&lt;/div&gt;
&lt;pre class=&quot;prettyprint lang-xml&quot; style=&quot;padding: 10px;&quot;&gt;&amp;lt;wls:library-ref&amp;gt;
    &amp;lt;wls:library-name&amp;gt;jersey-bundle&amp;lt;/wls:library-name&amp;gt;
    &amp;lt;wls:specification-version&amp;gt;1.1.1&amp;lt;/wls:specification-version&amp;gt;
    &amp;lt;wls:implementation-version&amp;gt;1.1.5.1&amp;lt;/wls:implementation-version&amp;gt;
&amp;lt;/wls:library-ref&amp;gt;&lt;/pre&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Fico devendo exemplos de sobre como referenciar bibliotecas no JBoss AS, GlassFish, WebSphere, etc.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Na verdade, como deixei muitos pontos em aberto nesse &lt;i&gt;post&lt;/i&gt; (como escrever um ClassLoader, como exportar dependências do Maven e como referenciar bibliotecas nos principais servidores de aplicação), aceito sugestões sobre o tema de &lt;i&gt;posts&lt;/i&gt; futuros. Por favor deixem seu comentário ou enviem uma mensagem através do &lt;a href=&quot;http://a.accioly.7rtc.com/p/contato.html&quot; target=&quot;_blank&quot;&gt;formulário de contato&lt;/a&gt;.&lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://a.accioly.7rtc.com/feeds/1642104630455051167/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3179991594448154975/1642104630455051167' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3179991594448154975/posts/default/1642104630455051167'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3179991594448154975/posts/default/1642104630455051167'/><link rel='alternate' type='text/html' href='http://a.accioly.7rtc.com/2012/12/jar-hell-um-guia-pratico.html' title='JAR Hell - Um guia prático'/><author><name>Anthony Accioly</name><uri>http://www.blogger.com/profile/11204999973940488842</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3179991594448154975.post-5217167359420549559</id><published>2012-02-21T14:09:00.001-02:00</published><updated>2012-02-21T15:38:48.713-02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Pastebin"/><category scheme="http://www.blogger.com/atom/ns#" term="SCM"/><title type='text'>SCMs e Pastebins - O que fazer com o seu código “pessoal”</title><content type='html'>&lt;div style=&quot;font-family: Arial,Helvetica,sans-serif; text-align: justify;&quot;&gt;
    Para quem está em busca de ferramentas para lidar com aquele código extra 
    que acabamos escrevendo fora do trabalho e / ou do escopo do 
    &lt;a href=&quot;http://pt.wikipedia.org/wiki/Sistema_de_controle_de_vers%C3%A3o&quot; target=&quot;_blank&quot;&gt;
        sistema de controle de versão
    &lt;/a&gt; da empresa como:
&lt;/div&gt;
&lt;ul style=&quot;font-family: Arial,Helvetica,sans-serif; text-align: justify; margin: 15px 0;&quot;&gt;
    &lt;li&gt;Coleção de &lt;span style=&quot;font-style: italic;&quot;&gt;scripts&lt;/span&gt; diversos
        para automação (i.e., &lt;span style=&quot;font-style: italic;&quot;&gt;scripts&lt;/span&gt;
        de do programador vagabundo... Aqueles que quebram um galhão mas nunca 
        ficam apresentáveis o suficiente para você mostrar para os outros).
    &lt;/li&gt;
    &lt;li&gt;Testes com JavaScript e JQuery.&lt;/li&gt;
    &lt;li&gt;&lt;span style=&quot;font-style: italic;&quot;&gt;Snippets&lt;/span&gt; de código que fazem as
        coisas acontecerem em determinada linguagem / 
        &lt;span style=&quot;font-style: italic;&quot;&gt;framework&lt;/span&gt; e na hora “h” sempre 
        esquecemos.
    &lt;/li&gt;
    &lt;li&gt;Código de exercícios e tutoriais.&lt;/li&gt;
    &lt;li&gt;Projetinhos &lt;span style=&quot;font-style: italic;&quot;&gt;Open source.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;font-family: Arial,Helvetica,sans-serif; text-align: justify;&quot;&gt;
    Eu recomendo fortemente o Bitbucket da &lt;a href=&quot;http://www.atlassian.com/&quot; target=&quot;_blank&quot;&gt;
        Atlassian&lt;/a&gt; (empresa que criou o 
    &lt;a href=&quot;http://www.atlassian.com/software/jira&quot; target=&quot;_blank&quot;&gt;JIRA&lt;/a&gt;).
    &lt;br/&gt;&lt;br/&gt;
    Endereço: &lt;a href=&quot;http://bitbucket.org/&quot; target=&quot;_blank&quot;&gt;http://bitbucket.org/&lt;/a&gt;
    &lt;br/&gt;&lt;br/&gt;
    O Bitbutcket disponibiliza gratuitamente repositórios para controle de 
    código fonte (&lt;a href=&quot;http://mercurial.selenic.com/&quot; target=&quot;_blank&quot;&gt;Mercurial&lt;/a&gt;, e mais 
    recentemente &lt;a href=&quot;http://git-scm.com/&quot; target=&quot;_blank&quot;&gt;Git&lt;/a&gt;) com interface de 
    administração / navegação web... Além de 
    &lt;span style=&quot;font-style: italic;&quot;&gt;Wikis&lt;/span&gt;, 
    &lt;span style=&quot;font-style: italic;&quot;&gt;Issue&lt;/span&gt; 
    &lt;span style=&quot;font-style: italic;&quot;&gt;Trackers&lt;/span&gt; e toda a parafernalha 
    típica de sites do género. &lt;br /&gt; 
    O grande diferencial em relação a serviços semelhantes 
    (&lt;a href=&quot;http://sourceforge.net/&quot; target=&quot;_blank&quot;&gt;SourceForge&lt;/a&gt;, 
    &lt;a href=&quot;http://code.google.com/projecthosting/&quot; target=&quot;_blank&quot;&gt;Google Code&lt;/a&gt;, 
    &lt;a href=&quot;https://github.com/&quot; target=&quot;_blank&quot;&gt;GitHub&lt;/a&gt;, etc) é que você pode criar uma 
    &lt;span style=&quot;font-weight: bold; text-decoration: underline &quot;&gt;
       quantidade ilimitada de repositórios privados&lt;/span&gt;
    (pessoais ou compartilhados com até cinco pessoas). O que faz do 
    Bitbucket o lugar perfeito para colocar todo aquele código que fica jogado
    no seu HD e eventualmente é perdido.
    &lt;br/&gt;&lt;br/&gt;
    Para quem não conhece, também sou fã de dois outros serviços:
    &lt;br/&gt;&lt;br/&gt;
    &lt;a href=&quot;http://jsfiddle.net/&quot; target=&quot;_blank&quot;&gt;http://jsfiddle.net/&lt;/a&gt; - Ferramenta do tipo
    &lt;span style=&quot;font-style: italic;&quot;&gt;pastebin&lt;/span&gt; em que você digita o código JavaScript / HTML
    / CSS em suas respectiva seções e visualiza o resultado final no 
    &lt;span style=&quot;font-style: italic;&quot;&gt;iframe&lt;/span&gt; inferior direito. Ótimo para aqueles testes 
    rápidos, perfeito para JQuery. Se quiser salvar o código, o jsfiddle gera uma URL  para você
   (não requer cadastro).
    &lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://ideone.com/&quot; target=&quot;_blank&quot;&gt;http://ideone.com/&lt;/a&gt; - Mesmo 
    princípio do jsfiddle, porém mais voltado para 
    &lt;span style=&quot;font-style: italic;&quot;&gt;server side.&lt;/span&gt; Possui compiladores e 
    interpretadores de mais de 40 linguagens (como Java, C#, C++, VB.NET, Groovy, 
    Ruby, Scala, etc). Você digita o código - opcionalmente também os valores de
    entrada - e a ferramenta compila / interpreta o programa mostrando a saída 
    (ou erros) em uma interface web. Muito bom para SQL.
&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://a.accioly.7rtc.com/feeds/5217167359420549559/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3179991594448154975/5217167359420549559' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3179991594448154975/posts/default/5217167359420549559'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3179991594448154975/posts/default/5217167359420549559'/><link rel='alternate' type='text/html' href='http://a.accioly.7rtc.com/2012/02/scms-e-pastebins-o-que-fazer-com-o-seu.html' title='SCMs e Pastebins - O que fazer com o seu código “pessoal”'/><author><name>Anthony Accioly</name><uri>http://www.blogger.com/profile/11204999973940488842</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3179991594448154975.post-7435868225981944780</id><published>2011-12-29T03:26:00.001-02:00</published><updated>2012-03-27T21:14:00.411-03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Google Spreadsheet"/><category scheme="http://www.blogger.com/atom/ns#" term="Skype"/><title type='text'>Planilha para economizar com o Skype</title><content type='html'>Usuários de longa data do &lt;a href=&quot;http://www.skype.com/intl/pt-br/get-skype/&quot; target=&quot;_blank&quot;&gt;Skype&lt;/a&gt; sabem que o aplicativo pode diminuir significativamente sua conta de telefone. Alguns exemplos:&lt;br /&gt;
&lt;ol style=&quot;text-align: justify;&quot;&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;Qualquer tel. no Canadá &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: inherit;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;→&lt;/span&gt; &lt;/span&gt; R$0,06 por minuto, mais taxa de conexão de R$0,09 &lt;sup&gt;&lt;a href=&quot;#connection_fee&quot;&gt;[1]&lt;/a&gt;&lt;/sup&gt;.&lt;/li&gt;
&lt;li&gt;Tel. fixo no Rio de Janeiro &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: inherit;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;→ R$0,09 por minuto, &lt;/span&gt;&lt;/span&gt;mais taxa de conexão de R$0,189 &lt;sup&gt;&lt;a href=&quot;#connection_fee&quot;&gt;[1]&lt;/a&gt;&lt;/sup&gt;.&lt;/li&gt;
&lt;li&gt; Celular no Brasil &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: inherit;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;→&lt;/span&gt; &lt;/span&gt; R$0,54 por minuto, mais taxa de conexão de R$0,189 &lt;sup&gt;&lt;a href=&quot;#connection_fee&quot;&gt;[1]&lt;/a&gt;&lt;/sup&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;ol style=&quot;text-align: justify;&quot;&gt;

&lt;/ol&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Bem melhor do que as tarifas do meu &lt;a href=&quot;http://www.netcombo.com.br/&quot; target=&quot;_blank&quot;&gt;Net Fone&lt;/a&gt; (R$1,09,&lt;span style=&quot;font-family: inherit;&quot;&gt; R$0,27&lt;/span&gt; e R$1,53 respectivamente).&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Outro ponto a ser considerado é que a qualidade da ligação é ótima: Com uma banda larga veloz e um bom microfone o uso do Skype é praticamente imperceptível para a outra ponta. Inclusive é possível configurar o Skype para exibir seu número de celular no identificador de chamadas do destinatário da ligação.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Gostou? Então que tal economizar ainda mais? &lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
O Skype permite a compra de créditos em 15 moedas diferentes, cada qual com sua tabela de preços e taxas de conexão. Como o Skype não atualiza seus preços frequentemente e a taxa de câmbio sofre variação, é possível economizar bastante escolhendo a melhor moeda para comprar seus créditos. A diferença de preço é tão grande que a manobra vale a pena mesmo considerando a taxa de IOF de 6.38% incidente sobre compras internacionais no cartão de crédito.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Pensando nisso criei uma planilha no &lt;a href=&quot;http://docs.google.com/&quot; target=&quot;_blank&quot;&gt;Google Spreadsheet&lt;/a&gt; que extrai informações sobre tarifas diretamente do site do Skype, bem como as cotações das moedas através do &lt;a href=&quot;http://www.google.com/finance&quot; target=&quot;_blank&quot;&gt;Google Finance&lt;/a&gt;. A planilha permite saber quanto custa sua ligação via Skype para o destino desejado e qual a melhor moeda para comprar seu crédito de acordo com a taxa de câmbio do momento (cotações sujeitas a atraso de 20 minutos de acordo com o &lt;i&gt;disclaimer &lt;/i&gt;do Google).&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;center&gt;
&lt;b&gt;Visão em tempo real da planilha para ligações para celulares do Brasil:&lt;/b&gt;
&lt;br /&gt;
&lt;iframe frameborder=&quot;0&quot; height=&quot;400&quot; src=&quot;https://docs.google.com/spreadsheet/pub?hl=en_US&amp;amp;hl=en_US&amp;amp;key=0AuWjdMbvu0badE5KazVmc3d5NUphWHFGa01mc1dwU1E&amp;amp;output=html&amp;amp;widget=true&quot; width=&quot;600&quot;&gt;&lt;/iframe&gt;
&lt;br /&gt;
&lt;a href=&quot;https://docs.google.com/spreadsheet/ccc?key=0AuWjdMbvu0badE5KazVmc3d5NUphWHFGa01mc1dwU1E&quot; target=&quot;_blank&quot;&gt;Planilha em tela cheia&lt;/a&gt;&amp;nbsp;&lt;/center&gt;&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Com a cotação da Libra Esterlina em R$2,8945 como no momento da escrita desse post, é possível economizar mais R$0,15 por minuto ao ligar para celulares no brasil (12.6p = R$0,39 já acrescentando IOF).&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
A planilha serve como um &quot;aplicativo web&quot; permitindo que você preencha os dados da ligação e descubra a melhor moeda a ser utilizada de acordo com as características da sua chamada:&lt;/div&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/AVvXsEh6PkntRBCHng60uvB2PGyCCtZhnnTH2R6Jf-K_IfkyXku8xvSnWYmx3rImxgeZ0ueelrDwkCUIHEr6SPZlqjit8JqS2CO2Opc35IuzAH96SWMoqApDJr7yfILW53O7xRbDon4jE3xxGAU/s1600/Planilha-Skype.png&quot; imageanchor=&quot;1&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh6PkntRBCHng60uvB2PGyCCtZhnnTH2R6Jf-K_IfkyXku8xvSnWYmx3rImxgeZ0ueelrDwkCUIHEr6SPZlqjit8JqS2CO2Opc35IuzAH96SWMoqApDJr7yfILW53O7xRbDon4jE3xxGAU/s1600/Planilha-Skype.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Para obter uma cópia editável da planilha siga os seguintes passos:&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;Entre no &lt;a href=&quot;http://docs.google.com/&quot; target=&quot;_blank&quot;&gt;Google Docs&lt;/a&gt; com sua conta do Google (é gratuito).&lt;/li&gt;
&lt;li&gt; Clique no &lt;a href=&quot;https://docs.google.com/spreadsheet/ccc?key=0AuWjdMbvu0badE5KazVmc3d5NUphWHFGa01mc1dwU1E&quot; target=&quot;_blank&quot;&gt;link da planilha&lt;/a&gt; para abri-la em uma nova janela.&lt;/li&gt;
&lt;li&gt;Faça uma cópia do planilha clicando no menu &lt;i&gt;File &lt;/i&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: inherit;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;→&lt;/span&gt; &lt;i&gt;Make a Copy&lt;/i&gt;:&lt;/span&gt;&lt;/li&gt;
&lt;/ol&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/AVvXsEhakeEGEA2DgAt4755BgdwevlBAYN43FdRSX4b3c7TVBYchXxWu-mu2w5-9I9gwR0zg4FsUeYkRqKn36r_gZNFDOYUiN55ADR0hGPnRA9CSuhMMhhrsWDh2gF6fXJjY2MbDbgdqfZ1Ce4Y/s1600/Google+Docs+-+Make+a+Copy.png&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/AVvXsEhakeEGEA2DgAt4755BgdwevlBAYN43FdRSX4b3c7TVBYchXxWu-mu2w5-9I9gwR0zg4FsUeYkRqKn36r_gZNFDOYUiN55ADR0hGPnRA9CSuhMMhhrsWDh2gF6fXJjY2MbDbgdqfZ1Ce4Y/s1600/Google+Docs+-+Make+a+Copy.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Pronto, sua cópia da planilha é editável e privada. Desse momento em diante você pode acessar o &lt;a href=&quot;http://docs.google.com&quot; target=&quot;_blank&quot;&gt;Google Docs&lt;/a&gt;, abrir sua cópia da planilha, preencher os dados da ligação (&lt;i&gt;Call Info&lt;/i&gt;) e receber informações atualizadas sobre preços do Skype. Não é necessário fechar e abrir a planilha para obter novas cotações, isso é feito automaticamente em &lt;i&gt;background&lt;/i&gt;.&lt;br /&gt;
&lt;br /&gt;
Algumas dicas: &lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Na primeira vez que você abrir a planilha pode demorar um pouco para que os preços sejam exibidos. Da mesma forma, na primeira vez que você clicar no combo box &lt;i&gt;Destination&lt;/i&gt; pode demorar um pouco para que os países sejam carregados.
&lt;/li&gt;
&lt;li&gt;Se ocorrer algum erro para obter uma cotação ou preço do site da Skype espere meia hora e tente de novo (lembre-se que a internet segue o princípio do melhor esforço :D).&lt;/li&gt;
&lt;li&gt;Para mudar sua moeda clique em cima dos seus créditos e, no &lt;i&gt;pop-up&lt;/i&gt; que irá abrir, clique no link &lt;i&gt;Change&lt;/i&gt; indicado pela figura abaixo:
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjozOI2BzwvMKtQEMfRKpD6Ri14hXlhKBy6OScU1H_0vFSy7ifSdCfV33djurGP7660sybUTV3HW2t6kj0mPyBSIkSJywVBLplq_hKNQgE82Qyets-PhH9ZjkpF7t1VmNfnR-CKYdx6vfk/s1600/Skype+-+Mudar+Moeda.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;305&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjozOI2BzwvMKtQEMfRKpD6Ri14hXlhKBy6OScU1H_0vFSy7ifSdCfV33djurGP7660sybUTV3HW2t6kj0mPyBSIkSJywVBLplq_hKNQgE82Qyets-PhH9ZjkpF7t1VmNfnR-CKYdx6vfk/s400/Skype+-+Mudar+Moeda.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;De acordo com &lt;a href=&quot;https://support.skype.com/pt-br/faq/FA499/Em-que-moeda-posso-fazer-pagamentos&quot; target=&quot;_blank&quot;&gt;documentação&lt;/a&gt; do Skype uma taxa extra de conversão pode incidir sobre seus créditos durante a operação de troca de moeda. Dessa forma, a melhor estratégia para economizar é comprar créditos de acordo com as ligações pretendidas e esgotá-los antes de mudar de moeda. Trocar de moeda várias vezes para economizar alguns centavos por ligação não vale a pena pois a taxa extra de conversão incidirá sobre todo o seu crédito restante.&lt;/li&gt;
&lt;li&gt;Lembre-se que em compras por cartão de crédito a taxa de câmbio aplicada será determinada pela operadora do cartão próximo a data de fechamento da sua fatura. Logo, como em toda transação financeira, há riscos envolvidos - no caso, o da moeda escolhida super valorizar frente ao real. Eu venho comprando créditos em Libras Esterlinas e &lt;a href=&quot;http://pt.wikipedia.org/wiki/Won_sul-coreano&quot; target=&quot;_blank&quot;&gt;Wons sul-coreanos&lt;/a&gt; já faz algum tempo (mais de 2 anos) e não passei ainda por nenhuma situação em que essas moedas valorizassem o suficiente para fazer a compra em real valer a pena. Pelo contrário, em boa parte das vezes o real valoriza frente as outras moedas fazendo com que a operadora de cartão de crédito me debite a diferença. Tenha em mente porém que a taxa de câmbio é dependente do cenário econômico, e que o governo brasileiro tem um longo histórico de uso de manobras para controlar o câmbio (lembrando que manter o real desvalorizado frente ao dólar é um dos objetivos do Ministro Guido Mantega). Use a planilha por sua conta e risco.&lt;/li&gt;
&lt;li&gt; Uma boa prática é comprar o crédito um pouco antes da sua fatura vencer, de forma a correr menos riscos relacionados a flutuação cambial. &lt;/li&gt;
&lt;li&gt;Uma alternativa para não assumir o risco da flutuação cambial é usar o serviço de pagamentos &lt;a href=&quot;https://www.paypal.com/&quot; target=&quot;_blank&quot;&gt;PayPal&lt;/a&gt; que permite a conversão da moeda estrangeira em real através de uma cotação pré-fixada. Dessa forma você sabe exatamente o quanto será debitado do seu cartão de crédito na hora da compra. O &lt;i&gt;trade-off &lt;/i&gt;é que as taxas de câmbio pré-fixadas não são tão competitivas quanto as pós. Novamente, no cenário econômico dos últimos dois anos, em nenhuma das compras que fiz a taxa pré-fixada valeria a pena. &lt;/li&gt;
&lt;/ul&gt;
Para encerrar o &lt;i&gt;post&lt;/i&gt; com um conteúdo um pouco mais voltado para desenvolvedores, veja que essa planilha somente foi possível graças às funcionalidades fantásticas do Google Spreadsheet, em especial &lt;a href=&quot;https://support.google.com/docs/bin/answer.py?hl=en&amp;amp;answer=155182&quot; style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; target=&quot;_blank&quot;&gt;ImportHtml&lt;/a&gt;,
&lt;a href=&quot;https://support.google.com/docs/bin/answer.py?hl=en&amp;amp;answer=155184&quot; style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; target=&quot;_blank&quot;&gt;ImportXML&lt;/a&gt;, e &lt;a href=&quot;https://support.google.com/docs/bin/answer.py?hl=en&amp;amp;answer=155178&quot; style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; target=&quot;_blank&quot;&gt;Google Finance&lt;/a&gt;. O recurso de &lt;a href=&quot;http://support.google.com/docs/bin/answer.py?hl=en&amp;answer=186103&amp;topic=1361472&amp;ctx=topic&quot; target=&quot;_blank&quot;&gt;listas suspensas&lt;/a&gt; também é muito interessante. Estou oficialmente distribuindo a planilha sob &lt;a href=&quot;http://creativecommons.org/licenses/by/3.0/br/&quot; target=&quot;_blank&quot;&gt;Licença Creative Commons&lt;/a&gt;. Sinta-se livre para estudar as fórmulas e criar trabalhos derivados.&lt;br /&gt;
&lt;br /&gt;
&lt;hr style=&quot;margin-left: 0px; margin-right: 0px;&quot; /&gt;
&lt;ol style=&quot;text-align: justify;&quot;&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;ol style=&quot;padding-left: 20px; text-align: justify;&quot;&gt;
&lt;li style=&quot;padding-left: 0;&quot;&gt;&lt;a href=&quot;http://www.blogger.com/blogger.g?blogID=3179991594448154975&quot; name=&quot;connection_fee&quot;&gt;&lt;/a&gt;Taxa de conexão é aplicada somente uma vez por ligação. Preços da modalidade &lt;a href=&quot;http://www.skype.com/intl/pt-br/prices/payg-rates&quot; target=&quot;_blank&quot;&gt;Pré-pago&lt;/a&gt;. É possível obter tarifas menores e isenção da taxa de conexão assinando um &lt;a href=&quot;http://www.skype.com/intl/pt-br/prices/pay-monthly/&quot; target=&quot;_blank&quot;&gt;pacote mensal&lt;/a&gt;.&lt;/li&gt;
&lt;/ol&gt;</content><link rel='replies' type='application/atom+xml' href='http://a.accioly.7rtc.com/feeds/7435868225981944780/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3179991594448154975/7435868225981944780' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3179991594448154975/posts/default/7435868225981944780'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3179991594448154975/posts/default/7435868225981944780'/><link rel='alternate' type='text/html' href='http://a.accioly.7rtc.com/2011/12/planilha-para-economizar-com-o-skype.html' title='Planilha para economizar com o Skype'/><author><name>Anthony Accioly</name><uri>http://www.blogger.com/profile/11204999973940488842</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh6PkntRBCHng60uvB2PGyCCtZhnnTH2R6Jf-K_IfkyXku8xvSnWYmx3rImxgeZ0ueelrDwkCUIHEr6SPZlqjit8JqS2CO2Opc35IuzAH96SWMoqApDJr7yfILW53O7xRbDon4jE3xxGAU/s72-c/Planilha-Skype.png" height="72" width="72"/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3179991594448154975.post-6175307306078818882</id><published>2011-05-08T21:25:00.014-03:00</published><updated>2014-10-01T15:57:50.035-03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Java"/><category scheme="http://www.blogger.com/atom/ns#" term="OCJP"/><title type='text'>Java: == vs equals()</title><content type='html'>&lt;div style=&quot;text-align: justify;&quot;&gt;
Operadores e métodos de comparação&amp;nbsp;são fonte de muitas dúvidas para programadores que estão iniciando em Java. De fato, o operador &amp;nbsp;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;,Courier,monospace;&quot;&gt;==&lt;/span&gt;, os métodos &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;,Courier,monospace;&quot;&gt;equals&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: inherit;&quot;&gt; &lt;/span&gt;e &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;,Courier,monospace;&quot;&gt;hashCode &lt;/span&gt;são tópicos do &lt;i&gt;Java Standard Edition 6 Programmer Certified Professional Exam&lt;/i&gt;&amp;nbsp;para quem busca o título &lt;i&gt;Oracle Certified Professional Java Programmer&lt;/i&gt; (antigo SCJP). Várias questões cobram, direta ou indiretamente, conhecimento sobre o assunto.&lt;/div&gt;
O operador &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;,Courier,monospace;&quot;&gt;== &lt;/span&gt;é usado para comparação entre tipos primitivos:&lt;br /&gt;
&lt;pre class=&quot;prettyprint lang-java&quot; style=&quot;padding: 10px;&quot;&gt;int x = 10;
if (x == 10) {
  System.out.println(&quot;x é 10!&quot;);
}&lt;/pre&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Já para tipos complexos o programador pode se surpreender com o resultado. O operador &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;,Courier,monospace;&quot;&gt;==&lt;/span&gt; só &quot;funciona&quot; com referências para o mesmo objeto:&lt;/div&gt;
&lt;pre class=&quot;prettyprint lang-java&quot; style=&quot;padding: 10px;&quot;&gt;public class Pessoa {
    
    private String cpf;

    public Pessoa(String cpf) {
        this.cpf = cpf;
    }
    
    public static void main(String[] args) {
        Pessoa p1 = new Pessoa(&quot;111.111.111-11&quot;);
        Pessoa p2 = new Pessoa(&quot;111.111.111-11&quot;);
        Pessoa p3 = p1;
        
        System.out.println(p1 == p2); // false
        System.out.println(p1 == p3); // true
    }
    
}&lt;/pre&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Esse resultado remete a uma&amp;nbsp;decisão&amp;nbsp;de &lt;i&gt;design&lt;/i&gt; da linguagem. A regra de negócios para determinar se dois objetos são iguais é específica para cada aplicação. Enquanto o compilador pode assumir que duas referências para o mesmo objeto são iguais, assumir que dois objetos diferentes com os mesmos valores são iguais seria perigoso. Só porque uma pessoa tem um carro do mesmo modelo e cor do que o seu, isso não significa que os carros são iguais e você pode pegar o carro dela.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Eis o motivo de existência do método &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;,Courier,monospace;&quot;&gt;equals &lt;/span&gt;na classe &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;,Courier,monospace;&quot;&gt;Object&lt;/span&gt;. Para quem não está familiarizado com essa classe, ela serve de superclasse para todas as classes em Java, logo, seus métodos são universais, podendo ser chamados a partir de qualquer instância de qualquer objeto disponível em tempo de execução. A fim de definir a regra de comparação para objetos de uma classe deve-se sobrescrever o método &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;,Courier,monospace;&quot;&gt;equals&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: inherit;&quot;&gt; no corpo da mesma:&lt;/span&gt;&amp;nbsp;&lt;/div&gt;
&lt;pre class=&quot;prettyprint lang-java&quot; style=&quot;padding: 10px;&quot;&gt;public class Pessoa {
    
    private String cpf;

    public Pessoa(String cpf) {
        this.cpf = cpf;
    }

    // Adaptado do código gerado pelo Netbeans
    @Override
    public boolean equals(Object obj) {
        // Um objeto é sempre igual a ele mesmo
        if (this == obj) {
            return true; 
        }
        // Um objeto nunca deve ser igual a null
        if (obj == null) {
            return false;
        }
        /* Uma pessoa só pode ser igual a outra pessoa.
         * Caso uma pessoa possa ser igual a uma de suas subclasses
         * use !(obj instanceof Pessoa)
         */
        if (getClass() != obj.getClass()) {
            return false;
        }
        // Converte a referencia para uma pessoa
        final Pessoa other = (Pessoa) obj;
        // Duas pessoas só podem ser comparadas se possuem CPF
        if (this.cpf == null || other.cpf == null) {
            return false;
        }        
        // Duas pessoas são iguais se possuem o mesmo CPF
        return this.cpf.equals(other.cpf);
    }
    
    public static void main(String[] args) {
        Pessoa p1 = new Pessoa(&quot;111.111.111-11&quot;);
        Pessoa p2 = new Pessoa(&quot;111.111.111-11&quot;);
        Pessoa p3 = p1;
        
        System.out.println(p1.equals(p2)); // true
        System.out.println(p1.equals(p3)); // true
    }
    
}&lt;/pre&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Agora sim... Veja que no meu exemplo duas pessoas só são iguais se possuem o mesmo CPF. Outros sistemas poderiam adotar critérios diferentes para comparar duas pessoas, ou mesmo comparar pessoas com outros objetos (do tipo &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;,Courier,monospace;&quot;&gt;Batatinha &lt;/span&gt;por exemplo). Observe que a comparação entre CPFs também foi feita através de &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;,Courier,monospace;&quot;&gt;equals&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: inherit;&quot;&gt;;&lt;/span&gt; isso é possível pois a classe &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;,Courier,monospace;&quot;&gt;String&lt;/span&gt; (API padrão do Java) sobrescreve o método &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;,Courier,monospace;&quot;&gt;equals&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: inherit;&quot;&gt; &lt;/span&gt;(o mesmo é valido para várias outras classes como &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;,Courier,monospace;&quot;&gt;Integer, Long, Boolean&lt;/span&gt;, etc).
&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Quem acompanhou até aqui deve estar se perguntando o que acontece se houver uma chamada para &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;,Courier,monospace;&quot;&gt;equals &lt;/span&gt;sem que seja feita a sobrescrita do método. Não passe vontade! Vá lá, comente o método &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;,Courier,monospace;&quot;&gt;equals &lt;/span&gt;e rode a aplicação. Eu espero...&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Pronto? Eis o resultado:&lt;/div&gt;
&lt;pre class=&quot;prettyprint lang-java&quot; style=&quot;padding: 10px;&quot;&gt;System.out.println(p1.equals(p2)); // false
System.out.println(p1.equals(p3)); // true&lt;/pre&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Acontece a mesma coisa do que se&amp;nbsp;utilizássemos&amp;nbsp;o operador &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;,Courier,monospace;&quot;&gt;==&lt;/span&gt;, ou seja, os objetos são comparados por referência. Para os curiosos, segue a implementação no método &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;,Courier,monospace;&quot;&gt;equals&lt;/span&gt; na classe &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;,Courier,monospace;&quot;&gt;Object&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: inherit;&quot;&gt; &lt;/span&gt;que justifica o porquê:
&lt;/div&gt;
&lt;pre class=&quot;prettyprint lang-java&quot; style=&quot;padding: 10px;&quot;&gt;public boolean equals(Object obj) {
   return (this == obj);
}&lt;/pre&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Uma regra que exige certo grau de disciplina do desenvolvedor é sempre sobrescrever o método &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;,Courier,monospace;&quot;&gt;hashCode &lt;/span&gt;junto com o método &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;,Courier,monospace;&quot;&gt;equals&lt;/span&gt;. Se essa regra não for respeitada, várias classes do Java que dependem da função &lt;i&gt;hash&lt;/i&gt; do objeto apresentarão comportamento inconsistente para o mesmo (exemplos dessas classes são as &lt;i&gt;collections &lt;/i&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;,Courier,monospace;&quot;&gt;HashSet&lt;/span&gt; e &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;,Courier,monospace;&quot;&gt;HashMap&lt;/span&gt;).&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
O que é uma função &lt;i&gt;hash &lt;/i&gt;e para que ela é utilizada fico devendo para um próximo &lt;i&gt;post&lt;/i&gt;. Por enquanto assuma que o método &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;,Courier,monospace;&quot;&gt;hashCode&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: inherit;&quot;&gt; &lt;/span&gt;deve mapear um objeto qualquer para um número inteiro para fins de comparação.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Lendo o &lt;a href=&quot;http://download.oracle.com/javase/6/docs/api/java/lang/Object.html#hashCode%28%29&quot;&gt;javadoc do método &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;,Courier,monospace;&quot;&gt;hashCode&lt;/span&gt;&lt;/a&gt;, um ponto importante do contrato que deve ser respeitado é: Se a comparação entre dois objetos com &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;,Courier,monospace;&quot;&gt;equals&lt;/span&gt;&amp;nbsp;retornar &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;,Courier,monospace;&quot;&gt;true&lt;/span&gt; os objetos devem possuir o mesmo &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;,Courier,monospace;&quot;&gt;hashCode&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: inherit;&quot;&gt;&amp;nbsp;&lt;/span&gt;(o inverso não é verdadeiro, ou seja, dois objetos com o mesmo &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;,Courier,monospace;&quot;&gt;hashCode&lt;/span&gt; não necessariamente precisam retornar &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;,Courier,monospace;&quot;&gt;true&lt;/span&gt; para a função &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;,Courier,monospace;&quot;&gt;equals&lt;/span&gt;). Segue uma implementação gerada pelo Netbeans que atende a esse contrato para a classe &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;,Courier,monospace;&quot;&gt;Pessoa&lt;/span&gt;:&amp;nbsp;&amp;nbsp;
&lt;/div&gt;
&lt;pre class=&quot;prettyprint lang-java&quot; style=&quot;padding: 10px;&quot;&gt;@Override
public int hashCode() {
   int hash = 5;
   hash = 37 * hash + (this.cpf != null ? this.cpf.hashCode() : 0);
   return hash;
}&lt;/pre&gt;
Observe que:&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;Toda pessoa com o mesmo CPF possui o mesmo &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;,Courier,monospace;&quot;&gt;hashCode&lt;/span&gt;.&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;Como para o método &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;,Courier,monospace;&quot;&gt;equals&lt;/span&gt;, &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;,Courier,monospace;&quot;&gt;String&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: inherit;&quot;&gt; &lt;/span&gt;e várias outras classes do Java sobrescrevem o método &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;,Courier,monospace;&quot;&gt;hashCode&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: inherit;&quot;&gt;, sendo possível reaproveitá-lo em nossas implementações&lt;/span&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;b&gt;Cuidado:&lt;/b&gt; O uso incorreto do operador &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;,Courier,monospace;&quot;&gt;==&lt;/span&gt; com objetos complexos pode introduzir bugs difíceis de serem rastreados.&amp;nbsp;Veja o seguinte exemplo com &lt;i&gt;strings&lt;/i&gt;:&lt;/div&gt;
&lt;/div&gt;
&lt;pre class=&quot;prettyprint lang-java&quot; style=&quot;padding: 10px;&quot;&gt;String s1 = &quot;abacate&quot;;
String s2 = &quot;abacate&quot;;
String s3 = new String(&quot;abacate&quot;);

System.out.println(s1 == &quot;abacate&quot;); // true
System.out.println(s1 == s2); // true 
System.out.println(s1 == s3); // false&lt;/pre&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Nesse caso &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;,Courier,monospace;&quot;&gt;s1&lt;/span&gt; e &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;,Courier,monospace;&quot;&gt;s2&lt;/span&gt; foram criados a partir do mesmo literal &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;,Courier,monospace;&quot;&gt;“abacate”&lt;/span&gt;. A JVM, por motivos de &lt;i&gt;performance &lt;/i&gt;/ eficiência no consumo de memória fez com que somente uma &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;,Courier,monospace;&quot;&gt;String&lt;/span&gt; contendo o valor &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;,Courier,monospace;&quot;&gt;“abacate”&lt;/span&gt; fosse de fato criada e ambas as referências apontassem para ela (através de um &lt;i&gt;pool &lt;/i&gt;de &lt;i&gt;strings&lt;/i&gt;). Já em &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;,Courier,monospace;&quot;&gt;s3&lt;/span&gt; houve a criação de um objeto diferente em memória (com &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;,Courier,monospace;&quot;&gt;new&lt;/span&gt;), logo, o operador &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;,Courier,monospace;&quot;&gt;==&lt;/span&gt; irá retornar &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;,Courier,monospace;&quot;&gt;false&lt;/span&gt;. 
&lt;br /&gt;
Sempre é possível usar o método &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;,Courier,monospace;&quot;&gt;&lt;a href=&quot;http://download.oracle.com/javase/6/docs/api/java/lang/String.html#intern%28%29&quot;&gt;intern&lt;/a&gt;&lt;/span&gt; para obter o objeto &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;,Courier,monospace;&quot;&gt;String&lt;/span&gt; presente no &lt;i&gt;pool&lt;/i&gt;, apto a ser comparado com o operador &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;,Courier,monospace;&quot;&gt;==&lt;/span&gt;. Porém, esse é o típico caso em que você deve se perguntar qual a vantagem de fazer isso (e se o motivo não for convincente, simplesmente não faça).&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Resumindo:&amp;nbsp;&lt;/b&gt;&lt;br /&gt;
&lt;ul style=&quot;text-align: justify;&quot;&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;Use &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;,Courier,monospace;&quot;&gt;==&lt;/span&gt; para primitivos.&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;Use &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;,Courier,monospace;&quot;&gt;equals&lt;/span&gt; para tipos complexos.&lt;/li&gt;
&lt;li style=&quot;text-align: justify; width: 610px!important;&quot;&gt;Verifique sempre se as classes dos objetos que você está tentando comparar sobrescrevem &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;,Courier,monospace;&quot;&gt;equals&lt;/span&gt; corretamente.&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;Se não sobrescreverem, sobrescreva &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;,Courier,monospace;&quot;&gt;equals&lt;/span&gt; de acordo com sua regra de negócio.&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;Se você sobrescrever &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;,Courier,monospace;&quot;&gt;equals&lt;/span&gt; deverá também sobrescrever &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;,Courier,monospace;&quot;&gt;hashCode&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: inherit;&quot;&gt;.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;div style=&quot;margin-top: 15px;&quot;&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: inherit;&quot;&gt;&lt;b&gt;Dica:&lt;/b&gt; Gerando os métodos &lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;,Courier,monospace;&quot;&gt;equals&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: inherit;&quot;&gt; e &lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;,Courier,monospace;&quot;&gt;hashCode&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: inherit;&quot;&gt; com seu IDE favorito:&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: inherit;&quot;&gt;&lt;u&gt;Netbeans&lt;/u&gt;: Alt + Insert&amp;nbsp;&lt;span class=&quot;Apple-style-span&quot;&gt;→&lt;/span&gt;&amp;nbsp;equals() and hashCode()&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: inherit;&quot;&gt;&lt;u&gt;Eclipse&lt;/u&gt;: Menu Superior&amp;nbsp;&lt;span class=&quot;Apple-style-span&quot;&gt;→&lt;/span&gt;&amp;nbsp;Source&amp;nbsp;&lt;span class=&quot;Apple-style-span&quot;&gt;→&lt;/span&gt;&amp;nbsp;Generate hashCode() and equals()&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: inherit;&quot;&gt;&lt;u&gt;IntelliJ&lt;/u&gt;: Alt + Insert&amp;nbsp;&lt;span class=&quot;Apple-style-span&quot;&gt;→&lt;/span&gt;&amp;nbsp;equals() and hashCode()&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;b&gt;Curiosidade:&lt;/b&gt; Veja que os IDES produzem implementações diferentes, porém válidas para ambos os métodos.&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;b&gt;UPDATE:&lt;/b&gt;&amp;nbsp;A pergunta &lt;a href=&quot;http://pt.stackoverflow.com/q/34562/100&quot; target=&quot;_blank&quot;&gt;Comportamento das diferentes formas de comparação em Java&lt;/a&gt;&amp;nbsp;no &lt;a href=&quot;http://pt.stackoverflow.com/q/34562/100&quot; target=&quot;_blank&quot;&gt;Stack Overflow em Português&lt;/a&gt;&amp;nbsp;está levantando algumas questões bem interessantes sobre esse assunto. Vale a pena conferir.&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://a.accioly.7rtc.com/feeds/6175307306078818882/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3179991594448154975/6175307306078818882' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3179991594448154975/posts/default/6175307306078818882'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3179991594448154975/posts/default/6175307306078818882'/><link rel='alternate' type='text/html' href='http://a.accioly.7rtc.com/2011/05/java-vs-equals.html' title='Java: == vs equals()'/><author><name>Anthony Accioly</name><uri>http://www.blogger.com/profile/11204999973940488842</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3179991594448154975.post-6334580258422953575</id><published>2011-05-05T20:50:00.011-03:00</published><updated>2012-04-09T12:12:58.534-03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="IDE"/><category scheme="http://www.blogger.com/atom/ns#" term="Java"/><category scheme="http://www.blogger.com/atom/ns#" term="Netbeans"/><title type='text'>Netbeans 7.0</title><content type='html'>&lt;div style=&quot;text-align: justify;&quot;&gt;
Uma nota rápida sobre o &lt;a href=&quot;http://netbeans.org/&quot;&gt;Netbeans&lt;/a&gt; 7.0.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Brinquei com o IDE nas últimas semanas e tive uma&amp;nbsp;experiência&amp;nbsp;excelente.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Segue uma lista das minhas &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-style: italic;&quot;&gt;&lt;a href=&quot;http://netbeans.org/community/releases/70/relnotes.html&quot;&gt;features&lt;/a&gt;&lt;/span&gt;&amp;nbsp;favoritas:&lt;/div&gt;
&lt;ul&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;Melhorias no suporte ao Weblogic. Bingo! Estrelinha dourada para a Oracle. Não nego que o o Weblogic é meu &lt;i&gt;Application Server&lt;/i&gt; predileto. A combinação Weblogic + Netbeans tem tudo para no futuro se tornar o melhor ambiente de desenvolvimento Java EE do mercado.&amp;nbsp;&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;Suporte ao Tomcat 7 e melhorias no suporte ao GlassFish. Subi alguns projetos de médio porte no Tomcat e fiz &lt;i&gt;redeploy &lt;/i&gt;várias vezes sem esbarrar em nenhum &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;OutOfMemoryError: PermGen space&lt;/span&gt;&lt;i&gt;&amp;nbsp;&lt;/i&gt;(outros programadores reportaram a mesma coisa; parabéns à equipe do Tomcat)&lt;i&gt;.&lt;/i&gt;&amp;nbsp;O tempo de&amp;nbsp;&lt;i&gt;turnaround&lt;/i&gt; para &lt;i&gt;deploy &lt;/i&gt;em ambos os &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-style: italic;&quot;&gt;containers&amp;nbsp;&lt;/span&gt;também está menor no meu computador. Na minha opinião o Netbeans atualmente possui o melhor suporte para Java EE 6 entre todos os IDES do mercado (seguido de perto pelo &lt;a href=&quot;http://www.jetbrains.com/idea/&quot;&gt;IntelliJ&lt;/a&gt;).&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;Suporte ao JDK 7 não poderia faltar. As sugestões automáticas são bem legais para ajudar programadores a se acostumarem com o operador diamante,&lt;i&gt; try-with-resources, multi-catch, switch &lt;/i&gt;sobre &lt;i&gt;Strings&lt;/i&gt;, etc.&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Ao contrário do que muita gente desconfiada (inclusive eu) acreditava, parece que há esperança para o Netbeans dentro da Oracle. Quanto mais suporte às tecnologias estratégicas da companhia for implementado no Netbeans (mesmo que através de &lt;i&gt;plugins&lt;/i&gt;) melhor. Além do suporte ao banco de dados Oracle e ao Weblogic, aguardo melhorias no suporte à BPEL e Hudson. Ficaria muito feliz também se um dia a Oracle implementasse suporte para Weblogic Portal e SOA Suite&amp;nbsp;no IDE. O Netbeans seria com certeza uma alternativa interessante ao&amp;nbsp;&lt;a href=&quot;http://www.oracle.com/technetwork/developer-tools/jdev/overview/index.html&quot;&gt;JDeveloper&lt;/a&gt;&amp;nbsp;e ao&amp;nbsp;&lt;a href=&quot;http://www.oracle.com/technetwork/developer-tools/eclipse/overview/index.html&quot;&gt;OEPE&lt;/a&gt;.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Faça o download da versão atual&amp;nbsp;&lt;a href=&quot;http://netbeans.org/downloads/index.html&quot;&gt;aqui&lt;/a&gt;.&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://a.accioly.7rtc.com/feeds/6334580258422953575/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3179991594448154975/6334580258422953575' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3179991594448154975/posts/default/6334580258422953575'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3179991594448154975/posts/default/6334580258422953575'/><link rel='alternate' type='text/html' href='http://a.accioly.7rtc.com/2011/05/netbeans-70.html' title='Netbeans 7.0'/><author><name>Anthony Accioly</name><uri>http://www.blogger.com/profile/11204999973940488842</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3179991594448154975.post-2003804239401951636</id><published>2011-03-29T23:22:00.051-03:00</published><updated>2012-04-09T12:19:35.982-03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Banco de Dados"/><category scheme="http://www.blogger.com/atom/ns#" term="H2"/><category scheme="http://www.blogger.com/atom/ns#" term="SQL"/><title type='text'>Satisfação imediata com o banco de dados H2</title><content type='html'>&lt;div style=&quot;text-align: justify;&quot;&gt;Até hoje lembro do meu primeiro contato com bancos de dados (aproveito para avisar que os próximos parágrafos terão pouco a ver com a&amp;nbsp;tecnologia do título. Se a idéia é aprender sobre o uso de &lt;a href=&quot;http://www.h2database.com/&quot;&gt;H2&lt;/a&gt;, pule direto para &lt;a href=&quot;#h2_database&quot;&gt;cá&lt;/a&gt;). Eu estava no segundo ano da faculdade, era bolsista e tinha todo o tempo livre do mundo, então decidi instalar e configurar um ambiente de desenvolvimento com uma versão antiga do &lt;a href=&quot;http://www.ubuntu.com/&quot;&gt;Ubuntu&lt;/a&gt; e uma versão mais antiga ainda do&amp;nbsp;&lt;a href=&quot;http://www.postgresql.org/&quot;&gt;PostgreSQL&lt;/a&gt;.&lt;br /&gt;
Foi uma experiência bastante &lt;s&gt;enlouquecedora&lt;/s&gt; enriquecedora. Em um único &lt;i&gt;sprint &lt;/i&gt;aprendi como trabalhar com autenticação e autorização no Linux e no PostgreSQL. Eu lembro o quanto penei para trocar a senha do usuário &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;postgres&lt;/span&gt;, executar o comando &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;psql&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: inherit;&quot;&gt; &lt;/span&gt;com esse usuário, criar um novo usuário que coincidisse com o meu &lt;i&gt;login &lt;/i&gt;do Linux no banco, criar um novo banco com o mesmo nome do usuário, criar&amp;nbsp;um novo &lt;i&gt;schema&lt;/i&gt; nesse banco para testes e assim por diante. Depois que consegui conectar no banco com o meu usuário usando o comando &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;psql&lt;/span&gt; levei mais pelo menos um dia para descobrir como conectar via JDBC.&lt;br /&gt;
Não satisfeito com todo esse trabalho, alguns meses depois resolvi compilar e instalar na unha uma versão mais nova do banco com uma série de extensões... Foram dias brigando com o comando &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;make&lt;/span&gt; (e as dependências da instalação), &lt;i&gt;switches &lt;/i&gt;do SGBD, arquivos de configuração e coisas de dia a dia do Linux como &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;chown, chmod, ln&lt;/span&gt;, configuração da variável &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;PATH&lt;/span&gt;,&amp;nbsp;Sys-V, etc. Quando finalmente consegui fazer tudo rodar direito eu já estava me sentindo bem familiarizado com o Linux (bem... vivendo uma ilusão na verdade, pois eu poderia ter adicionado meia dúzia de repositórios com binários que facilitariam bastante o processo).&lt;br /&gt;
Não preciso nem dizer que graças a minha falta de experiência tachei o PostgreSQL de complicado, acadêmico e burocrático antes mesmo de começar a usá-lo.&lt;br /&gt;
Um ano depois, já no mercado de trabalho, tive um contato inicial bem menos traumático com o &lt;a href=&quot;http://www.mysql.com/&quot;&gt;MySQL&lt;/a&gt;. Um &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;apt-get&lt;/span&gt; e meia dúzia de pequenas edições em arquivos de configuração depois e tudo já estava rodando em um ambiente com &amp;nbsp;&lt;a href=&quot;http://httpd.apache.org/&quot;&gt;Apache&lt;/a&gt; + &lt;a href=&quot;http://www.php.net/&quot;&gt;PHP&amp;nbsp;&lt;/a&gt;+ &lt;a href=&quot;http://www.phpmyadmin.net/&quot;&gt;phpMyAdmin &lt;/a&gt;+ MySQL. Criei os bancos e tudo que precisava com o phpMyAdmin (tomando o cuidado de criticar injustamente o &lt;a href=&quot;http://www.pgadmin.org/&quot;&gt;pgAdmin&lt;/a&gt;&amp;nbsp;em toda oportunidade de comparação que tive), modelei o banco com o &lt;a href=&quot;http://fabforce.net/dbdesigner4/&quot;&gt;DBDesigner&lt;/a&gt; (depois conheci o &lt;a href=&quot;http://wb.mysql.com/&quot;&gt;MySQLWorkbench &lt;/a&gt;que uso até hoje) e consegui conectar via JDBC na primeira tentativa. Foi rápido e satisfatório.&lt;br /&gt; 
Semanas depois quando descobri que as&amp;nbsp;&lt;i&gt;foreign keys&lt;/i&gt; não funcionavam (devido a &lt;i&gt;engine default&lt;/i&gt; MyISAM) e que as &lt;i&gt;constraints&lt;/i&gt; do tipo &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;CHECK&lt;/span&gt; eram silenciosamente ignoradas, não me importei muito com o trabalho extra de alterar a &lt;i&gt;engine&lt;/i&gt; de trocentas tabelas e reescrever o código das &lt;i&gt;constraints&lt;/i&gt; &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;CHECK&lt;/span&gt; do lado da aplicação. Em&amp;nbsp;contraste&amp;nbsp;passei meses implicando com coisas menores do PostgreSQL como o fato de ter que especificar mais colunas do que realmente precisava na cláusula &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;GROUP BY&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: inherit;&quot;&gt;, bem como o uso de&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; line-height: 21px;&quot;&gt;DISTINCT ON&lt;/span&gt;,&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: inherit;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;ILIKE&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: inherit;&quot;&gt;,&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: inherit;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: inherit;&quot;&gt;etc&lt;/span&gt;.&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: inherit;&quot;&gt;Moral da história: Eu admito ter um peso e duas medidas para os dois mais populares SGBDs O&lt;i&gt;pen Source&lt;/i&gt; do mercado. Depois de ter desenvolvido muitas aplicações e participado da instalação e configuração de diversos outros bancos (&lt;/span&gt;como &lt;a href=&quot;http://www.oracle.com/&quot;&gt;Oracle&lt;/a&gt;, &lt;a href=&quot;http://www-01.ibm.com/software/data/db2/&quot;&gt;DB2&lt;/a&gt;, &lt;a href=&quot;http://microsoft.com/SQLServer&quot;&gt;SQL Server&lt;/a&gt;, &lt;a href=&quot;http://www.sybase.com/products/databasemanagement/adaptiveserverenterprise&quot;&gt;Sybase&lt;/a&gt;, etc)&amp;nbsp;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: inherit;&quot;&gt;n&lt;/span&gt;os mais diversos ambientes - com diferentes requisitos (e camadas de complexidade) - posso dizer que ambos os bancos são ótimos. Mesmo assim, quando a escolha cabe a mim, eu acabo usando o MySQL. E por que? Porque em um período crucial do meu aprendizado acabei tendo uma experiência mais satisfatória com ele.&lt;br /&gt;
&lt;br /&gt;
Hoje tenho a grata oportunidade de treinar outros programadores. Volta e meia isso significa ajudá-los em seus primeiros passos com SQL. Por experiência própria, sei que esses primeiros contatos com o SGBD podem fazer toda a diferença na formação do aluno. Só aprenderão aqueles que fizerem exercícios, e só farão exercícios aqueles que conseguirem quebrar a barreira da instalação e configuração do ambiente.&lt;br /&gt;
A situação ideal seria que meus alunos pudessem criar bancos e executar todo tipo de comando SQL sem burocracia. Também é importante que usem um banco de dados confiável, com bom suporte aos padrões de SQL e que rode nos mais diversos sistemas operacionais. Se o banco puder rodar&amp;nbsp;&lt;i&gt;embbeded&amp;nbsp;&lt;/i&gt;ajuda bastante, pois dessa forma é possível criar exercícios que vão direto ao ponto em projetos pré-configurados.&lt;br /&gt;
&lt;a href=&quot;http://www.blogger.com/post-edit.g?blogID=3179991594448154975&amp;amp;postID=2003804239401951636&quot; name=&quot;h2_database&quot;&gt;&lt;/a&gt;&lt;br /&gt;
Conheça o H2, um banco de dados puramente implementado em Java que faz tudo isso. Em um único jar com pouco mais de 1Mb ele traz: um&amp;nbsp;poderoso&amp;nbsp;SGBD que pode rodar tanto em modo&amp;nbsp;&lt;i&gt;embbeded&amp;nbsp;&lt;/i&gt;quanto &lt;i&gt;client-server&lt;/i&gt;, um&amp;nbsp;&lt;i&gt;driver&lt;/i&gt;&amp;nbsp;JDBC tipo 4 e várias ferramentas como uma interface de administração web com&amp;nbsp;&lt;i&gt;Auto Completion&lt;/i&gt;&amp;nbsp;para SQL.&lt;br /&gt;
É possível fazer o&amp;nbsp;&lt;a href=&quot;http://www.h2database.com/html/download.html&quot;&gt;download&lt;/a&gt;&amp;nbsp;do instalador para Windows, do zip multi-plataforma, ou ainda apenas do jar do SGBD. Com o jar ou a versão zipada nenhuma instalação é necessária. Basta clicar duas vezes em&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&amp;nbsp;h2-[versão].jar&lt;/span&gt;&amp;nbsp;que o&amp;nbsp;&lt;i&gt;console&amp;nbsp;&lt;/i&gt;do banco aparecerá no seu navegador padrão. Se o seu sistema suportar o conceito de “Área de notificação” (classe&amp;nbsp;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;SystemTray&lt;/span&gt;&amp;nbsp;do Java) um ícone amarelo também deve aparecer; a partir deste você pode, a qualquer momento, acessar o&amp;nbsp;&lt;i&gt;console&lt;/i&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; padding-left: 5px;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiQ7dQ1OV-QdTl7R02MtnzLBwzdp_cy4ckQBLTekoz53mDtjtPcgzLRAiIkGtQPkij20akeFY1O8JZbUfJxoYcEClZlU4krDBcHEMigP0AHgtWSiZ0dQeLEkKRguSHkftGkFNXCekh4WzM/s1600/h2-jar.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;362&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiQ7dQ1OV-QdTl7R02MtnzLBwzdp_cy4ckQBLTekoz53mDtjtPcgzLRAiIkGtQPkij20akeFY1O8JZbUfJxoYcEClZlU4krDBcHEMigP0AHgtWSiZ0dQeLEkKRguSHkftGkFNXCekh4WzM/s640/h2-jar.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;/div&gt;Na tela de &lt;i&gt;login &lt;/i&gt;você deve indicar uma URL JDBC para o banco. A parcela da URL depois do &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;jdbc:h2:&lt;/span&gt; aponta para um arquivo no sistema operacional - o caminho pode ser absoluto (começando com “&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;/&lt;/span&gt;”), relativo ao diretório atual (começando com “&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;./&lt;/span&gt;”) ou ao diretório do usuário no SO (começando com “&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;~/&lt;/span&gt;”). Também será necessário entrar com o  &lt;i&gt;login &lt;/i&gt;e senha do administrador. &lt;br /&gt;
Se a URL apontar para um arquivo não existente o banco será criado (verifique que um arquivo&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt; [nome do banco].db&lt;/span&gt; apareceu no local indicado); também será criado um usuário administrador com o &lt;i&gt;login &lt;/i&gt;e senha informados.&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/AVvXsEjrVfDLLer5gU8CWKnZOv7NNdLJt7lWWQLMx-BNBkJ5A0QRygDqfgTxow8IahNkppgxXcXTS90Qi1tl-5lJtmiqDdLKmCdrvrtdzfd9cYdBfD0NselK_kyrmeeOjOC4WK_KOUxNzYkiHLE/s1600/h2-login.png&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/AVvXsEjrVfDLLer5gU8CWKnZOv7NNdLJt7lWWQLMx-BNBkJ5A0QRygDqfgTxow8IahNkppgxXcXTS90Qi1tl-5lJtmiqDdLKmCdrvrtdzfd9cYdBfD0NselK_kyrmeeOjOC4WK_KOUxNzYkiHLE/s1600/h2-login.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
Pronto, isso é tudo que precisa ser feito para criar um banco e acessá-lo em modo &lt;i&gt;embbeded&lt;/i&gt;. Para que múltiplos processos possam acessar o mesmo banco concorrentemente basta adicionar o parâmetro &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;AUTO_SERVER=TRUE&lt;/span&gt; no fim da URL. Por exemplo:&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;jdbc:h2:~/Projetos/DBs/h2/RH/RH;AUTO_SERVER=TRUE&lt;/span&gt;&lt;br /&gt;
É possível ainda fazer com que um dos processos aja exclusivamente como servidor e os outros exclusivamente como clientes. Clientes podem conectar em servidores remotos via TCP/IP ou SSL (veja a documentação &lt;a href=&quot;http://www.h2database.com/html/features.html#database_url&quot;&gt;aqui&lt;/a&gt;).&lt;br /&gt;
Uma vez conectado, a tela de administração aparecerá. No lado esquerdo você verá todos os objetos (&lt;i&gt;schemas&lt;/i&gt;, tabelas, usuários, &lt;i&gt;constraints&lt;/i&gt;, etc) do banco em uma &lt;i&gt;Tree View&lt;/i&gt;. No lado direito você pode entrar com comandos SQL (contando com a funcionalidade de &lt;i&gt;Auto Completion&lt;/i&gt;&amp;nbsp;para te ajudar). O resultado dos comandos é exibido na parte inferior da tela.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; padding-left: 4px; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhPCR9EdUTlSum3xA110rc_1f0hz1PGa1_N61n9UT_MG4nOIBcs8p38oxxKIntqlZYPWciy0xlE4Va4keDKVvQgLp7xrwBqg-U2ILEeEnMRZ4SauAttzD4hT6fA1KBIQG2xZ9GNVcUcLOY/s1600/h2-interface.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;396&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhPCR9EdUTlSum3xA110rc_1f0hz1PGa1_N61n9UT_MG4nOIBcs8p38oxxKIntqlZYPWciy0xlE4Va4keDKVvQgLp7xrwBqg-U2ILEeEnMRZ4SauAttzD4hT6fA1KBIQG2xZ9GNVcUcLOY/s640/h2-interface.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
Que tal um &lt;i&gt;Test Drive&lt;/i&gt; do banco? Vamos criar um pequeno &lt;i&gt;schema &lt;/i&gt;definido pela figura abaixo, populá-lo, e executar algumas &lt;i&gt;queries &lt;/i&gt;de complexidade média para ver como a &lt;i&gt;engine &lt;/i&gt;responde.&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/AVvXsEgAJdVvCzKwQOlJX0WmDtj86uu4js0JoxtK69pudMEpkq2TTvy7ZFy-W7SGW_Qv2bI3eZYmNTWqgo-tid53u4SJiv_YOGC9JJBBM_Mli2zu8Cw9-_Ex7EV43ohpQRkrBitION6V8D3xe4E/s1600/RH.png&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/AVvXsEgAJdVvCzKwQOlJX0WmDtj86uu4js0JoxtK69pudMEpkq2TTvy7ZFy-W7SGW_Qv2bI3eZYmNTWqgo-tid53u4SJiv_YOGC9JJBBM_Mli2zu8Cw9-_Ex7EV43ohpQRkrBitION6V8D3xe4E/s1600/RH.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
Começando pelo DDL, vamos criar as tabelas e &lt;i&gt;constraints&lt;/i&gt;:&lt;br /&gt;
&lt;pre class=&quot;prettyprint lang-sql&quot; style=&quot;padding: 10px;&quot;&gt;-- ----------------------------------------------------
-- Tabela departamento
-- ----------------------------------------------------
CREATE TABLE departamento 
(
  -- IDENTITY = BIGINT + auto incremento + PRIMARY KEY
  id IDENTITY ,
  nome VARCHAR(45) NOT NULL ,
);

-- Constraint nomeada
ALTER TABLE departamento 
ADD CONSTRAINT departamento_nome_unq UNIQUE(nome);

-- ----------------------------------------------------
-- Tabela funcionario
-- ----------------------------------------------------
CREATE TABLE funcionario 
(
  id IDENTITY ,
  nome VARCHAR(255) NOT NULL ,
  -- Valor default
  salario DECIMAL(10,2) NOT NULL DEFAULT 545.00,
  departamento_id INT NOT NULL ,
);

-- Foreign Keys não poderiam faltar 
ALTER TABLE funcionario 
ADD CONSTRAINT funcionario_departamento_fk 
FOREIGN KEY (departamento_id) REFERENCES departamento (id);

-- Funciona!
ALTER TABLE funcionario
ADD CONSTRAINT funcionario_salario_chk CHECK (salario &amp;gt;= 545.00);

-- ----------------------------------------------------
-- Tabela bonus
-- ----------------------------------------------------
CREATE TABLE bonus 
(
  id IDENTITY ,
  valor DECIMAL(10,2) NOT NULL DEFAULT 0.00 ,
  -- Que tal usar uma função?
  data DATE NOT NULL DEFAULT CURRENT_DATE ,
  funcionario_id BIGINT NOT NULL ,
);

ALTER TABLE bonus 
ADD CONSTRAINT bonus_funcionario_fk
FOREIGN KEY (funcionario_id) REFERENCES funcionario (id);
 
-- Precisa de índices? Sem problemas
CREATE INDEX bonus_data_idx ON bonus(data);
&lt;/pre&gt;Bem direto né? E agora inserts de múltiplas linhas a la MySQL:&lt;br /&gt;
&lt;pre class=&quot;prettyprint lang-sql&quot; style=&quot;padding: 10px;&quot;&gt;INSERT INTO departamento (nome) 
VALUES (&#39;Administrativo&#39;),  
       (&#39;TI&#39;), 
       (&#39;Vendas&#39;);     

INSERT INTO funcionario (nome, salario, departamento_id)  
VALUES (&#39;Auxiliar Administrativo&#39;, 2000.00, 1),
       (&#39;GP I&#39;, 5500.00, 1),
       (&#39;GP II&#39;, 7000.00, 1),
       (&#39;Programador I&#39;, 3000.00, 2),
       (&#39;Programador II&#39;, 6000.00, 2),
       (&#39;Programador III&#39;, 10000.00, 2),
       (&#39;Vendedor I&#39;, 1500.00, 3),
       (&#39;Vendedor II&#39;, 4500.00, 3);
   
INSERT INTO bonus (valor, data, funcionario_id)
VALUES (15000.00, &#39;2010-03-20&#39;, 7),
       (15000.00, &#39;2010-07-03&#39;, 7),
       (20000.00, &#39;2009-09-09&#39;, 8),
       (60000.00, &#39;2010-10-06&#39;, 8),
       (45000.00, &#39;2010-11-15&#39;, 8);&lt;/pre&gt;Veja que todas as &lt;i&gt;constraints &lt;/i&gt;estão sendo respeitadas (tente inserir um funcionário que ganhe menos de R$545,00 ou atribuir um valor inválido em um campo que tenha uma &lt;i&gt;foreign key&lt;/i&gt; e você se deparará com um exceção). &lt;br /&gt;
Mas e as &lt;i&gt;queries&lt;/i&gt;? Vamos resolver um primeiro exercício: Determinar, para cada departamento, a quantidade de  funcionários e o salário médio.&lt;br /&gt;
&lt;pre class=&quot;prettyprint lang-sql&quot; style=&quot;padding: 10px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;SELECT 
         d.nome AS `Departamento`, 
         COUNT(f.id) AS `Numero de Funcionários`, 
         ROUND(AVG(f.salario),2) AS `Média Salarial`
    FROM  
         departamento d 
         LEFT OUTER JOIN funcionario f ON (d.id = f.departamento_id)
GROUP BY
         d.id
ORDER BY
         d.nome;
&lt;/pre&gt;Perfeito. Essa &lt;i&gt;query &lt;/i&gt;usa de tudo um pouco, &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;alias&lt;/span&gt;, &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;group by&lt;/span&gt;, &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;order by&lt;/span&gt;, &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;joins&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: inherit;&quot;&gt; &lt;/span&gt;e funções (veja a &lt;a href=&quot;http://www.h2database.com/html/functions.html&quot;&gt;documentação&lt;/a&gt;). Repare que temos o melhor de dois mundos: um banco que não exige a repetição de colunas &lt;a href=&quot;http://dev.mysql.com/tech-resources/articles/debunking-group-by-myths.html&quot;&gt;funcionalmente dependentes&lt;/a&gt; na cláusula &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;group by&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: inherit;&quot;&gt; &lt;/span&gt;e respeita as &lt;i&gt;constraints&lt;/i&gt; do tipo &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;CHECK&lt;/span&gt;.&lt;br /&gt;
Mas que tal complicar um pouco mais? A definição do exercício número dois é: Encontrar todos os vendedores que ganharam mais de R$10.000,00 em bônus nos últimos doze meses; determinar o total de bônus  recebidos por cada vendedor no perído e ordená-los de acordo (começando com o vendedor com a maior soma de bônus e terminando com o vendedor com a menor).&lt;br /&gt;
&lt;pre class=&quot;prettyprint lang-sql&quot; style=&quot;padding: 10px;&quot;&gt;SET @MESES = 12; 
SET @BONUS = 10000.00;

  SELECT 
         f.id,
         f.nome AS `Vendedor`,
         SUM(b.valor) AS `Bonus` 
    FROM
         funcionario f 
         INNER JOIN departamento d ON (f.departamento_id = d.id)  
         INNER JOIN bonus b ON (f.id = b.funcionario_id)
   WHERE
         d.nome = &#39;Vendas&#39;
         AND b.data &amp;gt;= DATEADD(&#39;MONTH&#39;, -@MESES, CURRENT_DATE)
GROUP BY
         f.id 
  HAVING
         `Bonus` &amp;gt;= @BONUS
ORDER BY
         `Bonus` DESC; 
&lt;/pre&gt;Novamente tudo no lugar. Aí está nossa cláusula &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;having&lt;/span&gt;, múltiplos &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;joins&lt;/span&gt; e até mesmo o uso de variáveis. Deixo para o leitor brincar com subqueries, &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;UNION&lt;/span&gt;, &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;MINUS&lt;/span&gt;, &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;EXCEPT&lt;/span&gt;, &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;INTERSECT&lt;/span&gt;, etc.&lt;br /&gt;
O H2 têm uma quantidade de funcionalidades que deixa muitos outros bancos conhecidos no chinelo. Saindo do básico (&lt;a href=&quot;http://www.h2database.com/html/grammar.html#create_view&quot;&gt;views&lt;/a&gt;, &lt;a href=&quot;http://www.h2database.com/html/grammar.html#create_sequence&quot;&gt;sequences&lt;/a&gt;, &lt;a href=&quot;http://www.h2database.com/html/features.html#triggers&quot;&gt;triggers&lt;/a&gt;, &lt;i&gt;&lt;a href=&quot;http://www.h2database.com/html/features.html#user_defined_functions&quot;&gt;stored procedures&lt;/a&gt;&lt;/i&gt;, controle de transações, controle de usuários, &lt;i&gt;roles&lt;/i&gt;, &lt;a href=&quot;http://www.h2database.com/html/grammar.html#explain&quot;&gt;análise de planos de execução&lt;/a&gt;&amp;nbsp;, etc) algumas &lt;i&gt;features &lt;/i&gt;interessantes que lembro de cabeça são o modo &lt;a href=&quot;http://www.h2database.com/html/features.html#in_memory_databases&quot;&gt;in memory&lt;/a&gt; (com ótima &lt;i&gt;performance&lt;/i&gt;, excelente para &lt;i&gt;caches&lt;/i&gt;), a habilidade de &lt;a href=&quot;http://www.h2database.com/html/features.html#compatibility&quot;&gt;emular outros &lt;i&gt;databases&lt;/i&gt;&lt;/a&gt;, &lt;a href=&quot;http://www.h2database.com/html/advanced.html#recursive_queries&quot;&gt;&lt;i&gt;queries &lt;/i&gt;recursivas&lt;/a&gt;, suporte a&amp;nbsp;índices&amp;nbsp;do tipo &lt;a href=&quot;http://www.h2database.com/html/tutorial.html#fulltext&quot;&gt;full text&lt;/a&gt; (nativos ou integrados ao &lt;a href=&quot;http://lucene.apache.org/&quot;&gt;Lucene&lt;/a&gt;) e suporte básico a &lt;a href=&quot;http://www.h2database.com/html/advanced.html#clustering&quot;&gt;clusterização&lt;/a&gt;.&lt;br /&gt;
Os veteranos de Java que sentem calafrios quando escutam a combinação de palavras &lt;i&gt;embedded database&lt;/i&gt; podem ficar tranquilos. Uso o H2 já há alguns anos e nunca tive sequer um banco corrompido. Cheguei a fazer testes em que bati forte no banco com o &lt;a href=&quot;http://jakarta.apache.org/jmeter/&quot;&gt;JMeter&lt;/a&gt; para estressar um aplicativo web e observei um curva de degradação de &lt;i&gt;performance&lt;/i&gt; bem saudável. O controle transacional é confiável (inclusive quando operações do H2 participam de transações XA), e, no geral, o otimizador de &lt;i&gt;queries &lt;/i&gt;faz um bom trabalho (apesar de algumas limitações).&lt;br /&gt;
Bom para não escrever um artigo &lt;s&gt;muito&lt;/s&gt; tendencioso, informo que o&amp;nbsp;H2&amp;nbsp;&amp;nbsp;não deve ser considerado um substituto para &lt;i&gt;databases&amp;nbsp;&lt;/i&gt;tradicionais em ambiente de produção. Segue um &lt;a href=&quot;http://www.h2database.com/html/advanced.html#limits_limitations&quot;&gt;link&lt;/a&gt;&amp;nbsp;do site oficial que fala sobre algumas de suas limitações (diga-se de passagem, 4TB de armazenamento é um limite bastante generoso). Também é necessário dizer que por padrão o banco usa &lt;i&gt;table locks&lt;/i&gt;, o que reduz bastante a &lt;i&gt;performance &lt;/i&gt;quando uma tabela sofre muitos comandos de escrita concorrentes (porém, já existe suporte experimental a &lt;a href=&quot;http://www.h2database.com/html/advanced.html#mvcc&quot;&gt;MVCC&lt;/a&gt;).&lt;br /&gt;
Comprou a idéia? Não custa experimentar, é grátis.&lt;br /&gt;
Ah! Já que estamos falando de dinheiro, quem está por trás desse banco é o Thomas Müller, o mesmo criador do &lt;a href=&quot;http://hsqldb.org/&quot;&gt;HSQLDB&lt;/a&gt;. Esse segundo banco você já deve ter usado mesmo que não&amp;nbsp;saiba... Por padrão ele é incluído nos&amp;nbsp;&lt;i&gt;softwares&lt;/i&gt; &lt;a href=&quot;http://www.wolfram.com/&quot;&gt;Mathematica&lt;/a&gt;, &lt;a href=&quot;http://www.openoffice.org/product/base.html&quot;&gt;Open Office Base&lt;/a&gt;, &lt;a href=&quot;http://www.liferay.com/&quot;&gt;Liferay&lt;/a&gt;, &lt;a href=&quot;http://www.jboss.org/jbossas/&quot;&gt;JBoss&lt;/a&gt;, &lt;a href=&quot;http://www.atlassian.com/software/jira/&quot;&gt;Jira&lt;/a&gt;, &lt;a href=&quot;http://www.hibernate.org/&quot;&gt;Hibernate&lt;/a&gt;&amp;nbsp;e&amp;nbsp;&lt;a href=&quot;http://www.jforum.net/&quot;&gt;JForum&lt;/a&gt;, além, é claro, do super renomado &lt;i&gt;software &lt;/i&gt;de contabilidade O&lt;i&gt;pen Source&lt;/i&gt; que escrevi na faculdade, o &lt;a href=&quot;http://sourceforge.net/projects/accounting-mod/&quot;&gt;AAS&lt;/a&gt; hehehe). Você encontra um dotão &lt;i&gt;“Donate”&lt;/i&gt; do PayPal &lt;a href=&quot;http://www.h2database.com/&quot;&gt;na página do H2&lt;/a&gt;.&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://a.accioly.7rtc.com/feeds/2003804239401951636/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3179991594448154975/2003804239401951636' title='6 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3179991594448154975/posts/default/2003804239401951636'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3179991594448154975/posts/default/2003804239401951636'/><link rel='alternate' type='text/html' href='http://a.accioly.7rtc.com/2011/03/satisfacao-imediata-com-o-banco-de.html' title='Satisfação imediata com o banco de dados H2'/><author><name>Anthony Accioly</name><uri>http://www.blogger.com/profile/11204999973940488842</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiQ7dQ1OV-QdTl7R02MtnzLBwzdp_cy4ckQBLTekoz53mDtjtPcgzLRAiIkGtQPkij20akeFY1O8JZbUfJxoYcEClZlU4krDBcHEMigP0AHgtWSiZ0dQeLEkKRguSHkftGkFNXCekh4WzM/s72-c/h2-jar.png" height="72" width="72"/><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3179991594448154975.post-8510444354254807012</id><published>2010-11-23T01:23:00.022-02:00</published><updated>2010-11-24T23:07:02.771-02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Ciências da Computação"/><category scheme="http://www.blogger.com/atom/ns#" term="Exames"/><category scheme="http://www.blogger.com/atom/ns#" term="POSCOMP"/><category scheme="http://www.blogger.com/atom/ns#" term="Pós-Graduação"/><title type='text'>Exame - POSCOMP 2010</title><content type='html'>&lt;div style=&quot;text-align: justify;&quot;&gt;O &lt;a href=&quot;http://www.sbc.org.br/poscomp/&quot; target=&quot;_blank&quot;&gt;POSCOMP&lt;/a&gt; - Exame Nacional para Ingresso na Pós-Graduação em Computação - foi aplicado no dia 17 de Outubro de 2010 em diversos locais do país (bem como do Peru).&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;Apenas um bom desempenho na prova não garante vaga em nenhum programa de pós-graduação de primeira linha; estes utilizam também critérios como cartas de recomendação, publicações, participação em programas de iniciação-científica e congressos, atividades extracurriculares, bolsas, prêmios, desempenho na graduação, etc. Todavia, o exame caracteriza uma etapa importante (e muitas vezes decisiva) dos processos seletivos. &lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;A prova unificada é conveniente para o candidato que pode pleitear vagas em diferentes Universidades sem se deslocar. Na maioria dos casos o único exame necessário para ingressar em programas de Pós-Graduação em Computação é o POSCOMP (em São Paulo, por exemplo, isso vale para programas como os da USP, Unesp, Unicamp, ITA e UFScar). Entretanto cabe ao candidato se inscrever separadamente nos processos seletivos de cada instituição.&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;Mas não pense que o POSCOMP é moleza. Esse ano os candidatos conseguiram, em média, 29.3 acertos nas 70 questões de múltipla escolha. Históricamente a média de acertos é menor do que 50%.&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;As Universidades por padrão não estabelecem &quot;notas de corte&quot; para seus programas de Pós-Graduação, porém, utilizam as notas como critério de comparação entre candidatos.&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;A SBC publicou em seu site &lt;a href=&quot;http://www.sbc.org.br/index.php?language=1&amp;amp;subject=189&amp;amp;content=magazine&amp;amp;option=content&amp;amp;id=74&quot; target=&quot;_blank&quot;&gt;os exames e gabaritos das provas de 2002 a 2007&lt;/a&gt;. Candidatos que prestaram o exame nos últimos 3 anos também tiveram acesso aos gabaritos através de uma área restrita do site, mas por algum motivo a SBC ainda não divulgou links abertos para os demais interessados. &lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;Como prestei POSCOMP esse ano no IME/USP, obtive acesso ao exame e gabarito oficial que divulgo abaixo:&lt;/div&gt;&lt;a title=&quot;Ver POSCOMP-2010 no Scribd&quot; href=&quot;http://www.scribd.com/doc/43929781/POSCOMP-2010&quot; style=&quot;margin: 12px auto 6px auto; font-family: Helvetica,Arial,Sans-serif; font-style: normal; font-variant: normal; font-weight: normal; font-size: 14px; line-height: normal; font-size-adjust: none; font-stretch: normal; -x-system-font: none; display: block; text-decoration: underline;&quot; target=&quot;_blank&quot;&gt;Prova POSCOMP - 2010 no Scribd&lt;/a&gt; &lt;br /&gt;
&lt;object id=&quot;doc_310172892726111&quot; name=&quot;doc_310172892726111&quot; height=&quot;600&quot; width=&quot;100%&quot; type=&quot;application/x-shockwave-flash&quot; data=&quot;http://d1.scribdassets.com/ScribdViewer.swf&quot; style=&quot;outline:none;&quot; &gt;  &lt;param name=&quot;movie&quot; value=&quot;http://d1.scribdassets.com/ScribdViewer.swf&quot;&gt;&lt;param name=&quot;wmode&quot; value=&quot;opaque&quot;&gt;&lt;param name=&quot;bgcolor&quot; value=&quot;#ffffff&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;param name=&quot;FlashVars&quot; value=&quot;document_id=43929781&amp;access_key=key-20umhok7e6cf19ofybvv&amp;page=1&amp;viewMode=list&quot;&gt;&lt;embed id=&quot;doc_310172892726111&quot; name=&quot;doc_310172892726111&quot; src=&quot;http://d1.scribdassets.com/ScribdViewer.swf?document_id=43929781&amp;access_key=key-20umhok7e6cf19ofybvv&amp;page=1&amp;viewMode=list&quot; type=&quot;application/x-shockwave-flash&quot; allowscriptaccess=&quot;always&quot; allowfullscreen=&quot;true&quot; height=&quot;600&quot; width=&quot;100%&quot; wmode=&quot;opaque&quot; bgcolor=&quot;#ffffff&quot;&gt;&lt;/embed&gt;  &lt;/object&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;Dica: Resolver provas anteriores é uma maneira excelente de se preparar para os exames que estão por vir.&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://a.accioly.7rtc.com/feeds/8510444354254807012/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3179991594448154975/8510444354254807012' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3179991594448154975/posts/default/8510444354254807012'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3179991594448154975/posts/default/8510444354254807012'/><link rel='alternate' type='text/html' href='http://a.accioly.7rtc.com/2010/11/exame-poscomp-2010.html' title='Exame - POSCOMP 2010'/><author><name>Anonymous</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/blank.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3179991594448154975.post-9221475271262577621</id><published>2010-11-15T22:27:00.010-02:00</published><updated>2022-04-26T21:03:26.251-03:00</updated><title type='text'>Heráclito dá as boas vindas ao meu Blog</title><content type='html'>&lt;div class=&quot;MsoNoSpacing&quot; style=&quot;text-align: justify;&quot;&gt;“Nada é permanente salvo a mudança” já dizia Heráclito em 500 a.C.. É isso o que faz da inércia algo tão fascinante (e por mais que nos custe admitir, desejável). &amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div class=&quot;MsoNoSpacing&quot; style=&quot;text-align: justify;&quot;&gt;Difíceis de observar são as mudanças que todo (ênfase em todo) ser germina em si mesmo e em tudo com que tem contato. Mudanças radicais com conseqüências a longuíssimo prazo; mudanças que muitas vezes parecem medíocres na janela de tempo de uma vida. &lt;/div&gt;&lt;div class=&quot;MsoNoSpacing&quot; style=&quot;text-align: justify;&quot;&gt;Sofremos com a ilusão de insignificância, com a aparente lentidão e com as dificuldades para promover qualquer transformação substancial... Na minha opinião isso ocorre por distorção de escala, pela completa inabilidade em perceber o que é realmente importante em centenas, milhares, milhões, bilhões (ou mais) de anos.&lt;/div&gt;&lt;div class=&quot;MsoNoSpacing&quot; style=&quot;text-align: justify;&quot;&gt;Mas esse não é um Blog religioso e esse não é um tópico de auto-ajuda. Toda essa introdução foi para contextualizar o leitor sobre aquilo que acredito: &lt;/div&gt;&lt;div class=&quot;MsoNoSpacing&quot; style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;- Acredito que o homem seja um agente de transformação. Acredito em fazer mais e em fazer melhor. Acredito em aprender tudo o que puder. Acredito não só em aplicar, mas também em propagar o que aprendi. Acredito em acrescentar, introduzir melhorias, opiniões e mesmo erros no bolo de conhecimento humano. Acredito em capacitar pessoas que aplicarão o que eu aprendi, que serão responsáveis por novas melhorias, formarão opiniões, consertarão meus erros e capacitarão outras pessoas que, por sua vez, farão a mesma coisa.&amp;nbsp; &lt;/div&gt;&lt;div class=&quot;MsoNoSpacing&quot; style=&quot;text-align: justify;&quot;&gt;Não é por coincidência que acabei trabalhando com desenvolvimento de software e com Internet, não é por coincidência que estou montando uma escola para capacitar outras pessoas para fazerem a mesma coisa e não é por coincidência que estou escrevendo esse Blog.&lt;/div&gt;&lt;div class=&quot;MsoNoSpacing&quot; style=&quot;text-align: justify;&quot;&gt;Vivemos na era da globalização, usamos meios de telecomunicação cada vez mais abrangentes, estamos batendo nas portas da democracia da informação, finalmente caminhando em direção ao conhecimento universalmente acessível. Não tenho dúvida de que a revolução da Tecnologia da Informação marcará o século XXI, isso já é bem visível nos âmbitos corporativo, político e econômico. &lt;/div&gt;&lt;div class=&quot;MsoNoSpacing&quot; style=&quot;text-align: justify;&quot;&gt;Aqui disponibilizarei gratuitamente conteúdo pertinente para desenvolvedores de software e entusiastas de TI sob &lt;a href=&quot;https://creativecommons.org/licenses/by/3.0/br/&quot;&gt;Licença de Atribuição Creative Commons&lt;/a&gt;. Sinta-se livre para compartilhar e criar obras derivadas de tudo aquilo que for postado nesse Blog (incluindo enxertos de código e texto, anexos e tudo mais que for aproveitável), tomando apenas o cuidado de incluir um link visível para &lt;a href=&quot;https://a.accioly.7rtc.com/&quot;&gt;http://a.accioly.7rtc.com&lt;/a&gt; em seu trabalho.&lt;/div&gt;&lt;div class=&quot;MsoNoSpacing&quot; style=&quot;text-align: justify;&quot;&gt;Como vivemos em um mundo capitalista e um programador / professor também precisa comer, convido os interessados a ingressarem em aulas particulares, cursos e eventos da 7RTC. Mande um e-mail para &lt;a href=&quot;mailto:contato@7rtc.com&quot;&gt;contato@7rtc.com&lt;/a&gt;, que eu responderei assim que possível. &lt;/div&gt;&lt;div class=&quot;MsoNoSpacing&quot; style=&quot;text-align: justify;&quot;&gt;Welcome and Enjoy!&lt;/div&gt;&lt;div class=&quot;MsoNoSpacing&quot; style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;MsoNoSpacing&quot; style=&quot;text-align: justify;&quot;&gt;ps: Não se esqueça de assinar o &lt;a href=&quot;https://a.accioly.7rtc.com/feeds/posts/default&quot;&gt;Feed&lt;/a&gt;&amp;nbsp;ou o &lt;a href=&quot;https://feedburner.google.com/fb/a/mailverify?uri=aaccioly-posts&quot;&gt;Serviço de&amp;nbsp;Notícias&amp;nbsp;por E-Mail&lt;/a&gt; para ser notificado sobre novas postagens no Blog.&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://a.accioly.7rtc.com/feeds/9221475271262577621/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3179991594448154975/9221475271262577621' title='2 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3179991594448154975/posts/default/9221475271262577621'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3179991594448154975/posts/default/9221475271262577621'/><link rel='alternate' type='text/html' href='http://a.accioly.7rtc.com/2010/11/heraclito-da-as-boas-vindas-ao-meu-blog.html' title='Heráclito dá as boas vindas ao meu Blog'/><author><name>Anonymous</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/blank.gif'/></author><thr:total>2</thr:total></entry></feed>