di .NET e di altre amenità

Appunti di WPF: Performance whitepaper

Kiran Kumar ha rilascito la versione draft di un importante documento che si propone come una whitepaper sulle performances di Windows Presentation Foundation. Il documento è di importanza estrema per chi intenda ottenere delle prestazioni decenti dalle applicazioni sviluppate su questa piattaforma.

Link: WPF Performance Whitepaper

Appunti di WPF: Posizionare elementi creati con il DataBinding

Il DataBinding in Windows Presentation Foundation da molte possibilità che un tempo richiedevano la realizzazione di controlli appositamente ideati. Ad esempio volendo posizionare degli elementi creati a partire da una collection che ne contenga le coordinate, ci può venire in aiuto il controllo che fa da base alla normale ListBox. Mi riferisco a ItemsControl, che può essere personalizzato facilmente a questo scopo. Ecco un esempio di codice XAML:

<Window x:Class="WindowsApplication1.Window3"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:domain="clr-namespace:WindowsApplication1"
    Title="WindowsApplication1" Height="300" Width="300">
  <Window.Resources>
    <DataTemplate x:Key="template">
      <Ellipse Width="20" Height="20" Fill="Blue" />
    </DataTemplate>
  </Window.Resources>
  <Window.DataContext>
    <domain:Class1 />
  </Window.DataContext>
  <ItemsControl ItemTemplate="{StaticResource template}" ItemsSource="{Binding Path=Items}">
    <ItemsControl.ItemContainerStyle>
      <Style>
        <Setter Property="Canvas.Top" Value="{Binding Path=Y}" />
        <Setter Property="Canvas.Left" Value="{Binding Path=X}" />
      </Style>
    </ItemsControl.ItemContainerStyle>
    <ItemsControl.ItemsPanel>
      <ItemsPanelTemplate>
        <Canvas Background="Red" IsItemsHost="True" />
      </ItemsPanelTemplate>
    </ItemsControl.ItemsPanel>
  </ItemsControl>
</Window>

Il controllo è stato configurato per fare in modo che il suo Panel principale sia creato di tipo Canvas cioè il controllo di Layout che in WPF consente il posizionamento assoluto dei suoi controlli figlio. Inoltre ad ogni elemento creato, in accordo con quanto descritto dal DataTemplate viene impostato uno style che posiziona l'elemento alle giuste coordinate. Eseguendo il codice si otterranno dei pallini posizionati in accordo con le coordinate espresse dalla fonte dati.

Healthcare Prototype

Avrete spesso visto quell'immagine che mostra una rappresentazione di cartella clinica realizzata con WPF. In questi giorni è stato pubblicato il codice sorgente al seguente indirizzo:

http://wpf.netfx3.com/files/folders/applications/entry6608.aspx

Domani in ufficio lo scarico, mi sa che c'è molto da imparare.

Appunti di WPF: Posizionare elementi creati con il DataBinding

<Window x:Class="WindowsApplication1.Window3"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:domain="clr-namespace:WindowsApplication1"
Title="WindowsApplication1" Height="300" Width="300">
<Window.Resources>
<DataTemplate x:Key="template">
<Ellipse Width="20" Height="20" Fill="Blue" />
</DataTemplate>
</Window.Resources>
<Window.DataContext>
<domain:Class1 />
</Window.DataContext>
<ItemsControl ItemTemplate="{StaticResource template}" ItemsSource="{Binding Path=Items}">
<ItemsControl.ItemContainerStyle>
<Style>
<Setter Property="Canvas.Top" Value="{Binding Path=Y}" />
<Setter Property="Canvas.Left" Value="{Binding Path=X}" />
</Style>
</ItemsControl.ItemContainerStyle>
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Canvas Background="Red" IsItemsHost="True" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
</Window>

Subtext 1.9.2

Devo davvero fare i complimenti ai ragazzi di Subtext perchè nella ultima versione hanno introdotto alcune feature che ritengo ormai indispensabili. Mi riferisco in particolare al supporto per askimet che consiglio a tutti di provare dato che da solo è in grado di eliminare il 99% dello spamming. Da quando ho installato la nuova versione - tra l'altro la procedura è molto semplice - finalmente mi sono liberato delle tonnellate di messaggi giornalieri che mi stavano assillando. Inoltre mi è piaciuta molto l'implementazione pressoche geniale dell' che a mio parere andrebbe rilasciato come componente riutilizzabile oltre che come parte dell'engine.

