C#

Volete venire a lavorare a Wellington?

Il mio CTO, Andrew Butel, e' coinvolto, oltre che in Calcium, anche in un'altra azienda di Wellington, Xero. Stanno sviluppando un software di accounting, tutto basato su ASP.NET 2.0, Ajax e altre frivolezze grafiche interessanti. Ora stanno cercando sviluppatori C#, anche dall'estero visto che non ce ne sono molti qui in NZ: C# Developers needed in Wellington Oltre che all'indrizzo, mandate il CV anche a me. che lo giro direttamente mettendo una buona parola

Breaking Change nel funzionamento delle Encoding.GetByte in .NET 2.0

Uno dei più grossi problemi che ho incontrato nella conversione dell'applicativo che abbiamo in Calcium dalla versione 1.1 di .NET alla 2.0 è stato con l'invio e ricezione di testo criptato serializzato usando UnicodeEncoding. C'è stato un cambio di funzionamento, o, meglio, un adeguamento alle specifiche Unicode, nella versione 2.0 del framework: ora i metodi GetByte (e GetString di conseguenza) non funzionano se la sequenza di byte non rappresenta un carattere ma è solo una serie di byte "messi in fila a caso". Ho scritto un post più dettagliato a riguardo sul mio blog in inglese: Your encryption algorithm may...

Singleton, ora con snippet VS2005

A metà dello scorso settembre avevo scritto un post su quale fosse il miglior modo per scrivere un Singleton. Oggi, a distanza di quasi un anno, dopo essermi rotto di andare su quella pagina ogni volta che dovevo scrivere una classe Singleton per fare copia e incolla del codice, ho scaricato Snippy, un editor per snippet di VS2005, e ho scritto il mio primo snippet. Lo potete scaricare dal sito GotCodeSnippets.NET, un repository di snippet per VS2005. Questo il link per scaricare il mio singleton snippet. PS: E' scritto in C#

Sviluppo di Robot con tool Microsoft

Sono sempre stato affascinato alla robotica e dallo sviluppo di prodotti che combinassero una parte HW e una SW, ma, a parte qualcosa al Politecnico durante l'università, non ho mai fatto nulla di similare. Ora vedo che Microsoft ha rilasciato (questo l'annuncio ufficiale) un prodotto che si chiama Microsoft Robotic Studio: un tool per permettere lo sviluppo di applicazione "robotiche" o anche applicazioni che fanno uso, pur non essendo "robotiche", di operazioni parallele poco accoppiate (non riesco a tradurre meglio di così "loosely-coupled" ). Su Channel9 c'è un video di quasi un'ora con un'intervista e alcune demo fatte dai membri del "Robotic Team" di...

Vuoi cambiare encoding per un WebService? Non si può

Probabilmente non vi è mai capito di doverlo fare, ma se volete cambiare l'encoding del risultato di un webservice, quello che si trova nella dichiarazione dell'XML, da UTF-8 a qualcos'altro... non lo potete fare: sembra che si quella stringa sia "hardcoded" nel generatore di webservice. Questo post, "Encoding limitations in ASMX", riporta un commento di uno sviluppatore del team MS che ha lavorato a questo: We decided not to do this feature for 3 reasons: 1. UTF-8 can represent all Unicode characters 2. The Xml spec requires that all Xml processors understand UTF-8 3. We were short for time and there were...

Condividere codice tra Win e Mobile

Avete sviluppato una libreria di business logic, e la volete utilizzare sia in un applicativo desktop che in un applicativo mobile: come fare? E' un problema che prima o poi dovremo affrontare tutti, e penso sia una delle domande maggiormente post sui forum del CompactFramework: gironzolando sui vari blog di sviluppatori mobile e sui forum dedicati si trovano due diversi approcci: condividere il binario condividere il sorgente Il primo caso presuppone che si sia sviluppata una device class library senza funzionalità specifiche per mobile (no accesso a Irda, SMS, camera, SQL Mobile, ecc...): in questo caso è possibile aggiungere...

Snippet per dichiarare un evento

Amo sempre di più i code snippets all'interno di VS2005... Dopo essermi stufato di fare cut'n'paste tra le varie classi mi sono deciso a cercare sulla rete se qualcuno aveva già scritto un snippet per automatizzare questa noiosa e ripetitiva digitazione. E l'ho trovato su GotCodeSnippets.NET, un repository di code snippets. Questo è il codice che genera, semplicemente inserendo il nome dell'evento che vogliamo creare (nel mio caso PasswordChanged: public class PasswordChangedEventArgs : EventArgs{    public static readonly new PasswordChangedEventArgs Empty = new PasswordChangedEventArgs();}public event EventHandler<PasswordChangedEventArgs> PasswordChanged;protected virtual void OnPasswordChanged(PasswordChangedEventArgs e){    EventHandler<PasswordChangedEventArgs> handler = PasswordChanged;    if (handler != null)    {        handler(this, e);    }} Usa la nuova design guideline di usare EventHandler<T> invece che ridefinire tutte le volte il delegate che gestisce l'evento. Ecco le pagina dove è possibile scaricare lo snippet. powered by IMHO 1.3

Come limitare un designer troppo invadente? Usando l'attributo DesignerSerializationVisibility

Quando si inserisce un controllo custom in un form, il designer di visual studio cerca di inizializzare tutte le sue proprietà.
Ma non è detto che tutte le proprietà debbano essere impostate in design time, ad esempio oggetti di domain model che vengono gestiti solo a run-time.
Come si può fare per evitare che VS inizializzi anche quelli? Decorando la proprietà con l'attributo DesignerSerializationVisibility.
Per maggiori dettagli leggete il seguito del post.

DataFormatString non viene applicato ai BoundField

<asp:BoundField DataField="data"      HeaderText="Data" SortExpression="data"     DataFormatString="{0:d}" /> Perchè questa riga di codice (ehm... markup) genera sempre la scritta "29/05/2005 0.00.00" come se facessa una banale ToString(), invece che "29/05/2005", cioè il risultato di una String.Format con la stringa di formato {0:d} (cioè in formato Short Date)? All'inizio pensavo ad un errore nella stringa di formato, ma consultando quella che è la mia bibbia delle stringhe di formato in C# mi sono convinto che l'errore non era mio: dopo qualche ricerca su Google ho trovato questo interessante post su...

WebEncoder: problematiche affrontate

Nelle scorse settimane ho lavorato alacremente per portare a compimento il mio primo programma winform based serio, basato sul Framework.NET versione 2.0. Giusto per far capire di cosa si tratta: WebEncoder permette di encodare in formato WMV file video, caricare dei metadati, e uploadare il tutto su di un server web all'interno del nostro (di Esperia) CMS specialistico per la gestione di Web-TV. Il tutto rendendo trasparente all'utente l'esistenza delle impostazioni di encoding, l'esistenza di più formati per lo stesso contenuto, la creazione della thumbnail. Quali sono state le problematiche incontrate nello sviluppo di questo applicativo? ...

A Programmer's Introduction to C# 2.0, aka Eric Gunnerson's C# Compendium

Come al solito le poste fanno il loro lavoro eccellentemente ("solo" 2 mesi), e quindi ecco arrivato il libro che devo leggere per poi scriverne una review su Amazon. Inizio con le prime impressioni ottenute sfogliandolo nei 15 minuti accademici/pausa caffè prima di iniziare il lavoro: 43 capitoli, 530 pagine, con la solita impaginazione della APress, leggibile, con tanti schemi e frammenti di codice. Inizia con 34 capitoli teorici, per impostare le basi e spiegare tutti i concetti di C#, sia quelli nuovi aggiunti con la 2.0 che i "soliti" della 1.0. Dal capitolo 35 inizia invece a spiegare i concetti di...

Formati delle connection string

Quanti di voi impazziscono tutte le volte che non posso fare cut&paste da un progetto vecchio per specificare la connection string da usare? Oppure dovete connettervi ad un DB Server al quale non vi siete mai collegati? Questo sito è la risposta a tutte le vostre domande: http://www.connectionstrings.com/ powered by IMHO 1.3

Dove sta la nuova classe ConfigurationManager?

Sto facendo il porting di una class library dal Fx 1.1 alla 2.0. Nelle chiamate per leggere la configurazione da file .config prima si usava fare ConfigurationSetting.AppSettings ora invece questa chiamata genera un warning: System.Configuration.ConfigurationSettings.AppSettings' is obsolete:'This method is obsolete, it has been replaced bySystem.Configuration!System.Configuration.ConfigurationManager.AppSettings'     Ma sostituendo semplicemente ConfigurationSettings con ConfigurationManager non si compila... la classe ConfigurationManager non viene trovata, perchè? Dopo un'oretta di ricerca ho capito il motivo... e pensare che avevo anche la spiegazione sotto gli occhi! La dicutura con ! serve per indicare la signature completa del metodo nel formato Assembly!Namespace, quindi significa che la nuova classe ConfigurationManager si trova nell'assembly System.Configuration.dll Quindi, ora, facendo il porting dalla 1.1 è necessario creare...

Custom Controls e ViewState

Mi sono avventurato nello sviluppo di un Custom Server Control per ASP.NET abbastanza complesso (almeno per la mia esperienza in questo campo che è limitata a qualche controllino che non gestiva postback): ho sviluppato un ConnectionStringBuilder, per inserirlo nelle pagine di installazione del blogging engine al quale sto contribuendo, SubText. Ho dovuto affrontare un problema abbastanza sottile: il controllo contiene dei DropDown che vengono popolati direttamente nella sua prima visualizzazione, ma sul postback i valori non venivano mantenuti.Abilitando il Trace ho notato che il ViewState era sempre di 0 byte. Invece, il DropDown popolato sul postback manteneva correttamente i valori caricati. Ho impiegato...

Sono reviewer del nuovo libro di Eric Gunnerson

Un po' di tempo fa il buon neo-MVP Lorenzo, aveva annunciato che Eric Gunnerson stava cercando dei revisori per la 3° edizione del suo libro. Ho lasciato la mia disponibilità per leggere il libro e scrivere una review su Amazon, insieme ad altri 44 lettori del suo blog. Ieri Eric ha annunciato i 5 fortunati, scelti col criterio di: Whether their comment number matched the output of the RAND() function in Excel Appena la Apress mi contatta e mi manda il libro scriverò una review anche qui powered by IMHO 1.3

Carl Franklin on C# o VB.NET

Oggi in palestra stavo ascoltando l'ultima puntata di polymorphicpodcast.Argomento della giornata: intervista a Carl Franklin (host di Dotnet Rocks!) che parla dello sviluppo Object Oriented, e da la sua opinione sulle differenza tra programmatore VB.NET e programmatori C#. Alcuni pensieri generali sono che la differenza viene principalmente dal loro background:chi programma in VB.NET viene da VB, quindi è abituato a pensare per eventi, procedure, non oggetti, metodi, ereditarietà, ecc..i programmatori C# invece vengono da C++, Java, e sono già abiutati a pensare OO Inoltre un programmatore VB pensa a VB come una "religione", mentre un programmatore C# usa C# come uno strumento,...

Singleton

Ultimamente sto mettendo il Pattern Singleton un po' ovunque... e spiegando ad un mio collega cos'è il Singleton gli ho girato il link della DO Factory con in Pattern della GOF spiegati in C#. E ho notato che l'esempio di codice proposto è con la lazy initialization: // "Singleton"class Singleton{  // Fields  private static Singleton instance;  // Constructor  protected Singleton() {}  // Methods  public static Singleton Instance()  {    // Uses "Lazy initialization"    if( instance == null )      instance = new Singleton();    return instance;  }} Nelle mie molte implementazioni invece ho sempre usato la forma senza lazy initialization: class Singleton{  // Fields  private static Singleton instance = new Singleton();  // Constructor  private Singleton() {}  // Properties  public static Singleton Instance  {    get {        return instance;    }  }}  cioè, con l'istanza caricata nella parte "statica" della classe. Mi chiedevo quale fosse il metodo migliore, e dopo un post sul forum di ugi, sono arrivato alla conclusione che il metodo migliore, a meno di problematiche realtive alle cose fatte nel costruttore (tipo accesso...

Stringhe di formattazione in .NET

La documentazione a riguardo su MSDN è malissimo strutturata, sparsa su n-mila pagine, e serve un bel lavoro di "sintesi" e "intersecazione" per capire come scrivere la stringa di formato. Girando un po' su Google ho trovato questa specie di quick reference... Come dicono nei commenti.. "it saved my day" , spero salvi anche il vostro   powered by IMHO 1.2

Come usare lo stile XP nei vostri applicativi smartclient

Magari ero l'unico a non saperlo, ma oggi ho passato un paio di ore ad impazzire per capire come mettere i bottoni XP sull'applicativo del quale vi ho già parlato. Su Google è uscito di tutto, dagli articoli su CodeProject che dicevano di farsi dei controlli ad hoc per i bottoni arrontondati, a post sui newsgroup e altri che dicevano di mettere un file nomeprogramma.exe.manifest nel quale mettere delle dipendenze ai Common-Controls. Ma alla fine troppo sbattimento... alla fine ho chiesto aiuto al mio guru preferito, e ho scoperto che basta una banale chiamata ad un metodo... e per magia lo style "System"...

Context Switching reloaded: C# -> VB6 -> C#

