Aprenda mais sobre AWS no AWSHUB

Não é a primeira vez que falamos de AWS aqui neste blog. Portanto que fica claro que utilizamos este serviço de nuvem para hospedagem de uma série aplicativos.

Sendo a provedor que dispõe de uma gama enorme de serviços, denota que seus usuários precisam entender a fundo a motivação e as indicações de cada um deles.

Existe muita documentação disponível já nos meios oficiais da própria amazon, mas é sempre bom ter uma comunidade de apoio para que consigamos tirar dúvidas e claro, ter o aconselhamento de experts e demais usuários que já enfrentaram problemas parecidos com os nossos.

É para suprir este objeto dentro da comunidade brasileira que existe o AWSHUB.

O AWSHUB é um portal de informações sobre Amazon Web Services voltado para a comunidade brasileira.

Nele podemos encontrar mais documentação, tutoriais, videos e webinars e um fórum cheio de gente competente e disposta a ajudar a resolver nossos problemas. Tem ainda um programa de reconhecimento sob exame que permite que você teste seus conhecimentos sobre AWS nas diversas áreas a que ela se propõe.

Se você tem interesse sobre o assunto, não deixe de participar.

Até mais

Anúncios

Memória e garbage collection na JVM

Conhecer a fundo as ferramentas que utilizamos no dia a dia, é a melhor maneira de se fazer uso adequado e tomar as decisões corretas quando temos um desafio pela frente.

É neste intuito que Eduardo Bohrer apresenta neste vídeo, como é organizada a estrutura de memória de uma máquina virtual java (JVM). Mais adiante comenta também sobre algoritmos de coleta de lixo (GC) e como isso funciona dentro da JVM.

Link para os slides apresentados: http://www.slideshare.net/nbluis/memria-e-garbage-collection-na-jvm

NoSQL e AWS DynamoDB

NoSQL tem sido um dos assuntos mais badalados ultimamente no meio de arquitetura de software. Existem discussões calorosas dos novos apaixonados em contraponto aos que acreditam que o uso desse tipo de abordagem se limita a casos extremos, e que estes não estão presentes na maioria dos cenários do dia-a-dia.

Independente de minha opinião sobre isso, acima de tudo, acredito que devemos conhecer as características deste tipo de estratégia e claro, entender o que cada uma destas ferramentas pode nos oferecer. Afim de tomar boas decisões no que diz respeito a melhor solução para cada situação.

Entendendo isso, e com objetivo de propor soluções para alguns dos desafios que temos na uMov.me, fiz um estudo sobre o DynamoDB, o banco de dados NoSQL disposto como serviço pela Amazon Web Services.

Vou deixar parte deste estudo aqui registrado para quem tiver interesse.

Este é o um projeto de exemplos que construí, consumindo o DynamoDB utilizando sua API Java.

Abaixo os slides que apresentei para o time uMov.me durante uma de nossas sessões de aprendizado continuo. Eles abordam desde uma breve explanação sobre o que é e pra que existem as soluções NoSQL, e acaba com uma análise do DynamoDB como solução de storage. Aproveite.

Por hoje é só, até mais pessoal.

#TDC2013: nosso #orgulho e a nossa participação!

Foi uma sexta e sábado de muito orgulho para o nosso time, participando da primeira edição em Porto Alegre (2013) da The Developers Conference.

Permitir a reunião de tantos profissionais a fim de trocar ideias sobre diferentes tecnologias, tendências, marketing, linguagens de programação, web, mobile, enterprise, embeeded, arquiteturas para escalar e muito mais! O importante era trocar experiências e boas práticas, para capacitar, inspirar e ajudar a fazer acontecer!

Tivemos pessoas da nossa equipe participando da coordenação do evento, de coordenações de trilha, como palestrantes e participantes. Ao todo, 16 pessoas da equipe uMov.me ajudaram o TDC 2013 Porto Alegre acontecer! Nosso agradecimento a todos que fizeram o evento acontecer! Foram mais de 700 pessoas que estiveram pelo evento presencialmente ou online.

umovme-tdc

Que venha o #TDC2014!

Automatizando tarefas repetitivas utilizando Jenkins

Pare para pensar. Em seu trabalho existem tarefas que se repetem com certa frequencia, e que você faz sempre a mesma coisa para resolvê-las? Você provavelmente gostaria de não fazer mais essas tarefas, assim teria tempo para fazer tarefas mais importantes que necessitam do seu raciocínio lógico, ou até mais tempo para o seu lazer, porque não?

A solução para este tipo de problema pode ser a automação dessas tarefas. Ao se criar scripts que automatizem o trabalho antes feito manualmente, vários benefícios são obtidos como abstração do funcionamento, já que qualquer desenvolvedor pode executar o script mesmo sem saber como ele funciona internamente, e qualidade, já que não são mais necessários passos manuais diminuindo a chance de erros.

