InternetSemLimites/InternetSemLimites

Criar API/JSON e Site/App/SPA

Closed this issue · 70 comments

Muito bom! Parabéns!

Rola liberar um JSON com as informações? Tenho interesse em criar um site no estilo "Painel da Vergonha", aí poderia usar o seu github como source pra se auto-atualizar.

Valeu!
[ ]s

@sunw4r @jlcarvalho Vamos automatizar isso? Aí já temos a lista, o site, o JSON, tudo…

Posso criar um CMS simplão (algo rápido com Django Admin, ou Flask) e jogar no Heroku.

Formulário de poucos campos:

  • Nome do provedor
  • URL do provedor
  • URL do archive.is
  • Estados onde atuam
  • Cidades atendidas

Podemos deixar esse CMS aberto mesmo, ou alguém assume a moderação (qualquer um posta, mas para ir pro ar alguém muda um flag de “publicar”).

Topam?

Só preciso que alguém me entregue um HTML de coo vai ser o front-end.

Será que precisa de um CMS? Dá pra usar o Github pra moderar as coisas e criar um SPA hospedado no GH Pages. Mais prático, não?

A desvantagem é que só quem tem conta no Github vai poder contribuir.

Pensei em CMS mais pela agilidade de dar fazer e dar deploy (para mim, claro). CMS abre as portas para quem não tem GitHub contribuir, e gera um JSON que pode ser utilizado no SPA, por exemplo.

@cuducos, me convenceu. Eu não sou muito bom com design, mas vou procurar alguém pra nos ajudar. Enquanto isso a gente podia usar algum framework css (Bootstrap, Foundation, etc.) só pra tirar a ideia do papel sem a gente se preocupar muito com estilo. Feito é melhor que perfeito.

@sunw4r @jlcarvalho @cuducos posso ajudar com a hospedagem, tenho um vps aqui, e dá para colocar. for free, é claro.

De repente da pra por o json aqui mesmo no github e consumir do arquivo raw mesmo.

Tá online teu gerador de JSON, @sunw4r: http://internetsemlimites.herokuapp.com (mas ainda vou cadastrar os provedores, faço isso já já).

O código está em: https://github.com/cuducos/InternetSemLimitesCMS

Liberei acesso pro admin para mim e para o @jlcarvalho, mas caso alguém mais queira, me pede em PVT (@cuducos no Twitter e Telegram) que crio a conta.

Depois podemos fazer um form aberto para pessoas enviarem e agente só “moderar” (mudar o flag published no CMS).

Posso fechar essa issue e discutimos o CMS no https://github.com/cuducos/InternetSemLimitesCMS/issues

@sunw4r a API te atende? Podemos fechar a issue?

@jlcarvalho @cuducos perfeito! Atende sim!
Vou correr atras de um tempo pra montar um layout bacana / registrar um dominio e botar pra rodar!
Valeu!

[ ]s

Reabrindo (e rebatizando o _issue)) pois parece que tem mais gente querendo participar da história de consumir os dados via JSON/API ; )

Vale refatorar em outras linguagens? 👅

Acho que só não vale é não divulgar essa lista =)

Eu adorei a ideia. Vou ver se consigo criar uma versão da API em Node.

@rodrigogs, eu até acho que vale, mas aí iria descentralizar o cadastro dos provedores? Por que se for pra informação ficar espalhada (igual estava antes da criação desse repositório) eu acho melhor não refatorar.

Agora se as múltiplas implementações conseguirem replicar/espelhar os provedores aí eu acho de boa.

Seria mais para quem quiser criar o seu... Já que é tudo código aberto.

Mas você tem razão, não devemos descentralizar.

A não ser que a API possua crud pra um db central

Eu digo isso porque, por exemplo, o retorno da API já está defasado em relação ao readme deste projeto. Deveriamos pensar em alguma forma de automatizar o source de dados da API.

Até comentei em outra issue (#19 (comment)) sobre essa questão de ser difícil manter a API e o repositório.

O ideal seria que ambos "bebessem da mesma fonte", mas é complicado fazer isso no repositório. Então acho que o ideal seria a criação de um site onde as pessoas (mesmo as que não possuem Github) pudessem submeter novos provedores.

Roadmap

[x] CMS para gerenciar o conteúdo
[x] API para servir o conteúdo
[x] Formulário para envio de novos provedores
[ ] SPA para mostrar o conteúdo com um visual bacanudo
[ ] Tirar o conteúdo do README.md e deixar só no CMS

Estamos quase lá : )

