Pensieri e parole su HCI, home computing, tecnologie desktop e sul Progetto Lobotomy

venerdì 29 febbraio 2008

PlexyDesk

0 commenti
Ieri ho scoperto un nuovo (almeno per me...) progetto, segnalato dal ben noto blog di pollycoke (di cui mi ostino a seguire il feed nonostante la scarsa affinita' che provo con il personaggio che lo mantiene...).
PlexyDesk e' un desktop manager che si presenta con la promessa di permettere all'utente di gestire piu' facilmente le informazioni ad esso accessibili. Sebbene mi sia astenuto dal gridare al miracolo guardando i video pubblicati (che si incentrano in larghissima parte alle proprieta' decorative dell'ambiente... Fuffa, insomma...), molto simpatica ho trovato l'idea di organizzare i task in forma di icone sul desktop: ogni iconcina rappresenta un programma aperto, e cliccandoci sopra si apre e si chiude la finestra relativa. Nonostante i forti limiti di questo approccio (per cui gli elementi sulla scrivania virtuale vanno inevitabilmente a confondersi tra riferimenti a processi in esecuzione, files e launchers), vedo che non sono l'unico a reputare la tradizionale taskbar non piu' sufficiente ad un moderno ambiente operativo, e questa soluzione (se opportunamente implementata) potrebbe essere un discreto compromesso verso un futuro in cui saranno le attivita', e non i singoli files, ad essere oggetto dell'attenzione dell'utente.
Nota a margine: la navigazione del sito del progetto mi ha fatto tornare in mente il proposito di usare anche io video e supporti multimediali assortiti per le dimostrazioni dei componenti di Lobotomy; quasi quasi faccio un filmino dell'output dello unit test concernente gli observers del VFS di Hyppocampus 0.3rc2 e lo metto su YouTube :-P

mercoledì 27 febbraio 2008

L'Imbuto

0 commenti
Si sa che maggiore e' l'integrazione software che si vuole raggiungere piu' ricca e flessibile deve essere l'API di riferimento, che deve considerare quanti piu' casi possibile in modo da unificare il comportamento delle applicazioni e convogliare l'informazione in un numero limitato di punti cruciali per poterla smistare e manipolare facilmente.
Sempre nell'ottica di tagliare al massimo lo schema XML per le "view" che dovranno essere rappresentate in Synapse, e lasciare all'interprete (o meglio, al compilatore: sto accarezzando l'idea di compilare i templates descritti, per ovvi motivi di efficienza...), ho buttato un occhio alla lista di idee e propositi per funzionalita' da includere prima o poi direttamente nel framework (se non addirittura nei reconditi meandri del sistema, ad uso implicito per tutti) e mi sono accorto di avere in passato gia' pensato ad alcune cosucce che torneranno utili.
Riporto qui copia di tale lista, commentando gli elementi che maggiormente necessitano di delucidazioni, con la speranza di ottenere un poco di feedback sulla bonta' dell'API e su eventuali side effects non precedentemente previsti.
  • scritture a blocchi mirate. Questo sarebbe da includere in qualche modo nell'interfaccia verso Hyppocampus (ovvero: girando attorno all'attuale interfaccia POSIX che passa per il VFS del kernel), e servirebbe a facilitare ed accelerare la scrittura su supporto permanente di ogni modifica apportata dall'utente a qualunque metadato e soprattutto ai contenuti dei files, si' da eliminare completamente il concetto di "salvataggio" esplicito. Le scritture dovrebbero avvenire ad ogni singolo cambiamento apportato (al piu' schedulando temporaneamente i contenuti e ripetere il ciclo solo ogni N millisecondi), ma il problema sta' nella necessita' di esprimere la posizione assoluta della modifica (ad esempio, se correggo il testo nel mezzo di un file) senza spostare gli altri contenuti che vi stanno attorno (si ricorda che l'interfaccia POSIX nasconde il partizionamento dei files in blocchi e fa apparire il tutto contiguo: se si aggiungono N bytes, gli altri vengono shiftati e dunque riscritti...)
  • attivazione dei processi batch quando il PC e' in idle. Chiaramente questo meccanismo dovrebbe permettere di sfruttare il clock inutilizzato della macchina per procedimenti impliciti (ad esempio l'estrazione automatica dei metadati, o magari anche il fetching della posta e dei feeds RSS), e dovrebbe essere tarato per bilanciarsi autonomamente entro intervalli di tempo brevi: insomma, va bene fare questo genere di operazioni quando ad esempio parte il salvaschermo (come fa Seti@Home), ma personalmente credo che questo sia un approccio molto rudimentale al problema...
  • Staminal. Su questo mi sono gia' espresso in un paper apposito
  • estrazione dei metadati in funzione del contesto ambientale. Largamente ispirato dal gia' menzionato splendido articolo "Magic Ink", ritengo sia una idea potenzialmente buona quella di categorizzare (= popolare di metadati mirati) i contenuti in funzione del luogo, del tempo e, piu' in generale, del contesto in cui sono creati e manipolati. Sarebbe necessario ponderare sulle euristiche da adottare
