Scrivere funzioni newLisp auto-commentate

11 07 2009

google_translate.gif Translate To English!

Introduzione

Una cosa che mi piacque molto quando studiai per la prima volta Rebol (un bellissimo linguaggio di programmazione funzionale, creato da Carl Sassenrath), è che si potevano inserire dei commenti all’interno delle funzioni stesse. Cercherò di essere un pò più chiaro. Normalmente, se scrivo un programma in Java (ma anche in C, Pascal, Basic, etc…) scrivo i commenti alle funzioni in un modo simile al seguente:

/* Questo è il commento alla mia  bellissima funzione */
function miaFunzione() {
   faccioQualcosa();
}

Il commento (quello in mezzo ai simboli /*  */ ), anche se posto sopra alla funzione stessa, è però staccato, indipendente da essa, sotto ogni punto di vista. Solo utilizzando programmi esterni (come javadoc) si può allora generare della documentazione che “colleghi” il commento alla funzione. Inoltre, se spostassi la funzione, o la mettessi in un altro programma, potrei anche dimenticare di copiare il suo commento. Nei linguaggi funzionali come newLisp e Rebol, possiamo però sfruttare la loro omoiconicità per inserire il commento all’interno della funzione stessa. Questo ci porterà notevoli vantaggi:

  1. Se copio / sposto la funzione, il commento verrà copiato con essa, sempre.
  2. Molti linguaggi di scripting (compreso newLisp) hanno una comoda console per impartire i comandi. Questo significa che, si possono realizzare dei comandi ad-hoc, per leggere tali commenti, direttamente dalla funzione stessa, e senza ricorrere a programmi esterni (simili a javadoc).
  3. Il commento (e la documentazione in genere), non essendo necessario estrarlo con tools esterni, sarà sempre aggiornato (non rischio di avere una funzione X ma con un commento estratto Y – più vecchio della funzione stessa, solo perchè non ho rilanciato il comando di aggiornamento della documentazione).
Passiamo alla pratica

Ora che ho chiarito (spero!) un pò meglio la mia idea, cerchiamo di capire come metterlo in pratica usando il nostro newLisp. Prima di tutto scriviamo una funzione molto semplice:

(define (somma-valori argValore1 argValore2)
   (println (+ argValore1 argValore2) )
)
>> (somma-valori 10 20)
30

Bene, ora che ho la funzione, inseriamo un breve commento per spiegare il suo funzionamento. Lo possiamo fare in diversi modi, in base al numero di informazioni (e al tipo) da mettere. Il sistema più semplice è inserire una stringa che contenga il commento (ma newLisp ci permetterà di fare ben altro!):

(define (somma-valori argValore1 argValore2)
   "Questa funzione addiziona due numeri interi."
   (println (+ argValore1 argValore2) )
)

La possibilità unica nel suo genere che hanno i linguaggi omoiconici è che il codice (il programma vero e proprio) e i dati sono in realtà la stessa cosa, quindi newLisp non si “scandalizza” se, nel bel mezzo di un programma, inseriamo una stringa, senza chiamare funzioni, senza assegnazioni! Ma ora arriva la parte più interessante: proprio perchè in newLisp i dati sono codice, ed il codice sono dati, possiamo manipolare la nostra funzione come una lista qualunque, quindi:

>> (nth 1 somma-valori)
"Questa funzione addiziona due numeri interi."

Meraviglioso! Abbiamo potuto estrarre il commento dalla funzione! Ora guardate qui… create nel vostro ambiente newLisp (dalla console) questa funzione:

(define (helpme argFunction)
   (nth 1 argFunction)
)

Ora provate a digitare:

>> (helpme somma-valori)
"Questa funzione addiziona due numeri interi."

Fantastico! Basta quindi stabilire uno standard ed avremo, gratis (  :-)  ) , un comodo sistema di help online! Ma allora, perchè fermarci qui? Proviamo in questo modo:

(define (somma-valori argValore1 argValore2)
   (
      (comment "Questa funzione addiziona due numeri interi.")
      (version 1.1)
      (last-update "2009-07-01")
   )
   (println (+ argValore1 argValore2) )
)

Il nostro semplice commento, scritto sottoforma di stringa, ora è diventato una lista, contenente dei “tag” (comment / version / last-update) rileggibili dalla nostra funzione di help:

