.NET

Tutto il mondo .NET

6° Workshop DotMetMarche: Windows Presentation Foundation

Partecipate numerosi, mi raccomando?Maggiori informazioni nel link di cui sotto :)6° Workshop DotNetMarche: "Windows Presentation Foundation (WPF)" Proseguiamo il percorso di studio dei 'building block' che compongono il .Net Framework 3.0 parlando di Windows Presentation Foundation (WPF) con Luca Regnicoli [Devleap], esperto a livello nazionale che ha già realizzato dei webcast per Microsoft su questa tematica (disponibili per la visione qui). Windows Presentation Foundation (WPF) nasce come nuovo sottosistema di presentazione di applicazioni Windows. WPF introduce un nuovo modello di programmazione fornendo un’architettura unificata per la rappresentazione di interfacce utente, documenti e media. Avremo a disposizione due sessioni per mostrare...

RunSharp - Reflection.Emit has never been easier

E' o non è una figata?Peccato che ancora sia allo stadio pre-alpha, ma le premesse ci sono tutte :)RunSharp - Reflection.Emit has never been easier - The Code Project - .NET Many developers have found the magic of emitting code at runtime using Reflection.Emit. Also, many have not used it simply because of the complexity of the API. RunSharp (or Run# if you prefer), aims to bring the simplicity and readability of a high-level language such as C# to runtime code generation. The IL is a great language. However, there are several problems with emitting IL instructions directly. One of...

Utilities.NET 1.0

Pare interessante... :)Utilities.NET 1.0 released - James Newton-King Utilities.NET is a collection of helper classes and components for quickly solving common .NET programming tasks. The library is pretty large, currently 117 classes, 300ish unit tests and many, many methods. When I'm developing I have a habit of throwing what is generic in helper classes and Utilities.NET is a combination of many of them times nearly 5 years of .NET development.Technorati Tags: Utilities.NET, .NETPowered by ScribeFire.

Workshop DotNetMarche, qualche giorno dopo..

Considerazioni sparse sul passato workshop DotNetMarche...

[REMINDER] 5° Workshop DotNetMarche: "Workflow Foundation (WF) e CardSpace"

Ci ha già pensato Stefano qualche giorno fa quindi non mi va di tediarvi a dismisura, al tempo stesso però mi sembra giusto pubblicizzare ancora una volta (visto anche che le iscrizioni non sono tantissime e c'è ancora posto in abbondanza...) che Giovedì 27 Settembre in quel di Osimo  noi di DotNetMarche avremo il piacere di ospitare Raffaele Rialdi per il primo della serie di workshop dedicati al Framework 3.0.In particolare, in questo primo incontro parleremo di di ben due dei quattro building block che compongono il .NET Fx 3.0, Workflow Foundation (WF) e Windows CardSpace.L'agenda dettagliata dell'evento la trovate...

Io sono un perfezionista...

...forse pure troppo, vista l'attenzione che ripongo nella formattazione e nel refactoring del codice... ma a quanto pare in fondo non è che sia poi troppo sbagliato :)Incremental Perfectionism : 5 ways to write perfect code « Marc-André Cournoyer’s blog If you’ve ever done a couple of interviews, you’ve probably got the “I’m a perfectionist” candidate. When asked about its flaws he says with a fake-hidden smile: “I’m a lil’ bit of a perfectionist”, thinking deep in their mind this is more of a good thing then a bad one. Perfectionist, those people that only craft perfect thing, only...

Uno snippet per la clessidra...

L'idea mi è venuta usando SWT, che ha una classe BusyIndicator atta a "decorare" una qualsiasi operazione con il mouse a clessidra...Posto il codice senza formattazione, sorry...namespace Helpers{    public static class BusyIndicator    {        private static readonly AsyncCallback   nullCallback    = delegate { };        private static readonly object[]        emptyArray      = new object[] { };        public static void ShowWhile(Control control, ThreadStart method)        {            if (method == null)                throw new ArgumentException("Missing method definition", "method");            if (control == null)            {                method.BeginInvoke(nullCallback, emptyArray);                return;            }            control.Cursor = Cursors.WaitCursor;            MethodInvoker callback = delegate   { control.Cursor = Cursors.Default; };            AsyncCallback invoke   = delegate   { control.Invoke(callback); };            method.BeginInvoke(invoke, emptyArray);           ...

What's wrong with this code?

Segnalo che sul blog di DeveloperZen è iniziata una serie di post per certi versi simile ai mitici Quiz Sharp di Adrian Florea.Il primo quiz (sul pattern Singleton) l'ho trovato particolarmente interessante, in quanto la soluzione (abbastanza scontata) usando il "Double-Check Locking" pare non essere poi così corretta.La discussione completa sul quiz è a parer mio interessante, e vale la pena leggersela, così come vale la pena dare una occhiata spesso all'homepage di DotNetKicks, dove vengono segnalati continuamente post interessanti :)Technorati Tags: dotnet, quiz sharp, dotnetkicksPowered by ScribeFire.

Il valore della community...

L'altro giorno si chattava con Gian Maria di quanto il refactoring del Visual Studio 2005 sia poca cosa rispetto a quel gran bel pezzo di software che è eclipse, e quanto in fondo sia indispensabile ReSharper per lavorare proficuamente... al che mi viene in mente che forse i tizi di JetBrains magari forniscono un qualche tipo di supporto alle communities .NET e agli users group come il nostro DotNetMarche...Insomma, vado sul sito e trovo subito la pagina dedicata alle communities... "If you are the leader of a .NET User Group (NUG), and you would like JetBrains to help support your...

NHibernate.Spatial is on the way...

Il sempre più prolifico autore dello straordinario MsSqlSpatial si lancia in una nuova avventura, se possibile ancora più entusiasmante...Ancora il codice non è stato rilasciato, ma ho potuto dargli una occhiata in anteprima, e ce ne sono di cose interessanti su cui lavorare... :)NHibernate.SpatialNHibernate.Spatial, Spatial extensions for NHibernate, allows you to connect NHibernate to a spatially enabled database and manipulate geometries in HQL or in .NET code using NetTopologySuite, providing you with a fully integrated GIS programming experience.Technorati Tags: mssqlspatial, nhibernate, nhibernate.spatial, nts, nettopologysuitePowered by ScribeFire.

Workshop DotNetMarche: resoconto fotografico...

Resoconto fotografico dal workshop DotNetMarche...

Terzo WorkShop DotNetMarche: accessibilita'

Ne ha già parlato stefano, ma permettetemi di ricordarvi che per martedì 17 aprile a Castelfidardo è in programma il terzo workshop DotNetMarche, in cui parleremo di Accessibilita'! Dopo innumerevoli vicissitudini di carattere logistico siamo finalmente riusciti ad organizzarci in qualche modo (anche grazie all'insostituibile aiuto di Roberto "irish man" Sileoni) e dare piena realizzazione ad un evento a cui personalmente tengo molto: perchè l'argomento è importante sia dal punto di vista sociale che tecnico, perchè IMHO c'è un sacco di confusione sull'argomento, perchè italia.it non è accessibile nonostante tutti i soldi spesi, perchè ne parleremo anche con chi tutti giorni è costretto a...

Di ritorno dal MarCamp...

Sabato scorso c'è stato il già pubblicizzato MarCamp ad Ancona... manifestazione interessante, anche se per certi diversi diversa da come mi aspettavo e da come auspicavo. Noi di DotNetMarche siamo scesi in forze, pronti a seminare un pò di semini .NET tra postazioni linux, PHP e iBook, e direi che non è andata male, a parte l'istantanea che riprende me (con una posa da fesso incredibile) e Gian Maria... Probabilmente delle tre presentazioni che abbiamo tenuto, quella di Stefano, incentrata sull'esperienza d'uso di Windows Vista, è stata la più centrata visto il target di pubblico della manifestazione abbastanza generalista. Per Gian Maria è la...

Workshop DotNetMarche: il rovescio della medaglia...

Visto che già GianMaria ha provveduto ai doverosi e sentitissimi ringraziamenti ai relatori per la loro disponibilità e al gruppo Loccioni per l'ospitalità e il buffet, permettetemi di ringraziare ancora una volta tutti gli "stranieri" che si sono fatti centinaia (e non scherzo) di chilometri per partecipare al workshop. L'unico di cui ricordo il nome è il lodigiano Igor, ma c'era gente da Bari, da Arezzo, nonchè un eroe venuto da Brescia Livorno, rimasto per la cena e poi ripartito per tornare a casa perchè il giorno dopo doveva lavorare: giuro che fonderò diversi templi del Culto della Forza in tuo onore! :) Ovviamente (e ti...

ActiveWriter: un tool per modellare entità e relazioni

"ActiveWriter is basically a tool to model entities and relations between them. It consists of a modeller and a code generator. Entities are generated as C# or VB classes." La particolarità di questo tool (ancora in versione beta) è la possibilità di generare entità a partire da tabelle SqlServer e decorare le entità stesse con gli attributi ActiveRecord, cosa che lo rende potenzialmente il tool d'elezione per chi usa MonoRail e rimpiange gli script da console del suo "ispiratore" Ruby On Rails...  Appena ho un pò di tempo libero, se va avanti così per le vacanze di Natale, lo provo e posto un paio di impressioni...   ...la...

