Technology Experience
.NET World

Gestire il doppio-click Con Silverlight 4 e MVVM

Grazie al buon Ale forse ho raggiunto una soluzione intelligente e che mi piace. Lo scopo era quello di gestire il doppio-click all’interno di un’applicazione Silverlight 4 senza troppi fronzoli, e potendo sfruttare il tutto in un’ottica Model-View-ViewModel, quindi senza alcun codice nel code-behind delle Page.

Il tutto parte da questo post, segnalatomi questa mattina da Alessandro, appunto. 🙂

Il codice del post implementa un DoubleClickTrigger, da inserire poi come child di un qualsiasi componente grafico della nostra pagina, come StackPanel, TextBlock e così via. Voglio solo riproporre qui solo una parte del codice di quell’articolo, ovvero il gestore dell’evento OnMouseButtonDown:

private void OnMouseButtonDown(object sender, MouseButtonEventArgs e)
{
    if (!timer.IsEnabled)
    {
        timer.Start();
        return;
    }
 
    timer.Stop();
 
    // Qui si scatena il doppio-click, eseguo quello che devo eseguire
}

E’ piuttosto semplice: al primo MouseDown parte un piccolo Timer da 200ms. Se l’utente clicca nuovamente entro questo tempo, significa che è avvenuto un DoubleClick, e quindi raggiungiamo la riga di codice che qui sopra vedete commentata. Se mettessimo una MessageBox.Show(“”);, a tutti gli effetti sul doppio-click appare il vostro messaggio.

In un’ottica M-V-VM, però, sappiamo benissimo che tutto ciò che deve essere eseguito deve essere contenuto nella nostra classe ViewModel. La soluzione in questo caso è usare una attached-property, che permette di attaccare ad un componente grafico una qualsiasi istanza di ICommand, anche dove solitamente non sarebbe possibile. Ed ecco quindi poche righe di codice che lo rendono possibile:

public static class ControlsCommandHelper
{
    public static DependencyProperty CommandProperty = DependencyProperty.RegisterAttached("Command",
        typeof(ICommand),
        typeof(ControlsCommandHelper),
        new PropertyMetadata(null));
 
    public static void SetCommand(DependencyObject target, ICommand value)
    {
        target.SetValue(ControlsCommandHelper.CommandProperty, value);
    }
 
    public static ICommand GetCommand(DependencyObject target)
    {
        return (ICommand)target.GetValue(CommandProperty);
    }
}

 

A questo punto l’event handler sopra diventa:

private void OnMouseButtonDown(object sender, MouseButtonEventArgs e)
{
    if (!timer.IsEnabled)
    {
        timer.Start();
        return;
    }
 
    timer.Stop();
 
    UIElement element = sender as UIElement;
 
    if (element != null)
    {
        ICommand command = element.GetValue(ControlsCommandHelper.CommandProperty) as ICommand;
 
        if (command != null)
        {
            command.Execute(null);
        }
    }
}

 

Morale: quando avviene un DoubleClick, prendo lo UIElement che ha scatenato l’evento, recupero la sua attached property Command e – se tutto va a buon fine – semplicemente eseguo il comando. In questo caso passo null all’Execute(), altrimenti dovrei gestire anche il CommandParameter.

Quindi, niente code-behind. Il tutto può essere inserito, come dicevo all’inizio, anche all’interno di un DataTemplate di una ListBox, quindi questa tecnica può essere benissimo utilizzata per reagire al doppio-click, lavorando sul SelectedItem della ListBox stessa.

screenshots

Rimane solo il problema dei 200ms, che non mi piacciono perchè dovrebbe essere l’OS che si prende cura di dirmi quando è avvenuto un doppio-click. Anche perchè un utente può andare nel pannello di controllo e allungare/diminuire il tempo considerato per il doppio-click, e così facendo lo ignoro e basta.

Ecco comunque un piccolo codice sorgente che può essere utile.

Send to Kindle
.NET World

Silverlight 4 alla ricerca del doppio-click perduto

E’ da qualche giorno che ho in testa questo post, e lo sto scrivendo nella mia testa, ponderando bene le parole ed i termini da utilizzare. Probabilmente martedì mattina è stata la mia peggior giornata lavorativa da un bel pezzo a questa parte, e vi posso assicurare che ce ne vuole.

