.NET und C# unter Linux

Da schau, meine Installationen von .NET 6 als auch .NET 7 gingen unter Mint Linux 21 einwandfrei durch. Und zwar keine „inoffizelle“ Sache wie Mono, sondern das „echte“ .NET von Microsoft. „.NET und C# unter Linux“ weiterlesen

WordPress-Desaster

Ein Standbein von mir ist ja Webprogrammierung (auch wenn das Thema in der letzten Zeit immer weniger wichtig wird) und ich lehne mich  aus dem Fenster, dass ich Alles zu HTML und so gut wie Alles zu JavaScript kenne, was es zu wissen gibt. Im Grunde auch zu CSS, soweit es relevant ist. Auch zu CMS wie Joomla! und WordPress sollte ich mich ziemlich gut auskennen. Ich betreibe damit mehrere Seiten und habe dazu diverse Bücher geschrieben und Videotraining aufgenommen. Aber ein grafischer Builder, der als Plugin in einer WordPress-Installation von einer Agentur eingerichtet wurde, hat mich ausgeknockt und den Abschluss einer trivalen Aufgabe sabotiert. „WordPress-Desaster“ weiterlesen

Online-Training zu VB.NET

Mein neues Online-Training zu VB.NET ist bei LinkedIn Learning erschienen. Genaugenommen ist es ein Update von einem Training aus dem Jahr 2015, was damit ganz offensichtlich in die Jahre gekommen ist. Visual Basic ist eine objektorientierte Programmiersprache, die von Microsoft entwickelt wurde, um die Entwicklung typsicherer .NET-Apps zu ermöglichen. VB kommt in Web-, Cloud-, Desktop- und mobilen Umgebungen sowie in der Spieleprogrammierung zum Einsatz und eignet sich zudem bestens für den Einstieg in die Programmierwelt.

Mit Visual Basic und Visual Studio schnell und einfach programmieren lernen aus dem Kurs „Visual Basic Grundkurs“ von Ralph Steyer

Dieses Video-Training stellt Ihnen zunächst allgemeine Grundsätze der Programmierung, die IDE Visual Studio und das .NET-Framework vor. Danach erlernen Sie den Umgang mit Projekten in Visual Studio, um sich alle wichtigen Aspekte von „VB.NET“ Schritt für Schritt zu erarbeiten: die Syntax, die verschiedenen Arten von Programmen, grafische Oberflächen bis hin zum Einsatz von Programmen mit Datenbankanbindung. Ein eigenes Kapitel widmet sich VBA (Visual Basic for Applications), das in vielen Office-Anwendungen als Makrosprache zur Verfügung steht.

Nun kann man sich fragen, ob VB.NET überhaupt noch eine Relevanz hat? Alles rund um altes Basic als auch die Erben Visual Basic, VB.NET bzw kurz VB und VBA wird ja seit zig Jahren totgesagt. Genauso wie COBOL. Was letztendlich die Antwort impliziert – die alten Technologien und Sprachen werden totgesagt, neue Technologien und Sprachen gehyped und nach dem Hype bleiben die totgesagten Technologien und Sprachen übrig. „Online-Training zu VB.NET“ weiterlesen

JavaScript-Nachtrag

Wenn ich für LinkedIn Learning (LiL) Training aufnehme, berücksichtige ich natürlich zur Zeit der Aufnahme nur den Stand der aktuellen Situation. Wenn sich eine Sprache oder ein Umfeld weiterentwickeln, kann das Ergänzungen oder Aktualisierungen angebracht bis notwendig machen. Im Gegensatz zu frühreren Zeiten bei Video2Brain, als die Trainings noch auf DVDs veröffentlicht wurden, macht die Onlinepublikation solche Anpassungen sehr leicht.

In dem Training JavaScript Grundkurs 1: Grundlagen und Syntax wurde gestern so ein Nachtrag freigeschaltet. Es geht darin als wichtigestes Thema um Module sowie den Import und Export selbiger. „JavaScript-Nachtrag“ weiterlesen

JavaScript: Debugging

Nachdem ich im Dezember für Videoaufnahmen bei LinkedIn Learning (LiL) in Graz war, ist gestern das erste der da aufgenommenen Trainings veröffentlich worden. Titel ist „JavaScript: Debugging“ und das macht deutlich, um was es geht. „JavaScript: Debugging“ weiterlesen

Schulungsjahr 2022 beendet

Gestern habe ich meinen letzten Schulungstag 2022 (falls nicht noch ganz kurzfristig was aufläuft) gehalten (zu Python) und eben habe ich die letzte Rechnung für eine Schulung erstellt und versendet. Damit schließe ich das Schulungsjahr 2022 ab. Allerdings kommt vor Weihnachten noch eine Woche mit Videoaufnahmen bei LinkedIn Learning in Graz, worauf ich mich richtig freue.

