sábado, 15 de junho de 2019

Mais 2 textos publicados no Medium!

Olá, pessoal!

Publiquei mais dois textos no Medium:
Queria aproveitar e fazer um comentário sobre meus últimos textos.

Meus últimos textos não tratam de assuntos complexos, obviamente. Minha inspiração para estes textos vem de conceitos e problemas que vejo com certa frequência em projetos. Então estes mesmos textos acabam servindo para elucidar melhor alguns pontos que trago para as equipes, contribuindo para que elas produzam um código melhor.

Espero que gostem!

quinta-feira, 7 de fevereiro de 2019

quarta-feira, 28 de fevereiro de 2018

Implementação do RabbitMQ DLQ com exception ou com 'default requeue rejected'

Olá!

Disponibilizei no meu Github uma implementação de filas do RabbitMQ no qual as mensagens com erro caem em uma fila DLQ (Dead Letter Queue).

Podem baixar o projeto aqui neste link.

Deu um pouco de trabalho pois não há muitos exemplos completos na Internet, principalmente para o caso de optar pela flag "default requeue rejected" e por não separarem o Produtor do Consumidor, o que causa confusão para quem está começando a entender o conceito de filas.

Espero que gostem!






terça-feira, 6 de fevereiro de 2018

Por que todo desenvolvedor deveria ter uma conta ativa no Stack Overflow?

Olá!

Hoje gostaria de falar um pouco deste site que faz parte do cotidiano dos desenvolvedores de software: Stack Overflow.

Creio que uma das maiores revoluções da nossa área foi ter acesso a uma ferramenta como esta. Imagine a quantidade de tempo e dinheiro que os milhões de desenvolvedores do mundo economizaram tendo acesso a um local onde a maioria das respostas para suas dúvidas técnicas podem ser, na maioria dos casos, facilmente encontradas.

Há mais de 4 anos atrás percebi a importância deste site e resolvi fazer o que eu considerava o mínimo: criar uma conta no site. O objetivo da conta era, principalmente, positivar as perguntas e respostas que me ajudavam ou que eram simplesmente interessantes. Mas eu também sentia que poderia contribuir, e logo comecei a tentar responder algumas perguntas. E não demorei muito para fazer minha primeira pergunta.

Também tento fazer o mesmo no Stack Overflow em português, que foi lançado anos depois da versão em inglês. Não consigo ser tão ativo lá quanto eu gostaria, mas sempre que tenho um tempo dou uma olhada lá e tento responder alguma pergunta.

Hoje incentivo todo desenvolvedor que tenho contato, independente da idade ou experiência, a abrir uma conta no site. Os argumentos para incentivar nunca falham: retribuição. É só estimular a reflexão: "Quantas vezes você usou o Stack Overflow? O que acha de dar algum retorno para esta comunidade?". Eu sempre repito que o mínimo que todo desenvolvedor de software precisa fazer é criar uma conta no site e positivar as perguntas e respostas que o ajudam. Por isto sempre me mantenho logado no site durante o trabalho, pois é o momento que mais estaremos procurando por soluções, fazendo as perguntas e descobrindo as respostas.

Criada uma conta no site e exercendo ativamente sua retribuição, naturalmente vem uma outra etapa: a contribuição. Confesso que ganhar reputação no site não é uma tarefa fácil e não existem atalhos. Você precisa ser ativo o tanto quanto pode, fornecer boas respostas e fazer boas perguntas. Mas creio que todo desenvolvedor que acessa o site é capaz de responder alguma pergunta ou fazer alguma pergunta que é a de muitos outros.

O site consegue estar sempre muito ativo por três motivos: senso de comunidade, gamification e ofertas de trabalho.

O senso de comunidade pode soar poético, mas é verdade: para muitos compartilhar conhecimento já é o próprio benefício. Caso contrário, não existiriam até hoje os fóruns de discussão na Internet. Pessoalmente, sou uma prova disto e entendo que este processo de entrar no Stack Overflow foi natural. Desde os 15 anos de idade eu já era fã de fóruns de discussão e respondia perguntas de desconhecidos sem ganhar nada em troca. Na época não sabia programar, então as discussões eram sempre sobre Hardware/Software de computador e Linux :).

O gamification do site funciona bem e é um sistema bem justo, refinado ao longo de vários anos. Quanto mais contribui, mais pontos ganha e melhor você fica no ranking do site. Confesso que gosto bastante de abrir o site e ver um +10 dentre as notificações recebidas.

A parte de ofertas de trabalho é mais comum lá fora do que no Brasil, mas já recebi ofertas de trabalho de profissionais que vieram pelo meu perfil no Stack Overflow. Então fica a dica: se está procurando trabalhar fora do país, sua reputação no site pode te ajudar muito. Há até quem não contrate desenvolvedores que não sejam ativos no site. O próprio site conta com uma área de busca de empregos mas, novamente, não faz muito sucesso no Brasil ainda.

Enfim, espero ter ajudado a convencer você, desenvolvedor, a abrir uma conta no site e começar a retribuir e, quem sabe, contribuir. Até a próxima!

segunda-feira, 6 de novembro de 2017

Programação defensiva com Decorator: simplificando a verificação de nulos.

Olá, pessoal!

Muitas vezes nos deparamos sempre com os mesmos problemas simples e não paramos para pensar em como resolvê-los de forma mais eficiente. Já dei um exemplo assim aqui no blog de como um problema simples pode ter inúmeras soluções diferentes.

