Video-Calling

Es ist mal wieder Studiozeit. Ab morgen mache ich Aufnahmen für LinkedIn Learning (LiL), wobei das aufgrund von Corona immer noch in meinem Büro in Eppstein statt in Graz stattfindet. Ich werde schon heute am späten Abend rüberfahren und alles einrichten, damit ich morgen gleich mit den Aufnahmen loslegen kann. Ich habe nur 3 Tage Zeit, weil die Aufnahmesession zwischen eine regelmäßige Python-Schulung gequetscht werden musste, die im Februar jeden Montag und Dienstag stattfindet.

Ich ergänze in den Aufnahmen ein Training um ein noch nicht ausreichend behandeltes Thema (werden einfach 3 Erweiterungsvideos, die ohne großes Tamtam in das bestehende Training ergänzt werden) und ich nehme ein altes Training neu auf. Ich halte bei so Posts ein wenig mit den konkreten Themen hinter dem Berg (wie eine Autofirma mit einem Erlkönig), denn es ist nie klar, wie lange es zwischen Aufnahme und Veröffentlichung dauert und da will ich so früh keine Pferde scheu machen.

Nur soweit komme ich aus der Deckung – die Überarbeitung betrifft das 3. Training, das ich jemals für LiL bzw. damals Video2Brain aufgenommen habe. Und das war 2008, geht um ein Entwicklungstool und wurde auf DVD veröffentlicht. Zwar wurde das Training seit der Zeit immer wieder angepasst und sogar schon mal neu eingespielt, aber es ist trotzdem im Kern jetzt 14 Jahre alt. In der neuen Version wird es auf gut 30% der Zeit eingedampft und auf das Kerntool reduziert. Die Randtechniken, die bisher mit behandelt wurden, sind mittlerweile in eigene Trainings ausgelagert worden (meist auch von mir) und da viel besser aufgehoben.

Speicherbedarf eines Objekts feststellen – aus meinem Tutorial zu Python

Es ist wieder Mittwoch und damit der übliche Wochentag, an dem mein regelmäßiger Entwickler-Tipp zu Python bei LinkedIn Learning freigeschaltet wird. Der Tipp hat zum Thema, wie man den Speicherbedarf eines Objekts unter Python bestimmen kann.

Python und UML

Ich schule immer wieder UML und in dem aktuellen Entwickler-Tipp zu Python bei LinkedIn Learning betrachte ich die Verbindung zwischen UML und Python. So ganz perfekt spielen die Welten nicht zusammen, aber grundsätzlich kann man schon aus UML Python-Code erzeugen und vor allen Dingen aus Python-Code UML-Klassendiagramme generieren, um eine Übersicht von Klassenbeziehungen zu bekommen.

Variablen tauschen – Tutorial zu Python

Schon seltsamer Zufall. Ich halte gerade eine Remote-Schulung zu C# und habe eben als Abschluss-Übung ein Beispiel durchgespielt, in dem die Teilnehmer mit einer Methode den Inhalt von zwei Variablen vertauschen sollen. Eben schaue ich, was der heute veröffentlichte Entwickler-Tipp zu Python für ein Thema hat. Tja – Variablen tauschen mit Python. Ich wusste es wirklich nicht, denn die Reihenfolge der Tipps und deren Veröffentlichung wird bei LinkedIn Learning entschieden. Bei Python geht so ein Vertauschen allerdings extrem elegant und kompakt. Weit weniger aufwändig als etwa in C#.

Objekte mit der dir()-Methode analysieren

Das Jahr 2022 ist angelaufen und in der Spur. Mittwoch ist damit der Tag für meinen regelmäßigen Entwickler-Tipp zu Python bei LinkedIn Learning. Dabei geht es um die Aussage, dass alles in Python ein Objekt ist. Dabei ist ein Objekt von der internen Struktur im Grunde immer ein Key-Value-System und mit der dir-Funktion, der man als Parameter ein Objekt übergibt, kann diese analysieren.

Liegengebliebene Tasks