Einführung in JavaFX/OpenJFX

Wenn ich die Schulungen dieses Jahr durchgehe, kamen wieder eine ganze Reihe an Themen vor. Wie üblich mit einigen Schwerpunkten, die sich im Vergleich zu den Jahren zuvor aber teils verschoben haben. Andere Themen sind komplett weggebrochen oder ich habe sie nicht annehmen können und ich muss mir überlegen, ob ich die weiter im Schulungsprogramm behalte. Auch wenn ich sie persönlich meist immer noch interessant finde (etwa F#, GWT oder Perl) bzw. unabhängig von direkten Schulungen oft verwende (etwa Eclipse oder alles rund um mein Lieblingsbetriebssystem Linux, wofür ich aber keine aktuelles Schulungsagenda mehr ausgearbeitet habe – zu nahezu allen anderen Schulungthemen habe ich ja eigene Bücher und Schulungsunterlagen und/oder Videotraining bei LiL erstellt).

„Schulungsjahr 2022 beendet“ weiterlesen

Radikalschnitt

Die letzten Wochen standen bei mir ganz im Zeichen sehr vieler Schulungstage. Zuerst im Rahmen mehrerer Fachinformatikerausbildungen zu Python und MySQL, aber die letzten 3 Wochen komplett zu Java und JavaFX/OpenJFX. Dabei ging es bei purem Java um eine „Werkstatt“ im Rahmen der Fachinformatikerausbildung, bei der noch mit Swing gearbeitet wurde.

Bei dem Kurs zu JavaFX habe ich hingegen professionelle Java-Entwickler einer Berliner Behörde geschult, die vorher bei einem anderen Trainer einen Kurs zu Maven gemacht hatten und danach eben noch JavaFX kennenlernen sollten. Zum Teil hatten die aber auch schon vorher mit JavaFX gearbeitet.

Der JavaFX-Kurs war bereits früher angesetzt gewesen, aber der
eingeplante Trainer war ausgefallen und ich habe den Kurs mit einem neuen Termin kurzfristig übernommen. Die beiden Tage habe ich zwar recht schwer untergebracht und eigentlich war ich bereits so ausgelastet, dass ich im Grunde keine Termine mehr annehmen wollte. „Radikalschnitt“ weiterlesen

Neue Videos im Online-Training zu JavaScript

Bei LinkedIn Learning (LiL) wurde mein eines Videotraining zu JavaScript um zwei Themen erweitert. Das eine dreht sich um Promises und das andere, wie man Elemente mit querySelector und querySelectorAll auswählen kann.

Lambda-Ausdrücke in JavaScript

Diverse Trainings von mir bei LinkedIn Learning (LiL) werden nach und nach modifiziert bzw. erweitert, wenn mir etwas einfällt und/oder die Entwicklung von Technologien über die Zeit das sinnvoll macht. In meinem aktuellen JavaScript Grundkurs 2: Programmiertechniken und Frameworks war das gerade wieder der Fall und gestern wurden die Erweiterungen freigeschaltet. Ich hatte da bisher Lambda-Ausdrücke sehr stiefmütterlich behandelt. Was 2 Gründen geschultet war:

  1. Ältere Browser haben diese nicht unterstützt.
  2. Anonyme Funktionen bzw. innere Funktionen decken in JavaScript im Grunde alles ab, was Lambda-Ausdrücke leisten. Diese Sprachvorteile haben die meisten anderen Programmiersprachen nicht und Lambda-Ausdrücke kompensieren dort hauptsächlich diesen Mangel. Die Notwendigkeit für Lambda-Ausdrücke in JavaScript besteht also im Grunde nicht oder besser nicht so stark.

Dennoch war es Zeit, das Thema zu ergänzen. Denn mittlerweile sollten die Browser, die Lambda-Ausdrücke nicht unterstützen, verschwunden sein, viele Programmierer setzen diese Lambda-Asudrücke in der Praxis ein (oft, weil vom Konzept analog zu anderen Sprachen) und die Syntax ist oft kompakter als bei anonymen Funktionen.

Deshalb habe ich gleich drei Videos rund um Lambda-Ausdrücke in JavaScript ergänzt:

Der JSON-Kleber zwischen Python und JavaScript

Ich ömmel mich immer noch weg, wenn ich mich daran erinnere, wie JavaScript früher schlechtgeredet wurde. Oder wenn auch heute noch Leute abschätzig von JavaScript reden und dann ständig mit JSON arbeiten. Das ist wie bei den Unwissenden, die über Linux lästern oder angeblich niemals verwenden würden und dann ihr Android-Handy, ihren Smart-TV, ihr Entertainment-System im Auto etc. verwenden. JSON ist ja pures JavaScript, aber zudem mittlerweile ein Datenformat, was aus dem modernen Datenaustausch nicht mehr wegzudenken ist. Auf Klartextbasis kann man über JSON beliebige Datenstrukturen austauschen, man kann aber auch Programme konfigurieren und ähnliche Dinge machen. Und nahezu alle Sprachen unterstützen JSON mittlerweile. Natürlich auch Python.

In Python gibt es im Modul json Möglichkeiten, womit man JSON serialisieren und deserialisieren kann. Mit anderen Worten – man kann ein JSON-Objekt bzw. eine JSON-Datenstruktur nehmen und daraus einen String machen und einen so stringifizierten JSON-Ausdruck wieder zurück in ein Objekt wandeln. In dem aktuellen Entwickler-Tipp der Woche zu Python bei LinkedIn Learning geht es genau um das Thema.

Log4shell oder warum angeblich das Internet brennt

Die Medien berichten mal wieder über einen Hacker-Angriff. Oder genauer – eine Schwachstelle in Log4J, über die wohl im Moment ziemlich viele Angriffe auf Server gefahren werden. Log4J bezeichnet eine sehr oft eingesetzte Java-Bibliothek zum Protokollieren von Serverzugriffen.

Schon eigenartig, aber es sieht so aus, als hätte ich etwas von Nostradamus. Denn gerade halte ich zwei Schulung zu JavaScript und in der Einleitung zu solchen Schulungen erzähle ich immer davon, wie stark JavaScript in der Vergangenheit unterschätzt wurde. Und dass man immer mehr Projekte finden kann, bei denen JavaScript zum Einsatz kommt und sogar teils Java verdrängt, da JavaScript schlanker und vor allen Dingen einfacher und wartbarer ist. M.W. steigt etwa Paypal seit Jahren Server-seitig immer mehr von Java auf JavaScript um.

Das zweite eigenartige Phänomen ist, das ich bei JavaScript immer die Build-In-Funktion eval vorstelle – mit dem Merksatz „Eval ist evil“. Denn damit ist Code injection ein Kinderspiel – wenn freie Daten eingegeben werden können. Auch beim Server.

Und Punkt Nummero 3 ist, dass ich mit Node.js letzte Woche in der Schulung ein kleines Protokollier-Skript für einen Webserver unter Node.js vorgestellt habe. Also so etwas wie Log4J-Light mit JavaScript.

Als hätte ich es geahnt, dass die Sache am Wochenende nach meinen Schulungen ein großes Thema wird. Oder haben die Hacker sich bei meiner Schulung die Anregung geholt? Muss mal meine Schulungsteilnehmer befragen, ob die eine Praxisübung machen wollten und die aus dem Ruder gelaufen ist ;-).

