Posts
Gerenciamento out-of-band: SQL
A ideia deste post é abordar algumas maneiras de fazer um gerenciamento out-of-band de uma aplicação. E a inspiração veio desta discussão sqlapi: library to connect to your erlang server via SQL:
This library can help you to make an SQL server from your existing server.
For example you have a server and let it be ejabberd. You want to give a list of connected users. Of course you will start from making HTTP endpoint that will reply with JSON with list of users.
Posts
meta-erlang com LTTng
Neste post vamos ativar o suporte LTTng na BEAM VM usando o projeto Yocto com a layer meta-erlang. O objetivo é demonstrar como podemos fazer a análise de um problema utilizando esta abordagem.
Caso nunca tenha ouvido falar do projeto Yocto, tenha em mente que os conhecimentos usados aqui funcionam para qualquer distribuição Linux.
Basicamente vamos explorar quatro grandes blocos:
BEAM VM, com suporte ao LTTng habilitado Yocto Project, onde vamos usar uma distro básica com Erlang Tracecompass, um plugin do projeto Eclipse para visualização e monitoramento de traces Um código de exemplo em Erlang, apresentando algum problema no qual podemos visualizar com o LTTng.
Posts
Ativando traces usando LTTng
Neste post vamos descobrir como podemos instrumentar aplicações Erlang/Elixir dinamicamente.
Trace dinâmicos Um trace dinâmico é um conjunto de bibliotecas nas quais permitem instrumentar partes do sistema em tempo de execução, com o objetivo de extrair métricas de performance, ajudando na resolução de problemas.
Geralmente estes traces possibilitam uma visão fim-a-fim envolvendo a aplicação e chamadas de sistema.
Trace BEAM Existem três modos de utilizar traces dinâmicos no BEAM. Sendo dependente do Sistema Operacional:
Posts
Opções para repositório de pacotes hex.pm
Quando desenvolvemos em Elixir ou Erlang, de forma open source, geralmente publicamos o código em um repositório de código público e também divulgamos no hex.pm para que outros usuários possam encontrar e usar.
Mas como podemos tornar o processo de publicação eficiente dentro de uma empresa ? A seguir, algumas formas de resolver.
Em diversas empresas, após construir alguns códigos, isolar em funcionalidades específicas e transformar em bibliotecas Elixir ou Erlang.
Posts
Erlang Ecosystem Foundation
Este post é uma pequena nota sobre Erlang Ecosystem Foundation. Basicamente é uma organização sem fins lucrativos onde um conjunto de membros trabalham em diversos grupos de trabalho.
Os seguintes grupos de trabalho foram definidos inicialmente:
Marketing Fellowship Security Observability Sponsorship Erlang Ecosystem Foundation Building and Packaging Education, Training, & Adoption Documentation Qualquer pessoa ou empresa pode fazer parte da EEF gratuitamente. Podendo, se quiser, fazer doações de horas trabalhando em determinados projetos de algum grupo de trabalho ou ajudando financeiramente a EFF.
Posts
Polibot
polibot é um pequeno projeto demonstrando como testar um equipamento fictício utilizando Erlang e o framework common_test.
Durante este post, vamos exercitar um cenário e construir uma solução para testes sistêmicos.
O código do projeto foi disponibilizado aqui: polibot
Geometric Box System O nome do equipamento é Geometric Box System (GBS) e possui três principais tipos de hardwares, onde cada hardware é composto por uma placa processadora e alguns devices para realizar determinadas operações.
Posts
Trace instrumentando o código com dbg
Este post é sobre como instrumentar uma aplicação e coletar traces para posterior analise. A ideia veio deste post: Erlang trace files in Wireshark e também deste código hackney_trace.erl.
Aqui estamos falando de como utilizar a BEAM VM para capturar traces da aplicação. Podemos usar trace nas seguintes situações:
low level information próprio para debug do software queremos localizar extamente o ponto que ocorre algum evento as informações são destinadas para o desenvolvedor adicionar e remover trace devem ser rápidos Um módulo em Elixir pode ser construído para instrumentar uma aplicação com pontos de trace.
Posts
Vamos testar: exunit
ExUnit é o framework padrão quando falamos de testes em Elixir. Ele é simples e ao mesmo tempo poderoso.
Todos os testes em Elixir ficam separados da implementação, geralmente no diretório test. Todos os arquivos teste diretório que seguem o padrão de nome: <nome do teste>_test.exs são compilados e executados como testes pelo comando mix test.
Cada teste é implementado dentro de um módulo normal no usa as macros contidas no ExUnit.
Posts
Elixir: mocks, stubs
As duas abordagens abaixo servem para configurar um projeto para utilizar mocks durante os testes.
Abordagem 1: mocks sem ajuda O arquivo mix.exs deve ser ajustado acrescentando um diretório adicional para a propriedade elixirc_paths:
def project do [app: :coffee_fsm, version: "0.1.0", elixir: "~> 1.4", elixirc_paths: elixirc_paths(Mix.env), build_embedded: Mix.env == :prod, start_permanent: Mix.env == :prod, deps: deps()] end def application do # Specify extra applications you'll use from Erlang/Elixir [extra_applications: [:logger]] end defp elixirc*paths(:test), do: ["lib","test/support"] defp elixirc_paths(*), do: ["lib"] Quando MIX_ENV for test a função elixirc_paths/1 retorna uma lista com dois diretórios onde existe código Elixir para ser compilado.
Posts
Erlang: bad parts
Alguns comentários sobre as questões contidas nesta apresentação On Network Configuration, Distributed and Concurrent Programming with Erlang Chalmers sobre o tema “Erlang bad parts”:
The syntax
Pessoalmente, eu acho a sintaxe da linguagem (tanto Erlang quanto Elixir) bem prática. Mas ao mesmo tempo, se você comparar com qualquer outra linguagem (exemplo: C ou Javascript) vai notar algumas construções esquisitas.
Mas, depois de um tempo tudo fica confortável e prático. A dica aqui é não focar na sintaxe, busque entender o paradigma funcional e como a sintaxe ajuda nisso.
Posts
Vamos testar: lux
lux é um framework para automação de testes utilizando o estilo Expect (https://en.wikipedia.org/wiki/Expect, https://core.tcl-lang.org/expect/index).
A ideia básica é a definição de um script contendo os comandos usados para testar alguma aplicação e tambem colocando algumas marcações no script que irão controlar o lux.
Este framework provê mecanismos de fazer uma automação de testes, ou seja, aqueles comandos que são utilizados para testar alguma aplicação podem ser escritos em uma forma bem simples nos quais o lux vai controlar a execução.
Posts
Vamos testar: common_test
common_test é uma das aplicações mais interessantes que acompanha a distribuição Erlang/OTP. Digo isso pois os casos de uso que a ferramenta resolve são baseados em casos reais da indústria. Podemos realizar vários tipos de testes, por exemplo:
black-box, utilizando algum protocolo de comunicação: ssh, netconf, telnet, ftp white-box, para testar aplicações escritas em Erlang ou Elixir, fazendo chamadas reais unit tests, há vários projetos que utilizam somente o common_test para implementar todos os testes necessários É possível criar suites de testes com várias formas de execução dos testes e organização.
Posts
Vamos testar: eunit
eunit é um framework para testes leves e parte da distribuição Erlang/OTP padrão.
Os testes podem ser definidos dentro de cada módulo, dentro de blocos
-ifdef(EUNIT). % test code here ... -endif. Ou em arquivos separados, geralmente dentro do diretório test, em uma base de código.
A filosofia do framework segue a linha XUnit, mas adaptado para o conceito funcional.
Vejo duas principais vantagens para definir os testes dentro de módulos:
Posts
Melhores práticas para começar um projeto
Algumas dicas e guias gerais para começar um projeto.
Defina um repositório git git init já no começo do projeto ajuda a manter o histórico das mudanças de forma consistente.
Crie o arquivo .gitignore No arquivo .gitignore, colocamos todos os arquivos temporários do projeto e também resultados de compilação.
Utilize editorconfig editorconfig é uma forma de padronizar o estilo de código para alguns tipos de arquivos. A maioria dos editores suporta, usando plugins ou nativamente.
Posts
meta-erlang
meta-erlang é uma layer compatível com o Yocto Project e Openembedded. A intenção é trazer Erlang e Elixir como alternativas para o desenvolvimento de aplicações embarcadas.
A layer oferece suporte para cross-compilação de projetos Erlang e Elixir para qualquer BSP suportado pelo Yocto.
Também existe uma layer chamada meta-axon no qual é uma layer que faz uso da meta-erlang, como se fosse um projeto real.
Criei uma documentação oficial do projeto aqui no qual pode ser utilizada para os primeiros passos.