Castle Stronghold: il castello diventa ancora più grande...

Del progetto Castle se ne è parlato pure all'ultimo workshop, quando Andrea, parlando del pattern ActiveRecord, citò l'implementazione .NET dello stesso disponibile su licenza Apache Common License 2.0. (ora però basta con i link a manetta...) Castle in realtà è molto più di questo: è una famiglia di "prodotti" e soluzioni liberamente disponibili per la piattaforma .NET. Uno dei più conosciuti (ma date una occhiata pure agli altri!) è MonoRail, l'implementazione .NET "riveduta e corretta" (meglio dire estesa...) del famoso Ruby On Rails, di cui, in seno all'attività di DotNetMarche, ho parlato nella mia ultraprolungata sessione, e di cui sono disponibili nell'area...

DuckTyping: Runtime Dynamic Interface implementation

Un articolo che mostra una implementazione del Duck-Typing (tanto caro pure ai Ruby-isti...) in .NET... pare interessante... Duck typing is a term for dynamic typing typical of some programming languages, such as Smalltalk, Visual FoxPro or Coldfusion, where a variable's value itself determines what the variable can do. Fonte: DuckTyping: Runtime Dynamic Interface implementation - The Code Project - C# Libraries   ...la corrente...il mio blog personale... powered by IMHO 1.3

Form Start() to Continue()...

