Novos projetos open-source: GoCI e GoHC (integração contínua e healthcheck)

Olá pessoal,

Gostaria de compartilhar com vocês os meus dois novos projetos open-source em Go (golang).

1 – GoCI

O GoCI é um projeto para integração contínua de fácil instalação, manutenção e configuração.

Com ele você pode criar suas tarefas de integração através de execuções em CLI ou através de arquivos Javascript.

A inicialização do projeto é feita por dois arquivos principais, o config.ini e o arquivo do seu projeto em JSON, que podem ser vários na verdade.

O GoCI exporta algumas variáveis pro Javascript, a fim de que você possa implementar sua lógica de teste, deploy ou qualquer outra tarefa e ainda controlar cada um destes objetos. Ao manipular estes objetos você acompanha todos os resultados em tempo real através da interface web do GoCI, como os outputs, a barra de progresso, a duração da execução, etc.

Cada tarefa pode mostrar resultados em diversas abas, a aba principal é a Console, onde o output geral aparece ali, além do output normal, você tem output de erro, sucesso, alerta, etc.

Cada tarefa do seu projeto pode ter vários passos (steps), sendo cada passo baseado em um plugin, que como falamos, podem ser “cli” ou “js”.

Porém o projeto não se limita somente a desenvolvimento ou testes e deploy de uma aplicação. Você pode fazer o que quiser dentro dele. Você pode criar mais plugins, caso queira. Eu tenho algumas tarefas por exemplo, que enviam push pro meu device de teste, tenho outra que baixa os arquivos de linguagens atualizados da ferramenta de localização e coloca dentro do projeto.

O projeto vem com uma pasta “extras/sample” com os arquivos de exemplo, embora sejam bem simples.

Toda a interface foi pensada para funcionar perfeitamente em smartphones, tablets ou PCs.

Segue algumas imagens:

Link para o projeto:

https://github.com/prsolucoes/goci 

 

2 – GoHC

O GoHC é um sistema passivo de healthcheck com suporte a notificações quando entra em modo warning ou error. Ele é passivo por não ser de sua responsabilidade realizar a operação de validação, pois criaria um limite e o propósito do projeto é poder criar healthcheck para qualquer coisa que possa entrar em contato com o servidor onde estiver rodando.

Exemplos do que você pode fazer com ele:

  1. Validar se uma URL/servidor/IP está ativo.
  2. Medir tempo de determinadas operações, como o intervalo de tempo de processamento do pagamento do cliente com o seu gateway de pagamento. Você pega este intervalo em sua aplicação e envia pro healthcheck validar se ele está dentro do range de sucesso, alerta ou crítico/erro/falha.
  3. Validar de a quantidade de memória/cpu/disco/network está dentro de um range.
  4. Validar se a quantidade de humidade de uma planta está dentro de um range e emitir um alerta se estiver em nível crítico.

Com este sistema de healthcheck você possui 3 formas de validar a “saúde” do que você precisa monitor e esta validação pode ser automática dentro dos 3 ranges possíveis (sucesso, alerta, erro/falha) ou manual, onde você diz qual é o status manualmente.

  1. Ping – é o tipo mais simples, você chama o healthcheck e ele de acordo com o último ping enviado e o atual verifica em qual das áreas do range você está e envia alertas ou não – mas é você quem diz o tempo do ping para cada range.
  2. Range – é o tipo mais específico, onde você especifica as áreas dos ranges e ao receber um range qualquer, ele valida em qual dos ranges você está baseado no range enviado.
  3. Manual – é o tipo onde você diz o status diretamente, não tem informação de ping ou range neste tipo, o status que você enviar é o que ele vai assumir e pode enviar alertas também caso você especifique.

Tudo isso pode ser acompanhado através de uma interface web bem amigável e que foi pensada para funcionar perfeitamente em smartphones, tablets ou PCs.

Existe na interface hoje o modo lista de healthchecks e o modo dashboard, dependendo de como você quer ver os healthchecks você pode optar por um ou por outro. Se você quer deixar numa televisão, sugiro o modo dashboard.

