Wednesday, December 13, 2006

Blogs tecnici italiani

Un link da annotare tra quelli da controllare giornalmente:
http://blogs.ugidotnet.org/

Tuesday, December 05, 2006

Interfacce, Garbage collection e COM

Leggendo un capitolo gratuito su Delphi per .NET di Marco Cantù dove vengono analizzate le modifiche effetuate al linguaggio per adattarlo a .NET, ho riflettuto su un passaggio lì riportato riguardante le interfacce. In pratica e finalmente il concetto di Interfaccia si sgancia da COM: non è più necessario associare ad un interfaccia un GUID.
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

Ho già avuto modo di dire in passato che Access ha una serie di notevoli caratteristiche che lo rendono molto buono per la realizzazione di prototipi.
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

CodeGear è la nuova società (sempre all'interno di Borland) che sarà focalizzata esclusivamente sugli ambienti di sviluppo.
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:

  1. Disegno delle Form (maschere dell'applicazione)
  2. Scrittura del codice
  3. Esecuzione del codice
  4. 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 aspettato e poi ho riprovato.
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

Ho raggiunto 100 Post in questo Blog. Non so se qualcuno mi legge con costanza e non so nemmeno se chi mi legge trova interessante ciò che dico. Comunque sono 100. Complimenti Luca!

Sunday, October 08, 2006

Gli sviluppatori Delphi

Leggendo i commenti agli ultimi post di Nick Hodges e di Marco Cantù, mi è storta spontanea questa osservazione: prima dell'avvento di .NET, esisteva Delphi (anche come CBuilder) come solo ambiente di sviluppo veramente produttivo per Windows (VB non era compilato e VC troppo complesso).
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

Inserisco un pò di links utili:

Monday, September 11, 2006

Prime impressioni su Turbo Delphi Explorer per Win32

Avevo già avuto modo di usare Delphi 2006 nella versione Demo.
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
Risulta un po' negativa l'impossibilità ad aggiungere componenti all'IDE ma questa limitazione si sente solo se la customizzazione a livello di design delle forms è fatta a design time con componenti non standard (per esempio con le RX Library). Personalmente ho sempre cercato di evitare l'uso di componenti non della VCL. Nel caso in cui si sia obbligati a fare uso di qualche componente si può sempre instanziarlo a runtime. Inoltre esiste una procedura che sembra permattere du bypassare questa limitazione: http://www.danielstools.de/downloads/Tuts/TurboDelphi_install_components_en.pdf

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

Nel mio ultimo programma mi sono imbattuto sul metodo in oggetto: per evitare il blocco del programma ho inserito, in diversi punti (soprattutto in loop di attesa) un bel ProcessMessages.
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

E' vero. Forse esistono lavatrici complesse come computer, ma il messaggio che voglio dare è questo: molte persone ritengono che, una volta comprato un computer sia sufficiente seguire il ciclo di ogni altro elettrodomestico: accendensione, uso, spegnimento.
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

Borland (DevCo) sta iniziando a mostrare mostrare i primi segni del nuovo trend. La creazione di ambienti TURBO rivolti sia a chi deve imparare a sviluppare sia a chi deve sviluppare per lavoro dimostra come le voci dei tanti delphiniani siano state accolte. Speriamo che questa idea faccia presa sul mercato.

Monday, July 31, 2006

Pensieri #2

Chi cerca trova
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

Ecco come disegnare un rettangolo che permette di selezionare un area della form:

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 Help Desk = 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...

Saturday, June 03, 2006

Lo sviluppo in DELPHI

Ebbene si.
Nel mondo delle aziende che producono Software sta accadendo una cosa MOLTO interessante (per DELPHI).
Sappiamo tutti che la politica di Microsoft per gli ambienti di sviluppo è .NET oriented. Sappiamo anche che pochi prodotti interni a Microsoft sono stati sviluppati con .NET. Evidentemente deve essere accaduto che la scelta di lasciare Win32 un po' a se stesso ha lasciato spazio all'UNICO ambiente che offre le stesse capacità e produttività di sviluppo sia per .NET che per Win32: Delphi.
Esempi come Skype o prodotti ancora in fase Beta come Yahoo Go TV! sono sviluppati in Delphi.
Esistono MOLTI PC con ancora Windows 98 ed Hw poco performante. La scelta di .NET richiede un sacco di condizioni: installazione del Framework, una certa pesantezza nell'esecuzione, possibili incompatibilità con il SO installato etc.
Allora le aziende cominciano a capire la vera potenza di Delphi: elevata produttività, assoluta mancanza di concorrenti per lo sviluppo in Win32 (mantenendo una produttività pari a quella di .NET).
Di fronte ad un mondo che si muove verso nuovi standard (che non si sa se produrranno frutti) una certezza rimane: lo sviluppo per Win32 che funziona sarà possibile in DELPHI!

Thursday, April 27, 2006

Inviare una MAIL POSTICIPATA

La procedura seguente consente di inviare una mail ad un certo indirizzo in maniera POSTICIPATA alla data ed ora indicate in DeferrededDeliveryTime.

L'uso della Procedura da VBA richiede l'installazione del Software REDEMPTION per l'invio delle mail bypassando il controllo AntiSpam di Outlook.

Private Sub InviaMailRitardata()
Dim objItem As Outlook.MailItem
Dim SafeItem As SafeMailItem

Set objItem = Application.CreateItem(olMailItem)

objItem.DeferredDeliveryTime = Now + TimeSerial(0, 5, 0) ' Posticipa l'invio tra 5 minuti

'Mail per il risveglio
objItem.To = "MyMAIL@MYDOMAIN.COM" 'Indirizzo mail cui inviare

Set SafeItem = New SafeMailItem
SafeItem.Item = objItem
SafeItem.Subject = "Soggetto della mail"

SafeItem.Recipients.ResolveAll
SafeItem.Send

Set objItem = Nothing
Set SafeItem = Nothing

End Sub


Wednesday, April 19, 2006

Delphi 2006 e .NET 2.0: errore in PCNTRLSRV.CPP

Dopo l'installazione di NET 2.0 si verifica un errore in Delphi 2006 nel caso di progetti WinForm.
L'errore indicato fa riferimento al modulo PCNTRLSRV.CPP.

Per risolvere il problema è necessario operare a livello di registro di sistema come riportato nel link sottostante.

Atozed Software - Delphi 2006 and .NET 2.0 debugger issues

Tuesday, April 04, 2006

Agile o solo Intelligente?

Agile
Che dire. Sono sempre poco attratto dallo schematismo portato all'eccesso, dalla documentazione, dai diagrammi e dai flussi.
La proposta del movimento Agile della comunicazione ed il raffinamento successivo è una formalizzazione del mio modo di lavorare.
Non dico questo per andare nella ottica della confusione e nel fare ciò che mi piace di più (programmare), ma perchè penso che ciascuno di noi abbia un modo di lavorare: chi riesce a portare avanti le cose e raggiunge il risultato NON ha bisogno di avere tanti formalismi. Evidentemente non è semplice coordinare grossi gruppi di lavoro senza avere una precisa metodologia. Dal punto di vista dell'industria del SW è quindi fondamentale rendere i programmatori il più possibile pilotati dalle esigenze dell'azienda.

Thursday, March 16, 2006

Report con Visual Studio 2005 Express Edition

Sia utilizzando C# Express che VB Express 2005, è possibile creare reports sfruttando il designer contenuto in Visual Web Developer 2005 Express Edition.
Per fare ciò è necessario seguire le istruzioni riportate in questo Blog.
C# Express 2005
and Report - MSDN Forums

In pratica si crea una pagina WEB in VWD, si aggiunge un controllo Report Viewer, si seleziona lo Smart tag e si crea un nuovo report che punti alla stessa sorgente dati che utilizzeremo nel progetto WinForm (C# o VB).
A questo punto, disegnato il report, si salva nella cartella del progetto WinForm e si aggiunge al progetto. Si inserisce un controllo Report Viewer alla form e si seleziona il report precedentemente aggiunto, indicando la sorgente dati con l'opzione dello Smart Tag.
Il gioco è fatto ed il problema è risolto.

ReportViewer control in Visual Studio 2005

Il reporting è una fase importante in ogni applicazione che gestisce dati.
Il nuovo Visual Studio 2005 include un sistema di reporting che estende all'uso locale il meccanismo precedentemente sviluppato come estensione per l'ambiente SQL 2000 (Reporting Services). Questo sito contiene una serie di utili consigli ed esempi per utilizzare al meglio il sistema di reporting incluso in VS 2005.
ReportViewer control in Visual Studio 2005

Si deve notare che le versioni Express di Visual Studio NON includono gli strumenti per la creazione dei Reports fatta eccezione per la Web Developer Edition che invece include la parte di design.

Monday, March 13, 2006

SQL EXPRESS Edition

Come questo post post sembra dire, l'uso di SQL Express non è consentito in Windows 98. In effetti i Sistemi Operativi supportati da sono: Windows 2000 Service Pack 4; Windows Server 2003 Service Pack 1; Windows XP Service Pack 2 come riportato qui.
Come sempre è necessario conoscere tutti gli aspetti per la realizzazione di un nuovo progetto, non concentrandosi solo sull'analisi. E così un bel programma basato su SQL può non essere accettato da una realtà poichè hanno dei sistemi datati (d'altro canto non tutti sono fanatici del nuovo a tutti i costi).

Friday, March 10, 2006

Tutto Open Source?

Ho letto con interesse questo blog Sciabarra.com: Il_vero_informatico scritto bene.

Mi sono trovato poi a fare alcune considerazioni:
- l'open source è un bene che esista
- per offrire delle garanzie un qualunque progetto open source deve approdare a qualche forma di finanziamento (altrimenti rischia di non essere aggiornato adeguatamente)
- l'open source è importante ma più importante è il rispetto degli standard
- la produttività insegna che le soluzioni "mono" fornitore e pacchettizzate hanno, per certi progetti, un costo di sviluppo più basso
- molte volte non è il tecnico che propone lo strumento ma il cliente che chiede di usarne uno specifico (in base alle installazioni che ha)

L'informatica è bella anche perchè è varia ed ognuno trova il proprio "karma" negli ambienti a lui più consoni.

Tuesday, February 21, 2006

untitled

Un altro grande esempio di inventiva.
untitled
Può essere una cosa inutile ma risulta molto interessante.

Saturday, February 18, 2006

Verifica la popolarità di un linguaggio

TPCI - TIOBE Programming Community Index

DELPHI: indice delle lezioni

Per la diffusione di questo ambiente e per una infarinatura iniziale questo corso On-Line non è male:
DELPHI: indice delle lezioni

Perchè Delphi?

Dopo le ultime notizie da Borland relative alla dismissione degli ambienti di sviluppo, c'è stata come una sorta di riflessione da parte degli sviluppatori Delphi che sembrano si siano resi conto (forse per la prima volta) di dover PROMUOVERE maggiormente il loro uso di Delphi.
Perchè si parla solo di Java, di C# e di VB? Perchè c'è un unico libro in italiano su Delphi? Verrebbe da pensare che siano pochi coloro che usano Delphi. Invece non è così! Le società che ho avuto modo si contattare con il mio lavoro, fanno uso di Delphi. Molti ragazzi usano Delphi.
Tutto questo lavorare non pubblicizzato è stato forse il motivo per cui Borland ha dovuto dismettere questo ambiente. E' vero: molto deve essere fatto all'origine (cioè dalla stessa Borland) ma molto possiamo fare anche noi.

Ed allora poniamoci una semplice domanda: perchè uno sviluppatore in erba dovrebbe considerare Delphi? Perchè non dovrebbe usare Visual Studio o Java?
Esistono diverse risposte:
1. Attualmente ci sono molti PC con sistemi operativi "datati" su cui è impensabile installare un Framework.
2. Se sviluppi con Delphi puoi convertire le tue applicazioni Win32 in applicazioni .NET (grazie alla VCL .NET)
3. Se vuoi puoi comunque sviluppare in .NET (per ora 1.1)

Quindi se sei uno sviluppatore che non vuole essere in balia delle scelte di un'unica compagnia, devi utilizzare DELPHI. Se sei uno sviluppatore che mira alla produttività devi sviluppare in DELPHI. Se sei uno sviluppatore che desidera preservare l'investimento, devi sviluppare in DELPHI.

Spesso mi vengono richiesti dei programmi. La mia prima domanda è: che sistema operativo hai? La risposta generalmente non è Windows XP SP2 ma Windows 98. A questo punto NON esistono alternative: devo sviluppare in DELPHI.

In altre parole: è bello avere gli ambienti Express di Microsoft ma è anche vero che per distribuire l'applicazione è necessario fornire anche lo strato .NET. E' bellissimo avere a disposizione Eclipse o Netbeans, ma è anche vero che Java non è un fulmine sotto Windows.

Sunday, February 12, 2006

Delphi ed ancora Delphi.

Ebbene si!
Borland ha deciso di disfarsi degli IDE (JBuilder e Delphi in primis).
Cosa significa?
Per chi sviluppa in Delphi, già ora risulta difficile, in un mondo dove tutti sono esperti, proporre un programma fatto con questo linguaggio. Eppure e qui non ci sono dubbi DELPHI (per Win32) è il migliore ambiente per produttività e potenza.
Che cosa è successo?
E' successo che Microsoft si è portata in casa (non ora ma un po' di anni fa) la tecnologia vincente per diventare monopolista ANCHE nel mondo degli ambienti di sviluppo. Il tempo perso con Visual Basic degli anni 90 è stato recuperato introducendo la piattaforma .NET e "regalando" ambienti di sviluppo altrettanto produttivi (anche se un po' meno ricchi) di Delphi.
Dall'altro lato la piattaforma Java si è spinta verso l'Open Source con due grossi giganti alle spalle, IBM per Eclipse e SUN per Netbean ed anche la programmazione in Java è diventata gratuita.
Perchè uno dovrebbe comprare un ambiente di sviluppo?
Prima per lo sviluppo in Win 32 c'era Delphi e chi non conosceva Pascal doveva scendere a compromessi con VB o picchiarsi duramente con C++. Ora è tutto "almeno all'apparenza" gratuito:
1. Per i linguaggi .NET esiste Visual Studio Express o SharpDevelop
2. Per Java gli IDE indicati sopra
Eppure nonostante tutto .NET non è entrata (almeno per ora) nel cuore di Windows. Per realizzare programmi che SICURAMENTE girino su tutte le piattaforme Windows >= Windows 95 è ancora necessario sviluppare in Win32. Ed è qui che Delphi deve ancora continuare a dare lezioni a tutti!
E poi c'è il mondo LINUX. Anche qui diamo spazio a Delphi.
E poi c'è il mondo OFFICE: anche se non sarà elegante e bello "programmare" all'interno di Excel o in ACCESS è qui che il ritorno di investimento può esserci.
Non si deve sempre pensare a sviluppo Enterprise! Molte delle soluzioni a problemi terribili, possono nascere dalla semplice automazione di qualche foglio Excel.
E poi Marketing, pubblicità, moda!!!
Diciamolo che i programmi più UTILIZZATI sono fatti in Delphi.
Vi immaginate una Luna Rossa sponsorizzata DELPHI!!!

Insomma noi lo sappiamo: se vuoi fare un programma velocemente, performante e che non rompa le scatole devi usare DELPHI.
Convinciamo gli altri soprattutto ad usarlo.

Dico due ultime cose:
- avete cercato in negli ambienti .NET di Microsoft una Griglia (stile TStringGrid)? Non c'è!
- avete cercato una scrollBox? Non c'e?
Sapete cosa vuol dire programmare una griglia da zero?
Sapete cosa vuol dire programmare una scrollBox da zero?
IO SI!!!

Thursday, February 09, 2006

Lazarus Project

Lazarus
Project


La nuova Release dell'IDE, appena rilasciata sul sito, include una serie di nuove caratteristiche tra cui (finalmente) la connessione ODBC per aprire il mondo a tutti i vari DB.
A queto punto si può pensare di utilizzare seriamente per fare sviluppo nel mondo Windows (sviluppo per applicazioni gestionali).

Wednesday, February 08, 2006

Acquisizione di Borland

Questa acquisizione deve far guardare positivamente al futuro di DELPHI?
Vedremo.
Segue Software - Quality Optimization Solutions for the Software Application Lifecycle
Da leggere anche il post di Bauer

Monday, February 06, 2006

FMS Technical Papers - Access within an Organization's Database Strategy

A proposito dell'importanza di Access in un contesto Office segnalo questo articolo.
FMS Technical Papers - Access within an Organization's Database Strategy
Il dibattito sul futuro di DAO è ancora molto acceso come dimostrano diversi forum.
In pratica la strategia MS sembra molto focalizzata su SQL Express. Comunque una domanda sorge spontanea: qual'è la durata di un'applicazione? Se uno sviluppatore deve (ma DEVE veramente?) cambiare tecnologia di sviluppo ogni 1-2 anni riesce a stare dietro alle richieste di modifiche delle vecchie applcazioni? Riesce a risolvere i problemi che emergono nei nuovi sviluppi? Quanti di noi scoprono dopo anni di esperienza comportamenti e stranezze di ambienti di sviluppo?
Ma allora è gisto cambiare ambiente di sviluppo all'affacciarsi di ogni nuova tecnologia?

Sunday, January 29, 2006

The Future of Access

Un articolo interessante sul futuro di MS Access.
Non è comunque chiaro l'interfacciamento/l'uso di ADO.NET
The Future of Access

Friday, January 27, 2006

Un ambiente di sviluppo completo

Cosa deve avere un ambiente di sviluppo per essere veramente completo?
Dal mio punto di vista gli elementi che devono essere presenti sono i seguenti:
1- IDE potente
L'IDE deve contenere un buon Forms Designer.
Oltre a fornire i controlli base dell'interfaccia (pulsanti, edit box, etc.) deve esistere un componente griglia non troppo complesso ma che consenta di personalizzare le colonne e di gestire le celle (TStringGrid di Delphi va + che bene)
L'IDE deve poter offrire meccanismi di gestione dati e di design di basi di dati (anche se questo può essere secondario).
2- Accesso ai database
Deve esistere un accesso "General porpouse" tipo ADO/ODBC per consentire di raggiungere potenzialmente ogni sorgente dati. In più non fa male avere dei meccanismi di accesso diretto qualora si ricerchi la performance
3- Tool di reporting
Un tool di reporting semplice e potente deve essere incluso nell'ambiente: quasi tutte le applicazioni devono produrre stampe e non è pensabile affrontare tutte le volte attività "banali" come la gestione dell'impaginazione, totalizzazioni etc.
4- Estendibilità
Deve essere possibile aggiungere nuovi controlli
5- No ambiente di run-time
I programmi devono essere compilati e distribuibili senza run-time

I miei ambienti di sviluppo attuali sono sostanzialmente 2.
Delphi
Praticamente soddisfa tutti i requisiti sopra anche se è un po' debole lato reporting: esistono una serie di componenti di terze parti (anche gratuiti) che hanno cercato di rimediare a questa lacuna.
Delphi è comunque ottimo per tutti gli applicativi di gestione dati o di tipo sistemistico.
MS Access
Ebbene si. MS Access praticamente ha tre grandi potenziali:
1. Consente di trattare in maniera centralizzata sorgenti dati diverse
2. Il designer è fortemente integrato con il codice: è possibile creare query parametriche, query di creazione tabelle e richiamarle dal codice senza problemi
3. Ha un tool di reporting incredibilmente potente
Con MS Access si ha la possibilità di lavorare con qualunque sorgente dati raggiungibile via ADO/ODBC. Il link di tabelle esterne consente di realizzare Queries CrossDB considerandole come tabelle proprie.
E' vero che Access è un ambiente per utenti finali facente parte di suite di produttività individuale (i vari Office), ma per sfruttarlo al meglio bisogna avere conoscenze di DBMS e di programmazione (visto che con VBA si fa praticamente di tutto).
MS Access è OTTIMO in realtà dove è necessaria una certa flessibilità ed in cui non ci sono problemi ad acquistare qualche licenza in più. Evidentemente non è l'optimum per realizzare prodotti commerciali. Può essere lo strumento migliore per far interagire sorgenti dati diverse.

Tuesday, January 24, 2006

History of the C family of languages

Articolo semiserio sulla storia dei linguaggi appartenenti alla famiglia del C.
History of the C family of languages.
In basso anche un riferimento al BASIC.

Tuesday, January 17, 2006

La vittoria degli IDE gratuiti?

In questi ultimi anni si sta affermando (anzi di fatto si è già affermata) la logica del Framework: una piattaforma tecnologia piena di oggetti pronti all'uso e sfruttabili dal programmatore.
Da un lato abbiamo la piattaforma Java, sempre più supportata da ambienti di sviluppo completi, molto ben fatti (Eclipse e Netbean) e gratuiti. Dall'altro la piattaforma .NET che con sebbene con una logica più commerciale fa nascere IDE gratuiti (SharpDevelop e gli ambienti Express di Microsoft).
Chi deve sviluppare un programma al giorno d'oggi non ha più il problema di spendere soldi per avere un IDE potente: può scegliere tra almeno 3 linguaggi (Java, C# e VB) e scaricarsi l'IDE adatto.
Chi ha fatto degli ambienti di sviluppo il suo business cosa deve fare?
Deve adottare una politica di riduzione prezzi e di penetrazione sul mercato; deve fornire più componenti per rendere lo sviluppo più produttivo, deve far si che il proprio IDE emerga soprattutto perchè più conveniente.
Delphi prima di tutto. Da unico ambiente per Win32 ad avere una libreria veramente potente (VCL) a suddito dei nuovi Framework!

Thursday, January 12, 2006

La nostra società "Strumento Oriented"

Provate a riflettere un attimo su come sono cambiate le cose da 10 anni a questa parte. Gli strumenti che utilizzavamo fino a pochi anni fa e che in una casa costituivano quasi un simulacro sono oggi stati rimpiazzati da "meraviglie tecnologiche" sempre più a buon mercato e sempre più evolute. Accade così che un Giradischi megagalattico di 10-15 anni fa, una macchina Reflex pagata qualche milione, siano oggi relegati ad un mercato di nicchia seguito perlopiù dalle vecchie generazioni.
Oggi esiste solo lo strumento, sempre più potente, sempre più economico, sempre più espandibile e di moda. Il fatto che un oggetto che oggi si paga 1000 domani si paghi 100 fa si che non ci sia più rispetto per lo strumento e per la sua tecnologia, anzi..., forse si spera che l'oggetto si rompa per poter così acquistarne uno nuovo.
Ma lo strumento a cosa serve?
Questo passa in secondo piano perchè se fino a ieri ci portavamo dietro 1, 2 cassette, 1 o 2 CD ora ci portiamo 100, 1000 canzoni. E se domani potremo portarne dietro 10000 o 100000 cosa ci faremo? Come faremo ad ascoltarle?
Oggi vogliamo il telefonino che faccia anche il caffè, la macchinetta digitale che abbia 7, 8 MPixel ma poi? Domani?
In questa corsa alla prestazione sempre più elevata, alla tecnologia sempre più spinta lo strumento diventa qualcosa che esiste non per essere usato per il suo fine, ma per essere posseduto; poi se con lo strumento si può anche telefonare Ok.

E nell'informatica?
Succede esattamente la stessa cosa. Gli strumenti (di sviluppo) sono sempre più belli, potenti e di facile utilizzo. Poi se si va a vedere nel dettaglio molte aziende non se lo sognano nemmeno di avere un PC con .NET installato per far girare un applicativo che ora hanno su Windows 3.1 e che fa quello che deve fare. Molti rimpiangono la semplicità di WordPerfect che faceva il suo dovere in DOS senza pericolo di Virus e di instabilità.

Ma allora questi strumenti di sviluppo nuovi a chi servono? E' giusto guardare avanti ma alla fine ciò che conta non è lo strumento ma ciò che ci facciamo.

Riscopriamo il vero senso delle cose e non facciamoci trascinare nel gorgo del consumismo a tutti i costi.

Monday, January 09, 2006

Installare Eclipse 2^ puntata

Ho seguito un approccio diverso per installare i Plug-in all'interno dell'IDE.
Per far ciò è necessario avere a disposizione una connessione ad internet attiva e lanciare il gestore dei plug-in (Software Update) dal menu Help.
Questo approccio garantisce una corretta installazione dei Plug-in e dei moduli dipendenti senza doverlo fare manualmente.
Ho scoperto questo approccio quando ho configurato Eclipse per gestire il design delle interfacce grafiche SWING in un PC diverso da quello su cui avevo usato l'approccio manuale.

Saturday, January 07, 2006

Captcha immagine

Per inserire o modificare un nuovo Post in questo Blog, è necessario inserire una immagine generata per controllare che chi sta inserendo sia un Umano e non un Computer. Queste immagini sono chiamate Captcha e garantiscono una protezione dallo Spam.
Ogni volta che vedo una di queste Captcha mi sorge spontanea una domanda: quale meccanismo sta alla base del riconoscimento di quanto inserito nell'immagine che noi Umani riusciamo a fare e che un programma non può fare? Tutto sommato le scritte sono quasi sempre ben leggibili (per noi Umani) ed anche un bambino che conosce l'alfabeto riesce a decifrarle. Quanta strada dovrà ancora compiere la nostra conoscenza del cervello per poter elaborare un programma di riconoscimento?

Friday, January 06, 2006

Eclipse

Dopo aver letto e visto questo articolo , mi sono deciso ed ho scaricato Eclipse. 105 MB circa per l'SDK che comprende l'IDE e consente la scrittura di codice Java (compilazione e Debug inclusi), nonchè la scrittura di Addins. In effetti lo scopo del progetto è molto ambizioso e vedendo i progetti connessi direi anche molto evoluto. In effetti pur non essendo presente (nell'SDK) una GUI per disegnare le forms Java, è stato sufficiente effettuare una ricerca per trovare il progetto VE. Scaricati e copiati i file JAR nella directory dei Plugins, ecco comparire un nuovo editor grafico per il disegno di interfaccie.
Una cosa che mi ha colpito è la qualità dell'insieme e la velocità di esecuzione (un po' lento risulta il "suggeritore" di codice che compare premendo il punto). Si capisce comunque subito che rispetto ad altri IDE per Java (JBuilder e NetBeans) questo mostra di avere qualcosa di diverso e di non essere un vestito confezionato per un solo linguaggio.
L'installazione è banale: scaricato l'SDK è sufficiente scompattarlo in c:\eclipse per avere il tutto funzionante. Le estensioni sono anche loro da scompattare nella stessa directory. Adesso proverò ad Eclipsarmi per un po'.

Thursday, January 05, 2006

Produttività negativa

Gli ultimi ambienti di sviluppo (VS 2005 e Delphi 2005/2006) sono molto curati e produttivi. Ma cosa succede se questi ambienti sono messi in mano a programmatori alle prime armi o addirittura a persone non preparate? Ebbene la presenza di Wizard, di help in linea e la grande mole di esempi, fanno si che questi "programmatori" riescano a produrre programmi che funzionano ma di cui non conoscono minimamente la struttura.
Piccole modifiche (ad un query per esempio) possono mettere in luce delle carenze su argomenti basilari. Così accade che la concatenazione di una stringa non si riesca a fare (perchè si confonde ciò che è nella stringa da ciò che è fuori dalla stessa), la dichiarazione di una variabile venga ripetuta nel codice (con errore in fase di compilazione)....

Ma allora è giusto che si dia tanta potenza e semplicità d'uso a chiunque abbia un computer? E' giusto che gli ambienti di sviluppo consentano di realizzare programmi che possono diffondersi e magari risultare dannosi? Sarebbe come progettare (e costruire) una casa sapendo utilizzare solo Autocad.

Wednesday, January 04, 2006

Report in Java

Come riportato su questi articoli (1 e 2) pubblicati sul sito di Week Italia esiste un tool di generazione report Jasper Report per il quale è stata scritta l'interfaccia grafica IReport.
Da una prima impressione il tool di disegno report è molto ben fatto.

Tuesday, January 03, 2006

L'importanza dei Blog tecnici

I blogs generalmente esprimono opinioni su temi che l'autore ha affrontato.
I blogs tecnici assumono spesso la forma di aiuti su aspetti spesso nascosti degli applicativi. Con lo spirito della condivisione della informazione è importante che chi ha qualcosa da dire lo dica anche a rischio di apparire superficiale.
Capita spesso (soprattutto per chi lavora nel mondo dell'informatica) di picchiare la testa su certi problemi anche per giorni interi.
Ebbene anche un suggerimento incompleto o non completamente esatto può far scoccare la scintilla.

Monday, January 02, 2006

Persistenza Presente e Futuro

Nello sviluppo di un nuovo applicativo si devono considerare un insieme di cose:
1. Il flusso logico
2. La rappresentazione dei dati
3. La memorizzazione dei dati
La programmazione ad oggetti semplifica molto i 3 passaggi ma richiede una forte progettualità. Inoltre all'atto della memorizzazione dei dati sorge il problema di prelevare i dati dagli oggetti, inserirli all'interno di tabelle del database e salvarli. Il processo inverso è evidentemente altrettanto complesso (leggere i dati dalle tabelle e ricreare gli oggetti in maniera opportuna).
I DBMS hanno una grande storia alle spalle e sono il modo più performante per gestire grosse moli di dati (grazie a SQL, stored procedure ed altro).
D'altro canto gli oggetti sono il modo migliore di gestire progetti di certe dimensioni nonchè per posizionare la logica applicativa in maniera corretta all'interno delle entità interessate.Le soluzioni proposte oggi per "fondere" i 2 punti di vista (di memorizzazione ed elaborativo) cercano di portare la memorizzazione dei dati nel DBMS il più vicino possibile alla rappresentazione in memoria dei dati stessi (relazione tra gli oggetti).
In particolare tra i framework (OR-Mapping):
- ECO framework per chi usa Borland Developer Studio (Delphi .NET e C#)
- Instant Object per chi usa Delphi per Win32
- Hibernate ed EJB per chi usa Java
Il principio su cui si basano è quello di frapporre uno strato SW tra il DBMS e la struttura ad oggetti, consentendo operazioni quali il recupero dell'oggetto direttamente dal DBMS ed il salvataggio di oggetti tra loro correlati.
Tra i Database (ODBMS):
- Matisse (è l'unico che ho provato)
Il principio su cui si basano è quello di esporre all'esterno Oggetti che si possono assegnare a variabili oggetto.

Un altro sistema di memorizzazione dei dati offerto dai framework ad oggetti è la persistenza degli stessi: in pratica gli oggetti possono salvarsi su files direttamente portandosi dietro tutti gli oggetti eventualmente riferiti. Questo meccanismo è il più orientato alla programmazione ed il meno orientato ai dati: lo stream di oggetti salvato su file non può essere consultato dall'esterno e non può essere aperto se non da chi ha progettato la struttura degli oggetti.

Insomma i DBMS devono rimanere perchè sono molto performanti; gli oggetti devono continuare ad esistere come metodologia di programmazione. Resta il problema di rendere la rappresentazione ad oggetti sul Database "chiara" per poter effettuare reports e query usando SQL.
Il futuro?
Microsoft sta lavorando ad un nuovo progetto LINQ Language Integrated Query per rendere uniforme il reperimento dati tra DBMS e collezioni di oggetti.
Staremo a vedere.

Sunday, January 01, 2006

BUON ANNO 2006

A tutti coloro che navigano, a tutti coloro che programmano, a tutti gli appassionati.
BUON 2006!