Italian community of Lazarus and Free Pascal

Programmazione => Generale => Topic aperto da: graffaele - Marzo 12, 2012, 11:25:32 am

Titolo: Lazarus e MacBook
Inserito da: graffaele - Marzo 12, 2012, 11:25:32 am
Ciao, spero di non aver sbagliato sezione...

Come ho scritto da altre parti sul forum, sono un programmatore Delphi dalla versione 2 a quella attuale, che ha iniziato a sperimentare Lazarus soprattutto per le sue qualità "cross-platform". In particolare mi sarebbe molto utile poter esportare i miei progetti su Mac.

Sabato ho fatto un primo esperimento: ho realizzato un piccolissimo programmino che si collega ad un DB SQLite e visualizza in una griglia un elenco di dati anagrafici. In Windows funziona perfettamente. Ho quindi preso tutto il progetto, incluso il DB SQLite, e l'ho portato su un MacBook dove avevo precedentemente installato Lazarus per tale sistema (incontrando non pochi problemi, dove per Windows non ne avevo praticamente avuti...).

Ho aperto il progetto, l'ho compilato ma non ci sono riuscito. :-(

In questo momento non ho con  me il Mac e non ricordo esattamente quale fosse il problema, ma nel caso qualcuno mi risponderà potrò essere più preciso. La cosa che vi chiedo per il momento è: ma c'è qualcuno di questa comunità che è riuscito a compilare senza problemi uno stesso progetto senza cambiargli una virgola su questi due sistemi?

Vi anticipo che ho utilizzato solo componenti presenti su "Data controls", "Data access" ed "SQLdb", che credo siano cross-platform.

Grazie per l'attenzione. ^_^
Titolo: Re:Lazarus e MacBook
Inserito da: xinyiman - Marzo 12, 2012, 11:28:27 am
Anticipo che non possiedo dei mac quindi vado per intuizione. Su windows per far funzionare l'applicativo hai dovuto mettere le dll per accedere a sqlite nella stessa cartella del tuo eseguibile. Non è possibile che bisogna fare qualcosa di analogo anche su Mac?!
Titolo: Re:Lazarus e MacBook
Inserito da: graffaele - Marzo 12, 2012, 11:36:43 am
azz! mi hai fatto sentire proprio un pivellino...  ;)

effettivamente mi ero "portato dietro" anche la dll, ma giustamente credo che quella usata per Windows non vada bene.... controllo il sito di SQLite, appena posso usare il mac faccio un paio di prove e ti faccio sapere...  :)

P.S.: xinyiman, ma passi tutte le tue giornate su questo forum?  ;D  ;)
Titolo: Re:Lazarus e MacBook
Inserito da: xinyiman - Marzo 12, 2012, 11:40:16 am
No, e che lo tengo sempre aperto e se ogni tanto vedo che c'è qualcuno che ha bisogno di aiuto e se non mi richiede troppo tempo il suggerimento allora provvedo! Invece gli esempi e le guide le preparo a casa la sera e poi il mattino le posto perchè al lavoro ho una linea più veloce.
Titolo: Re:Lazarus e MacBook
Inserito da: darione - Marzo 15, 2012, 03:58:50 pm
ma c'è qualcuno di questa comunità che è riuscito a compilare senza problemi uno stesso progetto senza cambiargli una virgola su questi due sistemi?

Senza cambiare nulla la vedo dura. Io ad esempio, compilando in un Leopard virtualizzato con vmware, ho dovuto cambiare backslasch e forwardslash (tutte le volte che apro o salvo un file applico una funzione al nome del file che lo corregge a seconda del sistema dove sto compilando). Avendolo compilato in linux, pensavo il trasferimento in mac fosse indolore. Invece poi mi sono accordo che application.exename non mi dava esattamente la stessa cartella, ma fai conto mi buttava dentro la mia root di progetto (come windows) ma poi andava dentro altre sottocartelle, che pure erano nascoste (andando con findere dentro la cartella del progetto non le vedevo).Così con una funzione ho tagliato le sottocartelle che mi creava sul mac.
Mi era preso un colpo pensando che il TFileListBox non funzionasse in Mac, invece era questo strano comportamento di restituire una path di lancio differente dal compilato in windows.
Poi basta,ma non usavo database, ma solo file di testo. Ogni libreria dll aggiuntiva, certo serve nella versione relativa al sistema operativo usato.

Darione

Titolo: Re:Lazarus e MacBook
Inserito da: CortelliStefano - Maggio 02, 2012, 12:23:47 pm
Ciao, la mia esperienza per quanto riguarda la portabilità del codice con Lazarus è sicuramente positiva, ma compilando in nativo occorre tenere presente che le interfacce dei vari sistemi hanno comportamenti a volte diversi.

Anch'io la vedo dura compilare senza cambiare nulla. Piuttosto diciamo che una volta impostati alcuni accorgimenti la cosa diventa molto più facile.

Vedo essenziale per esempio inserire almeno una variabile/costante globale che identifichi il sistema, per potere poi apportare delle modifiche sul codice quando occorre, a volte può essere necessario inserire qualche direttiva di compilazione, cosa  che quando è possibile cerco di evitare.

Le differenze tra un S.O. e un altro ci sono, e non potrebbero non esserci, compilando in nativo. A parte le piccole cose, come il / o \ nei path dei files, o il percorso dell'eseguibile che sotto Mac fa riferimento al bundle, oppure il carattere di ritorno a capo, su progetti complessi il problema maggiore è il comportamento dei vari componenti.