Os alertas são baseados em plugins. Hoje eu criei apenas alguns, mas essenciais.

  1. CLI – executa algo no servidor no CLI
  2. SendGrid – envia um email usando o sendgrid
  3. PushBullet – envia um push usando o pushbullet
  4. Http Get – faz requisição HTTP GET em uma URL
  5. Slack – envia via webhook uma mensagem para o serviço Slack

A inicialização do projeto é feita por dois arquivos principais, o config.ini e um arquivo JSON chamado healthchecks.json com a lista de seus healthchecks e plugins de alerta.

O projeto vem com uma pasta “extras/sample” com os arquivos de exemplo, embora sejam bem simples.

No arquivo config.ini, você pode especificar uma propriedade chamada warmTime, que define um tempo após a inicialização para o sistema começar a processar os healthchecks.

Segue algumas imagens:

Segue o link do projeto:

https://github.com/prsolucoes/gohc

 

É isso pessoal, espero ter ajudado alguém com estes projetos.

Obrigado e até o próximo post pessoal.

OSX – Removendo todos os arquivos .DS_Store

Olá pessoal,

Um problema muito comum em meio aos usuários de MAC/OSX, principalmente para quem desenvolve, são os famosos arquivos .DS_Store.

Para remove-los completamente de uma pasta específica basta uma linha de comando.

Abra o seu Terminal, entre na pasta raiz do seu projeto ou na pasta raiz que você deseja limpar e execute:

find ./ -name ".DS_Store" -depth -exec rm {} \;

Caso você queira remover de todo o seu computador, use com o sudo e insira a senha do seu usuário, se solicitado:

sudo find / -name ".DS_Store" -depth -exec rm {} \;

Bom, espero ter ajudado com esta dica.

Obrigado e até o próximo post pessoal.

Android Studio – Corrigindo o erro “Unable to run mksdcard SDK tool.”

Olá pessoal,

Para aqueles que como eu, estão tendo problemas na hora de usar o Android Studio no Ubuntu ocorrendo o erro “Unable to run mksdcard SDK tool.”, segue uma dica bem simples. Instale as dependências seguintes e magicamente tudo estará resolvido.

sudo apt-get install lib32z1 lib32ncurses5 lib32bz2-1.0 lib32stdc++6

Em alguns casos, ocorrerá um erro ao instalar a dependência lib32bz2-1.0. Basta executar o mesmo comando sem esta dependência:

sudo apt-get install lib32z1 lib32ncurses5 lib32stdc++6

 

Bom, espero ter ajudado com esta dica.

Obrigado e até o próximo post pessoal.

OSX – Deixando o seu terminal colorido e com suporte ao Git

Olá pessoal,

Esta dica é bem simples e talvez ajude bastante no dia-a-dia em seu desenvolvimento, caso utilize o terminal do OSX.

Realizando estes processos seu terminal ficará colorido, facilitando e leitura e ainda aparecerá o nome da branch em que você está, caso utilize o Git.

Siga os passos:

1 – Edite o arquivo .bash_profile digitando no terminal:

nano ~/.bash_profile

2 – Adicione as linhas:

export CLICOLOR=1
export LSCOLORS=ExFxBxDxCxegedabagacad
export PS1="\[\033[36m\]\u\[\033[m\]@\[\033[32m\]\h:\[\033[33;1m\]\w\[\033[m\]\$(parse_git_branch) $ "

parse_git_branch() {
    git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/ (\1)/'
}

3 – Salve o arquivo com CONTROL + O

4 – Feche o terminal e abra-o novamente ou caso queira manter a sessão com as modificações, execute:

source ~/.bash_profile

Obs: Esta dica funciona também com o iTerm2.

 

Bom, espero ter ajudado com esta dica.

Obrigado e até o próximo post pessoal.

Google Apps Scripts – Ferramenta do Google para integração entre seus apps, automatização de tarefas e aplicações na loja do Google Chrome

Olá pessoal,

O Google sempre surpreendendo e melhorando cada vez mais, lançou uma ferramenta chamada Google Apps Script.