Ritengo la mancanza del doppio-click in Silverlight 4 una vera e propria cazzata.

Gli esperti non me ne vogliano, ma dire che SL4 è un framework pensato per il Web e quindi il doppio-click è male, è semplicemente assurdo, vuol dire negare la realtà e vuol dire adeguarsi passivamente a ciò che ci è stato imposto, senza pensare con un po’ di creatività e senza un minimo stimolo a migliorare le cose per il futuro.

Silverlight 4 non è un framework pensato per il Web: SL4 è un framework per la realizzazione di applicazioni distribuite sul Web. Ne usufruite per la maggior parte all’interno del vostro browser, ma girano sul vostro PC e dal punto di vista tecnico sono più vicine ad un’applicazione desktop che ad altro. SL4 è anche il framework che usiamo/useremo in futuro per scrivere applicazioni su Windows Phone 7, e non è affatto detto che siano Web. Con SL4 posso scrivere videogiochi, software per la contabilità personale, per ricordarmi le medicine da prendere, per prendere appunti: applicazioni di qualsiasi tipo. E un’applicazione degna di questo nome deve poter permettere all’utente di interagire con il doppio-click. Punto.

Windows consente l’utilizzo del doppio-click: perchè una mia applicazione SL4 out of browser non dovrebbe permetterlo?

E poi, lasciate che vi dica una cosa: dire che sul Web non si dovrebbe usare il doppio-click a me sembra una regola di usability, e non una questione tecnica o simili. Una regola di usability non dovrebbe essere cablata nel framework che sto utilizzando. Altrimenti di questo passo non dovrebbe permettere di scrivere del testo verde su background verde. Non dovrebbe permettere di inserire più di 5000 elementi in una ListBox. Insomma, certe cose sono e devono essere a carico del developer, e non stupide limitazioni inserite nello strumento tecnologico che si sta utilizzando per il proprio lavoro. Un framework dovrebbe permettere ad un dev di raggiungere il suo scopo, nel bene e nel male: se la mia app è scritta bene e funziona bene, ne venderò 1.000.000 di copie, altrimenti nessuna. E sinceramente decidere di voler usare il doppio-click non mi sembra così male.

Seguendo questo ragionamento, non avrebbero dovuto inserire nemmeno l’evento MouseWheel: avete mai visto un sito Web che gestisce la rotellina del mouse? Se lo avete visto, non era un sito Web: era un’applicazione. Tutti i sw gestiscono la rotellina, per zoomare avanti e indietro. In giochi come Call Of Duty posso cambiare arma, con la rotellina. Posso scrivere app in SL4 che con la rotellina scorrono gli elementi di una ListBox, e poi su quest’ultima non posso gestire un banale e semplice doppio-click?

Lasciate che vi dica un’altra cosa: negli ultimi decenni (2 o 3, non esageriamo) è il modello di programmazione Web che pian piano si è concettualmente spostato verso il modello di programmazione Desktop. Probabilmente sono la persona meno indicata per dirvelo, ma dal punto di vista utente ho visto comparire sul Web modalità di interazione tipiche del desktop: finestre di dialogo modali, drag’n’drop, etc. etc. Anche per noi sviluppatori la cosa è fin troppo evidente: cosa sono le Web Forms se non la trasposizione sul Web delle Windows Forms? Anche nel loro comportamento, intendo dire, copiano in tutto e per tutto una tipica applicazione desktop. E’ giusto che sia così, perchè i due mondi si sono e si stanno avvicinando sempre di più, a volte toccandosi nel caso di Silverlight che – lo ripeto – è a tutti gli effetti un sw locale, che gira sul vostro PC e sfrutta le risorse locali del vostro PC.

Altra questione: ma Silverlight non doveva sin dalla prima release essere allineato al 100% con la sua controparte WPF? Ora, mi rendo conto che non è dal tutto possibile, perchè sono stupido ma non fino a questo punto. Però un conto sono limitazioni tecniche oggettive, un conto è aver stabilito a tavolino che un developer Silverlight non può gestire mai, in nessun caso, un semplice doppio-click. La cosa secondo me divertente è che in WPF posso farlo su qualsiasi controllo, anche dove dal punto di vista della usability sarebbe assurdo: perchè? Perchè è compito del developer fare ciò che è più giusto: nessuno si sognerebbe mai di fare doppio-click su un Button, semplicemente perchè con un Button non si interagisce così. E così via, gli esempi si sprecano.