E é neste ponto que entra o Jenkins. Jenkins é uma ferramenta de integração contínua que fornece uma interface amigável para criação de tarefas que podem ser executadas manualmente, através de um clique, ou ainda agendadas para rodar em determinados horários.

Vale ressaltar que o Jenkins somente executa os scripts criados, então o conhecimento em alguma linguagem de script ainda é necessário. O foco deste post fica somente sobre o Jenkins.

Instalação
Vá na página oficial do Jenkins e selecione o link para o Java Web Archive (.war). Você pode fazer o deploy do Jenkins em um servidor de aplicação normalmente, mas para fins didáticos, vou inicializar como uma aplicação standalone. Para fazer isso, basta navegar pelo prompt de comando até o diretório onde se encontra o arquivo que foi baixado, e executar o seguinte comando: java -jar jenkins.war. Abra seu navegador e digite o seguinte endereço: http://localhost:8080/. Se você fez tudo corretamente a página principal do Jenkins será exibida.

Builds
O exemplo que irei mostrar a seguir, é de um job (tarefa), que irá, a cada commit em um repositório do GitHub, realizar o build da aplicação, inclusive rodando seus testes unitários. Isso possibilita que os desenvolvedores mantenham seu código constantemente integrado com o resto do sistema, e fornece um rápido feedback quando erros ocorrem. Mais sobre Continuos Integration (Integração Contínua) você pode conferir aqui.

Como iremos utilizar o Github, é necessário instalar o plugin que fará a conexão com o repositório. Para instalar o plugin vá em Gerenciar Jenkins -> Gerenciar Plugins -> Disponíveis, selecione o GitHub Plugin, e clique em Download now and install after restart.

Agora que temos o plugin instalado, o próximo passo é criar o job no Jenkins. Clique em Novo(a) Job, defina um nome para o mesmo, e marque a opção Construir um projeto de software free-style.

jenkins1

Clique em Ok. Será exibida uma tela para configuração do job. Existem várias opções de configuração, mas vamos fazer um exemplo bem simples. Em Gerenciamento de Código Fonte marque a opção Git, e insira a url de seu repositório. Em Disparadores de Construção selecione a opção Construir periodicamente e insira os seguintes valores */5 * * * *. Isso determina que o Jenkins faça o build do projeto a cada 5 minutos. Clique em salvar, e o seu job estará pronto para ser executado.

Sem títuloAlém do exemplo

Este foi um exemplo bem básico, com o objetivo de demonstrar a instalação e funcionamento, e ainda despertar o interesse pela ferramenta. Muitas outras coisas podem ser automatizadas via Jenkins, como deploys de aplicações ou até compilações de livros, sua utilidade é muito vasta. Pesquise mais sobre o assunto, e começe a criar o hábito de automatizar suas tarefas que são repetitivas e acabam consumindo seu tempo todos os dias.

Mock it with Mockito

Mês passado eu trouxe um tutorial sobre testes unitários usando JUnit 4 que trouxe bastante conhecimento legal sobre questões como boas práticas para a construção de testes unitário, padrões de desenvolvimento úteis que podem contribuir com isso, e um passo a passo para começar a desenvolver software usando testes unitários.

Agora a ideia é dar continuidade aos princípios apresentados, através de uma aula sobre testes unitários utilizando JUnit 4 + Mockito. Mockito é um framework de desenvolvimento de testes unitários, que tem como objetivo dar ferramentas úteis para a construção de testes unitários mais simples, legíveis, úteis e efetivos.

Mockito

Caso se interesse o download do Mockito pode ser obtido através do site https://code.google.com/p/mockito/ e se quiser ver uma documentação mais detalhada, com exemplos de código e formas de implementação, acesse aqui.

Reuniões que funcionam. Existe isso?

Meetings are bad?

Eu não posso dizer que adoro reuniões. Só que elas são inevitáveis. Então já que eu tenho que fazer elas de vez em quando, procuro formas de criar um local de aprendizado, onde eu possa unir pessoas que querem juntas resolver problemas. Vontade, restrição de tempo e algumas metas a serem cumpridas durante o tempo da mesma. Simples certo? Para exemplificar o processo que uso, vou contar uma história. Certa vez eu cheguei onde estava o time que estava apoiando, e fiz a pergunta:

Vamos fazer a reunião?

A resposta foi uma pessoa pegando uma térmica de café, outro pegando o jornal e outro indicando que precisava de 5 minutos.

Chegamos na sala, mas o pessoal que estava fazendo uma reunião antes, não tinha terminado ainda. Ao questionar, quem estava na sala indicava que era uma reunião importante. Certo… e porque não se marcou então com mais tempo? Porque? Porque?

1a regra para reuniões que funcionam? Faça elas terem um horário de início e fim. Certos. E se alguém usar a sala por 5mins a mais que o esperado? E se alguém se atrasar 5 minutos? Mantenha a hora de fim da reunião. Ou tome a decisão de remarcar a reunião.

