Il capitolo 13 mostra come usare IronPython nel browser attraverso Silverlight.
I post precedenti sono: accesso ai dati e web services, ASP.NET, system administration, WPF, protocolli e metaprogrammazione, testing, proprietà, dialog e Visual Studio, first class functions e xml, applicazioni e design pattern, oggetti .NET e IronPython, introduzione a Python, introduzione al libro e il preambolo.
Le feature di Silverlight sono tutte utilizzabili da IronPython, l’unica cosa di cui si ha bisogno è il Silverlight Dynamic Languages SDK. All’interno dei package xap è possibile accedere ad altri moduli Python ed usare file()
per caricare le risorse. Grazie al manifest file si può evitare di includere nel pacchetto anche le librerie di IronPython e caricarle remotamente, magari condividendole con altre applicazioni Silverlight e avvalendosi del caching HTTP.
Il libro poi mostra un esempio di client Twitter in circa 600 linee di codice spiegando: cross domain policies, come fare il debug, la struttura delle UI, come fare richieste web a terze parti interfacciandosi con la Twitter API, il threading, il supporto asincrono, il client side storage e altro ancora.
Per ovvie ragioni il sandboxing model di JavaScript impedisce le richieste HTTP a domini che non siano quello dell’applicazione, Silverlight invece è leggermente più lasco e permette richieste a domini di terze parti che esplicitamente, tramite una sorta di manifeste, permettono tali richieste. Twitter non è uno di questi quindi l’autore sviluppa un proxy server per ovviare a questo problema.
Le print
di Python non funzionano in Silverlight, ma si può sempre redirezionare lo standard output ad un oggetto che scrive un div sul browser, ad esempio.
WebClient
viene usato per fare le richieste HTTP, in maniera sincrona ed asincrona. L’autore aggiunge degli ID numerici per evitare le policy di caching di questa classe.
XmlReader
ovviamente viene usato per parsare l’XML ritornato dall’API e DispatcherTimer
viene usato per aggiornare la UI.
La classe System.IO.IsolatedStorage
implementa il client side storage salvando 100kb (che a richiesta possono essere aumentati) nella cache del browser.
Gli ultimi esempi mostrano l’uso di video e video brush e l’uso di HtmlPage
per aver completo accesso al DOM, interagire con il JavaScript e XMLHTTPRequest.
Potete usare il Silverlight IronPython Web IDE per sperimentare con Silverlight e IronPython.