Nachdem ich mit einer Remote-UML-Einzelschulung am Montag und Dienstag eine brutal lange Schulungsphase erst einmal abgeschlossen bzw. unterbrochen habe, kann ich mich jetzt endlich ein paar Tage liegengebliebenen Aufgaben widmen. Ich kann mich nicht mehr entsinnen, wann ich das letzte Mal so viele Schulungen so lange Zeit mehr oder weniger am Stück gehalten habe. Die letzten Jahre definitiv nicht mehr. Im Grunde ging diese Phase am 1. Oktober los und wurde zwar von einer Videosession für LiL und auch hin und wieder von einigen Tagen ohne Schulung unterbrochen. Aber an denen musste ich ja meine andere Arbeit samt den dauerhaften ILS-Korrekturen und Vorbereitungen der Schulungs-Sesions erledigen. Wenn man die letzten 3 Monate betrachtet, war meine Schulungsaktivität also prozentual höher als zig Jahre zuvor.
Was ich auch merke, denn ich habe die letzten Tage schon abgebaut. Ich bin mit der falschen Brille zum Radfahren gegangen, habe Stufen auf der Treppe übersehen, hatte Rücken vom vielen Sitzen, war gereizt etc. Die freien Tage über das Jahresende kommen dieses Mal wirklich dringend.
Ein Teil meiner liegengebliebenen Aufgaben dreht sich auch um die Synchronisation, Bereinigung und Neuinstallation meiner Rechner bzw. Datensicherungen. Das ist zwar auch Arbeit, aber macht mir Spaß und ist – für mich zumindest – eine entspannte bzw. sogar entspannende Tätigkeit.
Da ich gestern „geboostert“ wurde, hänge ich heute mit leichten Impfreaktionen sowieso etwas in den Seilen – zu der angesprochenen Erschöpfung durch die letzten Monate – und habe mal im Hintergrund meine Datensicherungen bereinigt bzw. mehrere externe Festplatten bereinigt und aufeinander abgestimmt. Bei der Datensicherung bin ich grundsätzlich „übervorsichtig“ und speichere im Grunde „ALLES“ redundant sowie zeitlich in ziemlich kurzen Abständen. Aber damit wird die Datenmenge auch gewaltig groß und nicht mehr wirklich überschaubar. Eine Bereinigung hatte wirklich Sinn gemacht.
Dazu habe ich mit meinem Matebook ein wirklich super schnelles, leistungsfähiges, transportables und hochwertiges Notebook. Aber als ich es Anfang 2019 gekauft hatte, gab es das Gerät zu einem adäquaten Preis nur mit einer Mini-SSD. Demensprechend bin ich dort leider immer am Limit der 256 GByte und muss regelmäßig das Teil säubern. Damit das aber nicht zu extrem wird, arbeite ich mit externen Festplatten – auch weil ich oft zwischen meiner Workstation und dem Notebook wechsele. Workstation in Bodenheim, das Matebook in Eppstein oder bei externen Einsätzen jeder Art. Die Daten will ich nicht ständig in die Cloud verschieben müssen – zumal ich der Verwendung einer Cloud sowieso in vielen Bereichen kritisch gegenüberstehe.
Nur habe ich mittlerweile zwei externe USB-Festplatten im Einsatz – eine große HD und eine kleine SSD mit 1 TByte. Zuerst war die HD (USB-2) da, aber der Performancegewinn mit der externen SSD (USB-3 bzw. Firewire) ist so groß (gemessen – Zugriffszeiten fast identisch wie bei der internen SSD), dass ich immer mehr Daten (Programme sowieso) auf diese verlagere. Damit schlägt die fehlende Kapazität meiner internen SSD nicht mehr so zu. Nur große Daten wie Videos für LiL und eines der Backups der NAS bleiben auf jeden Fall auf der externen HD. Aber …
Ich habe in der letzten UML-Schulung gemerkt, dass sich über die letzten Monate die Daten ziemlich unstrukturiert auf die externe HD und die externe SSD verteilt haben und ich auch da komplett die Übersicht verloren habe. Suchtools sei Dank habe ich zwar immer gefunden, was ich gebraucht habe. Aber die Abstimmung bzw. Neustrukturierung der beiden externen Datenträger aufeinander war mal dringend gegeben.
Eine weitere Aufgabe, die ich mir für die Jahresendtage aufgeschrieben habe, war die Reaktivierung meines uralten HP EliteBook. Das hatte ich mal als Gebrauchtgerät gekauft und es muss m.E. mindestens 12 – 15 Jahre alt sein. Vermutlich noch älter. Ich brauche es nicht wirklich und die Reaktivierung kann man fast als „Hobby“ abtun. Aber es läuft in der Tat mit Windows 10 und ich habe darauf auch lizenziertes MS-Office installiert. Die Lizenzen will ich eigentlich nicht verlieren und deshalb habe ich die Lizenzen versucht auszulesen, um sie ggfls. auf einem anderen Gerät noch zu nutzen. Das war leider nur teils erfolgreich und deshalb habe ich versucht, das EliteBook mit allen denkbaren Tools zu bereinigen, zu entschlacken und zu beschleunigen. Denn der Start von Windows als auch vor allen Dingen Programmen ist dermaßen langsam – eigentlich kann man damit nicht arbeiten. Wenn nur nicht die Lizenzen wären, die ich zum Teil einfach nicht mehr rausbekomme bzw. deren Keys ich nicht mehr finde. Als Resultat meiner Optimierung läuft das EliteBook jetzt wirklich etwas besser, aber es ist absolut an der Grenze der Verwendbarkeit. Ich bin noch am Überlegen, ob die Lizenzen es wert sind oder ich nicht lieber ein Linux darauf installieren, dass mit der uralten Hardware besser zurecht kommen wird. Wie gesagt – ich brauche das EliteBook nicht wirklich und auch die Neuinstallation mit Linux wäre unter „Hobby“ bzw. ggf.. Wissenserweiterung (wobei da nichts Neues auftreten sollte) zu verbuchen.

