Autore Topic: Progetto pgDesigner 2/3  (Letto 86634 volte)

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Progetto pgDesigner 2/3
« il: 23 Agosto 2008, 19:19:55 »
Ciao a tutti !

Sono circa due anni che ho pubblicato su sourceforge.net il programma pgDesigner che, per chi non ne fosse a conoscenza, è un programma per il disegno grafico di database per PostgreSQL, simile a programmi del tipo ErWin, DBDesigner, ecc.
Il programma è scritto totalmente in Gambas2 e, con piacevole orgoglio, sembra sia usato da parecchie persone in giro per il mondo.

Il perchè ho usato Gambas, come descritto anche nella documentazione e sul sito, è stato per una scommessa con me stesso, e per dare una piccola mano alla divulgazione di questo bel linguaggio. Potevo scriverlo in qualsiasi altro linguaggio, magari tra quelli più blasonati e potenti, ma anche il fatto di cercare e risolvere i problemi che Gambas mi ha posto e mi pone sul cammino, è stata per me fonte di soddisfazione.

Dopo tutto questo tempo, passato a studiare tutte le possibilità che Gambas ha offerto durante tutti i suoi rilasci, riscrivendo spesso e volentieri l'intero applicativo, pgDesigner è arrivato alla versione 1.2.8, in uno stato accettabile di usabilità, come ritornato dagli utenti che lo stanno usando.

Come molti di voi sapranno sicuramente, e dato che il progetto è nato senza uno studio a tavolino, il programma è arrivato ad un limite che, a mio avviso non è possibile superare, anche dato dal fatto che la logica con cui è stato scritto ormai non è più manutenibile.

A questo punto, con l'esperienza fatta, ho deciso un paio di mesi fà di ristrutturare l'intera logica del programma, e costruire da capo una nuova struttura, con codice il più possibile espandibile ed adattabile, oltre al risolvere alcuni problemi legati alla parte grafica. L'idea sarebbe anche quella di poter implementare in pgDesigner anche funzionalità legate ad altri database (es. sqlite, mysql, ecc.).
A tutt'oggi sono arrivato ad una versione alpha, funzionante, ma ho necessità di eseguire test approfonditi, per portare l'applicazione ad una versione distribuibile.

Dato che il progetto, open-source, l'ho portato avanti nel tempo libero, e che questo tempo non è sempre sufficiente per fare le cose che si vuole fare, chiedo, a chi può ed è interessato al progetto, una mano sia per i test, sia per eventuali collaborazioni per implementazioni, suggerimenti, documentazione, traduzioni, ecc.

Grazie a todos!

g.paolo

  • Visitatore
Re: Progetto pgDesigner 2
« Risposta #1 il: 24 Agosto 2008, 18:33:30 »
Premesso che sono un pivello al tuo cospetto, ricorderai forse come il mio ingresso in gambas mi abbia portato all'uso di sqlite3 per la semplicità d'uso visto che non si appoggia ad un server come PostgreSql (spero di non aver detto una castroneria).
Noto con piacere che vorresti implementare nel tuo programma anche il tipo di DB al quale mi appoggio, pertanto considerami disponibile a fare il tester nel momento in cui questa funzionalità sarà disponibile.
Buon lavoro!

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: Progetto pgDesigner 2
« Risposta #2 il: 25 Agosto 2008, 12:42:31 »
Ti ringrazio e ti farò sapere.

Al momento le funzionalità sono sempre per PostgreSQL, e se riesco a raggiungere uno stato ottimale, inserirò anche la parte sqlite.

Per ora stò cercando qualcuno che possa aiutarmi a testare le funzionalità presenti, e per alcune non è necessario essere esperti in postgres; la parte di disegno, di gestione dei progetti, ecc., sono procedure comuni, ma che necessitano di essere testate. Anche semplicemente capire se il nuovo motore grafico che ho messo in piedi, diversamente da quanto fatto nella versione 1, sia gestibile e non crei problemi.
La parte, in effetti più difficile, è proprio la gestione del disegno che, usando le librerie base di Gambas (non le GL), ho dovuto inventarmi alcuni arzigogoli a causa della loro lentezza.
Oltre a questo, anche un parere su l'interfaccia applicativa sarebbe gradita.

Una cosa che mi stà rodendo il fegato, è il fatto di non riuscire a trovare delle icone ad-hoc.

Grazie ancora, ti tengo in lista.

