di .NET e di altre amenità

XAML Playground: Animazioni e DataBinding

Durante l'ultimo meeting di XeDotNet, ho presentato un piccolo esempio, che è piaciuto molto, che dimostra abbastanza bene alcuni aspetti del DataBinding in Windows Presentation Foundation. Quando per la prima volta mi sono addentrato nell'argomento, sono rimasto molto incuriosito di una peculiarità che riguarda poco il DataBinding tradizionale, ma che regala a WPF una marcia in più rispetto a Windows Forms.

Mi riferisco alla possibilità di collegare tra loro mediante DataBinding gli elementi che compongono una interfaccia e di conseguenza in qualche modo coordinarne movimenti, dimensioni, stili, contenuti e quant'altro. L'esempio più banale, che tipicamente introduce le presentazioni su WPF - comprese le mie - è quello di uno slider che modifica le dimensioni di un oggetto dell'interfaccia. Un esempio di questo tipo, anche se un po' banale però rivela bene e con semplicità la potenza di questo meccanismo. Tuttavia nell'ultimo meeting ho voluto trovare un esempio un po' più di impatto, e che includesse anche qualcosa in più rispetto alla pura e semplice dimostrazione.

Nello screencast cast che potete scaricare in coda a questo post è spiegato passo passo come realizzare l'esempio ritratto nell'immagine. Il giocattolo è costituito da tre ruote dentate, forgiate con Microsoft Expression Designer. Esse sono collegate tra loro mediante DataBinding:

1 <Path.RenderTransform> 2 <RotateTransform 3 x:Name="ruota2Anim" 4 Angle="{Binding ElementName=ruota1Anim, 5 Path=Angle, 6 Converter={StaticResource angleConverter}, 7 ConverterParameter=-2.0}" /> 8 </Path.RenderTransform>

Lo spezzone di codice mostra il punto cruciale dell'esempio. Si tratta di una trasformazione di rotazione, applicata al Path che costituisce una ruota. In particolare in questo caso si tratta della ruota gialla che è collegata a quella arancione. La proprietà Angle, cioè quella che determina l'angolo di rotazione applicato alla ruota, mostra l'applicazione del DataBinding mediante la Markup Extension "Binding". Al suo interno troviamo:

ElementName: Definisce il nome dell'elemento che funge da sorgente dati per la proprietà bindata. Nel nostro caso il riferimento è alla traformazione analoga applicata alla ruota arancione

Path: il nome della proprietà dell'elemento collegato dalla quale attingere. Per questo esempio ci colleghiamo alla stess proprietà Angle dell'elemento riferito.

Converter: Convertitore da utilizzare per calcolare il valore della proprietà. Utilizziamo una Markup Extension ancora una volta per riferire unìistanza di AngleConverter inserita nelle risorse della Window. Questo convertitore non fa altro che applicare un rapporto di demoltiplicazione all'angolo.

ConverterParameter: Parametro generico da passare al convertitore. Il parametro in questo caso sarà il fattore di demoltiplicazione da applicare alla ruota precedente.

1 <Canvas.Triggers> 2 <EventTrigger RoutedEvent="Canvas.Loaded"> 3 <EventTrigger.Actions> 4 <BeginStoryboard> 5 <Storyboard Name="animation"> 6 <DoubleAnimation 7 Duration="0:0:3.0" 8 To="360" 9 RepeatBehavior="Forever" 10 Storyboard.TargetName="ruota1Anim" 11 Storyboard.TargetProperty="Angle" /> 12 </Storyboard> 13 </BeginStoryboard> 14 </EventTrigger.Actions> 15 </EventTrigger> 16 </Canvas.Triggers>

A Completare l'esempio, viene applicata una animazione alla ruota arancione. Per capire il risultato, che comunque è spiegato nella sua completezza nel video, bisogna pensare a come i dati vengono propagati. L'animazione si occupa di applicare una rotazione da 0 a 360 gradi alla ruota arancione. Mediante DataBinding questo valore, opportunamente demoltiplicato passa alla ruota gialla. Il rapporto di conversione è negativo perchè in questo modo la ruota girerà alla rovescia. Infine un analogo Binding avviene tra la ruota gialla e quella viola. Ancora una volta la conversione sarà negativa per far ruotare l'ingranaggio al contrario rispetto alla sua fonte.