Ach nein – Log4J ist ja Java – und kein JavaScript.

Es tut gut, wenn man seit Jahrzehnten Fan des lange verlachten JavaScript ist und nun JavaScript sich als sicherer und vor allen Dingen schlanker und wartbarer erweist als die hochgelobten, schwergewichtigen Konkurrenten. Bei denen kann man oft in den Unmengen an Code einfach nicht mehr erkennen, wie die Geschichte wirklich abläuft. Und daraus resultieren eben Schwachstellen und Sicherheitslücken, die in einem schlankeren System viel schneller aufgedeckt und beseitigt werden können.

Aschenbrödel hat sich durchgesetzt.

Nach 2 Jahren – erstmals wieder auf Tour

Es ist 2 Jahre her, seit ich das letzte Mal beruflich auf Tour war. Dank Corona ist wirklich „Alles!“ auf remote umgestellt. Doch diese Woche bin ich bei einer Präsensschulung. Wirklich vor Ort in einem Schulungsraum. Mit Teilnehmern. Unglaublich. Ich erinnere mich kaum noch, wie das geht.

Wobei die Maßnahme hybrid abläuft. Insgesamt 4 Wochen (mit Pause über Weihnachten) sind das 160 Stunden, von denen ich 120 Stunden betreue und der Rest von den Teilnehmern mit Praxis gefüllt wird. Anders ging es nicht und ich werde auch nur einen Teil der Zeit live vor Ort sein (ab nächster Woche teils parallel bzw. im Wechsel mit einer anderen Maßnahme). Den Rest schalte ich mich per Teams dazu.

Die gesamte Woche ist vor Ort geplant und ich bin heute morgen ganz früh losgefahren. Die Schulung ist in Marburg, was eine blöde Entfernung ist. Im Grunde kann ich das täglich anfahren, aber das kostet Zeit und rechnet sich nicht wirklich. Ich brauche einfach (ohne Stau) gut 80 – 90 Minuten. Vom Umweltgedanken ganz zu schweigen.