Ciao

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: Progetto pgDesigner 2
« Risposta #3 il: 06 Ottobre 2008, 14:47:06 »
Come avevo già accennato, ho cercato di espandere il programma in modo da poter gestire, oltre PostgreSQL, anche MySQL e SQLite (come richiesto da qualcuno...).
Questo per segnalare che sono arrivato ad un punto in cui occorre fare dei test, per cui, se qualcuno ha pazienza ed è disposto ad aiutarmi, è il benvenuto.

Oltre a questo sono alla ricerca di persone disposte a tradurre il programma in varie lingue (al momento: italiano, inglese, francese, spagnolo e...cinese).

Ad ogni modo, qualsiasi tipo di contributo sarà bene accetto, anche se si tratta di suggerimenti.

Non ho ancora inserito la versione alpha in sourceforge.net, perchè mi piacerebbe raggiungere uno stato di relativa funzionalità, ovvero l'esser certo di non aver lasciato qualche grossa magagna.

Chi è disposto ad aiutarmi nell'impresa, può anche inviarmi un messaggio in privato.


Ciao e grazie a tutti!

g.paolo

  • Visitatore
Re: Progetto pgDesigner 2
« Risposta #4 il: 07 Ottobre 2008, 09:00:41 »
Molto bene! Se posso provare con sqlite mi sarebbe proprio utile. Posso scaricare l'ultima versione da codesto sito, o pensi di mandarlo per email?

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: Progetto pgDesigner 2
« Risposta #5 il: 07 Ottobre 2008, 11:41:26 »
A dir la verità ci stò pensando...

Non sò se è il caso di appoggiare temporanemanete qui i sorgenti...

Vediamo se leo è disposto alla cosa, perchè comunque, a versione stabile, dovrò inserirlo su sourceforge.

Ora provo a inviargli un msg in privato, vediamo cosa ne pensa...

Tieni conto che ovviamente si tratta di sorgenti, e sarà necessario disporre dell'intero ambiente Gambas2 (2.8.2).

Citazione

Nota:
Per SQLite, ho predisposto le funzionalità per gestire sia la versione 2, che la 3, anche se non ho notato differenze sostanziali tra le due. Ho fatto i test di connessione e lettura, e funzionano, ma ancora non ho potuto eseguire quelli di scrittura; per quanto riguarda l'output su file, dovrai vedere se esce tutto in modo corretto.
Stessa cosa per MySQL, per il quale sono partito dalla versione 5.x. Dato che anche MySQL ha subito molti cambiamenti nel tempo, rispetto a PostgreSQL, studiarmi tutte le differenze delle versioni mi è sembrato alquanto oneroso; ad ogni modo, il driver è espandibile, e quindi se qualcuno, oppure ci sarà tempo, si potrà implementare successivamente.

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: Progetto pgDesigner 2
« Risposta #6 il: 08 Ottobre 2008, 01:32:37 »
leo ha risolto il problema, sistemando le cose nel miglior modo possibile.

Dato il problema degli aggiornamenti, posterò di volta in volta in questo thread, tutti gli aggiornamenti, e questo stesso thread servirà oltre che come repository e come punto di riferimento per lo scambio di informazioni relativamente al programma pgDesigner2.

Come già richiesto inizialmente, qualsiasi tipo di aiuto mi sarebbe indispensabile, per poter arrivare alla produzione di un prodotto finito e stabile.
E' ovvio che la cosa poi non finirà, perchè collaborando potremo ampliarlo come vogliamo.
E' anche ovvio che la disponibilità di tempo è dipendente dalle proprie attività, come anche per me, per cui non dobbiamo sottostare a scadenze particolari. Stesso discorso per il tipo di esperienza, perchè qualsiasi tipo di contributo sarà ben accetto; chi poi ha le compentenze necessarie potrà metterle a disposizione nel modo che più desidera.
L'unico obiettivo è quello di farne un programma degno di essere usato, cercando di sfruttare tutte le possibilità che ci dà Gambas.

Allo stato attuale, pgDesigner ha bisogno:
Codice: [Seleziona]

- collaudo delle funzioni
- particolare collaudo delle funzionalità legate ai db:
     PostgreSQL, MySQL e SQLite
- traduzioni
- scrittura del manuale utente (italiano e inglese)


