Python-Weeklies laufen aus

Meine neuen Videoaufnahmen für LinkedIn Learning sind fertig. Ich habe ein neues Training rund um Python aufgenommen, das in den Kontext einer neuen Serie bzw. Konzeption als eines der ersten Testtraining eingefügt werden soll. In einem gleichartigen Konzept werden dazu Training von verschiedenen Trainern und mit unterschiedlichen Sprachen veröffentlicht. Wenn sich die Strategie bewährt, werden irgendwann auch anderer Trainer und Themen folgen. Es gibt bereits US-Versionen, an denen wir uns orientieren. Aber fachlich als auch in Details sind wir eigenständig und ich lege Wert darauf, dass ich meinen eigenen Stil dennoch beibehalte und eigene Themen bereitstelle.

 

Zusätzlich habe ich noch 2 Erweiterungsfilme eines meiner Training zu JavaScript aufgenommen. Durch die fortschreitende Unterstützung von JavaScript in den verschiedenen Browsern war es mir wichtig, dass diese modernen Themen rund um asynchrone Programmierung und DOM-Selektion ergänzt werden.

Die Aufnahmen waren die Woche mit einigen technischen und organisatorischen Problemen behaftet, sind aber dennoch flott durchgegangen. Auch wenn die Hitze wirklich brutal war und ich die Pausenzone auf dem Balkon reichlich ausnutzen musste.

Ansonsten wird das neu aufgenommene Python-Training auch eine Art Ersatz bzw. Fortsetzung meiner Entwicklertipp der Woche zu Python werden. Denn diese laufen so langsam aus. Vielleicht ist es aufgefallen, aber der Abstand zwischen dem letzten Entwicklertipp der Woche zum Thema Anagramm und dem aktuellen Entwicklertipp der Woche zum Modul trace und Coverage.py war länger wie eine Woche. Die Veröffentlichungsfrequenz wird quasi „runtergebremst“, bevor die  Entwicklertipps der Woche in ein „normales“ Videotraining mit einer fixen Anzahl an Filmen umgewandelt werden.

Anagramm – nicht Anna gram

In der übernächsten Woche stehen wieder Videoaufnahmen für LinkedIn Learning an, aber heute gibt es erst einmal wieder einen neuen Entwicklertipp der Woche zu Python. Es geht darum, was ein Anagramm ist und wie man mit Python dies überprüfen kann.

Was ein Anagramm ist, kann man einfach beschreiben. Keinesfalls steht es dafür, dass irgendeine Anna gram ist, sondern es ist eine Buchstabenfolge, die durch reine Umsortierung der einzelnen Buchstaben aus einer anderen Buchstabenfolge entsteht. So eine Umsortierung kann im Rahmen der Kryptografie interessant sein. Oder auch bei Vorgaben, dass ein neues Passwort nicht einfach ein Anagramm eines bisherigen Passwortes sein darf. Diese Anwendung greife ich möglicherweise auf und werde darauf vielleicht im Rahmen der oben schon angedeuteten kommenden neuen Videoaufnahmen für LinkedIn Learning zurückkommen. Mal sehen – da bin ich im Moment am Vorbereiten.

Auf das Dateisystem zugreifen – neu im Tutorial zu Python

Es gibt wieder einen neuen Entwicklertipp der Woche zu Python bei LinkedIn Learning. Es geht darum, wie man mit Python auf das Dateisystem des Rechners zugreifen kann, um dort Datei- oder Verzeichnis-Operationen durchzuführen. Die beiden Module pathlib und os.path sind für Sie die wahrscheinlich wichtigsten Einstiegsstellen.  Dabei beschreibt pathlib einen objektorientierter Ansatz, um auf das Dateisystem zuzugreifen, während os.path einen, sagen wir mal, traditionellen Weg bereitstellt. Sie haben viele ähnliche Funktionen oder deckungsgleiche Funktionalitäten und beide haben so ziemlich alles, was man so braucht, um auf dem Dateisystem zu arbeiten.

