semana_groovy

Semana Groovy 18!

Esta foi uma semana bem sem graça para os desenvolvedores Groovy e Grails: sem muitas novidades, mas talvez seja apenas minha impressão pelo fato de estar preparando algumas coisas que pretendo lançar no próximo mês (vocês gostarão) e não ter navegado tanto assim pela Internet e redes sociais. :)

Posts

Groovy e Java – Instanciações e chamada de método dinâmicamente: Leonardo Silva posta em seu blog um experimento de desempenho envolvendo reflexão em Groovy e Java. Um material bem interessante para quem se interessa pelo assunto: http://leonardosilva.eti.br/groovy-e-java-performance-instanciacoes-e-chamada-de-metodo-dinamicamente/

Groovy recebe o prêmio “Geeks Choice Award” na Java One – Este é o post no qual Guillaume LaForge fala sobre sua viagem, o prêmio e também expõe os slides de suas apresentações. http://glaforge.appspot.com/article/back-from-javaone

Uma JSR só para desenvolvimento de aplicações desktop? – Esta é a proposta de Andres Almiray (criador do Griffon) e sou completamente a favor! – http://www.jroller.com/aalmiray/entry/it_s_time_for_a

Um commit simbólico: diga adeus ao antigo sistema de build do Grails! – Uma das novidades do Grails 3.0 será a adoção do Gradle como sistema de build e não mais o bom e velho Gant. – https://github.com/grails/grails-core/commit/02cc333a38a8ee854a82d9cbfb1f03469ed621d4

DevDay 2014 – Estarei falando sobre Groovy e Grails!

Este ano resolvi que voltarei a participar de eventos e, como fui convidado para palestrar no DevDay aqui em Belo Horizonte, por que não juntar a fome com a vontade de comer? O evento ocorrerá no dia primeiro de novembro e irei palestrar sobre nosso assunto favorito. Se você for de Belo Horizonte, será uma excelente oportunidade para nos conhecermos pessoalmente! – http://devday.devisland.com/

Groovy Brasil Meetup!

Já contamos com 30 membros no Groovy Brasil Meetup, mas para que eventos possam ocorrer, precisamos de mais gente! Caso queira conhecer outras pessoas que trabalhem com Groovy e Grails pessoalmente, esta é uma excelente oportunidade. Basta que se registre no site do meetup! – http://www.meetup.com/groovybr/

Lançamentos

Spring Boot 1.1.8 – basicamente apenas alguns bug fixes – http://spring.io/blog/2014/10/11/spring-boot-1-1-8-released

Spring Boot 1.2.0 M2 – um release bem mais interessante para quem está acompanhando este framework. http://spring.io/blog/2014/10/11/spring-boot-1-2-0-m2-available-now

Posts clássicos

Na seção posts clássicos desta semana não vou incluir algo sobre história da computação, algoritmos ou similar, mas sim um livro excelente e gratuito que li nesta semana: “Don’t Just Roll the Dice”, de Neil Davidson. Trata de um assunto fundamental para todos nós que trabalhamos com desenvolvimento: quanto seu produto deve custar? Excelentes dicas e uma leitura muito agradável! – http://download.red-gate.com/ebooks/DJRTD_eBook.pdf

Assine nossa newsletter!

Quer receber esta newsletter por e-mail no momento em que for publicada? Basta se inscrever preenchendo este formulário!

semana_groovy

Semana Groovy 17!

Esta foi uma semana bastante atípica para mim, razão pela qual não deu para postar tantos links quanto gostaria em nossa newsletter. Isto pode ocorrer periódicamente, sendo assim, peço a ajuda de vocês para manter sempre rica esta nossa publicação semanal.

Se você escreveu algo sobre Groovy, Grails, Spring, Java ou qualquer outro tópico sobre computação que ache interessante e gostaria de compartilhar aqui, faça como o Michael Schuenck e me mande o link para que seja divulgado aqui!

Posts