a) Riguardo PostgreSQL ho abbastanza domestichezza con questo DBMS, MySQL poco meno, mentre per SQLite occorre qualcuno che abbia un pò di esperienza.
b) Al momento documentazione tecnica non ne ho, dato che per i programmi che costruisco da solo uso solo la capoccia e ho una leggera allergia ai programmi office.
c) Le funzioni sono tante, come anche le classi e gli oggetti che compongono il programma, per cui il tempo per i test si può ridurre drasticamente solo grazie alla collaborazione di più persone.
d) Per le traduzioni in inglese mi sono sempre arrangiato da solo (pure male per la verità), mentre ho avuto qualche aiuto estero durante lo sviluppo di pgDesigner1. Seguendo il vecchio pgDesigner1, si dovrebbe riuscire ad implementare: inglese, francese e spagnolo; per il cinese credo sarà un problema :-)
e) Riguardo al manuale utente, si potrebbe prendere come base quello del vecchio programma, ma ci sarà da lavorare parecchio a causa delle molte novità inserite nella nuova applicazione. Tanto per la cronaca, a parte il documento cartaceo, all'indirizzo sourceforge.net è presente la documentazione in formato web. Nel caso qualcuno ne faccia richiesta, sarò ben felice di postare anche questo nel thread (sperando che leo non mi uccida...).

Ricordo ancora che il progetto è open-source, ed è aperto a tutti, e dato che siamo in ambito Gambas, i sorgenti possono servire anche come spunto per altri progetti.
Questo progetto mi ha dato modo di conoscere molto del linguaggio, e credo che la mia esperienza potrebbe servire a qualcun'altro.

Per finire, in allegato invio il file compresso, contenente i sorgenti dell'ultimissima versione. I file che posterò da ora in avanti saranno targati come alpha, seguito da un numero di build che corrisponde alla versione che ho salvato nel mio repository, e qualsiasi riferimento dovrà essere fatto sulla base di questa numerazione.

P.S.: attualmente il file compresso occupa poco più di 1Mbyte.

Un saluto a tutti.

g.paolo

  • Visitatore
Re: Progetto pgDesigner 2
« Risposta #7 il: 10 Ottobre 2008, 15:53:01 »
Per quello che può valere, cerco di dare il mio piccolo contributo.
Ho provato il prg all'interno dell'IDE di Gambas ed ho riscontrato quanto esposto nello screenshot allegato.

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: Progetto pgDesigner 2
« Risposta #8 il: 10 Ottobre 2008, 19:16:09 »
Qualsiasi tipo di aiuto è valido, l'ho scritto più volte nei miei post...

Comunque, tieni conto che il programma è in continua mutazione, per cui è probabile che si verifichino errori come quello che mi hai segnalato.
Il tuo contributo è essenziale, la fase di test è una cosa onerosa se fatta da una sola persona.

Dunque, dal post-it si evidenziano:

a) un piccolo errore dell'etichetta "Dimenzioni"... Ok, provvedo a modificare la traduzione. Per mantenermi sullo standard, ho impostato il programma sulla base della lingua inglese, anche dietro richieste di utenti del precedente pgDesigner, che non comprendevano le note all'interno codice; questo mi fatto decidere sulla lingua di partenza: inglese. Le traduzioni poi le faccio con l'opzione nell'ide di Gambas, o con programmi esterni, ma a volte, in velocità, si inciampa nei tasti... :-)

b) l'errore in uscita credo che molto probabilmente sia dovuto ad un errore di impostazione di un array di ritorno. In Gambas ho notato che se si crea un array, il primo valore determina il tipo di tutti gli elementi, e se questo è nullo (NULL), oppure non riesce a risolverlo, allora và in errore. A parte la probabile svista nel programma, la cosa si evita semplicemente convertendo gli item nel tipo con cui si è definito l'array, esempio:

Codice: [Seleziona]

DIM arr AS String[]

arr = ["luigi", "franco", "giulia", ...]

nell'esempio la cosa non crea problemi, in quanto all'array vengono passate delle costanti fisse, ma nel caso di:
Codice: [Seleziona]

DIM arr AS Long[]
DIM v1 AS Long
DIM v2 AS Integer = 5

arr = [v1, v2]

l'array può andare in errore per due motivi: 1) la variabile "v1" non è stata inizializzata, 2) la variabile "v2" è di tipo diverso. In ogni caso le variabili, prima di essere usate, devono essere inizializzate, o con valori fissi, oppure da un ritorno di una funzione; nel caso di "v2" questa, pur essendo inizializzata, è di tipo diverso ma, se prendiamo lo stesso codice e sostituiamo la creazione dell'array con:
Codice: [Seleziona]

