Recensione di AWNPipe
A cura di Gabriele Favrin
Articolo pubblicato su Amiga Life 112 (luglio/agosto 2000)
Nota bene: l'articolo proposto in questa pagina è
proprietà dell'autore e non può essere distribuito o
riutilizzato in alcun modo o forma senza il suo consenso scritto.
Le informazioni qui riportate risalgono alla data di pubblicazione
dell'articolo e non è detto che siano ancora valide o
che rispecchino lo stato attuale dei programmi, le posizioni delle persone
interpellate o quelle degli autori stessi.
Contenuti
Introduzione
Da qualche tempo un file di nome "awnpipe-handler" ha fatto capolino nella directory "L" di molti Amiga, e sono già diversi i programmi che si rifiutano di partire in sua assenza. Di cosa si tratta?
AWNPipe è un device AmigaDOS utilizzabile dai programmatori
di qualsiasi livello per effettuare tutta una serie di operazioni che
vanno dall'uso di una comune pipe alla gestione della clipboard, dello
stream di caratteri immessi dall'utente e dei tooltype delle icone; sin
anche alla creazione di complesse GUI ClassAct/Reaction, con tanto di
supporto ARexx e Commodity.
AWNPipe nasce nel 1997 per mano del canadese Bill Parker,
già autore di parecchi script per il browser AWeb.
All'inizio doveva essere semplicemente uno strumento di supporto per
uno script, poi, come spesso accade, si è evoluto, sia in
base alle necessità del programmatore, sia grazie ai
consigli dei betatester ed in tempi più recenti degli
utenti. Ma andiamo con ordine.
Le basi: cos'è una pipe?
Con pipe si intende un meccanismo software che consente a due programmi
di comunicare fra loro in maniera semplice e senza far ricorso a
funzioni di sistema. Le pipe, molto usate su Unix, operano come dei
tubi (da qui il nome): un programma si pone da un lato del tubo e invia
dei dati che il secondo programma, dall'altro lato, riceve nell'ordine
"first in, first out" (i primi dati ad entrare saranno i primi ad
uscire). Anche AmigaDOS mette a disposizione una pipe, che,
però, risulta piuttosto limitata.
AWNPipe, al contrario, estende il meccanismo fino agli estremi. Ad ogni
utilizzo della pipe, specificando gli opportuni parametri in coda al
nome del file (è bene che ogni coppia di programmi utilizzi
un nome univoco per evitare di interferire con flussi di dati altrui),
è possibile decidere abbastanza liberamente a quale capo del
tubo collegarsi, riutilizzare un tubo usato in precedenza, specificare
l'ordine nel quale i dati devono essere trasmessi (a partire dal primo
o dall'ultimo immesso) o anche inserirsi come "terzo incomodo" per
monitorare, solitamente a scopo di debug, una conversazione in atto fra
altri programmi.
Chi si è già servito di una pipe ne
conoscerà probabilmente lo svantaggio principale, il
rischio, cioè, che un programma resti bloccato in attesa di
dati che non arrivano, perché non ancora immessi o
perché il programma che li deve inserire è andato
in guru. AWNPipe risolve il problema in due modi, sia tramite una
modalità "non bloccante" (la pipe restituisce il controllo
al programma chiamante anche in assenza di dati ad esso destinati), sia
tramite un parametro, utilizzabile in caso di emergenza, che chiude
tutti i tubi aperti.
Ancora, AWNPipe consente di effettuare automaticamente delle modifiche
ai dati in transito. E' possibile ottenere la conversione da/a HTML di
caratteri quali "<" e ">" (in realtà il
progetto è iniziato proprio a questo scopo),
nonché decidere arbitrariamente quali caratteri sostituire e
con che cosa.
AWNPipe può anche essere istruita per collegare un capo o
l'altro del tubo alla clipboard di sistema, rendendone molto semplice
la gestione.
Funzioni avanzate
A un livello leggermente superiore si trovano funzioni normalmente non
appartenenti ad una pipe. Così come è possibile
collegare gli estremi del tubo alla clipboard, si può fare
lo stesso con un file, consentendo di automatizzare la lettura o la
scrittura dei dati in transito senza appesantire il programma che si
serve di AWNPipe. Questa funzione si rivela particolarmente utile in
fase di debug o studio delle caratteristiche più avanzate.
E' infatti semplice istruire la pipe per aprire due console (che,
è utile ricordarlo, a livello AmigaDOS sono viste come file)
ed inserire i dati in una, vedendo immediatamente i risultati
nell'altra.
Proseguendo questa panoramica su alcune delle infinite caratteristiche
di AWNPipe (presentarle tutte sarebbe davvero impossibile), veniamo a
funzioni ancora più potenti, nonché strane per
una pipe. Oltre che trasmettere dati ad altri programmi, AWNPipe
consente di eseguire, tramite la lettura e scrittura diretta dallo
stesso capo del tubo, operazioni altrimenti complesse, se non
irrealizzabili con certi linguaggi. Ad esempio, è possibile
effettuare il confronto di stringhe avvalendosi delle
funzionalità di "pattern matching" di AmigaDOS (esempio:
"AWN#?e" equivale ad "AWNPIPe"). Per farlo è sufficiente
aprire una pipe con i parametri del caso e poi inserire il pattern e di
seguito le stringhe da confrontare. Dopo ogni scrittura sarà
sufficiente leggere il risultato per sapere se la stringa immessa
corrisponde al pattern iniziale. Facile, no?
Si possono poi intercettare i caratteri digitali dall'utente a livello
di "input device" e gestirli internamente, proprio come fanno i vari
ToolManager ed MCP, con la differenza che AWNPipe consente di lavorare
in qualunque linguaggio, script AmigaDOS compresi!
Creazione di GUI
Con lo stesso meccanismo visto finora è possibile creare e
gestire GUI anche complesse. Si, esatto: basta aprire una pipe,
inserire, una per una, le linee di definizione, leggere i risultati
(attenzione a gestire gli eventuali errori in fase di definizione!) e
poi le scelte dell'utente, alle quali si può reagire
modificando in maniera dinamica sia il contenuto dei gadget, sia la GUI
stessa.
AWNPipe utilizza le classi BOOPSI "ClassAct" e supporta le
funzionalità introdotte da "Reaction" in AmigaOS 3.5. Il
primo elemento che si definisce in una GUI è la finestra che
la contiene. E' consentito scegliere quali gadget devono essere
presenti (ridimensionamento, profondità, iconificazione,
ecc.) e le caratteristiche proprie della finestra (titolo, supporto
AppIcon quando iconificata, AppWindow, gestione diretta dei tasti
utente, limiti alla possibilità di ridimensionamento, ecc).
Successivamente si può passare alla definizione del resto
della GUI, utilizzando semplici linee di comando contenenti il nome del
gadget ed i relativi parametri. Oltre alle funzioni gestite
direttamente da AWNPipe (che automatizza anche alcune procedure), gli
sviluppatori registrati di ClassAct, o coloro che possiedono il DevCD
2.1, possono utilizzare direttamente le tag per un maggiore controllo
dei singoli gadget. E' inoltre disponibile una completa gestione dei
menù, con tanto di barre di separazione e indicatori degli
hotkey (la classica "A" seguita dalla lettera), cosa rara per programmi
di questo tipo. Come ciliegina sulla torta, AWNPipe offre anche un
sistema di "bubble help" per ogni elemento della GUI.
Al termine della definizione, inviando il comando "open", si
vedrà la propria GUI apparire sul WB o sullo schermo
pubblico specificato. A questo punto e fino al termine del programma
sarà sufficiente restare in attesa degli eventi leggendo la
pipe e gestirli come più opportuno.
Ma non è tutto: vogliamo che il nostro programma accetti a
sua volta comandi ARexx o possa essere controllato tramite "Exchange"
come qualsiasi commodity? Le versioni più recenti di AWNPipe
permettono anche questo. Tramite il semplice meccanismo delle letture e
scritture su un capo del tubo è possibile infatti creare un
host ARexx e ricevere comandi dall'esterno.
Per chi realizza programmi che devono continuare a funzionare fra un
input e l'altro (e non possono, quindi, restare bloccati in attesa
delle azioni dell'utente), è stato pensato un particolare
comando che, inviato alla pipe, restituisce il controllo al chiamante
dopo un tempo specificato. Ciò consente, fra l'altro, la
creazione di cicli che non appesantiscono la CPU.
Conclusioni: una questione di filosofia
Proprio l'ultima funzione descritta ha fatto gridare allo scandalo chi
ritiene che AWNPipe sia distante dalla filosofia di Amiga.
Ciò è senz'altro vero: AWNPipe allontana i
programmi dallo stile di sviluppo basato su porte messaggi, chiamate
all'OS, ecc. Con AWNPipe tutto si riduce a scrivere dei comandi su un
file e leggerne i risultati.
Un approccio opposto alla filosofia Amiga, dunque, ma nel contempo
– è fuor da ogni dubbio – semplice e
vantaggioso. AWNPipe può essere utilizzato da chiunque
sappia gestire l'I/O su file, in qualunque linguaggio (C, ARexx, script
AmigaDOS, BlitzBasic, Amos...). Il funzionamento resta uguale, a
differenza di quanto accade con librerie ed estensioni di taluni
linguaggi di alto livello.
Se a questo sommiamo il fatto che AWNPipe è grauito,
reperibile su Aminet, incluso nel CD del 3.5 e nel pacchetto del
browser AWeb, viene davvero da chiedersi perché non
approfittarne e dare ai propri programmi, anche ai più
semplici script ARexx, un'interfaccia grafica e, paradossalmente
rispetto a quanto detto, un'integrazione con l'OS altrimenti
difficilmente ottenibile senza una lunga esperienza di programmazione.
Approfondimento
Due parole con l'autore
Abbiamo chiesto a Bill Parker, creatore di AWNPipe, di aiutarci a capire meglio il suo programma.
D: Ciao Bill. AWNPipe è ormai un prodotto completo ed estremamente versatile. Come è nato e perché?
R: Ho cominciato a scrivere AWNPipe per necessità personale, allo scopo di velocizzare alcune parti di un client NNTP in ARexx.
D: Hai incontrato delle difficoltà durante lo sviluppo?
R: No, non ho avuto particolari problemi. AmigaOS è abbastanza versatile, una volta che se ne comprendono i meccanismi di funzionamento.
D: Molta gente, ad un primo sguardo, trova AWNPipe abbastanza complesso. Cosa ne pensi?
R: L'impressione di complessità deriva dal fatto che sono disponibili moltissime opzioni. Prese singolarmente risultano facili da usare.
D: Cosa consiglieresti a chi si avvicina ad AWNPipe per la prima volta?
R: Studiate i tutorial e non tentate di imparare tutto in una volta! Molti, dopo aver provato AWNPipe, si rendono conto che è più semplice di quanto pensassero. Di nuovo, imparate programmando: prendete uno degli esempi e provate a modificarlo.
D: AWNPipe è distribuito sotto forma di "childware", ovvero con la richiesta, per chi lo utilizza, di effettuare una donazione ad un ente benefico che opera in favore dei bambini. Come mai questa scelta?
R: Ho creato AWNPipe perché mi piace programmare ed vedere cosa gli altri riescono a ottenere da essa è per me fonte di soddisfazione. La distribuzione "childware" è semplicemente un modo per incoraggiare la gente ad aiutare il prossimo.
D: Che suggerimenti daresti, da programmatore a programmatore, a chi utilizza AWNPipe?
R: Da programmatore a programmatore, dici? Non esitate a porre domande. La Mailing List di supporto è un ottimo luogo nel quale imparare.
D: In conclusione, quale futuro vedi per questo tuo programma?
R: AWNPipe ha già trovato il suo spazio sul CD dell'OS 3.5
ed è utilizzato da molti script per il browser AWeb e anche
da uno per IBrowse.
Al momento sono parecchi i progetti in fase di sviluppo. Fra questi, un
programma di analisi azionaria e grafici commerciali.
Gli utenti hanno iniziato soltanto ora ad esplorare le
possibilità offerte da AWNPipe...
Indirizzi utili
Queste informazioni sono state verificate ed aggiornate a settembre 2005.
Scheda prodotto
- Autore: William H.M.Parker
- Licenza: liberamente distribuibile
- Reperibilità: CD OS 3.5, AWeb, Aminet, sito di supporto