Por que usamos Grails (e Groovy) – Um excelente post de Michael Schuenck no qual explica as razões que fizeram sua equipe adotar Groovy e Grails no TRE-TO – http://michaelss.org/post/98223714497/por-que-adotamos-grails-e-groovy

Why I recomend Spring – um webinar muito interessante no qual Michael Plod expõe as razões pelas quais recomenda o Spring para seus clientes. Excelentes respostas para a pergunta: “por que Spring?” – http://spring.io/blog/2014/09/26/webinar-replay-why-i-recommend-spring

Dica bacana: como exportar as mensagens dos arquivos de interancionalização do Grails para JavaScript. – http://razum.si/blog/grails-javascript-i18n-messages

Lançamentos

Spring Framework 4.1.1 – http://spring.io/blog/2014/10/01/spring-framework-4-1-1-released

Spring XD 1.0.1 – http://spring.io/blog/2014/10/02/spring-xd-1-0-1-released

Uma iniciativa muito bacana: Clube dos Posts

Tomei conhecimento de uma iniciativa excelente chamada “Clube dos Posts”. Trata-se de um incentivo para que a nossa comunidade publique mais posts em seus blogs e com isto mais conhecimento seja compartilhado.

Seguindo o clube pelo Twitter você lerá muitos posts interessantes escritos pela comunidade. É algo que realmente vale à pena seguir no Twitter: https://twitter.com/ClubeDosPosts

Comunidade poderosa: Pangea!

O post de hoje é para aqueles que se interessam por arquitetura de software e é 100% nacional. Trata-se da comunidade Pangea: feita e mantida por arquitetos, para arquitetos. É muito difícil navegar por seus tópicos sem aprender alguma coisa.

Sou um dos membros, e adoraria ter vocês como contatos nela: http://pangeanet.org/

Posts clássicos – Um “pouco mais” de arquitetura

Que tal não um bom livro sobre arquitetura de software gratuito, mas três, e dos bons? É o que você encontrará no site “The Architecture of Open Source Applications”. Há três volumes que você pode ler online no site: os volumes 1 e 2 que seguem o nome do site e um terceiro, incluído recentemente, chamado “The Performance of Open Source Applications”. É fascinante conhecer a arquitetura de projetos super famosos como Nginx, Eclipse, Sendmail e tantos outros.

Nota importante: os autores vendem versões em PDF e ePub dos livros, mas você pode lê-los no formato HTML sem qualquer restrição. http://aosabook.org/en/index.html

Assine nossa newsletter!

Quer receber esta newsletter por e-mail no momento em que for publicada? Basta se inscrever preenchendo este formulário!

 

 

semana_groovy

Semana Groovy 16!

Uma semana do novo Grails Brasil

Uma semana bem densa para o Grails Brasil. Nova versão lançada, e diversas correções feitas e outras a caminho. Peço novamente a ajuda de vocês a respeito do que podemos melhorar em nossa comunidade. O foco do desenvolvimento até o dia 15/10/2014 será apenas em layout e usabilidade. A partir daí virão uma série de novidades que, acredito, irão agradar todos vocês. ;)

Seu feedback é importantíssimo! Criei um formulário para que você nos forneça suas opiniões (especialmente críticas). Basta preenchê-lo aqui: https://docs.google.com/forms/d/1Ci-AApxKKDeeYwFQhoi4v3KGhd6Jrnv0CMinK3naWUU/viewform?usp=send_form

Posts

Exploring Micro-frameworks: Spring Boot – estou terminando um artigo para a Java Magazine sobre Spring Boot. E na minha pesquisa encontrei um excelente artigo no site InfoQ que explica muito bem os conceitos por trás desta poderosa ferramenta. Leitura obrigatória para todos aqueles que estão interessados pelo assunto. – http://www.infoq.com/articles/microframeworks1-spring-boot

What’s new in Spock 1.0 – Um post bem interessante sobre as novidades que nos esperam no Spock 1.0. Ainda hoje a maior parte dos desenvolvedores Grails ainda não conhece este framework: seu conhecimento é fundamental se você trabalha com alguma versão posterior à 2.2, que o tornou a opção oficial para escrita de testes. – http://solidsoft.wordpress.com/2014/09/17/whats-new-in-upcoming-spock-1-0-simpler-conditional-test-execution-with-requires-and-ignoreif/

