di .NET e di altre amenità

Un anno e mezzo... ma non é cambiato nulla

Ho letto, ma solo fino ad un certo punto la polemica che si sta trascinando nel mainfeed di ugidotnet. Non potevo mancare di dire la mia dato che ormai un anno e mezzo fa sono stato io l'oggetto di un simile flame. Davvero credetemi se vi dico che oggi più di allora credo che l'errore fondamentale sia proprio quello di voler espungere qualcosa da questo feed. Post sulle certificazioni, post off-topic, post troppo lunghi, post politici, post letterari, post "diversi", di volta in volta sono di disturbo per qualcuno e si dovrebbe operare su di essi una sorta di autocensura. Il fatto è che così facendo si arriva a cancellare qualunque voce che sia almeno un po' fuori da coro. La mia opinione è che in un feed non si sia in diritto di cancellare alcunchè e tantomeno di marcarlo con un ot-scarlatto.

Non vi dirò cosa mi piace leggere e cosa non mi piace leggere. Vi dirò che mi piace poter scegliere e quindi selezionare i miei post preferiti tra tutti quelli che i blogger di ugidotnet vorranno scrivere e che non mi piace l'idea che sia qualcun'altro ad operare questa scelta per me. E se non bastasse sono convinto che la maggioranza dei lettori di ugidotnet la pensa come me, altrimenti non si spiegherebbe perchè i post che hanno più commenti nel mio weblog sono proprio quelli che vengono considerati ot.

powered by IMHO 1.3

Come sono ridotto...

Sto lavorando alle slide per Venerdì. Ecco un foto scattata da mia moglie che dimostra bene come sono ridotto...

Che sia grave?

powered by IMHO 1.3

UPDATE: Pattern come se piovesse...

Mi è stato segnalato che il sito xedotnet ha avuto qualche problema nelle ultime ore. Si è trattato di un problema sistemistico che ora è stato risolto.

Rinnovo perciò l'invito ad iscriversi al seguente url:

http://www.xedotnet.org/subscriptions.aspx

powered by IMHO 1.3

Design Pattern come se piovesse...

Stamane è stata una giornata interessante in ufficio. L'analisi un po' meglio approfondita di una funzionalità mi ha portato a ideare una collaborazione di un bel numero di design pattern che a mio parere darà una bella flessibilità all'applicazione cui il mio team sta lavorando. Dico "darà" perchè in effetti toccherà al buon Roberto implementare le modifiche necessarie, con un po' di refactoring.

Ma tornando alla soluzione, posso dire che non capita spesso di veder lavorare assieme una CHAIN OF RESPONSABILITY, un COMMAND, un COMPOSITE e una FACTORY. Sarà che in vista della sessione che dovrò tenere il prossimo 5 maggio, ho accentuato la mia sensibilità nell'individuare queste soluzioni, ma comunque sia la soddisfazione e molta. Sapete com'è, nonostante il codice che è passato sotto le mie dita probabilmente si potrà oramai misurare in gigabytes, non tutti purtroppo di cui andare orgoglioso, ho ancora la fortuna di potermi emozionare quando riesco a scolpire un bel design, ad eliminare un po' di code smells e sento - questa è la parola giusta - che tutte le le cose sono al loro posto.

Ok, venendo al dunque dopo tutto questo grondare di autocompiacimento, sappiate che in questo clima favorevole mi sono messo a lavorare sulla sessione del 5 maggio. L'idea è quella di implementare un layer di provider per l'accesso ai dati facendo uso di un bel po' di patterns. Si parlerà di ABSTRACT FACTORY, di SINGLETON, di BRIDGE, di PROTOTYPE e di DECORATOR. Il tutto per realizzare in 45 minuti uno strato di astrazione del database che sia estensibile e flessibile a sufficienza da potersi utilizzare in qualunque contesto.

Non dico altro. Se considerate che nella sessione che segue la mia ci sarà nientepopoimeno che Luca Minudel, spero di aver stuzzicato a sufficienza la vostra curiosità da spingervi ad iscrivervi e a venire a trovarci. Il luogo è lo stesso dell'altra volta, l'ora anche... non vi resta che accaparrarvi una seggiola.

http://www.xedotnet.org/subscriptions.aspx

Ah.. dimenticavo: a dispetto di quello che riporta la pagina di iscrizione, visto che abbiamo quasi esaurito i posti l'iscrizione non è più facoltativa. Perciò pensateci ora...

powered by IMHO 1.3