E poi, teniamo presente che in WPF/Silverlight possono customizzare l’aspetto di ogni controllo. Posso far apparire un Button come una ListBox e viceversa. Posso customizzare ogni cosa. Microsoft mi dà una potenza ed una libertà mai avuta prima, e poi non mi permette per definizione la gestione del doppio-click. Cavolo, ce l’avevo in Visual Basic 4.0 quasi 20 anni fa!!

E non venitemi a dire che – sì, certo – puoi comunque gestirlo: basta contare il tempo in ms tra un click e l’altro. Stiamo scherzando? Con tre click posso creare un’applicazione con i RIA Services, e poi devo passare un giorno intero a gestire due eventi MouseDown contando il tempo per vedere quando e come si scatena un doppio-click. Avendo cura, sia chiaro, di confrontarlo con il tempo impostato nel sistema operativo, altrimenti…

E’ apparsa ieri una scritta in una slide nel’evento GroundZero di DotNetLombardia: “Let brighest developers builds business application”. Sul fatto che io sia un brightest developer è tutto da vedere, ma il focus è che noi developer di applicazioni finali dobbiamo preoccuparci di costruire le applicazioni per far guadagnare le nostre aziende, e non litigare per l’ennesima volta per trovare un workaround ad una evidenza mancanza dello strumento di sviluppo che si sta utilizzando.

La mia paura, tra l’altro, non è tanto ‘sto bendetto doppio-click (che è solo la goccia che ha fatto traboccare il vaso), ma è l’idea che qualcuno là a Redmond, o dove diavolo sta il palazzo dove si sviluppa il .NET Framework, decida a tavolino di togliere questo o quello in base a strane regole che fino al giorno prima non c’erano. Regole di usability, regole dettate dalla moda del momento, senza alcuna certezza che varranno così anche nel futuro.

Insomma, se qualcuno di voi ha voglia di tradurre in inglese questo mio post, lasci pure trasparire un po’ di rabbia e di frustrazione, perchè è esattamente quella che ho provato martedì mattina, e continuerò a provarla ancora per un po’.

Sapete qual’è l’ultima cosa davvero divertente? Non vedo l’ora di leggere le features di SL5, perchè non posso davvero credere che non venga presa in considerazione questa cosa.

Un Igor molto, molto deluso, e che ora può tornare a dormire un pochino.

Send to Kindle
Community

Evento GroundZero: completed!

Sono davvero molto stanco, perchè non mi capitava da mesi di rimanere imbottigliato nel traffico milanese – motivo per cui sono arrivato alle 9:20 all’evento, pur partendo alle 7:40 da casa (ed il mio TomTom mi pronosticava l’arrivo alle 8:25). Complimenti al traffico milanese e ai lavori dell’ATM in Via Porpora. Ma torniamo a noi!

Oggi ho partecipato all’evento Ground Zero della neonata community DotNetLombardia. Come avevo anticipato ed intuito ieri sera, non conoscevo quasi nessuno, al contrario di quanto accade invece in workshop come quelli UGIdotNET oppure negli altri delle varie community locali.

Non sto qui a fare un riassunto di questa sessione o di quell’altra. Voglio però fare i complimenti a Matteo Pagani per la sua sessione su Windows Phone 7. E’ un tipo brillante, molto bravo, e si vede/sente lontano 10 miglia che c’è passione in quello che dice e fa. Miglior sessione del giorno, per me.

Complimenti anche a Ugo, perchè per farmi piacere qualcosa che StartsWith(“ASP.NET”), ce ne vuole. E lui ci è riuscito!

E complimenti anche a tutti gli altri: la mia memoria – o forse la stanchezza – non mi permettono di ricordare i loro nomi. In primis la sessione su Sharepoint 2010.

Complimenti in generale poi a tutta DotNetLombardia per l’organizzazione, perchè posso immaginare che ci sia dietro un bello “sbattimento”, un po’ lo stesso che devono affrontare le altre community in contesti simili. Però per essere il primo evento, direi che non c’è male!

Purtroppo – e questo è davvero un peccato – non ho potuto partecipare alla cena. Sarà per la prossima volta!

Send to Kindle
Community

Domani all’evento GroundZero di DotNetLombardia

