domingo, 15 de janeiro de 2012

Líder servidor

Boa tarde,

Primeiramente, não escrevo como um didático da área, mas sim como um profissional que está estudando e se aprimorando no assunto. Tudo o que escrevo aqui é fruto de minha atual experiência na Avenue Code.

Vamos começar com um paradigma. Após ler O Monge e o Executivo, eu realmente compreendi a importância de ser um líder servidor. Ser um líder servidor é, basicamente, inverter a premissa onde um líder é suportado por seus subordinados. Agora, um líder é aquele que suporta seus subordinados.

Este livro propõe um modelo de liderança bem interessante, onde cada um destes é apoiado pelo próximo:
  1. A Liderança (a capacidade de motivar pessoas a trabalharem duro para realizarem objetivos comuns) 
  2. é suportada pela Autoridade (a capacidade de exercer influência na vida das pessoas)
  3. que é suportada por Serviço e Sacrifício (onde demonstra-se esforço e persistência para oferecer as oportunidades às pessoas)
  4. que é suportada por Amor (que traduz-se em compromisso, dignidade e respeito)
  5. que é suportada por Vontade (que significa simplesmente ter boas intenções e realizar ações para tal)
E o mais interessante é que chegar à Liderança é um grande exercício de evolução pessoal. Tipicamente, um líder servidor possui as seguintes características com relação à sua equipe:
  • Paciência: mostrar autocontrole
  • Bondade: dar atenção, apreciação e incentivo
  • Humildade: ser autêntico e sem pretensão ou arrogância
  • Respeito: tratar os outros como pessoas importantes
  • Abnegação: satisfazer as necessidades dos outros
  • Perdão: desistir de ressentimento quando prejudicado
  • Honestidade: ser livre de engano
  • Compromisso: sustentar suas escolhas
  • Serviço e sacrifício: pôr de lado suas vontades e necessidades, buscar o maior bem para os outros
Não é nada fácil manter estas características, principalmente porque muitas vezes envolve-se o fator "lado pessoal" na questão. Isto é muito prejudicial.

Embora eu não me considere alguém que possui e exerce bem estas características, me apoio nelas para ponderar o meu trabalho. Mas confesso que eu erro muitas vezes; no entanto, venho aprendendo com meus erros certas coisas como:
  • É importante deixar-se ser contrariado, mesmo que isto vá causar um momento de indignação pessoal. Mais interessante ainda é saber lidar com isso com calma e compostura.
  • É importante ser um bom ouvidor, deixar o outro falar, mesmo que a pessoa esteja errada. Isto demonstra respeito ao próximo.
  • É importante estabelecer laços de confiança com as pessoas, demonstrando que nos importamos com elas, e assim elas virão até nós quando enxergarem problemas, e poderemos assim antecipar suas consequências e manter o controle.
  • É muito importante delegar as funções, mas no entanto devemos estar atentos, cobrando os esforços de maneira educada e analisar bem os resultados. É válido deixar a pessoa errar algumas vezes até aprender a fazer corretamente, desde que isto não vá trazer riscos ao negócio. É assim que damos às pessoas oportunidades de crescimento.
  • É sábio enxergar seus próprios limites, e não deixar-se sobrecarregar demais. Tive uma experiência ruim a este respeito e finalmente resolvi aceitar que tenho limites e que não consigo fazer tudo, pois sou um ser humano que irá falhar eventualmente.
Isto é apenas um breve começo. Pretendo escrever mais sobre as minhas experiências com liderança.

Tenha uma boa semana!

terça-feira, 20 de dezembro de 2011

Notícias

Bom, depois de 2 anos inativo, aparecer aqui com uma versão nova do blog sem mais nem menos é meio inusitado, então devo algumas notícias aos meus leitores.

Quanto à minha vida pessoal:

Casei com a Cíntia em 13/11/2009 no civil (a festa foi 12/12/2009), desde então estou morando em Santa Luzia, e estamos tendo uma vida muito feliz. 