Terminalinhalt mit Python zur Laufzeit Plattformneutral leeren

Der neue Entwicklertipp der Woche zu Python ist bei LinkedIn Learning freigeschaltet. Es geht darum, wie man den Terminalinhalt zur Laufzeit leeren kann. Denn das ist nicht so ganz trivial bzw. einfach mit einer Python-Anweisung möglich. Denn wenn man in einem Terminal arbeitet, kennt Python keinen integrierten Befehl, um dieses Terminal dynamisch zu löschen, das heißt, direkt aus einem Skript heraus. Sie können selbstverständlich im Terminal einen Betriebssystembefehl wie cls unter Windows als clear unter Linux eingeben und damit wird das Terminal geleert. Aber das machen Sie aktiv im Terminal nach oder vor dem Ausführen des Skripts. Es gibt diese Befehle aber so nicht in Python.

Doch manchmal möchte man eben zur Laufzeit auch aus einem Skript das Terminal leeren und dann wieder oben mit einem frischen Terminal beginnen. Das kann man nachprogrammieren und die Basis ist das Modul os.system. Damit kann man aus Python einen Betriebssystembefehl aufrufen. Wenn man zudem vorher das Betriebssystem abfragt, kann man diesen dann auch in Abhängigkeit von dem Betriebssystem passend auswählen und das Skript Plattformneutral erstellen.

Tipp & Tour

In ein paar Minuten geht es auf einen kurzen Radurlaub mit meinem Sohn. Ein kleiner Nachschlag unserer Vierländertour rund um den Bodensee. Dieses Mal aber nur 4 Tage und weitgehend in der Heimatregion. Es soll von Marburg die Lahn und den Rhein entlang gehen. Ich hoffe, dass die Fahrradmitnahme mit dem Zug nach Marburg auch geht, denn mit der Bahn habe ich überwiegend schlechte Erfahrungen. Wir werden sehen. Vorher habe ich aber noch gecheckt, welcher  Entwicklertipp der Woche zu Python heute bei LinkedIn Learning freigeschaltet wurde. Es geht die Woche darum, wie man per os-Modul auf die Betriebssystemschnittstelle zugreifen kann.

Manche verstehen unter „Python“ wohl etwas anderes :-)

Bei LinkedIn Learning habe ich ja diverse Videotrainings zu Python und ergänzender Techniken bzw. Themen aufgenommen und auch einen regelmäßigen Entwicklertipp der Woche zu Python am Laufen. Dazu kommt neben häufigen Python-Schulungen noch ein Buch:

Programmierung in Python - Ein kompakter Einstieg für die Praxis - Steyer, Ralph
Programmierung in Python
Programmierung in Python – Ein kompakter Einstieg für die Praxis
  • Autor: Steyer, Ralph
  • 978-3-658-20705-2
  • Umfang in Druckseiten: 257
  • Verlag: Springer Fachmedien Wiesbaden GmbH
  • Erscheinungsjahr: 2018

Aber andere Leute verstehen „Python“ wohl etwas anders bzw. universeller. Ein Vermieter hat nach dem Auszug seiner Mieter in der Wohnung drei zurückgelassene Pythons gefunden. Stellen sich Fragen:

  1. Waren die Mieter Programmierer?
  2. Auf welche Programmiersprachen sind sie umgestiegen, dass die Pythons überflüssig waren?

Moduleinbindung absichern

