<?xml version='1.0' encoding='UTF-8'?><rss xmlns:atom='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0' version='2.0'><channel><atom:id>tag:blogger.com,1999:blog-844300987775528643</atom:id><lastBuildDate>Thu, 31 May 2012 21:23:30 +0000</lastBuildDate><category>Unix</category><category>MacOSX</category><category>Desenvolvimento Ágil</category><category>Janrain</category><category>Cloud Computing</category><category>Telecomunicação</category><category>QueryDSL</category><category>Artesanato de Software</category><category>Software Craftsmanship</category><category>Opinião</category><category>Educação</category><category>Spring Integration</category><category>Java</category><category>Spring Security</category><category>JavaOne</category><category>OpenID</category><category>AWS</category><category>SNS</category><category>log4j</category><category>Spring Roo</category><category>AspectJ</category><category>NOSQL</category><category>Maven</category><category>nginx</category><category>Linux</category><category>Programador Profissional</category><category>m2e</category><category>Eclipse</category><category>Scrum</category><category>trombose</category><category>Spring</category><category>iptables</category><category>OpenJDK</category><title>Edson Yanaga</title><description>Artesão de Software: evoluindo de Aprendiz a Mestre</description><link>http://www.yanaga.com.br/</link><managingEditor>noreply@blogger.com (Edson Yanaga)</managingEditor><generator>Blogger</generator><openSearch:totalResults>27</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-844300987775528643.post-8264786739033393779</guid><pubDate>Tue, 29 May 2012 17:25:00 +0000</pubDate><atom:updated>2012-05-29T17:00:31.511-03:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>Software Craftsmanship</category><category domain='http://www.blogger.com/atom/ns#'>Programador Profissional</category><category domain='http://www.blogger.com/atom/ns#'>Artesanato de Software</category><title>Programador Profissional #1: Domínio do inglês</title><description>&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-19ThIi3umuo/T8TTFNsTb-I/AAAAAAAAAKM/4ClqjyxBbjU/s1600/ewd.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="320" src="http://3.bp.blogspot.com/-19ThIi3umuo/T8TTFNsTb-I/AAAAAAAAAKM/4ClqjyxBbjU/s320/ewd.png" width="240" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Edsger Wybe Dijkstra (1930-2002)&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;Este post é o primeiro (#1) da série de definições sobre o que considero um &lt;b&gt;programador profissional&lt;/b&gt;. Pensei em utilizar o título "Profissional Competente", mas acabei por concluir que seria um pleonasmo. Afinal, se é profissional, é competente. Os outros não competentes usualmente classifico como &lt;b&gt;amadores&lt;/b&gt;.&lt;br /&gt;&lt;br /&gt;Costumo utilizar uma imagem para representar cada post. Como falamos em profissionalismo, resolvi utilizar a foto de Edsger Wybe Dijkstra, considerado por muitos como o primeiro programador competente. É dele uma de minhas citações favoritas, apresentada quando um pesquisador lhe perguntou sobre qual tópico estudar:&lt;br /&gt;&lt;blockquote class="tr_bq"&gt;&lt;i&gt;"Only do what only you can do".&lt;/i&gt;&lt;/blockquote&gt;Traduzindo literalmente:&lt;br /&gt;&lt;blockquote class="tr_bq"&gt;&lt;i&gt;"Faça somente o que somente você pode fazer."&lt;/i&gt;&amp;nbsp;&lt;/blockquote&gt;A ordem das postagens é aleatória, ditada pela inspiração do momento. Isto não faz desta definição a mais, nem a menos importante.&lt;br /&gt;&lt;br /&gt;Sempre disse aos meus alunos e a quem trabalhou comigo que saber inglês em nossa profissão é fundamental. Dominar a língua inglesa não é precondição para estar empregado na área de tecnologia. Afinal, a suposta carência por mão-de-obra é tão grande que até os amadores têm seu lugar. Mas é precondição sim para ser um programador profissional.&lt;br /&gt;&lt;br /&gt;Gosto muito de uma frase que o Bruno Souza (o JavaMan) utilizou em uma de suas palestras aqui em Maringá: "Pra você que trabalha na área de tecnologia, português é sua segunda língua (inglês é a primeira)". Recado dado na medida exata de importância.&lt;br /&gt;&lt;br /&gt;Os bons livros são todos escritos em inglês. Depois de muito tempo, apenas alguns destes livros são traduzidos (e normalmente a tradução deixa a desejar). Não conseguir ler os bons livros disponíveis já alija qualquer programador de informações importantes e necessárias para tornar-se profissional. O mesmo se aplica a quaisquer artigos, &lt;i&gt;sites&lt;/i&gt; e revistas. Alguns teimosos vão contra-argumentar: "mas para estes casos há o Google Translator". Acreditem: &lt;b&gt;não é a mesma coisa&lt;/b&gt;.&lt;br /&gt;&lt;br /&gt;Ao participar de fóruns de discussão e eventos você possui a oportunidade de dialogar e trocar idéias e informações com pessoas fantásticas. Estas pessoas advém de diversos lugares do mundo, mas certamente todas falam inglês. Entendam uma coisa: inglês é a &lt;b style="font-style: italic;"&gt;lingua franca&lt;/b&gt;&amp;nbsp;do mundo da tecnologia. É no mínimo "chato" participar de grandes eventos e ficar "de lado" porque "não sabe inglês".&lt;br /&gt;&lt;br /&gt;Ler documentação de projetos? Participar de projetos open-source? Trabalhar em equipes geograficamente distribuídas? Conseguir os melhores projetos? Obter os melhores empregos? Para todas estas situações vocês precisarão do inglês.&lt;br /&gt;&lt;br /&gt;Para ser um programador profissional é preciso muito estudo e acesso à muita informação. Esta informação está em inglês. Nunca é tarde para aprender. Aliás, antes agora do que mais tarde. Novamente: quem quer acha um meio; quem não quer, acha uma desculpa. Bons estudos.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/844300987775528643-8264786739033393779?l=www.yanaga.com.br' alt='' /&gt;&lt;/div&gt;</description><link>http://www.yanaga.com.br/2012/05/programador-profissional-1-dominio-do.html</link><author>noreply@blogger.com (Edson Yanaga)</author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-19ThIi3umuo/T8TTFNsTb-I/AAAAAAAAAKM/4ClqjyxBbjU/s72-c/ewd.png' height='72' width='72'/><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-844300987775528643.post-8910946082736069490</guid><pubDate>Tue, 22 May 2012 13:31:00 +0000</pubDate><atom:updated>2012-05-22T10:31:04.961-03:00</atom:updated><title>Nós NÃO precisamos de mais programadores</title><description>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/--ELGfETuyrk/T7uLfYyNCqI/AAAAAAAAAJw/opuZE4b9QIo/s1600/math-nerd-4ecfe5cc568a3_hires.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="256" src="http://1.bp.blogspot.com/--ELGfETuyrk/T7uLfYyNCqI/AAAAAAAAAJw/opuZE4b9QIo/s320/math-nerd-4ecfe5cc568a3_hires.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Não, nós &lt;b&gt;não&lt;/b&gt; precisamos de mais programadores.&lt;br /&gt;&lt;br /&gt;Parece contraditório, no mínimo. Afinal, é bastante comum ouvirmos autoridades apregoando em discursos e reportagens que o déficit de programadores, no Brasil, é de 70 mil programadores/ano. Nos EUA, em torno de 200 mil programadores/ano. Mas nunca recebi uma explicação de como este número foi calculado.&lt;br /&gt;&lt;br /&gt;O "déficit" de programadores no Brasil e no mundo é utilizado como motivação para se investir mais na formação de mais programadores. O investimento é correto. O foco é que está errado.&lt;br /&gt;&lt;br /&gt;Novamente, nós &lt;b&gt;não&lt;/b&gt; precisamos de mais programadores.&lt;b&gt; Precisamos de programadores melhores&lt;/b&gt;. Precisamos de &lt;b&gt;profissionais competentes&lt;/b&gt;.&lt;br /&gt;&lt;br /&gt;Citarei um trecho de uma &lt;a href="http://www.sigsoft.org/SEN/parnas.html" target="_blank"&gt;entrevista&lt;/a&gt; com David Lorge Parns, ACM Fellow:&lt;br /&gt;&lt;blockquote class="tr_bq"&gt;&lt;b&gt;&lt;i&gt;What is the most often-overlooked risk in software engineering?&lt;/i&gt;&lt;/b&gt;&lt;/blockquote&gt;&lt;blockquote class="tr_bq"&gt;&lt;i&gt;Incompetent programmers. There are estimates that the number of programmers needed in the U.S. exceeds 200,000. This is entirely misleading. It is not a quantity problem; we have a quality problem. One bad programmer can easily create two new jobs a year. Hiring more bad programmers will just increase our perceived need for them. If we had more good programmers, and could easily identify them, we would need fewer, not more.&lt;/i&gt;&lt;/blockquote&gt;Traduzindo literalmente:&lt;br /&gt;&lt;blockquote class="tr_bq"&gt;&amp;nbsp;&lt;b&gt;&lt;i&gt;Qual é o mais desapercebido dos riscos em engenharia de software?&lt;/i&gt;&lt;/b&gt;&lt;/blockquote&gt;&lt;blockquote class="tr_bq"&gt;&lt;i&gt;Programadores incompetentes. Existem estimativas de que o número de programadores necessários nos EUA ultrapassa os 200.000. Estas estimativas são enganosas. Não é um problema de quantidade; nós temos um problema de qualidade. Um mau programador pode facilmente criar dois novos empregos por ano. Contratar mais maus programadores só vai aumentar a percepção de necessidade deles. Se tivéssemos mais bons programadores, e pudéssemos facilmente identificá-los, precisaríamos de menos, não de mais.&lt;/i&gt;&lt;/blockquote&gt;Infelizmente encontrar programadores que sejam profissionais competentes é algo raro. Programar não é somente "fazer funcionar". É fazer bem feito. É produzir código testado. É utilizar técnicas e ferramentas adequadas para resolver o problema.&lt;br /&gt;&lt;br /&gt;É fácil perceber porque um mau programador cria dois novos empregos por ano. Um mau programador (que é a regra generalizada) produz código mal feito. Um código mal feito precisa de outros dois maus programadores para ser mantido. E assim continuamos numa progressão geométrica.&lt;br /&gt;&lt;br /&gt;Vamos atacar o problema correto. Nossa meta deve ser transformar as pessoas com potencial em &lt;b&gt;profissionais competentes&lt;/b&gt; e retirar o restante do mercado. E você? De que lado está? De que lado quer ficar?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/844300987775528643-8910946082736069490?l=www.yanaga.com.br' alt='' /&gt;&lt;/div&gt;</description><link>http://www.yanaga.com.br/2012/05/nos-nao-precisamos-de-mais.html</link><author>noreply@blogger.com (Edson Yanaga)</author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/--ELGfETuyrk/T7uLfYyNCqI/AAAAAAAAAJw/opuZE4b9QIo/s72-c/math-nerd-4ecfe5cc568a3_hires.jpg' height='72' width='72'/><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-844300987775528643.post-3948056891475747689</guid><pubDate>Thu, 26 Apr 2012 21:55:00 +0000</pubDate><atom:updated>2012-04-26T20:26:47.788-03:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>Telecomunicação</category><title>A fragilidade da nossa infraestrutura de comunicação</title><description>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-Vn5q3reRFdI/T5lR1hb8kcI/AAAAAAAAAIo/ByjxV35wSnw/s1600/wireless-727932.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-Vn5q3reRFdI/T5lR1hb8kcI/AAAAAAAAAIo/ByjxV35wSnw/s1600/wireless-727932.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;Ontem, 25/04/2012, foi um dia que espero que continue atípico. Devido a um &lt;a href="http://idgnow.uol.com.br/mobilidade/2012/04/25/rompimento-de-fibra-optica-afeta-sinal-da-gvt-e-da-tim-no-sul-do-pais/#&amp;amp;panel2-1" target="_blank"&gt;rompimento de cabos de fibra óptica&lt;/a&gt;, os estados do Paraná, Santa Catarina, Rio Grande do Sul e parte de São Paulo ficaram com a conectividade à Internet limitada ou interrompida, além de sem telefone e celular. (Mas, por incrível e irônico que seja, o meu Twitter funcionava...)&lt;br /&gt;&lt;br /&gt;Quem conhece um pouco da história da Internet sabe que ela foi preparada para circunstâncias de guerra, permitindo uma comunicação continuada mesmo que vários enlaces e roteadores fossem comprometidos. Se uma parte da rede ficasse indisponível, automaticamente o tráfego seria desviado para uma rota alternativa para chegar ao destino. A qualidade poderia ser afetada, mas a comunicação não seria interrompida.&lt;br /&gt;&lt;br /&gt;Tudo muito bacana na teoria, mas evidente que o modelo de continuidade pressupõe a existência de &lt;b&gt;rotas alternativas&lt;/b&gt;. Não é o que testemunhamos com o incidente de ontem. Se um único segmento de fibra óptica rompido provocou toda essa indisponibilidade, imagino o quão precária e deficitária é a nossa infraestrutura de comunicações no Brasil.&lt;br /&gt;&lt;br /&gt;Suponho que por falta de planejamento ou avareza não havia e não há nenhum enlace de contingência ligando os estados afetados ao restante do mundo. Esta alternativa já é dolorosa o suficiente pra mim. Pois a outra hipótese, a de que havia um enlace alternativo - mas que foi enterrado &lt;b&gt;junto&lt;/b&gt;&amp;nbsp;com o enlace principal - é muito pior: o único termo que me vem à cabeça chama-se &lt;b&gt;burrice&lt;/b&gt;&amp;nbsp;(mas com o devido respeito aos equinos). Escolho acreditar na primeira alternativa.&lt;br /&gt;&lt;br /&gt;Temos realmente que evoluir muito. Pagamos absurdos por conexão à Internet, mas como provado, a qualidade de serviço que recebemos não está à altura do preço.&lt;br /&gt;&lt;br /&gt;E pra finalizar: &lt;b&gt;GVT&lt;/b&gt;, instale um enlace de contingência passando por outra rota, por favor...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/844300987775528643-3948056891475747689?l=www.yanaga.com.br' alt='' /&gt;&lt;/div&gt;</description><link>http://www.yanaga.com.br/2012/04/fragilidadade-da-nossa-infraestrutura.html</link><author>noreply@blogger.com (Edson Yanaga)</author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-Vn5q3reRFdI/T5lR1hb8kcI/AAAAAAAAAIo/ByjxV35wSnw/s72-c/wireless-727932.jpg' height='72' width='72'/><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-844300987775528643.post-1333520222257801945</guid><pubDate>Fri, 20 Apr 2012 13:32:00 +0000</pubDate><atom:updated>2012-04-20T10:55:37.211-03:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>Maven</category><title>Estabilidade do build utilizando o Maven</title><description>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-iv5he_cKbVk/T5CKhFTMW9I/AAAAAAAAAIM/LJnpi5Nh8Rk/s1600/expert-pete-prodoehl.jpeg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="219" src="http://1.bp.blogspot.com/-iv5he_cKbVk/T5CKhFTMW9I/AAAAAAAAAIM/LJnpi5Nh8Rk/s320/expert-pete-prodoehl.jpeg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;blockquote class="tr_bq"&gt;&lt;span style="background-color: white; font-family: Arial; font-size: 13px; text-align: left;"&gt;&lt;b&gt;Maven&lt;/b&gt;: &lt;i&gt;A person who has special knowledge or experience; an expert.&lt;/i&gt;&lt;/span&gt;&lt;/blockquote&gt;O Maven é uma ferramenta de build fantástica. Não é perfeita, pois como estamos cansados já de discutir, não existe esse conceito de ferramenta, linguagem etc perfeito. Contudo eu particularmente considero que 95% das pessoas que reclamam do maven é porque não sabem utilizá-lo. Os outros 5% talvez tenham razão.&lt;br /&gt;&lt;br /&gt;Algo que contribui e muito para as reclamações sobre o maven são a infinidade de &lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;pom&lt;/span&gt;s de dependências mal feitos (provavelmente criados pelos 95%). Infelizmente, eles são muito mais comuns do que o tolerável.&lt;br /&gt;&lt;br /&gt;Outro problema crítico para qualquer equipe de software é a estabilidade do build. O maven "baixa" as suas dependências através da Internet - por padrão através de repositórios públicos. Se o seu projeto é "novo", sem problemas. As dependências estarão lá. O problema é garantir que estas mesmas dependências estarão presentes daqui a 2, 3, 5 ou 10 anos. O que aconteceria se alguém resolvesse "apagar" aquelas dependências (já que os repositórios são controlados por terceiros, e não por você)? Resultado: build quebrado.&lt;br /&gt;&lt;br /&gt;Para nossa sorte há uma categoria de software que resolve os "problemas" do maven acima citados: os gerenciadores de repositório. Nesta categoria enquadram-se o &lt;a href="http://www.sonatype.org/nexus/" target="_blank"&gt;Nexus&lt;/a&gt; e o &lt;a href="http://www.jfrog.com/" target="_blank"&gt;Artifactory&lt;/a&gt;. O Nexus é mais antigo, e tenho trabalhado já há um bom tempo com ele. O Artifactory é mais recente e em 2011 ganhou um Duke Award da Oracle. Algumas comparações baseadas na minha experiência:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;O Nexus, por ser mais antigo, é mais popular. O &lt;strike&gt;repositório central do próprio maven passou a utilizá-lo recentemente&lt;/strike&gt;. O mecanismo de busca do repositório central do maven utiliza-o (Obrigado ao @aldrinleal pela correção!)&lt;/li&gt;&lt;li&gt;O Nexus possui um consumo de memória menor. O heap da minha instalação é de 64MB. No site do Artifactory recomenda-se 300MB.&lt;/li&gt;&lt;li&gt;O Artifactory é transacional. Isso faz com que qualquer atualização dos repositórios seja bem sucedida ou não sucedida. Não há estado inconsistente - que (dizem, não sou testemunha) ocorre com o Nexus (o Nexus utiliza somente arquivos).&lt;/li&gt;&lt;li&gt;O Nexus utiliza somente o sistema de arquivos. O Artifactory precisa de um banco de dados (por ser transacional).&lt;/li&gt;&lt;li&gt;O Nexus armazena cópias repetidas do mesmo arquivo que existem em repositórios diferentes. O Artifactory armazena somente uma e a referencia em repositórios diferentes (menor consumo de espaço).&lt;/li&gt;&lt;/ul&gt;Ambos funcionam bem. Escolher um ou outro passa a ser uma questão de gosto. O importante é escolher um e utilizá-lo. Mas como estes gerenciadores resolvem o problema do maven?&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Se há um &lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;pom.xml&lt;/span&gt; mal feito num repositório público, &lt;b&gt;você mesmo&lt;/b&gt; pode corrigi-lo e fazer o upload no seu Nexus ou Artifactory. Assim, os seus projetos utilizarão o seu &lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;pom.xml&lt;/span&gt; corrigido. Claro que você &lt;b&gt;pode e deve&lt;/b&gt; contribuir sua correção para os autores de um projeto livre, mas se eles irão aceitar suas "correções" depende deles, e não de você.&lt;/li&gt;&lt;li&gt;O Nexus ou o Artifactory realizam o download das suas dependências de repositórios externos e as salvam em seu repositório privado. Desse modo, mesmo que alguém desapareça com o repositório central do maven, ao menos as dependências do seu projeto estarão seguras no seu repositório local, garantindo a estabilidade do seu build.&lt;/li&gt;&lt;/ul&gt;Conclusão? Qualquer equipe de software consciente que trabalhe com o maven tem que utilizar um gerenciador de repositório. Escolha o seu.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/844300987775528643-1333520222257801945?l=www.yanaga.com.br' alt='' /&gt;&lt;/div&gt;</description><link>http://www.yanaga.com.br/2012/04/estabilidade-do-build-utilizando-maven.html</link><author>noreply@blogger.com (Edson Yanaga)</author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-iv5he_cKbVk/T5CKhFTMW9I/AAAAAAAAAIM/LJnpi5Nh8Rk/s72-c/expert-pete-prodoehl.jpeg' height='72' width='72'/><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-844300987775528643.post-9086160778522430368</guid><pubDate>Thu, 19 Apr 2012 21:48:00 +0000</pubDate><atom:updated>2012-04-19T18:48:48.383-03:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>Opinião</category><title>O fim do jornal e a resistência fútil</title><description>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-uLVzDzX0HSU/T5CBVqeLd0I/AAAAAAAAAIE/fxkKkLCOJRk/s1600/Newspaper+sections.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://1.bp.blogspot.com/-uLVzDzX0HSU/T5CBVqeLd0I/AAAAAAAAAIE/fxkKkLCOJRk/s320/Newspaper+sections.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Sim, o jornal morreu. Alguns moribundos ainda andam por aí, mas diminuem à medida em que os últimos amantes dos folhetins impressos também padecem.&lt;br /&gt;&lt;br /&gt;Obviamente o título sensacionalista deste post relaciona-se com o papel jornal, e não com o jornalismo. O jornalismo como fonte de informações transformou-se bastante com o fim do papel - não pela sua falta, mas pelo fato de que ignorantes pretensiosos como eu passaram a também produzir informações que pudessem ser lidas por quem se interessasse. E acredite, por mais improvável que seja, há quem se interesse. Imagino que seja o seu caso, estimado leitor.&lt;br /&gt;&lt;br /&gt;O modelo de negócios dos jornais nunca foi "vender papel", e sim publicidade e classificados. Hoje em dia o Google costuma abocanhar boa parte das verbas publicitárias e sites de classificados já preenchem um pouco da demanda provocada pelos internautas. A questão é: como manter a receita do negócio sendo que os consumidores de informação estão migrando para mídias digitais? O natural seria tentar criar atrativos para reter os leitores e transferi-los para a mídia digital (antigamente eu falaria Web, mas tablets e smartphones novamente mudaram o panorama).&lt;br /&gt;&lt;br /&gt;Um jornal local da cidade de Maringá (onde resido atualmente) resolveu seguir o caminho contrário. Seu conteúdo "impresso" estava disponível em seu portal para quem se interessasse por acessá-lo. Recentemente, provavelmente devido às quedas nas vendas de papel jornal, decidiu por fechar o seu conteúdo online e restringi-lo somente para assinantes. Resultado? Eu simplesmente parei de acessar o portal, pois o pouco conteúdo local produzido que me interessava já não me estava mais disponível.&amp;nbsp;Imagino que outros leitores tenham feito o mesmo e também passaram então a acessar outros sites que disponibilizassem informações locais.&lt;br /&gt;&lt;br /&gt;Desse jeito, esses poucos moribundos desaparecerão antes do esperado...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/844300987775528643-9086160778522430368?l=www.yanaga.com.br' alt='' /&gt;&lt;/div&gt;</description><link>http://www.yanaga.com.br/2012/04/o-fim-do-jornal-e-resistencia-futil.html</link><author>noreply@blogger.com (Edson Yanaga)</author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-uLVzDzX0HSU/T5CBVqeLd0I/AAAAAAAAAIE/fxkKkLCOJRk/s72-c/Newspaper+sections.jpg' height='72' width='72'/><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-844300987775528643.post-1124329281200177732</guid><pubDate>Thu, 29 Mar 2012 19:18:00 +0000</pubDate><atom:updated>2012-05-29T18:43:55.363-03:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>Cloud Computing</category><title>Mais dados sobre a redução dos custos com cloud computing</title><description>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-MfT9etRXDLc/T3Sy9QmeLUI/AAAAAAAAAHg/IEvQkY7OB6k/s1600/money-clouds.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://2.bp.blogspot.com/-MfT9etRXDLc/T3Sy9QmeLUI/AAAAAAAAAHg/IEvQkY7OB6k/s320/money-clouds.jpg" width="249" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Muitas empresas ainda não enxergam a significativa redução de custo obtida através do uso do &lt;i&gt;cloud computing&lt;/i&gt; (computação em nuvem). Além de trocar o CAPEX (&lt;i&gt;Capital Expenditures&lt;/i&gt;) - investimento de capital por OPEX (&lt;i&gt;Operational Expenditures&lt;/i&gt;) - despesas operacionais, o tamanho do investimento/despesa é muito menor graças ao ganho de escala.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://blog.uptimeinstitute.com/tag/server-roundup/" target="_blank"&gt;Dados do Uptime Institute&lt;/a&gt; informam que um único servidor de 1U durante um ano pode resultar num gasto de US$ 500 em energia elétrica, US$ 500 em licenças de sistema operacional e mais US$ 1500 em custos de manutenção do hardware. Resultado: US$ 2500/ano. Este é um valor que muitos empresários/diretores não calculam quando comparam o modelo&amp;nbsp;&lt;i&gt;on-premise&lt;/i&gt;&amp;nbsp;com o &lt;i&gt;cloud computing&lt;/i&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Eu mesmo já migrei todos os meus serviços há mais de 4 anos, e hoje não enxergo outra forma de se utilizar computação. Definitivamente quem não se aproveita disso está ficando pra trás.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/844300987775528643-1124329281200177732?l=www.yanaga.com.br' alt='' /&gt;&lt;/div&gt;</description><link>http://www.yanaga.com.br/2012/03/mais-dados-sobre-reducao-dos-custos-com.html</link><author>noreply@blogger.com (Edson Yanaga)</author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-MfT9etRXDLc/T3Sy9QmeLUI/AAAAAAAAAHg/IEvQkY7OB6k/s72-c/money-clouds.jpg' height='72' width='72'/><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-844300987775528643.post-290422527632124875</guid><pubDate>Sun, 04 Mar 2012 13:34:00 +0000</pubDate><atom:updated>2012-03-04T10:39:34.060-03:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>Spring Roo</category><category domain='http://www.blogger.com/atom/ns#'>MacOSX</category><category domain='http://www.blogger.com/atom/ns#'>AspectJ</category><category domain='http://www.blogger.com/atom/ns#'>Java</category><category domain='http://www.blogger.com/atom/ns#'>Eclipse</category><category domain='http://www.blogger.com/atom/ns#'>OpenJDK</category><title>Eclipse, OpenJDK 7 e AJDT no MacOSX</title><description>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-Ly4d3b-K8-8/T1Nwid6z2yI/AAAAAAAAAGk/4ZnyvfYmhKA/s1600/aspect.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://4.bp.blogspot.com/-Ly4d3b-K8-8/T1Nwid6z2yI/AAAAAAAAAGk/4ZnyvfYmhKA/s320/aspect.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;O lançamento do Java 7 está quase fazendo aniversário e eu ainda não havia me "atualizado" para esta nova versão. Boa parte da culpa estava na não-disponibilidade do OpenJDK 7 para MacOSX, ao menos não na versão estável.&lt;br /&gt;&lt;br /&gt;Depois de muito aguardar, acreditei que o OpenJDK estava estável o suficiente para utiliza-lo. Muitos relatos da comunidade Java no mundo colaboraram para esta opinião.&lt;br /&gt;&lt;br /&gt;Passo-a-passo da migração:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Instalar o OpenJDK 7 para MacOSX (obtido em&amp;nbsp;&lt;a href="http://jdk7.java.net/macportpreview/" target="_blank"&gt;http://jdk7.java.net/macportpreview/&lt;/a&gt;). Siga as instruções na página.&lt;/li&gt;&lt;li&gt;Atualizar a versão do Java de &lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;1.6&lt;/span&gt; para &lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;1.7&lt;/span&gt; tanto no &lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;maven-compiler-plugin&lt;/span&gt; quanto no &lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;aspectj-maven-plugin&lt;/span&gt;&lt;span style="font-family: inherit;"&gt;&amp;nbsp;(esse último somente se você utilizar de fato &amp;nbsp;o AspectJ) do seu &lt;/span&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;pom.xml &lt;/span&gt;&lt;span style="font-family: inherit;"&gt;(assumindo que você utiliza o maven).&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family: inherit;"&gt;Atualizar a versão do AspectJ para a &lt;/span&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;1.7.0.M1&lt;/span&gt;&lt;span style="font-family: inherit;"&gt; (novamente, somente se você utilizar o AspectJ).&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family: inherit;"&gt;Atualizar a versão do AJDT do Eclipse para uma versão que possua suporte ao Java 7. É necessário se você utilizar o JDT Weaving do Eclipse (como é o meu caso). Pra quem gosta de arriscar e quiser utilizar o update site, adicione a URL&amp;nbsp;&lt;a href="http://download.eclipse.org/tools/ajdt/37/dev/update" target="_blank"&gt;http://download.eclipse.org/tools/ajdt/37/dev/update&lt;/a&gt;. Entretanto, eu recomendo baixar o zip da atualização manualmente para não ter o dissabor de num update futuro as coisas deixarem de funcionar. A versão que eu utilizei e que afirmo que funciona é a&amp;nbsp;&lt;a href="http://www.eclipse.org/downloads/download.php?file=/tools/ajdt/37/dev/update/ajdt-e37x-20120302-1100.zip" target="_blank"&gt;http://www.eclipse.org/downloads/download.php?file=/tools/ajdt/37/dev/update/ajdt-e37x-20120302-1100.zip&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;Encontrei muitos relatos na Internet que mostravam o Java 7 funcionando no Eclipse no MacOSX, mas &lt;b&gt;nenhum&lt;/b&gt; relatava a configuração com o AspectJ. Tive que descobrir sozinho. E aproveito e reporto aqui para que outras pessoas não percam o mesmo tempo que eu perdi.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Nota&lt;/b&gt;: usuários do Spring Roo certamente utilizam o AspectJ em seus projetos. Usuários do Spring que utilizam a anotação &lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;@Configurable&lt;/span&gt; provavelmente também.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/844300987775528643-290422527632124875?l=www.yanaga.com.br' alt='' /&gt;&lt;/div&gt;</description><link>http://www.yanaga.com.br/2012/03/eclipse-openjdk-7-e-ajdt-no-macosx.html</link><author>noreply@blogger.com (Edson Yanaga)</author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-Ly4d3b-K8-8/T1Nwid6z2yI/AAAAAAAAAGk/4ZnyvfYmhKA/s72-c/aspect.jpg' height='72' width='72'/><thr:total>2</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-844300987775528643.post-6272875923151474267</guid><pubDate>Sat, 25 Feb 2012 20:38:00 +0000</pubDate><atom:updated>2012-02-25T18:38:18.055-02:00</atom:updated><title>O que ficou...</title><description>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-8XDsOtIJoLQ/T0lE2GVA3HI/AAAAAAAAAGc/IxvQjNYZbmU/s1600/427719_344649482223876_100000364824108_1151359_1799024041_n.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="307" src="http://4.bp.blogspot.com/-8XDsOtIJoLQ/T0lE2GVA3HI/AAAAAAAAAGc/IxvQjNYZbmU/s400/427719_344649482223876_100000364824108_1151359_1799024041_n.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Há 12 anos estávamos eu e meus amigos de turma nos formando em Ciência da Computação na Universidade Estadual de Maringá (UEM). Em nossa colação de grau tive a honra de ser o orador geral de todos os formandos da formatura conjunta da UEM. No discurso que preparei (do qual lembro de apenas alguns trechos, infelizmente) optei por encerrá-lo adaptando um poema de Fernando Sabino. Nesse clima de nostalgia, recordo-me destas palavras:&lt;br /&gt;&lt;blockquote class="tr_bq"&gt;&lt;i&gt;&lt;span style="font-family: Times, 'Times New Roman', serif; font-size: large;"&gt;"De tudo ficaram três coisas:&amp;nbsp;&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;span style="font-family: Times, 'Times New Roman', serif; font-size: large;"&gt;A certeza de que estamos apenas começando,&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;span style="font-family: Times, 'Times New Roman', serif; font-size: large;"&gt;A certeza de que é preciso continuar e&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;span style="font-family: Times, 'Times New Roman', serif; font-size: large;"&gt;A certeza de que podemos ser interrompidos antes de terminar.&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;span style="font-family: Times, 'Times New Roman', serif; font-size: large;"&gt;Fazer da interrupção um caminho novo,&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;span style="font-family: Times, 'Times New Roman', serif; font-size: large;"&gt;Fazer da queda um passo de dança.&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;span style="font-family: Times, 'Times New Roman', serif; font-size: large;"&gt;Do medo uma escada,&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;span style="font-family: Times, 'Times New Roman', serif; font-size: large;"&gt;Do sonho uma ponte,&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;span style="font-family: Times, 'Times New Roman', serif; font-size: large;"&gt;Da procura um encontro.&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;span style="font-family: Times, 'Times New Roman', serif; font-size: large;"&gt;Fica a promessa do reencontro,&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;span style="font-family: Times, 'Times New Roman', serif; font-size: large;"&gt;Fica o desejo de boa sorte,&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;span style="font-family: Times, 'Times New Roman', serif; font-size: large;"&gt;Fica a vontade de que lutes e venças!"&lt;/span&gt;&lt;/i&gt;&lt;/blockquote&gt;Creio que são boas palavras de inspiração. É o que fica para todos nós...&lt;br /&gt;&lt;br /&gt;Crédito da foto ao &lt;i&gt;Paulo Roberto Crestani Júnior&lt;/i&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/844300987775528643-6272875923151474267?l=www.yanaga.com.br' alt='' /&gt;&lt;/div&gt;</description><link>http://www.yanaga.com.br/2012/02/o-que-ficou.html</link><author>noreply@blogger.com (Edson Yanaga)</author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-8XDsOtIJoLQ/T0lE2GVA3HI/AAAAAAAAAGc/IxvQjNYZbmU/s72-c/427719_344649482223876_100000364824108_1151359_1799024041_n.jpg' height='72' width='72'/><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-844300987775528643.post-6154033679086271959</guid><pubDate>Sat, 25 Feb 2012 19:16:00 +0000</pubDate><atom:updated>2012-04-21T17:07:02.795-03:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>Java</category><category domain='http://www.blogger.com/atom/ns#'>nginx</category><category domain='http://www.blogger.com/atom/ns#'>Linux</category><category domain='http://www.blogger.com/atom/ns#'>Unix</category><category domain='http://www.blogger.com/atom/ns#'>iptables</category><title>Utilizando o iptables ou ngninx para responder requisições na porta 80 como usuário não-root</title><description>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-NgYVZpyy0YQ/T0k0W-xc4wI/AAAAAAAAAGU/RXGhVFxU11U/s1600/root_1_lg.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="252" src="http://4.bp.blogspot.com/-NgYVZpyy0YQ/T0k0W-xc4wI/AAAAAAAAAGU/RXGhVFxU11U/s320/root_1_lg.gif" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Por questões de segurança jamais devemos permitir que serviços num servidor unix sejam executados como &lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;root&lt;/span&gt;. Isso permitiria que uma falha nesse serviço (e como desenvolvedores sabemos que essas falhas realmente acontecem) comprometesse todo o sistema.&lt;br /&gt;&lt;br /&gt;Pelas mesmas restrições de segurança, não é permitido que usuários não-&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;root&lt;/span&gt; escutem (realizem o &lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;bind&lt;/span&gt; de &lt;i&gt;sockets&lt;/i&gt;) em portas inferiores à 1024. A questão é: como então executar um serviço (HTTP, no nosso exemplo) na porta 80 como usuário não-&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;root&lt;/span&gt;?&lt;br /&gt;&lt;br /&gt;Utilizarei o HTTP - que roda na porta 80 - como exemplo, pois provavelmente é o caso de uso mais popular. Imagino que você precise que um Tomcat, um Glassfish ou um JBoss seja executado no seu servidor. Normalmente estes serviços são inicializados na porta 8080. Apresento então duas solução possíveis:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Caso você possua somente um serviço e um domínio, pode utilizar o redirecionamento através do &lt;i&gt;iptables&lt;/i&gt;.&lt;/li&gt;&lt;li&gt;Caso você possua vários serviços em portas diferentes e possivelmente vários domínios (&lt;i&gt;virtual hosts&lt;/i&gt;) no mesmo servidor, utilize o nginx como &lt;i&gt;proxy&lt;/i&gt;. (Sim, é possível fazer o mesmo com o Apache e &lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;mod_proxy&lt;/span&gt; ou AJP, mas o ngnix provou-se uma solução mais fácil, rápida, prática e com menor consumo de memória).&lt;/li&gt;&lt;/ol&gt;Exemplo de configuração com o iptables redirecionando as requisições na porta 80 para a 8080:&lt;br /&gt;&lt;div class="gistLoad" data-id="1910125" id="gist-1910125"&gt;Loading ....&lt;/div&gt;O &lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;REDIRECT&lt;/span&gt; de &lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;PREROUTING&lt;/span&gt; atende as requisições externas, e o &lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;REDIRECT&lt;/span&gt; de &lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;OUTPUT&lt;/span&gt; serve para redirecionar as requisições originadas do próprio servidor que estejam direcionadas à porta 80.&lt;br /&gt;&lt;br /&gt;Exemplo de configuração com o ngninx atuando como &lt;i&gt;proxy&lt;/i&gt; de requisições na porta 80 e redirecionando para a porta 8080:&lt;br /&gt;&lt;div class="gistLoad" data-id="1909807" id="gist-1909807"&gt;Loading ....&lt;/div&gt;Com esta configuração do ngnix, basta duplicar as linhas acima com as alterações convenientes e você pode ter dois Tomcats sendo executados no mesmo servidor nas portas 8080 e 8081, por exemplo, e redirecionar o &lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;myserver.mydomain.com&lt;/span&gt; para a porta 8080 e o &lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;myserver2.mydomain.com&lt;/span&gt; para a porta 8081. Dois &lt;i&gt;virtual hosts&lt;/i&gt;, cada um num Tomcat diferente, no mesmo servidor.  &lt;script src="https://raw.github.com/yanaga/gist-Blogger/master/public/gistLoader.js" type="text/javascript"&gt;&lt;/script&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/844300987775528643-6154033679086271959?l=www.yanaga.com.br' alt='' /&gt;&lt;/div&gt;</description><link>http://www.yanaga.com.br/2012/02/utilizando-o-iptables-ou-ngninx-para.html</link><author>noreply@blogger.com (Edson Yanaga)</author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-NgYVZpyy0YQ/T0k0W-xc4wI/AAAAAAAAAGU/RXGhVFxU11U/s72-c/root_1_lg.gif' height='72' width='72'/><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-844300987775528643.post-9159797701367086684</guid><pubDate>Wed, 22 Feb 2012 18:40:00 +0000</pubDate><atom:updated>2012-04-21T17:09:12.337-03:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>Java</category><category domain='http://www.blogger.com/atom/ns#'>log4j</category><category domain='http://www.blogger.com/atom/ns#'>Spring</category><title>Spring 3.x Profiles e configurações diferentes do log4j</title><description>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-7sWRhJeMArs/T0K-J8_JY9I/AAAAAAAAAGE/VdenNuf4gqE/s1600/gemini-profile200.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-7sWRhJeMArs/T0K-J8_JY9I/AAAAAAAAAGE/VdenNuf4gqE/s1600/gemini-profile200.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Uma das mais aguardadas e bem vindas novas funcionalidades do &lt;a href="http://www.springsource.org/" target="_blank"&gt;Spring Framework&lt;/a&gt; 3.x são os &lt;i&gt;bean profiles&lt;/i&gt;, permitindo que você configure grupos de beans e escolha qual(is) destes grupos você deseja ativar durante o desenvolvimento, produção, teste etc. Outra boa novidade é o &lt;i&gt;Java Configuration&lt;/i&gt;, permitindo que você configure os seus contextos do Spring utilizando somente código Java ao invés dos famigerados arquivos XML.&lt;br /&gt;&lt;br /&gt;Nem tanto ao céu, nem tanto ao inferno. XML não é algo ruim. Bem usado, é uma ferramenta valiosa. Mas é fácil exagerar também. De antemão já adianto que o &lt;i&gt;refactoring&lt;/i&gt;&amp;nbsp;de arquivos de configuração do Spring que utilizam o &lt;i&gt;Java Configuration&lt;/i&gt;&amp;nbsp;é bem mais simples.&lt;br /&gt;&lt;br /&gt;Algo que me incomodava no log4j era o fato dele ser configurado através de arquivos disponíveis no &lt;i&gt;classpath&lt;/i&gt; como &lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;log4j.properties&lt;/span&gt; ou &lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;log4j.xml&lt;/span&gt;. Isso tornava trabalhoso o ato de utilizar configurações diferentes para ambientes diferentes (normalmente utilizando o maven para copiar o arquivo escolhido dependendo do &lt;i&gt;profile&lt;/i&gt; utilizado).&lt;br /&gt;&lt;br /&gt;Nada como a maravilha do software livre. Analisando o código-fonte, vi que utilizar arquivos de configuração do log4j diferentes para ambiente diferentes é mais simples do que eu pensava.&lt;br /&gt;&lt;br /&gt;Com a configuração abaixo você pode utilizar dois arquivos de configuração do log4j: um para teste/desenvolvimento que imprima no console, e outro para produção que grave num &lt;i&gt;rolling file&lt;/i&gt;&amp;nbsp;e/ou envie notificações através do &lt;a href="http://www.yanaga.com.br/2012/02/notificacoes-do-log4j-atraves-do-amazon.html" target="_blank"&gt;SNS&lt;/a&gt;, por exemplo.&lt;br /&gt;&lt;br /&gt;&lt;div class="gistLoad" data-id="1886535" id="gist-1886535"&gt;Loading ....&lt;/div&gt;&lt;div class="gistLoad" data-id="1886540" id="gist-1886540"&gt;Loading ....&lt;/div&gt; &lt;script src="https://raw.github.com/yanaga/gist-Blogger/master/public/gistLoader.js" type="text/javascript"&gt;&lt;/script&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/844300987775528643-9159797701367086684?l=www.yanaga.com.br' alt='' /&gt;&lt;/div&gt;</description><link>http://www.yanaga.com.br/2012/02/spring-3x-profiles-e-configuracoes.html</link><author>noreply@blogger.com (Edson Yanaga)</author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-7sWRhJeMArs/T0K-J8_JY9I/AAAAAAAAAGE/VdenNuf4gqE/s72-c/gemini-profile200.jpg' height='72' width='72'/><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-844300987775528643.post-2917478731823278921</guid><pubDate>Mon, 20 Feb 2012 16:51:00 +0000</pubDate><atom:updated>2012-02-20T14:53:01.922-02:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>Java</category><category domain='http://www.blogger.com/atom/ns#'>log4j</category><category domain='http://www.blogger.com/atom/ns#'>SNS</category><category domain='http://www.blogger.com/atom/ns#'>Cloud Computing</category><category domain='http://www.blogger.com/atom/ns#'>AWS</category><title>Notificações do log4j através do Amazon SNS</title><description>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-bNdzd-O9rJA/T0JQPynbPPI/AAAAAAAAAF8/ytYZv3D3urE/s1600/logo.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-bNdzd-O9rJA/T0JQPynbPPI/AAAAAAAAAF8/ytYZv3D3urE/s1600/logo.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;Como desenvolvedores e &lt;i&gt;devops&lt;/i&gt; muitas vezes precisamos ser notificados de erros que ocorrem nas aplicações para podermos resolvê-los com o mínimo de &lt;i&gt;downtime&lt;/i&gt;&amp;nbsp;e transtorno possível aos nosso clientes e usuários.&lt;br /&gt;&lt;br /&gt;Estes "erros" (condições anormais de uso) são registrados no sistema através de &lt;i&gt;loggers&lt;/i&gt;. Se você desenvolve software e não utiliza &lt;i&gt;logging&lt;/i&gt;, então o problema é mais embaixo. Imagino que o seu código simplesmente deixa o &lt;i&gt;stacktrace&lt;/i&gt;&amp;nbsp;das exceções "estourar" na cara do usuário. Perdoe-me, mas você não é &lt;b&gt;profissional&lt;/b&gt;. Você finge que programa, e o pior: há quem acredite.&lt;br /&gt;&lt;br /&gt;A mais popular implementação de &lt;i&gt;logging&lt;/i&gt;&amp;nbsp;em Java é o &lt;a href="http://logging.apache.org/log4j/1.2/" target="_blank"&gt;log4j&lt;/a&gt;. Normalmente além do &lt;i&gt;logging&lt;/i&gt;&amp;nbsp;para arquivo ou console do log4j, alguns desenvolvedores utilizando o SMTPAppender para enviar e-mails de notificação quando algum WARN é registrado na aplicação.&lt;br /&gt;&lt;br /&gt;Utilizar o &lt;a href="http://aws.amazon.com/sns/" target="_blank"&gt;SNS&lt;/a&gt;, serviço de notificações da Amazon, é uma alternativa mais eficiente do que enviar e-mails pois:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Permite o baixo acoplamento entre o emissor das notificações (o &lt;i&gt;logger&lt;/i&gt;) e seus assinantes (possivelmente os e-mails dos desenvolvedores e &lt;i&gt;devops&lt;/i&gt;).&lt;/li&gt;&lt;li&gt;Num ambiente com vários servidores rodando a mesma aplicação seria uma situação comum em caso de erro todas estas instâncias enviarem o mesmo e-mail, lotando a caixa de e-mail dos assinantes das notificações.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Pensando nisso resolvi criar uma biblioteca (enorme: 3 classes por enquanto) que permite utilizar o SNS como Appender do log4j:&amp;nbsp;&lt;a href="https://github.com/insula/log4j-sns"&gt;https://github.com/insula/log4j-sns&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Entre outras benesses está o fato dele implementar um "quiet period" padrão de 15 minutos, evitando que você receba mais de uma notificação com o mesmo &lt;i&gt;stacktrace&lt;/i&gt; dentro do intervalo de 15 minutos.&lt;br /&gt;&lt;br /&gt;Num ambiente de &lt;i&gt;cloud computing&lt;/i&gt; com múltiplas instâncias de uma mesma aplicação provavelmente você desejará implementar uma assinatura HTTP para lidar com notificações repetidas ao invés de ficar recebendo o mesmo e-mail de várias instâncias diferentes. Quem sabe não vale a pena criar um serviço e disponibilizá-lo online? Já vejo múltiplas situações em que isso seria útil.&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/844300987775528643-2917478731823278921?l=www.yanaga.com.br' alt='' /&gt;&lt;/div&gt;</description><link>http://www.yanaga.com.br/2012/02/notificacoes-do-log4j-atraves-do-amazon.html</link><author>noreply@blogger.com (Edson Yanaga)</author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-bNdzd-O9rJA/T0JQPynbPPI/AAAAAAAAAF8/ytYZv3D3urE/s72-c/logo.jpg' height='72' width='72'/><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-844300987775528643.post-1078673028967170036</guid><pubDate>Wed, 08 Feb 2012 23:49:00 +0000</pubDate><atom:updated>2012-02-08T23:05:24.394-02:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>Spring Security</category><category domain='http://www.blogger.com/atom/ns#'>Java</category><category domain='http://www.blogger.com/atom/ns#'>Janrain</category><category domain='http://www.blogger.com/atom/ns#'>OpenID</category><category domain='http://www.blogger.com/atom/ns#'>Spring</category><title>Utilizando o Janrain com o Spring Security 3.1.x</title><description>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-8bjuEvJ_IHE/TzL9OFDpLVI/AAAAAAAAAF0/0Htp8t130SY/s1600/janrain-engage-popup.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="235" src="http://3.bp.blogspot.com/-8bjuEvJ_IHE/TzL9OFDpLVI/AAAAAAAAAF0/0Htp8t130SY/s320/janrain-engage-popup.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Para quem ainda não conhece, o &lt;a href="http://openid.net/" target="_blank"&gt;OpenID&lt;/a&gt; é um protocolo que permite que você se autentique num site/serviço utilizando as credenciais (normalmente login/senha, mas também poderia ser um certificado digital, por exemplo) de um terceiro confiável.&lt;br /&gt;&lt;br /&gt;Esta iniciativa surgiu para tentar eliminar o problema de ter que guardar e lembrar de centenas (ou quase milhares para alguns) de combinações de login e senha diferentes. Assumo também que você, usuário consciente, &lt;b&gt;não utiliza o mesmo login/senha&lt;/b&gt;&amp;nbsp;para mais de um serviço. Pois caso positivo, se alguém descobrir a sua combinação - que presumo deva ser trivial - terá acesso a todos os sites e aplicações nos quais você está cadastrado.&lt;br /&gt;&lt;br /&gt;Com o OpenID você pode delegar a autenticação da sua aplicação para um provedor de OpenID como o Google, Facebook, Twitter etc. Assim você pode utilizar o sistema de autenticação destes provedores ao invés de criar um próprio.&lt;br /&gt;&lt;br /&gt;O &lt;a href="http://www.janrain.com/" target="_blank"&gt;Janrain&lt;/a&gt;&amp;nbsp;é um serviço que integra vários provedores diferentes de OpenID, permitindo que você desenvolva sua aplicação somente com o Janrain e passe a utilizar vários provedores de OpenID rapidamente.&lt;br /&gt;&lt;br /&gt;Para facilitar a vida de quem utiliza a excelente biblioteca de autenticação e autorização&amp;nbsp;&lt;a href="http://www.springsource.org/spring-security" target="_blank"&gt;spring-security&lt;/a&gt;, criei um projeto LGPL que integra o Janrain com o spring-security. De bônus, já vem com componentes JSF2 prontos para usar. Podem conferir em&amp;nbsp;&lt;a href="https://github.com/insula/spring-security-janrain" target="_blank"&gt;https://github.com/insula/spring-security-janrain&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/844300987775528643-1078673028967170036?l=www.yanaga.com.br' alt='' /&gt;&lt;/div&gt;</description><link>http://www.yanaga.com.br/2012/02/utilizando-o-janrain-com-o-spring.html</link><author>noreply@blogger.com (Edson Yanaga)</author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-8bjuEvJ_IHE/TzL9OFDpLVI/AAAAAAAAAF0/0Htp8t130SY/s72-c/janrain-engage-popup.png' height='72' width='72'/><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-844300987775528643.post-5188861234650133296</guid><pubDate>Wed, 01 Feb 2012 00:21:00 +0000</pubDate><atom:updated>2012-02-01T17:28:45.430-02:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>trombose</category><title>Continuo aqui. E extremamente feliz em estar vivo!</title><description>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-CEiQqxZYQ9A/TymSZ2sBTJI/AAAAAAAAAFk/QNpGgHLNr_8/s1600/trombose.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="256" src="http://1.bp.blogspot.com/-CEiQqxZYQ9A/TymSZ2sBTJI/AAAAAAAAAFk/QNpGgHLNr_8/s320/trombose.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Tudo começou com uma "torção" no joelho, há 16 dias - um domingo. Parecia algo mais sério, pois já havia torcido o joelho antes e a dor desta vez foi algo bem maior - comparável ao evento de quebra de tornozelo que tive. Gelo e anti-inflamatório. Agendei uma consulta com um ortopedista renomado em cirurgias do joelho pois desta vez acreditei que teria que opera-lo. A consulta ficou somente para a segunda-feira da próxima semana.&lt;br /&gt;&lt;br /&gt;Durante estes oito dias caminhei com muletas e minha panturrilha estava bastante inchada, e dolorida. A sensação de dor parecia com uma cãimbra bem forte; motivo pelo qual tomei muita água de coco e comi várias bananas. A dor passou e com isso concluí erroneamente que tratava-se de cãimbras mesmo.&lt;br /&gt;&lt;br /&gt;Já na segunda-feira da semana seguinte, fui ao ortopedista. Tirei um raio-x e nada de fratura. Como o joelho estava bastante dolorido, tive que fazer uma ressonância magnética. Citei as dores e o inchaço na panturrilha ao ortopedista, que prontamente respondeu que não era normal e que talvez devesse ir consultar-me com um angiologista (especialidade que trata do sistema vascular).&lt;br /&gt;&lt;br /&gt;Realizei o exame de ressonância magnética, e como o laudo ficaria pronto na quarta-feira, decidi que o esperaria para então decidir o que fazer. Com o laudo na mão, agendei o retorno no ortopedista, que ficou somente para a terça-feira da semana seguinte. Não houve tempo.&lt;br /&gt;&lt;br /&gt;No dia seguinte acordei com a panturrilha e o tornozelo bastante inchados. Tentei trabalhar (sentado), mas as dores tornaram-se insuportáveis. Chamei minha esposa, que vendo a situação, imediatamente tomou a atitude de levar-me à emergência do pronto-socorro. Antes disso resolvemos ligar para o ortopedista para tentar obter alguma orientação. Infelizmente ele estava indisponível, em cirurgia. Minha esposa explicou a situação à secretária, que ficou de dar um retorno. Nem cinco minutos depois, o ortopedista já ligava de volta.&lt;br /&gt;&lt;br /&gt;Ao explicar minha situação, o ortopedista solicitou que eu fosse com urgência a um angiologista. Como não conhecia nenhum, solicitei uma indicação. Ele me indicou uma clínica com vários angiologistas, e pediu para que eu demandasse uma consulta com urgência, e que informasse que seria a pedido dele. Fui prontamente atendido e percorremos o centro de Maringá numa quinta-feira chuvosa ao meio-dia (o que obviamente demorou mais do que gostaríamos) rumo à clínica.&lt;br /&gt;&lt;br /&gt;Chegando na clínica o angiologista me atendeu rapidamente e num exame clínico explicou que talvez não fosse uma trombose (a situação temida), mas mesmo assim solicitou um ecodoppler (ultrassom) de emergência.&lt;br /&gt;&lt;br /&gt;Mais uma jornada rumo à outra clínica. Fui rapidamente atendido para o exame. Inicio o exame e o médico radiologista em silêncio e de cara fechada. Finalizado o procedimento, pergunto se havia algo de estranho. É quando ouço a resposta: "Você está com uma trombose grave, vai levar este exame para o seu angiologista &lt;b&gt;agora&lt;/b&gt;&amp;nbsp;pois ele vai lhe internar no hospital com urgência."&lt;br /&gt;&lt;br /&gt;Estranhei a confirmação da trombose, pois sempre imaginei como doença de mulheres idosas, obesas, diabéticas etc. Enquanto minha esposa levava o exame ao angiologista e eu aguardava dentro do carro, pude procurar no Google através do meu iPhone sobre "trombose venosa profunda". Foi aí que percebi a minha situação: "Ih, f*d*u".&lt;br /&gt;&lt;br /&gt;Não sei quantas veias tem-se na perna, mas eu estava com quatro veias (das grandes, suponho) com trombos (coágulos) impedindo a passagem de sangue. Estava tudo coagulado da virilha até o tornozelo. Ou seja, situação gravíssima com risco de morte iminente. Pelo que o Google me alertou, a complicação era a possibilidade de uma embolia pulmonar a qualquer momento. Esta situação costuma ser fatal.&lt;br /&gt;&lt;br /&gt;Durante a rápida viagem da clínica até o hospital, minha esposa tentou "distrair-me" falando das sequelas que eu teria na perna graças à trombose. Mas eu já sabia do risco que estava correndo. E pensei (ironicamente): "Que bom, se eu sobreviver, minha perna vai ficar uma b*s*a". Contudo, um problema de cada vez. Primeiro resolvi pensar em viver pra contar a estória; o resto fica pra depois.&lt;br /&gt;&lt;br /&gt;Chegando no Hospital Paraná, havia uma lista de internação. Você sabe que o seu caso é grave quando você "fura" a fila e é internado antes de todo mundo. Maravilha...&lt;br /&gt;&lt;br /&gt;Mal entrei no quarto e já iniciou a rotina (durante os próximos seis dias) de medicações. Comprimidos, injeções na veia, exames de sangue e heparina sódica (uma injeção extremamente dolorida) ao redor do umbigo. Eu não tinha muita restrições quanto às injeções, mas essa injeção ao redor do umbigo mudou minha opinião...&lt;br /&gt;&lt;br /&gt;A boa notícia é que de um dia para o outro, graças à medicação, minha perna desinchou bastante. Quando dei entrada no hospital minha panturrilha estava da largura da coxa, e meu tornozelo estava da largura da panturrilha. Meus dedos estavam todos "unidos". Para critério de comparação: eu costumo calçar um Croc's bem larguinho para ficar confortável. Deve ter pelo menos 2cm de sobra. Meu pé estava tão inchado que não entrava no Croc's.&lt;br /&gt;&lt;br /&gt;A medicação leva de 4 a 5 dias para fazer o efeito. Durante este período meu risco de morte continuava alto, mas diminuía à medida em que o tempo passava. Meu médico mesmo relatou: você teve muita sorte. "A sorte te protegeu até agora". Eu provavelmente acredito que foi outra coisa. Mas não deixa de ser muita "sorte" o fato de não ter morrido.&lt;br /&gt;&lt;br /&gt;No 5.o dia de internação, quando já esperava ter alta, acordei meio "indisposto". Talvez culpa das bolachinhas amanteigadas que a namorada do meu irmão trouxe para me "alegrar". Mea culpa. Eu adoro doces, e depois de quase uma semana de abstinência eu acabei comendo praticamente a caixa inteira sozinho durante a noite. Relatei minha indisposição à enfermeira, o que bastou para ligarem o "alerta vermelho". Oxigênio e em menos de 5 minutos o médico já estava do meu lado fazendo perguntas e a enfermeira colhendo exames. Alarme falso. O exame mostrou que provavelmente era só uma indisposição estomacal. Nada de embolia.&lt;br /&gt;&lt;br /&gt;Fiquei sob "vigilância" dos médicos e enfermeiros durante todos estes dias. Mas sou muito agraciado por poder estar vivo ainda para poder relatar esta estória. Hoje, terça-feira, tive alta. Meu risco de morte já deve estar próximo de somente 1%. Estou bastante cansado, continuo tendo que tomar comprimidos e a injeção dolorida, tenho que usar uma meia cinta-liga de alta compressão, minha perna ainda dói e não posso ficar de pé ou andando por aí. Mas estou extremamente feliz! Um grande agradecimento a todos os amigos que ficaram preocupados. Já deixo também o alerta: se sentirem dores na panturrilha sem muita explicação e um certo inchaço, corram para o angiologista antes que seja tarde! Pra mim, quase foi tarde demais.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/844300987775528643-5188861234650133296?l=www.yanaga.com.br' alt='' /&gt;&lt;/div&gt;</description><link>http://www.yanaga.com.br/2012/01/continuo-aqui-e-extremamente-feliz-em.html</link><author>noreply@blogger.com (Edson Yanaga)</author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-CEiQqxZYQ9A/TymSZ2sBTJI/AAAAAAAAAFk/QNpGgHLNr_8/s72-c/trombose.jpg' height='72' width='72'/><thr:total>7</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-844300987775528643.post-5754877477523721012</guid><pubDate>Fri, 20 Jan 2012 02:06:00 +0000</pubDate><atom:updated>2012-01-24T22:50:58.364-02:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>Software Craftsmanship</category><category domain='http://www.blogger.com/atom/ns#'>Desenvolvimento Ágil</category><category domain='http://www.blogger.com/atom/ns#'>Artesanato de Software</category><title>Vídeo do Agile Tour 2011: Tirando o código a limpo</title><description>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;object class="BLOGGER-youtube-video" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" data-thumbnail-src="http://0.gvt0.com/vi/75st1pl3o_A/0.jpg" height="266" width="320"&gt;&lt;param name="movie" value="http://www.youtube.com/v/75st1pl3o_A&amp;fs=1&amp;source=uds" /&gt; &lt;param name="bgcolor" value="#FFFFFF" /&gt; &lt;embed width="320" height="266"  src="http://www.youtube.com/v/75st1pl3o_A&amp;fs=1&amp;source=uds" type="application/x-shockwave-flash"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Obrigado ao Juliano Ribeiro pela gravação, codificação e disponibilização no YouTube!&lt;br /&gt;&lt;br /&gt;Realmente acho que tenho que melhorar bastante como palestrante, mas tenham certeza de que a minha intenção sempre é a melhor possível.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/844300987775528643-5754877477523721012?l=www.yanaga.com.br' alt='' /&gt;&lt;/div&gt;</description><link>http://www.yanaga.com.br/2012/01/video-do-agile-tour-2011-tirando-o.html</link><author>noreply@blogger.com (Edson Yanaga)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-844300987775528643.post-1821621881163298328</guid><pubDate>Fri, 20 Jan 2012 01:45:00 +0000</pubDate><atom:updated>2012-04-21T17:10:57.035-03:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>Java</category><title>Como assinar uma applet ou jar</title><description>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-ZVx1PPzYweY/TxjFqQjKIUI/AAAAAAAAAFY/m49qr8PK4uc/s1600/beverage+jars.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-ZVx1PPzYweY/TxjFqQjKIUI/AAAAAAAAAFY/m49qr8PK4uc/s1600/beverage+jars.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Muitas vezes precisamos assinar o jar de uma applet para que o&amp;nbsp;&lt;i&gt;Security Manager&lt;/i&gt; da JVM permita a execução de determinadas ações fora da &lt;i&gt;sandbox&lt;/i&gt;. Não é nada difícil, mas pra quem precisa de uma "receita de bolo", apresento duas opções: utilizando a linha de comando ou através do maven.&lt;br /&gt;&lt;br /&gt;Através da linha de comando:&lt;br /&gt;&lt;div class="gistLoad" data-id="1595743" id="gist-1595743"&gt;Loading ....&lt;/div&gt;&lt;br /&gt;Através do maven, gere primeiro a sua &lt;i&gt;keystore&lt;/i&gt;&amp;nbsp;com o 1.o comando do gist acima no raiz do seu projeto. Depois pode executar o package normalmente:&lt;br /&gt;&lt;div class="gistLoad" data-id="1644440" id="gist-1644440"&gt;Loading ....&lt;/div&gt; &lt;script src="https://raw.github.com/yanaga/gist-Blogger/master/public/gistLoader.js" type="text/javascript"&gt;&lt;/script&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/844300987775528643-1821621881163298328?l=www.yanaga.com.br' alt='' /&gt;&lt;/div&gt;</description><link>http://www.yanaga.com.br/2012/01/como-assinar-uma-applet-ou-jar.html</link><author>noreply@blogger.com (Edson Yanaga)</author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-ZVx1PPzYweY/TxjFqQjKIUI/AAAAAAAAAFY/m49qr8PK4uc/s72-c/beverage+jars.jpg' height='72' width='72'/><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-844300987775528643.post-7320319610521753243</guid><pubDate>Sat, 14 Jan 2012 01:36:00 +0000</pubDate><atom:updated>2012-02-22T16:42:32.114-02:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>Educação</category><title>Nossa maltratada e querida Língua Portuguesa</title><description>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-fgSPH7OJV7Y/TxDVRPRHCWI/AAAAAAAAAFM/ZJVv3ul-LqE/s1600/pasquale_reforma.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="231" src="http://3.bp.blogspot.com/-fgSPH7OJV7Y/TxDVRPRHCWI/AAAAAAAAAFM/ZJVv3ul-LqE/s320/pasquale_reforma.JPG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Gostaria de refletir um pouco sobre um "sofrimento" que me atormenta todos os dias. Sou uma pessoa da área tecnológica, e o aprendizado que tive da nossa língua pátria, o português, resume-se ao conteúdo acumulado até o ensino médio. Creio que isto me coloca no mesmo patamar que boa parte das pessoas.&lt;br /&gt;&lt;br /&gt;O meu "tormento" é causado pela enorme (e infelizmente exponencialmente crescente) quantidade de material escrito de forma impressionantemente &lt;b&gt;errada&lt;/b&gt;. Isto me faz pensar se o problema está em mim, que primo pela forma correta e "sofro" quando vejo essa infinidade de erros de grafia e concordância; ou se o problema está nos "outros" que tiveram o mesmo nível de educação que eu, e &lt;b&gt;escrevem muito mal&lt;/b&gt;. Notem que quando digo "tiveram o mesmo nível de educação que eu" (que não é muito, como já apresentei) já excluo a parcela das pessoas com menor nível de instrução, já que não é razoável cobrar de alguém algo que não lhe foi ensinado.&lt;br /&gt;&lt;br /&gt;Já abro aqui uma exceção e digo que considero normal o "internetiquês" utilizado em rápidas conversas e interações. O que me preocupa não são os "vcs", "t+" e "tbm"; mas sim o restante das palavras.&lt;br /&gt;&lt;br /&gt;É um consenso que consideramos o nível de educação decrescente nos últimos anos. Mas vejo também pessoas mais velhas escrevendo errado (muitos professores, inclusive). A minha dúvida é: o aprendizado do português tem decaído nos últimos anos? Ou é a Internet que permite que esse enorme contingente de incultos se expresse de modo errado? Pois é possível que as pessoas escrevam realmente mal (desde sempre), mas como antes não era possível elas massificarem esta ignorância, simplesmente não se percebia.&lt;br /&gt;&lt;br /&gt;A expressão "nem escrever direito sabe, imagine o resto" tem validade? Escrever errado invalida o argumento de alguém? É necessário escrever corretamente? Ou a forma correta da nossa língua virou item de museu?&lt;br /&gt;&lt;br /&gt;Vale uma reflexão? Espero que sim...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/844300987775528643-7320319610521753243?l=www.yanaga.com.br' alt='' /&gt;&lt;/div&gt;</description><link>http://www.yanaga.com.br/2012/01/nossa-maltratada-e-querida-lingua.html</link><author>noreply@blogger.com (Edson Yanaga)</author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-fgSPH7OJV7Y/TxDVRPRHCWI/AAAAAAAAAFM/ZJVv3ul-LqE/s72-c/pasquale_reforma.JPG' height='72' width='72'/><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-844300987775528643.post-2625944679706677703</guid><pubDate>Tue, 03 Jan 2012 13:44:00 +0000</pubDate><atom:updated>2012-01-03T19:43:57.588-02:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>NOSQL</category><title>A hora e vez do NOSQL (Not Only SQL): Persistência Poliglota</title><description>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-Jx_PHDvvVws/TwMj8kjl5PI/AAAAAAAAAFE/4yguUaTlSAk/s1600/nosql.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="189" src="http://4.bp.blogspot.com/-Jx_PHDvvVws/TwMj8kjl5PI/AAAAAAAAAFE/4yguUaTlSAk/s320/nosql.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;A primeira vez que me deparei com o termo NoSQL imaginei que ele se referia a "No SQL": nada de SQL, uma ruptura com o nosso modo relacional de pensar em persistência. Como todo conceito revolucionário, causa muita resistência na maioria das pessoas por trazê-las fora da "zona de conforto".&lt;br /&gt;&lt;br /&gt;Uma releitura necessária sobre o assunto me trouxe o acrônimo NOSQL como "Not Only SQL": não somente SQL. Esta sim, uma definição muito mais palatável e apropriada sobre o assunto. O "Not Only" pressupõe a convivência (pacífica, espero) entre tecnologias consolidadas e a inovação. Chamo de inovação, mas vale enfatizar que estas soluções já encontram-se num nível bastante avançado de maturidade.&lt;br /&gt;&lt;br /&gt;NOSQL não é a solução para todos os problemas. Mas trouxe à luz da discussão uma máxima da computação que é "utilizar a ferramenta correta para o problema correto". Não consegui rastrear o autor original, mas esta citação é uma de minhas favoritas:&lt;br /&gt;&lt;blockquote class="tr_bq"&gt;&lt;i&gt;"A good algorithm is like a sharp knife - it does exactly what it is supposed to do with a minimum amount of applied effort. Using the wrong algorithm to solve a problem is trying to cut a steak with a screwdriver: you may eventually get a digestible result, but you will expend considerable more effort than necessary, and the result is unlikely to be aesthetically pleasing."&lt;/i&gt;&lt;/blockquote&gt;Ou numa tradução literal:&lt;br /&gt;&lt;blockquote class="tr_bq"&gt;&lt;i&gt;"Um bom algoritmo é como uma faca afiada - faz exatamente o que deve ser feito com uma quantidade mínima de esforço. Utilizar o algoritmo errado para resolver um problema é como tentar cortar um bife com uma chave de fenda: você eventualmente pode conseguir um resultado digerível, mas vai gastar muito mais esforço do que o necessário, e o resultado não será esteticamente agradável".&lt;/i&gt;&lt;/blockquote&gt;Como todo conceito "novo" muita coisa vai mudar antes de se consolidar, mas baseado na minha experiência no assunto, o que eu posso recomendar é:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Se os seus dados são homogêneos, com poucos relacionamentos entre entidades e numa grande quantidade: use um banco de dados. O modelo relacional foi feito pra isso.&lt;/li&gt;&lt;li&gt;Se os seus dados possuem muita variação entre um e outro (o que num banco de dados implicaria em muitas colunas vazias ou em muitos relacionamentos com outras tabelas): use uma base de documentos como o &lt;a href="http://www.mongodb.org/" target="_blank"&gt;MongoDB&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;Se os seus dados possuem muitos relacionamentos com outras entidades (com possível necessidade de geolocalização): use uma base de grafos como o &lt;a href="http://neo4j.org/" target="_blank"&gt;Neo4j&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;Se os seus dados são do tipo chave-valor (key-value) e você precisa computar grandes quantidades (voláteis) desses dados com alto desempenho: use uma base de dados chave-valor em memória como o &lt;a href="http://redis.io/" target="_blank"&gt;Redis&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;Se os seus dados são do tipo chave-valor (key-value) e você precisa persisti-los: use uma base de dados chave-valor persistente como o &lt;a href="http://wiki.basho.com/" target="_blank"&gt;Riak&lt;/a&gt;.&lt;/li&gt;&lt;/ul&gt;Farei uma menção honrosa para as situações em que você precisa de uma base de dados confiável, de altíssimo desempenho e transacional: use o &lt;a href="http://prevayler.org/" target="_blank"&gt;Prevayler&lt;/a&gt; ou o &lt;a href="http://code.google.com/p/disruptor/" target="_blank"&gt;Disruptor&lt;/a&gt; para prevalência de objetos.&lt;br /&gt;&lt;br /&gt;Vale ressaltar que a persistência poliglota pressupõe a coexistência destas diferentes bases de dados na mesma aplicação. Avalie e considere a utilização de mais de uma base de dados se for adequada ao seu problema. Mas não caia na tentação de "vou usar o XXX porque é bacana". É o mesmo pecado de se utilizar um Design Pattern só porque ele é "bonito". Tem que resolver um problema.&lt;br /&gt;&lt;br /&gt;Todo essa excitação ao redor do NOSQL também está relacionada, claro, ao conceito de &lt;a href="http://en.wikipedia.org/wiki/Big_data" target="_blank"&gt;BigData&lt;/a&gt;. Todas estas bases de dados alternativas foram construídas com a premissa de tratar imensos volumes de dados que bancos de dados relacionais não estão preparados para lidar.&lt;br /&gt;&lt;br /&gt;Avaliem todas estas novas alternativas e estejam preparados para, no problema certo, utilizarem a base de dados certa. Boa sorte!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/844300987775528643-2625944679706677703?l=www.yanaga.com.br' alt='' /&gt;&lt;/div&gt;</description><link>http://www.yanaga.com.br/2012/01/hora-e-vez-do-nosql-not-only-sql.html</link><author>noreply@blogger.com (Edson Yanaga)</author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-Jx_PHDvvVws/TwMj8kjl5PI/AAAAAAAAAFE/4yguUaTlSAk/s72-c/nosql.png' height='72' width='72'/><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-844300987775528643.post-7489609560767888020</guid><pubDate>Sat, 31 Dec 2011 20:42:00 +0000</pubDate><atom:updated>2012-01-03T19:44:58.088-02:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>Educação</category><title>O que o sistema de educação da Finlândia pode nos ensinar?</title><description>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-xQGcuOJ_Vjg/Tv-79-cLdaI/AAAAAAAAAE4/CIM4PERIZ3A/s1600/_47594607_-1.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="180" src="http://1.bp.blogspot.com/-xQGcuOJ_Vjg/Tv-79-cLdaI/AAAAAAAAAE4/CIM4PERIZ3A/s320/_47594607_-1.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Li esta semana um &lt;a href="http://www.theatlantic.com/national/archive/2011/12/what-americans-keep-ignoring-about-finlands-school-success/250564/" target="_blank"&gt;artigo&lt;/a&gt; no mínimo intrigante que tenta demonstrar as diferenças entre o sistema educacional americano e o sistema educacional finlandês. Vou listar alguns pontos pois vale a pena a reflexão:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;O sistema americano é baseado na "excelência", na competência; o finlandês, na equidade entre os indivíduos.&lt;/li&gt;&lt;li&gt;As melhores escolas americanas são particulares e pagas; todas as escolas finlandesas são públicas e gratuitas (da creche ao doutorado).&lt;/li&gt;&lt;li&gt;O sistema americano é falido, seus alunos obtém resultados no máximo medianos; os finlandeses estão há anos entre os melhores (senão o melhor).&lt;/li&gt;&lt;li&gt;Para os americanos, a competição entre as escolas torna-as melhores; para os finlandeses, o acesso e condições iguais a todos, independente de posição social, financeira ou geográfica, torna a educação melhor.&lt;/li&gt;&lt;/ul&gt;Todos os tópicos acima podem levar a conclusões diferentes, mas o item que mais me chama a atenção no texto é: &lt;b&gt;os professores e diretores finlandeses são bem pagos, respeitados, prestigiados e lhes são delegadas responsabilidades.&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Ultimamente vemos alunos que não podem ser reprovados, e a educação desmoronando no Brasil. Sinceramente creio que o fator que mais influencia o aprendizado dos alunos é a qualidade do professor. Coloque professores excelentes e bem preparados nas salas de aula, e teremos um salto na nossa qualidade de educação.&lt;br /&gt;&lt;br /&gt;Veja a decadência no ensino básico brasileiro nas últimas décadas. Não é culpa do feminismo, mas é uma consequência. Há 40, 50 anos, a única profissão que uma mulher inteligente e bem sucedida poderia exercer na sociedade machista era a de professora. Ou isso ou dona-de-casa. Resultado: aquelas eficazes na tentativa de sair do trabalho doméstico representavam em sua boa parte as melhores mentes femininas disponíveis. Professoras de qualidade. Graças a isso tínhamos alunos com um desempenho satisfatório.&lt;br /&gt;&lt;br /&gt;Comparemos com a situação atual. Sou professor também, mas perdoem-me os meus colegas atuais: ser professor costuma ser a última opção dos alunos que se formam nas faculdades. Aliás, eu garanto que os melhores alunos não se dedicam à docência. Há uma verdade escondida no rumor "não sabe fazer nada direito, vira professor". O resultado vemos nos jovens que formam-se por aí. E por que isto acontece? Muito trabalho, pouco dinheiro e nada de respeito.&lt;br /&gt;&lt;br /&gt;Uma revolução na educação passa pela valorização dos professores. Pensem nisso e ajam.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/844300987775528643-7489609560767888020?l=www.yanaga.com.br' alt='' /&gt;&lt;/div&gt;</description><link>http://www.yanaga.com.br/2011/12/o-que-o-sistema-de-educacao-da.html</link><author>noreply@blogger.com (Edson Yanaga)</author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-xQGcuOJ_Vjg/Tv-79-cLdaI/AAAAAAAAAE4/CIM4PERIZ3A/s72-c/_47594607_-1.jpg' height='72' width='72'/><thr:total>2</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-844300987775528643.post-2276555291067704672</guid><pubDate>Thu, 22 Dec 2011 20:04:00 +0000</pubDate><atom:updated>2011-12-22T18:09:08.875-02:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>Software Craftsmanship</category><category domain='http://www.blogger.com/atom/ns#'>Artesanato de Software</category><title>Software é artesanal, exige criatividade e precisa de tempo!</title><description>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;object class="BLOGGER-youtube-video" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" data-thumbnail-src="http://1.gvt0.com/vi/4019AN0nXVU/0.jpg" height="266" width="320"&gt;&lt;param name="movie" value="http://www.youtube.com/v/4019AN0nXVU&amp;fs=1&amp;source=uds" /&gt;     &lt;param name="bgcolor" value="#FFFFFF" /&gt;     &lt;embed width="500" height="440"  src="http://www.youtube.com/v/4019AN0nXVU&amp;fs=1&amp;source=uds" type="application/x-shockwave-flash"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;br /&gt;Já tiveram a impressão que todo software que você avalia sempre é mais do mesmo? Frequentemente recebo alguns e-mails divulgando empresas de software da região. Sempre levado pela curiosidade, tento descobrir qual é o segmento em que a empresa atua e como é o software por ela ofertado. Fico pasmo em constatar que são todos iguais. Você olha e imediatamente se decepciona.&lt;br /&gt;&lt;br /&gt;Software não é linha de produção. Software não é barraca de pastel, nem carrinho de cachorro-quente. Software exige criatividade. O vídeo acima demonstra de um modo absolutamente ilustrativo o que a pressão do tempo faz com a nossa capacidade criativa. Não me admira que todo software por aí seja igual. Todos são "produzidos" pelo mesmo "processo": cospe qualquer coisa aí que é pra ontem!&lt;br /&gt;&lt;br /&gt;Este é um dos argumentos pelos quais as "fábricas de software" são uma falácia. Uma mentira criada por uma indústria. Mas este é assunto para outro post.&lt;br /&gt;&lt;br /&gt;Quer um "oceano azul"? Quer um diferencial competitivo? Passemos a trabalhar mais com o cérebro do que com os músculos dos dedos. Comecemos por aí...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/844300987775528643-2276555291067704672?l=www.yanaga.com.br' alt='' /&gt;&lt;/div&gt;</description><link>http://www.yanaga.com.br/2011/12/software-e-artesanal-exige-criatividade.html</link><author>noreply@blogger.com (Edson Yanaga)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-844300987775528643.post-8045040110788612900</guid><pubDate>Wed, 21 Dec 2011 17:42:00 +0000</pubDate><atom:updated>2011-12-21T15:42:55.732-02:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>Software Craftsmanship</category><category domain='http://www.blogger.com/atom/ns#'>Desenvolvimento Ágil</category><category domain='http://www.blogger.com/atom/ns#'>Artesanato de Software</category><title>Software é muito mais que código</title><description>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-619JYuUqs_w/TvIZg4XyBYI/AAAAAAAAAEs/JnWK3ibX1Wc/s1600/iphone.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://1.bp.blogspot.com/-619JYuUqs_w/TvIZg4XyBYI/AAAAAAAAAEs/JnWK3ibX1Wc/s320/iphone.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Atualmente os clientes e usuários não julgam o software que produzimos baseados em sua &lt;b&gt;qualidade técnica&lt;/b&gt;. Realizar adequadamente atividades como levantamento de requisitos, escolha de ferramentas, codificação, gestão de projeto e obtenção de certificações são quesitos absolutamente indiferentes. Até porque na minha percepção isso é &lt;i&gt;commodity&lt;/i&gt;.&lt;br /&gt;&lt;br /&gt;Os clientes agora baseiam-se na &lt;b&gt;experiência de uso&lt;/b&gt;&amp;nbsp;que tinham antes, durante e depois de utilizar o nosso software. Devemos agradecer ou amaldiçoar a Apple pela experiência digital que ela trouxe às nossas vidas, e com ela, a tão comentada &lt;b&gt;consumerização&lt;/b&gt;. Fato é que estamos muitíssimo exigentes com o software e os equipamentos que utilizamos. A expressão correta é &lt;i&gt;"raising the bar"&lt;/i&gt;.&lt;br /&gt;&lt;br /&gt;Nós, programadores profissionais, devemos criar aplicações e prestar serviços que os clientes &lt;b&gt;amem&lt;/b&gt;. Bem o oposto daquilo que é feito por aí que os clientes &lt;b&gt;xingam&lt;/b&gt;. Para atender a este novo cenário temos que nos adequar e encarar que:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Software não é código; ele cria experiência de uso.&lt;/li&gt;&lt;li&gt;Equipes de desenvolvimento não são programadores; são criadores de experiências.&lt;/li&gt;&lt;li&gt;O talento técnico é o alicerce de tudo; mas grandes desenvolvedores devem ser experts em design e no negócio.&lt;/li&gt;&lt;li&gt;Processo não vale nada sem design; você só obtém pelo processo o que você concebeu, então é melhor fazer o design direito.&lt;/li&gt;&lt;li&gt;Software é uma jornada criativa, não um processo industrial como uma linha de produção. Sua metodologia deve maximizar o seu potencial criativo.&lt;/li&gt;&lt;/ol&gt;E eu não inventei nada disso. Quem percebeu esta realidade foi a &lt;a href="http://blogs.forrester.com/mike_gualtieri/11-12-19-five_axioms_for_application_development_in_2012" target="_blank"&gt;Forrester Research&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/844300987775528643-8045040110788612900?l=www.yanaga.com.br' alt='' /&gt;&lt;/div&gt;</description><link>http://www.yanaga.com.br/2011/12/software-e-muito-mais-que-codigo.html</link><author>noreply@blogger.com (Edson Yanaga)</author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-619JYuUqs_w/TvIZg4XyBYI/AAAAAAAAAEs/JnWK3ibX1Wc/s72-c/iphone.jpg' height='72' width='72'/><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-844300987775528643.post-6530559942301654675</guid><pubDate>Mon, 19 Dec 2011 16:30:00 +0000</pubDate><atom:updated>2011-12-19T14:31:11.726-02:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>Software Craftsmanship</category><category domain='http://www.blogger.com/atom/ns#'>Desenvolvimento Ágil</category><category domain='http://www.blogger.com/atom/ns#'>Artesanato de Software</category><title>Manifesto pelo Artesanato de Software</title><description>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-CDO7XV3EYWc/Tu8iGNtBHpI/AAAAAAAAAEk/4d8Dqu7D9nA/s1600/Manifesto+for+Software+Craftsmanship.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="283" src="http://1.bp.blogspot.com/-CDO7XV3EYWc/Tu8iGNtBHpI/AAAAAAAAAEk/4d8Dqu7D9nA/s320/Manifesto+for+Software+Craftsmanship.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;"Como aspirantes a Artesãos de Software elevamos o nível do desenvolvimento de software profissional ao praticar e auxiliar outros a aprender o ofício. Através deste trabalho passamos a valorizar:&lt;/i&gt;&lt;br /&gt;&lt;blockquote class="tr_bq"&gt;&lt;i&gt;Não somente software funcionando, mas também &lt;b&gt;software bem feito&lt;/b&gt;.&lt;br /&gt;Não somente responder a mudanças, mas também &lt;b&gt;continuamente adicionar valor&lt;/b&gt;.&lt;br /&gt;Não somente indivíduos e interações, mas também &lt;b&gt;uma comunidade de profissionais&lt;/b&gt;.&lt;br /&gt;Não somente colaboração com o cliente, mas também &lt;b&gt;parcerias produtivas&lt;/b&gt;.&lt;/i&gt;&lt;/blockquote&gt;&lt;i&gt;Ou seja, na busca pelos itens à esquerda descobrimos que os itens à direita são indispensáveis."&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;O manifesto original pode ser encontrado aqui: &lt;i&gt;&lt;a href="http://manifesto.softwarecraftsmanship.org/" target="_blank"&gt;Manifest for Software Craftsmanship&lt;/a&gt;&lt;/i&gt;.&lt;br /&gt;&lt;br /&gt;Não tenho palavras melhores para traduzir o meu sentimento e a minha motivação do que este manifesto. Depois de um período bastante desanimado, lembrei-me dele e me apeguei às suas ideias para renovar meu entusiasmo pela minha profissão: programador e consultor. Hoje sei que sou um defensor do &lt;b&gt;código bem feito&lt;/b&gt;.&lt;br /&gt;&lt;br /&gt;Vamos utilizar este manifesto para acabar com esta praga de "programadorezinhos" e "consultorezinhos" (sim, no diminutivo - pois são de uma pequenez tremenda) que se multiplicam por aí. &lt;b&gt;Todos podemos ser profissionais&lt;/b&gt;. Ou como já disse Napoleão Bonaparte:&lt;br /&gt;&lt;blockquote class="tr_bq"&gt;&lt;i&gt;"Onde há uma vontade, há um meio"&lt;/i&gt;.&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/844300987775528643-6530559942301654675?l=www.yanaga.com.br' alt='' /&gt;&lt;/div&gt;</description><link>http://www.yanaga.com.br/2011/12/manifesto-pelo-artesanato-de-software.html</link><author>noreply@blogger.com (Edson Yanaga)</author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-CDO7XV3EYWc/Tu8iGNtBHpI/AAAAAAAAAEk/4d8Dqu7D9nA/s72-c/Manifesto+for+Software+Craftsmanship.png' height='72' width='72'/><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-844300987775528643.post-2938928964019390113</guid><pubDate>Sat, 17 Dec 2011 19:06:00 +0000</pubDate><atom:updated>2011-12-19T09:35:13.954-02:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>Eclipse</category><category domain='http://www.blogger.com/atom/ns#'>m2e</category><category domain='http://www.blogger.com/atom/ns#'>QueryDSL</category><title>Configuração do QueryDSL no m2e do eclipse</title><description>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-b81O8zLcISk/Tu8hZKjGM9I/AAAAAAAAAEU/vQ5veELgfuI/s1600/querydsl.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="131" src="http://1.bp.blogspot.com/-b81O8zLcISk/Tu8hZKjGM9I/AAAAAAAAAEU/vQ5veELgfuI/s320/querydsl.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Esta dica é para os adeptos do &lt;a href="http://www.querydsl.com/" target="_blank"&gt;QueryDSL&lt;/a&gt;, uma ferramenta fantástica para a criação de &lt;i&gt;queries type-safe&lt;/i&gt; em Java para Hibernate, JPA, SQL, MongoDB etc.&lt;br /&gt;&lt;br /&gt;A configuração do QueryDSL no eclipse funcionava sem problemas com a utilização do plugin m2eclipse, que era a integração do eclipse com o maven. Entretanto, com a liberação do m2e, que a partir de agora é o plugin oficial do maven para o Eclipse, o QueryDSL deixou de funcionar apropriadamente. O erro em questão é que o "target/generated-sources/java" que o plugin do QueryDSL gera deixou de ser adicionado aos "Source Folders" do Eclipse.&lt;br /&gt;&lt;br /&gt;A solução é mais simples do que aparenta. Basta instalar este plugin que está disponível no github:&amp;nbsp;&lt;a href="https://github.com/ilx/m2e-querydsl"&gt;https://github.com/ilx/m2e-querydsl&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Ele configura o m2e para utilizar o QueryDSL corretamente.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/844300987775528643-2938928964019390113?l=www.yanaga.com.br' alt='' /&gt;&lt;/div&gt;</description><link>http://www.yanaga.com.br/2011/12/configuracao-do-querydsl-no-m2e-do.html</link><author>noreply@blogger.com (Edson Yanaga)</author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-b81O8zLcISk/Tu8hZKjGM9I/AAAAAAAAAEU/vQ5veELgfuI/s72-c/querydsl.png' height='72' width='72'/><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-844300987775528643.post-6432152438675183168</guid><pubDate>Sat, 17 Dec 2011 13:17:00 +0000</pubDate><atom:updated>2011-12-22T23:19:52.430-02:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>Scrum</category><category domain='http://www.blogger.com/atom/ns#'>Desenvolvimento Ágil</category><title>Eliminar o débito técnico é uma obrigação, não uma opção</title><description>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-x8UkjzNYvNY/Tu8gq67ytII/AAAAAAAAAEE/BMrCN8CNSro/s1600/carrying_debt.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="247" src="http://3.bp.blogspot.com/-x8UkjzNYvNY/Tu8gq67ytII/AAAAAAAAAEE/BMrCN8CNSro/s320/carrying_debt.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Durante a palestra do Klaus no &lt;a href="http://at2011.agiletour.org/en/Maringa.html" target="_blank"&gt;Agile Tour 2011 em Maringá/PR&lt;/a&gt;, houve uma pergunta sobre "O que fazer quando o 'chefe' não permite que você 'gaste' um tempo do sprint para fazer a limpeza do código?" Discutiu-se um pouco sobre o assunto no evento, mas o próprio Klaus acabou reconhecendo no final que a conclusão foi uma "não-resposta".&lt;br /&gt;&lt;br /&gt;Minha primeira reação à pergunta foi direta: minta. Ainda bem que não faço as coisas por impulso. Mentir quebraria um dos meus princípios fundamentais que é o da "verdade, doa a quem doer" e também o princípio prático do "mentir dá muito trabalho: dizer a verdade é infinitamente mais fácil". Desnecessário dizer que já angariei muita antipatia por causa destas atitudes, porém ninguém poderá jamais me acusar de ser falso.&lt;br /&gt;&lt;br /&gt;Fazer "limpeza do código", também conhecido como eliminar o débito técnico não é uma opção. É uma &lt;b&gt;obrigação&lt;/b&gt; de todo profissional. Não acredito que o "chefe" deve permitir que você faça ou não. Programadores &lt;b&gt;devem&lt;/b&gt; faze-lo, doa a quem doer. Lembram do juramento de Hipócrates? &lt;i&gt;"Não fazer o mal"&lt;/i&gt;. Um médico não permitiria que um paciente tomasse uma dose de remédio que pudesse mata-lo. &lt;b&gt;Programadores não permitem que o débito técnico aumente para não matar o software.&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Se você é um programador, você (e não o seu "chefe") sabe o que é o melhor para o código. &lt;b&gt;Use esse poder.&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Se o seu "chefe" é adepto do micro-gerenciamento, provavelmente ele deve ficar olhando o gráfico de &lt;i&gt;burn-down&lt;/i&gt; ou calculando a velocidade do sprint para medir a "produtividade" da equipe. O erro fundamental aqui trata-se da visibilidade dos números. Estimativas, velocidade e burn-down são informações &lt;b&gt;da equipe e para a equipe&lt;/b&gt;. O "chefe" não deve ficar sabendo destes números. Mas se o seu "chefe" insistir em ficar acompanhando isso e você precisa eliminar o débito técnico, há uma solução simples. No próximo &lt;i&gt;planning poker&lt;/i&gt;, dobre o número das cartas. Em cada tarefa, coloque o adicional de 100% para realizar a limpeza necessária. Você não estará mentindo, a velocidade não vai diminuir, o gráfico de &lt;i&gt;burn-down&lt;/i&gt; vai continuar bonitinho, o seu "chefe" vai continuar indiferente, e o mais importante, você ficará feliz e satisfeito e o seu código, limpo.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/844300987775528643-6432152438675183168?l=www.yanaga.com.br' alt='' /&gt;&lt;/div&gt;</description><link>http://www.yanaga.com.br/2011/12/eliminar-o-debito-tecnico-e-uma.html</link><author>noreply@blogger.com (Edson Yanaga)</author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-x8UkjzNYvNY/Tu8gq67ytII/AAAAAAAAAEE/BMrCN8CNSro/s72-c/carrying_debt.jpg' height='72' width='72'/><thr:total>2</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-844300987775528643.post-3295541076973300316</guid><pubDate>Wed, 14 Dec 2011 16:46:00 +0000</pubDate><atom:updated>2011-12-14T14:46:46.936-02:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>Desenvolvimento Ágil</category><title>Minha apresentação no Agile Tour 2011: Tirando o código a limpo</title><description>&lt;div id="__ss_10589868" style="width: 595px;"&gt;&lt;strong style="display: block; margin: 12px 0 4px;"&gt;&lt;a href="http://www.slideshare.net/yanaga/tirando-o-cdigo-a-limpo-10589868" target="_blank" title="Tirando o código a limpo"&gt;Tirando o código a limpo&lt;/a&gt;&lt;/strong&gt; &lt;iframe frameborder="0" height="497" marginheight="0" marginwidth="0" scrolling="no" src="http://www.slideshare.net/slideshow/embed_code/10589868?rel=0" width="595"&gt;&lt;/iframe&gt; &lt;br /&gt;&lt;div style="padding: 5px 0 12px;"&gt;View more &lt;a href="http://www.slideshare.net/" target="_blank"&gt;presentations&lt;/a&gt; from &lt;a href="http://www.slideshare.net/yanaga" target="_blank"&gt;Edson Yanaga&lt;/a&gt; &lt;/div&gt;&lt;/div&gt;O &lt;a href="http://at2011.agiletour.org/" target="_blank"&gt;Agile Tour&lt;/a&gt; provavelmente é a maior conferência sobre o tema "agilidade" em todas as suas edições no planeta. Aproveitando o sucesso, neste ano tivemos a primeira edição do &lt;a href="http://at2011.agiletour.org/en/Maringa.html" target="_blank"&gt;evento em Maringá&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Confesso que superou as minhas expectativas. O nível técnico do evento foi muito bom. O público era bastante interessado (e com muitos conhecidos na platéia). Fiquei meio triste com a comunidade de desenvolvedores de Maringá, pois esperava o auditório lotado. Tanta gente reclama que não temos bons eventos na cidade, mas quando temos, não comparecem. Mas eu também sei que a época do ano não foi propícia para grandes públicos. Quem estuda, estava preocupado com as provas. E mesmo quem só trabalha já estava em ritmo de fim de ano: torrando o 13.o salário.&lt;br /&gt;&lt;br /&gt;Parabéns ao Alexandre Nodari, Heitor Roriz, Objective (Ramon &amp;amp; CIA) e Klaus Wuestefeld pelas apresentações. Eu também tentei dar a minha humilde contribuição.&lt;br /&gt;&lt;br /&gt;Espero que alguém tenha ou possa tirar proveito do código de conduta que eu apresentei. Desculpem-me se me exaltei ou se alguém não gostou de alguns palavrões (mas eu pedi permissão antes). Quem me conhece sabe que eu não sou tão intransigente assim, mas acho que pra dar palestra e transmitir uma mensagem às vezes temos que incorporar alguns personagens.&lt;br /&gt;&lt;br /&gt;Mas e aí? Vocês podem se considerar programadores profissionais? Valendo o toba?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/844300987775528643-3295541076973300316?l=www.yanaga.com.br' alt='' /&gt;&lt;/div&gt;</description><link>http://www.yanaga.com.br/2011/12/minha-apresentacao-no-agile-tour-2011.html</link><author>noreply@blogger.com (Edson Yanaga)</author><thr:total>3</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-844300987775528643.post-4857305570234911927</guid><pubDate>Wed, 14 Dec 2011 14:00:00 +0000</pubDate><atom:updated>2011-12-16T17:08:18.669-02:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>Spring Integration</category><category domain='http://www.blogger.com/atom/ns#'>Java</category><category domain='http://www.blogger.com/atom/ns#'>JavaOne</category><title>Minha apresentação sobre Spring Integration 2.x no JavaOne Brasil 2011</title><description>&lt;div id="__ss_10589832" style="width: 595px;"&gt;&lt;strong style="display: block; margin: 12px 0 4px;"&gt;&lt;a href="http://www.slideshare.net/yanaga/architecting-cloudenabled-applications-using-springintegration-2x" target="_blank" title="Architecting cloud-enabled applications using Spring-Integration 2.x"&gt;Architecting cloud-enabled applications using Spring-Integration 2.x&lt;/a&gt;&lt;/strong&gt; &lt;iframe frameborder="0" height="497" marginheight="0" marginwidth="0" scrolling="no" src="http://www.slideshare.net/slideshow/embed_code/10589832?rel=0" width="595"&gt;&lt;/iframe&gt; &lt;br /&gt;&lt;div style="padding: 5px 0 12px;"&gt;View more &lt;a href="http://www.slideshare.net/" target="_blank"&gt;presentations&lt;/a&gt; from &lt;a href="http://www.slideshare.net/yanaga" target="_blank"&gt;Edson Yanaga&lt;/a&gt; &lt;/div&gt;&lt;/div&gt;Como já escrevi anteriormente, uma das minhas grandes ambições era conseguir apresentar uma sessão no JavaOne Brasil. Este ano consegui, e como prometido, posto agora finalmente os slides da minha apresentação no slideshare.&lt;br /&gt;&lt;br /&gt;Demorei mais do que deveria pois o slideshare simplesmente ficou mais de 24 horas processando o meu arquivo do Keynote. Passado esse tempo, ele me enviou uma mensagem dizendo que não foi possível completar a conversão, e que eu deveria fazer upload novamente. Converti do Keynote para PDF, e o processo foi finalizado em cerca de 2 minutos.&lt;br /&gt;&lt;br /&gt;Infelizmente sem as transições de "Magic Move" do Keynote a visualização das animações fica bastante prejudicada. Espero que seja o suficiente para entender o funcionamento. Pretendo postar alguns vídeos no YouTube para demonstrar melhor os Enterprise Integration Patterns (EIPs) e o Spring Integration 2.x. Fiquem de olho neste blog que teremos novidades no início do ano.&lt;br /&gt;&lt;br /&gt;O código-fonte do demo está disponível no github:&amp;nbsp;&lt;a href="https://github.com/yanaga/spring-integration-demo"&gt;https://github.com/yanaga/spring-integration-demo&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/844300987775528643-4857305570234911927?l=www.yanaga.com.br' alt='' /&gt;&lt;/div&gt;</description><link>http://www.yanaga.com.br/2011/12/minha-apresentacao-sobre-spring.html</link><author>noreply@blogger.com (Edson Yanaga)</author><thr:total>0</thr:total></item></channel></rss>