Minha experiência com MongoDB: erros, acertos e dicas – Muitos desenvolvedores Grails estão pensando em usar MongoDB em seus projetos. Neste post relato minha experiência com este SGBD, com foco nos erros que cometi e vi sendo cometidos. Também falo por alto sobre uma alternativa muito interessante ao MongoDB, o TokuMX que, na minha opinião, é o MongoDB como deveria ter sido desde o primeiro release. – http://www.itexto.net/devkico/?p=1983

Casos de sucesso

Esta semana apareceu mais um caso de sucesso no Grails Brasil: o 4minds. A projeto é uma ferramenta de gestão de conhecimento adotada pela empresa Mobile Mind Tecnologia. Vale muito à pena conferir este uso interessante do Grails – http://grailsbrasil.com.br/caso/show/35

A propósito, há uma mudança sutil no Grails Brasil agora. Todos os casos de sucesso estou cadastrando também como notícias, aumentando assim sua visibilidade.

Discussão: Grails precisa de hype?

Grails needs a revolution for adoption by the younger dev community – Na lista de discussão de desenvolvedores Grails surgiu esta interessante discussão na qual seu proponente diz que basicamente devemos alimentar o hype para aumentar o público do framework entre os desenvolvedores iniciantes. Como podem ver, minha discussão é a contrária nesta discussão. Vale muito à pena conferir, pois foram freitas críticas ao framework que considero extremamente relevantes. – https://groups.google.com/forum/#!topic/grails-dev-discuss/u5gvuwWXoTk

Livro gratuito sobre Gradle!

Encontrei um livro muito interessante sobre Gradle. Se chama “Building and Testing with Gradle”, e você pode obter acesso gratuito à versão em HTML no site da Gradleware. Basta que preencha o formulário presente neste link: http://www.gradleware.com/registered-access?content=books%2Fbuilding-and-testing%2F

Lançamentos

Groovy 2.3.7 – http://jira.codehaus.org/secure/ReleaseNote.jspa?projectId=10242&version=20543

Spring Boot 1.1.7 – http://spring.io/blog/2014/09/26/spring-boot-1-1-7-released

Posts clássicos: um pouco de Clojure e Lisp

Que tal experimentar outras linguagens da JVM. Dentre estas, uma das mais interessantes sem sombra de dúvida é o Clojure. A Object Computing tem um excelente livro sobre o assunto que você pode acessar gratuitamente neste link: http://java.ociweb.com/mark/clojure/article.html

Clojure é um dialeto de Lisp, que na minha opinião é um dos grandes feitos da história da Ciência da Computação. Quem escreve excelentes artigos sobre o assunto é o Paul Graham. Você pode acessá-los neste link: http://www.paulgraham.com/lisp.html

Dica: estes artigos do Paul Graham valem cada letra!

Assine nossa newsletter!

Quer receber esta newsletter por e-mail no momento em que for publicada? Basta se inscrever preenchendo este formulário!

Link para baixar o PDF

Minha experiência com MongoDB: erros, acertos e dicas

Um ano e meio atrás embarquei em um projeto que antes da minha entrada já havia adotado o MongoDB. Meu objetivo neste post é relatar alguns dos nossos erros e acertos.

O que deu certo

Não tivemos os problemas que lemos por aí como locks em bases de dados e o desempenho que obtivemos foi excelente. Montar um cluster com replicação de dados do tipo replica-set se mostrou um procedimento super tranquilo, assim como a configuração de sharding.

Se você tem estruturas de dados cujos atributos podem variar bastante de um elemento para outro em uma mesma coleção e não liga para redundância de informações, MongoDB se mostra uma solução muito interessante. Ele funciona.