Der letzte Tipp mit leichter Verspätung, der aktuelle dafür schon heute am frühen Morgen

Mein regelmäßiger Entwickler-Tipp zu Python wurde letzte Woche bei LinkedIn Learning erst an Freitag freigeschaltet, aber der Entwickler-Tipp zu Python in der Woche ist heute – als am üblichen Mittwoch – schon früh  am Morgen da.

Ich begebe mich dieses Mal etwas in die Welt der Administration bzw. von Administratoren. Eigentlich für mich ein etwas fremdes Gebiet, denn ich bewege mich sonst in der Regel rein im Umfeld der Programmierung. Genaugenommen sogar überwiegend der Anwendungs- und Web-Entwicklung. Aber über die Jahre kommt man auch immer wieder mit Themen aus dem Admin-Bereich in Berührung. Ich behaupte, dass ich mittlerweile theoretisch sogar als Admin arbeiten könnte. Vielleicht wäre ich kein wirklich guter Admin, aber die meisten administrativen Dinge – insbesondere unter Linux – würde ich wohl hingekommen.

Und bei dem aktuellen Tipp geht es ja immer noch um Python. Nur halt um einen Einsatzzweck, der für Admins von Interesse ist – wie man mit Python zeitgesteuerte Befehle auf dem Server ausführen kann. Konkret nutze ich dabei Linux als Serversystem und zeige, wie man CronJobs erstellen bzw. CronTabs mit Python schreiben kann.

Ausnahmsweise Donnerstag

Diese Woche ist erst am Donnerstag der neue Entwickler-Tipp zu Python bei LinkedIn Learning freigeschaltet worden. Es geht hier darum, wie man aus Python eine automatische Quelltextdokumentation generieren kann. So eine Dokumentation von Softwareprojekten ist eine oft leidige, aber immens wichtige Aufgabe und in nahezu allen modernen Programmiersprachen gibt es Möglichkeiten, diese Dokumentation aus dem Quellcode heraus etwas zu erleichtern, indem man bestimmte Token in den Quellcode schreibt und daraus eine HTML-Dokumentation oder auch in einem anderen Format erzeugt werden. In Python kann man etwa pydoc bzw. dessen Fork pydoc3 verwendet werden, was in dem Tipp gezeigt wird.

Werte mehreren Variablen in einer Zeile zuweisen – neu in meinem Tutorial zu Python

Auch wenn ich derzeit in Marburg auf Schulung bin, erscheint natürlich am Mittwoch bei LinkedIn Learning wieder ein neuer, aktueller Entwickler-Tipp zu Python. Thema ist die elegante Zuweisung der Werte bei mehreren Variablen.

Neu erschienen – mein JavaFX Grundkurs bei LiL

Über den Sommer habe ich mehrere Training bzw. Aktualisierungen für LinkedIn Learning eingespielt, deren endgültige Fertigstellung bzw. Produktion sich dann doch ziemlich hingezogen haben. Nicht zuletzt Corona hat Arbeitsabläufe und Kapazitäten sowie Prioritäten im Griff,. Aber die Woche ging es wie beim Bretzelbacken und neben der Aktualisierung meines Training zu den Neuerungen der verschiedenen Versionen von Java und meinem aktuellen Entwickler-Tipp zu Python ist diese Woche auch der JavaFX Kurs erschienen. Dabei geht es neben JavaFX auch um FXML und den Sceen Builder sowie NetBeans, Maven, Ant, Gradle, JDK etc..

Ich habe schon früher Kurse zu JavaFX eingespielt (sogar schon zu Zeiten von Video2Brain (V2B), aber auch dann Aktualisierungen für LiL), aber die sind mittlerweile komplett veraltet. Der neue JavaFX Kurs ist deshalb vollkommen neu konzipiert und vollständig neu eingespielt. Außer ein paar Ideen für Beispiele ist nichts mehr identisch zu den alten Kursen.

