|
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
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...
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...
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...
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...
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 è...
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...
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...
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...
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...
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...
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...
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...
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...
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...
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...
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...
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...
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...
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...
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...
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...
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...
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...
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...
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...
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...
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...
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
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...
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...
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...
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...
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....
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...
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.
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...
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....
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...
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...
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...
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,...
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 -...
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à...
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
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...
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...
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...
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...
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...
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 è...
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...
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...
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...
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...
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...
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à...
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...
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...
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,...
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....
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...
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...
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.
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(),...
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...
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...
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...
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...
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...
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....
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...
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),...
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...
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...
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....
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...
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...
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...
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...
|