In questo post voglio parlare in modo specifiche delle firme gestite da Happy Sign.
Abbiamo già detto che allo stato attuale la tipologia di firme disponibili sono essenzialmente due:
- firme normali
- firme dinamiche
Vediamone la differenza.
Firme normali
Una firma normale è una firma il cui testo è espresso interamente dalla proprietà Text della classe NormalSignature. Supponiamo di avere una categoria Generale, e di avere al suo interno una firma chiamata "Firma per e-mail" il cui testo è definito come segue:
Igor Damiani
MCP - Microsoft Certified Professional
Web-Site : www.igordamiani.it
E-Mail : igor@mio_dominio.com
Questa firma comparirà nell'interfaccia principale di Happy Sign, dalla quale possiamo fare un bel drag'n'drop ed utilizzarla dove vogliamo: Microsoft Outlook, Microsoft Outlook Express, Thunderbird, etc. etc. Quello che Happy Sign trascina è un semplice testo, di conseguenza il destinatario dell'operazione di drag'n'drop può essere virtualmente qualsiasi applicazione. All'interno di Happy Sign possiamo evidentemente aggiungere tutte le firme che vogliamo. Se volessimo creare una seconda firma, magari da usare quando postiamo sui newsgroup, e quindi più "anonima" per evitare spamming, possiamo definirne una così...
Nickname
--
nomerusso@hotmail.com
Please ask for my real e-mail!
Il ragionamento è sempre lo stesso. Possiamo definire tutte le firme che vogliamo. In questo caso abbiamo utilizzato Happy Sign per creare firme reali, mentre in realtà il suo scopo è più che altro per la decorazione di firme, ovvero aggiungere frasi di effetto tratte da libri, film, citazioni famose, etc: di questo abbiamo già parlato nel primo post di questa piccola serie. Ma questo non è un problema: Happy Sign si adatta anche ad un utilizzo di questo tipo.
Firme dinamiche
L'utilizzo che abbiamo fatto sinora di Happy Sign è piuttosto banale. La vera potenza di Happy Sign risalta quando passiamo ad usare le cosiddette firme dinamiche, ovvero il cui testo contiene dei marcatori espressi nella forma {n} che verranno valorizzati e sostituiti in modo trasparente nel momento in cui decidiamo di usare la firma stessa.
Mi spiego meglio: supponiamo di avere una firma il cui testo è...
L'ultimo post sul mio blog è: {0}
Se non fosse una firma dinamica, il testo sarebbe un po' oscuro, non trovate? La firma dinamica dà però una marca in più: nel momento in cui facciamo drag'n'drop della firma, Happy Sign si preoccupa di sostituire il marcatore {0} con una stringa più sensata. Come viene calcolato il valore della stringa? A ciascuna firma dinamica è associato il codice di una classe .NET: tale codice viene compilato, eseguito ed utilizzato in tempo reale, nel momento stesso in cui cominciamo a fare drag'n'drop. Ovviamente, tale classe deve soddisfare alcuni requisiti, di cui parleremo la prossima volta.
Le possibilità in un contesto di questo tipo sono realmente illimitate. Possiamo infatti scrivere classi che:
- consumano l'RSS del feed del vostro blog e restituiscono il titolo del post più recente
- ritornano la data e l'ora corrente
- ritornano un numero random tra 3 e 718 (a cosa diavolo serve???)
- ritornano il titolo e l'autore dell'mp3 che state ascoltando con Windows Media Player
- consumano un web-service da qualche parte e ritornano la temperatura del luogo in cui vi trovate
- tira "1 dado a 6 facce" (1d6) per 18 volte e vi genera i punteggi delle 6 abilità del vostro prossimo personaggio per AD&D (!)
- accedono ad un database locale, leggono una tabella piena di tutti i libri che avete letto, e ne ritorna il titolo di uno a caso
- vi formattano l'hard-disk!!!
Non ci sono limiti, in positivo ed in negativo. Perlomeno, così prevede la release di Happy Sign che sto utilizzando. Il codice della firma viene compilato a run-time usando le classi del framework. Sto lavorando ad un upgrade che faccia eseguire il codice della classe in un application domain separato rispetto a quello dell'applicazione principale Happy Sign, in modo tale che:
- il crash di uno script non provochi il crash di Happy Sign
- l'assembly generato dalla classe sia il più possibile isolato dal core di Happy Sign
- sia possibile imporre restrizioni e negare permessi al codice dello script (impossibilità di scrivere files e/o registro, negare l'apertura di finestre di dialogo, etc. etc.)
Torniamo a noi. La firma può contenere anche più parametri, come nell'esempio seguente:
Mentre ci sono {0}°C, sto ascoltando {1},
una canzone di {2}. Cavolo, chi lo sapeva che durava ben {3} minuti?!?
Il testo di questa firma dinamica contiene ben 4 parametri, che devono essere tutti calcolati prima che la firma possa essere trascinata a tutti gli effetti. La classe quindi deve poter soddisfare questo requisito. Entreremo nei dettagli nel prossimo post, dove sviscereremo le questione così come è stata risolta in questa release (non ancora pubblica).