Marco Russo

.NET, Business Intelligence e dintorni

News

Windows Developer Conference 2012

Torino Technologies Grou

Corsi

Libri

Miei blog in inglese

Archives

August 2007 - Posts

Atomicità in C#

Da qualche giorno sono disponibili le specifiche complete di C# 3.0 con un testo unificato di 500 pagine che non è più una somma di funzioni da una versione all'altra. Rileggendo parte di cose già note, mi sono imbattuto in questa frase.

[...] Reads and writes of other types, including long, ulong, double, and decimal, as well as user-defined types, are not guaranteed to be atomic. [...] there is no guarantee of atomic read-modify-write, such as in the case of increment or decrement.

Questo implica la necessità di "proteggere" l'accesso a dati condivisi in ambito multithread anche su operazioni "semplici" su questi tipi di dati. Mentre su double e decimal ci si potrebbe scommettere, su long e ulong magari ci si trova un po' spiazzati, considerando che sono disponibili macchine a 64 bit. Ma, si sa, la compatibilità viene prima.

Il nuovo benchmark TPC-E

Lo confesso, non sono mai stato un amante del benchmark più noto nelle misurazioni delle prestazioni di un database, il famoso TPC-C. Il motivo è che tali benchmark sono realizzati con macchine quasi impossibili da vedere nella realtà, inoltre nel benchmark troppi fattori del "mondo" reale non negono presi in esame.

Questo articolo di Brian Moran mi ha stimolato la curiosità di leggere meglio il nuovo benchmark TPC-E: si tratta di un benchmark estremamente più interessante e realistico rispetto a delle reali condizioni d'uso. Le specifiche sono relativamente nuove. Al momento ci sono solo 3 produttori hardware che hanno pubblicato dei risultati. La cosa curiosa è che tra questi c'è anche IBM, ma come Dell e Unisys il database usato è SQL Server 2005. A dire la verità in questi primi 3 benchmark non ci sono configurazioni al di sotto dei 200.000$, mi piacerebbe vedere un confronto con hardware più limitato togliendo uno zero alla cifra del totale. Sicuramente però dal punto di vista tecnico è interessante vedere che anche i benchmark devono evolvere per seguire l'evoluzione della tecnologia: il primo test TPC-C risale al 1992, immaginate una qualsiasi specifica software di 15 anni fa portata oggi... ha ben i suoi anni!

Spero di vedere prossimamente altri test comparativi, sia con hardware ancora più "ridotti", sia con altri database server.

Interfaccia utente e (forse non solo) nicchie di mercato

Qualcuno avrà già provato Tafiti, interfaccia utente Silverlight sui servizi di ricerca di Windows Live - se non l'avete ancora fatto, provatelo, perché la prima sensazione è che abbiano migliorato la qualità dei risultati del motore di ricerca, anche se in realtà è solo la loro presentazione a essere migliore.

Questo sito è l'occasione giusta per introdurre un argomento su cui ragionavo due giorni fa con altre persone. Se pensiamo alle tipiche software house, abbiamo diverse tipologie, che semplificando potremmo riassumere in:

  • Grandi software house per prodotto "pacchettizzati" globali (Microsoft, Adobe, Autodesk, ecc.)
  • Software house con prodotti pacchettizzati "verticali" (software che risolvono un problema specifico, come la dichiarazione dei redditi, la contabilità, particolari analisi finanziarie, ecc.)
  • Software house che sviluppano software "su commessa", per risolvere esigenze specifiche di un cliente

In Italia la massa del mercato non ha presenze significative del primo tipo e ci si concentra sugli altri due. In entrambe queste situazioni, un'azienda definisce la sua identità (e la sua forza sul mercato) in base alla conoscenza specifica del dominio di un problema, che può avere elementi tecnici (informaticamente parlando) ma in genere è per lo più funzionale e prescinde un po' dall'implementazione specifica. Chiaro che poi ci sono altri elementi in gioco, come la struttura commerciale, ma l'elemento su cui ricade la mia attenzione in questo momento è l'interfaccia utente.

Nel 2007 l'interfaccia utente di una qualsiasi applicazione ha due elementi chiave: l'impatto "estetico" e l'utilizzabilità. Nella mia esperienza è molto difficile (se non impossibile) trovare software house che dedichino la giusta attenzione a questi aspetti. Un campo in cui si è fatto di più è quello dei siti web, ed è in quel settore che si trovano quelle poche conoscenze in materia. A questo punto verrebbe da dire che le software house sbagliano, ma non è completamente vero.

Come ho detto, di solito l'elemento chiave per una software house è la conoscenza del dominio del problema. Questa è di solito la caratteristica che più caratterizza e discrimina un'azienda dall'altra, facendo passare in secondo piano tutto il resto (qualità dell'implementazione tecnologica, interfaccia utente, a volte anche l'assistenza). Su questo le software house investono di più (acquisire e migliorare la conoscenza del dominio del problema) ed è assolutamente corretto che sia così. Non sarebbe economicamente sostenibile mantenere anche il necessario livello di skill per poter progettare un'interfaccia utente con un buon livello di presentazione e usabilità. E qui veniamo al ragionamento che facevo.

L'interfaccia utente è un elemento importantissimo, che può diventare determinante nella scelta di un prodotto. Un'interfaccia utente intuitiva garantisce anche minori chiamate di assistenza e minori necessità formative per gli utenti (documentazione e corsi vari). Ci sono solo vantaggi ad avere una buona interfaccia utente, ma realizzarla non è facile. Ci vogliono skill particolari, non basta essere un buon grafico, bisogna anche avere chiaro in mente cosa vuol dire usabilità. La cosa più sensata (per una delle software house che ho descritto) è quella di "acquisire" all'esterno gli skill per realizzare l'interfaccia utente dei propri prodotti. Il problema verò è che allo stato attuale è estremamente difficile trovare risorse con gli skill adeguati, e di fatto non esistono aziende specializzate in questo particolare servizio. Cerco di spiegarmi meglio: è estremamente facile trovare grafici e web designer, ma se ci spostiamo nelle applicazioni "desktop" (e più in generale nell'ambito applicativo a prescindere da web/desktop, allontanandoci dalla comunicazione via web) c'è più o meno un baratro.

L'interfaccia utente, intesa come implementazione dei meccanismi di interazione con l'utente, è considerata una faccenda "da programmatori". Con il web si è generato un binomio "programmatore-grafico" che spesso cerca di far comunicare persone che vivono in mondi separati e parlano lingue diverse. L'evoluzione tecnologica ci ha portato però a un punto in cui sono necessari skill più articolati e in un certo senso "eterogenei". Strumenti come WPF (e quindi anche Silverlight) pongono le basi tecnologiche per semplificare la vita a chi deve affrontare questo cammino, ma avere uno strumento non significa assolutamente essere in grado di usarlo.

La conseguenza di tutti questi ragionamenti è semplice. Credo che esista una fetta di mercato per chi volesse specializzarsi in quest'area. Può essere una nicchia, può essere qualcosa di più, ma anche una nicchia è grande abbastanza quando la concorrenza è praticamente assente. Imparare è possibile: la ricetta è avere capacità grafiche, conoscenze tecnologiche, capacità di implementare sistemi facilmente utilizzabili (ed esistono siti dedicati esclusivamente a questo). Una forte specializzazione in questo settore consentirebbe anche di offrire un livello di qualità molto alto con un rapporto qualità/prezzo interessante per moltissime realtà (software house) dove l'interfaccia utente non è l'elemento strategico più importante dei propri prodotti, ma è comunque importate per migliorarne il posizionamento.

Se mi sto sbagliando, vi prego di avvertirmi: tutte le volte che ho avuto bisogno di qualcosa del genere, non ho mai trovato risorse adeguate - ogni suggerimento sarebbe estremamente gradito.

Gestire le mail - due anni dopo

Più di due anni fa ho scritto un post relativamente a metodi e strumenti per gestire le mail in arrivo. Da un paio di settimane ho introdotto un nuovo tool che, devo dire la verità, sta quasi sostituendo NEO (che ancora uso per le ricerche). Si tratta di SpeedFiler, appena rilasciato nella versione 2.0: è un add-in per Outlook (anche 2007) che consente di archiviare velocemente la posta in arrivo ma anche quella in uscita. Tra le varie funzionalità, per me ci sono due elementi chiave:

  • Si può usare solo con la tastiera, senza mouse
  • Ha un algoritmo che analizza la mail e propone la cartella in cui archiviarla

L'algoritmo di individuazione della cartella migliore ha una percentuale di successo (almeno per me) elevatissima. Quando non ci prende, nella lista che si può richiedere (e scorrere con la tastiera!) mostra spesso la cartella giusta nelle prime posizioni. Solo molto raramente mi tocca scegliere una cartella non elencata... e anche qui lo faccio senza staccare le mani dalla tastiera, con una ricerca full-text incrementale nei nomi delle cartelle.

Insomma, una volta imparato ad usare CTRL-W e CTRL-SHIFT-V la velocità di smistamento della mail è eccellente. Come ho detto, agisce anche sulla mail in uscita e facendo il reply a una mail propone di archiviare contemporaneamente il messaggio originale e la replica. Se smistate il 90% delle mail attraverso regole di Oulook potrebbe sembrarvi un tool poco interessante... Ma non ho conosciuto molte persone che smistano anche le mail inviate.

Premesso che non ci guadagno un centesimo e nemmeno una licenza gratuita (sono un utente regolarmente registrato, molto soddisfatto del tool e quindi ne parlo bene), se qualcuno è interessato l'autore di questo tool (Itzy Sabo) mi ha fornito anche un codice di sconto: SF520BL (ho fatto anche da beta-tester e sono rimasto in contatto).

Se qualcuno avesse suggerimenti in merito (altri tool simili, altre tecniche...) i commenti sono benvenuti.