Con le community .NET che spuntano ormai come funghi un po’ ovunque, è sempre più facile trovare eventi e workshop nelle vicinanze. Domani è il turno dell’evento Ground Zero di DotNetLombardia.

Brain-Sys mi permette di partecipare per l’intera giornata, e quindi ci sarò. Sarà un evento per certi versi strano, perchè gli speakers non saranno i soliti amici a cui ormai sono abituato :-), ma saranno volti nuovi. Meglio così, sarà l’occasione per fare nuovi incontri ed amicizie.

La scaletta del workshop mi interessa per la keynote sul cloud computing, per Windows Phone 7 e soprattutto per la sessione intitolata RIA Services in a real Silverlight business application, tecnologie su cui sono praticamente impegnato quotidianamente. Vediamo se salta fuori qualcosa di interessante. Dal canto mio allo speaker di questa sessione una piccola richiesta l’ho già fatto, vediamo cosa salta fuori di buono.

Insomma, ragazzi, domani ci si vede là!!!

Send to Kindle
.NET World

Ripristinare i templates di Visual Studio 2010

Da qualche settimana dalla mia installazione di Visual Studio 2010 erano spariti un po’ di templates dalle finestre di dialogo New Project e Add New Item. Non so bene quali di preciso, ma ve ne dico due che di sicuro mi mancavano: il progetto Silverlight Application e l’oggetto Class.

Davvero scomodo. 🙂 La mancanza di Class tra l’altro mi costringeva ad aggiungere al progetto un semplice Code File, per scrivere a mano ogni volta namespace + public partial class, etc. etc.

Stamattina mi sono deciso a risolvere la questione, trovando questo post che risolve il problema. Il post si riferisce a Visual Studio 2008, ma si adatta anche a Visual Studio 2010.

E’ sufficiente eseguire il comando devenv /InstallVSTemplates, ovviamente dalla directory dove avete installato l’IDE di Visual Studio. Il tutto in modalità Administrator.

Adesso finalmente tutto è tornato alla normalità!

Send to Kindle
Community

Evento “Applicazioni SOA con Silverlight” di venerdì

Durante la mattinata di venerdì scorso mi sono connesso allo streaming pubblicizzato nei giorni precedenti dallo staff di DotNetMarche per seguire il workshop “Applicazioni SOA con Silverlight: dal design al deploy”. Prima di continuare, voglio fare i sinceri complimenti per questa iniziativa, perchè permette davvero a tutti di esserci in qualche modo, e di essere al corrente di tutte le tecnologie allo stato dell’arte anche se ci si trova lontani.

La qualità del video e dell’audio erano davvero eccezionali. Complimenti a chi “ciclava” le inquadrature, permettendo di fare le slides, la sala e gli speakers. Davvero ben fatto. Oddio, ogni tanto qualche rumore molesto arrivava (interferenza da cellulare, qualche “bum” nelle casse, etc.), ma il tutto ovviamente è assolutamente ben accettabile, ci mancherebbe! Mi rendo conto che non tutte le community non possono permettersi questo tipo di attrezzatura, ma quella di DotNetMarche è stata davvero un’ottima cosa.

Seguire un evento in streaming ha però anche dei difetti – almeno, io li ho vissuti come tale. Non esserci fisicamente, ma essere al lavoro, o a casa propria, comporta il non potersi dedicare al 100% al workshop. Direi ovviamente. Questo – almeno dal canto mio – ha fatto sembrare più complesse del solito le sessioni, soprattutto l’ultima di Gian Maria Ricci sul LabManagement. Però – ripeto – dico questo viziato dal fatto che per me era una giornata lavorativa: ho dovuto rispondere a telefonate, ho dovuto programmare, sistemare questo o quello. Per dirla tutti, mi sono accorto di aver perso minuti interi anche della intro della sessione di Mauro, sempre per gli stessi motivi: stavo programmando, e quindi l’attenzione era più rivolta al mio lavoro che a chi stava parlando!

Insomma, colpa mia!

A parte queste considerazioni da prendere con le pinze quindi, mi sono proprio davvero divertito. Ho tenuto Media Player aperto tutto il giorno, e sembrava di essere lì con voi!

