luglio 2005 - Posts
Stavo leggendo questo documento su Vista http://www.microsoft.com/presspass/newsroom/winxp/VistaBeta1FS.mspx , mostra un po' di caratteristiche del nuovo sistema operativo, niente di sconvolgente erano tutte notizie più o meno risapute, ma nell'ultimo paragrafo c'è un accenno a Avalon e Indigo con i loro nomi ufficiali! Riporto esattamente l'articolo:
“Avalon” and “Indigo”
Windows Vista beta 1 also includes the first beta of Windows Presentation Foundation (formerly known by the code name “Avalon”) and Windows Communication Foundation (formerly known by the code name “Indigo”), which are part of the WinFX™ programming model....
Peccato, ormai ero affezionato al "vecchio" Avalon, mi ci vorrà del tempo per digerire lo sfarzoso "Windows Presentation Foundation"
La notizia è freschissima :-), è appena uscita la Beta1 di WinFX, qualcuno potrà dire ma non era già uscita? No quella era la Beta1 RC ...
Nei prossimi giorni proverò a installarla e vi racconterò cosa è cambiato, anche se non credo che ci siano novità drammatiche rispetto alla RC.
Il link per il download è qui . Dovrebbe essere uscito anche l'SDK per WinFX, il link dovrebbe essere questo , dico dovrebbe perchè ancora non funziona, diamo il tempo per aggiornare la batteria di web server :-).
Un bel bug dello sviluppo su Office 2003 riconosciuto, ufficiale, odiato e causa di notti insommi si verifica quando utilizziamo Excel 2003 con .NET, anche in automation, e i regional settings della macchina sono impostati in una lcid diversa rispetto alla lcid di installazione di Office. Che hai detto? Se avete Windows con le impostazioni internazionali in italiano ma Office è in inglese e utilizzate .NET con Excel 2003 (anche per scrivere "ciao" nella cella A1 sia in automation, smarttag, smartdoc, vsto 2003) vi beccate l'eccezione: Exception from HRESULT: 0x800A03EC o meglio "Old format or invalid type library".
Il problema nasce dal fatto che Excel vorrebbe parlare italiano :-) e cerca di individuare il multilingual user interface pack per il lcid configurato (italiano nel nostro caso) e non riuscendoci (non abbiamo il mui installato) scatena l'eccezione. La soluzione al problema è quella consigliata dall'articolo della KB: installate il mui in italiano, oppure "riempire" il vostro codice di System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US");.
In VBA il problema non si verifica perchè VBA "parla" sempre con l'object model di Excel utilizzando la localeID 1033.
Nella June CTP (di VSTO 2005) hanno aggiunto una funzionalità che rende il comportamento di vsto nei confronti di Excel simile a quello di VBA, come hanno fatto? Hanno aggiunto un transparent proxy fra il nostro codice e l'object model di Excel che imposta la lcid a 1033, pesante dite voi? E' quello che ho pensato anch'io e nella RTM di VSTO ci sarà infatti un attributo ExcelLocale1033 che se impostato a false disabiliterà il transparent proxy e riabiliterà l'eccezione :-). Quando metterlo a false? Se l'utente ha il mui installato ad esempio. Vi ricordo che questa nuova caratteristica è presente SOLO in VSTO 2005, qundi la vostra app WinForms che pilota via automation un foglio di excel continuerà a essere esposta al bug.
Una funzionalità che hanno aggiunto nell'ultima versione di Microsoft Visual Studio 2005 Tools for Microsoft Office System 2003 (non credo che esista nella storia nome di prodotto più lungo :-) è la possibilità di rimuovere tutte le caratteristiche di customizzazione relative a VSTO in modo semplice. Qual'è l'obiettivo? Semplice, pensate a un documento per la creazione di un'offerta commerciale, oggi possiamo arricchirlo con dozzine di controlli (presenti sul doc o nell'action pane), scrivere del bel codice .NET per semplificare la compiliazione dell'offerta stessa, ma al termine del lavoro vogliamo inviare al cliente SOLO il documento e NON il codice (l'assembly e le altre caratteristiche di customizzazione), ecco il motivo del metodo RemoveCustomization.
Nelle versioni successive non era così immediato scollegare un documento dal suo expansion pack, schema o custom property, niente di impossibile ma certamente non intuitivo.
Il metodo RemoveCustomization di Microsoft.Office.Tools.Excel.Workbook o Microsoft.Office.Tools.Word.Document ha il compito di togliere tutte le custom property di vsto e cestinare l'ActiveX control presente sul documento; nella RTM dovrebbe togliere anche l'ActionPane. Non rimuove però i managed control presenti sul documento, quello sarà compito nostro.
Un esempio (ThisDocument.cs):
private void CreaCopiaPerIlCliente()
{
this.SaveAs(...);
this.RemoveCustomization();
}
In ASP.NET 2.0 hanno introdotto dei controlli per realizzare pagine data-bound in modo dichiarativo, senza scrivere righe di codice. E questo credo che sia risaputo anche da mia madre :-), in Avalon hanno seguito lo stesso paradigma e nella ctp di marzo si poteva utilizzare in modo dichiarativo (xaml) il classico ObjectDataSource o il conosciutissimo SqlDataSource, ma dalla beta1 il SqlDataSource è stata marchiato come "deprecated", salutiamo quindi con affetto la dipartita di tale classe :-).
Che voglia dire qualcosa? A buon intenditor poche parole :-). Mi immagino il team di Avalon che discute: "no dai ragazzi, il SqlDataSource no però eh! Abbiamo fatto un lavorino per benino, tutto il motore di binding nuovo, one-way, two-way, propertychangenotification, observablecollection con i generics e ora volete 'sta roba dichiarativa, no no, basta con il client che parla direttamente con il db, e dai! Al massimo guarda... l'ObjectDataSource!" :-)
Appena ho visto l'immagine al volo mi son chiesto: ma a che cavolo serve? Chi se lo comprerà? Ah dimenticavo, sto parlando del nuovo monitor "two-way viewing angle" LCD di Sharp, presentato il 14 luglio a Tokyo. E' un monitor che visualizza contemporaneamente due applicazioni diverse, quale vedere delle due dipende dall'angolo ottico dell'utilizzatore rispetto al monitor stesso.

Ve li immaginate gli usi di un simile oggetto? Una coppia seduta sul divano, con 'sto monitor come televisione, lui che si può guardare l'ultimo MotoGP mentre lei si sciroppa l'ennessima puntata di Beautiful :-), oppure nell'ambito dei videogame si potrebbe giocare in multiplayer senza "splittare" in due lo schermo, o in macchina con il pilota che si guarda le mappe e il passeggero che si gusta un film in dvd. Carina come idea ma l'audio? Mica possono fare delle casse che riproducono due tracce sonore diverse! Sai che casino in soggiorno :-), e vai quindi con le cuffie wireless in casa! La fonte dell'articolo è boston.com
Qualche ora fa Microsoft ha aperto la sezione del sito di PDC 2005 dedicata alle breakout session, il link è http://commnet.microsoftpdc.com/content/sessions.aspx .
Personalmente sono talmente indeciso che a parte 3 o 4 le vorrei vedere tutte :-). Da IIS7, IE7, ASP.NET 2.0 e in più un sacco di roba interessante su Avalon, Indigo e Office 12.
Spero di capire qualcosa di più sull'integrazione fra WinFx e Office 12, visto che il nuovo formato dei documenti (lo zippone con i vari file e dir) assomiglia tantissimo al formato di contenuti esposto da Metro, l'idea quindi di rappresentare tutti i documenti con un unico formato stia forse per diventare realtà? Ok capitano Kirk, spengo l'Enterprise ....
Un plug-in degno di nota, che permette di esportare immagini di Adobe Illustrator in contenuti XAML. Inoltre è pure gratuito.
Finalmente non dovremmo più "tagliuzzare" i layout dei grafici per produrre delle form decenti, ma avremo direttamente lo xaml sul quale code-behindare a piacimento :-)

Tutti i meriti vanno a Mike Swanson . La pagina di download si trova qui
Per vedere le capacità del tool vi mostro l'immagine all'interno di Illustrator

E la stessa immagine esportata in xaml e visualizzata all'interno di AvPad

