Wer Programme schreiben will, benötigt dazu einen Entwicklungsrechner und ein Zielsystem (Target). Wer Programme für den PC entwickelt, schreibt den Code am PC und das ausführbare Binär-Programm (.exe, .com) läuft ebenfalls am PC.
Ist das Zielsystem aber nicht der PC, sondern ein Raspberry, muss der Code am Zielsystem ausführbar sein, dann nützt der Binärcode für den PC gar nichts. Soll daher ein Programm sowohl am PC als auch am Raspberry laufen, benötigt man zwei unterschiedliche Binärdateien und zwei unterschiedliche Compiler. Man braucht so viele Compiler als es Zielsysteme gibt. So etwa war die Situation vor der Erfindung von node.js.
Was nun, wenn wenn wir interpretierte Programme schreiben? Dann genügt es, auf allen Zielsystemen ein kompatibles Runtime-System mit einem Interpreter zu haben und wir können die Software auf praktisch jedem System ohne irgendeine Veränderung laufen lassen und ohne uns um den Binärcode kümmern zu müssen, denn der entsteht durch den Interpreter.
JavaScript, Lingua franca des Internet
HTML, die Webseitenbeschreibungssprache, erlaubt syntaktisch die Einbettung beliebiger Sprachen und es gab seitens Microsoft Versuche, alternativ zu JavaScript auch VBScript im Browser laufen zu lassen, doch da ein solcher VB-Interpreter nur im Internet Explorer verfügbar war, blieb es bei einem eher theoretischen Versuch. Der Normungsdruck auf Webseiten ist extrem und daher läuft im Biotop einer Internet-Seite ausschließlich JavaScript. Die große Verbreitung von JavaScript wurde ein starkes Motiv, JavaScript auch außerhalb von Webseiten einzusetzen und Anwendungen für alle möglichen Zielsysteme in JavaScript auszuführen.
JavaScript allein genügt nicht
JavaScript kann die Objekte einer Webseite ansprechen aber JavaScript kann keine Objekte des Zielsystems, also etwa des PC ansprechen. Soll Hardware in einem Zielsystem angesprochen werden, muss man dafür einen Treiber haben oder dieser Treiber selbst schreiben. Dieses Rad muss man aber nicht neu erfinden. Diese Elementarprogramme zur Ansteuerung der Hardware schreibt man nicht selbst, sondern kommuniziert über so etwas wie ein BIOS, also eine hardwarenahe Programmsammlung. Das Programm heißt node.js
.
Warum Pi Programmierung in node.js?
node.js
ermöglicht “natives” JavaScript (.js) außerhalb des Web-Browsers auf (nahezu allen) Computern- Anderseits Raspbian inkludiert Python, mit vielen verfügbaren Applikationen, weil es sehr einfach zu lernen ist
- Python vs. JavaScript = Einfacheit vs. Überall (Browser, Smartphone, PC, Pi, …)
- Ich hab mich für’s “1x Lernen” entschieden – deshalb JavaScript, und eben unter
node.js
(am Mac und Pi)
Editor
Die Programme kann man grundsätzlich mit jedem Test-Editor schreiben, doch hat sich Visual Studio Code auf allen Plattformen (Windows, Linux, Mac) etabliert und sollte auf keinem Desktop fehlen. Auch als eine Art Nachfolger von Notepad++ und anderer Texteditoren kann man es verwenden. Man installiert also Visual Studio Code, sofern das nicht schon geschehen ist, über die Downloadseite.
node.js
Nicht nur, dass wir Programme für einen MikroController schreiben wollen, sollen diese Programme mit JavaScript geschrieben werden. Doch wie wir wissen, ist JavaScript eigentlich eine Sprache für die eingeschränkten Bedingungen eines Browsers ohne Zugriffsmöglichkeit zu Hardware. Dazu benötigt man node.js
. node.js
ist ein RunTime-System, das für die gängigen Systeme PC, Linus, Mac sowie als SourceCode verfügbar ist.
Installation von node.js am PC
Gleich auf der Startseite der Homepage nodejs.org gibt es einen Button, mit dem man die msi-Version des Installationsprogramms (ca. 16 MB) downloaden kann). Die Installation erfolgt problemlos im Programmverzeichnis. Ebenso gibt es Versionen für Linus, Mac oder auch eine Sourcecode-Version.
Nun geht es darum, diese Installation zu testen. Man braucht dazu ein „Terminal“. Entweder eine klassische Eingabeaufforderung oder die PowerShell ISE oder ein Terminalfenster in Visual Studio Code. Man gibt ein
node --help
und bekommt Hinweise über die Optionen des node-Befehls.
Die Syntax, um die JavaScript mit node.js
erweitert wird, gibt es einleitend in Deutsch oder Englisch, die APIs nur in Emglisch.
Die Interaktion mit node.js
erfolgt über eine Konsole. Die Konsolenein- und -ausgabe erfolgt über das Objekt console
.
„Hello World“ über die Konsole
Das einfachste Beispiel für die Ausgabe eines Textes an die Konsole ist:
var msg = 'Hello World'; console.log(msg);
S:\desktop
. Hier die Befehle in klassischer DOS-Manier:C:\>S: S:\>cd desktop S:\>md hello S:\>cd hello
PS C:\>Set-Location S:\desktop PS S:\>New-Item -Name hello -ItemType directory PS S:\>Set-Location hello
code
Visual Studio CodeS:desktop\hello\>code
app.js
. So präsentiert sich der Code in Visual Studio Code (VS Code):node.js
mit node
auf und übergibt als Parameter ein Skript, hier app.js
.node.js
erzeugt wird.„Hello World“ am Webserver
Dieses Beispiel kommt in praktisch allen Einführungen in node.js
vor und darf daher hier auch nicht fehlen:
const http = require('http'); const hostname = '127.0.0.1'; const port = 3000; const server = http.createServer((req, res) => { res.statusCode = 200; res.setHeader('Content-Type', 'text/plain'); res.end('Hello, World!\n'); }); server.listen(port, hostname, () => { console.log(`Server running at http://${hostname}:${port}/`); });
Mit
node webserver.js
startet man den Webserver über die Konsole, und durch Eingabe von http://127.0.0.1:3000
in einem Browserfenster kontrolliert man die Ausgabe „Hello World“.
PowerShell-Skripts nutzen
In der Nachlese zum PowerShell-Vortrag von Roman Korecky wurde gezeigt, wie man sich Informationen über die aktuelle CPU besorgen kann, nämlich mit dem Befehl
PS s:\desktop>Get-WMIObject -Class Win32_ComputerSystem
Der Befehl liefert den Text:
Domain : WORKGROUP Manufacturer : System manufacturer Model : System Product Name Name : FRANZ-DIMOTION PrimaryOwnerName : Windows User TotalPhysicalMemory : 17115840512
Aus einer Konsole kann man den Befehl so ausführen:
S:\>powershell -command Get-WMIObject -Class Win32_ComputerSystem
Ein derartiges Objekt. findet man in node.js
nicht, doch soll das folgende Beispiel zeigen, wie man sich aus node.js
der Dienste von PowerShell bedienen kann, Ein Programmvorschlag aus stackoverflow.com schaut so aus:
var spawn = require("child_process").spawn,child;
child.stdout.on("data",function(data){ console.log("Powershell Data: "+ data); }); child.stderr.on("data",function(data){ console.log("Powershell Errors: "+ data); }); child.on("exit",function(){ console.log("Powershell Script finished"); }); child.stdin.end(); //end input
Man bekommt nur einen Text und kein Objekt zurück, dessen Eigenschaften „Manufacturer“, Model“… man abfragen könnte, aber die gewünschte Information kann durch Textbearbeitung leicht extrahiert werden. Genau so könnte man andere Programme aufrufen, die im Hostsystem verfügbar sind.
Franz war pensionierter HTL Lehrer (TGM), Präsident von ClubComputer, Herausgeber der Clubzeitung PCNEWS und betreute unser Clubtelefon und Internet Support. Er war leidenschaftlicher Rapid Wien Fan. Er ist leider Anfang Jänner 2024 nach langer schwerer Krankheit verstorben.
Neueste Kommentare