Technorati tags: , ,

Ms Dewey

Date uno sguardo a come potrebbe apparire un motore di ricerca nel prossimo futuro... (almeno spero :-D). I risultati più curiosi si ottengono cercando per Janina Gavankar che altri non è che l'attrice che ha dato le proprie fattezze a Ms Dewey.

Link: http://www.msdewey.com/

Windows Desktop Search 3.0 RTW

E' stato rilasciata la versione 3.0 di Windows Desktop Seach. Disponibili oltre alla versine per XP anche quele per Windows 2003 e quelle per le macchine a 64bit.

Link:

Technorati tags: ,

Il punto sul concorso

Vi confesso che sono un po' "smontato", per non usare un termine veneto che suona molto simile ma che rende meglio l'idea. E il motivo dei questo sentimento è presto detto. Ad un mese esatto dal termine del concorso di xedotnet, i partecipanti sono davvero scarsi. Probabilmente, quando io e abbiamo preparato questo avvenimento eravamo un po' ottimisti tanto da arruolare ben 5 persone nella giuria, certi che ci sarebbe stato lavoro per tutti, ma dall'ottimismo sfrenato a questa triste constatazione c'è un abisso che in pochi avrebbero potuto prevedere.  Io amo scrivere, lo faccio nel blog (anche se ultimamente ho ben poco tempo), scrivo articoli divulgativi e il più delle volte lo faccio senza alcun compenso per il semplice fatto che trovo questa attività soddisfacente di per se. Certo, non mi sarei aspettato una totale abnegazione del nostro pubblico, ma davvero voltare le spalle in questo modo ad un premio che aldilà del valore puramente economico ha sicuramente un valore in termini di conoscenza enorme, mi sembra un vero peccato. Mi sono interrogato spesso sui motivi che possono causare tale spreco. Sostanzialmente credo che ci siano tre possibili spiegazioni. La prima e più ovvia è la carenza di tempo, però non ci credo molto. Di fronte ad un premio di tale entità, l'investire una o due serate nell'arco di un paio di mesi mi sembra una vera bazzecola. Il secondo motivo, più subdolo è che i lettori non si ritengano all'altezza e perciò rinuncino a scrivere dandosi comunque per spacciati. Anche in questo caso la motivazione è labile perchè ho più volte ripetuto che per avere la possibilità di vincere non occorre  scrivere dei trattati, ma basta impegnarsi con tip di poche righe che il più delle volte sono infinitamente più utili di chilometrici articoli e sono certo che di questi tips è colma la vita di chiunque faccia il nostro lavoro. Il terzo motivo, che spero sia in assoluto il meno probabile è che la visibilità che è data da un sito come il nostro probabilmente è minima rispetto ad altre realtà di più lunga strada. Certo se fosse così probabilmente ci sarebbe sul serio da essere "smontati" perchè non avremmo alcuna speranza di emergere e di rendere utile a qualcuno quanto scriviamo e pubblichiamo, ma voglio credere che questo sia esclusivamente frutto della mia immaginazione. Anche perchè ultimamente il trend degli accessi al sito, grazie alla continua promozione che ci viene da Microsoft, smentiscono chi la pensa in questo modo.

Manca però ancora un mese, e spero di essere smentito, ma comunque non mi abbatto...

Appunti di WPF: KaXaml

Ecco un ottimo editor XAML da sostituire a XamlPad. L'editor oltre ad avere un aspetto piacevole funziona davvero bene. E' dotato tra le altre cose di una libreria di Snippet utili per evitare di riscrivere sempre le stesse cose. 

Link: KaXaml

Technorati tags: , ,

Reporting Services Primer

Ve lo confesso. La questione reports non ha mai avuto una grande considerazione da parte mia. Ho sempre ritenuto la cosa un aspetto scarsamente creativo del mio lavoro e non mi sono mai impegnato abbastanza nel capirli. Tuttavia da quando ho supportato Andrea nello studio della materia per dotare l'applicazione che stiamo sviluppando di questo strumento, ho apprezzato la concretezza e la flessibilità di Reporting Services assieme alla sua notevole complessita. E' per questo che ho pensato che l'argomento fosse adatto ad un meeting e ho invitato Davide Senatore e Andrea Dottor a cimentarsi nella spiegazione. Davide conosce molto bene Reporting Services e quindi ci darà una infarinatura generale mostrandocene l'uso consueto, quello per intenderci che per la maggior parte delle volte dovremo affrontare. Andrea e io invece vi parleremo dell'uso inconsueto, derivante dall'esperienza che abbiamo fatto assieme negli ultimi mesi. Il meeting avrà dei tempi diversi dagli ultimi. Ci siamo resi conto che l'ora tarda tende a soffocare la discussione. Perciò abbiamo deciso di abbreviare un po' le sessioni e di lasciare quindi più spazio ad una sessione finale di domande e risposte che spero densa di partecipazione.Vi aspettiamo numerosi.