Also habe ich ein Monteuerszimmer in der Nähe gemietet. Etwa 8 – 10 Kilometer von Marburg weg und ziemlich „Hinter den 7 Bergen bei den 7 Zwergen“. Nur soviele Zwerge gibt es hier nicht. Keine Gaststätte, kein Supermarkt oder sonst etwas. Aber das Zimmer ist okay und ich bin allein im Haus. Ich hab meine Ruhe und werde die nächsten Tage vielleicht mal rumlaufen. Hier in dem Dorf und/oder in Marburg. Aber heute muss ich noch was arbeiten und gehe früh ins Bett, denn ich bin verdammt früh losgefahren. Die Schulung geht um 8:00 Uhr los und ich hatte ziemlich Sicherheitsreserve einkalkuliert. Und ich muss mich erstmal wieder auf extern einstellen. Bin wirklich total aus der Übung und die Abwechselung vom Remote-Trott tut gut – auch wenn ich hier wirklich komplett in der Walachei bin.

Die Schulung selbst dreht sich um JavaScript und jQuery und ist Teil einer Fachinformatikerausbildung im Rahmen einer Umschulungsmaßnahme. So ganz sicher ist auch noch nicht, ob die Angelegenheit nach dieser Woche nicht auch komplett auf remote umgestellt wird. Auch heute waren drei Teilnehmer nicht vor Ort, sondern aus verschiedenen Gründen per Teams dabei. Der Rest saß mit Maske da. Eigentlich wollte ich die kommenden 2 Wochen 1x die Woche anfahren und im nächsten Jahr nochmal mehrere Tage vor Ort sein. Aber die Informationen zu Corona werden immer unangenehmer. Mal sehen, aber erst einmal mache ich hier den Vor-Ort-Job.

Let … it be

Bei meinem Online-Kursen zu JavaScript (JavaScript Grundkurs 1: Grundlagen und Syntax, JavaScript Grundkurs 2: Programmiertechniken und Frameworks und JavaScript: In HTML 5 arbeiten) für  LinkedIn Learning (LiL)  kam vor einiger Zeit von einem Anwender die Frage auf, warum ich die Anweisung let nicht behandle? Die Frage war berechtigt und ich habe ein Video für dieses Thema nachgereicht, was ja aufgrund der modernen Architektur der LiL-Lernplattform kein Problem ist. Wobei ich ursprünglich natürlich gewisse Gründe hatte, die Verwendung von let so stiefmütterlich zu behandeln. Denn die Unterstützung ist immer noch sehr eingeschränkt. Anyway – serverseitig ist let mittlerweile Standard und ganz moderne Browser unterstützen die Anweisung auch, so dass man – mit der nötigen Vorsicht auf Client-Seite – damit arbeiten kann.

Der Nachtrag wurde Anfang der Woche in das Training Grundkurs 2: Programmiertechniken und Frameworks als Aktualisierung eingefügt.

Gulp.js: Workflow in Webprojekten

Zur Zeit habe ich ja jede Woche die Veröffentlichung eines neuen  Entwicklertipps der Woche zu Python bei LinkedIn Learning (LiL) zu vermelden.

Aber es werden zusätzlich immer wieder vollständige Videotrainings publiziert. Natürlich nicht wöchentlich, sondern in unregelmäßigen Intervallen – halt gerade so, wie ich komplette Trainings aufgenommen habe und diese bei LiL fertig produziert wurden.

Jetzt ist es wieder soweit – Gulp.js: Workflow in Webprojekten ist da. Wieder eine US-Adaption eines Trainings. Das Original ist von meinem amerikanischen Kollegen Ray Villalobos konzipiert worden.

Es geht um die Optimierung des Erstellens von Websites. Denn so etwas ist im Laufe der Jahre ein ziemlich komplizierter Prozess geworden. Man erstellt nicht nur mehr einfach HTML-, CSS- und/oder JavaScript-Dateien. Oft verwendet man zusätzlich Tools wie CSS-Prozessoren wie Sass, um vor allen Dingen auch mit älteren Browser kompatibel zu sein.
Diesen Prozess der Webseiten-Erstellung kann man mit einem Tool namens gulp.js verwalten und optimieren. Damit gibt es eine konsistente, einfach zu verwendende Sprache auf Basis von JavaScript für die Erstellung und Verwaltung gängiger Aufgaben. In diesem Kurs geht es um die Konzepte hinter gulp.js.

Webseitenerstellung mit gulp.js optimieren aus dem Kurs „Gulp.js: Workflow in Webprojekten“ von Ralph Steyer und Ray Villalobos

Und nochmal Brand Awarness-Kampagne von LinkedIn Learning

Wenn das so weiter geht, kann ich bald nicht mehr durch die Gassen gehen, ohne Autogramme geben zu müssen ;-).

Nachdem Kurse von mir in der ersten großen Brand Awarness-Kampagne für die DACH-Region (Deutschland-Österreich-Schweiz) von LinkedIn Learning (LiL) in dem einen Video auf Youtube sogar direkt im Fokus standen, bin ich auch in dem allgemeineren Video, das sich nicht an eine bestimmte Zielgruppe richtet, im Hintergrund eine Weile präsent. So von 0:10 – 0:14 im Zeitindex. Die 4 Sekunden sind schon knapp, aber immerhin und das Video hat schon jetzt gewaltige Besucherzahlen.

 

