Archiv der Kategorie: Nerdiges

Asychrones Nerdfutter

Ich weiß ja, dass einige Nutzer über Suchbegriffe zu meiner Seite finden, die sehr IT-lastig sind. Meine kleinen Notizen und Code-Beispiele sollen Menschen helfen, deren Lage ähnlich die der meinen ist. Ich suche oft nach Lösungen zu bestimmten Problemen und finde sie oft nicht – weil ich dann vielleicht doch zu praktisch veranlagt bin und mir die fehlende Theorie über konkrete Beispiele aneigne.

Nachfolgender Code-Schnipsel ist das Ergebnis einer langen Problemsuche, bei der ich sogar die Netzwerkfachleute bei meinem Kunden aufgescheucht habe. Ich hatte wirklich geglaubt, dass der Fehler dort irgendwie im Netzwerk zu finden ist – aber das war, Stand heute, wohl doch nicht der Fall. Lösung des Problems war eine Kleinigkeit – aber die muß man erstmal wissen.

Wenn man eine Web-Applikation baut und diese mit einer Datenbank verbindet, dann findet zwischen dem Client und dem Server eine besondere Interaktion statt. Da auf der Clientseite niemals Datenbankanweisungen als Klartext sichtbar sein dürfen – jeder Browser kann den Quelltext einer jeden Seite anzeigen – müssen die serverseitigen Anweisungen auf dem Server erfolgen. Die Programmiersprache hierfür ist PHP.

Aber der Nutzer der Seite interagiert mit der Applikation auf der Clientseite. In dem er z.B. ein Passwort eingibt. Das erfolgt dann vermutlich über Javascript und mit einem der passenden Frameworks. D.h. diese Eingabe muss auf dem Server landen, also vom Client (Javascript) an den Server (PHP) übergeben werden. Diesen Mechansimus nennt man AJAX (Asynchronous JavaScript and XML) . Das A steht also für asynchron, d.h. die Auswertung auf dem Server ist dem Input nachgelagert und muss erst ein Feedback zurückgeben.

Ich bin da in eine böse Falle getappt, denn es gibt einen großen Unterschied bei diesem Feedback des Servers zwischen zwei Stati: complete und success. Das war mir nicht bekannt. Und wer oberflächlich nach Lösungen zu ähnlichen Problemen sucht, wird diesen Zusammenhang vielleicht auch erst viel zu spät begreifen. Vermutlich liegt das daran, dass AJAX Requests eher selten für das Erzeugen einer Datei verwendet werden.

Der AJAX Request gibt das Feedback success wenn er erfolgreich abgearbeitet wurde. Das Feedback complete wird ausgelöst, wenn das Ergebnis des Requests vorliegt und ist unabhängig von success (kann also auch bei einem Fehler ausgelöst sein, wenn ein Ergebnis nur teilweise vorliegt).

Konkretes Beispiel: Ich wollte anhand von zwei Clientseitigen Parametern (z.B. zwei Userangaben) das Erzeugen einer Datei auf dem Server auslösen und diese Datei dann als Input in meiner Applikation nutzen. Da ich bisher nur das Feedback success kannte und mich mit complete nie beschäftigt habe, fand diese Einbindung immer bei dem success Feedback statt. Das ist aber falsch, denn success bedeutet, die Dateierzeugung wurde erfolgreich initiiert (damit ist der AJAX Request erfolgreich abgeschlossen). Fertig ist der Request aber erst mit der vollständigen Datei und dem complete Feedback.

Ich habe also die ganze Zeit herumgerätselt, warum ich meine Datei manchmal nicht in mein Programm einbinden konnte. Da wir hier im Milisekundenbereich sind kam es ab und an vor, dass die Datei mit dem success Feedback schon vorlag und alles war OK – manchmal aber auch nicht. Die Einbindung muss also mit dem complete Feedback des AJAX Requests verbunden sein – nicht mit success. So erklärt sich der zunächst naheliegende Gedanke, dass im Netzwerk ein Problem vorliegt, welches die Datei blockiert. Naheliegend, aber falsch.

So sieht das konkret aus:

Dumm, wenn einem Nerd der Unterschied zwischen success und complete nicht geläufig ist …

Emacs – Die ersten Hürden (Tutorial 1)

Es ist mal wieder Zeit für neues Futter für die Nerds unter meiner Leserschaft 🙂

Vielleicht geht es nur mir so, aber in Zeiten, in denen eine schleichende Verdummung durch medialen Overkill mit Alterweisheit und langsam nachlassender Jugend einhergeht, da möchte man vieles einfacher gestalten. Und trotzdem auf nichts verzichten. Ich bin jetzt nicht einem bratzenhaften Minimalismus verfallen, suche aber nach Methoden, die – wenn sie einmal eingerichtet sind – den Nerdalltag vereinfachen.

Ganz konkret: wie kann ich auf einem S7+ von Samsung (Andoid Tablet mit 12″ Display) eine Nutzerumgebung einrichten, mit der ich auch Webentwicklung (wie CONSILIUM) bequem von überall aus gestalten und überwachen kann? Nicht nur für zwischendruch, sondern so, dass mir alle Möglichkeiten offenstehen. Nie wieder einen Laptop mitschleppen – Tablet einschalten, über Tethering auf dem Smartphone ins Netz und loslegen.

Eine Entwicklungsumgebung wie PHPStorm gibt es nicht für Android. Schade. Gibt es Online IDEs, die sich nutzen lassen? Ja, aber CLOUD9 von Amazon erlaubt mir keine Installation ohne node.js. Und sowas wie codeanywhere.com ist nett. Aber, da kann ich auch gleich einen einfachen Editor nutzen. Und dann kommt man an den Punkt, an dem ich schon so oft war und den ich wegen einer zu steilen Lernkurve immer aufgegeben habe. Der wohl kompletteste Editor für alle Belange von Softwareentwicklung ist „emacs“, ein Dinosaurier, unglaublich umfangreich, gemacht bereits zu Zeiten, als es noch keine Maus gab – wir brauchen also noch nicht einmal eine grafische Oberfläche. Back to the roots bedeutet hier in diesem Fall ein Gewinn an Produktivität.

Emacs in action
Sieht aus wie ein lokales Programm – ist aber keines

Wenn ich mich für so etwas einscheide und mir doch die Fähigkeiten aneigne, die ich für die Nutzung von emacs brauche – wIe kann ich dann auf meinem Windows Desktop und einem Android Tablet die gleichen Bedingungen schaffen ohne zwei Umgebungen verwalten zu müssen? In dem ich einen kleinen Server miete, für 1,- EUR im Monat, dort ein minimales Debian Linux laufen lasse und emacs installiere. Diesen steuere ich auf dem Desktop und dem Tablet über einen Telnet bzw. ssh Client an und habe überall die gleichen Bedingungen. Selbst wenn mein Rechner in Flammen aufgeht und mir die Bude abbrennt – alles liegt auf meinem eigenen Server.

Ein sehr durchdachtes Farbschema für emacs habe ich hier gefunden. Protesilaos Stavrou, so heisst der Macher dieser Farbschema, hat außerdem noch viele brauchbare Videos und Blogeinträge zum Umgang mit emacs erstellt.

Und jetzt „übe“ ich diese Tastaturkürzel, die tatsächlich sehr durchdacht sind. Für alle, die ebenfalls nach so einem Einstieg suchen, ist diese Liste vielleicht hilfreich.

--- emacs : Tastaturkürzel für Windows-User ---

Vorbemerkungen
Mit C ist bei emacs und allen Dokumenten/Handbüchern/Tutorials immer die STRG bzw. CTRL Taste gemeint. M ist ALT. Wird als Tastenkombination z.B. C-x C-f angegeben, muss nacheinander STRF+x und dan STRG+f + ENTER eingegeben werden. Manchmal folgt dann noch ein weiterer Parameter (wie etwa ein Suchkriterium). Diese Kommandozeilen-Aktionen werden immer in der unteren Kommandozeile angezeigt, unabhängig davon, ob emacs in einem Terminal läuft unter einer grafischen Oberfläche

