PB2Web -- Ein PureBasic zu JavaScript-Konverter

Anwendungen, Tools, Userlibs und anderes nützliches.
Benutzeravatar
Kiffi
Beiträge: 10620
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

PB2Web -- Ein PureBasic zu JavaScript-Konverter

Beitrag von Kiffi »

Hallo,

hiermit möchte ich Euch die erste öffentlich Alpha-Version von PB2Web vorstellen. :-)

Was ist es?

PB2Web ist ein System, mit dem Ihr Web-Applikationen erstellen könnt. Dabei wird
PureBasic-Code von einem Parser in JavaScript gewandelt, welches dann in Verbindung
mit anderen JavaScript-Libraries (z.B. JQuery) im Webbrowser ausgeführt wird.
Klingt kompliziert? Ist es nicht!

Wie funktioniert es?

PB2Web hier oder hier herunterladen und in einen beliebigen Ordner entpacken. Es wird als Tool
in der IDE eingerichtet (ich habe es mir auf das Tastaturkürzel <Ctrl> + <F5> gelegt).
Dann schreibt ihr 'normalen' PureBasic-Code. Wenn nun PB2Web aufgerufen wird, wandelt
es den PB-Code und kopiert ihn zusammen mit den anderen benötigten Dateien in einen
vorher festgelegten Pfad Eures lokalen Webservers. Hiernach wird der Standardbrowser
aufgerufen, der dann die Web-Applikation startet.

Eine ausführliche Installationsanleitung findet Ihr hier.

Bitte unbedingt beim Ausprobieren beachten:

Ich habe oben 'normalen' PureBasic-Code bewusst in Anführungsstriche geschrieben,
denn bei der Benutzung von PB2Web sind einige Sachen zu beachten. Das liegt vor allem
daran, dass JavaScript (also die Sprache, in die gewandelt wird) einige Eigenarten besitzt,
die man als PureBasic-Programmierer nicht unbedingt kennt.

* Vergesst die Event-Schleife! Ereignisse (also beispielsweise das Drücken eines Buttons
oder das Feuern eines Timer-Events) funktionieren in PB2Web nur, wenn man sie mit den
neuen Bind*() - Befehlen (ab Version 5.20) bindet.
(Wait)WindowEvent() gibt es in PB2Web nicht.

* Achtet auf Groß- und Kleinschreibung! Während für PB myVar und myVAR das gleiche ist,
arbeitet JavaScript case-sensitiv. Für JS sind myVar und myVAR zwei unterschiedliche Variablen.

* Initialisiert Variablen! PB initialisiert Variablen automatisch. JavaScript tut das nicht. Eine
numerische Variable besitzt in PB initial den Wert 0. Ein String ist initial ein Leerstring.
In JS ist das nicht der Fall. Hier haben alle Variablen initial einen Wert 'undefined'

Beispiel:

Code: Alles auswählen

; falsch:
Define myString.s
myString + "Hallo"
MessageRequester("", myString) ; gibt 'undefinedHallo' aus

; richtig:
Define myString.s = ""
myString + "Hallo"
MessageRequester("", myString) ; gibt 'Hallo' aus
* Finger weg von Delay()! JavaScript ist eine Programmiersprache, die hauptsächlich
asynchron arbeitet. Blockierende Prozesse werden zumeist mit einer nicht mehr reagierenden
Webseite bestraft. Verwendet anstelle von Delay() lieber Timer.

Wenn Ihr das oben lest, dann versteht Ihr vielleicht, dass es wenig sinnvoll ist, einen x-beliebigen
vorhandenen Code PB2Web zum Fraß vorzuwerfen, um zu schauen, wie das dann im Browser aussieht.
In den meisten Fällen sind Anpassungen und ein wenig Umdenken vonnöten.

Systemvoraussetzungen:

* Ein halbwegs aktuelles Windows-OS (Linux / Mac sind geplant, haben aber keine hohe Priorität)
* PureBasic ab Version 5.20 (wegen den Binding-Befehlen)
* Ein wenig Geduld und Spucke beim Testen der Software ;-)

Einen Webserver (beispielsweise Apache, IIS, oder ähnliches) benötigt man für die ersten
Schritte nicht zwingend. Es wäre aber von Vorteil, wenn ein solcher vorhanden wäre, damit
manche Beispiele (wie z.B. CGI-Test.pb) funktionieren.

