Intervista con Stephen Kelly di KDAB


Ciao Stephen, anche se il tuo nickname “steveire” ci svela già in parte le tue origini puoi presentarti in modo che in nostri lettori ne sappiano un po’ in più di te?

Certamente. Ho usato steveire per un po’ di anni su IRC e altrove. Per le persone non irlandesi, è un qualcosa tra “Steve” e “Ire” (che sta per Irlanda), ma nei fatti è “Steve” e Éire, così, nelle rare occasioni che lo dico, lo pronuncio come “steve-air-eh”. Mi sono spostato da Dublino, Irlanda a Berlino nell’estate 2009 per iniziare un lavoro in KDAB.

Hai recentemente vinto un premio per il tuo contibuto in Qt* 4.6. Di che si tratta?

Ho contribuito ad alcune nuove funzionalità e API per il sistema Qt Model/View, più in particolare, alle API per muovere le righe e le colonne in un modello. Mi ero accorto di una mancanza nelle API e l’ho voluta colmare in modo da rendere più semplice per me spostare gli elementi in un modello o un proxy senza riscrivere lo stesso codice ogni volta.

Ah, model-view. Abbastanza astratto. Quali funzionalità ha aggiunto il tuo contributo? Cosa hai reso più semplice?

La funzionalità principale del mio contributo è la convenienza. Era già possibile spostare gli elementi in un modello emettendo i segnali layoutAboutToBeChanged e layoutChanged e ridefinendo QPersistentModelIndexes nel modello. Tuttavia, non è banale far funzionare quel codice correttamente. Ci sono dettagli con cui avere a che fare quando si spostano gli elementi in un ramo diverso dell’albero, e un insieme differente di dettagli quando si muovono nello stesso ramo (si muove l’elemento su o giù?). C’è anche il bisogno di assicurare che il movimento sia valido. Per esempio, un QModelIndex non può essere spostato per essere il suo proprio discendente.

Le nuove API rimuovo le responsabilità allo sviluppatore che non deve più a che fare con tutte queste complicazioni. Il mio contributo ha fatto sì da implementare tutti i movimenti in una modalità generica così che chi implementa una classe derivata da QAbstractItemModel deve solo fare qualcosa del genere:

if (!beginMoveRows(sourceParent, start, end, destParent, destRow))
    return; // esce subito in quanto il movimento non è valido
// Sposta i dati interni nel modello
endInsertRows();

Una parte meno importante del mio contributo è stata quella di realizzare un completo insieme di test di unità per l’API di spostamento. È stato però importante, perché ho trovato e corretto un numero di bug significante nel codice appena una settimana prima del rilascio di Qt 4.6.

Il lavoro fatto su QAbstractItemModel come si lega al tuo lavoro in KDAB?

Il mio lavoro in KDAB attualmente mi coinvolge principalmente sull’infrastruttura Akonadi, che è scalabile, veloce e generica per accedere ai dati PIM. Parte degli obiettivi di Akonadi puntano a rendere l’infrastruttura più semplice per chiunque voglia scrivere un’applicazione per accedere e manipolare dati PIM. Ho scritto un modello generico, l’EntityTreeModel (derivato da QAbstractItemModel), e diversi modelli proxy per rendere più semplice per “fare clic assieme” su alcuni pezzi per creare un’applicazione PIM con quel modello e alcune viste.
Ciò vuol dire che è più semplice scrivere una nuova applicazione rubrica, una nuova applicazione calendario, o in modo significativo per KDAB, un nuovo client Kolab.

Ho sentito dire di cartelle email virtuali in Akonadi. Che ruolo gioca QAbstractItemModel in tal caso?

Akonadi tratta spesso con dati gerarchici – Un albero di una cartella su un filesystem, un insieme innestato di cartelle di posta, o un albero di collezioni e elementi su un server Groupware. Tali strutture permettono agli utenti di ordinare e dividere in categorie i loro dati, ma non rendono il loro compito per nulla più facile.

Le cartelle virtuali sono un concetto in Akonadi che ti permette di organizzare gli elementi in strutture personalizzate da posizioni differenti multiple. Tipicamente i contenuti di una cartella virtuale in Akonadi sono il risultato di una interrogazione di ricerca, o una collezione di elementi con una annotazione simile a un’etichetta semantica. In virtù del fatto che le cartelle virtuali operano indipendentemente dall’attuale posizione dei dati, elementi simili da posizioni differenti multiple possono essere raggruppati assieme. Anche tipi diversi di dati possono essere raggruppati assieme se ha senso. Per esempio, se hai alcune email e alcuni contatti etichettati come rilevanti per il “lavoro di sviluppo su Kolab”, possono essere raggruppati assieme con lo scopo di un’elemento di interfaccia grafica speciale come un sommario o una visione d’insieme.
QAbstractItemModel nasconde le informazioni in questo concetto. Internamente, l’EntityTreeModel riconosce che una particolare collezione è virtuale, e perciò contiene solo collegamenti a elementi, ma esternamente non c’è differenza per l’applicazione, che semplicemente tratta sempre con QModelIndexes. Non c’è alcuna differenza per l’utente che si aspetta che una collezione virtuale possa avere un aspetto speciale per individuare la ricerca di una collezione o una collezione di elementi etichettati.
Il vantaggio di avere l’astrazione è che non c’è un codice inscatolato speciale richiesto per operare su collezioni virtuali tramite il modello. Il che vuol dire che i modelli con proxy possono banalmente essere usati dove è appropriato e dove può essere ragionevolmente ci si aspetta di lavorare in tutti i casi.

Hai vinto un N900, uno smartphone basato sul nuovo Maemo di Nokia. Cosa stai pensando di farci? Ti piacerebbe intraprendere qualche sviluppo su Maemo?

Non ho ancora guardato per bene Maemo, ma sapendo che userà di più Qt nelle prossime versioni dovrei avere la vita facilitata nell’iniziare a usarle. Utilizzerò l’N900 come mio nuovo telefono, mi impegnerò ad adattare Akonadi e il resto di KDE PIM per lavorare su questo dispositivo.

Stai lavorando anche sulle note di KDE PIM. Qualche novità al riguardo? Con KDE che utilizzerà Akonadi, le note ne faranno ben presto uso? Qual è il vantaggio?

Le note sono una parte di PIM e sarà accessibile in lettura/scrittura tramite Akonadi. Ci sono diversi vantaggi, principalmente vantaggi generici che vengono con l’uso di Akonadi. Principalmente, permette la memorizzazione di rete, o altrimenti la memorizzazione evitando di dover essere sempre connessi. Akonadi memorizza nella cache tutti i cambiamenti fatti mentre era disconnesso, poi, una volta che torna la connettività, sincronizza il tutto. Ciò vuol dire che puoi memorizzare le tue note su un server Groupware o FTP, modificarle da varie parti e riaverle sincronizzate. Le applicazioni che usano le note non si renderanno nemmeno conto che le attività remote non sono memorizzate in locale (ma solo messe in cache) perché tutte le applicazioni di Akonadi usano l’interfaccia uniforme EntityTreeModel parametrizzata per tipo.
Certamente, le note saranno sincronizzate anche localmente. Se hai una nota in due posizioni visibili, tramite kjots, modificandola in una delle due ubicazioni, apparirà la modifica anche nell’altra. Questo è un risultato quasi ovvio dovuto all’uso dell’infrastruttura Qt Model View e dell’architettura model/view di Akonadi. Diverse applicazioni non devono comunicare con ogni altra per avere l’aggiornamento. Riportano solo quello che è indicato dal modello.

Grazie per averci dedicato parte del tuo tempo, Stephen, e buona fortuna per i progetti su QAbstractItemModel, Akonadi e KJots!

A cura di Giovanni Venturi. Tratto da: KDAB.

* Qt è il toolkit multipiattaforma che permette la creazione di applicazioni su Windows, Linux, Mac, Unix vari, Symbian, ecc… di applicazioni grafiche e non. Sviluppato inizialmente dalla società Trolltech, successivamente acquisita da Nokia.

About these ads

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...