Já sabia algum tempo atrás de algumas das suas limitações. É importante lembrar que limitação divulgada pelo fabricante não é defeito, mas sim característica. Uma limitação que surge “acidentalmente”, esta sim é um defeito. Aliás, na época cheguei a escrever sobre isto, alguns de vocês devem se lembrar. Aqueles pontos que falei em outubro de 2013 ainda se mantém (inclusive a versão em inglês deste site foi parar no Hacker News graças a este post).

Sobre desempenho a crítica que faço é sempre a mesma: benchmarks de internet não são válidos até que você tenha experiência no seu projeto. No nosso caso o que deu certo ocorreu por que satisfez dois requisitos.

  • As estruturas de dados tinham atributos que realmente variavam bastante. Algo com atributos fixos não seria adequado. Além disto documentos embarcados eram uma alternativa interessante: redundância de dados não era um problema.
  • Precisávamos de algo cujo tempo de escrita fosse o menor possível e sabíamos exatamente como estas estruturas deveriam se comportar.

Aonde estes dois requisitos se aplicavam, obtivemos sucesso.

E onde deu errado

Sabe estes dois requisitos que citei acima? São aonde vejo MongoDB funcionar perfeitamente até hoje nos projetos que passei. O principal problema foi causado por aquilo que mais temo: inércia mental.

Há aqueles momentos em que as pessoas estão tão habituadas com o modelo relacional que simplesmente não conseguem aceitar alguns fatos fundamentais sobre o MongoDB:

  • Ele não foi feito para lidar com relacionamentos entre diferentes documentos. Documentos embarcados funcionam bem, mas quando você vai lidar com documentos em outras coleções, ou mesmo na mesma, o máximo que você tem é um quebra galho.
  • MongoDB não foi feito para ter integridade referencial.
  • Se os atributos da sua estrutura de dados são fixos e previsíveis, o registro é a melhor opção, não o documento.
  • MongoDB não é uma base de dados relacional
  • Não há uma implementação nativa de transações ACID entre documentos e nem era objetivo dos projetistas deste SGBD fazer isto.

Se seu sistema exige relacionamentos e integridade referencial  por que não usar uma base relacional? Quer fazer bonito pra algum idiota? Use persistência poliglota! MongoDB e seu SGBD relacional favorito, cada um em seu galho. Por que não tirar o melhor dos dois mundos?

(implementar integridade referencial manualmente é muito triste)

Dicas

A seguir estão algumas dicas que ajudam bastante na adoção do MongoDB. Claro que há inúmeras outras, mas estas são as que considero mais importantes.

Use alguma biblioteca/framework de mapeamento

Uma boa opção é o Spring Data para MongoDB. O modo como lida com o mapeamento de relacionamento entre documentos é muito simples e próximo daquele que estamos acostumados a trabalhar com JPA.

(reparem na frase: “que estamos acostumados a trabalhar com JPA”. É a tentativa inconsciente de aproximar o MongoDB do modelo relacional! (ainda escrevo mais sobre isto no futuro))

Mas já lhe digo que o Spring Data para MongoDB não é perfeito: longe disto. Há bugs e limitações, mas o lado positivo é que se você abrir uma issue para a equipe de desenvolvimento do projeto e esta  for bem descrita (dica: envie código reproduzindo o problema), eles resolverão rapidamente o problema. Quase todas as issues que abri foram atendidas em no máximo duas semanas, algumas na mesma semana de abertura.

Há outras alternativas também, como o Morphia, que funcionam muito bem, mas como nosso projeto era baseado em Spring, era mais interessante usar algo pertencente ao mesmo stack.

(ao que tudo indica o desenvolvimento do Spring Data está bem mais ativo também)

Conheça BEM o driver Java (ou da sua linguagem) do MongoDB

Estes frameworks de mapeamento quebram um bom galho mas há um preço: muitas vezes são lentos. Em aplicações que precisem de alto desempenho você irá observar que seu gargalo não estará no MongoDB, mas sim no código Java presente nestas bibliotecas.

Sendo assim, conhecendo bem o driver Java do MongoDB irá lhe ajudar horrores na hora em que precisar lidar com estes gargalos. Se seu sistema for basicamente CRUD, aí sim você pode ficar apenas com as bibliotecas.

