Technology Experience

Contenuti gestiti da Igor Damiani
posts - 949, comments - 2741, trackbacks - 15120

My Links

News

  • Questo blog si propone di raccogliere riflessioni, teoriche e pratiche, su tutto quello che riguarda il world-computing che mi sta attorno: programmazione in .NET, software attuale e futuro, notizie provenienti dal web, tecnologia in generale, open-source.

    L'idea è quella di lasciare una sorta di patrimonio personale, una raccolta di idee che un giorno potrebbe farmi sorridere, al pensiero di dov'ero e cosa stavo facendo.

    10/05/2005,
    Milano

Archives

Post Categories

Generale

Sviluppo .NET

Tip di programmazione, add-on di terze parti, esempi pratici tratti dai casi reali su cui lavoro, data-binding con .NET 2.0, script MSBuild, WinFX
Un nuovo plugin per WLW: pubblicazione di immagini

Mi sono dato alla creazione di un altro plugin per Windows Live Writer. Mi capita spesso di creare post il cui scopo è avere solo link a n immagini che vado preventivamente ad uploadare sul mio sito www.igordamiani.it. Per esempio, date un'occhiata al post relativo all'ultimo workshop. Quali sono le caratteristiche che saltano all'occhio?E' presto detto... C'è un breve commento all'inizio C'è un'immagine o una fotografia visibile direttamente nel post Ci sono una serie di n link, che puntano direttamente a n immagini JPG uploadate sul sito Come dicevo, mi capita spesso di scrivere post di questo tipo e...

posted @ martedì 17 aprile 2007 23:16 | Feedback (2) | Filed Under [ Sviluppo .NET ]

Ok, vada per l'hourglass, ma ci sono altri cursori?

Nel pot di prima, abbiamo visto come mostrare l'icona della clessidra sul display del palmare, nel caso in cui dobbiamo comunicare all'utente che l'applicazione sta facendo qualcosa che dura un po' di tempo. Nel codice abbiamo utilizzato una costante intera valorizzata a 32514, 0x7F02. Posso farlo?Quali altre icone abbiamo a disposizione?Che valori devo utilizzare per poterle visualizzare sullo schermo? La soluzione più rapida consiste nell'installarsi in locale sul proprio PC il Microsoft Platform Builder 5.0, per gli amici il Windows Mobile 5.0 Pocket PC SDK, che contiene tutte le informazioni necessarie allo sviluppo su mobile. Tale documentazione contiene anche info...

posted @ mercoledì 11 aprile 2007 17:12 | Feedback (2) | Filed Under [ Sviluppo .NET ]

Mostrare un Hourglass sul palmare con il Compact Framework

Se il software che state sviluppando per un dispositivo mobile compie un'operazione lunga, potete mostrare sullo schermo una clessidra - l'Hourglass dell'oggetto di questo post. Con Windows Mobile 5.0, questa clessidra in realtà è un piccolo cerchio centrato sullo schermo, diviso in 4 settori colorati (rosso/giallo/blu/verde). Ovviamente tale clessidra non è modale, perciò il vostro codice prosegue l'esecuzione fino a quando non siete voi a decidere che la clessidra non è più necessaria. Un'altra piccola precisazione: su palmari non avete il concetto di puntatore del mouse, perciò non potete fare quello che è possibile con il .NET Framework standard, ovvero...

posted @ mercoledì 11 aprile 2007 13:08 | Feedback (7) | Filed Under [ Sviluppo .NET ]

Download aggiornato per il VivendoByte Emoticons plug-in

Molti, molti mesi fa qualcuno di UGI mi aveva segnalato un problema sul mio plug-in in WPF per Windows Live Writer. Avevo realizzato un piccolo batch che copiava le immagini dalla directory di installazione alla directory dove poi il plug-in si aspettava di trovarle. Il fatto era che il batch le copiava in un posto, e poi il plug-in le cercava in un altro e quindi veniva sollevata un'exception: questo mi pare di ricordare che succedesse solo su un OS non localizzato in italiano, ma non ricordo bene 'sta cosa. L'amico di UGI che mi aveva segnalato la cosa non si...

posted @ sabato 7 aprile 2007 20:27 | Feedback (0) | Filed Under [ Sviluppo .NET ]

Connettere l'emulatore Pocket PC via ActiveSync

Avrete capito dagli ultimi post che ho scritto che attualmente mi occupo dello sviluppo su dispositivi mobile, Pocket PC 2003 e Windows Mobile: questo vuol dire finalmente tanto .NET e C#, sfruttando il Compact Framework con tutti gli annessi e connessi. La cosa più affascinante è sentir parlare di classi astratte, di metodi factory e di tutti concetti che nell'azienda dove ero prima semplicemente mi sognavo. :-) Oggi ho cominciato ad ingranare sul serio. E' difficile inserirsi in un progetto già in fase di sviluppo, mi devo ritagliare il mio spazio, e soprattutto inserirmi nel team che definire vulcanico è...

posted @ venerdì 6 aprile 2007 10:24 | Feedback (3) | Filed Under [ Sviluppo .NET ]

Zip/Unzip con il compact framework?

Anche se fate fatica a trovare qualcosa per manipolare i files zip con il Compact Framework, sappiate che qualcosa c'è. Innanzitutto trovate le Xceed Zip for .NET CF, ma sono a pagamento, e costano la bellezza di 499,95 dollari. L'elenco delle caratteristiche è certamente interessante, ma se avete bisogno di qualcosa di più semplice (e gratuito) potete ricorrere alla libreria SharpZipLib. Essa è disponibile sotto la licenza GPL. L'ho provata in questi giorni per applicarla al progetto su cui sto lavorando. Siccome ho avuto qualche problemino, voglio segnalarlo anche a voi per evitare di perdere troppo tempo come è capitato...

posted @ mercoledì 4 aprile 2007 23:24 | Feedback (3) | Filed Under [ Sviluppo .NET ]

Bitmap vettoriali sulle Window

Con WPF tutto deve (può?) essere scalabile. Basta usare le bitmap, quindi, perchè se ridimensioniamo una Window, l'immagine viene ingrandita a sua volta e potrebbe sgranare in modo spiacevole. L'ideale è quindi usare icone ed immagini vettoriali, che possano scalare in modo naturale. Il sito grafile.com mette a disposizione (a pagamento, e secondo me sono anche piuttosto cari) diverse collection di icone vettoriali, suddivise per argomenti (business, character, control, icon, database, documentation, file & folder, network...insomma, le solite cose). Dicevo...mi sembrano un po' cari, perchè far pagare 72 dollari un pacchetto con 56 icone mi sembra un po' esagerato. Il resto...

posted @ lunedì 26 marzo 2007 19:01 | Feedback (2) | Filed Under [ Sviluppo .NET ]

Le mie (personali) linee-guida per il layout con WPF

WPF è un framework dalle innumerevoli caratteristiche che possono lasciare - credo - disorientato il neofita. Al di là di tante squisitezza tecnologiche, la cosa che mi ha fatto fatto più perdere tempo è l' auto-layout, ovvero la capacità di WPF di dimensionare e di posizionare i controlli sulle Windows o sulle Page in modo completamente automatico, seguendo logiche che probabilmente sono più vicine alla creazione delle pagine Web. L'auto-layout permette innanzitutto di creare interfacce utente indipendenti dalla risoluzione. Scordatevi quindi di trascinare controlli dalla ToolBox sulla Window e di posizionarli dove e come volete voi. In realtà, potete farlo...

posted @ lunedì 26 marzo 2007 18:40 | Feedback (2) | Filed Under [ Sviluppo .NET ]

Il TabControl di WPF

Uno dei controlli che Petzold non cita nel suo libro è il TabControl, al punto che pensavo che non fosse compreso tra i controlli nativi di WPF. Ieri, sfogliando MSDN a piacimento, ho raggiunto il namespace System.Windows.Controls e mi capita sottomano proprio la classe TabControl. Quando mi capita di vedere una classe che non sapevo esistesse, mi diverto sempre a guardare la Inheritance Hierarchy, perchè vedendo da cosa deriva una determinata classe si possono intuire caratteristiche o capacità ereditate da altri. In questo caso specifico, ho notato che TabControl eredita anche da ItemsControl, così come la ListBox, i menù, la StatusBar...

posted @ venerdì 23 marzo 2007 12:15 | Feedback (0) | Filed Under [ Sviluppo .NET ]

Un domain model per lavorare con WPF e NHibernate

