jVTLlib
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.
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.
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:
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.
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.