Depois de entrarmos na sala, ficamos esperando a pessoa dos 5mins. Enquanto isto, quem estava com a términa começou a servir café, e quem estava com jornal começou a contar as notícias esportivas do dia. Aqueles 5mins se tornaram 10mins.

2a regra para reuniões que funcionam? Tenha uma definição de início da reunião. Quem são as pessoas que podem tocar os assuntos que serão tratados? Quem são as pessoas que podem tomar decisões? Procure trazer duplas para os assuntos que são decisivos ou tenha pessoas de backup que podem ser acionadas por algum meio de contato, para garantir que a reunião possa acontecer.

Quando a pessoa que faltava chegou, assuntos diversos começaram a aparecer. Pequenas urgências que estavam ocorrendo na empresa. E quem puxava as pequenas urgências fazia questão de indicar que eram assuntos rápidos, que enfim, vamos aproveitar alguns minutos para resolver o tal assunto. Não estava na pauta. Porque não trataram isto fora dali? Mas peraí… que pauta?

3a regra para reuniões que funcionam? Tenha uma pauta/agenda. Tenha uma lista de tópicos. Saiba quanto tempo vai ser dedicado para cada tópico. Seja um facilitador das discussões que precisam acontecer, e avise do tempo que vai ser tratado cada tópico. Qual o objetivo que se busca discutindo o tópico X? E o Y? O tópico está ali para ser aberto, desenvolvido, ou é uma reunião para tomada de decisão do tópico Z? Não misture muitos tópicos. Se for o caso marque reuniões isoladas para cada assunto.

Depois de todas as pequenas urgências definidas, uma das pessoas se sente deslocada. E não sabe porque está ali, já que dos 4 assuntos, apenas o 4o será de utilidade dela.

4a regra para reuniões que funcionam? Monte a agenda pensando no uso do tempo de cada pessoa. Se uma das pessoas vem para trabalhar apenas 1 assunto, faça este ser o primeiro assunto. Assim ela participa de forma efetiva e depois pode voltar para outras metas dentro do seu dia. E se for o caso trabalhe melhor a agenda, quebrando a mesma em mais de uma reunião.

Chegando no assunto mais importante da reunião, metade dos participantes não sabia do que se tratava, porque a informação não foi repassada na semana anterior. Aí uma das pessoas se lembrou que tinha ficado de repassar um documento para os outros, mas esqueceu. Aí o que era para ser uma discussão de possibilidades e criação de ideias, com 10mins de duração, se transforma em uma sala de aula, onde durante 20mins extras você vai ficar explicando um determinado assunto. O ponto? Dê a chance das pessoas se prepararem.

5a regra para reuniões que funcionam? Indique as pessoas como elas podem se preparar. Terão situações onde você vai incluir na reunião o momento de capacitação antes do momento de discussão, aí tranquilo. Deixo isto claro dentro da a agenda. Também deixe claro além do que elas podem fazer para se preparar, o que elas precisam ler, o que elas precisam mandar opinião prévia, e o que elas precisam trazer para a reunião.

A regra de querer fechar no horário parece sempre fácil, porque chegando o final da reunião, as pessoas se levantam e indicam que precisam ir para outras reuniões. Todos querem sair dali o mais rápido possível, assim acontece a magia de horas de reuniões que não geram ação alguma. E todas ações ficam para você trabalhar por email ou em uma nova reunião. :-/

6a regra para reuniões que funcionam? Monte a lista de ações durante a mesma. Vá estabelecendo durante a própria reunião ações que precisam acontecer depois que ela terminar. E nestes casos você já vai conseguir no monento do fechamento da reunião, já ter mais claro quanto tempo é necessário para se fazer uma nova reunião, ou se os assuntos podem ganhar vida própria e reuniões mais focadas.

As reuniões, se bem planejadas, vão acabar sempre sendo uma “relação ganha ganha”. Boa sorte nas suas! E lembre sempre! Tenha uma quantidade de minutos para fazer um fechamento. Use a restrição de tempo para guiar o trabalho a ser feito na reunião. Avise as pessoas de onde elas estão e do andamento.

Para fechar, estou compartilhando um formato de convite que estou usando para marcar reuniões, pelo menos nas reuniões onde eu sou o facilitador. Fica como sugestão. Teste por aí, compartilhe o seu processo também e vamos aprender.

=== Agenda:
Costumo apresentar tópicos, quem puxa o tópico em específico (se for o caso) e a duração esperada do mesmo. Não esqueça de ter um tempo de fechamento.

=== Quem participa:
Normalmente indico área de interesse e quem daquela área participa. A lista de participantes não é suficiente. Acabo indicando o que espero da pessoa na reunião.

=== Como se preparar?
Se for o caso, se existir algum documento de apoio, indique para as pessoas. Faça elas poderem se preparar. E assim você evita os famosos “Pode me explicar o assunto X que eu não me lembro?”.

=== Tem que trazer alguma coisa para a reunião?
Caneta, papel, qualquer tipo de recurso que as pessoas precisam trazer para apoiar.

=== Dúvidas?
Procure <<facilitador>>.