Cesar Gimenes

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

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.

Go carregando arquivos Sped Fiscal 95% mais rápido

No ultimo domingo eu e o Ricardo Gomes da Fix Auditoria fizemos pair programming com a missão de melhorar o parse de EFD Fiscal que ele esta desenvolvendo em Golang. O nosso objetivo era fazer o parser ganhar alguma performace e também resolver alguns pequenos problemas na carga dos arquivos. O que o sistema faz até o momento é o seguinte: Le vários arquivos texto contendo centenas de milhares de registros, parseia esse conteúdo linha a linha e por fim grava tudo no banco de dados.

Assembly 16Bits no macOS com NASM e DOSBox

Brincando com Assembly Brincar com assembly é divertido, só com asm você tem controle total da maquina e de cada aspecto do seu programa, não há nada escondido e o computador vai fazer exatamente o que você mandou (não necessariamente o que você quer). Hoje me dia assembly para mim é um hobby, não estou mexendo com nada tão baixo nível que realmente precise descer até o asm mas como diversão NERD não tem igual e recentemente encontrei meus antigos guias de referencia rápida das interrupções da BIOS e do MS-DOS.