novembre 2004 Blog Posts
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
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
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
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
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
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.
Friday |
26th November 2004 |
348 |
181 |
87 |
94 |
Un grande grazie a tutti e 181 .
powered by IMHO
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
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
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
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
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
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
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
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
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
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
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
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 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 { get; set; }
// 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
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
Un po di codice XAML per un'animazione che mi riporta ai
vecchi tempi di Amiga.
Bouncing Back...
powered by IMHO
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
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
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
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:
- 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.
- 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();
}
- 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.
- 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.
- Visualizzazione delle categorie nella barra di stato della finestra di edit. Per facilitare la lettura, le categorie selezionate vengono evidenziate nella barra di stato.
- 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
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
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
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
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
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
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
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
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.
powered by IMHO
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 :
- 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.
- Gestione della knowledge base aziendale relativa ai
progetti
- Integrazione con software di versioning per collegare
le attività di manutenzione con quelle di commit dei progetti
- Supporto alle attività di raccolta dei requisiti e
alla gestione dell'avanzamento del processo produttivo
- Supporto alle attività di testing (funzionale e unit
testing)
- 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
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
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
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
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
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
Stefano Demiliani nel suo blog
segnala un add-on per gmail su Internet Explorer
Gmail Image
Viewer
powered by IMHO
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
Ho trovato questo simpatico servizio che permette di
creare un bannerino con i post più recenti del proprio blog.
http://www.feedburner.com/
powered by IMHO
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
Ecco come attivare le linee
guida nel Text editor di Visual Studio 2005
Guidelines – a hidden feature for
the Visual Studio Editor
powered by IMHO
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
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
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
Per gli sviluppatori ASP.NET
un kit da Microsoft.
MSDN Web Developer
Kit
powered by IMHO
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
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
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
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
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
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
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.
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.
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.
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
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
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
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.
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
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
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
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
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
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
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
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
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
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
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
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...
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
Chi è il tizio che maneggia la tastiera in questa
foto?
Per chi volesse decidere dove è meglio andare in ferie
negli USA
http://www.bestplaces.net/city/ccompare.aspx
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/
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...
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/
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.