Non male vero?
Se non avete la minima idea di quello che ho detto (eh Ale?) vi spiego la "vision" in modo chiaro:
Prima di Avalon e XAML il design grafico di un’applicazione Windows (non web) era demandato in genere al programmatore e, visto che i developer non hanno un gran gusto grafico, solitamente l'aspetto dell'applicazione era abbastanza grezzo (per non dire orripilante :-)); le software house con i soldini facevano fare il layout al grafico ma il designer non lavorava certo con VS.NET o altri tool da sviluppatore e usava Illustrator, Photoshop, Corel insomma roba da designer. L’output di un grafico è quindi un unico jpg che mostra il layout di una form Windows.
Lo sviluppatore doveva quindi “stamparsi” il jpg e cercare di rifarselo con vs.net (sputando sangue) dove possibile, quindi rifacendo listbox, grid, textbox e altro, e per le immagini doveva ritagliarsele dal jpg master fatto dal grafico per tirare fuori un’icona, il logo o altre oggetti “decorativi”.
Con l’avvento di Avalon e XAML i grafici possono entrare nel processo produttivo di interfacce Windows e questo primo plug-in per Illustrator ne è la prova, l’idea quindi è che il grafico lavori sempre con i suoi strumenti visuali e poi possa esportare l’intera maschera in un formato xaml che il programmatore può immediatamente “eseguire” o arricchire con codice custom (gestioni di evento quali click, query sul database ecc.ecc.). Oggi è solo possibile l’operazione one-way (da Illustrator a XAML) ma non il contrario, l’idea finale è che i tool da designer “mastichino” xaml direttamente, in modo da far coinvolgere i grafici in tutte le fasi dello sviluppo, non solo quella iniziale del prototipo ma anche quella delle modifiche sulle interfacce.
Una delle novità più interessanti della Beta 1 è la possibilità di creare delle Express Application, ovvero delle vere e proprie applicazioni Avalon (e quindi Windows) che "vivono" all'interno di Internet Explorer; sopravvivono in modo sicuro poichè non hanno bisogno dei diritti di full trust ma girano in una browser-based sandbox con gli stessi privilegi della Internet Zone e il deploy viene effettuato in modo indolore grazie al signor ClickOnce e senza security-warning.
Ci rifarete il prossimo gestionale aziendale con le express application? Non credo proprio, o meglio non credo che sia quello il motivo della loro nascita, credo invece che l'idea di base sia la capacità di rendere trasparente all'utente l'esecuzione di pagine web o di applicazioni Windows. Cosa significa in pratica? Che l'utente navigherà sul nostro bel sito intranet/internet, e cliccando un link, al posto di visualizzare l'ennesima pagina php (:-)) ClickOnce scaricherà l'applicazione sul client e il runtime di Avalon visualizzerà la nostra meravigliosa interfaccia densa di controlli xaml, styles, trigger, databinding, animazioni e 3d.
Cosa fare per realizzare la vostra prima applicazione Express? Il primo passo è la definizione dell'Application, questa deve essere una NavigationApplication e non una semplice Application; le Page non avranno limitazioni particolari, dobbiamo solo utilizzare controlli express-compliant, vi consiglio questo documento per l'elenco completo; l'ho letto e credo che le funzionalità chiave di Avalon sono tutte comprese in questa lista. Esistono qualche limitazioni dal lato "code-behind": non dovremo utilizzare nel codice classi per lavorare con risorse di sistema quali file system o registry. Non possiamo utilizzare codice unmanaged, il motivo? Security, siamo nella internet zone non dobbiamo dimenticarcelo. Inoltre sulla nostra Window possiamo impostare solo 4 proprietà: Text, Width, Height e StatusBarContent, ultima cosa non possiamo lanciare ulteriori window o dialog boxes, al massimo possiamo navigare tra page e utilizzare l'oggetto Popup di xaml (mi vedo già il popup-blocker del SP2 di Longhorn :-)).
Si lavora di cesello all'interno del file .proj impostando l'elemento <HostInBrowser>True</HostInBrowser> e una serie di altri elementi tipo <TargetZone>Internet</TargetZone> e <Install>False</Install> (ricordiamo che ClickOnce dovrà solo "lanciare" l'applicazione e non installarla in start->all programs, icone ecc.). L'amicone msbuild o vs al momento del build, creeranno tre file diversi:
- L'eseguibile
- L'application manifest. E' un file con estensione .application e contiene i metadati e le dipendenze dell'app.
- Il deploy manifest. E' un file con estensione .xapp (si pronuncia zap :-)), contiene le proprietà di deployment per ClickOnce.
A questo punto per provare il tutto basterà cliccare sul .xapp e Avalon farà partire l'host (IE) e inizializzerà (e si spera anche visualizzerà :-)) la nostra app.
In uno scenario concreto dovremmo distribuire i 3 file fondamentali (.exe, .application, .xapp) su una virtual directory di IIS, configurare i MIME types corretti, qui c'è uno script carino per fare il lavoro e linkare dalle pagine web con il più classico degli href il nostro file xapp. Eventualmente se vogliamo mostrare nella STESSA finestra di explorer l'applicazione Avalon e l'applicazione Web basterà includere nella pagina jsp (:-)) un Frame o il più carino IFrame che ospiterà la express application.
Se avete qualche demo scritta con la CTP di marzo e volevo aggiornarla alla Beta1, vi elenco un po' di cosette che son cambiate
- VisualTree è defunto, al suo posto ControlTemplate, leggete il mio mini-articolo per i dettagli
- FrameworkElement.ID è diventato FrameworkElement.Name e di consequenza anche quelle proprietà che puntavano a ID sono state modificate (ad esempio SetterTimeline.TargetID è diventato SetterTimeline.TargetName).
- StyleID è diventato Name
- TransformDecorator addio, al suo posto l'elemento LayoutTransform: <ListBox LayoutTransform="scale 2, rotate 90" >
- Style.Storyboards sono stati affiancati da ControlTemplate.Storyboards, quando utilizzare l'uno piuttosto che l'altro? Semplice, se dovete animare proprietà che fanno parte del visual tree usate ControlTemplate.Storyboard, altrimenti se dovete animare proprietà dell'oggetto sul quale imposterete lo style allora utilizzate il classico Style.Storyboard
- Style.VisualTrigger ciao ciao, benvenuto Style.Triggers. Questa modifica si porta dietro anche il cambio di nomenclatura fra PropertyTrigger con Trigger e il proprio Set che si adegua al Setter degli style, rimangono inalterati EventTrigger. Cito anche la presenza di ControlTemplate.Triggers, utilizzatelo se volete cambiare la formattazione di elementi della composizione del visual tree in modo condizionale
- Sintassi {Bind} diventa {Binding}, e quindi l'omonima classe
- Il metodo GetAnimations di IAnimable ci ha lasciato, al suo posto la collezione PersistentAnimations
- IPropertyChange F2 INotifyPropertyChanged
- System.Windows.Media.Imaging è stato sistemato, trovate le classi per la gestione di bitmap come BitmapSource o BitmapDecoder
- ValueConverterSource è sparito dalla galassia, dobbiamo aggiungere il mapping del namespace che contiene la classe che implementa IValueConverter e utilizzare la nostra classe converter come qualsiasi elementi mappato di xaml
- Se al momento della compilazione msbuild vi saluta con "<UICulture> should be set in the project file in order to support the following markup files that use types defined in this project", aggiungete nel file di progetto l'elemento <UICulture>en-US</UICulture> nella prima sezione <PropertyGroup>
- *Null ora è più carino {x:Null}
- Il metodo Deactivate del ClockController è stato rinominato con Stop (d'accordissimo: Deactivate non era il massimo della chiarezza per un metodo che deve fermare un'animazione). Quindi anche DeactivateAction all'interno di un EventTrigger diventerà StopAction
Mi sembra tutto, se mi sono dimenticato qualcosa aggiornerò questo post
Microsoft ha acquistato un paio d'anni fa un tool di illustrazione vettoriale chiamato Expression prodotto da una software house che, se mi ricordo bene, si chiama Creature House. Una quindicina di giorni fa è uscita la prima beta di un’applicazione creata sulla tecnologia di Expression e denominata Acrylic. Il web sito di riferimento è http://www.microsoft.com/products/expression/.
Ho scaricato e installato Acrylic, 77 mega di download. Se avete familiarità con Photoshop vi troverete immediatamente “ a casa” con questo nuovo prodotto. Tra le caratteristiche che vi segnala un “grafico-assolutamente-non-professionista” :-): hybrid graphics, ovvero la capacità di creare pixel-layer e vector-layer, raster painting con i “grandi classici” di Brush, dal solid color al textured, effetti live carucci, variation di saturazione e luminosità in layer vettoriali, image stitching (non ha niente a che fare con il cartone animato Lilo e Stitch :-)), questa ve la spiego che è utile: avete provato a fare le foto a un paesaggio dettagliato e forse avete fatto 4,6, 9 o più foto al panorama in diverse direzioni, poi a casa avete perso le nottate a mettere insieme il collage di n foto per creare il mega-poster della Corsica :-). Bene, image stitching serve proprio a fare questo, gli date in pasto le n foto e lui crea il puzzle completo. Termina la carrellata funzionalità legate al web per creare pulsanti con rollover ed esportare l’immagine in html, ovviamente acrylic “spezzerà” in automatico l’immagine totale in tanti piccoli jpgghini e comporrà una tabella html con diversi tr, td e img src.
La Beta 1 RC di Avalon introduce un po' di novità, nei prossimi post ne parleremo più a lungo ma per ora ecco un breve riassunto:
- Audio e video (.WMA e .WMV, è da Longhorn 4074 che non funzionava una mazza con audio/video...)
- Speech recognition e synthetis (utilizza SRGS e SSML)
- Supporto tipografico (contextual alternates, numeral styles, ligatures, supporto per Adobe CFF ecc.ecc.)
- Un po' di controlletti nuovi (toolbar, menu ed expander)
- Supporto per "Metro" document
- Per questo abbiamo bisogno di un minimo di spiegazione visto che, secondo me, è un punto importante della piattaforma Avalon. Alla WinHEC 2005, Microsoft ha lanciato un insieme di tecnologie chiamato "Metro", in sintesi si tratta di una serie di specifiche per l' "open document format" e un insieme di convenzioni per memorizzare, gestire e firmare digitalmente un contenuto. Le specifiche definiscono un formato, chiamato Metro Reach, per documenti elettronici, basati su, e qui torniamo a noi , XAML.
Nei prossimi post magari ne parleremo più approfonditamente, intanto leggetevi questo doc.
- Un'altra gran bella novità è la possibilità di creare delle Express Application
- Sapete che si può installare delle NavigationApplication con ClickOnce e hostarle, mammia mia che brutto termine... ehm ospitarle all'interno del browser, basta eseguire qualche step: cambiare il file .proj e modificare il complessissimissimo element <HostInBrowser>True</HostInBrowser>, copiare i componenti necessari (.deploy, .exe e relative .dll, .application) su IIS e linkare dal sito il file .application e il gioco è fatto. Quando l'utonto cliccherà sul link, ClickOnce installerà sul client tutto quello che il nostro sw necessita e la nostra applicazione Avalon 3D con speech enable, document viewer e animazioni fotoniche girerà all'interno di IE, rendendo trasparente all'utente il fatto di "trovarsi" all'interno di un sito web o di un'applicazione Windows.
L'unico "problemino" è che l'applicazione deve avere i diritti di FullTrust, in un ottica intranet non vedo grossi problemi, ormai .NET porta con sè tantissimi meccanismi per rendere semplice il deployment di policy di sicurezza ma per un sito pubblico capite che non è proprio il massimo; ecco la nascita della Express Application: ovvero un applicazione Avalon (basata su NavigationApplication) che utilizza sempre ClickOnce per un deployment semplificato ma girerà all'interno di una browser-based security sandbox, la nostra app non dovrà quindi avere i diritti di FullTrust ma girerà con i diritti della internet zone. Per tutti i controlli o le tecnologie di Avalon disponibili per le Express Application consultate questo elenco; così su due piedi mi sembra che contenga tutto il necessario: dal databinding ai semplici panel e controlli, inclusi trigger e style passando per graphics 3D, animazioni e timeline.
Ritengo che le CTP (Community Technology Preview) siano un gran bella iniziativa, vedere le modifiche e gli aggiornamenti mensili di un prodotto in via di sviluppo è senz'altro positivo.
Capire la compatibilità dei vari prodotti non è però banale, anzi molte volte il processo di installazione dei vari prodotti sulla stessa macchina porta a notevoli frustrazioni e insulti indicibili :-).
I ragazzi di Channel9 hanno prodotto una bella interfaccia su un dignitoso file XML che mostra tutte le versioni di CTP o Beta dei vari SQL Server, Visual Studio, WinFX e Longhorn e le proprie compatibilità (es: Avalon e Indigo Beta 1 RC è compatibile con VS Beta 2 di aprile e SQL Server CTP di aprile e giugno ecc.ecc.).
Tre giorni in compagnia di Paolo e RoB a migrare siti e blogs sono stati uno spasso ma anche un pelino stancanti :-). Comunque fra un colpo di sonno e uno di caldo proverò a scrivere qualcosa.
Scrivere XAML a mano non è impossibile, anzi dopo aver visto Paolo scrivere XSLT devo dire che il markup di Avalon è proprio facile :-), comunque per i grafici della prossima generazione sono in arrivo dei tool di terze parti per produrre XAML in modo visuale.
Il primo tool, prodotto da Electric Rain si chiama ZAM 3D, nasce principalmente non tanto per semplificare lo sviluppo di UI "piatte", ma come utile designer per progettare e animare interfacce 3D. Introduce funzionalità per modellare mesh semplici e complesse, gestione di texturing e materials e animazioni di oggetti. Dimenticavo, funziona con la Beta1 RC.
L'altro prodotto, creato da Mobiform è Aurora, semplica lo sviluppo di documenti XAML e consente di disegnare e pilotare in modo visuale (e vai con il drag'n'drop...) la maggior parte degli elementi di Avalon, user interface semplici e complesse, styling, documenti (flow, fixed), e qualcosa di 3D. Anche Aurora lavora con la Beta1 RC.