|
Oggi mi è tornato un forte interesse per la libreria KOL (Key Object Library):
si tratta in pratica di una libreria che consente la realizzazione di programmi
con Delphi senza però ricorrere alla nativa VCL (Visual Component Library).
Nonostante la VCL sia intuitiva al massimo e consenta uno sviluppo rapidissimo
di applicazioni complesse, genera degli eseguibili di dimensioni un pò superiori
alla norma: non è una tragedia in quanto, anche in caso di software molto
complessi, massimo massimo si arriva a 1500 K e un semplice applicativo è
intorno ai 400 K e sono dimensioni che non hanno mai ucciso nessuno e poi
l'intuitività e la rapidità di sviluppo concessa dalla VCL ti fa dimenticare
veramente tutto. Se però uno volesse, così tanto per la pura curiosità,
realizzare eseguibili di dimensioni ridotte (diciamo inferiori a 100 K), behh
allora potrebbe ricorrere alla libreria KOL. Questo pacchetto non è in vendita,
ma è libero da scaricare e da consumere per chiunque inclusi i sorgenti
naturalmente; opera dell'ennesimo pazzoide programmatore dell'est che ha deciso
di sconfiggere la noia elargendo tonnellate di righe di codice al popolo di
internet, la libreria KOL è oggi un progetto molto avanzato: grazie
all'interesse suscitato ed all'effettiva capacità di riscrivere ogni programma
in Delphi in un versione corrispondente di dimensione 10 volte più piccola, ci
troviamo effettivamente di fronte ad un prodotto eccelso; è vero, bisogna essere
sinceri in tutto e per tutto .... realizzare con KOL non è esattamente immediato
come con la VCL, vanno seguite regole precise, bisogna stare un pò più attenti,
ma il materiale che si trova disponibile su internet oramai copre gran parte dei
contesti coperti da VCL, tanto che spesso e volentieri il tutto può ridursi ad
analizzare il materiale scaricabile dal web ed ecco che ci ritroviamo col nostro
programma dimagrito di 10 volte. Nel seguito non andrò come al solito a fare il
guru dell'argomento in questione (ruolo a cui hanno già pensato altri sul web
coi loro contributi) ma esaminerò nel dettaglio i passaggi per tradurre uno dei
miei programmini realizzati con VCL in una versione sottile realizzata con KOL.
Come programma di riferimento userò uno dei programmini a cui sono più
affezionato ossia il programma descritto nell'articolo
articolo6 che consente di
enumerare le chiavi di registro modificate in un dato intervallo di tempo.
1. Incominciamo con KOL
Bene, la prima cosa da fare è andare sul sito di KOL
http://kolmck.net/
Il sito è in doppia versione, Inglese e Russo, le ultimissime versioni dei
file si trovano solitamente nella versione in Russo (l'unico problemino è
che i commenti presenti nei sorgenti di queste versioni sono in cirillico). Oggi
è il 5 Aprile 2007 e l'ultima versione attuale di KOL è la 2.56 (la troviamo
nella versione in Russo, mentre in quella Inglese si fa riferimento ancora alla
2.50).
Fondamentalmente la libreria KOL consiste nella unit KOL.pas farcita da un pò
di file .inc. Ok, andiamo direttamente nella versione in cirillico e scarichiamocela:
nella pagina
http://kolnmck.ru/files1.shtml
abbiamo l'elenco di tutte le ultime release e ci scarichiamo la più recente
(2.56)
KOL v.2.56(31.03.2007)
Scompattato il contenuto dell'archivio in una cartella, non ci resta altro da
fare che aggiungere il percorso a tale cartella nel Library Path di Delphi.
Bene, a questo punto, la unit KOL.pas sarebbe sufficiente a costruirsi una
applicazione GUI che produce un ridottissimo .exe. Però vogliamo di più ma
soprattutto vogliamo una bella sfilza di componenti nella paletta di Delphi:
bene ... basta chiedere e sarà dato, MCK è lì pronto per essere scaricato. MCK =
Mirror Classes Kit ossia la ricostruzione dei principali componenti VCL
utilizzando la libreria KOL: sempre alla stessa pagina descritta precedentemente
abbiamo
MCK v.2.56(31.03.2007)
Come tutti avranno già notato esiste anche un archivio comprensivo di MCK e KOL
(più altre unit aggiuntive che vedremo in seguito e che sono utili allo sviluppo
con KOL) ma
preferisco far riferimento ai vari elementi separatamente; in ogni caso basta
mettere il contenuto dei 2 archivi in una unica cartella per ottenere l'archivio
complessivo di tutto.
Installato il package incluso nel pacchetto MCK avremo una bella sfilza di
componenti per cominciare lo sviluppo visuale con KOL; naturalmente dobbiamo
aggiungere il percorso alla cartella di MCK nel Library Path di Delphi.
Bene, per il momento abbiamo quello che ci serve
2. Riscriviamo il programma originale
Bene, a questo punto possiamo scrivere un programma con KOL; non mi
dilungherò nel descrivere i passaggi per la realizzazione i un applicativo con
la suddetta libreria (anche se in principio era il mio obiettivo); il motivo?
Behh finirei per riscrivere esattamente quello che si trova scritto in inglese
nel readme associato alla libreria o in ogni caso non avrei apportato
miglioramenti dal punto di vista della rapidità d'apprendimento dell'argomento;
la strada rimane quella di tener sotto il semplice file di testo che accompagna
i sorgenti di KOL e MCK e creare/disfare fino a quando non si raggiunge la
perfetta padronanza del contesto in questione. Per quanto riguarda i file da
utilizzare è doveroso sottolineare l'utilizzo delle unit che vanno a rimpiazzare
alcune delle unit di Delphi (tipo ad esempio system.pas, sysinit.pas, etc...)
contribuendo ad una notevole riduzione dell'.exe finale
Unit sostitutive
La pagine in questione è raggiungibile dalla sottosezione System della
sezione Downloads nei link della homepage di KOL.
In particolare userò la unit err.pas inclusa nel pacchetto all'url
KOL_ERR
(nella homepage di KOL alla sezione Mathematics & Exceptions). Questa unit
raccoglie parte della gestione delle eccezioni presente in SysUtils; viene usata
per evitare di utilizzare sysUtils che aumenterebbe di molto la dimensione del .exe
(contenendo infatti mooolto altro)
Inoltre userò le unit System e SysInit incluse nel pacchetto all'url
System Units for Delphi7
Anche in questo caso, l'utilizzo di queste unit al posto delle originali di
Delphi contribuirà a ridurre la dimensione del .exe finale.
Anche in questi casi, si può sempre dare un'occhiata alla versione in
cirillico del sito per vere se ci sono versioni più aggiornate dei suddetti
pacchetti.
Inutile dire che le unit in questione le possiamo mettere nella cartella del
nostro programma oppure farvi riferimento aggiungendo il percorso nel Library
Path di Delphi.
Un ulteriore pacchetto utile nello sviluppo visuale (MCK) è il property
editor dei Font che ci possiamo scaricare all'url
KOLFontEditor
Bene, detto questo, possiamo passare a riscostruirci i programma originale;
si , quale?
Behh ho deciso di convertire il programma all'url
Enumerare le chiavi di registro modificate in un dato
intervallo di tempo
La prima cosa che mi servirà (e sarà poi anche l'ultima) è una unit KOL che
mi implementa la classe TRegistry di Delphi: behh, detto fatto
kolexregistry
il pacchetto che ci andiamo a scaricare contiene un esempio di utilizzo di 2
unit
1) KolRegistry.pas che traduce per KOL la unit TRegistry.pas di Delphi
2) KolExRegistry.pas che traduce per KOl la unit TExRegistry ossia il wrapper
della unit Registry.pas di Delphi realizzato da
Colin Wilson
useremo KolRegistry.pas
E' importante sottolineare che
kolexregistry fa parte
dell'immensa collezione di applicazioni KOL oriented raccolte nel sito
http://thaddy.co.uk/
In pratica l'autore Thaddy de Koning si è divertito a convertire a KOL quasi
tutto il mondo delle VCL (ed il registro non poteva far eccezione).
Anche nel caso della unit KolRegistry.pas, non sono necessarie installazioni
di pacchetti ma basta semplicemente includere la unit nella cartella del
progetto o farvi riferimento in qualsiasi altro modo.
Behh, dopo aver realizzato la nuova versione del programma ho potuto notare
la seguente differenza:
VCL Version (originale): 427520 byte (417 KB)
KOL Version (nuova): 31232 byte (30,5 KB)
Un riduzione esagerata, considerato anche che si può fare sicuramente di
meglio, ottimizzando il codice.
Inoltre comprimendo ulteriormente il risultato con
UPX si arriva alla
dimensione di 17920 byte (17,5 KB).
Utilizzando come compressore WinUpack si arriva addirittura a 15670 byte
(15,3 KB) (quindi la metà).
Niente male passare da 427520 byte a 15670 byte, considerando poi il fatto
che non si sono fatti ragionamenti approfonditi sull'ottimizzazione del codice.
Bene, la cosa migliore a questo punto è scaricarsi il sorgente
RegEnum__KOL_Version.7z
|