Beiträge der Kategorie default

Identitätskrise

Wozu noch Programmierer? Eine Antwort, die ich mir selbst geben musste

Neulich, in einem Meeting, sagte ein Marketingleiter einen Satz, der mich kurz aus der Bahn geworfen hat:

„Wozu überhaupt noch Programmierer beschäftigen? Das macht doch alles die KI.“

Ich habe nicht sofort geantwortet. Nicht, weil ich keine Antwort hatte – sondern weil ein Teil von mir sich fragte, ob er nicht recht hat.

Die kurze Identitätskrise

Ich programmiere seit über 15 Jahren. TYPO3, PHP, Extbase, die ganze Bandbreite. Wenn jemand in einem Meeting so beiläufig meinen Beruf für überflüssig erklärt, trifft das etwas – auch wenn man weiß, dass es zu einfach gedacht ist.

Denn ja: Code zu schreiben ist heute schneller geworden. KI generiert Funktionen, schlägt Refactorings vor, findet Bugs. Vieles, wofür ich früher Stunden gebraucht habe, geht jetzt in Minuten. Das ist keine Bedrohung, das ist Fakt.

Aber der Satz des Marketingleiters verwechselt etwas: Er hält „Code schreiben“ für die eigentliche Arbeit. Das war sie nie.

Was eigentlich meine Arbeit ist

Ich bin nicht in erster Linie jemand, der Zeilen tippt. Ich bin Software-Architektin. Und das bedeutet etwas anderes:

Jemand muss das System als Ganzes verstehen. Nicht nur die einzelne Funktion, sondern wie Datenbank, Frontend, Schnittstellen, Sicherheit und Wartbarkeit zusammenspielen. KI sieht den Ausschnitt, den man ihr zeigt. Sie kennt nicht die Historie eines gewachsenen Systems, nicht die stillen Abhängigkeiten, nicht die Gründe, warum eine Altlast so ist, wie sie ist.

Jemand muss die Richtung vorgeben. KI ist ein extrem leistungsfähiges Werkzeug – aber ein Werkzeug ohne Ziel liefert Beliebiges. Die Entscheidung, welche Architektur trägt, welcher Ansatz in fünf Jahren noch wartbar ist, welches Risiko man eingehen kann und welches nicht: Das sind Urteile, keine Textvervollständigung.

Jemand muss die richtigen Fragen stellen. Ein guter Prompt ist kein Zufallsprodukt. Er entsteht aus Erfahrung – aus dem Wissen, welche Fehler typisch sind, welche Rückfragen wichtig sind, was eine KI-Antwort plausibel klingen lässt, obwohl sie falsch ist.

Die eigentliche Verschiebung

Der Beruf verändert sich nicht durch Wegfall, sondern durch Verschiebung. Weniger Zeit für das Tippen von Boilerplate-Code, mehr Zeit für Systemverständnis, Architekturentscheidungen und Qualitätskontrolle. Die Verantwortung wächst eher, als dass sie kleiner wird – denn am Ende steht immer noch jemand gerade, wenn das System versagt. Und das ist nicht die KI.

Was bleibt

Ich bin nicht die Person, die Code produziert. Ich bin die Person, die versteht, entscheidet und verantwortet, was gebaut wird – mit KI als Werkzeug, nicht als Ersatz. Der Satz im Meeting resultiert aus Nichtwissen und mangelnder Wertschätzung für meine Arbeit.

PS: Könnte man nicht eher Marketingleiter durch eine KI ersetzen? 😉

Storage Pid ignorieren

Ich kann es mir einfach nicht merken… das folgende in die Repository Klasse:

public function initializeObject()
{
    $querySettings = GeneralUtility::makeInstance(Typo3QuerySettings::class);
    $querySettings->setRespectStoragePage(false);
    $this->setDefaultQuerySettings($querySettings);
}

Update Stress und neues Setup

Seit bestimmt zwei Jahren arbeite ich wie folgt: Docker Desktop, DDEV und WSL mit Ubuntu. Dazu nutze ich schon seit langer, langer Zeit mit PhpStorm mit ein paar nützlichen Plugins etc. Dabei liegen die Projekte in der Ubuntu Distribution und ich greife per \\wsl$\ auf sie zu. Im letzten Jahr hat PhpStorm schonmal Probleme bereitet – seit einem Update konnten auf einmal keine Projekte von WSL mehr geladen werden. Zum Glück war ich nicht die einzige mit diesem Problem und durch ein Rollback auf die vorherige Version konnte das Problem behoben werden.