Date un'occhiata al risultato e creto che rimarrete affascinati dalla precisione con cui le ruote si ingranano le une con le altre senza alcuna sovrapposizione e senza il minimo errore. Personalmente la cosa che mi alletta di più è pensare che grazie al DataBinding la simulazione del movimento si svolge proprio come si svolgerebbe nella realtà in cui ogni ruota applica una forza alla successiva trasferendole il movimento.

Download Video

(14 MB)

(4 MB)

Sorgenti:

Il video è liberamente ridistribuibile se non subisce tagli e contraffazioni

Office: DocX e Mime Types

Vi siete mai imbattuti nel mime-type che viene inviato al webserver quando fate l'upload di un documento Word 2007? Io L'ho visto oggi per la prima volta e devo dire che sono rimasto sbalordito:

application/vnd.openxmlformats-officedocument.wordprocessingml.document

Nientemeno!?!?!?

IMHO 1.3... a volte ritornano

Stasera, mentre mi spazzolavo i referrer al mio weblog mi sono imbattuto in un link davvero curioso. La provenienza è la versione tedesca di ZDNet. Il link che ho trovato si riferisce a IMHO 1.3. Visitando il referrer ho scoperto una pagina in cui ne viene pubblicizzato il download risalente allo scorso 26 giugno 2006. Inutile dire che non me lo aspettavo...

Link:

Team System Utilities

Mentre ero alla ricerca di un tool che mi supportasse in una particolare attività su Team Foundation Server, mi sono imbattuto in un post che riporta una esaustiva tabella di tool per chi ha l'onere di manutenerlo e per chi lo usa tutti i giorni. Spero di fare una cosa utile a pubblicare il link, anche se in effetti il post è un po' vecchio e magari qualcuno ne è già a conoscenza. Non so dire esattamente chi sia l'autore del lavoro ma la pubblicazione è a cura di SLRTeam, uno usergroup israeliano.

Purtroppo però quello che sto cercando non è presente nell'elenco... mi sa che mi tocca scrivermelo.

Fonte:

WebCast: Tecniche di Search Engine Optimization con ASP.NET 2.0

Alle 14:30 di oggi si terrà il mio primo webcast in tema di ASP.NET. La cosa mi emoziona, un po' come se si trattasse del primo in assoluto. Il webcast a mio parere è di estremo interesse per chi sviluppa sul web, soprattutto per quelli che si occupano come me di Content Management System o magari della realizzazione di siti web con la pura e semplice piattaforma ASP.NET.

Si parlerà infatti di SEO, acronimo che come spiegherò si riferisce a quelle tecniche che servono a rendere le pagine di un sito web più appetibili per l'utente nascosto. Durante il webcast ci concentreremo con una serie di esempi su cosa bisogna fare, su siti erogati per mezzo di ASP.NET per ottenere i migliori risultati. Parleremo così di Url Rewriting, di Viewstate, di Meta tags, di Sitemap di Redirect di ASP.NET AJAX, e di altre cose del genere che toccano in qualche modo l'ambito della Search Engine Optimization. Il webcast sarà un po' meno denso dei precedenti. Ho scelto di ridurre le slide da 30 a 20 in modo da poter riservare più tempo a fare quattro chiacchiere con voi...

Accenneremo anche alle buzzword che ruotano attorno a questo "strano" settore, parlando di PageRank, di Doorway, di Cloacking, di Deceptive Redirects, ma già vi avverto che la mia attenzione si concentrerà molto più su ASP.NET piuttosto che sul SEO vero e proprio. Non sono un esperto di SEO, e il webcast si riferisce in massima parte ad una serie di esperienze che ho fatto negli ultimi mesi, ma se avete qualche domanda che esula da questo provate pure a pormela.

Iscrizioni e accesso: Tecniche di Search Engine Optimization con ASP.NET 2.0

Tempo di analisi... da dove partire?

Ci sono periodi ricorrenti nel mio lavoro, che di tanto in tanto si ripropongono presentando analoghe domande cui spesso si dimentica di aver già dato risposta precedentemente. Capita così che periodicamente si ripresenti la necessità di iniziare ex-novo un progetto, sul quale l'azienda ha deciso di investire del tempo, e con l'occasione ci si ritrovi nuovamente di fronte alla domanda: e adesso da dove cominciamo?

