Di .NET e di altre amenita'

July 2005 Blog Posts

I'm back. Ferie... finite. :-(

Sono a casa, forse qualcuno mi ha seguito sul photoblog, dove ho continuato a postare di quando in quando, ma da stasera sono ufficialmente di ritorno dalle farie in Austria, e torno a postare con solerzia anche su questo weblog. Comincio subito con una curiosità che riguarda l'ugidotnet. Le mie passeggiate nelle splendide città carinziane mi hanno portato a conoscere le attività "collaterali" di un paio di colleghi dello user group. Mi riferisco a Lorenzo e a Fabio, che all'insaputa di tutti si sono dati alla moda nella città di Klagenfurt. Per inciso il negozio di Lorenzo Barbieri non l'ho visitato, ma le camicie di pregevole fattura di Fabio Santini le consiglio a tutti.

powered by IMHO 1.2


per leggere il post originale o inviare un commento visita il seguente indirizzo: I'm back. Ferie... finite. :-(

Fax Spamming?

Questa è davvero l'ultima frontiera. Come ogni frequentatore di Internet sono afflitto da tonnellate di spamming nella mia casella di posta, che fortunatamente riesco a evitare grazie a servizi come gmail che sono piuttosto efficaci. Ma non mi sarei mai aspettato di ricevere spamming persino via fax. Stasera è suonato il telefono e al fischio del fax ho predisposto alla ricezione il pc che incidentalmente era collegato alla linea telefonica. Mi ha restituito una pagina pubblicitaria. Non ho parole.

powered by IMHO 1.2


per leggere il post originale o inviare un commento visita il seguente indirizzo: Fax Spamming?

Attacco a Londra

Tutta la mia solidarietà va al popolo dela Gran Bretagna che stamane ha subito un attacco vigliacco da parte di fondamentalisti islamici. Ancora una volta ripeto che l'unica soluzione a questo genere di eventi è l'affermazione forte e chiara della laicità dello stato, della legalità e della giustizia. I responsabili di questi eventi dovranno risponderne di fronte alla giustizia di una grande democrazia.

Forza UK. Forza Blair.

 


per leggere il post originale o inviare un commento visita il seguente indirizzo: Attacco a Londra

Continua: Il software e' bello perche' e' vario

Votazione compiuta:

648 voti contrari 14 favorevoli e 18 astenuti

Se le percentuali sono queste ci stiamo veramente preoccupando per nulla. Non sarà che hanno scelto di muoversi nel sottobosco?

Ok. per ora festeggiamo!

powered by IMHO 1.2


per leggere il post originale o inviare un commento visita il seguente indirizzo: Continua: Il software e' bello perche' e' vario

Il software e' bello perche' e' vario.

Leggo su Notizie Radicali che è imminente il voto sulla brevettabilità del software e ripubblico il link ad un articolo molto chiaro che spiega molto bene qual'è il pericolo insito nel tentativo di estendere il brevetto anche al prodotto del lavoro di noi informatici.

Il problema sta tutto nel fatto che la richiesta di un brevetto è un atto che oggi è esclusivamente alla portata delle grandi aziende software che potrebbero così registrare brevetti su prodotti open-source per poi rivendicarne la paternità e costringere i realizzatori ad abbandonarne lo sviluppo senza la necessaria remunerazione. Tanto per fare un esempio, se questa legge fosse stata promulgata nei precedenti anni è probabile che Torvalds, il creatore di Linux non avrebbe potuto ottenere il giusto riconoscimento dalle aziende che oggi finanziano il suo lavoro, e a conti fatti probabilmente non avrebbe nemmeno iniziato a realizzare un sistema operativo che sta ottenendo dei notevoli successi, non perchè egli abbia fatto tutto questo lavoro nella speranza di un legittimo guadagno, ma perchè avrebbe rischiato di impegolarsi in costose cause legali perse in partenza. Inutile parlare di Firefox. Se la Microsoft mettesse un brevetto sull'idea del "browser", è evidente che la Mozilla Foundation potrebbe tranquillamente cestinare il codice di un prodotto che diverrebbe immediatamente illegale.

Chi mi legge sa che non sono certamente uno degli sponsor più agguerriti di Linux e di Firefox, ma nel valutare un'azione di governo occorre staccarsi dalle proprie simpatie e vedere l'argomento da un altro punto di vista. Non c'è ombra di dubbio che è grazie ad iniziative open-source e private che oggi abbiamo una così grande varietà di prodotti informatici. Cose come Linux, Firefox e in parte Java sono state il motivo scatenante per la nascita e soprattutto per il miglioramento dei sistemi sui quali noi attualmente lavoriamo. Pensate a cosa sarebbe Windows 2003 se non ci fosse Linux e se mai il Framework .NET sarebbe nato se non ci fosse stato tutto il fervore open-source che si è creato attorno a Java. Lo stesso Internet Explorer a breve avrà una versione 7.0 solo ed esclusivamente grazie al successo di un buon prodotto quale è Firefox 1.0.

L'invito di Cappato, nel suo articolo è di impegnarsi a fare qualcosa. Da parte mia il mio primo atto in questo senso è questo post che sarà pubblicato anche nella community UgiDotNet. Chiedo a tutti coloro che mi leggono di fare almeno lo stesso. Fate girare la voce perchè è solo conoscendo il problema che potremmo combatterlo.

Link: Notizie Radicali - il giornale telematico di Radicali Italiani

powered by IMHO 1.2


per leggere il post originale o inviare un commento visita il seguente indirizzo: Il software è bello perche' e' vario.

Marker Interfaces

Non ho mai sentito parlare su UgiDotNet di markers interfaces, non so se dipenda dal fatto che vi sono iscritto da relativamente poco tempo, o se proprio l'argomento non è mai stato toccato. Stasera, durante una sessione di sviluppo di IMHO 2.0 mi sono trovato di fronte all'esigenza di usarle per risolvere con eleganza un problema che mi si è presentato, perciò ho deciso di proporvi in questo breve post qualche spezzone di codice per illustrarvene l'utilità.

Innanzitutto vediamo di spiegare in due parole che cosa intendo quando parlo di markers interfaces. Chiunque abbia un po' di dimestichezza con la programmazione ad oggetti sa bene cosa sia un'interfaccia. Tipicamente nei libri viene definita come un contratto che stabilisce quali metodi dovranno contenere le classi che la implementano. In C#, e genericamente nel framework .NET una classe può implementare più di una interfaccia e questo permette di realizzare il polimorfismo delle classi. Non voglio ora dilungarmi in esempi in merito, ma darò per scontato che l'argomento sia ormai ben conosciuto. Ora vi pongo una domanda: cosa succede se dichiaro una interfaccia senza alcun metodo? Semplicemente nulla. Il compilatore non solleverà nemmeno uno warning per farci notare la bizzarria. Di primo acchito si potrebbe dire che una interfaccia senza metodi esposti non serve veramente a nulla, se non che, andando a spulciare l'SDK del framework si scoprirà che di interfacce di questo tipo ve ne sono e anche parecchie. Provate ad esempio a vedere la IReadOnlySessionState. Tale interfaccia è definita una marker interface e verrà implementata dalla classe che il compilatore crea quando compila una pagina aspx, se nella direttiva Page viene specificato EnableSessionState="ReadOnly". Questo è un modo rapido ed elegante di trasformare una proprietà in un comportamento. Usando un marker, nel codice si potrà fare uso dell'operatore "is" per verificare se la classe implementa l'interfaccia ed agire di conseguanza.

Ma visto che un esempio vale mille parole, eccovi come ho impiegato io una marker interface. Uno dei problemi tipici della programmazione ad oggetti è il mapping tra il mondo relazionale e quello oop. In IMHO 2.0 ho deciso di non adottare un framework di persistenza che si occupasse anche di questa problematica perchè in realtà non posso direche ne esistano di veramente maturi e per una questione di licenze nemmeno di praticamente usabili nel mio caso. Perciò mi sono "arrangiato" implementando un po' di patterns. Innanzitutto ho creato una Factory cui passo il tipo di oggetto da create è il DataReader da cui attingere:

public static ImhoObject Create(
    Type type,
    IDataReader reader)
{
    
if (type==typeof(User))
        
return CreateUser(reader);
    
else if (type==typeof(Role))
        
return CreateRole(reader);

    
throw new ApplicationException("Unknown type");
}

private static User CreateUser( IDataReader reader )
{
    
if ( reader.Read() )
    {
        User user = newUser();
 
        // omissis: popolo l'oggetto con il reader...

        
return user;
    }

    
return new UnknownUser();
}
 
Questo metodo è stato creato per poter estrarre da un reader un singolo oggetto. In questo modo è possibile riutilizzarlo sia nel caso di una lettura singola, sia nel caso di un reader contenente molti oggetti. Analizzando per bene il codice si vede anche che ho implementato il pattern SpeciaCase infatti nel caso in cui il reader non contenga alcun oggetto restituisco un'istanza di UnknownUser, una classe che eredita da User e che rappresenta il caso in cui un utente non esiste. A questo punto mi sono trovato nella necessità di creare un metodo che dato un reader lo scandisca da cima a fondo e restituisca un array di oggetti estratti da esso. Il problema risiedeva nel fatto che creando tale metodo, in modo che facesse uso al suo interno del metodo Create(), mi trovavo nella necessità di testare l'oggetto restituito e nel caso in cui esso fosse UnknownUser uscire dal loop. Però così facendo mi sarei anche trovato nella necessità di creare un metodo ad-hoc per ogni classe di oggetto, User, Role, Weblog, e cosi' via. Ho così immaginato che per ognuno di essi sarebbe esistito l'Unknown e preso atto del fatto che avevo predisposto una radice della gerarchia di oggetti in ImhoObject, ho deciso di marcare le classi di tipo Unknown con una interfaccia INonExistentImhoObject in questo modo:
 
