Di .NET e di altre amenita'

novembre 2004 Blog Posts

Napoli è per me un enigma.

Eccomi, reduce di una serata trascorsa in una città che non mi appartiene, che non comprendo ma che rispetto nella sua grandiosa bellezza carica di storia.

Napoli è per me un enigma.

Una città piena di vita, ma così morta, piena di energia ma così scarica. Giri le sue strade e vedi quello che non vorresti fosse la tua città, contornato di splendide bellezza di un valore culturale inestimabile, ma così buttate via. Vedi le strade in decadenza che conducono migliaia di persone lungo i percorsi della loro vita. Vedi la gente che sopravvive a questo stillicidio dei piccoli crimini quotidiani, dal semaforo bruciato alla corsa senza casco, dal borseggio in destrezza a qualcosa di più, senza considerare che il piccolo che ammettono, giustificano e commettono è l'humus per i crimini, quelli veri. Loro la città la vivono, orgogliosi, perchè pensano di averla domata, ma in realtà non la sanno controllare.

Napoli è una splendida città.

L'aria calda a Dicembre, l'odore del mare, lo sporco nelle strade, il disordine, e... La cortesia impagabile della gente, di quella che noi Veneti non riusciamo nemmeno ad immaginare. La veracità delle voci nei cortili e nelle strade, l'amicizia che lega le persone che si salutano dalla macchina. Qui tutti si conoscono, si incontrano pigliano u' cafè, e ne fanno il centro della loro vita che vivono con un'ironia impareggiabile. E poi la grandiosità dei suoi palazzi, che sono sopravvissuti ai secoli. Quasi intuisco l'appartenenza che lega la gente di questo luogo ad esso. 1

Eppure non la capisco.

Probabilmente è perchè mi sento straniero in un luogo che non conosco. Tutto sommato, che c'è di diverso nella medesima sensazione che sento quando vado a Milano. Ma Milano è diversa. E' una città che è plagia i suoi abitanti, per soldi, che li prende per la gola e li stritola. Napoli la fanno i napoletani, loro la spendono, non la comprano, loro se la mangiano e non ne sono divorati.

Vi prego, non prendete sul serio questo post. L'ho scritto all'1:00 di notte, in una camera di albergo dove manca la mia vita e non so nemmeno se riuscirò a postarlo dato che il mio cellulare non ha campo. Ma spero di essere riuscito in queste poche parole a descrivere la gioia e la tristezza che mi dividono. Non chiedetemi se Napoli e Milano mi piacciono. Ho solo tanta nostalgia di casa.

powered by IMHO

DoubleBufferPanel: Da ricordare... e di pubblica utilità

Non mettere mai un GradientPanel della SyncFusion come background di una Form soprattutto se la distribuite in Terminal Server.

Lo scrivo perchè questa cosa mi ha fatto perdere un intero weekend di riposo. Se capita anche a voi, una form che durante il rendering conta tanti flash come si possono trovare solo alla notte degli oscar, per almeno una ventina di secondi consecutivi, ricordatevi di questo:

1) non mettete il GradientPanel di sfondo perchè a quanto pare costringe il contenuto ad essere ridisegnato decine di volte

2) Createvi un panel DoubleBufferPanel come il seguente:

using System;
using System.Windows.Forms;

namespace UI.Controls
{
    
public class DoubleBufferPanel : Panel
    {
        
public DoubleBufferPanel()
        {
            
this.SetStyle( 
                ControlStyles.DoubleBuffer | 
                ControlStyles.AllPaintingInWmPaint, 
                
true );
        }
    }
}

Il flag in questione faranno si che il flickering sia praticamente ridotto a zero:

I ringraziamenti ovviamente al maggico Raffaele.

powered by IMHO

Ma si posta comunque...

La settimana sarà anche di fuoco, ma l'organizzazione è predisposta.

Portatile al seguito, chiavetta bluetooth e cellulare carico...

Nel Weblog si posta lo stesso.

powered by IMHO

Una settimana di fuoco

Quella entrante non si può dire che sarà una settimana tranquilla.

Stasera alle 19:00 si prende il volo diretto a Napoli, dove domattina mi attende la prima demo del prodotto che sto sviluppando. Naturalmente oggi, non poteva essere una giornata di pura routine, ma la sindrome da predemo doveva far sentire il suo imperativo.

Mercoledì, mi aspetto una giornata di full immersion in riunione a trarre le conseguenze

Poi Giovedì arriva il sole, e si parte per Milano (ok, ma il sole lo lascio qui... a Milano sapete ancora cos'è?), dove sarò presente al Workshop dell'UgiDotNet. Nemmeno questa una giornata rilassante, ma è la più attesa.

Forza... non fa male!

powered by IMHO

Error Driven Refactoring

Viste le richieste che mi sono state fatte nei commenti al mio precedente post, ho deciso di dare qualche dettaglio in più sulle tecniche di refactoring che ho utilizzato nella realizzazione di IMHO.

Occorre innanzitutto tenere presente che nelle fasi iniziali di sviluppo ho installato il Resharper. Questo tool, prodotto dalla stessa azienda che ha realizzato uno degli IDE più famosi per Java (IntelliJ IDEA), fornisce un bel po' di strumenti utili per rendere più agevole la scrittura del codice in VS.NET 2003 e per fare del vero e proprio refactoring. Quella che preferisco in assoluto è la possibilità di aggiungere gli using automaticamente quando si inseriscono delle classi che non sono mai state utilizzate. Tuttavia dopo pochi giorni di lavoro mi sono visto costretto a disinstallare il tutto. A quanto pare Resharper ha la brutta abitudine di fagocitare quanto più RAM possibile e rende instabile e inutilizzabile Visual Studio. Questo probabilmente perchè ha la pretesa di sostituire totalmente l'intellisense di VS, invece che semplicemente aggiungere le funzionalità mancanti.

Quindi in breve mi sono trovato nudo. Nessuno strumento per poter fare del refactoring assistito, e la necessità come si suol dire ha aguzzato l'ingegno. La chiave di tutto si chiama CTRL+SHIFT+B. Per i due che non sanno di cosa parlo, questa è la combinazione di tasti che compila la solution. Tutta la tecnica, che nel titolo ho sintetizzato con un pomposo Error Driven Refactoring, si basa sul provocare errori di compilazione. Facciamo qualche esempio:

Cambiare il nome ad una variabile, ad un tipo, oppure a un metodo, è il caso più banale. Si va sul membro che si desidera cambiare, lo si cambia e si compila. A questo punto, nel Task Panel si presenteranno un certo numero di errori, talvolta qualche centinaio. Non sempre serve risolverli tutti, perchè se avete mai fatto caso il compilatore più di qualche volta genera due o tre avvisi per lo stesso errore. La mia tecnica prevede di risolvere al massimo la prima decina e poi ricompilare. E avanti così finche il codice non da più errori. Sembra una attività ingrata, ma una volta che si è presa confidenza è più veloce di quello che si possa immaginare. Non è detto che a questo punto il codice compilato funzioni. Ad esempio se usate la reflection per istanziare un tipo è probabile che in fase di compilazione non ci sia alcun errore, mentre quando lo eseguite ovviamente solleva una eccezione. Una bella ricerca testuale non guasta.

Cambiare la firma di un metodo è un'altra cosa abbastanza facile. Analogamente al caso precedente si provoca l'errore cambiando la firma. Talvolta conviene dapprima cambiare il nome del metodo e completare il primo passaggio. Poi si cambierà il tipo di ritorno oppure i parametri e si procede nuovamente alla compilazione. In questi casi occorre avere la cautela di accorgersi quando si cambia il tipo di un parametro con uno che sia compatibile, ad esempio con una classe padre. Il compilatore in questi casi non ci viene in aiuto, ma se contestualmente create una errore fittizio inserendo un carattere estraneo nel nome del metodo è più facile che si ritrovino tutte le chiamate. Inoltre bisognerà avere la cautela di capire che cosa succede nel corpo del metodo. Anche qui un carattere estraneo nel nome del parametro che occorre modificare aiuterà a trovare tutti gli usi che sono stati fatti e a verificare che non vi siano anche errori logici oltre che sintattici. In questo caso non occorre nemmeno ricompilare perchè sarà l'intellisense a indicarci l'errore con una simpatica sottolineatura.

Accomunare alcune classi con un'unica classe padre. Tipicamente in questi casi, si parte dapprima con la realizzazione della classe base vuota e immediatamente la si sostituisce a object nelle classi che dovranno estenderla. Nessun errore dovrebbe presentarsi. Però se si accomunano pià classi significa che si intende spostare uno o più metodi e proprietà ad un livello più basso. Perciò mano amano si fà cut & paste e si trasportano tali metodi nella nuova classe. Ad ogni spostamento si compila e così si individuano ad esempio i membri privati che sono referenziati da tali metodi e si trasportano anch'essi. In breve la classe dovrebbe cominciare ad indicare che alcuni metodi sono sovrascritti e che occorre l'uso dell'operatore new. Questi sono i metodi che sono rimasti nelle altre classi e vanno del tutto cancellati assieme ai membri privati che sono i più difficili da scovare, perchè non danno errore. Ad accomunare spesso è un'interfaccia o una classe astratta. Ne pimo case non c'è alcun problema perchè quando l'interfaccia è finita la si fa implementare alle classi e nel digitare Visual Studio autonomamente creerà i metodi e ad accorgersi se esistono già. Con le classi astratte è un po' più complesso. Si aggiungono i metodi astrtti e quindi si dovranno aggiungere gli override dove mancano oppure creare i metodi vuoi facendosi aiutare dagli errori e dall'intellisense.

Estrapolare delle classi da un progetto per crearne uno nuovo. Questa è la forma di refactoring che mi piace di più. Occorre tenere presente sempre che alcune classi possono essere usate da altri assembly, e che talvolta il codice che si scrive diventa un buon candidato al riutilizzo. Perciò trasportarlo in un altro assembly è vitale. Quindi si crea il nuovo progetto. Io ho l'abitudine di dare al progetto il medesimo nome del namespace che contiene. Questo è di enorme aiuto ad orientarsi nel trovare quello che si cerca. Tornando al problema a questo punto usando il Drag & Drop si trascinano le classi da un progetto all'altro e contestualmente si aggiunge la nuova reference. I progetto dovrebbe compilare immediatamente perchè nelle classi spostate è rimasto il namespace originale. Quindi occorre un bel replace. Si evidenzia il namespace da cambiare e si premo CTRL+H. Quindi ci si assicura di avere lo scope di progetto e si sostituisce con il namespace nuovo. Finalmente il compilatore comincia a dare errori. Questi potranno essere causati dalla mancanza di una reference oppure da uno using sbagliato. Non resta che aggiungere quello che serve e la solution tornerà a ricompilare.

Quelli che ho indicato sono solo alcuni dei casi da gestire. Indicarli tutti mi sembrava improponibile. Quello che mi interessa far capire è che non serve avere dei tool molto evoluti per potersi dedicare alla tecnica del refactoring. A mio parere nessun tool potrà mai arrivare a fare tutto ciò che ci serve, ma con un po' di fantasia si arriva a trovare una soluzione efficace.

Ora non avete più scuse. Refactor your life.

powered by IMHO

Break Heaven Point!

Oggi le statistiche mi hanno segnalato che per la prima volta da quando le ho attivate, i visitatori affezionati hanno superato quelli nuovi. Senza trascurare il fatto che ho battuto tutti i record di presenza.

Day Date Page Loads Unique Visitors First Time Visitors Returning Visitors
Friday 26th November 2004 348 181 87 94

Un grande grazie a tutti e 181 .

powered by IMHO

Pirateria antipirateria

Ho acquistato da poco il DVD di "The Day After Tomorrow", e tralasciando ogni considerazione sulla bontà della pellicola vorrei far rilevare un atto che io considero di vera pirateria legalizzata.

Quando si inserisce il DVD parte uno spot di 2/3 minuti che invita a non duplicare il DVD per questo e per quel motivo. A prescindere gli argomenti più o meno validi a favore o contro la pirateria che personalmente mi trovano molto dubbioso, trovo veramente pirata il fatto che io debba per forza sorbirmi ogni volta questo spottino perchè il lettore si rifiuta di saltarlo. A ben guardare, il fatto stesso che io veda quello spot è indice che il DVD l'ho comprato e quindi non vedo perchè debba essere penalizzato in questo modo assurdo.

Chi intente fare il mio stesso acquisto tragga le proprie conclusioni.

powered by IMHO

Workshop "Architecture & Management" - Il mio calendario

Ho già avuto modo di esprimere il mio disappunto nel notare che sarò costretto a scegliere tra le sessioni da frequentare al prossimo workshop, ma alla fine ho compreso i problemi che hanno portato a questa soluzione e ritengo che sia stato fatto un buon lavoro.

Perciò ho investito qualche minuto nel ragionare obbiettivamente su quali siano gli argomenti che veramente mi interessano e ho buttato giù il mio personale calendario. Sia chiaro che il calendario deriva esclusivamente dal mio interesse sugli argomenti e non ha nulla a che vedere con le persone che tengono gli interventi.

Ecco quindi il calendario

1) ore 10:00 Agile Methodologies (Marco Abis)

