Italian community of Lazarus and Free Pascal

Programmazione => Lazarus e il web => Topic aperto da: suibaf - Novembre 23, 2024, 02:27:12 pm

Titolo: Creare una web application con lazarus
Inserito da: suibaf - Novembre 23, 2024, 02:27:12 pm
Ciao,,
ho letto l'articolo https://blog.lazaruspascal.it/2023/12/21/creare-una-web-application-con-lazarus/
Ho scaricato il progetto su https://github.com/XinYiMan/LazWebServer.git.
Quando, per vedere come funziona, ho lanciato il progetto ed aperto sul browser l'url http://localhost:5555/index lazarus va in errore: https://www.dropbox.com/scl/fi/roregm8fqtne2ynch605q/laz_error.jpg?rlkey=zwdcvif5culjsynccskyasqgu&dl=0

Vorrei capire cosa devo fare per farlo funzionare correttamente! Vorrei studiare  l'esempio. Grazie
Credo abbia ottime potenzialità questa funzionalità.
Con Lazarus sono alle prime armi.
Grazie in anticipo
Titolo: Re:Creare una web application con lazarus
Inserito da: xinyiman - Novembre 23, 2024, 04:31:44 pm
Ciao, mi fa piacere che quel codice possa essere di spunto per qualcuno. Prima cosa, che sistema operativo usi per compilare? Seconda cosa. Prova a compilarlo e a lanciarlo da shell/terminale e vedi se così il problema si presenta.
Titolo: Re:Creare una web application con lazarus
Inserito da: xinyiman - Novembre 23, 2024, 04:34:08 pm
La custom option -dSmartDebugLogWriteActive farà stampare sulla console le eccezioni così puoi vedere cosa capita
Titolo: Re:Creare una web application con lazarus
Inserito da: suibaf - Novembre 23, 2024, 09:33:32 pm
Ciao, sto usando Windows10. Se lo compilo e lo lancio funziona regolarmente senza dare errori.
La custom option -dSmartDebugLogWriteActive è attivata, ma non vedo cenno di errori sulla console.
 
Titolo: Re:Creare una web application con lazarus
Inserito da: suibaf - Novembre 24, 2024, 10:21:36 am
Ho installato lazarus su linux Mint. Apro il progetto, lo mando in esecuzione, non mi apre la console. Vado sul browser http://localhost:5555/index.
Lazarus va in errore:
"Project lazwebserver raised exception class 'RunError (232)' with message:
Threads not supported
At address 4185F0

Non è un buon inizio con Lazarus.

Avete qualche consiglio per me?
Grazie

Titolo: Re:Creare una web application con lazarus
Inserito da: DragoRosso - Novembre 24, 2024, 10:28:33 am
Apri dal menu Progetto "Analizzatore progetti", avrai un elenco di file tra cui un file con suffisso LPR.

Aprilo.

La struttura è qualcosa di simile: Verifica che ci sia l'$IFDEF con UNIX (e se non c'è inseriscilo).

Codice: [Seleziona]
program Project1;

{$mode objfpc}{$H+}

uses
  {$IFDEF UNIX}
  cthreads,
  {$ENDIF}
  {$IFDEF HASAMIGA}
  athreads,
  {$ENDIF}
  Interfaces, // this includes the LCL widgetset
  Forms, unit1
  { you can add units after this };

{$R *.res}

begin
  RequireDerivedFormResource:=True;
  Application.Scaled:=True;
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.
Titolo: Re:Creare una web application con lazarus
Inserito da: suibaf - Novembre 24, 2024, 06:49:44 pm
Trovato,

la struttura che c'è è questa:


Codice: [Seleziona]
program lazwebserver;

{$mode objfpc}{$H+}