Ieri mi è capitato di dover mettere mano ad un vecchio applicativo VB6 per pilotare da remoto degli encoder WM. Il problema non era la connessione agli encoder e la loro gestione, ma la gestione dell'interfaccia utente, la sincronizzazione tra gli array con i dati e i vari listbox, grid, tree, ecc.. che erano sulla UI. Ma perchè per calcolare la dimensione degli array di VB6, devi fare l'UBound-LBound?Perchè gli array e liste a volte partano dall'indice 0 e a volte da 1? Decisione finale: rifare tutto, in C#, tanto ci impiegavo più tempo a capire come era stato struttrato il Domain Model dal programmatore originale...

Context switching: C# -> Java -> C#

Oggi mi sono messo ad aggiornare la libreria di integrazione per JSP/Servlet/Java per FCKeditor... dopo oltre 2 mesi che non toccavo Java è stato un bagno di sangue... senza IntelliSense, con l'abitudine al naming .NET e C#, ho passato più tempo a cercare sui JavaDoc i nomi dei metodi che a sviluppare la parte di codice aggiuntiva Ma perchè Java e .NET hanno regole di naming diverse? Perchè per mettere un'elemento in un Hashtable devo fare .put() in Java e .Add() in C#?? Se volessi essere produttivo con Java dovrei decidermi ad installare un IDE sensato per Java (tipo Eclipse) invece...

Generics C# 2.0

Oggi mi sto dedicando all'aggiornamento... ogni tanto, quando c'è un buco, capita di farlo Stavo guardando le novità di C# 2.0, e sono partito dai Generics... Ho messo qualche domanda sul forum, per cercare di capire meglio... Inoltre vi segnalo un bellissimo articolo su Generics, preso da un'intervista fatta da Bruce Eckel e Bill Venners all'inventore di C# Anders Hejlsberg: spiega come funzionano i generics in C#, e li paragona all'implementazione di Java e ai templates di C++ Generics in C#, Java, and C++ Buona lettura!!! powered by IMHO 1.2

Validazione di XML con XSD