Ich warte gerade auf meine „Gäste“ (Studenten) zur Teams-Sitzung der TH Bingen. Heute ist die letzte Fragestunde, bevor diese die Semesterarbeit abgeben sollen. Diese Fragestunde ist aber optional und vielleicht kommt auch niemand. Nachdem ich gestern mit dem ebike nach Wiesbaden zu meiner Schulung der Fachinformatiker gefahren bin, bin ich danach weiter nach Eppstein zum Training und habe hier übernachtet. Nach der Teams-Sitzung geht es dann wieder mit dem ebike zurück nach Bodenheim. Davor habe ich aber wie am Mittwoch üblich bei bei LinkedIn Learning geschaut, welcher Entwicklertipp der Woche zu Python heute freigeschaltet wurde. Thema ist, wie man die Moduleinbindung absichern kann. Denn wenn man in Python Module einbinden will, braucht man manchmal Informationen über die Module und muss auch ggf. reagieren, wenn eine Einbindung schiefgeht. Eventuell muss man dann andere Module einbinden oder von einem anderen Ort.

Der Bedingungsoperator in meinem Tutorial zu Python

Ab der Woche habe ich eine regelmäßige Schulungssession jeweils am Montag und Dienstag jeder Woche gestartet. Die geht über mehrere Wochen. Eine Präsenzschulung, was in den aktuellen Zeiten bemerkenswert ist. Aber in Wiesbaden und damit entfallen eine längere Anreise (ich plane sogar, hin und wieder mit dem ebike da hinzufahren) sowie eine externe Übernachtung. Die regelmäßigen Slots werden dann Mittwochs durch die wöchentlichen Veröffentlichung meiner Entwicklertipp der Woche zu Python ergänzt. Der heute bei LinkedIn Learning freigeschaltete Entwicklertipp hat den Bedingungsoperator zum Thema.

Wenn man einen Programmfluss aufgrund einer Bedingung steuern möchte, nutzt man in den meisten Programmiersprachen eine if-Anweisung oder eine if-else- bzw. elif-Anweisung oder so irgendwas in dieser Art oder  in anderen Sprachen wie Python gegebenenfalls auch switch-case oder so irgendwas.

Es gibt aber in fast allen Programmiersprachen einen sogenannten Bedingungsoperator. Man nennt ihn auch den tenären Operator, respektive auch den Konditionaloperator oder den triadischen Operator. Und so etwas gibt es auch in Python.

Vor der Hitze da – der neue Entwicklertipp

