FXRuby è una libreria per la progettazione di interfacce utenti (GUI), basata su
FOX Toolkit, una libreria open source scritta in C++ da
Jeroen van der Zijp.
FOX Toolkit nacque come
Free Objects for X (FOX), il target era lo sviluppo di interfacce per il sistema
X Windows. Da allora sono passati 10 anni, rispetto all'insieme delle librerie grafiche
Motif, in cui per inserire un singolo bottone erano necessarie dozzine di linee di codice, con
FOX bastava una singola linea. Grazie a questo vantaggio,
FOX ha raggiunto importanti traguardi, tra i quali il
porting per Windows e il
supporto per la programmazione 3D e l'utilizzo per creare interfacce grafiche per i più importanti sistemi operativi.
FOX Toolkit è scritto in C++ e questo costituisce un requisito fondamentale per operare con questa libreria.
FXRuby, Create Lean and Mean GUIs with Ruby, spiega come realizzare interfacce in
Ruby basandosi sulle librerie
FOX. Questo libro si rivolge a programmatori software, che vogliono imparare lo sviluppo di applicazioni GUI usando il linguaggio di programmazione
Ruby. Non rientra tra gli obiettivi degli autori dare le basi di programmazione in
Ruby, di conseguenza i lettori ai quali si rivolge il testo sono quelli che dispongono di una buona infarinatura della programmazione in
Ruby.
Al contrario non è necessario avere conoscenze sulla programmazione delle GUI, nel corso del libro viene affrontato dettagliatamente questo argomento. Nella
prima parte,
Building an FXRuby Application, viene descritta la procedura per scrivere una piccola applicazione
FXRuby, comprese le istruzioni per far sì che il proprio
Ruby abbia l'estensione
FXRuby.
L'interprete di
Ruby carica la libreria
FXRuby a runtime, introducendo una serie di nuove classi
Ruby e costanti nel processo. Dal punto di vista dello sviluppatore la libreria
FXRuby è vista come una qualsiasi altra libreria 'pura' di
Ruby, l'unica differenza è che il codice sorgente della libreria è diverso.
FXRuby espone tutte le funzionalità della libreria
FOX, ma va oltre le caratteristiche di base, per fornire un'interfaccia di alto livello. Quindi piuttosto che scrivere innumerevoli linee di codice in C++ per mappare gli eventi dell'interfaccia utente al codice eseguibile delle applicazioni
FOX, in
FXRuby è sufficiente connettersi ad un blocco Ruby direttamente da un widget utilizzando pochissime linee di codice.
FOX fornisce
supporto per ogni elemento dell'interfaccia utente: etichette, bottoni, campi di testo, ma permette anche di sviluppare form basati su GUI e di gestire la visualizzazione 3D. Un'altra caratteristica veramente importante è che le GUI generalmente utilizzano widget più o meno complessi;
FOX offre solo funzionalità di base, invece di implementare classi e metodi per widget esistenti. Questo approccio offre diversi vantaggi e in particolare
FOX, essendo progettato come una soluzione
object-oriented ed estensibile,
permette di definire il comportamento dei widget che crea e di utilizzare in una moltitudine di GUI. Inoltre questa libreria utilizza veramente poche righe di codice e questo permette di ottenere alte prestazioni con la riduzione dei rischi di bachi nel codice. Infine, non bisogna dimenticare la licenza di
FOX che è di tipo
Lesser GNU Public License (LGPL).
Il libro risulta completo sin dalle fasi iniziali, l'installazione è considerata per i principali sistemi operativi: Windows, MAC OS X e Linux. Nel libro viene descritto come realizzare una galleria fotografica, passando dal codice fino alla GUI per la gestione delle foto. Nella
parte seconda,
FXRuby Under the Hood, si passa alla parte più tecnica, cioè quella che permette ad un'interfaccia di essere collegata al codice
Ruby e realizzare così controlli e widget.
Il metodo usato per collegare i widget ai
chuck di codice di
Ruby è
connect(). Esso
crea un oggetto target e un identificatore di messaggio e li assegna al messaggio del mittente, così da non alterare il modello di programmazione degli eventi guidati di
FOX. Si è parlato tante volte di widget, ma forse non tutti sanno che si tratta di piccoli blocchi di codice collegati ad elementi dell'interfaccia grafica. Per esempio, quando si accede da
File | Apri si attiva il widget collegato all'apertura dei file.
I principali widget sono quattro -
Imperative,
Selection,
Entry,
Display - ed è possibile utilizzarli in combinazione; nel testo l'argomento viene trattato ampiamente. Fino alle ultime pagine,
FXRuby, Create Lean and Mean GUIs with Ruby offre la possibilità al programmatore abituale, ma anche a quello
newbie, di capire e utilizzare le librerie
FOX.

Il testo è ottimo; il linguaggio è molto semplice e permette di acquisire, pagina dopo pagina, coscienza di cosa sono le interfacce grafiche e come svilupparle utilizzando una libreria scritta in C++ in un linguaggio di programmazione come
Ruby. Personalmente ho ritenuto questo libro molto utile, soprattutto perché in poche pagine sono presenti le nozioni fondamentali per utilizzare le interfacce grafiche nei miei programmi scritti in
Ruby.