Prima di tutto, vi ringrazio per i complimenti. Mi fa piacere che il programma venga apprezzato!
Tenete conto che si tratta di un progetto abbastanza piccolo, quindi non è poi così strano che io conosca a memoria abbastanza bene quasi tutti i meandri dell'implementazione del codice.
Robert8 ha scritto:Siccome con la nuova versione, quando creo un disegno, il null è scomparso, ma se visualizzo il sorgente di altri il null appare di nuovo, ho escluso il caso 2 e desunto che anche altri avessero ancora la versione precedente.
Cerco di essere più esplicito anch'io. Quando FidoCadJ legge il codice, quello che fa è in qualche modo creare gli elementi che sono associati ad ogni comando e mantenerli in memoria in una specie di tabella/database.
Questa tabella/database viene per esempio scorsa ogni volta che il disegno viene tracciato sullo schermo del calcolatore, perché ogni elemento contiene tutte le informazioni necessarie. Questo modo di procedere ha anche il vantaggio di poter immagazzinare nella tabella qualche informazione in più dello stretto necessario. Per esempio, i ridisegni in FidoCadJ avvengono molto di frequente, molto di più di quanto non accadesse con il vecchio FidoCAD per Windows (senza entrare nei dettagli, il motivo è legato al trend della grafica in questi ultimi anni, con antialiasing ed effetti di trasparenza). Quindi, per velocizzare il ridisegno, nella tabella viene memorizzata tutta una serie di dati precalcolati per ogni elemento. Il codice testuale del disegno, invece, non viene mai conservato da nessuna parte.
Quando il codice di un disegno viene interpretato, un parser si occupa di creare questa tabella. Quando si fa copia/incolla, oppure si salva su un file, la tabella viene scorsa ed ogni suo elemento si occupa di creare i comandi che gli competono, e che danno poi luogo al codice che ben conoscete.
Qui c'è da dire che il copia/incolla avviene in due maniere distinte:
- Il modo più semplice è quello attivo quando l'opzione "suddividi macro non standard durante il copia/incolla" NON è attiva: qui si scorre la tabella e quando si incontra una macro si sputa fuori solo il riferimento al nome della macro
- Quando c'è da suddividere le macro, bisogna invece "entrare" all'interno della macro e scomporla in elementi di base.
La seconda strategia è molto simile a quanto avviene con l'esportazione verso un formato grafico. Esportando in EPS non posso far riferimento a librerie interne a FidoCadJ e sono quindi obbligato a separare sempre le macro in elementi di base! Per quello, chi scorre il codice Java di FidoCadJ constata (spesso con stupore) la presenza di una classe che... esporta i disegni FidoCadJ in FidoCadJ. L'esportazione avviene sempre su un file, quindi quando l'opzione "suddividi macro non standard durante il copia/incolla" è attiva, viene creato un file temporaneo che poi viene letto ed il contenuto caricato nella clipboard. Dopodiché il file temporaneo viene distrutto.
Beh, leggendo il file temporaneo, nella versione 0.23.5 e 0.23.6 viene erroneamente letta una riga in più del necessario! Questa riga non esiste e viene prodotto il famoso null che appare nel codice di chi utilizza ancora queste vecchie versioni.
Su questo sono controcorrente: non penso che utilizzare sempre le ultime versioni di un software sia sempre una buona idea. Personalmente, ho osservato che le nuove versioni di qualcosa che funziona bene tendono a diventare sempre più grosse, pesanti, lente e piene di bug. In questo caso, però, la strategia della versione 0.23.7 è stata di non fare nulla di più della 0.23.6, ma farlo meglio e quindi alcuni bug importanti e/o fastidiosi sono stati eliminati.
Mi sono permesso di consigliare l'aggiornamento, perché, a mia conoscenza, la versione 0.23.7 è la versione più veloce e stabile di FidoCadJ che è uscita finora.
In questo momento, sono al lavoro sulla versione 0.24, che però introdurrà alcune novità e quindi inevitabilmente alcuni bug. Su Sourceforge, cerco di mantenere disponibili tutte le versioni di FidoCadJ uscite, salvo forse le prime quando ancora non lavoravo su SF con SVN.