Il lavoro alacre sulla guida settimanale di Rai 4 sta dando i suoi primi frutti. Tra ieri e oggi (è un caso la concomitanza con lo switch-over laziale) sono riuscito a ripristinare la parte vitale del servizio. Nei prossimi giorni chiuderò il cerchio riattivando completamente la vista a 7 giorni.
I dati di palinsesto che utilizzo arrivano dirattamente da RaiSat (che ringrazio) e sono ultra precisi. Il sistema che ho sviluppato immagazzina le informazioni aggiornate e, di tanto in tanto, applica le eventuali variazioni sulla programmazione.
Ovviamente, se ovvio non fosse, per me si tratta di un passatempo e di un’attività perfettamente indipendente; è — come scrissi — il tentativo di rendere accessibili le informazioni dei palinsesti delle vecchie e nuove reti televisive che popolano e popoleranno il digitale terrestre italiano.
?Io mi sono guardato questa città, con le sue ville, i suoi parchi e l?ampio circondario delle sue colline e dei suoi declivi, tutti abitati, per un bel po?; debbo infine dire che vedo volti di stirpi passate, che questa regione è disseminata di immagini di uomini arditi e sicuri di sé. Hanno vissuto e voluto continuare a vivere; me lo dicono con le loro case, costruite e abbellite per secoli, e non per l?ora fugace; amavano la vita, per quanto spesso potessero essere malvagi con sé stessi. Mi pare di vedere l?uomo che costruisce, che pone il suo sguardo su tutti gli edifici attorno a lui, vicini e lontani, e anche sulla città, sul mare e sulle creste montane, esercitando con questo sguardo violenza e conquista [?]. Tutta la regione trabocca di questo magnifico, insaziabile egoismo, di voglia di possedere e di conquistare; e come questi uomini non conoscevano limiti nella lontananza, e nella loro sete di cose nuove stabilirono un nuovo mondo accanto a quello vecchio, così anche in patria ce n?era sempre uno che si ribellava all?altro ed escogitava un nuovo modo per esprimere la sua superiorità e interporre tra sé e il suo vicino la propria personale infinitezza [?]. Nel nord a chi osservi l?architettura delle città si impongono la legge e un desiderio generalizzato di legalità e di obbedienza: vi si indovina quella interiore tendenza a conformarsi e a equipararsi che doveva prevalere nell?anima di tutti i costruttori. Qui invece, dietro a ogni angolo, trovi una persona a sé, che conosce il mare, l?avventura e l?Oriente, un uomo poco incline alla legge e al vicino, che gli giungono noiosi e misura con sguardo invidioso tutto ciò che è antico e già fondato: egli vorrebbe, con uno scaltro prodigio della sua fantasia, rifondare tutto ciò almeno nel pensiero, mettervi la sua mano e la sua sensibilità - fosse anche per un istante di un soleggiato pomeriggio in cui la sua anima malinconica e insaziabile avverte, per una volta, sazietà, e al suo occhio possono presentarsi soltanto cose proprie e non più estranee.?
? Friedrich Wilhelm Nietzsche, La gaia scienza
Breve post che sgorga più o meno come sgorgano i Blue Öyster* Cult in sottofondo.
meet the parser
Questa mattina grazie alle bischerate di Y Combinator ho trovato un parser monadico (per chi vede monadi dentro a JavaScript — il passo dopo è vederle dappertutto, ma lasciamo stare) p4js che ha fatto emergere ricordi legati alle buone parti client-side. Così l’ho preso, modificato (aggiungendo un paio di cosette basilari) e inserito come nucleo di un pre-prototipo di interfaccia per il sistema di inserimento di date molto umano che sto sviluppando (vedi link sotto a “Dimmi quando…”).
Potete provarlo qui…
kill the parser
update: Dati i problemi riscontrati con alcuni browser, e un’innata curiosità, ho rimpiazzato il Parser con un effettivo parser potenziale (perché in modo chiaro afferma di non essere un “vero” parser e di funzionare solo per culo merito di un trucco — dice animisticamente così, che ci posso fare?!) implementato from scratch, (vagamente) adatto allo scopo.
testato in Firefox 2 / 3, IE 7 / 8, Opera 9, Safari 3, Chrome
Il mio tempo libero non ha lo stesso potere espressivo dell’attuale attività dei Mozilla Labs (il mio sguardo, qui, si rivolge al progetto Ubiquity), chiedo venia. A proposito di poteri, quello di p4js usato “bene” non è nemmeno paragonabile a quello dell’analizzatore sintattico di Dimmi quando….
enjoy your life
La traccia è finita. Il post (la) segue.
Questi, di solito, sono i momenti prima di un inizio…
Nota: ironia a parte trovo che il Parser che ho scartato — per farmi del male — rappresenti un mini-progetto interessante.
“Le parole sono per i pensieri quel che è l’oro per i diamanti: necessario per metterli in opera, ma ce ne vuol poco.”
— Voltaire (François-Marie Arouet), Le sottisier
Still, a man hears what he wants to hear and disregards the rest.
— Simon & Garfunkel, The Boxer
Evito excursus sull’imminente rilascio di Wolfram|Alpha, sull’esperimento Watson di IBM che presto si cimenterà con i “trivia” di Jeopardy! (il punto esclamantivo non è mio, giuro!) o sulle future semantiche latenti di Mountain View. Vi propongo invece un semplice prototipo di interfaccia naturale — sempre in tema di cose cool.
Spinto dal desiderio di semplicità e dalla necessità di avere una vista ultra-compatta dei programmi delle principali reti televisive digitali terrestri italiane ho cominciato a fare qualche esperimento migliorando la pagina con il palinsesto televisivo della serata.
Le emittenti aggregate sono: le 4 reti Rai (la quarta è Rai 4), le 5 reti Mediaset (con Iris e Boing), LA7, MTV e All Music. Le informazioni vengono aggiornate in modo automatico (/semi-automatico) ogni mattina. I titoli dei film sono grassettati.
Sia l’aspetto della pagina che le tecniche per elaborare i contenuti sono in evoluzione.
aggiornamento 14 maggio: aggiunto il palinsesto serale di Boing
aggiornamento 8 giugno: il nuovo obiettivo è “salvare” dall’oblio (i dati de) il palinsesto di Rai 4
aggiornamento 8 luglio: revisione dei moduli di Boing e Iris
Ho aggiornato il semplice esempio di search, un’applicazione in python che si appoggia alle API di BOSS, includendo una delle nuove featurepresentate ieri dai tecnici di Yahoo!.
Nei risultati — vicino al titolo delle entry — troverete il corrispondente numero di save ottenuto in Delicious. Nulla di eclatante. Se vi va potete provarlo >>>
One Ring to rule them all, One Ring to find them,
One Ring to bring them all and in the darkness bind them
In the Land of Mordor where the Shadows lie.
— J. R. R. Tolkien
Per farlo (dimostrare, chiudere o completare, a vostra scelta) comincerò col parlarvi di due delle cose che riescono sempre a stupirmi quando — circa ogni giorno — mi immergo nel mondo legato allo sviluppo di applicazioni web:
la quantità di tempo che viene speso nell’implementazione di algoritmi di validazione dell’input
gli sprechi e le inconsistenze che emergono dal doverli implementare sia lato server che lato client
Spiego meglio la seconda. La user experience è — giustamente — considerata sacra, per questo è d’obbligo fornire un feedback immediato agli utenti che stanno inserendo dati potenzialmente non corretti. Pensate alle form di registrazione dei moderni social cosi.
Questo porta ad avere la stessa logica espressa, per esempio, in JavaScript (client side) e in PHP (server side). A volte una parte del lavoro implementativo viene riutilizzata: il riapplicare le stesse espressioni regolari, per esempio. Molto spesso il lavoro si sdoppia e raddoppia.
Come proof of concept di “nuove” possibilità di riuso e come esempio di utilizzo smart (spero) della nuova incarnazione di App Engine, ho creato un semplicissimo validatore di codice fiscale.
La peculiarità di questa applicazione sta proprio nel suo essere 100% DRY-compliant. Il codice di validazione (una funzione JavaScript che avevo scaricato un po’ di tempo fa — accetto hint riguardo ai credit) viene usato si lato client (dai velocissimi JavaScript engine dei vostri browser) che lato server (da java su App Engine via Rhino).
Ci pensavo. Si è parlato parecchio di Groovy e di JRuby, ma una delle prime — e delle più semplici — implicazioni che scaturiscono dall’introduzione del Java runtime in App Engine è la possibilità di eseguire codice JavaScript 1.7** lato server (sui server di Google!) sfruttando l’ottimo Rhino.
** per intenderci JavaScript 1.7 è la versione introdotta in Firefox 2
Ricordatevi che javax.script.* (vedi JSR 223) è vostro amico.
Adobe ha deciso di offrire una licenza gratuita di Flex Builder 3 Professional — uno dei suoi prodotti di punta — a tutti gli sviluppatori attualmente disoccupati, con l’impegno a non usare questo potente strumento con finalità commerciali (trovate tutti i dettagli nella pagina che riporta i termini). L’obiettivo dichiarato è didascalico; la cosa in sé non troppo sorprendente.
Sebbene i lolcats siano ancora notevolmente in voga l’idea di provare il supporto per le estensioni presente nelle ultime release di Chrome (beta e dev) rimpiazzando loghi di Google con rotondi felini accattivanti non mi garba più di tanto.
Per questo ho deciso — con semplice tinkering — di mettere insieme un esempio di estensione un po’ più utile. Dopo aver scartato alcune idee troppo complesse credo di aver trovato quello che fa al caso nostro. Proverò a trasformare AdSweep in una vera e propria estensione del browser di Mountain View, in modo tale da creare un “perfetto” surrogato di Adblock Plus.
Il procedimento da seguire per costruirla è davvero semplice.
Innanzitutto dovete mettere in Sleep il vostro Mac, o in standby la vostra (distro GNU/Linux) Fedora, o la vostra Ubuntu, perché questo interessantissimo browser — per il momento — gira nativamente solo su Windows.
Create una nuova cartella da qualche parte; come nel Chrome Extension HOWTO assumiamo che abbiate creato c:myextension, ma è solo un esempio perché potete davvero posizionarla in ogniddove nel vostro filesystem.
In c:myextension create un nuovo file di testo chiamato manifest.json e riempitelo con le info seguenti:
Una volta salvato sarete a metà dell’opera. Se il manifest vi sembra criptico vi consiglio di leggere attentamente l’HOWTO linkato sopra insieme al resto della documentazione sparsa per dev.chromium.org. La parte più interessante in questo caso è la direttiva matches che fa si che il codice JavaScript presente in AdSweep.js venga eseguito in ogni pagina.
Non resta che scaricare la release più recente di AdSweep e da quell’archivio estrarre AdSweep.js e copiarlo in c:myextension. Il risultato ottenuto apparirà circa così:
Okay, ora dobbiamo installare la versione giusta di Chrome.
Per avere il supporto per le estensioni, come dicevo, abbiamo bisogno di una versione recente di questo browser. Le istruzioni per ottenerla si trovano in getting-involved/dev-channel; in realtà la procedura è semplicissima, basta 1) installare Google Chrome 2) scaricare, lanciare Google Chrome Channel Changer, e da lì selezionare beta o dev. Il passo successivo è l’aggiornamento di Chrome, per portarlo alla versione 2.0.X.Y (attualmente sto usando una 2.0.170.0).
Una volta fatto ciò ri-avviamo Chrome indicando(gli) la directory in cui è presente l’estensione:
nota: è necessario avere la directory in cui risiede chrome.exe in PATH
Se il browser parte senza lamentarsi tutto dovrebbe essere andato a buon fine.
Possiamo controllare la presenza dell’estensione “visitando”:
chrome-ui://extensions/
Da questo momento buona parte delle pubblictà verranno nascoste (vedi screenshot degli effetti) da AdSweep integrato in Chrome. Come avete visto la procedura per la creazione delle estensioni per questo browser is a piece of cake.
Ammetto di essere spesso scettico nei confronti delle creazioni degli ingegneri di Google (che in genere costruiscono sulla sabbia, come direbbe un uomo molto ricco che non conosco bene), ma questa gemma dei Labs — da incastonare in Gmail — è a dir poco indispensabile.
Non è possibile credere che sia superflua, marginale o, addirittura, futile.
Concepita da Jon Perlow (genio) seguendo un rigido processo di design e sviluppo improntato sul modello eat your own dog foodMail Goggles (è un lui — cambio genere) porrà fine a molti dei nostri quotidiani rimpianti e ci renderà, quasi certamente, persone migliori.
Di post come questo ne vedrete mille, quindi non vi farò perdere tempo descrivendo i casi d’uso (alcolici, romantici e forse anche un po’ emo) che lo hanno forgiato e i complicati meccanismi che lo regolano. Attivatelo; lasciate che la vostra vita cambi grazie ad esso.
Data — come dicevo — l’estrema ridondanza dell’argomento, per decenza eviterò di embeddare lo screenshot in cui al posto di un telematico invio mi viene consigliata una bella dormita.
I settaggi invece sono interessanti. Questi sono i miei…
La data di “completamento” della quinta versione di HTML, che sta nascendo da una sinergia tra il WHATWG (Web Hypertext Application Technology Working Group) e il più popolare W3C (World Wide Web Consortium), è stata indicata — all’incirca — nel lontano 2022. In un ambito in cui la velocità regna sovrana indisturbata, questa scelta può sembrare davvero assurda.
Nel frattempo cosa accadrà?
Una risposta incoraggiante ci viene fornita da James Graham, sul blog del WHATWG:
Quello che davvero conta è quando i browser implementeranno le feature di HTML5. Dato che questo sta già accadendo, non c’è alcuna ragione per allarmarsi. Entro il 2022 ci auguriamo di avere una testsuite [una collezione di test case] e un paio di implementazioni complete, ma quando verrà quel giorno ci attendiamo di poter vedere uscire prodotti con feature di HTML 6.
Chi ha avuto modo di provare una versione recente di WebKit, di Firefox 3.1 (Minefield rules!), di Opera 9 e di IE 8, sa che in queste parole c’è Verità. E’ probabile che in un paio d’anni (magari tre) i principali web browser saranno già in grado di consumare e presentare informazioni descritte in HTML5.
Credo fortemente nel sacro potere dell’ipse-dixit(smo), per questo — pur pensandola in modo simile — preferisco riportare le parole di Neil McAllister (fatal exception) apparse in un post sugli SDK dei due “smartphone” pubblicato sui weblog di InfoWorld: