Skip to content

peapescarte/pescarte-plataforma

Repository files navigation

PEA Pescarte

lint test


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

  • /assets: Armazena recursos estáticos como imagens, folhas de estilo e scripts que são usados pela aplicação web.
  • /config: Inclui arquivos de configuração para diferentes ambientes de execução do projeto, controlando aspectos como conexões de banco de dados e outras variáveis de ambiente.
  • /guides: Contém documentos e guias auxiliares para novos desenvolvedores, incluindo instruções de configuração, operações comuns e melhores práticas.
  • /lib: O coração do projeto, onde reside a maior parte do código fonte da aplicação, incluindo módulos e funções da aplicação.
    • /pescarte: Módulos e funções que implementam lógica do servidor e interação com o banco de dados. É onde reside a lógica de negócio.
    • /pescarte_web: Onde reside a camada web da aplicação, contendo rotas, páginas, componentes visuais e lógicas aplicadas à UI.
  • /priv: Diretório para dados privados que não são expostos no controle de versão, como scripts de migração do banco de dados.
  • /rel: Contém scripts e configurações necessárias para gerar releases da aplicação, permitindo a compilação de builds que podem ser distribuídas e executadas em ambientes de produção.
  • /test: Inclui testes de software, fundamental para garantir a qualidade e a estabilidade do código através de testes automatizados.

Guias

Por que usar Elixir?

Elixir é uma linguagem funcional, criada em 2011 pelo José Valim. Ela é baseada na BEAM, a máquina virtual do Erlang. 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 surgiu com a proprosta de modernizar a sintaxe do Erlang, que é fortemente herdada de Prolog - 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, mutável e imperativo, torna o gerenciamento das threads 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 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.

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.

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

BEAM - máquina virtual do Erlang

A BEAM é a máquina virtual do Erlang (assim como a JVM do JAVA). 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: