VAFAE - Visualização dos Acessos a Fóruns Num Ambiente EAD
Descrição do Produto
UNIVERSIDADE ABERTA
VAFAE VISUALIZAÇÃO DOS ACESSOS A FÓRUNS NUM AMBIENTE EAD
Cláudio Filipe da Silva Tereso
Trabalho de Projecto da Licenciatura de Informática
2015
UNIVERSIDADE ABERTA
VAFAE VISUALIZAÇÃO DOS ACESSOS A FÓRUNS NUM AMBIENTE EAD
Cláudio Filipe da Silva Tereso
Trabalho de Projecto da Licenciatura de Informática Por opção do autor, este relatório foi escrito com a grafia pré-acordo ortográfico de 1990
Trabalho de Projecto orientado pela Professora Doutora Elizabeth S. Carvalho
2015
Índice Índice ....................................................................................................................................................i Índice de Tabelas................................................................................................................................ iii Índice de Figuras ................................................................................................................................. v Índice de Listagens ............................................................................................................................ vii 1.
Introdução .................................................................................................................................. 1
2.
Estado da Arte ............................................................................................................................ 5 2.1.
Visualização de Informação ............................................................................................... 5
2.2.
Moodle ............................................................................................................................. 11
2.3.
Criação e desenvolvimento de web sites ......................................................................... 13
2.3.1.
Ferramentas de Visualização de Informação ........................................................... 13
2.3.2.
Linguagem e ferramentas de programação ............................................................. 14
2.3.3.
Sistema de gestão de base de dados ....................................................................... 17
2.4. 3.
Implementação ........................................................................................................................ 19 3.1.
Definição do âmbito de visualização ................................................................................ 19
3.1.1.
Exportação e importação dos dados ........................................................................ 20
3.1.2.
Estrutura e análise dos dados originais.................................................................... 22
3.1.3.
Estrutura dos dados tratados ................................................................................... 23
3.1.4.
Transformação dos dados: Teoria ............................................................................ 25
3.1.5.
Transformação dos dados: Implementação............................................................. 26
3.2.
4.
Conclusões ....................................................................................................................... 17
Desenvolvimento da aplicação ........................................................................................ 29
3.2.1.
Desenho ................................................................................................................... 29
3.2.2.
Implementação ........................................................................................................ 30
3.2.2.1.
Dados e acesso a dados.................................................................................... 31
3.2.2.2.
Código HTML & JavaScript ............................................................................... 33
3.2.2.3.
Outros ficheiros ................................................................................................ 38
3.3.
Testes e validação ............................................................................................................ 38
3.4.
Conclusões ....................................................................................................................... 40
Resultados e trabalho futuro ................................................................................................... 41
Bibliografia ....................................................................................................................................... 43 ANEXO I Manual do Utilizador ........................................................................................................ 47 ANEXO II Esquema de Trabalho ...................................................................................................... 53
i
ANEXO III Gestão do Projecto .......................................................................................................... 57 ANEXO IV Ferramentas Usadas ....................................................................................................... 61 ANEXO V Código SQL ....................................................................................................................... 65
Índice de Tabelas Tabela 1: Objetivos x Tarefas x Resultados ........................................................................................ 3 Tabela 2: Fases do modelo de referência (Chi, 2000) ........................................................................ 6 Tabela 3: Transformações do modelo de referência (Chi, 2000) ....................................................... 6 Tabela 4: Técnicas de visualização (Carvalho & Marcos, 2009) ......................................................... 7 Tabela 5: Categorias de interactividade (Moissa, Borba, Kemczinski, & Gaparini, 2014) ................. 8 Tabela 6: Comparação de linguagens para servidor web ................................................................ 15 Tabela 7: Comparação de SGBDs ..................................................................................................... 17 Tabela 8: Estrutura dos dados originais ........................................................................................... 22 Tabela 9: Extracto de log do Moodle ............................................................................................... 23 Tabela 10: Estrutura dos dados tratados ......................................................................................... 23 Tabela 11: Codificações visuais a usar ............................................................................................. 24 Tabela 12: Catalogação de registos do log....................................................................................... 25 Tabela 13: Exemplo de dados obtido com a view vwSiteForunsTotais ........................................... 28 Tabela 14: Conteúdo das pastas do projecto................................................................................... 31 Tabela 15: Termos e cores usados na aplicação .............................................................................. 49
iii
Índice de Figuras Figura 1: Log do Moodle .................................................................................................................... 1 Figura 2: "Chart Suggestions - A Thought-Starter" (Abela, 2010) .................................................... 10 Figura 3: Tabela periódica dos métodos de visualização (Lengler & Eppler, s.d.) ........................... 10 Figura 4: Análises com GISMO (Milani, s.d.) .................................................................................... 11 Figura 5: Ligação de log a base de dados externa............................................................................ 12 Figura 6: Exportação de log .............................................................................................................. 12 Figura 7: PHPStorm .......................................................................................................................... 16 Figura 8: Depuração com Chrome ................................................................................................... 16 Figura 9: Modelo de referência (Moissa, Borba, Kemczinski, & Gaparini, 2014) ............................ 20 Figura 10: Exportação do log no Excel ............................................................................................. 21 Figura 11: Importação de dados para SQL Server ............................................................................ 21 Figura 12: Codificações visuais (Munzner, 2014) ............................................................................. 24 Figura 13: Desenho da base de dados ............................................................................................. 26 Figura 14: Desenho geral da aplicação ............................................................................................ 29 Figura 15: Interface do utilizador ..................................................................................................... 30 Figura 16: Pastas do projecto ........................................................................................................... 30 Figura 17: Configuração PHP ............................................................................................................ 32 Figura 18: Fluxograma do código JavaScript .................................................................................... 34 Figura 19: Fluxograma do código para mostrar dados de país ........................................................ 35 Figura 20: Listas de issues pendentes após conclusão do projecto ................................................. 42 Figura 21: VAFAE .............................................................................................................................. 49 Figura 22: printscreen de Gráfico de Acessos por DataI .................................................................. 50 Figura 23: printscreen de Gráfico de Acessos por Fórum ................................................................ 50 Figura 24: printscreen de Gráfico de Acessos por Data e Fórum..................................................... 51 Figura 25: printscreen de Gráfico de Acessos Por Data e Fórum II .................................................. 51 Figura 26: printscreen de Gráfico de Alunos e Acessos por Fórum ................................................. 52 Figura 27: printscreen de Gráfico de Acessos por País .................................................................... 52 Figura 28: Redmine .......................................................................................................................... 59
v
Índice de Listagens Listagem 1: Código de criação de tabela que contém dados exportados ....................................... 22 Listagem 2: Código PHP para escolher driver SQL a usar ................................................................ 32 Listagem 3: Código Dimple para criar um gráfico ............................................................................ 36 Listagem 4: Exemplo de código para preparar elemento ......................................................... 36 Listagem 5: Exemplo de código para desenhar elemento geográfico ............................................. 36 Listagem 6: Exemplo de ficheiro geojson com um país .................................................................. 37 Listagem 7: Código para desenhar as bolhas de acessos ................................................................ 37
vii
1. Introdução O ensino à distância, apesar de algumas vozes mais cépticas (Valente & Moreira, 2007), tem vindo a conquistar cada vez mais adeptos e é hoje em dia considerado elemento necessário em qualquer ciclo de ensino (Pedro & Gonçalves, 2013). Esse crescimento devese não só a formações ditas formais mas também como factor de inclusão através de formações ao longo da vida e comunitárias (Spilker, et al., 2013). Das várias plataformas informáticas de ensino à distância existentes, o Moodle é a plataforma de eleição (Costello, 2013). No entanto, apesar de ser uma plataforma muito completa e flexível para o ensino à distância (Costello, 2013), o Moodle não dispõe de ferramentas de fácil utilização para que os docentes possam aferir da sua utilização pelos alunos (Rice, 2015) dispondo unicamente de um módulo de visualização dos logs de utilização (Figura 1).
Figura 1: Log do Moodle
Essa lacuna é um obstáculo à identificação dos padrões de utilização do Moodle por parte dos alunos e consequentemente impede que o docente efectue acções para tentar aumentar a participação e sucesso dos alunos. Este problema revela-se de especial importância para a Universidade Aberta que tem o seu projecto de ensino assente nesta plataforma (Coelho & Rocio, 2009).
1
O cenário apresentado, onde foi identificada a necessidade de melhorar a visualização dos dados resultantes da interacção dos alunos com as unidades curriculares disponíveis na plataforma de e-learning da Universidade Aberta, foi a motivação para a proposta deste trabalho. De uma forma mais abrangente, pretende-se propor uma ou mais formas de representação visual que permitam o mapeamento visual desses dados e respectiva análise. De uma forma mais específica, este trabalho pretende auxiliar os docentes a perceber melhor o nível e qualidade de interacção dos alunos com os módulos das unidades curriculares. Sendo os fóruns o espaço privilegiado de contacto entre alunos e entre os alunos e os docentes (Vagarinho, 2011), e a discussão a unidade de trabalho dentro dos fóruns, medir a utilização destes dois recursos é uma boa estratégia para aferir o empenho dos alunos. Com que frequência utilizam? Que percentagem de alunos participa activamente? Existe alguma relação entre a localização geográfica do aluno e a sua partição? É a estas perguntas que se pretende responder com este projecto de VISUALIZAÇÃO DOS ACESSOS A FÓRUNS NUM AMBIENTE AED (VAFAE). A interacção dos alunos com o Moodle não se esgota nos fóruns e há outras métricas que será interessante analisar. Segundo Vagarinho (2011), actividades como recursos, trabalhos, inquéritos e exercícios são importantes e/ou frequentemente utilizadas pelos alunos. Estender as análises do VAFAE a essas actividades é uma ambição para versões posteriores que venham a ser implementadas. O Moodle guarda nos seus logs informações que permitem responder a estas perguntas, mas a apresentação dessas respostas deve ser clara e intuitiva. A correcta representação dos dados de forma visual e interactiva permite atingir esse objectivo, tarefa que deve ser feita cuidadosamente, pois uma representação visual incorrecta facilmente distorce os dados ou torna a interpretação difícil ou até impossível (Munzner, 2014). Conclui-se que a escolha da representação visual a usar deve ser feita com método e obedecendo às boas práticas já estudadas e compiladas na área que se dedica a este assunto, a Visualização de Informação (Munzner, 2014) daqui para a frente referida como VI.
Sendo a world wide web o meio privilegiado para utilização do Moodle, foi esse o meio escolhido para implementar este projecto. O VAFAE encontra-se instalado em http://vafae.claudiotereso.com e a sua consulta é aconselhada como complemento à leitura deste relatório. Através de uma análise cuidada ao que se pretendia realizar, foi elaborada uma lista onde estão relacionados os objectivos com as tarefas a cumprir para a concretização do projecto e suas respectivas contribuições, a saber: Objectivos Estudo da área de Visualização de Informação Avaliação de ferramentas
Tarefas Revisão teórica/bibliográfica
2
ferramentas
tecnologia e escolha de
disponíveis
plataforma de implementação
âmbito da
limpeza e formatação
visualização
dos dados
da solução
Enquadramento conceptual
Conhecimento aprimorado da
Extracção, análise,
implementação
Capítulos
Instalação e teste de
Definição do
Desenho e
Resultados e contribuições
Construção de um protótipo
Identificação do modelo de dados a ser utilizado
Obter um protótipo funcional
Teste da
Apresentação do
Avaliar feedback e incorporar
Solução
protótipo
sugestões
2
1e3
3
3e4
Tabela 1: Objetivos x Tarefas x Resultados
Os capítulos seguintes são a descrição do trabalho realizado para o cumprimento dos objectivos traçados. O capítulo 2 explora as bases teóricas e o estado-da-arte das tecnologias usadas no projecto, bases que sem as quais não seria possível efectuar um trabalho sólido. Neste
3
capítulo também é feita uma análise sumária das ferramentas analisadas e que levaria à escolha das que foram usadas no projecto. No capítulo 3, é explicada toda a implementação do projecto desde o desenho à fase de testes. É descrito como foram analisados e validados os dados importados de forma a gerar diferentes visualizações. Seguidamente descreve-se a implementação do projecto e o capítulo acaba com a descrição dos testes efectuados e as mudanças a que levaram. Finalmente o capítulo 4 faz um resumo do que foi estudado e implementando e quais as conclusões do projecto. Também são indicadas direcções e passos a tomar para aumentar a utilidade do VAFAE.
2. Estado da Arte Antes da elaboração do projecto foi feita uma revisão à literatura existente sobre os vários temas de interesse para o desenvolvimento e implementação deste trabalho. O objecto deste capítulo permitiu identificar e aprender conceitos relevantes e conhecer projectos semelhantes. Segue-se um resumo, por cada uma das áreas relevantes, do que foi estudado.
2.1.
Visualização de Informação
“A visualização é um método de computação. Transforma o simbólico em geométrico, permitindo que investigadores observem as suas simulações e computações. A visualização oferece um método para ver o que passa despercebido. Enriquece o processo científico e permite profundas e inesperadas descobertas. Em muitas áreas já está a revolucionar a maneira como os cientistas fazem ciência”.
Foi com esta introdução que, em 1987, McCormick, B.H . et al na revista Computer Graphics apresentavam a disciplina de VI como área científica de estudo. Desde essa altura foram publicadas importantes obras de onde se destacam os livros Information Visualization: Perception for Design (Ware, 2012) e Visualization Analysis and Design (Munzner 2014). Segue-se uma explicação dos termos e passos mais importantes a seguir para uma implementação de uma solução de visualização de informação.
Modelo de referência
Para efectuar o processo de transformar dados em visualizações, tarefa que necessita ser feita com método, recorre-se a um modelo de referência que define os passos a tomar e a sua utilidade no processo. O modelo de referência descrito por Chi, E. H. em 2000 e que assenta em quatro fases (Tabela 2) e respectivas transformações entre elas (Tabela 3) serviu de base para o presente trabalho.
5
Fase
Descrição
Dados
Dados em bruto.
Abstracção Analítica
Dados sobre dados, ou seja, meta-dados. Informação visualizável utilizando uma técnica de
Abstracção Visual
visualização. O produto final do mapeamento visual onde o
Vista
utilizador vê e interpreta a vista que lhe é apresentada. Tabela 2: Fases do modelo de referência (Chi, 2000)
Passo de Processamento Transformação dos Dados
Transformação Visual
Descrição Cria uma abstracção analítica a partir dos dados em bruto, normalmente por extracção. Reduz a abstracção analítica a um conjunto de dados visualizáveis. Transforma informação que está num formato
Mapeamento Visual
visualizável numa vista. Tabela 3: Transformações do modelo de referência (Chi, 2000)
Técnicas de representação visual
O objectivo final de todo o processo é a obtenção de uma representação visual adequada aos dados. A escolha da representação visual começa por conhecer o leque de opções disponíveis e depende do tipo de dados que nos é apresentado. Segundo Carvalho, E. & Marcos, A. (2009) são sete as categorias existentes:
Técnica de Visualização
Unidimensional
Bidimensional
Tridimensional
Multidimensional
Temporal
Hierárquica
Rede
Workspace
Descrição As listas sequenciais, baseadas normalmente em texto, são um bom exemplo deste tipo de dados. Exemplos típicos incluem os códigos fonte de programas de computadores, textos com muitas linhas e resultados de pesquisas em documentos. Combina a representação e tipo de dados bidimensional. Exemplos de aplicações em ambientes 2D incluem: Sistemas de informação geográfica (SIG), desenho de hardware, design de jornais e fotografias. Visualização a usar quando ver o objecto em 3D ou o que está no seu interior é fundamental para a execução de uma dada tarefa por parte do utilizador. Mostra dados que primariamente não são espaciais. O número de atributos associado a cada item é sempre mais que três. Os dados utilizados podem ser abstractos e de natureza estatística. A visualização de informação temporal possui duas qualidades fundamentais que a distinguem de simples listas padrão: (1) o facto de que os eventos temporais poderem ser simultâneos ou se sobreporem e (2) as múltiplas escalas subjacentes a dados temporais poderem exigir tanto medições com alta precisão como mais grosseiras (desde segundos até milhares de séculos, por exemplo). Também é conhecido como estrutura em árvore. São conjuntos de dados dispostos em nós, onde cada nó possui apenas um nó pai (situado hierarquicamente acima deste), e pode ter vários nós filhos (situados hierarquicamente abaixo deste). As redes são constituídas por nós e ligações, onde os nós representam um dado pontual e a ligação a relação entre dois nós. Constituída por dois tipos de classes: (1) a tentativa de obter mais área de trabalho no ecrã do computador de uma forma organizada e (2) a tentativa de modificar o ambiente de trabalho com nova informação.
Tabela 4: Técnicas de visualização (Carvalho & Marcos, 2009)
7
Técnicas de interactividade
A interactividade é uma componente importante das soluções de visualização. Apresentar os dados estaticamente apenas permite analisar os dados tal como eles são apresentados. É preciso dar ao utilizador a opção de manipular a visualização de modo a que ele possa obter informações mais pertinentes para a sua análise. Segundo Moissa, Borba, Kemczinski, & Gaparini (2014) são setes as categorias de interactividade:
Interactividade Selecção
Descrição Permitem que o utilizador seleccione os itens do seu interesse. Assim, quando muitos itens são representados e as representações são alteradas, o utilizador pode facilmente acompanhar estes itens e distingui-los dos restantes. Permitem que o utilizador examine diferentes subconjuntos de
Exploração
dados, mostrando novos itens e escondendo outros.
Reconfiguração
representados através de alterações na organização dos itens. Permitem que o utilizador altere a representação visual dos
Codificação
dados.
Abstracção/elaboração
Filtragem
Fornecem ao utilizador diferentes perspectivas dos dados
Habilitam o utilizador a ajustar o nível de abstracção dos dados representados. Permitem que o utilizador altere o conjunto de dados representado com base em condições específicas. Permitem que o utilizador destaque associações e relações
Conexão
entre itens representados ou mostram itens escondidos relevantes a outro item. Tabela 5: Categorias de interactividade (Moissa, Borba, Kemczinski, & Gaparini, 2014)
Outros recursos e informações
Como a VI é uma área em constante evolução, é importante estar atento a recursos online que vão actualizando o estado da arte e publicando soluções inovadoras. Acompanhar estes recursos, como é o caso do blog VizWiz (Kriebel, s.d.), é uma parte importante da aprendizagem. A VI é tanto uma ciência como uma arte e encontrar a melhor representação para um conjunto de dados é um processo iterativo de tentativa, erro e correcção. No entanto, apesar de ter um processo de aprendizagem longo até se dominar, há algumas regras básicas que definem à partida como se deve trabalhar. “Get It Right in Black and White” (Stone, 2010) é uns dos mantras da VI e, especialmente, em projectos de pequena envergadura e em que o tempo é escasso, ganha especial relevo e nunca deve ser perdido de vista. O corpo de conhecimento sobre VI é vasto e para o principiante pode ser difícil interiorizálo. Não devem, por isso, ser descartadas abordagens mais simples que apresentam em versão pronto-a-vestir soluções para o problema em mãos, como o “Chart Sugestions – A Thought-Starter” (Figura 2) ou a “Tabela Periódica dos Métodos de Visualização” (Figura 3).
9
Figura 2: "Chart Suggestions - A Thought-Starter" (Abela, 2010)
Figura 3: Tabela periódica dos métodos de visualização (Lengler & Eppler, s.d.)
2.2.
Moodle
Como já referimos, o Moodle não apresenta nativamente soluções que permitam ao docente analisar de forma eficaz o uso da plataforma pelos seus alunos. Existem, no entanto, maneiras de ultrapassar essa limitação. Uma hipótese é instalar módulos adicionais que permitem esse tipo de análise como é o caso do GISMO (Milani, s.d.), um módulo que apresenta ao docente uma panóplia de gráficos que lhe permitem aferir a utilização do espaço pelos alunos (Figura 4).
Figura 4: Análises com GISMO (Milani, s.d.)
No entanto, esse tipo de abordagem implica a instalação na plataforma de módulos adicionais, opção que só está ao alcance do gestor da plataforma que pode, por variados motivos, não estar receptivo a esta opção. A outra opção disponível é ler os dados dos logs e fazer análises externamente à plataforma. Os dados podem ser lidos directamente da base de dados como sugerido no artigo “Data mining in course management systems: Moodle case study and tutorial” (Romero, Ventura, & García, 2007) mas este método também fica dependente do administrador da plataforma, pois não é suposto um docente ter acesso às bases de dados. Para evitar este problema, o Moodle vem de raiz com um módulo que permite que os logs sejam gravados em tempo real para uma base de dados externa (Figura 5). Activar essa
11
opção permite que os docentes tenham acesso aos dados do log sem acederem à base de dados do Moodle, mas, tal como o método anterior, depende do administrador da plataforma para ser activada e configurada e, além disso, aumenta a carga de tarefas que o servidor tem de realizar com garantido impacto na sua performance.
Figura 5: Ligação de log a base de dados externa
Das hipóteses vistas até ao momento, nenhuma está acessível directamente ao docente o que as inviabiliza automaticamente. Mas existe ainda outra hipótese para trabalhar os dados do log e esta pode, em instalações standard do Moodle, ser usada pelos docentes sem intervenção do administrador. Trata-se da exportação do log para um ficheiro (Figura 6) que pode ser posteriormente usado com qualquer ferramenta de análise de dados.
Figura 6: Exportação de log
2.3.
Criação e desenvolvimento de web sites
É vasta a gama de opções que são colocadas a um programador que pretende desenvolver um web site. Este é constituído por várias peças e cada uma delas pode ser construída recorrendo a uma ou mais tecnologias usando uma ou mais ferramentas específicas para cada uma delas. Esta variedade torna difícil a escolha das melhores tecnologias e ferramentas para levar a bom porto um projecto, mas por outro lado permite ao programador ter a liberdade de escolher ferramentas que melhor domine, o que é certamente uma mais-valia. Escolher um produto envolve analisar uma série de factores pré-estabelecidos, cada um com pesos diferentes na escolha final. No presente projecto teve-se, dentro do possível, em consideração os seguintes:
Satisfação dos requisitos inicialmente estabelecidos;
Críticas aos produtos;
Características distintivas;
Teste prático aos produtos;
Quantidade e qualidade de informação disponível;
Facilidade de utilização e conhecimentos prévios;
Tipo de licença das ferramentas;
Facilidade/custo de publicação online da aplicação.
2.3.1. Ferramentas de Visualização de Informação Sendo o objecto do trabalho uma plataforma online de visualização de informação, a escolha da ferramenta a usar para implementar as visualizações revela-se o mais importante, podendo condicionar todas as demais ferramentas e tecnologias a considerar. Escolher uma framework gráfica não é uma tarefa fácil. O facto de a wikipedia listar cerca de 50 produtos na sua página “Comparison_of_JavaScript_charting_ frameworks” (Wikipedia, s.d.) é um sinal dessa dificuldade. Mesmo tendo em consideração que um dos
13
requisitos é que a framework a usar seja open-source, o leque de opções continua a ser demasiado grande para as testar e avaliar todas convenientemente. Além de ser necessário fazer uma escolha em tempo útil, e não havendo qualquer experiência prévia com produtos semelhantes, era de extrema importância escolher uma framework cuja aprendizagem fosse rápida. A escolha acabou por recair na framework que maior quantidade de recursos e críticas positivas contabilizava. Com cursos online a ela dedicados, vários livros publicados e grande quantidade de elogios, optou-se pelo D3.js (Bostock, s.d.), uma framework de produção de visualizações dinâmicas e pelo Dimple (AlignAlytics, s.d.) que, em cima do D3, acrescenta funções que facilitam a construção de gráficos.
2.3.2. Linguagem e ferramentas de programação Segue-se a indicação das linguagens escolhidas e razão das suas escolhas.
Linguagem de programação no lado do cliente
O JavaScript é a língua franca de programação entre browsers o que define logo à partida que ela seja a eleita a usar do lado do cliente. Essa escolha tinha inclusive ficado definida previamente pela framework gráfica escolhida que, como a esmagadora maioria das frameworks existentes, é em JavaScript.
Linguagem de programação no lado do servidor
Para alimentar os gráficos, os dados vão ser lidos em tempo real de uma base de dados. Por questões de segurança elementares, o acesso às bases de dados não é feito a partir do cliente, pois expõe dados de acesso que podem ser usados por hackers para violar o sistema. Essa limitação implica, por exclusão de partes, que seja necessário código no servidor para realizar essa leitura. Das muitas linguagens existentes, foram avaliadas, comparadas e atribuído um valor entre 0 (pior) e 5 (melhor) às apresentadas na Tabela 6, estando as características ordenadas por ordem decrescente de importância.
O conhecimento prévio da linguagem era um factor muito importante, pois iria com toda a certeza facilitar a escrita do código e foi um factor para ponderar a utilização da ASP.NET. No entanto, como o conhecimento de PHP também é elevado e a sua pontuação global
Utilidade dos conhecimentos para outras situações TOTAL
SIM
SIM
SIM
SIM
NÃO
NÃO
4
5
0
0
5
5
5
5
5
5
?
?
5
4
3
3
X
X
5
2
4
3
5
5
19
16
12
11
X
X
(node.js)
JavaScript
Facilidade de configuração de servidor
JAVA
necessário
Ruby
Facilidade de implementar o código
Pytohn
Conhecimento prévio da linguagem
ASP.NET
Disponibilidade no servidor de alojamento
PHP
superior, acabou por ser essa a linguagem escolhida.
Tabela 6: Comparação de linguagens para servidor web
Ambiente de desenvolvimento
Para escrever o código para o projecto foi usada a versão gratuita para estudantes do ambiente de programação PHPStorm (JetBrains, s.d.) (Figura 7). Este IDE está preparado para escrever e depurar todas as linguagens usadas (HTML, CSS, PHP e JavaScript) e permite ligações a todos os servidores usados no projecto, a saber:
Servidor de produção para envio dos ficheiros do projecto através de FTP;
Servidor SQL para criação, alteração e visualização dos respectivos objectos;
Repositório Subversion (Apache Software Foundation, s.d.) para escrita e leitura das versões.
15
Figura 7: PHPStorm
Outra peça fundamental durante a fase de escrita de código foi o Chrome (Google Inc., s.d.) devido às suas potencialidades de depuração de JavaScript: se for inserida a instrução debugger no código e estiver activada a opção ferramentas do programador (Ctrl+Shift+I), é parada a execução do código e é possível inspeccionar o estado de execução naquele momento (Figura 8).
Figura 8: Depuração com Chrome
2.3.3. Sistema de gestão de base de dados Na escolha do SGBD foram tidos em conta os 10 anos de experiência em Microsoft SQL Server e as várias certificações da Microsoft. Com tão grande experiência acumulada, usar outro produto só faria sentido se as vantagens fossem de monta, o que não se veio a verificar, como se pode constatar pela Tabela 7 onde os vários produtos são comparados e
Disponibilidade no servidor de alojamento
PostgreSQL
MySQL
MSSQL
lhes é atribuído um valor entre 0 (pior) e 5 (melhor).
SIM
SIM
SIM
Conhecimento prévio do SGBD
5
3
0
Facilidade de configuração de servidor
5
5
5
Utilidade dos conhecimentos para outras situações
4
5
3
TOTAL
14
13
10
Tabela 7: Comparação de SGBDs
2.4.
Conclusões
No tempo disponível para implementar o projecto foi impossível fazer uma avaliação e escolha bem fundamentada. Foi necessário ser pragmático e escolher em pouco tempo as ferramentas que melhores garantias davam para se conseguir realizar o projecto no tempo disponível.
17
Apesar de ter sido feita uma avaliação e escolha das linguagens de programação e do SGBD, o mesmo não se passou com o que é a parte distintiva de um projecto deste género, a framework de visualização. Há a perfeita consciência disso, mas também há a certeza que uma boa avaliação das ferramentas existentes é por si só digna de um trabalho exaustivo que consumiria o tempo total do actual projecto.
3. Implementação A fase de implementação e testes permite avaliar o protótipo com base nas ferramentas escolhidas e referidas no capítulo 2. O presente capítulo descreve os detalhes do desenho e implementação feita, os testes e resultados obtidos, bem como os desafios ultrapassados para a conclusão com sucesso do projecto. Todo o código usado no projecto está disponível para consulta em repositório aberto SubVersion no endereço http://svn.vafae.claudiotereso.com e pode ser usado para acompanhar a leitura deste relatório ou para criar ramificações (forks) do projecto. De salientar que o projecto foi desenvolvido com o Chrome como browser principal de testes no qual é garantido o funcionamento de todas as funcionalidades descritas.
3.1.
Definição do âmbito de visualização
Os dados a serem obtidos definem grande parte da estrutura do projecto, sendo a sua pormenorizada caracterização um passo fundamental. Inicialmente há que analisar os dados e verificar a qualidade da informação que se consegue extrair deles. Também é necessário verificar-lhes o tipo (numérico, texto, inteiro, etc.), a categoria (quantitativo, ordinal, etc.), a quantidade e organização (vector, matriz, 2D, 3D, etc.), entre outras características. Seguidamente, os dados brutos têm de ser tratados para os transformar em informação (Coronel, Morris, & Rob, 2013). Essa transformação seguiu uma variante do modelo de referência indicado no capítulo 2, secção 2.1. O modelo em questão foi descrito por Card, Mackinlay e Sheiderman e referido em “Uma ferramenta de Visualização da Informação
para
analisar
o
comportamento
do
aluno
em
um
ambiente
e-learning e sua trajectória de aprendizagem” (Moissa, Borba, Kemczinski, & Gaparini, 2014) e pode ser visto na Figura 9. .
19
Figura 9: Modelo de referência (Moissa, Borba, Kemczinski, & Gaparini, 2014)
Este modelo prevê que os passos de transformação possam ser reexecutados devido à interacção do utilizador. No VAFAE nem todas as visualizações têm uma interacção que necessite de voltar a executar todas as transformações, sendo um exemplo de visualização onde tal acontece a “acessos por país”: para visualizar os dados específicos de um país, é necessário voltar aos dados em bruto e executar todos os passos. Neste caso, esta estratégia permite que só seja carregada a informação de um país quando ela é solicitada, o que, apesar de atrasar a apresentação dos resultados, evita a espera inicial de todos os dados, incluindo alguns que podem nem ser necessários.
3.1.1. Exportação e importação dos dados Como já foi referido (capítulo 2, secção 2.2), a solução para a extracção dos dados é a exportação para ficheiro através da janela de visualização do log. Optou-se por fazer essa exportação em formato Excel (Figura 10) pois oferece melhores garantias de preservação do formato dos dados.
Figura 10: Exportação do log no Excel
De seguida, os dados foram carregados no sistema de gestão de base dados, um SQL Server 2012 instalado no ISP escolhido, usando a ferramenta de importação do Microsoft SQL Server Management Studio (Figura 11). A tabela (Listagem 1) usada para conter os dados replica o tipo de dados existentes na folha de Excel e não precisa de estar criada, pois o processo de importação executa essa tarefa. A utilização dos dados em base de dados SQL é uma mais-valia para a fase de análise, visto que a sua utilização permite rápidas e poderosas modificações e respectivas visualizações.
Figura 11: Importação de dados para SQL Server
21
CREATE TABLE [vi].[moodle_log] ( [Unidade curricular] [nvarchar](255) NULL, [Hora] [datetime] NULL, [Endereço IP] [nvarchar](255) NULL, [Nome completo do utilizador] [nvarchar](255) NULL, [Acção] [nvarchar](255) NULL, [Informação] [nvarchar](255) NULL )
Listagem 1: Código de criação de tabela que contém dados exportados
E agora, com os dados em base de dados SQL, vamos analisá-los. Que dados são registados? Com que formato? Que dimensões nos estão disponíveis? Como devemos trabalhar os dados para melhor utilizar essas dimensões? É com o resultado desta análise que vamos extrair a informação e construir as perspectivas dos dados pertinentes para a conclusão do projecto. O que for decidido nesta fase condiciona todo o trabalho posterior (Coronel, Morris, & Rob, 2013).
3.1.2. Estrutura e análise dos dados originais Na posse dos dados devemos agora analisar a sua estrutura, pois dela depende o tipo de análises e visualizações a implementar (Munzner, 2014). Os dados, como é normal numa base de dados relacional, têm uma estrutura tabular e neste caso, os seguintes atributos: Atributo
Tipo de Dados
Classificação
Unidade curricular
Dimensão
Nominal
Hora
Dimensão
Temporal
Endereço IP
Dimensão
Nominal
Nome completo do utilizador
Dimensão
Nominal
Acção
Dimensão
Nominal
Informação Complementar
Dimensão
Nominal
Tabela 8: Estrutura dos dados originais
Além do formato dos dados, é imprescindível perceber como é que o Moodle os usa. Segundo o artigo “Data mining in course management systems: Moodle case study and tutorial” (Romero, Ventura, & García, 2007), o Moodle regista todos os cliques de rato efectuados para efeitos de navegação pelos utilizadores. A cada clique corresponde uma linha no ficheiro de log. Cada linha de log só faz referência ao que foi efectuado nesse clique e não indica o que se passou anteriormente, ou seja, o registo que refere que foi consultada, respondida ou criada uma discussão não identifica o fórum em que o utilizador se encontra (Tabela 9). Acção
Informação
Linha 1
forum view forum ([url])
Fórum do Tópico 3
Linha 2
course view ([url])
Visualização de Informação 2014 01
Linha 3
forum view discussion ([url)
Abertura do tópico 2
Linha 4
forum add post ([url)
Re: Abertura do tópico 2
Linha 5
forum view discussion ([url)
Abertura do tópico 2
Tabela 9: Extracto de log do Moodle
3.1.3. Estrutura dos dados tratados O formato em que recebemos os dados não é o ideal para fazermos as análises pretendidas. Vamos, por isso, necessitar de ter uma estrutura significativamente diferente de onde vamos querer extrair a seguinte informação: Atributo
Tipo de Dados
Classificação
Nome
Dimensão
Nominal
Endereço IP
Dimensão
Nominal
Fórum
Dimensão
Nominal
Tipo de Acesso (activo/passivo)
Dimensão
Nominal
Data
Dimensão
Temporal
Nº de Acessos
Medição
Numérico, Quantitativo
Tabela 10: Estrutura dos dados tratados
23
Com os atributos catalogados, segue-se a escolha da codificação visual adequada a cada um. A escolha das melhores e piores codificações a usar para cada tipo de dados está estudada e bem identificada (Munzner, 2014), como se pode ver na Figura 12. Da lista de atributos da Tabela 10 só o tipo de acesso e o nº de acessos precisam de ser codificados, já que os restantes serão usados apenas nos eixos dos gráficos. Tendo em consideração a Tabela 10 e a especificações das visualizações a usar, foi decido usar as seguintes codificações:
Atributo
Codificação Visual
Tipo de Acesso (activo/passivo)
Cor
Nº de Acessos
Comprimento, área 2D Tabela 11: Codificações visuais a usar
Figura 12: Codificações visuais (Munzner, 2014)
3.1.4. Transformação dos dados: Teoria Com as análises feitas, é agora altura de proceder às transformações necessárias para colocar os dados num formato conveniente para usar na aplicação. A diferença de formato entre os dados originais e os dados necessários é de tal monta que implica sempre que alguns compromissos sejam feitos. Como tal, a abordagem tomada é umas das várias possíveis. Como se pode constatar pelos dados obtidos, para se saber a que fórum pertencem as linhas referentes a discussões (linhas 3, 4 e 5 da Tabela 9) temos de procurar no log o registo anterior que seja de consulta de um fórum, e que será um registo com o formato “fórum view fórum …”. Neste caso, foi o “Fórum do Tópico 3” (linha 1). Este é o primeiro passo (PASSO I) identificado para o tratamento dos dados: associar as linhas de registo de discussões com a linha imediatamente anterior de consulta de fórum. Um dos objectivos do VAFAE é comparar as actividades passivas (leitura de discussões) com as activas (criação de discussões e respectivas respostas). Para esse efeito foi feita uma listagem e catalogação das diferentes actividades registadas (Tabela 12). Nesta operação (PASSO II) optou-se por ignorar os registos “fórum delete post” e “fórum update post” apesar de esta segunda actividade também poder ser catalogada como activa.
Categoria: Activo/Passivo
Actividade
Activo
forum add discussion
Activo
forum add post
Passivo
forum view discussion Ignorado
forum update post
Ignorado
forum delete post
Tabela 12: Catalogação de registos do log
Também se achou por bem excluir todas as actividades que não fossem efectuadas por alunos. Além dos utilizadores óbvios, “SACCO – SSTE” por exemplo, este filtro (PASSO III) necessita que se saiba a priori o nome dos docentes e outros elementos da equipa docente.
25
Finalmente, e como para o detalhe de análise a efectuar é irrelevante, foi decidido remover do campo “hora” a informação da hora em que foi feito o acesso e ficar só com a data (PASSO IV). É obviamente de interesse saber a que horas os alunos acedem ao sistema, mas essa análise não será feita no presente projecto, sendo um elemento futuro a incorporar no VAFAE.
3.1.5. Transformação dos dados: Implementação Os passos de limpeza e formatação indicados na secção anterior foram implementados recorrendo a views de SQL cujo código pode ser consultado no anexo V. A ordem de implementação dos passos não é necessariamente a mesma com que foram identificados e o esquema respectivo pode ser visto na Figura 13 onde se distinguem quatro áreas: A. Tabelas do projecto; B. Views intermédias de preparação de dados; C. Views finais que vão ser chamadas pelo código do site; D. Tabelas copiadas do sítio ip2nation (Gustafsson, s.d.) que relacionam endereços IP com coordenadas geográficas e países.
Figura 13: Desenho da base de dados
O primeiro destaque no esquema apresentado vai para a tabela tbUtilizadoresDescartados que tem de ser manualmente preenchida com o nome dos utilizadores que ficam de fora da análise (passo III). Idealmente esta tabela seria preenchida automaticamente, mas no log que recebemos do Moodle não consta nenhuma informação relativa ao estatuto do utilizador, não nos restando outra opção. De seguida, na view vwMoodleLogForuns é feita a principal operação de limpeza dos dados, unindo e formatando de acordo com as necessidades as tabelas tbMoodleLog e tbUtilizadoresDescartados, obtendo um conjunto de dados com o passo III efectuado.
Os dados limpos são agora divididos em duas views, uma que contém os registos que indicam acessos aos fóruns vwMoodleLogsForunsView e outra que contém os relativos a criação, respostas e visualizações de discussões vwMoodleLogDiscussoes. A selecção é feita por simples filtros de palavras no campo actividade. Adicionalmente, há um processo paralelo que visa ordenar os fóruns por ordem de abertura. Isso é feito na view vwMoodleLogsordemForuns, que vai alimentar com essa informação a vwMoodleLogsForunsView. Por fim, as duas views são unidas em vwSiteForunsTotais que atribui a cada discussão um fórum e identifica os registos como passivos (só leitura) ou activos (criação, resposta). O resultado é um conjunto de dados limpo, formatado e pronto para ser usado na aplicação (Tabela 13), que tem de ser previamente validado, pois as operações podem ter tido erros e existirem dados inválidos e incoerentes.
27
Campo
Exemplo de Dados
Explicação
Fórum
Apresentação individual
Fórum onde se deu a acção
Actividade
forum view discussion
Acção Efectuada
Hora
2015-02-25 19:25:00.000
Data, hora da acção
IP
82.155.233.84
IP do utilizador
Nome
Cláudio Tereso
Nome do Utilizador
Activo
0
Acção passiva (0) ou activa (1)
Ordem
B
Ordem de abertura do Fórum dada alfabeticamente
Tabela 13: Exemplo de dados obtido com a view vwSiteForunsTotais
Adicionalmente, identificou-se que o número total de acessos podia dar uma ideia errada da actividade dos alunos, visto que um fórum pode ter muitos acessos realizados por poucos alunos. Foi por isso pertinente perceber quantos alunos distintos acedem, activamente e passivamente, aos fóruns. A view vwSiteAlunosPorForum criada a partir de vwSiteForunsTotais, dá essa informação e, para se ter totais de alunos exactos, se um aluno tiver participações activas e passivas, só é contabilizado nas activas. Finalmente temos duas vistas dedicadas à geolocalização dos acessos. Uma, vwSitesAcessosPorIp, devolve todos os acessos com as respectivas coordenadas geográficas, e o outro, vwSiteAcessosPorPais, devolve os acessos de um país pedido. Para obter a geolocalização, e como indicado anteriormente, foram usadas as bases de dados gratuitas disponibilizadas pelo site ip2nation. A informação que é fornecida é um script que cria as tabelas ip2nation e ip2nationcountries. A primeira tem a relação entre endereços IP e os países e a outra informação detalhada sobre todos os países, incluindo as coordenadas do seu centro geográfico. O script está preparado para bases de dados MySQL, mas é facilmente convertido para SQL SERVER 2012.
3.2.
Desenvolvimento da aplicação
Para permitir uma fácil interacção do utilizador com os dados tratados e respectiva visualização é necessário desenhar e implementar uma aplicação computacional. Nesta secção é apresentado o desenho e detalhada a implementação da aplicação VAFAE.
3.2.1. Desenho A Figura 14 ilustra o desenho geral da arquitectura da aplicação. As tecnologias a serem utilizadas foram analisadas no capítulo 2 e referidas na secção 2.3. O core da aplicação é executado em JavaScript no browser do utilizador e os acessos à base de dados são executados no servidor em PHP.
Figura 14: Desenho geral da aplicação
A área da interface pode ser desenhada segundo diferentes combinações e disposições entre as áreas básicas que normalmente a compõem – visualização, menus e de interacção. Em função dos objectivos da aplicação, optou-se por uma solução minimalista, de gráficos distribuídos por separadores com uma introdução à aplicação no separador inicial. Como resultado, conseguiu-se uma interacção e navegação intuitivas com uma área de visualização satisfatória e que se pode ver na Figura 15. A explicação mais pormenorizada da utilização da aplicação bem como de sua interface pode ser encontrada no Anexo I deste relatório, que contém o Manual do Utilizador.
29
Figura 15: Interface do utilizador
3.2.2. Implementação O código foi implementado usando uma estrutura normal para um projecto web em que os ficheiros são separados em pastas consoante o tipo de código. A estrutura final do código ficou como se pode ver na Figura 16 e descrito na Tabela 14, sendo a explicação do funcionamento do código dada nas secções seguintes.
Figura 16: Pastas do projecto
Pasta
Conteúdo
\
Ficheiros gerais do projecto
\css
Ficheiros de Cascade Style Sheet para formatação do HTML
\css\externos
Ficheiros de Cascade Style Sheet para formatação do HTML das bibliotecas Javascript de terceiros
\data
Ficheiros com dados e que fazem acessos a dados
\imagens
Imagens usadas no projecto
\js
Código JavaScript
\js\externos
Ficheiros com bibliotecas JavaScript de terceiros Tabela 14: Conteúdo das pastas do projecto
3.2.2.1.
Dados e acesso a dados
O primeiro passo foi fazer o código PHP para acesso à base de dados. Aceder a base de dados PHP não é só escrever código, é preciso instalar e configurar o controlador para acessos a servidores SQL SERVER. Para o ambiente de programação foi necessário descarregar e instalar o Microsoft Drivers for PHP for SQL Server (Microsoft, s.d.). No servidor em produção, e como se trata de um serviço de alojamento ao qual o acesso é limitado, não foi possível instalar controladores. No nosso caso, o servidor usado tem instalado o software de gestão CPANEL (cPanel, Inc, s.d.) que dispõe de uma página onde se pode configurar os módulos activos e, como já está instalado o controlador para SQL SERVER, basta activá-lo (Figura 17).
31
Figura 17: Configuração PHP
Para finalizar, como o controlador existente em produção, o mssql, e o driver fornecido pela Microsoft, o sqlsrv, têm algumas diferenças de utilização, foi ainda necessário preparar o código para trabalhar com ambos (Listagem 2).
if (extension_loaded('sqlsrv')) include "query_sql_com_driver_sqlsrv.php"; elseif (extension_loaded('mssql')) include "query_sql_com_driver_mssql.php"; else echo "driver para base de dados indisponivel";
Listagem 2: Código PHP para escolher driver SQL a usar
Com os drivers configurados no ambiente de desenvolvimento e no servidor de produção, foi possível criar e testar os acessos à base de dados que são todos efectuados através de uma única página, data/query_sql.php. Esta página, conforme o parâmetro que recebe executa a query respectiva, devolvendo os dados em formato JSON. Por exemplo, para executar a view vwSiteAcessosPorPais, chama-se a página /data/query_sql.php?query= acessos_por_pais.
Para a query vwSiteAcessosPorIp também precisamos de indicar qual o país a consultar. Por exemplo, para obter os acessos feitos a partir de Portugal, chamamos /data/query_sql.php?query=acessos_por_cidade&pais=PRT. Para o mapa-mundo foi usado um ficheiro, em formato geojson tirado do repositório GIT world.geo.json (Sundström, s.d.) e guardado como data/mundo.json. Este mapa apresenta alguns problemas, como, por exemplo, o facto de o mapa de Portugal não representar os Açores e a Madeira mas, até à conclusão do projecto, não foi possível encontrar uma alternativa melhor.
3.2.2.2.
Código HTML & JavaScript
É no browser do utilizador que a maioria do código é executado. Vamos de seguida descrever de que consta esse código.
Preparação da Página – os separadores
Como foi dito na secção 3.2.1, a estrutura visual assenta num conjunto de separadores criados com a biblioteca SimpleTabs (Evangelou, s.d.), em que há um separador com texto introdutório e em que os restantes separadores têm um ou mais gráficos. A página inicial do site, index.php, é constituída essencialmente pelos tags HTML para criar essa estrutura e pela inclusão dos ficheiros de JavaScript que contêm o código da aplicação.
Carregar os dados
O restante código é para carregamento dos dados e construção dos gráficos e o seu fluxograma de execução pode ser visto na Figura 18.
33
Figura 18: Fluxograma do código JavaScript
Como o carregamento de dados é lento, todos os dados são carregados assincronamente para não bloquear o utilizador. Isto está representado com setas horizontais na Figura 18, enquanto as setas verticais representam chamadas síncronas. Todo o processo é despoletado no evento window.onload e finalizado pela rotina mostraGraficos que é chamada apenas no fim da última rotina assíncrona. Entre ambos estes extremos são chamadas as rotinas que executam as queries SQL e a rotina que carrega o mapa do mundo. Os únicos dados que não são carregados neste processo são os acessos de cada país que só serão necessários se o utilizador os pedir, seleccionando o país no mapa-mundo.
Figura 19: Fluxograma do código para mostrar dados de país
Quando o utilizador clica na bolha de um país seleccionando-o, é despoletada a sequência identificada na Figura 19. É feita uma chamada à base de dados, altura em que é mostrada o texto “Aguarde…”. Quando a resposta é recebida, é calculado o número de registos para os quais vão ser pedidas as localizações e preparada a barra de progressão de maneira a que cada incremento da barra represente uma localização obtida. De seguida, e para cada registo, é feito uma chamada callback ao serviço gratuito freegeoip (Fiori, s.d.) que responde com coordenadas e outros dados geográficos do IP pedido. Este serviço tem dois problemas identificados. É ineficaz fazer uma chamada para cada IP e o serviço não oferece a qualidade necessária pois devolve algumas respostas sem cidade indicada ou coordenadas erradas, como é o caso dos acessos com indicação de “Madeira” como cidade e que aparecem localizados no centro de Portugal. Entretanto, esta foi a melhor opção gratuita encontrada.
35
Desenhar os gráficos
Conforme referido na secção 2.3.2, foi usado o Dimple e o D3 para a construção dos gráficos. Como explicado, o Dimple é uma biblioteca em D3 que, através da disponibilização de alguns gráficos pré-definidos, retira complexidade à sua criação quando comparado com a mesma tarefa em D3. O código necessário para criar um gráfico fica assim mais facilitado, como se pode ver no exemplo de um gráfico básico da Listagem 3. Com excepção dos mapas, todos os gráficos foram criados em Dimple.
grafico = new dimple.chart(svg, data); // liga gráfico a dados D3 e a SVG destino grafico.addMeasureAxis("y", "alunos"); // adiciona eixo X grafico.addCategoryAxis("x", "forum"); // adiciona eixo Y grafico.addSeries("activo", dimple.plot.bar); // adiciona série
Listagem 3: Código Dimple para criar um gráfico
Não havendo modelos pré-definidos para mapas no Dimple, foi necessário recorrer às funções em d3.geo para os desenhar. Desenhar um mapa passa por preparar o elemento para conter o mapa (Listagem 4) para depois se desenhar o mapa (Listagem 5).
svgGroupingDoMapaPais=d3.select(separadorDoMapa). append("svg"). append('g').
Listagem 4: Exemplo de código para preparar elemento
svgGroupingDoMapaMundo.selectAll('path') .data(data.features) .enter() .append('path') .attr('d', d3.geo.path().projection(projeccaoMundo));
Listagem 5: Exemplo de código para desenhar elemento geográfico
Para desenharmos o mapa, usamos os dados geojson definidos no ficheiro mundo.json que define uma lista de features em que cada feature é um país (Listagem 6) e que podemos ver na Listagem 5 como data.features.
{"type":"FeatureCollection","features":[{"type":"Feature","properties":{"name":"Albania" },"geometry":{"type":"Polygon","coordinates":[[[20.590247,41.855404],[20.463175,41.51508 9],[20.605182,41.086226],[21.02004,40.842727],[20.99999,40.580004],[20.674997,40.435],[2 0.615,40.110007],[20.150016,39.624998],[19.98,39.694993],[19.960002,39.915006],[19.40608 2,40.250773],[19.319059,40.72723],[19.40355,41.409566],[19.540027,41.719986],[19.371769, 41.877548],[19.304486,42.195745],[19.738051,42.688247],[19.801613,42.500093],[20.0707,42 .58863],[20.283755,42.32026],[20.52295,42.21787],[20.590247,41.855404]]]},"id":"ALB"} ]}
Listagem 6: Exemplo de ficheiro geojson com um país
A outra linha de destaque na Listagem 5 é a instrução d3.geo.path().projection (projeccaoMundo) que define a conversão dos dados geográficos para coordenadas no écran e que é iniciado com
a instrução d3.geo.mercator().scale().translate
(). Após o mapa pronto, desenham-se as bolhas com os acessos (Listagem 7). Isto é feito através da ligação dos dados em dataMapaMundo com os elementos “circle” cujos atributos cx, cy e r são iniciados com os respectivos atributos dos dados.
var circulosPaises=svgGroupingDoMapaMundo .selectAll("circle") .data(dataMapaMundo) .enter() .append("circle") .style("cx",function (d) {return d.x;}) .style("cy",function (d) {return d.y;}) .style("r",function (d) {return d.r;})
Listagem 7: Código para desenhar as bolhas de acessos
37
O último passo é inicializar os eventos do rato nas bolhas. É preciso que as bolhas mostrem a informação do país respectivo quando o rato entra e que as esconda quando o rato sai. Além disso, e mais importante, quando se clica numa bolha, deve ser evocada a construção da informação do país, o que é feito através da sequência de eventos descrita na Figura 19. Essa sequência vai culminar no desenho do país e acessos por cidade, sendo esse código em tudo semelhante ao que acabámos de analisar.
3.2.2.3.
Outros ficheiros
Além dos ficheiros já descritos, ainda compõem o projecto algumas imagens e ficheiros de estilo CSS para formatar os elementos HTML.
3.3.
Testes e validação
O VAFAE ainda não sofreu uma fase de testes formal (em que utilizadores externos ao desenvolvimento testam o produto e verificam se o produto funciona como previsto e se é prático de utilizar), porém já sofreu uma reavaliação ao nível das suas funcionalidades e visualizações (foi feito um esforço para pensar out of the box e imaginar com um utilizador se sentiria a utilizar o produto) e foi testado para eliminação de possíveis erros (bugs) e avaliação de performance. Desse processo resultaram alguns melhoramentos e modificações dos quais é de destacar:
A inclusão da visualização Acessos por Fórum e Data II. A visualização inicial, ao só mostrar a utilização ao longo do tempo de um fórum de cada vez, não permite uma leitura global.
No mapa-mundo, estava inicialmente previsto que seria suficiente passar com o rato por cima de uma bolha para mostrar os dados do país. Devido ao tempo que demora a carregar os dados, era pouco prático para o utilizador esperar vários segundos, sem poder mexer o rato, até a informação estar completa. A mudança para um sistema que obriga a clicar para “bloquear” o país permite que o rato possa ser movido inclusive para outras aplicações o que melhora bastante a experiência do utilizador.
Mas também houve problemas detectados que, por manifesta falta de tempo, ficaram por resolver:
Um problema que se foi agravando à medida que o projecto avançava foi o tempo de espera inicial. No início, todos os dados são carregados em sequência e, quando o último acaba de ser carregado, a aplicação está pronta a ser usada. No carregamento dos dados relativos a um país foi usada uma estratégia diferente: todos os dados são carregados em paralelo e é contado o número de callbacks efectuados. Quando cada callback termina, verifica se é o último e, se for, desenha os dados. Seria interessante experimentar essa técnica para o carregamento inicial dos dados, o que não foi feito por falta de tempo;
Na parte das visualizações, detectou-se que no gráfico “alunos e acessos por módulo” (Figura 26) a representação gráfica apresenta dificuldades de interpretação. Ao escolhermos uma barra de “aluno passivo” no gráfico dos alunos, são mostrados os acessos passivos no gráfico dos acessos. A ideia que passa é que os “acessos passivos” foram efectuados pelos “alunos passivos” o que não é verdade. Os “acessos passivos” foram efectuados pela totalidade dos alunos;
Finalmente, e tratando-se de uma aplicação web, é de importância vital experimentá-la com os vários navegadores existentes no mercado. A aplicação foi desenvolvida e testada em Chrome onde funciona como previsto e foi testada em Internet Explorer 8, Microsoft Edge e Firefox. Os resultados destes testes mostram, sem qualquer dúvida, que a compatibilidade entre browsers está longe de existir. Em Firefox a aplicação não sai do ecrã de “loading”, no Edge a visualização com bolhas de acessos por país não são visíveis e no Internet Explorer o mapa-mundo não é desenhando na escala certa. Este é um problema grave da VAFAE que necessita de ser revisto.
39
3.4.
Conclusões
A implementação começou com a análise dos dados e a sua abstracção em dados utilizáveis. Graças à versatilidade da linguagem SQL foi possível com código “limpo” e de fácil escrita colocar a informação exportada pelo Moodle no formato necessário. Este passo foi fundamental. Implementar todas as transformações de dados no SGBD e libertar o código da aplicação de qualquer tratamento adicional, tornou esse código mais simples de implementar, analisar e corrigir. Com os dados tratados, passou-se à aplicação que foi maioritariamente desenvolvida em JavaScript e com utilização de alguns recursos gratuitos fundamentais: frameworks, bases de dados e web services para geolocalização. Escrever código JavaScript não apresentou qualquer dificuldade, mas a utilização de ferramentas nunca usadas, como foi o caso dos ficheiros em geojson e a utilização das web API do site freegeoip, teve uma curva de aprendizagem elevada, mas revelou-se bastante gratificante. Finalmente, e com alguma surpresa, os diversos browsers testados revelaram comportamentos diferentes na execução do código JavaScript escrito, levando a que o VAFAE apresente resultados que variam de browser para browser.
4. Resultados e trabalho futuro O principal objectivo deste projecto era obter um conjunto de análises visuais sobre os acessos ao sistema de e-learning Moodle, apesar das limitações que o Moodle apresenta. As informações extraídas dos logs revelaram não ter a qualidade adequada para fazer o tipo de análises desejadas, mas provou-se que com algum trabalho de transformação dos dados se conseguia obter dados úteis com os quais é possível realizar uma panóplia de análises. Como objectivo secundário, mas intrinsecamente ligado e indispensável para completar o objectivo principal, pretendia-se tomar conhecimento com o tema da visualização de informação, competência fundamental para construir visualizações competentes que realizassem a sua função de transmitir informação de forma correcta e intuitiva. Foi feito um grande investimento de tempo a consultar literatura especializada para obter os conhecimentos mínimos para realizar o projecto. O projecto obtido é a prova que os objectivos foram plenamente cumpridos, apesar de não haver dúvidas que muito ainda se pode fazer para melhor a aplicação. Como foi explanado na secção 3.3, sobre testes, existem alguns problemas que precisam de ser corrigidos e também foram identificas potencialidades de crescimento do produto. Uma das áreas que merecia alguma atenção e que acabou por não são ser implementada, por falta de tempo, foram as análises estatísticas, uma área de extrema importância e definitivamente a próxima a dever ser implementada. Também seria muito importante o VAFAE poder trabalhar com mais que um conjunto de dados, cada um referente a uma unidade curricular, entre os quais fosse possível alternar. Na Figura 20, pode-se verificar que as tarefas que ficaram por concretizar estão identificadas.
41
Figura 20: Listas de issues pendentes após conclusão do projecto
Tendo como base os objectivos apresentados no capítulo 1 deste relatório, considera-se que o trabalho conseguiu alcançar na totalidade o pretendido, embora o resultado final ainda seja um protótipo de um potencial produto. É também de realçar a miríade de conhecimentos que este projecto exigiu, contribuindo não só para solidificar os conhecimentos adquiridos ao longo da licenciatura, mas também para agregar novos.
Bibliografia Abela, A. V. (2010). Capítulo 8: Choosing a Good Chart. Em The Presentation: A Story About Communicating Successfully With Very Few Slides. AlignAlytics. (s.d.). dimple - a simple charting API for D3 data visualizations. Obtido em 16 de Novembro de 2015, de http://dimplejs.org/ Amazon.com. (s.d.). Amazon Web Services (AWS). Obtido em 16 de Novembro de 2015, de https://aws.amazon.com/pt/ Apache Software Foundation. (s.d.). Apache Subversion. Obtido em 16 de Novembro de 2015, de https://subversion.apache.org/ Bitrock Inc. (s.d.). Cloud Hosting - Bitnami. Obtido em 16 de Novembro de 2015, de https://bitnami.com/ Bostock, M. (s.d.). d3.js - Data Driven Documents. Obtido em 16 de Novembro de 2015, de http://d3js.org/ Carvalho, E. S., & Marcos, A. F. (2009). Visualização da Informação: Relatório Técnico. Centro de Computação Gráfica. Guimarães: Associação CCG / ZGDV - Centro de Computação Gráfica. Chi, E. H. (2000). A Taxonomy of Visualization Techniques using the Data State Reference Model. Proceedings of InfoVis, pp. 69 -76. Coelho, J. S., & Rocio, V. (2009). Implementação de ferramentas específicas ao Modelo Pedagógico da UAb na Plataforma Moodle. Redes universitárias, pós-graduações e complementaridade curricular: actas do XIII Encontro Iberoamericano da Educação Superior a Distância. Lisboa: AIESAD, Associação Ibero-Americana de Educação Superior a Distância. Coronel, C., Morris, S., & Rob, P. (2013). Database Systems: Design, Implementation and Management, Tenth Edition. Boston: Course Technology. Costello, E. (2013). Opening up to Open Source: Looking at how Moodle was adopted in. Open Learning: The Journal of Open, Distance and eLearning, Volume 28, Issue 3, 187-200. cPanel, Inc. (s.d.). cPanel. Obtido em 16 de Novembro de 2015, de http://cpanel.com/ Evangelou, F. (s.d.). SimpleTabs | a lightweight tabs script. Obtido em 1 de Novembro de 2015, de http://nuevvo.com/labs/simpletabs Fiori, A. (s.d.). freegeoip. Obtido em 16 de Novembro de 2015, de https://freegeoip.net Google Inc. (s.d.). Navegador Chrome. Obtido em 16 de Novembro de 2015, de Google: https://www.google.pt/chrome/browser/desktop/ Gustafsson, P. (s.d.). ip2nation - resolve IP to Country. Obtido em 16 de Novembro de 2015, de http://www.ip2nation.com/ Her, J., & Bostock, M. (2010). A Tour Through the Visualization Zoo. Communications of THE ACM, 53, 59 - 67.
43
JetBrains. (s.d.). PHP Editor :: JetBrains PHPStorm. Obtido em 16 de Novembro de 2015, de JetBrains: https://www.jetbrains.com/phpstorm/ Kriebel, A. (s.d.). Data Viz Done Right. Obtido em 16 de Novembro de 2015, de http://vizwiz.blogspot.pt/ Lang, J.-P. (s.d.). Redmine. Obtido em 16 de Novembro de 2015, de http://www.redmine.org/ Lengler, R., & Eppler, M. J. (s.d.). Period Table of Visualization Methods. Obtido em 15 de Novembro de 2015, de Visual Literacy: An E-Learning Tutorial on Visualization for Communication, Engineering and Business: http://www.visualliteracy.org/periodic_table/periodic_table.html McCormick, B. [. (Novembro de 1987). Visualization in Scientific Computing. Computer Graphics, Volume 21, Nº6. Microsoft. (s.d.). Microsoft Drivers for PHP for SQL Server. Obtido em 16 de Novembro de 2015, de Microsoft Download Center: http://www.microsoft.com/enus/download/details.aspx?id=20098 Milani, C. (s.d.). GISMO - Graphical Interactive Student Monitoring Tool for Moodle. Obtido em 13 de Outubro de 2015, de http://gismo.sourceforge.net/ Moissa, B., Borba, E., Kemczinski, A., & Gaparini, I. (2014). Uma ferramenta de Visualização da Informação para analisar o comportamento do aluno em um ambiente e-learning e sua trajetória de aprendizagem. Infodesign - Revista Brasileira de Design da Informação, 11, 337 - 351. Munzner, T. (2014). Visualization Analysis and Design. Nova York, EUA: CRC Press. Pedro, N., & Gonçalves, A. (2013). E-Learning, ensino superior e inovação: análise longitudinal dos processos de adopção de LMS na Universidade de Lisboa. III Colóquio Luso-Brasileiro de Educação a Distância e Elearning. Lisboa: Le@d, Universidade Aberta. Obtido de http://hdl.handle.net/10400.2/2995 Qi Zhu, N. (2013). Data Visualization with D3.js Cookbook. Birmingham, Reino Unido: Packt Publishing, Ltd. Rice, W. (2015). Moodle E-Learning Course Development - Third Edition. Birmingham: Packt Publishing Ltd. Romero, C., Ventura, S., & García, E. (2007). Data mining in course management systems: Moodle case study and tutorial. Computers & Education. doi:10.1016/j.compedu.2007.05.016 Spilker, M., Pulino Filho, A., Orofino Teles, A., Cavasin Zabotto, R., Santos, E., & Silva, S. (2013). O Moodle como ambiente facilitador da inclusão e literacia digital: a experiência de uma comunidade de aprendizagem. III Colóquio Luso-Brasileiro de Educação a Distância e Elearning. Lisboa: Le@d, Universidade Aberta. Obtido de http://hdl.handle.net/10400.2/3168
Stone, M. (30 de Março de 2010). Get it Right in Black and White. Obtido em 15 de Setembro de 2015, de Functional Color: http://www.stonesc.com/wordpress/2010/03/get-it-right-inblack-and-white/ Sundström, J. (s.d.). world.geo.json. Obtido em 16 de Novembro de 2015, de GitHub: https://github.com/johan/world.geo.json Udacity. (s.d.). Data Visualization and D3.JS - Curso Online. Obtido em Julho de 2015, de Udacity: https://www.udacity.com/course/viewer#!/c-ud507/l-3068848585 Vagarinho, J. (2011). E-learning: Estudo sobre as componentes mais usadas pelos intervenientes. Lisboa: Universidade Aberta. Obtido de http://hdl.handle.net/10400.2/1875 Valente, L., & Moreira, P. (2007). Moodle: Moda, mania ou inovação na formação? Testemunhos do Centro de Competência da Universidade de Minho. V conferência Internacional de Tecnologias de Informação e Comunicação na Educação, (pp. 781-790). Braga. Ware, C. (2012). Information Visualization, Third Edition: Perception for Design. Morgan Kaufmann. Wikipedia. (s.d.). Comparison of JavaScript charting frameworks. Obtido em 16 de Novembro de 2015, de Wikipedia - The free Encyclopedia: https://en.wikipedia.org/wiki/Comparison_of_JavaScript_charting_frameworks
45
ANEXO I
Manual do Utilizador
47
No VAFAE pode-se visualizar os acessos dos alunos aos fóruns de uma determinada unidade curricular instalada num sistema Moodle e são usados os seguintes termos e cores:
A
B Acesso/Aluno Activo
Um aluno colocou, ou respondeu a, um post no fórum
Acesso/Aluno Passivo
Um aluno leu um post
Tabela 15: Termos e cores usados na aplicação
A aplicação é constituída por duas áreas principais (Figura 21):
A área A que é composta por separadores, um para cada gráfico existente e um para as instruções;
A área B que, conforme o separador seleccionado, mostra o respectivo gráfico ou as instruções.
Figura 21: VAFAE
49
Segue-se uma descrição dos gráficos existentes e sua utilidade, sendo usados os seguintes critérios:
Quando é usado o termo acesso, todos os acessos de um aluno são contabilizados;
Quando é usado o termo aluno, só é contabilizado um acesso por fórum desse aluno;
Se o gráfico permitir interactividade, as cores da coluna B são usadas; se não permitir, são usadas as cores da coluna A.
Acessos por Data
Mostra todos os acessos efectuados ao longo do curso. Os acessos são separados entre "activos e passivos".
Figura 22: printscreen de Gráfico de Acessos por DataI
Acessos por Fórum
Mostra os acessos divididos por Fórum. Os acessos são separados entre "activos e passivos".
Figura 23: printscreen de Gráfico de Acessos por Fórum
Acessos por Data e Fórum
Combina os dois gráficos anteriores. A selecção de um fórum filtra o gráfico que mostra acessos por data para o fórum seleccionado.
Figura 24: printscreen de Gráfico de Acessos por Data e Fórum
Acessos por Data e Fórum II
Mostra num só gráfico os acessos por data e por fórum. É a mesma informação do gráfico anterior mas com todos os fóruns simultaneamente.
Figura 25: printscreen de Gráfico de Acessos Por Data e Fórum II
51
Alunos e Acessos por Fórum
Identificação do número de alunos que acederam por fórum e acessos por fórum. Permite identificar se um grande número de acessos corresponde a muitos alunos ou poucos alunos com muitos acessos. A selecção de uma coluna em um dos gráficos realça a coluna correspondente no outro gráfico.
Figura 26: printscreen de Gráfico de Alunos e Acessos por Fórum
Acessos por País
Mapa de bolhas de acessos por localização. O mapa principal mostra acessos por país que, quando seleccionado, faz surgir um mapa com acessos por cidade. Os mapas permite pans e zooms.
Figura 27: printscreen de Gráfico de Acessos por País
ANEXO II
Esquema de Trabalho
53
55
ANEXO III
Gestão do Projecto
57
Toda a execução do projecto foi gerida com a ajuda de software adequado, neste caso o Redmine (Lang, s.d.), que foi instalado usando os serviços da AWS Amazon (Amazon.com, s.d.) e da Bitnami (Bitrock Inc., s.d.).
Instalação e Alojamento
O site Bitnami fornece pacotes com servidores virtuais configurados que podem ser alojados nos servidores da Amazon. O processo é simples, rápido e gratuito. A
instalação
resultou
no
site
(Figura
28)
que
pode
ser
consultado
em
http://projecto.vafae.claudiotereso.com. O site está restrito a utilizadores registados, registo esse que pode ser efectuado directamente no site.
Figura 28: Redmine
59
Utilização
Das muitas potencialidades do Redmine foram úteis as seguintes:
Issue tracking: Registo de todos os assuntos pendentes para a concretização do projecto, especialmente os relacionados com o código como bugs encontrados e features por implementar;
Time tracking: todo o tempo gasto com o projecto foi apontado e catalogado. Útil para fazer uma análise do tempo necessário para a implementação total do projecto;
Repository: Apesar de o repositório de código ser alojado fora do Redmine, é possível integrá-lo e consultar o código. Além disso, permite interligação com o issue tracking para contabilizar o tempo e fechar os issues através dos comentários incluídos nos commits;
Documents: Armazenamento de ficheiros do projecto, como este relatório e os diagramas usados;
News: Pequeno jornal onde foi apontado o decorrer dos trabalhos;
Wiki: Foi sumariamente usada para colocar alguma informação sobre o projecto e os recursos utilizados.
Também foi inicialmente pensado o uso dos fóruns para comunicação com a orientação do projecto, mas acabou por se revelar uma opção pouco prática para o uso em questão, tendo-se optado antes pelo tradicional e-mail.
ANEXO IV
Ferramentas Usadas
61
Elaboração do Projecto Ferramentas PHPStorm
Ambiente de desenvolvimento para PHP e JavaScript https://www.jetbrains.com/phpstorm/
SQL Server 2012
Sistema de Gestão de Base de dados http://www.microsoft.com/pt-pt/server-cloud/products/sql-server/
SQL Server 2014
Administração e configuração de SQL Server
Management Studio
http://www.microsoft.com/pt-pt/server-cloud/products/sql-server/
Frameworks JavaScript D3
Execução de conteúdo gráfico dinâmico http://d3js.org/
Dimple
Assenta em D3 e permite a construção de gráficos http://dimplejs.org/
JQuery
Simplificação de escrita de código JavaScript https://jquery.com/
SimpleTabs
Construção de separadores em HTML5 http://fotis.co/projects/simpletabs/
D3.Tips
Criação de tooltips para visualizações D3 http://labratrevenge.com/d3-tip/
Gestão de Projecto Redmine
Gestão de projectos http://www.redmine.org/
YEd
Desenho de diagramas http://www.yworks.com/en/products/yfiles/yed/
Serviços Online Bitnami
Disponibilização de pacotes de instalação de servidores https://bitnami.com/
Amazon AWS
Serviços de Cloud computing https://aws.amazon.com/pt/
PTISP
Alojamento de sites e bases de dados https://www.ptisp.pt/
63
ANEXO V
Código SQL
65
Tabela tbUtilizadoresDescartados CREATE TABLE [vi].[tbUtilizadoresDescartados]( [utilizador] [nchar](20) NOT NULL ) ON [PRIMARY]
Tabela tbMoodleLog CREATE TABLE [vi].[tbMoodleLog]( [Unidade curricular] [nvarchar](255) NULL, [Hora] [datetime] NULL, [Endereço IP] [nvarchar](255) NULL, [Nome completo do utilizador] [nvarchar](255) NULL, [Acção] [nvarchar](255) NULL, [Informação] [nvarchar](255) NULL ) ON [PRIMARY]
Vista vwMoodleLogsDiscussions CREATE view [vi].[vwMoodleLogsDiscussions] as select * from vi.vwMoodleLogsForuns where actividade = 'forum view discussion' or CHARINDEX('add',actividade) 0
Vista vwMoodleLogsForuns CREATE view [vi].[vwMoodleLogsForuns] as SELECT distinct dateadd(MI,datediff(MI,0,Hora),0) as hora ,[endereço ip] as ip ,[Nome completo do utilizador] as nome ,left([Acção],charindex('(',acção)-1) as actividade ,[Informação] as info FROM [vi].[tbMoodleLog] left outer join [vi].tbUtilizadoresDescartados on [vi].[tbMoodleLog].[Nome completo do utilizador]=[vi].tbUtilizadoresDescartados.utilizador where utilizador is null and Informação is not null and left(acção,5)='forum'
67
Vista vwMoodleLogsOrdemForuns CREATE view [vi].[vwMoodleLogsOrdemForuns] as SELECT char(row_number() over (order by hora)+64) as ordem, info as forum FROM vi.vwMoodleLogsForuns md WHERE hora = (SELECT Min(hora) FROM vi.vwMoodleLogsForuns WHERE info = md.info and actividade = 'forum view forum')
Vista vwSiteForunsTotais CREATE view [vi].[vwSiteForunsTotais] as select distinct vi.vwMoodleLogsForunsview.info as forum, vi.vwMoodleLogsDiscussions.actividade,vi.vwMoodleLogsDisc ussions.Hora,vi.vwMoodleLogsDiscussions.ip, vi.vwMoodleLogsDiscussions.nome,iif(charindex('add',vwMoo dleLogsDiscussions.actividade)0,1,0) as activo,ordem from vi.vwMoodleLogsDiscussions inner join vi.vwMoodleLogsForunsview on vi.vwMoodleLogsDiscussions.nome = vi.vwMoodleLogsForunsview.nome and vi.vwMoodleLogsForunsview.hora = (select top 1 a.hora from vi.vwMoodleLogsForunsview a where a.nome = vi.vwMoodleLogsDiscussions.nome and datediff(MINUTE,a.hora,vi.vwMoodleLogsDiscussions.hora) between 0 and 60 order by hora desc)
Vista vwSiteAlunosPorForum CREATE view [vi].[vwSiteAlunosPorForum] as with dados as ( SELECT row_number() over (partition by ordem,nome order by activo desc) as classificacao, [forum] ,[activo] ,[ordem] ,nome FROM [vi].[vwSiteForunsTotais]) select count(*) as alunos,forum, activo,ordem from dados where classificacao=1 group by forum, activo,ordem
Vista vwSiteAcessosPorPais CREATE view [vi].[vwSiteAcessosPorPais] as with acessos (qtd,ip,activo)as ( SELECT count(*) as qtd,vi.fnIpToInt(ip) as ip,[activo] FROM [vi].[vwSiteForunsTotais] group by vi.fnIpToInt(ip),activo) select sum(activo*qtd) as activo,sum(iif(activo=0,1,0)*qtd) as passivo,tbIp2NationCountries.iso_code_3 as country,lat,lon from acessos inner join vi.tbIp2Nation ipnations on ipnations.ip= (select max(vi.tbIp2Nation.ip) from vi.tbIp2Nation where cast(acessos.ip as bigint)>=cast(vi.tbIp2Nation.ip as bigint)) inner join vi.tbIp2NationCountries on ipnations.country=code group by tbIp2NationCountries.iso_code_3,lat,lon having iso_code_3''
Vista vwSiteAcessosPorIp CREATE view [vi].[vwSiteAcessosPorIp] as with acessos (qtd,ip,activo) as ( SELECT count(*) as qtd,vi.fnIpToInt(ip) as ip,[activo] FROM [vi].[vwSiteForunsTotais] group by vi.fnIpToInt(ip),activo) select sum(activo*qtd) as activo,sum(iif(activo=0,1,0)*qtd) as passivo,tbIp2NationCountries.iso_code_3 as country, vi.fnIntToIp(acessos.ip) as ip from acessos inner join vi.tbIp2Nation ipnations on ipnations.ip= (select max(vi.tbIp2Nation.ip) from vi.tbIp2Nation where cast(acessos.ip as bigint)>=cast(vi.tbIp2Nation.ip as bigint)) inner join vi.tbIp2NationCountries on ipnations.country=code group by tbIp2NationCountries.iso_code_3,vi.fnIntToIp(acessos.ip) having iso_code_3''
Tabela tbIp2Nation CREATE TABLE [vi].[tbIp2Nation]( [ip] [bigint] NOT NULL DEFAULT ('0'), [country] [char](2) NOT NULL DEFAULT (''), PRIMARY KEY CLUSTERED ( [ip] ASC ) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY]
69
Tabela tbIp2NationCountries CREATE TABLE [vi].[tbIp2NationCountries]( [code] [varchar](4) NOT NULL DEFAULT (''), [iso_code_2] [varchar](2) NOT NULL DEFAULT (''), [iso_code_3] [varchar](3) NULL DEFAULT (''), [iso_country] [varchar](255) NOT NULL DEFAULT (''), [country] [varchar](255) NOT NULL DEFAULT (''), [lat] [float] NOT NULL DEFAULT ('0'), [lon] [float] NOT NULL DEFAULT ('0'), PRIMARY KEY CLUSTERED ( [code] ASC) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY]
CLÁUDIO FILIPE DA SILVA TERESO V2.1.20151223.1247
Lihat lebih banyak...
Comentários