Datei und Bufferhandling
C-x C-f    + ENTER : Öffnet einen Buffer, in dem alle Dateien des aktuellen Standardverzeichnis angezeigt werden. Navigieren durch die Liste + ENTER öffnet dann diese Datei.
C-x o      Wechselt durch die offenen Buffer
C-x 0      Schliesst den aktuellen Buffer
C-x 1      Schliesst einen anderen Buffer außerhalb des aktuellen
C-x 2      Teilt den aktuellen Buffer in zwei (vertikal)
C-x 3      Teilt den aktuellen Buffer in zwei (horizontal)
 
C-x C-s    Speichert die aktuelle Datei. Wenn noch kein Dateiname vergeben 
           wurde, muss dieser angegeben werden.
C-x C-w    Speichern unter
C-x k      Schliesst die aktuelle Datei.
 
C-x C-c    Schliesst Emacs
M-x shell  Öffnet das aktuelle Verzeichnis
 
Bearbeitung
Dadurch, dass die STRG Taste eine zentrale Rolle spielt, weisen Kombinationen wie STRG+C (C-c) oder STRG+V (C-v) auf andere Funktionen in emacs hin. Dafür wurde der CUA Modus entwickelt, der einfach in den Optionen aktiviert werden kann.  Das ist vor allem für Nutzer von Windows interessant, bei denen die Shortcuts nahezu überall Standard sind und man sich ungern umgewöhnen möchte.
 
Mit CUA Mode
C-c        Kopiert den markierten Text in die Zwischenablage
C-v        Fügt den Text aus der Zwischenablage ein
C-x        Schneidet den markierten Text aus und kopiert ihn in die Zwischenablage
 
Wenn Sie bereits an diese Emacs Kürzel gewöhnt sind, dann gelten für dieser drei Optionen diese Kürzel:

Ohne CUA Mode
 
M-w        Kopiert den markierten Text in die Zwischenablage
C-v        Fügt den Text aus der Zwischenablage ein
C-w        Schneidet den markierten Text aus und kopiert ihn in die Zwischenablage
 
C-x h      Alles markieren
 
 
M-u        Wandelt den markierten Text in Großbuchstaben um
M-l        Wandelt den markierten Text in Kleinbuchstaben um
M-c        Wandelt den ersten Buchstaben in einen Großbuchstaben um
 
C-x C-+    Schrift vergrössern
C-x C--    Schrift verkleinern
M-h        Markiert einen ganzen Absatz
C-M-h      Markiert eine Funktion
C-a        Cursor an den Anfang einer Zeile
C-e        Cursor an das Ende einer Zeile
C-p        Eine Zeile nach oben
C-n        Eine Zeile nach unten
M-b        Cursor ein Wort zurück
M-f        Cursor ein Wort vorwärts
C-l        Cursor in der Mitte des Screens platzieren
M-d        + goto-line x  : Springt zur Zeile x
M-x        + comment-region : Kommentiert die aktuelle Auswahl aus
M-;        Kommentiert die aktuelle Zeile aus
M-d        Löscht das Wort am Cursor

Demnächst folgen noch weitere Infos über die verschiedene Modi in emacs und wie sich Funktionen dort automatisieren lassen.

DSGVO & Co. – Ein notwendiges Übel

DSGVO & Co,

Günstiger, als die Texte selbst auszudrucken – die Verordnungen können als praktische Broschüren gekauft werden.

CONSILIUM – die Webversion meines Dienstplan-Tools geht allmählich in die Zielgerade. Eine erste Alpha-Version ist fertig – sie wird  derzeit mit verschiedenen Fallstudien getestet. Spätestens jetzt ist es wichtig, sich um ein scheinbar lästiges Thema wie den Datenschutz zu kümmern. DSGVO & Co. lassen grüßen. Was echte Mehrarbeit und ein schwieriges Unterfangen ist, ist aber meiner Meinung nach auch ein notwendiges Übel.