uses
  {$IFDEF UNIX}{$IFDEF UseCThreads}
  cthreads,
  {$ENDIF}{$ENDIF}
  {$IFDEF OpenSslOk}
  opensslsockets,
  {$ENDIF}
  fphttpapp, HTTPDefs, fphttp, Classes, sysutils, uControl, uSmartDebugLog, uCustomException,
  uCustomGetModule, uCookieManagement, uConsts, uJWTAbstract;     
Titolo: Re:Creare una web application con lazarus
Inserito da: xinyiman - Novembre 25, 2024, 08:28:11 am
Verifica se tra le custom options hai

-dUseCThreads

Altrimenti se non c'è mettilo a mano
Titolo: Re:Creare una web application con lazarus
Inserito da: DragoRosso - Novembre 25, 2024, 09:49:08 am
Questa "cosa" dei CThreads è sempre stata un mistero per me. E' una libreria alternativa ai PThreads (che mi pare sia la libreria nativa e originale dei sistemi Linux).

Perchè FPC non la "wrappa" nei TThreads classici stile Windows ? Almeno uno si toglie il pensiero e usa di fatto una sola classe.

Poi magari differiranno su particolari d'uso, ma si avrebbe una sola classe integrata in FPC (FPC stesso penso usi i Thread anche in Linux internamente per alcune operazioni ...), senza necessità di Uses "strane".

Bhò, misteri dell'informatica.
Titolo: Re:Creare una web application con lazarus
Inserito da: suibaf - Novembre 25, 2024, 05:30:11 pm
Verifica se tra le custom options hai

-dUseCThreads

Altrimenti se non c'è mettilo a mano

Stai parlando per linux o per windows? Io non riesco a farlo andare ne in un ambiente ne nell'altro.
Titolo: Re:Creare una web application con lazarus
Inserito da: xinyiman - Novembre 25, 2024, 05:35:39 pm
Verifica se tra le custom options hai

-dUseCThreads

Altrimenti se non c'è mettilo a mano

Stai parlando per linux o per windows? Io non riesco a farlo andare ne in un ambiente ne nell'altro.

Parlo di linux.

Ma scusa su windows hai detto che compilando ed eseguendo funziona. Giusto?
Dall'ide saltano fuori delle eccezioni che da eseguibile vengono gestite per la normale operatività. Oltre al fatto che per natura debuggare roba che funziona in multithread è ostico concettualmente.
Titolo: Re:Creare una web application con lazarus
Inserito da: DragoRosso - Novembre 25, 2024, 06:42:25 pm
Facciamo un attimo il punto:

1) Build sotto Windows e lancio senza debugger: funziona il progetto ?

2) Build sotto Linux e  lancio senza debugger: funziona il progetto ?

Puoi eliminare il "{$IFDEF UseCThreads}" e il corrispondente "{$ENDIF}" senza problemi. Puoi sempre eventualmente reinserirlo.

Usare il debugger su applicazioni di questo tipo come accennava @xinyiman è problematico. Se vuoi farlo devi incominciare a selezionare "Non Mostrare più" quando ti compare una eccezione fino a quando non ti gira tutto senza eccezioni, e poi puoi impostare i tuoi breakpoint dovi ti interessano.

Facci sapere.
Titolo: Re:Creare una web application con lazarus
Inserito da: suibaf - Novembre 25, 2024, 07:02:40 pm
Citazione
1) Build sotto Windows e lancio senza debugger: funziona il progetto ?

Si funziona

Citazione
1) Build sotto Linux e  lancio senza debugger: funziona il progetto ?

No non funziona, non sia apre neanche la console.

Citazione
Usare il debugger su applicazioni di questo tipo come accennava @xinyiman è problematico. Se vuoi farlo devi incominciare a selezionare "Non Mostrare più" quando ti compare una eccezione fino a quando non ti gira tutto senza eccezioni, e poi puoi impostare i tuoi breakpoint dovi ti interessano.

