Archivi per la categoria ‘Programmazione’

C# Singleton

sabato, 9 gennaio 2010

In questi ultimi mesi ho avuto la necessità di trovare un’implementazione del pattern singleton in C# che fosse un buon compromesso tra scarnezza del codice e laziness nella creazione dell’istanza.

Dopo un pò di ricerche ed esperimenti ho scelto la soluzione di seguito:

[sourcecode]
public sealed class MyObject
{

// Dichiaro un costruttore statico per far si che il compilatore c# non
// consideri il tipo come beforefieldinit
static MyObject() { }
    MyObject() { }

// Istanza privata dell’oggetto
  private static readonly MyObject _instance = new MyObject();

// Proprietà pubblica che espone l’istanza all’esterno
    public static MyObject Instance
    {
        get { return _instance;  }
    }
}
[/sourcecode]

Il costruttore statico garantisce che l’implementazione sia thread-safe: in questo modo l’inizializzazione dell’istanza _instance viene eseguita una sola volta per esecuzione. Inoltre per la presenza dello stesso costruttore statico la classe non viene marcata con il flag beforefieldinit dal compilatore, l’oggetto _instance viene quindi istanziato solamente alla primo accesso ad una proprietà statica di MyObject.

Se avete la necessità di un’implementazione thread safe potete modificare la proprietà pubblica come segue:

[sourcecode]
public sealed class MyObject
{
static MyObject() { }
MyObject() { }

private static readonly MyObject _instance = null;

public static MyObject Instance
{
get
{
lock(_instance)
{
if (_instance == null) _instance = new MyObject();
return _instance;
}
}
}
}
[/sourcecode]
Cosa ne pensate di queste soluzioni? Avete individuato dei problemi a cui non ho fatto caso? Aspetto i vostri suggerimenti a riguardo nei commenti 🙂

Design Patterns in ASP.NET

mercoledì, 26 novembre 2008

Riporto un interessante articolo sull’utilizzo dei design pattern in ASP.NET. L’autore presenta alcuni dei pattern che ritiene più utili nello sviluppo di applicazioni in ASP.NET e quindi ne presenta degli esempi di utilizzo.

I diversi pattern sono raggruppati e presentati al lettore secondo questa tassonomia:

  • Presentation Logic
    • Model-View-Controller (MVC)
    • Model-View-Presenter (MVP)
    • Use Case Controller
  • Host or Behavioral
    • Command
    • Publish-Subscribe / Observer
    • Plug-in / Module / Intercepting Filter
  • Structural
    • Service Agent / Proxy / Broker
    • Provider / Adapter
  • Creational
    • Factory / Builder / Injection
    • Singleton
  • Persistence
  • Repository

Sono certo che potrete trovare anche voi queste due pagine interessanti. Buona lettura!

Link: ASP.NET Patterns every developer should know

C# vs. Ruby

sabato, 20 settembre 2008

Google Trends (per chi ha tempo di giochicchiarci un pò) può offrire degli interessanti spunti di riflessione

C# vs Ruby

Io mi sono fatto l’idea che c# è un linguaggio per lavorare, mentre ruby è ancora un qualcosa da smanettoniQui la fonte ed altre interessanti opinioni.

Correttori grammaticali: come funzionano?

martedì, 22 luglio 2008

Come alcuni di voi sanno sto lavorando per la mia seconda tesi di laurea: ciò implica che in questo ultimo periodo sono inevitabilmente costretto ad utilizzare frequentemente Microsoft Word

Ogni tanto Word mi lascia perplesso per le correzioni che mi da… Ammetto che le correzioni ortografiche (quelle rosse) sono molto utili per evitare stupidi errori di battitura e refusi; le correzioni grammaticali (quelle verdi), invece, qualche volta mi lasciano davvero perplesso.

Non c’è da stupirsi, la mia mente riesce ad immaginare quanto debba essere difficile scrivere un algoritmo capace di capire la nostra grammatica… visto che la curiosità mi assaliva e mi rodeva dentro ho speso qualche minuto a cercare qualcosa che mi permettesse di capire come funzionano questi affari, ed ho trovato questo:

Link: Developing a grammar checker for swedish

Anche se la lettura è un pò pesante e gli esempi sono in svedese, potreste trovarlo interessante…

Pagina generata in X secondi

mercoledì, 21 novembre 2007

clock.pngQual’è il metodo migliore per indicare ai nostri visitatori quanto siamo bravi a programmare, scrivendo in fondo alle nostre paginette aspx il tempo in cui queste vengono generate?

L’idea migliore, più precisa ed efficiente, è quella di affidarsi a System.Diagnostics.Stopwatch: se lo avete già realizzato, usando però il “classico” DateTime e qualche sottrazione per ottenere un TimeSpan, sarebbe il caso che provvediate a rimpiazzare tutto il vostro accrocchio.

Stopwatch infatti è realizzata usando chiamate ad API di basso livello, con un overhead decisamente minore rispetto a qualsiasi metodo di .NET. Inoltre se la vostra configurazione hardware e software lo permette, potrete usufruire di un contatore ad alta precisione.

 