Datenschutz wird in Deutschland in besonderem Maße hochgehalten. Das ist auch gut so. Ich finde, die vielen Diskussionen, die sich gerade auch in diesen Zeiten zum Thema Datenschutz auftun, sind sehr wichtig. Die Verordnungen sind dabei insofern positiv zu sehen, als dass sie tatsächlich ein Instrument sind, wie Software für Effizienz sorgen kann, der Datenschutz aber gewährleistet bleibt. Im Klartext: Jede Form von Software kann mit Hilfe des Instrumentariums dieser Verordnungen datenschutzkonform umgesetzt werden. Auch wenn es manchmal viel Arbeit ist und damit Zeit und Geld kostet. Sie führen auch zu einer dringend notwendigen differenzierten Betrachtung von Gefahrenquellen – etwas, dass derzeit eher lästig und aufgezwungen wirkt und jeden Nutzer damit quält, sich mit so etwas wie „Cookies“ zu beschäftigen. Aber der Reihe nach … .

Die Hierarchie der Verordnungen ist eindeutig. DSGVO und ePrivacy Richtlinie sind europäische Verordnungen, wobei ePrivacy ein noch sich in der Veränderung befindlicher Teil des DSGVO ist.  Sie umfasst bereits die sogenannte Cookie-Richtlinie, zu der auch (Stand Februar 2021) ein erweiterter Entwurf gehört. Das Bundesdatenschutzgesetz ist nationales Gesetz und steht – sofern ich das als Nicht-Jurist überhaupt beurteilen kann – nicht im Widerspruch zur DSGVO.

Der Datenschutz hat also einen brauchbaren europäischen Rahmen. Ich denke, das ist ein wichtiger Aspekt. Zu erwähnen ist aber auch, dass die DSGVO von nationalem Recht eingeschränkt werden kann. Die Bedingungen dafür sind in der DSGVO selbst festgelegt. Wenn also in Deutschland immer wieder Projekte vertrödelt werden und auf den angeblich strikten Datenschutz in Deutschland verwiesen wird – das ist schlicht falsch. Die DSGVO betrifft alle europäischen Staaten. Wenn Deutschland zum Beispiel eine DSGVO-konforme Datenschutz-App nicht auf die Reihe kriegt, die Schweden aber damit schon seit Monaten fertig sind, dann hat das nichts mit Datenschutz in Deutschland zu tun.

Was sind nun die zentralen Bestandteile der DSGVO? Das lässt sich mit diesen Schlagwörtern zusammenfassen:

  • Einwilligung zur Verarbeitung von Daten zwingend und explizit notwendig
  • Transparenz und Zweckgebundenheit der Datenverarbeitung
  • Exklusive Hoheit über die Nutzerdaten beim Nutzer – dieser muss jederzeit erfahren können, welche Daten zu welchem Zweck über ihn erfasst wurden.
  • Das Recht auf Löschen von Daten und das Recht auf „Vergessenwerden“

Das bedeutet für die Softwarenutzung im Internet eine ganze Menge Änderungen. Es reicht also nicht, dass ein Nutzer eine E-Mail Adresse und ein Passwort für eine Software wählt – er muss auch erfahren können dürfen, was mit diesen Informationen passiert. Das sollte in den Allgemeinen Geschäftsbedingungen und Datenschutzbestimmungen festgelegt sein.

Viel entscheidender – und leider bisher nicht in Verordnungen gegossen – ist der sogenannte SaaS Vertrag („Software as a Service“). Dazu gibt es bisher keine eigene Verordnung – allerdings ist die Annahme, dass diese Art von digitalem Produkt durch die DSGVO abgedeckt ist, doch eher lückenhaft. Denn „SaaS“ – also das regelmässige Nutzen einer Software im Internet oder auf einem Server – bedeutet nicht selten, dass mehr als zwei Parteien involviert sind. Neben dem Anbieter und dem Kunden spielen auch personenbezogene Daten eine Rolle – im Falle von CONSILIUM sind das die Daten der MitarbeiterInnen, die in diesem Dienstplan-Tool verwaltet werden. Und es gibt dann noch den Service-Provider, der die Datenbank hostet. Auch der muß DSGVO-konform handeln. Hier könnte man meinen, dass das selbstverständlich sei – nun, das ist eine steile These. Wie oft hören wir davon, dass z.B. Passwörter in Datenbanken im Klartext gespeichert sind? Hier machen es sich einige Anbieter einfach, in dem sie annehmen, dass der Zugang zur Datenbank selbst verschlüsselt ist. Und das würde als Sicherheitsmaßnahme ausreichen. Das jedoch ist fahrlässig und auch ein indirekter Verstoß gegen die DSGVO.

