peapescarte / pescarte-plataforma

Plataforma digital PEA PESCARTE
https://pescarte.org.br
BSD 3-Clause "New" or "Revised" License
18 stars 11 forks source link
elixir phoenix-framework phoenix-liveview

PEA Pescarte

ci


Setup Ambiente de desenvolvimento

Para todo tipo de setup, seja local, asdf, docker ou nix, é necessário baixar e instalar a supabase-cli!

No seu primeio uso, é necessário criar uma conta e fazer login no serviço:

supabase login

Com isso, é possível seguir com os guias de instalação local a seguir.

Primeira vez rodando

Este projeto possui três opções para ambientes de desenvolvimento:

  1. Docker
  2. Nix
  3. asdf

Constribuindo com o projeto

Siga nosso tutorial de contribuição em CONTRIBUTING.md

Estrutura do projeto


Guias

Por que usar Elixir?

[Elixir][ elixir-site ] é uma [linguagem funcional][ functional-prog ], criada em 2011 pelo José Valim. Ela é baseada na [BEAM][ beam-meaning ], a máquina virtual do [Erlang][ erlang-meaning ]. O Erlang é conhecido por ser uma linguagem robusta, perfeita para aplicações que necessitam ser tolerantes à falhas, concorrentes - aproveitando todo o potencial da máquina - e escaláveis.

O [Elixir][ elixir-site ] surgiu com a proprosta de modernizar a sintaxe do [Erlang][ erlang-meaning ], que é fortemente herdada de [Prolog][ prolog-meaning ] - uma linguagem do paradigma lógico - e adicionar um gerenciador de depêndencias. Elixir e Erlang não são linguagens funcionais porque querem ser, e sim pois a concorrência e paralelismo num programa [POO][ oop-meaning ], [mutável][ immutability ] e [imperativo][ imperative-prog ], torna o gerenciamento das [threads][ thread-meaning ] algo que beira o impossível.

Vantagens da programação funcional:

  • Imutabilidade
  • Melhor testabilidade
  • Programação declarativa
  • Sintaxe mais humanamente amigável
  • Funções puras, sem efeitos colaterais

Diferença entre Concorrência e Paralelismo em Computação

Imagine uma máquina de venda de refrigerantes, onde apenas uma lata sai por vez, ou seja, apenas uma pessoa pode ser "atendida" após a outra. Com o tempo, forma-se uma fila para comprar refrigerante, onde cada pessoa retira seu item e vai embora. Neste caso, temos um modelo de programação linear.

Fazendo a correlação deste cenário onde a máquina de refrigerante representa a [CPU][ cpu-meaning ] do computador e a fila de pessoas representa a fila de processos os quais essa CPU executa.

Agora imagine que temos 2 (duas) máquinas de refrigerante - ou seja, duas CPUs, ou de forma mais realista, dois núcleos dentro da CPU - e agora cada máquina de refrigerante possui sua própria fila de pessoas - processos da CPU. Neste caso, chamamos esse modelo de computação de [Paralelismo][ paralel-meaning ].

Num último caso, imagine que existe apenas 1 (uma) máquina de refrigerante (CPU) porém essa máquina é capaz de atender múltiplas filas de pessoas (processos), ou seja, mais de uma pessoa pode retirar seu item ao mesmo tempo da máquina. Para esse modelo de computação damos o nome de [Concorrência][ concurrency-meaning ].

A imagem a seguir exemplifica os conceitos de Paralelismo e Concorrência:

BEAM - máquina virtual do Erlang

A [BEAM][ beam-meaning ] é a máquina virtual do [Erlang][ erlang-meaning ] (assim como a [JVM][ jvm-meaning ] do [JAVA][ java-meaning ]). Seu funcionamento básico é: ela divide cada ação do seu programa em pequenas ações, chamados de processos (não confundir com os processos do sistema operacional da máquina local). Esses processos são supervisionados pela própria BEAM, para que quando haja algum erro, o sistema se recupere sozinho e sem atrapalhar os outros processos.

Quando uma aplição Elixir/Erlang é iniciada, a BEAM cria um "Agendador" (Scheduler) para cada núcleo da CPU da máquina. Esses Agendadores também são processos, mas que supervisionam, agendam e gerenciam os outros processos da aplicação. A imagem a seguir exemplifica a crição dos Agendadores: