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?
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
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
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
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
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
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
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