WebGadget als Ersatz für native GUI

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
uweb
Beiträge: 461
Registriert: 13.07.2005 08:39

Re: WebGadget als Ersatz für native GUI

Beitrag von uweb »

Die Idee mit FastCGI und separatem Browser finde ich super. Dadurch könnte man die GUI auch auf's Smartphone, Smart-TV, Tablet, ... auslagern.
:allright:
Bei der Gelegenheit:
Welchen Webserver würdest Du denn empfehlen?
Für PBExpress hast Du ja von IIS und Apache abgeraten. Lighttpd ist als Binary nur für Linux verfügbar. Und beim Hiawatha hat sich heraus gestellt, dass es zu Fehlern bei großen Dateidownloads kommt.
Das finde ich sehr schade weil Dein Tutorial dafür wirklich super ist.
Benutzeravatar
TroaX
Beiträge: 660
Registriert: 08.03.2013 14:27
Computerausstattung: PC: Ryzen 9 3950X, 96 GB RAM, RX6800XT, 2.5 TB SSD, 21:9 Display, Pop_OS! | Lappi: Ryzen 7 5800H, 16 GB RAM, 1 TB SSD, Pop_OS!
Wohnort: NRW
Kontaktdaten:

Re: WebGadget als Ersatz für native GUI

Beitrag von TroaX »

Als Anwendungsserver reicht der Hiawatha problemlos aus, so lange man nicht mit den Datenmengen übertreibt. Ansonsten glasklar NGINX. Allerdings war der Plan, auf FastCGI zu verzichten und einen eigenen Server einzuhängen. Dadurch fällt ein weiterer Prozess weg und man muss beim Ausliefern nicht noch eine Software von dritten beipacken. Anders ist es natürlich, wenn man das Backend für das Netzwerk nutzen möchte. Dann sollte man auf einen Server mit HTTPS setzen und per FastCGI arbeiten. Aber dafür kann man auch direkt PBExpress nehmen.

Apache kann natürlich auch verwendet werden. Allerdings ist dieser stark überladen und sollte nicht unbedingt für Anwendungen verwendet werden, die als Bundle ausgeliefert wird. Dafür eignet sich der Hiawatha tatsächlich am besten. Aber auch NGINX ist noch recht genießbar. Geplant ist aber wie gesagt ein Embeddedserver.
PC: Ryzen 9 3950X | 96 GB RAM | RX6800XT | 2,5 TB NVMe | Pop_OS!
Notebook: 16" 3:2 | Ryzen 7 5800H | 16 GB RAM | Radeon Vega | 1TB NVMe | Pop_OS!
NAS: Fritz.Box :lol:
Coding: Purebasic 6.04 | PHP | HTML | CSS | Javascript
Benutzeravatar
uweb
Beiträge: 461
Registriert: 13.07.2005 08:39

Re: WebGadget als Ersatz für native GUI

Beitrag von uweb »

Sorry, es ist schon spät. Aber ich glaube jetzt habe ich es verstanden.
Ich freue mich darauf!
Benutzeravatar
Kiffi
Beiträge: 10621
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: WebGadget als Ersatz für native GUI

Beitrag von Kiffi »

Salü,

ich habe in der Zwischenzeit ein wenig herumgetüftelt und wollte Euch die Ergebnisse nicht vorenthalten.

Mein Ziel war es, ein SpiderBasic-Projekt als Desktop-Applikation laufen zu lassen und dabei eine Websocket-Kommunikation mit PureBasic zu ermöglichen. Das Ganze soll dann auf Windows, Linux und MacOS ohne größere Neuprogrammierung funktionieren. Folgendes habe ich ausprobiert:

PureBasic + WebGadget:

Wie erwartet ist die Programmierung unter Windows durch den im WebGadget verwendeten Internet Explorer eine Qual. Ohne Änderungen in der Registry vorzunehmen (Browseremulation erstellen und "Klick"-Sound abschalten) und Windows-Api (zur Unterdrückung nerviger Javascript-Fehlermeldungen) kommt man nicht weit. Und selbst dann funktioniert beispielsweise das ListIconGadget von SpiderBasic nicht wie erwartet (Listeneinträge lassen sich nur per Tastatur auswählen; mit der Maus verschiebt man lediglich den Fokus).

Auch magere 302 von 555 Punkten auf https://html5test.com/ lassen nichts Gutes verheißen. Die Kommunikation zwischen SpiderBasic und PureBasic mittels Websocket funktionierte nicht. Laut "Can I use..." sollte der IE 11 Websocket-Kommunikation allerdings unterstützen.

Unter Linux hingegen machte das Ganze schon einen besseren Eindruck (kein Wunder, denn hier kommt WebKit zum Einsatz). Lediglich die Javascript-Unterstützung musste eingeschaltet werden. Aber was nutzt der gute Eindruck unter Linux, wenn es unter Windows dann doch so sehr abfällt.

Java(FX) + WebKit:

