Blend 2
06 Maggio 2008
Ma quanto è bello il trace del WCF
13 Febbraio 2008
Oggi io e un mio collaboratore siamo quasi impazziti per capire come mai le chiamate seguite da una portlet Java (ospitata in un IBM WCS) non funzionavano con un servizio REST/POX scritto in WCF. La cosa interessante è che le chiamate al servizio effettuate da un paio di (veramente piccoli) script PowerShell di prova funzionavano. Era evidente quindi che si trattava di un problema di comunicazione fra i due mondi. I problemi spaziavano dalla dalla indicazione della codifica alla mancanza di namespace e di campi. Il tutto dovuto fondamentalmente allo stack Java troppo vecchio (con l’IBM WebSphere Portal Server 6 non sarebbe successo).
Per fortuna che il WCF ha delle ottime funzionalità di tracing che ci hanno aiutato a isolare i problemi. E, nonostante questo, ci abbiamo perso delle ore.
Forse l’ho già detto ma io penso che il WCF sia proprio un gran bel pezzo di software!
WCF e REST/POX
11 Febbraio 2008
A causa di un problema di specifiche supportate troppo vecchie da parte di una vecchia versione di portale IBM WebSphere Portal Server, ho dovuto cimentarmi nell’esporre in WCF un servizio tramite REST e POX. Andato a caccia di un po’ di esempi nell’SDK e dopo qualche esperimento in poco tempo ho avuto il servizio attivo. Indubbiamente il framework è molto potente e permette il controllo praticamente totale del dialogo. Però utilizzare un modello REST con POX vuol dire scendere ad un livello più basso cioè “lavorare con le tubature”. Efficace ma sicuramente meno elegante.
Abbiamo cominciato con 2008!
08 Febbraio 2008
Nei prossimi mesi penso ci sarà parecchia attività da parte della mia società su Windows Server 2008 sia sulla struttura interna che su quella di diversi clienti. Si va dal rinnovo di generico dei sistemi alla creazione di soluzioni (di test per il momento) di virtualizzazione, dalla sperimentazione di IPv6 alla creazione di nuovi server Windows Terminal e cose così.
Windows Server 2008 non è un semplice upgrade. Partendo dal nuovo kernel (allineato a quello Vista) e arrivando ai nuovi servizi o alle nuove implementazioni dei vecchi servizi si notano una miriade di cambiamenti. Con l’uscita dell’SP1 di Vista, che fondalmentalmente allinea quest’ultimo al Windows Server 2008, si dovrebbero notare diversi benefici anche per gli utenti dell’ultimo sistema operativo per desktop.
Trovo notevole anche II7, soprattutto per i programmatori WCF. E per i programmatori indico il link all’SDK.
Su questo blog racconterò le nostre esperienze nel proseguio di queste attività.
Visto la maggioranza degli utenti Windows Vista che lo utilizzano, il prossimo step sarà l’aggiornamento del nostro file server principale, una macchina Windows Server 2008 a 64 bit.
SCE Starter Kit
17 Gennaio 2008
Invidiate il NY Times per il loro lettore offline? Volete creare una rivista elettronica aziendale? Aggiornata in modo automatico? Volete fare in modo che le stampe siano di ottima qualità e in stile giornalistico? Oppure semplicemente volete vedere come costruire una applicazione del genere usando WPF?
Allora il Syndicated Client Experiences Starter Kit è quello che ci vuole.
Come esempio forniscono MSDNReader, un lettore per gli articoli MSDN Magazine.
A volte ritornano (utili)
08 Gennaio 2008
Cosa hanno in comune con me il compasso, la squadra, i corsi di disegno tecnico, le proiezioni, la trigonometria, Geometria 1 e la mia calcolatrice programmabile preferita?
Hanno in comune il fatto che mi stanno tornando utili, nel bene e nel male, per due scopi: aiutare mia figlia in alcune attività scolastiche e disegnare controlli ed elementi WPF. Tralasciando l’attività più importante (cioè aiutare la figlia), devo dire che il conoscere questi strumenti aiuta molto nella creazione di controlli e componenti riutilizzabili in WPF. Ad esempio a tempo perso sto creando un menu che utilizza dei settori circolari traslati e ruotati: usare concetti di base di trigonometria è assai utile. La calcolatrice, che effettua calcolo matriciale e vettoriale anche simbolico, è molto apprezzabile durante la definizione di trasformazioni.
Serve tutto questo per sviluppare applicazioni WPF? La risposta è no! Utilizzare WPF è molto semplice ma aggiungere la matematica e il disegno tecnico aumenta le possibilità per il programmatore e il relativo divertimento.
E, se mi consentite la digressione, mi sta tornado utile anche la storia della letteratura inglese che ho studiato al liceo per apprezzare ancora di più il romanzo che sto leggendo in questi giorni: Il caso Jane Eyre di Jasper Fforde.
LINQ mi piace
31 Dicembre 2007
Devo dire che all’inizio LINQ in C# mi lasciava un po’ perplesso. L’idea di complicare il linguaggio di programmazione aggiungendo costrutti mi rende nervoso. Io la chiamo sindrome da PL/I ma l’ho sperimentata con il C++: il linguaggio diviene così complesso che per realizzare un progetto serve un esperto del linguaggio stesso.
LINQ in realtà si integra bene con C# e diviene presto naturale utilizzarlo. Per provarlo ho aggiunto delle funzioni di ricerca relativamente sofisticate ad un mio programma (in realtà è il mio Pet Project che uso per fare esperimenti) utilizzando il binding SQL.
Ho creato un piccolo parser utilizzando una serie di if con una serie di espressioni regolari. Ho cablato diverse query utilizzando i risultati di questo piccolo parser. In pratica prelevo il contenuto del TextBox di ricerca e quando soddisfa il match con una espressione regolare simile a questa (ho semplificato il codice)
Regex reAnnoMese = new Regex(@"^([0-9]){4}\s+[a-zA-Z]+$");
eseguo la query corrispondente simile a questa
if (reAnnoMese.Match(searchText).Success) { RicevutaDataContext dcRicevuta = new RicevutaDataContext(); int posSpazio = searchText.IndexOf(" "); string anno = searchText.Substring(0, posSpazio); string mese = searchText.Substring(posSpazio + 1); int numeroMese = GetMonthNumber(mese); var queryRicevuta = from ricevuta in dcRicevuta.Ricevutas orderby ricevuta.Anno descending, ricevuta.Numero descending where ricevuta.Anno.Equals(anno) && ricevuta.DataEmissione.Value.Month == numeroMese select ricevuta; DataContext = queryRicevuta; }
RicevutaDataContext è un DataContext creato con un semplice drag&drop della tabella Ricevuta dal mappatore del VS2008. GetMonthNumber è una funzione che restituisce il numero ordinale corrispondente al mese e utilizza al suo interno le funzioni .NET per la localizzazione e che restituiscono i nomi dei mesi. Nell’ultima istruzione effettuo il binding della query con un elemento WPF (una Page contenente una ListView in questo caso).
Se nel TextBox scrivete 2006 giugno (o June: dipende dalle impostazioni) questo codice estrae tutte le ricevute emesse nel giugno 2006. LINQ genere codice SQL del tipo:
SELECT [t0].[IdRicevuta], [t0].[Numero], [t0].[Anno], [t0].[DataEmissione], [t0].[Intestazione], .... FROM [dbo].[Ricevuta] AS [t0] WHERE ([t0].[Anno] = @p0) AND (DATEPART(Month, [t0].[DataEmissione]) = @p1) ORDER BY [t0].[Anno] DESC, [t0].[Numero] DESC
Il fatto che il risultato della query LINQ non sia altro che una collezione .NET (per la precisione un IEnumerable su cui è possibile navigare) ne rende l’utilizzo praticamente trasparente.
Il codice non è particolarmente furbo (e neanche elegante) ma è proprio questa la sua bellezza: l’ho scritto senza pensarci troppo e ho ottenuto un buon risultato. Altri meccanismi mi avrebbero costretto a ragionare troppo (Ehi, sono quasi in vacanza!), ad utilizzare classi più complesse, a passare per sofisticati ORM, a scrivere SQL.
Expression Blend
24 Dicembre 2007
In questi giorni sto cominciando a prendere veramente confidenza con Blend. Blend è lo strumento dedicato ai designer per la creazione di pagine e controlli WPF. L’idea originale di Microsoft era che VisualStudio (VS) fosse lo strumento pricipale del programmatoree e Blend fosse di uso esclusivo del designer. Io (e altri) invece riteniamo che possa anche essere lo lo strumento ponte tra il designer e il programmatore. Tempo fa durante una chat pubblica con le persone di Microsoft dedicate insieme ad altri proposi l’idea che Blend avrebbe dovuto essere inserito in MSDN proprio per il motivo sopra elencato. E in effetti Blend fu inserito in MSDN.
La particolarità di Blend è quella di essere (anche) un programma di grafica e animazioni vettoriali che utilizza XAML e WPF come il suo formato e il suo modello. Questo aspetto si evidenzia sicuramente nell’uso dei Path. In VS l’uso di questi elementi si estrinseca in attività di programmazione. In Blend invece si posizionano elementi grafici e si opera su di questi in modo molto più semplice e più visuale.
Questo strumento l’ho usato sempre molto poco, visto il mio retaggio di programmatore. E finora non avevo trovato il tempo di studiarlo nemmeno un po’. Ma ora lo trovo molto utile proprio anche quando mi diverto a fare il programmatore (molto raramente oramai). Attualmente lo utilizzo soprattutto per creare pezzi di codice XAML da inserire poi nei file sui cui sto lavorando in VS. E’ sicuramente un uso limitato dello strumento ma è efficace per la produzione di risultati immediati e a portata di mano anche di persone come me che, dal punto di vista del grafico, poco ne sanno.
Nei prossimi giorni voglio provare a giocare con le animazioni.
Icone Vettoriali in WPF
21 Dicembre 2007
WPF è un sistema per realizzare interfacce grafiche vettoriali. Basato su un modello dichiarativo prevede una separazione di ruoli tra designer della UI e programmatore così come avviene per i siti web. Purtroppo oggi il mercato nella maggioranza dei casi non è disposto a pagare la presenza di un designer. C’è da dire anche che molti designer si occupano più della presentazione che dell’usabilità di una applicazione e, in tal caso, non avere un designer è una buona cosa.
Comunque per dare un colpo alla botte e uno al cerchio, in casi di mancanza di fondi per il designer, si può ricorrere ad alcuni trucchi per avere una interfaccia utente abbastanza al passo con i tempi. Quelli che ho trovato più utili sono pochi: si cerca di mantenere l’interfaccia semplice, si utilizzano i colori aziendali (senza esagerare), ci si integra con il look&feel del S.O. (ovviamente Vista
), si usano pochissime animazioni e si usano elementi vettoriali al posto di elementi raster. Nell’ultimo caso mi riferisco soprattutto a quelle icone che stanno nei pulsanti o in altri elementi. Si devono però utilizzare icone altrettanto semplici senza troppi fronzoli e colori.
Il punto è: dove trovare icone (e altre immagini) vettoriali?
I Windows Meta File (WMF) sono una risposta. E’ possibile trovare parecchi file esistenti e programmi che generano immagini anche in formato WMF. Ad esempio molte clip arts presenti sul sito di Office sono disponibili in formato WMF. Anche PowerPoint può generare un file WMF. E, soprattutto, molti programmi inseriscono immagini vettoriali nella clipboard in formato WMF.
Una volta in possesso del file si può sfruttare Paste2Xaml, un tool di conversione da WMF a XAML. Con questo tool si può importare il file e generare l’equivalente XAML (di solito una serie di poligoni). Senza spendere denaro utilizzando poi XamlPad si possono effettuare dei semplici ritocchi (XamlPad è fornito con l’SDK di Windows). Infine si può inserire (parte di) questo XAML in un file contenente risorse come una risorsa appunto. La magia consiste nell’utilizzare un VisualBrush:
<VisualBrush x:Key="MyIcon"> <VisualBrush.Visual> <Canvas> <Polygon Points="10 10 10 90 90 90 10 10" Fill="LigthOrange"/> </Canvas> </VisualBrush.Visual> </VisualBrush>
Questo produce un triangolo arancio. Il fatto di definirla come risorsa permette di utilizzarla poi in altri oggetti. Creata la risorsa è possibile inserirla in un elemento grafico utilizzandola come Brush. Ad esempio un pulsante potrebbe essere così definito:
<Button Width="200" Height="50"> <StackPanel Orientation="Horizontal"> <Rectangle Fill="{StaticResource MyIcon}" Width="40" Height="40"/> <TextBlock>Triangle</TextBlock> </StackPanel> </Button>
Quello che compare è questo:
Paste2Xaml è solo uno dei tool disponibili su WPF-Graphics creati da Andrej Benedik. Sullo stesso sito potete trovare anche convertitori da SVG e 3DS. Se avete voglia di sbizzarrirvi potete utilizzare diversi programmi gratuiti per generare contenuti da dare in pasto a questi tool. Ma questo sicuramente non aiuterà a diminuire i costi!
Nell’altro mio blog Enterprise Bus (dedicato ad argomenti di integrazione e SOA dal punto di vista pratico) ho pubblicato un post che indica in modo molto semplice come come costruire un WebServices con WCF che vada d’accordo con WebSphere.