VAFAE - Visualização dos Acessos a Fóruns Num Ambiente EAD

June 14, 2017 | Autor: Cláudio Tereso | Categoria: MOODLE, Educação a Distância, Ensino a Distancia, Visualização Da Informação
Share Embed


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

Copyright © 2017 DADOSPDF Inc.