Stasera mi stavo chiedendo se quello streaming fosse visibile anche attraverso Windows Media Center. Perchè? Perchè Media Center fa la cache del video, quindi potete metterlo in pausa, tornare indietro, balzare in avanti, etc: quindi, chessò, se sto seguendo un workshop e mi arriva una telefonata, potrei mettere in pausa e riprendere solo a telefonata conclusa. Mi chiedo se sia fattibile…

Send to Kindle
.NET World

Windows Azure è sempre più presente

A questo link è possibile scaricare i tool per sviluppare su Windows Azure con Visual Studio.

A quest’altro link invece è possibile scaricare un libro di 96 pagina sulla tecnologia Windows Azure (attenzione che il link che ho messo punta direttamente al file pdf, per cui – o aspettate un po’ nel browser – o cliccate col destro e fate un bel “Salva con nome”).

Pian piano Windows Azure sta guadagnando popolarità ed attenzione verso il mondo dei developer.

Chi vivrà, vedrà.

Send to Kindle
My daily work

La differenza tra dato che serve, ed uno stupido storage

Qualche anno fa un certo non-mi-ricordo-chi disse:”Cavolo, chi nascerà fra 2.000 anni sarà molto sfortunato di noi”. Perchè, gli chiesi. Risposta:”Perchè a scuola avrà 2.000 anni di storia in più da studiare!”.

E’ una semplice battuta, però fa pensare, ed io ho girato questo ragionamento sui dati e tutte le informazioni che girano negli hard-disk che abbiamo dentro i nostri PC. E’ inevitabile che con il passare dei mesi e degli anni la quantità di informazioni cresca gradualmente, è una semplice legge della natura.

  • Scaricate illegalmente o comprate musica su iTunes?
  • Scrivete documenti Word, producete slides in Powerpoint?
  • Scattate fotografie? Se sì, quanti gigabytes all’anno?
  • Fate slideshow video delle vostre fotografie, producendo video o altro materiale multimediale?
  • Siete developer, scrivete software, gestite database con SQL Server?
  • Quante mail ricevete ogni giorno in Microsoft Outlook?

Insomma, tutte le informazioni elencate nei punti precedenti devono essere memorizzate da qualche parte, magari addirittura backuppate. E qui casca l’asino. Secondo me, al giorno d’oggi è fondamentale capire quali informazioni avete davvero bisogno tutti i giorni pronte all’uso, e quali invece potete permettervi di masterizzare definitivamente, o di copiare su un hard-disk, per farlo diventare storage, da mettere in un cassetto perchè “non si sa mai”.

Tutto questo nasce dalla frase che ho messo in Facebook l’altro giorno, che più o meno diceva:”Un hard-disk da 160Gb di dati è più che sufficiente per qualsiasi esigenza”. Queste frase evidenzia tre punti:

  1. è una frase ovviamente provocatoria
  2. sono il solito stupidello 😉
  3. ne sono abbastanza convinto, con le dovute cautele

Sia chiaro: nella mia vita ho prodotto ben più di 160Gb di dati di ogni tipo (compresi post sui blog :-), però ad un certo punto qualcosa è diventato vecchio, antiquato, in disuso, e quindi l’ho semplicemente cancellato e probabilmente dimenticato. Ho una scatola di scarpe contenente CD/DVD pieni di backup dal 1999 ad oggi, ma che non uso nè guardo praticamente mai. Altrimenti, checcacchio, dovrei avere un disco da 4TBytes per tenermi tutto pronto.

Insomma, quello che volevo dire con quella frase su Facebook è che i dati effettivi che vi servono nel lavoro quotidiano probabilmente sono davvero pochi. Chiaro, se poi lavorate all’anagrafe, o con macchine virtuali, o avete esigenze particolari, allora le cose cambiano. Però – ripeto – penso che nella stragrande maggioranza dei casi sia (e debba essere) così.

Un amico su Facebook (un certo Diego Guidi), commentando quella frase, mi ha detto:”Un film rippato in FullHD occupa 15GBytes”. Ok, ma per me un film non è dato: è semplicemente un file da mettere in storage, tra l’altro ottenuto da un supporto DVD che comunque devo avere. E, ripeto, se avessi quantitativo industriali di mp3/avi/altro, li metterei su un NAS in RAID (cosa che effettivamente faccio, soprattutto con le foto), eviterei di farci backup ogni mese, di averli sul mio notebook, eccetera eccetera.