E' tempo di Analisi, e non mi riferisco a quella, abitudinaria, acquisita, normale, routinaria di tutti i giorni, quella che serve a precisare i dettagli che di volta in volta si rivelano e a smussarne gli angoli per trovare la giusta collocazione ai problemi, ma piuttosto a quella in cui ci si trova di fronte una montagna e si deve decidere da che parte prenderla per arrivare con successo in vetta.

Personalmente ritengo esista una sola strada per giungere al successo e tale strada comporta lo "sbriciolare" la montagna dapprima in macigni, poi in zolle, e così via fino alla pietruzza che rappresenta l'unità ultima analizzabile, l'atomo del problema, che si può facilmente comprendere in tutti i suoi aspetti e dare ad esso una soluzione certa. Questo consente di avere chiaro quale sia il dominio con cui si ha a che fare - le entità e gli attori che entrano in gioco - il creare un modello ad oggetti stabile che possa servire da base per tutte le componenti del sistema e a decidere poi quali parti approcciare prima e quali dopo con piena coscienza del problema che si sta affrontando e magari con un metodo iterativo che permetta di raffinare le varie parti un po' alla volta.

Non di rado mi capita di scontrarmi con approcci diversi, sbrigativi e un po' miopi. Purtroppo accade troppo spesso che il costo dell'analisi sia considerato superfluo, o comunque non remunerativo, e quindi invece che cercare di investire bene il poco tempo disponibile si cerchi di trovare delle scorciatoie che lasciano grandi margini di errore e di conseguenza penalizzano a lungo andare l'intero progetto. Così magari si dimentica che una visione globale di ciò che si deve realizzare consente di risparmiare tempo progettando le parti del software che dovranno essere riutilizzate, che definire i limiti di ogni singola componente impedisce di trovarsi a sviluppare due volte la stessa cosa. Così semplicemente si vede un "comignolo" che pare semplice da realizzare, o magari conveniente, e si decide di cominciare da quello dimenticando che di solito le case come i software si costruiscono a partire dalle fondamenta. Risultato di tutto ciò è un software che non ha architettura, un patchwork di microsoluzioni che fanno a pugni le une con le altre e che a lungo andare causano una crescente "entropia" che rende impossibile evolvere ulteriormente la soluzione.

Di software così ne ho visti molti, e non nego di aver commesso io stesso errori del genere in "giovinezza", ma la mia scelta ormai ricade invariabilmente sulla comprensione, sulla conoscenza del problema che solo una analisi ben fatta può fornire. E così ogni volta che ricomincio, di solito cerco di farlo con metodo e costanza, e se mi chiedono un consiglio quello che dico non è ne più ne meno di quello che sto scrivendo... ma poi ogni volta, qualcuno che vuole fare il furbo lo trovi... chissà perchè...

ASP.NET AJAX: Un tipo con i triggers

Il collega ha proposto un interessante esperimento che può essere molto utile a chi vuole approfondire come funzionano i trigger dell'UpdatePanel. Si tratta di un Trigger Javascript, cioè in grado di far scattare l'update di un UpdatePanel in risposta ad un qualunque evento Javascript. Già mi immagino la proliferazione dei callback che potrebbe derivare da un trigger del genere... callback per onmousemove, onmouseover, onblur, onchanged potrebbero essere fortemente negativi, ma come tutte le cose basta conoscere lo strumento per usarlo bene... mai pensato di poter fare l'update di un pannello la prima volta che ci sovrapponete il mouse? Con il trigger di Andrea si può... e anche bene...

Fonte: UpdatePanel e trigger su evento JavaScript - JSAsyncPostBackTrigger

Sulle Competenze Microsoft e sugli Esami

In azienda abbiamo deciso di arrivare quanto prima al livello di Certified Partner, perciò stamane durante una riunione abbiamo valutato gli atti necessari per il compimento della certificazione. Tra questi vi è il raggiungimento di una "competenza" e naturalmente abbiamo scelto tra quelle disponibili quella che più si avvicina all'ambito di lavoro del team. Il problema si è posto quando abbiamo elencato gli esami necessari per ottenere la competenza che comprende al suo interno lo sviluppo di portali, e soluzioni web. Tra gli esami che si riferiscono a questa competenza non ce n'è nemmeno uno che riguarda il web in senso stretto, mentre è presente un esame di Windows Forms.

