Archivi categoria: Articoli vari

Articoli vari su Visual Studio 2005-2008, Visual Basic 6.0 e altro

Libro su Visual Basic 2010

Il libro è stato pubblicato oggi e può essere ordinato via web dal sito http://www.fag.it. Fra qualche giorno arriverà anche in tutte le librerie specializzate.

WP7, finalmente l’aggiornamento!

Annunciato il rilascio, oggi, su http://microsoftfeed.com dell’aggiornamento di Windows Phone 7 denominato “NoDo”.

Libro VB 2008 – Progetto di esempio del capitolo 10

Nell’attesa di completare il mio libro su Visual Basic 2008 (ormai mancano solo un paio di capitoli) pubblico il progetto di esempio del capitolo 10.

Il progetto consiste in un semplice editor di file di testo che ho utilizzato per mostrare l’uso di tutte le finestre comuni di dialogo. Nell’esempio sono inclusi tutti i seguenti controlli:

OpenFileDialog
SaveFileDialog
FolderBrowserDialog
FontDialog
ColorDialog
PageSetupDialog
PrintPreviewDialog
PrintDialog
PrintDocument
PrintPreviewControl
MenuStrip
StatusStrip (StatusLabel e ProgressBar)

Ovviamente la spiegazione dettagliata della creazione del progetto passo-passo la troverete nel libro che sarà pubblicato prossimamente (probabilmente verso fine marzo 2008). 

Premesso che il progetto è solamente dimostrativo, è comunque perfettamente funzionante ed è possibile estenderlo con altre funzionalità non previste da questo esempio (per esempio ricerca e sostituzione di testo).

[VB 2005-2008] Controllo: barra di progressione circolare (stile SQL Server 2005)

AGGIORNATO (sostituiti i link non funzionanti) 

Ecco un progetto, con sorgenti e demo, per creare delle barre di progressione circolari come troviamo su SQL Server 2005:
http://www.codeproject.com/KB/cpp/sql2005circularprogress.aspx

Un effetto speciale secondo me veramente simpatico (vedi immagine qui sotto):
http://www.codeproject.com/KB/cpp/sql2005circularprogress/sql2005circularprogress.jpg

Il progetto è scritto in VB 2005.

[VB6] Gestione specifiche import-export di database Access

Per il mio lavoro, spesso ho la necessità di gestire l’importazione e l’esportazione di file di dati (tipicamente file di testo con record a lunghezza fissa) da Microsoft Access. Per queste attività ho sempre utilizzato la gestione delle specifiche di importazione/esportazione nativa di Access, ma è una funzionalità che non mi ha mai soddisfatto completamente.

Per esempio ci sono stati dei casi in cui non sono riuscito a modificare una specifica già esistente e ho dovuto ricrearla da zero, senza contare il problema di inserire un campo all’interno di una specifica già esistente: in questo caso è necessario ricalcolare manualmente il carattere di partenza di ciascun campo successivo. Anche lo spostamento di un campo in una diversa posizione è un’attività che può diventare un’atroce perdita di tempo.

Ecco quindi che, diverso tempo fa, ho pensato di creare un progetto in Visual Basic 6.0 (download di 153 kb). Anzi, i progetti sono più di uno:

  • un progetto che comprende l’interfaccia principale (ImportExport.vbp)
  • un progetto che comprende l’interfaccia per la gestione delle specifiche (Specifiche.vbp)
  • un progetto per gestire le attività di importazione (Import.vbp)
  • un progetto per gestire le attività di esportazione (Export.vbp). 

Con il link sopra riportato potete scaricare tutti questi progetti, con anche gli eseguibili già compilati, un database di prova e alcuni file di testo, con qualche specifica di importazione/esportazione già caricata.

Le specifiche, infatti, vengono caricate in una tabella di Access. E’ possibile estrarre anche le specifiche da un database già esistente e salvarle in questa tabella speciale, così da centralizzare tutte le attività di importazione/esportazione.

Non è tutto: considerato che potrebbe essere necessario eseguire un’importazione/esportazione anche direttamente da un programma VBA scritto all’interno di Access (o di un altro prodotto Office) o perfino in un proprio programma scritto in qualsiasi altro linguaggio (perfino VB.NET), ho pensato di gestire i parametri della riga di comando utilizzati per avviare i programmi Import.exe e Export.exe.

In questo modo è possibile avviare, per esempio, Import.exe passandogli già i parametri necessari per eseguire l’importazione senza nemmeno aprire la sua interfaccia grafica! Il trucco sta tutto nell’evento Load del form Import.frm:

Private Sub Form_Load() 
    ReDim argv(5) As String 
    Dim i As Integer 
    
    Dim sNomeFile 
    Dim sNomeSpecifica 
    Dim sNomeDB 
    Dim sNomeTabella 
      

    ' legge la riga di comando: 
    argv = GetCommandLine(argv) 
    
    If argv(1) <> "" Then 
        ' i parametri vengono passati secondo quest'ordine: 
        sNomeFile = argv(1) 
        sNomeSpecifica = argv(2) 
        sNomeDB = argv(3) 
        sNomeTabella = argv(4) 
        sFlagDelete = argv(5) 
        
        If argv(5) = 1 Then 
            Call DeleteTable(sNomeDB, sNomeTabella) 
        End If 
        
        If argv(1) <> "" Then 
            Call ImportaFile(sNomeFile, sNomeSpecifica, sNomeDB, sNomeTabella) 
        End If 
        
        ' annulla il caricamento del form: 
        Unload Me 
        Exit Sub 
    End If 
    
    ReDim arraySpecifiche(1) 
    arraySpecifiche = ElencaSpecifiche() 
    
    Me.txtNomeSpecifica.Clear 
    For i = 1 To arraySpecifiche(0) 
        Me.txtNomeSpecifica.AddItem arraySpecifiche(i) 
    Next i 
        
