November 9, 2020

Servicewüste Deutschland?

Werden wir jetzt alle zu Menschen zweiter Klasse?

Weiterlesen
November 8, 2020

Mit Node.js gegen den Rest der Welt - Heute Webserver

Webserver in Node.js

Weiterlesen
Cover Image

Servicewüste Deutschland?

Werden wir jetzt alle zu Menschen zweiter Klasse?

November 9, 2020 - Lesezeit: ~1 Minute

Gerade in der momentanen Situation (Corona-bedingt) sollte man meinen, die "Läden" sind daran interessiert Geschäfte zu machen!?

Leider scheint das nicht überall der Fall zu sein. Der Gang in ein Autohaus für einen Jahreswagen (Preis um 20.000 €) endet im Nachdenken. Zunächst wird man in den Altbau geschickt, man versteht ja, dass man in Coronazeiten nicht erwarten kann, begleitet zu werden. Der Altbau sieht aus wie er heißt: ALT.

Man kommt sich plötzlich vor, wie ein Mensch 2. Klasse... Soll das so sein?

Die Mitarbeiter lassen einen für eine Zigarette warten und bekommen es nicht mal hin den Mundschutz gescheit zu tragen... Gespräch vor der Probefahrt vielleicht 10 Wörter seitens der Mitarbeiterin, nach der Probefahrt auch nicht viel mehr....

Auch wenn das Auto noch so toll war, man wird sich erstmal noch zwei andere ansehen. Ja das passiert, wenn man mit dem Service unzufrieden ist.

Hier bei Symolo wird jeder Kunde gleich freundlich und zuvorkommend behandelt, egal ob er 200 € im Jahr Umsatz gebracht hat oder 20.000 €. Unserer Meinung nach ist das selbstverständlich und gehört sich so!


Cover Image

Mit Node.js gegen den Rest der Welt - Heute Webserver

Webserver in Node.js

November 8, 2020 - Lesezeit: 28 Minuten

Mit Node.js lässt sich JavaScript in einer Konsolenumgebung starten, ohne dass dazu eín Browser notwendig wäre. Das eröffnet ganz neue Möglichkeiten, da so JavaScript aus der Sandbox des Browsers herauskommt und die bisherigen Beschränkungen, wie Dateizugriff und betriebssytemspezifische Abfragen nun entweder direkt möglich sind oder unkomplitziert implementiert werden können. Node.js kommt mit einem Paketverwaltungssytem auf den Rechner. Dieser Manager liefert Zugriff auf eine große Zahl von Paketen, in denen viele Funktionen in Node.js bereits realisiert sind oder Node.js durch z.B. Platform invokes sinnvoll erweitert.

Diese Pakete wiederum können Verweise auf andere Pakete haben, falls sie diese benutzen. Ganz ähnlich zu dem Paketmanager von Debian. Wenn z.B. ein FTP Paket geladen wird, wird im Hintergrund das Paket für den Dateizugriff ebenfalls installiert. Mithilfe einer kleinen Konfigurationsdatei und einem ordnerbasierten Paketmanagement, können verschiedene Versionen auf einem Rechner nebeneinander installiert werden. Dies ermöglicht verschiedene Projekte in verschiedenen Versionständen nebeneinander zu betreiben. Weiterhin ist der Anspruch, auf jedem System lauffähig zu sein und das Prinzip "Write once, run anywhere" passend umzusetzen. Intressant wird es immer dann, wenn man versucht betriebssystemspezifische Implementierungen zu nutzen.

Da Node.js unkompliziert sowohl unter Windows als auch unter Linux verwendet werden kann, ist es naheligend, als JavaScriptentwickler einen Blick zu wagen. Man kann im Gegensatz zu anderen Systemen den Know How Aufbau für eine Skriptsprache minimal halten und schnell Ergebnisse erzielen. Um mit der ganzen Umgebung etwas warm zu werden und weil ich für die Entwicklung einen kleinen Webserver benötigt habe, hab ich das Ganze mal mit einem Nodeskript umgesetzt. Natürlich ist dieser Server nicht vergleichbar mit der voll ausgestatteten Variante eines Symolo Servers, aber für kleine Zwecke ist auch ein solches Skript durchaus hilfreich.

Die Funktion des Skriptes umfasst lediglich das Starten eines Webservers, der eine begrenze Anzahl von Dateien aus einem Ordner und dessen Unterordnern laden kann. Dieses Skript ist nicht für Produktivumgebungen gedacht. So, genug chitchat, los gehts:

const http = require("http");
const path = require('path');
const fs = require('fs');

const HOST = "localhost";
const PORT = 8190;
const HOMEPATH = "dmf";