Was geht nicht?

Gemessen an der Fülle von PureBasic-Befehlen scheint der bereits umgesetzte Teil relativ
gering zu sein (dennoch habe ich schon die ein oder andere nette Web-Applikation mit diesen
Befehlen erstellen können).

Definitiv nicht umgesetzt sind derzeit folgende Libraries:

AudioCD, Cipher, Clipboard, Database, Dialog, Drag & Drop, File, FileSystem, Ftp, Help, Http, Library,
Mail, Memory, Network, OnError, Packer, Printer, Process, Regular Expression, Runtime, Scintilla,
Serial Port, SysTray, Thread, XML, 2D und 3D Games & Multimedia Libraries.

Dass einige Libs nicht umgesetzt sind, liegt in der Natur der Sache: Im Browser kann man
beispielsweise nicht direkt auf das Filesystem zugreifen. Ebenso sind Datenbank-Zugriffe
nicht möglich.

Ebenso werden Macros, Interfaces, Imports und API-Aufrufe nicht unterstützt.

(X)IncludeFile werden momentan nur auf erster Ebene ausgeführt.

Bitte beachtet:

PB2Web ist momentan noch ziemlich weit von dem entfernt, was man als fertiges Produkt
bezeichnen könnte. Das Framework ist noch ziemlich lückenhaft (von den 1500 PureBasic-
Befehlen sind derzeit knapp 250 umgesetzt worden). Ich könnte noch ewig hier im stillen
Kämmerlein an PB2Web programmieren, aber irgendwann muss auch mal ein Anfang
gemacht werden. Vielleicht kann ich auf diesem Weg ja auch den einen oder anderen dazu
animieren, an dem Projekt teilzunehmen und mitzuarbeiten.

Eine gute Dokumentation ist so gut wie nicht vorhanden. Aber hey, ich bin ja hier und
stehe Rede und Antwort ;-) Und hier ist dann noch eine Hilfe zur Selbsthilfe.

Außerdem ist im Download-Paket ein Examples-Ordner vorhanden, der einiges an Code beinhaltet.

Auf http://pb2web.de/ findet man überdies auch noch einiges an nützlichen
Informationen (beispielsweise bezüglich Theming und Kommunikation mit einem Server).

So, das war es fürs Erste. Bin gespannt auf Euer Feedback.

Viel Spaß beim PB2Web'en & Grüße ... Kiffi
Zuletzt geändert von Kiffi am 15.01.2014 11:46, insgesamt 3-mal geändert.
Hygge
Benutzeravatar
RSBasic
Admin
Beiträge: 8022
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: PB2Web (V 2014-01-03)

Beitrag von RSBasic »

:allright: fürs Bereitstellen und für deine Arbeit.
Kiffi hat geschrieben:Achtet auf Groß- und Kleinschreibung! Während für PB myVar und myVAR das gleiche ist,
arbeitet JavaScript case-sensitiv. Für JS sind myVar und myVAR zwei unterschiedliche Variablen.
Ich weiß nicht, was besser ist, aber um den konvertierten JS-Code PB-mäßig zu machen, könnte man ja alle Variablen beim Konvertieren nach JS lowercasen.
Kiffi hat geschrieben:Initialisiert Variablen! PB initialisiert Variablen automatisch. JavaScript tut das nicht. Eine
numerische Variable besitzt in PB initial den Wert 0. Ein String ist initial ein Leerstring.
In JS ist das nicht der Fall. Hier haben alle Variablen initial einen Wert 'undefined'
Ich weiß nicht, was besser ist, aber um den konvertierten JS-Code PB-mäßig zu machen, könnte man ja eine Pre-Funktion ausführen, die alle Variablen automatisch für JS definiert, damit es keine JS-Fehler entstehen.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
Kiffi
Beiträge: 10620
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: PB2Web (V 2014-01-03)

Beitrag von Kiffi »

RSBasic hat geschrieben::allright: fürs Bereitstellen und für deine Arbeit.
Gern! :-)
RSBasic hat geschrieben:[...] alle Variablen beim Konvertieren nach JS lowercasen.
[...] eine Pre-Funktion ausführen, die alle Variablen automatisch für JS definiert, damit es keine JS-Fehler entstehen.
ja, das ist langfristig der Plan. Steht auf meiner (unglaublich langen) ToDo-Liste.. :-)