E reforçando o que eu falei em outro momento: se alguém mais quiser dar uma mão na moderação (ter acesso ao CMS, só mandar o email em PVT que eu crio mais usuários aqui; @cuducos no Twitter e Telegram).

Por enquanto o fluxo está:

  1. Alguém manda PR aqui
  2. Alguém dá o merge
  3. Alguém inclui no CMS

Com o formulário funcionando já dá para adotarmos outros fluxos, por exemplo:

  1. Alguém preenche o formulário
  2. Alguém aprova no CMS
  3. Alguém atualiza o README.md

É o mesmo número de passos, mas já é mais aberto não precisa der GitHub geek para contribuir.

@cuducos, futuramente a gente pode até conseguir automatizar a atualização do README.md através do CMS.

Eu tava mesmo pesquisando isso. Mas acho que tem que ser algo bem manual mesmo.

Como vcs estão armazenando os dados, pq daria pra criar um hook do git pra reescrever o readme.md toda vez que ocorrer uma atualização. Uso bastante hooks de git aqui no trampo e posso dar uma mão se precisarem.

@fbraz3 Nunca fiz isso, mas sinta-se à vontade: esse é o código do CMS & API. Basicamente um web app Python (Django) rodando no Heroku. Os dados ficam num PostgreSQL que pode ser acessado externamente.

Eu não manjo de python, seria problema eu escrever o hook em php?

@fbraz3 Não sei como rodaria o PHP no Heroku. Mas escreve e qualquer coisa eu porto pro Pyhton. É super sussa eu criar o conteúdo do .md, só não sei o que fazer com isso depois… como escrever o hook em si.

Por enquanto o que eu sugiro é show me the code: joga o hook lá na pasta /contrib e depois vemos como fazer isso rodar no Heroku.

@cuducos particularmente não conheço o funcionamento do heroku, mas em uma hospedagem convencional, basicamente eu clonaria o projeto do readme num diretório, faria um script pra criar o readme com base no banco e dar um push pro remote quando sofrer modificações (via shell mesmo). Esse hook poderia ficar direto no diretório clonado no post-receive

@fbraz3 Então não vai funcionar no Heroku… Heroku não tem file system.

O que pode rolar é uma boa e velha gambiarra… uma URL (por exemplo http://internetsemlimites.herokuapp.com/readme.md) com o conteúdo do README.md (isso servido pelo Heroku). Aí em algum outro servidor um cronjob acessa isso de tempos em tempos; se tem diferença sobrescreve o arquivo e faz o push.

Eu não estou com tempo para escrever esse script, mas disponibilizo meu servidor pra ficar rodando isso se alguém escrever ; )

Tendo o readme ja pronto com isso pode ser até mesmo em shell script na cron.

#!/bin/bash
cd /repositorio/clonado && (
# Reset de segurança
git reset --hard HEAD; git clean -f -d; /usr/bin/git pull origin HEAD

#substitui o arquivo com o novo
wget http://internetsemlimites.herokuapp.com/readme.md -O README.md 

# commit e push
git commit -a -m "readme atualizado"
git push origin master

)

Se precisar, só por minha chave lá que eu agendo no meu server. Da pra também fazer uma verificação de md5 entre o antigo e o novo pra ver se teve modificações.

Pode ser necessário por o caminho físico dos comandos.. da pra usar o comando which nomedoexe pra descobrir.

@fbraz3 Toca ficha no teu server então! Vou te colocar de colaborador aí funciona com tuas chaves. Hell yeah — chega de atualizar o README.md. Te atualizo aqui quando a URL estiver funcionando, só uns minutos e faço isso.

assim que escrever o bash, commito ele pro projeto da API, só pra ficar publico o que roda no backend

@fbraz3 Ia comentar isso mesmo!

Tá no ar: https://internetsemlimites.herokuapp.com/README.md (mas vou tentar ajustar o mimetype ainda).

pro wget é indiferente o mimetype =)

Só uma ressalva aqui, @cuducos pra não poluir sua conta do GH, acho que compensa criar algo como o https://github.com/Ionitron, que basicamente é uma conta no GH que funciona como Bot que automatiza algumas coisas pro pessoal do Ionic.

Eu acho que no fundo vai ser só deixar uma conta do GH logada no Heroku, o script bash vai acabar commitando em nome dele.

@jlcarvalho Isso é com o @fbraz3… Tu consegue usar outra SSH key no teu servidor, @fbraz3?

Mas não acho que vá poluir não. O git commit só vai funcionar se tiver diferença. Ou seja, a maioria das vezes nem vai rolar commit.

Falando nisso. @fbraz3 se for git commit -a -m "readme atualizado" && git push origin master (em uma linha só, encadeado com &&) não é melhor? Se falhar o git commit (nothing to commit) ele nem chama o git push