Mittels B4J habe ich mir ein Fenster mit innen liegendem WebView (basiert auf WebKit) gebastelt. Das ging Rubbeldikatz. Das daraus entstandene JAR läuft sowohl unter Window als auch Linux problemlos (sofern die entsprechende Java-Version installiert ist). Die Kommunikation mittels Websocket funktioniert. Hier gefiel mir besonders die geringe Größe des JARs von knapp 400 KB. Mit 353 von 555 Punkten auf html5test.com schneidet WebKit ein wenig besser als der IE ab.

NodeJs + Electron

Die Königsklasse in Sachen Funktionsumfang. Hier kommt der Chromium zum Einsatz, was sich dann auch prompt mit stolzen 518 von 555 Punkten bei html5test.com niederschlägt. Ein interner parallel laufender Webserver (express), der die Dateien statisch zur Verfügung stellt, ist mit drei Zeilen Programmcode realisiert. Die Websocket-Kommunikation zwischen PB und Electron verlief erwartungsgemäß problemlos. Die im Chromium eingebaute Entwicklerkonsole ermöglicht komfortables Debugging. Der electron-packager erstellt Binaries, welche out-of-the-box auf allen wichtigen Betriebssystemen laufen (auch wenn man nicht über das entsprechende OS verfügt). Leider sind die mit Electron gebauten Applikation nicht gerade klein. Mit knapp 150 MB pro Installation muss man da schon rechnen.

Das zum Stand der Dinge von meiner Seite ... Peter
Hygge
Benutzeravatar
TroaX
Beiträge: 660
Registriert: 08.03.2013 14:27
Computerausstattung: PC: Ryzen 9 3950X, 96 GB RAM, RX6800XT, 2.5 TB SSD, 21:9 Display, Pop_OS! | Lappi: Ryzen 7 5800H, 16 GB RAM, 1 TB SSD, Pop_OS!
Wohnort: NRW
Kontaktdaten:

Re: WebGadget als Ersatz für native GUI

Beitrag von TroaX »

Ist leider noch nicht Plattformunabhängig. Dafür ist der Overhead deutlich kleiner. PHPDesktop

Einfach das ganze PHP Zeug rausschmeißen und stattdessen CGI benutzen. Dann kannst du direkt Purebasic-Kompilate nutzen.
PC: Ryzen 9 3950X | 96 GB RAM | RX6800XT | 2,5 TB NVMe | Pop_OS!
Notebook: 16" 3:2 | Ryzen 7 5800H | 16 GB RAM | Radeon Vega | 1TB NVMe | Pop_OS!
NAS: Fritz.Box :lol:
Coding: Purebasic 6.04 | PHP | HTML | CSS | Javascript
Benutzeravatar
uweb
Beiträge: 461
Registriert: 13.07.2005 08:39

Re: WebGadget als Ersatz für native GUI

Beitrag von uweb »

Ich danke euch beiden für die Infos!

Allein schon das Résumé in Bezug auf PureBasic + WebGadget wird mir wohl viel Zeit und Frust sparen wenn ich mich irgendwann intensiver damit beschäftige. Ich liebe es negative Erfahrungen nicht selbst machen zu müssen.

B4J habe ich mir vor einiger Zeit mal zugelegt, mich aber dann gefragt ob es nicht sinnvoller wäre gleich Java zu nutzen. Damit habe ich mich vor sehr langer Zeit auch einmal beschäftigt. Manchmal denke ich: Ich hatte da am Ball bleiben sollen. Heute würde ich fast wieder bei Null anfangen. Mit dem JNI gäbe es da wohl viele vielfältige Ergänzungsmöglichkeiten zu PB.

NodeJs als Ergänzung zu PB habe ich auch schon eine Weile im Hinterkopf, da es da auch viele andere interessante Projekte gibt. Mangels Zeit bin ich aber nicht darüber hinaus gekommen.
Über Electron bin ich nach dem Lesen von dem ct-Artikel "Beiwerk im Eigenbau" und der anschließenden Surfwanderung in dem Gebiet auch wieder gestolpert. Neben den technischen Möglichkeiten gefällt mir auch die MIT-Lizenz.

PHPDesktop war mir bisher kein Begriff.

Vielleicht gibt es ja auch irgendwann PB-Beispiele/Anleitungen für Electron/PHPDesktop ?
Benutzeravatar
Kukulkan
Beiträge: 1066
Registriert: 09.09.2004 07:07
Wohnort: Süddeutschland
Kontaktdaten:

Re: WebGadget als Ersatz für native GUI

Beitrag von Kukulkan »

Hallo Kiffi,

vielen Dank für dein Résumé. Das erspart anderen sicher viel Arbeit. Aber das Ergebnis ist ja nicht wirklich befriedigend. Würde mich freuen wenn Du neue Erkenntnisse hier postest.

