tag:blogger.com,1999:blog-4204660409513862742024-02-08T20:23:20.116+01:00Lobotomy Project Developers' BlogRoberto -MadBob- Guidohttp://www.blogger.com/profile/16458797013282594564noreply@blogger.comBlogger205125tag:blogger.com,1999:blog-420466040951386274.post-29261683707696267022011-08-03T18:20:00.003+02:002011-08-03T19:22:05.023+02:00Tab GroupsL'altro giorno, seguendo un filo logico partito dalla visione degli <a href="http://people.mozilla.com/%7Eshorlander/ux-presentation/ux-presentation.html">ennesimi presunti mockups</a> per le future versioni di <a href="http://www.mozilla.com/it/firefox/">Firefox</a> (cui pero' credo poco: cose del genere sono in giro gia' da tempo, e mai sono state implementate nella release mainstream), ho riaperto e riesaminato il ben noto browser targato <a href="http://www.mozilla.com/">Mozilla</a>. L'ho sempre tenuto installato, e <a href="http://wiki.debian.org/Apt">apt</a> ha sempre provveduto ad aggiornarlo insieme al resto dei pacchetti della mia <a href="http://www.debian.org/">Debian</a>, ma gia' da un pezzo ero passato a <a href="http://www.chromium.org/">Chromium</a> dunque non mi ero piu' curato della sua evoluzione e dei suoi progressi.<br />Quando l'ho avviato ho notato la sua rapidita', sia nelle fasi di caricamento che di rendering delle pagine, ma essendo gia' abituato al browser di Google non mi sono lasciato impressionare piu' di tanto. Ho apprezzato, ma nulla di piu'. Ho fatto un giretto tra le opzioni di configurazione, ho scoperto che la barra dei menu puo' essere ridotta ad un pulsantino anziche' alla solita inutile striscia che spreca spazio verticale, e... Ho trovato, in alto a destra, una <a href="https://static-cdn.addons.mozilla.net/en-US/firefox/images/addon_icon/321735-64.png?modified=1307996438">inspiegabile icona</a>. L'ho cliccata, e mi si e' aperto un mondo.<br />Gia' avevo <a href="http://www.azarask.in/blog/post/designing-tab-candy/">letto qualcosa</a> in merito alla funzione di <a href="http://support.mozilla.com/en-US/kb/what-are-tab-groups">"Tab Groups"</a>, ma mi era sfuggita l'informazione che e' stata inclusa in Firefox gia' dalla versione 4. O forse avevo ignorato tale dettaglio, avendo deciso di metterci una pietra sopra. Sta di fatto che venti minuti di esplorazione mi sono bastati a ri-migrare nuovamente da Chromium.<br />"Tab Groups" e', in breve, un metodo per aggregare le tabs aperte. Si clicca la famigerata iconcina e si apre uno spazio in cui si possono editare i propri gruppi, crearne di nuovi, spostare le tab da una parte all'altra ed altre operazioni essenziali. Si clicca su una delle tab aperte e si ritorna alla modalita' classica, ma in alto appaiono solo le linguette appartenenti a quello stesso gruppo. Detto cosi' pare semplicistico, ma dopo pochi giorni di utilizzo posso dichiarare che mi ha cambiato la vita.<br />Un po' per pigrizia, un po' per comodita', sono solito tenere sempre almeno 30 tab aperte. Alcune sono per le amenita' social (<a href="https://www.facebook.com/">Facebook</a> e <a href="https://plus.google.com/">Google+</a> in primis), alcuni sono articoli rintracciati sui feed RSS, troppo lunghi per essere letti subito e dunque tenuti da parte per i momenti di calma (qualcuno potra' dire: "Usa <a href="http://readitlaterlist.com/">Read-It-Later</a>!". Ci ho provato, finivo con l'accumulare dozzine di links ma non avendoli sempre sotto agli occhi me ne dimenticavo e non li riprendevo piu'), altre sono tabs di servizio in cui tengo permanentemente alcuni dei wiki e degli strumenti che uso per appuntarmi le cose che raccatto in giro. Si puo' immaginare quanto sia scarsamente efficiente tale comportamento in un contesto normale. Appena scoperto Tab Groups ho subito creato i miei gruppi: "Da Leggere", "Da Bloggare", "Appunti", "Social"... E ora non ho piu' di cinque/sei tab alla volta davanti, riesco a leggerci sopra i titoli delle pagine (e a identificare al volo quello che serve), non sono continuamente tentato di andare a consultare Facebook (che sta in un gruppo separato, dunque devo recuperarlo volontariamente e coscientemente) ma al contempo ogni volta che entro nella modalita' di navigazione dei gruppi inevitabilmente scorgo la lista di cose da leggere e noto se sta crescendo troppo e richiede attenzione.<br />Decisamente, consiglio a tutti i disordinati come me di valutare l'uso intensivo di codesta funzionalita'. Non aiutera' forse a ridurre la quantita' di ciarpame web che vi ostinate a lasciare in giro e a consultare, ma almeno servira' a tenerlo separato dalle cose piu' utili.Roberto -MadBob- Guidohttp://www.blogger.com/profile/16458797013282594564noreply@blogger.com0tag:blogger.com,1999:blog-420466040951386274.post-48016346401187073492011-07-10T19:38:00.003+02:002011-07-10T21:34:39.372+02:00Social CloudCome in diversi altri casi passati, scrivo questo post piu' per avere un appunto personale reperibile in futuro che per condividere una idea fatta e finita: per ora si tratta solo di una meditazione, non approfondita e non documentata (e dunque potenzialmente fallace), ma chissa' che non sfoci in un (ennesimo!) progetto da sviscerare.<br />Tutto e' nato dalla combinazione di diversi fattori: il mio recentissimo <a href="http://identi.ca/notice/78438054">ingresso</a> in <a href="https://plus.google.com/">Google+</a>, la mia occasionale lettura della <a href="http://freedomboxfoundation.org/discuss/">mailing list</a> degli sviluppatori presso la <a href="http://freedomboxfoundation.org/">Freedom Box Foundation</a>, e una mezza chiaccherata in chat con <a href="http://grigio.org/">un amico</a>.<br />Sul primo non c'e' molto da dire, bene o male e' sempre la solita frittata: si condividono le foto, lo status e commenti di ogni tipo e genere, si leggono quelli degli altri, ma il progetto non porta nulla di nuovo sul fronte dell'innovazione. Sulla seconda ci sarebbe molto piu' da riferire, ma riassumo in una semplice frase: una congrega di nerd che si fanno pippe cosmiche sulla privacy e sulla crittografia senza riuscire ad individuare i reali problemi, le reali esigenze e le reali soluzioni. Fino a qui, il punto e': sulle tecnologie "social" esiste il totale monopolio delle grandi corporation, le quali per contratto posseggono tutto quello che gli utenti pubblicano e fanno a gara per rendersi incompatibili le une con le altre ostacolando cosi' di fatto l'esplosione delle reali potenzialita' del concetto, mentre i presunti difensori delle liberta' digitali sono del tutto incapaci di fornire alternative sia perche' perdono tempo ad inveire sia perche' oggettivamente riscrivere l'intero stack di software libero orientato al web per venire incontro alle nuove prospettive non e' cosa semplice o banale.<br />Veniamo dunque al sodo.<br />La menzionata chiaccherata di ieri sera verteva sulla dispersivita' dei materiali che transitano sui social network, in quanto ognuno scrive ogni cosa ed e' difficile estrarre dal flusso costante di caotiche informazioni qualcosa di specifico. Ironicamente ho consigliato all'amico di lasciar perdere i social e procurarsi un <a href="http://it.wikipedia.org/wiki/Really_simple_syndication#Aggregatore_di_notizie">aggregatore di feed RSS</a> con cui seguire i blog tematici che trovava, e all'osservazione che i feed RSS non sono interattivi (un post non puo' essere commentato direttamente dal feed reader, ne' tantomeno essere "like"ato) ho replicato che esiste gia' <a href="http://www.w3schools.com/rss/rss_tag_comments.asp">una estensione RSS</a> che permette di integrare i commenti. Ma, effettivamente, solo in lettura.<br />Alche', sorge spontanea la domanda: e se i feed RSS fossero commentabili? Cioe': se esistesse una API standard, estremamente banalizzata, che permetta di spedire un commento o una nota ad un hook indicato nel feed senza necessariamente accedere al blog/sito da cui e' stato prelevato, permettendo l'integrazione esterna dell'intero processo di comunicazione? In un colpo solo si riprodurrebbe una delle funzionalita' essenziali dei social network, ovvero la pubblicazione di testi, la loro aggregazione e la possibilita' di rispondere, ma al di fuori dei social network, percui ognuno potrebbe pubblicare usando Wordpress (su <a href="http://wordpress.com/">wordpress.com</a> o <a href="http://wordpress.org/">hostato privatamente</a>), o <a href="http://identi.ca/">identi.ca</a> (idem), o qualsiasi altra cosa che generi un RSS. E ci vorrebbe poco ad estendere la stessa nozione a foto (<a href="http://gallery.menalto.com/">Gallery</a>, <a href="http://mediagoblin.org/">Mediagoblin</a>...), links (<a href="http://sourceforge.net/projects/scuttle/">scuttle</a>), e ogni altro genere di contenuto tipato per cui esista una piattaforma web in grado di distribuire.<br />Come fare a "farsi amica" una persona? La si cerca con <a href="http://code.google.com/p/webfinger/">WebFinger</a> o si importa un file <a href="http://www.foaf-project.org/">FOAF</a> o <a href="http://microformats.org/wiki/hcard">hCard</a> contenente l'insieme di feeds RSS che indicizzano i suoi contenuti. Come fare a seguire i contenuti generati da tale persona? Con un qualsiasi feed reader (desktop o web) arricchito con il supporto all'ipotetica nuova estensione per la scrittura dei commenti.<br />In un certo qual modo le Web Activities <a href="http://mozillalabs.com/blog/2011/07/web-apps-update-experiments-in-web-activities-app-discovery/">promosse recentemente</a> da <a href="http://www.mozilla.org/">Mozilla</a> (ed ancora in fase ultra-sperimentale) vanno in questa direzione, proponendo uno strato operativo all'interno del browser che permetta di integrare servizi web diversi cercando il minimo comun denominatore delle rispettive API ed <a href="http://techcrunch.com/2011/07/08/mozilla-labs-launches-web-activities-experiment-lets-web-apps-talk-to-each-other/">incrociandole tra loro</a>, ma il succo resta lo stesso: che esista un protocollo standard o un "dispatcher" estendibile per mezzo di plugins, l'obiettivo resta sempre quello di mettere insieme i vari componenti che compongono il web. Costituendo quella che potrebbe essere definita (molto fuffosamente...) "social cloud": una galassia di applicativi separati ed indipendenti tra loro, sparpagliati sull'Internet, che convettano dati ed opinioni senza alcuna forma di centralizzazione.<br />Gia' <a href="http://madbob.wordpress.com/2011/03/06/nella-rete/">lo dissi</a>, e qui lo ripeto: il segreto del successo non sta nel re-implementare daccapo Facebook (o Google+ che dir si voglia), ma nell'utilizzare in modo sensato e ponderato quel che gia' esiste.Roberto -MadBob- Guidohttp://www.blogger.com/profile/16458797013282594564noreply@blogger.com0tag:blogger.com,1999:blog-420466040951386274.post-79470238260223904972011-06-04T01:49:00.004+02:002011-06-06T12:30:00.389+02:00La Sindrome di Teodoro<div>Qualche tempo addietro <a href="http://lobotomy-dev.blogspot.com/2010/10/la-prova.html">ho gia' citato</a> su <a href="http://lobotomy-dev.blogspot.com/">questo blog</a> la mia esperienza con un anziano signore che ho avuto modo di assistere presso un <a href="http://informaticalibera.info/corso-di-alfabetizzazione-20102011.html">corso di alfabetizzazione informatica</a>. A distanza di mesi posso dire che il personaggio in questione pur non essendo diventato un sysadmin ha comunque acquisito una modesta dimestichezza col PC, tanto da passare le giornate a compilare fogli di calcolo su <a href="http://www.openoffice.org/product/calc.html">OpenOffice Calc</a> per generare coloratissimi quanto inutili (ma evidentemente soddisfacenti) grafici. Mai piu' avrei creduto che, dati i forti limiti dimostrati all'inizio del corso (ed appunto elencati nel mio precedente post) e la distanza intellettuale tra la macchina da scrivere cui era abituato ed un computer moderno, sarebbe arrivato al punto cui e' arrivato, ma tant'e': tanto di cappello al signor Teodoro.</div><div>Ad ogni modo: questo articolo non parla di lui ma di me.</div><div>Da un po' ho acquistato un nuovo PC (anzi due, l'altro e' l'<a href="http://abacocomputers.com/">Abaco</a> di cui ho <a href="http://lobotomy-dev.blogspot.com/2011/04/in-punta-di-pennino.html">gia' parlato</a>), un desktop, e l'ho dotato di due monitor da 19 pollici in modo da sperimentare questa per me inedita' modalita' operativa e verificare se davvero impatta sulla produttivita'. La risposta e' "si", ma non e' neanche questo il tema del giorno.</div><div>Il punto e' che la presenza di due schermi ha fatto emergere una confusione inconscia dettata dall'abitudine: ci sono spesso due finestre a tutto schermo, ma il focus e' sempre uno solo. Mi spiego meglio: da sempre lavoro con le finestre massimizzate sul desktop, e switcho da una all'altra con la classica combinazione Alt+Tab. Ben rari sono i casi in cui tengo una finestra fluttuante sul monitor, un po' per non essere distratto da quelle sotto e un po' appunto per abitudine: come <a href="http://lobotomy-dev.blogspot.com/2011/03/minimi-termini.html">detto</a> in passato, quando mi capita di aprire una nuova applicazione e vedere la finestra non massimizzata subito premo Alt+F10 per ingrandirla. Questo pero' implica che il mio cervello e' portato a pensare che la finestra che sto guardando e' anche quella che riceve gli input da tastiera, ovvero che ha il focus, ma questo non e' piu' vero nel momento in cui appunto ci sono due schermi con due diversi programmi aperti: il focus, o sta a destra o sta a sinistra.</div><div>Per quanto scontata sia questa considerazione, mai va sottovalutato il potere dell'abitudine.</div><div>A tutt'oggi, ovvero dopo un paio di mesi di utilizzo quotidiano del doppio monitor, ancora mi trovo ad essere afflitto dalla "Sindrome di Teodoro": se guardo una finestra sono convinto di poterci interagire direttamente, dimenticando di spostare il focus. Esattamente come succedeva al signore cui ho insegnato i rudimenti dell'informatica moderna, anche io mi trovo adesso nella sua condizione: sono portato a scrivere nelle caselle di testo semplicemente dopo averle individuate e guardate sullo schermo. Nel suo caso tale impostazione mentale era probabilmente dovuta all'abitudine alla carta e alla penna, in cui effettivamente la sequenza "trova il punto in cui scrivere / sposta la mano con la penna li' sopra / scrivi" e' un continuum omogeneo che si svolge usando un unico strumento (la penna) che funge sia da dispositivo di puntamento che di input, mentre come detto nel mio caso l'errore e' dettato dall'inclinazione al fatto di avere sempre e solo una finestra con cui interfacciarsi.</div><div>Da qualche giorno ho pertanto abilitato l'opzione "Select windows when the mouse moves over them" nel <a href="http://library.gnome.org/users/user-guide/stable/prefs-windows.html.en">pannello di configurazione per le finestre</a> di <a href="http://www.gnome.org/">Gnome</a>, e la situazione e' un pochino migliorata: muovere il cursore, e dunque il focus, da un monitor all'altro mi riesce in modo abbastanza naturale, dunque non devo stare troppo a pensarci e piu' raramente mi capita di pigiare i tasti giusti per la finestra sbagliata.</div><div>Dopo 10 anni di esperienza nell'uso del PC, e' incredibile constatare l'impatto distruttivo che comporta una piccola variazione nel proprio ambiente di lavoro...</div>Roberto -MadBob- Guidohttp://www.blogger.com/profile/16458797013282594564noreply@blogger.com0tag:blogger.com,1999:blog-420466040951386274.post-34628374227457906422011-04-03T17:56:00.006+02:002011-04-09T23:14:01.756+02:00In Punta di PenninoAnni fa' - oramai ne saranno passati almeno sei - acquistai il mio primo portatile. Ed era un <a href="http://en.wikipedia.org/wiki/Tablet_computer#Convertible">convertibile tablet</a>. Piu' precisamente, un <a href="http://images.google.it/images?hl=it&source=hp&q=acer%20c310&um=1&ie=UTF-8&sa=N&tab=wi&biw=1024&bih=406">Acer C310</a>. Ai fatti l'ho sempre usato molto poco in modalita' tablet, in quanto pesava troppo per essere davvero utilizzato a mo' di "blocco note" su cui scrivere a mano o anche solo come lettore di e-books, ma ha passivamente ispirato una gran quantita' di idee che sono poi finite in quel calderone pseudo-intellettuale che e' il <a href="http://lobotomy-project.org/">Lobotomy Project</a>.<br />Adesso ho acquistato il mio primo netbook. E non poteva che essere a sua volta un convertibile tablet.<br />L'altro giorno ho aperto la scatola dell'<a href="http://www.abacocomputers.com/Netbook/T102-Pro-Blue.html">Abaco T102</a> che ho ordinato un paio di settimane fa', ed ho avuto modo di fare una prima analisi. Che adesso riporto al mondo, usando questo stesso PC.<br />Innanzitutto, qualche presupposto. Benche' marchiato "Abaco", trattasi questo del leggendario <a href="http://www.classmatepc.com/">Intel Classmate</a> (di cui, a quanto mi risulta, Abaco e' l'unico rivenditore italiano), ovvero la risposta del mercato all'ancor piu' leggendario <a href="http://one.laptop.org/">progetto OLPC</a> di <a href="http://it.wikipedia.org/wiki/Nicholas_Negroponte">Nicholas Negroponte</a>. Quello del <a href="http://punto-informatico.it/1067277/Hardware/News/pc-100-dollari-by-negroponte.aspx">PC a 100 dollari</a>, per capirsi. Che incidentalmente si e' schiantato nel momento in cui Microsoft ci ha messo <a href="http://news.cnet.com/8301-13860_3-9945438-56.html">lo zampino</a>, ma sorvoliamo sulle facili polemiche. Sta di fatto che questo prodotto non e' un netbook qualsiasi, ma un computer pensato e progettato per essere usato dai bambini a scuola. A prima vista esso sembra un giocattolo particolarmente sofisticato, l'ultima versione del <a href="http://www.clementoni.it/main.php?liv1=brands&liv2=sapientino">Sapientino Clementoni</a>, ma dopo un po' ci si capacita che il colore azzurro dell'apparecchio e' dovuto al guscio di spessa plastica anti-scivolo applicata intorno al case ed al monitor per proteggere i componenti piu' delicati dagli urti che facilmente i poco curanti pargoli (e/o i distratti nerd) possono provocare. Partire da queste nozioni, ovvero aspettarsi a priori che aprendo la scatola ci si trovera' dinnanzi ad un apparentemente assai poco affidabile arnese, e' condizione imprescindibile per godersi da subito il proprio acquisto.<br /><div>L'apparecchio ha un peso superiore agli altri netbook con analoghe specifiche video (schermo da 10 pollici widescreen), e la differenza e' probabilmente imputabile appunto alla protezione di plastica supplementare. A occhio pare che lo spazio non sia stato ottimizzato al meglio, e ad esempio sul retro sporge un pezzo (quello cui e' attaccato la simpatica maniglia di gomma) che sembra del tutto inutile ai fini della funzionalita' elettronica. C'e' una sola presa d'aria, sul lato destro, e sotto oltre alla batteria estraibile c'e' un unico pannello incastrato che copre la componentistica.</div><div>La qualita' costruttiva e', nel complesso, abbastanza mediocre. Il gia' citato guscio non sembra essere particolarmente rifinito o accuratamente applicato, in alcuni angoli sembra non aderire perfettamente al case (nel mio caso: i due lembi che circondano la webcam ruotabile posta in testa al monitor sono asimmetrici, hanno un dislivello di un paio di millimetri). Ed i simboli sulla tastiera sembrano essere appiccicati in modo grezzo, molti non sono perfettamente centrati e quasi tutti i caratteri non alfanumerici ('@', '*'...) sono veramente piccoli, a malapena leggibili.</div><div>Sempre in merito alla tastiera, ci sono luci ed ombre. In linea di massima ci si scrive molto bene, sicuramente meglio che con altri netbook che ho provato (il ben noto <a href="http://en.wikipedia.org/wiki/Asus_Eee_PC">Asus EeePC</a>, ad esempio), eppure alcuni tasti (in particolare il tasto 'Fn' di destra) non sono particolarmente sensibili e piu' volte capita di dover ripetere compulsivamente la loro pressione per ottenere il risultato desiderato.</div><div>Anche la configurazione "out-of-the-box" della macchina lascia un po' perplessi. Benche' il monitor ruoti correttamente e abbastanza rapidamente (ma qualche volta nella direzione sbagliata...) quando l'apparecchio viene girato o posto in modalita' slate, purtroppo basta entrare ed uscire dalla sospensione del sistema per non far piu' funzionare i tasti funzione posti attorno allo schermo (pagina su, pagina giu', home e fotografia) e neppure la rotazione automatica. La sospensione, si sa, e' da sempre una croce in ambiente Linux, ma ci si aspettava una maggiore cura nella prevenzione di questa problematica.</div><div>Lo schermo e' widescreen, e la risoluzione massima bassina: appena 1024x600. Certo una risoluzione piu' alta su 10 pollici renderebbe il tutto troppo picccolo ed illeggibile, ma occorre smanettare un po' per proprio conto per correggere la configurazione del desktop e recuperare un po' di spazio fra i pannelli di Gnome e visualizzare i propri contenuti.</div><div>Il touchscreen, essendo resistivo, non ha una grandissima precisione e va un po' calcato, ma in compenso puo' essere usato anche con le dita e non solo col pennino. Certo non basta pigiare col polpastrello, come su uno smartphone, bensi' con la punta del dito o addirittura con l'unghia, ma ammetto di averlo gia' maltrattato un pochino ed il monitor non sembra risentirne o essere incline a graffiarsi tanto facilmente.</div><div>La batteria dura un po' piu' di 4 ore con il wireless acceso e senza sforzarlo troppo, dovrei fare qualche analisi piu' approfondita ma in linea di massima mi sembra una durata accettabile.</div><div>In conclusione: l'Abaco T102 non e' un prodotto entusiasmante, e la perfezione e' tutt'altra cosa, ma trovandosi in una nicchia di mercato ove le opzioni disponibili sono estremamente limitate fa la sua porca figura. 400 euri per un netbook convertibile tablet fruibile come blocco note o e-book reader (dotandosi di qualche <a href="http://calibre-ebook.com/">applicazione specializzata</a>: leggere un PDF li' sopra rasenta l'impossibile...) e' un discreto compromesso, consigliabile per chi non ha grandi pretese e vuol provare qualcosa di inedito senza necessariamente incastrarsi sulle limitazioni di un tablet "puro" (senza tastiera QWERTY) o vendersi un rene per un <a href="http://store.shopfujitsu.com/fpc/Ecommerce/buildseriesbean.do?series=T580">Fujitsu Lifebook</a>.</div>Roberto -MadBob- Guidohttp://www.blogger.com/profile/16458797013282594564noreply@blogger.com0tag:blogger.com,1999:blog-420466040951386274.post-87657353348251824732011-03-14T02:33:00.006+01:002011-03-19T01:22:20.077+01:00Minimi TerminiGrandi dibattiti ha generato sulla blogosfera <a href="http://mail.gnome.org/archives/gnome-shell-list/2011-February/msg00192.html">la decisione</a>, presa abbastanza all'ultimo momento, di rimuovere i tasti per massimizzare e minimizzare le finestre in <a href="http://live.gnome.org/GnomeShell/">Gnome-Shell</a>. La discussione si e' poi persa tra i mille rivoli della <a href="http://www.osnews.com/story/24510">polemica</a> innescata da <a href="http://en.wikipedia.org/wiki/Mark_Shuttleworth">Shuttleworth</a> e dal team <a href="http://kde.org/">KDE</a>, che a sua volta abbisognava di un capro espiatorio su cui scaricare la tensione accumulata dal <a href="http://www.engadget.com/2011/02/11/nokia-and-microsoft-enter-strategic-alliance-on-windows-phone-b/">matrimonio Nokia/Microsoft</a> e del conseguente sgretolamento dei sogni di gloria costruiti intorno al <a href="http://qt.nokia.com/">toolkit Qt</a>, ma questa e' un'altra storia...<br />Si diceva: massimizzare e minimizzare le finistre all'interno del window manager. Sorvolando sul fatto che, come detto, questo cambiamento certamente non proprio marginale e' stato attuato in un momento decisamente sbagliato, con <a href="http://www.gnome3.org/">Gnome3</a> all'orizzonte e dunque poco tempo a disposizione per raccogliere il feedback necessario alla validazione dell'idea, personalmente mi ritengo favorevole alla scelta. Con tutte le precisazioni del caso.<br />Da una parte l'interazione che viene in questo modo promossa ed anzi forzata nei confronti dell'utente prevede un uso intensivo dei <a href="http://en.wikipedia.org/wiki/Virtual_desktop">workspace virtuali</a>, che in ambiente Linux esistono dalla notte dei tempi ma che su altre piattaforme operative o non esistono affatto o hanno fatto la loro comparsa da poco tempo. Il che' vuol dire creare diverse difficolta' a chi non e' abituato ad organizzare comodamente le proprie finestre distribuendole su piu' desktop, ed ha fatto della minimizzazione una questione di sopravvivenza digitale. Ed in questa categoria ricadono non solo gli esuli di primo pelo del mondo Microsoft, ma anche i numerosi habituee' linuxari che vuoi per zelo o vuoi per forte radicazione ai metodi passati non hanno mai fatto il callo a questa stravagante idea dei desktop multipli.<br />Dall'altra parte, c'e' da dire che nel momento in cui si prende un minimo di confidenza con la nozione di "workspace" i tasti per massimizzare e minimizzare le finestre sono veramente inutili.<br />Io, di mio, sono un grandissimo utilizzatore di desktop virtuali: ne tengo sempre almeno 10 a disposizione, e sebbene sia capitato solo rarissimamente di occuparli tutti (ma e' comunque successo...) almeno tre o quattro sono perennemente occupati da una o piu' finestre. Ho il workspace per il cazzeggio sul web, con il <a href="http://www.chromium.org/">browser</a> ed il <a href="http://liferea.sourceforge.net/">feed-reader</a> ed il <a href="http://projects.gnome.org/evolution/">client di posta</a>, quello dedicato esclusivamente al <a href="http://www.videolan.org/vlc/">player multimediale</a> che riproduce la radio in streaming, e minimo minimo uno con una sessione <a href="http://kate-editor.org/">Kate</a> (straripante codice) ed un terminale (da cui lanciare le compilazioni di suddetto sorgente) su cui lavorare. Quando devo cercare un qualche file per mezzo del <a href="http://en.wikipedia.org/wiki/Nautilus_%28file_manager%29">file manager</a>, o leggere qualche documento, o editare qualche immagine con <a href="http://inkscape.org/">Inkscape</a> e/o <a href="http://www.gimp.org/">Gimp</a>, mi sposto su un altro. Da cio' ne deriva che ogni workspace abbia al massimo quattro finestre aperte, ed essendo cosi' poche non esiste ragione alcuna per cui ne debba minimizzare una per vedere le altre. Credo di non aver usato il tasto "minimizza" per anni.<br />Lo stesso si puo' dire del tasto "massimizza". Tant'e' che piu' di una volta non sia riuscito a distinguerli l'uno dell'altro alla prima occhiata: essi mi sono totalmente estranei. Ma ammetto che, in questo caso, ho barato: talvolta mi capita di massimizzare le finestre, ma uso la shortcut Alt+F10 mappata di default su <a href="http://www.gnome.org/">Gnome</a>. Cio' accade solo perche', avendo appunto poche finestre per desktop da gestire, mi piace tenerle tutte a tutto schermo e talvolta capita che esse partano a dimensioni ridotte.<br />Sta di fatto che, al fin della fiera, la scelta operata e' coerente con la linea di sviluppo di Gnome-Shell, che appunto punta moltissimo sui workspaces. Dunque, la reputo immensamente condivisibile. Non ultimo perche' si risolve con la rimozione di due tasti, ed io sono quasi sempre favorevole alla rimozione degli elementi a video. Che gli utenti, aggrappati alle loro abitudini come cozze allo scoglio, si lamentino occasionalmente di qualsivoglia modifica alla loro interfaccia grafica, indipendentemente da quanto la modifica sia benefica e sensata, e' normale, endemico, inevitabile. E, per questo, ignorabile.Roberto -MadBob- Guidohttp://www.blogger.com/profile/16458797013282594564noreply@blogger.com0tag:blogger.com,1999:blog-420466040951386274.post-63783712882591212522011-02-02T03:17:00.007+01:002011-02-04T12:58:41.267+01:00L'Indirizzo che non C'e'Leggendo l'ennesimo apocalittico <a href="http://online.wsj.com/article/SB10001424052748704254304576116401267588510.html">articolo</a> in merito all'allocazione dell'ultimo blocco di indirizzi IPv4 disponibili, e memore di alcune osservazioni che io stesso ho fatto in <a href="http://madbob.wordpress.com/2011/01/30/think-more-different/">un post</a> dell'<a href="http://madbob.wordpress.com/">altro mio blog</a> a sfondo "culturale", mi sono capacitato di una emergenza imminente nel campo dell'interazione uomo-macchina: quando <a href="http://en.wikipedia.org/wiki/Ipv6">IPv6</a> sara' la norma, e anche la mia LAN sara' routata su tale protocollo, come diamine faro' a ricordarmi a memoria gli astrusi ed assolutamente poco mnemonici <a href="http://en.wikipedia.org/wiki/IPv6_address">indirizzi</a> delle macchine di casa mia per potervi accedere? Bene o male con IPv4 ci si arrangia, assunto che la classe di una rete domestica e' quasi sempre una di quelle appositamente lasciate <a href="http://en.wikipedia.org/wiki/Private_Network#Private_IPv4_address_spaces">riservate</a> per scopi locali (o, per meglio dire: e' quasi sempre 192.168.0.0), ed anche un identificativo arbitrario sulla Rete globale e' pur sempre costituito da soli quattro numeri che con un poco di sforzo si riescono a fissare nel cervello, ma chi mai potrebbe memorizzare la sfilza di caratteri, cifre e segni di interpunzione mescolati in un indirizzo di nuova generazione? Certo, anche in IPv6 esiste il concetto di <a href="http://en.wikipedia.org/wiki/Private_Network#Private_IPv4_address_spaces">indirizzo privato</a> che puo' essere espresso in forma abbreviata, in cui comunque si trovano ben 10 cifre esadecimali a caso; un numero in base 10 (ad esempio: 134) si ricorda sicuramente meglio di un agglomerato impronunciabile (ad esempio: 21F4).<div>Il problema e' piu' grave di quanto non si possa immaginare, in quanto a tutt'oggi ci troviamo a maneggiare gli indirizzi numerici piu' spesso di quanto non si creda.</div><div>Per individuare e navigare i filesystem delle altre macchine nella rete locale, esposti con i protocolli piu' disparati (NFS, NetBIOS/Samba, SFTP...), esistono gia' fior di tools perfettamente integrati con ogni desktop environment minimamente completo (cfr. <a href="http://www.gnome.org/">Gnome</a> e <a href="http://kde.org/">KDE</a>). Dunque in questo caso il dubbio non esiste. Lo stesso puo' dirsi per le stampanti (nativamente di rete, o esposte in rete per mezzo di <a href="http://www.cups.org/">CUPS</a>). Ma quanti sono gli strumenti di backup, con cui periodicamente duplicare i propri dati importanti su un altro PC e/o un altro disco rigido remoto, che supportano il discovery delle istanze sparpagliate sul network? E come fare a trovare le interfacce di amministrazione web dei vari routers, access point e modem che popolano le mensole polverose delle nostre case? Senza parlare di tutte le esigenze assai piu' complesse degli utenti piu' smaliziati, i quali tanto per dirne una hanno questa fissazione di accedere ai propri PC via SSH...</div><div>Le odierne limitazioni dei meccanismi di amministrazione delle reti, unite alla crescente necessita' di essere connessi all'Internet ed alla moltiplicazione di apparecchi digitali di cui ognuno dispone (ben poche sono le case in cui ci sia un solo PC, senza contare smartphones e tablets ed altre <a href="http://www.chumby.com/">diavolerie</a>), implicano che l'interazione diretta con gli indirizzi IP e' oramai pratica assai diffusa e pervasiva, anche tra l'utenza di basso rango: negli ultimi mesi mi e' capitato piu' di un utonto contemplare il relativo pannello di configurazione sul proprio sistema operativo alla ricerca di una soluzione abbozzata per potersi agganciare ad un vicino access point, spinto e motivato in questa sua estemporanea avventura nerd dal desiderio di consultare la propria bacheca su <a href="http://www.facebook.com/">Facebook</a>.</div><div>Siamo davvero pronti a questo salto? Gli strumenti di assistenza per i quotidiani task relativi al networking (locale e remoto) sono all'altezza? Mi piacerebbe metterli alla prova, switchando la mia LAN appunto al routing IPv6, non fosse che la versione di <a href="http://www.dd-wrt.com/">dd-wrt</a> flashata sulla mia <a href="http://dd-wrt.com/wiki/index.php/LaFonera_Software_Flashing">Fonera</a> non supporta tale protocollo e non riesco a fare l'upgrade alla versione successiva: partiamo subito male...</div>Roberto -MadBob- Guidohttp://www.blogger.com/profile/16458797013282594564noreply@blogger.com0tag:blogger.com,1999:blog-420466040951386274.post-33946153789744879702011-01-20T02:30:00.002+01:002011-01-22T01:33:09.780+01:00Una Mela in Testa<div>Da quando ho iniziato a leggere e documentarmi sul tema dell'usabilita' delle interfacce utente ho piu' volte sentito parlare nell'<a href="http://oldcomputers.net/apple-newton.html">Apple Newton</a>, PDA uscito agli inizi degli anni '90 e di breve vita sul mercato, indicato da molti come un ottimo esempio di efficienza e rappresentativo di alcuni concetti particolarmente interessanti. Ma ammetto di non aver mai indagato approfonditamente su tale oggetto, prendendo sempre per buone le entusiastiche dichiarazioni ma inconsciamente pensando che le funzionalita' di tale apparecchio fossero, a causa dell'evidente anzianita' del prodotto, cosi' limitate da non meritare neppure di essere prese in considerazione.</div><div>Finche' l'altro giorno mi sono trovato a leggere <a href="http://ignorethecode.net/blog/2010/12/05/saving_documents_by_proxy/?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed:+IgnoreTheCode+(ignore+the+code)">un articolo</a> (peraltro generatore di infinita ispirazione, dovro' tornarci sopra in futuro), in cui viene indirettamente linkato <a href="http://www.youtube.com/watch?v=BKHelCE9QAg">un video</a> su <a href="http://www.youtube.com/">YouTube</a> che dimostra l'utilizzo del leggendario Newton. E ne sono rimasto sbalordito.</div><div>L'utilizzo del device e' molto semplice: c'e' uno schermo completamente touchscreen, ci si scrive sopra quel che si vuole (con la tastiera virtuale o a mano: stando al video l'handwriting recognization del '90 non era cosi' tanto male, e' un peccato che nel ventennio seguente non sia piu' stata migliorata), e... il contenuto viene trasformato in un altro tipo di contenuto a seconda di quello che viene riconosciuto, o dietro suggerimento dell'utente. Insomma: se si scrive "pranzo con Mario" si puo' andare a piazzare il nuovo appuntamento nel calendar, se si scrive "chiama Pippo" viene lanciata la chiamata, se si immette un numero telefonico si apre il form per la creazione di un nuovo contatto.</div><div>Chiaramente, il primo richiamo che ho avuto e' stato il <a href="http://lobotomy-project.org/">progetto Lobotomy</a> e <a href="http://lobotomy.sourceforge.net/docs/Mixing_Types-v0.1.html">l'originale idea</a> di rendere trasversali i dati indipendentemente dal formato con cui venivano trasmessi o manipolati. Anche se il concetto introdotto nel Newton e' un poco diverso: non quello di trasformare i vari contenuti in qualcos'altro, ma trasformare caso per caso un unico tipo di contenuto (la nota, atomo primario del modello di interazione) in qualcosa di piu' strutturato e specifico.</div><div>Resta il fatto che gia' allora gli ingegneri Apple avevano avuto l'illuminazione e l'avevano trasposta in un prodotto commerciale e alla portata degli utenti (si, d'accordo: solo degli utenti facoltosi, considerando il prezzo, ma ci siamo capiti...): ignorare totalmente nozioni tecniche e nerdeggianti come il "file" o il "formato", ma occuparsi in modo semi-automatizzato di tali dettagli e lasciare che l'utilizzatore si concentrasse sull'informazione nuda e cruda.</div><div>Il PDA in oggetto spari' rapidamente dal mercato, vuoi perche' le tecnologie hardware dell'epoca erano ancora troppo limitate per uno sfruttamento del concept (una agenza cartacea delle stesse dimensioni poteva tranquillamente contenere una mole di informazioni molto superiore rispetto ai suoi modesti circuiti di rame e pietra), vuoi perche' il popolo di consumatori non era ancora pronto per esso (nell'era pre-Web2.0 quanti sarebbero stati disposti a spendere quella cifra per un blocco note molto sofisticato?) e vuoi anche perche' essendo tutto il sistema integrato non c'era spazio per l'ingresso di altri vendors che fornissero applicazioni e servizi (come e' invece adesso per apparati tipo l'iPad) dunque nessuno poteva essere realmente interessato alla sua diffusione priva da sbocchi commerciali e profittevoli per chiunque altro non fosse Apple. Ma a distanza di vent'anni varrebbe la pena rivalutare e riesaminare i concetti che all'epoca sono stati compressi nello scatolotto nero, poco apprezzabili negli anni '90 ma perfettamente attuali ed anzi impellenti nel mondo di oggi.</div><div>Perche' reinventare la ruota, quando buona parte del lavoro e' gia' stata svolta?</div>Roberto -MadBob- Guidohttp://www.blogger.com/profile/16458797013282594564noreply@blogger.com0tag:blogger.com,1999:blog-420466040951386274.post-28311008087064254702011-01-14T12:52:00.004+01:002011-01-20T02:24:27.620+01:00Aggiornamento nell'OmbraManco il tempo di finire di scrivere il <a href="http://lobotomy-dev.blogspot.com/2011/01/i-piccoli-aggiornamenti.html">precedente post</a> sui potenziali vantaggi di un meccanismo di aggiornamento interno alle applicazioni, in grado di pescare autonomamente informazioni sulla disponibilita' di nuove versioni da scaricare ed installare in modo trasparente e senza disturbare l'utente, che subito salgono agli onori della cronaca notizie sulle prossime evoluzioni di <a href="http://www.google.com/chrome?hl=it">Chrome</a>, il web browser targato <a href="http://www.google.com/">Google</a>.<div>Stando alle <a href="http://techcrunch.com/2011/01/11/google-chrome-release-cycle-slideshow/?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed:+Techcrunch+(TechCrunch)">ultime presentazioni</a> per il prossimo futuro di tale prodotto si prevede di soppiantare la tendenza prettamente tecnofila di rilasciare le varie versioni identificandole da un numero sequenziale, ed invece impacchettare piccoli cambiamenti ad intervalli regolari e tra loro ristretti (sei mesi) e diffonderli sui desktop del pianeta con un automatismo silenzioso. A ben guardare Chrome <a href="http://robmensching.com/blog/posts/2008/9/10/Google-Chrome.-updates-without-asking">da sempre</a> gestisce in questo modo gli aggiornamenti di se' stesso, addirittura compiendo un controllo sul repository centralizzato ogni cinque ore, ma evidentemente il concetto e' stato migliorato e raffinato ulteriormente. Si mormora inoltre che pure la prossima major release di <a href="http://www.mozilla-europe.org/it/firefox/">Firefox</a>, <a href="http://www.mozillaitalia.org/home/tag/firefox-4/">la 4</a> <a href="http://www.computerworld.com/s/article/9180272/Mozilla_plans_to_silently_update_Firefox">includera'</a> tale funzionalita'.</div><div>Come intuibile, appunto, dal post pubblicato l'altro giorno su <a href="http://lobotomy-dev.blogspot.com/">questo stesso blog</a> questo genere di soluzioni mi garba assai. Tantopiu' per applicativi come i web browser, diventati strumenti essenziali nella vita digitale di ciascuno e cosi' frequentemente bersagliati da attacchi mirati alla loro sicurezza da patchare il piu' presto possibile a prescindere dalla noncuranza dell'utente. Certo chi sviluppa un browser non ha tutta questa urgenza di diffondere nuove features, in quanto in fin dei conti tale classe di software operativo non espone particolari funzionalita' necessariamente sempre nuove (renderizzano le pagine, salvano i bookmarks, aprono e chiudono le tabs, poco altro), ma le migliorie per quanto piccole e discrete son sempre gradite, soprattutto quando non ci si deve attivare in prima persona per ottenerle.</div><div>D'altro canto, immagino che nel momento in cui i singoli programmi provvedano per conto proprio all'aggiornamento si possano creare non pochi grattacapi per i packagers delle distribuzioni. Cosa mettere nei repository? Cosa succede se all'atto dell'invocazione di un "apt-get upgrade" la versione proposta e pacchettizzata e' piu' vecchia di quella scaricata autonomamente? Come fronteggiare eventuali aggiornamenti che richiedono librerie e pacchetti particolari, e dunque da installare o a loro volta aggiornare per il supporto di una nuova funzionalita'?</div><div>Per non parlare dei futuri (ma comunque non immediati) problemi tecnici che potrebbero sorgere qualora tale pratica dovesse diffondersi: come arginare la potenziale esplosione di comunicazioni verso l'Internet, dovute al fatto che ogni singolo programma pretenderebbe di contatterebbe ad intervalli periodici il proprio server di riferimento in cerca di qualcosa di nuovo da scaricare? E come reagirebbe quella nicchia di utenti cultori della privacy e del pieno controllo dinnanzi alla necessita' di dover disabilitare (o nella peggiore delle ipotesi filtrare con metodi piu' radicali) siffatte transazioni non richieste per ognuno dei software utilizzati?</div><div>La soluzione ad entrambi i suddetti tipi di ostacoli potrebbe stare in una evoluzione degli attuali package managers, affinche' forniscano nativamente la funzionalita' di auto-upgrade per i programmi che lo richiedono, coordinando ed ottimizzando le connessioni verso l'esterno e provvedendo un unico centro di configurazione per chi ha il tempo da perdere verificando chi sta facendo cosa. Dirottando tutto al manager centralizzato esso sarebbe sempre consapevole di quale precisa versione e' in uso in un dato momento, quali sono i pacchetti che si auto-aggiornano per fatti propri e quali devono essere allineati con i repository della distribuzione secondo lo schema classico, e come comportarsi con le dipendenze.</div><div>Forse adesso e' troppo presto per porsi questo genere di domande, in quanto appunto solo Chrome e Firefox si stanno muovendo verso la direzione dell'autogestione. Ma nel momento in cui dovesse essere osservato un trend piu' cospicuo sarebbe opportuno correre ai ripari il prima possibile, mettendosi d'accordo tutti insieme su come amministrare in modo pacifico la legittima richiesta di aggiornamenti frequenti con la necessita' di far convivere numerosi pacchetti ognuno con una propria sequenza di versioning, ed evitare che codesta emergente moda dilaghi fino a minare uno dei pilastri su cui si poggia il successo del desktop Linux, appunto il package management.</div><div>Prevenire e' meglio che curare.</div>Roberto -MadBob- Guidohttp://www.blogger.com/profile/16458797013282594564noreply@blogger.com0tag:blogger.com,1999:blog-420466040951386274.post-78111980118360015002011-01-05T14:44:00.005+01:002011-01-20T02:25:08.354+01:00I Piccoli AggiornamentiTra le attivita' che maggiormente reputo degne di essere completamente delegate alla macchina in modo da non tediare l'utente c'e' sicuramente l'aggiornamento del software installato. Ad oggi qualsiasi distribuzione Linux monta di default un <a href="http://en.wikipedia.org/wiki/Package_management_system">package manager</a>, che si occupa automaticamente di verificare la disponibilita' di nuovi pacchetti e risolve le dipendenze in fase di installazione ed aggiornamento, ma comunque la sua esecuzione dipende dalla volonta' e dall'attenzione dell'utente che o se ne dimentica o viene periodicamente disturbato da <a href="http://www.ubuntu.com/files/u3/update-notification.png">notifiche</a> sul suo desktop.<div>Ad oggi, comunque, l'esecuzione schedulata e silenziosa di un "apt-get update; apt-get upgrade", magari per mezzo di cron, e' assai poco consigliata: troppo spesso accade che tale operazione venga lanciata nel bel mezzo di un update massivo sul repository di pacchetti di riferimento, e se non ci si prende la briga di leggere cosa viene richiesto di fare basta veramente troppo poco per trovarsi, in virtu' di qualche estroso conflitto nelle dipendenze, il desktop environment o qualche driver importante disinstallato.</div><div>Ma d'altro canto c'e' un intero universo di componenti software che non sono affatto gestiti (o comunque sono solo marginalmente trattati) dai package manager, e che produrrebbero un danno limitato anche qualora per disgrazia fossero gestiti male: i plugins.</div><div>Ogni applicazione evoluta oggi esistente mette a disposizione una ricca API con cui qualsiasi developer puo' aggiungere funzionalita', a volte modeste e a volte molto pesanti, e la tendenza a distribuire in questo modo lo sviluppo tra il maintainer del core principale e gli occasionali partecipanti e' in evidente crescita (forse anche dopo aver constatato l'enorme successo avuto dal concetto di "<a href="https://addons.mozilla.org/en-US/firefox/?browse=featured">estensione</a>" applicato al popolarissimo <a href="http://www.mozilla-europe.org/it/firefox/">Firefox</a>).</div><div>L'unico problema e' che raramente si trovano repository unici di estensioni e plugins destinati ad una specifica applicazione, ed occorre andarsele a cercare appositamente (assumendo ovviamente che se ne conosca l'esistenza). Il mio esempio preferito e' <a href="http://inkscape.org/">Inkscape</a>: sul sito esiste <a href="http://wiki.inkscape.org/wiki/index.php/Extension_repository">una raffazzonata pagina</a> dedicata ad indicizzare alcune estensioni esistenti, ma al fondo di essa si trovano tracce di un eventuale progetto strutturato e mirato a tale scopo che risalgono a maggio 2010.</div><div>D'improvviso, leggo oggi sul blog di <a href="http://aseigo.blogspot.com/">Aaron Seigo</a> il <a href="http://aseigo.blogspot.com/2011/01/fire-up-synchrotron.html">proposito</a> di fornire una sorta di protocollo di auto-discovery per i <a href="http://techbase.kde.org/Development/Tutorials/Plasma/DataEngines">DataEngines</a> di <a href="http://userbase.kde.org/Plasma">Plasma</a> (che, detto terra terra, sono delle estensioni di <a href="http://www.kde.org/">KDE</a>). In sostanza il personaggio descrive uno scenario che io stesso medito da tempo: utilizzare qualcosa come il formato <a href="http://freedesktop.org/wiki/Specifications/open-collaboration-services">Open Collaboration Services</a> (da me stesso <a href="http://lobotomy-dev.blogspot.com/2009/06/libopengdesktop.html">implementato</a> per <a href="http://gnome.org/">Gnome</a>) per comunicare ai clients degli utenti variazioni sullo stato dei componenti installati, ed ai fatti provvedere ad una sorta di package management isolato e dedicato ad una nicchia precisa. In un colpo solo si bypasserebbe il management ufficiale delle distribuzioni (che tendono ad essere in ritardo rispetto alle releases dei pacchetti veri e propri), si avrebbe un sistema di aggiornamento unico per tutte le piattaforme, e si estenderebbero le potenzialita' dell'amministrazione di sistema semi-programmatica anche ai frammenti di software sinora bistrattati ed esclusi dalle cure dei packagers.</div><div>Per quanto le mire di Seigo siano di molto basso profilo (appunto, limita la sua stessa idea all'aggiornamento dei DataEngines quando potrebbe essere applicato ad ogni genere di estensione), auspico che qualcuno lo stia a sentire e provveda a studiare una soluzione al problema, da poi riutilizzare in altri contesti.</div><div>Uno dei piu' grandi vantaggi di Linux rispetto alle altre piattaforme operative e' proprio l'elevato grado di maneggiabilita' dei pacchetti software installabili; tanto vale spremere il massimo da tale concetto, usarlo per dare risalto a sempre piu' opere e farne uno dei canali di penetrazione piu' aggressivi per il software libero.</div>Roberto -MadBob- Guidohttp://www.blogger.com/profile/16458797013282594564noreply@blogger.com0tag:blogger.com,1999:blog-420466040951386274.post-12075298514579243572010-11-24T02:29:00.006+01:002010-12-03T12:37:20.565+01:00Riuso Fai-da-TeUna delle cose che piu' amo del software libero e' la possibilita' di utilizzare e riutilizzare all'infinito frammenti e porzioni di codice, magari anche in contesti diversi rispetto a quello entro cui sono stati scritti. Spesso e volentieri io stesso mi trovo a copiare e incollare funzioni o intere classi dall'Internet, pescando dai repository, e al "costo" di poche righe di commento destinate ad indicare il copyright dell'autore originale si ottiene in pochi secondi la funzionalita' desiderata.<div>Tale proprieta' non e' purtroppo sempre applicabile ai componenti software complessi.</div><div>In questo periodo mi sono trovato a dover elaborare una soluzione composta, in buona sostanza, da un captive portal, un pannello per la gestione delle utenze, ed una centralizzazione degli accounts su un unico server. Scopo del gioco: esibire i documenti per l'autorizzazione alla navigazione web (<a href="http://www.londadineveralone.it/blog/2010/04/05/wifi-litalia-e-la-legge-pisanu/">grazie, Pisanu</a>) una volta sola, e poter poi accedere a tutti i locali all'interno del network convenzionato e geograficamente sparso usando sempre la stessa utenza.</div><div>Di captive portal opensource e' pieno il web. Nessuno di questi prevede una gestione avanzata degli accounts, i quali sono sempre e solo gestiti localmente. E, anche volendo dirottare le connessioni al database con qualche hack (pericoloso, in quanto comunque deve esistere un meccanismo di validazione dei routers periferici nei confronti del server centrale), non sarebbe comunque possibile personalizzare in modo agevole le anagrafiche trattate per fargli fare quel che mi serve (banalmente: associare gli accounts ai soci dei locali nel network, con tutto quel che ne consegue in termini di scadenze delle iscrizioni).</div><div>Dopo ardue ricerche incrociate, e valutazione di diversi blocchi di codice pescati qua e la', non son riuscito ad isolare i pezzi che mi servivano ed alla fine ho ceduto ed ho ben deciso di rifare tutto daccapo prendendo ispirazione qua e la'.</div><div>Purtroppo non si puo' porre un argine a questo problema, comune a pressoche' qualsiasi applicazione complessa. Isolare in modo chirurgico i componenti e' una best practise che esiste solo sui manuali accademici di ingegneria software, nel mondo reale non si puo' fare in quanto comunque alcuni presupposti (ad esempio: la gestione e la validazione degli utenti) devono essere validi a priori in tutto il sistema ed inevitabilmente vanno a cozzare contro i presupposti usati altrove.</div><div>Quel che piu' mi perplime comunque non e' l'utilizzo di componenti separate, quanto l'utilizzo di piu' componenti insieme. In questo periodo mi sto molto interessando alla questione della <a href="http://madbob.wordpress.com/2010/11/16/cera-una-volta-in-piemonte/">legge regionale piemontese per la promozione del software libero</a>, e spesso scopro che alcune amministrazioni in giro <a href="http://riuso.cnipa.gov.it/soluzioni/result.bfr?identificativo=&tipo_amm=&regione=&anno_avv=&ambito_amm=&ammin_idonee=&servizi_text=&tipo_serv=&all=1">per l'Italia</a> e <a href="http://www.osor.eu/">per l'Europa</a> hanno gia' rilasciato questo o quest'altro frammento potenzialmente utile per altre amministrazioni, ma temo il giorno in cui esse dovranno essere messe insieme e proposte a mo' di pacchetto chiavi-in-mano a qualche istituzione: ciascuna e' stata scritta con un framework diverso, in un linguaggio diverso, con specifiche ed architetture diverse, e presenta una interfaccia diversa, organizzata in modo diverso. Mettere insieme tutti questi pezzi, che presi singolarmente sono assai utili ma comunque non determinanti, si annuncia come una missione impossibile, e gia' so che il giorno in cui si prendera' di petto la questione molti di essi dovranno essere in buona parte riscritti. I sogni di riusabilita' immediata e propagazione del software pubblico sono destinati ad infrangersi contro lo scoglio del pragmatismo.</div><div>Ancora oggi la riusabilita' e' un mito. Che urge sfatare, per sbloccare finalmente in modo completo l'immenso potenziale del software libero.</div>Roberto -MadBob- Guidohttp://www.blogger.com/profile/16458797013282594564noreply@blogger.com0tag:blogger.com,1999:blog-420466040951386274.post-58709500507736201412010-11-14T22:27:00.002+01:002010-11-15T03:14:53.796+01:00Zero UpgradeNel <a href="http://lobotomy-dev.blogspot.com/2010/11/il-pallino-del-database.html">precedente post</a> ho fatto menzione alle comodita' programmative dell'usare una rappresentazione "uno a uno" degli oggetti manipolati ad alto livello con lo schema del proprio database: poco codice che gestisce tutto quanto, logica abbastanza lineare e necessariamente coerente dunque comprensibile, grande flessibilita'...<div>Qui vorrei fare una rapida menzione ad un ulteriore vantaggio di questa strategia, che ho l'altro giorno implementato e perfezionato nel codice del mio <a href="http://gasdotto.net/">gestionale per gruppi di acquisto</a>: l'aggiornamento automatico e trasparente del database in caso di upgrade dell'applicazione.</div><div>Passando dalla <a href="http://gasdotto.net/node/28">release 1.0</a> alla <a href="http://gasdotto.net/content/gasdotto-20">release 2.0</a> mi sono posto il problema di rendere l'upgrade di GASdotto semplice, almeno tanto quanto lo e' l'<a href="http://gasdotto.net/installation">installazione</a>, ma ho sicuramente fatto le cose un po' di fretta e mi son ritrovato un <a href="http://barberaware.org/plugins/scmsvn/viewcvs.php/src/org/barberaware/public/server/createdb.php?root=gasdotto&rev=235&r1=233&r2=235">garbuglio</a> di "ALTER TABLE" che certamente non avrei potuto mantenere anche nella futura release 3.0 (dovendo peraltro gestire i casi di migrazione partendo da 1.0 o 2.0). Alche' mi sono ingegnato ed ho deciso di spremere meglio la mia mappatura degli oggetti sul database, implementando l'operazione inversa: costruire il database partendo dalle classi PHP.</div><div>La funzione che effettua davvero le query (resa unica in tutto il programma originariamente con l'intento di centralizzare la gestione degli errori) e' stata modificata in modo che, se una richiesta verso il database fallisce, prima di tentare una seconda volta verifica che tutte le tabelle siano al loro posto e che esse abbiano tutte le colonne che descrivono gli attributi dei miei oggetti PHP di alto livello. L'effetto collaterale di tale meccanismo e' ovvio: GASdotto non abbisogna piu' di una procedura esplicita di upgrade, basta decomprimere l'archivio compresso al posto del precedente (magari salvandosi prima il file di configurazione) e al primo login si arrangia da solo nel modificare il database allineandolo alla struttura richiesta con le nuove colonne e le nuove tabelle.</div><div>La procedura deve ancora essere testata con cura, ma i primi esperimenti sono stati soddisfacenti: trovandomi adesso ad attuare qualche <a href="http://barberaware.org/tracker/index.php?func=detail&aid=138&group_id=32&atid=212">correzione</a> alla gestione delle notifiche mi trovo a dover aggiungere qualche attributo alla classe <a href="http://barberaware.org/plugins/scmsvn/viewcvs.php/src/org/barberaware/public/server/Notification.php?rev=279&root=gasdotto&view=markup">Notification</a>, e laddove prima dovevo rimaneggiare la classe PHP, quella Java e lo schema del database, adesso metto mano solo al codice e la prima volta che ricarico l'applicazione nel browser la query fallisce, esegue il controllo, crea le nuove colonne richieste nelle tabelle e tira dritto.</div><div>Sebbene il tutto sia ancora migliorabile (manca la definizione dei valori con cui inizializzare le eventuali nuove porzioni di database) posso ritenermi soddisfatto di questa novita': ho eliminato un passaggio richiesto per l'amministrazione dell'applicazione da parte degli utenti (spianando peraltro la strada ad un futuro automatismo per l'aggiornamento trasparente, come quello gia' esistente nell'ottimo <a href="http://wordpress.org/">Wordpress</a>), ed io ho ridotto la quantita' di cose di cui preoccuparmi durante lo sviluppo.</div><div>Regola 1: essere pigro, e far fare alla macchina quello che non si ha voglia di fare a mano.</div>Roberto -MadBob- Guidohttp://www.blogger.com/profile/16458797013282594564noreply@blogger.com0tag:blogger.com,1999:blog-420466040951386274.post-75611577441739963492010-11-11T19:31:00.002+01:002010-11-11T20:14:09.958+01:00Il Pallino del DatabaseOgniqualvolta mi confronto con un qualche programmatore in merito ad una qualsiasi applicazione che deve gestire un po' di dati, pare che la prima (ed unica?) preoccupazione sia lo schema del database. Mi e' gia' capitato con numerosi personaggi, tra cui un <a href="http://www.sap.com/">SAPpista</a>, un imprenditore ex-sviluppatore di gestionali, diversi developers freelance, insomma con chiunque abbia anche una vaga idea di come scrivere codice: quando si parla di un programma, la prima cosa che vogliono vedere e' il database.<div>Saro' un eretico, ma a me non pare che questo componente necessiti di tali particolari attenzioni.</div><div>Certamente dallo schema del database adottato dipende la scalabilita', la possibilita' di aggiungere funzionalita' complesse in futuro, ed in parte la performance del sistema completo, ma da quando ho adottato una nuova prospettiva nel processo di sviluppo di <a href="http://gasdotto.net/">GASdotto</a> ho smesso di preoccuparmi particolarmente della cosa.</div><div>Sostanzialmente, in GASdotto il database e' la rappresentazione "uno a uno" degli oggetti maneggiati dall'applicazione, e tutte le interazioni con questi oggetti sono formalizzate secondo una manciata di regole.</div><div>Ad esempio: l'oggetto <a href="http://barberaware.org/plugins/scmsvn/viewcvs.php/src/org/barberaware/public/server/Order.php?rev=271&root=gasdotto&view=markup">"Order"</a> e' un ordine aperto presso un fornitore. All'interno della classe sono iscritte le proprieta' che compongono tale elemento. Sul database, c'e' una tabella che si chiama "Orders" (tipicamente le tabelle si chiamano nello stesso modo della classe di riferimento, ma ho dovuto fare una eccezione poiche' "order" e' una <a href="http://www.w3schools.com/sql/sql_orderby.asp">parola chiave</a> di SQL) che riporta esattamente quelle stesse proprieta'. Dove l'oggetto ha una stringa, sul database c'e' un varchar. Dove c'e' un numero, corrisponde un intero. Dov'e' c'e' un riferimento ad un oggetto descritto da un'altra tabella, vi si trova la chiave esterna a quella tabella. Nel caso particolare delle relazioni "uno a molti" (ad esempio: i prodotti contemplati all'interno dell'ordine), si utilizza sempre una tabella di appoggio che si chiama "nomedellaclasse_nomedellattributo" e due colonne, una per l'entita' di riferimento (l'ordine) e l'altra per i sottoelementi (i prodotti).</div><div>Lo schema non e' per nulla ponderato o meditato: ogni informazione che serve e' memorizzata secondo una forma definita a priori, senza soffermarsi mai sul caso specifico.</div><div>Durante l'implementazione del supporto alle "varianti" dei prodotti in <a href="http://gasdotto.net/content/gasdotto-20">GASdotto 2.0</a> ho constatato come questo approccio sia facilmente adattabile: alla fine dell'opera mi son ritrovato con numerose nuove tabelle, ma per quanto complessa sia la relazione tra prodotto, variante, prodotto ordinato, varianti ordinate, prodotti consegnati eccetera, in breve sono riuscito a cavarne una definizione sempre coerente e non eccessivamente arzigogolata.</div><div>Il vantaggio maggiore di tale strategia e' che, essendo tutto maneggiato con poche regole sempre valide, il codice necessario alla serializzazione, deserializzazione, e reperimento e salvataggio delle informazioni e' unico in tutti i casi. Il guscio piazzato intorno al database e' ridotto a poco piu' dei minimi termini, una unica classe (<a href="http://barberaware.org/plugins/scmsvn/viewcvs.php/src/org/barberaware/public/server/FromServer.php?rev=259&root=gasdotto&view=markup">"FromServer"</a>. Nome assai poco fantasioso...) provvede alla stragrande maggioranza del lavoro. Cosa non da poco, in termini di mantenibilita'.</div><div>Sicuramente lo schema finale non e' il piu' ottimizzato che si possa pensare, e non dubito che si potrebbe fare molto di meglio in termini di performance e risorse occupate, ma in fin dei conti la differenza non si nota. L'istanza nota piu' grossa di GASdotto conta attualmente 600 diversi prodotti da 30 diversi fornitori, il dump completo (e compresso con l'opzione -Ft di <a href="http://developer.postgresql.org/pgdocs/postgres/app-pgdump.html">pg_dump</a>) di <a href="http://www.postgresql.org/">PostgreSQL</a> e' di quasi 1 megabyte, eppure il tutto pare sufficientemente reattivo ai 170 utenti registrati (a parte quando la componente Javascript inizia a macinare tutti quei dati in un colpo solo nel browser, ma e' un altro discorso).</div><div>Insomma: personalmente, ho smesso di dare tanto peso a come e' fatto il database di backend delle applicazioni. Quantomeno delle mie. Qualche microsecondo di elaborazione in piu' val bene tutta questa flessibilita' compressa in una cosi' modesta quantita' di codice.</div>Roberto -MadBob- Guidohttp://www.blogger.com/profile/16458797013282594564noreply@blogger.com2tag:blogger.com,1999:blog-420466040951386274.post-15997581192929992442010-10-31T00:31:00.005+02:002010-11-04T19:03:18.778+01:00La ProvaIn questo periodo sto dando una mano presso un corso di alfabetizzazione informatica organizzato dall'<a href="http://informaticalibera.info/">Officina Informatica Libera</a> di Torino, frequentato per lo piu' da anziani ed extracomunitari. Talvolta mi trovo ad affiancare gli utenti mentre svolgono gli esercizi mirati a fargli prendere dimestichezza con mouse e tastiera, e sin troppo spesso finisco nei paraggi di un baffuto signore in particolare.<div>Questo personaggio, nella sua immensa ignoranza (in senso non offensivo, ovviamente) ed ingenuita', e' la dimostrazione vivente di quando sia complicato utilizzare un computer al giorno d'oggi. Facilmente va nel panico, percui si dimentica quello che gli e' stato spiegato cinque minuti prima e tenta di intuire qual'e' l'operazione giusta da fare in un dato momento, puntualmente non riuscendoci e ripetendo l'errore che aveva gia' compiuto prima della spiegazione.</div><div>Il mio preferito e' la confusione esistente tra il cursore del mouse ed il cursore lampeggiante del testo. Spesso egli punta il mouse laddove vuole apportare una modifica in una frase (cancellare un carattere, o aggiungerne un'altro), non clicca, ma comunque pigia il tasto della tastiera corrispettivo. Applicando ovviamente tale modifica da tutt'altra parte.</div><div>Fa uscire di testa guardarlo mentre tenta di selezionare del testo usando il mouse, in quanto tale tecnica per quanto famigliare per molti e' costituita da infinite "regole" non esplicite e di non immediato apprendimento: la selezione e' monodirezionale (inizia nel punto in cui si e' iniziato a cliccare e finisce nel punto ove il cursore viene spostato, dunque non e' possibile agire contemporaneamente sopra e sotto l'inizio della selezione), deve essere eseguita in un colpo solo (tutte le righe senza mai lasciare il tasto sinistro del mouse), e' suscettibile di speciali comportamenti e un testo selezionato puo' essere spostata in blocco (dunque e' buona norma deselezionare tutto prima di tentare una nuova selezione)... Tutto questo contribuisce a far perdere l'orientamento al buon utente volenteroso (e la pazienza al volenteroso assistente che gli sta accanto), al decimo tentativo di prendere cinque righe egli ha gia' sparpagliato tutto in giro per il documento cliccando e trascinando a casaccio.</div><div>I tasti sulla tastiera sono decisamente troppi. Le lettere dell'alfabeto sono sparpagliate, ma le si puo' cercare facilmente. Gia' i tasti con due o peggio tre simboli sono complicati, perche' ogni carattere e' attivabile pigiando il relativo "modifier" (che non viene mai scelto correttamente). Il dramma e' che i simboli selezionabili con Shift non sono attivati quando e' attivo il CapsLock, dunque tutto il vantaggio di spezzare la procedura in piu' parti (pigia CapsLock, pigia tasto, ripigia CapsLock) viene perso ed anzi e' richiesto di coordinare il movimento di ben due dita (un dito fisso su Shift, l'altro sul tasto desiderato). Stendiamo un velo pietoso sui pulsanti Return e Enter, i quali sono vicini e pur facendo cose totalmente diverse riportano entrambi il disegnino della freccia diretta a sinistra...</div><div>Tutte e altre considerazioni sono emerse dopo due incontri, facendo solo input di testo vagamente formattato. Sara' dura instradare correttamente il suddetto personaggio, comunque indipendentemente dai risultati che si raggiungeranno (o piu' probabilmente non si raggiungeranno) cerchero' di osservare e registrare i comportamenti della mia cavia per trarne qualche spunto.</div>Roberto -MadBob- Guidohttp://www.blogger.com/profile/16458797013282594564noreply@blogger.com0tag:blogger.com,1999:blog-420466040951386274.post-12735461531559085652010-10-15T14:05:00.005+02:002010-10-31T00:30:05.133+02:00Attivita' CollateraleIn un <a href="http://aseigo.blogspot.com/2010/10/activities-as-homonyms.html">recente post</a> sul <a href="http://aseigo.blogspot.com/">suo blog</a>, Aaron Seigo (project leader di KDE) ci spiega il concetto di "attivita'" e la differenza che tale termine assume nelle piu' recenti incarnazioni dei desktop environment <a href="http://www.gnome.org/">Gnome</a> e <a href="http://www.kde.org/">KDE</a> (non mancando ovviamente di sottolineare quanto il tutto sia molto migliore nel progetto da lui rappresentato).<div>In breve: una "attivita'" e' un agglomerato eterogeneo di files (e di relative applicazioni per aprirli) che rientrano all'interno di uno specifico task dell'utente, definito manualmente (ed eventualmente anche in modo automatico), invocabile on-demand a seconda di quel che si sta facendo. Per fare un esempio: se lo sviluppo di un dato pezzo di codice comprende i sorgenti, la documentazione dell'API usata e qualche altro contenuto, posso pigiare il tasto "aprimi questa attivita'" ed il desktop environment mi presenta il tutto senza dover aprire ogni singola cosa a mano.</div><div>Mi spiace per Seigo, ma io tutto questo lo avevo gia' valutato ed analizzato nel 2004 (<a href="http://web.archive.org/web/20040811043949/http://braintop.sourceforge.net/">come conferma</a> <a href="http://www.archive.org/">archive.org</a>) nel contesto del <a href="http://lobotomy-dev.blogspot.com/2008/05/saranno-famosi.html">fu' progetto BrainTop</a>. E l'ho gia' scartato.</div><div>Il concetto e' molto semplice: quel che gli utenti fanno col PC non sempre e' classificabile all'interno di un singolo task, anzi cio' accade piu' raramente di quanto non si creda. L'esempio piu' banale e' quello del player multimediale che in background riproduce musica di sottofondo: esso e' totalmente scorrelato da qualsiasi attivita', e ben difficilmente una data colonna sonora e' univoca e definita per un task. Esempio meno banale sono le comunicazioni sincrone ed asincrone che ognuno di noi si trova a gestire in qualunque momento della giornata: la gente mi contatta in chat indipendentemente da quel che sto facendo, cosiccome mi arrivano continuamente mail da ogni mittente e su ogni tema; tale mole di attivita' de-contestualizzate dovrebbero essere identificate in quanto tali, ed il sistema dovrebbe riconoscere (non si sa come...) l'incongruenza logica evitando di contemplate all'interno della mia sessione di lavoro il programma risvegliato da un input esterno.</div><div>Piu' complesso e' il ragionamento sulla quantita' di compiti che in ogni momento si svolgono. La scienza <a href="http://www.medicinenet.com/script/main/art.asp?articlekey=119810">dice</a>, giustamente, che le persone non possono fare piu' di una cosa alla volta. O meglio: che tale pratica e' deleteria. Eppure tutti lo fanno. Una mezza occhiata a Facebook o alle news o alla posta la si da anche lavorando, o magari ci sono momenti in cui si stanno effettivamente mettendo le mani su due cose completamente diverse (in questo preciso momento io sto bloggando a smozzichi tra una compilazione e l'altra di <a href="http://gasdotto.net/">GASdotto</a>). Come dovrebbero comportarsi le "attivita'" in questo caso? Dovrebbero forse mergiare i task tra loro? O includere gli applicativi consultati occasionalmente?</div><div>Insomma: dopo averci gia' a lungo ragionato, io sono giunto alla conclusione che codesta suddivisione del lavoro e' perfetta in un mondo ideale e perfetto ma non calza affatto i casi d'uso reali. Attendo di vedere quanto tempo sara' necessario ai team KDE e Gnome per accorgersene a loro volta.</div>Roberto -MadBob- Guidohttp://www.blogger.com/profile/16458797013282594564noreply@blogger.com0tag:blogger.com,1999:blog-420466040951386274.post-5852533736439908872010-08-26T20:12:00.003+02:002010-08-28T01:11:42.169+02:00Mappa Geo/MentaleQualche tempo addietro il buon <a href="http://seilo.geekyogre.com/">Seif Lofty</a>, maintainer dello stravagante progetto <a href="http://zeitgeist-project.com/">Zeitgeist</a>, ha pubblicato <a href="http://seilo.geekyogre.com/2010/07/zeitgeist-geolocation-magic/">un esempio</a> di cio' che e' possibile fare appunto con il suo collettore di informazione.<div>In una applicazioncina, approntata a mo' di hack, viene presentata una mappa geografica, e cliccando su di essa vengono visualizzati i files editati o consultati mentre ci si trovava in tale posto. O anche, come dimostrato nello screencast, le persone con cui si ha chattato stando in tale locazione.</div><div>Il concetto mi garba assai, perche' aggiunge un ottimo criterio di ricerca per facilitare l'individuazione dei files cui si e' interessati: lo spazio fisico. Accade infatti piu' spesso di quanto non si creda (almeno a me) di ricordare di aver fatto o visto qualcosa di interessante mentre ci si trovava in un dato luogo, magari a casa di un amico o nel bel mezzo di un raduno di smanettoni, e nel suo piccolo codesto simpatico software si presenta come ottimo connubio tra facilita' d'uso ed efficienza del risultato.</div><div>Dal canto mio avevo gia' iniziato a valutare tempo addietro questo genere di correlazioni "ambientali" per facilitare la navigazione dei contenuti, tant'e' che nella <a href="http://lobotomy-project.org/wiki/ThoughtsList">lista</a> di possibili <a href="http://lobotomy-project.org/wiki/Thoughts">Thoughts</a> per <a href="http://lobotomy-project.org/">Lobotomy</a> avevo immesso anche una fantomatica "Timeline" che mettesse in parallelo l'accesso ai documenti con altri parametri apparentemente totalmente scorrelati tipo gli eventi del calendario (per sapere cosa e' stato consultato mentre ci si trovava ad un dato appuntamento, concetto gia' superficialmente implementato dal file manager <a href="http://www.blogger.com/www.iola.dk/nemo/">Nemo</a>) o addirittura le condizioni meteo ("L'altro giorno pioveva e ne ho approfittato per scrivere quel file, dove l'ho messo...?").</div><div>Piu' in generale credo che tale genere di espedienti multisensoriali siano una ottima strada da esplorare nella corsa al data management moderno, in questi tempi cosi' ricchi di materiale da gestire e cosi' scarsi strumenti per farlo. Il fatto di estendere le capacita' di ricerca entro una dimensione, appunto lo spazio e le condizioni fisiche, cui il nostro cervello e' assai ben abituato da qualche centinaio di migliaia di anni di evoluzione e' un inestimabile valore aggiunto, esattamente perche' rende l'operazione di ricerca estremamente piu' naturale.</div><div>Si avvicina il momento in cui l'odierna gerarchia a cartelle sara' sostituita da qualcos'altro, magari una cartina geografica...</div>Roberto -MadBob- Guidohttp://www.blogger.com/profile/16458797013282594564noreply@blogger.com0tag:blogger.com,1999:blog-420466040951386274.post-75350718688176541892010-08-26T01:37:00.006+02:002010-08-26T20:00:55.528+02:00Pensieri AndroidiPoco tempo fa' ho finalmente acquistato un <a href="http://www.htc.com/it/product/desire/overview.html">HTC Desire</a>, simpatico smartphone che monta di serie il ben noto sistema operativo <a href="http://www.android.com/">Android</a> di <a href="http://www.google.it/">Google</a>. Manco a dirlo tre giorni dopo l'acquisto ho scaricato <a href="http://developer.android.com/sdk/index.html">l'SDK</a> ed ho iniziato a dare una occhiata alle <a href="http://developer.android.com/guide/index.html">guide per i developers</a>, anche se solo adesso (dopo una settimana di vacanza a zonzo per il nord Italia e l'urgente lavoro per la release 2.0 di <a href="http://gasdotto.barberaware.org/">GASdotto</a>) comincio a comprendere le nozioni di base della piattaforma.<div>Non nego di essermi un poco stupito nello scoprire l'estrema somiglianza tra quelli che in Android vengono chiamati <a href="http://developer.android.com/guide/topics/ui/index.html">"Layout"</a> e i <a href="http://lobotomy-project.org/wiki/Thoughts">"Thoughts"</a>, alla base di un po' tutta l'architettura grafica di <a href="http://lobotomy-project.org/">Lobotomy</a>.</div><div>In entrambi, l'intera interfaccia di ogni schermata viene definita all'interno di un file XML, che verra' poi interpretato per piazzare i widgets al posto dei tags definiti. Contrariamente a <a href="https://developer.mozilla.org/en/xul">XUL</a> codesti files non contengono alcuna componente funzionale, solo ed esclusivamente la disposizione degli elementi grafici.</div><div>In entrambi, ogni file rappresenta una singola schermata. In Android, se una applicazione prevede piu' sezioni ciascuna di esse deve essere definita all'interno di un suo specifico XML, che vive una vita propria e prende il nome di <a href="http://developer.android.com/guide/topics/fundamentals.html">"Activity"</a>.</div><div>In entrambi, i componenti sono riutilizzabili, miscelabili e richiamati da una parte all'altra in modo trasparente, anche tra applicazioni diverse. Sulla piattaforma di Google il meccanismo prende il nome di <a href="http://developer.android.com/guide/topics/intents/intents-filters.html">"Intents"</a> (da <a href="http://www.openintents.org/">"Open Intents"</a>, progetto nato come piattaforma all'interno della piattaforma e alla fine incastonato nel core vero e proprio di Android), e benche' a prima vista sia poco sfruttato dal software attualmente nel <a href="http://www.android.com/market/">Market</a> ha ricche potenzialita'.</div><div>Ovviamente esistono anche differenze tra i "Thoughts" di Lobotomy ed i "Layouts" di Android: i primi prevedono una assai piu' netta separazione tra interfaccia grafica e codice funzionale, e la possibilita' di creare i propri widgets da usare e riusare all'interno della definizione XML. E' comunque molto interessante constatare come tali concetti, fino ad ora esistiti solo nei miei appunti, vengano adottati all'interno di un ambiente di questo spessore, ed ancora piu' interessante e' misurarsi con essi sul piano pratico tentando di costruire qualcosa partendo da siffatti strumenti.</div><div>Per ora, continuo ad indagare sulla visione degli ingegneri Google provando a capirci qualcosa.</div>Roberto -MadBob- Guidohttp://www.blogger.com/profile/16458797013282594564noreply@blogger.com0tag:blogger.com,1999:blog-420466040951386274.post-90654294940588913672010-07-31T13:01:00.006+02:002010-08-03T01:12:37.351+02:00Informazione ColorataNella oramai imminente release 2.0 di <a href="http://gasdotto.barberaware.org/">GASdotto</a> (stando alla roadmap attuale dovrebbe essere rilasciata entro la fine di agosto) e' stato introdotto un nuovo pannello dedicato ai grafici: per mezzo della <a href="http://code.google.com/apis/visualization/interactive_charts.html">Google Visualization API</a>, <a href="http://code.google.com/p/gwt-google-apis/">integrata in GWT</a>, ho aggiunto qualche disegnino che rappresenta graficamente in forma di barre e torte il numero di utenti che hanno ordinato qualcosa presso un fornitore, a quanto ammonta la cifra totale degli ordini effettuati in un dato intervallo di tempo, e quali sono i prodotti piu' richiesti. Credo che sia venuto abbastanza bene, i grafici sono graziosi ed abbastanza ben leggibili.<br />L'altra sera ero a casa dell'amico che mi da una mano con lo sviluppo, o meglio che mi guida suggerendo features e migliorie: essendo uno dei responsabili di uno dei Gruppi di Acquisto piu' grossi di Torino, il quale gruppo e' peraltro il maggior fruitore "ufficiale" dell'applicazione, ha accesso ad una mole di dati immensa ed estremamente utile per effettuare test piu' che significativi sul software.<br />Ero a casa sua, dicevo, ed insieme a noi c'era un altro amico, anche lui all'interno dello stesso GAS, e stavamo contemplando lo stato attuale della piattaforma (il cui codice, seppur non rilasciato, e' accessibile a tutti dal <a href="http://barberaware.org/scm/?group_id=32">repository SVN</a>) su uno snapshot della base dati realmente utilizzata dal gruppo. Quando e' stato aperto il pannello delle statistiche, il grafico a torta rappresentante la spartizione dei quattrini tra i diversi fornitori visualizzava uno spicchio grosso quasi quanto un quarto del totale. "A chi diamo tutti questi soldi?", e' stata la reazione del nostro ospite. Ne e' emerso che, per un motivo o per l'altro, un singolo produttore (su circa 17) assorbiva appunto quasi un quarto delle attenzioni della combriccola, in evidente contrasto con quello che dovrebbe essere lo spirito di equita' e solidarieta' che anima questo genere di iniziative.<br />Tutto questo fior fior di aneddoto per ribadire qualcosa di non nuovo: una rappresentazione grafica che riassuma in un colpo solo una discreta quantita' di dati fornisce nozioni che sarebbero afferrabili solo analizzando molto attentamente i dati stessi, o per meglio dire nozioni che altrimenti a nessuno verrebbe mai in testa di analizzare.<br />Coloro che seguono <a href="http://www.informationisbeautiful.net/">Information is Beautiful</a>, noto blog interamente dedicato agli infographics (nome altisonante per indicare l'arte di far grafici che siano anche belli da vedere), sanno bene a cosa mi riferisco: non e' raro trovarsi dinnanzi a pochi pixel colorati che spiegano una quantita' infinita di cose, cui magari non si e' mai pensato. Nel mio piccolo anche io ho iniziato recentemente ad esplorare questo particolare settore con l'esperienza di <a href="http://masciap.barberaware.org/">Masciap</a>, blog in cui ogni settimana i dataset pubblicati sull'<a href="http://www.dati.piemonte.it/">apposito portale</a> della Regione Piemonte vengono tradotti in numeri e grafici, e nonostante la giovane eta' del progetto qualche considerazione significativa e' gia' <a href="http://masciap.barberaware.org/wordpress/?p=36">saltata fuori</a>.<br />Vorrei nel prossimo futuro includere grafici e tabelle in ogni posto dove sia possibile farlo (gia' tale genere di funzionalita' e' prevista nella roadmap a lungo termine di <a href="http://maintainr.barberaware.org/">Maintainr</a>, per riassumere il tempo dedicato ad ogni progetto gestito dal programma), in quanto essi sono un valore aggiunto di inestimabile valore: poche semplici barre possono drasticamente aiutare ad individuare situazioni anomale, e permettere all'utente di agire per correggere il tiro nei confronti dei suoi propri obiettivi, richiedendo del resto uno sforzo minimo da parte di chi implementa l'applicazione.Roberto -MadBob- Guidohttp://www.blogger.com/profile/16458797013282594564noreply@blogger.com0tag:blogger.com,1999:blog-420466040951386274.post-10619365764186244702010-07-17T00:19:00.006+02:002010-07-18T00:02:56.421+02:00Automazione per InduzioneQualche tempo addietro vidi che in <a href="http://userbase.kde.org/Kmail">KMail</a> era stata introdotta una <a href="http://www.omat.nl/2010/05/17/accountwizard-demo/">simpaticissima feature</a>: dato un indirizzo mail e la relativa password, esso autoconfigurava l'account identificando il server SMTP, il server POP3, le porte di accesso, l'autenticazione SSL attivata o meno, insomma tutti quei dettagli che raramente un utente domestico comprende e che nella migliore delle ipotesi copia e incolla pedestramente dalla pagina di supporto del sito web del provider di fiducia.<br />Sul momento ho pensato che il suddetto programma dovesse appoggiarsi ad un qualche database online di configurazioni, e dopo qualche indagine sono giunto ad una succulenta scoperta: il meccanismo si chiama <a href="https://ispdb.mozillamessaging.com/">ISPDB</a> ed e' stato ideato da <a href="http://www.mozilla.com/en-US/">Mozilla</a> per <a href="http://www.mozillamessaging.com/en-US/thunderbird/">Thunderbird</a> (il loro client di posta), e sebbene l'API sia pressoche' inesistente (un URL cui accodare il dominio che interessa, che ritorna indietro un XML) e ben nascosta (ho ravanato un poco per trovare <a href="https://developer.mozilla.org/en/Thunderbird/Autoconfiguration#ISPDB">un riferimento</a> al sopra menzionato URL) risulta comunque vagamente usabile. Tant'e' che persino <a href="http://projects.gnome.org/evolution/">Evolution</a> <a href="http://groups.google.com/group/tb-planning/browse_thread/thread/638beb6fc8c2b644/ab05092a7655211d">supporta</a> da poco tale sistema.<br />Chiaramente mi sono precipitato a mettere insieme del codice per usare tale base di dati, e piu' precisamente ho accrocchiato <a href="http://barberaware.org/snippet/detail.php?type=snippet&id=39">una funzione PHP</a> che verra' nel prossimo futuro integrata in <a href="http://gasdotto.barberaware.org/">GASdotto</a> per facilitare la configurazione delle mail in uscita generate dal programma.<br />Sorvolando sulla mia fregola programmatoria, mi compiaccio del fatto che qualcuno abbia avuto questa bella idea di voler automatizzare qualcosa di facilmente automatizzabile ed abbia messo in piedi un sistema tutto sommato semplice e scontato per ottenere qualcosa che, per l'utente casalingo, semplice e scontato non e'. ISPDB e' un <a href="http://it.wikipedia.org/wiki/Uovo_di_Colombo">Uovo di Colombo</a>, implementato come detto molto alla buona, ma io credo che nella sua modestia sia un ottimo esempio di come si possa parecchio facilitare la vita all'utente finale: pescando parametri del resto sempre uguali tra loro da una base dati condivisa si evita di dover effettuare la procedura a mano, eliminando peraltro tutti i rischi e le frustrazioni dovute a copia&incolla malamente eseguiti a causa del fatto che chi opera non capisce realmente cosa sta facendo.<br />La dimostrazione di come un pugno di dati forniti di una semantica possano risolvere problemi, anche grossi, concreti e sotto gli occhi di tutti.<br />Probabilmente ci sono molti altri casi in cui si potrebbe procedere per metodo induttivo, individuando alcuni patterns ripetitivi ed incastonandoli in un unico flusso gestibile in larga parte per via automatica. Tutto sta nello scoprirli ed ingegnerizzarli.Roberto -MadBob- Guidohttp://www.blogger.com/profile/16458797013282594564noreply@blogger.com0tag:blogger.com,1999:blog-420466040951386274.post-27726910279291733632010-07-10T20:14:00.003+02:002010-07-12T01:11:42.212+02:00ZUI, Ma Anche NoConstato adesso il fatto di non aver mai menzionato le ZUI (<a href="http://en.wikipedia.org/wiki/Zooming_user_interface">Zooming User Interface</a>) su <a href="http://lobotomy-dev.blogspot.com/">questo blog</a>, ma ora, dopo la lettura di <a href="http://www.anobii.com/books/The_Humane_Interface/9780201379372/00570e9cc50e8c19b4/">The Humane Interface</a>, mi e' inevitabile.<br />Nel suo pluri-osannato saggio, il fu' <a href="http://en.wikipedia.org/wiki/Jef_Raskin">Raskin</a> dedica ampio spazio alla descrizione di interfacce per sistemi general purpose incentrate sul fatto di poter navigare sostanzialmente in tre dimensioni le informazioni, distribuite non gia' all'interno di un albero bidimensionale (la ben famigliare gerarchia a cartelle) ma su una serie potenzialmente infinita di piani "trasparenti" cui accedere zoomando una data porzione dello schermo fintantoche' ci sia qualcosa da zoomare. A tale sistema viene attribuita la capacita' di mostrare moli importanti di dati in un unico colpo d'occhio, una migliore intuitivita' nell'interazione, e l'implicita' possibilita' di embeddare nella stessa interfaccia funzionalita' complesse che, ai fatti, possono sostituire le canoniche applicazioni cui siamo abituati con un agglomerato onnipotente ed onnipresente ben piu' omogeneo.<br />Personalmente, non sono particolarmente favorevole al paradigma suggerito dalla ZUI. Certamente sono propenso all'ultima nozione di eliminazione delle singole applicazioni (del resto, buona parte del <a href="http://lobotomy-project.org/">Progetto Lobotomy</a> si basa su <a href="http://lobotomy-project.org/wiki/Thoughts">tale concetto</a>), ma non posso essere d'accordo in merito all'effettiva efficienza sul trattamento delle informazioni.<br />In primis: seppur tridimensionale anziche' bidimensionale, pur sempre di una gerarchia si tratta. Gli elementi a video sono sempre raggruppati tra loro secondo un unico criterio arbitrario e non riproducibile o prevedibile definito dall'utente: laddove nell'albero a cartelle i files si trovano nelle directory scelte (spesso malamente) dall'utilizzatore qui vanno posizionati all'interno dello spazio, ma comunque sempre in una qualche "zona" la cui reperibilita' e' sempre delegata alla (fragile) memoria del povero tapino che sta dall'altra parte del monitor. Anzi, in uno spazio tridimensionale si aggiunge una ennesima dimensione entro cui potersi perdere: nel momento in cui sto cercando un documento non devo ricordarmi solo in quale gruppo di documenti l'ho messo, ma potrei benissimo non rintracciarlo essendo esso visibile solo ad un livello di zoom minore o maggiore rispetto a quello attuale.<br />Per estensione, anche il vantaggio della quantita' di dati visualizzati in un colpo solo viene minato appunto dalla mancanza di conoscenza a priori del giusto livello di zoom entro cui un dato si trova: quel che sto cercando potrebbe benissimo essere stato piazzato in uno strato "superiore", e dunque essere identificabile solo "allargando" la visuale e perdendo la percezione di quel che si trova negli strati "inferiori".<br />Nel tomo del Raskin viene illustrato l'esempio di una ZUI usata per descrivere l'organizzazione di una serie di cliniche: certamente un impiego del genere sarebbe ben piu' appropriato di un sistema "general purpose", in quanto le informazioni da maneggiare sono gia' distribuite entro una gerarchia nota che si vuole riprodurre metaforicamente (le cliniche, ovvero gli edifici, composti da piani, composti da stanze, popolate da letti in cui stanno i pazienti), ma il problema della navigabilita' rimane: per accedere ai dettagli relativi ad una persona devo sapere a priori dove essa si trova (quale edificio, quale piano, quale stanza, quale letto), e per quanto una funzione di ricerca full-text possa essere facilmente innestata in modo che dato un nome l'interfaccia possa zoomare da sola dove richiesto non e' chiaro quale dovrebbe essere il comportamento in caso di risultati multipli (schermo splittato, ove ogni parte visualizza la porzione corretta dello schema completo???).<br />Numerosi altri punti sono altrettanto mai risolti, in particolar modo a riguardo del comportamento da adottare con contenuti non testuali: se ho una immagine, mi sposto a destra, ingrandisco finche' non vedo piu' nessuna parte di suddetta immagine, e mi sposto a sinistra, cosa succede? Ho girato dietro l'immagine, e dunque vedo uno spazio bianco? Vedo la stessa immagine zommata? Se creo li' un documento, esso dove andra' a finire? Sotto l'immagine? Dentro l'immagine? Tornando indietro e zommando l'immagine, essa diverra' prima o dopo "trasparente" e mi permettera' di accedere a quello che c'e' sotto o dovro' sempre aggirarla? A tutte queste domande puo' dare una risposta l'eventuale implementatore, e gia' ho visto diverse implementazioni piu' o meno abbozzate di tale meccanismo, ma personalmente credo che almeno per i quesiti qui sopra esposti non esista nessuna soluzione che al tempo stesso permetta una aderenza stretta al paradigma e una sufficiente facilita' di utilizzo: da una parte lo zoom infinito su di una fotografia e' fondamentalmente inutile ed implica di perdere totalmente l'accesso a tutta la parte di spazio che vi sta sotto ma viene richiesto dalla specifica, dall'altra la possibilita' di considerare i contenuti troppo allargati come "saltati" aggiunge una complessita' non da poco alle operazioni di esplorazione dello spazio (di cui alcune parti sono occasionalmente nascoste e pressoche' impossibili da trovare senza premeditazione).<br />Piu' in generale, ribadisco che per quanto certamente migliore della suddivisione a cartelle anche questa forma spaziale rappresenta pur sempre una gerarchia la cui organizzazione e' lasciata alla cura (o, meglio, alla noncuranza) dell'utente, ed e' dunque destinata a fallire trovando il suo punto critico proprio nell'elemento meno affidabile di tutto il percorso di interazione uomo-macchina. Per quanto mi concerne continuo a preferire di gran lunga la possibilita' di "trovare" piu' che di "cercare", e <a href="http://seilo.geekyogre.com/2010/07/finding-vs-exploring-some-initial-prototypes/">non sono l'unico</a>.Roberto -MadBob- Guidohttp://www.blogger.com/profile/16458797013282594564noreply@blogger.com0tag:blogger.com,1999:blog-420466040951386274.post-86601866670595138392010-06-23T03:46:00.004+02:002010-06-23T04:06:59.423+02:00MaintainrCroce e delizia di ogni developer fancazzista, quale sono ad esempio io, sono gli occasionali progettucci in cui sin troppo spesso ci si va ad infognare, in gergo detti "pet projects". Questi ci permettono di passare qualche pomeriggio smanettando su qualcosa di inedito, talvolta fungono da pretesto per metter mano ad una nuova libreria o ad un nuovo concetto appena appreso, e comunemente inducono quella piacevole attivita' cerebrale creativa spontanea che tanto piace alle gioconde menti dei programmatori. Quando si inizia una nuova impresa, parallelamente si iniziano ad innalzare architetture software estrose ed arzigogolate per il puro gusto di contemplare l'infinito, ed intanto si immagina il giorno in cui il nostro programmuccio girera' su tutti i PC del pianeta con schiere di utenti felici e riconoscenti del nostro operato.<br />Ma la realta' dei fatti e' ben diversa: nella stragrande maggioranza dei casi il progetto parte a razzo e si scrivono cento, duecento, mille righe di codice in pochi giorni, si ottiene una funzionalita' che vagamente somiglia a quello che avevamo in mente in principio, dopodiche' l'attenzione viene sottratta da qualche nuova idea o da una urgenza personale o professionale, oppure l'entusiasmo scema per un decadimento nella fiducia nella vision originaria o tentando di far fronte alle noiose sessioni di debugging che inevitabilmente accompagnano ogni cviclo di sviluppo. A quel punto, il progettuccio resta nella migliore delle ipotesi un repository abbandonato sul web (tanto quanto, qualcuno potra' prima o poi trovarlo e far qualcosa con quel codice, fosse anche solo prenderlo come spunto), nella peggiore viene totalmente perso.<br />Di mio, ho portato all'esasperazione questa malsana (ma neanche poi tanto...) pratica: avendo una discreta quantita' di tempo libero ho avviato un numero impossibile di piccoli e grandi lavori, dei genere piu' disparati, con ogni grado di pretenziosita', e che si trovano ad oggi ad eterogenei livelli di sviluppo. E per arrestare l'inarrestabile fenomeno dell'abbandono a strascico, ho ben pensato di... avviare un nuovo progetto.<br /><a href="http://maintainr.barberaware.org/">Maintainr</a> si tratta di una applicazioncina molto stupida, il cui scopo e' quello di gestire in un posto solo tutti gli appunti e gli aspetti di promozione del proprio sforzo operativo. Ogni idea ha una sua propria todolist, un proprio pannellino con cui inviare notifiche su <a href="http://identi.ca/">identi.ca</a>, e nel prossimo futuro qualche opzione per interfacciarsi con <a href="http://gtk-apps.org/">gtk-apps.org</a> ed esporre il proprio software ed i relativi aggiornamenti presso una community decentemente vasta.<br />Tra tutte, la funzione che preferisco e che ho preteso sin dall'inizio e' lo scheduling semi-automatico: pigiando un tastino posto in alto nella finestra l'ordine dei progetti della lista cambia, spostando in cima il piu' consigliato secondo una banalissima euristica basata sulle priorita' assegnabili ad ognuno di essi, al fine di ciclare periodicamente e dedicare a tutti un poco del proprio tempo per non lasciarne nessuno indietro. Per quanto apparentemente sciocca, quest'ultima funzione e' piu' utile di quanto si possa immaginare: come da me gia' sperimentato (usando <a href="http://zim-wiki.org/">Zim</a>, programma il cui impiego mi ha ispirato Maintainr) il fatto di far decantare periodicamente il proprio codice, magari quando pare di essere giunti ad un punto morto o si sbatte la testa per piu' tempo di quanto tollerabile su un bug enigmatico, permette di tornarci poi con maggiore ardore in un momento successivo, in quanto nel mezzo c'e' stato un periodo di "riposo" (ad esempio l'impegno su qualche altro componente piu' soddisfacente) e nel frattempo abbiamo inconsciamente gia' analizzato e risolto la situazione. Questo aiuta a non perdere il coinvolgimento nei confronti di un particolare opera, e dunque di perseguire l'obiettivo per un periodo piu' lungo (sebbene intervallato da altro).<br />La disponibilita' di strumenti "social" all'interno dell'applicazione mette in luce l'aspetto propagandistico della stessa: per far vivere e prosperare un progetto e' necessario avere un pubblico, anche solo per auspicare di ricevere quel feedback sintomo di interesse degli altri che e' vitale per mantenere viva la passione del developer, e tanto vale sfruttare a proprio vantaggio gli infiniti canali di condivisione messi a disposizione oggigiorno dal "Web 2.0". Dato un modesto sforzo iniziale (registrare appunto il progetto su gtk-apps.org, un account dedicato su identi.ca, un <a href="http://www.google.com/alerts/">alert Google</a>, e nel futuro magari una pagina <a href="http://facebook.com/">Facebook</a> e quant'altro), scopo di Maintainr e' riuscire a tenere aggiornato il resto del mondo sugli sviluppi interni dedicando il minimo tempo possibile a tale occupazione.<br />Una estremamente limitata <a href="http://barberaware.org/frs/shownotes.php?release_id=45">release 0.1</a> e' stata <a href="http://barberaware.org/forum/forum.php?forum_id=184">rilasciata</a> l'altro giorno, e si tratta piu' che altro di un primo abbozzo ampiamente migliorabile. Ad ogni modo io stesso ho iniziato ad usare l'applicazione (che di fatto ho costruito basandomi sulle mie proprie necessita'), e sebbene il periodo di prova sia ad ora troppo bene confermo di trovarmici meglio che non con un tool general purpose per gli appunti. Ma ovviamente io sono di parte.<br />Vediamo se con uno strumento tagliato su misura mi aiuta ad essere un miglior maintainer...Roberto -MadBob- Guidohttp://www.blogger.com/profile/16458797013282594564noreply@blogger.com0tag:blogger.com,1999:blog-420466040951386274.post-25289288198482016372010-06-21T14:02:00.004+02:002010-06-21T14:09:05.625+02:00Autocompletamento poco "Auto"In <a href="http://www.gtk.org/">GTK</a>, cosiccome suppongo in ogni altro toolkit grafico sia desktop che web, si trova <a href="http://library.gnome.org/devel/gtk/2.90/GtkEntryCompletion.html">GtkEntryCompletion</a>, comoda utility per gestire l'autocompletamento delle caselle di testo. Si popola una struttura dati con gli elementi validi (pescandoli da una history, da un database o quel che e'), e quando l'utente inizia a scrivere qualcosa che combacia almeno parzialmente con uno o piu' di suddetti elementi appare la casellina a tendina da cui si puo' selezionare il testo gia' completato. Il comportamento classico della barra degli indirizzi di un browser, insomma.<br />Finche' ci si accontenta di far semplicemente selezionare una voce e basta va (quasi) tutto bene, un po' piu' complicato e' far triggerare dall'atto della selezione una qualche azione (nel caso specifico che mi sono trovato ad affrontare: popolare un form con i dettagli relativi al nome scelto). In quanto il widget non copre molti casi d'uso che classicamente si osservano con utenti reali.<br />Stando a quanto ho visto nella mia esperienza, non sono cosi' tante le persone che sfruttano davvero l'autocompletamento; la situazione classica e' appunto la barra del browser, che sicuramente e' il caso piu' facilmente osservabile in natura. Non conto piu' le volte in cui ho visto utenti scrivere per intero i loro URL, ignorando completamente la casella di selezione del completamento oppure, peggio ancora, vedendola ed usandola come riferimento per copiare a mano la stringa intera. Vuoi per ignoranza sul meccanismo inteso per la corretta fruizione di questo componente grafico, vuoi perche' molti scrivono guardando la tastiera e dunque magari non notano cosa viene proposto sul monitor, vuoi per una qualche abitudine vestigiale a non farsi aiutare dal PC, vuoi per anacronistiche velleita' amanuensi, sperare di triggerare una selezione solo ed esclusivamente con la procedura prevista (inserimento del testo, individuazione della voce completata, attivazione per mezzo di click o di selezione con le freccette direzionali e del tasto Return) e' sintomo di eccessivo ottimismo.<br />In questo contesto, almeno due situazioni possono capitare:<br /><ul><li>l'utente fa quello che ci si aspetta che faccia</li><li>l'utente scrive a mano la voce gia' completata, ignorando il completamento automatico, e pigia Return (universalmente inteso come "terminatore di input"), oppure Tab, oppure cliccando da qualche altra parte alla fine<br /></li></ul>Per provvedere a gestire in modo decoroso il secondo caso, occorre veramente fare i salti mortali: registrare delle callback sugli eventi di <a href="http://library.gnome.org/devel/gtk/2.90/GtkWidget.html#GtkWidget-focus-out-event">focus-out</a> e <a href="http://library.gnome.org/devel/gtk/2.90/GtkWidget.html#GtkWidget-key-press-event">key-press</a> (quest'ultimo per intercettare il Return), in cui compiere a mano la ricerca del testo immesso nella casella di testo nella struttura dati che contiene i valori buoni, e se opportuno comportarsi come se l'autocompletamento fosse stato attivato come voluto. Spiegarlo a parole e' molto piu' semplice che non implementarlo davvero.<br />Se cosi' non si facesse, il rischio sarebbe quello di avere un nome perfettamente valido nella casella di testo ma non tutti gli altri buoni altrove. Con le conseguenze piu' nefaste: l'utente riprova piu' volte a riscrivere la stringa, non comprendendo cosa ha fatto di diverso rispetto alle spiegazioni ricevute che mostravano la comodissima e sfavillante attivazione di tutto il resto, oppure l'utente compila a mano i campi che avrebbero dovuto essere riempiti autonomamente, distruggendo la sequenza logica prevista. Nel mio caso: se il form viene popolato quando nessuna voce valida e' selezionata, viene creata una nuova entry nel database; fare un controllo postumo sull'univocita' del nome introdotto sarebbe abbastanza controproducente e frustrante per il povero tapino che nel frattempo si e' riscritto tutto quanto a manina, andando a reperirlo chissa' dove.<br />Abitudini e limitazioni dell'utenza sono un grande, grandissimo grattacapo, cui purtroppo ci si deve confrontare nel momento in cui si voglia realizzare una interfaccia usabile senza eccessivo sforzo dalla maggior parte delle persone. Una perdita di tempo di due ore da parte mia, che ho dovuto individuare e risolvere il problema dell'attivazione dell'autocompletamento con metodi del resto opinabili, consegue ad un piccolo risparmio di patemi moltiplicato per il numero di tutti i futuri utilizzatori del programma.Roberto -MadBob- Guidohttp://www.blogger.com/profile/16458797013282594564noreply@blogger.com0tag:blogger.com,1999:blog-420466040951386274.post-74464353737910659452010-06-06T19:44:00.002+02:002010-06-06T19:52:10.686+02:00Notifiche RelazionaliGia' diverso tempo addietro ebbi una mezza idea per una funzionalita' da implementare (mai, come al solito) all'interno di Lobotomy: una gestione relazionale delle notifiche che occasionalmente si presentano sui nostri monitor. Ne ho scritto in questi giorni <a href="http://lobotomy-project.org/wiki/Notifications">una pagina</a> sul <a href="http://lobotomy-project.org/">wiki del progetto</a>, ma l'originale l'ho steso in italiano e dunque tanto vale pubblicare anche questo sul <a href="http://lobotomy-dev.blogspot.com/">blog</a> ad uso e consumo di chi non comprende l'inglese maccaronico o vuole ridere della mia pessima traslazione comparando le due versioni.<br /><br />Le notifiche sono croce e delizia dell'esperienza sul desktop: spesso disturbano ed interrompono il lavoro, ma al contempo ci permettono di intervenire laddove necessario in un dato momento. Un caso di "notifica inevitabile" e' quella che ci avverte in merito ad una nuova sessione di chat aperta da qualcuno dei nostri contatti: essendo questo un mezzo di comunicazione real-time l'attenzione dell'utente e' immediatamente richiesta per mezzo di icone lampeggianti, finestre che appaiono in popup, suoni e quant'altro. Un esempio di "notifica non inevitabile ma consigliata" e' quella che ci avverte dell'arrivo di nuove e-mail: se ne potrebbe fare a meno, non fosse che senza un meccanismo che ci informa in tal senso saremmo portati a consultare compulsivamente la nostra casella di posta per fare a mano quello che il computer farebbe automaticamente.<br />Assunto dunque che non ci si puo' esimere dalla gestione di notifiche attive nei confronti di particolari eventi che accadono nel nostro ambiente operativo virtuale, si possono sfruttare le potenzialita' di un desktop relazionale per meglio raffinare le attivita' per cui vogliamo essere eventualmente disturbati, ponendo un argine al numero di notifiche inutili e non desiderate.<br />Lobotomy e' pensato dall'inizio per visualizzare insiemi arbitrari di dati, selezionati con query piu' o meno complesse. Non sarebbe difficile predisporre un sistema di notifiche che si attivino nel momento in cui il result set descritto dalla query cambi, o per la creazione di un nuovo elemento che ricada all'interno della definizione o per la modifica di un elemento esistente.<br />Le implicazioni sono ben delineate con un semplice esempio: se in un dato momento sto aspettando una mail da parte di un data persona posso selezionare tutte le mail finora ricevute dal contatto ed abilitare la notifica, con un meccanismo standard e sempre uguale per tutti (ad esempio: premendo un pulsante funzione). In tal modo il relativo segnale visivo/sonoro/animato verra' presentato non quando una qualsiasi nuova mail viene ricevuta, facendomi accorrere al client un numero eccessivo di volte solo per scoprire che qualcuno vuol vendermi del Viagra, ma se e solo se arriva una mail che abbia tutti i requisiti che le mail precedentemente visualizzate avevano in comune (in linea di massima, il contatto).<br />Altri esempi validi possono essere l'arrivo di una richiesta di chat da parte di un determinato insieme di contatti, o la creazione di un nuovo documento all'interno di uno specifico device condiviso, o l'aggiornamento di un preciso feed RSS.<br />In questo scenario la notifica resterebbe attiva fintantoche' non sia disabilitata esplicitamente, e l'accesso ad un preciso insieme di icone permetterebbe di accedere ai result set monitorati sul momento.Roberto -MadBob- Guidohttp://www.blogger.com/profile/16458797013282594564noreply@blogger.com0tag:blogger.com,1999:blog-420466040951386274.post-6137314934686452592010-05-31T01:57:00.006+02:002010-06-01T03:33:54.683+02:00Belli e BruttiPoco tempo addietro ho avuto la pessima idea di iniziare a seguire per mezzo dell'<a href="http://feeds.delicious.com/v2/rss/subscriptions/m4db0b?count=15">apposito feed</a> RSS le <a href="http://delicious.com/subscriptions/m4db0b">mie sottoscrizioni</a> su <a href="http://delicious.com/">del.icio.us</a>, per vedere cosa gli altri reputano interessante nei contesti da me scelti. L'idea e' "pessima" perche' provoca una quantita' immensa di traffico (almeno 200 items al giorno, che solo in minima parte posso ovviamente consultare), il feed non viene epurato dai doppioni e dunque spesso e volentieri la consultazione risulta complicata dalla necessita' di scartare a mente i links che sono gia' stati visitati, e quel che e' peggio un singolo tag (<a href="http://delicious.com/tag/UI">"UI"</a>) su tre ("UI", <a href="http://delicious.com/tag/HCI">"HCI"</a> e <a href="http://delicious.com/tag/filesystem">"filesystem"</a>) ha il monopolio dello stream.<br />Dati 100 elementi in totale, 90 sono taggati come "UI". Di questi, 85 parlano di design espressamente rivolto al web. Un quarto del totale (25) sono riferimenti a plugins ed estensioni per <a href="http://jquery.com/">jQuery</a>. Circa 10 sono elenchi di soluzioni grafiche da cui prendere spunto ed ispirazione, e molte sono anche le liste in stile "i 20 migliori stili CSS" o "i 10 migliori set di icone" (buona parte di queste enumerazioni arrivano da <a href="http://www.smashingmagazine.com/">Smashing Magazine</a>). Un'altra fetta importante e' rappresentata da tools e suggerimenti per fare mockups e wireframes, e non faccio mistero di aver iniziato io stesso a <a href="http://lobotomy-dev.blogspot.com/2010/05/pennello-alla-mano.html">prototipare</a> le mie interfacce leggendo piu' e piu' volte al giorno questi temi nel mio feed reader.<br />Par proprio che ad oggi l'unico contesto apprezzato dai designer sia il web. Un po' per moda ("cloud computing" e' a tutt'ora una buzzword estremamente diffusa ed apprezzata), ma anche (e soprattutto?) perche' HTML, CSS e JavaScript forniscono strumenti immensamente piu' flessibili in termini di formattazione e decorazione che non i classici widgets per lo sviluppo sul desktop, piattaforma in cui l'evoluzione dell'interfaccia utente si e' fermata poco dopo la sua stessa nascita. E laddove si possono facilmente aggiungere animazioni, sfumature, sfondi e inserti di ogni genere, li' trova ristoro il creativo sinora relegato a pulsanti tutti uguali tra loro da incasellare sullo schermo.<br />Ma la situazione attuale implica uno stallo.<br />Da una parte, appunto, i migliori designer si lanciano gioiosi sul web, plasmabile a proprio piacimento, bistrattando il classico desktop, e ben pochi si curano piu' dell'aspetto delle applicazioni native, lasciate a marcire in previsione di una imminente (?!) decentralizzazione di ogni attivita' digitale sull'Internet. Dall'altra, nessuno e' realmente pronto per questa migrazione di massa: i produttori di software perche' molti fondamenti tecnici per diversi generi di implementazioni mancano (ad esempio: solo adesso <a href="http://0xfe.blogspot.com/2010/04/desktop-notifications-with-webkit.html">qualcuno</a> inizia a pensare alle notifiche), e gli utenti per l'<a href="http://lobotomy-dev.blogspot.com/2010/04/vintage-computing.html">innata resistenza</a> a cambiamenti radicali. Risultato: il web e' bellissimo ma vuoto di funzioni, il desktop fa tutto ma e' brutto come un debito.<br />Uscire da questo imbarazzo e' impossibile, se non attendendo pazientemente una risoluzione portata o dall'implementazione degli <a href="http://www.w3.org/2009/dap/">standard mancanti</a> per una piena funzionalita' della cloud (per sfruttare <a href="http://www.w3.org/TR/2010/WD-capture-api-20100401/">webcam e microfono</a> via HTML5, ad esempio) o viceversa da una esplosione delle tecnologie grafiche per il desktop (come ad esempio il <a href="http://clutter-project.org/">Clutter Toolkit</a> o la gestione avanzata di <a href="http://thesmithfam.org/blog/2009/09/10/qt-stylesheets-tutorial/">CSS</a> in <a href="http://qt.nokia.com/products/">QT</a>, giusto per menzionare quanto disponibile almeno su Linux e che suppongo abbiano analoghi su altri sistemi). La prima opzione e' piu' probabile, considerando gli ampi sforzi che da ogni direzione si muovono verso la Rete, ma non pongo limiti alla provvidenza.<br />Quando questo accadra', nessuno lo sa.Roberto -MadBob- Guidohttp://www.blogger.com/profile/16458797013282594564noreply@blogger.com1tag:blogger.com,1999:blog-420466040951386274.post-67987328034251798342010-05-24T23:34:00.008+02:002010-05-26T22:06:36.713+02:00Pennello alla ManoLo confesso, anche se chi mi conosce come programmatore gia' lo sa: io rientro in quella (nutrita) categoria di developers che dedicano pochissimo tempo alla progettazione ed ogni volta che iniziano un nuovo software o ne modificano un'altro pesantemente aprono l'editor di testo ancor prima di avere ben chiaro cosa fare. L'unico passo intermedio tra la decisione di fare qualcosa ed iniziare a farla sta nella scelta del nome: ogni progetto che si rispetti deve avere un nome!<br />So perfettamente che si tratta di una pratica malsana, e piu' e piu' volte ne ho pagato le conseguenze, ma d'altro canto sono convinto che l'eccessivo grado di "ingegnerizzazione" oggi in uso nel mondo dello sviluppo sia ugualmente <a href="http://lobotomy-dev.blogspot.com/2009/12/ingenuita-ingegnerizzata.html">dannoso</a>: una dettagliata pianificazione trasmette un senso di eccessiva sicurezza, e quando le cose sono troppo ben incastrate tra loro si rischia di non avere spazio sufficiente per aggiungere quelle correzioni e quelle modifiche che, nel mondo reale, accadono sempre e comunque in qualsiasi circostanza.<br />Detto cio', nell'ultimo periodo ho iniziato quantomeno a progettare le interfacce delle mie applicazioni. Direi che e' gia' un passo avanti.<br />Ho sempre considerato il wireframing alla stregua di qualsiasi altra forma di progettazione, ma mi sono dovuto ricredere: laddove una architettura software e' oggettivamente qualcosa di completamente fumoso e dunque imperfetto finche' non la si traspone in qualcosa in esecuzione sullo stack (per poi immancabilmente fallire perche' non era stata presa in considerazione una data situazione), una interfaccia grafica e' qualcosa di concreto, in quanto anche se cliccando sul tasto non succede nulla il tasto e' comunque li' invece di essere da un'altra parte, occupa un determinato spazio e riporta una data etichetta o icona invece che un'altra.<br />Il primo esperimento quasi serio l'ho fatto usando <a href="http://mockflow.com/">MockFlow</a>, strumento online (in Flash) per mettere insieme mockups di pagine destinate al web: la versione gratuita ha una limitazione sul numero di progetti e pagine che si possono creare, ma poiche' quelle poche pagine hanno altezza infinita si possono aggregare insieme piu' contenuti e con un poco di pazienza il paletto viene facilmente aggirato. Il secondo tentativo, rivolto ad un programma desktop (di cui scrivero' dettagliatamente in un'altra occasione), l'ho fatto con <a href="http://www.gnomefiles.org/app.php/Gazpacho">Gazpacho</a>: progetto ad oggi leggermente defunto, nel concetto simile a <a href="http://glade.gnome.org/">Glade</a> (che dovro' a sua volta provare, essendo pure aggiornato alle ultime evoluzioni di <a href="http://www.gtk.org/">GTK+</a>), funge da editor completo "a la Visual Studio" ma essendo io un programmatore vecchio stile lo ho usato solo per farmi una idea di dove posizionare i widgets che sono andato poi ad implementare a mano.<br />Entrambe le esperienze si sono rivelate inaspettatamente produttive: disegnare la propria interfaccia prima di riportarla sul codice permette di avere subito una idea di cosa ci si trovera' dinnanzi e, meglio ancora, di cosa ci si vorrebbe trovare; vengono subito identificate e corrette falle estetiche e funzionali nel design, si possono sopprimere o ridefinire aggregati di elementi che nella realta' appaiono molto peggio di quanto ci si era immaginati, e ci si capacita in fretta se nel concetto originale e puramente astratto mancava un qualche dettaglio che, ai fatti, sarebbe determinante ed indispensabile. Tutto questo con un costo estremamente basso, in quanto in un paio d'ore di cliccate si ottengono risultati piu' che sufficienti per condurre una valutazione ed eventualmente ridefinire la proprio linea: tutto tempo che altrimenti verrebbe riccamente sprecato per implementare, compilare, eseguire, cancellare e re-implementare.<br />Gli strumenti per prototipare e costruire bozze realistiche non mancano, anzi ce n'e' una abbondanza, e val proprio la pena almeno di provarli.Roberto -MadBob- Guidohttp://www.blogger.com/profile/16458797013282594564noreply@blogger.com0tag:blogger.com,1999:blog-420466040951386274.post-88603775302919248692010-05-08T14:53:00.003+02:002010-05-08T16:11:28.764+02:00La Mia RadiosvegliaIo, come credo una buona maggioranza della popolazione dei paesi industrializzati, ho un pessimo rapporto con le sveglie. Ne ho gia' cambiate diverse nella mia vita, ma il problema principale si e' sempre riproposto: dopo un po' di tempo l'udito e tutta la parte cognitiva di riferimento diventa assuefatta, ed il suono ripetitivo e costante o non sortisce effetto alcuno (quando mi sveglio trovo l'interruttore di attivazione ancora sollevato, ovvero l'aggeggio ha suonato indisturbato per almeno 40 minuti per poi cedere nel suo tentativo e tornare al silenzio) oppure stuzzica la corteccia quel tanto che basta per far compiere al mio corpo il gesto meccanico ed automatico di spegnimento senza pero' riuscire a penetrare la nebbia dell'incoscienza onirica. In entrambi i casi, mi sveglio sempre troppo tardi.<br />Per tali motivi, qualche tempo addietro mi sono procurato una radiosveglia.<br />La radiosveglia elimina perfettamente il problema dell'abitudine: poiche' ogni giorno alla stessa ora viene trasmessa una canzone diversa, o gli speaker dicono cose diverse con diversi toni, la trappola psicologica permette di tentare il <a href="http://it.wikipedia.org/wiki/Conscio">conscio</a> e di farlo uscire dalla sua tana notturna.<br />O almeno in linea teorica: qualche volta, anche codesto metodo fa cilecca.<br />Ho meditato sulle motivazioni di tale fallimento, imputandolo dapprima al volume: se troppo basso, il suono risulta inintelligibile e dunque non sufficiente a stimolare la ripresa di coscienza, in modo del tutto analogo al trillo ripetitivo e monotono della sveglia classica; se troppo alto, si rischia di indurre una reazione di shock cui si risponde con un riflesso incondizionato di spegnimento dell'apparecchio. Ma questa tesi non reggeva: in fin dei conti non ho un udito cosi' fine da percepire una differenza di quei pochi decibel di scarto impostabili con l'apposita rotellina, una volta trovato il compromesso giusto non c'e' piu' ragione per cui non debba funzionare.<br />Ma ieri sera, riponendo l'infernale aggeggio sul comodino, ho forse inteso la reale causa del problema.<br />Vanno fatte due premesse. La prima e' che cambio relativamente spesso l'orario in cui la sveglia deve operare, in quanto qualche volta devo prendere il treno presto, altre volte posso stare nel letto fino alla tarda mattinata, ed altre volte ancora vado a dormire alle prime luci dell'alba e solo per pudore imposto la sveglia al primo pomeriggio. La seconda e' che la suddetta radiosveglia e' analogica, senza <a href="http://en.wikipedia.org/wiki/Auto-Tune">auto-tune</a>, e per selezionare la frequenza desiderata c'e' una manopolina abbastanza sensibile, che richiede una discreta precisione per riuscire a trovare l'angolazione per cui si sente bene una stazione, e che facilmente perde la taratura.<br />Detto cio', cosa accade? Che quando ripongo l'aggeggio dopo averlo innescato la mano va a cascare proprio sulla rotellina della frequenza, posta sul lato opposto rispetto a me e dunque percepibile solo al tatto (potete immaginare quanto io mi curi delle sensazioni tattili quando mi corico a seguito di una sessione di programmazione...), pertanto e' facile che si perda l'impostazione giusta e, giunta l'ora di suonare, dall'altoparlante esce poco piu' che <a href="http://it.wikipedia.org/wiki/Rumore_bianco">rumore bianco</a>. Il quale, <a href="http://www.articlesbase.com/mental-health-articles/how-white-noise-can-help-improve-concentration-and-relaxation-1569670.html">notoriamente</a>, invece che aiutare a destarsi facilita il rilassamento e non incide sul conscio, lasciandolo placidamente sonnecchiare sul cuscino.<br />Gia' intuii il fenomeno in passato, tant'e' che quasi senza badarci troppo di quando in quando ho sempre provveduto a controllare e reimpostare le due manopole (volume e frequenza), ma appunto solo ieri sono stato folgorato sulla via di Damasco giungendo alla conclusione qui sopra esposta. Spero che tale consapevolezza mi aiuti a svegliarmi ad orari un poco piu' decenti.<br />E la prossima radio che acquisto dovra' irrevocabilmente avere l'auto-tune.Roberto -MadBob- Guidohttp://www.blogger.com/profile/16458797013282594564noreply@blogger.com0