Warum nicht FreeOffice?

Mein Umstieg auf Linux ist absolut gelungen, ohne dass ich Windows verteufele. Im Gegenteil – es kommt immer wieder vor, dass ich sogar mit Windows arbeite. Zumal ich auf meinem Matebook sowieso nur Windows habe und keine Lust, das Upgrade auf Linux vorzunehmen. Never tough a running system. Wie extrem wahr diese Weisheit ist, musste ich bei meinem gescheiterten Anbieterwechsel des Glasfaseranschlusses ja wieder leidvoll erfahren.

Aber auch wenn ich unter Linux für jedes für mich notwendige oder denkbare Programm meist gleich mehrere gleichwertige oder bessere Alternativen habe, die zudem grundsätzlich kostenlos bzw. Open Source sind. Es gibt 2 konkrete Fälle, wo ich unter Linux immer noch nicht ganz glücklich bin.

  1. Da ist einmal die .NET-Programmierung mit C# oder VB.NET. Obwohl das mittlerweile unter Linux recht gut unterstützt wird und es einige brauchbare Erweiterungen zu VSC gibt, ist das eben nur brauchbar, aber nicht perfekt für mich. Da komme ich letztendlich einfach nicht von Windows und Visual Studio weg.
  2. Der zweite Fall betrifft Office-Anwendungen. LibreOffice bzw. OpenOffice haben alles, was ich brauche. Aber ich will mir die Lage nicht schön trinken. Das Interface der MS Office-Anwendungen ist einfach „smarter“. Das merke ich immer wieder, wenn ich dann doch mal Word statt Writer oder Excel statt Calc verwenden muss. Zudem schreibe ich gerade wieder an einem Buch und mein Verlag stellt nur eine Dokumentenvorlage für Word bereit. Die ganzen Makros, Container und Formatvorlagen will ich einfach nutzen und die gehen unter Writer nicht. Zudem gibt es ein paar Probleme beim Datenformat. Writer kommt wohl zu 99% mit dem Word-Formate zurecht, aber dieses 1% macht beim Buch Ärger. Und dann bin ich an dem Punkt, dass ich lieber mit Word und damit unter Windows arbeite.

„Warum nicht FreeOffice?“ weiterlesen

IntelliCode in Visual Studio auf KI-Niveau

Im Moment schule ich C# mit Visual Studio 2022. So richtig hatte ich das bisher noch nicht beachtet, aber der IntelliCode bzw. IntelliSense greift da ja extrem massiv mit Codevervollständigung ein. Es gibt sogar Vorschläge aufgrund einer gewissen Wahrscheinlichkeit. Das erinnert mich an KI und nervt unglaublich. Ich habe mal in den Optionen IntelliCode und IntelliSense komplett deaktiviert und hoffe, damit Visual Studio dieses ständige „Vorhersagen“ von unerwünschten Bemerkungen austreiben zu können. „IntelliCode in Visual Studio auf KI-Niveau“ weiterlesen

C#-Schulung

Meine letzte Schulung liegt schon eine Weile zurück. Dieses Jahr habe ich zwar eine ganze Reihe an Videos für LinkedIn Learning (LiL) aufgenommen, an einem Consulting-Projekt gearbeitet sowie Bücher bzw. Schulungsunterlagen erstellt. Aber diese Woche halte ich tatsächlich die erste Schulung in 2024.

Thema ist C# und die Maßnahme halte ich remote für einen Stammkunden, für den ich schon sehr viele Jahre arbeite. Auch diese C#-Schulung habe ich in der Form wohl schon mehr als ein Dutzend Male gehalten.

.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

WSL, Wine und Windows-VMs

Gerade mal WSL (Windows Subsystem for Linux) mit Ubuntu via Powershell unter Windows 11 installiert. Geht ganz gut und reduziert für manche Aktionen die Notwendigkeit, eine zusätzliche VM mit Linux (etwa unter VirtualBox oder VMWare) aufzusetzen. „WSL, Wine und Windows-VMs“ weiterlesen

Strategie für .NET-Programmiersprachen

Es gibt ein relativ neues Strategie-Papier von Microsoft, wie es mit den Kernsprachen für .NET weiter gehen soll. Interessanter Weise wird da nicht auf C++ eingegangen. Aber C/C++ steht sowieso „über den Dingen“ und jeder Diskussion.