Credo che ciascuno di noi possa e debba farci un pensierino su questa cosa, perchè se vi tenete sul vostro HD materiali vecchio/obsoleto, è lì solo per occupare spazio, è lì solo per farvi allungare i tempi di backup, etc. etc. Eliminateli, backuppateli una volta per tutte, dimenticateli, lasciate spazio a bytes puliti e nuovi.

Send to Kindle
Community

Grazie ai partecipanti alla cena Fungo .NET 2.0!!!

Venerdì sera ho partecipato, insieme a tanti altri, alla cena Fungo .NET 2.0, organizzata in quel di Reggio Emilia. E’ stata una bella serata, ovviamente, per merito di un sacco di fattori: la compagnia di tutti i presenti – da Mauro Servienti (con me in macchina da Lodi e ritorno) a Alessandro Scardova, da Matteo Migliore esagitato come suo solito 😉 a Salvatore Di Fazio. Compreso Gian Luigi Franceschi, chiaramente, che non posso linkare perchè sprovvisto di blog! 🙂 Unendo infine tutti quelli che ho avuto il piacere di conoscere.

Proprio Gian Luigi, tramite Facebook, mi ha ufficialmente nominato fotografo della serata, senza sapere cosa si nascondesse in realtà dietro questa (piccola e leggera) definizione. Proprio in qualità di fotografo, quindi, vi lascio qualche immagine della serata.

IMG_6800
Cartellone di benvenuto fuori dal ristorante

IMG_6810
La nostra tavolata


Salvo che “spazzola” il piatto di non-mi-ricordo-cosa (aiutato anche da me, ovviamente)

E poi, dulcis in fundo, la serata è stata rallegrata dalla sensuale danza del ventre di due ragazze, ovviamente invitate dagli organizzatori della serata.


Le due ragazze al nostro tavolo: e chi si è messo vicino a loro a fare il marpione? 😛

L’intero album fotografico (66 fotografie) è visibile a questo indirizzo.

Grazie ragazzi, alla prossima!

Send to Kindle
VivendoByte.ByteAdventure

WOPR_II

La prima volta che accadde era il 7 luglio 2016. Quel giorno formazioni nuvolose ricoprirono il 90% della pianura padana, da Torino, passando per Milano, fino a raggiungere Vicenza. Le nubi erano così fitte ed intense che anche in pieno giorno la luce del sole non filtrava, costringendo i milioni di abitanti a vivere al buio. Solo Milano sembrava immune da tutto questo: nell’hinterland tutto era buio pesto, mentre da Porta Romana fino al centro brillava un sole intenso e caldo.

Il fenomeno meteorologico continuò per diverse settimane. Ovviamente scienziati da tutte le parti d’Europa cominciarono a studiare il caso: non erano nuvole temporalesche. Era “semplice” inquinamento. Gli idrocarbuti ed i gas serra prodotti all’interno di Milano venivano trascinati via dai venti, e si fermavano sulla parte rimanente della pianura padana. Morale: gli abitanti cittadini vivevano sani ma in una città sempre più calda ed afosa; nelle campagne e nelle città più piccole le persone vivevano 24 ore al giorno al buio, respirando polveri sottili, e con una prospettiva di vita non prooprio allettante.

Una di queste persone era Darius, ingenere elettronico e scienziato di 41 anni. Era domenica pomeriggio, e stava tranquilllamente schiacciando un pisolito pomeridiano, quando il suo cellulare squillò. Rispose senza guardare il chiamante, che era il suo capo e che gli chiedeva di raggiungerlo in ufficio per una importante questione. Darius era abituato a lavorare senza orari fissi, quindi non ci pensò due volte: si mise alla guida della sua auto solare, e raggiunse il piacentino, dove c’era la sede della grossa software-house dove lavorava.

30 minuti dopo, era seduto nell’ufficio di Gabriele, il suo capo.

Darius, ricordi il WOPR?” – gli chiese. Era un uomo dieci anni più vecchio di lui, un analista attento e lo scrittore di algoritmi matematici d’avanguardia, che avevano permesso alla loro società di implementare un motore di ricerca 7 volte più veloce e preciso di Google. La loro società aveva comprato Google, e adesso era quotata fra le 5 software-house più potenti ed influenti del pianeta.
Darius riflettà un momento, ma quell’acronimo non gli faceva venire in mente nulla.
Sentendo il silenzio, Gabriele gli fornì la spiegazione.
WOPR sta per War Operational Plan Response. E’ un sistema informatico capace di calcolare e prevedere gli esiti di una guerra su scala globale: vittime, bersagli designati, nazioni sconfitte e vincenti, zone d’attacco, date e battaglie rilevanti, etc. etc.
Darius era poco più di vent’anni che lavorava nell’informatica, e non aveva mai sentito parlare di WOPR.
E perchè non ne so nulla?” – chiese alla fine.
Perchè è in un film.” – rispose asciutto Gabriele, quasi sorridendo – “Perchè non esisteva.