Man muss also aufpassen, wenn AGBs und Datenbestimmungen für „Software as a Service“ definiert werden. Es gibt dafür auch kaum kostenpflichtige Templates oder gar kostenfreie Vorlagen, die man als „SaaS“ – Betreiber nehmen und anpassen könnte. Das liegt ganz einfach an den vielfältigen Szenarien, die sich aus der Software ergeben können. Welche Parteien sind involviert, wie müssen Sie durch die DSGVO in die Pflicht genommen und geschützt werden? Bei „CONSILIUM“ ist es z.B. so, dass die verwalteten MitarbeiterInnen durch einen Administrator selbst zu CONSILIUM Nutzern werden können. Damit können sie direkt über einen Teil ihrer Daten selbst verfügen – was bedeutet das für ihre Rechten und Pflichten? Ein sehr weites Feld … .

Aber das Wichtigste überhaupt: das Vertrauen. Der Nutzer der Software muss Vertrauen haben können. Deswegen habe ich mich entschlossen, zusätzlich zu den AGBs und der Datenschutzbestimmung auch einen eigenen Datenschutzkodex zu verfassen. Diese Kodex ist jenseits von halb-juristischem seitenlangem Kauderwelsch eine Eigenverpflichtung, die genau diesem Vertrauensaufbau dienen soll. Man stelle sich vor, als Softwarebetreiber würde man in den begründeten Verdacht geraten, Daten an Dritte zu verkaufen – das wäre der Super-GAU. Es muss also mehr als deutlich werden, dass das Werben um berechtigstes Vertrauen Zukunft für den Betreiber schafft und in dessen Interesse liegt.

Mehr dazu in den nächsten Wochen, wenn als diese Erzählungen praktische Formen annehmen.

Linux has taken over

Ich hatte so meine Phasen … mit Windows 3.1. Ende der 80er Jahre angefangen, dann eine erste Phase mit Linux gegen Ende der 90er Jahre, dann viele Jahre MacOSX, dann nochmal Linux und jetzt wieder – auch beruflich bedingt – nutze ich Microsoft Windows. Aber man schaut sich immer wieder die Alternativen an, was dank Virtualisierung zum Ausprobieren sehr einfach ist. Eines sticht jedoch heraus – Linux ist überall. Sogar in Windows.

Ich bin mit meiner Einschätzung nicht allein, aber für manche wirkt es wie dieser Aprilscherz, der vor einigen Jahren mal veröffentlicht wurde und denen viele gar nicht auf den Leim gegangen sind. Viele haben nach diesem Artikel an einem 1. April eine sachliche Diskussion zu dem Thema angefangen. Weil es tatsächlich nicht abwegig ist.

KDE Anwendungen unter Windows 10

Meiner Meinung nach ist es nur noch eine Frage der Zeit, bis Microsoft den eigenen Kernel zugunsten eines Linux Kernels aufgeben wird. Was sich mit dem Linux-Subsystem für Windows schon angekündigt hat und sich mit der Plattform-unabhängigen Powershell fortsetzt, ist heute schon im Microsoft Store unter Windows 10 zu sehen: dank des Linux Subsystems laufen Linux Anwendungen vorzüglich unter Windows. Populäres Beispiel ist die Anwendung „Okular„, mit der sich unter anderem PDFs bearbeiten lassen. „Okular“ ist normalerweise Teil des KDE Desktops.

Dokumentbetrachter OKULAR  unter Windows 10

OKULAR – Der Dokumentbetrachter und PDF Editor des KDE Desktop lässt sich über den Microsoft Store problemlos für Windows 10 anwenden

Weitere Linux-Anwendungen unter Windows 10