Agora, que tal aprender a fazer um:


Apenas instanciando a mesma classe?

Problema


Vamos começar então. Imaginamos que tenhamos uma classe de nome Pessoa e que ela tenha um parâmetro nome:



E agora você deseja que o nome não seja nulo. Usualmente, a dúvida de muitos desenvolvedores é se o if será colocado no construtor, no set ou ainda em alguma classe de serviço responsável por criar pessoas.

Então, não é comum terminarmos com uma solução assim:



Se depois aparecer um objeto Endereco, será a mesma coisa. Se aparecer um objeto Rua, será a mesma coisa. Ainda que apareça um parâmetro novo para Pessoa, como um sobrenome, teremos o mesmo caso. Logo verá que o código ficará bem repetitivo:



Sendo que tudo que queremos, afinal, é garantir que nome, sobrenome e cidade não sejam nulos.

Alternativa


Como alternativa, se não queremos objetos nulos, podemos criar um objeto NotNull, desta maneira:



Esta classe usa generics, permitindo aceitar qualquer tipo de objeto como parâmetro e fazendo a esperada condição de verificar se o objeto é nulo.

Desta maneira, podemos simplificar nossa classe Pessoa, fazendo com que ela receba nome, sobrenome e cidade não nulos, determinando isto já no contrato da classe Pessoa:



E para instanciar uma classe Pessoa, basta:



Podemos também criar outras classes de verificação: NotEmpty, NotNegative (para números), ValidDate (para parse de datas), etc, e podemos combinar várias delas umas com as outras. Por exemplo, você pode querer que nome não seja nulo, não seja vazio e não contenha caracteres especiais, resultando em uma chamada parecida com esta:



Usando assim o poder do Decorator :). Trarei mais exemplos desta natureza em um futuro texto.

Dúvidas ou sugestões, usem os comentários. Obrigado!

quinta-feira, 27 de julho de 2017

Teclado mecânico Alfawise V1 (ABNT 2): recomendo!

Olá, pessoal!

Faz um bom tempo que não escrevo (embora tenha vários rascunhos de textos... rs). E, infelizmente, não falarei de código agora mas sim de uma ferramenta muito boa para produzi-lo: o teclado. Não qualquer teclado, mas um teclado mecânico chamado Alfawise V1.

Este texto aqui é para dar uma ideia da qualidade do teclado e apresentar alguns atalhos dele para alterar a intensidade da iluminação, cores e efeitos (algo que tive dificuldade de encontrar na Internet!).

Enfim, fazia muito tempo que namorava a compra de teclado mecânico, mas a maioria dos modelos disponíveis e mais em conta não eram no padrão ABNT2. Assim, preferi aguardar que uma boa opção de teclado mecânico ABNT2 aparecesse com excelente custo-benefício. Afinal, o Motospeed Inflictor CK104 já estava por aí algum tempo, mostrando que é possível sim existir um teclado mecânico muito bom por um preço justo.

Finalmente, este dia chegou.

A compra


Através do fórum da Adrenaline fiquei sabendo do teclado Alfawise V1 modelo ABNT2. Quando realizei a minha compra, havia poucas pessoas no tópico falando do teclado e poucas reviews no site da GearBest. Mas do pouco que li e vi, estava convencido que valia à pena arriscar e, literalmente, pagar para ver.

Comprei o teclado na GearBest por apenas 135 reais (com taxas e impostos!). O teclado demorou 1 mês e meio para chegar e estou com ele faz poucos dias, mas posso adiantar: adorei o teclado!

Usando


O teclar de um teclado mecânico é bem diferente, pois exige menos força e o "feedback" da tecla é bem melhor durante a digitação. Com o Alfawise não é diferente. Por ele usar o blue switch, confesso que ele é mais barulhento do que eu imaginava, mas já esperava que isto pudesse ocorrer, pois é uma característica do blue switch. Confesso que dá até gosto escrever mais linhas de código com ele, rs.

Como bom teclado mecânico e moderno que ele é, ele inclui iluminação em LED abaixo de cada tecla, que pode assumir diferentes cores e vários efeitos de iluminação. Vou deixar abaixo uma lista de atalhos para alternar entre estas diferentes configurações de cor e iluminação, tudo isto sem precisar instalar qualquer software!

Conclusão


A intenção deste texto não foi fazer uma análise. Foi mais para divulgar este excelente teclado mecânico que, seguramente, foi uma das melhores compras que já fiz.

E vamos aos atalhos!

Atalhos de iluminação do Alfawise V1


  • Fn + INS: alternar entre diferentes modos de iluminação
  • Gn + DEL: alterna entre diferentes cores
  • Fn + PRT (Print Screen): desliga toda a iluminação
  • Fn + 1: Modo de jogo 1 (FPS)
  • Fn + 2: Modo de jogo 2 (CF)
  • Fn + 3: Modo de jogo 3 (COD)
  • Fn + 4: Modo de jogo 4 (LOL)
  • Fn + 5: Modo de jogo 5 (QQ race)
  • Fn + baixo: diminui o brilho
  • Fn + cima: aumenta o brilho
  • Fn + Esc: reinicia as funções do teclado
  • Fn + Win: bloqueia a tecla do windows e deixa ela na cor vermelha.