Dass Microsoft C# als Kernsprache von .NET und Visual Studio sieht, ist nicht verwunderlich. Auch die Tatsache, dass Visual Basic nicht mehr wirklich weiterentwickelt wird, ist nicht neu. Ich finde es aber bemerkenswert, dass Visual Basic dennoch eine dauerhafte Zukunft zugesichert wird. So in etwa äußert sich Microsoft: „Wir stellen sicher, dass Visual Basic eine einfache und ansprechbare Sprache mit einem stabilen Design bleibt.“ Tja – Totgesagte leben länger.

Was aber für mich noch viel mehr für F# gilt. „Strategie für .NET-Programmiersprachen“ weiterlesen

Fett, fetter, Microsoft – und leider auch unverschämt was Altversionen angeht

Zwischen den Jahren nutze ich die Zeit und bereite eine Schulung zu „ASP.NET MVC“ vor, die im kommenden Januar und dann noch einmal im März laufen soll. Ich muss mich wieder etwas einarbeiten, obwohl ich vor einiger Zeit beim Springer-Verlag ein Buch zu „Webanwendungen mit ASP.NET MVC und Razor – Ein kompakter und praxisnaher Einstieg“ veröffentlicht habe. Aber ansonsten sind Webanwendungen mit ASP.NET MVC und Razor bei mir Randthemen, auch wenn ich viel mit purem C# und .NET zu tun habe.

Deshalb hatte ich vorgestern eine neue  Webseite als Referenz erstellt, die ich mit ASP.NET MVC und Razor in einem Docker-Container auf meinem Linux-Server laufen lasse.

Heute habe ich u.a. die Datenbank mit ins Spiel gebracht und im Grunde ist es wie immer bei Microsoft – wenn alles konfiguriert und installiert ist, geht das meiste mit Mausschubserei. Aber wehe, wenn nicht oder man vom vorgegebenen Pfad abweicht. Oder irgendwelche Neuerungen inkompatibel zu älteren Dingen sind (was gefühlt bei Microsoft ständig passiert). „Fett, fetter, Microsoft – und leider auch unverschämt was Altversionen angeht“ weiterlesen

ASP.NET MVC, Codespace & Docker

Webanwendungen mit ASP.NET MVC und Razor Ein kompakter und praxisnaher EinstiegIch habe eine neue Webseite erstellt. Das ist nicht ungewöhnlich und kaum eines Posts wert. Zumal die  Webseite nicht der Burner ist. Weder vom Design, noch dem Inhalt. Es ist im Grunde nur etwas Werbung für mein Buch zu „Webanwendungen mit ASP.NET MVC und Razor – Ein kompakter und praxisnaher Einstieg„, das ich vor einiger Zeit beim Springer-Verlag veröffentlicht habe. Also wozu der Hussle?

Nun – wenn man den Link zu der Webseite anklickt, fällt vielleicht der ungewöhnliche Port auf (33333). Der eigentliche Anlass für die neue Webseite war die Vorbereitung für eine Schulung mit ASP.NET im kommenden Januar. Ich will einfach einige Praxisseiten zum Zeigen von ein paar Sachen haben.

Ich betreibe meine Webseiten nun aber mit einem Apache-Webserver unter Linux. Die neue Webseite ist jedoch – aus besagten Gründen – mit ASP.NET MVC und Razor gemacht. Und das braucht – eigentlich – einen Windows-Server mit IIS oder so. Also auf jeden Fall .NET. Lokal auf einem Windows-PC bzw. direkt aus Visual Studio kein Problem. Aber wenn man „In-the-wild“ nur Linux verwendet? „ASP.NET MVC, Codespace & Docker“ weiterlesen

Gemischtes Doppel bei den Belegexemplaren

Beim  Herdt-Verlag sind die letzten Wochen gleich zwei Unterlagen von mir in den jeweils aktuellen Versionen erschienen:

Da der Verlag bei mir im Ort seinen Sitz hat und Luftlinie nug gut 1 Kilometer weg ist, konnten meine Belegexemplare für beide Unterlagen eben direkt Vorort in Empfang genommen werden.

C# Grundlagen der Programmierung mit Visual Studio 2022

