#elixir-e-erlang
26 posts
2017 - junho
2 posts2016 - dezembro
3 posts2016 - fevereiro
1 post2015 - dezembro
8 posts- Ex Pusher Lite - Parte 2 - O Primeiro Core Funcional!
- Ex Pusher Lite - Parte 1: Phoenix Channels e aplicações Rails
- Ping Pong de Erlang (tut15) em Clojure e Elixir
- Ex Manga Downloadr - Parte 5: Deixando mais robusto!
- Ex Manga Downloadr - Parte 4: Aprendendo Através do Refactoring
- A Obrigatória "Flame War": Phoenix vs Node.js
- Ex Manga Downloadr - Parte 3: Suporte ao Mangafox!
- O Obrigatório "Por Que Elixir?" - Visão Pessoal
2015 - novembro
8 posts- "Yocto Services"! E o Meu Primeiro Mês com Elixir!
- Elixir 101 - Apresentando a Sintaxe
- Exercício ExMessenger: Entendendo Nodes em Elixir
- Observando Processos em Elixir - The Little Elixir & OTP Guidebook
- Phoenix "15 Minute Blog": comparação com Ruby on Rails
- Ex Manga Downloadr - Parte 2: Poolboy ao resgate!
- Ex Manga Downloadr, um exercício com Elixir
- Minha primeira semana aprendendo Elixir
2015 - outubro
3 posts2015 - junho
1 post2017 - junho
2 postsEx Manga Downloadr - Parte 7: Lidando Corretamente com Grandes Coleções
Depois de o Flow levar mais de 3 minutos, troquei-o por Task.async_stream e recuperei os tempos anteriores. A solução simplifica o código, mas reduz o controle e deixa os downloads sem retry.
Ex Manga Downloadr - Parte 6: A Ascensão do FLOW
Troquei Poolboy e um GenServer customizado por Flow para simplificar o scraping paralelo. O código ficou mais legível, mas levou mais de 3 minutos, contra menos da metade na versão anterior.
2016 - dezembro
3 postsEx Pusher Lite - Parte 3 - Uma Solução Completa
Montei um serviço inspirado no Pusher com Phoenix e Elixir, conectando uma aplicação Rails por WebSockets e API e distribuindo mensagens entre nós. A solução cobre muitos casos, mas ainda não é segura para produção.
Aplicativo Elixir Phoenix em Deploy num Setup com Balanceamento de Carga no DigitalOcean
O autor monta no DigitalOcean um cluster Phoenix com dois nós, HAProxy e PostgreSQL, e consegue operar WebSockets distribuídos com Erlang. O sistema funciona, mas o edeliver é lento e o login ainda falha de forma intermitente.
Coherence e ExAdmin - Devise e ActiveAdmin para Phoenix
Coherence e ExAdmin aproximam o Phoenix de Devise e ActiveAdmin, enquanto um Plug simples acrescenta autorização para a área administrativa. Eles facilitam o começo, mas não eliminam a curva de aprendizado de OTP e sistemas distribuídos.
2016 - fevereiro
1 postOperador Pipe do Elixir para Ruby: Chainable Methods
A gem Chainable Methods passa o retorno de cada chamada como primeiro argumento da próxima, deixando transformações Ruby mais legíveis e testáveis. O experimento usa method_missing e prioriza expressividade, não velocidade.
2015 - dezembro
8 postsEx Pusher Lite - Parte 2 - O Primeiro Core Funcional!
A Parte 2 transforma o ExPusherLite em um core Phoenix funcional, com apps, keys e secrets, autenticação, canais, broadcasts e deploy no Heroku. Os testes foram rápidos, mas a segurança ainda é frágil.
Ex Pusher Lite - Parte 1: Phoenix Channels e aplicações Rails
A Parte 1 substitui o Pusher por um servidor Phoenix com Channels, WebSockets e Basic Auth, mantendo o cliente Rails e o SuckerPunch. O clone funciona sob controle próprio, mas ainda é incompleto.
Ping Pong de Erlang (tut15) em Clojure e Elixir
Um exercício de Ping Pong aproxima Erlang, Clojure e Elixir, destacando pattern matching, macros e a AST da BEAM. O autor reconhece o poder das três linguagens, mas ainda prefere Erlang aos parênteses Lisp.
Ex Manga Downloadr - Parte 5: Deixando mais robusto!
Timeouts do MangaFox expose a flaw in Ex Manga Downloadr’s Workflow. O autor usa Task.Supervisor e retries limitados para capturar erros do HTTPotion, deixando a refatoração com GenServer como dívida técnica.
Ex Manga Downloadr - Parte 4: Aprendendo Através do Refactoring
O refactoring do Ex Manga Downloadr troca seis blocos repetidos por macros, melhora o uso do Floki e usa testes online para validar parsers. O projeto chega à versão 1.0.0 com dois arquivos a menos.
A Obrigatória "Flame War": Phoenix vs Node.js
Num benchmark assumidamente injusto com Siege, Node.js leva vantagem no aquecimento I/O, mas Phoenix suporta melhor as requisições que bloqueiam por um segundo conforme a concorrência aumenta.
Ex Manga Downloadr - Parte 3: Suporte ao Mangafox!
O Ex Manga Downloadr passa a baixar do Mangafox com parsers próprios, seleção dinâmica da fonte, descompressão gzip via zlib e retomada de downloads. Reduzir o pool ajuda, mas o site segue instável.
O Obrigatório "Por Que Elixir?" - Visão Pessoal
O autor explica por que pretende combinar Rails e Phoenix e defende Elixir para sistemas concorrentes e distribuídos. Imutabilidade, schedulers e supervisores tornam a tolerância a falhas mais acessível.
2015 - novembro
8 posts"Yocto Services"! E o Meu Primeiro Mês com Elixir!
Após um mês intenso estudando Elixir, o autor propõe pensar nos processos BEAM como “Yocto Services”: GenServers supervisionados que falham isoladamente, trocam mensagens e conversam entre nós.
Elixir 101 - Apresentando a Sintaxe
Com exemplos do ExMangaDownloadr, apresento pattern matching, recursão, Lists, Tuples, Keyword Lists e o pipe operator para mostrar como Elixir torna as primitivas do Erlang acessíveis.
Exercício ExMessenger: Entendendo Nodes em Elixir
Refatorei um chat de terminal pré-1.0 para um Umbrella app e explorei Nodes, nomes, cookies e GenServers remotos. O resultado se aproxima mais de peers distribuídos que de um cliente TCP e servidor tradicional.
Observando Processos em Elixir - The Little Elixir & OTP Guidebook
Com GenServer, Supervisor e Observer, mostro um worker sendo reiniciado, um pool de 5 processos sendo reposto e o runtime permanecendo ativo, embora o estado do worker seja perdido.
Phoenix "15 Minute Blog": comparação com Ruby on Rails
Comparo um blog com nested resources em Phoenix e Rails, de Mix a ExUnit. Phoenix é mais explícito e promissor para microserviços concorrentes, mas ainda não substitui o ecossistema Rails.
Ex Manga Downloadr - Parte 2: Poolboy ao resgate!
Troquei lotes manuais de 80 requisições por um Worker GenServer com Poolboy e um Supervisor, usando um pool de 50 processos. O download de Akira, com cerca de 2.200 páginas, levou menos de 50 segundos, limitado pelo MangaReader.
Ex Manga Downloadr, um exercício com Elixir
Construí um scraper em Elixir que parseia o MangaReader, baixa imagens com Tasks paralelas e gera PDFs de 250 páginas para o Kindle. O pipeline funciona, mas timeouts limitam o volume a cerca de 80 requisições.
Minha primeira semana aprendendo Elixir
Em uma semana e cerca de 42 horas, aprendi os fundamentos de Elixir, processos e OTP, embora ainda não me sentisse totalmente confortável. Minha trilha passa por Programming Elixir, Elixir Sips e exercícios antes do Phoenix.
2015 - outubro
3 postsPhoenix Experiment: Holding 2 Million Websocket clients!
Um benchmark de Chris McCord levou o Phoenix a 2 milhões de clientes WebSocket em uma máquina de 40 cores e 128 GB. Broadcasts para um tópico levavam de 1 a 3 segundos, com o limite em ulimit.
Personal Thoughts on the Current Functional Programming Bandwagon
Programação funcional ajuda a raciocinar sobre transformações imutáveis e concorrência, mas não é o fim dos paradigmas. Elixir é a aposta pessoal do autor, enquanto linguagens híbridas devem dominar o mainstream.
How Fast is Elixir/Phoenix?
Em um teste no Heroku gratuito, o Phoenix levou cerca de 17 a 25 ms para servir uma página simples, mas chegou a 15 segundos ao buscar 1.000 linhas sob carga. O gargalo estava no PostgreSQL.
2015 - junho
1 post[Primeiros Passos] Elixir 1.0 + Phoenix Framework 0.13
O primeiro CRUD com Elixir 1.0, Phoenix 0.13 e PostgreSQL mostra um framework parecido com Rails, mas ainda imaturo. APIs concorrentes e recursos real-time eram promissores, não prontos para produção.