Scusate se dico ovvietà...

Sì, mi pare davvero scontato che quanto sto per dire sia una vera e propria ovvietà. Personalmente, avendo dato il mio voto al centro sinistra, ora ritengo sia del tutto naturale e spontaneo che Romano Prodi conferisca l'incarico di Ministro degli Esteri ad Emma Bonino. Credo di essere nel giusto affermando che in Italia probabilmente non vi è persona più adatta della leader radicale per ricoprire questa carica e restituire al nostro paese la considerazione internazionale che cinque anni di governo Berlusconi hanno distrutto. Ecco perchè ho fatto un piccolo banner che ho già posto nella banda laterale del blog. Invito chiunque la pensi come me a fare la stessa cosa.

powered by IMHO 1.3

ASP.NET 2.0: Postback in a popup

Ormai sono abituato ad evitare a tutti i costi i popup nelle applicazioni web. Tuttavia mi rendo conto che c'è ancora qualcuno che non riesce a farne a meno, a torto o a ragione non mi interessa sapere. Durante la track web dei CommunityDays sono stato molto incuriosito da una domanda che è venuta dal pubblico e che recitava più o meno così: "è possibile effettuare il cross-page postback in un popup impostando il PostBackUrl?". La risposta naturale è no, ma quest'oggi, per puro diletto ho provato a capire se questo è proprio vero. In effetti se ragioniamo bene sul problema è evidente che esiste almeno un modo di effettuare il postback in una nuova finestra del browser, cioè impostando l'attributo "target" della form. Però impostare questo attributo a runtime mediante javascript è fattibile ma espone ad un fastidioso problema. Il mio primo tentativo è stato quello "semplice" di usare l'evento "OnClientClick" come segue:

btnPopup.OnClientClick = "document.forms[0].target = '_blank';";

Impostare l target in questo modo funziona perfettamente, ma lascia la form in uno stato inconsistente che fa si che tutti i controlli presenti effettuino il postback nella nuova finestra dopo che il pulsante è stato azionato per la prima volta. In effetti la cosa migliore sarebbe quella di ripristinare il target originale dopo il postback, ma in questo l'evento OnClientClick non ci può essere di aiuto perchè il runtime quando fa il merge degli script aggiunge il codice per il postback subito dopo quello immesso in questo attributo. La soluzione perciò è solamente quella di estendere il controllo Button per modificarne il rendering:

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.IO;
using System.Text.RegularExpressions;

namespace Elite.Web.UI.WebControls
{
    
/// <summary>
    /// 
Summary description for ButtonEx
    
/// </summary>
    
public class ButtonEx : Button
    {
        
private string postBackTarget;

        
public ButtonEx()
        { }

        
protected override void Render(HtmlTextWriter writer)
        {
            
if (!string.IsNullOrEmpty(this.PostBackUrl) && 
                !
string.IsNullOrEmpty(this.PostBackTarget))
            {
                
using (StringWriter tempWriter = new StringWriter())
                {
                    
using (HtmlTextWriter htmlWriter = new HtmlTextWriter(tempWriter))
                    {
                        
base.Render(htmlWriter);
                        
                        Regex rx = 
new Regex(
                            @"onclick=""javascript:(?<code>[^""]*)""", 
                            RegexOptions.IgnoreCase);

                        writer.Write(
                            rx.Replace(
                                tempWriter.ToString(), 
                                
new MatchEvaluator(Evaluator)));
                    }
                }
            }
            
else
                base
.Render(writer);
        }

        
private string Evaluator(Match match)
        {
            
return string.Format(
                @"onclick=""javascript:document.forms[0].target='{0}';{1};" + 
                 "setTimeout(&quot;document.forms[0].target=''&quot;, 100);""",
                
this.PostBackTarget, 
                match.Groups["code"].Value);
        }

        
public string PostBackTarget
        {
            
get return postBackTarget; }
            
set { postBackTarget = value; }
        }
    }
}

Il codice è in effetti un po' tirato, lo confesso, ma è davvero l'unico modo che sono riuscito a trovare, dopo aver analizzato la classe Button del framework, per iniettare il codice prima e dopo la generazione del postback. in sostanza nel metodo render viene fatto generare il codice del pulsante in una stringa, e tramite una regular expression si effettua la sostituzione all'interno dell'evento onclick. Questo codice viene poi immesso nuovamente nel flusso del rendering. In questo modo impostando la proprietò PostBackTarget del ButtonEx si otterrà il sospirato postback in popup. L'unica curiosità che rimane è il fatto che ho dovuto usare un timeout di 100 millisecondi per reimpostare il target. Infatti semplicemente impostando la proprietà subito dopo WebForm_DoPostBackWithOptions non si ottiene l'effetto desiderato.