Se eu pudesse comparar com algum produto, iria selecionar o VBScript da Microsoft integrado ao Office para este fim, porém o GAS (Google Apps Script) vai bem mais além, pois você pode automatizar qualquer coisa nas ferramentas do Google (docs, sheets, calendar, etc), acessando todas as ferramentas cloud do Google e usando JavaScript para tal.

Será difícil colocar aqui todos os detalhes, mas vou destacar aqueles que me chamaram a atenção:

  1. Editor de códigos JavaScript do Google com Auto Complete (online)
  2. Integração com todos os produtos do Google (docs, sheet, drive, calendar, etc)
  3. Integração com cloud (ex: banco de dados key-value)
  4. Editor visual de formulários (RAD)
  5. Reaproveitamento do script em todas as ferramentas (em qualquer ferramenta você pode chamar o script se houver esta opção, eles não são exclusivos de uma ferramenta, mas ficam gravados em sua conta)
  6. Publicação da aplicação na loja do Google Chrome (Google Chrome Web Store)

 

Fazendo alguns testes foi bem simples, por exemplo, exibir uma mensagem em um novo menu que criei no Google Spreadsheet:

O seu script pode se tornar um código para diversos tipos de aplicação no ambiente do Google, como pode ser visto na imagem abaixo:

É claro que este teste foi bem simples, mas você pode estudar toda a documentação e fazer seus testes, coletando dados de outras aplicações e montando aquilo que vai te ajudar no dia-a-dia ou automatizar o seu trabalho. Acesse o link da documentação completa em:

https://developers.google.com/apps-script/

Vou deixar também o código do teste que fiz:

function menuMostraMsg() {
  Browser.msgBox("Até funciona!")
}

function menuSobre() {
  Browser.msgBox("Visite: pcoutinho.com")
}

function createMenu() {
  var menuEntries = [
    { name : "Clique Aqui!", functionName : "menuMostraMsg" },
    null,
    { name : "Sobre", functionName : "menuSobre" }
   ];
  
   SpreadsheetApp.getActiveSpreadsheet().addMenu("Meu Menu", menuEntries );
}

function onOpen(e) {
  // quando todo os script é carregado
  createMenu(); 
}

function onInstall(e) {
  // quando alguém instala o add-on
  onOpen(e); 
}

function onEdit(e) {
  // quando alguém edita algum dado
}

 

Bom, espero ter ajudado com estas dicas.

Obrigado e até o próximo post pessoal.

Docker Toolbox – Nova ferramenta que ajuda na instalação e configuração do ambiente em forma de instalador

Olá pessoal,

O Docker vem ganhando espaço em todo o mundo com a novo método de criação de ambiente que usa um recurso do link chamado “container”. Veja aqui. É uma virtualização no nível do sistema operacional que torna capaz rodar múltiplos e isolados sistemas Linux (containers) em um único host com Linux.

Por ser um recurso exclusivo do Linux, sistemas como OSX e Windows precisam de uma máquina virtual com Linux por trás dos panos para que através desta máquina o Docker funcione.

Até ai nenhum problema, senão fosse pelos passos que precisam ser dados no OSX e Windows para que todo o ambiente funcione perfeitamente. Não é nada difícil, mas é um trabalho braçal. Pensando em facilitar a adoção do Docker e também em ajudar os usuários a montar este ambiente de forma mais rápida e prática, foi lançada a ferramenta “Docker Toolbox”. É uma ferramenta visual para OSX e Windows que já instala e configura o ambiente para você.

Ela pode ser baixada gratuitamente através do link:

https://www.docker.com/products/docker-toolbox

docker-toolbox-instalador

Eu instalei em meu Mac e após seguir os passos do instalador (next, next, finish), já estava tudo funcionando, bastava abrir o programa “Docker Quickstart Terminal” que vem no pacote que ele já montava tudo e já podia começar a usar.

Dependendo do seu container e da sua necessidade, pode ser que já exista um pronto no Docker Hub:

https://hub.docker.com/

 

Bom, espero ter ajudado com estas dicas.

 

Obrigado e até o próximo post pessoal.

Golang – Ferramenta para upload do arquivo DSYM para o Fabric/Crashlytics