Das soll im Laufe der Woche immer heißer werden und darauf freue ich mich schon so richtig :-(. Denn mein Büro unter dem nicht-isolierten Dach wird dann vermutlich wieder die 40 Grad deutlich überschreiten – trotz einer kleinen, mobilen Klimaanlage. Aber zur potentiellen Abkühlung habe ich zumindest meinen „Pool“ schon mal vorbereitet.

Zumindest ist bei LinkedIn Learning der neueste Entwicklertipp der Woche zu Python heute schon vor der Hitze verfügbar. Thema ist die Anwendung der format-Funktion auf Strings in Python. Python stellt dazu diese mächtige und im Grunde auch recht einfach anzuwendende Funktion bzw. Methode bereit, um Variablen und deren Werte in einen String an einer bestimmten Stelle einzufügen und dabei die für die Ausgabe zu formatieren.

Zip und Büroprobleme mit eventueller Umplanung der neuen Aufnahmen

Wie üblich steht am heutigen Mittwoch bei LinkedIn Learning der neueste Entwicklertipp der Woche zu Python verfügbar. Thema ist die zip-Funktion in Python Diese lässt einen normalerweise an Komprimierung denken, aber das ist der falsche Ansatz. Wenn man  an einen Reißverschluss denkt, kommt man der Funktionalität näher. Wie bei einem Reißverschluss werden die einzelnen  Elemente von iterierbaren Strukturen damit zusammengefügt. Es gibt einige nützliche Anwendungen, die ich in dem Tipp bespreche.

Allerdings ist für mich das Erscheinen des Entwicklertipps heute eher zweitrangig, denn vor meinem Büro in Eppstein ist ein Bautrupp angefahren. Es gibt ein Leck in der Wasserleitung. Allerdings mit Ankündigung und deshalb war ich heute vor Ort, um die Leute zur Ortung des Lecks in den Keller zu lassen. So wie es aussieht, betrifft das Leck den Teil der Leitung, die auf meinem Grundstück verläuft.

Eben fangen sie an, die Straße aufzureißen. Was immer hier eine besondere Situation ist, denn es handelt sich um eine sehr enge, einsprurige Sackgasse. Und wenn da was gemacht wird, ist alles hinter der Stelle komplett von der Welt abgeschnitten. Aber meine Videokonferenz habe ich zumindest noch vor dem Lärm durchbekommen.

Die ganze Angelegenheit wird jedoch sehr aufwändig, denn es ist hier nicht nur eng. Es gibt hier eine hohe Trockenmauer aus Naturstein und vermutlich viel Stein im Boden. Wenn es schlecht läuft, müssen die nicht nur die Strasse aufreißen und da ein Loch baggern, sondern von meinem Hof mehrere Meter tief nach unten sowie auch ein Loch in die Wand des Kellers bohren. Denn wahrscheinlich muss die gesamte Leitung ausgetauscht werden. Und das dauert dann mehrere Tage, womit meine neuen Videoaufnahmen für LinkedIn Learning in der kommenden Woche betroffen wären. Denn nach Pfingsten steht die Neuaufnahme von einem Training an, das ein bisschen aktualisiert und aufgehübscht werden muss. Falls es dann noch Baulärm gibt, kann ich die Aufnahmen hier knicken. Dann werde ich das in Bodenheim machen müssen, was grundsätzlich auch möglich ist. Nur ist da die Gefahr von Ablenkung sowie Störungen einfach höher und vermutlich werde ich immer wieder Videos unterbrechen oder mehrfach aufnehmen müssen. Aber es wird schon gehen und vielleicht schaffen die es hier auch bis zum Wochenende. Wichtiger ist mir natürlich, was die Versicherung zu der Sache sagen wird. Denn es kommt im Moment schon dicke, da auch in meiner der vermieteten Wohnung in Vockenhausen mehrere Schäden zu reparieren sind. Da war ich gestern abend zur Besichtiung. Zudem wurde gerade hier in Eppstein der Stromzähler getauscht. Alles zeitaufwändig und mit Arbeit verbunden. Das einzig Gute – in der Woche laufen die „normalen“ Jobs wie Schulungen, Korrekturen oder Aufnahmen nur auf Sparflamme und ich kann die Termine halbwegs organisieren.

Polymorphismus in Python – aus meinem Tutorial zu Python

Mittwoch und bei LinkedIn Learning ist der neue Entwicklertipp der Woche ist verfügbar. Dieser Tipp zeigt, wie man in Python Polymorphismus implementieren bzw. nachbilden kann. In den meisten objektorientierten Programmiersprachen gibt es ein polymorphes Verhalten aufgrund einer Technologie, die man Überladen, Overload, nennt. In Python ist so etwas nicht vorhanden in dem Sinne, aber man kann es nachbilden. Dazu verlagert man die Funktionalität direkt in eine Funktion oder Methode und diese entscheidet, wie sie sich verhält. Im Gegensatz zur echten Polymorphie mit Überladen, wo es verschiedene Methoden gleichen Namens, gleichen Bezeichners, aber einer eindeutigen Unterscheidung im den Gültigkeitsbereich gibt, haben wir hier nur eine Methode oder Funktion.

Business a usal – so langsam komme ich wieder in den Arbeitrythmus

Ralph Steyer jQuery

Nach meinem Radurlaub habe ich noch eine Weile meine Arbeit auf Sparflamme gehalten, aber sukzessive hochgefahren. Muss ja. Ich bereite gerade ein neues Videotraining für LinkedIn Learning (LiL) vor, dass ich übernächste Woche aufnehmen will – zusammen mit einer fachlichen Lektorarbeit für ein anderes Training. Dazu bereite ich eine jQuery-Schulung für nächste Woche vor.

Ebenso ist am heutigen Mittwoch wieder ein neuer Entwickler-Tipp der Woche zu Python bei LinkedIn Learning freigeschaltet worden. Thema ist, wie man die Quersumme einer Zahl berechnen kann. Das ist gar nicht so unwichtig oder speziell. Denn die Quersumme  (die Summe aller Ziffern einer Zahl) kann man verwenden, um darüber die Veränderungen von Dingen beobachten. Das ist so was Ähnliches wie eine einfache Version eines Hashwerts.

Eine Zahl in Faktoren zerlegen – neu in meinem Tutorial zu Python

Seit Dienstag der letzten Woche bis gestern habe ich zusammen mit meinem einen Sohn eine Radtour vom Bodensee Ecke Konstanz über Schaffhausen und die Rhein-Fälle, den Zürich-See, den Walen-See, Lichtenstein, Vorarlberg und dann auf der deutschen Seite des Bodensees zurück gemacht. 8 Tage waren wir unterwegs, wobei 2 Tage für die An- und Abreise gedient haben.

Auf so einer – für mich zumindest – langen Radtour über 6 Tage auf dem Rad haben wir Gepäck gespart, soweit es ging. Damit das bewegende Gewicht im Rahmen bleibt. Also auch keinen Rechner dabei. Nur halt SmartPhones, was in modernen Zeiten ja klar und irgendwie auch notwendig ist. Außerdem wollte ich in meinem ersten wirklichen Urlaub seit langer Zeit auch mal komplett von der IT und dem täglichen Business abschalten und habe mich weitgehend abwesend gemeldet.

Trotzdem habe ich natürlich meine E-Mails gelesen und letzte Woche die Meldung von LinkedIn Learning mitbekommen, dass mein Kurs jetzt verfügbar ist. Diese Info bekomme ich jede Woche per E-Mail, wenn in meinem Kurs der neuste Entwickler-Tipp der Woche zu Python bei LinkedIn Learning veröffentlicht wurde. Also „Business as usual“ dachte ich.

Mittwoch ist der neue Tipp am Morgen wie üblich freigeschaltet worden und am Donnerstag oder Freitag kam für mich die übliche Mail, damit ich diese Information auf LinkedIn und anderen sozialen Netzwerken teile, um die Anzahl der Kursansichten zu erhöhen. Nur war ich eben in Urlaub und habe die Zeit ausnahmsweise mal auf mein  sonst übliches Teilen als auch das Posten im Blog oder das Kontrollieren des Kurses verzichtet.

Nachdem ich gestern heimgekommen bin, ist mir aber aufgefallen, dass der neuste Tipp noch der war, der bereits vor meinem Urlaub schon freigeschaltet war – wie man grafische Oberflächen mit PyQt erstellen kann. Sieht so aus als hätte die Matrix eine Fehlfunktion gehabt und meine Urlaubszeit versehentlich auf die Veröffentlichungsroutine gespiegelt ;-).