Tentamos ter peixes (mas todos os oito bettas morreram), e adotamos 3 lindos cães: Nala (akita americana), Coti (border collie com dachshund) e Sherlock (beagle com  dachshund). Há 1 ano, Nala e Sherlock cruzaram e tiveram 8 filhotes, conseguimos doar todos. Há 2 meses, tivemos que dar a Nala pra minha sogra pois ela brigou feio com a Coti. 

Hoje estamos reformando a nossa casa, um grupo de arquitetos muito legais de Santa Luzia está fazendo um projeto bem contemporâneo e sustentável para nossa morada.

Desde que casamos, temos viajado e visitado lugares bacanas  no Brasil como o Rio de Janeiro, Angra, Paraty, Teresópolis, Carrancas, Serra do Cipó, Búzios, Ilhabela, Embu das Artes, São Paulo, Pico do Ibituruna, Vitória, Guarapari, Ouro Preto, Mariana, etc.

Quanto à minha vida acadêmica:

Em setembro deste ano, ingressei na pós-graduação latu-sensu Especialização em Arquitetura de Sistemas Distribuídos na PUC Minas do câmpus São Gabriel em BH. Estou gostando muito e aprendendo coisas bem úteis.

Tenho planos de fazer um mestrado em alguns anos, mais para satisfação pessoal mesmo, para explorar academicamente algum assunto que muito me interesse a partir da minha experiência profissional.

Quanto à minha vida profissional:

Desde 2008 venho trabalhando com a Avenue Code, startup de desenvolvimento de software localizada em San Francisco, CA., Primeiramente trabalhei na rede social Favorpals.com. No final de 2009, foi decidido abrir uma filial da Avenue Code aqui em Belo Horizonte, o que significou demais para mim, visto que eu era o único recurso brasileiro da Avenue Code até então. Por estar junto desde o início, tive a oportunidade de ser o Gerente de Engenharia da empresa, além de representante legal.

Assim, começamos os preparativos, e em Maio de 2010 os diretores da empresa vieram aqui em Belo Horizonte para cuidarmos da papelada. No final de Julho de 2010 conseguimos começar as nossas atividades em nosso primeiro escritório, que ficava na Rua Santa Rita Durão esquina com Avenida Afonso Pena. Assim surgiu a Avenue Code Brasil.

Contratamos alguns funcionários e veio para cá a Carrie, funcionária da Avenue Code de San Francisco. Carrie morou aqui em BH por 1 ano e ajudou a empresa crescer muito. Fomos contratando mais pessoal, e fomos crescendo bem rápido. Quando a empresa completou 1 ano, nossa equipe já estava com 18 pessoas.

Por 3 vezes em 2011 fui mandado para San Francisco para ter com o pessoal da Avenue Code de lá, recebendo treinamento para melhor atender nossos clientes e também atuando em um cliente, a Macys.com. Passei 5 meses lá e por 2 vezes tive a felicidade de trazer a Cíntia comigo, onde tivemos experiências incríveis como conhecer Los Angeles, Hollywood, Disney California Adventure Park, Santa Monica, Yosemite National Park, Monterrey, Vale do Silício, Six Flags Discovery Kingdom além de morar em San Francisco que é uma experiência única.

Voltando ao Brasil, mudamos de escritório, agora estamos na Rua Paraíba bem próximo à praça da Savassi. Nossa equipe agora beira 40 pessoas.

Estou atuando como Gerente de Engenharia e Líder de equipe em desenvolvimento de software usando tecnologias Java e UI. A partir daqui, minha intenção é trazer a este blog muitas experiências interessantes que venho vivenciando.

Obrigado pela leitura, e abraços!

domingo, 18 de dezembro de 2011

Artigo publicado na capa da Java Magazine 98!

Olá!

Revista Java Magazine 98É com muita satisfação que digo que meu primeiro artigo em revistas foi publicado, e muito felizmente foi escolhido para ser a capa da Java Magazine edição 98!

Seu nome é "Padrões de projeto, aprecie com moderação". Este artigo é este sobre Padrões de Projeto e princípios para sua utilização adequada, que pode ser conferido como prévia, e acessado completamente por meio de assinatura do portal, no endereço abaixo:



Bibliografia utilizada (recomendo como ótimas leituras):
  • Applying UML and Patterns – An Introduction to Object-Oriented Analysis and Design and Iterative Development (3rd ed.); Craig Larman; Prentice Hall; 2004: é um livro referência quanto aos princípios GRASP, expondo-os de maneira clara e consistente.
  • Design Patterns: Elements of Reusable Object-Oriented Software; Erich Gamma,  Richard Helm, Ralph Johnson, John Vlissides; Addison-Wesley; 1994: é o catálogo oficial de padrões de projeto GoF.
  • Refactoring: Improving the Design of Existing Code; Martin Fowler, Kent Beck, John Brant, William Opdyke, Don Roberts; Addison-Wesley; 1999: é um livro sobre o processo de refatoração ágil. Discute muito sobre problemas causados por padrões de projeto.
  • Head First Design Patterns; Elisabeth Freeman, Eric Freeman, Bert Bates, Kathy Sierra; O’Reilly, 2004: é um livro muito didático sobre padrões de projeto, apresenta várias reflexões interessantes.
De que se trata o artigo:
O artigo trata de apresentar princípios, discussões e reflexões sobre a utilização de padrões de projeto, para ajudar ao leitor a desenvolver senso crítico sobre os mesmos. Assim, o leitor poderá extrair de si mesmo o conhecimento para a aplicação de padrões de projeto com moderação.
Em que situação o tema útil:
O tema é útil por alertar ao desenvolvedor sobre a utilização adequada de padrões de projeto, que são soluções para determinados problemas, mas podem ser problemas para determinadas soluções. É importante ao desenvolvedor saber julgar a utilização de um padrão de projeto em um determinado contexto, avaliando sua aplicabilidade e consequências, buscando uma solução ótima.
Resumo DevMan:
O artigo apresenta reflexões a respeito da utilização de padrões de projeto, e descreve algumas causas comuns da má utilização dos mesmos, além de alguns exemplos de má implementação dos mesmos. Em seguida, mostra os princípios GRASP e sua relação com os padrões de projeto, para orientar o desenvolvedor a utilizá-los adequadamente. Ao final, disponibiliza perguntas para avaliar a implementação de um padrão de projeto e considerações para o leitor desenvolver senso crítico.

Se você tiver a oportunidade de ler meu artigo, saiba que estou ansiosamente esperando sua opinião, crítica ou sugestão.

Seja bem-vindo!

Tudo (re)começou quando, depois de tentar várias vezes, venho aqui (agora pra valer!) assumir um compromisso de manter um blog sobre assuntos relacionados a computação. 

Minha principal motivação são os estudos que fiz, que me renderam a publicação de um artigo como capa da revista Java Magazine edição 98.

Alguns assuntos que me interessam no momento, e podem pintar aqui, são:
  • Padrões de projeto
  • Metodologias ágeis
  • Frameworks, API's e peculiaridades do mundo Java
  • Arquitetura de software
  • Gestão de equipes
  • Profiling de código
  • Cobertura de código
  • Test driven development
  • Integração contínua
Senhoras e senhores, muito obrigado pela presença, e deixe seu recado logo abaixo por gentileza!

sexta-feira, 18 de setembro de 2009

Vou me casar!


Meus queridos leitores,

Já fazem vários meses que não posto aqui no blog, o motivo é esse: irei me casar!

E saibam que dá um trabalhão! Afinal, conseguir a felicidade eterna não é de graça né?? ;)

Quem quiser acompanhar a nossa saga, confira o blog do nosso casamento: http://sagasdecintiago.wordpress.com

Bem, eu continuo trabalhando para Favorpals e agora estamos utilizando Spring 2.5 MVC, que foi um imenso avanço! Quando me der uma boa folga eu escrevo sobre ele.

E além disso, estou construindo um ERP para a empresa do meu pai, e estou utilizando outras tecnologias interessantíssimas como JBoss Seam e RichFaces. Também quando puder eu escrevo sobre isto.

Bem, é isso aí! Fiquei com Deus, um grande abraço!

sexta-feira, 27 de fevereiro de 2009

Proteja seu site contra SPAM e ajude a digitalização de livros com reCAPTCHA

Resumo