E qui, sotto Mac, perlomeno con la Carbon che comunque è l'interfaccia più supportata (tra l'altro con Lazarus 0.9.28.2 ho problemi a compilare con le GTK2), si notano molte differenze rispetto alle GTK2 o alle WIN32. Differenze che su form complesse possono anche creare dei problemi, per esempio quando l'evento Change sotto Carbon si verifica anche a componente disabilitato mentre sotto GTK o WIN32 no, oppure quando scopri che su una DbGrid con Enabled = False sotto Mac/Carbon viene comunque mantenuto attivo lo scroll con il mouse.

Poi le stesse caratteristiche dei componenti hanno a volte piccole differenze grafiche, dalla ComboBox che sotto GTK2 deve avere altezza minima 27, ai bottoni che con le GTK devono avere un'altezza maggiore rispetto a Carbon o Win32 perché il testo sia leggibile.

O ancora che la lunghezza di una ComboBox sotto Mac non sia sufficiente per visualizzare tutto il testo delle voci, magari perché più arrotondata rispetto alle altre interfacce. O infine che che i bottoni sotto Mac/Carbon sembrano non recepire la possibilità di prendere il focus e quindi non puoi preimpostare un bottone (p.es. OK) che poi l'utente può confermare con Invio senza toccare il mouse.

Oppure puoi andare a scoprire che un MessageDlg posto nell'evento OnExit di un controllo, che funziona perfettamente sotto GTK2 e Win32, sotto Mac manda in loop l'applicazione.

Con Mac, poi, c'è anche da considerare l'hardware differente, tasti funzione di default utilizzati dal sistema, che magari tu hai utilizzato nel tuo programma. Oppure anche differenze minori, ma che rendono consigliabile prevedere una differenziazione sotto Mac, per rendere il programma più rispondente alle esigenze di chi lo usa, di chi è abituato a lavorare in un modo che non è lo stesso del pc.

Considera anche che lo sviluppo per Mac è più "giovane" anche per Lazarus, qualche baco in più c'è sicuramente, la stessa IDE presenta talvolta qualche problema e se vedi nella RoadMap alcune funzioni della Carbon sono ancora solo parzialmente supportate. Ad esempio il TCalendar manca sotto Carbon e se usi un TDateEdit ad il calendario non lo visualizzi.

Questo per dire che la compilazione multipiattaforma è comunque qualcosa di eccellente, se pensi che compila in nativo. Lazarus (Open Source) ha raggiunto un traguardo che Delphi (commerciale) non ha raggiunto (men che meno dopo il naufragio del progetto Kylix). Ma non si può pensare che lo stesso codice lo compili subito, senza fare nulla, su tutti i S.O. target possibili.

Invece, con un po' di pratica e di esperienza, arrivi a scrivere un codice che sia il più possibile uguale per tutti i sistemi, perché conosci le caratteristiche che ogni sistema presenta. Magari evitando di fare il ricorso ad API, proprie di ciascun sistema operativo, se non strettamente necessario, e quando necessario prevedere apposite direttive di compilazione.

L'ideale, sicuramente, sarebbe quello di testare il progetto sui sistemi che ti interessano durante lo sviluppo, anche se a volte questo non è sempre possibile, capita per esempio che vuoi fare il porting su di un nuovo S.O. di un progetto che hai già , e qui un po' di lavoro è da mettere in conto.

Senza dimenticare che anche lo stesso porting dei componenti non e' sempre scontato, io per esempio sono riuscito a risolvere grazie a questo forum, e solamente con l'aiuto di Stilgar, un problema che non mi permetteva di fare funzionare PowerPdf sotto Mac (a proposito: grazie ancora a Stilgar!).

Infine, anche per quello che può essere il problema che ti si è presentato, la versione Mac di Lazarus necessita di aggiungere il path dei componenti al file fpc.cfg, e poi soprattutto di aggiungere nelle opzioni del compilatore del progetto i path necessari alle stesse directories di Lazarus, dalla lcl alla interfaces, ecc..

Concludendo, Lazarus è una piattaforma di sviluppo fantastica, ti permette di compilare in nativo un codice che girerà incredibilmente più veloce rispetto a Java o Python e che si integra perfettamente con l'interfaccia del S.O. target.

Essendo in nativo, devi al tempo stesso tenere in considerazione le caratteristiche di ogni interfaccia, che è il rovescio della medaglia. Non è e non sarà mai come Java o Python, nel bene e nel male (per me è comunque più un bene che un male, preferisco senza dubbio la compilazione in nativo).

Conoscendo i punti critici delle varie interfacce, potrai scrivere un codice che compilerai sotto i vari S.O., anche grazie all'utilizzo di una costante o variabile che identifica il tuo sistema (o delle direttive di compilazione) nei casi in cui è necessario.

Quello che trovo auspicabile sarebbe magari la realizzazione di HowTo, magari se non in italiano per lo meno nelle lingue principali (non esiste solo l'inglese), che possa dare qualche consiglio perché il codice possa essere portato nella maniera più fluida possibile, indicando i punti che presentano differenze nei vari sistemi.

Questo chiarmante è solo il mio parere, positivo appunto, ma volto a sottolineare come il concetto "write once, compile everywhere" debba comunque tenere conto delle caratteristiche del sistema operativo su cui si va a compilare.

Tieni comunque presente che anch'io sono approdato da poco a Mac e proprio in questi giorni sto lavorando sul porting del codice di un mio progetto, che già girava sotto Linux e Windows, anche sotto Mac OS X. Posso assicurarti che su un progetto abbastanza complesso c'è da lavorare abbastanza, prima nel sistemare i problemi del porting, poi nel testare tutto sul nuovo sistema.

Ciao e in bocca al lupo, vedrai che dopo le prime difficoltà riuscirai a fare il porting del tuo progetto e sarai (almeno spero) entusiasta di Lazarus, buona giornata a tutti e scusate la lunghezza del messaggio, ma il dono della sintesi non è dalla mia parte,

Stefano