Aber natürlich ist das kein Problem. Es geht ja nichts verloren und mittlerweile ist der Kurs auch schon ziemlich umfangreich. Ob das Wachstum da eine Woche steht oder nicht, ist nicht wirklich von Bedeutung.

Und heute kam jetzt wieder eine Aktualisierung. Es geht darin darum, wie man eine Zahl in Faktoren zerlegen kann. Wenn man eine Zahl vorliegen hat, kann es zu verschiedenen Zwecken interessant sein, die einzelnen Ziffern der Zahl einzeln zu haben, das heißt, diese Zahl in ihre Faktoren zu zerlegen. Dazu gibt es verschiedene Möglichkeiten, von denen ich vier in dem Video zeige.

Es muss nicht immer tkinter sein – die PyQt-Alternative

Wenn Sie grafische Oberflächen mit Python erzeugen wollen, ist das integrierte tkinter-Framework in der Regel die erste Anlaufstelle. Der Grund ist offensichtlich – tkinter steht standardmäßig im Python-API zur Verfügung und hiermit können Sie bereits wunderbar grafische Oberflächen erzeugen.

Es gibt allerdings Alternativen. Beispielsweise PyQt. Zwar muss man PyQt in der Regel erst einmal installieren, aber man erhält damit ein GUI-Framework, das  eigentlich auf C++ aufbaut, wovon es aber diverse Derivate für verschiedene Sprachen gibt. Eben auch für Python in Form von PyQt. Damit kann man Oberflächen recht leicht zwischen verschiedenen Programmierapachen bzw. Systemen portieren.

