Wednesday, December 13, 2006
Blogs tecnici italiani
http://blogs.ugidotnet.org/
Tuesday, December 05, 2006
Interfacce, Garbage collection e COM
Il passaggio che mi ha interessato di più è quello in cui si fa riferimento al "reference counting".
In pratica se un oggetto espone un interfaccia può essere acceduto da parte di altri oggetti attraverso questa interfaccia. La domanda che sorge spontanea è la seguente: chi distrugge l'oggetto originario?
In un ambiente COM dove non esiste un Garbage collector la cosa viene gestita tramite il meccanismo del conteggio dei riferimenti (reference counting): ogni volta che un oggetto A accede ad un altro B tramite l'interfaccia, B incrementa di uno il numero di riferimenti. Quando l'oggetto A termina di riferire B il numero dei riferimenti è decrementato.
Tutto ciò ha senso se non esiste (come in JAVA e in .NET) un sistema automatico di gestione dei riferimenti che automaticamente distrugge gli oggetti non più riferiti da nessuno.
Per quanto riguarda il reference counting in COM suggerisco quest'altro articolo oltre che l'onnipresente Wikipedia
ACCESS e le classi
In questi giorni ho avuto modo di usare Access in maniera molto spinta ed ho dovuto strutturare il codice in modo da renderlo modulare. Poichè non avevo particolare necessità di creare Oggetti a runtime ho pensato di poter risolvere la cosa con le classi statiche. Questo purtoppo non può essere fatto poichè mancano sia metodi che campi statici (nel senso "vero" del termine). Quindi dopo qualche test ho optato per una strutturazione del codice tramite l'uso dei moduli (non di classe). In pratica questi moduli si comportano a tutti gli effetti come classi statiche ed anche il meccanismo di chiamata con i punti di separazione modulo.funzione o modulo.campo rende il codice molto leggibile.
Sunday, November 19, 2006
Tuesday, November 14, 2006
CodeGear
Esce finalmente una notizia che mette un po' di sicurezza a tutti gli sviluppatori Delphi che si erano affidati ultimamente ad una strenua difesa del loro ambiente. Anche il DTG (Developers Tools Group) ha ultimamente mostrato un incredibile propensione alla diffusione di documentazione (soprattutto video) per l'uso di BDS2006 e Turbo Explorer.
A questo punto spero che venga messo anche un po' di ordine sui vari siti (ora sono 3) in modo che sia dato un riferimento unico agli sviluppatori.
W Delphi!
Monday, November 06, 2006
Morfik
Ho scoperto per caso questo ambiente di sviluppo molto simile ad Access.
Lo scopo del progetto è lo sviluppo di un ambiente che consenta di realizzare un programma sia per l'esecuzione "stand alone" che per l'esecuzione via server web. Viene sfruttato AJAX per ottimizzare i tempi di risposta.
Mi è piaciuta molto l'interfaccia di sviluppo che consente tra le altre cose di scegliere il linguaggio di programmazione (che comprende anche il Pascal). E' un'interfaccia molto simile ad Access e per questo diventa immediatamente familiare.
Seguiamo questo interessante prodotto.
Introduzione a DELPHI
Se stai leggendo questa pagina probabilmente hai qualche interesse in Delphi.
Cosa è Delphi?
Delphi è un ambiente di sviluppo inventato da Borland a metà degli anni 90.
Un ambiente di sviluppo (IDE in breve) è una collezione di strumenti che consentono una gestione centralizzata di tutte le attività di sviluppo. In particolare:
- Disegno delle Form (maschere dell'applicazione)
- Scrittura del codice
- Esecuzione del codice
- Attività di Debug
Il linguaggio di Delphi
La scrittura del codice in Delphi avviene usando una estensione ad oggetti del Pascal denominato Object Pascal (ora anche Delphi). In pratica così come avvenuto a suo tempo per il C++, estensione ad oggetti del C, l'Object Pascal è l'estensione ad oggetti del Pascal.
Cosa posso fare con Delphi
Delphi consente di creare programmi per Windows (nella sua attuale versione a 32 bit) e per Linux per cui è stata prodotta una versione chiamata Kylix. Una delle caratteristiche più importanti (se non la più importante) è la sua universalità. In pratica chi conosce Delphi può realizzare sia programmi di basso livello (cioè che richiamano le funzionalità basiche del sistema operativo o di interfacciamento all'hardware) sia programmi per internet (programmazione di Web Service o siti web dinamici). Delphi è veramente General Pourpose.
Le versioni di Delphi
Come già detto Delphi esiste sia per la realizzazione di programmi Windows che per la realizzazione di programmi per Linux. Nel mondo Windows, in particolare, è stata da qualche anno introdotta una nuova tecnologia di programmazione denominata .NET. Delphi ha saputo differenziarsi ed attualmente è uno dei pochi strumenti che consente di realizzare programmi per Windows alla "vecchia maniera" cioè Nativi che programmi "managed" cioè che sfruttano .NET. Da qualche mese inoltre Delphi esiste anche in una modalità gratuita (Turbo Delphi Explorer).
La potenza di Delphi
Delphi è un IDE molto potente ed è abbinato ad un linguaggio molto espressivo utilizzato da anni nelle università per esporre i concetti informatici di base. Gli strumenti usati per lo sviluppo su piattaforme complesse (come Windows) devono rendere il più semplice e nel contempo potente l'accesso ai servizi offerti dal sistema operativo. Delphi ottiene questo risultato tramite la VCL (visual component library), una potente libreria ad Oggetti estendibile dal programmatore che mette a disposizione un insieme di componenti che virtualizzano ed incapsulano le chiamate ai servizi delle API di Windows. La VCL è stata estesa per coprire ogni tipo di esigenza di programmazione ed oggi è possibile trovare componenti (nella maggior parte dei casi gratuiti) che assolvono ai compiti di programmazione più disparati. Delphi deve quindi gran parte della sua potenza alla VCL.
Dove procurarsi Delphi
Delphi è disponibile in versione gratuita sul sito Turbo Explorer. Sono presenti in questo sito le due versioni di Delphi: Delphi per Windows 32 (Turbo Delphi Explorer) e Turbo Delphi per .NET. Consiglio inizialmente di scaricare la versione per Windows 32.
Delphi su Internet
Sono più di dieci anni che Delphi calca le scene. Per questo motivo è facile reperire su internet molta documentazione e soprattutto suggerimenti (tips) sulla risoluzione di problemi quotidiani di programmazione. I principali link da tenere presenti sono:
Tuesday, October 10, 2006
Sharp Develop 2
Ho seguito l'evoluzione di SharpDevelop dal suo limbo per Net1.1.
Ho scaricato ed installato la release corrente la 2.0.0 e devo dire che l'IDE è veramente maturo e ben fatto. Mi ha stupito l'Help (F1 sulla parola), il sistema di reporting e la scrittura del codice fila molto rapida.
Complimenti per l'ottimo lavoro.
E 100
Sunday, October 08, 2006
Gli sviluppatori Delphi
L'avvento di .NET ha provocato una rivoluzione: fornire a tutti la produttività di Delphi.
Unendo l'avvento di .NET alla mancata rapida risposta di Borland nel modificare Delphi per la nuova piattaforma, gli sviluppatori di Delphi si sono trovati per la prima volta a non poter rispondere rapidamente alle richieste dei clienti dal loro ambiente. In pratica sono dovuti uscire da Delphi e, guardandosi intorno hanno visto che tutto ciò che era avvenuto per Delphi (con la VCL e le sue molteplici estensioni) stava accadendo per FCL: Delphi aveva perso il primato.
In effetti Delphi, almeno attualmente, non è più e non può più essere l'unico ambiente cui si possono rivolgere gli sviluppatori. Ma forse è ora che la vera potenza di Delphi emerge prepotente. DevCo deve quanto prima colmare il gap e fornire il supporto per .NET2 e per lo sviluppo nativo a 64 bit!
Tuesday, September 26, 2006
Thursday, September 21, 2006
TURBO DELPHI
- Sito Ufficiale
- Elenco siti per il download
- Download da sito TurboExplorer
- VIDEO CORSO IN INGLESE
- Blogs tecnici
- Wiki (enciclopedia) su Delphi
Monday, September 11, 2006
Prime impressioni su Turbo Delphi Explorer per Win32
L'ambiente Turbo è lo stesso di Delphi 2006 ed ha tutte le caratteristiche innovative rispetto ai vecchi Delphi.
In particolare mi piacciono:
- L'editor: molto ben fatto
- La finestra Code Insight che risulta molto veloce rispetto alle precedenti versioni
- L'inclusione dei componenti per l'accesso ai dati: dbExpress, BDE ed ADO
Il prodotto è veramente molto valido considerando anche il fatto che è gratuito e che probabilmente sarà usato da molte persone alle prime armi.
Thursday, August 31, 2006
Application.ProcessMessages in Delphi
Il programma che aveva mostrato una certa stabilità, ha iniziato ad avere una serie di scompensi e di blocchi anomali.
Ho iniziato a verificare in debug ed ho scoperto che altri ProcessMessages erano presenti nel codice del componente da me utilizzato.
Fondamentalmente la questione è così riassumibile:
nel caso in cui in una procedura evento sia usata una particolare risorsa (esempio una porta COM), e durante l'uso della risorsa si esegue un Application.ProcessMessages è necessario garantire che non si possa generare alcun evento che magari vada a riaprire la porta COM. Detta così la cosa sembra chiara e semplice, in realtà in progetti complessi dove gli eventi possono generarsi in più parti (magari nemmeno dall'interfaccia utente), è necessario conoscere bene l'uso che il programma fa della risorsa.
Usate Application.ProcessMessages con oculatezza e, se proprio non potete farne a meno, disabilitate gli eventi che possono generare "rientro" (ovvero richiamo della stessa procedura) o introducete il concetto di stato della risorsa (in altri termini se la risorsa è nello stato x non si può effettuare la operazione di nuovo).
Wednesday, August 30, 2006
Un computer non è una lavatrice
Questo è vero se: non c'è connessione ad internet, non si installano periferiche, non si installano programmi, non si cancella niente dal disco. Cioè non è vero mai.
Ho realizzato questa considerazione dopo aver rimesso a "nuovo" un paio di PC che era diventato impossibile utilizzare a causa di Spyware, Virus, frammentazione e registry gigante e mal combinato.
Purtroppo molti utenti non tengono in debito conto le operazioni fondamentali per la corretta vita di un computer:
- installare un antivirus
- tenere il sistema operativo aggiornato
- fare una deframmentazione ogni tanto
- disinstallare correttamente i programmi non più necessari
Esistono programmi gratuiti oppure in trial che consentono di rimediare a situazioni critiche.
Comunque il mio elenco di attrezzi è il seguente:
1. Antivirus AVG
2. AntiSpyware Spybot & Destroy
3. Un'utility per la pulizia del regristry
4. Il sito Windows Update
Dopo 2 giorni di lavoro, scansioni, deframmentazioni e pulizie, il PC è tornato in uno stato stabile.
Vediamo se stavolta l'utente sarà più accorto.
Tuesday, August 08, 2006
Delphi: forse si vede il traguardo
Monday, July 31, 2006
Pensieri #2
Per realizzare un programma per gestire una segreteria telefonica per registrare alcuni dati su archivio ho individuato i due punti focali del problema:
che modem ci vuole?
che software è necessario per l'interfacciamento al modem?
Dopo una mezz'ora di ricerche su Internet avevo la risposta ad entrambe le domande:
- il modem deve essere un modello con l'estensione Voice
- per il software Windows mette a disposizione le TAPI (Telephone API)
Bene, mi sono detto, fammi allora cercare se tra queste TAPI e Delphi esiste una intersezione. La risposta? Async Professional della TURBOPOWER le mitiche librerie per Delphi diventate di libero dominio un paio di anni fa. E allora cosa scopro? che le avevo già scaricate ed installate su Delphi 5.
Dopo un po' di verifiche sono pronto a realizzare il programma che poi altro non è che un input in tabella pilotato via telefono-
Tempo di ricerca ed individuazione della soluzione: un'ora.
Delphi grazie ancora una volta!
Le procedure e le persone
Le persone sono come computer?
Possono cioè eseguire delle attività ripetitive seguendo un elenco di procedure?
Fino a che livello aziendale si può parlare di procedure e da che punto si deve parlare di analisi della realtà e scrittura di nuove procedure? Deve esistere una procedura per le procedure?
Secondo il mio parere le procedure sono valide sino al livello impiegatizio. Cioè se una persona lavora come operaio in un fast food a preparare panini ha bisogno di sapere per filo e per segno tutte le varie tempistiche per evitare di dare al panino un sapore diverso da quello che deve avere. A livello impiegatizio, invece, è la persona che deve preoccuparsi di organizzare come meglio riesce il proprio lavoro. Magari userà dei registri cartacei oppure un programma che ha inventato suo cugino, comunque tutto ciò che farà sul lavoro sarà un qualcosa visto dal suo punto di vista. Ed allora non si può prescindere dalle persone. Chi organizzerà meglio il suo lavoro riuscirà a fare di più per l'azienda. La sconfitta delle procedure? No di certo perchè per certe attività esiste la legge e comunque non si può prescindere dal seguire certi schemi. La sconfitta della azienda completamente proceduralizzata però si!
Tuesday, July 25, 2006
Pensieri #1
- Continua l'avventura di DevCo per Delphi: positivo l'incremento di documentazione anche su ECO.
- L'account di posta usato al lavoro e la privacy: per i messaggi "top secret" meglio usare un account esterno
- Gli sviluppatori "interni": leggendo un capitolo dal libro Joel on Sofware in cui si citano gli sviluppatori interni (ad una azienda) come qualcosa di inspiegabile, ho riflettuto sul fatto che esiste una industria del Software in cui gli sviluppatori PRODUCONO ciò che la società vende. Chi lavora come sviluppatore "interno" ad un'azienda (che ha come business non lo sviluppo software ma la produzione di beni di consumo), è uno strumento per il business e quindi deve sviluppare con questa logica in testa: i programmi non usciranno "pacchettizzati" e non saranno mai "completati" per la distribuzione, non esisteranno "compilazioni" notturne dell'ultima release o Tester interni. I programmi sviluppati internamente sono opere "incomplete" e, come le sculture di Michelangelo che ogni osservatore conclude con la propria immaginazione, possono essere adeguati o buttati al cambio di dirigenza. Comunque ciò che cambia di fondamentale è l'uso dell'ambiente Informatico: chi lavora in una azienda di Software usa gli strumenti di sviluppo come macchine che producono e quindi sono un patrimonio per l'azienda; chi invece lavora da "interno", ha tutto l'interesse ad usare l'ambiente che ritiene più produttivo e più malleabile dal punto di vista delle mutabili esigenze.
Friday, June 16, 2006
Selezionare con il mouse: DrawFocusRect
Servono 2 variabili boolean per indicare l'avvio della operazione di disegno ed il fatto che si sia effettivamente disegnato un rettangolo (per evitare effetti indesidetati).Gli eventi da gestire sono il mousedown (che consente di attivare la procedura e per indicare il punto di inizio del disegno), il mousemouve (che cancella il precedente rettangolo e disegna il nuovo) ed il mouseup che disattiva l'operazione.
Ecco il codice inserito in Delphi:
type
TForm2 = class(TForm)
procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
procedure FormMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
private { Private declarations }
disegnato:boolean;
start:boolean;
rS:TRect;
xS,yS:Integer;
public { Public declarations }
end;
var Form2: TForm2;
implementation
{$R *.dfm}
procedure TForm2.FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
start:=true;
xS:=X;
yS:=Y;
rS.Left:=X;
rS.Top:=Y;
rS.Right:=X;
rS.Bottom:=Y;
disegnato:=false;
end;
procedure TForm2.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
var tmp:integer;
begin
caption:=Format('(%d,%d) x (%d,%d)',[xS,yS,X,Y]);
if start then
begin
//cancello il vecchio
if disegnato then canvas.DrawFocusRect(rS);
// verifico se sono a sinistra o a destra del punto iniziale xS
if xS>X then
begin
rS.Right:=xS;
rs.Left:=X
End
else
begin
rS.Right:=X;
rS.Left:=xS;
end;
//verifico se sono sopra o sotto del punto iniziale yS
if yS>Y then
begin
rS.Bottom:=yS;
rS.Top:=Y
end
else
begin
rS.Bottom:=Y;
rS.Top:=yS;
end;
//disegno il rettangolo
canvas.DrawFocusRect(rS);
disegnato:=true;
end; //if Start
end;
procedure TForm2.FormMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
start:=false;
//forza il repaint e la cancellazione dell'ultimo rettangolo
invalidate;
end;
La cosa più complicata è la gestione dei vertici del rettangolo: un rettangolo con un vertice finale sopra o a sinistra di quello iniziale non viene disegnato. Per questo bisogna invertire i vertici.
Thursday, June 15, 2006
Agire o reagire
Fare il Project Manager = Agire
La reazione non consente programmazione: si è chiamati per un problema e si va.
L'azione richiede analisi e studio: non esiste un problema impellente, esiste un progetto.
Non esiste un interruttore per passare da uno stato all'altro. Si decide di programmare (anche nel senso di sviluppare) ed ecco arriva una interruzione, si reagisce, e si cerca di ritornare a programmare.
Siamo, sono, in questo periodo come un processore. Lavoro per interrupt.
Il problema è che nel caso della reazione non si sa quando si potrà riprendere il lavoro lasciato.
E' chiaro: dipende da quanto tempo uno ha, qual'è la priorità del problema da risolvere, quanto è importante il progetto su cui si lavora.
Il dato di fatto però è uno solo: gli utenti se hanno un problema VOGLIONO risolverlo.
Esistono le sette opere di misericordia spirituale delle chiesa cattolica, almeno quattro di queste si sposano perfettamente con il lavoro di chi deve, un po' reagire, un po' agire, un po' reagire, un po' agire...