.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