A Darius sfuggì un sorriso, ma poi notò l’uso del passato: non esisteva. Perchè – si disse – adesso esiste?

Gabriele nel frattempo si girò verso il notebook che teneva lì in ufficio, si loggò. Poi, trascinando un’icona sullo schermo direttamente con le mani, avviò un programma, che si aprì immediatamente a pieno schermo. Darius riconobbe l’interfaccia in Silverlight 7, ma un’avvio così rapido poteva significare solo un’implementazione a plug-in, scaricati ed attivati solo su richiesta dell’utente. Alla fine girò lo schermo verso Darius per mostrargli il contenuto.

Ho creato il mio WOPR, che ho chiamato WOPR_II, usando i soldi che abbiamo intascato il mese scorso con la commessa della Corea del Sud.
Più di 7 milioni di euro?? Per un progetto militare??” – esclamò Darius.
Gabriele sembrò ignorare la cosa. Anzi, rincalzò la dose spiegando esattamente di cosa si trattava.
WOPR_II non solo fa le stesse cose che faceva l’ipotetico WOPR del film, ma grazie al cloud computing e a nuovi algoritmi che ho scritto, fa molto, molto di più. Si interfaccia con i vari sistemi di social networking per scoprire i nomi esatti delle vittime, per sapere esattamente quali città verranno colpite per prime.
Darius ascoltava quasi scioccato. Effettivamente, la gente sempre più spesso usava Facebook, Twitter e Flickr per scrivere ai loro conoscenti dove si trovavano durante il weekend, o quando rimanevano bloccati nel traffico. Se avessero potuto entrare nel database di Facebook, probabilmente sarebbe bastato scrivere una query (magari complessa, ma pur sempre una query) per sapere dove si trovassero i rappresentanti militari di una certa nazione. E quindi cosa conviene colpire oppure no.
Negli ultimi mesi ho analizzato che il 94% delle persone che lavorano al Pentagono degli USA risultano iscritti su Facebook o Twitter. Di questi, il 72% lo aggiorna i giorni, scrivendo e condividendo posti & luoghi dove vanno. In questo momento, possono sapere con precisione dove si trovano generali dell’esercito USA, ed ammiragli della Marina. Hai idea di cosa significhi, questo?
Darius un’idea ce l’aveva eccome, ma aveva quasi paura a dirla ad alta voce.
Significa che abbiamo creato un mostro, un’arma bellica per la quale qualcuno persino uccidere.” – rispose.
Esatto.

Darius era davvero preoccupato. Se Gabriele gli stava dicendo la verità, la loro società era probabilmente coinvolta nella più grande violazione di privacy che la storia umana potesse ricordare. Da ragazzino, quando muoveva i primi passi nel campo della programmazione, aveva già intuito che la 3° guerra mondiale si sarebbe combattuta anche e soprattutto per via informatica. Mai avrebbe pensato però sarebbe stato lui uno dei fautori di questa cosa.

Guardò fuori dalla finestra. Erano le 17:10 di una domenica di estate, ma fuori c’era solo oscurità. Si intravedevano lontane la case di Castelsangiovanni, un centro abitato lì a pochi chilometri. Pensava a quello che Gabriele aveva realizzato, e giunse ad una sola conclusione. WOPR_II era sicuramente un’opera di un genio, ma andava distrutta.

