Home | Chi sono | Contattami
 

Progr. lineare

Delphi
 
Componenti
  Database
 
Miei articoli

Windows

Miei articoli 

 

Riscrivere un programma con la KOL Library: un esempio pratico


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

 

 

 

 

 
 
Your Ad Here