quinta-feira, 27 de julho de 2017

Dica: Use a dupla SciDAVis + python para carregamento dinâmico de dados

A ideia desta dica surgiu a partir de uma pergunta feita no repositório do SciDAVis no GitHub [1].
English version is after the links.

A questão foi a seguinte: é possível utilizar o SciDAVis para carregar dados dinamicamente em uma tabela, em determinados intervalos de tempo, e atualizá-los em um gráfico?
E a resposta é simples: sim, através de scripts em python no SciDAVis. Porém, infelizmente, só é possível utilizar scripts em python no SciDAVis nas versões disponíveis para Linux (ao menos na maioria das distribuições) e Mac, ou em versões antigas para Windows (≤ 1.D5), conforme já foi noticiado neste blog [2].
Então, para os felizes usuários de Linux e Mac que tem o suporte a scripts em python habilitado, segue um script com um exemplo de como carregar dados de forma dinâmica no SciDAVis, de modo que eles sejam importados para uma tabela e atualizados em um gráfico:
import time
import os
t=newTable("DynamicTable") #Tabela onde os dados serão importados
file="/home/fellype/file.dat" #Caminho para o arquivo com os dados
modTime0=os.path.getmtime(file) # *Obs1
mod="True"
n=1 #
*Obs2
while (mod == "True"):
 t.importASCII(file," ",0,False,False,True,False) # *Obs3
 if (n == 1):
  g=plot(t,"2",0) # Plotando os dados da coluna 2 da tabela t
 time.sleep(20) #
*Obs4
 modTime=os.path.getmtime(file)
 if (modTime == modTime0):
  mod="False"
 else:
  modTime0=os.path.getmtime(file)
  n=2

Com o script acima, se o arquivo "/home/fellype/file.dat" for modificado dentro de um intervalo de 20 segundos, os dados na tabela "DynamicTable" serão atualizados, assim como o gráfico "g".
*Obs1: Obtém dados de quando o arquivo foi modificado pela última vez.
*Obs2: Usado para impedir que um novo gráfico seja criado a cada vez que o arquivo de dados for modificado.*Obs3: A sintaxe da função importASCII é: importASCII(file,"separador de colunas", ignore=0, renameCols=False, stripSpaces=False, simplifySpace=True, newTable=False). Consulte o manual [3] para mais informações sobre o uso de python no SciDAVis.*Obs4: A unidade de tempo na função time.sleep() é em segundos. Faça as contas para converter em minutos, horas, etc..., conforme a sua necessidade.

Uma desvantagem de utilizar a função time.sleep() é que o seu projeto no SciDAVis ficará paralisado durante o intervalo de tempo que for determinado na função. Logo, se você quiser fazer outras coisas no SciDAVis enquanto o script é executado, terá que abrir outra janela e criar outro projeto.
Como não sou um expert no uso de python, acredito que este script possa ser melhorado. Logo, se vocês tiverem sugestões, fiquem à vontade para incrementá-lo e compartilhar com outros usuários.
Até mais.

Links:
[1] https://github.com/highperformancecoder/scidavis/issues/46
[2] http://scidavisbr.blogspot.com.br/2015/12/atualizacao-disponivel-scidavis-1d9.html
[3] https://highperformancecoder.github.io/scidavis-handbook/

________________________________________________________________________