Seit einem Windows Update (?) am Dienstag hatte ich nun wieder das Problem, dass PhpStorm keine Projekte aus der WSL laden wollte. Ich habe mehrmals verschiedene PhpStorm-Versionen installiert, leider immer das gleiche Ergebnis. Ein Kollege von mir schlug vor, alles (WSL, Ubuntu etc.) neu zu installieren. Gute Idee, aber dabei gingen ja die in Ubuntu abgelegten Projekte komplett verloren und mussten daher erstmal gesichert werden. In Linux ist ja das Windows-Laufwerk gemountet, der Zugriff aber ziemlich langsam, daher habe ich alle Projekte aus Ubuntu nach Windows verschoben. Das hat entsprechend den ganzen Tag gedauert. Am Ende des Tages alles neu installiert – und wieder das gleiche Ergebnis – langsamer Zugriff im Explorer und kein Zugriff aufs WSL in PhpStorm.

Dieser Kollege hat aber ein anderes Setup: bei ihm läuft DDEV direkt in Windows. Er startet ddev als nicht wie ich aus Ubuntu, sondern in PowerShell. Das hat bei mir leider nicht funktioniert. Beim Aufruf von ddev in PowerShell kamen nur Fehlermeldungen.

Auf purer Verzweiflung entschloss ich mich, ein vollständiges Backup einzuspielen. Ich nutze seit Jahren Acronis, um vollständiges Backup meiner Hauptplatte zu erstellen. Nun sollte sich zeigen, ob das funktioniert. Das Backup war von Dienstag früh, also zum Glück nicht so alt. Den ganzen Donnerstag rödelte mein armer Rechner, um das Backup einzuspielen (10 Std.?). Die Zeit habe ich zumindest sinnvoll genutzt, um eine Entwicklungsumgebung auf meinem Laptop einzurichten. Und da hat sich gezeigt, dass das folgende Setup erstaunlich gut funktioniert: Docker mit Hyper-V. Voraussetzung dafür ist, dass man Windows Professional nutzt und Virtualisierung erlaubt ist. Dann musste ich Docker nur noch neu installieren und dabei den Haken bei „WSL nutzen“ entfernen.

Das Einspielen des Backups hat sehr gut funktioniert – ein hoch auf Acronis. Das Problem war aber immer noch da – der Zugriff auf WSL war erstaunlich lahm. Nun habe ich also auf meinem Desktop-Rechner ebenfalls das genannte Setup mit Hyper-V und hoffe, dass es lange und update-sicher funktioniert.

Geschrieben in default | Kommentare deaktiviert für Update Stress und neues Setup

Zugriffsrechte in Tortoise Git ignorieren

Bei einem Projekt wurden die Zugriffsrechte der Dateien angepasst. Daraufhin wurden in Tortoise Git alle Dateien als bearbeitet aufgelistet. Allerding ist dabei die Anzahl Zeilen die dazugekommen bzw. entfernt wurden jeweils 0. Die Lösung ist einfach: (Forum-Eintrag siehe hier: https://superuser.com/questions/138669/why-is-tortoise-git-changing-my-file-permissions)

$ git config core.filemode false

Geschrieben in default | Kommentare deaktiviert für Zugriffsrechte in Tortoise Git ignorieren

Ich bin TCCD

Vor Weihnachten habe ich noch schnell die Prüfung zum TYPO3 CMS Certified Developer abgelegt und bin damit (wieder) zertifiziert.

TCCD Developer Listing

Geschrieben in default | Kommentare deaktiviert für Ich bin TCCD

Weiterleitung auf mit www und https

Meiner Meinung nach war das die beste Lösung für eine Weiterleitung von ohne www auf mit www. Gefunden bei Stackoverflow.

RewriteCond %{HTTP_HOST} !^www\..+$ [NC]
RewriteRule ^ https://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

Es enthält keinen Domain-Namen und kann damit überall eingesetzt werden.

Geschrieben in default | Kommentare deaktiviert für Weiterleitung auf mit www und https

Redirect von URLs mit .html auf /

Vor TYPO3 9 und dem Routing im Core war RealURL sehr gnädig, was URLs anging. So konnte eine Seite mit .html Suffix und auch mit / aufgerufen werden (mein Empfinden). In TYPO3 10 funktioniert diese Verhalten nur in eine Richtung. Konfiguriert man eine .html Endung über den PageSuffix, ist die Seite weiterhin mit Trailing Slash aufrufbar. Es ist eigentltich gut, dass entweder das eine oder das andere geht. Wenn sie jemand die URL mit .html Endung gebookmarked hat und dann statt der Seite 404 bekommt, ist es ärgerlich.

Dank dieses sehr guten Beitrags auf stackoverflow hier mein Redirect-Schnipsel für die htaccess-Datei.

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)\.html$ /$1/ [L,R=302]