Ma è possibile che non esiste un programma per validare un file XML passandogli un XSD? Cercando su internet ho trovato degli IDE per gestire XML, per scrivere XSD, per XSLT, per testare le trasformate, per tutto, e fanno anche la validazione, ma sono programmi da 20Mb, da installare, da comprare, e che fanno anche il caffè in formato XML... ma non uno stupido programma che prende solo un file XML e lo valida contro un XSD. Allora me lo sono fatto io... con .NET è veramente facile... 1  using System;2  using System.Text;3  using System.Xml;4  using System.Xml.Schema;5  6  namespace Com.Piyosailing.Xml.Validator7  {8      public class XmlValidator9      {10          // salvo lo stato della validazione11          private bool _isValid = true;12          private StringBuilder _stringBuilder = new StringBuilder();13  14          //Propretà per fornire al chiamante il risultato della validazione15          public string ValidationErrors 16          {17              get 18              {19                  return _stringBuilder.ToString();20              }21          }22  23          // Metodo che valida24          public bool Validate(string xmlPath, string xsdPath,string targetNameSpace) 25          {26              XmlTextReader reader = null;27              XmlValidatingReader vReader = null;28              XmlSchemaCollection myschema = new XmlSchemaCollection();29              try30              {31                  //Creo XML reader32                  reader = new XmlTextReader(xmlPath);33                  //Incapsulo XML reader dentro Validiting reader34                  vReader = new XmlValidatingReader(reader);35                  vReader.ValidationEventHandler36                          +=new ValidationEventHandler(vReader_ValidationEventHandler);37  38                  myschema.Add(targetNameSpace, xsdPath);39  40                  vReader.ValidationType = ValidationType.Schema;41                  vReader.Schemas.Add(myschema);42  43                  //Leggo il file44                  //Se ci fossero errori viene chiamato l'handler45                  while (vReader.Read()) {}46              }47              catch48              {49                  _isValid=false;50              }51              finally52              {53                  if(reader.ReadState!=ReadState.Closed)54                      reader.Close();55                  if(vReader.ReadState!=ReadState.Closed)56                      vReader.Close();57              }58  59              return _isValid;60          }61  62          //Event Handler per cattuare tutti gli errori di validazione63          private void vReader_ValidationEventHandler(object sender, ValidationEventArgs e)64          {65              _isValid = false;66              _stringBuilder.AppendFormat("\r\nValidation Error: {0}", e.Message);67          }68      }69  } Questa è solo la libreria che valida, l'ho estrapolata dal programmino da linea di comando...

Come ridimensionare (e croppare) un'immagine con .NET

Oggi mi sono imbattuto in problema "strano" per chi è abitutato a lavorare come me su applicazioni di puro data retrivial via web: il ridimensionamento di un'immagine da codice. Prima di .NET mi ricordo che c'era da smattire con GDI, directX, puntatori... insomma, una cosa complessa. Con C# è invece tutto molto facile. Ecco il codice, commentato: // Carico l'oggetto Image dal file sorgente da ridimensionareSystem.Drawing.Image oImg = System.Drawing.Image.FromFile(sourceFileName); // Creo un'immagine bitmap delle dimensioni dell'immagine ridimensionataSystem.Drawing.Image oThumbNail = new Bitmap((int)finalW, (int)finalH, oImg.PixelFormat);// Creo una "drawing surface", ossia una lavagna sulla quale disegnare// che si appoggia sulla bitmap appena creataGraphics oGraphic =  Graphics.FromImage(oThumbNail);// Setto tutto alla massima qualità (tanto è un'operazione "batch", non realtime)oGraphic.CompositingQuality = CompositingQuality.HighQuality ;oGraphic.SmoothingMode = SmoothingMode.HighQuality ;oGraphic.InterpolationMode = InterpolationMode.HighQualityBicubic ;// Definisco un'area rettangolare della dimensione finaleRectangle oRectangle = new Rectangle(0, 0, (int)finalW, (int)finalH);// Ridimensiono e croppo:// in pratica tutta l'operazione sta in questo metodo, che esiste in 30 versioni// questa prende una zona dell'immagine originale (da cropStartX-Y con dimensioni// cropW-cropH) e la disegna nel rettangolo appena definito dell'oggetto graphic.oGraphic.DrawImage(oImg, oRectangle,(float)cropStartX,(float)cropStartY,                        (float)cropW,(float)cropH,GraphicsUnit.Pixel);// Poi salvo il file in formato jpegoThumbNail.Save(outputFileName,ImageFormat.Jpeg); // "Butto" i due oggetti immagineoImg.Dispose(); oThumbNail.Dispose(); Tutto questo cercando su MSDN, dalla necessità alla "produzione" in mezza giornata. powered by IMHO 1.2

MediaPortal 0.1.1

E' uscito da pochi giorni (beh, 10 giorni fa ) l'ultima versione di MediaPortal, il programma di cui avevo già parlato, che "trasforma" un PC XP based in un MediaCenter o HTPC che dir si voglia. L'ultima versione rilasciata è la 0.1.1, e tra le tante cose ha aggiunto il supporto a numerose schede video (e sta arrivando anche il supporto per la mia vecchia Radeon All In Wonder) e la possibilità di masterizzare un CD di MP3 direttamente dal programma. Scaricate qui l'ultima versione. Consiglio vivamente a tutti di dare un'occhiata al codice dell'applicativo: usa pesantemente DirectX versione managed code e ha...

C#: dubbi da libro

Sono andato a trovare i suoceri ad Ancona, e andando in stazione ho visto in edicola la guida su C# di "ioProgrammo": visto che mi aspettavano 5 ore di treno e non avevo con me il portatile ho deciso di fare questo investimento e comprarlo, per vedere se per caso c'era qualcosa di interessante. L'introduzione non promette nulla di buona per uno che sviluppa in C# da 3 anni: "Se siete programmatori C#, e siete già produttivi, questo libro non vi serve a niente. Perchè non avete comprato la rivista senza libro?" Comunque, dopo le 5 ore di treno mi sono dovuto...

Control.Invoke e "manipolazione" di controlli da thread differenti

Per l'Emoticonformatter per IMHO (del quale spero di rilasciare la versione nuova in giornata) stavo cercando di modificare una finestra (aggiungendo dei picturebox e ridimensionandola) alla fine dello scaricamento di tutte le icone. Questa volta ho aggiunto un bel thread per gestire lo scaricamento... ma il problema era proprio qui: l'handler dell'evento che alzavo alla fine dello scaricamento veniva eseguito nel thread usato per lo scaricamento, e non nel thread che disegnava la form e dal quale era stato lanciato lo scaricamento, quindi, veniva una bella eccezione "I controlli creati su un thread non possono avere come elemento padre un controllo...

Media portal: HTPC opensource in C#

Da un po' di tempo si parla di Win 2005 Media Edition (o come diavolo si chiama).. Ho trovato un splendito sostituto, realizzato in C#, che gira su Win XP con DirectX 9.0c... è Media Portal L'ho installato sul mio portatile per provarlo, in vista di metterlo sul PC che userò in soggiorno con il monitor al plasma, per vederci la TV (a dire il vero vedo solo Sex&the city e MTV) e i vari DVD e DivX. E' molto be fatto, è estendibile con vari plugins (tipo posta, MSN Messenger, ricette, allarmi, ecc...), si connettere a internet per scaricare la guida...

«aprile»
domlunmarmergiovensab
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011