dim watch as new System.Diagnostics.Stopwatch()

watch.Start()

 

[…]

 

watch.Stop()

literal.Text = “Pagina generata in “ + watch.Elapsed.ToString() + ” secondi”

Beh, fatemi sapere quanti millisecondi avete recuperato! 😀

Velocizzare Visual Studio 2005

martedì, 30 ottobre 2007

Non tutti possono permettersi un PC sufficientemente performante da far girare Visual Studio 2005 senza alcun problemi (io lo so bene), per questo talvolta è necessario darsi una mano con trucchetti, tipo questi cinque elencati di seguto, che permettono di alleggerire il carico che il nostro computer deve sopportare:

  1. Assicurati di aver installato il Service Pack 1
  2. Disabilita le animazioni, un vero programmatore non ne ha bisogno.
    Puoi farlo da Tools > Options > Environment deselezionando l’opzione Animate environment tools.
  3. Se stai usando ReSharper potresti non avere la necessita che Visual Studio aggiorni la barra di navigazione in cima a tutti i tuoi file sorgente.
    Vai su Tools > Options > Text Editor > C# (o VB) e deseleziona Navigation bar.
  4. Non ti serve che il solution explorer salti tra un file e l’altro mentre navighi tra i file aperti? Vai su Tools > Options> Projects and Solutions e deseleziona Track Active Item in Solution Explorer. Questo farà stare fermo il pannello a sinistra, anzichè farlo zompettare tra un file e l’altro.
  5. C’è una opzione in Visual Studio 2005 che permette di popolare il toolbox con tutti i controlli che sono compilati come parte della soluzione corrente. Questo può essere utile mentre si sviluppano i controlli stessi, ma in certe circostanze fa letteralmente piantare VS per un bel pò di tempo. Per disabilitare l’opzione vai su Tools > Options > Windows Forms Designer ed imposta AutoToolboxPopulate a False.

Attendo di sapere quanto vi sono stati utili. Da quando ho eseguito ciò che è descritto al punto 4 mi sento un uomo migliore 😀

Utilities.NET

mercoledì, 3 ottobre 2007

Utilities.NET è una collezione di classi di aiuto e di componenti per risolvere velocemente le comuni problematiche di programmazione in .NET

La libreria contiene 117 classi, ed è frutto del lavoro di James Newtonking, che ha deciso di rilasciarla con tanto di codice sorgente.
Io l’ho scaricata e messa sul desktop, appena posso giuro che gli do un’occhiata 😀

Perchè sto iniziando ad apprezzare VB.NET

mercoledì, 11 luglio 2007

pc2.jpgQuando ho deciso che era arrivato il momento di trasformare T&C da un rudimentale accrocchio di file interpretati in qualcosa di più sensato (almeno dal punto di vista della software engineering) passando ad Asp.NET, la prima decisione importante che mi spettava prendere è stata quella del linguaggio da utilizzare.

Vista la facilità di portare codice dal VbScript di ASP in VB.NET ho scelto questo linguaggio, nonostante il C# sia evidentemente più elegante e meno prolisso nei costrutti.

C’è poi da dire che il Framework.Net permette la commistione di linguaggi (sebbene sia necessario separare i diversi “dialetti” in assembly diversi), quindi in futuro potrei realizzare migrazioni parziali e/o pezzi di sito o librerie interne senza difficoltà in C# con poco lavoro aggiuntivo.

Però ora devo ammettere che le idee non sono più così nitide e definite

(altro…)

Mela

mercoledì, 30 maggio 2007

logovecchio.pngSto per consegnare un simpatico progetto di gruppo per un simpatico esame per l’universitià, il progetto si chiama Mela (codename “Gmailperòmeglio”), per una straordinaria coincidenza con le iniziali dei nomi di battesimo dei quattro componenti del gruppo.

Il sottoscritto ed altre tre persone hanno realizzato un webclient email con tecnologia ajax: il nome in codice del progetto oltretutto parla da se: GMail, però meglio!!!

Ora come ora son molto preso dallo scrivere l’ultima parte della documentazione, magari in un prossimo post spiego meglio di cosa si è trattato.

Mai più ArrayList

mercoledì, 25 aprile 2007

Un’ottima cosa di Asp.NET sono le collection tipizzate: sostituendo l’utilizzo degli ArrayList con queste strutture dati possiamo raggiungere facilmente gli stessi risultati evitando tanti fastidiosi casting.

 

Per utilizzare queste collection templatizzate è necessiario importare il namespace System.Collections.Generic, che può essere importato automaticamente scrivendo quando segue nel web.config

 

<configuration xmlns=http://schemas.microsoft.com/.NetConfiguration/v2.0>

  <system.web>

    <pages>

      <namespaces>

        <add namespace=System.Collections.Generic />

      </namespaces>

    </pages>

  </system.web>

</configuration>

 

L’impaginazione non è delle migliori, causa questo sistema di publishing che devo ancora comprendere a pieno… il concetto però credo sia chiaro, no?