Was übrigens auch JavaFX als Technologie betrifft. Diese hat sich zum Teil komplett inkompatibel zu älteren Versionen weiterentwickelt. Offiziell heisst sie jetzt sogar nicht mehr JavaFX, sondern OpenJFX und wird nicht mehr von Orcale verantwortet, sondern einer OpenSource-Organisation. Wobei sich der Bezeichner „OpenJFX“ wohl nicht so richtig etablieren will und man deshalb an den meisten Stellen doch wieder den ursprünglichen Bezeichner „JavaFX“ beibehält.

Aktualisierung meines Trainings zu den Neuerungen von Java

Bei LinkedIn Learning habe ich ein Training am Start, das sich um die Neuerungen der verschiedenen Versionen von Java kümmert. Bekanntlich erscheinen neue Versionen von Java mittlerweile alle 6 Monate und deshalb wird dieses Training immer wieder erweitert bzw. auf den neuen Stand gebracht. Derzeit behandle ich in diesem Training die Neuerung von Java 14, 15 und 16. Die Neuerungen der Version 17 spiele ich Ende dieser Woche neu ein und dann wird das Training noch einmal aktualisiert/erweitert und auf eine Art „Endstand“ gebracht. Denn die Version 17 ist nach vielen Jahren wieder eine LTS-Version, die in der Praxis auf viele Jahre die relevante neuste Version bilden wird. Wie der Name LTS – Long-Term-Support – aussagt, werden nur diese Versionen explizit über einen langen Zeitraum unterstützt. Während private Programmierer gerne schnell auf neue Versionen umsteigen, wird man in der professionellen Programmierung bzw. bei Business-Anwendungen fast immer nur solche LTS-Versionen berücksichtigen.

Neuer Tipp zum Verketten von Vergleichsoperatoren

Bei LinkedIn Learning ist wieder ein aktueller Entwickler-Tipp zu Python verfügbar. Es geht dieses Mal um die Verkettung von Vergleichsoperatoren. Dabei geht es darum, mehrere Bedingungen zu verknüpfen und über eine einfache Schreibweise das zu machen. Und wer es noch nicht mitbekommen hat – in der Woche der Veröffentlichung ist der aktuelle Tipp frei (d.h. kostenlos) verfügbar.

Neu im Python-Tutorial – Argumente mit dem Scatter-Operator ein- und auspacken

Argumente mit dem Scatter-Operator ein- und auspacken ist das Thema in meinem aktuellen Entwickler-Tipp zu Python aus meinem Tutorial bei LinkedIn Learning. Python stellt damit interessante Möglichkeiten bereit, um sequentielle Datenstrukturen zu packen und zu entpacken. Man spricht in dem Fall oft auch von dem Scatter-Operator. Wobei dieser Begriff nicht standardisiert ist.

F-Strings zur Verwendung von Variablen in Strings – ein neuer Tipp aus meinem Tutorial zu Python

Um die Verwendung von F-Strings bei Variablen geht es in meinem aktuellen Entwickler-Tipp zu Python aus meinem Tutorial bei LinkedIn Learning. Es geht darum, dass man Variablen direkt in einem String auswerten lassen kann. Das vermeidet mühselige und oft unübersichtliche Stringverkettungen.

Ausmisten

Es heisst ja, dass 3x Umziehen 1x Abbrennen entspricht. Ich ziehe nicht um, aber in meinem Büro in Bodenheim kommt ein neuer Boden rein und die Wände werden neu gestrichen. Das bedeutet, dass ich das komplette Büro samt Flur ausräumen muss. Ich bin da schon seit mehreren Tagen immer wieder dran, denn so etwas ist verdammt viel Arbeit. Aber wenn ich die schon investiere, durchforste ich all den Kram, der sich über die Jahre angesammelt hat.

Sortieren, Verlagern und/oder Wegwerfen ist die Devise.

Diverse Sachen habe ich schon in mein Büro nach Eppstein verlagert, denn da habe ich eine Menge Platz. Aber es ist fast unglaublich, welches Zeug mir in die Finger gefallen ist, das es definitiv nicht wert war aufgehoben zu werden. Ich habe etwa so viel Schmierpapier aufgehoben, dass ich über Jahre versorgt wäre – wenn nicht neues Papier dazukommen würde. Ich habe einige Hundert Blatt aufgehoben und der Rest ist in die Altpapiertonne gewandert. Zusammen mit zig Bedienungsanleitungen, alten Unterlagen, Landkarten, Aufzeichnungen etc.

