Se nel 1979 il celebre brano dei Buggles cantava ”Video killed the radio star”, oggi è il caso di riproporlo modificando i soggetti: Video -> Internet/Net TV e radio -> TV/la televisione come la conosciamo! Il vantaggio di poter trasmettere in diretta e applicare tutte le formule della trasmissione non lineare fanno della Net TV un elemento essenziale ed insostituibile nel panorama informativo fornito da Internet. Il fenomeno è già esploso e la sua avanzata è ormai inesorabile. In Italia, come spesso accade, la lentezza e la poca lungimiranza rendono difficile apprezzare quello che sarà il futuro prossimo della TV. Tuttavia se ne parla e questo è già un inizio. Grazie ai Blog oggi è possibile informare più rapidamente rispetto a qualche tempo fa.
Oltre ai contenuti generati dagli utenti il passo successivo è quello di fornire format, la killer application che probabilmente - almeno nel panorama italiano – ancora stenta a decollare. Joost promette la serie C.S.I., dopo aver attivato un canale sul calcio in italiano (gli italiani si prendono solo con il calcio?), ma ciò non basta evidentemente. Ci deve essere un vero e proprio trasferimento dei contenuti attualmente disponibili sui canali tradizionali, DTT compreso, in modo da far decollare la Net TV come merita; telegionali, serial, film (vedi “I pirati di Silicon Valley” – peccato solo in inglese). Le beta dovrebbero terminare a breve, Babelgum compreso, quindi vediamo cosa accaddrà con i motori accesi e usciti fuori dal garage!
Categoria ‘Internet’
Internet killed the TV star
Riflettendo su Joost, Apollo e i Browser
Perchè passare ad Apollo per visualizzare HTML e contenuto dinamico quando un browser già lo permette? Perchè usare Joost per vedere la Net TV quando un browser già lo permette?
Perchè chi produce browser non ha inserito due semplici funzioni al loro interno:
- Finestre Windowless
- P2P Object
Finestre Windowless
Questa semplice caratteristica permetterebbe di sfruttare al meglio la connessione HTTP e di rendere davvero utili i browser. Poter aprire finestre (popup nella pratica) con il solo titolo e senza bordi, casomai in trasparenza, aumenterebbe la produzione di Widget da sfruttare con i normali browser, al pari di quello che fa oggi Apollo. Con uno studio attento sulla sicurezza (in quanto penso sia oggi l’unico motivo di questo limite) si aprirebbero scenari davvero interessanti.
P2P Object
Come tutti sappiamo oramai tutti i browser supportono l’oggetto XMLHttpRequest, che ha dato vita ad una quantità sconfinata delle cosiddette applicazioni Ajax. Questo oggetto, utilizzabile tramite Javascript, è in grado di fornire un canale HTTP – parallelo - gestibile tramite script client, sia per l’ìinvio che per la ricezione dati.
Primo o poi, come anticipato in vari altri Blog, Adobe inserirà un P2P all’interno di Flash. Perchè non fare la stessa cosa nei Browser? Un oggetto di questo tipo unito a funzionalità Windowless permetterebbe di creare applicazioni simil-Joost senza installare nulla sulla propria macchina, garantendo una cross-compatibilità degna di Internet, aumentando quindi anche l’efficienza della produzione (ad oggi Joost è sviluppato per ogni singolo sistema operativo, cosa assai gravosa – sia in termini economici che temporali – infatti le beta si susseguono…).
Insomma finestre con RSS FEED testo, audio e video da posizionare dove vogliamo sul nostro desktop, in vero standard W3C. Apertura si canali TCP direttamente da Javascript, con possibilità di scambio dati sconfinate. Evidentemente la volontà è poca e la “criminalità” è alta; hackers, Spam e Phishing sono in agguato e mosse di questo tipo terrorizzano un po’ tutti…
WordPress: categorie in dropdown
Premetto che stiamo parlando di WordPress 2.0.6. Se cercate di impostare le categorie in modalità “combo” – dropdown – occhio alle indicazioni proposte sul sito di WordPress. Quando si realizza una FORM HTML con un bottone SUBMIT bisogna stare attenti a non impostare il nome del TAG INPUT proprio a “submit”, pena mandare in rovina tutto appena si cerca di submittare la FORM via Javascript.
Sul sito di WordPress viene proposto il seguente codice:
1 2 3 4 5 6 | <li id="categories"> <?php _e('Categories:'); ?> <ul><li> <form action="<?php echo $PHP_SELF ?>" method="get"> <?php dropdown_cats(); ?> <input type="submit" name="submit" value="view" /> </form> </li></ul> </li> |
Notate che il bottone di invio ha l’attributo name impostato a “submit”. Se cercate di esguire una codice Javascript tipo questo:
1 | document.forms.nomeform.submit(); |
L’interprete va in confusione in quanto non distingue il metodo submit() dall’elemento “submit” che è invece un bottone! La soluzione è semplice: chiamate il bottone come vi pare ma non “submit”!
Il codice che ho usato per visualizzare le categorie in dropdown mode io è il seguente:
1 2 3 4 5 | <div id="cmb_months"> <form name="xcats" id="xcats" action="/index.php" method="get"> <?php dropdown_cats(); ?> </form> </div> |
Ho dovuto anche modificare il Kernel di WordPress (cosa che non andrebbe fatta…). Nel file “template-functions-category.php” ho modificato la funzione dropdown_cats() quando prepara il TAG SELECT ho aggiunto:
1 | onchange="document.forms['xcats'].submit();" |
Ecco il pezzo di codice da rintracciare:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | $categories = $wpdb->get_results($query); echo '<select name="cat" class="postform" onchange="document.forms[\'xcats\'].submit();">'."\n"; if ( intval($optionall) == 1 ) { $all = apply_filters('list_cats', $all); echo "\t<option value='0'>Seleziona una Categoria</option>\n"; } if ( intval($optionnone) == 1 ) echo "\t<option value='-1'>".__('None')."</option>\n"; if ( $categories ) { foreach ( $categories as $category ) { $cat_name = apply_filters('list_cats', $category->cat_name, $category); echo "\t<option value=\"".$category->cat_ID."\""; if ( $category->cat_ID == $selected ) echo ' selected="selected"'; echo '>'; echo $cat_name; if ( intval($optioncount) == 1 ) echo ' ('.$category->cat_count.')'; if ( intval($optiondates) == 1 ) echo ' '.$category->lastday.'/'.$category->lastmonth; echo "</option>\n"; } } echo "</select>\n"; |
Una cosa che la funzione non fa è impostare il combo sulla categoria scelta quando viene ricaricata la pagina… appena ho tempo lo guardo meglio.
Come nota a tutto ciò, per esigenze di completezza, sottolineo che bisognava agire con un codice non intrusivo (Unobtrusive) invece di inserire l’onchange direttamente nella costruzione del combo. Inoltre le categorie visualizzate con il combo non sono accessibili per i browser con Javascript disabilitato. Tuttavia questo lo si può risolvere utilizzando il TAG NOSCRIPT nella sidebar e visualizzare le categorie come lista di link – modalità di default di WordPress – aggiustamenti che farò a breve
.
Joost 0.9.2 Bugs Report
Come anticipato da Cdv ecco cosa accade alla nuova release di Joost dopo averla usata un paio di volte:
Quello che posso dire è che il baco si produce dopo aver usato un invito! Infatti, prima di questa operazione, ero riuscito ad usare la versione 0.9.2 un paio di volte!!! Curioso!!! Comunque ho inviato un Bugs Report al team di sviluppo… confidiamo quindi in un imminente nuovo rilascio di una patch.
Joost 0.9.2
Un nuovo aggiornamento, con tanto di scuse da parte del team di Joost, anche loro alle prese con questioni burocratiche (il che fa parte del beta testing):
As you may know – we use SSL technology to protect your privacy. Once
every other year or so these certificates need to be renewed. That
moment came, for the first time in our existence, yesterday.
Unfortunately we did not realize that we had a copy hardwired into the
0.9.1 client by accident.
Con l’occasione sono state migliorate:
We’ve also taken the opportunity to upgrade all our Long Term Storage
machines; they are more than 4 times as efficient now. So if you have
experienced any stuttering in the past – do try again and tell us if our
fixes have worked.
Per la cronaca io ho ancora 2 (due) inviti… chi è interessato mi contatti!
Unobtrusive Flash Objects
L’inserimento di oggetti (in particolare Flash Objects) all’interno delle pagine Web è diventato ultimamente un’attività spesso stressante. In altri Post abbiamo già affrontato l’argomento di come rilevare Flash ed inserirlo nelle pagine in modo appropriato. Dato che abbiamo parlato di tecniche Unobtrusive, vi segnalo due noti script in grado di rilevare (ed eventualmente installare) ed inserire oggetti Flash in una pagina, in modo assai afficiente e poco intrusivo: SWFObject e UFO.
Entrambi gli script offrono in sostanza le stesse caratteristiche e un funzionamento identico. L’approccio è quello che sostituire tramite Javascript un determinato TAG con il contenuto Flash. Come sappiamo questo procedimento elimina il problema dell’attivazione dell’oggetto Flash imposto da Internet Explorer, tuttavia implica che Javascript sia attivato sul target-browser.
Entrambi gli script non fanno uso di librerie esterne, come Prototype.js ad esempio. La differenza più importante tra i due è che SWFObject va chiamato quando il TAG da sostituire è già stato caricato nella pagina, modalità non propriamente Unobtrusive. Ecco uno stralcio di codice che mostra la sequenza di chiamata:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | <div id="flashcontent"> <strong>You need to upgrade your Flash Player</strong> This is replaced by the Flash content. Place your alternate content here and users without the Flash plugin or with Javascript turned off will see this. Content here allows you to leave out <code inline="true">noscript</code> tags. Include a link to <a href="swfobject.html?detectflash=false">bypass the detection</a> if you wish. </div> <script type="text/javascript"> // < ![CDATA[ var so = new SWFObject("so_tester.swf", "sotester", "300", "300", "9", "#FF6600"); so.addVariable("flashVarText", "this is passed in via FlashVars for example only"); // this line is optional, but this example uses the variable and displays this text inside the flash movie so.write("flashcontent"); // ]]> </script> |
UFO, invece, permette un’approccio decisamente più in linea con i classici script Unobtrusive. La sostituzione del TAG avviene in modalità trasparente, senza abbligare sequenze di caricamento, come mostrato nell’esempio qui sotto:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <head> <title>Unobtrusive Flash Objects (UFO) | Sample page</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <script type="text/javascript" src="ufo.js"></script> <script type="text/javascript"> var FO = { movie:"test8.swf", width:"300", height:"120", majorversion:"12", build:"0", xi:"true" }; UFO.create(FO, "ufoDemo"); </script> </head> <body> <div id="ufoDemo"> <p>Replacement content</p> <p><a href="http://www.macromedia.com/go/getflashplayer"><img src="http://www.macromedia.com/images/shared/download_buttons/get_flash_player.gif" alt="Get macromedia Flash Player" style="border: none;" /></a></p> </div> </body> |
Nel codice sorgente dello script di UFO, infatti, si nota immediatamente l’uso – più appropriato – di un evento che attente il caricamento completo della pagina prima di eseguire la sostituizione; approccio quindi estremamente più consono a script non intrusivi.
Joost 0.9.1
![]()
È stato rilasciata una revision di Joost, la 0.9.1. Non sono state, per ora, rilasciate note ufficiali, nessun CHANGELOG, probabilmente perchè si tratta di modifiche minime, qualche lieve patch rispetto alla precedente. L’unica cosa che ho notato, quando si chiude Joost(a meno che non mi era sfuggito già nella 0.9), è che appare una finestra sul desktop, accanto all’icona sulla Trayicon, che informa come tornare su Joost.
Le uniche note che ho trovato sono:
From 0.9.1 onwards you can set the Window to be always on top by right clicking the background and selecting the relevant option.
Framework Javascript in Apollo
Tra le varie librerie – o insieme di librerie (veri e propri framework), dedicate ad Ajax, estensione dell’interfaccia HTML e Web2.0 che mi è capitato di vedere, Ext è sicuramente degno di nota. Il sito Web e la documentazione sono ben fatti e organizzati, inoltre i demo online sono da non perdere. L’interfaccia grafica, la compatibilità con Prototype e Scriptaculous e l’impletazione dei Yahoo Utils, ne fanno un sistema quantomeno interessante! Attenzione però alla licenza! Nonostante si presenti come open source e gratuito, per usi personali, richiede un pagamento per potenziarne l’uso e l’assistenza. Quest’ultima, infatti, non è mai da sottovalutare in framework di una certa complessità.
Per la documentazione e i demo clicca qui.
In particolare cito questo sistema, che sto ancora analizzando in dettaglio, in quanto è stato utilizzato per creare Fresh Feed Reader, una delle applicazioni di esempio fornite con la versione Alpha di Adobe Apollo (vedi Adobe Apollo Alpha Release). Fresh, quindi, è un duplice esempio dell’uso di Apollo, che dimostra le sue capacità di sfruttare HTML e Javascript al massimo. Fresh, infatti, non è un’applicazione Apollo pura, ma usa il framework Ext- e quindi Javascript e HTML – all’interno del motore Apollo! Fantastico!!
Javascript Compressor Obfuscator
Ecco un nuovo ed interessante tool per la compressione e l’oscuramento di codice Javascript (vedi anche Reverse Engineering: i compressori di codice).
Sul sito Web di Dean Edwards è possibile scaricare anche il codice sorgente Javascript di questo compressor. Inoltre l’autore ha reso disponibili le versioni server per Microsoft .NET Framework versione 1.1, Perl, WHS e PHP5.
Online è disponibile una versione funzionante da provare subito, meno complessa - a dire il vero - di quelle che avevo presentato tempo fa. Permette, infatti, di comprimere il codice con due sole scelte: il Base62 encode, che oscura il codice e il Shrink variables, l’ottimizzatore di variabili.
Rispetto alla precedente versione sono stati risolti alcuni bachi che, in situazioni di hack estremi (e davvero interessanti) come:
1 | var isMSIE = /*@cc_on!@*/false; |
non rispettavano l’output generato. Ora sono correttamente supportati sia i conditional comments di Microsoft, sia gli operatori +/- in condizioni come:
1 | c=a++ +b; |
Come sottolineato nella pagina di Help, tuttavia:
Packed scripts should successfully unpack on all browsers that support JavaScript. Only basic JavaScript functionality is used to decode the packed script.
Some browsers may not support the packer itself. The web interface requires DOM support. Legacy browsers will display a disabled interface.
Quindi massima attenzione all’utenza finale e al tipo di browser da supportare… come sempre del resto!
Joost 0.9
È stata rilasciata la nuova versione di Joost (The Venice Project), che sto provando da qualche tempo come beta tester (grazie Tommaso
). L’interfaccia, da sempre estremamente intuitiva e ben realizzata, è stata arricchita con una nuova funzione che permette di suddividere e vedere - meglio – i contenuti, il Channel Catalog:
Anche la fase di login è stata migliorata, ora richiede uno username univoco. Il sito Web è stato rivisto e si comincia ad intravedere qualche opzione in più per la gestione del proprio profilo (scarsa fino a poco tempo fa).
Si cominciano a vedere anche le prime alleanze per migliorare i contenuti; probabilmente la cosa più importante se ancora non fosse chiaro. Grazie alla nuova suddivisione del Channel Catalog è evidente il nuovo canale Alliance Ataltis Sci-FI, per tutti gli amanti della Fantascienza.
I Widget (utilizzabili solo in modalità fullscreen) sono molto curati e l’intera interfaccia ricorda molto quelle realizzate in Adobe Flash (mi sono fatto delle lunghe chattate con i simpatici amici di Joost
)! Tuttavia qualche baco esiste (e prontamente inviato – da buon beta tester), spesso i Widget se ne vanno un po’ per conto loro, sfarfallando qua e la per lo schermo… almeno sulla mia postazione (forse era meglio usare Adobe Flash?!).








Ultimi Commenti
Giovambattista Fazioli: @Nik: Sono contento! In bocca al lupo dunque!!
Nik: Lunedì ho l’esame di informatica su java, grazie mi sei stato utilissimo, il libro che ho era poco chiaro...
Marco: Ti ringrazio moltissimo, mi hai illuminato
ho risolto impostando [cc_objc] //OptionViewController.m -...
Giovambattista Fazioli: @Marco: Ti consiglio un approccio credo più corretto. Se hai eseguito il subclass del tab...
luigi: molto chiaro e semplice devo ammettere che anche scrivendo da un pà difficilmente uso delegati creati da...