Dobbiamo cancellare tutto, Gabriele. WOPR_II è troppo pericoloso per noi, e per il mondo intero. Chi te l’ha commissionato?
Tu lo sai perchè nella 2° Guerra Mondiale la Germania non riuscì mai ad occupare l’Inghilterra?” – chiese Gabriele al suo socio, evitando la sua domanda.
No, ma non me ne importa…hai sentito cosa ti ho detto? Dobbiamo…”.
Gli inglesi riuscirono ad inventare una prima rudimentale forma di radar, grazie al quale potevano intercettare la flotta tedesca prima che essa giungesse in Inghilterra. In questo modo, nonostante la schiacciante superiorità numerica dell’Asse, l’aviazione inglese – la RAF- alla fine ebbe la meglio. Si chiama Battaglia d’Inghilterra.
Gabriele, mi stai spazientendo, non capisco perchè mi stai raccontando queste cose. Sei impazzito? Ascoltami, andiamo di là, ci beviamo un caffè con calma e decidiamo insieme cosa fare di WOPR_II, ok?” – a Darius sembrava che Gabriele stesse quasi delirando. Parlava senza guardarlo in faccia, il che non era da lui. Sembrava che fosse da un’altra parte, o che stesse parlando al telefono con qualcuno.
Ho applicato gli algoritmi di WOPR_II alla Battaglia d’Inghilterra, e ho scoperto che, ovviamente, senza l’invenzione del radar la Germania conquistò l’Inghilterra senza troppi sforzi. Solo io so però che la 2° Guerra Mondiale sarebbe finita comunque nei primi mesi del 1941: nel suo primo viaggio verso la Londra occupata, l’aereo su cui viaggiava Hitler sarebbe incappato in un violentissimo temporale e precipitò nella Manica. La Germania senza il suo leader abbandonò ogni intenzione bellica. Ma non è questo il punto. Il punto è che WOPR_II è in grado di determinare con precisione quali sono gli avvenimenti, anche banali, che possono far oscillare le sorti di una guerra.

Darius roteò gli occhi. Davvero non ne poteva più. Aveva ascoltato le parole del suo capo senza troppa attenzione. Se lo avesse fatto, probabilmente avrebbe avuto una reazione diversa. Invece, camminò deciso verso Gabriele, con l’intenzione di afferrarlo per un braccio per trascinarlo via dal suo PC, dal suo ufficio, e da quel maledetto WOPR_II che aveva creato

Adesso mi segui e ce ne andiamo a parlare davanti ad una birra! Piantala di farneticare!!!!” – Darius si stava arrabbiando. Nel momento stesso in cui cercò di prendere il braccio di Gabriele, questi si divincolò in una frazione di secondo. Gabriele si allontanò e – per la prima volta da parecchi minuti – lo guardò in faccia.
Si levò gli occhiali da vista, e si passò una mano sulla fronte, come per lavarsi via la tensione e la paura.
Tu non capisci. WOPR_II ha previsto tutto, ha previsto anche questo tuo atteggiamento!
Darius si bloccò di colpo.
Ho applicato gli algoritmi a questi giorni. Non siamo in guerra, è vero, ma adattando opportunamente i parametri delle stored procedure sono riuscito a ricondurre l’output. WOPR_II ha previsto la sua creazione, ha previsto la 3° Guerra Mondiale ed ha capito che giocherà un ruolo fondamentale. Ha previsto persino che qualcuno cercherà di distruggerlo, e quel qualcuno sei tu!

Oh mio Dio, pensò Darius tre sè e sè.

Come ti stavo dicendo prima, WOPR_II è capace di determinare con assoluta precisione ciò che può cambiare l’esito di una guerra. Se ti lasciassi fare, Darius, se cancellassimo WOPR_II in questo stesso momento, io e te moriremmo. Non posso permetterlo, te ne rendi conto?
Stai parlando del futuro come se fosse già accaduto, Gabriele.
Per certi versi è così, credimi.” – rispose tranquillo.
Stai sbagliando. Come sai di aver calibrato correttamente gli algoritmi? Come puoi essere sicuro che il genio dell’uomo non devii il corso della storia? L’hai detto tu stesso: gli inglesi hanno inventato il radar e la storia è cambiata. Come può WOPR_II aver previsto davvero tutto? Il futuro è il futuro perchè deve ancora avvenire, perchè dipende da noi e può essere cambiato e variato in ogni momento. Siamo noi che decidiamo, e non un computer. Siamo scienziati, perdio, usiamo il cervello.

Ma Gabriele, ancora una volta, sembrò non ascoltarlo.
”Non posso permetterlo. WOPR_II ha ragione.”
Da una tasca dei jeans Gabriele estrasse un taser da 250kV e lo puntò contro il suo socio.
Poi premette il grilletto.

Send to Kindle