Questa è stata la decisione più sofferta, perchè l'intervanto di Lorenzo era di estremo interesse. Però in questo momento ritengo più utile per me comprendere meglio gli argomenti dell'Agile Development prima di altro.

2) ore 11:15 Refactoring applied (Luca Minudel)

Non fosse altro per capire se la mia interpretazione di refactoring come l'ho spiegata in un mio recente post, ho l'obbligo morale di seguire questa sessione. Mi spiace per i Design Pattern che amo estremamente, ma Andrea mi vedrà comunque nel suo successivo intevento

3) ore 12:30 Pranzo

LOL... potrei mancare?

4) ore 14:00 .NET e lo Unit Testing (Andrea Saltarello)

Lo unit testing è un altro obbligo morale. Ho parecchi dubbi su questa materia, e sono sicuro che Andrea saprà chiarirmeli tutti. Nulla contro Adrian, ma il suo intervento esce del filone che ho deciso di seguire per scegliere gli interventi.

5) ore 15:15 Pattern and Practice & Application Blocks: cosa sono e come si usano (Lorenzo Barbieri)

Questa sessione non me la perdo per nulla al mondo, anche perchè sto lavorando da svariati mesi ad una serie di articoli che probabilmente vedranno la luce il prossimo gennaio, sulle pagine di una nota rivista e che riguarda proprio gli application blocks. Pazienza per l'UML, soprattuto quello real world che è di sicuro interesse.

6) ore 16:30 Coffee Break

Sempre che le discussioni con gli oratori non mi impegnino troppo.

7) ore 17:00 Visual Studio 2005 Team System (Francesco Albano)

Parteciperò almeno alla fase iniziale dell'intervento, anche se temo che ad un certo punto dovrò andarmene per non arrivare a casa (350km più a est) troppo tardi. Spero almeno di arrivare alla fine dell'intervento e allontanarmi durante il q&a.

Questo mio calendario ha il solo scopo di far sapere ai partecipanti dove mi potranno trovare, se mi cercheranno, e non esprime in alcun modo un giudizio sugli oratori ne tantomeno un suggerimento. Spero vivamente che il materiale delle sessioni sia reso pubblico così da poterlo leggere con comodo, anche se la mancanza dell'oratore si farà sicuramente sentire.

Mi raccomando, venite in massa. A presto

powered by IMHO

Quiz

Non credo propio di riuscire a raggiungere il livello dei Quiz# di Adrian Florea, ma voglio provare anche io a proporre il mio quiz.

Eccolo di Seguito:

Data una variabile inputValue che può assumere i seguenti valori: 1, 2, 128, 256, 4096, realizzare una formula che converta in una sola volta tale valore in una sequenza di questo tipo: 1 diventa 0, 2 diventa 1, 128 diventa 2, 256 diventa 3, 4096 diventa 4. In particolare a me questa formula è servita per convertire un dato che proviene dal database in un indice di un array che contiene i dati peculiari di ogni valore. Ho dovuto usare una formula perchè essa viene eseguita in una colonna calcolata di un DataTable.

Sono ammessi tutti gli operatori ammessi in una espressione C# ad esclusione dei costrutti ternari ( condizione ) ? vero : falso. Fate attenzione che si tratta di formula e non di algoritmo, perciò for, if, while, switch qui non contano

Usare pure i commenti per le risposte.

powered by IMHO

Un dubbio mi affligge

Ho appena terminato di scrivere un post per il weblog che elenca le sessioni cui parteciperò e i motivi delle scelte. Non so se postarlo subito, o attendere dopo il workshop, perchè non vorrei che qualcuno se la prendesse a male.

Che fare?

powered by IMHO

IMHO: I sorgenti su sourceforge

Visti gli svariati problemi che mi sono stati segnalati con il CVS di sourceforge, ieri sera ho provveduto a rilasciare uno zip contenente tutti i sorgenti di IMHO.

powered by IMHO

Workshop "Architecture & Management"

Sono lieto di annunciare che sono appena riuscito a sistemare le cose per fare in modo di essere presente il 2 dicembre al workshop dell'UgiDotNet. Mi interessa talmente tanto che temo di essermi iscritto addirittura due volte.

Non vedo l'ora.

powered by IMHO

Linkato dall'Italian Agile Movement

Sono onorato di rilevare che sono linkato dal sito dell'Italian Agile Movement di Marco Abis.

Link:Apoteosi del refactoring in un approccio agile

powered by IMHO

Ancora statistiche e sourceforge

Mentre finalmente i download di IMHO stanno decollando, passando dalla media di 5/10 ai 45 di Martedì scorso, sono ancora a caccia di un modo per capire da dove vengono queste visite (430 sempre martedì) e chi sono quelli che scaricano.

Però c'è un'altro particolare che non riesco a comprendere del tutto. Il Rank era decisamente più elevato quando i PageView e i download erano di molto inferiori. Attualmente mi trovo al 1248° posto, mentre tempo fa avevo raggiunto il 178°. Non parliamo poi della percentuale, un vero dogma.