Mein Training in der Brand Awarness-Kampagne von LinkedIn Learning

Oha!

Da kann ich wohl mächtig stolz drauf sein :-).

Die erste große Brand Awarness-Kampagne für die DACH-Region (Deutschland-Österreich-Schweiz) von LinkedIn Learning (LiL) ist live!

Und Kurse von mir wurden ausgewählt, um mit in diesem Video die Kampangne zu bewerben. M.a.W – der Trailer von meinem Grundlagenkurs zu Python läuft im Hintergrund und im Text wird der JavaScript-Kurs beworben. Dieses Video ist Teil einer Anzeigenkampagne von LiL auf YouTube, Facebook, Instagram, dem weitere folgen sollen.

Motto für die Zielgruppe ist es, die eigene Karriere mit Hilfe von LinkedIn Learning zu fördern und weiterzubringen.

Es ist wieder Zeit für meinen Tipp der Woche

Mein Entwickler-Tipp der Woche bei LiL (LinkedIn Learning) behandelt dieses Mal einen kleinen, aber feinen Trick, um sichere Typvergleiche durchführen zu können. Der Trick an sich ist unabhängig von Python und in einigen anderen Sprachen wie JavaScript sogar noch nützlicher.

Vorteile und Graus der Virtualisierung – Docker & Co

Cordova

Da ich für das kommende Sommersemester an der Technischen Hochschule Bingen wieder einen Lehrauftrag zum Thema Cordova und plattformneutrale App-Entwicklung angenommen und gerade Zeit für die Vorbereitung habe, habe ich die letzten Tage in den aktuellen Stand von Cordova reingeschaut und meine alten Projekte und Matrialien zusammengetragen. Ich hatte dieses Thema eine ganze Weile schleifen lassen, da Python, Big Data, Web-Programmierung, Cobol, C# & „Was auch sonst immer“ die Arbeit in eine andere Richtung gelenkt hatten.

Die meisten Dinge, die ich die vergangenen Jahre zusammengestellt und programmiert habe, sind jedoch noch weitgehend auf Stand. Allerdings haben sich auch durchaus Sachen geändert. Daher bedarf die neue Vorlesung einiger Vorbereitung und eine Anpassung.

Zudem habe ich auch ganz einfach Lust, meine ganzen Apps zu aktualisieren. Parallel will ich aus einigen Apps  Python-Programme machen. Ohne konkrete Ziele, aber vielleicht kommen mir dabei ein paar neue Ideen und ich lerne natürlich was dazu – auch wenn das im Grunde aktuell ein reines Programmieren aufgrund von Zeit und Lust darstellt.

Anyway – bei Cordova gibt es ein paar Sachen, die mich schon stutzig gemacht und zu einigen Arbeiten im Hintergrund sowie grundsätzlichen Überlegungen genötigt haben. Das reine Installieren der neuen Version von Cordova mit npm geht wie gehabt und das Erstellen von Cordova-Projekten in dem Cordova-CLI auch. Ebenso das Hinzufügen der verschiedenen Plattformen und das Ausführen in dem Browser-Emulator ist unverändert. Die eigentlichen Quellcodes auf Basis von JavaScript & Co sowieso.

Aber wenn man etwa beim konkreten Kompilieren Android als Plattform für die Cordova-Apps haben will, wird das JDK 8 vorausgesetzt. Im Moment ist aber schon das JDK 15 aktuell und damit funktioniert es nicht. Zumindest bekomme ich es im Moment nicht hin, mit der derzeit aktuellen Java-Version Android-Apps zu erstellen. Ehrlich gesagt ist mir nicht einmal klar, ob das an Android (da soll ja Java auch sukzessive abgelöst werden) oder Cordova liegt. Wie angedeutet, habe ich die App-Entwicklung eine Weile aus den Augen verloren.

Und dann hatte ich das Android Studio bzw. das Android SDK als auch Xcode komplett von meinen Rechnern gelöscht, da ich eben das Entwickeln für Android und iOS die letzte Zeit nicht gebraucht hatte. Zumal ich mich sowieso auch dabei auf das Visual Studio committed hatte. Dabei kann man ja wunderbar auch Android- bzw. iOS-Apps erstellen.

Aber um die verschiedenen Möglichkeiten im Vorfeld der Vorlesung mal wieder auszutesten, werde ich auf meinem Mac vermutlich Xcode neu installieren (wenn ich die Sache mit meiner Apple-ID geklärt habe – die habe ich auslaufen lassen) und das Android Studio habe ich mittlerweile wieder neu installiert.