Non riesco a capire come faccio a scrivere un sw senza fare il debug. Si tratta di un piccolo esempio figuriamoci se il progetto si ingrandisce tanto. Sono partito molti anni fa con VB6 e poi con Xojo (un compilatore multi piattaforma), ed ho sempre fatto il debug anche di progetti grossi. Non riesco a capire come potrei fare senza. Chiedo scusa ma davvero con Lazarus sono alle prime armi e stò valutando se può essere uno strumento che io possa usare o sia in grado di usare.

Grazie





Titolo: Re:Creare una web application con lazarus
Inserito da: suibaf - Novembre 25, 2024, 07:10:19 pm
Perchè questa applicazione deve lavorare in multithread?
Titolo: Re:Creare una web application con lazarus
Inserito da: DragoRosso - Novembre 25, 2024, 09:38:33 pm
Non riesco a capire come faccio a scrivere un sw senza fare il debug. Si tratta di un piccolo esempio figuriamoci se il progetto si ingrandisce tanto. Sono partito molti anni fa con VB6 e poi con Xojo (un compilatore multi piattaforma), ed ho sempre fatto il debug anche di progetti grossi. Non riesco a capire come potrei fare senza. Chiedo scusa ma davvero con Lazarus sono alle prime armi e stò valutando se può essere uno strumento che io possa usare o sia in grado di usare.
Perchè questa applicazione deve lavorare in multithread?

Non è un problema di debugging. E' un problema di gestione delle eccezioni. Essenzialmente  una applicazione WEB genera una serie di eccezioni gestite a runtime e quindi se la debugghi ti troverai il processo interrotto abbastanza spesso. Questo tipo di applicazione genera eccezioni per vari motivi: tentativi di criptatura e decriptatura errati (ad esempio se si usa TLS), timeout sui pacchetti TCP e poi per anche per come è stata costruita (alcune eccezioni vengono usate per "inviare" lo stato di una data situazione ad esempio).

E' un pò come accadeva nel passato quando la gestione della aritmetica poteva essere fatta o da processore o in simulazione (in quei casi le eccezioni erano gestite in modo che non potessero essere bloccate dai software di debug).

Comunque si può fare gestendo le "cose" come ti avevo accennato in un precedente post.

Sul perchè è multithreading: perchè lavorando in termini di rete deve esserlo per non bloccare l'interfaccia utente   (o il resto dei processi di un web server).

Prova ad immaginare un programma in attesa di un input da una "pagina web" ad esempio di scarico di un file. Se non fosse multithreading, finchè il file non viene inviato il web server sarebbe "inchiodato".

Su Linux purtroppo non sono ferrato a sufficienza. Posso però dirti che mentre la console in Windows la si ottiene semplicemente con le opzioni del progetto (quindi senza nessau intervento del programma), in Linux non mi pare si possa fare ciò, quindi è probabile che tu debba lanciare il programma direttamente da terminale (forse è proprio questo il problema).

Ciao
Titolo: Re:Creare una web application con lazarus
Inserito da: xinyiman - Novembre 26, 2024, 08:35:48 am
Si si so cosa è xojo, l'ho usato per circa 5 anni al lavoro e grazie a dio non devo più usarlo. Mi rendo conto delle tue perplessità. Ma forse sei partito dal progetto sbagliato. Se lavori su applicazioni da desktop il debug funziona bene, ma se lavori su applicazioni web o multithread devi essere un po' più "grezzo" nell'approccio e lavorare con dei messaggi in console. Questo per la natura del progetto, che come ben ha spiegato DragoRosso.
Tieni presente inoltre che quello visto non è un progetto standard lazarus, ma una mia applicazione dove ho gestito alcune funzionalità con la gestione delle eccezioni, che però il debug ti segnala ovviamente.
Se vuoi sviluppare web comodamente al momento (e senza troppi sbattimenti) in lazarus devi adottare i componenti web della TMS Software (un po' come in xojo ci sono anche qui estensioni a pagamento). Altrimenti aspetti che sia maturo il progetto FRESNEL che dovrebbe essere nativo di lazarus.
Titolo: Re:Creare una web application con lazarus
Inserito da: nomorelogic - Novembre 26, 2024, 11:08:55 am
per fare il debug di una applicazione web

si può fare con i file, che è sicuramente un tipo di debug che non può mancare (perché è importante capire cosa succede su un server web in funzione h24 7 giorni su 7)

si può fare anche col debugger in fase di sviluppo, non mi sembra ci siano particolari problemi
l'unica accortezza è che, mettendo il breakpoint nel thread, bisogna essere sicuri di ricevere 1 sola richiesta alla volta (altrimenti si apre un altro thread e, se non si capisce cosa sta succedendo, si fa un po' di confusione)