Outro ponto fundamental é que pelo driver Java você consegue fazer praticamente qualquer coisa no MongoDB. Muitas vezes há um ou outro recurso que não está presente ainda na sua API de mapeamento favorita.

Precisa de transacionalidade entre documentos com MongoDB?

Se respondeu a sim esta pergunta e não quer usar uma base relacional, sua vida acaba de ficar  difícil, mas não impossível. MongoDB oferece atomicidade em operações sobre um único documento, mas não entre documentos. Sempre tenha isto em mente.

Você pode implementar manualmente transacionalidade entre documentos, mas esta será bem limitada. No site do MongoDB há um tutorial que você pode consultar. O problema é que isto dá muito trabalho.

Vou falar sobre uma solução melhor para este problema mais a frente.

Não pensou no espaço que estes bancos de dados ocupam?

Yeap, eu já havia falado sobre isto antes. As bases de dados do MongoDB podem crescer bastante se você não ficar atento. Leve isto em consideração se não quiser levar um susto com o custo do seu storage. É sempre bom fazer algumas simulações do ambiente de produção antes de adotar o MongoDB: irá lhe poupar muito tempo, dinheiro e saúde.

Lembra aquela solução que havia prometido? Ei-la!

Considere seriamente a adoção do TokuMX ao invés do MongoDB

tokutek

Sabia que o MongoDB tem um irmão gêmeo bem mais charmoso? Trata-se de uma distribuição alternativa chamada TokuMX: também é open source e é desenvolvido por uma empresa chamada TokuTek.

Bom: o que ele tem de bom?

  • Resolve seu problema de espaço de armazenamento: uma de nossas bases no MongoDB ocupa 400Mb. No TokuMX? 15Mb.
  • TokuMX implementa transação ACID entre documentos. Sim, você leu certo, e ela funciona MUITO bem.
  • Apresenta desempenho bastante superior

E o melhor: 100% compatível. Se você trocar sua instalação MongoDB pelo TokuMX sua aplicação não notará diferença alguma além da melhoria de desempenho. Até este momento só vi dois poréns com o TokuMX:

  • Ainda não há uma distribuição para Windows.
  • Infelizmente as bibliotecas atuais não oferecem suporte nativo à implementação ACID do MongoDB: você terá de usar o driver nativo para obter este resultado. Existe uma issue no projeto Spring Data pedindo este suporte, mas não é prioritária ainda (mesmo eu pedindo :) ).

Treine BEM a sua equipe

Este é um ponto fundamental: você precisa expor para os membros do seu time o modo como devemos pensar a persistência fora do modelo relacional. É a única cura que conheço para o problema da inércia mental.

Conclusões

Estas foram minhas experiências com o MongoDB. Quanto mais cedo você detectar estas dificuldades que mencionei, melhor. Espero com este post ter dado minha contribuição. Devo confessar que até hoje a maior parte das reclamações que vejo sobre o MongoDB não são culpas da ferramenta, mas sim do seu mal uso.

E, pra finalizar MESMO: experimentem o TokuMX, é um produto muito superior e vai te poupar muito tempo. :)

semana_groovy

Semana Groovy 15!

Grails Brasil 3.0 online!

No dia 19/9/2014 foi feita a primeira implantação da versão 3.0 do Grails Brasil. O foco deste novo release foi no visual e na responsividade do site, que agora está bem mais amigável.

Precisamos da sua ajuda nos fornecendo seu feedback a respeito. Maiores detalhes a respeito podem ser encontrados no blog /dev/Kico – http://www.itexto.net/devkico/?p=1981

E a coisa não parou ali: no dia 19 foi o release 3.0.0: hoje, dia 21, já estamos no release 3.0.3. Por que tantos releases neste curto espaço de tempo? Graças ao feedback da comunidade que foi extremamente rápido e muito, muito importante. Sendo assim, agradeço a todos aqueles que cooperaram (por e-mail, Google Talk, Skype, Facebook e tantos outros meios) e peço novamente para que me forneçam o máximo de feedback possível, ok?

