Sfondo scrivania di Linux

Non sono un fanatico di Linux, ma oggi sul desktop di un mio collega ho trovato questo splendido sfondo:

E ne potete trovare moltissimi altri...

Secondo me quello che manca alla community .NET è una mascot (si scrive così?) con la quale indentificarsi... Marketing men di MS, se ci siete battete un colpo

powered by IMHO 1.1 with Emoticon Formatter

Primo progetto complesso sotto CC.NET

Come ho anticipato qualche giorno fa sto iniziando ad usare CruiseControl.NET per centralizzare le build dei progetti web che sviluppiamo nella mia azienda.

Pensavo fosse più difficile da integrare, ed invece, in soli 3 gg lavorativi, sono partito da zero (non conoscevo nemmeno NAnt) e sono arrivato alla build completa di un progetto web abbastanza complesso, suddiviso su 3 solutions gestite separatamente.

Ora ho messo in piedi la build centralizzata di una web application, che dipende da 2 class library sviluppate internamente, e una delle class library dipende dall'altra.

Tutti e 3 i progetti monitorizzano un repository di codice su VSS, insieme con la directory di output degli altri progetti dai quali dipendono.

Appena viene notata una modifica o in VSS o in uno dei progetti dai quali dipendono, viene scatenata la build tramite NAnt: grazie ai task di NAnt poi è possibile deployare la web application su un server di test, e zippare e archiviare le versioni precedenti, sia delle class library che della web application.

Infine, è possibile notificare via email il risultato della build ad un gruppo di sviluppo.

In aggiunta a questa notifica, CC.NET fornisce anche un programmino che gira nella Traybar e controlla il server di build, e avvisa il programmatore quando succede qualcosa ai progetti che si stanno monitorando.

In questo caso la build è stato rotta.

Sicuramente CC.NET insieme ad NAnt sono un grande aiuto allo sviluppo di progetti complessi, e visto la facilità con la quale è possibile mettere in piedi tutta l'infrastuttura necessaria, è quasi un "delitto" non farlo Smile

powered by IMHO 1.1 with Emoticon Formatter

jClubHouse ha il suo sito

Finalmente in questi pochi giorni liberi delle vacanze di Natale siamo riusciti (io e mia futura moglie) a mettere in piedi un sitino per il nostro CMS... spero di rilasciare un po' di codice prima di partire per il viaggio di nozze

L'indirizzo è www.jClubHouse.org

Sul sito c'è anche un documento PDF con le features del CMS.

powered by IMHO

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 ricredere, ho scoperto parecchie cose che non conoscevo su C#, come la possibiltà di create di overloadare (ovviamente nelle proprie classi) i metodi di cast, sia implicito che esplicito, nella stessa maniera nella quale si possono overloadare gli operatori aritmetici e booleani.

Ovviamente, come ogni buon libro di programmazione, fa sorgere i suoi dubbi, e in particolare a me è sono sorto questo:

  • a cosa serve la keyword new quando si parla di polimorfismo?

new

Per ridefinire un metodo di una classe nella sua classe figlia si usa virtual nel padre e override nel figlio, però si può anche mettere la keyword new nella classe figlio omettendo la virtual.

Leggendo sul libro scopro che in realtà non sono la stessa cosa:

Ipotizziamo di avere due classi, Parete e CascataDiGhiaccio, dove CascataDiGhiaccio eretida da Parete, e il metodo Sosta.

public Parete {
    
public virtual String Sosta() {
        
return "Sosta Generica";
    }
}

public CascataDiGhiaccio: Parete {
    
    
// Caso 1
    
public override String Sosta() {
        
return "Sosta con chiodi da ghiaccio";
    }

    
// Caso 2
    
public new String Sosta() {
        
return "Sosta con chiodi da ghiaccio";
    }
    
}

//Caso 1

Parete parete = new CascataDiGhiaccio();
parete.Sosta(); 
//risultato "Sosta con chiodi da ghiaccio"

//Caso 2
Parete parete = new CascataDiGhiaccio();
parete.Sosta(); 
//risultato "Sosta Generica"

Come si vede dal codice sopra, usando il la coppia virtual/override si ottiene l'esecuzione sempre del metodo della classe derivata, mentre usando new ho l'esecuzione del metodo della classe del tipo di dato usato al momento (nel nostro caso Parete).

Visto che in genere si usa il polimorfismo per poter usare la caretteristiche specifiche delle classi figlie, che senso ha usare new, che nella modalità solita di utlizzo invece causa sempre l'esecuzione della classe padre?

powered by IMHO

«gennaio»
domlunmarmergiovensab
2627282930311
2345678
9101112131415
16171819202122
23242526272829
303112345