Allora abbiamo provato una sorta di reverse engineer... cercando di capire quale è la competenza che possiamo raggiungere con gli esami che attualmente abbiamo superato. Parlando per me, è emerso che un esame prettamente ASP.NET oriented come il 70-315 (Developing and Implementing Web Applications with Microsoft Visual C# .NET and Microsoft Visual Studio .NET) è applicabile ad una competenza di tipo Mobility Solutions (Windows Mobile).

Non mi è mai stato del tutto chiaro come scegliere un esame, e come determinarne i benefici, ma devo dire che in questo caso la scelta è molto aleatoria. Che cos'ha a che fare l'esame in questione con il mondo Mobile? Io che l'ho fatto vi assicuro che non c'era una sola domanda che lo riguardasse, e oltrettutto vi dirò che sono l'ultima persona cui penserei come "preparato" per il Mobile...

Ma anche ammesso e non concesso che l'esame possa ricadere in questa categoria per qualche imperscrutabile motivo, la domanda seguante è: perchè questo esame non è incluso in una competenza spiccatamente web-oriented? A voi la risposta... se l'avete.

Windows è il sistema operativo più sicuro

Da una ricerca condotta da Symantec, è emerso che negli ultimi 6 mesi del 2006 Windows si è posizionato in vetta alla classisica dei sistemi operativi più sicuri. Il dato è stato calcolato sulla base del numero di vulnerabilità riscontrate e sul numero di giorni necessari per la loro soluzione. Nella classifica Windows ha superato Redhat Linux con 39 vulnerabilità contro 208 e con dei 21 giorni contro 58 per il tempo di rilascio delle patch. Al terzo posto si colloca Apple Mac OSX con solo 43 vulnerabilità ma con ben 66 giorni di attesa per le relative patch.

Fonte:

Technorati tags: , ,

WEBCAST: Ajax - Getting Started

Attenzione, fra poco inizia il primo webcast di Davide Vernole su ASP.NET AJAX 1.0. Si tratta del primo di una serie su Ajax erogata per conto dello usergroup XeDotNet... Assolutamente da non perdere

Ecco il riassunto degli argomenti

ASP.NET 2.0 AJAX: Getting Started

 22/03/2007 Davide Vernole (Microsoft ASP.NET MVP)

Abstract:  Il rilascio del framework ASP.NET 2.0 AJAX non può più farci indugiare. È venuto il momento di conoscerlo e di utilizzarlo per le nostre applicazioni. Questo webcast è il primo di una serie dedicate all’implementazione Microsoft di AJAX in cui, procedendo in una panoramica generale dall’installazione al suo primo utilizzo, introdurremo le funzionalità incluse in questo framework.

Condividere più PC senza Terminal Server

Vi è mai capitata l'esigenza di dover lavorare su diversi PC usando la medesima tastiera? Chi di voi ha a che fare con le sale adibite ai server come me di certo avrà avuto occasione di imbattersi in apparecchiature hardware che hanno proprio questo intento, spesso e volentieri integrate negli stessi armadi che ospitando svariati server non hanno lo spazio necessario per poter alloggiare anche altrettanti monitor, tastiere e mouse.

Il software che ho trovato non è in grado di sostituire queste apparecchiature, ma piuttosto è di aiuto se ad esempio avete a disposizione più computer, anche con sistema operativo diverso e necessitate di passare rapidamente dall'uno all'altro senza togliere le mani da mouse e tastiera per lavorare su un altra accoppiata.

Synergy è proprio in grado di fare questo. A me è servito per riuscire a comandare il lettore del DVD installato sul server a poco più di un metro di distanza dal tavolo presso cui lavoro di sera, senza costringermi ad alzarmi ogni volta che desideri avviare un film, metterlo in pausa o quant'altro...

Download: http://synergy2.sourceforge.net/

Fonte: Condividere più computer con un solo mouse e una tastiera!

Appunti di WPF: Un po di link utili

WPF/E vs DHTML vs Flash vs WPF performance test: Un test che mette a contronto le performance di DHTML, Flash, WPF e WPF/e con un benchmark. Il tentativo è interessante, ma secondo me ci sono alcuni dettagli che non lo rendono del tutto attendibile.  

Xaml Editor List: Una serie di link agli editor free per WPF e WPF/e

WPF/E Pad and Others Updated for the Feb CTP: Alcuni tool per WPF/e

Listening to DependencyProperty changes: Un esempio di uso delle Dependency Property che spiega il meccanismo dell'override.

Fun Controls Bag - 9 new WPF Controls on CodePlex Una collezione di 9 controlli per WPF scaricabili da Codeplex