Agenda e iscrizioni: http://www.xedotnet.org/nextmeeting.aspx

Appunti di WPF: Gestire il layout

Diversamente da quanto avveniva con le vecchie WindowsForm, XAML consente un controllo molto più raffinato del layout del contenuto di una Window. Alcune librerie di terze parti, come ad esempio le SyncFusion avevano cercato di introdurre delle logiche di disposizione dei contenuti diverse dal posizionamento assoluto, ma la maggior parte delle volte si era costretti a combattere con Dock e Anchor per cercare di disporre i controlli in modo che mantenessero un aspetto coerente durante il ridimensionamento. XAML introduce una logica basata su Panel. Un Panel è una zona che suddivide un'area in diverse porzioni secondo una logica specifica del Panel stesso. Esistono diverse tipologie di Panel che applicano ognuno un diverso tipo di logica:

StackPanel: consente di disporre il contenuto in una riga orizzontale o verticale

DockPanel: dispone i controlli secondo una logica analoga a quella della proprietà Dock di WindowsForms

WrapPanel: dispone i controlli l'uno a fianco all'altro andando a capo quando una riga viene riempita

Grid: consente di disporre i controlli con una logica tabulare in modo analogo al GridBagLayout di Java

Canvas: consente di specificare la posizione dei controlli mediante coordinate assolute

Ognuno di questi Panel che ho appena descritto richiederebbe un post dedicato per spiegarne bene le caratteristiche, tanta è la loro flessibilità. Per ora ci invito a considerare la bellezza di questo tipo di approccio che permette di annidare i pannelli l'uno nell'altro in modo pressochè illimitato. A scelta quindi si potrà inserire un DockPanel in uno StackPanel, e al suo interno inserire una Grid. Naturalmente si tratta di un esempio come molti se ne potrebbero fare, ma in realtà la libertà è massima. I pannelli così disposti si adatteranno autonomamente alle dimensioni della Window causando il ridimensionamento di tutto il contenuto.

Il cocktail dello sviluppatore

Mi sono spesso chiesto cosa ci voglia per fare un buon professionista nel campo dell'informatica. La domanda non è oziosa perchè a chiedersi dove si può migliorare c'è sempre da imparare. Tempo fa qualcuno ha scritto una frase del tipo: 

Stamane, parlando con un amico a proposito di come può scattare una bella fotografia, mi è venuto in mente questo post proprio quando me ne sono uscito con il seguente concetto: puoi avere la più bella macchina fotografica, conoscere a menadito la tecnica, ma se non la usi con creatività non ti serve a nulla. Questo, che a mio parere si applica perfettamente anche nel campo dell'ingegneria del software, pone un ulteriore strato nella comprensione di cosa voglia dire essere un buon professionista.

E' chiaro che queste componenti, la disponibilità di strumenti, la conoscenza e quello che io chiamo il pensiero creativo debbono coesistere, ma mi chiedo quali siano le "dosi" per comporre questo saporito cocktail. Per me sono queste:

  • 1 parte di conoscenza
  • 1 parte di strumenti
  • 2 parti di rigore
  • 3 parti di pensiero creativo

Personalmente deputo una scarsa importanza alla conoscenza, non in senso assoluto, ma soprattutto nel rapporto con le altre componenti. Io mi sono spesso trovato a raggiungere la conoscenza quando se ne sia presentata la necessità, emersa spesso dall'applicazione del pensiero creativo. Certo, sapere cosa ci aspetta, cosa la tecnologia ci proporrà nel futuro è utile, ma forse stare addosso a tutte le beta del mondo non è proprio la cosa più utile di questo mondo. Lo stesso vale per gli strumenti. Come tali sono utili, ma occorre sapere come e soprattutto quando usarli per trarne vantaggio.

Rimangono il rigore e il pensiero creativo. Due componenti che possono sembrare in contrasto tra loro, ma che in realtà io ritengo semplicemente l'una l'espressione dell'altra. Mi chiedo come la pensiate voi...