Als Tipp stand in dem Beitrag, dass man während des Testings den Fehlercode 302 verwenden sollte (found) und erst wenn es final ist, dann 301, weil dieser vom Browser gecached wird.

Geschrieben in default | Kommentare deaktiviert für Redirect von URLs mit .html auf /

Sport

Dieser Blogbeitrag beschäftigt sich mit meiner zweiten Leidenschaft neben TYPO3 – dem Sport. Ich beschreibe meine Sport-Karriere und wie sich das ganze im letzten Jahr pandemie-geschuldet verändert hat.

(mehr …)

Geschrieben in default | Kommentare deaktiviert für Sport

Ddev, neues Modem (FritzBox) und DNS_PROBE_FINISHED_NXDOMAIN

Ich habe mir ein neues Modem (konkret eine FritzBox) zugelegt. Auf den ersten Blick schien alles so zu funktionieren wie vorher. Heute ist Montag, Zeit zu arbeiten: ddev gestartet und festgestellt, dass meine .ddev.site Domain mit der Meldung DNS_PROBE_FINISHED_NXDOMAIN nicht angezeigt wird. Beim ddev start gab es keine Fehlermeldungen, die Datenbank ist da und auf die Seite kann ich mit einer IP-Adresse zugreifen. Damit bleibt nur noch die Vermutung, dass die DNS-Auflösung die Ursache ist.

Nachdem ich die ddev-Troubleshooting-Seite und ein paar Foren durchsucht habe, stieß ich auf den entscheidenden Hinweis.

Die FritzBox hat ein Feature, das DNS-Antworten unterdrückt, die aufs eigene Netzwerk verweisen (DNS-Rebind-Schutz). Man muss die ddev.site dort unter Ausnahmen eintragen, damit die DNS-Auflösung funktioniert. Diese Option findet man unter Heimnetz > Netzwerk > Netzwerkeinstellungen.

FritzBox Einstellungen

Unable to load dynamic library ‚memcached.so‘

Ich habe lokal unter Windows 10 ddev mit Ubuntu 20.04. aufgesetzt. Nach dem Login per SSH (ddev ssh) und dem Ausführen fast jeden Befehls (composer dump-autoload) kam die folgende Warnung:

PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib/php/20190902/redis.so' (tried: /usr/lib/php/20190902/redis.so (/usr/lib/php/20190902/redis.so: undefined symbol: igbinary_serialize), /usr/lib/php/20190902//usr/lib/php/20190902/redis.so.so (/usr/lib/php/20190902//usr/lib/php/20190902/redis.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0
PHP Warning: PHP Startup: Unable to load dynamic library 'memcached.so' (tried: /usr/lib/php/20190902/memcached.so (/usr/lib/php/20190902/memcached.so: undefined symbol: igbinary_serialize), /usr/lib/php/20190902/memcached.so.so (/usr/lib/php/20190902/memcached.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0

Erstmal hatte ich mich auf den „Unable to load“ block fokussiert. Sind die Dateien da? – ja. Ist der Pfad richtig? – ja. Ist das Modul installiert? – ja. Es gab viele „Lösungsvorschläge“ im Netz. Und es ist so unglaublich frustrierend, wenn das Problem als gelöst gilt („That solved it, thanks“) und es bei mir immer noch da ist. Ich habe sogar den ddev Installationsvorgang fast komplett neu gemacht. Immer noch die gleiche blöde Warnung, die mir die Konsole zumüllt.

Dann habe ich eher auf den zweiten Teil der Meldung geschaut und danach gesucht: „undefined symbol: igbinary_serialize“.

Lösung: Die aktuellere Version von redis (wohl auch memcached) setzt voraus, dass die Bibiothek igbinary bereits geladen ist. An einer Stelle stand, dass es theoretisch der Fall sein müsste, denn die Bibliotheken werden alphabetisch geladen und i kommt wohl vor r. Wenn man im Ordner .ddev/php eine Konfigurationsdatei ablegt, dann wird diese beim Starten des Containers geladen. Um das igbinary vor den anderen Bibliotheken zu laden, reicht es aus, wenn man eine leere Datei namens 10-igbinary.ini in diesem Ordner ablegt. Da alle anderen Biblitheken eine 20 als Priorität haben, wird die Datei mit 10- früher berücksichtigt.

Vielleicht ist ja jemand irgendwann genauso verzweifelt wie ich und diese „Lösung“ hilft ihm/ihr. Lasst es mich wissen…

Tags:

Geschrieben in default | Kommentare deaktiviert für Unable to load dynamic library ‚memcached.so‘