Cesar Gimenes códigos, artigos, golang e unix

programação, eletrônica, golang, UNIX e muito mais papo nerd

ssh usando chaves de acesso

Acessar servidores via ssh usando um conjunto de chaves publica/privada é mais seguro e pratico principalmente mais seguro, 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 Precisa fazer isso apenas uma vez na maquina cliente e um conjunto de chaves será gerado, você pode definir o nome do arquivo que por padrão seria id_rsa para a chave secreta e id_rsa.

JSON, criando seu próprio Marshal e Unmarshal

Continuando a conversa sobre interfaces e sobre manipulação de JSON tem um recurso muito útil que usamos para ajudar o nosso sistema a falar melhor com o PostgresQL e pREST. O formato de data padrão do Postgres é incompatível com o formato padrão do Go e o nosso sistema usa muito JSON para tanto mandar como receber informações do banco de dados. Ter que lembrar toda hora de fazer o parser da data para o formato correto simplesmente não é pratico, é muito melhor ensinar o Go como lidar com data e hora no bom e velho formato ISO 8601.

interface como um contrato

Falamos desse mesmo tema na nossa lista de exemplos do grupo de estudos sobre interfaces mas vamos isso foi la no longínquo ano de 2016 então vamos tentar fazer um novo exemplo para mostrar como usar uma interface como um contrato que permite você passar tipos diferentes para uma função ou aceitar tipos diferentes em uma interface desde que ele aceite implemente o contrato que em outras palavras significa implementar as funções descritas na interface.

Usando VPN no macOS

Como qualquer ferramenta, usar uma VPN só vai ser efetivo se você souber exatamente qual problema quer resolver com ela. Existem pessoas que querem manter seu trafego pela internet anônimo, outras querem proteger seus dados, e por ai vai. O meu uso é bem especifico, alguns provedores de acesso a internet estão bloqueando portas importantes que eu uso para acessar serviços, por exemplo um famoso provedor daqui de São Paulo esta bloqueando a porta TCP 22 que usamos para acessar o ssh, note que não é o caso do provedor bloquear conexões de entrada que já era comum mas de saída, ou seja usar qualquer serviço que dependa de ssh como o GitHub por exemplo ou acessar uma maquina hospedada na Computer Engine do Google Cloud Platform fica impossível.

interface vazia

Interface vazia é um tipo que aceita qualquer coisa, você pode passar o que quiser como parâmetros de função ou variáveis do tipo interface{}. Parece muito pratico a primeira vista mas quando usamos interface{} estamos jogando pela janela a validação de tipos feita em tempo de compilação e perdemos uma das grandes vantagens de uma linguagem compilada de tipagem forte e estática. E como a checagem de tipo não vai acontecer em tempo de compilação é sua responsabilidade checar se esta recebendo o tipo certo em tempo de execução.

JSON Dicas e Truques

Convertendo e validando JSON É sempre bom saber se o JSON é valido antes, isso poupa tempo de debug procurando um problema que não esta no seu código, para isso uma boa ferramenta on-line é o JSONLint Outra ferramenta on-line muito boa é o JSON-to-Go para converter arquivos JSON em struct Go, ele não vai converter partes repetitivas em sub-structs mas ajuda muito, principalmente quando a estrutura é muito grande e complexa.

MS-DOS, APM com C e Assembly

Para brincar de retro-computação eu uso o VirtualBox com o MS-DOS 6.22 e o DOSBox, os dois funcionam muito bem mas a tela fica ligeiramente melhor no VirtualBox e o DOSBox é mais rápido e fácil para desenvolver e ir rapidamente de um sistema para outro então acabo usando os dois. No DOSBox você pode fechar o simulador simplesmente digitando o comando exit que vai fechar uma sesseão do interpretador de comandos e se for a ultima sessão ela vai fechar o proprio DOSBox, o que é bem legal porque não precisa mover mouse nem nada e é um comportamento mais parecido com um terminal.

Acessando Dropbox com Golang

Precisei criar um pacote Go para ao Dropbox e fazer algumas operações basicas, listar arquivos, upload e download, para isso usei o dropbox-sdk-go-unofficial. Conectando Dropbox Para conectar o dropbox precisamos das credenciais de acesso, a forma mais fácil é criar um token, para isso entre em Dropbox developers apps e crie uma aplicação, então dentro do painel da aplicação crie o token. Configurando o sistema Todas as funções precisam das configurações com as credenciais de acesso e outros parâmetros úteis como por exemplo o nível de log.

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.