direi a suibaf di insistere un po' per cercare dov'è il problema
mi spiace solo che in questi giorni non riesco a dare una mano



Titolo: Re:Creare una web application con lazarus
Inserito da: Mimmo - Novembre 26, 2024, 12:01:56 pm
Se vuoi sviluppare web comodamente al momento (e senza troppi sbattimenti) in lazarus devi adottare i componenti web della TMS Software (un po' come in xojo ci sono anche qui estensioni a pagamento). Altrimenti aspetti che sia maturo il progetto FRESNEL che dovrebbe essere nativo di lazarus.

Ciao,
come diceva Xinyiman lo sviluppo di un server web è già di per sè una bella sfida, soprattutto se non hai ancora familiarità con l'ambiente di sviluppo.
Comunque, se hai necessità di mettere su qualcosa, oltre ai TMS io ti consiglio questa libreria: https://github.com/risoflora/brookframework (https://github.com/risoflora/brookframework) La sto usando per mettere in piedi un microservizio e mi sento di consigliarla. Lato lazarus/pascal è tutto abbastanza facile, devi però avere abbastanza chiaro come avviene la comunicazione tra browser e server (metodi, headers, ecc...).
Titolo: Re:Creare una web application con lazarus
Inserito da: xinyiman - Novembre 26, 2024, 01:10:53 pm
Riguardo a questo, te la sentiresti di scrivere una serie di guide? Potrebbe essere d'aiuto a qualcuno.
Se vuoi sviluppare web comodamente al momento (e senza troppi sbattimenti) in lazarus devi adottare i componenti web della TMS Software (un po' come in xojo ci sono anche qui estensioni a pagamento). Altrimenti aspetti che sia maturo il progetto FRESNEL che dovrebbe essere nativo di lazarus.

Ciao,
come diceva Xinyiman lo sviluppo di un server web è già di per sè una bella sfida, soprattutto se non hai ancora familiarità con l'ambiente di sviluppo.
Comunque, se hai necessità di mettere su qualcosa, oltre ai TMS io ti consiglio questa libreria: https://github.com/risoflora/brookframework (https://github.com/risoflora/brookframework) La sto usando per mettere in piedi un microservizio e mi sento di consigliarla. Lato lazarus/pascal è tutto abbastanza facile, devi però avere abbastanza chiaro come avviene la comunicazione tra browser e server (metodi, headers, ecc...).
Titolo: Re:Creare una web application con lazarus
Inserito da: suibaf - Novembre 26, 2024, 03:57:09 pm
Vi dico che non sono un programmatore di professione, lo faccio per hobby e quando ho tempo. Un tempo lo facevo come seconda attività. La prima ha preso il sopravvento per cui è rimasta un pò di passione. Xojo mi piace molto tutt'ora, mi ha permesso da libero professionista di fare programmi e di guadagnare qualcosa, ma ci sono delle librerie che non funzionano, è a pagamento e lazarus mi sembra davvero aperto a tutto, se lo sapessi usare bene. Lazarus l'ho sempre avuto sul mio pc, ma non sono mai riuscito a prendere confidenza. Adesso avrei un'idea e vorrei portarla avanti.

Vorrei creare con lazarus una app console che risponde ad un indirizzo IP esattamente come ha fatto xinyiman in modo che la logica principale risieda nel prg lazarus e la parte frontend su file html/php su un webserver. Inoltre il prg lazarus invia secondo un timing una serie di dati che le pagine html/php le visualizzino un pò come ajax senza fare il refresh della pagina totale.
Grazie
 
Titolo: Re:Creare una web application con lazarus
Inserito da: xinyiman - Novembre 26, 2024, 04:39:29 pm
Al momento allora l'unico modo che conosco per fare quello che vuoi è proprio quello che fa il mio programma.
Però come già detto il debug lo devi fare un po' più grezzo (guarda messaggi precedenti).
Su linux hai guardato la custom option che ti ho suggerito?
Titolo: Re:Creare una web application con lazarus
Inserito da: DragoRosso - Novembre 26, 2024, 04:42:31 pm
Vi dico che non sono un programmatore di professione, lo faccio per hobby e quando ho tempo. Un tempo lo facevo come seconda attività. La prima ha preso il sopravvento per cui è rimasta un pò di passione. Xojo mi piace molto tutt'ora, mi ha permesso da libero professionista di fare programmi e di guadagnare qualcosa, ma ci sono delle librerie che non funzionano, è a pagamento e lazarus mi sembra davvero aperto a tutto, se lo sapessi usare bene. Lazarus l'ho sempre avuto sul mio pc, ma non sono mai riuscito a prendere confidenza. Adesso avrei un'idea e vorrei portarla avanti.

Vorrei creare con lazarus una app console che risponde ad un indirizzo IP esattamente come ha fatto xinyiman in modo che la logica principale risieda nel prg lazarus e la parte frontend su file html/php su un webserver. Inoltre il prg lazarus invia secondo un timing una serie di dati che le pagine html/php le visualizzino un pò come ajax senza fare il refresh della pagina totale.
Grazie
 

Bhè, anche se non ho scaricato il programma di @xinyiman probabilmente la soluzione è proprio quello. E' ovviamente da adattare per calzare bene alle tue esigenze.

Se vuoi un consiglio, ma assolutamente di parte  ;) , costruisci l'applicazione per Windows (con un occhio a Linux) e poi portala in Linux. Sotto Windows tutte le attività sono forse un pò più semplici (almeno per me .. sono sicuro che ci sarà una pronta risposta a questa mia affermazione ...) se devi sviluppare e sei alle prima armi con Lazarus e il WEB.
Titolo: Re:Creare una web application con lazarus
Inserito da: DragoRosso - Novembre 26, 2024, 04:45:02 pm
OT: caspita l'amministratore e i due moderatori in linea contemporaneamente  ;D ;D ;D ;D
Titolo: Re:Creare una web application con lazarus
Inserito da: Mimmo - Novembre 26, 2024, 05:37:42 pm
Riguardo a questo, te la sentiresti di scrivere una serie di guide? Potrebbe essere d'aiuto a qualcuno.

Beh, posso provare a farne una di introduzione a quel framework e vediamo come va...
Dove pensavi andasse messa? Qui o sul blog?
Titolo: Re:Creare una web application con lazarus
Inserito da: suibaf - Novembre 26, 2024, 09:06:35 pm
Al momento allora l'unico modo che conosco per fare quello che vuoi è proprio quello che fa il mio programma.
Però come già detto il debug lo devi fare un po' più grezzo (guarda messaggi precedenti).
Su linux hai guardato la custom option che ti ho suggerito?

Infatti mi è piaciuta subito come soluzione!
Titolo: Re:Creare una web application con lazarus
Inserito da: xinyiman - Novembre 27, 2024, 08:32:58 am
Riguardo a questo, te la sentiresti di scrivere una serie di guide? Potrebbe essere d'aiuto a qualcuno.

Beh, posso provare a farne una di introduzione a quel framework e vediamo come va...
Dove pensavi andasse messa? Qui o sul blog?
Mi piacerebbe sul blog.