Cesar Gimenes

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

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.

Go percorrendo a árvore de diretórios

Eu estava com um problema de ter que digitar o caminho completo para chegar no diretório do projeto que eu queria trabalhar, esta tudo no GOPATH e os caminhos geralmente são longos. Tudo bem digitar todo o caminho uma vez ou outra, mas como estou trabalhando todo dia com Go e em mais de um projeto ter que digitar o caminho completo rapidamente se torna uma tarefa entediante. E as vezes eu nem sei onde exatamente o projeto esta, as vezes não lembro alguma parte do path como o nome do autor ou se esta no GitHub ou em outro repositório.

Como usar goConfig

goConfig goConfig é um pacote para tornar fácil implementar as três principais formas de configuração de um sistema, ou seja, ler parâmetros da linha de comando, variáveis de ambiente e arquivos de configuração. A ideia é tornar a lentura da configuração bem simples porque a tendência a complexidade do seu sistema aumentar e não tem porque ter mais complexidade só porque você quer adicionar mais um parâmetro ou mais uma variável de ambiente.

Go lendo arquivo com bufio

Lexer, tokenizer, scanner… Tenho vários projetos que poderiam se beneficiar de um lexer genérico e escrito em Go, então resolvi brincar com a ideia de escrever o meu próprio. Eu sei, eu poderia ter usado text/scanner mas depois de alguns testes achei ele difícil de expandir, também poderia ter usado um dos muitos que estão prontos por ai, mas não encontrei nada que eu não precisasse aprender uma nova ferramenta alem da linguagem ou mergulhar na mente do criador original para entender o que ele queria fazer.

go usando time e canais

Pacote time Eu sou o primeiro a torcer o nariz para o pacote time, principalmente pela maneira como a formatação de datas é feita, mas um recurso muito interessante é poder criar um canal que retorna a cada X tempo e assim podemos executar ações periódicas. Veja como isso é feito Primeiro criamos um canal que vai retornar a cada X tempo, no caso do exemplo 300 milissegundos.