Sourceforge è un ottimo posto dove alloggiare i propri progetti opensource, ma se riuscisse a fare chiarezza su questi punti sarebbe davvero inarrivabile.

powered by IMHO

IMHO: Apoteosi del refactoring in un approccio agile

Chi ha seguito l'evolversi del progetto IMHO probabilmente avrà avuto modo di notare come le feature del software siano andate crescendo mano a mano che passavano i giorni, talvolta le ore. Il motivo è presto detto, per la prima volta, sono riuscito ad applicare una metodologia di sviluppo agile e cercando di focalizzare lo sviluppo delle varie caratteristiche del mio progettino, su quelle che erano le cose essenziali perchè si potesse dire che il software funzionasse.

Questo ha significato ad esempio, non solo pubblicare nella primissima release un prodottino che si limitava a postare nel weblog di un singolo engine, senza alcun supporto per le categorie e per una moltitudine di altre funzionalità, ma anche approcciarsi nello sviluppo prerelease nello stesso modo. Qualcuno avrebbe dovuto vedere cos'era IMHO prima di essere pubblicato, per rendersi conto di cosa sto parlando. Basti pensare che il software è nato da una serie di esperimenti condotti per vedere come funzionava .TEXT e il componente DHTMLEdit. Mano a mano questi esperimenti sono diventati un software, raffinando il codice e trasformandolo da un'ottica semplicemente strutturata ad una propriamente object oriented.

Per ottenere questo, la massima parte del merito va al refactoring. Sono rimasto molto stupito da quello che si può ottenere applicando bene in refactoring al codice. Spesso, tempo fa ho ragionato su quella che chiamavo l'entropia del codice, quando una serie di modifiche ripetute nel tempo allo stesso programma causa una complessità tale da richiedere il rifacimento totale del software. Come mi sbagliavo, questo non è il risultato della modifica del codice, ma solo della sua incauta modifica, solitamente per false questioni di economicità. 

Occorre tenere presente che spesso, quello che si può capire, leggendo e soprattuto scrivendo qualche decina di righe di codice, è infinitamente superiore a quello che una seppur approfondita analisi e progettazione potranno mai raggiungere. E questo apre le porte al refactoring. Non voglio ora presentarmi come un estremista del refactoring, ma ritengo che utilizzandolo bene, si possa tranquillamente scrivere una ottima applicazione partendo quasi senza aver definito alcun design, per il semplice fatto che mentre si scrive il codice questo design emergerà automaticamente (sempre che lo si voglia fare naturalmente). L'importante è avere ben chiaro in testa, quali sono gli obbiettivi che si devono raggiungere e soprattutto averli organizzati bene in ordine di apparizione. Un esempio che vale per tutti in IMHO è ad esempio la differenza che esiste tra la prima release e l'attuale implementazione dei pluggable engines. Inizialmente gli engine non esistevano proprio. Vi era semplicemente una serie di metodi, inseriti nello strato di logica che incapsulavano le chiamate al webservice di .TEXT.

Scrivendo questo codice però mi sono reso conto che tali metodi potevano tranquillamente incapsulare qualsiasi engine di weblogging e perciò ho deciso di estrapolarli dallo strato di logica e di includerli in una classe che in quel momento rappresentava esclusivamente l'engine di .TEXT. Il passo successivo è stato quasi automatico. Data l'esigenza di interfacciarsi con un numero imprecisato di engines, ecco nascere una EngineFactory, e la classe astratta EngineAdapter. Ecco quindi implementati assieme un pattern AbstractFactory e un Adapter a collaborare per rendere IMHO poliglotta.

Far diventare plugin un adapter ha comportato semplicemente la modifica della factory. Ancora una volta pochi colpi di refactoring e il gioco è fatto. Però a questo punto, è nata l'esigenza di rendere più adeguata a questo compito l'interfaccia dell'adapter. fino a questo momento esso aveva dei metodi che rispecchiavano i parametri richiesti dalle chiamate a .TEXT, ma altri engine necessitavano di altri parametri. Anche questa volta il refactoring è stato la chiave. Una riorganizzazione della classe Post e i parametri dei metodi sono stati raggruppati tutti in una istanza di Post.

Ho già avuto modo di dissertare sulla propedeuticità dei commenti, nel provocare sessioni di refactoring dagli eccellenti risultati. Questo dimostra se ce ne fosse bisogno, non solo la positività del commentare, ma anche che è la presa di coscienza del codice che causa la sua revisione e riorganizzazione e quindi anche la sua qualità. Commentare è un'attività che richiede di ripensare ai motivi per cui si è scritto del codice, al perchè si sono adottate determinate soluzioni e quindi spinge a chiedersi se esse siano quelle giuste, se non si poteva fare meglio e di riflesso porta a realizzare questi pensieri.

Ora trovo queste metodologie indispensabili, non fosse altro perchè sono incredibilmente foriere di buoni risultati e stimolano la creatività, dato che suggeriscono la direzione verso la quale focalizzarla senza disperdere le energie nel creare cose che non saranno mai utilizzate.

powered by IMHO

Il cestino e la sua anticamera

Mi succede spesso di produrre un numero imprecisato di files durante il normale lavoro, che poi puntualmente affollano il mio desktop, e non so mai se sia il caso di buttare. Oggi la svolta... ho deciso di risolvere così:

ROTFL

powered by IMHO

Whitehorse and Yukon

Ecco cosa erano Whitehorse e Yukon prima di diventare nomi in codice si progetti Microsoft...

Source: On product code names...

Quasi quasi mi piacevano di più prima.

powered by IMHO

Firefox odia i riquadri alla Boschin... ho sistemato

In questo post mi è stato segnalato un problema nel mainfeed di UgiDotNet: Firefox odia i riquadri alla Boschin... :)

Ora ho sistemato il post, ma volevo segnalare che in questo caso non è colpa di IMHO, ma di uno strano "mix" di post da IMHO, cut&paste e ripubblicazione. Pare che durante questo processo i code comments dell'esempio siano stati tradotti in veri tag html con le conseguenze che avete visto.

Chiedo scusa, avrei dovuto controllare i post online prima di chiudere per andare a dormire. Comunque stavolta firefox è stato meno efficace del solito...

powered by IMHO

IMHO: Creare un formatter custom

IMHO Instant Blogger è stato realizzato cercando di conferirgli la massima estensibilità, per consentire ai "volonterosi" di customizzare il funzionamento del software e di aggiungere nuove funzionalità. Oltre ai pluggable engine, che consentono la comunicazione con qualsiasi sistema di weblogging, nella versione #1787 sono stati introdotti i Formatters.

Le potenzialità dei formatters è ampiamente dimostrata dal Code Snippet Editor, ma dando uno sguardo ravvicinato al funzionamento di un formatter è evidente che le possibilità offerte da questa tecnica sono innumerevoli. Creare un formatter è un'operazione accessibile a chiunque disponga di un compilatore .NET qualsiasi e comporta semplicemente l'estensione di una classe astratta e l'assegnazione di un attributo all'assembly.

Chi desiderasse cimentarsi in questa attività deve innanzitutto reperire gli assembly Elite.IMHO.Data.dll e Elite.IMHO.Formatters.dll, che contengono tutto ciò che è necessario per la comunicazione con IMHO e l'implementazione dei formatters. In particolare la prima cosa da fare è estendere la classe Elite.IMHO.Formatters.Formatter, riportata nel riquadro:

//////////////////////////////////////////////////////////////////////////////
//
// File: Elite.IMHO.Formatters.cs
// 

using System;
using System.Windows.Forms;

using Elite.IMHO.Formatters;
using Elite.IMHO.Data.Extension;

namespace Elite.IMHO.Formatters
{
    
// Rappresenta un plugin di tipo formatter
    
public abstract class Formatter : Plugin
    {
        
// costruttore
        
public Formatter()
        {
        }

        
// formatta l'oggetto fornito in input
        
public abstract object Format( object inputData );
        
// formato dei dati in input
        
public abstract string InputDataFormat { get; }
        
// formato dei dati in output
        
public abstract string OutputDataFormat { get; }
    }
}

//////////////////////////////////////////////////////////////////////////////
//
// File: Elite.IMHO.Data.Extension.cs
//

using System;
using System.Collections;

namespace Elite.IMHO.Data.Extension
{
    
// Rappresenta un plugin di IMHO
    
public abstract class Plugin
    {
        
// Nome del plugin
        
public abstract string Name { get; }
        
// Autore del plugin
        
public abstract string Author { get; }
        
// Guid univoco del plugin
        
public abstract Guid PluginGuid { get; }
        
// configura il plugin
        
public abstract void Configure();
        
// Dati di configurazione
        
public abstract Hashtable ConfigurationData { getset; }
        
// Informa il runtime se il plugin ha una configurazione
        
public abstract bool HasConfiguration { get; }
    }
}

