Cesar Gimenes, código, artigos, diversão nerd

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

Uma forma pratica de editar linhas de comando longas no terminal

Para editar linhas de comando longas de forma mais conveniente você pode usar seu editor de texto favorito, para isso basta usar o atalho ^xe (mantenha a tecla control pressionada enquanto pressiona as teclas x e depois e) Caso queira usar outro editor basta preencher a variável EDITOR Por exemplo: EDITOR=nano Outra coisa importante é tomar cuidado se o seu editor gera arquivos de backup ou cache, pode ser uma boa ideia desabilitar esse recurso para evitar que ele faça isso e acabe gerando arquivos perdidos no seu diretório temporário, sem contar a possibilidade de falha de segurança e de ele restaurar o comando antigo atrapalhando seu trabalho no terminal.

Usando gofn para subir containers docker e rodar Clojure e Python

Como carregar containers Docker usando gofn Primeiro instanciamos a struct BuildOptions que vai informar para o gofn os detalhes do container como o nome da imagem por exemplo. buildOpts := &provision.BuildOptions{ ImageName: "nome da imagem aqui", StdIN: "o que você quer passar no stdin para o container aqui", DoNotUsePrefixImageName: true, } Depois instanciamos as opções do container por exemplo se você quer passar variáveis de ambiente.

Compilação Estática Com Golang

Criando executáveis monolíticos Go já faz um bom trabalho compilando estaticamente praticamente tudo, mas dependendo do seu código é necessário incluir mais alguns parâmetros para garantir que seu executável seja totalmente livre de dependências. A primeira coisa é compilar o seu projeto e então inspecionar o binário para ver se ele tem alguma dependência. Para fazer isso no macOS usamos o utilitário otool (object file displaying tool) passando o parâmetro -L (mostra as shared libraries usadas) como no exemplo:

Acessando a porta serial

No canal Test After Deploy tivemos uma ótima explicação do funcionamento do tmux. E para mim uma das coisas mais interessantes é que os desenvolvedores preferiram deixar de fora algumas coisas que tem no screen, como o suporte a telnet e a portas seriais, eles fizeram isso porque acreditam na filosofia UNIX de faça apenas uma coisa e faça bem feito. E na minha opinião eles estão muito certos.

Antigo modulo txt2tags para o Apache

mod_t2t Não dou manutenção nesse código a mais de uma década, estou deixando disponível aqui apenas para deixar a historia registrada e não recomendo o uso do código. A ideia é simples, um módulo para o apache que inclui um handler para arquivos de marcação no formato t2t, fonte do txt2tags. Funciona assim, quando o apache recebe uma requisição de um arquivo com a extensão .t2t ele chama o txt2tags como via uma pequena função em Python que se encarrega de converter tudo para HTML e o resultado é enviado para o cliente.

Um conto de terror para programadores

Já tem muitos anos havia uma lista de discussão sobre Linux bem famosa, todo mundo se reunia por lá. Mas estávamos no inicio e as coisas não eram nem de perto tão robustas como são hoje, listas de e-mails ainda eram o principal meio para trocar informações porque ninguém tinha uma conexão 7x24 como as que temos hoje, você conectava, baixava seus e-mails, lia tudo off-line, respondia, conectava novamente e enviava suas respostas.

Go brincando com bits

Brincando com bits Estou brincando com um projeto de um interpretador BASIC escrito em Go e a saída de video em modo texto segue o padrão de cores do CGA ou seja um byte contem nos quatro bits mais altos o código para a cor do fundo e nos quatro bits mais baixos o código para a cor da fonte. Ou seja 16 cores para as letras e 16 cores para o fundo.

Interpretador BASIC

Por que? Você deve estar se perguntando algo como “por que diabos um interpretador BASIC nos dias de hoje?“. Bom já a algum tempo eu estava querendo uma maquina para ensinar os princípios da computação para minha filha, e precisa ser uma maquina resistente, para resistir a uma criança de 5 anos tem que praticamente ser um tanque de guerra, e não pode ter nada sofisticado em termos de sistema operacional, nada de Linux ou Windows porque a maquina não pode ter um sistema de arquivos montado que precise ser desligado corretamente, precisa ser algo que seja desligado simplesmente cortando o fornecimento de energia e que ligue instantaneamente caindo em um prompt de alguma linguagem simples, sem ícones sem comandos para carregar o interpretador, nada, ligou ta pronto para receber comandos.

Dicas de Go defer

Defer Usar defer e poder adiar um comando para ser executado apenas quando a função terminar não importando a forma como ela terminar é uma grande ideia. Imagine uma função com vários pontos de retorno, seja para retornar erros ou porque ela terminou corretamente, ficar gerenciando fechar arquivos, conexões, mutex e o que mais você estiver usando em cada retorno é entediante e inseguro, você pode esquecer um dos retornos, e pode apostar que esse único retorno que você esqueceu é que vai tirar horas do seu sono.

Go previnindo data race

No projeto do Ricardo Gomes onde ganhamos uma bela performace também acabamos acidentalmente incluindo uma bela data race. Data race acontece quando você tem acessos simultâneos a mesma variável por duas threads diferentes. Mas Go tem ferramentas para tudo, e nessa brincadeira eu aprendi sobre o parâmetro -race. Esse parâmetro faz com que o Go procure por possíveis data races em seu código e pode ser usado com test, run, build e install.