(define (helpme argFunction)
   ( println "DESCRIPTION: " (lookup 'comment (nth 1 argFunction)) )
   ( println "VERSION    : " (lookup 'version (nth 1 argFunction)) )
   ( println "LAST-UPDATE: " (lookup 'last-update (nth 1 argFunction)) "\n" )
)

>> (helpme somma-valori)
DESCRIPTION: Questa funzione addiziona due numeri interi.
VERSION    : 1.1
LAST-UPDATE: 2009-07-01

I vantaggi di un metodo simile sono evidenti: se aggiungessimo anche una funzione per indicizzare le funzioni scritte (quindi potendo anche cercarle scrivendo solo una parte del loro nome), allora avremo un ambiente di sviluppo e test di prim’ordine!

Anche stavolta siamo quasi alla fine. Spero che l’articolo possa fornirvi spunti utili al vostro lavoro e divertimento!

A presto!





Horror movie cult: musica by Goblin… fantastica!

6 07 2009

google_translate.gif Translate To English!

Salve gente! Questa volta facciamo un off-topic fuori dagli schemi: niente programmazione, niente tips & tricks, niente realtà simulate. E allora?

E allora oggi si parla di musica! Ma non di musica qualunque, ma di un genere conosciuto e apprezzato soprattutto dai “vecchietti” come me: parliamo dei film horror e delle musiche dei Goblin!

Chi erano costoro? Forse i più giovani non li conosceranno, e forse nemmeno tutte le persone straniere (non vissuti in Italia). Seguitemi allora, vi farò fare un breve ma terrificante salto nel regno delle musiche horror!
Non mi dilungherò molto in stupide chiacchiere, lascio quindi la “parola” al mitico Claudio Simonetti (ma non solo lui!), uno dei creatori di questi splendidi capolavori musicali.

Partiamo con… Phenomena.

Colonna sonora dell’omonimo film (sempre Dario Argento). Ecco un link per ascoltarla:

http://www.youtube.com/watch?v=dIk98cCkBdA

E per vedere un pezzetto del film:

http://www.youtube.com/watch?v=S_UZHixfglk

Mi raccomando: anche se si tratta di un film “vecchio” (1985), contiene scene MOLTO forti, guardatelo solo se non avete problemi di stomaco!

Avevo 15 anni quando l’ho visto al cinema… quasi me la facevo sotto!!!

Opera.

Bel film, con una colonna sonora degna di un teatro dell’opera! La particolarità di questo horror-movie, è la scena della ragazza con gli spilli che le tengono aperti gli occhi, obbligata dall’assassino a veder massacrato di coltellate il suo amico! Una scena allucinante, se poi la si vede con il sottofondo di una musica “solenne”, allora lo spettacolo è completo. Guardate qui:

http://www.youtube.com/watch?v=xYBmoRMV1zg

Anche questo movie clip è raccapricciante, quindi mi raccomando!

Questo è un altro brano musicale “storico” legato a questo film:

http://www.youtube.com/watch?v=h4j1lJRns-k&NR=1

Inferno.

Ora ci spostiamo indietro nel tempo, siamo negli anni ‘80. Il nome dice tutto: Inferno ed il successivo, Suspiria, sono due film ispirati a fiabe (terribili!). Un vero incubo, soprattutto se si pensa che sono films creati quasi 30 anni fà!

http://www.youtube.com/watch?v=MxPig78E844

Suspiria.

Siamo sempre negli anni 80, e ogni commento è superfluo:

Video clip (una scena veramente forte!):  http://www.youtube.com/watch?v=M6zJGUUiG0c&feature=related

Musica – tema principale: http://www.youtube.com/watch?v=nMDCtP6Virw&feature=related

http://www.youtube.com/watch?v=sPJY_F4xC0M

Tenebre.

Due corti video descrivono chiaramente il film: 

http://www.youtube.com/watch?v=31yURxpZYq0

http://www.youtube.com/watch?v=iE3CpRkLPu4&feature=related (attenzione a questo video: include scene MOLTO violente).

Profondo Rosso.

Vorrei concludere questo breve tour con quella che credo sia una delle più belle e terribili musiche mai create: Profondo Rosso.
Il suo nome, tratto dall’omonimo film è, a mio parere, un vero capolavoro (è la suoneria del mio cellulare!). Ecco qui il brano:

http://www.youtube.com/watch?v=DLIrAswLrhU

E questo video: http://www.youtube.com/watch?v=tw6jxnakRno&feature=related

Bene, anche oggi abbiamo concluso e, se state leggendo queste righe, mi rendete un uomo felice: significa che non siete morti di infarto!  :-)
Questo off-topic è stato un viaggio interessante alla riscoperta di un vero genio dell’horror italiano: Dario Argento.

Alla prossima!!!





Micro sondaggio: newLisp, SQL e database

3 07 2009

google_translate.gif Translate To English!

Sondaggio:

1) Siete interessati ad argomenti relativi a newLisp ed i database?

2) Se si, quali informazioni vi interesserebbero maggiormente?