Seit einigen Jahren erstelle ich für den Herdt-Verlag Schulungsunterlagen. Dabei habe ich einige der Schulungsunterlagen von anderen Autoren übernommen, andere aber auch komplett neu entwickelt und geschrieben.

Der Herdt-Verlag ist übrigens mein einziger Kunde, dessen Sitz an meinem Wohnort ist. Weder in Bodenheim noch in Eppstein habe ich sonst jemals einen Kunden gehabt. Wenn ich einen Vertrag unterzeichnet habe, fahre ich mit dem Rad kurz um die Ecke und werfe diesen direkt ein.
Schulungsunterlagen von Herdt nutze ich selbst aber auch schon viele Jahre länger und als ich nach Bodenheim gezogen bin, habe ich das zum Anlass genommen, da einfach meine Expertise vorzustellen.
Und so ist es dazu gekommen, dass heute die Unterlagen C# Grundlagen der Programmierung mit Visual Studio 2022 veröffentlicht wurden. Das ist der überarbeitete Nachfolger der Unterlagen für Visual Studio 2019 und eine der Unterlagen, die ganz früher von einem anderen Autor erstellt wurden. Aber ich habe sie schon vor mindestens 7 oder 8 Jahren übernommen, mehrfach überarbeitet und mittlerweile sind die meisten Bestandteile von mir abgeändert oder neu hinzugefügt worden.

Großes Reinemachen der Datenträger

Diese Woche habe ich eine Remote-Schulung zu C# gehalten. Am Ende so einer Schulung gebe ich immer die von mir erstellten Quelltexte an meine Schulungsteilnehmer weiter. Da ich im Fall von so einer C#-Schulung natürlich mit Visual Studio arbeite, sind in meinen Projekten aber immer die ganzen *.dll, *.exe, *.obj und andere Dateien abgelegt, die beim Compilieren und Ausführen der Schulungsprojekte entstehen. Solche kompilierten Sachen sind für die Weitergabe an meine Teilnehmer natürlich unnötig und sogar kontraproduktiv, weil damit die weiterzugebenden Daten ziemlich umfangreich werden und – beim Verschicken über das Internet – die Firewall der Firmen, wo meine Teilnehmer arbeiten, diese Dateien meist grundsätzlich blockiert. Also stelle ich fast immer eine ZIP-Datei zusammen, die nur die eigentlichen Quelltexte und meist auch die Projekt- und IDE-Einstellungen enthält, wenn das – wie im Fall von Visual Studio – relevante Informationen sind.

Nun bin ich insbesondere bei meinem MateBook mit seiner extrem sparsamen 256 GByte-SSD schon seit Monaten am Limit und habe sogar diverse Verzeichnisse und Programme schon gelöscht oder auf eine externe SSD verschoben, die ich eigentlich gerne dabei bzw. auf der internen SSD des Notebooks gespeichert hätte.

Ich habe keine Ahnung, warum mir nie aufgefallen ist, dass ich vollkommen unnötig bei meinen ganzen Quelltexten der Bücher, Videotraining bei LinkedIn Learning, Schulungen und Kursen oft ebenfalls die ganzen *.dll, *.exe, *.obj und andere binäre Dateien sowie auch PlugIns und ähnliche Projektergänzungen und sogar alte Software, die ich in den Maßnahmen gebraucht hatte, mit gespeichert habe. Oder aufgefallen war mir das wohl schon – ich habe mich einfach nicht drum gekümmert.

Denn sinnvoll ist es schon, zu jeder Maßnahme (gleich ob Schulung, Buch, Videotraining, Kurs oder Projekt) die wirklich relevanten Dinge zu behalten. Ich speichere deshalb nach jeder Maßnahme auch die Projektdateien hinsichtlich der Programmierung. Die Einsendeaufgaben, die ich etwa bei der ILS erhalte, behalte ich ebenso auf Dauer. Und ich lege davon dann im Rahmen meiner üblichen Datensicherung auch zig Kopien an. Aber da ich vor dem Speichern als auch den Datensicherungen auf meinen vielen redundanten Medien in Bodenheim, Eppstein, der Cloud und im Banksafe eben fast nie aufgeräumt hatte, sind auf den Datenträgern mittlerweile so viele GByte an unnützem und zudem mehrfach redundantem Zeug entstanden, dass einfach mal ein großes Reinemachen notwendig war.