Vocês que mandam, se fosse "poluir" a minha conta eu criaria kk ;)

Eu acabei botando a minha chave no servidor :P

Em tempo, tive esse erro

ERROR: Permission to InternetSemLimites/InternetSemLimites.git denied to fbraz3.
fatal: Could not read from remote repository.

Script final:

#!/bin/bash -x
cd /home/automacao/InternetSemLimites && (
# Reset de segurança
git reset --hard HEAD; git clean -f -d; /usr/bin/git pull origin HEAD

    #substitui o arquivo com o novo
    wget https://internetsemlimites.herokuapp.com/README.md -O README.md.tmp

    SIZE=`du -k "README.md.tmp" | cut -f 1`
    if [ $SIZE -lt 1 ]; then
            rm -f README.md.tmp
            echo invalid file size
            exit 0
    fi

    MD5A=`md5sum README.md |awk '{print $1}'`
    MD5B=`md5sum README.md.tmp |awk '{print $1}'`

    if [ "$MD5A" != "$MD5B" ]; then
            mv -f README.md.tmp README.md
            git pull origin master
            git add . && (git commit -a -m "auto-update README.md"; git push origin master)
    fi

)

fora que depois da pra fazer um script mais ativo, por exemplo, muda algo no banco, o próprio servidor chama uma url que dispara esse bash.

Erro meu. Achei que só te colocando como member já te garantia acesso. Agora te coloquei como colaborador nos dois repos… tente aí outra vez…

Agora foi. putz, erro de português na minha mensagem de commit, my bad =(

@rodrigogs Sobre refatorar: se formos refatorar em outra linguagem, topo. Mas mato esse que tem, para manter a single source of truth hehe…

vou usar o git blame-someone-else pra por no de alguém lol

Que lindo que ficou isso.

Esse script já tá funcionando aqui no repo?

já rodou inclusive, foi até meu erro de portugês lol

Eu despubliquei o Americanet (por não ter fonte) mas ele continua no README.md, é um bug?

Provavelmente. To na rua agora, abre uma Issue lá no outro repo e olho mais
tarde. Mal aí…
On Thu, Apr 14, 2016 at 17:34 Jean Lucas de Carvalho <
notifications@github.com> wrote:

Eu despubliquei o Americanet (por não ter fonte) mas ele continua no
README.md, é um bug?


You are receiving this because you were mentioned.
Reply to this email directly or view it on GitHub
#9 (comment)

Não é instantâneo, a cron vai rodar a cada 6 horas

#InternetSemLimites
0 */6 * * * /home/automacao/InternetSemLimites/sync.sh

Querem um tempo menor?

Dúvida:
Do ponto de vista de hospedagem/tráfego, o Heroku aguentaria quantos acessos simultâneos e/ou mensais? Existe limite de tráfego nos planos gratuitos?

Pergunto isso porque a internet está realmente engajada nesse assunto e a cada dia que passa mais Vloggers famosos começam a fazer vídeos sobre isso. Imagina se apenas um cara famoso resolver divulgar o site da iniciativa no Twitter ou no vídeo dele, meu medo é o Heroku não aguentar a porrada de acessos.

Imagino que o SPA não deva passar de uns 500kb, só pra ter uma referência do que seria trafegado.

Bom, não vi nada no TOS deles a respeito de tráfego ou limites de acesso.

Mas o fato é que provedores gringos costumam cortar acessos sem dó nem piedade, principalmente de clientes o exterior que não podem processar eles =P

Mas acredito que se houver alguma divulgação desse tipo, deve-se apresentar o conteúdo do github pages (que ainda está em discussão) ou o próprio projeto do github.

@fbraz3, roda o shell aí pra atualizar o README.md, adicionei algumas infos lá. Depois pode deixar no automático mesmo. ;)

