Cesar Gimenes

Programação, Eletrônica, Golang, UNIX e muito mais papo nerd

Tratando sinais com Go

Tratar sinais é uma boa pratica, dessa forma você pode finalizar seu programa graciosamente, liberando recursos, fechando banco de dados, etc. muito melhor que simplesmente fechar o programa. E tratar sinais do sistema operacional com Go é muito simples porque basicamente o sistema vai jogar o sinal em uma canal e então precisamos apenas ficar escutando. Primeiro criamos um canal sc := make(chan os.Signal, 1) Daí informamos qual o tipo de sinal estamos interessados, no caso ^C ou seja SIGINT.

Go com Intel Edison lendo um botão.

Continuando com a diversão com o Intel Edison e a linguagem Go, esse é um pequeno exemplo de como ler o estado de um botão e usar esse estado para exibir uma mensagem na tela e para acender um LED. Para facilitar o entendimento vamos ver duas formas de implementação, uma com tudo em um único arquivo e outra com um código mais organizado. Primeiro exemplo Crie um arquivo com o nome button.

Usando diff e patch

Esses dois comandos são ferramentas extremamente úteis para o programador, com esses dois comandos fica fácil enviar patchs (remendos) de código para outros programadores sem precisar enviar o código todo. diff Digamos que você tem dois arquivos texto, um original e outro que é uma copia do original com alguma modificação. O comando diff procura por diferenças entre dois arquivos ou mesmo duas arvores de diretórios, a forma mais simples de usar esse comando é a seguinte:

Intel Bong com Edison

Eu quero emitir alertas sonoros no meu projeto de controle IoT e para isso eu precisava entender como a classe buzzer da biblioteca UPM funciona, dava para fazer tudo usando apenas a MRAA afinal é apenas um PWM em um terminal, mas vale a pena usar a UPM pois já vou usar para coisas mais pesadas como controle de periféricos i2c por exemplo. Outro motivo para esse pequeno tutorial é que a UPM tem vários recursos e bons exemplos mas não encontrei nenhum lugar explicando como compilar apenas usando os recursos do próprio Edison com uma simples linha de comando ou no máximo com um pequeno Makefile.

IPFS com Intel Edison

Faz tempo que estou querendo brincar com IPFS, a ideia é usar o Edison como um servidor interno para cache de recursos, experimentar e testar o protocolo. Para ter um pouco mais de espaço de armazenamento adicionei um sdcard que vou usar também para armazenar alguns outros recursos da rede de casa. Se você não sabe o que é e como funciona IPFS, de uma olhada no site oficial em https://ipfs.

SSH sem Senha

Acessar servidores via ssh usando um conjunto de chaves publica/privada é mais seguro e pratico principalmente alem de facilitar a automação de várias tarefas. Criando as chaves Primeiro crie as chaves com o seguinte comando: mkdir ~/.ssh ssh-keygen Você só precisa fazer isso uma vez na maquina cliente. Copiando a chave publica para o servidor É necessário copiar a chave que acabamos de gerar para o arquivo ~/.ssh/authorized_keys no servidor.

HTTPS com Golang no Linux

Gerando as chaves com letsencrypt.org Como eu mencionei no post sobre redirecionar tudo para HTTPS todas as comunicações entre cliente e servidor precisam ser criptografadas e com letsencrypt.org isso pode ser feito sem custo, com código aberto e muita documentação, o que no meu ponto de vista acaba com todas as desculpas para não usar HTTPS. Uma ressalva importante é que podem haver razões legais para preferir usar outra entidade certificadora, por exemplo se eu não estou enganado para ter valor legal no Brasil a entidade precisa ser brasileira.

Redirect to HTTPS

Tudo criptografado! Sem desculpas! Antigamente era caro e inconveniente exigir criptografia para servidores HTTP, você teria que no mínimo gastar alguns trocados com uma entidade certificadora. De um tempo para cá isso não é mais verdade, qualquer um pode usar os certificados da letsencrypt.org, é free, fácil de usar e as ferramentas são de código aberto, então não existe mais desculpa para não usar HTTPS nos seus servidores. Redirecionando para HTTPS Para redirecionar tudo os navegadores para a porta HTTPS eu escrevi um pequeno serviço em Go que simplesmente retorna o código 301 Moved Permanently para o navegador do usuário e indico o novo local apenas substituindo o URL Scheme de HTTP para HTTPS, e deixo o resto do trabalho para o navegador.

Go com Intel Edison

Golang com Intel Edison Como prometido no post sobre a construção do meu IoT home appliance, essa é a forma mais simples e segura de instalar Go no Edison. A maioria dos tutoriais que encontrei na internet pedem para compilar Go, o que dá bastante trabalho e demora. Isso se você não esbarrar com alguma dependência como a versão do git por exemplo, ou então adicionar repositórios que muitas vezes estão desatualizados tornando o Yocto instável.

IoT home appliance

IoT home appliance A ideia de construir um appliance para controlar algumas coisas de casa, automatizar algumas tarefas e criar alguns indicadores não é nada nova, mas é uma daquelas ideias que estou sempre adiando por um motivo ou outro. Até agora eu simplesmente não tinha encontrado uma plataforma de hardware e software que realmente me agradasse. Eu queria compatibilidade com o 80x86 mas não queria um PC ligado o tempo todo e também queria uma linguagem empolgante e moderna mas não queria nada interpretado, e escrever tudo em C é legal mas dá preguiça e aumenta a possibilidade do projeto retornar para a gaveta… Agora finalmente eu acredito que encontrei uma boa combinação com o Edison e Go.