Die Grundidee basiert, wie bei allen grafischen Oberflächen mittlerweile, auf Widgets und einem sehr verwandten Konzept. In dem neusten Entwickler-Tipp der Woche zu Python bei LinkedIn Learning zeige ich den Ansatz, wie man grafische Oberflächen mit PyQt erstellen kann.

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.

all und any

In dem aktuellen Entwickler-Tipp der Woche zu Python bei LinkedIn Learning geht es um die Funktionen all und any. Das sind zwei Funktionen, mit denen Sie bei sequentiellen Datentypen überprüfen können, ob die Elemente darin True- oder False-Zuständen entsprechen. Dabei wird ja in Python alles, was ungleich 0 bzw. einem Leerstring ist, als True gewertet.

Mittwochs in meinem Tutorial zu Python – die Funktion map nutzen

In dem aktuellen Entwickler-Tipp der Woche zu Python bei LinkedIn Learning stelle ich die Funktion map vor, die in gewisser Weise einem Lambda-Ausdruck ähnelt. Man hat eine iterierbare Struktur und wendet auf jedes Element dieser Struktur eine bestimmte Funktionalität, sprich eine Funktion, an.

Multiplikation von sequenziellen Datentypen – wieder was Neues in meinem Tutorial zu Python

Mittwoch und ich schaue., welcher neue Entwickler-Tipp der Woche zu Python bei LinkedIn Learning veröffentlicht wurde. Denn in welcher Reihenfolge die Tipps freigeschaltet werden, entzieht sich meiner Kenntnis – oder besser meinem Bewusstsein. So gesehen bin ich selbst jeden Mittwoch überrascht und immer ganz aufgeregt, was denn hinter dem Türchen des Weihnachtskalenders verbirgt. 🙂

Es geht in der Woche um die Multiplikation von sequenziellen Datentypen. Es gibt meiner Meinung nach kaum eine Sprache, die diese Multiplikation von sequenziellen Datentypen so einfach macht wie Python.

Nehmen wir mal an, …

…, dass mein ebike nicht wieder ständig ausgeht, wenn ich gleich damit in mein Zweitbüro nach Eppstein fahre. Ich kann die Strecke von etwa 35 Kilometer auch gut mit dem normalen Fahrrad fahren, aber Hin- und Rückweg an einem Tag ist bei den Höhenmetern heftig. Und wenn ich das mit dem ebike ohne Motor fahren soll, ist das wegen dem hohen Gewicht des Rads kein Spass. Denn in der letzten Zeit schaltet sich der Motor immer mal wieder ab während der Fahrt. Bisher habe ich ihn immer wieder anbekommen und ich habe mal alle Steckverbindungen kontrolliert und mit Kontaktspray gepflegt. Also treffe ich die Annahme (assert), dass die Sache gutgehen sollte. Und die Fahrt ist der Test.

Assert!

Das ist der Aufhängepunkt, denn bei LinkedIn Learning gibt es heute den neuen  Entwickler-Tipp der Woche zu Python mit dem Thema „Mit assert Annahmen formulieren„. Im Rahmen der sogenannten testgetriebenen Entwicklung (TDD) bzw. des Unit Testings wird sehr oft mit Asserts gearbeitet und diese werden dazu genutzt, für Tests Annahmen zu formulieren, die erfüllt sein müssen. Aber auch im Rahmen der -„normalen“ Python-Programmierung gibt es dieses Schlüsselwort assert, um eine gewisse Annahme zu treffen.