Da quando ho scoperto NHibernate, ormai più di un anno fa, ho sempre disegnato il mio domain-model in modo tale che far persistere le mie entità con questo framework fosse il più naturale possibile. Dal punto di vista pratico, ciò significa che tutte le entità del domain-model derivino tutte da una classe astratta Entity, che definisce una sola proprietà ID di tipo int. public abstract class Entity { public int ID { get { return _id; } set { _id...

posted @ lunedì 19 marzo 2007 13:54 | Feedback (11) | Filed Under [ Sviluppo .NET ]

Ma...scusate...cos'è se non una semplice ListBox?

Le potenzialità di WPF sono sorprendenti. Ci stavo ragionando oggi, riguardando un attimo il mio VivendoByteEmoticons, il plug-in per Windows Live Writer. Stavo ripensando a come poter ottimizzare determinati aspetti, in termini di consumo di memoria, velocità di esecuzione e quant'altro. Immaginate il seguente scenario: Immaginate un container di qualche tipo, che contiene un certo numero di child elencati al suo interno.Immaginate che l'utente possa selezionare uno solo dei child. Questo è concettualmente quello che accade adesso nel mio plug-in. Il container è un WrapPanel, mentre i child sono un insieme di FolderButton ed EmoticonButton a seconda di quello che...

posted @ venerdì 9 marzo 2007 18:14 | Feedback (0) | Filed Under [ Sviluppo .NET ]

Optimizing WPF Application Performance

C'è una bella pagina su MSDN che mi ha fatto drizzare le orecchie. Dicevo l'altro giorno che non sono uno che va matto per ottenere le prestazioni migliori, ma l'articolo in questione, intitolato per l'appunto Optimizing WPF Application Performance, va un po' oltre quello che dice. Sono 16 pagine stampate che ho trovato davvero succulente. Si parla di come gli oggetti di WPF possano rimanere vivi (alive) anche quando si crede che non sia così oppure cosa comporta utilizzare un oggetto Frozen oppure no (vi rimando per questo alla stessa pagina riportata dall'articolo, cioè questa, intitolata Freezable Objects Overview). O...

posted @ mercoledì 7 marzo 2007 14:53 | Feedback (0) | Filed Under [ Sviluppo .NET ]

Creare una custom class in XAML che eredita da Button

Prima di ogni altra cosa, lo XAML viene utilizzato per definire Window o Page. All'interno di ciascuna Window o di ciascuna Page il più delle volte inseriamo un Panel - in una delle sue possibili forme - e via via tutti i relativi UIElement, figli del Panel, che comporanno l'aspetto della finestra o della pagina. Nulla di strano, in questo. Lo XAML può essere utilizzato anche per definire classi custom, derivandole da una classe UIElement già esistente, come per esempio Button. Quando in passato nei miei post ho parlato delle classi FolderButton o EmoticonButton non ho fatto altro che fare proprio quello...

posted @ martedì 6 marzo 2007 18:58 | Feedback (0) | Filed Under [ Sviluppo .NET ]

Codice sorgente del libro di Petzold

Nel mio post di recensione del libro di un certo Charles Petzold segnalavo la mancanza di un CD/DVD in allegato con il codice sorgente relativo al libro. Vabbè che siamo sviluppatori, ma mi dà fastidio ricopiare manualmente il codice che leggo dalle pagine nel mio Visual Studio 2005, perchè preferisco inventarmelo io e provare qualcosa che mi interessa più da vicino. Ciò nonostante, alcune volte ho dovuto farlo, vuoi perchè l'autore creava un controllo interessante, vuoi perchè magari c'era un pezzo di codice che potevo riutilizzare da qualche altra parte, etc. Risultato? Mi sono annoiato, anche perchè in alcuni casi il...

posted @ venerdì 2 marzo 2007 12:39 | Feedback (3) | Filed Under [ Sviluppo .NET ]

Definire gli stili in XAML nel posto giusto...

L'altra sera, lavorando sul mio plug-in, mi sono posto una questione. Supponiamo di avere uno stile definito nello XAML nel modo seguente: <Button x:Class="VivendoByte.Emoticons.EmoticonButton" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Margin="2"> <Button.Resources> <Style x:Key="normal"> <Setter Property="Image.Margin" Value="8"/> <Style.Triggers> <Trigger Property="Image.IsMouseOver" Value="True"> <Setter Property="Image.Margin" Value="2"/> </Trigger> </Style.Triggers> </Style> </Button.Resources> <Image Name="imgEmoticon" Style="{StaticResource...

posted @ mercoledì 28 febbraio 2007 19:08 | Feedback (1) | Filed Under [ Sviluppo .NET ]

Il SelectedItem di un WrapPanel: si può?

Leggendo il forum di cui parlavo ieri, ho notato una domanda ed una risposta che non mi hanno convinto. Dopo questo post sul mio blog, probabilmente risponderò anche sul forum, giusto per capire se ho capito bene oppure no. La domanda fondamentale è: come posso ottenere l'elemento selezionato all'interno di un WrapPanel? La prima risposta, cito testualmente, è: A WrapPanel does not implement the concept of a currently selected item. Mi permetto di non essere completamente d'accordo. Il discorso è questo: è senz'altro vero che ci sono controlli più adatti che implementano internamente il concetto di selected item, ma è altrettanto vero...

posted @ venerdì 23 febbraio 2007 13:38 | Feedback (1) | Filed Under [ Sviluppo .NET ]

Migliorie qua e là alla Window ChooseEmoticon

Ho dato qualche ritocco alla Window ChooseEmoticon del mio plug-in. Innanzitutto, il WrapPanel che contiene le emoticons è contenuto a sua volta in uno ScrollViewer che, se necessario, mostra una barra di scorrimento verticale. <ScrollViewer Grid.Column="0" Grid.Row="1" VerticalScrollBarVisibility="Visible"> <WrapPanel DataContext="barSize" Name="MainPanel"> <WrapPanel.ItemWidth> <Binding ElementName="barSize" Path="Value" Mode="TwoWay"/> </WrapPanel.ItemWidth> <WrapPanel.ItemHeight> <Binding ElementName="barSize" Path="Value" Mode="TwoWay"/> </WrapPanel.ItemHeight> </WrapPanel> </ScrollViewer> Questo non vi obbliga più a ridimensionare la finestra per vedere tutte le emoticons. Potete agire sulla ScrollBar verticale o potete ridimensionare, come siete più comodi. Ho attivato inoltre un piccolo meccanismo di data-binding. Ho bindato il controllo WrapPanel all'oggetto barSize e ho...

posted @ giovedì 22 febbraio 2007 18:26 | Feedback (0) | Filed Under [ Sviluppo .NET ]

Un forum MSDN su WPF

Non è ovviamente una novità, ma volevo segnalarlo comunque. Quando devo consultare forum di natura Microsoft, utilizzo Outlook Express con un account Newsgroup che punta a msnews.microsoft.com. Da questo server però non è disponibile alcun forum che tratta di Presentation Foundation, e questo mi è dispiaciuto abbastanza: c'è solo un newsgroup chiamato microsoft.public.windows.developer.winfx.avalon, che è piuttosto frequentato, ma il nome mi sa di antiquato. Nonostante questo, mi sono sottoscritto ed ogni tanto gli do una lettura, perchè così si rimane on-the-road e si leggono problemi & soluzioni su WPF. Dalla pagina principale dei forum di MSDN è raggiungibile questo secondo...

posted @ giovedì 22 febbraio 2007 11:55 | Feedback (0) | Filed Under [ Sviluppo .NET ]

Filtrare gli AppointmentItem di Outlook con un criterio

Un piccolo tip che può magari servire anche a voi. Poco tempo vi ho parlato del mio RapportinoMaker, che unisce le funzionalità di Windows Mobile, Microsoft Excel Microsoft Outlook, un po' di C#, NHibernate e via dicendo. Arrivo al dunque. Mi serviva connettermi ad Outlook per contare le giornate lavorative all'interno di un determinato mese. Una giornata lavorativa è riconoscibile dall'oggetto dell'appuntamento. Ecco un pezzetto di codice per aprire Outlook ed ottenere un riferimento alla cartella del calendario: Application outlookApp = new Application(); NameSpace outlookNS = outlookApp.GetNamespace("MAPI"); MAPIFolder theCalendar = outlookNS.GetDefaultFolder(OlDefaultFolders.olFolderCalendar); Detto questo, posso ottenere un riferimento agli appuntamenti inseriti nel calendario...

posted @ lunedì 19 febbraio 2007 22:58 | Feedback (0) | Filed Under [ Sviluppo .NET ]

Popolare un menu con i membri di un enum

Pochi minuti fa ho dovuto popolare un menù su una Windows Form con i membri dell'enum MdiLayout. La WF è ovviamente una form MDI Parent, che può hostare al suo interno tante child. Il menù permette all'utente di riposizionare (layout) le form child secondo le 4 tradizionali modalità (Cascade, Tile Horizontal, Tile Vertical e Arrange Icons). Possiamo creare a mano i ToolStripMenuItem attraverso il designer, oppure possiamo andare via Reflection per ottenere i membri e creare le voci di menù dinamicamente, sfruttando nel contempo la proprietà Tag per mantenere il riferimento al membro MdiLayout corrispondente. In codice C# il tutto...

posted @ lunedì 19 febbraio 2007 17:17 | Feedback (0) | Filed Under [ Sviluppo .NET ]

Qualche precisazione sul pack:// di ieri

Ieri ho postato qualcosa sulla nomenclatura pack:// disponibile con il FW3.0. Effettivamente sono stato un po' superficiale, e ringrazio quindi sia i due illustri Raffaele che Corrado per avermi corretto. Mi sono appena letto la pagina Pack URIs in Windows Presentation Foundation, inclusa nel Windows SDK. Questa volta lascio che sia l'SDK a parlare per me, riportando questa frase: The concept of packages and parts is analogous to applications and application data files, where an application (package) can include one or more application data files (parts), including: Resource files that are compiled into the local assembly Resource...

posted @ mercoledì 7 febbraio 2007 18:07 | Feedback (0) | Filed Under [ Sviluppo .NET ]

Alcune note sulla notazione pack:// di WPF

Causa malattia, sono a casa a leggermi il super-librone di Petzold su Presentation Foundation. Ho completato la prima parte pure C# e mi sono appena inoltrato nella seconda XAML-oriented. Fa spesso uso della nuova notazione pack:// per fare riferimento a risorse dell'applicazione. Ci sono delle avvertenze ad usare questa notazione, che voglio evidenziare in questo post. Dunque, supponiamo di aver creato un nuovo progetto Windows Application (WPF). Il template per questo tipo di progetto comprende essenzialmente due files soltanto: App.xaml e Window1.xaml. Quest'ultimo file è una Window a tutti gli effetti. Editiamo il suo costruttore: per raggiungerlo dobbiamo espandere la TreeView...

posted @ martedì 6 febbraio 2007 20:32 | Feedback (4) | Filed Under [ Sviluppo .NET ]

Gli assembly da referenziare in un progetto WPF

Quando installiamo sul PC il "Visual Studio 2005 extensions for .NET Framework 3.0 (WCF & WPF), November 2006 CTP", in Visual Studio 2005 (come è ben noto) abbiamo a disposizione un nuovo set di progetti, tra cui Windows Application (WPF). Questo tipo di progetto ci dà lo scheletro con cui costruire le applicazioni WPF, esattamente come accade con tutti gli altri tipi di progetto. Questo progetto referenzia un certo numero di assemblies. Parte di questi sono del Framework 2.0, altri del 3.0.Vediamo quali sono nel dettaglio, elencati così come li elenca in questo momento Visual Studio 2005. PresentationCorePresentationFrameworkReachFrameworkSystemSystem.DataSystem.IdentityModelSystem.PrintingSystem.Runtime.SerializationSystem.ServiceModelSystem.XmlUIAutomationProviderUIAutomationTypesWindowsBase Quelli evidenziati in...

posted @ venerdì 26 gennaio 2007 18:13 | Feedback (0) | Filed Under [ Sviluppo .NET ]

Accedere alle KB nella lingua corretta

Stamattina in metro stavo leggendo sull'MSDN Magazine (cartaceo, inglese) di Gennaio 2007 l'articolo di Brian A.Randell intitolato "Team Foundation Server Version Control". Ad un certo punto si fa riferimento all'url http://support.microsoft.com/kb/306149. Provate a cliccarci sopra: a me qui al lavoro mi apre la pagina in lingua italiana! Trucchetto.Accodate all'url sopra /en-us. Leggerete la pagina in lingua inglese.Accodate all'url sopra /fr-fr. Leggerete la pagina in lingua francese.Accodate all'url soprs /zh-tw. Leggerete la pagina in cinese tradizionale. :-) Indipendentemente dalla localizzazione che viene forzata, quindi, potete comunque risalire alla versione in lingua originale. Le lingue disponibili sono quelle che si vedono nella...

posted @ martedì 9 gennaio 2007 18:41 | Feedback (2) | Filed Under [ Sviluppo .NET ]

Appunti sulla classe ContentControl di WPF

Una delle cose che saltano più all'occhio quando si vede - anche da semplice utente - Windows Presentation Foundation all'opera, è il fatto che i controlli come il Button non vengono più renderizzati sulla UI con una semplice caption, una stringa insomma, ma in modo radicalmente diverso. Affinchè un controllo possa renderizzare un qualcosa, è necessario che questo qualcosa derivi dalla classe ContentControl del Framework 2.0. Gran parte dei controlli che utilizziamo tutti i giorni derivano proprio da questa classe, come ListBox, CheckBox e, magia delle magie, anche Window. Questo vuol dire che d'ora in poi, con WPF almeno, un Button...

posted @ venerdì 5 gennaio 2007 15:53 | Feedback (1) | Filed Under [ Sviluppo .NET ]

Accedere al GPS con Windows Mobile 5.0

Non dico certo una novità se affermo che secondo me il mercato del software per palmare è ben lungi dall'essere saturo. Ho googlato molte volte in passato per vedere se ci fossero software particolarmente accattivanti, ma sono sempre rimasto deluso. A parte Agenda Fusion, di cui mi sono preso una licenza, in giro c'è davvero poco: i soliti PIM, qualche convertitore di valute, software che non capisci se vanno davvero oppure no. Eppure - e lo dico anche a me - da quando il codice managed può girare anche su Windows Mobile, è molto più accessibile produrre qualcosa: basta solo...

posted @ giovedì 14 dicembre 2006 17:11 | Feedback (3) | Filed Under [ Sviluppo .NET ]

Una utility per documentare le references di ogni project di una solution

Ho cercato e ho chiesto in giro se esistesse una piccola utility da riga di comando che - data una solution di Visual Studio 2005 - mi elencasse tutti i progetti contenuti ed i riferimenti per ciascuno dei progetti. Chi ho interpellato non ne sapeva nulla, per cui mi sono messo a scriverla. Circa 2-3 orette di lavoro, ieri sera, per tirar fuori un tool ListRef.exe, che manda sullo schermo in output una cosa simile. Perchè a riga di comando? Sono uno sviluppatore: più un'utility è veloce e pratica, meglio è Poca interazione: dal prompt digito ListRef HappySign.sln e mi viene...

posted @ giovedì 30 novembre 2006 18:41 | Feedback (2) | Filed Under [ Sviluppo .NET ]

Deploy del .NET Framework 3.0

E' un articolo di giugno 2006, però ritengo che possa essere utile, perchè contiene alcune informazioni utili sul deploy del FW3.0. Per esempio, per capire se è installato il FW3.0, è sufficiente leggere la seguente chiave di registro: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.0\Setup\InstallSuccess (che deve valere 1) Comodo se si stanno facendo setup di applicazioni e bisogna capire se il sistema è aggiornato oppure no. Inoltre, ci sono tutte le opzioni che possiamo fornire a riga di comando per installare il FW3.0 in modo più o meno silente (/quiet), sopprimendo completamente le interazioni con l'utente e così via. Source : http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnlong/html/netfx30.asp

posted @ giovedì 30 novembre 2006 10:29 | Feedback (1) | Filed Under [ Sviluppo .NET ]

La scalabilità di un ambiente di sviluppo

Venerdì sera mio fratello ha acquistato sotto costo Microsoft Train Simulator (TS). La sua passione per Microsoft Flight Simulator (FS) è nota, ne ho già parlato sul mio blog diverse volte. Da buon intenditore della linea Simulator, ha fatto un'osservazione che mi ha fatto riflettere. Tutto sommato, per volare non è che occorre fare granchè: basta essere sulla pista, si mettono i motori al massimo, raggiunta una certa velocità si tira la cloche e l'aereo fluttua nell'aria. Che poi uno voglia imparare davvero come si fa, quali sono le procedure reali, i ratei di salita corretti, le rotte da seguire, sono...

posted @ mercoledì 29 novembre 2006 12:55 | Feedback (0) | Filed Under [ Sviluppo .NET ]

Decide what data to cache (and where)

Pochi minuti fa ho scaricato la Guidance Explorer, hostata su CodePlex a questo indirizzo, un applicativo Windows Forms (tutte le applicazioni serie sono Windows Forms!) che permette di sfogliare in locale una serie infinita...ehm, corposa è meglio, di best practices, tip, guidance, consigli e norme da seguire quando si sviluppa, disegna, architetta qualcosa. Il tool è davvero carino, tra l'altro il fatto che il setup non è un vero e proprio setup, ma un semplice zip da dezippare dove vogliamo lo rende anche velocemente fruibile per noi developer. Sfogliandolo, sono rimasto affascinato da quante cose sembrano tirate fuori in diretta...

posted @ martedì 28 novembre 2006 16:59 | Feedback (0) | Filed Under [ Sviluppo .NET ]

Subire il 'code reading'

Mi ha appassionato il capitolo di Code Complete 2 sulle technical review, sul code reading ed affini. In breve, tutte pratiche che consentono ad una o più persone (reviewer) di leggere il codice altrui, di discutere assieme all'autore perchè è stato scritto in un modo o nell'altro, di migliorarlo alla caccia di bug o possibili bug, di avere un'idea degli errori più comuni che vengono commessi all'interno del team, etc. etc. il code reading in particolare è quello che mi ha interessato di più, perchè io in qualche modo l'ho subìto - e non sono stato il solo. Vi voglio raccontare...

posted @ giovedì 16 novembre 2006 16:54 | Feedback (12) | Filed Under [ Sviluppo .NET ]

Sviluppare per Vista: è arrivato il momento!

Mi sono sempre sentito un po' superficiale, perchè me ne sono sempre sbattuto della UAC di Windows Vista!Come al solito, io vedo sempre di più la limitazione di una cosa, piuttosto che i benefici che dà, come dicevo giusto giusto un anno fa, giorno più, giorno meno. Comunque sia, adesso è davvero arrivato il momento di prendere in considerazione la UAC. Il nostro Happy Sign va tenuto sott'occhio, e deve girare sotto Windows Vista. Ho trovato questo documento su MSDN2: non che ci sia voluta molta fatica, è linkato direttamente dalla home-page. :-) A parte questo, il documento spiega...