Ainda hoje, SPAM é um problema altamente relevante. Desenvolvedores vêm tomando diversas medidas para tentar conter os prejuízos causados por SPAM. Hoje apresentarei reCAPTCHA, uma implementação CAPTCHA para neutralizar os ataques feitos por robôs, que ao mesmo tempo que realiza testes que apenas humanos conseguem resolver, contribui para a digitalização de livros antigos.

1. Introdução


Não é de hoje que sites e sistemas web são vitimados por spammers e robôs que visam a proliferação de suas mensagens indesejadas. Esta prática é denominada SPAM: o abuso em sistemas eletrônicos de mensagens com respeito ao envio indiscriminado em massa de mensagens indesejadas. Existem várias formas de SPAM, apesar de que sua variante mais conhecida é o SPAM por e-mail. Teoricamente, qualquer sistema disponível publicamente (por exemplo, na internet) sem medidas anti-SPAM está sujeito a receber SPAM. 

Neste cenário, vêm sendo trabalhadas algumas soluções para tentar impedir, ou ao menos diminuir o envio de SPAM. 

Hoje vou apresentar uma solução apresentada contra a ação de robôs. Robôs são softwares projetados para enviar SPAM automaticamente. Realizam tarefas como criar contas em sites, realizar login, enviar mensagens, etc. 

2. CAPTCHA


É sabido que robôs podem realizar ações de interação com a interface, como acessar caixas de texto, digitar texto, selecionar botões, clicar, etc. Mas há certas ações que apenas os seres humanos são capazes de realizar, como copiar texto distorcido. Se o texto não estiver devidamente distorcido, o robô pode utilizar técnicas de OCR (Optical character recognition) para interpretar o texto, exatamente da mesma forma que os scanners trabalham para reconhecer páginas escaneadas, e assim copiá-lo.

Esta solução se chama CAPTCHA (Completely Automated Public Turing Test To Tell Computers and Humans Apart), e busca proteger sites contra robôs através da geração e avaliação de testes que humanos conseguem realizar, mas softwares atuais não.

E CAPTCHA tem sido adotada em massa. É comum de se encontrar, ao criar uma conta em algum site, um campo com letras distorcidas a serem copiadas, para verificar a autenticidade humana do usuário. Observemos que esta parece ser uma solução eficaz contra robôs.

CAPTCHA é indicado especialmente para:
  • Prever SPAM em comentários de blogs.
  • Proteger registros em sites.
  • Proteger endereços de email de spammers.
  • Enquetes on-line.
  • Prever ataques dicionário.
  • Robôs de mecanismos de busca.
  • Worms e SPAM.
Pois bem, temos uma solução. E agora você se pergunta: como embutir esta funcionalidade em meu site?

Felizmente, há diversas implementações de CAPTCHA disponíveis. Apresentarei a implementação mais popular de hoje em dia, o Projeto reCAPTCHA.

3. O Projeto reCAPTCHA


O Projeto reCAPTCHA é uma implementação free, segura e disponível para WordPress, MediaWiki, Java, PHP, ASP.NET, Perl, Python e diversos outros ambientes. reCAPTCHA também realiza testes de áudio como uma alternativa a usuários deficientes de visão.

Além disso, reCAPTCHA ajuda a digitalizar livros de Internet Archive e edições antigas do New York Times. A cada teste realizado com sucesso, mais uma palavra é digitalizada.

Este processo de digitalização ocorre da seguinte forma: cada palavra que não consegue ser reconhecida corretamente por OCR é enviada aos usuários de sites com reCAPTCHA em forma de um teste, junto com outra palavra já conhecida. O usuário deverá interpretar ambas palavras e enviar sua resposta. O sistema aprovará a resposta do usuário se ele digitou corretamente a palavra já conhecida. Aí, o sistema considerará a resposta dada à palavra desconhecida como uma candidata a ser o reconhecimento correto da palavra. Agora, o sistema enviará esta mesma palavra desconhecida a outras pessoas para determinar, com maior certeza, se a resposta candidata é realmente a correta.

reCAPTCHA é utilizado por mais de 100 mil sites, incluindo Facebook, Ticketmaster, e Craigslist.

