Codicem Magis Tibi Sena Pandit SLUG - Siena.Linux.User.Group



Visual Basic e Software Libero


Dinogen vi consiglia alcune utility libere, gratis e professionali per migliorare VB.



Introduzione

Il Visual Basic e' uno schifo.
Se volete giocarci un po' e farci il programmino per far vedere agli amici che sapete programmare, va bene. Ma se dovete affrontare un progetto complesso o importante, cambiate decisamente rotta. C'e' il Delphi, c'e' il C++ standard... Fatevi un favore, lasciate perdere il VB.

Se invece siete come me, e per guadagnarvi il pane dovete proprio usare il VB, allora accettate i consigli che seguono.

Buona lettura.



Motivazioni

Perche' il VB non mi piace? Non e' che non mi piaccia. E' che non e' ben tipizzato. E questo e' un problema molto grave.
Assegnare o confrontare variabili di natura diversa non genera errori di compilazione. Allora il team di sviluppo, dove magari sono presenti due o tre elementi inesperti, dissemina 'imprecisioni' per tutto il codice, che non verranno rivelate in compilazione, e spesso nemmeno in test, ma prima o poi metteranno sotto il naso del cliente una bella palla rossa con una X bianca.

I sostenitori del VB mi dicono: "Guarda che il VB supporta il late binding".
E' una stupidaggine, si puo' parlare di late binding per esempio per le variabili Variant, ma se assegno una stringa ad un intero, e' una conversione nascosta e truffaldina, non un onesto late binding.

Ho anche letto dei libri sul VB perche' credevo che il mio rifiuto derivasse da una scarsa conoscenza dell'ambiente. Invece l'approfondimento ha confermato in pieno le mie idee. Specialmente un libro della Microsoft Press, che si arrampicava sugli specchi per cercare di dimostrare che il VB e' un linguaggio orientato agli oggetti. Mi ha fatto talmente ridere...
Ancora qualcuno mi ha detto: "Non dare la colpa al VB, sei tu che non sei capace a programmare". Non sono certo un genio, ma quelli "bravi a programmare" in VB sono quelli che ne sanno aggirare le limitazioni, invocando API e usando trucchetti contorti. Ho visto su un sito uno VBscript che inviava per FTP un file e lo recuperava di nuovo per capire se il trasferimento era andato bene. Io invece ho preferito usare le API della Wininet.dll.

Ma poi, andiamo, non ha un make, ricompila sempre tutto, non ha warning, se non premi CTRL-F5 non ti dice neanche gli errori.
E' proprio un giocattolo.
Le classi non hanno costruttore e non supporta l'overloading. Ridicolo.

E poi una cosa che mi manda in bestia: definisci una form di nome MyForm.frm, no? Dopodiche' puoi scrivere
MyForm.Show
oppure puoi dichiarare:
Dim f as MyForm
Ma allora MyForm cosa #*! e'?


Questo non vuol dire che uno bravo non ci tiri fuori qualcosa di buono. L'editor cEdit (vedi sotto) e' veramente ben scritto.
Io stesso ho fatto delle automazioni in VBScript che richiamano oggetti COM scritti in VB di cui vado fiero.
Tuttavia un termine di paragone ce l'ho: ho usato ampiamente C++ e Perl, e non ho mai avuto problemi. Invece con l'accoppiata VB-VBScript, spesso ho problemi che appaiono e scompaiono, per esempio "Automation Error", "Type mismatch", "Permission denied", un COM che funziona da VB ma non da VBScript, un altro che su alcune macchine si registra e su altre no.
Insomma: fai un prodotto, lo istalli su 100 macchine; su 10 non ti funziona e non sai perche'.



Obbiettivi

Ho cercato nel mondo del software libero delle utility che mi potessero rendere un po' piu' sopportabile lo sviluppo in VB, e ho trovato delle cose veramente fantastiche. Non costano nulla e funzionano bene. Le metto tutte qui, cosi' le potete provare.