powered by IMHO 1.3

 

A proposito di elezioni

un articoletto interessante a proposito della ripartizione dei voti nelle ultime elezioni. Si parla tra l'altro dei fantomatici 45000 voti che Calderoli vorrebbe soffiare al centrosinistra e delle speranze dei Radicali di entrare al senato. Ma la parte più "illuminante" è quella ceh si trova alla fine del brano, dove si parla di come la CDL ha "organizzato" la legge elettorale a proprio vantaggio, chiarendo almeno in parte i motivi del recente "quasi pareggio".

Link: http://www.radicali.it/view.php?id=58461

powered by IMHO 1.3

I numeri di Radicalmente

Per curiosità posto i dati sulle statistiche del mio weblog nella giornata dello scrutino delle elezioni politiche

Day Date Page Loads Unique Visitors
Monday 10th April 2006 1,755 1,345

Mi sa che gli italiani stanno iniziando a fidarsi di più dei weblog che di tv e giornali.

powered by IMHO 1.3

System.Web.Hosting.CommunityDays

Finalmente ho trovato qualche minuto per scrivere le mie riflessioni a proposito della mia recente partecipazione ai CommunityDays del 12 aprile scorso. Il mio primo pensierino, deve giocoforza andare ad Andrea, che ha dimostrato appieno il significato del termine ospitalità, nel mio caso non solo con una sessione splendidamente snocciolata con la chiarezza che lo contraddistingue, ma anche avendo invitato i presenti del nord-est a venire a conoscere XE.NET. Un grazie anche perchè questo mi/ci ha fatto sentire un po' più parte di questi CommunityDays splendidamente riusciti.

Inutile disquisire sulla qualità delle sessioni. In effetti si trattava di argomenti con cui ho a che fare tutti i giorni e - lo dico senza iattanza - grazie al tipo di progetto su cui sto lavorando non posso dire che mi fossero completamente sconosciuti. Tuttavia il sentire disquisire su questi argomenti ha il potere di chiarire i motivi di quello che normalmente a causa della fretta con cui tipicamente si lavora si tende a trascurare. Un po' come se i "mattoncini" che alla rinfusa si sono raccolti giorno per giorno alla fine siano condotti magistralmente al loro posto consentendo una visione d'insieme che illumina la ragione.

Un po' dovrei lamentarmi con il buon Cristian Civera, che muovendosi agilmente nella complessità degli argomenti della sua interessantissima sessione ha fatto tabula rasa di una serie di potenziali post che mi ero riservato di bloggare un po' per volta. Ehm, non sperate di cavarvela comunque, i post non li butto via. Devo dire però che l'efficacia dei suoi esempi è stata davvero disarmante. Nemmeno in un intero anno sarei riuscito a trovarne di così azzeccati. Ah, oltrettutto vorrei dire una cosa che so dovrebbe fare molto piacere a qualcuno che fa il mio mestiere: avete fatto caso alla pulizia del codice di Cristian? E' davvero raro vedere un codice così ben scritto...

Non sto a dilungarmi. Un complimento davvero a tutti per cortesia e bravura e interesse e, e, e... Uno degli obbiettivi che mi ero posto in questa giornata era non solo di imparare qualcosa al punto di vista tecnico, ma anche e soprattutto di osservare e assorbire qualche idea su come si conduce una sessione. Sapete probabilmente tutti che a breve dovrò provarci anche io e vedere Daniele, Andrea e Cristian per me è stato doppiamente utile.

La giornata ha avuto un epilogo inatteso: le chiacchiere con Andrea, Lorenzo, Emanuele, Mr.kino, Riccardo, Daniele e altri della truppa di UgiDotNet (chiedo perdono a chi non ho nominato) - di gran lunga la parte più piacevoledi tutto il workshop - mi hanno portato ad andarmene dall'incontro con un notevole ritardo sulla tabella di marcia che mi ero imposto. Un grazie anche per questo, per avermi accolto così spontaneamente nonostante tutto sommato fossi un perfetto sconosciuto.

Chiudo ringraziando per la splendida organizzazione, ma anche per la pazienza dimostrata Sara, che ho "tampinato" per un bel po' di tempo quando mi sono improvvisamente calato nel mio ruolo di "inviato speciale di XE.NET". Sara è stata davvero gentile e professionale rispondendo instancabilmente alle mie innumerevoli domande.

A presto e... buona Pasqua a tutti!

powered by IMHO 1.3

Questa Italia divisa in "uno"

No, non sono pazzo e non si tratta nemmeno di un refuso. L'aggettivo che in questi giorni si accompagna più spesso al sostantivo Italia è divisa, per la precisione in due parti uguali. Tutte le polemiche vertono su questo punto. Tuttavia consentitemi di segnalare che a mio parere l'Italia non è mai stata così unita. La divisione in uno cui mi riferisco nel titolo è appunto il sentimento di noia/indecisione/inedia che la politica di questo sfortunato Paese ha regalato a tutti i cittadini indistintamente.

A parte forse (ma forse...) coloro che come me sono fortemente polarizzati e hanno votato per le persone in cui credono, semplicemente perchè le seguono e credono fortemente i esse, tutti gli altri - e converrete con me, sono la stragrande maggioranza - hanno votato in preda ad una netta sensazione di dubbio che si può esprimere con le seguenti parole: "voto questo partito perchè lo ritengo il meno-peggio, ma tanto... non cambia nulla".

A dirla tutta, io stesso pur votando per la Rosa nel Pugno con tutta la convinzione che mi lega a tale forza politica sono andato al seggio in compagnia di quella sensazione che mi ha fatto spesso chiedere se a dare indirettamente il mio voto a Prodi non stessi facendo qualcosa di sbagliato. Ma per inciso intendiamoci, la medesima sensazione l'avrei avuta se fossi andato con la convinzione di dare un voto indiretto a Berlusconi.

C'è poco da fare. La divisione più netta che si può rilevare nel paese oggi, non è quella tra il 49,9 dei votanti di destra e il 50,1 di quelli di sinistra, ma il canyon scavato per lustri dall'Acheronte della sete di potere tra noi cittadini-sudditi e i nostri governanti assetati-di-potere.

powered by IMHO 1.3

E dopo più di un anno... Community Days!!!

Sono lieto di comunicarvi che domani sarò anche io ai community Days. E' probabile che mi vediate in giro, ma dubito che molti di voi si ricordino di me. Sarò alla track web, probabilmente tra le prime file, se non arrivo troppo in ritardo. Eppoi come voi ronzerò un po' in giro, a mietere qualche buona chiacchierata con gli amici che non vedo da tempo. Se mi cercate chiedete un po' in giro, e di certo troverete qualcuno che vi indicherà la persona che state cercando.

Ah, non ho una foto, ma se mi avete visto un po' di tempo fa tenete a mente che nel frattempo ho perso 15kg...

powered by IMHO 1.3

ELEZIONI 2006: Il trionfo dello sfascio

Che Berlusconi non avesse i numeri per vincere queste elezioni lo si sapeva da tempo, tant'è che in modo apparentemente inspiegabile all'improvviso la maggioranza aveva deciso di cambiare la legge elettorale riportandola da maggioritaria a proporzionale, contro l'opinione della maggioranza dei cittadini.

Oggi finalmente siamo arrivati a capire il motivo reale di quel colpo di mano che alcuni mesi fa aveva mobilitato anche la sinistra, che probabilmente aveva subodorato il vero motivo, ma come sempre non era riuscita minimamante a contrastarla. Il risultato di questa legge è stato ne più ne meno che lo sfascio totale delle istituzioni. In un paese in cui i cittadini sono decisamente disaffezionati alla democrazia e disgustati da politica e istituzioni, un risultato di parità come quello cui stiamo assistendo non può che suscitare i dubbi e le recriminazioni degli uni e degli altri.

Senza contare poi che tale risultato causerà sostanzialmente un ingovernabilità disastrosa. In un paese la cui economia è di fatto distrutta dalle politiche clientelari della ex maggioranza e dai 60 anni precedenti, quello che ci sarebbe voluto è un governo forte che potesse guidare l'uscita da questa situazione esplosiva. Invece, quello che avremo sarà un periodo di estinzione del labile alito di democrazia residua e di continui litigi e baruffe, che potranno avere l'unico effetto di portarci oltre l'orlo del baratro della argentinizzazione.

E' triste dover constatare questa situazione. Quello che ci aspetta non è per nulla roseo e privo di dolore e difficoltà. Temo che non passerà molto tempo prima di sentirne le conseguenze.

powered by IMHO 1.3