Ein anderes Beispiel ist „Kate„, der KDE Editor für Programmierarbeiten aller Art, ebenfalls unter KDE. Diese Anwendungen laufen flüssig unter Windows 10, da sie auf dem QT-Framework basieren. Dieses Framework erlaubt die Entwicklung einer Anwendung auf einer beliebigen Plattform – das Endergebnis läuft auf allen bekannten Betriebssystemen. Das spart Entwicklungszeit und -kosten.

KDE Editor KATE unter WIndows 10

Der KDE Editor KATE lässt sich ebenfalls über den Microsoft Store für Windows 10 verwenden

 

Andere Beispiele sind der LaTex-Editor „Kile„, das Matheprogramm „LabPlot“ oder Visualisierungstool „Filelight„. Auch einige Anwendungen des anderen großen Desktops unter Linux („Gnome“) sind unter Windows zu Hause. Das bekannteste Programm ist sicher die Bildbearbeitung „Gimp“. Aber auch die Excel-Alternative „Gnumeric“ oder die Textverarbeitung „Abiword“ gibt es als Windows Versionen.

Vieles ist aber auch einfach nur Politik. Exemplarisch für die Notwendigkeit, den Unterbau von sämtlichen Computersystemen zu vereinheitlichen, ist das Zusammenspiel zwischen Desktop Programmen und mobilen Programmen. Das bedeutet derzeit noch, das der Quellcode für die Plattformen separat kompiliert werden muss – Mehrarbeit und zusätzlicher Support wird dadurch notwendig. Das QT-Framework schafft hier Abhilfe. QT wird von Trolltech entwickelt. Trolltech gehörte eine zeitlang zu NOKIA. NOKIA gehört zu Microsoft … den Rest kann man sich denken. Ebenso den Weg in die Nahe Zukunft und die Intention von Microsoft. Auch wenn ich diese Zusammenhänge jetzt sehr vereinfacht und verkürzt dargestellt habe.

Linux has taken over …

Ich kann das aus meiner eigenen beruflichen Umgebung bestätigen. Vor wenigen Jahren, waren Linux Server noch kein Thema. Dann aber kamen viele Unternehmen auf den Trichter, nicht die Software, sondern ihren Support zu verkaufen (Fedora, Canonical) und plötzlich war Linux das einzige Server-Betriebssystem. Android nutzt einen Linux-Kernel, MacOS basiert auf einem FreeBSD Unterbau mit Unix-kompatiblen Kernel. Und Windows hat ein Linux Subsystem, dass immer besser mit Windows Software interagiert. Microsoft muss nur noch Betonklötze wie die Registry und DirectX loswerden. Dann wird auch hier Linux dominieren. Windows in der jetzigen Form muss für Microsoft wie ein Klotz am Bein sein.

Linus Torvalds, der Initiator von Linux erklärt in diesem kleinen Ausschnitt, warum seiner Meinung nach LINUX nicht überall auf Desktop-Rechner genutzt wird. Die Antwort ist relativ simpel und einleuchtend: 99% der Nutzer haben weder Zeit noch Interesse daran, ein Betriebssystem zu installieren. LINUX auf Desktop Rechner vorinstalliert – solche Versuche hat es gegeben, solche Rechner gibt es mit grandioser Ausstattung. Es hat sich schlicht niemals durchgesetzt.

Fazit

Mit Windows ohne mobile Version und der Notwendigkeit, Verbindungen zu Android und IOS permanent separat zu unterhalten – dazu noch der eigene Windows Unterbau – wird Microsoft nicht weit kommen. Die Systeme werden sich langfristig angleichen müssen. Das bedeutet aber natürlich nicht das Ende des Softwaregiganten – im Gegenteil: schon jetzt verdient Microsoft richtig Kohle mit Azure und Office, das zurecht die führende Bürosoftware ist. Das wird so bleiben. Nur weil das Betriebssystem Open Source wäre, bedeutet das nicht das Ende der klassischen proprietären Software, Werden in Zukunft immer mehr Spiele unter Verzicht auf DirectX produziert, immer mehr Software mit plattformunabhängigen Frameworks, dann ist meiner Meinung nach klar, wohin die Reise geht.