Diese unglaublich vielen Dateien machen ja auch eine Datensicherung wahnsinnig zeitintensiv, da das ganze überflüssige Zeug eine Synchronisation zeitlich förmlich explodieren lässt. Das habe ich gerade wieder bemerkt als ich meine externe Festplatte, die ich in Eppstein deponiert habe und so etwa einmal im Monat synchronisiere, auf Stand bringen wollte. Mein Datensicherungsprogramm SyncToy ist nur mit Fehlern durchgelaufen und die folgende direkte Kopieraktion von meinem NAS auf die Festplatte hat etwa 18 Stunden gebraucht.

Das hat mir gelangt und ich beseitige gerade über alle Datenträger hinweg die unnötigen binären Dateien. Im Wesentlichen befinden die sich bei Visual Studio-Projekten in den Verzeichnissen Debug und Release und bei Eclipse  & Co ist das .metadata-Verzeichnis oft auch riesig und kann jederzeit bei Bedarf reproduziert werden.

Also weg mit dem Zeug und noch den Installationsdateien einiger alter Software und ähnlichen Dingen. Ich denke, dass ich so pro Rechner bzw. Datensicherungsmedium vielleicht 10 – 40 GByte Platz gewinne. Kann auch deutlich mehr sein, aber die vielleicht 200 – 400 GByte, die ich damit over-all frei mache, sind gar nicht der Punkt.

Die Sache wird übersichtlicher und eben bei der Synchronisation während Datensicherungen deutlich schneller und auch stabiler. Der Upload auf Cloud-Datenspeicher geht natürlich ebenso viel schneller (gerade der) und eine komprimierte Datensicherung (auch Anlegen und Entpacken eines Archivs geht natürlich viel fixer) sollte vielleicht sogar wieder auf einen USB-Stick für den Banksafe passen.

Nur jetzt muss erstmal der bereinigte Stand synchronisiert werden und da greift nochmal das zeitlich aufwändige Problem, dass so viel Zeug an den verschiedensten Stellen auf  NAS & Co gelöscht werden muss. Aber wenn die große Putzaktion durch ist, sollte ich auf Dauer viel Zeit gewinnen.

 

Das Billig-Chuwi als Skype-Remote-Server für Visual Studio

Mein Microsoft-Surface-Billig-Klon von CHUWI fristet ein eher gemütliches Dasein in meinem Eppsteiner Zweitbüro. Wenn ich mein Matebook nicht dabei habe und mal was am PC da machen will, kommt es gelegentlich zum Einsatz. Genau dafür habe ich das Teilchen ja gekauft – ein möglichst preiswerter Notfall-PC, den ich in Eppstein deponiere und wenn das CHUWI UBook Tablet mal so zum Einsatz kam, hat es sich durchaus ausreichend geschlagen. Mehr braucht es bei gelegentlichem Einsatz wirklich nicht.
Nur heute war der große Tag von dem Kerlchen. Ich habe nach 2 Wochen Azubi-Ausbildung in Python und MySQL die Woche für einen anderen Stammkunden eine Schulung in C# übernommen (natürlich wieder remote) und musste heute in Eppstein arbeiten, weil ein Handwerker sich angemeldet hatte.
Nur haben von den 5 Teilnehmern des Kurses 2 kein Visual Studio installiert. Oder zumindest nicht so, dass man C#-Projekte anlegen kann. Der Fehler geht ganz klar auf die Firma, die die Schulung in Auftrag gegeben hat. Wie kann man Teilnehmern eine C#-Schulung buchen und dann kein passendes Visual Studio auf deren Rechner bereitstellen? Da es sich um eine ganz große Firma handelt, geht auch nicht mal schnell eine Installation. Das muss beantragt werden und dann muss das Profil geändert werden usw. usw.
Das ist im Grunde nicht mein Problem, aber ich möchte natürlich, dass meine Teilnehmer zufrieden sind und von der Schulung profitieren. Einer der beiden Teilnehmer hat in der Folge seinen Privatrechner genutzt, aber bei dem anderen ging es nicht. Gestern haben wir uns für die reine Syntax von C# bei ihm mit einer Webseite beholfen, über die man C# im Browser ausführen kann. Zumindest einfache Syntax-Anweisungen. Aber bei echter OOP oder gar GUI-Programmierung langt das definitiv nicht.
Die Schulung verwendet nun Skype (!!) als Remote-Tool. Nicht Teams – nein, Skype. Kundenanforderung. Angeblich wird nächstes Jahr umgestellt, aber im Moment kommt noch das antike Skype zum Einsatz. Wobei es zur Not auch damit geht – das hatte ich bei dem Kunden schon mehrfach nutzen müssen und bin halbwegs zurecht gekommen.
Ja, und damit der Teilnehmer, der gänzlich ohne Visual Studio auskommen musste (bisher – vielleicht ist VS morgen nachinstalliert) , heute praktische Übungen durchführen konnte, habe ich neben meinem Matebook auch das Chuwi in die Sitzung angemeldet, da Visual Studio gestartet und ihm die Remote-Kontrolle via Skype beim Sharen des Programms übergeben. Was soll ich sagen? Ging richtig gut. Sowohl die Leistung von dem Chuwi hat ausgereicht also auch die Performance bei der Übertragung.

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

 

 