Posts interessantes

Controle Transacional Declarativo com Spring: AOP ou @Transactional – EXCELENTE post no blog da Triad Works explicando as diferenças, vantagens e desvantagens entre os dois diferentes modos de se configurar transações com Spring: por XML ou anotações (leitura obrigatória) –  http://blog.triadworks.com.br/controle-transacional-declarativo-com-spring-aop-ou-transactional

Grails + sass + jade + handlebars + coffe – Ricardo Bocchi nos mostra como configurou seu projeto usando gulp para trabalhar com as tecnologias que dão nome ao post. Interessante, não conhecia o gulp, entrou pra minha lista de coisas a serem estudadas – http://ricardobocchi.blogspot.com.br/2014/09/grails-sass-jade-handlebars-coffe.html

Preview do Grails 3.0 – Os slides da apresentação do Grame Rocher sobre o que podemos esperar do Grails 3.0. É bastante animador! – https://speakerdeck.com/graemerocher/grails-3-preview

Apareceu uma solução bastante interessante sobre como lidar com datas em Grails no Grails Brasil – http://grailsbrasil.com.br/post/show/2774

Groovy Weekly #36 – Adivinhem quem aparece nela? :) – http://glaforge.appspot.com/article/groovy-weekly-36

Preview Spring Security Websocket & Sessions – Um post legal no site da Pivotal sobre como será o suporte a websockets a ser incluído no projeto Spring Security – http://spring.io/blog/2014/09/16/preview-spring-security-websocket-support-sessions

Apresentações

Curso de Grails, Aula 4, Configurando o projeto Grails para conexão com o MySQL – Leandro Guarino dá continuidade ao seu curso ensinando como configurar o acesso ao MySQL. – https://www.youtube.com/watch?v=vYACT_sxT-4&feature=youtu.be

Getting Started with Ratpack – Ratpack é um framewok no qual estou prestando bastante atenção e, na minha opinião, você também deveria. – https://www.youtube.com/watch?v=g0fX5yA-Xzg&feature=youtu.be

Posts clássicos (ouro!)

Descobri nesta semana um projeto no GitHub cujo objetivo é catalogar livros de programação que você pode ler e baixar gratuitamente de forma 100% legal, sem pirataria! Há livros sobre uma infinidade de linguagens: já teve curiosidade a respeito de linguagens exóticas ou pouco faladas como Forth ou Ada? E não se restringe a apenas livros sobre linguagens de programação: há também conteúdo sobre agilidade, arquitetura, carreira e muito, muito mais!

Aqui está o mapa da mina: https://github.com/vhf/free-programming-books/blob/master/free-programming-books.md

(claro: há livros também sobre Groovy, Grails, Spring e muito Java!)

E a coisa pode melhorar: o link acima contém apenas livros em inglês. Há também uma versão do projeto só com material em português!

https://github.com/vhf/free-programming-books/blob/master/free-programming-books-pt_BR.md

Assine nossa newsletter!

Quer receber esta newsletter por e-mail no momento em que for publicada? Basta se inscrever preenchendo este formulário!

Grails Brasil 2.0

Grails Brasil ganha novo visual! (versão 3.0!)

Hoje é um dia muito importante para o Grails Brasil: foi feita a implantação do primeiro release da versão 3.0 do site. O foco foi no novo layout que, acredito, está BEM melhor agora.

Como vocês vão reparar, alguns links não estão mais sendo expostos no menu principal: “vagas de trabalho” e “links”. Por que isto? A razão é simples: estou reformulando completamente esta parte do site, que vai ser ordens de magnitude melhor!

Como você pode nos ajudar

Com certeza há alguns bugs nesta nova versão. Caso encontre algum, por favor, me informem para que eu os vá corrigindo o mais rápido possível, ok? Ainda mais importante, preciso do seu feedback: diga-me tudo aquilo que você gosta e especialmente o que não gosta. Este feedback é fundamental para mim.

Enquanto isto, espero que goste do novo visual do Grails Brasil. :)

O link? http://www.grailsbrasil.com.br