Die zweite Auflage von »Python — Der Grundkurs« ist erschienen. Für die Neuauflage habe ich dieses äußerst erfolgreiche Buch im Hinblick auf die aktuelle Python-Version 3.10 vollständig aktualisiert und in vielen Details verbessert:
Assignment Expressions (Zuweisung und Vergleich kombinieren)
Neue Formatierungssyntax `f'{varname}‘
Vereinigung von Dictionaries
Pattern Matching (Tupel, Listen und Sets mit Mustern auswerten)
Stärkere Berücksichtigung von VSCode als Python-Editor
Am Grundkonzept des Buchs hat sich nicht geändert: Der kostengünstige Grundkurs richtet sich an Einsteiger, die parallel zum Buch Python in der Schule, im Studium oder in der Arbeit lernen, sowie an Umsteiger von anderen Programmiersprachen, die rasch die Eigenheiten von Python erlernen wollen.
Viele Beispiele aus der Praxis sowie Übungsaufgaben helfen dabei, Python ohne allzu viel Theorie kennenzulernen. Im handlichen Taschenbuchformat ist das Buch auch unterwegs ein idealer Begleiter. Mehr Details zum Buch gibt es hier:
Seit einigen Tagen ist Kotlin 1.6 verfügbar. Dieser Beitrag geht auf die wichtigsten Neuerungen im Vergleich zu Version 1.5 ein. Die Kurzfassung: Kotlin 1.6 ist ein »kleines« Release, für die meisten Entwickler gibt es keine wirklich dramatische Änderungen. Auch die Verbesserungen in der Standardbibliothek sind eher Kleinigkeiten.
Dieser Text bezieht sich auf die folgenden Versionsnummern:
IntelliJ: 2021.2.3
Kotlin: 1.6.0
JDK: 17
Weitere Kotlin-Update-Artikel auf meiner Website finden Sie hier:
In Kotlin 1.6 beklagt sich der Compiler, wenn eine when-Konstruktion für Enumerationen, boolesche Werte oder für Datentypen nicht alle möglichen Fälle erfasst, also nicht »exhaustive« ist. Aktuell können Sie diese Warnung noch ignorieren, aber in Kotlin 1.7 wird daraus ein Fehler. Spätestens dann müssen Sie die when-Konstruktion so formulieren, dass sämtliche Fälle erfasst werden (am einfachsten durch einen else-Block).
enum class Days {
Monday, Tuesday, Wednesday, Thursday,
Friday, Saturday, Sunday
}
val day = Days.Friday
when(day) {
Days.Monday, Days.Tuesday -> println("Wochenanfang")
Days.Wednesday, Days.Thursday -> println("Wochenmitte")
Days.Friday -> println("Fast geschafft")
// Warnung: Non exhaustive 'when' statements on enum will be prohibited
// in 1.7, add 'Saturday', 'Sunday' branches or 'else' branch instead
}
Standardbibliothek
readln: Wenn Sie mit readLine() eine Datei zeilenweise auslesen, liefert die Funktion entweder die nächste Zeile oder null. Nunmehr gibt es zwei Varianten zu readline, die die ursprüngliche Form längerfristig ablösen sollen:
readlnOrNull() verhält sich wie ehemals readLine(), ist aber klarer benannt und hat mehr Ähnlichkeiten mit println.
readln() löst dagegen einen Fehler aus, wenn das Ende der Datei erreicht ist, und kann statt dem wenig eleganten readLine()!! verwendet werden.
readLine() bleibt uns vorerst erhalten, soll aber in kommenden Kotlin-Versionen deprecated werden.
typeOf:typeOf<Typ> liefert ein KClass-Objekt, das Typ beschreibt. Die Funktion stand zwar schon seit Kotlin 1.3.40 zur Verfügung, ursprünglich aber nur für die JVM-Variante. Nunmehr kann typeOf in allen drei Kotlin-Varianten (also auch JS und Native) verwendet werden.
Duration-API: Die Duration API (beschrieben in Abschnitt 7.3 meines Kotlin-Buchs) gilt nun als stabil. Das gilt allerdings nicht für andere kotlin.time-Klassen zur Zeitmessung. Die in Kotlin 1.5 abgeschaffte Notation
val myDur = 2.minutes + 3.seconds - 10.milliseconds * 0.66
ist erfreulicherweise wieder eingeführt worden, erfordert nun aber Importe der betreffenden Companion-Eigenschaften, hier also:
Meine ersten Tests mit Kotlin scheiterten an Java 17. Auf meinem Rechner ist auch die JDK 17 installiert. Anscheinend ist das Build-System dazu nicht kompatibel. IntelliJ war nicht in der Lage, das minimalistische Console Template zu kompilieren und zeigte eine wenig hilfreiche Fehlermeldung an:
Could not open init generic class cache for initialization script '/tmp/wrapper_init4.gradle' (/crypt/home/kofler/.gradle/caches/7.1/scripts/954mesz5ux7usmane6uzpuni1).
> BUG! exception in phase 'semantic analysis' in source
> unit '_BuildScript_' Unsupported class file major version 61
Eine kurze Suche in stackoverflow ergab, dass Kompatiblitätsprobleme zwischen Gradle und der JDK 17 die Ursache sein könnten. Ich habe dann die JDK-Version für das Build-System auf 11 zurückgesetzt, und alles funktionierte. Merkwürdig. (Es geht hier nicht um die JDK für das eigentliche Projekt, die darf sehr wohl 17 sein.)
Neulich hatte ich Bedarf den SWAP eines Raspberry Pi, auf dem ein Raspberry Pi OS läuft, zu erweitern, da dieser ständig überlief. Hier sind per Standard 100MB eingerichtet. Diesen Wert galt es nun auf 1000MB anzuheben.
Diese Änderung kann ganz einfach wie folgt umgesetzt werden. Dazu ruft man mit dem Editor Nano die Datei /etc/dphys-swapfile auf
sudo nano /etc/dphys-swapfile
sucht den entsprechenden Eintrag und ändert den Wert, wie im Beispiel auf 1000.
CONF_SWAPSIZE=1000
Nach dem Abspeichern via Ctrl + o, dem Verlassen des Editors mit Ctrl + x und einem anschließenden Reboot, steht die neue Größe des SWAP-Speichers zur Verfügung.
Ich habe mir vor kurzem den „SONOFF Zigbee 3.0 USB Dongle Plus“ gekauft. Dieser wird standardmäßig mit der Z-Stack 3.x.0 Firmware Version „20210120“ ausgeliefert, die (Stand November 2021) aktuelle Z-Stack Firmware Version ist „20210708“....
Kurz notiert: es gibt Situationen, in denen man Pfade auflösen, also relative Pfade in absolute umwandeln möchte. Für Anwender, die dabei Konstruktionen mit pwd und kompliziertes Parsing umgehen wollen, bietet sich realpath aus den GNU Coreutils an.
Die Bedienung ist denkbar einfach: realpath nimmt beliebig viele Pfade als Argumente auf und gibt die absoluten Pfade zeilenweise aus. Dabei werden standardmäßig auch Symlinks aufgelöst, sodass der „wahre“ Pfad, im Programmkontext auch physischer Pfad genannt, angezeigt wird.
Mit einigen Zusatzoptionen, die sich in der Manpage realpath(1) finden lassen, kann weiterhin das Verhalten angepasst werden. Hier sei zum Beispiel -e erwähnt, das einen strikteren Modus aktiviert und überprüft, ob das letzte Element im Pfad überhaupt existiert – stanardmäßig ist dies nicht der Fall. Mit -s kann die bereits beschriebene Auflösung von Symlinks deaktiviert werden.
Alles in allem, ein hilfreiches Werkzeug, besonders für Shellscripte. Der Quelltext von realpath ist auch überschaubar und beispielsweise auf GitHub zu finden.
Es hat ja nun ein wenig gedauert bis ich mich bewegt habe.Ich selbst genieße den Darkmode jeden Abend an meinen Rechnern und sehe Ihn als Standard an.Erzwingen muss ich Ihn via Firefoxplugin bei manchen Seiten, aber sind wir ehrlich, ich bin eigentlich auch nicht besser. So wenig Zeilen Script, so eine positive Änderung für die ... Weiterlesen
Die AG KRITIS ist vollständig unabhängig von Staat oder Wirtschaft und vertritt als Ziel einzig und allein, die Versorgungssicherheit der Bevölkerung zu erhöhen. Die Mitglieder der AG KRITIS sind Fachleute und Expert*innen, die sich täglich mit Kritischen Infrastrukturen (KRITIS) beschäftigen. Die AG KRITIS ist der Auffassung, dass die Ressourcen der Bundesrepublik zur Reaktion auf Großschadenslagen durch Cyber-Vorfälle im Bereich der Kritischen Infrastrukturen nicht ausreichen, um die Auswirkungen der dadurch verursachten Krisen und Katastrophen zu bewältigen. Eine wesentliche politische Position der AG KRITIS lautet, dass im KRITIS-Umfeld eingesetzte Software grundsätzlich quelloffen gestaltet sein soll.
Soweit im gesetzlichen Rahmen möglich verzichtet der Autor auf alle Urheber- und damit verwandten Rechte an diesem Werk.
Es kann beliebig genutzt, kopiert, verändert und veröffentlicht werden.
Für weitere Informationen zur Lizenz, siehe hier.
Ein Abschnitt, welcher gute Dienste leisten kann. Ich hatte den Abschnitt vorübergehend immer in die Datei /etc/bash.bashrc hinzugefügt. Ich fand Ihn perfekt, wenn ein Drittanbieter auf dem Server via SSH arbeiten verrichten musste. Vorher sollte der Drittanbieter informiert werden, dass seine Arbeit überwacht wird . Funktioniert natürlich nicht, wenn mit ansible und ähnlichen gearbeitet wird ... Weiterlesen
Ein weiterer adminForge Service kann ab sofort genutzt werden. Mit Nitter habt ihr ein alternatives und quelloffenes Twitter-Frontend, welches ganz auf eure Privatsphäre ausgelegt ist. nitter.adminforge.de Kein JavaScript oder Werbung Alle Anfragen laufen über...
Ein weiterer adminForge Service kann ab sofort genutzt werden. Mit Teddit habt ihr ein alternatives und quelloffenes Reddit-Frontend, welches ganz auf eure Privatsphäre ausgelegt ist. teddit.adminforge.de Kein JavaScript oder Werbung Alle Anfragen laufen über...
Durch diesen Blogbeitrag auf LinuxNews bin ich auf das Tool trash-cli aufmerksam geworden. Installation: # Arch Linux sudo pacman -S trash-cli # Debian/Ubuntu sudo apt install trash-cli # Fedora sudo dnf install trash-cli Befehle:...
Ich habe nun über 5 Jahre im Homeoffice gearbeitet. Hier habe ich die vielen Vorteile, sowie aber auch die Nachteile genossen. Fasziniert habe ich die Empfehlungen der letzten zwei Jahre für die Arbeit im Homeoffice verfolgt, aber mich aus dem Thema herausgehalten. Vieles war für uns nicht so umsetzbar und hätte auch nicht so zu ... Weiterlesen
Pika Backup ist eine Anwendung für einfache Updates über „BorgBackup„. Der Name „Pika Backup“ hat nichts mit dem Pokémon „Pikachu“ zu tun. Auf GitLab steht hierzu folgendes: The name “Pika Backup” derives from the...
Ich besitze seit kurzem ein TUXEDO InfinityBook Pro 14 Gen6 mit 3K „Omnia“ Display. Dieses Display besitzt eine Auflösung von 2880 x 1800 Pixeln. Für HiDPI Displays können unter Gnome dank des „Fractional Scaling“...
Beim Upgrade auf die Version 21.0.3 meiner Nextcloud erhielt ich folgende Fehlermeldung:
Letzte Cron-Job-Ausführung: Vor 5 Stunden. Check the background job settings.
Die Hintergrund-Aufgaben via Cron „Den System-Cron-Dienst verwenden, um die Datei cron.php alle 5 Minuten aufzurufen. Die cron.php muss durch den Systemnutzer „www-data“ ausgeführt werden.„, konnten nicht mehr ausgeführt werden.
Normalerweise kommt es i.d.R. zu solchen Meldungen eher beim Upgrade auf die nächste Major-Version. Da ich diesen Fehler nun auf zwei betreuten Nextcloud-Instanzen feststellen musste, konnte es nur etwas mit der Konfiguration der Server zu tun haben.
Nach ein wenig Recherche im Netz fand ich die Lösung. Das Command Line Interface des PHP Cache musste explizit nachträglich aktiviert werden. Wenn ich das richtig deute, ist dies aber nur in meiner älteren PHP 7.3 nötig.
Hierzu öffnet man im Editor nun die Config /etc/php/7.3/mods-available/apcu.ini mit
sudo nano /etc/php/7.3/mods-available/apcu.ini
trägt folgende Zeile am Ende ein
apc.enable_cli=1
und speichert diese ab. Bei Verwendung von FPM startet man das Ganze neu.
sudo /etc/init.d/php7.3-fpm restart
Wer kein FPM aktiviert hat, führt einen Restart des Webservers durch.