Ci sarebbe forse altro da segnalare ma per ora mi fermo qui, anche perche' e' venuto tardi e tra l'inizio e la fine di questo post ho mandato una mezza dozzina di mail.
Di materiale su cui concentrarsi ce n'e' a iosa. Tutto sta nel trovare il tempo...

martedì 26 febbraio 2008

Navigator

0 commenti
Serata ricca di complessi ragionamenti tra vecchie e nuove idee: mettendomi all'opera sulla definizione dello schema XML per i templates da far interpretare poi a Synapse (di DTD, XML Schema e Relax NG mi son gia' rotto, sto adottando una mia sintassi estremamente informale che prima o poi formalizzero' meglio...), e partendo dal presupposto di ridurre all'osso il numero di elementi utilizzabili, sono (ri)emersi numerosi concetti solo parzialmente indagati nei mesi scorsi, alcuni qui menzionati ed altri che hanno vissuto solo poche ore nella mia sola testa. Mi stupisce vedere come tutto si ricollega e come molti conti tornino quando ci si ferma un momento a meditare: vedro' di accompagnare la pubblicazione dello schema (o almeno del primo, incompletissimo e bacato draft) ad una ricca spiegazione sulle scelte e sugli apparenti paradossi che verranno adottati.

Ma questo post ha uno scopo preciso che trascende la mia attuale attivita' di yoga creativo.
Scartabellando la lista di widgets che avrei voluto in passato implementare nella libreria Kiazma, di cui si dovrebbe trovare copia incompleta in fondo al file NEWS accluso all'ultima release di Synapse, mi sono accorto che numerosi oggetti non avranno piu' ragione di esistere nella prossima generazione del framework, essendo per lo piu' legati alla canonica concezione di interazione e di desktop: non servira' piu' un file chooser (essendo fondamentalmente impossibile riferirsi direttamente ad un item e dovendo passare tutto per un result set), ne' tantomeno un widget che permetta di selezionare una applicazione installata (non esistendo "applicazioni"...)...
Tra tutti i nomi segnati, uno mi ha fatto tornare in mente una idea forse abbastanza buona ma che ad oggi scarto non essendo piu' in linea con la direzione intrapresa dallo sviluppo, ma che vorrei qui riproporre a futura memoria e con la speranza che possa risultare interessante ed utile ad altri.
Il widget in questione e' il KiazmaNavigator, ed e' stato partorito durante l'osservazione dei video di presentazione del mai sufficientemente discusso iPhone. Di che si tratta? Semplicemente, di un contenitore di pannelli. Piu' o meno come il GtkAssistant, ma a due dimensioni di navigazione.
Fondamentalmente avrebbe dovuto trattarsi di un oggetto volto a facilitare lo sviluppo di interfacce per i piccoli monitor dei devices mobili, entro cui ordinare una serie di schermate (pannelli, liste, immagini...) secondo un ordine tabellare anziche' lineare: alcune potevano essere messi "sotto", altre "sopra", o a destra e a sinistra. Ma "sopra" e "sotto" rispetto a cosa?
Credo che tutti abbiano visto almeno un video sullo scorrimento delle immagini nel gia' menzionato dispositivo targato Apple, in cui trascinando col dito da una parte all'altra si passa al file precedente o successivo; ebbene, perche' non usare lo stesso metodo per navigare dappertutto? E perche' non estendere le direzioni di navigazione alla dimensione verticale?
Immaginando di poter potenziare la sopra descritta interfaccia di visualizzazione delle foto, perche' non aggiungere anche un pannello "sotto" (ovvero: raggiungibile trascinando il dito da sotto a sopra) ad ogni immagine che ne riassuma le proprieta' (dimensione, data di creazione...)? E permettere di tornare alla navigazione delle cartelle spostandosi in alto (trascinando il dito da sopra a sotto)? E visualizzare una cartella o un'altra usando sempre lo spostamento orizzontale? Ed entrare in un'altra cartella spingendo la schermata in giu' con la falange?
Il KiazmaNavigator avrebbe avuto appunto il compito di semplificare la gestione di questo ordinamento, e di implementare il codice di contorno per la gestione dell'"attrito" durante gli spostamenti del dispotivo di puntamento (l'indice della mano).
Non e' detto che l'idea sia completamente rigettata, essendo comunque a tutt'ora valida pure nel Lobotomy che verra' se si ragiona nell'ottica di dover operare su una superficie ridotta come quella di uno smartphone, ma al momento la rimuovo dalla lista.
Se qualcuno nel frattempo vuole trarre ispirazione, faccia pure ;-)