Update Windows 10 aus der Konsole

Die regelmäßige Aktualisierung von Windows empfinde ich weitgehend als eine Katastrophe. Entweder aktualisiert sich Windows zum unpassenden Zeitpunkt (hatte ich gerade bei einem Kunden, bei dem das erzwungene Update während der Remoteschulung die Teilnehmer ziemlich blockiert hat) oder man deaktiviert das automatische Aktualisieren und dann ist man Out-Of bzw. die Geschichte lässt sich u:u: nicht wieder anschalten oder man sucht sich einen Zeitplan raus, von dem man vermutet, dass die Aktualisierungen nicht irgendwas anderes verhindern. Alles nicht wirklich der Bringer.

Auf meinen drei im Business-Einsatz genutzten Windows-10-Rechnern funktioniert das Windows-Update eigentlich nur auf meiner Workstation ohne großes Eingreifen. Und das auch nicht perfekt.

Auf meinem alten Terra-Notebook kann ich auf wuauserv gar nicht zugreifen. Ich bekomme immer einen Zugriffsfehler, wenn ich den Service starten will. Ich habe schon zig Wege versucht, aber alles ist bisher schief gelaufen (und selbstverständlich habe ich im Administrator-Modus gearbeitet). Auf dem Rechner bin ich mittlerweile mit einem Updates auf einem Stand von Anodazumal :-(. Was mich aber auch nicht extrem beunruhigt, da das Notebook schon mindestens 7 – 8 Jahre auf dem Buckel hat und nur durch ein Schnäppchen einer riesigen Notebook-SSD vor 2 Jahren vom kompletten Ausmustern gerettet wurde. Das Gerät ist wirklich nur noch mein Backup – sowohl als PC als auch Datenbackup vom NAS. Also Backup vom Backup. Dennoch – irgendwie will ich auch da mal ein Update hinbekommen. Ich spiele schon eine ganze Weile in der Powershell und mit net hin und her, aber bisher scheitert alles an den Zugriffsproblemen auf wuauserv.

Noch blöder ist es, dass ich auf meinem aktuellen Huawei-Matebook nur Windows Home mitgeliefert bekommen habe. Eine wirklich armselige Windows-Version (ja – me culpa – ich hätte ja schon auf die Pro-Version umsteigen können, aber bisher hatte ich noch keinen zwingenden Grund gesehen). Da hat man ja so gut wie keine Kontrolle über die Updates. Nicht einmal in den Einstellungen lässt sich der Dialog öffnen (warum auch immer). Ich bin bisher nicht einmal so ganz im Klaren gewesen, ob und welche Updates da installiert waren.

Aber da habe ich jetzt eine sinnvolle Lösung gefunden, um mit NuGet oder in der PowerShell Updates zu dem Zeitpunkt und dem von mir gewünschten Umfang zu erzwingen, wenn ich das will. Da ich die nächsten Wochen ein paar Remote-Schulungen zu C# halten werde, wollte ich vorher sowieso Visual Studio auf den neusten Stand bringen und dabei gleich NuGet ebenso. Und damit kann man dann auch Windows Updates komplett erzwingen. Schön in der Paket Manager-Konsole statt der grafischen, klebrigen Micky-Mouse-Oberfläche der PC Einstellungen. Oder man nutzt eben die PowerShell. Beides natürlich im Administrator-Modus.

Und das geht über die PowerShell so, dass man entweder PSWindowsUpdate oder WindowsUpdateProvider (Install-WUUpdates) verwendet. PSWindowsUpdate soll angeblich gegenüber des von Microsoft bereitgestellten PowerShell-Moduls Install-WUUpdates / Start-WUScan einige Vorteile bringen, aber da bin ich auf Hörensagen angewiesen.
Mit

Get-Command -Module WindowsUpdateProvider

findet man aber erst einmal heraus, welche Windows-Update-Provider auf einem PC verfügbar sind. Damit sieht man dann in etwa so etwas:

PS C:\WINDOWS\system32> Get-Command -Module WindowsUpdateProvider

CommandType Name Version Source
———– —- ——- ——
Function Get-WUAVersion 1.0.0.2 WindowsUpdateProvider
Function Get-WUIsPendingReboot 1.0.0.2 WindowsUpdateProvider
Function Get-WULastInstallationDate 1.0.0.2 WindowsUpdateProvider
Function Get-WULastScanSuccessDate 1.0.0.2 WindowsUpdateProvider
Function Install-WUUpdates 1.0.0.2 WindowsUpdateProvider
Function Start-WUScan 1.0.0.2 WindowsUpdateProvider

Sobald ein ausreichend neuer Build vorhanden ist, kann man dann Updates suchen und installieren (Updates für Windows und andere Microsoft-Produkte):

$Updates = Start-WUScan -SearchCriteria „IsInstalled=0 AND IsHidden=0 AND IsAssigned=1“
Write-Host „Updates gefunden: “ $Updates.Count
Install-WUUpdates -Updates $Updates

Ein anderer Weg führt eben über das PSWindowsUpdate-Modul, das so aus der PowerShell installiert werden kann (oder man nutzt einfach Visual Studio und da dann die Paket-Manger Konsole):

Install-Module -Name PSWindowsUpdate -Force

Danach kann man nach der Version schauen:

Get-Package -Name PSWindowsUpdate

 

Aber das passende NuGet-Version muss dabei vorhanden sein, wobei die auch bei Bedarf nachinstalliert wird. Die Ausgabe wird so etwas sein:

Name Version Source ProviderName
—- ——- —— ————
PSWindowsUpdate 2.2.0.2 https://www.powershellgallery… PowerShellGet

 

Für den nächsten Schritt sollten die Ausführungsrichtlinien für den aktuellen Prozess auf uneingeschränkt gesetzt werden:

Set-ExecutionPolicy -Scope Process -ExecutionPolicy Unrestricted -Force

Und dann holt man die verfügbaren Updates so:

Get-WindowsUpdate -MicrosoftUpdate -Verbose

Die Installation von allem ohne weitere Rückfrage geht dann so:

Install-WindowsUpdate -MicrosoftUpdate -AcceptAll -AutoReboot

Soweit habe ich die Sache mit meinem Matebook auch schon erfolgreich durchgespielt und jetzt werde ich mir das Terra-Notebook und auch die Workstation vornehmen und mal sehen, was ich da aktualisieren kann oder auch nicht.

Wenn das alles nicht hilft, werde ich nochmal den folgenden Tipp in der Admin-Konsole versuchen:

net stop wuauserv

net stop bits

cd %systemroot%

ren SoftwareDistribution SoftwareDistribution.bak

net start bits

net start wuauserv

Ich habe zwar wenig Hoffnung, dass die Geschichte insbesondere bei den Zugriffsproblemen auf wuauserv was hilft, aber vielleicht nutzt die Schrittfolge ja jemand anderem oder in einer anderen Konstellation beim Update.

Visual Studio 2017 ist da

So sehr ich Microsoft bei diversen Programmen wie dem IE oder deren Office, den Sicherheitskonzepten sowie dem gesamten Klicki-Klicki in Administrationsschritten und der GUI kritisiere, so sehr bin ich mittlerweile Fan des Visual Sudios.
Die IDE hat sich über die Jahre wirklich zu einem intuitiven, vollständigen, flexiblen und leistungsfähigen Entwicklungstool weiterentwickelt. Heute wurde die Version 2017 offiziell freigegeben und ich habe die sofort installiert. Bin gespannt, wie sie sich anfühlt und was sich alles geändert hat. Werde meine Erfahrungen sukzessive posten.