I consigli che seguono sono spesso riferiti a un gruppo di lavoro, cioe' a piu' programmatori che lavorano ad uno stesso progetto e sugli stessi sorgenti.



CVS
http://www.cvshome.com

Sapete cosa e' una repository? E' un sistema che fa un magazzino di sorgenti di una o piu' persone, le mantiene in ordine, vi archivia tutte le modifiche e sta attento che il team non faccia casino.
Detto in parole povere, un gruppo di persone puo' lavorare sugli stessi sorgenti, anche via Internet e anche modificando gli stessi file, e vi assicuro che non si fa casino.
La repository si puo' usare anche quando si programma da soli, io la uso anche per i siti web.
Secondo me oggigiorno programmare senza repository e' come andare in giro con i calzoni ma senza mutande.

Io ho usato due repository: CVS (Concurrent Version System), che e' libero, e Visual Source Safe della Microsoft. Sono entrambe ottime, ma CVS e' migliore.

La versione che vi consiglio e' WinCVS. Leggetevi BENE il manuale. Come CVSROOT usate una cartella locale o, se siete in un gruppo di sviluppo, una cartella condivisa (magari mappata come G:). Se avete un server Linux potere istallare il CVS come server da inetd o da ssh. E' meglio, perche' poi potete metterci sopra cvsweb.cgi che e' utilissimo. Esiste anche una versione server per NT, ma nel sito ne sconsigliano l'uso.

Poi fate TANTI esperimenti su un progetto stupido di prova. Imparate a usarlo bene. Vi divertirete un sacco.
La cosa ganza e' che potete lavorare in rete o anche staccati dalla rete. Potete mettere tutti i sorgenti su un portatile, andarvene in giro a lavorare per tre o quattro giorni, e poi tornare e riunificare il lavoro fatto da voi con quello fatto dal resto del team rimasto in sede.

Fate cosi': importate nella repository, i file *.vbp e *.frx come file binari. Lo so, i .vbp sono file di testo, ma datemi retta. Invece i *.bas, i *.cls e i *.frm importateli come file di testo. I *.vbw non importateli. Importate anche bitmap, icone, xml, readme e tutto quello che serve allo sviluppo del programma

Potete modificare tutto quello che volete nel codice sorgente. Invece l'aspetto grafico delle form mettetevi daccordo e fate in modo che ci lavori solo una persona per volta.

Se due persone modificano ESATTAMENTE la stessa riga di codice si ha un conflitto (vedi manuale del CVS). Questo conflitto si risolve normalmente mettendo a posto il codice editandolo dove ci sono i simboli “>>>>>>” e “<<<<<<<”. Se invece il conflitto riguarda la parte che non si vede di un *.frm, allora il VB non riesce a caricare la form e da' un errore. Niente panico, aprite il file in conflitto col notepad e vedrete che e' tutto molto facile.

Tutte le mattine fate un update di tutto, mentre la sera, se possibile fate un commit di tutto. Lavorate a piccoli passi di programmazione e appena un passettino e' finito e testato, fate il commit.

Lavorate nell' ottica che la repository e' la vera culla del software. La versione BUONA del vostro prodotto deve essere quella nella repository, non quella che avete sul vostro computer.

Una cosa importante: fate gli eseguibili da dare ai tester e da passare in produzione DA UNA SOLA MACCHINA. Non importa quale macchina, basta che sia unica. Programmate da quale macchina volete, ma poi fate il commit, andate alla macchina prescelta e fate update. Infine fate l'eseguibile.



cEdit
http://cedit.sourceforge.net

Un'altra brutta storia che ho vissuto e' quella di aver scritto una serie di oggetti COM, che funzionavano benissimo richiamati da VB, mentre da VBScript davano un simpatico “Type Mismatch”. Tutti i casting e l'uso estremo di variant o di object sono stati vani! A peggiorare la situazione c'era che per scrivere il codice VBScript usavamo il notepad, che non ha la sintassi colorata. Io usavo Emacs, col supporto VB, ma i miei colleghi non volevano usarlo.