Aber irgendwie hat es bei meinem ersten naiven Versuch nicht funktioniert, damit Cordova-Projekte zu öffnen – oder besser –  zum Laufen zu bringen. Irgendwie mag ich das Android Studio aber auch nicht wirklich. Ich sollte der Sache zwar auf den Grund gehen, aber ich werde ja sowieso Visual Studio nehmen.

Wobei es da auch ein seltsames Problem gibt. In Visual Studio 2019 ist die Erweiterung für Cordova nicht mehr dabei und damit kann man weder Cordova-Projekte anlegen noch vorhandene Cordova-Projekte öffnen. Also musste ich die schon gelöschte Version 2017 von Visual Studio mit der Cordova-Erweiterung wieder auf meine Rechner aufspielen. Damit geht aber alles wunderbar und ich habe mittlerweile diverse Cordova-Apps erstellt, aus Visual Studio in verschiedenen Emulatoren sowie per USB-Debugging sogar direkt auf mehreren Geräten ausgeführt. Auch die Installation auf ein paar Testgeräten funktioniert problemlos. Seltsam sind die Begleiterscheinungen jedoch schon und ich bin nicht sicher, ob Cordova noch lange auf dem Markt bleibt. Was Cordova aber nicht als gute Basis für die kommende Vorlesung diskreditiert, um grundsätzlich die Erstellung von plattformneutralen Apps auf Basis von Webtechnologien zu lernen. Denn im Umfeld von Xamarin sind die gleichen Bedingungen/Probleme vorzufinden. Die Frage ist also wohl eher, ob Apps auf Basis von Webtechnologien sich auf Dauer etablieren oder nicht?

Wie dem auch sei – ich habe eigentlich keine Lust, das alte JDK 8 auf meine Rechner zu installieren und auch nicht die ganzen Emulatoren und SDKs von Android Studio auf Teufel komm raus zu konfigurieren. Entweder es geht „out-of-the-box“ wie bei Visual Studio 2017 oder die Sache kann mir im Grunde gestohlen bleiben. Es geht mir um die eigentlich Programmierung innerhalb des Cordova-Wrappers mit JavaScript und HTML/CSS und nicht um das Geraffel rundherum. Das hat mich schon immer an der App-Programmierung genervt.

Und da kam ich auf die Idee, eine andere Sache mal wieder aufzugreifen, die ich vor einigen Monaten angefangen, dann aber wegen anderer Dinge – wie so oft – beiseite gelegt habe: Docker.

Warum nicht einfach ein gut konfiguriertes Docker-Image für Cordova laden und dann ohne das ganze Installieren und Konfigurieren die Apps bauen? Das war meine Idee. Sollte doch einfach sein.

Und wie immer, wenn etwas auf den ersten Blick so einfach und logisch aussieht, steckt der Teufel im Detail. Genau genommen sind es in dem Fall sogar gleich mehrere Teufel gewesen.

Denn obwohl ich mich schon mit Docker beschäftigt und auch schon Images bzw. Container zum Laufen gebracht hatte, habe ich das Zeug zwischenzeitlich wieder von meinen Rechner gelöscht gehabt. Also musste ich Docker erst einmal „schnell“ installieren. Was (natürlich) wieder gar nicht schnell war und letztendlich sogar auf meinen Windows-Rechnern gescheitert ist. Weder unter Windows 10 Pro noch unter Windows 10 Home ist Docker bei mir richtig gelaufen. Natürlich kam ich bei den Problemen mit Windows 10 Pro sofort auf Hyper-V und diesen ganzen Virtualisierungs-Kram im Hintergrund von Windows, denn damit habe ich schon seit Jahren Ärger im Zusammenspiel mit VirtualBox und dem VMWare Player. Und auch wenn der VMWare Player ab der Version 16 wohl mit dem Hyper-V-Geraffel kann und auch Docker in Windows 10 Pro irgendwas mit Hyper-V macht und ich die Anleitungen für die ganzen Einstellungen umgesetzt habe, hat das Zeug irgendwelche Probleme mit den Rechten. Dazu kommt – bei Windows 10 Home gibt es ja kein Hyper-V und da muss man dann andere Sachen konfigurieren bzw. installieren. Alles doch ein elendes Gefuddel, was ich ja ausdrücklich vermeiden wollte und ich habe nach diversen Versuchen die Lust verloren.

Also auf meinen Linux-Rechner gewechselt, auf dem Docker erwartungsgemäß problemlos läuft. Zwischenzeitlich war ich auch in Eppstein und habe Docker mal auf meinem iMac getestet – auch keine Probleme. Also Docker sollte doch ein lohnenswerter Ansatz sein.

