Análise de dados + Site + Banco de Dados? Tudo no isso seu PC e sem precisar instalar o R, Shiny e o Mongo
Texto meu... Já sabe que vou arranjar um motivo para socar Docker nele
foto de capa: "Growth - Earnings Growth - Growth Sign" by gfdnova1 is licensed under CC BY-SA 2.0
Intro
Eu venho citando Docker aqui e ali já faz um tempo só que em execução apenas, sem buildar nada; agora quero mostrar como você pode fazer a sua análise de dados usando R -- uma linguagem de programação voltada para o público estatístico --, com uma interface web e salvá-la em um banco de dados.
A ideia é mostrar que mesmo você estando no Windows, Mac ou Linux, vai poder escrever uma aplicação robusta que faça a análise que queira e fazer ela rodar onde quiser. Ou seja, se você está no Windows, ela vai rodar no Mac e no Linux -- este último é importante caso queira subir na nuvem, principalmente se não for querer usar o shinyapps.io.
E caso queira algum jargão como "micros-serviços", "System As A Service", "cloud-native" e etc... Pode ficar garantido que o seu cargo cult de ficar repetindo eles sem entender uma porr#$ do que significam está garantido com este texto...
"Temple Curch" by buggolo is licensed under CC BY 2.0
Porque o R + Shiny?
"Elementar, meu caro Watson..."
Normalmente os récem-graduados, pesquisadores e estagiários da empresa em que trabalho tem R durante a graduação -- seja em alguma matéria, Iniciação Científica (IC) ou por conta própria.
Todavia o post não é um endosso da escolha dos dois -- até porque eu próprio tenho alguns pontos contra a combinação que pretendo explorar em um texto mais futuro.
"Talk is cheap, show me the code"
Frase do "titio" Linus -- o Trovalds não o Sebastian
"do we write code" by m.gifford is licensed under CC BY-NC 2.0
Caso queira ver a aplicação rodado, tenha o docker
e o docker-compose
instalados na sua máquina -- caso você esteja no Windows ou no Mac, os dois são uma instalação só dentro do Docker Desktop.
- Clone ou baixe este repositório em sua máquina
git clone https://github.com/Fazendaaa/RSMD cd RSMD/
- Uma vez dentro dele basta rodar:
docker-compose up
- Abra seu navegador e digite
localhost
e veja a magia acontecer:
Basicamente o banco de dados armazena todos os valores de número de quebras utilizados para fazer a análise de dados. Isto como uma espécie de log do sistema, também chamada de trilha de auditoria por alguns.
Caso esteja rodando tudo isso em uma rede wi-fi, após descobrir o ip da sua máquina, você pode acessar também o site pelo seu celular:
O importante dessa vizualização no seu celular funcionar bem é que caso você deseje publicar amanhã ou depois o seu site como um "app" para um Google Store, Windows Store ou até mesmo fazer com que fique salvo como um app no seu aparalho iOS , pode dar uma olhada neste plugin Shiny para Progressive Web Apps (PWA).
O cenário citado anteirormente é um claro ponto positivo para o negócio e o produto em si, mas como desenvolvedor ter a segurança de que um tudo o que eu faço vai rodar no sistema do cliente ou no servidor na nuvem -- uma vez que não tenho o R instalado na minha máquina e só desenvolvo usando containers -- é algo que:
- Evita retrabalhos uma vez que o produto que entrego já contem TUDO necessário para rodar -- nada de dores de cabeça perdidas por falta de instalar um pacote R, ou por rodar ele em uma versão errada, quem sabe até mesmo pela falta de uma biblioteca de sistema
- Dá uma segurança de poder trocar de hardware sem perder tempo para configurações
- "Binários" da aplicações em qualquer lugar, graças ao Docker Hub uma vez que a build que faço na minha máquina se torna disponível a todos do meu time independente de onde e qual sistema eles escolham desenvolver
Pontos importantes
"Robot Warning" by cogdogblog is licensed under CC0 1.0
No README.md
do projeto é ressaltado como fazer com que o Mongo do jeito que foi configurado ele tem 'perda de memória recente', ou seja, toda execução ela roda com um BD zerado. Todavia você pode mudar isso com uma linha de configuração.
A abordagem do docker-compose
neste caso tem suas vantagens:
- Evita com que um BD seja instalado na máquina do desenvolvedor
- Evita com que o consumo de internet seja alto caso uma nuvem como o Atlas DB esteja sendo utilizada -- o que ajuda principalmente quem está fazendo remote work por causa da quarentena
- Evita o famoso problema de usar um banco de dados -- agora podendo se aplicar três: um para desenvolvimento, um para homologação e um para produção
Outro ponto importante é que utilizei esta imagem base porque ela vai além do escopo de um demo e se trata de algo disponível e mantido por uma empresa. Caso você queira ver o que há nela para reproduzir e retirar as dependências que não utiliza, por favor, fique a vontade e vá adiante.
Para não ficar MUITO fora do escopo do que o texto se propõe, ainda pretendo explicar como é o fluxo de desenvolvimento desta stack na empresa que trabalho.
Achou que acabou?
"Achou errado, otário" -- INGÁ, Rogerinho
"Every end is a new beginning." by deeplifequotes is licensed under CC BY-NC-SA 2.0
A imagem base do utilizada no projeto possui algumas "vantages". Ela pode ter rodado no seu x86 do seu laptop sem menor dor de cabeça, mas como já pontuado anteriormente, o Docker tem arquiteturas diferentes de CPU. Isto significa que você vai poder rodar este projeto nas seguintes arquiteturas:
- 386
- amd64
- arm/v6
- arm/v7
- arm64/v8
- s390x
- ppc64le
O que para ti agora não pode ter grande diferença, mas recomendo ler as referências do texto citado no link anterior.
Quer rodar em um servidor em casa?
"Orange Pi 2G-IoT" by ghalfacree is licensed under CC BY-SA 2.0
Eu sempre falo de ter seu próprio servidor em casa até para poder ter a sua própria nuvem. Caso a situação não permita fazer isso porque não tem uma máquina velha sobrando em casa, tudo bem porque você pode fazer o seu sistema rodar 24/7, caso tenha os seguintes itens:
- fonte USB -- contando o cabo
- microSD -- uns 8GB pelo menos
- Uma Raspberry Pi -- a Zero W funciona
Caso não os tenha, tudo ficaria em torno de uns 200 reais se pegar de um site como AliExpress. Caso o valor seja muito para você, lembre que muitas nuvens possuem planos de avaliação gratuita de até um ano e caso more em república as vezes pode ver de rachar o custo com seus amigos -- provavelmente vocês gastam já BEM mais por mês mesmo com breja.
Rancher
Caso queira rodar no Rancher basta quebrar os containers do docker-compose.yml
em dois deploys do no seu painel:
- O banco de dados:
- O site:
Logo depois disso o sistema é acessível de qualquer dispositivo dentro do meu wi-fi -- e, teoricamente, fora de casa por Virutal Private Network (VPN) -- através do ip e porta configurada no sevidor.
obs: no caso do Mongo você não vai conseguir rodar em todos os tipos de arquitetura uma vez que ela só suporta três atualmente