<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Eduardo Weiland</title><link>https://ew.dev.br/</link><description>Recent content on Eduardo Weiland</description><generator>Hugo</generator><language>en</language><lastBuildDate>Wed, 12 May 2021 14:09:49 -0300</lastBuildDate><atom:link href="https://ew.dev.br/index.xml" rel="self" type="application/rss+xml"/><item><title>Adicionando eslint-disable nos arquivos com erros</title><link>https://ew.dev.br/posts/2021/05/adicionando-eslint-disable-nos-arquivos-com-erros/</link><pubDate>Wed, 12 May 2021 14:09:49 -0300</pubDate><guid>https://ew.dev.br/posts/2021/05/adicionando-eslint-disable-nos-arquivos-com-erros/</guid><description>&lt;p>Recentemente eu precisei atualizar um projeto em Ember que estava na versão 3.6
(bem desatualizado) para a versão 3.24 (atual LTS). Para quem conhece o Ember,
sabe que muita coisa mudou entre essas versões (Glimmer, classes nativas etc.).
E, com as alterações, o Ember também atualizou o plugin para o ESLint,
incluindo novas regras para identificar código antigo e reforçar as novas boas
práticas.&lt;/p>
&lt;p>Mas, mesmo com tantas alterações, quase todo o código antigo ainda segue
funcionando (exceto onde APIs privadas eram utilizadas 🤷), graças ao &lt;a href="https://semver.org/" class="external-link" target="_blank" rel="noopener">Semantic
Versioning&lt;/a>. Ele não &lt;em>precisa&lt;/em> ser atualizado para a nova sintaxe por
enquanto, isso só será necessário ao atualizar para o Ember 4.0, quando ele
for lançado.&lt;/p></description></item><item><title>Migrando do Wordpress para blog estático com Hugo</title><link>https://ew.dev.br/posts/2021/04/migrando-do-wordpress-para-blog-estatico-com-hugo/</link><pubDate>Sat, 17 Apr 2021 16:48:50 -0300</pubDate><guid>https://ew.dev.br/posts/2021/04/migrando-do-wordpress-para-blog-estatico-com-hugo/</guid><description>&lt;p>Migrei meu blog do Wordpress para um blog estático com &lt;a href="https://gohugo.io/" class="external-link" target="_blank" rel="noopener">Hugo&lt;/a>. Quer saber
como foi o processo? Continue lendo 😁&lt;/p>
&lt;h2 id="motivação">
 Motivação
 &lt;a class="heading-link" href="#motiva%c3%a7%c3%a3o">
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading">&lt;/i>
 &lt;span class="sr-only">Link to heading&lt;/span>
 &lt;/a>
&lt;/h2>
&lt;p>Eu sempre tive &lt;em>vontade&lt;/em> de migrar meu blog para um site estático, mas sempre me
faltava um incentivo a mais. Eu cheguei a iniciar projetos com várias ferramentas
de geração de sites estáticos, como &lt;a href="https://hexo.io/" class="external-link" target="_blank" rel="noopener">Hexo&lt;/a>, &lt;a href="https://www.11ty.dev/" class="external-link" target="_blank" rel="noopener">Eleventy&lt;/a> e &lt;a href="https://github.com/empress/empress-blog" class="external-link" target="_blank" rel="noopener">Empress Blog&lt;/a>,
mas eu sempre acabava desistindo no meio do caminho.&lt;/p></description></item><item><title>Reset automático do Placarduino após o fim do jogo</title><link>https://ew.dev.br/posts/2018/02/reset-automatico-do-placarduino-apos-o-fim-do-jogo/</link><pubDate>Sun, 18 Feb 2018 13:18:46 -0300</pubDate><guid>https://ew.dev.br/posts/2018/02/reset-automatico-do-placarduino-apos-o-fim-do-jogo/</guid><description>&lt;p>Depois da última modificação do Placarduino, que adicionou um tratamento para
&lt;a href="https://ew.dev.br/posts/2018/02/fim-de-jogo-para-o-placarduino/" >fim de jogo&lt;/a>, a única forma de iniciar um novo jogo é
resetando o Arduino ao final do jogo. E se isso fosse automático? Usando o
Watchdog do Atmega isso é possível!&lt;/p>
&lt;hr>
&lt;p>Existem outras formas de resetar um Arduino, como usar um jumper entre o pino de
reset e um pino digital para controlar pelo código, ou pular para a primeira
instrução do programa (usando Assembly ou um ponteiro de função declarado com o
endereço zero), ou usando o Watchdog. Esta última me parece ser a solução menos
&amp;ldquo;gambiarra&amp;rdquo; (e também é &lt;a href="https://arduino.stackexchange.com/a/13424" class="external-link" target="_blank" rel="noopener">a solução recomendada pela Atmel&lt;/a>).&lt;/p></description></item><item><title>Fim de jogo para o Placarduino</title><link>https://ew.dev.br/posts/2018/02/fim-de-jogo-para-o-placarduino/</link><pubDate>Sun, 04 Feb 2018 19:39:28 -0200</pubDate><guid>https://ew.dev.br/posts/2018/02/fim-de-jogo-para-o-placarduino/</guid><description>&lt;p>O Placarduino está ficando muito bom. Os jogadores já podem se identificar e
contar seus pontos, mas chegou a hora do &lt;em>game over&lt;/em>: é o fim de jogo para o
Placarduino. Ou seja, um botão para finalizar o jogo e o vencedor comemorar!&lt;/p>
&lt;hr>
&lt;p>Há muito tempo eu já estava pensando em como sinalizar o final de uma partida no
Placarduino. Porém, cada tipo de jogo possui regras diferentes, então seria
complicado colocar a lógica de fim de jogo no código. Então, a solução mais
simples é utilizar um botão que pode ser pressionado a qualquer momento,
indicando que a partida acabou e que o jogador que estiver com mais pontos no
momento é o vencedor. E, claro, no fim do jogo também tem a comemoração do
vencedor.&lt;/p></description></item><item><title>Cartões de acesso para o Placarduino</title><link>https://ew.dev.br/posts/2018/01/cartoes-de-acesso-para-o-placarduino/</link><pubDate>Thu, 25 Jan 2018 15:36:05 -0200</pubDate><guid>https://ew.dev.br/posts/2018/01/cartoes-de-acesso-para-o-placarduino/</guid><description>&lt;p>O Placarduino já está funcionando bem. Porém, os únicos jogadores ainda são o
&amp;ldquo;Jogador 1&amp;rdquo; e o &amp;ldquo;Jogador 2&amp;rdquo;. Se o &amp;ldquo;Fulano&amp;rdquo; quiser jogar contra o &amp;ldquo;Beltrano&amp;rdquo;,
eles terão que escolher entre 1) usarem os nomes &amp;ldquo;Jogador 1&amp;rdquo; e &amp;ldquo;Jogador 2&amp;rdquo; ou
2) trocar os nomes e recompilar o código ou 3) cada um deles pode ter um &amp;ldquo;cartão
de acesso&amp;rdquo; para identificação. Vamos de alternativa 3!&lt;/p>
&lt;h2 id="teoria">
 Teoria
 &lt;a class="heading-link" href="#teoria">
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading">&lt;/i>
 &lt;span class="sr-only">Link to heading&lt;/span>
 &lt;/a>
&lt;/h2>
&lt;p>Para quem nunca trabalhou com RFID antes, não adianta começar montando o circuito
e nem escrevendo o código. A teoria é uma parte obrigatória para poder usar o
RFID sem surpresas. Eu poderia escrever um monte sobre o que eu aprendi aqui,
mas eu prefiro deixar o link para um dos melhores artigos que eu encontrei e que
me ajudou a entender o funcionamento das tags RFID: &lt;a href="https://learn.adafruit.com/adafruit-pn532-rfid-nfc/mifare" class="external-link" target="_blank" rel="noopener">MiFare Cards &amp;amp; Tags&lt;/a>
(artigo do Adafruit, em inglês).&lt;/p></description></item><item><title>Refatoração do Placarduino</title><link>https://ew.dev.br/posts/2018/01/refatoracao-do-placarduino/</link><pubDate>Sun, 14 Jan 2018 11:27:54 -0200</pubDate><guid>https://ew.dev.br/posts/2018/01/refatoracao-do-placarduino/</guid><description>&lt;p>Como eu já havia comentado no &lt;a href="https://ew.dev.br/posts/2018/01/atualizacao-do-placarduino-reducao-de-pontos/" >último post sobre o Placarduino&lt;/a>, o projeto já
estava precisando de uma refatoração (quase) completa. E eu realmente fiz isso.
Então, neste post eu pretendo descrever resumidamente as principais mudanças que
eu fiz (o post sobre o RFID terá que esperar, já que essa parte também precisa de
uma refatoração).&lt;/p>
&lt;h2 id="que-rufem-os-tambores">
 Que rufem os tambores
 &lt;a class="heading-link" href="#que-rufem-os-tambores">
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading">&lt;/i>
 &lt;span class="sr-only">Link to heading&lt;/span>
 &lt;/a>
&lt;/h2>
&lt;p>Ou melhor, o buzzer. E foi por essa parte que eu comecei a refatoração. Eu havia
criado 3 &amp;ldquo;músicas de abertura&amp;rdquo; para o Placarduino, mas para trocar entre as músicas
era necessário comentar uma parte do código e descomentar outra! E, além disso,
criar uma nova melodia era bastante trabalhoso e repetitivo.&lt;/p></description></item><item><title>Atualização do Placarduino: redução de pontos</title><link>https://ew.dev.br/posts/2018/01/atualizacao-do-placarduino-reducao-de-pontos/</link><pubDate>Sat, 13 Jan 2018 11:19:50 -0200</pubDate><guid>https://ew.dev.br/posts/2018/01/atualizacao-do-placarduino-reducao-de-pontos/</guid><description>&lt;p>Faz algum tempo que eu não publico nada sobre o projeto do &lt;a href="https://ew.dev.br/posts/2017/10/placarduino-placar-eletronico-com-arduino/" >Placarduino&lt;/a>, mas
ele não ficou parado esse tempo todo. Foram feitas duas atualizações, mas eu não
tive tempo de organizar uma postagem sobre essas alterações. Então nesse post eu
vou mostrar a modificação mais simples, que foi adicionar um botão para reduzir
os pontos de um jogador (e.g. se o ponto foi adicionado por engano, agora existe
um &amp;ldquo;Ctrl+Z&amp;rdquo;).&lt;/p></description></item><item><title>Display maior, números maiores</title><link>https://ew.dev.br/posts/2017/11/display-maior-numeros-maiores/</link><pubDate>Sun, 05 Nov 2017 18:18:55 -0200</pubDate><guid>https://ew.dev.br/posts/2017/11/display-maior-numeros-maiores/</guid><description>&lt;p>No &lt;a href="https://ew.dev.br/posts/2017/11/placarduino-adicionando-um-display-maior-para-exibir-mais-informacoes/" >último post sobre o projeto do Placarduino&lt;/a>, eu adicionei um display de 4
linhas e 20 colunas, mas não alterei o formato de exibição do placar. Eu reservei
essa mudança para este post: exibir números maiores no placar.&lt;/p>
&lt;p>Indo direto ao ponto, o resultado será como a imagem acima.&lt;/p>
&lt;h2 id="a-teoria">
 A teoria
 &lt;a class="heading-link" href="#a-teoria">
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading">&lt;/i>
 &lt;span class="sr-only">Link to heading&lt;/span>
 &lt;/a>