Aber auch Elektroschrott, den ich nie mehr brauche. Von uralter Hardware bis zu mehreren Dutzend Ladekabeln. Die Teile sind weitgehend auf den Wertstoffhof gekommen.

Eben bin ich über meinen Schatten gesprungen und an meine Belegexemplare meiner vielen Bücher bzw. Schulungsunterlagen und auch die Video-DVDs aus Zeiten von Video2Brain (jetzt LiL) gegangen. Da sind im Laufe der Jahre über die zig Neuauflagen und Übersetzungen um die 100 Bücher bzw. Schulungsunterlagen und einige DVDs angefallen. Von den meisten hatte ich noch zig Belegexemplare gehortet. Das macht wirklich keinen Sinn. Die vollkommen aus der Zeit gefallenen IT-Bücher von teils vor 20 oder mehr Jahren braucht kein Mensch mehr – außer mir als Andenken. Die kann ich nicht einmal verschenken. Ich habe von allen meinen Büchern ein Belegexemplar aufgehoben, dazu die Bücher und Schulungsunterlagen, die noch aktuell sind und von mir in Schulungen eingesetzt werden können sowie und ein paar zusätzliche Belegexemplare von Büchern, die für mich besonders wichtig waren (insbesondere von meinem allerersten Buch). Der Rest ist aber – schweren Herzens – ebenfalls in die Altpapiertonne gewandert.

So langsam leert sich das Büro und wenn das dann irgendwann wieder fertig ist. sollte es auch nicht mehr so beengt – ich will nicht sagen „zugemüllt“ hier sein.

YouTube-Downloader erstellen – aus meinem Tutorial zu Python

Mit Python und geeigneten Frameworks wird der Download von frei zugänglichen Videos fast zum Kinderspiel. Das zeige ich im aktuellen Entwickler-Tipp zu Python bei LinkedIn Learning. Sie sehen in dem Tipp, wie Sie das auf einfache Weise mit einem YouTube-Downloader als Grundlage für eigene Erweiterungen nutzen können – auf Basis eines Frameworks mit Namen pytube. Und bevor wir jetzt in die falsche Richtung denken – es geht nicht um einen YouTube-Downloader, der illegale Inhalte laden kann. Geschützte Dateien werden damit nicht geladen, aber wir können damit freie Videos laden, freie Multimediadateien.

Die REST-API mit Python nutzen – neu in meinem wöchentlichen Tutorial zu Python

Mittwoch und bei LinkedIn Learning gibt es wieder einen neuen Entwickler-Tipp zu Python. Mit der REST-Schnittstelle erhält man zusätzliche Flexibilität in Python, um Management-Aufgaben durchzuführen aber auch automatische Informationen zu nutzen. Python bietet sich gerade zu ideal für die Zusammenarbeit an. Sogenannte Web Services stellen standardisierte Schnittstellen bereit, womit man über das Internet kommunizieren kann. Genau genommen können Sie Dienste in Anspruch nehmen, die in einer standardisierten Form bereitgestellt werden. Das kann man auch aus Python heraus nutzen. Das sogenannte RESTful-API oder allgemein Rest ist eine solche Programmierschnittstelle, die auf HTTP-Anfragen reagiert. Im Wesentlichen unterscheidet man hier zwischen den verschiedenen Methoden, die man mit HTTP-Daten anfordern kann. Get, Post, Put und Delete. Und in Abhängigkeit von diesen Methoden können gewisse Dinge bereitgestellt werden. Die Antwort von einem Rest oder RESTful Web Service liegt in der Regel in Json oder dem XML-Format vor und Python nutzt als Basis für REST oft das Modul requests.

Reguläre Ausdrücke in Python

Bei LinkedIn Learning gibt es seit heute wieder einen neuen Entwickler-Tipp zu Python. Reguläre Ausdrücke in Python sind das Thema. Reguläre Ausdrücke sind sehr mächtige Features, um Suchausdrücke in Form von Pattern zu definieren. Das re-Modul ist der Zugang in Python, das in diesem Video vorgestellt wird. In Python ist das Modul re die Basis. Nicht die einzige Möglichkeit, aber das ist ein Standardmodul, mit dem man reguläre Ausdrücke formulieren und vor allen Dingen verwerten kann. Das Interessante ist nicht die Formulierung, das ist die Verwertung. Das heißt, es gibt Methoden, um reguläre Ausdrücke, also Such-Pattern in irgendeiner Form zu verarbeiten, nach Übereinstimmungen zu suchen, aber beispielsweise auch Texte an gewissen Stellen aufzusplitten und ähnliche Dinge.