posted @ mercoledì 15 novembre 2006 19:22 | Feedback (3) | Filed Under [ Sviluppo .NET ]

RollerLabel: una label con testo variabile

Scusate, ma non sapevo che titolo dare al post. :-) Per Happy Sign, ma non solo, ho creato un piccolo controllo che eredita direttamente dalla Label classica, ma che aggiunge qualche funzionalità in più. In breve, la RollerLabel contiene: una lista di stringhe da visualizzare una alla volta un colore per ogni stringa un timer interno con un Interval che decide quando cambiare la stringa visualizzata In pratica, noi possiamo definire un set di stringhe da mostrare, una alla volta, sulla Label. Ogni n millisecondi il testo viene cambiato, ciclando le stringhe e ricominciando daccapo quando si arriva alla fine....

posted @ venerdì 3 novembre 2006 18:31 | Feedback (3) | Filed Under [ Sviluppo .NET ]

Violare il contratto che un metodo ci garantisce

Uno dei miliardi di concetti che Code Complete 2 mi sta lasciando in testa riguarda i metodi che implementiamo nel nostro codice. Sembra una sciocchezza, però una dichiarazione di metodo fatta in questo modo... public DomainModelObject GetAvaiableStream() { bool isValid; DomainModelObject ret; // Codice che fa chissà cosa if(isValid) return(ret); else return(null); } Questo metodo, puramente casuale e senza alcuna utilità, ci ritorna un'istanza della classe DomainModelObject creata in chissà quale...

posted @ venerdì 27 ottobre 2006 17:15 | Feedback (4) | Filed Under [ Sviluppo .NET ]

Componenti per Windows Forms - PureComponents

Un mio collega mi ha segnalato il sito http://www.purecomponents.com, un produttore di componenti .NET per Windows Forms che comprende un po' di tutto, dalla TreeView al Navigator. Il NicePanel è un componente freeware - previa registrazione - che permette di realizzare Windows Forms con sfondi in gradiente, di avere bordi più o meno arrotondati, di applicare colori alle finestre, etc. etc. Non li ho provati, però ispirano parecchio. Il NicePanel è scaricabile direttamente da qui. Per rimuovere i nag-screen che appaiono a run-time è sufficiente registrarsi a questo indirizzo.

posted @ martedì 24 ottobre 2006 10:02 | Feedback (22) | Filed Under [ Sviluppo .NET ]

L'importanza dell'attributo DefaultValue ed il grassetto

La classe attributo DefaultValueAttribute permette di dare un valore di default ad una proprietà di uno user-control. Come disse Corrado in uno workshop di parecchio tempo fa, è importante specificarla, perchè evitiamo a Visual Studio di serializzare quella proprietà nella InitializeComponent() della Windows Forms (WF) che stiamo editando. Mi spiego meglio. Supponiamo di avere una WF con un controllo MyControl che espone una proprietà pubblica Enabled di tipo bool. Se a design-time impostiamo questa proprietà a true, nella InitializeComponent() ci troveremo una riga simile a questa: MyControl.Enabled = true; In modo analogo se impostiamo questa proprietà a false. Ma se impostiamo l'attributo DefaultValue su questa...

posted @ lunedì 23 ottobre 2006 18:09 | Feedback (0) | Filed Under [ Sviluppo .NET ]

SQL, amore mio, tra noi è finita, non può andare avanti così!

E' stata una settimana davvero devastante, con pesanti cali di rendimento lunedì-martedì-mercoledì (50%) e con un altrettanto recupero mercoledì (50%)-giovedì-venerdì. Nella prima fase ho sviluppato un package in Oracle che poteva essere fatto molto meglio, e soprattutto dati più corretti in un tempo minore. Fate voi. Nella seconda fase ho sviluppato un piccolo progetto VBA come pochi se lo sognano. Ancora una volta, è saltata fuori la mia predisposizione per le applicazioni Windows piuttosto che i grandi database server: mi vengono in mente le parole di Davide Mauri quando, in un commento su un mio post, accennava a questo discorso....

posted @ venerdì 13 ottobre 2006 18:39 | Feedback (3) | Filed Under [ Sviluppo .NET ]

Come si crea un componente per XNA...finalmente codice!

Dopo la bagarre di oggi pomeriggio, ritorniamo a parlare di cose serie. Nelle ultime settimane ho tenuto d'occhio il blog di Learn XNA, il blog ufficiale del team di XNA e questo pomeriggio ho trovato questo post davvero molto, molto interessante perchè rimanda a sua volta ad un piccolo progetto su CodePlex che implementa un componente per XNA. Cos'è un componente per XNA? Non è nient'altro che un classico componente per .NET, così come siamo abituati a vederlo nei nostri tradizionali progetti Windows Forms. In pratica, ci permette di aggiungere nuove funzionalità al software senza dover scrivere una sola linea di...

posted @ sabato 30 settembre 2006 01:04 | Feedback (0) | Filed Under [ Sviluppo .NET ]

Your position on the technology-wave

Il concetto di cui sopra è tema di un paio di capitoletti in Code Complete 2, chi l'ha già letto lo sa bene. In base alla tecnologia con la quale ci apprestiamo a lavorare, ed in base alla nostra esperienza con la stessa, abbiamo un rendimento durante lo sviluppo diversamente distribuito. Se la tecnologia è consolidata, e noi altrettanto, possiamo costruire l'applicazione velocemente. Gli strumenti a disposizione sono ottimali, gli IDE sono completi ed hanno al loro interno tutta una serie di tool che ci permettono di lavorare più spediti. Se incontriamo qualche problema nello sviluppo, Internet ci viene in soccorso attraverso...

posted @ mercoledì 20 settembre 2006 12:35 | Feedback (1) | Filed Under [ Sviluppo .NET ]

XPA - XNA Physics API su CodePlex

La navetta partì velocemente verso lo spazio, sfuggendo alla gravità terrestre senza troppi sforzi. Qualche decina di secondi dopo uscì dall'orbita terrestre, e il pilota accese i sistemi vitali e diede inizio alla sequenza di attivazione dei motori sub-quantici per raggiungere la velocità di crociera. Teneva sempre d'occhio il display sull'HUD primario, che mostrava costantemente le forze inerziali che agivano sul veicolo e rischiavano di mandarlo fuori rotta. All'approssimarsi di 3c (tre volte la velocità della luce), i primi effetti della compressione della luce sulla massa dello scafo si fecero sentire, facendo scattare alcuni allarmi. Il pilota, per nulla preoccupato, premette alcuni tasti sulla console...

posted @ lunedì 18 settembre 2006 12:35 | Feedback (1) | Filed Under [ Sviluppo .NET ]

Prossimi acquisti su Amazon...

Applications = Code + Markup - A guide to the Microsoft Windows Presentation Foundationdi Charles Petzold, 1020 pagine, ~37 dollari Applying Domain-Driven Design and Patterns: With examples in C# and .NETdi Jimmy Nilsson, 576 pagine, ~50 dollari Del primo sono un po' indeciso, perchè francamente WPF - sebbene sia splendido - non è alla mia portata, perchè bisogna avere una certa predisposizione per la grafica e l'aspetto estetico, questioni che ho sempre preferito accantonare e per cui non sono portato (in disegno sono sempre stato una colossale frana). Però WPF è anche tutto un nuovo modo di pensare e di ribaltare sotto-sopra le buone vecchie Windows Forms,...

posted @ mercoledì 13 settembre 2006 13:15 | Feedback (5) | Filed Under [ Sviluppo .NET ]

Hostare un editor C# all'interno delle nostre applicazioni

Sto scrivendo una simpatica applicazione che vuole garantire una certa flessibilità data dalla possibilità di scrivere classi in VB.NET o C#. Tali classi, implementando determinate interfacce previste a priori, permettono l'esecuzione di metodi che consentono all'utente finale di fare determinate operazioni. In questo momento, il codice viene inserito attraverso una banalissima TextBox, ma questa cosa non mi va molto a genio. Sono quindi alla ricerca di un controllo per Windows Forms freeware/a pagamento in grado di hostare in qualche modo un editor VB.NET o C# sulle mie Windows Forms. Ho googlato molto, ma quelli che ho trovato non mi hanno soddisfatto molto -...

posted @ martedì 12 settembre 2006 12:10 | Feedback (4) | Filed Under [ Sviluppo .NET ]

Sono un servizio che dipende dall'Event Log, ricordatelo!

Durante alcuni giorni di luglio, avevo scritto un servizio managed (lo chiameremo AutoShutService) capace di monitorare l'attività del PC su cui è in esecuzione (soprattutto virtual machine) e, in base a certi criteri, di provocarne lo shutdown per evitare il consumarsi delle risorse messe a disposizione (principalmente memoria RAM). Il tutto è stato davvero un successo, perchè a quanto pare ho risolto una problematica che assillava da un po' di tempo i sistemisti della società dove lavoro, che ricercavano (inutilmente) su Internet un tool o un'utility che potesse aiutarli. Al mio ritorno delle ferie estive, e quindi dopo circa 1 mese di attività...

posted @ martedì 5 settembre 2006 15:45 | Feedback (0) | Filed Under [ Sviluppo .NET ]

Fidarsi delle Poste? Ogni tanto fa bene...

Pensavo che il primo MSDN Magazine mi arrivasse dopo le ferie, invece questa sera, alle 19 circa, l'ho trovato nella mia casella di posta che mi aspettava. Evviva!!! Adesso sono indeciso se portarmelo dietro, quasi quasi,  nello zainetto me lo metto, poi starà a me decidere se tirarlo fuori oppure no. powered by IMHO 1.3

posted @ venerdì 4 agosto 2006 21:14 | Feedback (3) | Filed Under [ Sviluppo .NET ]

Posticipare il timeout nello startup di un servizio .NET

La classe ServiceBase di .NET, che è la classe base dalla quale ereditano tutti i Windows Service, espone un metodo RequestAdditionalTime, che serve per "allungare" il tempo dopo il quale il Service Control Manager ci informa che un servizio non è partito e quindi viene segnalato come not responding. Questo metodo può essere chiamato esclusivamente negli overload di OnContinue, OnPause, OnStart e OnStop. La pagina di MSDN lo dice espressamente: The RequestAdditionalTime method is intended to be called by the overridden OnContinue, OnPause, OnStart, or OnStop methods to request additional time for a pending operation. Se non seguiamo questa semplice regola, qualsiasi chiamata...

posted @ venerdì 4 agosto 2006 18:48 | Feedback (0) | Filed Under [ Sviluppo .NET ]

PerformanceCounter per provocare il power-off dell'OS

Introduzione Tra venerdì e questa mattina ho risolto un problema che da parecchio tempo assillava il Tech-Team, la squadra di esperti IT certificati MS/Oracle interna all'azienda dove lavoro. Immaginate lo scenario: un super-server - di cui purtroppo non so darvi le caratteristiche hardware precise - su cui gira Virtual Server 2005, in grado di ospitare qualcosa come circa una quindicina di macchine virtuali attive più o meno contemporaneamente. Il problema è che molto spesso queste VM rimangono attive anche quando non effettivamente necessarie, rubando memoria e risorse a tutte le altre. Il Tech-Team ha ricercato per molto tempo in rete...

posted @ lunedì 31 luglio 2006 15:59 | Feedback (1) | Filed Under [ Sviluppo .NET ]

[5] NHibernate: un caso tratto da un'applicazione reale

Nella mia piccola serie di post dedicati ad NHibernate (1, 2, 3 e 4) abbiamo visto come creare un domain model e come persisterlo con NHibernate. Abbiamo visto come mappare ogni singola proprietà, come creare relazioni uno-a-molti, come implementare un data provider, etc. etc. In questi ultimi giorni ho voluto a tutti i costi raggiungere un altro risultato, per il quale ho davvero googlato molto, ho chiesto, ho letto. Molte pagine sul Web riportano molte soluzioni diverse, che però non mi hanno soddisfatto per nulla. Mi sto riferendo alla possibilità di sfruttare collezioni fortemente tipizzate nel nostro domain model, nell'ottica...

posted @ mercoledì 19 luglio 2006 13:52 | Feedback (4) | Filed Under [ Sviluppo .NET ]

Pro & contro dei software customizzabili

Pochi giorni fa ho parlato di alcune complicazioni quando si tratta di lavorare con piccoli clienti, facendo riferimento (tra le altre cose) anche al grado di customizzazione che i nostri software devono attuare per avere una marcia in più. Questa mattina ho letto con molto interesse questo post di un certo Chris Jackson. Il titolo, How Much Personalization Should Your Software Support?, dice già tutto. E' un post molto interessante, perchè fa alcuni esempi relativamente ad Office e a Media Player che dimostrano praticamente come sono state messe in pratica certe guidelines Microsoft su questo tema. Tra l'altro, vengono riportate due frasi che...

posted @ lunedì 10 luglio 2006 14:01 | Feedback (0) | Filed Under [ Sviluppo .NET ]

Lavorare e sviluppare per piccoli clienti

Non so chi di voi ha lavorato o lavora tuttora con piccoli clienti, ai quali bisogna sviluppare applicativi più o meno complessi e più o meno disegnati intorno a loro e alle loro esigenze. Ho lavorato per parecchi anni con questo tipo di clientela, quando ero dipendente (e più giovane ed inesperto). Oggi come libero professionista faccio le cose un po' diversamente: innanzitutto ormai non mi capita più che qualcuno mi chiami per farmi sviluppare un software (devo dirlo: per fortuna!). Lavorare per i piccoli clienti comporta una serie di svantaggi che sempre più spesso mi hanno disturbato e mi...

posted @ giovedì 6 luglio 2006 18:00 | Feedback (3) | Filed Under [ Sviluppo .NET ]

Abbonamento MSDN Magazine e la consegna

Il 16 Giugno scorso ho ricevuto via SMS la notifica del pagamento dell'abbonamento per un anno alla rivista MSDN Magazine, che mi sono deciso ad acquistare sfruttando uno sconto per i possessori di una MSDN Subscription. A casa non mi è ancora arrivato nulla, e sto cominciando a preoccuparmi...voi ne sapete qualcosa? Ricordo che qualcuno qui su UGI aveva l'abbonamento: a voi in quanto tempo arriva? Sono passati poco più di 15 giorni, magari essendo la prima spedizione (ed un nuovo abbonato) devo aspettare un po' di più. Sono passato in modalità Defcon 3, missili in pre-riscaldamento, perchè non è...

posted @ lunedì 3 luglio 2006 14:03 | Feedback (24) | Filed Under [ Sviluppo .NET ]

Deploy di un'applicazione .NET che usa il controllo ReportViewer

Sabato mattina ho fatto un piccolo esperimento su una virtual machine appositamente allestita proprio per simulare l'installazione di una mia applicazione, prima di andare effettivamente dal cliente e fare figuracce. L'applicazione è una normale applicazione Windows Forms che utilizza SQL Server 2005 come back-end e il controllo ReportViewer per generare qualche report di stampa con annesse anteprime. Mi sono fatto prima alcuni ragionamenti: la mia applicazione è .NET, per cui teoricamente è possibile installarla con un semplice copia & incolla dalla macchina di sviluppo alla macchina di produzione. Chi installa il .NET Framework 2.0? E chi installa SQL Server 2005 Express...

posted @ lunedì 3 luglio 2006 11:24 | Feedback (4) | Filed Under [ Sviluppo .NET ]

Consultare MSDN da linea di comando

Ho appena dato un'occhiata a CodePlex e mi è cascato l'occhio su questo progetto, che permette di consultare l'help-on-line di MSDN attraverso la command-line.  Il progetto si chiama msdnman e mette a disposizione una piccola lista di parametri per fare ricerche nel gigantesco database MSDN. Con il parametro -k possiamo specificare le keyword da ricercare, mentre il parametro -language permette di filtrare gli esempi di codice solo nel linguaggio indicato. Il modo più semplice per utilizzarlo è mettere l'eseguibile msdnman.exe in una directory prevista dai path di sistema, così da poter dare ovunque siamo comandi del tipo: msdnman System.Collections.IList L'output per adesso non...

posted @ mercoledì 28 giugno 2006 10:38 | Feedback (0) | Filed Under [ Sviluppo .NET ]

Lo unit testing come lo intendo io

Ho appena letto questo post segnalato da Lorenzo che mi ha fatto riflettere. Le modalità del database unit testing descritto assomigliano moltissimo alle modalità con cui sfrutto nUnit e Test Driven .NET nelle mie ultime settimane. Mi spiego meglio, ma prima ho bisogno di fare una piccola premessa. Sabato mattina mio fratello ha messo live la nostra piccola applicazione per la gestione di concessionari d'auto, creata ad-hoc per un concessionario piuttosto imponente di Lodi. Lo sviluppo di questa applicazione ha richiesto molto più tempo di quello preventivato inizialmente, per tutta una serie di motivi, di cui magari parlerò in un altro post (anche un fallimento...

posted @ lunedì 26 giugno 2006 11:03 | Feedback (23) | Filed Under [ Sviluppo .NET ]

[4] NHibernate: un caso tratto da un'applicazione reale

IntroduzioneNel post [2] relativo ad NHibernate, avevamo visto come scrivere file di mapping per legare due classi con una relazione uno-a-molti. Nel caso specifico, lo riassumo in breve, avevamo una classe HockeyPlayer ed una classe Faults: ad un'istanza della prima, possono corrispondere più istanze della seconda. Senza andare troppo nel dettaglio, più che altro per non ripetere cose già dette, riporto qui sotto il mapping della classe HockeyPlayer: <class name='HockeyPlayer' table='HockeyPlayers'>    <id name='ID' column='ID' type='Int32' length='4' unsaved-value="0">      <generator class='identity' />    </id>    <property name='Name' type='String' column='Name' length='50'/>    <property name='Height' type='Int32' column='Height' length='4'/>    <property name='Weight' type='Int32' column='Weight' length='4'/>    <property name='Number' type='Int32' column='Number' length='4'/>    <bag name="Faults" cascade="all" lazy="false" inverse="true">        <key column="IDPlayer" />        <one-to-many class="Fault, HockeyObject" />    </bag></class> Detto questo, avevamo detto che anche la classe Faults deve essere mappata opportunamente. Quello che mi interessa far ricordare (e ricordare a me stesso) è che nella classe Fault deve esserci un riferimento all'istanza HockeyPlayer...

posted @ venerdì 23 giugno 2006 16:38 | Feedback (1) | Filed Under [ Sviluppo .NET ]

NHibernate: IList convertita in NHibernate.Collection.Bag...

Questa mattina ho riscontrato un problema che deriva un po' da quello che ho descritto nei miei ultimi 3 post relativi ad NHibernate. Immaginate di avere una classe che espone una proprietà di tipo IList, per implementare una relazione uno-a-molti tra una classe father ed una classe child. Immaginiamo di aver costruito un opportuno file di mapping per salvare questa classe, e la corrispondente classe figlia. Una delle caratteristiche di NHibernate è quella di poter restituire una lista di oggetti di questa nostra classe, perchè il file di mapping lo permette. Quindi, per esempio, possiamo scrivere codice simile a questo: session = factory.OpenSession();ICriteria criteria = session.CreateCriteria(typeof(AttoVendita));IList list = criteria.List();AttoVenditaCollection ret = new AttoVenditaCollection();foreach (AttoVendita element in list)    ret.Add(element); Con il...

posted @ sabato 17 giugno 2006 22:32 | Feedback (3) | Filed Under [ Sviluppo .NET ]

[3] NHibernate: un caso tratto da un'applicazione reale

IntroduzioneEccoci al terzo (ultimo?) post dedicato ad NHibernate. Nel primo abbiamo fatto un'overview delle classi da persistere, alcune delle quali legate da una relazione uno-a-molti, nel secondo abbiamo visto come creare files di mapping corretti che possano fornire all'engine di persistenza di NHibernate tutte le informazioni su ciascuna classe e come le classe si relazionano fra loro. Fino ad oggi, non abbiamo scritto una sola maledetta linea di codice. In realtà, almeno per quello che riguarda me, scrivere codice C# che utilizzi NHibernate per caricare/scrivere/cancellare i nostri oggetti è davvero una banalità, perchè il fulcro, tutta la logica e molta della complessità...

posted @ venerdì 16 giugno 2006 17:49 | Feedback (3) | Filed Under [ Sviluppo .NET ]

[2] NHibernate: un caso tratto da un'applicazione reale

Seconda ed penultima parteDopo aver introdotto ieri le classi coinvolte, e qualche altra disgressione nei commenti , vediamo oggi come realizzare un file di mapping che possa fornire all'engine di persistenza di NHibernate tutte le informazioni necessarie per salvare, caricare e cancellare un oggetto dal database. Innanzitutto, e ci tengo a dirlo, è da sfatare il mito secondo il quale bisogna creare un file di mapping per ogni classe che vogliamo gestire tramite NHibernate. In realtà, e lo vedremo adesso, possiamo tranquillamente avere tutto dentro un solo file con estensione hbm.xml e scrivere lì tutto il necessario. Magari, cosa migliore se...

posted @ mercoledì 14 giugno 2006 15:27 | Feedback (1) | Filed Under [ Sviluppo .NET ]

[1] NHibernate: un caso tratto da un'applicazione reale

Sono impazzito molto nei giorni scorsi nel tentativo di sfruttare NHibernate per persistere business object del domain model di un'applicazione reale che sto sviluppando. Finchè si tratta di oggetti semplici, nessun problema, ma nel mio caso avevo a che fare con due oggetti relazionati uno-a-molti. Ieri sera ho risolto il mio problema, ma ho voluto replicare lo stesso scenario in una sample application di cui ho già parlato in passato, per descrivere meglio il mio dilemma e per spiegare come l'ho risolto. Le classi coinvolte: HockeyPlayer e...

posted @ martedì 13 giugno 2006 14:51 | Feedback (6) | Filed Under [ Sviluppo .NET ]

Weekend all'insegna della produttività

Ho passato un po' di tempo, durante questo weekend, a divertirmi un po', specialmente oggi pomeriggio dove, sfruttando sole caldo e vento gelato, me ne sono andato a spasso con alcuni amici. Ho scritto parecchio C#, devo dire, studiando il Northwind Starter Kit di cui avevo parlato venerdì. Ho letto molto il codice, l'ho adattato al mio caso, creando un domain model per il mio applicativo e tutta una serie di data provider specifici per l'accesso al database. Adesso, mentre LA7 trasmette alcuni episodi di Star Trek, me ne vado a letto a svuotare la mente.  Mi sono sentito produttivo, sinceramente,...

posted @ lunedì 13 marzo 2006 00:34 | Feedback (26) | Filed Under [ OT Sviluppo .NET ]

Uhm...uhm...questo NSK è grandioso! Ne tirerò fuori qualcosa di bello...

Si vede l'anima dello sviluppatore: lontano da C# per più di 24 ore, mi sembra già una vita. Ho letto con interesse ieri il post di Andrea sul Northwind Starter Kit, e mi ha incuriosito. Morale, sul mio disco c'è già una directory D:\NorthwindStarterKit che mi sto sfogliando attraverso UltraEdit causa mancanza di risorse sul mio PC qua al lavoro: Virtual PC è un gran bel software, ma la RAM ovviamente se la mangia che è un piacere. Vi state chiedendo perchè? A casa mi sto riscrivendo da zero il software di fatturazione che mi ero creato molto, molto tempo fa....

posted @ venerdì 10 marzo 2006 18:29 | Feedback (3) | Filed Under [ I miei freeware Sviluppo .NET ]

Un po' di codice managed per gestire la webcam

groups.google.com si ricorda ancora, di quel giorno. Era il 20 Febbraio 2004, frequentavo ancora it.comp.lang.visual-basic, e mi avevano rubato in casa: nei giorni successivi, mi ero sbizzarrito nello scrivere un software in VB6 per gestire la webcam, in modo tale da poter: far scattare una foto ogni x secondi fare l'upload dell'immagine sul mio sito Web avevo gestito anche l'audio del microfono con un OCX: appena "sentiva" un rumore un po' più forte del solito, il mio PC mi chiamava sul cellulare Mi è capitato questo post sui blogs di MSDN dove bene o male c'è la...

posted @ venerdì 3 marzo 2006 18:27 | Feedback (3) | Filed Under [ Sviluppo .NET ]

(Parte 2) Le interfacce INotifyPropertyChanged e IBindingList

Nella prima parte ho fatto un po' un'introduzione di come implementare una classe che implementi l'interfaccia INotifyPropertyChanged, allo scopo di notificare all'engine di binding del FX che deve aggiornare i controls corrispondenti. Questo nel caso in cui la classe è bindata ad un controllo come la TextBox, per esempio, in grado di mostrare un solo elemento alla volta. In questo secondo ed ultimo post vedremo invece quello che bisogna fare se la nostra classe espone una property adatta ad essere bindata ad un controllo lista, come ListBox, ComboBox, etc .etc. La classe HockeyPlayer espone una property Faults: private FaultsCollection faults;public FaultsCollection Faults{ get { return faults; } } La classe FaultsCollection è una...

posted @ giovedì 23 febbraio 2006 13:31 | Feedback (5) | Filed Under [ Sviluppo .NET ]

(Parte 1) Le interfacce INotifyPropertyChanged e IBindingList

Non ho mai guardato in modo approfondito il data-binding offerto da .NET, reduce dalla brutta fama che ha in ambiente VB6. Ho scritto questo primo post per fornire lo spunto su come realizzare le proprie classi di business objects con un occhio di riguardo verso possibili e futuri servizi di data-binding che esse dovranno soddisfare. Ovvero, come utilizzare le interfacce INotifyPropertyChanged e IBindingList. Cliccare sul titolo per leggere.

posted @ giovedì 23 febbraio 2006 12:18 | Feedback (12) | Filed Under [ Sviluppo .NET ]

Usare .Close() o Dispose() ? Questo è il problema...

Mi è capitato sotto mano questo post su un blog di MSDN e mi ha fatto pensare. Se avete un'oggetto che supporta sia il metodo Close() che il Dispose(), quale usare dei due? Che differenza c'è? Secondo l'autore del post originale, ci sono un gran numero di programmatori che ha dei dubbi, perchè non c'è una chiara distinzione tra l'uno e l'altro. Vi riporto una regola che scrive lui: Here is an easy to remember rule I use:If you plan to reuse the same instance of the object, then call Close(); otherwise call Dispose(). Ci sono anche 3 regole per cui privilegiare Dispose(),...

posted @ mercoledì 1 febbraio 2006 18:46 | Feedback (1) | Filed Under [ Sviluppo .NET ]

Refusi, errori ed imprecisioni nella Preparation Guide del 70-536

Sebbene questo post compaia sotto la categoria Esame 70-536, ho preferito non numerarlo. Qualche settimana fa avevo notato che c'erano stati alcuni cambiamenti nel documento sul sito Microsoft che elenca le skills richieste per l'esame 70-536. Su questa pagina si parlava di una famigerata classe StoredList, inesistente ed introvabile sul Web: ho postato questa cosa anche sul forum di UGIdotNET, e anche secondo Andrea Boschin si tratta di un errore. Oggi pomeriggio sono ritornato a vedere con più attenzione il documento e mi sono accorto che effettivamente il riferimento a StoredList è stato corretto in SortedList, che è una classe effettivamente implementata nel...

posted @ martedì 31 gennaio 2006 18:17 | Feedback (2) | Filed Under [ Sviluppo .NET Esame 70-536 ]

Global hook con C# e Visual Studio 2005

Questa la considero una notizia molto importante, perchè da quando mi ero messo in testa di realizzare Happy Sign che volevo riuscirci, e questa mattina ho avuto la soluzione. Dunque, il tema è quello di realizzare un global hook sulla tastiera. A cosa serve? Beh, senza scendere troppo in dettaglio, si tratta di un meccanismo tramite il quale una nostra applicazione può intercettare tutti gli eventi di tastiera e mouse anche se la nostra applicazione non ha il focus. Il mio Happy Sign ne aveva bisogno perchè volevo fare in modo di poter inserire una firma dentro Outlook Express (o Thunderbird, per...

posted @ sabato 28 gennaio 2006 11:28 | Feedback (19) | Filed Under [ I miei freeware Sviluppo .NET ]

System.Windows.Forms.SplitContainer con Visual Studio 2005

Con Visual Studio 2003 avevo usato una volta soltanto quel controllo - di cui non ricordo nemmeno il nome - che ci permette di suddividere una Windows Forms in due sezioni ridimensionabili, per creare interfacce adattabili a run-time dall'utente, permettendo di allargarne una sezione piuttosto che un'altra. Un po' quello che fa Explorer su file-system, dove a sinistra abbiamo l'albero delle directories, mentre sulla destra i files veri e propri: usando lo Split, possiamo allargare l'una o l'altra a seconda del bisogno. Ieri sera, con Visual Studio 2005, ho usato lo SplitContainer e devo dire che l'ho trovato davvero più comodo. Una volta...

posted @ lunedì 16 gennaio 2006 12:07 | Feedback (2) | Filed Under [ Sviluppo .NET ]

XAML, qualche links e un tool davvero carino (spero!)

Tutta questa faccenda del prossimo workshop, di WinFX e di Windows Presentation Foundation mi sta facendo davvero appassionare. Ho appena googlato un po' e ho trovato qualche link utile, che voglio pubblicare e condividere con voi: mi serviranno questa sera per avere tutto a portata di mano. Mi piacciono perchè parlano chiaro, sono semplici, va bene per chi è alle prime armi con WinFX e WPF e arrivano subito al dunque. Eccoli, uno per uno. WinFX Software Developer Kit, tutto parte da quaWindows Presentation Foundation Quick Start, un quick-start davvero belloXAML Overview, le cose più semplici ed utili da sapere sullo XAML...

posted @ giovedì 15 dicembre 2005 16:38 | Feedback (2) | Filed Under [ Sviluppo .NET Tecnologia ]

WinFX? Andarci con i piedi di piombo, ma che felicità!

Evviva!Ho appena finito la mia prima ricetta!!!  Ingredienti: un Visual Studio 2005, il WinFX SDK installato, una spruzzatina di files XAML, una manciata di samples presi direttamente dal Windows SDK, un pizzico di buon vecchio C#. Fate cuocere lentamente con un po' di pazienza et voilà...ecco un bel EXE che sfrutta WPF/Indigo per mostrare button e chi ne ha più ne metta. Ma procediamo con calma.  Dal Windows SDK ho preso un semplice semplice sample, una piccola applicazione che non fa altro che mostrare una Windows Forms con sopra un po' di button, generati dai files XAML di corredo. Apro il progetto...

posted @ mercoledì 14 dicembre 2005 23:47 | Feedback (3) | Filed Under [ Sviluppo .NET Tecnologia ]

Integration Services: da Data/Ora di Access a datetime di SQL Server 2005, ultima parte

Forse circa una settimana fa avevo messo sul mio blog un piccolo post dove dicevo che non è possibile trasferire in modo "nativo" un campo Data/Ora di Access ad un campo datetime di SQL Server 2005. Con nativo intendo che un semplice task di DataFlow non è sufficiente, perchè l'engine ci ritorna un messaggio: Error 1 Validation error. Data Flow Task: SQL Server Destination [34]: The column "DataServizio" can't be inserted because the conversion between types DT_DATE and DT_DBTIMESTAMP is not supported. La soluzione c'è, ovviamente, e per tirare le fila del discorso ho deciso di scrivere un secondo ed ultimo post per chiarire....

posted @ venerdì 9 dicembre 2005 10:26 | Feedback (0) | Filed Under [ Sviluppo .NET Tecnologia ]

Sviluppare applicazioni in un ambiente senza permessi admin

Dal momento che sono stato accusato  di scrivere applicazioni come un dilettante (ovviamente sto scherzando), volevo segnalare questo articolo che ho trovato su MSDN che descrive come sviluppare e gestire applicazioni seguendo le future direttive che dicono di non accedere ai PC con l'utente administrator. L'ho trovato interessante, perchè dice (quasi step-by-step) cosa verificare e controllare delle nostre applicazioni attuali per sapere se saranno conformi oppure no a Windows Vista. L'articolo è parecchio lungo (37 pagine stampate), però le cose che mi sono saltate più all'occhio sono i nuovi acronimi con cui avremo a che fare, perchè inaugurano tutta una serie di concetti...

posted @ martedì 6 dicembre 2005 16:07 | Feedback (1) | Filed Under [ Sviluppo .NET Tecnologia ]

Integration Services: da Data/Ora di Access a datetime di SQL Server 2005

Martedì stavo lavorando con il nuovo SQL Server 2005 e ho riscontrato questo problema che voglio documentare sul blog perchè magari potrà essere di aiuto a qualcuno. Lo scenario è questo. Immaginate di avere un database Access (prova.mdb) con una sola tabella (Input) con un solo campo (DataServizio) di tipo Data/Ora. Popolate la tabella a mano con un po' di valori a caso, ottenendo ad esempio: Ok, fin qua nulla di particolarmente complicato. Sperando che non siate inorriditi dalo screenshot di Access 2003 qui sopra, vado avanti con il mio discorso.  Adesso immaginiamo di dover creare un database SQL Server 2005 analogo (TestDB),...

posted @ domenica 4 dicembre 2005 10:34 | Feedback (1) | Filed Under [ Sviluppo .NET ]

Visual Studio Add-Ins Every Developer Should Download Now

Un certo James Avery scrisse - a quanto pare un anno fa - un articolo intitolato ".NET Tools: Ten Must-Have Tools Every Developer Should Download Now". Devo aver letto qualche post qui su UGIdotNET, però ricordo di aver trovato NUnit ed altri tool. Stavo curiosando sulle pagine di MSDN Magazine di Dicembre 2005 e ho trovato questo secondo articolo, sempre dallo stesso autore, che ripropone lo stesso tema, aggiornando però il contenuto con quanto è possibile trovare oggi in Rete. L'articolo si intitola "Visual Studio Add-Ins Every Developer Should Download Now". Ci sono i classici tool per il debugging e per la generazione automatica del codice. Sembra...

posted @ mercoledì 23 novembre 2005 17:28 | Feedback (1) | Filed Under [ Sviluppo .NET ]

HappySign, non mi sono dimenticato di te!

Chi segue il mio blog sa che sto preparando un freeware (HappySign) di cui ho già parlato sul mio sito ed in alcuni post, appunto, del mio blog. Per la serie "avrei voluto farlo tranquillamente nel tempo libero", ho dovuto rallentare un attimo. Di mezzo ci sono stati il compleanno di mio fratello (festeggiato in due serate diverse), quello di mio papà, qualche stress di troppo causato dal lavoro ed altri fattori che mi hanno fatto continuamente traslare, chiamiamola così, la data di uscita di HappySign. Non solo: ho avuto un po' di richieste e suggerimenti, prima fra tutte la possibilità di scrivere le...

posted @ martedì 22 novembre 2005 11:41 | Feedback (2) | Filed Under [ I miei freeware Sviluppo .NET ]

Articolo su MSDN Magazine riguardo il deploy ClickOnce

Ho trovato questo articolo su MSDN Magazine. E' un articolo scritto da un certo Bryan Noyes , del maggio 2004, ma io l'ho trovato solo oggi: ci vuole abilità e capacità anche per questo, no??  A parte scherzi, evidenzia vantaggi & svantaggi nell'utilizzo di Click Once per il deploy delle applicazioni .NET. Dice espessamente, tra le altre cose, che le applicazioni distribuite attraverso Click Once vengono scaricate ed installate in una cache privata (questo già lo sapevo), allo scopo di rimanere isolate il più possibile dalle altre applicazioni già presenti sul PC....

posted @ giovedì 17 novembre 2005 18:34 | Feedback (1) | Filed Under [ Sviluppo .NET ]

Debuggare XSLT con Visual Studio 2005

Nel periodo 2003-2004 ho lavorato presso una società a Milano che sviluppa software per la pubblica amministrazione, inteso come uffici comunali, asili, scuole elementari, ASL, etc. etc. Tra le altre cose, per un certo periodo mi ero occupato di esportare un file XML che potesse rappresentare lo stato anagrafico/sociale/economico/giuridico di una certa persona. In pratica, mi sono inventato di sana pianta uno schema XSD che mi aiutasse a generare il file XML, che mi permettesse la validazione e così via. Il file XML finale era un grande contenitore con: dati anagrafici (cognome, nome, nascita, eventuale morte) dati sul...

posted @ giovedì 17 novembre 2005 11:32 | Feedback (2) | Filed Under [ Sviluppo .NET ]

Global hook in .NET 2.0

Avevo scritto sul mio blog qualche tempo fa un post dove segnalavo qualche problema nel creare un hook usando il nuovo framework 2.0. Avevo scritto qualcosa anche sul newsgroup di UGI proprio per questo problema: purtroppo non ricordo chi, ma mi avevano detto che usavo dichiarazione API non corrette, oppure che c'era qualche altro problema nel codice. Mi fa piacere sapere che non sono l'unico al mondo a non essere riuscito, o che comunque ha trovato qualche differenza tra FW1.1 e FW2.0. Proprio adesso ho letto un post sul blog di MSDN (di un certo Srivatsn, dai...su....ditemi che conoscete anche lui...

posted @ mercoledì 16 novembre 2005 18:18 | Feedback (3) | Filed Under [ Sviluppo .NET ]

Interfacciarsi con Windows Media Player tramite C#

Sto facendo esperimenti con C# per l'interfacciamento con WMP per cercare di capire come ottenere informazioni sul file che si sta playando. Non è affatto complicato, anzi, come al solito è molto divertente. Bisogna innanzitutto aggiungere nei references il file wmp.dll, parte integrante di WMP. A questo punto abbiamo a disposizione tutto l'object model con cui possiamo veramente fare di tutto: fare il play di un file, enumerare le playlist, crearne di nuove, controllare il lettore con i semplici play/stop/pause, skinnare l'applicativo e via dicendo. Ad esempio, se volessimo sapere quante playlist sono state definite... player = new WMPLib.WindowsMediaPlayer();WMPLib.IWMPPlaylist lista;WMPLib.IWMPPlaylistCollection coll = player.playlistCollection;WMPLib.IWMPPlaylistArray arr = coll.getAll();int howmany = arr.count;for(int i=0;i<howmany;i++){    lista = arr.Item(i);    Debug.WriteLine(lista.name + " : " + lista.count);} Dichiaro un...

posted @ venerdì 11 novembre 2005 16:26 | Feedback (7) | Filed Under [ I miei freeware Sviluppo .NET ]

Come serializzare seriamente (gioco di parole) con .NET

Premetto che questo è il mio post numero 200....EVVIVA!!! Nel mio ultimo post ho parlato di un metodo spartano, brutale e poco consigliabile per generare un file XML in cui salvare le impostazioni di una qualsiasi nostra applicazione. Il metodo che ho scritto, sebbene funzioni, ha suscitato qualche reazione negativa, perchè come giustamente è stato osservato non è assolutamente il modo migliore per serializzare su XML. In questo post, dopo averci ragionato su per circa 24 ore, propongo il metodo più politically-correct, quello migliore ed adatto a sfruttare meglio le capacità del framework. Ovvero, sfruttare i namespace...

posted @ giovedì 10 novembre 2005 18:11 | Feedback (38) | Filed Under [ I miei freeware Sviluppo .NET ]

Powered by:
Powered By Subtext Powered By ASP.NET