Grüße ... Kiffi
Hygge
c4s
Beiträge: 1235
Registriert: 19.09.2007 22:18

Re: PB2Web (V 2014-01-03)

Beitrag von c4s »

Super Projekt! Mein Tipp: Definitiv auch im englischen Forum bekannt machen, denn ich könnte mir vorstellen das sich dort noch viel mehr interessierte Mitstreiter finden würden, sodass es dadurch noch wesentlich schneller voran käme.
"Menschenskinder, das Niveau dieses Forums singt schon wieder!" — GronkhLP ||| "ich hogffe ihr könnt den fehle endecken" — Marvin133 ||| "Ideoten gibts ..." — computerfreak ||| "Jup, danke. Gruss" — funkheld
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8675
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 22.04.3 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken
Kontaktdaten:

Re: PB2Web (V 2014-01-03)

Beitrag von NicTheQuick »

Achso, das gibt's nur als Windows-Binary? :cry:
Bild
Benutzeravatar
Kiffi
Beiträge: 10620
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: PB2Web (V 2014-01-03)

Beitrag von Kiffi »

c4s hat geschrieben:Super Projekt! Mein Tipp: Definitiv auch im englischen Forum bekannt machen, denn ich könnte mir vorstellen das sich dort noch viel mehr interessierte Mitstreiter finden würden, sodass es dadurch noch wesentlich schneller voran käme.
Danke für Deine Rückmeldung! Ich wollte allerdings erst einmal ein paar Tage
das Feedback hier im Forum abwarten (und die ersten Fehler fixen ;-)),
bevor ich es im englischen Forum vorstelle.
NicTheQuick hat geschrieben:Achso, das gibt's nur als Windows-Binary? :cry:
jap. Ich verstehe Deine Enttäuschung, aber momentan setze ich die größere
Priorität auf ein lauffähiges System. Im Prinzip ist PB2Web (der Parser, der
Selektor und der Manager) auch auf andere OS portierbar (das Framework
ist ohnehin OS-unabhängig), aber ich habe noch zu wenig Erfahrungen im
Umgang mit der Steuerung des PB-Compilers und den Pfaden. Außerdem muss
ich mir dafür erst einmal ein Linux aufsetzen. Das ist wie gesagt nicht wild,
kostet aber Zeit, die ich vorerst lieber in die Stabilität von PB2Web investieren will.


Bevor ich's vergesse: Entgegen meiner früheren Äußerung, das CanvasGadget
in naher Zukunft nicht zu unterstützen zu wollen, habe ich mich doch dazu
hinreißen lassen, es vor dem Release kurzfristig mit reinzunehmen.

Hier ist eine Umsetzung von STARGÅTEs einarmigen Banditen
(mit geringfügigen Anpassungen):

http://pb2web.de/demos/slotmachine/

Grüße ... Kiffi
Hygge
Derren
Beiträge: 557
Registriert: 23.07.2011 02:08

Re: PB2Web (V 2014-01-03)

Beitrag von Derren »

Werd's demnächst mal testen.
Ray hat schon alles angesprochen, was mir auch ins Auge stach mit den Variablen. Für eine erste Test version sicherlich akzeptabel. Aber zwecks Comfort sollte man das irgendwann überarbeiten.
So weit so gut :)

Warum braucht man denn einen Server? Bin ein wenig verwirrt. JS (und jQuery) laufen doch problemlos ohne Server. Nur bei mächtigeren Anwendungen benötigt man einen Server, welcher aber wiederrum ermöglicht die "File"-Library zu verwenden (oder ist das so geplant, aber noch nicht umgesetzt?)
Signatur und so
Benutzeravatar
Kiffi
Beiträge: 10620
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: PB2Web (V 2014-01-03)

Beitrag von Kiffi »

Derren hat geschrieben:Werd's demnächst mal testen.
ja, das wäre schön! :-)
Derren hat geschrieben:Ray hat schon alles angesprochen, was mir auch ins Auge stach mit den Variablen. Für eine erste Test version sicherlich akzeptabel. Aber zwecks Comfort sollte man das irgendwann überarbeiten.
Gemach, gemach! Kommt Zeit, kommt Komfort ;-)
Derren hat geschrieben:Warum braucht man denn einen Server? [...]
da magst Du recht haben. Für einfachere Sachen funktioniert PB2Web auch ohne
Server. Um aber z.B. via 'Servercode' auf Datenbanken zuzugreifen, bedarf es eines
Servers, der in der Lage ist, das von PB2Web erstellte CGI ausführen zu können.