[Serializable]
public class UnknownUser : 
    User, INotExistentImhoObject
{
    
public UnknownUser()
    {}
}
 
Così facendo mi sono finalmente potuto creare un metodo completamente generico che sfruttasse l'interfaccia marker per gestire il raggiungimento della fine del reader:
 
public static Array CreateArray( 
    Type type, 
    IDataReader reader )
{
    ArrayList list = 
new ArrayList();
    ImhoObject item;

    
while( !( ( item = Create( type, reader ) ) 
        
is INotExistentImhoObject ) )
        list.Add( item );

    
return list.ToArray( type ) as Array;
}
 
Et-voilà il gioco è fatto. Il metodo è del tutto generico tanto che basta passare il tipo di oggetto e il reader e puntualmente ritornerà un array contenente gli oggetti richiesti. Solo un rilievo. La condzione del ciclo while è scritta come piace a me, in puro stile "C", so che per molti risulterà antipatica, perchè soffre un po' di scarsa leggibilità, ma volete mettere: due righe e nemmeno una parentesi graffa!

powered by IMHO 1.2


per leggere il post originale o inviare un commento visita il seguente indirizzo: Marker Interfaces

imagic

Questa sera ho finalmente completato l'organizzazione del mio nuovo photoblog. Si chiama imagic e chi vorrà visitarlo lo troverà al seguente indirizzo: http://imagic.boschin.it.

Ho preso la decisione di estrapolare le foto che precedentemente mettevo nella categoria click of the week perchè mi sono reso conto che le immagini non rendevano bene nella grafica del mio weblog. Così ho preparato questa grafica che dovrebbe consentire una migliore valorizzazione delle foto.

Buona visione.

powered by IMHO 1.2


per leggere il post originale o inviare un commento visita il seguente indirizzo: imagic

Ask Mr. Key: Leggere file excel usando ADO.NET

Visto il grande successo che stanno riscuotendo gli articoli della serie Ask Mr. Key (l'ultimo ha ottenuto un centinaio di accessi in poche ore), eccomi a proporne un'altro su come usare ADO.NET per leggere i file Excel. Nel mio articolo troverete non solo il metodo per fare query con OLEDB sui file excel, ma anche come ottenere informazioni "strutturali" sui fogli contenuti in un file excel e sul file stesso.

Articolo: http://www.boschin.it/blogs/radicalmente/articles/excelwithadonet.aspx

Keywords: leggere file excel in ado.net

powered by IMHO 1.2


per leggere il post originale o inviare un commento visita il seguente indirizzo: Ask Mr. Key: Leggere file excel usando ADO.NET

GoogleEarth impazza

Sono ormai 24 ore consecutive che gli accessi al mio weblog sono totalmente monopolizzati da GoogleEarth. Quest'oggi ho ormai raggiunto i 500 utenti unici (che per un giorno solo sono un gran bel numero), il 99% delle quali riferite al post che ho scritto pochi giorni fa sul nuovo servizio di GoogleEarth. Pare che si sia sparsa la voce, e che ormai chiunque cerchi di arrivare a scaricare il software, ma la cosa interessante è che sia che siate polacchi o finlandesi, giapponesi o rumeni, lituani o italiani, svizzeri, statunitensi, spagnoli, olandesi, indifferentemente sarete dirottati sul mio blog, anzi la maggior parte di voi mi troverà alla prima posizione.

Nel frattempo quelli di Google visto il numero di accessi hanno deciso di sospendere il download. Sul sito http://earth.google.com si trova il seguente messaggio:

Thanks for your interest in Google Earth, but we're sorry we can't offer you a download right now. As you know, Google Earth is in beta, and we're still building out our ability to take on new users. We're making good progress, and expect to be able to accept new downloads shortly, so we recommend you check back daily at earth.google.com. We hope to be able to welcome you and other new planet surfers soon

Io comunque sono uno dei pochi che sono riusciti a scaricarlo...

powered by IMHO 1.2


per leggere il post originale o inviare un commento visita il seguente indirizzo: GoogleEarth impazza