|
Natural Interface Description Language |
|
|
Sommario | Come funziona | Approfondimenti | Download | Esempi | Links |
|
Introduzione Nidl è un piccolo esperimento nato dalla passione per Linux e per la programmazione, unite a un paio di considerazioni linguistiche. Nidl si propone di rendere agevole per chiunque realizzare piccole applicazioni per l'ambiente grafico di Linux. Una delle peculiarità di Linux è l'apertura e la flessibilità del sistema, che colpisce ma al tempo stesso spaventa il nuovo utente: nei primi approcci con questo sistema operativo da un lato si ha la sensazione di poter configurare e modificare qualsiasi cosa, dall'altro ci si sente sperduti e intimoriti al pensiero della mole di conoscenze tecniche che ciò richiede. Ciò lascia ampio spazio alla creatività e all'intelligenza dell'utente, ma implica un "uso della testa" che non tutti sono disposti a mettere in campo nell'uso quotidiano della macchina. Proprio da questo sono nati tanti luoghi comuni su Linux, spesso bollato come sistema operativo per "smanettoni" o "camici bianchi", riservato a una stretta cerchia di appassionati e di difficilissimo uso, installazione e manutenzione. Per la sua stessa genesi, filosofia
e struttura, Linux è un fenomeno in continua evoluzione, del quale
è difficile dare una definizione che non risulti riduttiva e banalizzante.
Da un lato bisogna prendere atto
della proliferazione di nuovi utenti Linux, che non conoscono la praticità
e la velocità dell'interfaccia a carattere e tutte le meraviglie
che si possono realizzare uscendo dai confini di X. Dall'altro lato, senza
nulla togliere all'ottimo lavoro che si sta svolgendo da più parti
intorno alla veste grafica di Linux, qualcuno inizia a osservare una certa
tendenza emulativa: a parte un paio di vecchi WM che sembravano piccole
scimmiottature dell'interfaccia di Windows95, si nota oggi una sempre maggiore
somiglianza delle finestre e dei relativi elementi decorativi allo "stile
Microsoft" e, per contro, una sempre minore flessibilità dei tools
di configurazione che, per rendere il
Non entro qui nel merito del discorso, che trova ampio spazio in altre e più competenti sedi. Osservo solo che molti auspicano che una maggiore diffusione di Linux (un giusto obiettivo cui tanti stanno oggi faticosamente lavorando) non si traduca in una perdita di quelle caratteristiche originarie e originali che tanto ci hanno fatto apprezzare questo ottimo strumento. E' ovvio che per accogliere tanti
nuovi utenti abituati allo "stile Microsoft" la cosa migliore e più
naturale sia fornire loro un sistema somigliante a Windows, sul quale abbiano
a disposizione le stesse applicazioni che usavano prima. Ed è altrettanto
ovvio che pochi sarebbero disposti a imparare il funzionamento di parte
del sistema prima di riuscire anche solo a stampare una semplice lettera.
Ma c'è
Nidl nasce proprio dal tentativo di stimolare la diffusione italiana di Linux, dimostrando non solo che l'uso del sistema può essere semplice, ma che può addirittura essere semplicissimo e alla portata dell'utente medio sviluppare piccole applicazioni che girino sotto l'ambiente grafico, senza dover per questo studiare oscuri trattati sulla programmazione e relativi linguaggi. Per realizzare questo scopo Nidl
usa esclusivamente la lingua italiana sia nell'interfaccia sia nel set
di comandi che compongono il suo linguaggio.
_________________________________________________________
Nidl e linguaggi di programmazione Come si possono avvicinare gli utenti alla programmazione? Ho sempre pensato che in realtà programmare è una cosa semplice, creativa e alla portata di tutti. Mi rendo conto che questa affermazione può suonare pazzesca per chi si trovi per la prima volta davanti a un listato C o assembler. Ma se ci si pensa bene la difficoltà non è tanto nella programmazione in se stessa quanto nel metodo che dobbiamo usare per istruire la macchina, troppo "stupida" per capire istruzioni nel nostro sofisticatissimo linguaggio naturale. In altre parole, per quella meraviglia della natura che è il nostro cervello, è un gioco da bambini istruire una macchina senza alcuna capacità di ragionamento a compiere una serie di operazioni; ma il problema è farle capire quello che vogliamo da lei. Del resto la considerazione è di banale esperienza: più il nostro interlocutore è "stupido", più siamo costretti a spiegargli le cose in modo (per noi) ridondante ed elementare. Per usare una vecchia metafora, noi siamo la mente e il programma è il braccio. Noi l'intelligenza e i creatori del suo mondo e delle regole che lo governano, lui un semplice esecutore che si muove all'interno di questo mondo, senza avere il benché minimo arbitrio. Tutte le azioni che la macchina eseguirà sono racchiuse nello schema da noi previsto e costruito. Tanto più lo schema è corretto, tanto meno vi sarà possibilità che la macchina compia un'azione imprevista. La cosa può essere divertente
e molto creativa, anche perché, se si immagina uno schema infinitamente
complesso, diventa impossibile prevedere tutte le azioni che potrebbe compiere
l'esecutore. Ecco che ci troveremmo davanti ad azioni inaspettate e impreviste,
ma del tutto logiche dal punto di vista della macchina perché implicite
nel ragionamento partorito dal nostro cervello, che rimane il mondo in
cui
Una volta trovato un modo semplice
per istruire la macchina, realizzare applicazioni non troppo complesse
è, per il nostro cervello, decisamente banale. Il maggior ostacolo
è il linguaggio, o per meglio dire la nostra abitudine al linguaggio;
non è un caso che i ragazzini abbiano più facilità
degli adulti a interagire con le macchine e a imparare a programmare, e
che i bambini abbiano maggiore facilità degli
Partendo da queste considerazioni
ho pensato di creare una scorciatoia che aiutasse ad aggirare questo primo
e fondamentale ostacolo: se istruire la macchina è così semplice,
perché dobbiamo usare un linguaggio tanto complicato?
Agli inizi della cosiddetta "era
informatica" l'assioma era rigido e si presentava come un'assoluta necessità.
I processori erano lenti e dotati di poca memoria (intesa in questo caso
come un'area temporanea da usare per le operazioni di traduzione). Il primo
PC era una scatola con dentro il processore e fuori una serie di interruttori
che servivano a impartirgli le istruzioni; per immettere un
Oggi le cose sono diverse. La crescita
esponenziale della potenza di calcolo e della memoria disponibili in qualunque
PC ci mette in grado di usare anche linguaggi meno veloci ed efficienti
ma a noi più vicini e comprensibili. Peraltro la scelta resta aperta,
perché abbiamo a disposizione molti strumenti tra cui scegliere
quello di volta in volta più adatto al nostro scopo: useremo un
linguaggio molto vicino alla
Posto dunque che la programmazione
non presenta in linea di principio grandi difficoltà e che oggi,
a differenza che in passato, possiamo ricorrere a linguaggi più
vicini al nostro, si può concepire l'idea di semplificare ancora
il compito all'utente finale usando un ulteriore passaggio intermedio.
Ed ecco come nasce Nidl. Nidl si
pone esattamente in questa prospettiva, mettendo a disposizione dell'utente
sia un'interfaccia semplice e intuitiva per creare gli oggetti e inserire
i comandi, sia un sottolinguaggio basato su un set di oggetti e comandi
tutti in italiano, con una sintassi scarna e che consente una certapossibilità
di errore.
Ciò è stato possibile
soprattutto grazie alla scelta del tcl/tk, un linguaggio script disponibile
sotto l'ambiente grafico di Linux che già di per sé appare
molto semplice, flessibile e vicino a una lingua naturale. Il lavoro di
traduzione che deve operare Nidl è quindi facilitato e permette
un buon margine di avvicinamento all'utente finale.
_________________________________________________________
Come funziona 1. Il linguaggio Per cercare di realizzare, tramite Nidl, l'obiettivo di un maggiore avvicinamento al linguaggio naturale sono partito da alcune considerazioni sui linguaggi di programmazione. Cos'è che rende così oscuro un listato a un non addetto ai lavori, anche presupponendo la conoscenza del set di comandi che compongono il linguaggio? 1. un eccessivo simbolismo
Ho quindi provato a intervenire su questi elementi creando un set di comandi completamente in italiano, eliminando il più possibile il simbolismo e riducendo la sintassi allo stremo. Ho cercato inoltre di introdurre un minimo di tolleranza all'errore. Ad esempio per scrivere con Nidl il classico "programmino di base", che consiste nel far apparire una piccola finestra col messaggio Ciao Mondo, basteranno le seguenti due righe: assegna
a stringa1 "Ciao Mondo"
Tutto qua!
assegna
a stringa1 "Ciao Mondo"
Funziona lo stesso! Infatti anche se scriviamo una riga con parole estranee al set di comandi, Nidl le ignora e non genera alcun errore. Con gli oggetti funziona ancora meglio.
Qui è necessaria una piccola premessa: per capire come funziona
Nidl bisogna tenere a mente la semplice distinzione tra oggetti e procedure;
gli oggetti sono l'aspetto grafico della nostra applicazione con cui interagisce
l'utente (ad esempio bottoni, caselle di immissione testo, listbox ecc.),
le procedure sono i comandi che il programma esegue quando si avvia o quando
l'utente compie una certa azione, come premere un bottone o cliccare su
un menu.
Nome: etic1
Tipo: Etichetta
Semplice e chiaro. Oltretutto l'oggetto lo crea Nidl in maniera assistita e al massimo l'utente lo arricchisce con gli attributi che preferisce tra quelli riconosciuti. Inoltre, dato che gli oggetti funzionano tramite parole chiave e che vengono ignorate quelle non riconosciute, avremmo potuto tranquillamente scrivere: Nome: etic1
Tipo: Etichetta
Anche in questo caso, funziona lo stesso! Oddio, non è tutto oro quello
che luccica. Ad esempio se immettessimo una parola casuale tra aspetto
e rientrato (cioè tra l'attributo
e l'opzione) avremmo in ogni caso un errore; inoltre questo giochetto non
funziona con i comandi all'interno delle procedure ma solo con gli oggetti.
Comunque anche con i comandi, come abbiamo visto, si può inserire
una riga di testo assolutamente casuale tra una linea e
__________ 2. L'interfaccia grafica A parte la semplificazione del linguaggio, l'aiuto più grosso all'utente è nell'interfaccia grafica. Anzitutto abbiamo un bottone per
eseguire il codice in ogni momento, come in ogni visual che si rispetti.
Insomma se vogliamo inserire nella nostra applicazione una finestra di testo, basta premere il bottone per l'inserimento degli oggetti e Nidl si occupa di inserire il codice nel listato. Potremo poi, in base alla lista e agli esempi disponibili, assegnare all'oggetto gli attributi che più ci aggradano, ad esempio sfondo nero, font courier ecc. Per quanto riguarda i comandi il
lavoro è ancora più semplificato. Nidl non impone all'utente
di conoscere il set di comandi che compongono il linguaggio: basta premere
il relativo bottone per l'inserimento e sarà presentata una lista
di tutti i comandi disponibili divisi in categorie. Una volta selezionato
il comando che ci serve avremo a disposizione un aiuto con la descrizione
dettagliata, un esempio e i parametri richiesti. Sarà quindi Nidl
a inserire per noi il comando nel listato. Ciò
Tanto per avere un'idea dei risultati, ho fatto fare un paio di test ad alcuni amici: anche persone che non sapevano nulla di programmazione sono riuscite a realizzare con Nidl piccole applicazioni. __________ 3. Esempi di applicazioni Nella directory degli esempi sono contenute alcune piccole applicazioni scritte con Nidl: un semplice editor, una calcolatrice, un mailreader e un newsreader. Nidl contiene infatti anche i comandi per la gestione del socket e permette dunque di creare applicazioni che funzionino in rete. Inoltre gli esempi dimostrano come funzionano i protocolli Smtp, Pop3 e Nntp e come si può realizzare un piccolo client che dialoghi con i relativi server per le operazioni di invio e ricezione di posta e messaggi. __________ 4. L'applicazione finale Una volta concluso il proprio lavoro,
un'apposita voce del menu file permette di generare l'applicazione finale.
|
|
|