Análise de dados + Site + Banco de Dados? Tudo no isso seu PC e sem precisar instalar o R, Shiny e o Mongo

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...

2097014897_aa2641d70f_o.jpg

"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

48659436006_616e00e4f1_o.jpg

"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.

  1. Clone ou baixe este repositório em sua máquina
    git clone https://github.com/Fazendaaa/RSMD
    cd RSMD/
    
  2. Uma vez dentro dele basta rodar:
    docker-compose up
    
  3. Abra seu navegador e digite localhost e veja a magia acontecer:

2020-07-10-021116_1259x1030_scrot.png

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.

2020-07-10-021120_1259x1030_scrot.png

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:

image1197.png

image1185.png

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

30465669870_5cabb7b70b_o(1).jpg

"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:

  1. Evita com que um BD seja instalado na máquina do desenvolvedor
  2. 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
  3. 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

9795459904_d888cece01_o.jpg

"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?

34028948085_44cf6ff191_o.png

"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:

  1. fonte USB -- contando o cabo
  2. microSD -- uns 8GB pelo menos
  3. 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:

image1275.png

  • O site:

image1287.png

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

Indo além