lunedì 25 febbraio 2008

LoboBuilder?

0 commenti
Breve post per annunciare il fatto che nel weekend ho a lungo ponderato sul traduttore di "viewers" da includere in Synapse, ed anzi per meglio analizzare il problema sto abbozzando un DTD.
Prossimamente vedro' di studiare il funzionamento ed il codice del GtkBuilder, widget recentemente introdotto nello stack GTK+ proprio per costruire interfacce a partire da una descrizione XML: quel che vorrei fare e' molto simile, con la differenza che nel mio caso devo rendere piu' esplicita la distinzione tra gli elementi rappresentativi del result set estratto da Hyppocampus su cui il template viene applicato e gli elementi dediti al layout e alle funzionalita' dell'applicazione descritta, si' da innestare automaticamente nell'interfaccia grafica finale presentata concetti come l'environmental mapping e l'aggiornamento per mezzo degli observers.
Tra ieri ed oggi ho abbandonato il proposito di usare XSLT in quanto produrrebbe risultati troppo statici, e sono orientato all'implementazione di un vero e proprio interprete che tag per tag costruisca l'interfaccia con widgets Kiazma (misto JSON?) e provveda a distribuire coerentemente i signals per l'integrazione con gli altri meccanismi impliciti del sistema.
Altre novita' fresche fresche sul modello che voglio costruire: possibilita' di creare templates di rappresentazione per result sets o per singoli items, forte contenimento dei templates (che non potranno descrivere piu' di una schermata, ma potranno comunque riferirsi ad altri templates. Insomma: l'interfaccia per il "client di posta" non sara' descritta in un unico file, ma ci sara' quello per leggere i messaggi, quello per rispondere ad una mail, quello per scriverne una nuova...), e magari anche possibilita' di includere un template dentro un altro in modo da usarli come "super-widget" riusabili.
Ma prima di andare oltre, farei quasi bene a studiarmi decentemente tutti sti' formati XML...

venerdì 22 febbraio 2008

Deja vu: il paper

0 commenti
Ho or ora finito e pubblicato un documento che mira a descrivere meglio l'idea della taskbar cronologica, presentata qui qualche tempo fa'.
Piu' ci penso e piu' il concetto mi garba, credo che lo terro' nel cassetto per un po' prima di arrivare al (lontano, lontanissimo...) momento in cui potro' implementarlo in Synapse.

Per la cronaca: in questi giorni, nonostante i diversi impegni collaterali, mi sto occasionalmente concentrando sul modello da adottare per la gestione della componente "viewer" del sistema che si intende costruire nel prossimo desktop manager / ex file manager Synapse, ed al momento sono particolarmente orientato per l'implementazione di un interprete di "views" espresse in XSLT cui sottoporre i result set estratti da Hyppocampus in XML. Come gia' parzialmente anticipato vedro' di creare una sorta di descrizione JSON dei widgets che andro' a ricostruire in Kiazma, si' da sfruttare almeno un po' la gia' esistente interfaccia ClutterScript e risparmiarmi un po' di lavoro, e dovro' inventarmi una formalizzazione per l'invocazione delle API di sistema rivolte al "controller" dal template XSLT.
In poche parole: non aspettatevi una imminente release...

lunedì 18 febbraio 2008

twitter

2 commenti
Mentre stavo attendendo il checkout del repository CVS di Sun Grid Engine, per poter lavorare alla pacchettizzazione dell'applicazione per Linux su architettura Sparc (luuunga storia, in cui al solito c'entra il mio sistemista preferito...), e dopo aver gia' intrapreso l'avventura su del.icio.us, mi son registrato su twitter, il famoso sito di... microblogging.
Il gioco e' semplice: quando si ha voglia, si scrive li' cosa si sta facendo. Nulla di piu', nulla di meno.
La considero abbastanza una fesseria, popolare piu' per moda che per effettiva utilita', ma lo stesso pensavo di del.icio.us e alla fine l'ho scoperto in forma di valido strumento: chissa' che non finisca a sfruttare concretamente anche questo servizio (per cui gia' mi son installato la relativa estensione per Firefox) per appuntarmi le idee che mi vengono al volo e scrivere di quando in quando qualcosa di potenzialmente interessante e facilmente reperibile...
Chi mi vuole, mi cerchi qui.

domenica 17 febbraio 2008

Hyppocampus 0.3rc2

0 commenti
Finalmente, ce l'ho fatta! E' incompleta, instabile, poco documentata, ma la release 0.3rc2 di Hyppocampus e' stata rilasciata!
Come anticipato, un grosso lavoro e' stato fatto sul layer di VFS in LibHyppo, che ora include una serie di oggetti che astraggono metadati, items e result sets dal filesystem. Per non parlare del meccanismo di observers che si appoggia su SubConsciousDaemon 0.4.3, rilasciato anch'esso pochi minuti fa'.
Ora, prima di potenziare ulteriormente il core del sistema Lobotomy (una lunga lista di features e correzioni e' ancora da implementare, per non parlare del debug e del testing che sinora hanno sempre latitato...), vorrei iniziare a mettere insieme anche la componente di interazione grafica seguendo la direzione del modello MVC gia' piu' volte menzionato: come gia' detto Kiazma verra' prossimamente riscritta interamente usando il toolkit Clutter, e Synapse rinascera' in forma di interprete per le viste di presentazione dei risultati estratti dalla base dati.
Questo e' un piccolo passo verso la release 0.3 final...

"Centers" e "Activities"

0 commenti
Lorenzo Bellini, lo studente milanese menzionato nello scorso post da cui mi sono giunte le prime notizie in merito al progetto ItsMe, rivolto alla creazione di un nuovo modello di desktop, mi ha linkato questo breve documentuccio, incompleto a causa della sua ristrettezza ma sufficientemente chiaro: tra i concetti basilari della nuova prossima implementazione (di cui al momento non ho dati piu' esaustivi e di cui attendo impaziente la pubblicazione di un sito web dedicato) v'e' quello di "center", ovvero un punto gravitazionale di informazione intorno a cui orbitano tutti gli oggetti digitali (files, contatti, logs, mail...) che hanno in comune qualcosa tra loro. Partendo da questo mattone logico, l'utente puo' navigare i suoi contenuti in funzione delle relazioni semantiche che essi hanno.
Sembra bizzarro, ma questa idea mi ricorda la nozione di "attivita'" intorno a cui iniziai a costruire le primissime versioni di BrainTop numerosi anni addietro (qui una pagina di descrizione sommaria, seppellita nelle pieghe dell'Internet e non piu' accessibile direttamente): la differenza maggiore sta nel fatto che all'epoca io, giovine ed inesperto developer che maneggiava per la prima volta codice C di una certa complessita', permettevo all'utente di costruirsi i propri insiemi di files correlati e l'ambiente grafico si limitava a trattare tali scelte passivamente (mai sentito parlare di "semantic desktop" a quel tempo...), mentre in questo caso e' il sistema che si preoccupa di dividere e riordinare i dati secondo criteri automatizzati, ma credo che il concetto rimanga piu' o meno lo stesso.
Concetto che, personalmente, ho in parte abbandonato: sorvolando sul fatto che BrainTop stesso e' ufficiosamente (e presto lo sara' anche ufficialmente) abbandonato, essendo sostituito dal modello MVC che vede impiegato Synapse, credo che il fatto di aggregare piu' o meno esplicitamente gruppi di files rischi di limitare le potenzialita' espressive del sistema. Allo stato attuale il fondamento dell'intero progetto Lobotomy sta nell'informazione atomica del "metadato", entita' singola ed indipendente da qualsiasi altra cosa, che puo' essere raccolta a discrezione di chi si trova dinnanzi al monitor e vuol fare qualcosa: il modo in cui i metadati sono selezionati ed ordinati sul momento, creando di fatto una relazione tra piu' elementi, e' lasciato in mano a chi definisce la query di ricerca, e nessuna decisione a priori viene presa nemmanco sulla presentazione dei dati estratti (che puo' essere cambiata liberamente in qualcunque istante, come dichiarato nel documento introduttivo all'MVC sopra linkato).
Ad ogni modo il proposito e' degno di attenzione ed interesse, e ribadisco nuovamente la mia curiosita' nei confronti di prossimi dettagli su questo intrigante ItsMe...

lunedì 11 febbraio 2008

Non sono solo...

0 commenti
L'evento che maggiormente ha stuzzicato il mio ego negli ultimi giorni e' stata la mail di tal Lorenzo Bellini, studente lavoratore di Milano e lettore di questo blog (ciao, Lorenzo!), che oltre a menzionare Lobotomy nel suo blog mi informa dell'imminente apertura di un progetto di ricerca presso l'Universita' Bicocca rivolto allo sviluppo di un nuovo modello di desktop. Non sono solo a pensare che dopo vent'anni sarebbe forse il caso di esplorare qualche alternativa all'interfaccia utente general purpose... Chissa' che non traggano qualche ispirazione dalla (incompleta) sfilza di documentucci informali che ho sinora pubblicato sul sito. Attendo ulteriori news a tal proposito, e non nascondo la mia fretta di apporre gli occhi su qualche paper descrittivo del sistema che si vorrebbe implementare, dice Lorenzo, in forma di progetto free. Non e' da escludere, ed e' anzi probabile, che un giorno collabori a tale opera, almeno esternamente in qualita' di sviluppatore freelance.
Per quanto riguarda invece i progressi del progetto Lobotomy in se', non sono solo neppure sul fronte dell'implementazione e comunico che forse ho trovato un collaboratore: HoX, membro della Torino Linux Task Force (il gruppo da me involontariamente creato e dedito alla promozione attiva di Linux) e studente presso il Politecnico del capoluogo sabaudo, si e' proprio stasera incautamente offerto come beta-tester del codice e conto di metterlo all'opera in occasione del rilascio della release 0.3rc2 di Hyppocampus schedulato per questa settimana (ebbene si, finalmente!). Una mano nel debugging non e' mai sgradita, tutt'altro, e grazie a questa new entry e' possibile che le prossime release siano un po' meno bacate delle precedenti ;-)
Il futuro e' roseo.

domenica 3 febbraio 2008

Everything is Unix

0 commenti
Nonostante il mio proposito dell'altro giorno, non essendo riuscito a scaricar... ehm... acquistare regolarmente una licenza di Mac 8, sono passato direttamente all'installazione di Darwin sull'iMac G3 che mi e' capitato tra le mani. (Nota per i lettori occasionali: la maledetta immagine .cdr per PPC che si scarica dal sito si masterizza molto banalmente con il comando cdrecord nome_file.cdr, alla faccia di K3B ed analoghi che si rifiutano di trattare questo formato...).
Sono molto curioso di testare con mano se la ricca documentazione pubblicata sul sito di riferimento fa fronte ad una API effettivamente completa come quella promessa o se e' tutto fumo e niente arrosto...
Mentre la procedura di installazione prosegue, leggo un articoletto sulla seconda development release del Project Indiana, il progetto volto a rendere piu' user-friendly il notoriamente ostico e serioso Solaris: pare che, un poco alla volta, in Sun stiano cavando qualcosa di effettivamente usabile pure da comuni utenti desktop, e sebbene al momento il sistema non goda di una popolarita' neppur paragonabile a quella di Linux, di cui pretende di essere un rivale, c'e' da credere che, essendo esso supportato e spinto da un colosso che ha fatto e fa a tutt'oggi la storia dell'informatica e guida una torma di sviluppatori assai nutrita (del resto, sono sempre loro che lavorano su Java, OpenOffice e diversi altri pilastri), diverra' discretamente utilizzato da qui a qualche anno.
Cosa viene da pensare mentre si legge da una parte cotanto brano e dall'altra si installa la componente free del sistema operativo piu' innovativo della storia? Non voglio avanzare conclusioni, ma dal canto mio credo che prossimamente saro' un poco piu' attento alla portabilita' del mio codice ed all'aderenza alla specifica POSIX: con tanta carne al fuoco le possibilita' (e le alternative) sono tante, e tutte valide, meglio non focalizzare l'attenzione su un'unica piattaforma ma spaziare per quanto possibile.
In ogni caso, tutti e tre i sistemi menzionati in questo post sono piu' o meno derivati da Unix, ovvero *IL* sistema di ieri, di oggi, ed evidentemente di domani.