Da manovale a mezza cucchiara*

Prosegue a tappe forzate lo studio per sviluppare un'applicazione (piccola ma reale) per la mia azienda.

Dopo circa 18 mesi di studio (non certo a tempo pieno, purtroppo) sugli aspetti di ingegneria del software (OOP e TDD) e di implementazione (C#, Framework .NET 2.0 e ADO.NET 2.0) mi mancava un resumé degli aspetti architetturali che mettesse ordine e senso a cio che in parte già conoscevo da anni e in parte ho appreso in quest'ultimo anno e mezzo.

Voglio qui pubblicamente ringraziare il team di GUISA per i bellissimi WebCast Aspire Architect - Seconda serie.

In questi giorni di forzata sosta causa influenza mi sono letteralmente immerso nella visione dei sette webcast, uno più bello dell'altro.

Un grazie di cuore per l'impegno, la passione e l'efficacia divulgativa a (rigorosamente elencati in ordine alfabetico!):

Mitici!

* Nella gerarchia dei muratori, il manovale prepara la calce alla molazza, passa i mattoni, ecc., ecc. . Alla mezza cucchiara viene concesso, di tanto in tanto, di tirar su qualche muro.

Centro Gestione Dispositivi e HTC TyTN II

Oggi, chissà perchè, non sono più riuscito a sincronizzare il mio HTC TyTN II col PC.

L'ultima sincronizzazione risaliva a dicembre 2007, ma qualche installazione successiva deve aver incasinato il tutto.

Dopo aver provato di tutto, compreso una completa disintallazione e reinstallazione del Centro Gestione Dispositivi Mobile V.6.1 (il successore di ActiveSync), ho cercato su google e ho pescato una pagina di risoluzione dei problemi di ActiveSync (Modifica del protocollo di connessione USB) che ha funzionato perfettamente.

Cito testualmente:

In uno smartphone Windows Mobile, nella schermata iniziale fare clic su Start > Impostazioni > Connessioni.

Fare clic o toccare USB a PC.

Deselezionare la casella di controllo Attiva funzionalità di rete avanzata.

Ed eccolo qua, connesso e sincronizzato!

image

Ha proprio ragione Dino Esposito quando dice: Ma come facevamo quando non c'era Google?

Io un'idea ce l'avrei, ma è meglio che non la dica!

Excel 2007 e le regular expressions

Visto che ho dovuto "sistemare" il file di excel di cui al mio precedente post aggiungendovi la validazione dei dati, riporto qui l'esperienza maturata nell'uso delle espressioni regolari in excel 2007 (ma vale anche per la versione 2003).

Le espressioni regolari le conoscono tutti, chi più chi meno, e tutti sanno che sono potenti ma ostiche.

Prova ne sia questa fantastica maglietta che ho trovato googlando su internet:

image

Fatto sta che non potevo proprio pensare di fare data validation con le varie funzioni messe a disposizione dal VBA di Excel, senza aggiungere una chicca presente su VBScript: Regular Expression (RegExp) Object .

Per usare  l'oggetto RegExp nel VBA di excel, bisogna crearlo in questo modo:

Set RegExp = CreateObject("vbscript.regexp")

L'oggetto RegExp espone quattro proprietà:

  • Global
    Imposta o restituisce un valore Booleano (Vero/Falso) che indica se il pattern deve trovare tutte le occorrenze nella stringa su cui viene effettuata la ricerca o solo su la prima occorrenza.
  • IgnoreCase
    Imposta o restituisce un valore Booleano (Vero/Falso) che indica se la ricerca del pattern ignora la differenza tra minuscole e maiuscole oppure no.
  • Multiline
    Proprietà di cui non ho trovato (sino ad ora) documentazione, ne so a cosa serva. Però nel debugger di VBA appare e la cito per completezza.
  • Pattern
    Imposta o restituisce l'espressione regolare che definisce il pattern di cui si vuole effettuare la ricerca.

e tre metodi:

  • Test(String)
    Ritorna Vero se trova almeno una occorrenza del pattern nella stringa String, altrimenti ritorna Falso. Va da se che tale metodo non è influenzato dall'impostazione della proprietà Global.
  • Execute(String)
    Restituisce una collezione Matches di oggetti Match, uno per ogni occorrenza trovata nella stringa String. Se non trova nulla restituisce la collezione Matches vuota.
  • Replace(String1, String2)
    Restituisce una copia di String1 dove ogni occorrenza del pattern viene sostituita con String2. Da notare che String2 nel testo può contenere i riferimenti a sottoespressioni del pattern, come mostrato nell' esempio della MSDN Library.

Esempio:

Per testare il campo IBAN (International Bank Account Number) usando la regular expression di Alessandro Forte:

Function ValidIBAN(IBAN) As Boolean Set RegExp = CreateObject("vbscript.regexp") RegExp.Pattern = "IT\d{2}[ ][a-zA-Z]\d{3}[ ]\d{4}[ ]\d{4}[ ]\d{4}[ ]\d{4}[ ]\d{3}|IT\d{2}[a-zA-Z]\d{22}" ValidIBAN = RegExp.Test(IBAN) End Function

Più semplice di così...

Anche i piccoli lavori vanno fatti come si deve!

In questi ultimi tre giorni ho l'influenza (ma sarà influenza, visto che non ho la febbre?) che mi tiene bloccato a casa con dolori muscolari mai provati prima. Amici sentiti per telefono mi dicono che non sono il solo. Mal comune mezzo gaudio? Mai creduto, infatti non vale a nulla perchè non toglie i propri acciacchi.

Comunque, per distrarmi, ho fatto un lavoretto in Excel 2007 creando un foglio di data entry. Con una riga dove immettere i dati e un pulsante (e relativa macro) per aggiungere la riga alla tabella sottostante.

Trooooppo facile. E infatti ho sbagliato!

Appena messo in produzione, mi sono accorto che l'utente inseriva spazi e altre amenità che "sporcavano" il data entry.

Anche un semplice foglio excel di data entry DEVE validare l'input dell'utente.

Lezione di umiltà e di pratica che non devo dimenticare.

Anche qui potrei chiamare in causa "mal comune mezzo gaudio", visto che fior di applicazioni, anche di corporate banking, NON SEMPRE fanno la validazione dell'input, con rischi di SQL injection, ecc. ecc. ma...

...non ci ho mai creduto, infatti non vale a nulla perchè non toglie i propri bachi.

Saluti!

«gennaio»
domlunmarmergiovensab
303112345
6789101112
13141516171819
20212223242526
272829303112
3456789