@jlcarvalho eu rodei mas não tem nada pra atualizar =(

[root@web01 ~]# /home/automacao/InternetSemLimites/sync.sh

  • cd /home/automacao/InternetSemLimites

  • git reset --hard HEAD
    HEAD is now at 22ae591 auto-update README.md

  • git clean -f -d
    Removing README.md.tmp

  • /usr/bin/git pull origin HEAD
    From github.com:InternetSemLimites/InternetSemLimites

    • branch HEAD -> FETCH_HEAD
      Already up-to-date.
  • wget https://internetsemlimites.herokuapp.com/README.md -O README.md.tmp
    --2016-04-14 19:27:12-- https://internetsemlimites.herokuapp.com/README.md
    Resolving internetsemlimites.herokuapp.com (internetsemlimites.herokuapp.com)... 23.21.66.159
    Connecting to internetsemlimites.herokuapp.com (internetsemlimites.herokuapp.com)|23.21.66.159|:443... connected.
    HTTP request sent, awaiting response... 200 OK
    Length: unspecified [text/markdown]
    Saving to: ‘README.md.tmp’

    [ <=> ] 4.851 --.-K/s in 0,001s

2016-04-14 19:27:14 (6,19 MB/s) - ‘README.md.tmp’ saved [4851]

++ cut -f 1
++ du -k README.md.tmp

  • SIZE=8
  • '[' 8 -lt 1 ']'
    ++ awk '{print $1}'
    ++ md5sum README.md
  • MD5A=ea566ff0eb4284ed9237948d5673b738
    ++ awk '{print $1}'
    ++ md5sum README.md.tmp
  • MD5B=ea566ff0eb4284ed9237948d5673b738
  • '[' ea566ff0eb4284ed9237948d5673b738 '!=' ea566ff0eb4284ed9237948d5673b738 ']'

Em tempo, poderíamos adicionar no README.md, bem no topo, o link pra cadastrara provedor. né =)

https://internetsemlimites.herokuapp.com/new/

Claro né, perdão. O @cuducos tem que fazer o deploy no heroku.

Acho que tendo essa info já da pra começar a divulgar no FB, tentar entrar em contato com alguns meios de comunicação sei lá...

@fbraz3 foi justamente isso que eu fiz, adicionei o link do formulário e uma descrição em inglês pros gringos não ficarem perdidos.

heroku tem algum cache será? pois acessando direto o https://internetsemlimites.herokuapp.com/README.md ta igual no repositório, daí os md5 ficam iguais e não atualiza =(

@fbraz3 acredito que o @cuducos tem que fazer deploy da aplicação pro Heroku pra atualizar o README.md.

Atualizar o README.md

@fbraz3 e @jlcarvalho: Sim, preciso dar deploy no Heroku, desculpe (tu tem conta no Heroku? Se tiver te ponho como colaborador lá, me avise). Depoly novo isso já já!

Herou e volume de acessos

@kazzkiq Resumindo uma resposta pra tua pergunta sobre o acessos e Heroku: eles não cobram por velocidade ou volume, mas sim por processamento (dynos).

Ou seja, um site sem volume em arquivos, mas complexo em termos de processamento pode acabar sendo mais custo do que um site com arquivos pesados, mas com processamento simples. Não é bem isso, mas é por aí.

Outro dia tive um projeto lá que tinha mais de 500 acessos únicos por dia — isso de manteve por pouco mais de 1 semana e aí o plano free do Heroku não aguentou. Paguei US$ 7 por um mês, o plano pago mais simples e resolveu (e sobrou). No mês seguinte já voltei ao plano free de boas.

Se esse for nosso caso, pago com gosto esses US$ 7 do meu próprio bolso só por não ter que me preocupar com a parte de devops. Se ficar mais caro que isso, teremos visibilidade para pedir grana para geral. E aí, nesse ponto, se cada um ajudar com 10 centavos já pagamos meio ano de Heroku (1000 acessos * R$ 0,10 = R$ 1000 ~ US$ 28, logo… 4 meses de Heroku).

E claro, estou só dando minha opinião. Se outro servidor (melhor e mais barato/free) que eu faça deploy com um simples git push hellyeah master, bye bye Heroku — seja num PaaS seja com um devops bacanudo aqui da comunidade ; )

Estou com o @cuducos quanto a "hospedagem". Também ajudo com grana caso precise.

Hahaha… acabei de responder a bíblia pro @kazzkiq e na sequência o Heroku tira nosso site do ar —não por volume de acessos/processamentos mas por uma outra regra que diz que os apps frees ficam pelo menos 6h offline por dia (e o nosso já estava passando das 18h sem parar de ter acesso).

TL;DR Acabei de deixar US$ 7 no Heroku… hahaha…

Não sabia dessa regra do Heroku.

kct, que sacanagem!

Só pra constar, eu trabalho com devops, então se precisar contratar uma vps ou algo parecido, eu faço a integração.

Pessoal vocês Conhecem o Sheetsu? é uma forma incrível de gerar api a partir de uma simples tabela do google sheet.

@fredericksilva Não conheço. Mas a API já está funcionando. Se achar que o Sheetsu vai funcionar melhor, toca ficha no PR ; )

@cuducos ta blz!
Então que fique de dica para um próximo projeto sheetsu.

API e site prontos, no ar, funcionando…
Acho que é hora de fechar esse Issue, não?