const requestListener = (requestresponse=> {

  let filePath = './' + request.url;
  if (filePath == './/'filePath = './' + HOMEPATH + '/index.html';
  else filePath = './' + HOMEPATH + request.url;

  filePath = filePath.split('?')[0];

  let extname = path.extname(filePath).split('?')[0]; // filter the queryparams

  let contentType = 'text/html'// set default content type
  switch (extname) {
    case '.js'contentType = 'text/javascript'break;
    case '.css'contentType = 'text/css'break;
    case '.json'contentType = 'application/json'break;
    case '.png'contentType = 'image/png'break;
    case '.jpg'contentType = 'image/jpg'break;
  }

  fs.readFile(filePath, (errorcontent=> {
    if (error) {
      if (error.code == 'ENOENT') {
        fs.readFile('./404.html', (errorcontent=> { // some nice error handling
          response.writeHead(200, { 'Content-Type': contentType });
          response.end(content'utf-8');
        });
      }
      else {
        response.writeHead(500);
        response.end('Sorry, check with the site admin for error: ' + error.code + ' ..\n');
      }
    }
    else {
      response.writeHead(200, { 'Content-Type': contentType });
      response.end(content'utf-8');
    }
  });
};

const server = http.createServer(requestListener);
server.listen(PORTHOST, () => { console.log(`Server is running on http://${HOST}:${PORT}`); });

Ein minimalistischer Server auf nur 50 Zeilen. Natürlich wird hier Gebrauch von einigen Paketen gemacht, die viele der Grundarbeiten bereits erledigen. Trotzdem kann sich das Ergebnis sehen lassen. Dieses Skript, unter und für Windows entwickelt, ist auch aus dem Stand unter Linux und MacOS lauffähig. Da hier Dateizugriffe verwendet werden, ist dieses Skript leider nicht für den direkten Einsatz im Browser verwendbar. Dafür beim nächsten Mal ein Beispiel.


Cover Image

Es müssen nicht immer die Großen sein

Open Source vs. Global Player

November 3, 2020 - Lesezeit: 3 Minuten

Wer glaubt, dass er im Internet nur auf youtube Videos schauen kann, Quellcodes nur auf github hosten oder chatten nur mit whatsapp machen kann, liegt ziemlich falsch. Zu den meisten Diensten gibt es alternative Implementierungen, die meistens sogar Open Source sind. Das hat ja nicht nur den Vorteil, dass sich auch mal Fremde den Source Code anschauen und was beitragen können, sondern auch, dass in Bereichen, wo Datenschutz eine Rolle spielt mal noch eine unabhängige Instanz das Ganze prüfen kann.

Die non-profit Matrix.org Foundation versucht sich an einer überarbeiteten Definition von freier Kommunikation. Dabei wird aber nicht parallel zu whatsapp, signal, telegram und Konsorten gearbeitet, die werden einfach knallhart integriert. Den Versuch gab es schon mal mit XMMP und IRC funktioniert auch ganz ähnlich, so richtig gewuppt hat das aber nicht. Mal sehen ob es diesmal besser klappt.

Mit jitsi-meet kann man easy eigene Videokonforenzen abhalten ohne dazu über irgendwelche Server in China geroutet zu werden. Mit gitea baut man sich einfach seinen eigenen github (gut, ich meine wer ist nicht bei github). Und selbst youtube kann man in Eigenregie mit invidious betreiben.   

Jetzt ist es natürlich so, dass nicht jeder einen voll ausgestatteten Webserver sein Eigen nennt und sein Wohnzimmer in ein Datacenter verwandelt hat. Denn um die Dienste zu betreiben ist ja nicht nur die Software notwendig, sondern ja auch entsprechende Infrastruktur und natürlich ein passender Internetanschluss. Zudem müssen die Server gepflegt werden. Nicht nur die Software und das Betriebssystem müssen aktuell gehalten werden, auch muss machmal die Hardware nachjustiert werden.

Glücklicherweise ist das Internet nicht nur mit Werbung und Bots zugemüllt, sodass man immer mal wieder über ein toll gemachte Seite stolpert. Soeben passiert! Und jetzt kommts: Der Betreiber hat sogat ein paar Open Source Dienste selber gehostet. Also, wer sich die vorgestellten Dienste mal ansehen will ohne die Couch durch einen Serverschrank zu ersetzen, dem sei die Seite sp-codes.de von samuel-philipp.de wärmstens an Herz gelegt.   

Und das alles nur, weil ich ein Plugin für Bludit gesucht habe...


Cover Image

linux shell skript immer als administrator ausführen

hilfreiches skripttool

November 3, 2020 - Lesezeit: 78 Minuten

Problemstellung:
Wir haben ein Serverskript das wir immer als Administrator ausführen.
Dieses Skript führt ein Serverupdate bei uns durch.
Wenn das Skript nicht als Administrator ausgeführt, wird führt dies zu einem unvollständigen Update, da für bestimmte Dateien die Berechtigung fehlt.
Daraus resultiert unter Umständen eine unvollständige Installation.
Um eine Fehlerquelle auszuschließen haben wir nach einer Möglichkeit gesucht wie sichergestellt werden kann, dass das Skript immer als Administrator ausgeführt wird.

Lösung:

if [[ $EUID -ne 0 ]]; then
  sudo PATH/ScriptToExecute.sh
else
  #ScriptCode
fi

$EUID stellt die Identität des angemeldeten Users dar der für die Rechteprüfung genutzt wird hierbei hat er root Nutzer die 0.

-ne ist der Operator für ungleich

Das Skript prüft ob es sich bei dem angemeldeten Benutzer um den Root handelt.

Ist das nicht der Fall: Ruft sich das Skript erneut mit Rootrechten auf.


Über

Symolo - systems of mobile logistics
Wir sind Anbieter für Softwarelösungen im Logistikbereich und darüber hinaus.
https://symolo.de