Aber dann bin ich auf das nächste blöde Problem gestoßen, erst einmal ein geeignetes Cordova-Image für Docker zu finden. Auf Git gibt es da was, aber der Git-Zugriff scheitert durch Rechteprobleme. Das Image scheint entweder gesperrt oder verschoben worden zu sein. Dann habe ich noch eine Anleitung gefunden, wie ich mir selbst ein Cordova-Image erstellen kann, aber das ist ja das Gegenteil von dem, was ich eigentlich wollte – keine Arbeit mit der blöden Konfiguration. Letztendlich habe ich nur ein Docker-Image gefunden, dass (angeblich) mit einem einfache Pull vom Docker Hub zu installieren wäre. Also so (vermutlich als root notwendig):

sudo docker pull beevelop/cordova:latest

Das Starten des Image soll dann einfach so funktionieren:

sudo docker run -it beevelop/cordova bash

Unter Windows habe ich wie gesagt Docker nicht stabil zum Laufen gebracht und das Image wurde angeblich nicht gefunden. Beim iMac muss ich es noch probieren, aber auf meinem Linux-Rechner ging der Pull einwandfrei. Bis 98% durch waren. Dann kam reproduzierbar immer wieder der Abbruch.

Mittlerweile war es Krieg – die Technik gegen mich. Oder umgekehrt. Und wenn etwas einfach nicht laufen will, werde ich zum Berserker. Auch wenn im Grunde alles Notwendige zur Vorlesung über Cordova mit Visual Studio bereit gestanden hat – ich lasse mich doch nicht von so einem Mist in die Knie zwingen.

Mein Mint Linux-Rechner ist noch in der Version 19 und das System wollte ich auch nicht verpfuschen. Von daher kam mir die Idee, meine Linux-VM (Mint Linux 20) unter Windows 10 zu verwenden. Nur konnte die plötzlich auf meiner Workstation mit VirtualBox nicht mehr gestartet werden und auch die Installation einer neuen Linux-VM ist gescheitert. Möglicherweise aufgrund der Hyper-V-Einstellungen und dem Kram, aber ich hatte einfach keinen Bock mehr auf das Gefummel. Also eine neue Version von VMWare-Player aufgespielt, dort eine Version von Mint-Linux 20 installiert und da ging dann der Pull des Docker-Images. Ohne Probleme. Wenn man „Von hinten durch das Auge“ wortwörtlich haben will, ist das diese Konstruktion – eine Virtualisierung in einer Virtualisierung.

Wer aber jetzt glaubt, die Sache wäre vorbei, täuscht sich. Denn in dem Cordova-Image war kein passendes JDK 8 dabei. Die Erstellung eines Cordova-Projekts ging damit problemlos, aber das geht ja auch in meiner normalen Cordova-CLI und damit bringt mich ein Docker-Image keinen Millimeter weiter.  Als ich eine Android-App kompilieren wollte, war war auch im Docker-Container Schicht im Schacht.

Aber es war mittlerweile schon lange persönlich und jetzt wollte ich es durchziehen. Also in dem Docker-Container das JDK 8 nachinstalliert. Das geht so:

apt-get update && apt-get install -y openjdk-8-jdk && apt-get install -y ant && apt-get install -y gradle && apt-get clean

Unter Umständen tut ein Update der Zertifikate noch gut (bei mir nicht notwendig gewesen):

apt-get update && apt-get install ca-certificates-java && apt-get clean && update-ca-certificates -f

Und letztendlich müssen u.U. die Umgebungsvariablen gesetzt werden (bei mir auch nicht mehr notwendig gewesen):

ENV JAVA_HOME /usr/lib/jvm/java-8-openjdk-amd64/

oder

set JAVA_HOME /usr/lib/jvm/java-8-openjdk-amd64/

und dann:

export JAVA_HOME

Danach konnte ich endlich eine Android-App im Docker-Container kompilieren. Nur sind Docker-Systeme ja flüchtig und wenn der Docker-Container beendet wird, sind alle Änderungen samt der gespeicherten Daten weg. Also waren Snapshots des aktuellen Stands notwendig. Das geht aus einem zweiten Terminal heraus etwa so:

sudo docker commit -p 532a5b3584e8 container1

Dabei braucht man die ID oder den Namen des Docker-Containers.Bekommt man so:

sudo docker ps

Dann bekommt man was der Art angezeigt:

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
532a5b3584e8 container1 „bash“ 19 minutes ago Up 19 minutes eloquent_liskov

Und dann muss die kompilierte App ja auch noch raus aus dem Docker-Container oder man muss was reinkopieren. Also stellte sich die Frage, wie man aus einem zweiten Terminal aus dem Clientsystem auf den Host rauskopiert oder umgekehrt? Das geht formal so (wieder mit sudo):

docker cp <SRC> <DEST>

Also konkret was der Art (in den Container):

sudo docker cp /home/ralph/Schreibtisch/www eloquent_liskov:/tmp/HalloWelt
sudo docker cp /home/ralph/Schreibtisch/rjsedv.jks eloquent_liskov:/tmp/HalloWelt
sudo docker cp /home/ralph/Schreibtisch/build.json 532a5b3584e8:/tmp/HalloWelt