Un giorno ho trovato la soluzione: cEdit, un editor libero che funziona benissimo, ti indenta per bene e ti colora tutte le parole.

Aveva due piccoli problemi, ma essendo software libero li ho corretti e ho mandato le correzioni al team di cEdit. Ganzo.



VBDox
http://vbdox.sourceforge.net

Fate le Sub o le classi, e poi non vi ricordate piu' come funzionano, vero? O peggio, non avete mai il tempo di scrivere un manualino dell'oggetto che avete realizzato e tutti vi vengono a chiedere le cose.

Ok, VBDox vi realizza una documentazione tecnica valida e usabile a partire dai sorgenti. Funziona bene, ma funziona anche meglio se fate un piccolo sforzo. Prima di ogni variabile, funzione o sub, Public, solo Public, mettete un commento come segue:

''
' Funzione per calcolare le tasse
'
' @param imp Importo del reddito
' @param iva Percentuale IVA
' @return Importo da pagare all'erario
' @remarks La funzione esegue il calcolo, e tiene conto dell'IRPEF.

Public Function CalcolaTasse(imp as Double, iva as Integer) as Double

Questo commento verra' inserito nella documentazione prodotta. Il manuale e' solo una pagina, ed e' solo su web. Ma non c'e' bisogno di altro. E' il programma piu' semplice sulla faccia della terra. Clikki e opla'! Una bella documentazione gratis.



Inno Setup 2
http://www.jrsoftware.org/isinfo.htm

Ah, Inno Setup! Che grande utility!
Inno Setup, crea i file di istallazione. Lo fa anche Visual Studio, daccordo, ma Inno Setup vi offre alcune cose in piu'.

  • Un aspetto grafico professionale e personalizzabile.
  • Il controllo completo di quello che succede prima, durante e dopo l'istallazione.
  • L'automatizzazione di quello che fate di solito.

Praticamente si tratta di creare uno script in un linguaggio particolare. Niente di difficile, per carita'.
Questo script descrive i passi che il programma di istallazione eseguira': creazione delle directory, copia dei file, creazione delle icone, delle chiavi di registro, ecc...
Inoltre puo' mostrare il README, la licenza del prodotto, puo' far partire programmi, registrare DLL e OCX e altro ancora.

L'unica cosa a cui dovete stare attenti, sono le cavolate di Bill Gates. Per esempio, se distribuite la WININET.DLL o la COMCTL32.DLL, state sicuri che renderete inutilizzabili la meta' dei PC dove istallate il vostro programma.
Pertanto, leggetevi bene l'how-to e le FAQ che trovate nel sito. Ci sono delle istruzioni speciali per VB.

Le istallazioni che faccio io con Inno Setup sono proprio forti. Per ogni prodotto faccio una bitmap che appare durante l'istallazione.
Poi l'istallazione copia dei file di configurazione differenti secondo il cliente a cui devo mandare il prodotto. Se poi chi istalla deve controllare un certo file .ini, l'installer glielo mette sotto il naso aprendolo col notepad.
E' proprio comodo.

Una piccola nota. A volte, aggiornando una istallazione precedente di un vostro programma, sembra che l'installer non copi i file, lasciando quelli vecchi. Il fatto è che l'installer copia i file solo se il numero di versione è piu' alto. Quindi se avete l'abitudine di ricompilare i programmi senza aggiornare i numeri di versione, cominciate a farlo, oppure usate la opzione alwaysoverwrite di Inno Setup.


CFtpCom.cls

Una delle piu' grosse sole che ha tirato la Microsoft e' MSINET.OCX.
Non funziona quasi mai. Ho cercato nei newsgroup e ho visto che il problema e' universale. Non lo usa nessuno. C'e' anche una patch su MSDN, ma risolve solo il problema della licenza. In ogni caso ho smesso da molto tempo di pretendere che i prodotti Microsoft funzionino.
Allora ho scritto questa classe che aggangia la WININET.DLL per fare gli ftp. Non e' certo un capolavoro, ma funziona sempre e' puo' essere utile come base per scrivere quello che vi serve.