_Home_ My.Projects() $BLOG! About.me #Contact

Login

 | jVTLlib


Cos'è

Questa libreria Java (oramai obsoleta) fornisce un interprete per il linguaggio VTL v1.1 (ulteriori informazioni sul sito ufficiale).
Inizialmente sviluppata come progetto per tirocinio universitario, nella forma di un proof-of-concept, doveva poi essere invece riscritta da zero per la versione successiva delle specifiche VTL (nel frattempo era stata pubblicata la versione 1.2, che introduceva modifiche sostanziali ma rendendola incompatibile con le precedenti versioni) e pubblicata per l'uso accademico e/o sperimentale.

Il progetto, per mancanza di tempo ed effettivamente anche per mancanza di una userbase di qualsiasi tipo (ancora oggi tranne che per gli addetti ai lavori, nessuno sa cosa sia VTL e per cosa venga usato), è stato bruscamente abbandonato.

Specifiche

Data la natura "sperimentale" di queste libreria, solo una parte delle istruzioni e delle funzionalità descritte dalle specifiche originarie sono state implementate.
Di conseguenza, è stato necessario scrivere una variante delle specifiche originarie, che spiega in maniera più o meno esaustiva ciò che questa libreria può fare.

Per chi fosse interessato, è possibile scaricare una copia delle specifiche (ancora in bozza) in formato PDF QUI
Ed è inoltre possibile scaricare un file di definizione di linguaggio per Notepad++, che permette l'evidenziazione della sintassi e l'attivazione della stessa per tutti i file con estensione *.vtl QUI

Si fa notare che questa libreria è OBSOLETA a partire da giugno 2018, dato che è stata rilasciata la versione 2.0 delle specifiche.

Caratteristiche

Un concetto interessante su cui si basa VTL è il suo essere agnostico rispetto alla fonte dei dati: esiste, ma non mi interessa conoscerne formato, posizione, versione metodo di accesso o altro. La cosa importante, qualsiasi siano le informazioni, è che queste possano essere translate/rappresentate in una forma tabellare.
La libreria ha un'interfaccia da implementare, che espone solo due metodi: uno per leggere e uno per scrivere. L'implementazione di questa interfaccia è a carico di chi sta integrando la libreria nel proprio progetto. Questo permette di nascondere a jVTLlib i dettagli di interazione con la base di dati, ed è quindi possibile interagire con dati di natura inaspettata.

Nell'esempio seguente, VTL è stato usato per modificare un'immagine, applicando dei semplicissimi filtri per pixel:

create function THRLDRGB(Ri,Gi,Bi,COLOR,SOGLIA){
	returns
		if( (Ri>=SOGLIA) and (Gi>=SOGLIA) and (Bi>=SOGLIA) ) then 0 else COLOR
	 as integer
}

create function VARIANCE(COLOR,MUL){
	returns
		if (COLOR*MUL)>255 then 255 else if (COLOR*MUL)<0 then 0 else (COLOR*MUL)
	as integer
}

/* inizio codice*/
img:=get("input.bmp")

HALF := 0.5
TWENTY := 1.2
EIGHT := 0.8
WHITE := 240

sq0:=img[calc(THRLDRGB(R,G,B,R,WHITE) as "R",THRLDRGB(R,G,B,G,WHITE) as "G",THRLDRGB(R,G,B,B,WHITE) as "B")]
sq1:=img[calc(X+100 as "X",0 as "R")]
sq2:=img[calc(Y+100 as "Y",0 as "G",VARIANCE(B,TWENTY) as "B")]
sq3:=img[calc(X+100 as "X",Y+100 as "Y",VARIANCE(B,HALF) as "B",VARIANCE(B,TWENTY) as "G")]

big:=union(sq0,sq1,sq2,sq3)

put("output.bmp:200:200",big)

Ottendendo questa trasformazione:

input

Input

File BMP 100x100px

output

Output

File BMP 200x200px


In un altro test è stato addirittura possibile leggere un file MIDI e traslando le note di una ottava verso l'alto.

Ovviamente image editing e sound editing non sono assolutamente i casi d'uso più frequenti per jVTLlib, ma certamente mostrano le potenzialità di un linguaggio totalmente agnostico rispetto ai dati.

Sviluppi futuri

Sto lavorando (seppur lentamente) ad un linguaggio similmente agnostico, ma molto più usabile, anche in altri contesti non prettamente finanziari.
Questo linguaggio (nome in codice provvisorio GERTRUDE, da GTD, Generic Data Table) probabilmente vedrà la luce non prima dell'anno prossimo ma, diversamente da VTL, avrà fin da subito a disposizione degli strumenti di sviluppo completi, tra cui almeno un interprete e un semplice editor.

Codice sorgente

GITHUB LOGO Sorgente (English)