Come forse già saprete, giovedì 12 ottobre si è svolto il primo workshop del neonato .NET UserGroup Marchigiano, nomato DotNetMarche, ed in occasione del rilascio del materiale (slide e codice) da scaricare, posto un paio di considerazioni sparse e poco lucide (complice anche la febbre che in questo momento mi attanaglia...). Innanzitutto la location: come magari si evince dalle foto , il Gruppo Loccioni ci ha gentilmente consentito di utilizzare per il workshop la loro sala riunioni, presente nella sede di Angeli di Rosora; questo ci ha permesso di offrire ai partecipanti (circa una quarantina di persone...

Non di solo MSDN si vive...

Anche yahoo è con noi... This site is your source for information about using the .NET Framework with Yahoo! Web Services and APIs. Here you'll find: HOWTO Articles to help you understand our technologies and how you can use them better with .NET. Download the sample browser, utility libraries and source...

Why Would a .NET Programmer Learn Ruby on Rails?

Un articolo interessante anche se discutibile per certi versi (ad esempio leggete i commenti), sta di fatto che Ruby on Rails è una figata pazzesca, e che MonoRail, pur molto interessante, per ora (e temo per sempre...) non gli si avvicina quanto a funzionalità... Un piccolo estratto dell'articolo... With Rails, you don't need an O/R Mapper.By applying a few naming conventions while naming your database tables and columns, and your domain model objects, you can forget about the pain of implementing an O/R Mapper on your own. Ruby on Rails does it for you. In the simplest case, all you need to...

Le icone di eclipse...

...sono carine, e magari potreste volerle mettere pure nel vostro progetto .NET... Eclipse hints, tips, and random musings: Eclipse Icons ...la corrente...il mio blog generalista... powered by IMHO 1.3

TestDriven.NET ìntegrato con Reflector

I due migliori tools in circolazione ora lavorano insieme... TestDriven.NET now contains some functionality that was in the discontinued ReflectorVsAddin add-in. Right click and 'Test With... Reflector' to navigate to any code element inside Reflector. This works with methods, types, fields, events, enums and delegates. When you first use this functionality you will have the option to automatically fetch Reflector or use a local copy. You can download the latest version of TestDriven.NET from here. Fonte: TestDriven.NET by Jamie Cansdale : Reflector Add-In Lives Again ...la corrente...il mio blog generalista... powered by IMHO 1.3

Java vs .NET: OpenSource GIS...

Pochi giorni fa il blog di Morten Nielsen, l'autore di SharpMap, ha ospitato una discussione abbastanza accesa sul perchè, in ambito GIS open-source, .NET non sia considerato... Il tutto nasce da un white paper di Refractions Research, quelli del software gis uDig, in cui il mondo del GIS viene descritto come diviso in due categorie: quello dei progetti C-based e quello dei progetti Java-based: Open Source GIS software can be categorized into two largely independent development tribes. [...] The ‘C’ tribe, consisting of developers working on UMN Mapserver, GRASS, GDAL/OGR, OSSIM, Proj4, GEOS, PostGIS, QGIS, MapGuide OS and OpenEV. The ‘C’ tribe also...

Microsoft Device Emulator 1.0: rilasciato il sorgente!

Abbandono per un attimo i patemi del "lato oscuro" in cui sono oramai da tempo piombato (temo con poche vie d'uscita...) per segnalarvo il rilascio del sorgente del Device Emulator 1.0! La licenza è la solita Shared Source, la stessa di rotor ad esempio. cop-incollo un pò di informazioni direttamente dalla pagina principale...   What is the Device Emulator? The Device Emulator is a software simulation of a CPU and motherboard, that runs the Windows CE and Windows Mobile operating systems. The emulator is a single Windows .EXE file that contains: A CPU emulator that executes the ARM instruction set by JIT-compiling...

OpenNETCF 2.0: Calendar Controls Beta

Purtroppo (per me) in questo ultimi tempi (oramai qualche mese) sono costretto al lato oscuro... cosa che mi rende difficoltoso l'aggiornamento alle ultime novità del mondo .NET, compreso il nuovo OpenNET CF 2.0; tra l'altro ho visto che è cambiato qualcosa nella licenza, e con 50 dollari è ora possibile comprare la versione con il supporto per il designer di VS2005... Comunque, oggi è uscita la beta del nuovo calendar control, che trovate a questo link.   ...la corrente...il mio blog generalista... powered by IMHO 1.3

Visual WebGui Enterprise Manager

A new database tool that is based on Microsoft's "Enterprise Manager" and is actually a natural evolution of the popular "ASP.NET enterprise manager" that provides similar capabilities with a fully AJAX enabled UI and multiple database type support Fonte: SourceForge.net: Visual WebGui Enterprise Manager Pare interessante... è in versione beta 1.0.1. ...la corrente...il mio blog generalista... powered by IMHO 1.3

WinForms stile GoogleTalk

A me personalmente lo stile minimalista di Google Talk piace molto, e qui viene spiegato come replicarlo nelle nostre Windows Forms! Nice ...la corrente...il mio blog generalista... powered by IMHO 1.3

Recuperare il percorso di tutti i files in una directory di un PocketPC connesso via ActiveSync...

Un titolo chilometrico (scusate!) per qualche riga di codice che magari sarà utile a qualcuno... /// <summary>/// Retrieve all files in the specified folder of a repote PocketPC device connected via ActiveSync./// </summary>/// <param name="searchPath">Remote folder in a PocketPC device.</param>private void SearchFiles(string searchPath){    Debug.Assert(rapi = null);        // member referring to a OpenNETCF.Desktop.Communication.Rapi object    Debug.Assert(rapi.Connected);    // Test is PocketPC device is already connected    FileList list = rapi.EnumFiles(searchPath + @"\\*");    foreach(FileInformation file in list)    {                        if(file.FileAttributes  == 16)        // Is a directory: recursive search...            SearchFiles(searchPath + "\\" + file.FileName);            else if(file.FileAttributes  == 32) // Is a file: add to a list...            filesPathsList.Add(searchPath + "\\" + file.FileName);        else throw new ArgumentException            ("FileAttributes unknown: " + file.FileAttributes, "file.FileAttributes");    }} Il codice direi che è autoesplicatico, comunque... Semplicemente, chiamando il metodo SearchFiles e passandogli il path remoto della cartella iniziale da cui recuperare il percorso assoluto dei files (ad esempio "\My Documents" per la cartella Documenti del PocketPC), viene inserito nell'IList filesPathsList il path assoluto di tutti i files presenti nella directory corrente e in tutte le sottodirectory della directory stessa. Il tip usa l'oggetto RAPI dell'assembly OpenNETCF.Desktop.Communication per la comunicazione via ActiveSync. ...la corrente...il mio blog generalista... powered by IMHO 1.3

NASA World Wind 1.3.4 released!

Se siete "Google Earth addicted" DOVETE conoscere pure WorldWind, che non è per niente male (anche se la base dati di Google fa paura...). Oggi è uscita la versione 1.3.4, che a quanto pare è in grado di leggere i files KML, accedendo quindi alle informazioni pubblicate dalla florida community di Google Earth. Perchè questo post non è marcato come OT? Semplice, WorldWind è scritto in C#, usa in Framework .NET e le Managed DirectX, e si può scaricare da qui! Dateci una occhiata che merita. ...la corrente...il mio blog generalista... powered by IMHO 1.3

HowTo: Da SQL Express a SQL Express Advanced

Visto che proprio un paio di giorni fa ho provato ad aggiornare la mia installazione di Sql Express 2005 alla nuova SP1 Advanced, fallendo miseramente e compromettendo l'istanza stessa (che del resto era vuota, quindi chissenefrega!  ), penso tornerà utile sapere come occorre procedere per ottenere risultati migliori...  Fonte: SQL Server Express WebLog : How to upgrade from SQL Express to SQL Express Advanced ...la corrente...il mio blog generalista... powered by IMHO 1.3

WinForms: MultiThreading immediato con il BackGroundWorker Control

Sto sviluppando una applicazione abbastanza semplice usando le Windows Forms del Framework .NET 1.1, talmente semplice che in due giorni è bell'e pronta... quello che mi serve praticamente è una specie di procedura wizard-like, avviabile da una applicazione unmanaged, per esportare una serie di dati propri della applicazione stessa e generare un documento in formato XML che descriva i dati esportati. ... continua...

Community days? Arrivooo!!!

Sono in fase di riscaldamento dei motori per la session di domani dei Community Days! Domattina sveglia alle 5.15, colazione + caffè, ore 5.45 appuntamento con il mio collega Andrea e con il "compagno di UGI-Cena" Roberto, 3 ore abbondanti(ssime) di autostrada (sperando nel traffico non esorbitante) e via con le sessions! Tutto per scroccare il pranzo alla Microsoft... quindi all'ora di pranzo fatevi da parte, prego Ah, e lasciatemi da parte dosi abbondanti di caffè, perchè il rientro è previsto in giornata...   ...la corrente...il mio blog generalista... powered by IMHO 1.3

Working with 8bit images in .NET

Un piccolo estratto da un articolo molto interessante ad opera di Morten Nielsen... "For some reason Microsoft made it pretty hard to work with anything but 24bit images. This is even though they provide you with several pixel formats, but no way of setting and getting the values of a pixel. If you use the SetPixel(x,y) or GetPixel(x,y) methods, your application will fail. There are plenty of articles and blogs on the Internet on how to do direct access on 1bit and 24bit, but I wasn't able to find anything on 8bit."   ...la corrente...il mio blog generalista... powered by IMHO 1.3

Loren Ipsum generator per VS2003-2005

Lo trovate qui!!! Domani appena arrivo al lavoro lo provo... :)

Nuova release di RubyCLR

E' da un pochino che seguo questo blog, in cui l'autore John Lam pubblica le sue esperienze nello sviluppo di RubyCLR. Ruby è infatti un linguaggio di programmazione a dir poco eccezionale, e se non lo conoscete vi consiglio di studiarvelo un pochino perchè merita davvero (io mi sono comprato questo libro, e me lo sono letto a mò di romanzo in due-tre giorni...). In più la possibilità di usarlo come linguaggio di programmazione per il framework .NET è davvero una bella opportunità, e mi permette di "riciclare" conoscenze acquisite in un nuovo ambiente...Insomma, oggi è uscita una nuova release (ovviamente più...

Le piccole (o grandi) soddisfazioni della vita...

"We are pleased to announce that the maintainers of monoGIS have decided to integrate with Diego Guidi's NetTopologySuite (NTS). In the future, all spatial operations, spatial indexes, conversions between standard formats (WKB, GML, ..) and so forth within monoGIS will be handled by NTS.  We see this as a great step for .NET open-source GIS community as both projects will combine their forces in the future.  For details of NTS see http://sourceforge.net/projects/nts." Fonte: SourceForge.net: monoGIS integrates con NTS Ci credete se vi dico che sono gasato da sta cosa? In effetti adesso che ci penso è anche una bella responsabilità...   ...la corrente...il mio blog generalista......

NetTopologySuite 1.2 Final release

Dopo qualche nottata di lavoro ed una decisione sofferta, sono riuscito a "terminare" i lavori sulla versione 1.2 di NetTopologySuite. "Terminare" tra virgolette perché immagino ci siano ancora un pò di bug sparsi e non ho potuto testare tutto come vorrei, ma del resto era ora di cominciare i lavori sulla prossima versione! Una cosa però molto importante che sono riuscito a fissare (grazie soprattutto all'impegno del team di monoGIS, che sembrano entusiasti del lavoro... a breve ci dovrebbero essere novità!) è stata la modifica del codice per renderlo effettivamente LGPL.Purtroppo alcune librerie che usavo in precedenza, tra l'altro inutilmente visto...

Come formattare un controllo DataGrid nel Compact Framework 1.0

Come potrete immaginare non è poi così diverso da come si fa nel controllo DataGrid "standard" del Framework 1.1... Comunque, cercando come nascondere graficamente una colonna di un controllo DataGrid, sono partito da questo link, How do I hide a column in the .NET Winforms Datagrid?, che si riferisce al controllo Windows Forms, in cui sono fondamentalmente indicati due metodi: 1) Formattare il controllo DataGrid attraverso la proprietà TableStyles. 2) Impostare la proprietà ColumnMapping delle colonne della DataSource come MappingType.Hidden. Quest'ultimo metodo, estremamente veloce e pratico sulla carta, con il Compact Framework non sembra funzionare (forse a causa del fatto che il controllo DataGrid...

C# 3.0 and LINQ

Segnalo un articolo interessante sulle novità di C# 3.0 e LINQ, rilasciato da Microsoft Benelux (è proprio vero che Microsoft arriva dappertutto...).   ...la corrente...il mio blog generalista... powered by IMHO 1.3

GeoTools.NET: call to arms...

L'idea nasce da una serie di considerazioni, che ora vi espongo con formalismo da segretaria: 1) In quest'ultimo mese ho cominciato un lavoro per certi versi molto interessante sulla gestione dei metadati sui dati geografici in standard ISO 19115; il "per certi versi" si riferisce al fatto che il committente ha richiesto esplicitamente che il lavoro sia realizzato in Java, precludendo qualsiasi altro ambiente di sviluppo. Ora, chi è addentro alle "cose del mercato" avrà già capito che il "committente" è un ente pubblico; sembra che il settore pubblico sia (giustamente) interessato a proporre soluzioni basate unicamente su software opensource-like, ma (ingiustamente)...

MSDN Finalmente!

In quel di Ottobre 2005 Igor (devo specificare Igor Damiani o solo Damiani?) segnalò all'universo conosciuto la possibilità di abbonarsi a MDSN Professional a prezzi vantaggiosi se in possesso di una qualche licenza precedente - nel caso della ditta in cui lavoro avevamo solo VS2002(!!!). Non so perchè, non so come, ma in pratica oggi è arrivata (finalmente) MSDN Professional!!! Per ora gli ho dato una occhiata superficiale... beh, è un gran pacco di roba! Peccatto per tutta quella plastica inutile, tipo MSDN in tedesco... Ora devo indagare per capire come accedere ai download del materiale MSDN, poi scateno il PC-Mulo dei download (mulo...

Applicazioni MDI Visual Studio-style!

DockPanel Suite è una suite di controlli per "replicare" (e a guardare il codice di esempio sembra riuscirci molto bene...) lo stile del Visual Studio (pannelli dockabili in lungo e in largo, MDI, ecc...) nelle proprie applicazioni. E' in versione sia per framework 1.1 che 2.0, e merita decisamente una occhiata! ;) powered by IMHO 1.3

stdole.IPictureDisp 2 System.Drawing.Image e ritorno...

Questo snippet di codice permette di passare dal formato di immagini System.Drawing.Image al formato stdole.IPictureDisp. /// <summary>/// Perform bidirectional conversions between <see cref="stdole.IPictureDisp"/> and <see cref="System.Drawing.Image"/> formats./// </summary>sealed public class ImageConverter2 : System.Windows.Forms.AxHost {     /// <summary>    /// Initializes a new instance of the <see cref="ImageConverter2"/> class.    /// </summary>    private ImageConverter2(): base(null) { }    // base(""59EE46BA-677D-4d20-BF10-8D8067CB8B32"")    /// <summary>    /// Convert a <see cref="System.Drawing.Image"/> to a <see cref="stdole.IPictureDisp"/>.    /// </summary>    /// <param name="image">The image in <see cref="System.Drawing.Image"/> format.</param>    /// <returns></returns>    public static stdole.IPictureDisp ImageToIPicture(System.Drawing.Image image)     {         return (stdole.IPictureDisp)System.Windows.Forms.AxHost.GetIPictureDispFromPicture(image);     }     /// <summary>    /// Convert a <see cref="stdole.IPictureDisp"/> to a <see cref="System.Drawing.Image"/>.    /// </summary>    /// <param name="picture">The picture in <see cref="stdole.IPictureDisp"/> format.</param>    /// <returns></returns>    public static System.Drawing.Image IPictureToImage(stdole.StdPicture picture)     {         return System.Windows.Forms.AxHost.GetPictureFromIPicture(picture);     } } powered by IMHO 1.3

GUIDGen AddIn for Visual Studio.NET

Oggi mi sono divertito un paio d'orette con l'interoperabilità COM/.NET, ovvero come realizzare una libreria in C# e renderla disponibile in ambiente COM, che per le mie esigenze era semplicemente VB6. L'approccio è stato veramente facile, grazie soprattutto alle slides e al codice di esempio di Raffaele Rialdi, che durante l'ultimo workshop ha affrontato tra gli altri proprio questo argomento: fortunatamente io c'ero, quindi riguardare il codice di esempio e ricrearmi una mia libreria personalizzata è stata una questione di minuti! Nel riguardare una serie di cose mi sono imbattuto però in GUIDGen.NET, un addin per VS2003 che permette di generare ed inserire...

Nuova versione del SqlClrProject

Segnalo a chiunque sviluppi codice CRL da integrare in Sql Server 2005 che Niels Berglund ha pensato a tutti noi in queste feste natalizie, e ha rilasciato la versione definitiva del suo SqlCrlProject, un insieme di templates, addins ed utilità per VS2005 che facilitano enormemente lo sviluppo di componenti managed da integrare in Sql Server. Vi consiglio di scaricare il tutto direttamente da qui ed installare il tutto. Dopo aver estratto l'archivio, prima di lanciare la procedura di installazione occorre controllare che ogni file .bat (sono quattro, uno per cartella) punti alle giuste cartelle sul vostro disco (ad esempio, occorre sostituire "My  Documents"...

voo2do: TODO web2.0 style

voo2do è un servizio (ovviamente gratuito) che sto imparando ad usare e che per quelli come me che sono abituati a segnare OGNI cosa che devono fare (i maniaci del post-it, insomma) è davvero comodo. E' in pratica un sito internet in cui inserire e tenere organizzate tutte le attività che dovete svolgere, con la possibilità di inserire priorità, note, data massima entro cui finire il lavoro, ecc... Dategli una occhiata perchè merita, soprattutto perchè esiste pure una applicazione FW 2.0 chiamata voo2to tray (qui il sorgente) che vi permette, tramite, le voo2do API, di gestire le attività da desktop. Un concorrente che non ho provato ma...

Abilitare il trace di una applicazione

Le classi System.Diagnostics.Debug e System.Diagnostics.Trace sono le classi principali per il debugging delle applicazioni, e sono di base praticamente identiche (hanno apparentemente gli stessi metodi e proprietà); 'unica differenza veramente avvertibile è che in base alle impostazioni di default di Visual Studio i progetti in configurazione DEBUG vengono compilati con i simboli DEBUG e TRACE, mentre in modalità RELEASE solo con il simbolo TRACE. Ciò comporta che le istruzioni del tipo Debug.Write verranno eseguite solamente negli eseguibili compilati in modalità DEBUG, mentre le istruzioni tipo Trace.Write verranno eseguite pure in modalità RELEASE. Questo ovviamente si traduce nel fatto che potete monitorare l'attività di una...

NTS on the road!

Magari sapete già del mio progetto rilasciato sotto licenza L-GPL, NetTopologySuite... Ecco il primo progetto che lo usa! Che dire... sono contento! ... The aim of the present monoGIS project is to implement a complete GIS system on top of the new, industry-proven Mono platform. Instead of the many other approaches, which try to build a system from scratch, monoGIS is focused on already existing pieces. Mono is multi-platform, multi-language and multi-technology. The term multi-technology means that you may couple a variety a different programming platforms within the same application. Because of this multi-technology aspect, monoGIS has been built upon the following already existing sources: OGR/GDAL (C++)...

EasyObjects.NET 1.0: An OR/M architecture for the Enterprise Library

Segnalo un tool che pare interessante... EasyObjects.NET is an Object/Relational Mapper architecture built on top of the Enterprise Library (June Release). With built-in support for transactions, dynamic query construction and dynamic configuration strings, EasyObjects.NET reduces coding errors while increasing developer productivity. Using code generation, you can build your data and business layer in a matter of minutes, including standard CRUD stored procedures. Both C# and VB.NET are supported. SQL Server and Oracle support are included by default. Included in the zip is a snapshot of the source code and a QuickStart example. Code generation templates are available for the popular MyGeneration...

CodeKeep AddIn per Visual Studio 2003

Igor e altri avevano segnalato questo post sui 10 tools che ogni sviluppatore dovrebbe avere assolutamente. Tra le varie segnalazioni c'è pure CodeKeep, un repository di pezzi di codice, non necessariamente dotnet. Mi era sfuggito però l'Add-In per Visual Studio (per ora solo 2003, prossimamente 2005)! Molto ma molto più comodo così... powered by IMHO 1.3

Creare installer MSI per PocketPC

In generale creare installazioni per i propri programmi (.NET o meno) è abbastanza facile, visto che sia il Visual Studio 2003/2005 che il Visual Studio Installer semplificano di molto le cose. Sinceramente però non avevo mai creato applicazioni mobile che necessitassero di un setup "professionale", e memore delle mie precedenti esperienze disastrose  con cab e deploy vari (in ActiveX su IE) temevo di "non cavarci le gambe"... E invece è andata molto bene, in mezza giornatina ho fatto tutto, pure con molta tranquillità, e ora vi racconto come ho fatto... sempre che ve ne freghi qualcosa Allora, la bibbia è tutta qui,...

Invoke e Compact Framework

Dell'importanza del metodo Control.Invoke non mi sembra il caso di discuterne nemmeno; è stato sorprendente per me però scoprire che di base non è possibile passare argomenti ad un metodo tramite invoke nel compact framework, visto e considerato che nell'ambiente di sviluppo per palmari l'overload  public virtual object Invoke(Delegate, object[]); non è supportato! Ecco quindi una classe, leggermente maneggiata (ma nemmeno tanto) rispetto a quella disponibile qui, per superare la limitazione: using System;using System.Collections;using System.Windows.Forms;namespace TerraNova.OnSite{        public delegate void MethodCallInvoker (object[] o);    public class ControlInvoker    {        private class MethodCall         {            public MethodCallInvoker invoker;            public object[] arguments;            public MethodCall (MethodCallInvoker invoker, object[] arguments)             {                this.invoker = invoker;                this.arguments = arguments;            }        }        private Control control;        private Queue argumentInvokeList = new Queue();        public ControlInvoker(Control control)         {            this.control = control;        }        public void Invoke(MethodCallInvoker invoker, params object[] arguments)         {            this.argumentInvokeList.Enqueue(new MethodCall(invoker, arguments));            control.Invoke(new EventHandler(ControlInvoke));        }        private void ControlInvoke (object sender, EventArgs e)         {            MethodCall methodCall = (MethodCall)argumentInvokeList.Dequeue();            methodCall.invoker(methodCall.arguments);        }    }}   powered by IMHO 1.3

ImpersonationChanger: una classe per la modifica a runtime dell'account loggato al sistema

Questa classe incapsula una serie di dichiarazioni P/INVOKE per la modifica a runtime dell'utente loggato al sistema, utile ad esempio se da una pagina ASP.NET occorre accedere MOMENTANEAMENTE a risorse accessibili solo come utente != ASP.NET... Chiaramente occhio a quello che fate... using System;using System.Runtime.InteropServices;using System.Security.Principal;namespace GisSharpBlog.Logging{    /// <summary>    /// Changes the account logged to system.    /// </summary>    public class ImpersonationChanger : IDisposable    {                #region STATIC P/INVOKE DECLARATIONS        [DllImport("advapi32.dll")]        private static extern int LogonUser(string userName, string domain, string password,                                            int logonType, int logonProvider, ref IntPtr token);        [DllImport("advapi32.dll", CharSet=CharSet.Auto, SetLastError=true)]        private static extern int DuplicateToken(IntPtr token, int impersonationLevel, ref IntPtr newToken);        [DllImport("advapi32.dll", CharSet=CharSet.Auto, SetLastError=true)]        private static extern bool RevertToSelf();        [DllImport("kernel32.dll", CharSet=CharSet.Auto)]        private static extern  bool CloseHandle(IntPtr handle);                #endregion        #region PARAMETERS                private const int LOGON32_LOGON_NETWORK = 3;        private const int LOGON32_PROVIDER_DEFAULT = 0;            #endregion                #region CLASS IMPL        private WindowsImpersonationContext impersonationContext = null;        private string domain = String.Empty;        private string username = String.Empty;                private string password = String.Empty;                        public ImpersonationChanger(string domain, string username, string password)        {            this.domain = domain;            this.username = username;            this.password = password;        }        /// <summary>        /// Log to system with modified user informations.        /// </summary>                /// <exception cref="ApplicationException">If wrong user parameters are used.</exception>        public WindowsImpersonationContext ImpersonateValidUser()        {            WindowsIdentity windowsIdentity = null;            IntPtr token = IntPtr.Zero;                        if(RevertToSelf())            {                if(LogonUser(username, domain, password, LOGON32_LOGON_NETWORK, LOGON32_PROVIDER_DEFAULT, ref token) != 0)                {                                        windowsIdentity = new WindowsIdentity(token);                        impersonationContext = windowsIdentity.Impersonate();                    if (impersonationContext != null)                    {                                                CloseHandle(token);                                                return impersonationContext;                    }                }            }            if(token != IntPtr.Zero)                    CloseHandle(token);                        throw new ApplicationException("Should never reach here!");        }        /// <summary>        /// Revert changes.        /// </summary>        /// <param name="impersonationContext"></param>        public void UndoImpersonation()        {                    if(impersonationContext != null)                impersonationContext.Undo();            impersonationContext = null;        }        #endregion        #region IDISPOSABLE IMPL        /// <summary>        ///         /// </summary>        public virtual void Dispose()        {            Dispose(true);            GC.SuppressFinalize(this);                    }        protected virtual void Dispose(bool disposing)         {            if (disposing)                             UndoImpersonation();                impersonationContext = null;        }                ~ImpersonationChanger()        {            Dispose (false);        }        #endregion    }} download code Ecco come si usa: using(new GisSharpBlog.Logging.ImpersonationChanger("domain", "username", "password")){    // Do work with new log user credentials...}// Continue with old credentials... Difficile, no? Sia benedetto il pattern Dispose... Posto un paio di configurazioni: questo codice mi serviva per accedere a dei files in rete locale da un WebService, cosa che l'utente normale ASP.NET non permette di fare; ora, non sono riuscito a compiere tale operazione utilizzando questa classe (da alcuni post trovati su internet pare che non sia possibile se non...

Prossima trasferta a Milano... Microsoft Mobile Conference!

Compatibilmente con gli impegni e le risorse finanziarie, mi sembra molto interessante come conferenza, soprattutto perchè il Compact Framework 2.0 è un bel salto in avanti... Se qualcuno si aggrega, magari si fa il viaggio insieme Iscrizioni aperte alla Microsoft Mobile Conference : evento gratuito del 15 Dicembre dovi si parlerà di sviluppo mobile con la piattaforma .NET Compact Framework 2.0, Visual Studio 2005 e SQL 2005 Mobile (tutti rilasciati settimana scorsa) . La giornata si propone con una serie di sessioni che vanno dalle caratteristiche di base di VS 2005 fino all'approfondimento di alcune tecniche per l'ottimizzazione dell'accesso a SQL 2005 Mobile. Molti...

Classe Color, serializzazione XML, WebServices...

Memore dei "problemi" avuti in un recente passato da Igor con la serializzazione della struttura Color, non mi sono stupito più di tanto quando non ho trovato i membri R, G, e B di una mia proprietà di tipo Color "dall'altra parte" di un Web Service... Mi spiego meglio: ho realizzato un semplice WebService (che dovrà essere obbligatoriamente consumato da una applicazione .NET - Desktop e PocketPC), che espone una classe, la quale contiene una proprietà, TrasparentColor, di tipo Color per l'appunto. Lato client, e per gli stessi motivi citati da Igor nel suo post, non vengono ricostruite le proprietà che permettono di recuperare i valori...

P/Invoke e PocketPC: la rivincita di .NET...

Al di là del titolo stupido, i problemi di "convivenza" tra PocketPC e codice nativo C++ che citavo in precedenza sono stati risolti grazie alla segnalazione di Stefano Ottaviani : su MSDN ci sono una serie di articoli che spiegano + o - tutto quello che c'è da sapere... compreso il problema della ridenominazione dei metodi, che in realtà si chiama Name Mangling: basta aggiungere alla firma dei metodi extern  "C" per evitare la modifica del nome dei metodi! Per quanto riguarda il problema dell'eccezione NotSupportedException generata se si usano come tipo...

P/Invoke e Pocket PC: istruzioni per l'uso

Parallelamente al progetto che sto intraprendendo attualmente, ho iniziato a seguire un "percorso alternativo": sto cercando di vedere se e come realizzare un software GIS su piattaforme PocketPC.Nell'analisi delle possibilità di sviluppo del software, ho verificato che non esiste la possibilità di gestire via palmare i file .dbf tramite codice managed, sia tramite il Compact Framework 1/2, che tramite estensioni OpenNET o componenti esterni.Siccome xò i file dbf sono alla base della gestione degli attributi nei file shapefile (PDF delle specifiche del formato di file Shapefile), ed è essenziale che qualsiasi cosa si chiami GIS gestisca bene questo formato di file (che...

DllImport ed extern functions: tipi unmanaged e corrispondenti tipi managed

Questa tabella riassuntiva penso sarà utile a chiunque stia "impazzendo" col P/Invoke, (e dire che l'intervento di Raffaele al workshop è stato pure molto istruttivo... C/C++ C# HANDLE, LPDWORD, LPVOID, void* IntPtr LPCTSTR, LPCTSTR, LPSTR, char*, const char*, Wchar_t*, LPWSTR String [in], StringBuilder [in, out] DWORD, unsigned long, Ulong UInt32, [MarshalAs(UnmanagedType.U4)] bool bool LP<struct> [In] ref <struct> SIZE_T uint LPDWORD out uint LPTSTR [Out] StringBuilder PULARGE_INTEGER out ulong WORD uInt16 Byte, unsigned char byte Short Int16 Long, int Int32 float single double double NULL pointer IntPtr.Zero Uint Uint32 L'articolo completo lo trovate qui P.S: Postare senza IMHO (che non so perchè oggi non vuole andare... aspetto di riavviare il PC e riprovare prima di dichiararlo un bug!) è un incubo...

VistaDB 2.1 database for .NET has been released

VistaDB 2.1 database for .NET has been released This 2.1 update includes over 60 improvements, including new support for .NET 2.0 and Visual Studio .NET 2005. VistaDB is a small-footprint, embedded SQL database alternative to Jet/Access, MSDE and SQL Server Express 2005 that enables developers to build .NET 1.1 and .NET 2.0 applications. Features SQL-92 support, small 500KB embedded footprint, free 2-User VistaDB Server for remote TCP/IP data access, royalty free distribution for both embedded and server, Copy 'n Go! deployment, managed ADO.NET Provider, data management and data migration tools. Free trial is available for download.- Learn more about VistaDB- Repost this to your blog and receive...

HttpWebRequest, IIS e Credenziali di accesso - Parte 2

Da qualche giorno sono in fase di raccolta materiale per espandere un mio precedente post e renderlo un articolo, magari da pubblicare su UGI, riguardo alle credenziali di accesso a server web via HTTP. Oggi mi sono imbattuto in questo articolo che sembra proprio ciò che avrei voluto scrivere se avessi avuto più tempo nelle ultime settimane per approfondire l'argomento (e se conoscessi decentemente l'inglese, pure...). Mi sa che dovrò cercare altro materiale, visto che UGI non può accontentarsi di una traduzione dall'inglese... powered by IMHO 1.3

VS 2003: copiare files dal desktop di sviluppo all'emulatore Pocket PC

E' da un pò di tempo che "armeggio" con i dispositivi Pocket PC: prima con gli Embedded Visual Tools e poi con il Compact Framework in versione 2.0 e VS 2005. In entrambi i casi è possibile in modo immediato copiare files dal sistema di sviluppo all'emulatore Pocket PC (Visual Tools ha un programma apposito chiamato Remote File Viewer, mentre gli emulatori Pocket PC 2003, distribuiti con la Beta2 del VS 2005, hanno una voce di menù apposita); sorprendentemente (per lo meno per me) Visual Studio 2003, con cui sto sviluppando un progetto in Compact Framework 1.1, e l'emulatore Pocket PC 2002 con esso distribuito...

Finalmente al lavoro su un progetto .NET serio...

Era ora dico io! Per la prima volta sarò coinvolto, anzi sarò il factotum, di un progetto in architettura .NET e linguaggio C# destinato alla produzione! Finora nella azienda in cui lavoro mi era stato chiesto di usare .NET per progetti interni e di R&S... A grandi linee quello che dovrò fare sarà suddiviso in due macroaree: 1) Un client su dispositivi Pocket PC che si occuperà di connettersi ad un WebService .NET, recuperare e gestire informazioni, scaricare files ed avviare un programma esterno (una porcheria prodotta da autodesk e chiamata OnSite View). 2) Un WebService ASP.NET che risponde alle richieste del client...

[Segnalazione]: libri scontati su amazon.co.uk

Il reparto informatica lo trovate qui. Segnalo anche il reparto certificazioni e quello programmazione, in cui ho trovato Windows Forms Programming in C# a 18 sterline.... powered by IMHO 1.3

Dopo il mio primo workshop...

L'unica cosa sensata che posso dire a quest'ora della mattina e con già un'ora di lavoro alle spalle, causa consegna urgente (ma chi è che rompe con le consegne il venerdì mattina?), è che non solo vale la pena di farsi 8 ore di macchina (se poi come me sbagliate pure direzione in autostrada sono pure di più...) + 8 e passa ore di workshop, ma che bisognerebbe farlo almeno una volta al mese! In effetti già mi prudono le mani pensando al prossimo workshop che promette bene assai... Innanzitutto vale la pena esserci perchè si impara e pure tanto, perchè quelle che...

HttpWebRequest, IIS e Credenziali di accesso...

Nel progetto che sto realizzando (un progetto WinForms .NET) in sede di test ho riscontrato un problema, e cioè che il download di un file via http hostato da IIS non funziona se IIS non è configurato per l'accesso anonimo. Il codice originario usato da me era: try{    HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(stringRequest);    webRequest.Credentials = CredentialCache.DefaultCredentials; // Diritti di accesso di default    webRequest.Proxy = WebProxy.GetDefaultProxy(); // Proxy di default    using(HttpWebResponse webResponse = (HttpWebResponse)webRequest.GetResponse())    {        using(Stream instream = webResponse.GetResponseStream())        {            // Download del file        }    }}catch(WebException ex){    Debug.WriteLine(ex.ToString();}catch(Exception ex){    Debug.WriteLine(ex.ToString();}  La cosa insidiosa è che questo codice non genera alcuna eccezione: semplicemente il file viene creato ma ha grandezza 0k. Cercando nella documentazione MSDN ho trovato come configurare l'oggetto Credentials di WebRequest usando un CredentialCache customizzato; il codice di esempio preso dalla documentazione MSDN continua però a dare lo stesso problema: CredentialCache credentials = new CredentialCache();NetworkCredential nc = new NetworkCredential("username", "password");credentials.Add(new Uri("http://localhost/"), "Basic", nc);credentials.Add(new Uri("http://localhost/"), "Digest", nc);webRequest.Credentials = credentials;  Ho risolto modificando il codice precedente...

Ajax.NET Visual Studio .NET 2005 Installer

Qui trovate un template per VS2005 per realizzazione di progetti AJAX con AJAX.NET. Appena avrò tempo di  provarlo posterò qualche impressione... Fonte: Ajax.NET Visual Studio .NET 2005 Installer   powered by IMHO 1.2

[MCAD] Seguendo il corso di Igor...

Stamattina ho un pò di tempo libero e mi sono messo finalmente a leggere con molto interesse il corso MCAD del grande Igor Damiani  Arrivato alla lezione 8 in cui si parla di validazione ed OOP (in realtà è la lezione 9, ma una si è persa per strada...), posto la mia implementazione del codice che Igor ha suggerito finora, rigorosamente 2.0 (notate il partial) ma i concetti sono quelli. Guardate i commenti nel codice... Classe WindwsForm: public partial class MainForm : Form{    // Istanza di age, contiene la validazione    private Age age = null;    public MainForm()    {        InitializeComponent();    }    private void button1_Click(object sender, EventArgs e)    {                    // Mostra il calcolo dell'età        // Non può mai essere null (?) perchè viene costruita nell'evento validate        MessageBox.Show(age.CalculateAge().ToString());    }    private void textBox1_Validating(object sender, CancelEventArgs e)    {              // La validazione è tutta dentro Age...        try        {            age = new Age(new DateTime(Convert.ToInt32(yearTextBox.Text), 1, 1));            errorProvider.SetError(yearTextBox, String.Empty);        }        catch (Exception ex)        {            errorProvider.SetError(yearTextBox, ex.Message);            e.Cancel = true;        }    }} La "famosa" classe Age che separa la logica dalla vestizione... public class Age{    // Mi piace di + questa sintassi rispetto a _birthDate... che ne pensate?    private DateTime birthDate;    public DateTime BirthDate    {        get        {            return birthDate;        }        set        {            birthDate = value;        }    }            public Age(DateTime birthDate)    {        // Valido solo la correttezza dell'età inserita,        // "throwando" (!!!) una apposita eccezione...        // anche se validare nel costruttore non mi sembra il massimo:        // Preferirei nella property get di BirthDate, ma concettualmente        // aAge non è una classe valida se inserisco una dat anon corretta...        if (birthDate.Year < 1880 || birthDate.Year > DateTime.Now.Year)            throw new TooOldException();         // In realtà potrebbe ancora non essere nato,        // ma il concetto è quello...        this.birthDate = birthDate;    }    // getAge è la sintassi del java...    public int CalculateAge()    {        // Quelli del VB6 sono abituati a fare sempre tre righe quando se ne possono fare una:        // int age    (Dim age ..)        // age = System.DateTime.Now.Year - BirthDate.Year;    (Set age...)        // return age        // Oh, senza offesa eh :)))        return System.DateTime.Now.Year - BirthDate.Year;    }} L'eccezione: public class TooOldException : ApplicationException{    // Semplice eccesione senza bisogno di spiegazioni...    public TooOldException()  : base("Sei un pò troppo vecchio...") { }} Ogni commento è gradito... basta che non mi infamate se ho scritto castronerie   powered by IMHO 1.2

AJAX-Style Web Development Using ASP.NET

Un interessante articolo su AJAX in generale e AJAX.NET in particolare. Lo trovate qui. Già che ci sono segnalo anche questo articolo, per chi non segue Balena e il suo blog... powered by IMHO 1.2

NetTopologySuite 1.1

Al solito, qui e qui. powered by IMHO 1.2

Spring.NET - Application Framework 1.0 RC1

We are pleased to announce the 1.0 release candidate of Spring.NET This release introduces an Aspect Oriented Programming (AOP) framework and is a bug and feature enhancement release for the core container. The change in release number, from 0.6 to 1.0, reflects the fact that container (Dependency Injection) and AOP functionality are the foundation libraries upon which future Spring.NET modules will be built. The previous release number was...

Quello che non vi hanno detto sui generics...

Un piccolo estratto dal post: Provate il seguente codice: int[] arr = int[1000];arr[999] = -1;// standard versionint index = Array.IndexOf(arr, -1);// generic versionint index2 = Array.IndexOf<int>(arr, -1); Secondo tutto quello che si pu leggere in giro, la versione che usa IndexOf<int>dovrebbe andare molto pi veloce della precedente, in quanto la ricerca ottimizzata e perch non viene eseguito il boxing del secondo argomento. Beh, ecco la prima sorpresa: le due sintassi producono esattamente lo stesso codice IL e quindi hanno la stessa velocità!. Il resto è cmq molto + interessante!  Fonte: Blog2theMax - Quello che non vi hanno detto sui generics   powered by IMHO 1.2

WebServices and Ajax.NET

  Personalmente l'esistenza di Ajax.NET mi sta invogliando a comprare un bet "manualone" e impararmi il javascript in queste vacanze... Some developers asked me if it is possible to use WebServices (WebMethods) in Ajax.NET. Yes, of course, you can add the AjaxMethod attribute to...

NetTopologySuite su sourceforge!

E' con un pizzico di orgoglio che annuncio l'apertura della sezione NetTopologySuite su sourceforge! Magari a voi sembra poco, ma io sono emozionato... ora mi sento responsabilizzato a mantenere la libreria aggiornata e a migliorarla continuamente! Ho deciso comunque che manterrò aggiornato anche lo spazio su gotdotnet (due è meglio di uno...). powered by IMHO 1.2

Nini: An uncommonly powerful .NET configuration library

Cercando non mi ricordo più dove, mi sono imbattuto in questo progetto, che in pratica permette di accedere in lettura/scrittura a file di configurazione di qualsiasi tipo in modo immediato e  flessibile. Due parole prese direttamente dal manuale: Nini is an uncommonly powerful .NET configuration library designed to help build highly configurable applications quickly. Nini provides a solution that attempts to eliminate the above problems. It provides a large feature set that gives you functionality that you will use in every phase of your project, from concept to mature product.  This is accomplished through a simple, yet flexible, API that provides an...

NetTopologySuite finalmente lavora come si deve!

Come anche riportato nelle news del workspace (ISCRIVETEVI!!!! ), ho sistemato gli ultimi bug, e ora tutti i test topologici previsti vengono correttamente eseguiti Il passo successivo è quello di migliorare la documentazione, essenzialmente sistemando i tag XML della documentazione del codice, cosa che mi permetterà anche di analizzare meglio il codice e capirne bene il funzionamento interno... Per l'aggiornamento alla versione 1.6 della JTS, ho scoperto che la 1.7 è in dirittura di arrivo (si parla di fine agosto...), quindi aspetterò e farò direttamente l'aggiornamento all'ultima versione...   powered by IMHO 1.2

A volte basta pensarci alle cose...

Oggi stavo "sbriccando" con i servizi di Windows, vale a dire che ho passato un'oretta a cercare di capire come si realizza e si installa un servizio windows con .NET. Su internet c'è veramente tanta roba, ad esempio qui, e non è stato difficile fare un primo servizio base (una inutility che scrive ogni tot secondi una riga in un file di log) e installarlo. Il secondo passo è stato un pò + complicato, e cioè installare un servizio che si riferisce ad una dll esterna... Infatti pare che l'utility installutil, che si occupa della installazione/disinstallazione, non abbia la possibilità di essere configurata...

NetTopologySuite: per adesso...

In attesa che SourceForge si decida ad ospitarmi (c'è stato qualche intoppo, pare che lo unix name che avevo scelto sia occupato...) ho creato un workspace su GotDotNet, che non mi sembra per niente male. Ora nel tempo libero sto creando un piccolo sito personale in flash che sarà il centro della NetTopologySuite: probabilmente il download delle release rimarrà su GotDotNet comunque, e su SourceForge appena potrò. Due parole sulla release che troverete nel workspace: Ho sistemato un pò di bug, ho copiato di sana pianta da iGeospatial, che è un lavoro simile al mio ma che si prefigge di arrivare MOLTO +...

Problema con l'ereditarietà e l'overload dei metodi...

Come dire... alla faccia :( Sto estendendo la "mia" NetTopologySuite, e mi sto scontrando con un problema "concettuale", e sinceramente non riesco a capire dove sia l'errore... Alla base c'è una struttura di classi relativa alle sole geometrie in cui alla radice c'è Geometry, da cui ereditano tutte le altre feature geometriche come Point, Polygon... fino a GeometryCollection ( i nomi sono abbastanza esplicativi direi... ). Ho creato quindi una classe ShapeWriter, che scrive genericamente features singole in formato binario in standard ESRI (per chi di GIS ne capisce qualcosa...) così definita (in breve): public class ShapeWriter{    protected virtual void Write(Coordinate coordinate, BinaryWriter writer) { }       protected virtual void Write(Point point, BinaryWriter writer) { }    protected virtual void Write(LineString lineString, BinaryWriter writer) { }        protected virtual void Write(Polygon polygon, BinaryWriter writer) { }        protected virtual void Write(MultiPoint multiPoint, BinaryWriter writer) { }    protected virtual void Write(MultiLineString multiLineString, BinaryWriter writer) { }    protected virtual void Write(MultiPolygon multiPolygon, BinaryWriter writer) { }} Ovviamente ogni metodo ha un suo comportamento, che per brevità ho omesso...

Launching a process and displaying its standard output - C# Programming

Segnalo questo link per chiunque abbia la necessità di lanciare un programma (ad esempio un eseguibile da console, come nel mio caso). Nel sorgente allegato all'articolo trovate la classe ProcessCaller, che in pratica "wrappa" (quanto mi piace l'inglese...) la classe Process del .NET aggiungendovi la possibilità di redigere l'output della console in modo facile e veloce... tra l'altro la lettura dell'output e la redirezione (ad esempio in una textbox) avvengono in multithreading! In breve ciò che occorre fare è istanziare il ProcessCaller:  // Setting up command and argumentsstring command = "myCommand";string arguments = "myArgs";// Configuring callerProcessCaller processCaller = new ProcessCaller(this);processCaller.FileName = command;processCaller.Arguments = arguments;processCaller.StdErrReceived += new DataReceivedHandler(WriteStreamInfo);processCaller.StdOutReceived += new DataReceivedHandler(WriteStreamInfo);processCaller.Completed += new EventHandler(ProcessCompletedOrCanceled);processCaller.Cancelled += new EventHandler(ProcessCompletedOrCanceled);processCaller.Failed += new ThreadExceptionEventHandler(ProcessFailed);// Start processprocessCaller.Start(); e creare i relativi delegate x gli eventi: private void WriteStreamInfo(object sender, DataReceivedEventArgs e){    Debug.WriteLine(e.Text));}private void ProcessCompletedOrCanceled(object sender, EventArgs e){    Debug.WriteLine("Work completed");}private void ProcessFailed(object sender, ThreadExceptionEventArgs e){    Debug.WriteLine(e.ToString());} E il gioco è fatto! Comodo no? powered by IMHO 1.2

NetTopologySuite v 0.9

At this address it's available for downloads the C# /.NET porting of JTS Topology Suite. Please help me with debug and send to diegoguidi@libero.it all errors retrieved.Please refer to the same email for any suggestion. NOTE: in VS2003 solution it's present a link to RobustDeterminant.cs, a file containing a stub class deleted from me (no functionality loses!). Simply ignore the error. Diego Guidihttp://blogs.ugidotnet.org/GisSharpBlog powered by IMHO 1.2

NetTopologySuite v 0.9

A questo indirizzo trovate il frutto dei miei ultimi mesi di lavoro nel tempo libero, e cioè il porting in C#/.NET della JTS Topology Suite, una libreria open source per operazioni topologiche scritta in java. Quello che mi serve ora è compiere dei test approfonditi per verificare che tutto sia ok, chiunque voglia aiutarmi è il benvenuto NOTA: caricando il progeto viene segnalato un errore di un file mancante (RobustDeterminant.cs), è una classe che ho eliminato in quanto non serve più, quindi tutto ok! powered by IMHO 1.2

Ajax.NET - The free library for .NET (C#)

Sicuramente sarà già stato postato, comunque sto ajax mi sembra molto interessante, e sapere che è alla base di google maps poi sollecita ancora di + la mia curiosità... ... Examples using the free Ajax.NET library Send feedback form with Unicode chars This example will post a form to the server, invoke the Test1 method there and return a HTML string. On the server you will have a typical method with an additional attribute: ...

May 13,2005 MSIBuilder is a free program!

Ne avevo parlato qualche tempo fa... beh ora è pure free !   The...

[Java VS C#]: Parlamm' ence capaimm!

Mai dare per scontate le cose più scontate... Con riferimento al post precedente, uno degli errori che avevo commessoè semplicemente di comprensione: Come "tradurreste" un codice Java di questo tipo: Iterator i = lista.iterator();while (i.hasNext() && condizione)  { // Aggiungi ad una seconda lista} Beh, io avevo semplicemente fatto così: IEnumerator i = lista.GetEnumerator();while (i.MoveNext() && condizione){ // Aggiungi ad una seconda lista} senza nemmeno starci troppo a pensare... Se invece avessi fatto in questo modo: IEnumerator i = lista.GetEnumerator();while (condizione < sliceCapacity && i.MoveNext()){ // Aggiungi ad una seconda lista} avrei risparmiato mezza giornata abbondante a capire perchè perdevo regolarmente determinati elementi della mia lista...:((((( La cosa è ovviamente logica e giusta: Iterator in java ha un metodo hasNext(), il quale valuta se ci sono elementi disponibili nella lista, mentre il metodo next() compie effettivamente lo spostamento sull'oggetto che viene preso dalla lista e ritornato all'utente. IEnumerator del .NET ha un metodo MoveNext()...

NetTopologySuite in dirittura d'arrivo (?)...

Complice una situazione lavorativa che per l'estate si annuncia precaria (in pratica avrò del tempo libero in quest'estate, sperando che l'autunno porti consiglio...), i lavori per la Net Topology Suite, una libreria di funzioni topologiche nata come porting in C#/.NET1.1 della JavaTopologySuite v.1.5, stanno procedendo speditamente. Ho praticamente ultimato la traduzione del software e sto ora procedendo con una piccola serie di test prima di rilasciare una versione "decente" del codice da far testare a chiunque vorrà interessarsi della cosa (spero entro questa settimana di rilasciare qualcosa). Ovviamente, qualche problema c'è, ed infatti sono due giorni che lavoro su un bug pesantissimo (in pratica il...

JTS 1.6 released (4 mesi fa)... *stardi!!!

Su sourceforge c'è da scaricare la versione 1.6 della Java Tolopogy Suite... peccato che nel sito ufficiale e nel sito base non ci sia traccia della versione 1.6 (solo 1.5) né del progetto su sourceforge... forse che la VividSolution, che cura il progetto, è fallita? Ora, xchè *stardi? Semplice, perché è un paio di mesi che nel tempo libero lavoro al porting in .NET e C# della libreria, e ora che sono a pochi  giorni da rilasciare il codice e chiedere aiuto alla community per correggerlo e testarlo, scopro che ho lavorato su una vecchia versione!!! Vorrà dire che dovrò nuovamente riguardarmi da cima a...

OpenNETCF.org new release

This package installs the compiled help contents onto your machine and integrates it with your Visual Studio help collection whether you are using Visual Studio 2003 or 2005 Beta. This is the first standalone release of our documentation and updates will be provided as our code evolves. This edition includes documentation for:- OpenNETCF Smart Device Framework v1.3 OpenNETCF Application Blocks v1.0 OpenNETCF Desktop Communication Microsoft.WindowsCE.Forms Please forward any issues with the documentation to docs@opennetcf.org , thanks! Fonte: OpenNETCF.org - OpenNETCF Library   powered by IMHO 1.2

World Wind Hotspots

Visto che si parla tanto di WorldWind... World Wind Hotspots - Recently Submitted Hotspots http://onearth.jpl.nasa.gov/ per il server delle WMS Landsat7 ah, qui c'è casa mia!!! powered by IMHO 1.2

NASA WorldWind: xchè C# e DirectX al posto di Java e OpenGL?

http://forum.worldwind.arc.nasa.gov/index.php?showtopic=8 Un estratto: "C# is one of the most productive programming languages out there. When I try to implement a feature in c# with the .NET framework, it usually doesn't take me that long, and what gets produced is (relatively) bug-free. However, doing the same thing in c++ would take me at least twice as long, perhaps more depending on how much I was able to leverage the .NET framework when using c#." "Why not JAVA? The World Wind software pushes the limits of the new 3D accelerated hardware. JAVA 3D doesn't yet have the features, functionality, and performance of OpenGL or...

How to Use Design Patterns

A Conversation with Erich Gamma. Direi interessante Fonte: How to Use Design Patterns powered by IMHO 1.2

MSI Builder: flessibile, potente ed economico

Oggi ho praticamente passato la giornata alla ricerca di un modo per creare installazioni msi "decenti". Decenti perchè il famoso Visual Studio Installer, per fare un esempio, non permette di creare custom dialog, come ad esempio quelle che permettono di installare solo alcune parti del programma (escludento ad esempio l'help o i samples). D'altra parte InstallShield costa un occhio della testa... Ho trovato però questo MSIBuilder, prodotto che alla ridicola cifra di 50 euro per un numero illimitato di licenze (15 euro la licenza singola ), fa tutto quello che mi serviva. Da qualche parte ci deve essere una fregatura (il forum è deserto...)...

I tasti non documentati in Visual Studio

Ctrl+L cancella la riga corrente le la copia nella clipboard.CStrl+Shift+L cancella la riga corrente senza copiarla nella clipboard.Ctrl+C, com'è noto a tutti, copia il testo selezionato nella clibboard, ma se non vi è alcun testo selezionato allora copia la riga corrente.Ctrl+Enter crea una riga vuota sopra la riga corrente.Ctrl+Shift+Enter crea una riga vuota sotto la riga corrente. Ctrl+Shift+T scambia la parola corrente con quella alla sua destra (word transpose).Ctrl+Alt+T scambia la riga corrente con quella sottostante (line transpose) ed è molto comodo per trascinare una riga altrove nel listato Ctrl+F3 cerca la successiva occorrenza del testo selezionato.Ctrl+Shift+F3 cerca la precedente occorrenza del testo...

Beta2 installata!

Timoroso per via dei post che ho letto in passato sulla rimozione di una versione precedente di VS 2005 e installazione della "nuova" beta2, ho aspettato una mattinata "libera" da impegni pressanti per affrontare la cosa... ecco il resoconto.   Disinstallazione di SQL Server December CTP e VS2005 December CTP: tutto ok, nessun intoppo! Riavvio e controllo/pulizia del registro con Norton 2002-WinDoctor (che a dispetto dell'età sembra fare il suo sporco lavoro a meraviglia). Installazione Beta2 + Sql Express + MSDN: tutto ok, nessun intoppo!   Insomma, nel mio sistema si sono succeduti nell'ordine: c#express 2005 + sql express verso ottobre 2004. vs2005 dec ctp da dicembre ad oggi. ora...

Centralized Event Logging in .Net Using Web Services

Un articolo interessante sul logging centralizzato _________________ Diego Guidi ThreeX 3D RealGIS Terra Nova SIT

NeoSwiff: write Flash Applications in C#!

NeoSwiff allows developers to write Flash" applications in C#. It includes: a C# to SWF compiler supporting most of the C# language (ECMA-334 specification),a Visual Studio .NET 2003 add-in supporting Intellisense and integrated help,a .NET compatible SDK. a stand-alone dedicated Development Environment (IDE), --> NeoSwiff compiler is available for Windows 2000/XP, Linux and...

Ordine su amazon.com

1 "Programming .NET Components"Juval Lowy; Paperback; $26.37  1 "Applied Microsoft .NET Framework Programming"Jeffrey Richter; Paperback; $32.99  1 "Code Complete, Second Edition"Steve McConnell; Paperback; $32.99 Che ne dite? _________________ Diego Guidi ThreeX 3D RealGIS Terra Nova SIT ...

Google Deskbar API per .NET

What's a Deskbar plug-in? The Google Deskbar plug-in is a simple extension mechanism for customizing your Google Deskbar. When you enter a search term and choose your plug-in from the menu, Deskbar passes your search term to your plug-in code, which can then return a specific URL to be displayed in a browser or mini-viewer window, or return text to be displayed directly in the Deskbar's text box. Fonte: Google Deskbar Help ________________ Diego Guidi ThreeX 3D RealGIS Terra Nova SIT

Creare CAB per IE in modo veloce e affidabile

Nel caso vi trovaste nella necessità (remota a dire il vero) di creare ActiveX complessi (e con questo intendo ActiveX da registrare, che dipendono da dll anch'esse da registrare, etc...) da utilizzare in pagine HTML (ovviamente Internet Explorer...), risparmiatevi la fatica di creare CAB contenenti direttamente ActiveX e DLL (fidatevi, non funzionano  ) ma utilizzate un CAB contenente un installer MSI! Per prima cosa usate questo per crearlo, quindi createvi il vostro cab con il cabsdk con all'interno semplicemente questo .inf: [version]signature="$CHICAGO$"AdvancedINF=2.0[Setup Hooks]NomeFile=NomeFile[ThreeXViewer]run= msiexec /i %EXTRACT_DIR%\NomeFile.msi /qn Firmatelo con SignCode ed è fatto! La sintassi /qn di msiexec lancia l'installer in Silent Mode, in modo che, dopo che l'utente ha...

Mono 1.1.4 e 1.0.6 out!

Direttamente da www.mono-project.com "Mono 1.1.4 and 1.0.6 have been released. As of this version, Mono 1.1.4 has received more testing and more scrutiny that Mono 1.0.6, and we strongly recommend that people switch to the 1.1.4 release. We will continue to support 1.0.x for those who can not do a larger change, but keep in mind that 1.1.4 at this point is stabler, has many less bugs, faster, better tested and more complete than the 1.0.6 series. There are significant changes: make sure you read the release notes as there are many exiting features in monodoc, xsp, apache support, xml, relaxng,...

Natural Docs

Natural Docs "pare" (nel senso che l'ho appena scovato e lo devo provare" un interessante progetto di generatore di documentazione multilinguaggio... Riporto dal sito: "... an open-source, extensible, multi-language documentation generator.  You document your code in a natural syntax that reads like plain English.  Natural Docs then scans your code and builds high-quality HTML documentation from it. " Sembra fico, no? powered by IMHO 1.2

Guidebook

Un sito sulle GUI powered by IMH0 1.1

AllFiles Snippet V2

private void SearchFiles(DirectoryInfo dirinfo){    foreach(FileInfo f in dirinfo.GetFiles())    {        arrayList.Add(f.FullName);    }    foreach (DirectoryInfo nextdir in dirinfo.GetDirectories())    {        SearchFiles(nextdir);    }} Fate come se la versione precedente della funzione SearchFiles non esistesse... :) powered by IMH0 1.1

Tutti i files in tutte le sottodirectory di una cartella...

Questo pezzetto di codice inserisce in un ArrayList tutti i nomi dei files contenuti in tutte le sottocartelle di ua cartella iniziale passata come parametro... Sicuramente mi è sfuggito il metodo del framework che fa la stessa cosa 100 volte meglio, ma mi è servito per "ricordarmi" come fare una funzione ricorsiva... Qualsiasi suggerimento per migliorarla è ben accetto, solo... andateci piano con gli insulti :) private void Start(string directoryIniziale){    ArrayList arrayList = new ArrayList();    DirectoryInfo di = new DirectoryInfo(directoryIniziale);    SearchFiles(di);    arrayList.TrimToSize();    Debug.WriteLine(arrayList.Count);}private void SearchFiles(DirectoryInfo dirinfo){    FileSystemInfo[] dirs = dirinfo.GetDirectories();    foreach (DirectoryInfo diNext in dirs)    {        FileInfo[] fi = diNext.GetFiles();            foreach(FileInfo f in fi)        {            arrayList.Add(f.FullName);        }        foreach(DirectoryInfo nextdir in diNext.GetDirectories())        {            SearchFiles(nextdir);        }    }} powered by IMH0 1.1

Cassini diventa IIS...

O meglio, in qualcosa che gli assomiglia...   Con questo trucchetto infatti si disabilita la limitazione sugli indirizzi locali di Cassini Web Server, che ora è in grado di rispondere anche al di fuiri di localhost.   Il prossimo passo è predere l'implementazione di Cassini su mono e fare la stessa cosa, con l'obiettivo di crearmi un server web per mono personalizzato, senza pubblicazione di pagine ASP ma che accede a dati MySQL e li elabora per restituire informazion derivate.    Che tipo di informazioni derivate ancora lo devo decidere... :)     internal class Connection{    // Codice...        public bool IsLocal    {        get        {            // return (LocalIP == RemoteIP);            return true;     // Disabilito la limitazione per localhost!        }    }        // Codice restante...} powered by IMH0 1.1

W il Visual Studio!

Mi sono preso una pausa dal mio lavoro abituale di quest'ultimo periodo per realizzare una utility per scopi interni. Questa utility non fa nient'altro che convertire un file in formato testuale di un certo tipo in un file di un altro tipo... niente di che. Per il mio lavoro sto usando la beta, anzi la December CPT del VS2005, che nonostante gli ovvii bug è un IDE fantastico per lavorare (intellisense, refactoring etc...), ma ovviamente per me sarebbe stato un problema creare una piccola utilità da linea di comando che richiede l'installazione del .NET 2.0... Insomma, ho scaricato la trial del Borland Delphi...

Usare o no le eccezioni?

Sottotitolo: quando un blog comincia ad assomigliare + ad un forum personale... Davanti ad un codice di questo tipo: try{    Polygon tempPolygon = this.ReadPolygons(shape, FeatureType.Polygon);    // Lettura di una geometria poligonale da un DB    if (index >= tempPolygon.NumInteriorRings + 1) throw new IndexOutOfRangeException("");    // index è un parametro di una funzione a cui appartiene il codice    return tempPolygon.ExteriorRing.ToWKTString();}catch(IndexOutOfRangeException){    return "NULL";} E' vantaggioso eliminare l'eccezione in favore di questo: Polygon tempPolygon = this.ReadPolygons(shape, FeatureType.Polygon);if (index >= tempPolygon.NumInteriorRings + 1) return "NULL"return tempPolygon.ExteriorRing.ToWKTString(); L'"eleganza" penso vada a vantaggio della gestione delle eccezioni (oltre al fatto che nel catch prima o poi dovrò aggiungere dei log ed altro), ma, visto e considerato che mi aspetto che l'utente spesso inserisca un valore di index superiore al consentito ed in questo specifico caso un file di log nn mi serve, l'eliminazione mi farà guadagnare significativamente del tempo nell'esecuzione? Mi chiedo questo perchè in passato ho letto articoli in cui si parlava del fatto...

Sviluppo su media center

Un blog in italiano direttamente dai blog microsoft... Read on...   powered by IMHO

Imparare i design patterns

Intanto posto il link, quando avrò un attimo gli darò una occhiata approfondità... http://www.dofactory.com/Patterns/Patterns.aspx   powered by IMHO