pipxu ist ein pipx mit uv-Genen

pipxu ist ein neu geschriebenes pipx, das intern uv benutzt und deshalb viel schneller ist. Auch sonst soll es einige Vorteile haben.

Falls diese Kürzel den geneigten Leser irritieren: pipx ist ein Tool, das Python-Pakete in automatisch angelegte virtuelle Umgebungen installiert und ihre Executables (auf Nutzerebene, nicht systemweit) als Kommandos verfügbar macht. Da uv ein zum Quasistandard pip kompatibles, aber sehr (!) viel schnelleres Installationstool für Python-Pakete ist, kann es das pipxu auch erheblich beschleunigen.

Codon macht aus Python Maschinencode

Codon kompiliert Python-Programme in nativen Maschinencode ohne Runtime-Overhead. Die Webseite gibt typische Geschwindigkeitszuwächse vom 10- bis 100-fachen gegenüber normalem Python in einem einzelnen Thread, unterstützt aber auch natives Multithreading, das zu weiterer Beschleunigung führen kann.

Insgesamt soll die Performance das Level von C bzw. C++ (mindestens) erreichen.

Neu in Django 5.0: GeneratedField

Django 5.0 bringt für Models den neuen Feldtyp GeneratedField, dessen Wert aus anderen Feldern desselben (!) Datensatzes von der Datenbank berechnet wird.

Ein Artikel zeigt eine Reihe von Anwendungsfällen, beispielsweise zur Berechnung von Wochentagen, Gesamtpreisen, zusammengesetzten Namen oder Initialen.

Unentbehrlich für Schlafwandler: Mondphasen berechnen

Wer für das eigene Schlafwandeln oder das seiner Mitbewohner, für wirksames Kräuterpflücken oder seine Nebenbeschäftigung als Werwolf seine Zeitplanung an den Mondphasen orientieren (oder vielleicht einen eigenen Kalender layouten) will, braucht eine gute Berechnungsgrundlage.

Hier ist ein Codeschnipsel (nach einer Doku):

from datetime import datetime as dt
from decimal import Decimal
from math import floor

# Calculate lunar phase by Sean B. Palmer, inamidst.com
# http://en.wikipedia.org/wiki/Lunar_phase#Lunar_phase_calculation

phases = ["🌑", "🌒", "🌓", "🌔", "🌕", "🌖", "🌗", "🌘"]

def position(then: dt) -> Decimal:
    diff = then - dt(2001, 1, 1)
    days = Decimal(diff.days) + Decimal(diff.seconds) / Decimal(86400)
    lunations = Decimal('0.20439731') + days * Decimal('0.03386319269')
    return lunations % Decimal(1)

def phase(pos: Decimal) -> str:
    index = pos * Decimal(8) + Decimal('0.5')
    index = int(floor(index)) & 7
    return phases[index]

Aufrufbeispiel:

>>> import mond
>>> tag = mond.dt(2024, 1, 1)
>>> print(mond.phase(mond.position(tag))
'🌖'