End Sub

Per ultima, una piccola precisazione: questo programma l’ho scritto qualche anno fa, ma non l’avevo mai pubblicato prima, quindi è una soluzione assolutamente inedita.

Può sembrare anacronistico un progetto scritto in VB6 come nuova soluzione, visto che ormai .NET è diventata la piattaforma di sviluppo prevalente, ma c’è una considerazione da tenere presente: tra i file forniti con il file compresso c’è anche un report dell’analisi eseguita con Code Advisor per verificare la compatibilità dei progetti con VB.NET. L’esito è assolutamente confortante, dato che viene segnalato solo un piccolo problema relativo a Option Explicit, facilmente eliminabile.

Ovviamente questo progetto può essere utilizzato come prototipo per realizzare una soluzione analoga e più orientata agli oggetti, utilizzando codice VB.NET puro.

In ogni caso spero che possa essere utile a chi, come me, ha avuto problemi nell’utilizzo delle funzionalità native di Access per la gestione delle specifiche di importazione/esportazione.

[VB.NET] Proposte di argomenti da sviluppare

Con questo post vorrei aprire una sperimentazione un po’ al di fuori dell’uso normale di un blog: ho visto nelle statistiche di WordPress.com (che ospita questo blog) che molti visitatori cercano in questo blog argomenti ai quali potrei rispondere in modo agevole, altri probabilmente meno (o addirittura, in alcuni casi, non c’entrano nulla).

Mi piacerebbe quindi aprire un dialogo con voi per verificare se posso aiutarvi meglio, ma naturalmente voi dovete aiutarmi ad aiutarvi!   :-)

Vi chiedo quindi di inserire dei commenti a questa pagina con delle richieste di suggerimenti di programmazione, chiarimenti, segnalazioni di articoli, avvisi e quant’altro potrebbe aiutarmi a preparare del materiale da mettere a disposizione di tutti i visitatori. Non garantisco, al momento, di poter rispondere a tutti i quesiti, ma conoscendo le vostre necessità posso cercare di organizzarmi in tal senso.

Non è una proposta di una nuova Community: ce ne sono tante che trattano argomenti di Visual Basic (per esempio le principali sono Visual Basic Tips&Tricks e ASP Italia) e quindi non avrebbe senso. L’obiettivo è invece quello di rendere questo blog più interessante e utile per chi viene a visitarlo.

Proviamo a crescere insieme…  Happy coding!   :-)

[VB.NET] Valutatore di espressioni a runtime

Nelle mie esplorazioni su CodeProject ho trovato un altro progetto interessante: un valutatore di espressioni a runtime per Visual Basic.NET.

Anche se questo è un articolo piuttosto vecchio, ho letto in qualche richiesta inviata a varie Community tecniche che talvolta esiste l’esigenza di valutare espressioni a runtime. Questo articolo risolve il problema con un’ampia gamma di operatori riconosciuti.

[VB 2008] Code snippet editor

Microsoft ha reso disponibile al download il Code snippet editor per Visual Basic 2008, analogamente al prodotto che era disponibile per la versione 2005.

Molto interessante è l’organizzazione dei frammenti di codice in cartelle che, come si può vedere dallo screenshot, permette di inserire frammenti di codice scritti anche per altri linguaggi.

Il link “download” inserito nella pagina citata permette di accedere alla pagina di download vera e propria, nella quale troviamo (oltre a una simpatica immagine di un messaggio in bottiglia):

  • l’eseguibile in versione inglese
  • l’eseguibile in versione multilinguaggio (anche in italiano)
  • il codice sorgente.

Tutte le versioni scaricabili necessitano di Framework .NET 3.5, quindi Visual Basic 2008 Express (almeno) è d’obbligo.

Ricordo che in Visual Basic e Visual Studio 2008 è possibile inserire un frammento di codice selezionando il menu Modifica > IntelliSense > Inserisci frammento di codice…

A questo punto viene visualizzato un elenco di cartelle che rappresenta le varie categorie secondo le quali sono raggruppati i vari frammenti di codice. Con un doppio click sulla cartella che ci interessa, verrà presentato un elenco di ulteriori cartelle e di frammenti di codice. Con un doppio click sullo snippet che desideriamo, verrà inserito il frammento di codice direttamente nella nostra finestra di codice, nel punto dove si trova il cursore.

Quella degli snippet è una funzionalità molto interessante e utile e quindi vi consiglio di dare un’occhiata a tutti gli snippet disponibili perché prima o poi vi serviranno.

Se volete creare i vostri snippet e distribuirli in file .vsi, vi segnalo che Alessandro Del Sole ha creato un tool gratuito, VSI Builder, che serve proprio a questo scopo.

#18 Conversione da numero decimale a binario

Per convertire un numero intero in numero binario possiamo utilizzare la classe BitArray che converte un array di numeri in un array di bit. Per rappresentare la sequenza di bit, poi, utilizziamo una stringa e, per separare visivamente ogni byte, aggiungiamo anche uno spazio separatore:

Dim numero As Integer = 32767 
Dim numDecimale() As Integer = {numero} 
Dim numBinario As New BitArray(numDecimale) 
Dim str As String = "" 
Dim contaBit As Integer = 0 
For i As Integer = (numBinario.Count - 1) To 0 Step -1 
    If contaBit = 8 Then 
        str &= " " 
        contaBit = 0 
    End If 
    If numBinario.Item(i) = False Then 
        str &= "0" 
    Else 
        str &= "1" 
    End If 
    contaBit += 1 
Next 
MessageBox.Show(str)

Con il numero intero 32767 otteniamo la stringa seguente:

00000000 00000000 01111111 11111111

[C#] TextBox personalizzata con evento TextChanged ritardato

Segnalo l’articolo pubblicato su CodeProject intitolato “Custom TextBox that Delays the TextChanged Event” che è molto interessante, soprattutto per la sua utilità.

Il problema consiste nel fatto che l’evento TextChanged viene scatenato ogni volta che digitiamo un nuovo carattere nella TextBox, anche se l’inserimento del dato non è completato. Per esempio, in una pagina ASP.NET, possiamo avere una TextBox che utilizziamo per inserire la pagina dei dati a cui vogliamo accedere. Se la pagina è 100, prima inseriamo “1” (e viene scatenato l’evento TextChanged e quindi eseguita la query al database), poi digitiamo lo “0” di “10” (e viene ulteriormente scatenato l’evento con una seconda query al database) e infine digitiamo lo zero finale per ottenere “100” (scatenando per una terza volta evento e query). Questo non è desiderabile sia per l’effetto visuale pessimo, sia per l’inefficienza e le prestazioni dell’applicazione.

Ecco quindi che l’autore ha creato un controllo custom derivato da TextBox per ritardare l’evento di un certo numero di millisecondi.

L’articolo, dotato di sorgente e di esempio in C#, è piuttosto semplice da seguire e non è particolarmente difficile da convertire in VB.NET.

[Virtual PC 2007] Supporto a Windows Vista

Da qualche tempo è stato rilasciato “Virtual PC 2007″ con il supporto a Windows Vista, scaricabile in versione “free” da questa pagina.

Alcune applicazioni dove conviene utilizzare Virtual PC:

  • sviluppo e test di software su diversi sistemi operativi per verificarne la piena compatibilità
  • didattica: può essere creata una copia della macchina virtuale per ripristinare la stessa dopo una o più sessioni di laboratorio, senza dover formattare e reinstallare il PC
  • installazioni di software di prova senza rischiare di compromettere il sistema operativo di “produzione” installato sul PC
  • “isolamento” della macchina virtuale dal resto del PC per non compromettere il sistema con software di dubbia provenienza (rischio spyware, virus ecc.)
  • possibilità di spostare una macchina virtuale da un hard disk all’altro e anche ad un diverso PC, senza dover reinstallare nulla
  • predisposizione di una rete locale simulata con un server in macchina virtuale per test sistemistici e applicativi
  • preparazione di istruzioni di installazione di un sistema operativo da zero, avviando l’installazione dalla macchina virtuale e prendendo gli “screenshot” della stessa
  • … e molte altre!

Attenzione però che ogni istanza di Virtual PC deve avere in ogni caso la sua licenza d’uso e quindi non possono essere utilizzate installazioni multiple del sistema operativo, anche se presenti nello stesso PC.

[VB6-VB.NET] Add-in per l’interoperabilità dei form

Per chi non conoscesse l’add-in gratuito “Interop Forms Toolkit 2.0“, voglio sottolineare una sua caratteristica fondamentale: permette di estendere un progetto VB6, permettendo di utilizzare dei form di Visual Basic.NET direttamente da un’applicazione VB6.

Questo agevola sicuramente chi ha sviluppato un’applicazione “enorme” in VB6 e non si può permettere di perdere molto tempo nell’effettuare la migrazione dell’intero progetto sotto .NET. In questo modo viene garantita la produttività, almeno a breve termine, con una facile estensione del progetto iniziale con nuove funzionalità che VB.NET offre nativamente.

[C#] Rilevare inserimento/rimozione di dischi removibili USB

Un nuovo interessante articolo su CodeProject: come rilevare l’inserimento e la rimozione di dischi removibili.

Corredato da un progetto in linguaggio C#.

[C#] Un controllo visuale per indirizzi IP

Chi dovesse chiedersi come mai Microsoft non abbia incluso nella toolbox un controllo visuale per la gestione degli indirizzi IP, così come esisteva la classe MFC CIPAddressCtrl, avrà comunque la soluzione a questo problema.
Su CodeProject è disponibile, infatti, una classe creata in C#, con sorgente ed esempi:http://www.codeproject.com/cs/miscctrl/IpAddrCtrlLib.asp

[Framework .NET 3.0] Installazione e distribuzione

In MSDN on line è stato pubblicato l’articolo “Deploying Microsoft .NET Framework Version 3.0“.

Indispensabile per rimanere aggiornati.

[Framework .NET 1.1] Appunti su .NET

Cercando su Google, un po’ di tempo fa, mi sono imbattuto in questo file Word:
www.davidbandinelli.it/appunti/appunti_dotnet.doc
Contiene 133 pagine di appunti su .NET (Framework .NET 1.1).
Non è aggiornato all’ultima versione ma è un buon punto per iniziare.

[VB.NET-C#] Convertitore di codice VB.NET-C#

Se avete la necessità di convertire delle porzioni di codice o intere classi da VB.NET a C# e viceversa, potete utilizzare questa utile pagina gratuita:

http://labs.developerfusion.co.uk/convert/csharp-to-vb.aspx

Per utilizzarla, prima scegliete il linguaggio (VB.NET o C#) e inserite o incollate il codice. Poi premete il pulsante “Convert to…” e aspettate: poco dopo avrete il codice convertito nell’altro linguaggio!

[VB 2005] Creare immagini da file PDF

Code Project ha pubblicato l’articolo “Recursively create thumbnails from PDF files” che spiega come si può, in VB 2005, creare ricorsivamente delle immagini da file PDF.
Non riesco ad immaginare un’applicazione dove possa servire questa funzionalità, ma intanto “la mettiamo da parte”: prima o poi a qualcuno servirà ;-)

[Framework .NET 3.0] Un articolo introduttivo (eng)

Su CodeProject è stato pubblicato un articolo introduttivo di Anil Kr. Sharma (un programmatore indiano) sul nuovo Framework .NET 3.0 dal titolo “.NET Framework 3.0 buffet”.
Gli argomenti trattati riguardano le novità di questa nuova versione, in particolare:
• architettura di sistema
• Windows Workflow Foundation (WWF)
• Windows Communication Foundation (WCF)
• Windows CardSpace (WCS)
• Windows Presentation Foundation (WPF)

[VB.NET] Inviare e-mail

Un articolo interessante di Jim Duffy, Visual Basic MVP, con la trattazione completa del namespace System.Net.Mail per l’invio di e-mail con VB.NET:

http://msdn2.microsoft.com/it-it/vbasic/bb630227.aspx

L’articolo espone le modalità per gestire un messaggio di posta elettronica, per inviarlo, per allegare file, per gestirne le eccezioni, per modificare alcune proprietà (nome visualizzato, indirizzo per il reply, priorità del messaggio, richiesta di ricevuta di ritorno), per includere nel messaggio delle immagini, per utilizzare SSL, per effettuare l’autenticazione e per spedire i messaggi in modo asincrono.

[VB/VS 2008] Considerazioni sull’installazione

In questo post cerco di riassumere alcune informazioni sul download e sull’installazione di Visual Studio 2008 e sui singoli prodotti Express.

L’annuncio, con alcune informazioni e il link ufficiale, lo trovate nel blog di Alessandro Del Sole (http://community.visual-basic.it/alessandro/archive/2007/11/20/21153.aspx).

Chi è Alessandro Del Sole? E’ l’autore del libro “.NET Framework 3.x” edito da FAG (http://community.visual-basic.it/alessandro/articles/21567.aspx).


VERSIONI TRIAL 90 GIORNI
 

E’ possibile anche scaricare le versioni Trial (90 giorni) dei seguenti prodotti:
* Visual Studio Team System 2008 Team Suite
* Visual Studio Team System 2008 Team Foundation Server
* Visual Studio Team System 2008 Test Load Agent
mentre la versione Professional sarà disponibile tra breve.
Ecco qui il link:
http://msdn2.microsoft.com/en-us/vstudio/products/aa700831.aspx

Di solito le versioni in italiano escono un paio di mesi dopo la versione inglese.

DOWNLOAD 

Per quanto riguarda la modalità di download, c’è da tenere conto di una cosa:
– scaricando la versione Express “completa” di tutti i prodotti, vi ritrovate con una ISO con la quale produrre il vostro DVD di installazione “off-line”
– scaricando i singoli prodotti Express ci sono due problemi:
1) prima bisogna scaricare e installare il Framework .NET 3.5 altrimenti l’installazione dei software Express si arrabbiano
2) il download dei singoli prodotti non scarica l’intero file di installazione, né un ISO, ma un piccolo installer di circa 2,5 Mb. Avviando questo file viene effettuata l’installazione da Internet.

Dopo aver scaricato l’intero Visual Studio 2008 Express, composto dai 4 prodotti di base (VB Express, VC# Express, VWD Express e VC++ Express) oltre che da SQL Server 2005 Express e SQL Server Compact Edition 3.5, ci troviamo con un file .ISO piuttosto grande che dobbiamo utilizzare per creare il nostro DVD di installazione.

APERTURA DEI FILE ISO
Alla prima installazione mi sono però ritrovato in ufficio senza alcun DVD e quindi mi sono posto il problema di trasportare il file anche a casa. Come fare? Ho provato ISObuster ma la versione che avevo installato tempo addietro non riusciva ad aprire questo file .ISO.
Allora ho seguito il consiglio che ho trovato sul sito Microsoft: ho installato un piccolo “add-in” per Windows per montare un DVD virtuale. Con questo sono riuscito ad aprire il file ISO come se fosse un normale disco o hard disk e quindi mi sono copiato tutto sull’hard disk.
Il file ISO ha una sua procedura autoavviante, ma se guardate bene nelle cartelle, ogni cartella contiene un “pezzo” di Visual Studio Express: una cartella per VB, una per VC#, una per VWD e una per VC++.
Inoltre ogni cartella contiene anche tutto l’occorrente: i 3 Framework .NET (2.0, 3.0, 3.5) e MSDN Express per la documentazione.
A questo punto ho masterizzato 4 CD-ROM, ognuno per uno dei prodotti.
L’unico prodotto che non ci stava su un CD era VWD, ma ho risolto evitando di copiare la cartella di MSDN Express, tanto già l’avevo negli altri CD!
Finalmente ho potuto installare tutto nei 3 PC a mia disposizione: quello in ufficio, quello fisso di casa e il portatile!

REQUISITI E OCCUPAZIONE SPAZIO SU DISCO 

Personalmente l’ho installato su Windows XP SP2 con 2 Gb di RAM, processore AMD 3200+.

Sull’hard disk vedo che, installando tutti e quattro gli ambienti Express, nella cartella Programmi c’è la cartella “Microsoft Visual Studio 9.0″ che occupa 1,03 Gb.

Il Framework .NET occupa:
– versione 3.5: circa 24 Mb
– versione 3.0: circa 20 Mb
– versione 2.0: circa 200 Mb

Se avete già installato qualche prodotto con il Framework .NET 2.0, quindi, aggiungerete solo 44 Mb di estensioni al Framework.

La cartella “Microsoft SQL Server Compact Edition” compresa nei Programmi occupa appena 4,18 Mb.

Ci saranno probabilmente altre cose installate qua e là, ma non dovrebbero appesantire più di tanto.

I requisiti dichiarati per le versioni Express sono qui:

http://download.microsoft.com/download/9/A/E/9AE0F6CC-7032-408E-9CA7-989F9E4AF4EC/VS2008ExpressReadme.htm

[SICUREZZA] Un articolo sulla “Code Injection” (non-solo-SQL)

Ecco qui un articolo interessante su Code Project dal titolo “Malicious Code Injection: It’s Not Just for SQL Anymore“.Molti (?) conoscono i problemi di sicurezza che derivano dall’uso maligno delle tecniche di SQL injection, ma molti non conoscono le tecniche della Code Injection. Questa è l’occasione buona per imparare nuove tecniche per scrivere del codice più sicuro.

Migrare o non migrare da VB6 a VB 2005? Questo è il dilemma…

Premessa
Alla domanda “conviene migrare da VB6 a VB 2005?” oppure “quando migrare?” o ancora “perché migrare?“, posta a 100 programmatori diversi, riceverete 100 risposte diverse e forse anche di più. Sono domande che spesso compaiono nei forum, nei newsgroup e nelle mailing list fin dal primo momento in cui è comparsa la prima versione di VB.NET e che, dopo il rilascio di varie versioni fino all’attuale versione 2005, sono ancora qui a disturbare i nostri sonni e le nostre giornate lavorative.

Le valutazioni “pro” e “contro” su VB.NET e sul framework .NET sono le più svariate e spesso in contrasto tra di loro, in funzione della preparazione tecnica di chi le esprime e delle preferenze di ognuno. Infatti, pur esistendo delle motivazioni tecniche reali che spingono verso i “pro”, ci sono anche molte motivazioni soggettive altrettanto reali che spingono verso i “contro” e viceversa.

Con questo articolo vorrei esprimere in modo possibilmente completo il mio pensiero su questo problema per cercare di mettere ordine ai vari “pro” e “contro”, alla ricerca di argomenti oggettivi che possano orientare il potenziale programmatore “migratore”.

Questo articolo è anche un articolo “anomalo”, rispetto agli standard degli altri articoli pubblicati sul sito http://www.visual-basic.it. Infatti non contiene una-dico-una riga di codice in qualsivoglia linguaggio di programmazione.
Non ho la presunzione di riuscire a proporre un testo “definitivo”, riassuntivo di tutte le voci che ne parlano, né di scrivere qualcosa che possa rispecchiare il pensiero di tutti.
Questo articolo è semplicemente il mio pensiero e vuole essere una base per una utile riflessione che ciascuno può esercitare privatamente, come compito per casa, o pubblicamente nelle liste tecniche.

(sottotitolo: Un monologo esistenziale dovuto (forse) ad un eccesso di caffè?)

La volpe e l’uva
Partiamo dalla prima domanda: “conviene migrare da VB6 a VB 2005?“. La risposta è: dipende. Potrà sembrare semplicistica come risposta, ma ad una domanda del genere non si può rispondere sì o no in modo assoluto, bisogna valutare tutti gli aspetti della questione.

Prima di tutto, un po’ di storia personale. Mi viene in mente la mia carriera di programmatore, a partire da quando ancora non osavo nemmeno dire che ero un programmatore, dato che non ero in grado di esserlo. Nel 1984 ho comprato il mio primo Commodore VIC-20. Ancora oggi ricordo con orgoglio la prima accensione di quel piccolo “mostro”:

  • 3,5 kb (si, avete letto bene, circa 3.500 BYTE!) di RAM
  • registratore a cassette nastro (i floppy erano ancora un sogno)
  • niente monitor (si collegava alla TV)
  • interfaccia a caratteri (se non ricordo male 22 caratteri per 25 righe)
  • linguaggio Commodore Basic incorporato

Al termine del servizio militare (nell’86) ormai i 3500 byte mi stavano stretti e quindi ho deciso di sostituire quella piccola creatura con qualcosa di più: un Commodore 128-D. Allora non mi ero posto il problema se conveniva migrare dal VIC-20 al C-128-D, era ovvio che fosse qualcosa da fare. Le caratteristiche del nuovo mostro erano:

  • 128 kb di RAM (siamo ancora sotto il Megabyte…)
  • monitor a doppia modalità (a colori o a fosfori verdi)
  • unità floppy disk da 5,25 pollici
  • interfaccia a caratteri (40 x 25 che poteva diventare 80 x 25)
  • linguaggio Commodore Basic incorporato
  • software per videoscrittura integrato su un espansione hardware

E’ stato un grosso passo in avanti, poi, quando nell’87 ho potuto mettere le mani su un PC compatibile, perché l’Ente dove avevo iniziato a lavorare aveva deciso di comprarne uno, ero il primo, nell’Ente, ad essere il felice utilizzatore di un Olivetti M-24 del costo approssimativo (a quei tempi) di circa 7 milioni di Lire…

Da allora ne è passata tanta di acqua sotto i ponti, così come è stata grande la mia scalata ad hardware e software di maggiore potenza. Ad ogni cambiamento non ho mai pensato “conviene farlo?”. Non ho mai messo in dubbio la sostituzione di hardware vecchio con hardware più potente.

Non ho dubitato di fare la cosa giusta quando ho iniziato ad abbandonare la vecchia interfaccia a caratteri di MS-DOS per quella più gradevole di Windows 3.1. Eppure il “salto” tecnologico anche allora è stato drammatico. Ci si cominciava a scontrare con un tipo di programmazione diversa, non più programmazione di tipo “spaghetti-code” oppure “programmazione strutturata” ma “programmazione ad eventi” con “Visual Basic 1.0 per MS-DOS” (versione a caratteri) e con “Visual Basic per Windows” (versione grafica).

E’ allora che ho cominciato a capire quale fosse la mia vera vocazione: da grande volevo fare il programmatore!

Via via che passava il tempo, la tecnologia ha continuato ad avanzare in modo sempre più veloce e frenetico. Le reti diventavano sempre più grandi, i software più complessi, le macchine più potenti, Internet che iniziava ad espandersi, tutto diventava sempre più complicato.

La passione, però, mi ha sempre spinto avanti ad imparare cose nuove, ad abbandonare tecnologie o tecniche vecchie per quelle nuove, senza mai un dubbio o un ripensamento.

Ora si presenta un altro “salto tecnologico”: la vera programmazione orientata agli oggetti (OOP) viene offerta in grande scala a tutti i programmatori, anche a chi proviene da linguaggi non-C++.

Improvvisamente la grande massa critica di programmatori dell’intero mondo si interroga: faccio la cosa giusta? Devo imparare di nuovo tutto da zero? Devo spendere dei soldi (tanti soldi) per provare una tecnologia che non so se mi sarà congeniale? E se non riesco a capire l’OOP, ho speso i soldi per niente? Adesso che ho lavorato tanto per crearmi tutte le mie applicazioni commerciali, le mie librerie di codice e la mia base di conoscenza, devo ricominciare da capo e buttare via tutto il lavoro fatto? Ma chi si crede di essere la Microsoft per essere così prepotente nei miei confronti? Non le sono stato forse un programmatore fedele fino ad oggi? Devo forse cambiare linguaggio, cambiare lavoro?

E’ difficile dare una risposta chiara a tutte queste domande, perché non esiste una risposta che possa soddisfare chiunque. Le motivazioni per adottare o per ripudiare il nuovo mondo .NET sono tante e sarà possibile citarne solo alcune. Cominciamo a ragionare sulle domande e a cercare di trovare una risposta.

Devo imparare di nuovo tutto da zero?
In effetti c’è molto da imparare da zero:

  • prima di tutto il nuovo paradigma di programmazione ad oggetti, che ai programmatori VB6 era conosciuto solo in minima parte e con le forti limitazioni imposte da VB6. Il salto è concettuale e non si tratta di imparare solo una tecnologia ma un diverso modo di pensare. L’attenzione è spostata in gran misura dal flusso del programma al comportamento di un “oggetto”. Un oggetto “è dotato di vita propria” (se mi concedete la licenza poetica), lo si deve conoscere e rispettare. Solo allora l’Oggetto ci ricambierà con le azioni utili che saprà fare per noi.
  • l’intero framework .NET è fatto di migliaia di “namespace”, “classi”, “metodi” e “attributi”. Difficile farli entrare tutti in testa contemporaneamente. Conviene iniziare a capire la struttura generale ed esplorare via via le sole cose che ci interessano. La conoscenza richiede una buona infarinatura generale che può venire da un buon libro, o meglio da uno o più buoni libri, da corsi specializzati di buon livello, dalla frequentazione di liste tecniche e forum e così via. Sapere “DOVE” cercare è più importante di “SAPERE TUTTO”. Dopo tutto, è per questo che esistono i libri e le comunità tecniche, no?

Per il resto, l’esperienza nella programmazione fatta in precedenza non è mai da buttare via e non richiede di iniziare di nuovo da zero all’arrivo di una nuova tecnologia o di un nuovo linguaggio. Questo pensiero lo condividono molti studiosi di lingue straniere: è difficile imparare la prima lingua straniera, ma quando ne conosci 2 o 3, la quarta è più facile da imparare.

Devo spendere dei soldi (tanti soldi) per provare una tecnologia che non so se mi sarà congeniale?
Questa domanda sta iniziando a vacillare, dato che la Microsoft ha dato una grande svolta alla propria politica commerciale: ha reso disponibili gli ambienti di sviluppo .NET gratuitamente per permettere un più facile avvicinamento di programmatori indecisi. Le limitazioni imposte dai software gratuiti sono ampiamente tollerabili e ripagate dal costo zero e dalla possibilità di “mettere mano” ai nuovi linguaggi .NET.

E se non riesco a capire l’OOP, ho speso i soldi per niente?
Con le nuove versioni Express, gratuite, anche questa domanda non ha più senso. Forse andrebbe riproposta diversamente, cioè: “E se non riesco a capire l’OOP, ho perso TEMPO per niente?”. Il tempo è denaro e quindi la domanda è ancora sensata…

La capacità di comprensione, ovviamente, dipende dalle capacità mentali dei singoli soggetti e quindi non è prevedibile quantificare il grado di successo di ciascuno. La comprensione, però, dipende anche fortemente dalla volontà e dall’impegno profuso da ciascuno nello studiare e nel capire questa nuova realtà. Non c’è molto spazio all’improvvisazione, cosa che c’era invece nei vecchi linguaggi (es. Commodore Basic, GW Basic ecc.).

Forse l’impegno che richiede questo nuovo “salto” permetterà una maggiore selezione dei migliori programmatori sul mercato. Non c’è molto spazio per i programmatori improvvisati.

Adesso che ho lavorato tanto per crearmi tutte le mie applicazioni commerciali, le mie librerie di codice e la mia base di conoscenza, devo ricominciare da capo e buttare via tutto il lavoro fatto?
Questa è una delle parti più spinose della questione. Il lavoro dedicato negli anni a creare le proprie librerie, le proprie applicazioni, viene brutalmente messo in discussione e soffre di una grave perdita di valore.

Il fatto che la Microsoft abbia fatto di tutto per creare strumenti di conversione da VB6 a VB.NET (conversione automatica dei progetti, namespace Microsoft.VisualBasic, ecc.), per fornire le conoscenze, per incentivare la migrazione in molte maniere (fornendo software gratuito, seminari tecnici gratuiti, documentazione on line ecc.), allevia leggermente il danno ma non risolve completamente il problema.

In effetti la “reingegnerizzazione” delle nostre librerie potrebbe però portare ad un beneficio reale. Infatti, si può ragionevolmente pensare che le nostre nuove librerie saranno costruite con una caratteristica che le vecchie librerie non avevano: il codice sarà ampiamente riutilizzabile per evitare di reinventare sempre “l’acqua calda”.

Questo lavoro di rifacimento, quindi, può essere visto come una perdita di tempo e di denaro, ma può anche essere visto come un’opportunità per costruirci degli strumenti che ci possono realmente far fare un grosso salto di qualità al nostro software.

Ma chi si crede di essere la Microsoft per essere così prepotente nei miei confronti? Non le sono stato forse un programmatore fedele fino ad oggi? Devo forse cambiare linguaggio, cambiare lavoro?
Questo è un atteggiamento vittimistico che poco ha a che fare con la passione del programmatore, con lo spirito di innovazione che dovrebbe avere un tecnico il cui primo pensiero dovrebbe essere “l’innovazione” e il “miglioramento”.

Ovviamente Microsoft è un’azienda, e come tale deve raggiungere un utile per “sopravvivere” (e far sopravvivere i propri dipendenti). Non le si può quindi imputare una colpa se per prima tende ad una innovazione generale dei propri prodotti.

Certo, Microsoft può anche aver fatto qualche errore di valutazione, ma nessuno è perfetto.

Conclusione
Alla domanda: “faccio la cosa giusta?” ognuno avrà una sua risposta personale, dal “si assoluto” al “no assoluto” con le migliaia di sfumature intermedie. Per orientare la propria risposta un po’ più verso il “si”, bisognerebbe fare alcune considerazioni:

  • la Microsoft non tornerà indietro, questo è certo. Anzi, la spinta verso .NET sarà sempre più forte e coinvolgerà tutte le realtà mondiali, dai grandi produttori di hardware/software agli utenti. Quindi anche i programmatori. Perché rischiare di essere fuori dal mercato?
  • le offerte di lavoro che vengono pubblicate da un po’ di tempo ormai chiedono sempre più spesso programmatori .NET (VB.NET e C# soprattutto, ma anche molti per web). La migrazione al mondo .NET quindi è anche un’opportunità che un programmatore attento non può farsi sfuggire. Ormai .NET è sul mercato da alcuni anni e non si può più affermare ragionevolmente che “è una moda passeggera”.

[VB6] Code Advisor: uno strumento per la migrazione da VB6 a VB 2005

Premessa
Pur programmando da diversi anni con VB e con VBA (soprattutto con Access) riesco comunque a cogliere le opportunità che si prospettano con i nuovi linguaggi che implementano il paradigma della programmazione orientata agli oggetti (OOP). Nei miei studi universitari ho avuto anche a che fare con JAVA e quindi anche in questo caso con la programmazione ad oggetti (nota: C# ha una sintassi molto simile a quella di JAVA). Ho studiato, ho sperimentato e mi sono impegnato parecchio anche nelle mailing list nel cercare di capire questo nuovo modo di programmare.

Nonostante tutto l’interesse, tutta la passione e tutto l’impegno profuso per padroneggiare questo nuovo mondo, non sono ancora riuscito ad avere la “situazione in pugno”. Mi sento ancora come una vecchia locomotiva che non riesce ad andare in pressione e quindi ad iniziare il suo viaggio lungo i binari sicuri della programmazione ad oggetti.

A questo punto non resta che esplorare altre possibilità e cioè utilizzare degli strumenti che almeno mi permettano di capire quali sono le parti di codice che fanno parte del “passato” VB6 e che non hanno una corrispondenza diretta nel nuovo VB.NET.

VB6 Code Advisor: download e installazione
Prima di tutto è necessario scaricare dal sito Microsoft questo “add-in” per l’IDE di VB6. L’indirizzo esatto da cui è possibile scaricarlo è il seguente:

http://www.microsoft.com/downloads/details.aspx?displaylang=it&FamilyID=a656371a-b5c0-4d40-b015-0caa02634fae

Una volta scaricato il file “Code Advisor for Visual Basic 6_ITA.msi” è possibile avviarlo per far partire l’installazione. Le prime opzioni potranno essere tutte confermate così come sono.

Appena comparirà la seguente schermata, invece, consiglio di scegliere l’opzione “Completa“, perché così installerete anche la documentazione e gli altri componenti necessari per estendere “Code Advisor“.

Infatti “Code Advisor” è un prodotto estendibile con nuove regole per avere ulteriori consigli sul codice che non erano previsti nella versione iniziale del prodotto. Alcune di queste nuove regole sono pubblicate anche su articoli MSDN.
Dopo un altro paio di click di conferma, avrete l’add-in installato. A questo punto facciamo partire VB6.

Nell’IDE di VB6 troviamo già un paio di differenze: nel menu “Aggiunte” c’è il nuovo menu “Code Advisor” e tra le barre strumenti ce ne sarà una nuova di nome “Code Advisor per Visual Basic 6“. Entrambe presentano alcune voci identiche e quindi siamo liberi di utilizzare l’una o l’altra modalità, a nostra preferenza.
Le voci sono:

  • Aggiungi FixIt
  • Rimuovi FixIt
  • Trova FixIt successivo
  • Filtra regole FixIt
  • Definizione ambito (con le scelte “Ambito: progetto attivo” oppure “Ambito: file attivo“)

Nel menu, poi, c’è anche la voce “Visualizza report FixIt” che però al momento è disattivata, non avendo ancora utilizzato le funzionalità di questo add-in.

Gettiamo carbone nella caldaia della locomotiva…
A questo punto apriamo un progetto VB6, uno qualsiasi, per fare una prima prova “al volo” delle funzionalità offerte dall’add-in.

Per iniziare l’analisi del nostro progetto, scegliamo la voce “Aggiungi FixIt“. Diventerà subito visibile una barra di avanzamento per farci capire a che punto è l’analisi del codice. Al termine dell’analisi, nel lato destro della barra degli strumenti di “Code Advisor” comparirà un pulsantino con l’unica funzione di indicarci quanti sono i “FixIt“, cioè i suggerimenti inseriti nel codice (nel mio caso sono stati 13, molti dei quali dello stesso tipo).

I suggerimenti (FixIt) sono inseriti come commenti nel codice, secondo il seguente schema:

  'FIXIT: questo è un suggerimento

Premendo il pulsante “Rimuovi FixIt“, tutti i suggerimenti saranno rimossi dal codice come se non fossero mai stati inseriti.

Il pulsante “Trova FixIt successivo” serve a spostarsi “in avanti”, da un suggerimento all’altro. Questa funzionalità permette di trovare subito i suggerimenti senza dover guardare tutto il codice.

Il pulsante “Filtri FixIt” svolge un’importante funzione: apre una finestra di dialogo dalla quale è possibile selezionare sia la versione VB.NET alla quale vogliamo migrare, sia i singoli suggerimenti, uno per uno, che vogliamo attivare o disattivare. Riporto qui di seguito un’immagine che può chiarire il concetto.

Il pulsante “Visualizza Report FixIt“, che è diventato attivo dopo l’aggiunta dei suggerimenti, apre il browser Internet per mostrare un report piuttosto dettagliato e contenente:

  • alcune statistiche del progetto (numero regole, numero componenti, numero problemi, ecc.);
  • tutti i “problemi” riscontrati, con il nome del modulo che contiene il codice, la relativa sezione e la riga dove si trova il “problema”;
  • l’elenco dei componenti che hanno riportato almeno un problema;
  • l’elenco delle regole applicate con il conteggio delle occorrenze di ognuna.

Il report si presenta in questa forma:

Il pulsante “Guida in linea di Code Advisor” apre appunto la guida in linea, mentre l’ultimo pulsante “Definizione ambito“, che può assimere due diversi valori (“Ambito: progetto attivo” oppure “Ambito: file attivo“) specifica appunto se le regole vanno applicate all’intero progetto o al solo file attivo. In quest’ultimo caso, i suggerimenti vengono applicati solo al file attivo e anche il “Report” viene prodotto solo sulla base dei risultati ottenuti dall’analisi del file attivo.

Una nota a margine: utilizzando questo add-in, improvvisamente mi è comparsa questa finestra di avviso di Norton AntiVirus:

IMMAGINE 4

Norton AntiVirus ha interpretato le azioni di questo script come quelle di uno “script maligno”. Ritenendo che non ci fossero particolari dubbi sul fatto che fosse il NAV ad aver avuto un “abbaglio”, ho scelto la voce “Autorizza questo script“, ho confermato e ho quindi potuto continuare il lavoro ;-)

Come ultima parte di questo articolo e ad esemplificazione dei suggerimenti che questo add-in produce, ne riporto uno auto-esplicativo:

  Utilizzare Option Explicit per impedire la creazione implicita di variabili di tipo Variant.

Conclusione
Non è tra gli obiettivi di questo articolo elencare e spiegare per filo e per segno tutti i “problemi” riscontrati nell’esperimento. L’obiettivo, infatti, era quello di fornire uno sprone all’uso di uno strumento che può aiutarci nel capire meglio come migliorare il nostro codice e i nostri progetti per prepararli adeguatamente nell’ottica di una migrazione a VB.NET / VB 2005.

Iscriviti

Ricevi al tuo indirizzo email tutti i nuovi post del sito.

Unisciti agli altri 846 follower