&lt;/h2>
&lt;p>Os displays LCD utilizam uma matriz de pixels de 8 linhas e 5 colunas para cada
caractere. Os pixels que devem ser ligados são representados por um bit 1 e os
pixels desligados por 0. Cada caractere é formado por um vetor de 8 bytes, onde
apenas os 5 bits menos significativos de cada byte representam uma linha de pixels.&lt;/p></description></item><item><title>Placarduino++: adicionando um display maior para exibir mais informações</title><link>https://ew.dev.br/posts/2017/11/placarduino-adicionando-um-display-maior-para-exibir-mais-informacoes/</link><pubDate>Thu, 02 Nov 2017 20:10:24 -0200</pubDate><guid>https://ew.dev.br/posts/2017/11/placarduino-adicionando-um-display-maior-para-exibir-mais-informacoes/</guid><description>&lt;p>Com várias ideias para o projeto do Placarduino, o display de 16x2 não será
suficiente para exibir todas as informações. E além disso, da forma como o
display está montado hoje, são utilizados muitos pinos do Arduino, que poderiam
ser aproveitados para outras funções. Então, nesse post, eu vou mostrar como eu
fiz a substituição do display 16x2 por um display 20x4 com um módulo adaptador
I²C.&lt;/p>
&lt;hr>
&lt;p>Antes de mais nada: a escolha do display. Eu utilizei um LCD que já veio com o
controlador I²C soldado na parte de trás do display. Existe a possibilidade de
comprar apenas o módulo adaptador e soldar ao display ou montar em uma protoboard.&lt;/p></description></item><item><title>Substituindo a IDE do Arduino pelo PlatformIO</title><link>https://ew.dev.br/posts/2017/10/substituindo-a-ide-do-arduino-pelo-platformio/</link><pubDate>Tue, 31 Oct 2017 23:35:33 -0200</pubDate><guid>https://ew.dev.br/posts/2017/10/substituindo-a-ide-do-arduino-pelo-platformio/</guid><description>&lt;p>O Arduino é, basicamente, uma plataforma de aprendizado. A IDE oficial é bem
simples e não oferece muitos recursos para usuários mais avançados. Para quem
quer manter as dependências/bibliotecas organizadas, a IDE do Arduino não ajuda
em nada. Felizmente existe o &lt;a href="http://platformio.org/" class="external-link" target="_blank" rel="noopener">PlatformIO&lt;/a>. E, nesse post, eu vou mostrar como
eu atualizei o &lt;a href="https://ew.dev.br/posts/2017/10/placarduino-placar-eletronico-com-arduino/" >Placarduino&lt;/a> para utilizar a estrutura de um projeto dessa
plataforma.&lt;/p>
&lt;hr>
&lt;p>Com as ideias de melhorias para o Placarduino, em breve ele deve se transformar
em um pequeno monstro 🙂. Várias bibliotecas externas utilizadas, em versões
específicas, algumas que poderiam ser instaladas pelo gerenciador de bibliotecas
do Arduino, outras que precisariam ser baixadas, descompactadas e copiadas para
um diretório específico, além das bibliotecas internas para separar as funções
do programa e vários arquivos no projeto principal. É, a organização do código
será fundamental para continuar desenvolvendo esse projeto.&lt;/p></description></item><item><title>Broker MQTT escalonável com Mosca + Redis</title><link>https://ew.dev.br/posts/2017/10/broker-mqtt-escalonavel-com-mosca-redis/</link><pubDate>Fri, 27 Oct 2017 22:35:40 -0200</pubDate><guid>https://ew.dev.br/posts/2017/10/broker-mqtt-escalonavel-com-mosca-redis/</guid><description>&lt;p>Em uma postagem anterior, eu mostrei como configurar um &lt;a href="https://ew.dev.br/posts/2017/09/deploy-do-mosquitto-com-autenticacao-no-kubernetes/" >broker MQTT no Kubernetes
com o Mosquitto&lt;/a>. Mas o suporte do Mosquitto para a &lt;a href="https://stackoverflow.com/questions/36283197/mqtt-mosquitto-bridge-horizontal-scaling/36283565#36283565" class="external-link" target="_blank" rel="noopener">criação
de clusters usando bridges&lt;/a> é muito limitado. Felizmente, existe uma solução
muito mais simples, que utiliza o Redis para criar o cluster e o &lt;a href="http://www.mosca.io" class="external-link" target="_blank" rel="noopener">Mosca&lt;/a> para
suporte ao protocolo MQTT.&lt;/p>
&lt;p>Essa ideia surgiu quando eu encontrei um artigo no Medium descrevendo basicamente
a mesma arquitetura que eu irei mostrar aqui. O artigo original (em inglês) pode
ser acessado em &lt;em>&lt;a href="https://medium.com/@lelylan/how-to-build-an-high-availability-mqtt-cluster-for-the-internet-of-things-8011a06bd000" class="external-link" target="_blank" rel="noopener">How to Build an High Availability MQTT Cluster for the Internet
of Things&lt;/a>&lt;/em>.&lt;/p></description></item><item><title>Adicionando sons no Placarduino</title><link>https://ew.dev.br/posts/2017/10/adicionando-sons-no-placarduino/</link><pubDate>Fri, 27 Oct 2017 21:51:27 -0200</pubDate><guid>https://ew.dev.br/posts/2017/10/adicionando-sons-no-placarduino/</guid><description>&lt;p>Este post é a continuação do projeto Placarduino. A última postagem foi a
&lt;a href="https://ew.dev.br/posts/2017/10/placarduino-placar-eletronico-com-arduino/" >criação da primeira versão&lt;/a>. Até o momento, o placar já exibe dois jogadores
e conta os pontos de cada um. Mas seria interessante se também houvesse algum
tipo de som de abertura e a cada ponto marcado. É isso que vamos fazer!&lt;/p>
&lt;hr>
&lt;p>Para fazer isso será necessário:&lt;/p>
&lt;ul>
&lt;li>1 Placarduino v1.0&lt;/li>
&lt;li>1 buzzer passivo de 5V&lt;/li>
&lt;li>1 resistor de 220Ω&lt;/li>
&lt;li>Alguns cabos jumper&lt;/li>
&lt;li>Uma música simples para tocar (ou mais de uma)&lt;/li>
&lt;/ul>
&lt;p>Precisa de pouco material mesmo. Mas o resultado será muito melhor do que a soma
das partes 🙂&lt;/p></description></item><item><title>Placarduino: placar eletrônico com Arduino</title><link>https://ew.dev.br/posts/2017/10/placarduino-placar-eletronico-com-arduino/</link><pubDate>Sun, 22 Oct 2017 15:08:02 -0200</pubDate><guid>https://ew.dev.br/posts/2017/10/placarduino-placar-eletronico-com-arduino/</guid><description>&lt;p>Recentemente eu comprei um kit de eletrônica com Arduino e pensei em algum bom
projeto para começar, que pudesse ser útil e, ao mesmo tempo, bem simples. Assim,
nasceu o Placarduino, um mini placar eletrônico de uso geral para controlar a
pontuação de qualquer tipo de jogo disputado entre dois competidores.&lt;/p>
&lt;hr>
&lt;p>Esse projeto deve começar bem simples. Talvez com o tempo eu adicione mais
algumas funcionalidades interessantes nele. Mas como MVP deve servir.&lt;/p></description></item><item><title>Deploy do Mosquitto com autenticação no Kubernetes</title><link>https://ew.dev.br/posts/2017/09/deploy-do-mosquitto-com-autenticacao-no-kubernetes/</link><pubDate>Fri, 22 Sep 2017 11:10:45 -0300</pubDate><guid>https://ew.dev.br/posts/2017/09/deploy-do-mosquitto-com-autenticacao-no-kubernetes/</guid><description>&lt;p>O &lt;a href="https://mosquitto.org/" class="external-link" target="_blank" rel="noopener">Mosquitto&lt;/a> é um broker MQTT de código aberto e desenvolvido com apoio da
Eclipse Foundation. O MQTT é um protocolo de comunicação no estilo &lt;a href="https://en.wikipedia.org/wiki/Publish%E2%80%93subscribe_pattern" class="external-link" target="_blank" rel="noopener">pub/sub&lt;/a>,
muito utilizado em aplicações de Internet das Coisas. Neste post, vou mostrar
como configurar e publicar o Mosquitto com suporte a criptografia, autenticação
e autorização em um cluster do Kubernetes.&lt;/p>
&lt;p>Esse artigo assume que você já tem alguma experiência com Docker e possui
acesso a um cluster Kubernetes para fazer o deploy do Mosquitto.&lt;/p></description></item><item><title>Usando o Ansible para compilar uma biblioteca</title><link>https://ew.dev.br/posts/2017/09/usando-o-ansible-para-compilar-uma-biblioteca/</link><pubDate>Mon, 11 Sep 2017 22:08:35 -0300</pubDate><guid>https://ew.dev.br/posts/2017/09/usando-o-ansible-para-compilar-uma-biblioteca/</guid><description>&lt;p>O Ansible é uma ferramenta muito útil para várias tarefas, devido, principalmente,
à sua flexibilidade. A grande quantidade de módulos existentes torna fácil
automatizar qualquer tipo de processo, mesmo quando o Ansible não seja a opção
mais óbvia.&lt;/p>
&lt;p>Por exemplo, quando você precisa compilar um pacote que necessita de etapas
adicionais de configuração: isso pode ser automatizado pelo Ansible.&lt;/p>
&lt;p>Vou mostrar aqui um exemplo de como eu criei um playbook para compilar uma
biblioteca de autenticação para o Mosquitto, o &lt;a href="https://github.com/jpmens/mosquitto-auth-plug" class="external-link" target="_blank" rel="noopener">mosquitto-auth-plug&lt;/a>.&lt;/p></description></item></channel></rss>