4. Como reCAPTCHA funciona


O seguinte diagrama ilustra o funcionamento de reCAPTCHA.

  1. O usuário carrega a página web com o código JavaScript para o teste reCAPTCHA embutido.
  2. O browser requisita um teste ao servidor de API reCAPTCHA. O servidor fornece ao usuário um teste e um token que identificará o teste.
  3. O usuário preenche o formulário na página web, e envia o resultado a seu servidor de aplicações, juntamente com o token do teste.
  4. O servidor de aplicação envia a resposta do usuário para o servidor de verificação reCAPTCHA. Este a avaliará e retornará para o servidor de aplicações.
  5. Se estiver correto, o servidor de aplicações irá permitir ao usuário acessar algum serviço ou informação. Se não estiver, poderá permitir ao usuário tentar novamente.

5. Como implementar reCAPTCHA em meu site


Para implementar reCAPTCHA, siga este processo:
  1. Registre-se em reCAPTCHA Administration Portal para obter um par de chaves pública/privada para cada domínio ou todos os domínios.
    Mais informações em http://recaptcha.net/apidocs/captcha/ 
  2. Insira o código client-side na página desejada. Aqui será inserida sua chave pública. Você pode utilizar a API padrão (utiliza JavaScript), a API não-JavaScript e a API AJAX. Existem diversas opções para a customização do Look & Feel e comportamento.
    Mais informações em http://recaptcha.net/apidocs/captcha/client.html 
  3. Escreva o código server-side que receberá a requisição, verificará o teste e retornará. Aqui será inserida sua chave privada.
    Em Java: http://wheelersoftware.com/articles/recaptcha-java.html

6. Observações


Implementei reCAPTCHA no projeto Favorpals e até agora tem sido bem satisfatório. Quem tiver algum comentário a fazer, ou experiência com reCAPTCHA ou outra implementação CAPTCHA, está convidado a comentar este post.

terça-feira, 16 de dezembro de 2008

Sun Certified Web Component Developer for the Java 2 Platform, Enterprise Edition

Como eu havia dito no post anterior Livro Head First Servlets & JSP, eu passei 1 mês me preparando para realizar a prova de certificação Sun Certified Web Component Developer for the Java 2 Platform, Enterprise Edition (SCWCD). Eu realizei a prova hoje e felizmente fui aprovado com 81%! :)

E vou contar nesse post como que foi.

Em primeiro lugar, eu já venho trabalhando com servlets e JSPs desde junho. E já tive experiência anterior com servlets. Isto me ajudou bastante para fixar o conteúdo.

Apesar de ter feito a versão mais nova dessa certificação, referente à versão 5 do JEE, eu li o Head First Servlets referente à versão 1.4 e consegui fazer a prova numa boa! Segundo Bryan Basham, co-autor da prova e também do livro mencionado, as diferenças entre as 2 últimas versões são as seguintes:
  1. Não há diferenças nos objetivos do exame entre as versões.
  2. O novo exame (SCWCD 5) é ainda baseado na versão J2EE 1.4 (com Servlet 2.5 e JSP 2.0). Os novos tópicos adicionados ou atualizados são: JSTL tags, dynamic attributes e um pouco mais de SingleThreadModel.
  3. O exame SCWCD 5 não possui questões relacionadas a JSF, mas SCWCD 6 possuirá.
  4. O exame SCWCD 5 tem questões baseadas em performance, diferentemente do teórico exame SCWCD 1.4.
Após ler o livro (e reler pontos que não tinham ficado muito claros), eu li bastante um ótimo resumo publicado por Daniel Martins em um artigo em seu blog (indisponível no momento).

Depois disso, tirei o restante do tempo antes da prova em fazer vários simulados (os famosos mocks). Nos seguintes links há vários mocks bacanas, e melhor, FOR FREE (evite mocks do SCWCD da versão J2EE 1.3, eles podem confundir a cabeça):
No dia anterior, eu preferi não ocupar muito a minha cabeça e fiz apenas o coffee cream mock do final do livro Head First.

E é isso aí. Ano que vem vamos ver se eu começo a estudar pras provas de SCBCD e SCEA :)