Aus dem Container auf den Host geht für die generierte Android-App etwa so:

sudo docker cp eloquent_liskov:/tmp/HalloWelt/platforms/android/app/build/outputs/apk/debug/app-debug.apk /home/ralph/Schreibtisch

Die späteren Neustarts der Snapshots zeigten, dass noch (weitgehend) alle Daten waren und jetzt schien alles ok.

Pustekuchen. Denn auf meinem Notebook mit Windows 10 Home konnte der VMWare-Player die virtuelle Maschine nicht starten, die ich auf der Workstation erstellt hatte. Und ist auch beim Neuinstallieren eines Linux-Systems gescheitert. Irgendwas mit der Anzeige ging schief. Warum auch immer.

Also habe ich auf dem Notebook VirtualBox genommen, denn das ist dann dort im Gegensatz zum VMWare Player auch mit Linux als Clientsystem sauber gelaufen. In der damit erzeugten VM für Mint-Linux 20 das ganze Zeug mit Docker nochmal gemacht und das hat dann auch funktioniert.

Letztendlich hat das „Mal schnell“ zu gut einem vollen Tag Arbeit geführt, aber ungelöste Probleme lassen mir keine Ruhe und ich habe dabei vor allen Dingen wieder eine Menge gelernt. Vielleicht kann ich das neue Wissen ja nochmal brauchen.

 

Update: Irgendwann habe ich dann festgestellt, dass das Docker-Cordova-Image die Cordova-Version 9 verwendet hat und mittlerweile die Version 10 aktuell ist. Was im Grunde nicht schlimm ist, aber so kann man das dann im Container noch aktualisieren:

npm i -g cordova to update

 

 

Die nächsten zwei neuen Videotraining sind freigegeben

Da bin ich doch gerade erst mit meinen aktuellen Aufzeichnungen fertig und dann fällt mir eben beim Besuch der Seiten von LinkedIn Learning auf, dass vor einer Woche gleich zwei neue Videotraining bei LiL freigegeben wurden.

Das eine Training ist JavaScript: In HTML 5 arbeiten.

Dabei geht es darum:


HTML und JavaScript zusammen bieten für alle Webprogrammierer das optimale (Programmier-)Sprachendoppel, wenn es um die Entwicklung moderner Webauftritte geht. Tatsächlich laufen viele Features, die unter HTML5 geführt werden, in Wirklichkeit unter JavaScript: Manchmal gehen sie zwar mit neuen HTML-Tags einher, andererseits gibt es oft nicht einmal eine zwingende Verbindung zu HTML. In diesem Video-Training werden ein paar anschauliche Beispiele zusammengetragen und der optimalen Code gezeigt, wenn es um Techniken wie Geolocation, Local Storage und Session Storage, Web Worker, Canvas oder auch SVG samt der dynamischen Manipulation geht. Auch Web Sockets als Grundlagen mächtiger Rich Internet Applications lernen Sie im Laufe des Kurses kennen.

Der zweite Kurs behandelt Java. Genau genommen geht es um die Neuerungen von Java 14.
Kursdetails – Java feiert im Jahr 2020 seinen 25. Geburtstag – und zählt immer noch zu den populärsten und wichtigsten Programmiersprachen. Da inzwischen neue Versionen im gefühlt halbjährlichen Turnus erscheinen, tut rechtzeitige Aufklärung Not. Ich habe mir für den Kurs Java 14 angeschaut und die wichtigsten Neuerungen in diesem Übersichtskurs zusammengefasst. Sie lernen zum Beispiel relevante Syntaxneuerungen kennen, sehen, wie Sie TextBlocks und Records nutzen und erfahren auch mehr zu den Erweiterungen des instanceof-Operators. Im Kontext stehen auch immer ältere Versionen und ein Blick in die Zukunft von Java.

Doppelschlag

Da wurden doch gestern und heute bei LiL (LinkedIn Learning) gleich zwei neue Videotrainings von mir veröffentlicht. Thema von beiden ist JavaScript. Die beiden Trainings sind richtig umfangreich geworden. Der Kurs JavaScript Grundkurs 1: Grundlagen und Syntax ist ganze 4 Stunden 28 Minuten lang.
Und der Kurs JavaScript Grundkurs 2: Programmiertechniken und Frameworks bringt es auch noch auf 2 Stunden 50 Minuten. Zusammen mit meinem schon länger veröffentlichten Kurs OOP mit JavaScript – Grundkurs bilden diese neuen Kurse ein Dreigestirn, mit dem man alles Wichtige rund um JavaScript lernen kann. Die drei Kurse sind auch als Ablösung bzw. Überarbeitung für ein ganz umfangreiches JavaScript-Training von mir gedacht, das mittlerweile auch schon gut 8 Jahre alt und nicht mehr auf dem Stand der Zeit ist.