Olá pessoal,

Lancei uma ferramenta para enviar o arquivo DSYM (arquivo contendo os “debugs symbols” gerado ao compilar uma aplicação para OSX ou iOS) para o Fabric/Crashlytics manualmente, via linha de comando.

Você pode integrar esta ferramenta em seu processo de deploy ou integração contínua, usando o Jenkins ou Fastlane por exemplo.

Uma dica para quem vai usar com o Fastlane é usar o comando abaixo para executar a ferramenta:

sh "cd .. && fabric-upload-dsym --bundleid=[YOUR-APP-BUNDLE] --fabricapikey=[YOUR-FABRIC-API-KEY] --file=[ZIPPED-DSYM-FILE]"

 

Obrigado e até o próximo post pessoal.

Golang – Nova versão 1.6 (suporte nativo a HTTP2)

Olá pessoal,

No dia 17 de fevereiro saiu a versão 1.6 da linguagem Go (Golang).

Em termos de velocidade o Google se empenhou na versão 1.5.1 em deixar ela o mais rápido possível e o garbage collector o mais otimizado também, então com relação a isso, não mudou tanto.

Os destaques desta nova versão ficam por conta dos itens:

  • Suporte ao protocolo HTTP2, habilitado por padrão
  • Suporte ao recurso “vendor”, que era experimental até então, para as bibliotecas
  • Em aplicações onde há um maior consumo de memória, a versão 1.6 está mais rápida
  • O algoritmo de ordenação da função “sort.Sort” está 10x mais rápido, porém pode causar alguma incompatibilidade, pois os itens não ficam na mesma ordem (use “sort.Stable” para manter a ordem original)
  • Algumas melhorias também ocorreram na parte de templates do Go

A lista completa você pode conferir aqui:

https://golang.org/doc/go1.6

 

Obrigado e até o próximo post pessoal.

 

 

Xcode – Corrigindo o erro “This certificate has an invalid issuer”

Olá,

A Apple possui um certificado “pai” ao qual sem este certificado ou com este certificado expirado, todos os outros se tornam inválidos.

O certificado “pai” conhecido como “WWDR Certificate” pode ser baixado gratuitamente e ao executá-lo, ele já deve ser instalado em seu KeyChain automaticamente.

Recentemente todo mundo começou a receber a mensagem de que o seu certificado estava inválido com a mensagem “This certificate has an invalid issuer” simplesmente “do nada”.

Mas na verdade o que aconteceu é que o “WWDR Certificate” expirou e agora há a necessidade de baixarmos o novo certificado com uma nova expiração. Neste novo certificado a expiração ocorrerá em 2023.

Para baixar acesse o link:

https://developer.apple.com/certificationauthority/AppleWWDRCA.cer

Basta executá-lo e o problema será resolvido.

Obrigado Vinícius (@vibrito) pela dica.

Obrigado e até o próximo post pessoal.

Golang – LogStack – Nova ferramenta criada para armazenar, pesquisar e coletar estatísticas de Logs

Olá,

A um tempo atrás lancei uma nova ferramenta chamada LogStack que me ajudou muito a fazer o debug de aplicações web e mobile.

Esta ferramenta é um centralizar de logs que geralmente são exibidos no console das ferramentas, porém, como cada ferramenta tem uma forma de exibir isso e as vezes é muito ruim e dificultoso ficar observando e lendo na ferramenta ou na IDE, o LogStack vem para generalizar isso e deixar o desenvolvedor visualizar tudo no navegador em tempo real e com uma interface bem amigável, capaz de se adequar a um smartphone, tablet ou desktop (resumindo: layout responsível).

Agora, tecnicamente a ferramenta conta com tecnologias bem interessantes para estudo: Golang + Elasticsearch ou MongoDB.

Você pode através do arquivo de configuração escolher qual datasource usar e o LogStack possui uma API para cada ação, seja inserir, coletar estatísticas, pesquisar, etc.

Baixe a ferramenta aqui:

https://github.com/prsolucoes/logstack

Algumas imagens:

 

 

Obrigado e até o próximo post pessoal.