DataFlowComo Fazer Fluxos de Dados   Facilmente em Perl Alexei “Russo” Znamensky     russoz@cpan.org
História“Hack de Dados Públicos” como idéia detema para o Equinócio de Março/2011 daSão Paulo Perl MongersProjeto OpenData...
OpenData: O ComeçoScripts para buscar, transformar e publicardados públicosPortal da Transparência do Gov.BRMódulos para f...
OpenData: O FimProver um framework que promova osconceitos de “OpenData”Permita às pessoas analisar e manipulardados públi...
E o meio?Várias APIs e frameworks para váriastarefas diferentesNovos projetos sempre levam a muito(re-)trabalho de codific...
E o meio?Várias APIs e frameworks para váriastarefas diferentesNovos projetos sempre levam a muito(re-)trabalho de codific...
E o meio?A seqüência de passos usual é muitoparecida na maior parte das vezes, mas ...... não queremos “engessar” o modelo...
O Meio PrecisaProver um modelo de tratamento dedados que seja:   –   Simples   –   (Facilmente) Customizável   –   (Facilm...
O que por no Meio?   O que precisamos?
Algo SimplesAlgo que:Simplesmente funcionePermita códigos sofisticados com poucotempo de aprendizadoPermita códigos podero...
Algo CustomizávelPermita encaixar peças, como no Linux( cat file | grep foo | sort | uniq )Permita montar “scripts”, como ...
Algo ExtensívelPermita criar peças novasPara caso único, específico, ou ...... um componente novo (“black box”) quepossa s...
Algo UtilizávelNão seja necessário “programar”, nosentido test/loop/variáveis da palavraCriação de fluxos definidos por ar...
Algo Re-UtilizávelFluxos de dados que possam serutilizados em outros fluxos (sub-fluxos?)Fluxos disponibilizados como:    ...
Caixinhas MutantesProjeto OpenData-BR [Dez 10]   –   pacotes OpenData::AZ::Box*   –   pacotes OpenData::Flow::*Projeto Dat...
Em PerlProjeto nasceu na comunidade PerlPerl sempre foi a melhor linguagem para amanipulação de textosBoas práticas de des...
DataFlow
DataFlowEm termos de Perl, precisamos
Show me The Code!!
Um Fluxo SimplesUm fluxo de dadosmy $flow = DataFlow->new(    procs => [        sub {            return uc(shift);        ...
Um Fluxo SimplesUsando:$flow->input(batatas, bananas);print $flow->output();print $flow->output();# ou, de outra formaprin...
Mais Que SubsCada “sub” do fluxo torna-se um objeto dotipo DataFlow::Proc, um “Processador”my $flow = DataFlow->new(    pr...
Debaixo Dos CaracóisDataFlow::Proc   –   Recebe um scalar e devolve uma lista        (com zero ou mais elementos)DataFlow ...
Criando ProcessadoresQuando:   –   Uma mesma “sub” é utilizada com muita        freqüência   –   Se quer fazer uma “sub” p...
Criando ProcessadoresMy/Proc/CSV.pmpackage My::Proc::CSV;use Moose; extends DataFlow::Proc;has csv => ( isa => Text::CSV )...
E FluxosMy/Flow/Weird.pmpackage My::Flow::Weird;use Moose; extends DataFlow;has +procs => (    default => sub {        ret...
Para Dentro!DataFlow dentro de um Proc ou de outroFlow, e vice-versas:my $flow = DataFlow->new(    procs => [        My::F...
(Alguns dos) Procs ProntosAlguns Procs disponíveis:     CSV           processar “de” e “para” conteúdo .csv     URLRetriev...
Extração de Dados (Scrape)Exemplo no repositório do DataFlow, noarquivo ceis.pl:   –   http://bit.ly/kyJLXx
Próximas MelhoriasMeta-dados no fluxoMais Procs Prontas   –   Split e Join de fluxos   –   Acesso a banco de dados   –   E...
Próximas MelhoriasConstrução de DataFlow a partir de umaconfiguração em texto:   –   YAML, JSON, XML, etc...Paralelismo   ...
Referências DataFlowRepositório     http://github.com/russoz/DataFlowCPAN     http://search.cpan.org/perldoc?DataFlowTeste...
Referências OpenDataOpenData-BR       http://opendatabr.org/Portal da Transparência do Gov.BR   –   http://www.portaltrans...
Ref. Desenvolvimentogit          http://git-scm.com/          http://github.comMoose          http://www.iinteractive.com/...
Muito Obrigado!   Thank You!Большое Спасибо!
Customização & Extensão●   Podemos montar “flows” arbitrariamente    grandes e...●   ... colocar coisas arbitrariamente   ...
Demo●   ceis.pl
Próximos SlideShares
Carregando em…5
×

Palestra DataFlow - II São Paulo Perl Workshop

768 visualizações

Publicada em

Palestra sobre o DataFlow, um framework em Perl para fluxo de dados.

Publicada em: Tecnologia
0 comentários
0 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

  • Seja a primeira pessoa a gostar disto

Sem downloads
Visualizações
Visualizações totais
768
No SlideShare
0
A partir de incorporações
0
Número de incorporações
1
Ações
Compartilhamentos
0
Downloads
9
Comentários
0
Gostaram
0
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Palestra DataFlow - II São Paulo Perl Workshop

  1. 1. DataFlowComo Fazer Fluxos de Dados Facilmente em Perl Alexei “Russo” Znamensky russoz@cpan.org
  2. 2. História“Hack de Dados Públicos” como idéia detema para o Equinócio de Março/2011 daSão Paulo Perl MongersProjeto OpenData-BRIdéias transformadas em código
  3. 3. OpenData: O ComeçoScripts para buscar, transformar e publicardados públicosPortal da Transparência do Gov.BRMódulos para facilitar a criação de scripts
  4. 4. OpenData: O FimProver um framework que promova osconceitos de “OpenData”Permita às pessoas analisar e manipulardados públicos
  5. 5. E o meio?Várias APIs e frameworks para váriastarefas diferentesNovos projetos sempre levam a muito(re-)trabalho de codificação – Isso pode ser bom – Isso pode ser ruim
  6. 6. E o meio?Várias APIs e frameworks para váriastarefas diferentesNovos projetos sempre levam a muito(re-)trabalho de codificação – Isso pode ser bom (APROVEITAR!) – Isso pode ser ruim (EVITAR!)
  7. 7. E o meio?A seqüência de passos usual é muitoparecida na maior parte das vezes, mas ...... não queremos “engessar” o modelo, épreciso ter flexibilidade para mudarmos ascoisas, afinal ...“there is more than one way to do it”(TIMTOWTDI => Tim Toady!), mas“but sometimes consistency is not a badthing either”(BSCINABTE => Bicarbonate!)
  8. 8. O Meio PrecisaProver um modelo de tratamento dedados que seja: – Simples – (Facilmente) Customizável – (Facilmente) Extensível – (Facilmente) Utilizável – (Facilmente) Re-utilizável
  9. 9. O que por no Meio? O que precisamos?
  10. 10. Algo SimplesAlgo que:Simplesmente funcionePermita códigos sofisticados com poucotempo de aprendizadoPermita códigos poderosos com poucaslinhas de códigoPossua várias funcionalidades já prontaspara serem usadas
  11. 11. Algo CustomizávelPermita encaixar peças, como no Linux( cat file | grep foo | sort | uniq )Permita montar “scripts”, como no Linux“Defaults” razoáveis, mas que possam sermanipulados
  12. 12. Algo ExtensívelPermita criar peças novasPara caso único, específico, ou ...... um componente novo (“black box”) quepossa ser usado pelos outros
  13. 13. Algo UtilizávelNão seja necessário “programar”, nosentido test/loop/variáveis da palavraCriação de fluxos definidos por arquivosde configuração ...... que poderiam ser criados por interfacesgráficas/web, por leigos
  14. 14. Algo Re-UtilizávelFluxos de dados que possam serutilizados em outros fluxos (sub-fluxos?)Fluxos disponibilizados como: – Programas (linha de comando) – Sistemas acessados pela Web – Web Services? <Buzzword> Services? – Consumidores/Produtores de filas de mensagens?
  15. 15. Caixinhas MutantesProjeto OpenData-BR [Dez 10] – pacotes OpenData::AZ::Box* – pacotes OpenData::Flow::*Projeto DataFlow – pacotes DataFlow::Node::* [Fev 10] – pacotes DataFlow::* [Mar 10]Projeto EM ANDAMENTO!!!
  16. 16. Em PerlProjeto nasceu na comunidade PerlPerl sempre foi a melhor linguagem para amanipulação de textosBoas práticas de desenvolvimentoCultura de testes muito forteComunidadeÉ divertido :-)
  17. 17. DataFlow
  18. 18. DataFlowEm termos de Perl, precisamos
  19. 19. Show me The Code!!
  20. 20. Um Fluxo SimplesUm fluxo de dadosmy $flow = DataFlow->new( procs => [ sub { return uc(shift); }, sub { return scalar reverse(shift); }, ],);
  21. 21. Um Fluxo SimplesUsando:$flow->input(batatas, bananas);print $flow->output();print $flow->output();# ou, de outra formaprint join “n”, $flow->process(batatas, bananas);Resultado:SATATABSANANAB
  22. 22. Mais Que SubsCada “sub” do fluxo torna-se um objeto dotipo DataFlow::Proc, um “Processador”my $flow = DataFlow->new( procs => [ DataFlow::Proc->new( p => sub { return uc(shift); }, ), DataFlow::Proc->new( p => sub { return scalar reverse(shift); }, ), ],);
  23. 23. Debaixo Dos CaracóisDataFlow::Proc – Recebe um scalar e devolve uma lista (com zero ou mais elementos)DataFlow – Array de Procs, com filas entre si, para “bufferizar” o consumo dos dadosEm Moose: um sistema de objetos pós-moderno para Perl
  24. 24. Criando ProcessadoresQuando: – Uma mesma “sub” é utilizada com muita freqüência – Se quer fazer uma “sub” parametrizada e que possa ser reutilizada – Existe uma necessidade semântica de dar um nome a um tipo de rotina
  25. 25. Criando ProcessadoresMy/Proc/CSV.pmpackage My::Proc::CSV;use Moose; extends DataFlow::Proc;has csv => ( isa => Text::CSV );has +p => ( default => sub { my $self = shift; return sub { return $self->csv->parse(shift); } },);
  26. 26. E FluxosMy/Flow/Weird.pmpackage My::Flow::Weird;use Moose; extends DataFlow;has +procs => ( default => sub { return [ sub { return uc(shift) }, sub { scalar reverse(shift) }, ]; },);
  27. 27. Para Dentro!DataFlow dentro de um Proc ou de outroFlow, e vice-versas:my $flow = DataFlow->new( procs => [ My::Flow::Weird->new(), # um flow My::Proc::CSV->new(), # um proc ],);
  28. 28. (Alguns dos) Procs ProntosAlguns Procs disponíveis: CSV processar “de” e “para” conteúdo .csv URLRetriever busca páginas/arquivos da web HTMLFilter filtro para conteúdo HTML SimpleFileInput/SimpleFileOutput leitura/escrita de arquivos Encoding (em finalização) mudar codificações de caracteres
  29. 29. Extração de Dados (Scrape)Exemplo no repositório do DataFlow, noarquivo ceis.pl: – http://bit.ly/kyJLXx
  30. 30. Próximas MelhoriasMeta-dados no fluxoMais Procs Prontas – Split e Join de fluxos – Acesso a banco de dados – Execução de comando externo – OCR (reconhecimento de caracteres) – XML => RDF – JSON
  31. 31. Próximas MelhoriasConstrução de DataFlow a partir de umaconfiguração em texto: – YAML, JSON, XML, etc...Paralelismo – Processos, threadsMecanismo de log de mensagens
  32. 32. Referências DataFlowRepositório http://github.com/russoz/DataFlowCPAN http://search.cpan.org/perldoc?DataFlowTesters Matrix http://www.cpantesters.org/distro/D/DataFlow
  33. 33. Referências OpenDataOpenData-BR http://opendatabr.org/Portal da Transparência do Gov.BR – http://www.portaltransparencia.gov.br/
  34. 34. Ref. Desenvolvimentogit http://git-scm.com/ http://github.comMoose http://www.iinteractive.com/moose/Dist::Zilla http://dzil.org/git flow – http://bit.ly/9bUvdC
  35. 35. Muito Obrigado! Thank You!Большое Спасибо!
  36. 36. Customização & Extensão● Podemos montar “flows” arbitrariamente grandes e...● ... colocar coisas arbitrariamente complexas nos “procs”.● Podemos estender ou agregar um (ou mais) DataFlow a outro código.
  37. 37. Demo● ceis.pl

×