Ich werde in einer der nächsten Versionen die Möglichkeit anbieten, die generierte
Seite auch ohne Server aufrufen zu können. Das würde gleichzeitig auch die
Einstiegshürde für die senken, die in PB2Web ein wenig hineinschnuppern wollen.
Danke für den Hinweis!
Derren hat geschrieben:welcher aber wiederrum ermöglicht die "File"-Library zu verwenden
ähm, das habe ich jetzt nicht verstanden. Um dann auf das FileSystem des Servers
zuzugreifen? Ja, das klappt. Allerdings nicht von JS aus, sondern von dem von PB2Web
generierten CGI. Oder missverstehe ich dich jetzt?

Grüße ... Kiffi
Hygge
Derren
Beiträge: 557
Registriert: 23.07.2011 02:08

Re: PB2Web (V 2014-01-03)

Beitrag von Derren »

Ah, ok. Also vielleicht kann man das CGI ja optional machen. Wenn ich keine "DLLs" erstelle, brauch ich ja an und für sich auch keinen Server.
Im großen und ganzen fallen mir aber eh keinen sinnvollen Anwendungen ein, die ohne Server auskommen. Spielereien, ok. Einfach irgendwas als Website anzeigen, auch OK. Aber richtige Anwendungen müssen immer irgendwie irgendwo was speichern (habe vor kurzem versucht ein Datenbank Frontend mit HTML und JS zu kreieren. Da jeder Browser ein eigenes DB-System hat, lief's dann darauf hinaus dass man zum Speichern seiner Arbeit einen DB-Dump aus einer Textarea heraus kopieren musste und ihm beim nächsten "Öffnen des Dokuments" wieder dort einzufügen).

Ja, also, jedenfalls: Wenn man schon einen Server benötigt kann man ja über CGI/php etc. auch mit Dateien arbeiten (read/write etc.). Das meinte ich mit der File-Library
Dass einige Libs nicht umgesetzt sind, liegt in der Natur der Sache: Im Browser kann man beispielsweise nicht direkt auf das Filesystem zugreifen.
Man kann schon. Wenn man eben dem kleinen Umweg über den Server geht. Das gilt natürlich auch für die Datenbanken (denn die Browserinternen DBs sind ja wirklich kaum zu gebrauchen. Erstens nur Client-seitig, zweitens browserabhängig (Wechsel von FF zu Chrome und auf einmal hat man keinen Zugriff auf die Daten mehr), und wenn man mal wieder feststellt, dass man zu viele Formulardaten und Cookies im Browser hat und alles löscht, ist die DB auch komplett futsch. OK um Daten (für Formulare z.B.) zwischen zu speichern, ansonsten eher unbrauchbar)
Signatur und so
Benutzeravatar
Kiffi
Beiträge: 10620
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: PB2Web (V 2014-01-03)

Beitrag von Kiffi »

Derren hat geschrieben:Also vielleicht kann man das CGI ja optional machen.
das ist ohnehin optional. Das CGI wird nur dann erstellt, wenn im Code
eine ProcedureDLL vorhanden ist.
Derren hat geschrieben:Wenn ich keine "DLLs" erstelle, brauch ich ja an und für sich auch keinen Server.
allerdings ist die ideale ökologische Nische der von PB2Web erstellten Seite
nun mal das Web. Und wo das Web ist, ist der Server nicht weit ;-)

Ich würde zumindest nicht diesen Aufwand betreiben, um die Web-Applikation
nur auf der lokalen Platte laufen zu lassen.

Grüße ... Kiffi

P.S.: Ha! Jetzt habe ich doch noch ein Beispiel gefunden, das ohne Server nicht funktioniert ;-)

P2W_Geolocation_GetCurrentPosition() (liefert die geografische Position des Anwenders)
verweigert den Dienst, wenn es über file:// aufgerufen wird.

P.P.S.: ... anscheinend nur in Chrome und im Ff. Ausgerechnet im IE funktioniert es. Verstehe einer diese Browser... :freak:
Hygge
Antworten