Ich fände es schon toll, wenn ich wenigstens die GUI mit HTML und CSS erstellen könnte. Dann ein JS Modul das die Elemente zu mit PB nutzbaren Callbacks macht und ich wäre happy (sowas wie BindEvent() auf ein HTML Gadget). Damit würde ich die DPI-Probleme und XML Dialog Beschränkungen umgehen können. Aber das WebGadget ist einfach zu eingeschränkt (zB Linux).
Benutzeravatar
TroaX
Beiträge: 660
Registriert: 08.03.2013 14:27
Computerausstattung: PC: Ryzen 9 3950X, 96 GB RAM, RX6800XT, 2.5 TB SSD, 21:9 Display, Pop_OS! | Lappi: Ryzen 7 5800H, 16 GB RAM, 1 TB SSD, Pop_OS!
Wohnort: NRW
Kontaktdaten:

Re: WebGadget als Ersatz für native GUI

Beitrag von TroaX »

Electron macht Purebasic sogut wie obsolet, da im Node-Package-Manager nahezu alles an Funktionalität verfügbar ist, die man brauchen könnte. Einzig für die Benutzeroberfläche kann man Spiderbasic verwenden. Für Purebasic im Backend müsste ein vollständiger Transpiler von PB zu Javascript her. Aber aus Erfahrung muss ich sagen, das ich lieber Javascript nehmen würde, als einen PB-Transpiler. Denn man würde viele Vorteile von JS wegabstrahieren müssen. Und das bringt es auch nicht.

PHPDesktop hingegen kann man Spiderbasic zusammen mit dem Servercode-Trick von Kiffi verwenden. Alternativ kann man auch das Backend komplett in Purebasic schreiben und die Oberfläche in HTML/CSS/JS (da mir die Optik von Spiderbasic nicht gefällt, wäre was meine erste Wahl). PHP Desktop wäre eigentlich fast perfekt, wenn es denn wenigstens auch FastCGI unterstützen würde. So müsste man sparsam mit den Ressourcen umgehen, da sonst die exe für eine haptisch einwandfreie Anwendung zu groß wird.

Ich hingegen suche nach Möglichkeiten, über das Webgadget bestimmte Steuerelemente zu nutzen bzw. statt RTF oder sonstige Formate HTML für formatierte Dokumente und Daten zu verwenden (gerade auch im Bezug auf den Druck). Habe dafür auch einen Weg gefunden. Muss nur noch die Zeit finden, es umzusetzen. :mrgreen:

PHP Desktop: https://github.com/cztomczak/phpdesktop
PC: Ryzen 9 3950X | 96 GB RAM | RX6800XT | 2,5 TB NVMe | Pop_OS!
Notebook: 16" 3:2 | Ryzen 7 5800H | 16 GB RAM | Radeon Vega | 1TB NVMe | Pop_OS!
NAS: Fritz.Box :lol:
Coding: Purebasic 6.04 | PHP | HTML | CSS | Javascript
Benutzeravatar
Kiffi
Beiträge: 10621
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: WebGadget als Ersatz für native GUI

Beitrag von Kiffi »

Kiffi hat geschrieben:Java(FX) + WebKit:
[...]Hier gefiel mir besonders die geringe Größe des JARs von knapp 400 KB.[...]
ich muss mich korrigieren. Habe gerade ein JAR mit Netbeans erstellt (also ohne den B4J-Overhead). Jetzt liegt die Dateigröße bei knapp 2 KB. :mrgreen:

Grüße ... Peter (forscht weiter)
Hygge
Benutzeravatar
TroaX
Beiträge: 660
Registriert: 08.03.2013 14:27
Computerausstattung: PC: Ryzen 9 3950X, 96 GB RAM, RX6800XT, 2.5 TB SSD, 21:9 Display, Pop_OS! | Lappi: Ryzen 7 5800H, 16 GB RAM, 1 TB SSD, Pop_OS!
Wohnort: NRW
Kontaktdaten:

Re: WebGadget als Ersatz für native GUI

Beitrag von TroaX »

Kiffi hat geschrieben:ich muss mich korrigieren. Habe gerade ein JAR mit Netbeans erstellt (also ohne den B4J-Overhead). Jetzt liegt die Dateigröße bei knapp 2 KB. :mrgreen:

Grüße ... Peter (forscht weiter)
Danke für deine Forschung. Aber ich persönlich will und werde Java weiterhin meiden. ^^

Ich werde mal schauen, ob ich mal eine kleine Anleitung zum Thema PB und PHP-Desktop mit CGI machen kann. Interesse für einen Linux und Mac-Port existieren. Im Github stehen die Issues dafür bereit. Halte ich also für vielversprechend. ^^
PC: Ryzen 9 3950X | 96 GB RAM | RX6800XT | 2,5 TB NVMe | Pop_OS!
Notebook: 16" 3:2 | Ryzen 7 5800H | 16 GB RAM | Radeon Vega | 1TB NVMe | Pop_OS!
NAS: Fritz.Box :lol:
Coding: Purebasic 6.04 | PHP | HTML | CSS | Javascript
Antworten