[SP-pm] OpenData-BR

Thiago Rondon thiago at aware.com.br
Mon Nov 29 04:50:10 PST 2010


Em 28-11-2010 19:35, Alexei Znamensky escreveu:
>
> Pessoal,
>
> Estou fazendo um trabalho paralelo ao do maluco e tenho "quebrado" as 
> rotinas dessas classes em rotinas separadas de fetch, parsing e storage.
>
Ótimo, a ideia é realmente separar estas tarefas em componentes.

> Acabei de alcançar algo funcionável e talvez merge-ável para a coleção 
> de dados 'CEIS' (Empresas Sancionadas) do PortalTransparencia.gov.br 
> <http://PortalTransparencia.gov.br>. Acabei de subir para o branch 
> 'rearch' no meu fork:
>
> https://github.com/russoz/OpenData-BR/tree/rearch
>
> Para conseguir fazer funcionar e apresentar prova de conceito, tive de 
> fazer algumas pequenas gambis:
>
> * o role 'Provider::Collection' está implementando a funcionalidade do 
> browser (método get(), para ser preciso), mas esse não é um bom lugar 
> para isso.

Eu fiz algumas alterações nesta role no final de semana, que assim que 
tiverem mais estáveis eu vou jogar no repositório. Basicamente utilizei 
o Coro para ganhar velocidade com as chamadas ao método get.

> * o role 'Provider', segundo a idéia original, teria um atributo 
> 'loader' que seria do tipo 'OpenData::Loader' - e isso implementaria 
> um método 'load()' que serviria para carregar os dados em algum 
> repositório (ou canal de comunicação - nada impede que, no futuro 
> tenhamos um loader que jogue os dados em uma file RabbitMQ, ou mesmo 
> IBM MQ, ou um feed RSS, whatever). Como esse role Loader ainda não foi 
> criado, e para simplificar a demonstração, mudei a restrição de Loader 
> para Object, implementei o método 'load()' na classe 
> 'OpenData::Output::Dumper' e deixei a classe 
> 'OpenData::BR::Federal::PortalTransparencia' usando esse "loader" ou 
> "output" por default, ao invés do MongoDB que é o que estava antes.
>

A ideia do mongodb é exatamente ser um intermediário rápido, a 
utilização do RabbitMQ por exemplo é muito "simples" de ser "adotada".

Imagine no caso de rodarmos vários "buscadores" em máquinas diferentes 
por conta de velocidade, restrições de acesso, e etc, etc.. e todos 
estes buscadores jogarem os dados coletados em uma fila única para 
processamento.

Se formos mais adiante.. Deixar o processo asincrono pode ser uma grande 
vantagem, caso a ideia seja vamos jogar tudo o que estamos buscando em 
uma fila, e então depois nós retiramos e jogamos por exemplo no storage 
(eg. mongodb), correto ?

A ideia do mongodb é para introspecar dados em uma busca mais 
inteligente, a vantagem dele não ter esquemas (assim como o rabbitmq) e 
ser você pode enviar documentos (assim como no rabbitmq), porém ele é um 
"storage". Um exemplo é de ter um método create_or_update() no 
collection, no lugar de add().

Outra preocupação e já levantada no canal de IRC, e que o nosso papel é 
também auditar, saber se o website do governo foi alterado de um dia 
para outro, por algum interesse.

Então devemos manter uma base mais "esperta" para este tipo de tarefa.

> O código neste branch, agora (19:26), está passando nos testes, e o 
> script ./scripts/portaltransparencia.pl 
> <http://portaltransparencia.pl> está funcionando.
>
Ótimo, eu vou testar hoje pela noite, ou amanhã. Mas pelo código que vi, 
gostei!

Valeu Russo!

Abs!
-Thiago Rondon

-------------- Pr�xima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://mail.pm.org/pipermail/saopaulo-pm/attachments/20101129/b7938c01/attachment.html>


More information about the SaoPaulo-pm mailing list