Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Geo Colony

Geo Colony

Migrando Aplicações WEB para Plataformas Abertas: um Estudo 
de Caso

Apresentação da tese de conclusão do curso em Ciências da Computação da UFRGS.

Github: https://github.com/jcemer/geo-colony
Aplicação: http://geo-colony.ap01.aws.af.cm/public

Jean Carlo Emer

May 16, 2013
Tweet

More Decks by Jean Carlo Emer

Other Decks in Technology

Transcript

  1. View Slide

  2. Jean Carlo Emer
    Prof. Dr. Carlos
    Alberto Heuser
    ORIENTADOR
    ALUNO
    MIGRANDO APLICAÇÕES
    WEB PARA PLATAFORMAS
    ABERTAS: UM ESTUDO
    DE CASO

    View Slide

  3. INTRODUÇÃO
    1.

    View Slide

  4. Estudo de caso de migração
    da aplicação: Sistema de
    busca e exibição de dados
    georreferenciados, 2009
    A aplicação é escrita em
    ASP.NET e utiliza banco de
    dados SQL Server.

    View Slide

  5. Objetivo
    Analisar e justificar o processo
    de migração da aplicação para
    tecnologias de código aberto.

    View Slide

  6. INSUMOS E CONCEITOS
    RELACIONADOS
    2.

    View Slide

  7. Code Standards
    Convenções que indicam
    como o código deve ser
    escrito.
    Garantia de que grandes
    aplicações sejam programadas
    com um estilo consistente.

    View Slide

  8. Design Patterns
    Solução geral e reutilizável
    para um problema recorrente.
    O padrão Model-view-
    controller serviu como base
    para o desenvolvimento da
    aplicação.

    View Slide

  9. Google Maps
    Visualização de mapas e
    imagens de satélite da
    empresa Google.
    O serviço oferece uma API que
    permite a criação de aplicações
    baseadas em localização.

    View Slide

  10. Busca de dados por
    similaridade
    Técnica de busca por
    aproximação de strings.
    Otimização das consultas
    através da técnica de Qgrams.

    View Slide

  11. Qgrams
    O valor “colony” gera:
    ##c
    #co
    col
    olo
    lon
    ony
    ny$
    n$$
    1.
    2.
    3.
    4.
    5.
    6.
    7.
    8.

    View Slide

  12. R1.Ao, R2.Ao, R1.Ai, R2.Aj
    R1, R1AiQ, R2, R2AjQ
    R1.Ao = R1AiQ.Ao AND
    R2.Ao = R2AjQ.Ao AND
    R1AiQ.Qgram = R2AjQ.Qgram AND
    |R1AiQ.Pos - R2AjQ.Pos| ≤ k AND
    |strlen(R1.Ai) – strlen(R2.Aj)| ≤ k
    R1.Ao, R2.Ao, R1.Ai, R2.Aj
    COUNT(*) ≥ strlen(R1.Ai) – 1 – (k – 1) * q AND
    COUNT(*) ≥ strlen(R2.Aj) – 1 – (k – 1) * q AND
    edit_distance(R1.Ai, R2.Aj, k)
    SELECT
    FROM
    WHERE
    GROUP BY
    HAVING

    View Slide

  13. R1.Ao, R2.Ao, R1.Ai, R2.Aj
    R1, R1AiQ, R2, R2AjQ
    R1.Ao = R1AiQ.Ao AND
    R2.Ao = R2AjQ.Ao AND
    R1AiQ.Qgram = R2AjQ.Qgram AND
    |R1AiQ.Pos - R2AjQ.Pos| ≤ k AND
    |strlen(R1.Ai) – strlen(R2.Aj)| ≤ k
    R1.Ao, R2.Ao, R1.Ai, R2.Aj
    COUNT(*) ≥ strlen(R1.Ai) – 1 – (k – 1) * q AND
    COUNT(*) ≥ strlen(R2.Aj) – 1 – (k – 1) * q AND
    edit_distance(R1.Ai, R2.Aj, k)
    SELECT
    FROM
    WHERE
    GROUP BY
    HAVING
    Junção das tabelas que se deseja
    comparar com suas respectivas
    tabelas auxiliares que contém os
    valores de q-gram.
    Em seguida, os qgrams das tabelas
    auxiliares estabelecem igualmente
    uma junção.

    View Slide

  14. R1.Ao, R2.Ao, R1.Ai, R2.Aj
    R1, R1AiQ, R2, R2AjQ
    R1.Ao = R1AiQ.Ao AND
    R2.Ao = R2AjQ.Ao AND
    R1AiQ.Qgram = R2AjQ.Qgram AND
    |R1AiQ.Pos - R2AjQ.Pos| ≤ k AND
    |strlen(R1.Ai) – strlen(R2.Aj)| ≤ k
    R1.Ao, R2.Ao, R1.Ai, R2.Aj
    COUNT(*) ≥ strlen(R1.Ai) – 1 – (k – 1) * q AND
    COUNT(*) ≥ strlen(R2.Aj) – 1 – (k – 1) * q AND
    edit_distance(R1.Ai, R2.Aj, k)
    SELECT
    FROM
    WHERE
    GROUP BY
    HAVING
    O filtro por posição elimina
    quaisquer pares de qgrams em
    comum que estabeleçam uma
    distância superior a desejada.
    O filtro por tamanho simplesmente
    compara o tamanho das strings.

    View Slide

  15. R1.Ao, R2.Ao, R1.Ai, R2.Aj
    R1, R1AiQ, R2, R2AjQ
    R1.Ao = R1AiQ.Ao AND
    R2.Ao = R2AjQ.Ao AND
    R1AiQ.Qgram = R2AjQ.Qgram AND
    |R1AiQ.Pos - R2AjQ.Pos| ≤ k AND
    |strlen(R1.Ai) – strlen(R2.Aj)| ≤ k
    R1.Ao, R2.Ao, R1.Ai, R2.Aj
    COUNT(*) ≥ strlen(R1.Ai) – 1 – (k – 1) * q AND
    COUNT(*) ≥ strlen(R2.Aj) – 1 – (k – 1) * q AND
    edit_distance(R1.Ai, R2.Aj, k)
    SELECT
    FROM
    WHERE
    GROUP BY
    HAVING
    O filtro de contagem é implementado,
    os pares de strings que compartilham
    somente alguns q-grams são
    eliminados.
    Por fim, o conjunto candidato pode
    ainda conter falsos positivos. por isso
    o uso de edit_distance(R1.Ai, R2.Aj, k).

    View Slide

  16. Geo Colony 1.0
    Contempla cerca de 21k lotes
    de colônias italianas e alemãs
    do Rio Grande do Sul.
    A seu desfavor, necessita do
    licenciamento e uso de
    tecnologias proprietárias.

    View Slide

  17. View Slide

  18. O Instituto de Informática da UFRGS não
    possui infra estrutura de servidores com as
    licenças de software requeridas.
    A necessidade exposta pelo Prof. Dr. Carlos
    Heuser é a migração da aplicação para
    tecnologias open source.

    View Slide

  19. Tecnologias back end
    Framework Fuel PHP, flexível e
    modular, escrito para PHP 5.3+
    no padrão HMVC.
    SGBD MySQL que é
    compatível com a linguagem
    SQL:1999.

    View Slide

  20. Tecnologias front end
    Stylus para pré-processar CSS
    e CoffeeScript que adiciona
    syntactic sugar para o
    JavaScript.
    Backbone para bem estruturar
    aplicações e Web Storage para
    persistir dados do usuário.

    View Slide

  21. MODELO DA APLICAÇÃO
    3.

    View Slide

  22. View Slide

  23. Painel de territórios
    Lista dos territórios que estão
    sendo mostrados no mapa.

    View Slide

  24. Pesquisa por colônia,
    linha e localidade
    Dois tipos de busca, uma delas
    correspondendo com a
    localização cidades.

    View Slide

  25. Pesquisa por proprietários
    A busca dos proprietários é
    feita por similaridade.

    View Slide

  26. Informações do lote
    Dados históricos,
    geoprocessamento e
    proprietários do lote.

    View Slide

  27. IMPLEMENTAÇÃO DA
    APLICAÇÃO
    4.

    View Slide

  28. Escolha das plataformas
    PHP e MySQL são tecnologias
    de código aberto e multi-
    plataforma que constituem
    uma configuração comum em
    servidores.
    Bibliotecas de front end para
    aplicar design patterns.

    View Slide

  29. Reescrita da aplicação
    A aplicação adota novas
    linguagens e design patterns
    que inviabilizaram uma
    evolução do código da
    aplicação anterior.
    O uso de Backbone no front
    end implica uma nova
    estruturação.

    View Slide

  30. Metodologia de
    desenvolvimento
    Entregas frequentes,
    simplicidade e software em
    funcionamento mais que
    documentação abrangente são
    algumas das bases do
    Manifesto Ágil.

    View Slide

  31. View Slide

  32. Back end da aplicação
    Segue o padrão (H)MVC
    definindo routes, controllers e
    models.
    Busca por similaridade provida
    pela classe Qgram Search.

    View Slide

  33. Modelo de dados
    Os lotes possuem várias
    chaves para se conectar aos
    demais dados de: colônia,
    linha, núcleo, seção, lado/ala,
    fonte da informação e cidade
    atual.

    View Slide

  34. Comportamento do front
    end da aplicação
    Possui models, collections e
    views apoiados na biblioteca
    Backbone.
    Uma classe de Storage
    armazena os territórios no
    browser do cliente.

    View Slide

  35. View Slide

  36. Apresentação do front
    end da aplicação
    Escrita na linguagem Stylus,
    que posteriormente gera um
    único arquivo CSS.
    A biblioteca Nib auxilia na
    representação homogênia
    entre os diferentes browsers.

    View Slide

  37. MIGRAÇÃO DOS DADOS
    5.

    View Slide

  38. Aplicativo SQLyog
    Através de ODBC, é possível
    estabelecer conexão com um
    banco SQL Server para
    importar os dados.

    View Slide

  39. Validando a importação
    Além de uma série de
    verificações empíricas, a
    contagem da quantidade de
    linhas importadas e o log
    resultado da importação foram
    analisados.

    View Slide

  40. View Slide

  41. CONCLUSÃO
    6.

    View Slide

  42. Métodos ágeis
    Histórias de usuário auxiliaram
    a atender aos requisitos
    essenciais da primeira versão
    da aplicação e, ao mesmo
    tempo, inserir melhorias.

    View Slide

  43. Design Patterns e Code
    Standards
    Muitas bibliotecas open source
    utilizadas, todas aplicadas de
    maneira a privilegiar a
    organização e facilitar futuras
    evoluções.

    View Slide

  44. Trabalhos futuros
    Dois outros trabalhos já foram
    feitos com base na primeira
    versão da aplicação.
    Este trabalho já prevê o
    acoplamento destas evoluções
    de maneira trivial.

    View Slide

  45. REFERÊNCIAS

    View Slide

  46. DOS SANTOS, Vinicius Rosa. Sistema de busca e exibição de dados georreferenciados.
    Novembro de 2009.
    SCOTT, Hanselman. Building Web Apps with ASP.NET. Disponível em: http://
    www.hanselman.com/blog/
    BuildingWebAppsWithASPNETJumpStart8HoursOfFREETrainingVideos.aspx. Acesso em:
    Maio de 2013.
    SQL SERVER. Disponível em: http://www.microsoft.com/en-us/sqlserver/default.aspx.
    Acesso em: Maio 2013
    PHP. Disponível em: http://php.net. Acesso em: Maio de 2013
    MYSQL. Disponível em: http://www.mysql.com. Acesso em: Maio de 2013
    KHAN, Tamuir. Getting Started with Stylus - CSS Pre-Processor. Disponível em: http://
    bootstrap.pk/tutorials/getting-started-with-stylus-css-pre-processor. Acesso em: Maio de
    2013.
    COFFEESCRIPT. Disponível em: http://coffeescript.org. Acesso em: Maio de 2013.
    MOZILLA. JavaScript Overview. Disponível em: https://developer.mozilla.org/en-US/docs/
    JavaScript/Guide/JavaScript_Overview. Acesso em: Maio de 2013.
    NODEJS. Disponível em: http://nodejs.org. Acesso em: Maio de 2013.

    View Slide

  47. GOOGLE. Disponível em: http://maps.google.com. Acesso em: Abril de 2013.
    GIT. Disponível em: http://git-scm.com. Acesso em: Maio de 2013.
    GRAVANO, Luis; et. al. Approximate String Joins in a Database (Almost) for Free.
    Proceedings of the 27th International Conference on Very Large Data Bases. San Francisco,
    CA, EUA. ACM 2001. p. 491-500.
    SOMMERVILLE, Ian. Software engineering. 9.ed. Boston: Addison-Wesley, 2009.
    BUSCHMANN, Frank. Pattern-Oriented Software Architecture. Disponível em: http://st-
    www.cs.illinois.edu/users/smarch/st-docs/mvc.html. Acesso em: Abril de 2013.
    PILGRIM, Mark. Dive Into HTML5. Disponível em: http://diveintohtml5.info. Acesso em: Abril
    de 2013.
    NAZZARO, William F., e SUSCHECK, Charles. New to user stories?. Disponível em: http://
    www.scrumalliance.org/articles/169-new-to-user-stories. Acesso em: Abril de 2013.
    BECK, Kent. et al. Manifesto for Agile Software Development. Disponível em: http://
    www.agilemanifesto.org. Acesso em: Abril de 2013.
    ARAÚJO, Fabrício. Vantagens e desvantagens do PHP. Disponível em: http://
    www.inforlogia.com/vantagens-e-desvantagens-do-php. Acesso em: Abril de 2013.

    View Slide

  48. MURPHEY, Rebecca. A Baseline for Front-End Developers. Disponível em: http://
    rmurphey.com/blog/2012/04/12/a-baseline-for-front-end-developers. Acesso em: Abril de
    2013.
    LITTLE, Gary. InfoBox. Disponível em http://google-maps-utility-library-v3.googlecode.com/
    svn/trunk/infobox/docs/reference.html. Acesso em Abril de 2013.
    MEYER, Kathryn. CSS Tools: Reset CSS. Disponível em: http://meyerweb.com/eric/tools/css/
    reset. Acesso em Abril de 2013.
    SINDOL, 2011. SQL Sever Row Count for all Tables in a Database. Disponível em http://
    www.mssqltips.com/sqlservertip/2537/sql-server-row-count-for-all-tables-in-a-database.
    Acesso em Abril de 2013.
    LIMA, Douglas de Oliveira. Infra-estrutura para gerenciamento de reputação de usuários e
    sua aplicação em um caso real. Novembro de 2010.
    FOLLE, Priscila Azevedo. Editando áreas georreferenciadas no Google Maps. Julho de 2012.

    View Slide