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.

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.


Immagine La documentazione di AWNPipe comprende dei tutorial che guidano passo passo nell'utilizzo delle varie funzioni.

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.


Immagine Nella distribuzione sono presenti anche esempi e programmi dimostrativi di un certo interesse. Fra gli altri "dict", interfaccia grafica per un dizionario online.

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.


Immagine L'interfaccia grafica di "T.H.E.", un clone di ToolManager per l'OS 3.5.

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

  1. Sito ufficiale
  2. Mailing list di supporto ed area con l'ultima versione beta rilasciata

Queste informazioni sono state verificate ed aggiornate a settembre 2005.

Scheda prodotto