v1 = 9
arr = [v1, CLong(v1)]

a questo punto "v1" la inizializziamo con un valore, e "v2" la convertiamo nel tipo corretto, passiamo gli elementi all'array, e tutto funziona.

Un'altra nota circa gli array: se si passa ad una funzione un array nel seguente modo:
Codice: [Seleziona]

var = CalcolaElementiArray( [] )

nell'esempio passiamo alla funzione un'array vuoto, ma la funzione come lo interpreterà questo array? Di che tipo è? ...
Bè, strano a dirsi, ma Gambas lo interpreta in un array stringa vuoto.
Se invece alla funzione gli passiamo un array in questo modo:
Codice: [Seleziona]

var = CalcolaElementiArray( [1,2,3,4,5] )

la funzione come interpreta questo array? Un array di Integer !
Il bello e il brutto del discorso, è che se vogliamo trattare un array correttamente, dobbiamo riempirlo di elementi del tipo corretto:
Codice: [Seleziona]

var = CalcolaElementiArray( [CLong(1),2,3,4,5] )

in questo modo la funzione capirà che l'array passato è di tipo Long, NON Integer.

Vabbè questa disquisizione forse dovevo scriverla direttamente nel WiKi, ma non escludo di farlo in futuro; ad ogni modo questo thread serve anche a questo...

Grazie e continua così, questo tipo di test servono !!!

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: Progetto pgDesigner 2
« Risposta #9 il: 11 Ottobre 2008, 18:19:00 »
Nuovo rilascio!

Ho fatto parecchie modifiche a correzione di alcuni errori, e il rifacimento di gran parte del codice delle Form di edit degli oggetti.

Nota: Nei progetti PostgreSQL e MySQL è possibile inserire delle Relazioni, ovvero le classiche foreign-key tra due tabelle. Per creare questo tipo di oggetto, che graficamente appare come una linea tra due tabelle, occorre selezionare dal menu un nuovo oggetto Relazione, puntare con il mouse sulla prima tabella (padre) e tenere cliccato con il tasto sinistro del mouse, indi spostarsi sulla seconda tabella (figlia) e rilasciare il pulsante del mouse; durante l'operazione sarà visibile una linea retta, che rispecchia il tracciamento che si stà compiendo con il mouse. Al rilascio del pulsante, se non esistono particolari condizioni di divieto, comparirà la Form di dialogo per la modifica delle proprietà della nuova relazione (foreign-key).
Condizioni:
a) i due oggetti in relazione devono essere ovviamente due tabelle;
b) le due tabelle devono avere almeno un campo;
c) la tabella padre deve avere una chiave primaria.
Nel caso si presenti una di queste condizioni, la procedura viene abortita.

Ringrazio ancora l'amico darth14n per il suo intervento, che mi ha fatto notare qualche mia svista...  :2birre:

g.paolo

  • Visitatore
Re: Progetto pgDesigner 2
« Risposta #10 il: 12 Ottobre 2008, 16:28:29 »
E rieccomi con un altro problemino ancor prima di cominciare.
Ti allego la schermata di errore affinchè tu possa capire. Ciao.

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: Progetto pgDesigner 2
« Risposta #11 il: 13 Ottobre 2008, 13:15:55 »
Grazie, il tuo aiuto è fondamentale!

La tua segnalazione, oltre ad evidenziare alcuni piccoli problemi con l'interfaccia, mi ha permesso di scoprire invece dei grossi problemi con il driver per SQLite, che credo di aver corretto e le modifiche sono inserite in quest'ultimo allegato.
Circa SQLite e Gambas, ho dovuto rivedere alcune cose che avevo inteso in modo non corretto; inoltre ho implementato un paio di tipi che invece Gambas prevede con questo tipo di database.
Diversamente da PostgreSQL, il driver di pgDesigner per SQLite si appoggia completamente alle funzioni di Gambas, per quanto riguarda la definizione dei campi di una tabella, a causa dell'assenza di funzionalità adatte per rilevare queste info direttamente dal database. Quindi, Gambas, determina in qualche modo i tipi corretti ma, da quello che ho potuto constatare, le dimensioni sembrano essere più rivolte al linguaggio che al database, nel senso che, ad esempio, TEXT nel database è un campo stringa di dimensioni non fisse, ma se qualcuno usa la sintassi VARCHAR(x), allora Gambas ritorna anche questa dimensione, ma non è corretto almeno per quanto riguarda pgDesigner; a causa di questo ho provveduto a mettere a zero la dimensione del campo, sempre e comunque, e non verrà usata nella costruzione delle query in uscita.

