Codequalität messen und prüfen – ist das machbar, ist es sinnvoll?

Python code quality tools beyond linting - es gibt eine Reihe solcher Tools, die in diesem Artikel vorgestellt werden.

Für Tach, das die Abhängigkeiten zwischen Modulen analysieren und visualisieren kann und für größere Projekte sehr nützlich sein kann, sieht es gerade nicht so gut aus: es ist verwaist und unmaintained. Noch funktioniert es allerdings und kann nach uv tool install tach problemlos benutzt werden.

Die Frage nach dem Nutzen solcher Tools (und ihrer Ergebnisse) wird im Artikel auch angesprochen (und grundsätzlich bejaht), allerdings sind nach Meinung des Autors mehr Koordination zwischen den Projekten und Diskussionen über die Ziele notwendig.

Materielles Design

Von Google gibt es einen Satz von Icons nach deren Material-Design-Gestaltungsrichtlinien – die Symbole kommen einem sehr bekannt vor, weil sie auf vielen Webseiten benutzt werden. Da sie unter einer freizügigen Lizenz stehen, spricht (jedenfalls rechtlich) nichts dagegen, sie ebenfalls zu benutzen. Wie macht man das?

Auf Webseiten

Die Icons können als Webfont (WOFF2) benutzt werden – direkt über einen Link zu einem CDN (content delivery network), wobei man Spuren hinterlässt, die vielleicht unerwünscht sind, oder indem man den Font über seinen Webserver selbst ausliefern lässt. Hierzu kann man ihn (und dazu passende CSS-Dateien) herunterladen (Näheres siehe https://fonts.google.com/icons) oder über seine Linuxdistribution installieren (Debian: fonts-materialdesignicons-webfonts).

Alternativ kann man, insbesondere wenn man nur wenige Icons nutzen will, die SVG-Daten von besagter Webseite herunterladen und direkt in seine HTML-Seite einbetten, entweder an jeder Stelle, an der sie vorkommen sollen, oder einmal im Verborgenen und dann per use-Element referenzieren:

<p>
  Text vorher
  <svg width="1.5em" height="1em" viewbox="0 0 16 16">
    <title>Symbol erledigt</title>
    <use href="#md-done-outline" />
  </svg>
  und Text dahinter
</p>

<!-- … und unten auf der Seite dann … -->

<div id="md-icons" hidden>
  <svg id="md-done-outline"
       xmlns="http://www.w3.org/2000/svg" height="24px"
       viewBox="0 -960 960 960" width="24px" fill="#1f1f1f">
    <path d="m381-240 424-424-57-56-368 367-169-170-57 … 172 168-538 538Z"/>
  </svg>
</div>

In Dokumenten

Auch in gedruckten bzw. druckbaren Dokumenten kann man diese Icons verwenden. Dafür ist es zweckmäßig, sie als Truetype-Font zu installieren, beispielsweise als Debian-Paket fonts-material-design-icons-iconfont, das auch Webfonts und CSS-Dateien enthält. Anschließend lassen sich die Icons in LibreOffice, LaTeX und Typst problemlos benutzen. Für letzteres hier ein Beispiel, das eine selbstdefinierte Funktion verwendet:

#let md-icon(it) = {
  text(font: "Material Icons", baseline: 0.13em, ligatures: true, it)
}

Willst Du mit mir ins Kino #md-icon[movie] gehen #md-icon[check_box]
oder lieber nicht #md-icon[cancel]? Gib mir schnell #md-icon[fast_forward]
Bescheid.

Damit werden Ihre Texte viel ansprechender für Leser, die Emojis gewohnt sind und von größeren Buchstabenansammlungen leicht irritiert werden.

Sinnvolles Greppen in Quellprogrammen

grep-ast ist ein grep-Tool, das die Quellsyntax einiger Programmiersprachen versteht und kontextgerecht greppen kann. Mit uv tool install grep-ast kann man es (unter den Kommandonamen grep-ast und gast) verfügbar machen, und auch bei KI-unterstützter Programmierung soll es nützlich sein.

Ist Typst das neue LaTeX?

Anscheinend kommt – endlich – wieder Bewegung in die TeX-Welt. Das Satzprogramm Typst (gesprochen /taɪpst/), das 2022 im Rahmen der Masterarbeiten zweier Berliner Studenten entstand, findet immer mehr Anhänger und mehr Beachtung.

Es verspricht dieselbe Satzqualität wie TeX, sowohl für lange Texte als auch für mathematischen Formelsatz, bei ungleich höherer Verarbeitungsgeschwindigkeit (natürlich dank Rust …) und einfacherer Handhabung.

Die Daten- und Programmstruktur von TeX ist wesentlich von den Möglichkeiten der Computer der 80er Jahre geprägt. Zwar wird schon lange an neuen Versionen gearbeitet, und lualatex sowie BibLaTeX mit Biber haben wichtige Verbesserungen gebracht, doch steht die Kompatibilität zu den alten Standards und Versionen grundlegenden Neuerungen im Weg.

Typst geht daher andere Wege und strebt zwar eine vergleichbare Funktionalität und Erweiterbarkeit an, ist aber nicht TeX-/LaTeX-kompatibel. Eine Migration wird bspw. von pandoc unterstützt, wird aber im allgemeinen nicht 100%ig sein.

Das Markup sieht deutlich anders aus, und zusätzlich bietet Typst die Möglichkeit, übliche Konstrukte wie Überschriften, Aufzählungen und Quellcode in einer Wiki-Formatierung (ähnlich Markdown) zu schreiben, was das Eintippen sehr erleichtert. Ein Language-Server (tinymist) ermöglicht die Integration in viele Editoren und ein automatisches Neuerstellen der Ausgabedatei (PDF, SVG, künftig auch HTML) während des Tippens und damit eine fast kontinuierliche Vorschau.

Typst ist Open Source; zusätzlich gibt es eine SaaS-App als teilweise kostenpflichtiges Produkt, die u.a. kollaboratives Arbeiten und inkrementelles Preview bietet.

Es existiert schon eine Sammlung von Templates für viele Anwendungszwecke, die von Nutzern beigesteuert wurden, sowie ein eigenes Bibliografiesystem, das auch BibLaTeX-Dateien verwenden kann.

Noch ist Typst in einem frühen Entwicklungsstadium, und “breaking changes” sind möglich, aber es gibt schon eine umfangreiche Dokumentation, und eigene Versuche führten zu fehlerfreien und guten Ergebnissen.

django-watchfiles: Effizienteres Erkennen geänderter Module

Der Django-Testserver, der meist mit manage.py runserver (oder _plus) gestartet wird, lädt sich neu, wenn Quelldateien geändert werden. Die Erkennung solcher Änderungen ist ziemlich ineffizient, weil offenbar immer wieder im Dateisystem nachgeschaut wird, ob noch alles beim alten geblieben ist.

Das Paket django-watchfiles ändert dies so ab, dass die Mechanismen des Betriebssystems genutzt werden, um Informationen über Änderungen zu bekommen. Dies führt zu einer deutlichen CPU-Entlastung, wie der Autor des Pakets berichtet.