Occorre tenere presente che questa classe estende a sua volta Elite.IMHO.Data.Extension.Plugin (anch'essa riportata nel riquadro), quindi sarà necessario implementare anche alcuni metodi e proprietà ereditate da essa. Nella scrittura del codice sono degni di particolare rilievo i metodi Configure() e Format(), responsabili rispettivamente della configurazione del plugin e della formattazione vera e propria del testo. Le altre proprietà sono autoesplicative e riguardano molto la determinazione delle caratteristiche del plugin, per la visualizzazione nell'interfaccia e per la comunicazione con esso.

Per formattare un testo occorre definire nella proprietà InputDataFormat e OutputDataFormat, rispettivamente il formato con cui il plugin si attende che gli vengano forniti i dati e quello che restituisce. Per assegnare queste proprietà si possono usare le costanti definite nella classe System.Windows.Forms.DataFormats, relativa la ClipBoard. I dati saranno cosìforniti al metodo format sotto forma di object e da esso dovranno essere restituiti dopo la formattazione.

Il medoto Configure() dal canto suo si aspetta di trovare nella proprietà ConfigurationData una Hashtable che contiene le coppie nome-valore che rappresentano la configurazione del plugin. Questo metodo viene chiamato esclusivamente se la proprietà HasConfiguration restituisce true.

Una volta che il plugin è completo, l'installazione comporta la creazione di una cartella nella directory formatters. In tale cartella verranno depositati gli assembly e i file che compongono il plugin, ad esclusione degli eventuali assembly satellite che invece dovranno essere installati nella apposita cartella nella root dell'installazione.

Ho in mente svariati tipi di formatters e probabilmente da qui a pochi giorni potrò rilasciarne qualcuno (non prima di aver risolto la gestione delle immagini). I formatters comunque sono un buon punto di partenza per integrare IMHO con altre applicazioni. Ad esempio si potrebbe creare un plugin che si connetta ad una base dati dalla quale prelevare informazioni da postare in un weblog di un portale.

Ma forse sto sognando ad occhi aperti...

powered by IMHO

IMHO: Aggiungere il supporto ad un nuovo linguaggio

Il Code Snippet Editor, introdotto con la versione #1787 di IMHO viene fornito del supporto al Syntax Highlighting per 5 linguaggi predefiniti (C#, VB.NET, ILASM, XML e HTML). Il supporto alla colorazione del codice è ottenuto mediante una stretta integrazione con l'editor ICSharpCode.TextEditor, cui l'algoritmo di trasformazione in HTML si aggancia per leggere le informazioni sulla formattazione, sui colori e sui font. Questo significa che potendo aggiungere una nuova definizione di Syntax Highlighting per l'editor, automaticamente questa sarà ereditata anche dall'HTML prodotto per essere immesso nella pagina del weblog.

Il supporto alla colorazione in IMHO è realizzato esponendo all'esterno i file che contengono le regole di colorazione e quindi quanto detto finora, non solo è possibile, ma è anche auspicabile. Creare una nuova sintassi colorata non è una cosa semplicissima, ma nemmeno impossibile. Occorre innanzitutto trovare la cartella \formatters\CodeSnippet\styles nella directory di installazione. In questa cartella è presente un file SyntaxModes.xml che funge da indice dei file di regole.

<SyntaxModes version="1.0">
    <Mode 
file       = "CSharp-Mode.xshd"
          
name       = "C#"
          
extensions = ".cs;"/>
    <Mode 
file       = "VBNET-Mode.xshd"
          
name       = "VisualBasic.NET"
          
extensions = ".vb;"/>
    <Mode 
file       = "VBNET-Mode.xshd"
          
name       = "IL Asm"
          
extensions = ".il;"/>
    <Mode 
file       = "HTML-Mode.xshd"
          
name       = "HTML"
          
extensions = ".html;.html;"/>
    <Mode 
file       = "HTML-Mode.xshd"
          
name       = "XML"
          
extensions = ".xml;"/>
<
/SyntaxModes>

In questo file è possibile aggiungere tutti gli elementi <mode> necessari. Essi dovranno fare riferimento ad un file con estensione .xshd che contiene la definizione delle regole di colorazione del linguaggio. Per la spiegazione della sintassi del file di definizione, vi rimando al sito di ICSharpDevelop nel cui forum si può trovare molto materiale in merito.

powered by IMHO

Animazioni in XAML

Un po di codice XAML per un'animazione che mi riporta ai vecchi tempi di Amiga.

Bouncing Back...

powered by IMHO

IMHO: Installare il plugin per RssBandit e SharpReader

Dalla versione #1769 di IMHO è disponibile il plugin IBlogExtension che consente di collegare l'instant blogger agli aggregators che supportano questo tipo di interfaccia. Tra di essi si annoverano RssBandit (nella figura a fianco) e SharpReader, ma anche NewsGator .

Mentre la configurazione di NewsGator mi è ancora oscura, l'installazione del plugin negli altri due è piuttosto semplice. Innanzitutto occorre trovare la cartella che contiene il file imho.exe e al suo interno reperire il folder IBlogExtension. A questo punto è sufficiente copiare i file contenuti nella cartella, compresa la directory che contiene gli assembly satellite nel folder plugin che si trova nella directory di installazione del vostro reader preferito.

Attenzione che occorre copiare i file e non la cartella. Ora, riavviando il reader, apparirano le voci "Crea una citazione con IMHO" e "Crea un link con IMHO". E' importante notare che questi link sfruttano un eseguibile imhoie.exe, originariamente creato per estendere Internet Explorer, che adotta .NET Remoting per comunicare i dati dalla citazione o del link ad IMHO. E' obbligatorio che IMHO sia già in esecuzione, anche se minimizzato, perchè esso possa ricevere i dati e aprire la corrispondente finesta di edit.

L'eseguibile imhoie.exe è un buon punto di partenza per creare le proprie estensioni, infatti esso accetta dei parametri da riga di comando che trasmette a IMHO. Essi sono:

imhoie.exe -l link title

imhoie.exe -s tempfile link title 

Lo switch -l causerà la comparsa di un link con il title specificato, mentre -s inserirà nell'editor anche il testo salvato nel file tempfile.

Buon divertimento.

powered by IMHO

Google love #2

Sono letteralmente basito. Da quando ho attivato un po' di statistiche decenti sul mio weblog mi sto rendendo conto sempre più spesso della potenza di Google. Notizie pubblicate meno di 4 giorni fa, sono già in prima pagina su Google, con chiavi di ricerca decisamente efficaci.

Non so se sia Google ad amare me... ma se così fosse l'amore è ricambiato.

powered by IMHO

.TRAQ: Il progetto è su Sourceforge

Ho appena ricevuto la notizia che il progetto .TRAQ è stato accettato da www.sourceforge.net

L'indirizzo della pagina summary è: http://sourceforge.net/projects/dottraq. Ovviamente lo stato del progetto è "Planning".

powered by IMHO

IMHO 1.0.1787 con Code Snippet Editor

Ci siamo. Come promesso in un precedente post, la nuova versione di IMHO è finalmente realtà, e per la prima volta da quando è nato, non è più una beta. La decisione di farlo finalmente diventare una release stabile non significa necessariamente che lo sviluppo sia finito. Molte altre novità sono in cantiere, ma vedranno la luce nella versione 1.1.

Ma ecco quali sono le novità della release #1787:

  1. Introduzione dei plugin di tipo formatter. Nella finesta di edit vede la luce un nuovo menù, denominato "Formatters". Esso è popolato con dei plugin che hanno la capacità di ricevere in input il testo selezionato, di formattarlo e in seguito di inserirlo nuovamente nell'HTML della pagina. Trattandosi di plugin è molto facile implementare i propri, per svolgere formattazioni che si usano comunemente. Ad esempio, Luca Minudel non avrà alcuna difficoltà a crearsi un plugin che formatti le maiuscole come è solito fare.
  2. Il Code Snippet Formatter la cui immagine è visibile a fianco, è il primo dei formatter che ho realizzato. E' un editor testuale con Syntax Highlighting, che sfrutta l'editor ICSharpCode.TextEditor , per consentire la realizzazione semplice di brevi spezzoni di codice che poi verranno inseriti nella pagina mantenendo la colorazione propria del linguaggio prescelto. Sono attualmente disponibili C#, VB.NET, IL, XML e HTML ed entro breve conto di rilasciare anche il formato J#/Java e probabilmente anche un formato HTML/ASP.NET che comprenda la colorazione dei codeblocks. Il codice può essere inserito nella pagina in vari modi, tra i quali anche un "riquadro scrollabile". L'HTML generato è pienamente compatibile con Internet Explorer e Firefox. L'editor è configurabile per mezzo del pannello di preferenze, per definire i colori dei riquadri nella pagina. Ecco un piccolo esempio:

    /// 
    /// The main entry point for the application.
    /// 

    [STAThread]
    static void Main()
    {
        Console.ReadLine();
    }

  3. Supporto alla configurabilità dei plugins. I vari tipi di plugin sono stati accumunati da una unica classe astratta da cui essi ereditano. Grazie a questo, nel pannello delle preferenze è ora presente una sezione dedicata ai plugin, che permette di configurare singolarmente i plugin che supportano tale funzionalità. Questo in realtà è anche il primo passo verso la piena gestione delle immagini, necessario data la diversa natura dei protocolli supportati da IMHO. La gestione delle immagini sarà la prima feature della release 1.1.
  4. Supporto al draft. Dato che mi avanzava un'oretta di tempo ho introdotto la possibilità di postare solo parte dei post creati. Per mezzo di una checkbox è possibile scegliere quali post inviare. Inoltre ora quando si salva un post e si clicca sul relativo balloon viene pubblicato unicamente il post appena salvato.
  5. Visualizzazione delle categorie nella barra di stato della finestra di edit. Per facilitare la lettura, le categorie selezionate vengono evidenziate nella barra di stato.
  6. Gli errori segnalati sulla release #1777 sono stati tutti corretti . In particolare ora al titolo viene applicata una codifica di tipo HTML e viene nuovamente estratto il contenuto dei tag invece che inviare tutta la pagina. Chi avesse difficoltà ad editare post inviati con la versione 1777 consiglio di usare firefox, che diversamente da Internet Explorer riesce a visualizzare correttamente i post anche se contengono questi errori.

Spero che la nuova versione sia gradita a tutti. Vorrei ringraziare tutti coloro che hanno avuto il coraggio in queste settimane di installare le versioni beta e di indicarmi i miglioramenti necessari. Senza di loro IMHO sarebbe notevolmente meno usabile e completo.

Chiunque trovasse altri bugs, o semplicemente avesse nuovi suggerimenti può scrivermi per mezzo della form in questo weblog oppure (meglio) usando il sistema di bugtracking di SourceForge.net

Ancora grazie.

powered by IMHO

L'esplosione dei PageView

Come evidenziato dal grafico qui sotto, il progetto IMHO sta vivendo una vera e propria esplosione dei PageView, nelle sue pagine su SourceForge. Questo sta probabilmente ad indicare che la pagina ha raggiunto un buon livello in Google. Negli ultimi 4 giorni ho avuto una media di 423 visite/giorno.

Purtroppo però non è dato sapere da dove vengono i visitatori e per quale tipo di ricerche. Questo mi potrebbe consentire di capire qual'è l'interesse suscitato, e magari trovare un modo per incrementare i downloads, che invece come si può vedere rimangono sempre piuttosto bassi, anche se tutto sommato non sono proprio deludenti.

Non so dove sbattere la testa per conoscere queste informazioni, spero ci sia qualcuno che conosca meglio Sourceforge, che mi possa dare un'indicazione, ma ad oggi mi sembra di poter dire che purtroppo questa funzionalità non è implementata. Peccato.

powered by IMHO

Progetto web cercasi: chiamiamolo .TRAQ

Il dado è tratto. Dato che non vi sono più commenti in merito ritengo di poter sintetizzare le varie segnalazioni giunte nel seguente nome:

.TRAQ (si legge dot Track)

Il nome è un po' ambizioso, ma il progetto non è da meno...

Inoltre direi che è sostanzialmente accolta la proposta di Adrian per la parte relativa ai bugs, che se applicabile si chiamerà BugsBanny (con la "a"). Ho predisposto una categoria nel mio blog per chi volesse rimanere aggiornato sulle novità del progetto sul quale a breve comincerò a lavorare.

powered by IMHO

IMHO: Lo stato dell'arte.

Forse qualcuno, spero molti, si staranno domandando che fine ha fatto IMHO. Sono passati un bel po' di giorni dall'ultima release, invero un po' sfigata. Attualmente sto lavorando tutte le sere ad una pesante ristrutturazione dei Plugin, per dare la possibilità di avere configurazioni perculiari di ogni singolo modulo aggiuntivo. Inoltre ho terminato e sto testando quella che spero sarà una gradita feature: Il Code Snippet Editor.

Si tratta di un plugin che permette di prelevare degli spezzoni di testo e di editarli e formattarli come se si trattasse di un pezzo di codice, scritto nei più svariati linguaggi, con tanto di Syntax Highlighting e di qualche altro gadgettino. C#, VB.NET, ILDASM, XML e HTML sono quelli che saranno supportati da subito, ma probabilmente poi toccherà anche a Java.

Portate pazienza, spero di rilasciare il tutto per l'inizio della prossima settimana. Ovviamente opportunamente debuggato!

powered by IMHO

Una cosa che mi piace di Firefox

Nessuno creda che dicendo questo voglia sminuire FireFox, ma c'è una cosa che mi piace davvero molto.

L'icona.

Sembrerà strano, ma la trovo molto bella ed efficace. Finalmente un po' di colore in questo mondo bluastro...

powered by IMHO

Un tartufo per la pace...

Apprendo stamattina da un noto quotidiano che "le due Simone" (ve le ricordate ancora vero?), quest'oggi saranno ospiti di un paesello nel senese, che conferirà loro il premio "tartufo per la pace", una sorta di Nobel culinario per la pace.

La cosa mi ha regalato un sorriso, derivante dal fatto che qualcuno in tempi non sospetti aveva detto che avrebbero finito per aprire un ristorante. Mi sembra un bel passo in questa direzione...

"Tartufo per la pace", suona davvero ilare. LOL.

powered by IMHO

A 24 ore dal voto su clonazione invita 5 persone a scrivere

Sono già 1.379 le persone che hanno inviato la richiesta, rivolta agli ambasciatori dei
paesi incerti presso l'Onu, di fermare qualsiasi risoluzione volta ad impedire la libertà
di ricerca scientifica sulle cellule staminali embrionali e di evitare la equiparazione
tra la clonazione riproduttiva e quella terapeutica.

In questo momento, a poche ore dal voto finale, si sta dibattendo se rinviare la
decisione o arrivare all'approvazione di un testo meramente dichiarativo, in cui non si
faccia menzione di un mandato Onu di preparazione di una convenzione per la messa al bando
della clonazione terapeutica.

Sono dunque ore decisive, ore in cui è necessario moltiplicare al massimo lo sforzo e le
voci di chi difende le ragioni della libertà di ricerca.

Per questo ti chiediamo un ulteriore sforzo. Gira il messaggio qui sotto a quante più
persone possibili.

Invia questa email cancellando questo messaggio introduttivo.

*************

Il 19 Novembre 2004, il Comitato degli affari legali presso l’Assemblea Generale delle
Nazioni Unite prenderà la decisione finale sulla proposta, avanzata fra gli altri dal
Costa Rica, dagli Stati Uniti, dall’Italia, dal Portogallo, con il supporto della Santa
Sede, di bando di ogni forma di “clonazione umana", inclusa la “clonazione terapeutica”
(tecnicamente chiamata “trasferimento nucleare”)

Per mandare un messaggio alle delegazioni presso le Nazioni Unite degli Stati indecisi
clicca qui (http://www.radicalparty.org/stemcells/onu.php?lang=it)

La decisione di questa settimana sarà presa senza aver affrontato gli aspetti scientifici
della questione, che avrebbe consentito di chiarire la differenza fra clonazione
riproduttiva e clonazione terapeutica.

La ricerca sulla clonazione terapeutica è sicura, etica e può condurre a trattamenti o
cure per patologie come l’Alzheimer, il diabete giovanile, il Parkinson, la Sclerosi
multipla, la Sclerosi laterale amiotrofica, le patologie cardiovascolari, le lesioni del
midollo osseo, la paralisi, il cancro e l’HIV/Aids.

Ti chiediamo di inviare urgentemente un messaggio agli Ambasciatori dei paesi indecisi
per chiedergli di non adottare qualsiasi risoluzione che chiudesse il dibattito sulla
“clonazione umana” stabilendo una serie di proibizioni che potrebbero avere un impatto
disastroso sulla vita di milioni di persone e più in generale sulla libertà di ricerca
scientifica.

Per mandare un messaggio alle delegazioni presso le Nazioni Unite degli Stati indecisi
clicca qui (http://www.radicalparty.org/stemcells/onu.php?lang=it)

Source: http://www.radicalparty.org

powered by IMHO

Bill Gates parla a Milano: "Il futuro è nella scienza"

Ecco per chi non è potuto andare ad Assago, un breve sunto del discorso di Bill Gates.

Source: Repubblica.it

Tanto per cambiare Repubblica ha fatto casino... Qualcuno dovrebbe dirglielo che non c'è nessun FuturShow a Milano!

powered by IMHO

Salutatemi Bill

Purtroppo, per esigenze di lavoro, nemmeno questa volta potrò essere presente ad una manifestazione che mi interessa davvero molto. La mia speranza è quella di riuscire a ritagliare una giornata per il 2 Dicembre.

Perciò chi avrà occasione di incontrarlo, porti i miei saluti a Bill, ma anche a tutti gli altri oratori che terranno sicuramente delle sessioni di enorme interesse.

piangente

powered by IMHO

Progetto web cercasi: diamogli un nome...

So già che mi sarà detto che cominciare dal nome non è una buona idea, però io sono abituato a chiamare le cose con il loro nome, e se queste non ce l'hanno diventa un problema. Quindi anche per "esigenze editoriali", vorrei provare a trovarlo subito.

Ecco in due parole di cosa si dovrebbe occupare il software, sintetizzando le idee che sono state proposte nei commenti al mio precedente post :

  1. Tracking dei bugs in un progetto. Per estensione suggerirei che il tracking sia esteso a tutte le fasi di sviluppo e non solo al debugging.
  2. Gestione della knowledge base aziendale relativa ai progetti
  3. Integrazione con software di versioning per collegare le attività di manutenzione con quelle di commit dei progetti
  4. Supporto alle attività di raccolta dei requisiti e alla gestione dell'avanzamento del processo produttivo
  5. Supporto alle attività di testing (funzionale e unit testing)
  6. Supporto alle attività di documentazione

Si tratta solo di una piccola scaletta per aiutare nell'invenzione del nome. Mi riservo di definire meglio i punti sopraelencati in un documento apposito che poi renderò pubblico attraverso il mio blog.

Il nome che propongo io è "Traq ". Breve, conciso, efficace e significativo.

Vi piace? Altre proposte?

powered by IMHO

Una simpatica barzelletta...

Today, I came across something interesting.

Event : An insect falls into a mug of beer...

Reactions:
Englishman: Throws his mug away and walks out.
American: Takes the insect out and drinks the beer.
Chinese: Eats the insect and throws the beer away
Japanese: Drinks the beer with insect as it is coming free

Indian: Sells the beer to the American and insect to the Chinese and gets a new mug of beer. ......INTELLIGENT!!...

Pakistani: Accuses the Indian for throwing insect into his beer -Relates the issue to Kashmir -Asks the Chinese for Military aid -Takes a loan from the American to buy one more mug of beer.

Source: I love my country

Aggiungerei:

Italiano: Cerca di scambiare la birra con un tedesco facendogli credere che sia aromatizzata con una speciale tecnica.

powered by IMHO

ONU: azione urgente sulla Clonazione Terapeutica

Il 19 Novembre 2004, il Comitato degli affari legali presso l’Assemblea Generale delle Nazioni Unite prenderà la decisione finale sulla proposta, avanzata fra gli altri dal Costa Rica, dagli Stati Uniti, dall’Italia, dal Portogallo, con il supporto della Santa Sede, di bando di ogni forma di “clonazione umana", inclusa la “clonazione terapeutica” (tecnicamente chiamata “trasferimento nucleare”)

La decisione di questa settimana sarà presa senza aver affrontato gli aspetti scientifici della questione, che avrebbe consentito di chiarire la differenza fra clonazione riproduttiva e clonazione terapeutica.

La ricerca sulla clonazione terapeutica è sicura, etica e può condurre a trattamenti o cure per patologie come l’Alzheimer, il diabete giovanile, il Parkinson, la Sclerosi multipla, la Sclerosi laterale amiotrofica, le patologie cardiovascolari, le lesioni del midollo osseo, la paralisi, il cancro e l’HIV/Aids.

Ti chiediamo di inviare urgentemente un messaggio agli Ambasciatori dei paesi indecisi per chiedergli di non adottare qualsiasi risoluzione che chiudesse il dibattito sulla “clonazione umana” stabilendo una serie di proibizioni che potrebbero avere un impatto disastroso sulla vita di milioni di persone e più in generale sulla libertà di ricerca scientifica.

Per mandare un messaggio alle delegazioni presso le Nazioni Unite degli Stati indecisi clicca qui

Source: http://www.radicalparty.org

powered by IMHO

Donate cicli di CPU in beneficenza...

Chi ha un pc che rimane acceso 24 ore su 24, può donare i cicli di CPU che vengono sprecati durante la notte a questo progetto che si propone di creare una Computing Grid su scala mondiale per scopi bnefici.

World Community Grid - Home

powered by IMHO

ASP.NET 2.0 and Visual Web Developer hit ZBB

ZBB = Zero Bug Bounce.

Purtroppo a quanto pare la BETA 2 comunque non sarà pubblicata prima di Gennaio.

ASP.NET 2.0 and Visual Web Developer hit ZBB

powered by IMHO

R'N'B Radio SNJ

Sto ascoltando da un po' di giorni radio SNJ. Ottima musica, vi invito a provarla, ma permettetimi un appunto. Gli intermezzi tra un brano e l'altro ti spaccano i timpani!!! Io lo ascolto in cuffia a assicuro che sono una tortura.

powered by IMHO

Gmail Image Viewer

Stefano Demiliani nel suo blog segnala un add-on per gmail su Internet Explorer

Gmail Image Viewer

powered by IMHO

TIP: Eliminare il web services di associazione file da XP

Me lo sono chiesto almeno un milione di volte. Ma si potrà togliere questo inutile popup che fa perdere solo tempo... ecco la risposta

Stop the Windows XP file association web service

powered by IMHO

Feed Burner

Ho trovato questo simpatico servizio che permette di creare un bannerino con i post più recenti del proprio blog.

Di .NET e di altre amenita'

http://www.feedburner.com/

powered by IMHO

Progetto Web cercasi

Sto pensando di unire l'utile al dilettevole, e da qualche giorno ho in mente di cominciare a lavorare su un progetto ASP.NET utilizzando il Framework 2.0. allo scopo di fare pratica sul campo. Il fatto è che ho molti dubbi su che pprogetto affrontare. Inizialmente mi era venuto in mente di fare un porting di BugZilla per .NET, ma non sono del tutto certo di riuscire a fare meglio di quello che già c'è.

Infatti l'idea non è quella di fare un progettino fine a se stesso, ma di creare un vero e proprio progetto OpenSource, che possa avere qualche riscontro.

Qualche idea?

powered by IMHO

ASP.NET 2.0: annunciate modifiche a Directory Naming e Compilation Model

In questo post si riportano delle modifiche, già presenti nella CTP di novembre al modello di compilazione di ASP.NET e al naming delle directory. Le modifiche vanno nella direzione di quanto suggerito dai membri della comunità degli sviluppatori.

Source: ASP.NET 2.0 product design changes between Beta 1 and Beta 2

powered by IMHO

Un home Computer del 2004

Ecco come nel 1950 si pensava sarebbe stato un home computer del 2004. Quello che più mi lascia perplesso è il "timone" che si vede sulla sinistra.

Saurabh's Believe It Or Not : Home Computer for 2004

Curiosamente questo mi ha fatto pensare a come noi pensiamo saranno gli home computer nel 2058 e a come invece saranno realmente.

powered by IMHO

Chiamata all'azione

Venerdì 19 Novembre il Sesto Comitato dell'Assemblea Generale delle Nazioni Unite voterà sulla proposta del Costa Rica per la messa al bando della tecnica del "Trasferimento Nucleare", detta anche "clonazione terapeutica". Per opporti a questa proposta proibizionista, puoi non solo firmare l'appello sottoscritto da 71 Premi Nobel, ma anche contattare direttamente (con un unico click) le ambasciate e i ministeri dei Paesi ancora incerti.

powered by IMHO

MSDN Web Developer Kit

Per gli sviluppatori ASP.NET un kit da Microsoft.

MSDN Web Developer Kit

powered by IMHO

Non sono superstizioso ma...

Chi mi ha seguito nello sviluppo di IMHO, si sarà reso conto che nell'ultima release si sono verificati più problemi che in tutte le altre messe assieme. Non sono superstizioso, ma devo rilevare che si tratta della build 1777.

Che significhi qualcosa?

powered by IMHO

IMHO: problema di titolo

Quello che è successo nel mainfeed di UgiDotNet mi ha portato a conoscenza di un bug di IMHO. Vi prego di non mettere tag HTML nel titolo del post perchè non vengono correttamente codificati. Appena posso correggo l'errore.

Vogliate accogliere le mie scuse.

powered by IMHO

IMHO... la prossima release

Ci sto lavorando in ogni minuto libero. Non ci vuole ancora molto...

[ImhoFeature( Feature.New )]
private string DoIt()
{
    
return "pochi giorni ancora e...";
}

Qualcuno ha indovinato quale sarà la prossima novità?

powered by IMHO

Buon Natale

La visita al centro commerciale odierna mi ha messo di buon umore.

Luci scintillanti, opulenti scaffali, Pandori e Panettoni, strenne di ogni genere e per ogni tasca, ma...

...da quando hanno anticipato il Natale al 25 Novembre?

powered by IMHO

Un blog o un'opera d'arte?

Dal weblog del mio amico Francesco, ho conosciuto il più bel blog che abbia mai visto.

InTreno è un'esercizio di immaginazione. Con poche e semplici parole da vita ad una foto, dipinge un personaggio, e ne rivela l'essenza.

Quante volte involontariamente l'abbiamo fatto?

powered by IMHO

IMHO 1.0.1777 - Problemi di installazione

In molti mi hanno segnalato che ci sono dei problemi nell'installazione della release 1777 di imho. Si tratta di una dimenticanza dovuta alla tarda ora. Nel package è stato incluso un file di configurazione che contiene già alcuni dati, crittati per mezzo di DPAPI. A causa della modalità di funzionamento di DPAPI, questo file è leggibile solo dal pc sul quale ho sviluppato IMHO, mentre causa un errore su tutti gli altri.

Ho già provveduto a correggere l'errore e a fare l'upload del package corretto presso sourceforge.net. Scusate per l'inconveniente.

powered by IMHO

ICSharpCode.TextEditor

Gli appassionati di SharpDevelop probabilmente già lo sanno, ma vorrei lo stesso dire due parole sul componente per WindowsForms che è incluso nei sorgenti di questo IDE.

L'assembly ICSharpCode.TextEditor.dll contiene uno splendido controllo TextEditorControl, che permette di usufruire di una sofisticata textbox con capacità di Syntax Highlighting in real-time, folding, undo/redo, ed estremamente rapida e stabile. Il componente sfrutta dei file di configurazione che permettono di decidere il formato e i colori di keyword e marcatori all'interno di un file di testo.

ICSharpCode.TextEditor è distribuito sotto licenza GPL.

Powered by IMHO logo

Visto che molti hanno deciso di mantenere la dicitura "powered by IMHO", nei post che inviano con il mio client, ho deciso di investire un po' del mio tempo per creare un piccolo logo, poco invasivo, che possa essere messo nella home page del proprio weblog.

Ed ecco il codice per inserirlo (anche se immagino che in un blog di programmatori sia superfluo)

<A href="http://sourceforge.net/projects/imho10">
    <
IMG src="http://www.boschin.it/imho/powered.gif" width="75" height="19" border="0">
<
/A>

Grazie fin d'ora a chi lo vorrà usare.

Syntax Highlighting in IMHO

Grazie allo splendido codice di SharpDevelop, la nuova release di IMHO (#1777) si propone con un fantastico editor HTML con tanto di sintassi colorata alla Visual Studio.NET. E' opportuno che io ringrazi innanzitutto i componenti del team che hanno scritto un TextEditorControl estremamente preciso e raffinato. L'integrazione con IMHO è stata di una semplicità notevole.

Ma non è tutto per questa release. E' finalmente stato aggiunto il supporto per dasBlog, il cui adapter è stato creato grazie alla impareggiabile collaborazione di "Mighell", che in men che non si dica mi ha predisposto un'istanza di dasBlog su cui ho potuto fare tutti i test del caso.

L'engine di dasBlog è perfettamente compatibile con le specifiche MovableType, perciò chiunque avesse un blog che lo supporta da oggi è in grado di usare IMHO . Tra questi cito WordPress (testato da Brent), Nucleus, SnipSnap...

Un grazie a tutti... e a presto, con nuove feature.

Gmail supporta il POP3

Pare proprio che Gmail entro breve supporterà il protocollo POP3 per scaricare i messaggi. In questo post si vede anche una schermata di configurazione. Nonostante nel post si dica che il servizio dovrebbe già essereattivo, non ho trovato traccia della cosa.

Gmail adds POP support

Comunque personalmente non ne sentivo la mancanza. Il servizio di Gmail è talmente ben fatto che ho quasi rinunciato a usare un client di posta.

Powered by 

 

StatCounter Free Web Tracker

Per avere un contatore sul mio blog mi sono messo alla ricerca di un servizio degno di questo nome. Mi sono imbattuto i StatCounter, che assieme al contatore fonisce anche una serie di statistiche di una qualità elevatissima, con tanto di reverse lookup e di grafici.

StatCounter Free Web Tracker

Powered by 

 

IPC con Remoting

Chi ha provato a utilizzare .NET Remoting per risolvere problemi di Interprocess Communication, se sarà trovato nella ovvia necessità di impedire l'accesso alle porte esposte da computer diversi da localhost. In questo breve spezzone di codice viene impostata la proprietà rejectRemoteRequests che ha proprio questo scopo. La stessa proprietà la si può settare anche da file di configurazione, ma nel caso dell'IPC, io ho preferito farlo da codice.

/// <summary>
///
Run a remoting server
///
</summary>
private static void
StartRemoting()
{
    // Accettiamo connessioni solo dal pc locale 127.0.0.1
    IDictionary props = new
Hashtable();
    props["rejectRemoteRequests"] = true
;
    props["port"] = AppSettings.Current.RemotingPort;

    TcpChannel channel = new TcpChannel( props, null,new
BinaryServerFormatterSinkProvider() );

    ChannelServices.RegisterChannel( channel );

    RemotingConfiguration.RegisterWellKnownServiceType(
        typeof
( Elite.IMHO.Data.RemoteReference ),
        "RemoteReference.rem",
        WellKnownObjectMode.SingleCall );
}

Cercando un po' in rete ho trovato anche come .NET 2.0 permetterà di gestire l'IPC, con un channel ad-hoc denominato appunto "ipc"

IPC with Remoting in .NET 2.0

Powered by 

C# 2.0 Evoluzione della specie... è in edicola

Sono lieto di fare compagnia a Corrado con un mio articolo su Computer Programming di Novembre dal titolo C# 2.0 Evoluzione della specie.

Nell'articolo un excursus sulle novità di C# senza tralasciare qualche paragone con il linguaggio concorrente Java 1.5

Buona lettura.

IMHO: Connected to the world!!!

Sono lieto di annunciare che ad IMHO è stata aggiunta una nuova release. La build #1773, che ormai considero vicinissima alla prima release non-beta, apporta ulteriori miglioramenti al software.

E stata aggiunta la possibilità di postare commenti a partire da Internet Explorer, e dai più comuni aggregators della galassia di .NET. Primi fra tutti RSSBandit e SharpReader, ma da quello che vedo in rete dovrebbe essere possibile anche usare NewsGator.

Nella figura a fianco è visibile il menù di contesto di Internet Explorer che consente di creare una citazione a partire da un brano selezionato direttamente nella pagina HTML. La citazione viene inserita in un nuovo post seguendo un template completamente configurabile. Inoltre è possibile anche aggiungere un semplice link, sempre facendo uso del menù di contesto che in questo caso riporterà la dicitura Post link to IMHO. Le medesime azioni si possono compiere anche dagli aggregators pocanzi citati. E' comunque interessante sapere che per implementare queste funzionalità ho aggiunto una interfaccia che usa .NET Remoting .

Per il suggermento debbo ringraziare Jon Galloway che ha notato IMHO su sourceforge e si è affrettato ad informarmi dell'esistenza dell'interfaccia IBlogExtension , che accomuna questi aggregators.

Infine, è stata aggiunta un'opzione per consentire la rimozione del CRLF dai post, utile soprattutto per chi usa blogger.

Il lavoro continua... Attualmente sto implementando l'engine MovableType, che mi consentirà di essere compatibile che dasBlog e con una serie di altri engine che ne fanno uso.

Grazie a tutti.

Powered by 

IMHO: Problemi di break con blogger

Mi viene segnalato che postando con IMHO su Blogger, il testo risulta spezzato in varie parti in corrispondenza con gli "a capo" immessi. Per ovviare a questo problema è sufficiente modificare le impostazioni di Blogger e valorizzare in questo modo la seguente proprietà

Settings > Formatting > Convert Line Breaks = No

Grazie a tutti.

Powered by 

IMHO: Impostare il template custom

In risposta alle domande di chi non è riuscito a customizzare il template di default, eccho una schermata per suggerire dove cercare. Si tratta della finestra di impostazioni, nella sezione Startup.

Mi rendo conto solo ora di quanto sia brutto il template di default. Appena posso lo cambio... Chi proprio volesse lasciare la dicitura "powered by", può copiare quella che uso io, qui sotto.

Powered by 

Gli utenti crescono...

C'è già qualcuno su blogger che è passato ad IMHO... Anche se Windows NT ha dato parecchie grane. A breve posto la soluzione per chi avesse ancora questo Sistema Operativo..

Powered by 

Perchè è vietato il return in un blocco finally

Incuriosito dal post di Michele che legittimamente si chiede per quale motivo è vietato usare return in un finally , sono andato in rete a caccia di un valido motivo. Assodato che l'uso di return in un blocco finally è perfettamente inutile, rimane da spiegare perchè sia anche vietato. Impossibile e inutile sono due cose ben diverse.

Mi sono alla fine imbattuto in un articoletto, dal quale ho tratto l'esempio che segue, che parla dell'uso di return nel finally in Java e ho scoperto che in tale linguaggio questa cosa è perfettamente legale, pur se sconsigliata. Purtroppo non ho il compilatore Java installato (ehm... i miei pc sono accuratamente decaffeinati), perciò non ho potuto verificare che l'esempio portato si comporti veramente c ome descritto, ma non ho nemmeno ragione di dubitarne.

Assumiamo quindi il seguente spezzone di codice:

public class Test
{
    public
void
run()
    {
        try
        {
            Console.WriteLine("run() about to throw exception...");
            // force an array out-of-bounds exception
            int
[] myInts = {1, 2};
            int
x = myInts[3];
        }
        finally
        {
             Console.WriteLine("run() in finally");
             return; // by returning within a finally we have lost previous exceptions
        }

        return
;
    }

    public static void Main(String[] args)
    {
        Test test = new
Test();

        try

        {
            test.run();
            Console.WriteLine("Main now after run() call");
        }
        catch
(Exception ex)
        {
            Console.WriteLine("Main got run() exception " + ex.Message);
        }
       
        Console.ReadLine();
    }
}

Immaginando di eseguire l'equivalente di questo codice in Java otterremo il risultato di perdere l'eccezione che viene generata nel metodo run(). Questo perchè,il blocco finally che viene eseguito subito prima di uscire dal metodo in seguito all'eccezione, ritornando il controllo alla Main() modifica il flusso di esecuzione.

In C# questo codice non compila, quindi, non perchè sia inelegante o inutile usare il return in un blocco finally, ma semplicemente perchè è foriero di comportamenti anomali e non facilmente interpretabili.

Quindi, vi invito ad un inchino con la mano sul cuore, per rigraziare ancora una volta i progettisti di C#.

Powered by 

Togliere invece che aggiungere

Tornando un attimo su Bruno Munari, ho trovato il brano in cui egli esprime il concetto di "Togliere invece che aggiungere"

SEMPLIFICARE E' PIU' DIFFICILE

Complicare è facile,
semplificare é difficile.
Per complicare basta aggiungere,

tutto quello che si vuole: 
colori, forme, azioni, decorazioni,
personaggi, ambienti pieni di cose.
Tutti sono capaci di complicare.
Pochi sono capaci di semplificare.
Per semplificare bisogna togliere,
e per togliere bisogna sapere che cosa togliere,
come fa lo scultore quando a colpi di scalpello
toglie dal masso di pietra tutto quel materiale che c'é in più.
Teoricamente ogni masso di pietra può avere al suo interno
una scultura bellissima, come si fa a sapere
dove ci si deve fermare nel togliere, senza rovinare la scultura?
Togliere invece che aggiungere
vuol dire riconoscere l'essenza delle cose
e comunicarle nella loro essenzialità.
Questo processo porta fuori dal tempo e dalle mode....
La semplificazione è il segno dell'intelligenza,

un antico detto cinese dice:
quello che non si può dire in poche parole
non si può dirlo neanche in molte

Bruno Munari

Powered by 

Sistemi Operativi su VPC 2004

Incuriosito dalla possibilità di far girare AmigaOS 3.1 (AROS) su Virtual PC, ho cercato un po' in rete che altre possibilità si aprono con il VPC, e ho trovato la lista completa del Sistemi Operativi che vi possono girare.

http://vpc.visualwin.com/

Powered by 

Amiga Research Operating System

Navigando un po' in giro, mi sono imbattuto in AROS. Ecco come viene descritto:

AROS is a portable and free desktop operating system aiming at being compatible with AmigaOS 3.1, while improving on it in many areas. The source code is available under an open source license, which allows anyone to freely improve upon it.

Sul sito si può scaricare un ISO di un CD-ROM che permette di avviare e installare AROS anche su un Mcrosoft Virtual PC. Provato e funziona. E' entusiasmante tornare a cliccare un Workbench, invece che un Desktop...

Powered by 

...nothing more to add...

Leggendo il post di Matteo ho ricordato da chi ho imparato la enorme verità che è racchiusa nella frase di Saint-Exupery

Includo un breve stralcio di un'intervista a Bruno Munari (1902-1998) designer italiano di grande spessore, che Picasso amava definire il "nuovo Leonardo".

Domanda: Lei ha teorizzato il concetto di togliere invece di aggiungere, di semplificare, di arrivare all'essenziale. E' un principio che sembra generalmente valido, applicabile ai più diversi problemi: da quelli concernenti l'estetica degli oggetti sino a quelli tipici della burocrazia. Questo invito teorico, allo stesso tempo molto pratico, può rappresentare un punto di partenza nel fare arte?

Munari: Togliere invece che aggiungere vuol dire arrivare all'essenziale. L'essenziale e' il nucleo sul quale operare. A questo punto basta (secondo quello che si vuole fare) o lasciare l'essenziale così com'è (vedi Teorema di Pitagora, senza tempo) o scherzarci sopra o trasformare facendo infinite varianti. Aggiungendo valori soggettivi all'essenziale si fa dell'arte, l'arte è fatta di valori soggettivi, la ricerca cerca valori oggettivi, sposando i due termini in armonia può sorgere l'arte, forse, l'incontro della regola col caso, o l'estro.

Leggere questa intervista e molti dei libri che ha scritto Munari, è illuminante su quanta sia la vicinanza tra arte, design e programmazione. Consiglio Da cosa nasce cosa Bruno Munari - Editori Laterza & Figli spa, Roma-Bari 1998, nel quale l'autore espone un metodo progettuale che ha molti punti in comune con quello che si dovrebbe usare in informatica.

Infine un ricordo: ho avuto occasione di conoscere personalmente Bruno Munari, quando ancora ero un bimbo. Conservo di lui una sensazione "indescrivibile" e un bigliettino, sul retro del conto del ristorante, sul quale egli ha voluto scrivere il mio nome, più o meno così.

Permettetemi: Grazie Bruno, mi hai insegnato che quello che conta non è il mezzo, ma come lo usi.

Powered by 

E ora tocca a dasBlog!

Sapessi almeno dove trovare una comunity che lo usa. L'idea sarebbe quella di creare un adapter anche per questo engine, ma svariate ricerche in rete non hanno avuto successo.

Mi serve una community cui io possa iscrivermi e testare dasBlog con IMHO.

Qualcuno la conosce???

Powered by 

Nuova release di IMHO 1.0

Dopo un bel po' di tempo, a causa di qualche problemino di salute, eccomi nuovamente con una nuova release di IMHO, il mio software per blogger accaniti.

La nuova build #1769, ha come novità primaria l'introduzione di un sistema di pluggable engines. In sostanza è possibile creare nuovi plugin per engine di blogging semplicemente estendendo un paio di classi astratte. In questa release è stato aggiunto il plugin per Blogger, la comunità che fa riferimento a Google. Per questo plugin vadano i miei ringraziamenti a Matteo G.P. Flora che con i suoi esempi di codice ha validamente sopperito alla scarsità di informazioni presenti in rete. Se non fosse stato per lui, probabilmente starei ancora cercando.

Ma le novità non si fermano qui. Tra le nuove feature segnalo la possibilità di automatizzare l'avvio di IMHO all'avvio di Windows, la minimizzazione automatica sulla tray area il rilevamento automatico della connessione che chiede se si desidera pubblicare i post in sospeso, la semplificazione della pubblicazione appena si è creato un nuovo post.

Inoltre ora c'è la possibilità di creare un template di default per le nuove entry che nel mio caso mi permette di inserire la dicitura "powered by IMHO" ad ogni post", ma che permette anche di mantenere sempre lo stesso font ad ogni post.

Altre modifiche riguardano il logging su file configurabile, per il debug di errori, e la copertura di un numero imprecisato di bugs che non avevo mai notato e per la cui scoperta ringrazio che ha avuto la bontà di segnalarmeli.

Il download come sempre da Sourceforge a partire da: http://sourceforge.net/projects/imho10

Powered by 

Un altro foto quiz

Ci sto prendendo gusto. Ecco la foto di una leggenda dell'informatica, peraltro già morto.

Di chi si tratta?

Suggerimento: Stavolta Microsoft non centra manco di striscio...

Foto quiz... la risposta

Per chi non ha saputo rispondere al mio quiz, ecco la risposta:

Si tratta di David Bradley, l'inventore della combinazione di tasti CTRL+ALT+DEL. La foto è tratta da un articolo della CNN in merito al suo pensionamento.

:-P

Foto Quiz... ci provo anche io

Chi è il tizio che maneggia la tastiera in questa foto?

City Comparer

Per chi volesse decidere dove è meglio andare in ferie negli USA

http://www.bestplaces.net/city/ccompare.aspx

Electoral Vote Predictor 2004

Accidenti... questa è la differenza maggiore che io abbia visto negli ultimi tre mesi...

Electoral Vote Predictor 2004

Kerry 298   

Bush 231

fonte: http://www.electoral-vote.com/

I voted in a Catholic parochial school. Right under a crucifix.

Ecco cosa riporta un elettore statunitense della propria esperienza elettorale:

My polling place is a local parochial school. In the past this never posed an issue. But with the Catholic Church taking on a partisan politcal role in this election, this is about as fair as insisting that all the citizens in my local parish be assigned to cast their ballots in the nearest Planned Parenthood clinic.

http://www.democraticunderground.com/discuss/duboard.php?az=view_all&address=201x422

Che brivido...

Democratic Underground

Per che volesse seguire l'andamento delle elezioni negli U.S.A. senza trovarsi costretto a dare percentuale di audience a delle pessime trasmissioni televisive, consiglio questo:

http://www.democraticunderground.com/

Path.InvalidPathChars

Chi ha usato la classe Path si sarà accorto che contiene una serie di metodi e proprietà statiche davvero utili. Oggi mi sono imbattuto in una mancanza... A fianco alla proprietà InvalidPathChars che restituisce l'array di caratteri che non sono ammessi in un path ci starebbe bene anche la InvalidFilenameChars che restituisca i caratteri che pur potendo far parte di un path, non possono entrare in un filename, come ad esempio ":" e "/".

Ovviamente ho risolto creando un array in questo modo:

char [] invalidFileNameChars = new char[]
{
   '\\', '/',':', '*', '?', '"', '<', '>', '|'
};

Ma volendo proprio fare i raffinati la proprietà ci sarebbe stata bene...

UPDATE: il post è stato corretto rispetto le segnalazioni dei commenti. La sostanza rimane comunque la stessa, anzi, quanto è successo la dimostra.