In allegato l'ultimo build.

Grazie ancora, continua così!

Io nel frattempo stò sistemando e ottimizzando il programma, eseguendo anche dei test, ma soprattutto cercando di migliorare e rivedere le varie funzioni.

Ah, una cosa! Nella finestra di login ho inserito un pulsante, visibile solo per SQLite, con cui si può selezionare il file di database tramite una classica finestra di dialogo, così da evitare di scrivere manualmente tutto l'indirizzo; inoltre, oltre a correggere gli errori che mi hai segnalato, ho fatto in modo che il cambio del driver al volo, azzeri correttamente i campi sottostanti.
Credo che avrai notato anche la barra verticale alla destra della finestra di login, se la clicchi questa si apre, mostrando lo storico dei collegamenti divisi per tipo di database, il doppio click su una delle righe riporta le informazioni nei campi di login (tranne la password), in modo da non riscrivere ogni volta le stesse info.

Ciao

g.paolo

  • Visitatore
Re: Progetto pgDesigner 2
« Risposta #12 il: 14 Ottobre 2008, 16:55:02 »
Altro piccolo problema! Il file Sqlite3 che tento di aprire è senza estensione e porta il nome "3M_immobiliare".
Quando tento di aprirlo cliccando sull'icona cartella a dx della casella "database", mi compare correttamente la finestra di scelta.
La cosa molto strana è che il file viene ignorato e non è reso visibile all'interno della cartella selezionata.
Dipende dalla mancanza di una estensione o dal fatto che inizia con un numero?

Offline ccc

  • Gambero
  • **
  • Post: 97
    • Mostra profilo
    • http://santecaserio.altervista.org/
Re: Progetto pgDesigner 2
« Risposta #13 il: 14 Ottobre 2008, 21:35:26 »
Caro MD, ancora non ho potuto vedere che una piccola parte del tuo programma, ma mi sembra ottimo. Tra l'altro grazie a nome di una buona fetta dell'umanità: credo che non esistano programmi capaci di generare diagrammi E/R per db MySQL, su Linux.

Ti segnalo due problemi:

* Quando crei una tabella, nella textbox dove devi specificare le dimensioni, puoi scrivere soltanto cifre. A te sembrerà abbastanza logico. Purtroppo, non va bene nel caso uno voglia creare un campo ENUM o SET, perchè la sintassi è la seguente:

ALTER TABLE bla bla bla ADD COLUMN bla bla bla ENUM('m', 'f')

Le GUI generalmente fanno scrivere 'm', 'f' nella textbox delle dimensioni, lo fanno anche MySQL Query Browser e Phpmyadmin.

* Ho visto che non dai la possibilità di scrivere manualmente i tipi, va benissimo, però allora è necessario includere i tipi geometrici, anche se supportati solo da MyISAM:

- GEOMETRY
- POINT
- LINESTRING
- POLIGON
- MULTIPOINT
- MULTILINESTRING
- MULTIPOLIGON
- GEOMETRYCOLLECTION

Spero di esserti stato d'aiuto.

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: Progetto pgDesigner 2
« Risposta #14 il: 15 Ottobre 2008, 10:33:19 »
Il fatto che il file non è visibile non dipende da pgDesigner, dato che usa l'oggetto Dialog.OpenFile() per la selezione del file di database.
Non credo neanche sia un problema di Dialog, perchè non ho mai riscontrato problemi simili.
L'unica cosa mi viene in mente, è che forse hai qualche impostazione dell'ambiente Gnome che limita la visualizzazione; ma la cosa è molto strana, perchè a quanto mi risulta l'unica impostazione è la possibilità di nascondere solo i file che iniziano con il punto (file nascosti), a meno che il file non abbia qualche impostazione chmod che comunque obbliga ad un comportamento anomalo.

Da parte di pgDesigner, non esiste alcuna limitazione sulla nomenclatura dei file sqlite, almeno per quanto riguarda la lettura da database; l'unica limitazione è sul tipo di file che pgDesigner produce, relativamente ai report e ai file sql.

Inoltre, fai sempre presente quale versione stai usando per i test, a meno che non sia proprio l'ultimissima, perchè le modifiche che faccio ogni giorno sono tante, e a volte a correzione degli stessi errori che mi vengono segnalati.

Fammi sapere, e grazie per l'aiuto, ci voleva proprio!