Linksammlung 07/2025
Diese Woche fand ich besonders erwähnenswert:
Scala 3 Migration: Report from the Field. Ich fand schon die verschiedenen Flutterversionssprünge ernüchternd, aber die Scalabrüche sind schlimmer.
Nicht aktuell aus der Woche, sondern ein Fundstück: Performant Images on the Web ist ein überraschend kompletter Zusammenschrieb des aktuellen Stands des Umgangs mit Bildern im Web.
Wetter Online schränkt Weitergabe von Nutzerdaten ein, nachdem vorher laut einer Recherche komplette Bewegungsprofile der Nutzer verkauft wurden. Ein gutes Beispiel, warum man unter Android nur Anwendungen via F-Droid und nicht aus dem Playstore installieren sollte.
Union warnt gemeinnützige Vereine vor "Stimmungsmache" gegen Merz, da offenbart sich mal wieder der autoritäre Zug der konservativen Partei.
Passend zu solchem Denken das Vorgehen der Polizei gegen den Demonstrationsbus Adenauer des Zentrums für politische Schönheit, dokumentiert in einem Thread der so beginnt: Wir haben die Schikanen der Polizei Berlin der letzten Wochen nicht an die große Glocke gehängt. Beschrieben wird rechtsbeugende Polizeiwillkür, derzufolge unbedingt die Demonstrationsteilnahme verhindert werden sollte.
Lazyoutube 1.1.0: Leichtere Youtube-Embeds nun per Spartacus und mit Vorschaubild-Proxy
Die neue Version des Lazyoutube-Plugins ist inzwischen auf Spartacus gelandet. Die Grundidee ist immer noch die gleiche: Eingebundene Youtubevideos werden mit einer angepassten Variante ersetzt, sodass erst nach einem Klick auf das Vorschaubild der Videoplayer geladen wird. Dadurch laden Seiten mit eingebundenen Videos viel schneller und Youtube kriegt nicht mehr automatisch Daten über die Blogbesucher zugespielt.
Die Version, die jetzt von einem Github-Repository nach Spartacus gewandert ist, verbessert diese Datenschutzidee noch weiter. Nun wird (optional) auch das Vorschaubild von Serendipity bezogen, als Proxy zwischen dem Browser und dem Youtubeserver. So kriegt Youtube dann gar nichts mehr von Blogbesuchern mit, die mit den Videos nicht interagieren.
Als Beispiel:
Das hier eingebundene Video wurde als Bild geladen, aber im Netzwerkinspektor sieht man, dass es von diesem Server zum Browser kam:
Außerdem hat das Plugin einen Redirect zum gespeicherten Bild eingerichtet. Das ist Teil der Sicherungsmaßnahmen, zu denen gehört:
- Das Plugin vermeidet parallele Abfragen, damit Youtube nicht auf den Gedanken kommt den Server zu blocken.
- Es können nur Thumbnails von Videos angefragt werden, die auch in Blogbeiträgen vorkommen. Das vermeidet, dass die Funktion als ein Art offener Redirect Schaden anrichten kann.
- Und schließlich werden die Bilder lokal gespeichert, daher nur einmal heruntergeladen.
Sollte der Proxy trotzdem mal nicht funktionieren kann er in den Pluginoptionen deaktiviert werden. In meinem Blog schien es aber bisher zu passen.
The Night Agent, Staffel 2: Eine schwächere Fortführung
Die zweite Staffel von Netflix Agentenaction setzt kurz nach der ersten an. Peter hat bei Night Action angefangen, doch eine Mission im Ausland geht schief. Einen Verräter in den eigenen Reihen vermutend taucht er unter und kehrt in die USA zurück, wo dann auch Rose in die Suche eingebunden wird.
Kontaktprobleme
Die so startende zweite Staffel konnte mir den Reiz der ersten nicht richtig einfangen. Ich hatte bei kaum einer Folge wieder das Bedürfnis, direkt die nächste sehen zu wollen, weil ich sie so spannend und die gradlinige Actionmachart so angenehm gefunden hätte. Dabei sind auf dem Papier einige der Stärken erhalten: Luciane Buchanan und Gabriel Basso spielen die gleichen sympathischen Rollen und die Actionszenen sind wieder wunderbar unzerschnitten, bei denen mir auch keinmal die Nutzung von Stuntmännern auffiel, gerade Basso hat wohl wieder viel (oder alles?) selbstgemacht.

Aber ich störte mich an der Story. Statt der simplen Spannung einer sich zur Verschwörung erweiternden Hetzjagd auf Rose bleibt die große Bedrohung diesmal unpersönlich. Stattdessen gibt es eine angetackerte Handlung in der iranischen Botschaft. Für sich nicht schlecht, ging das nicht gut zusammen. Der nochmal separate Plan der Oberbösen ist dabei so lächerlich absurd böse, dass es mich richtig rausriss.
Wenig gelungen fand ich auch das hin und her bei der Beziehung von Rose und Peter. Das war in der ersten Staffel noch okay, aber es nun zu wiederholen wirkt kindisch, wie dieses Klischee der unüberwindbaren Barrieren zwischen zwei doch angeblich verliebten Hauptdarstellern in Serien generell kindisch und überholt ist. Ohne Rose würde die Serie nicht funktionieren, so zu tun als stünde ihre Rolle zur Disposition ist völlig daneben. Außerdem wurde in solchen Szenen sehr deutlich, wie wenig Reichweite Basso beim Schauspielern hat. Also doppelt und dreifach keine gute Idee.
Diese überraschende Stilunsicherheit empfand ich auch bei drei Aspekten der Story, aber für die muss ich relevante Teile der Handlung verraten:Spoiler:
Zuerst, dass die chemischen Waffen von den USA natürlich nur zur Entwicklung von Impfstoffen fabriziert wurden, wie mehrfach betont wird. Als musste das unbedingt so gedreht werden, weil die USA auf keinen Fall in keinem zu negativen Licht dargestellt werden dürfe. Wie absurd bei einem Staat, der so viele Kriegsverbrechen begangen hat und gerade auch bei chemischen Waffen befleckt ist, man denke nur an den Einsatz von Napalm und Agent Orange in Vietnam.Eher angelehnt an die Konstruktionsprobleme der Story fand ich es auch daneben, erst relativ viel Zeit auf den Hintergrund des Sohn des Oberbösen zu investieren, aber ihn dann umzubringen. Okay, sein Tod war so etwas gewichtiger, aber seine Rolle blieb dadurch ansonsten belanglos. Und es verstärkte die oben erwähnte absurde Boshaftigkeit der Terroristen, die ich spätestens dann nicht mehr ernstnehmen konnte.
Und schließlich (und tatsächlich am Ende) richtig unglücklich angesichts der Ausrichtung der Serie empfand ich die Zeitprobleme im Finale. Wenn angeblich nur acht Minuten bis zu einem großen Unglück verbleiben, die Protagonisten aber noch allerlei Dinge erledigen und dabei zwischen Stockwerken hin- und herwechseln, ist das eine herbe Macke in der Kerndisziplin der Serie – der guten Inszenierung der Actionszenen, wozu ich solche Momente eben auch zählen würde. Denn spannend inszenierte Zeitlimits sind notwendigerweise glaubwürdig, nicht offensichtlich hanebüchen.
Vielleicht beschreibe ich die Staffel gerade zu negativ. Es gibt wesentlich schlechtere Serien. Schon die Inszenierung der Actionszenen macht auch die zweite Staffel von Night Agent sehenswert. Aber das ist eben das Problem, wenn der Auftakt einer Serie so unerwartet gelungen ist: Später sind die Erwartungen höher. Und die wurden hier meiner Meinung nach unterboten, weil die Serie nicht stärker, sondern schwächer wurde.
Man beachte aber, dass beispielsweise die Bewertungen auf IMDB laut ratinggraph die zweite Staffel positiver als ich und kaum schlechter als die erste einschätzen. Auch die Kritikerwertung bei Rotten Tomatoes widerspricht meiner Einschätzung, wobei die Nutzerwertung in meiner Richtung geht. Benedikts Besprechung im Nachbarblog liest sich ebenfalls wesentlich positiver als meine. Meine Kritikpunkte werden also nicht allgemein geteilt.
Linksammlung 06/2025
Diese Woche fand ich besonders erwähnenswert:
Software development topics I've changed my mind on after 10 years in the industry. Fokussiert sich auf einen anderen Umgang mit Komplexität, so lese ich das zumindest, und sehe ich ähnlich.
Super: F-Droid Awarded Open Technology Fund’s FOSS Sustainability Grant. F-Droid ist unheimlich wichtig und verdient jeden Pfennig.
AI Is Spamming Open Source Repos With Fake Issues, solche Blockaden der FOSS-Entwicklerarbeit ist ziemlich furchtbar. Und es scheint an einzelnen schlechten Akteuren zu hängen, an unklaren Tutorials für übermächtige, unverstandene KI-Tools.
I bought a container full of Chinese electric excavators. Here’s what showed up. Ein anschauliches Beispiel dafür, wie sich die Elektrifizierung von Fahrzeugen in der näheren Zukunft auswirken wird. Oder auch: China ist da ein paar Jahre voraus.
Bedauerlich wäre Hardliner Habeck im Law-and-Order-Strudel. Also, wenn der Kommentar zutrifft. Ich hoffe, dass er die Äußerungen Habecks übertreibt und schärfer interpretiert, als sie gemeint waren.
Gerade angesichts der Bedrohungslage, die Wir veröffentlichen das 1.000-seitige Verfassungsschutz-Gutachten zur AfD nochmal deutlich macht.
Socialplugin 1.0: Die Variante ohne Shariff, oder neue Sharebuttons für Serendipity
Das Serendipityplugin, das unter Blogbeiträge Buttons zum Teilen in sozialen Netzwerken einbindet, hat von mir ein umfangreiches Update bekommen. Bisher stammten die Buttons vom Shariff-Projekt des Heiseverlags, jetzt sind es vom Plugin erstellte und einfachere HTML-Buttons. Außerdem habe ich die Liste an unterstützten Diensten angepasst, Mastodon, Bluesky und Pocket aufgenommen; abgeschaltete Dienste wie flattr und addThis entfernt. Dazu kommen ein paar Änderungen am Design, denn im Zuge der Umstellung musste das neu gebaut werden.
Vereinfachung als Ziel
Der Wechsel soll mir und uns zukünftig die Wartungsarbeit am Plugin vereinfachen. Es ist nun ein leichtes, neue Buttons aufzunehmen oder bestehende anzupassen. Gerade die Aufnahme von Mastodon war mir wichtig. Zudem brauche ich nun kein Shariff-Backend mehr auf meinem Server laufen zu lassen, das die Zähler der Buttons mit Werten versorgte, was nicht so unaufwändig war wie ich gehofft hatte. Und die Buttons brauchen kein Javascript mehr, was ich auch positiv sehe.
Aber eigentlich hatte der Wechsel drei Gründe:
- Seit dem Start von Shariff haben sich die sozialen Netzwerke immer weiter abgeschottet. Das macht den großen Vorteil von Shariff kaputt – neben der Datensparsamkeit, wenn nicht mit den Buttons interagiert wird, was HTML-Buttons allerdings teilen –, in einem Zähler beim Button anzuzeigen, wie oft ein Artikel geteilt wurde. Denn dieser Wert ist oft nicht mehr verfügbar. Mir erschien Shariff dadurch unnötig.
- Das Shariffprojekt wurde in letzter Zeit wenig gepflegt. So sah das PHP-Backend seit zwei Jahren keine Updates mehr, was bezüglich der Kompatibilität mit PHP 8.3 besorgniserregend ist. Der Javascriptcode der Shariffbuttons ist für heute zu verkompliziert, völlig unnötigerweise wird mit less und Nodemodulen eine Buildpipeline erzwungen, dabei wäre das ganze recht einfach ohne baubar (was ich in Teilen auch umgesetzt hatte). Entsprechend bleiben Pullrequests liegen. Die von mir geprüften Heiseseiten nutzen Shariff auch nicht mehr selbst. Mir erschien es daher wahrscheinlich, dass auf kurz oder lang ein Wechsel sowieso nötig werden würde, wenn das Projekt ganz aufgegeben wird.
- In meinem Blog möchte ich aufgrund der politischen Entwicklung keine Buttons mehr für Facebook und X einbinden, aber dem Plugin fehlten Alternativen wie Mastodon und Bluesky. Die wollte ich einfach einbauen können, was jetzt ging.
Wichtig: Ich möchte Shariff nicht abwerten. Es hat mir viele Jahre gute Dienste geleistet und war damals bahnbrechend als Demonstration, dass diese Buttons samt Zählern auch datensparsam umgesetzt werden können. Aber wenn wir darauf nun aufbauen und dabei einen Vorteil von Serendipity nutzen können, nämlich ohne Javascript solche Buttons auf Serverseite zusammensetzen zu können, ist der Wechsel bestimmt positiv.
Weitere Änderungen
In der neuen Version hat sich auch manches Design der Buttons geändert. Zum einen, weil die Icons nun SVGs und neue Versionen sind. Außerdem durch eine Anpassung der Farben, wo es sinnvoll erschien. Es gibt aber wieder die drei Farbschema: bunt, weiß und grau. Zusätzlich aber ist die Option (die Shariff schon hatte, die das Plugin aber nicht anbot) verfügbar, die Buttons zu Rechtecken ohne Text zu verkleinern. Das wird in manchen Designs bestimmt super aussehen.
Für Mastodon und Bluesky gibt es nun auch eine Option, wie zuvor schon für X, dem vorgeschlagenem Text einen Nutzernamen anzuhängen. So werden auch dort zumindest manche geteilte Artikel sichtbar, obwohl diese Dienste keinen Zähler für geteilte Links liefern (und das Plugin derzeit die generell nicht mehr anzeigt).
In Zukunft könnte man auch nochmal die Buttons angehen: Ist es z.B. sinnvoll, dass die ein Verb wie "Teilen" anzeigen, oder wäre der Name des Dienstes sinnvoller? Ich wusste es nicht und habe mich letztendlich an Shariff als Vorlage orientiert. Nehme da aber gerne Meinungen zu entgegen.
Vor serendipity_event_social war es das nun seit 9 Jahren archivierte serendipity_event_findmore, das solche Buttons bereitstellte. Und interessanterweise funktionierte das schon damals fast genau so wie das Social-Plugin in der neuen Version. Eine ziemliche Bestätigung der Originalautoren, finde ich. Wobei die Umstellung jetzt die Zusatzfunktionen des Plugins nicht eingeschränkt hat, nämlich die Ausgabe von Open-Graph-Tags für eine bessere Anzeige von geteilten Artikel und die Möglichkeit, ein Beitragsbild auszuwählen (wobei ansonsten das erste Artikelbild automatisch für die Vorschauen vorbereitet wird). Wir sind also nicht ganz zurück in die Vergangenheit gereist.
Ich hoffe die neue Version des Plugins gefällt. Sie müsste seit heute in Spartacus verfügbar sein. Sollte es nach dem Update mit den Buttons Probleme geben meldet euch.
Temi Oh: More Perfect
Mit More Perfect hat Temi Oh einen Cyberpunkroman geschrieben. Ich mochte schon ihr vorheriges Do You Dream of Terra-Two?, was statt Cyberpunk Science-Fiction war. Aber den besonderen und zum neuen Genre passenden Dreh hatte, die Musk'sche Zukunftsvision der bemannten Weltraummissionen als Dystopie zu entlarven.
Das läuft im Prinzip so ähnlich auch in More Perfect, es wirkt nur zuerst wieder alles genretypisch. So will zu Beginn die Londoner Schülerin und spätere Tänzerin Moremi ein Implantat eingesetzt bekommen, den Puls, um mit allen anderen Implantatträgern in einem Cyberspace verbunden zu sein – das ist klar angelehnt an die Augmented Reality, wie sie von Google und Meta auch in echt beworben wurde. Dem gegenüber steht Orpheus, der abseits aller Technik aufgezogen wird. Natürlich kollidieren diese beiden Schicksale, aber wie das kollidiert läuft etwas anders ab als erwartet.
Ich fand es dabei beeindruckend, wie auch gerade die utopischen Elemente des Genres aufgegriffen werden und sie noch einen Hauch ihrer Faszination behalten. Aber sie werden ansonsten von Oh als so negativ dargestellt, wie sie in unserer Realität wohl auch ablaufen würden. Ein frühes Beispiel: Moremis Implantat beeinflusst durch die vielen Eindrücke stark ihr Denken und ihre Wahrnehmung der Welt, aber ganz früh wird klar, dass das mit ihren bestehenden psychischen Problemen kollidieren wird. Auf der ersten Ebene ist das nur die Social-Media-Debatte unserer Zeit, andererseits ist es eine weitergehende ernsthafte Analyse davon, was die Weiterentwicklung zum (teils utopisch gesehenen) Cyberimplantat mit unseren Köpfen anstellen würde.
Und diese Umdrehung habe ich abseits Ohs erstem Roman so noch nicht gesehen. Man spürt dabei diesmal auch deutlicher eine von der derzeitigen Politik geformte Perspektive, ob das nun Trump oder Brexit ist, und damit, dass dieses Cyberpunkbuch in der jetzigen Zeit geschrieben wurde. Da Cyberpunk für mich sonst eher aus dem letzten Jahrhundert stammt empfand ich das als reizvoll.
Dazu kommt noch ein bisschen Fantastik (wie Otherland oder Inception) und eine über das Genre hinausgehende emotionale Geschichte. Dabei verblüffte mich die Schilderung im Nachwort, dass die Autorin frisch verheiratet war – das geht für mich schwer damit zusammen, welche Gedanken mit einer Figur wie Moremi scheinbar verarbeitet wurden. Das macht den Roman nicht schlechter, nur nochmal ungewöhnlicher.
Insgesamt gefiel mir More Perfect also durchaus. Ich will aber nicht verschweigen, dass ich das Buch zwischendurch zur Seite gelegt hatte. Er war für mich also nicht durchgängig spannend bzw war die gerade anfangs sehr gewöhnlich wirkende Zukunftsvision nicht direkt einfangend. Auf der technischen Cyberpunkebene war da eben sehr wenig neues; nur dass die Elemente dann in Teilen ungewöhnlich verarbeitet wurden. Es war daher mehr noch als sonst die Ebene der Geschichte neben der Technik, die hier verfangen musste, das Spielen mit den Genrekonventionen hätte mir sonst nicht gereicht.
Linksammlung 05/2025
Diese Woche fand ich besonders erwähnenswert:
The Past, Present, and Future of UI at GitHub, hochgespült letzte Woche, ist bemerkenswert für die Behauptung von mobilen UIs als neuen Standard. Bemerkenswert, weil die konstantierte Erwartungshaltung für ein Entwicklerwerkzeug wie Github immer noch unzutreffend wäre.
Es gab einen tollen Geburtstag, 20 Jahre Shopblogger, der meines Wissens genau so lange mit Serendipity betrieben wird.
The Mythical IO-Bound Rails App argumentiert gegen die verbreitete Grundannahme von Rails- bzw Rubywebanwendungen als dominiert von der Wartezeit auf Datenoperationen. Tatsächlich sei die Prozessorauslastung viel gewichtiger, was die Statistiken aber versteckten.
Hard numbers in the Wayland vs X11 input latency discussion belegt mit Statistiken ein Waylandproblem bei der Latenz von Mauszeigerbewegungen.
The Microsoft 365 Copilot launch was a total disaster. Kann man nicht widersprechen.
Distrowatch sieht einen Facebook ban, der Nutzerberichten zufolge generell Linux als Thema umfasst. Vielleicht geht es nur gegen die Seite, was ja auch nicht okay wäre.
Es gab zwei zusammengehörige News zur lange eingestellten Smartwatch Pebbel, einmal mit See the code that powered the Pebble smartwatches die Offenlegung des Quellcodes durch Google, das führte zweitens zu We're bringing Pebble back! Es sollen neue Modelle mit dem befreiten PebbleOS hergestellt werden.
Weniger nett von Google war der Umgang mit Besitzern des Pixel 4a, denn Google Pixel 4a's old firmware is gone, trapping users on the buggy battery update. Interessant dazu auch die Spekulationen, allerdings überzeugend argumentiert am Updateinhalt, was Google mit dem Update erreichen wollte.
DivestOS eingestellt! Alternativen für Nutzer
Die alternative Androiddistribution DivestOS gibt es nicht mehr. Die Entwicklung wurde komplett eingestellt, mittlerweile ist sogar die Webseite vom Netz gegangen. Angekündigt hatte der Entwickler diesen Schritt schon letzten Monat in einer News zum zehnjährigen Jubiläum, ich bezweifel aber, dass viele das mitbekommen hatten.
Das war DivestOS
DivestOS hatte als sogenanntes Custom-ROM einige Alleinstellungsmerkmale. So kam es mit Anwendungen, die extra für das System entworfen worden waren – darunter der Browser Mull, der auch abseits DivestOS genutzt werden konnte und etwas Bekanntheit erlangt hatte. Das Betriebssystem galt als datenschutzfreundlich, wobei gerade das Entfernen unnötiger proprietärer Blobs meines Wissens ein Alleinstellungsmerkmal war. Zudem wurden erstaunlich viele Telefone unterstützt, darunter auch ältere, die bei der Vorlage LineageOS schon lange aus dem Raster gefallen waren. Kein Wunder, dass das alles im Test bei GNU/Linux.ch trotz der unten zu sehenden schmalen Startkonfiguration gut abschnitt.
Oder, um die Webseite des Projekts selbst sprechen zu lassen: Ein hochgradig angepasster Fork von LineageOS mit monatlichen Sicherheitsupdates, automatisch gepatchte Kernel, Wiederverschließen des Bootloaders möglich, gehärtete Systemwebview (der interne Browser für Apps), integrierter Trackerblocker, datenschutzfreundlicher Browser (Mull); mit einem Fokus auf FOSS, Entfernung von proprietären Blobs und vorinstalliertem F-Droid. Ein Robocall-Blocker, ein Tool zum restlosen Entfernen gelöschter Dateien sowie ein Malwarescanner wurden als Extras präsentiert.
Warum der Entwickler genau jetzt aufgehört hat ist unklar. Ein Hinweis ist eben das "der Entwickler": DivestOS war ein Einzelprojekt, soweit ich das mitbekommen habe hatte sich nie ein Team gebildet. Das erklärt den erreichten Erfolg, ein einzelner fähiger Entwickler ohne Abstimmungsbedarf kann viel erreichen. Doch damit war nie jemand da, der die Entwicklung weiterführen könnte. Nach zehn Jahren kann dann schonmal die Energie ausgehen. In einem Thread zur Abschaltung auf Techlore werden letztjährige Geldprobleme erwähnt, andererseits war eine damalige Geldsammelaktion wohl erfolgreich. Er selbst schrieb, frei übersetzt:
Ich habe ein Jahrzehnt an diesem Projekt gearbeitet. Das ist eine lange Zeit und ich brauche einen Neuanfang.
Das kann jeder Entwickler mit langjährigen Projekten wahrscheinlich nachfühlen.
Die Alternativen
Doch bei allem Verständnis für den Einzelentwickler, wer sich von den guten Besprechungen überzeugen ließ steht jetzt leider im Regen. Anwender sollten möglichst schnell zu einem anderen System wechseln. Nicht nur, weil es keine weiteren Sicherheitsupdates geben wird, sondern auch wegen der an der Webseite zu sehenden Abschaltung der Infrastruktur. Die wirkt nämlich sehr überhastet. Da würde es nur zu gut ins Bild passen, dass beispielsweise die Domain ausläuft, über die bisher Updates verteilt wurden. Vielleicht ist das alles auf Clientseite gut genug abgesichert, verlassen wollte ich mich darauf nicht.
Update 02.02.2025: Wie Julian in den Kommentaren erwähnt (Danke!) gibt es mit AXP.OS ein auf DivestOS basierendes Custom-ROM, das die Ansätze von DivestOS fortführen könnte. Bleibt das Projekt nach diesem Umbruch wirklich aktiv wäre das eine weitere Option.
Die Alternativen sind:
- CalyxOS, ein ebenfalls auf Datenschutz und mehr noch auf Sicherheit bedachtes und sehr komfortables Androidsystem, das aber leider nur sehr wenige Smartphones unterstützt.
- iodéOS, eine nochmal Datenschutz versprechende Option aus Frankreich. Auch hier ist die Geräteauswahl begrenzt, aber die längere Unterstützung der Geräte ein erklärtes Ziel. Anders als Calyx hat iode mehr Apps für die Startauswahl ausgewählt.
- /e/, ein lange existierendes ROM, das schon seit Jahren integrierte Alternativen zu den Googleanwendungen (samt Onlinespeicherplatz) anbietet. Unterstützt sehr viele Telefone.
- LineageOS, das große Ursprungsprojekt. Vorteil ist hier auch wieder die Unterstützung vieler Geräte.
CalyxOS, iodéOS und /e/ würde ich LineageOS vorziehen, weil sie wie DivestOS freie Apps wie insbesondere den Appstore F-Droid und microG vorinstallieren und so ein benutzbares Android ausliefern, ohne dass man die proprietären Googledienste nachinstallieren muss. CalyxOS hat dabei den Vorteil, durch ein Verschließen des Bootloaders nach der Installation ein paar Angriffsszenarien auszuschließen – wie DivestOS es auf manchen Telefonen auch konnte. Damit und mit der reduzierten Appauswahl wirkt es auf mich wie die ähnlichste Alternative.
Unterstützt keine der vier Androidvarianten das eigene Gerät bleibt noch der Blick in das XDA-Forum, wo Entwickler oft handgebaute ROMs oder inoffizielle Varianten von LineageOS hochladen. Da setzt man dann aber sehr viel Vertrauen in völlig unbekannte, die Sicherheit des angebotenen ist meist unkontrollierbar. Das Wechseln auf ein moderneres, am besten von CalyxOS unterstützte Telefon würde ich eher empfehlen.
So oder so, meine Webseite sustaphones zeigt die Auswahl an unterstützten Geräten dieser vier ROMs und könnte daher die Suche nach den Optionen für das vorhandene Telefon oder die Suche nach einem neuen Telefon vereinfachen.
Das Ende von DivestOS ist ausgesprochen bedauerlich. Nicht nur für die bisherigen Nutzer, sondern auch alle anderen Interessierten steht nun eine attraktive Option weniger zur Verfügung, in einem sowieso sehr kleinem Feld an Androiddistributionen. Dabei war das Konzept auch einfach gut, für alte Geräte die bestmögliche Androidalternative zu stellen, ohne die Schwächen von einem System ohne Herstellersupport für die proprietären Bestandteile zu verschweigen. Das machte das Netz viel breiter als bei CalyxOS, war innovativer als das etwas gemächliche /e/ bei Dingen wie dem Wiederverschließen des Bootloaders, und schuf Abstand zum als Grundlage genutzten LineageOS durch die (wenigen, aber immerhin) mitgelieferten freien Softwareanwendungen.
Zudem war der Entwickler im direkten Kontakt mit mir, damals zur Einbindung des ROMs in sustaphones, freundlich und hilfsbereit. Es ist gerade im Bereich der Androidvarianten keineswegs eine Selbstverständlichkeit, dass Entwickler überhaupt mit anderen kommunizieren und noch weniger, dass sie sich dabei Mühe geben. So jemand wird fehlen. Es ist daher sehr schade, dass hier keine Strukturen gegriffen haben um das Engagements dieses Entwicklers zu bewahren – vor allem, wenn es nur um Geld ging hätte das lösbar sein sollen.
Trotzdem muss ich die kurze Warnzeit vor der Abschaltung kritisieren. Den Nutzern wurde zu wenig Zeit für einen Umstieg auf eine Alternative gegeben. Klar, Telefone mit DivestOS implodieren jetzt nicht plötzlich. Aber gerade wer kein Sicherheitsupdate verpassen will dürfte nun Stress haben. Da ist es nur gut, dass DivestOS meiner Wahrnehmung nach noch nicht allzu populär geworden war.
Warum Pullrequests nicht immer der passende Entwicklungsmodus sind
Eine von mir lange gehaltene Überzeugung, die ich hier endlich aufschreiben werde: Manchmal profitieren Softwareprojekte davon, wenn die Entwicklungsarbeit nicht per Pullrequests eingesendet wird, sondern wenn die Entwickler direkt den Masterbranch ändern. Es erleichtert das Testen und ermächtigt Entwickler.
Erklärungen vorab
Programmierern dürfte der Großteil in diesem Abschnitt klar sein, aber um so viele mitzunehmen wie möglich und Missverständnisse zu vermeiden:
Bei der Arbeit an Software wird inzwischen fast immer Git als Versionsverwaltung eingesetzt. Im üblichen und meiner Erfahrung nach von Firmen ausschließlich genutzten Nutzungsmodus erstellen Entwickler für ihre Aufgaben immer neue Kopien als Grundlage für ihre Änderungen (Branches, dann Featurebranches genannt), die sie dann als Pullrequest an das Projekt schicken. Ein anderer Entwickler prüft die Änderungen in einem mehr oder weniger ausgiebigen Codereview, danach werden sie dem gemeinsamen Entwicklungsbranch hinzugefügt. Wenn zwischendurch andere Codestellen verändert wurden kann oft genug Git die Änderungen zusammenbringen, gibt es aber einen direkten Konflikt müssen die Entwickler diesen manuell auflösen (und entsprechend testen). Diese Nutzungsweise gibt es in mehreren Varianten, eine davon wird Gitflow genannt, nutzt permanent mehrere Branches (mindestens master und dev) und war lange ziemlich populär.
Beim kürzlich wiederaufgekommenen Trunk-based development – vom Namen her ein Verweis auf Entwicklungsweisen vor Git, so war Trunk der Name für den Hauptbranch beim alten Versionsverwaltungssystem CVS – entfallen laut der verlinkten Definition die mehreren Branches, alles liefe schnell im Master zusammen. Aber es gäbe so wie sich das dort liest immer noch die PRs. Laut anderen Definitionen entfallen die ganz, senden Entwickler ihre Änderungen direkt in den gemeinsamen Masterbranch. Und dann sind wir bei meinem Thema.
Vorteile davon, ohne PRs zu arbeiten
Es sind dabei vor allem zwei Punkte, die ich beim direkten Ändern des Masterbranches positiv sehe.
Und zwar primär (und nur tautologisch klingend), dass Änderungen direkt im Masterbranch landen. Das macht sie sichtbarer: Denn anstatt in einem eigenen Branch auf Reviewer und Tester zu warten, wird in manchen Projekten der neue Code im Masterbranch viel eher wahrgenommen. Nämlich immer dann, wenn einzelne Nutzer nicht auf Releases warten, sondern den Code direkt nutzen. Das machen zum Beispiel bei Serendipity ein paar Nutzer mit ihren Blogs. Die akademische Literatur zu FOSS würde sie als Nutzerchampions bezeichnen: Als Nutzer, deren Engagement über das normale Maß hinausgeht und die so die Entwicklung beeinflussen, ohne notwendigerweise selbst Code zu schreiben. Der Masterbranch (aber eben nur der) wird durch sie ausgiebig getestet und Probleme an die Entwickler gemeldet.
Genauso stolpern auch andere Entwickler direkt über den neuen Code, wenn er direkt im Master landet. Es besteht kaum mehr die Gefahr, dass Arbeit gedoppelt wird oder zwei Entwickler in ihren eigenen Branches inkompatible Systeme bauen. Auch Mergekonflikte werden seltener.
Dieser Vorteil wird nochmal wichtiger, wenn PRs lange liegenbleiben können. Wieder Serendipity als Beispiel, das jQuery-Upgrade wäre garantiert nicht fünf Jahre liegengeblieben wenn sein Ansatz schnell im Master gelandet wäre. Wir hätten so bemerkt, dass die gröbsten vermeintlichen Inkompatibilitäten gar nicht an der Javascriptseite hingen (zumindest ist das mein derzeitiger Stand). Das ist übrigens kein Problem nur mit freien Projekten, auch in Firmen mit proprietärer Software habe ich mehrfach erlebt, dass PRs lange liegenbleiben und teils sogar verrotten, also am Ende nicht mehr gebraucht werden konnten weil sich um sie herum zu viel geändert hatte.
Zweitens ist das direkte Ändernkönnen des Masterbranches eine Ermächtigung des Entwicklers. Es bedeutet, dass das Projekt zumindest soweit auch ihm gehört, dass er nicht jede Änderung von anderen absegnen lassen muss. Wenn mal etwas nicht passt, kann das später immer noch geändert werden – bei einer vertrauensvollen Zusammenarbeit eines fähigen Teams ist das auch für niemanden ein Problem. Mit PRs als notwendigen Zwischenschritt ist stattdessen immer die Zustimmung eines Reviewers notwendig (wobei diese Anforderung formell oder informell sein kann), der einzelne Entwickler daher immer sehr viel abhängiger von anderen. Keine gute Voraussetzung, um sich als (Mit-)Entscheider zu fühlen.
Diese Abhängigkeit ist natürlich wieder besonders problematisch, wenn PRs liegenbleiben können. Das muss ja – anders als beim Beispiel mit jQuery oben – gar nicht an konstatierten Problemen liegen, sondern in vielen FOSS-Projekten ist es schlicht Zeitmangel. Und selten ist ein eigener PR den anderen genau so wichtig wie einem selbst. Dann wird die Abhängigkeit von den anderen zu einer frustrierenden Blockade der Entwicklungsarbeit.
Tatsächlich würde (und tue) ich mischen
Pragmatisch ist das Mischen von beiden Ansätzen, und ich fahre damit schon eine Weile meiner Wahrnehmung nach ganz gut. Während das komplizierte Branchmanagement von Gitflow generell abzulehnen ist, haben Pullrequests klare Vorteile. Und die kann man auch dann nutzen, wenn man sonst direkt in den Masterbranch pusht: Immer, wenn Änderungen Abstimmungsbedarf haben, macht man dann eben doch einen PR auf. Zum Beispiel wenn die zu nutzende Version der Programmiersprache sich ändert und dafür große Codeänderungen nötig sind. Sowas landet in einem PR, damit die anderen Entwickler draufschauen und bei der Migration helfen können.
Und wenn mal solch ein PR zu lange braucht und das die eigene Motivation zu ersticken droht? Dann drückt man eben selbst auf den Mergebutton, akzeptiert den eigenen PR auf eigene Kappe. Die anderen hatten dann wenigstens eine Chance gehabt, vorher Rückmeldung zu geben. Sollten in den späteren Tests die Änderungen Probleme machen kann man so oder so immer noch entscheiden, ob an ihnen weitergefeilt werden sollte oder ob sie zurückzunehmen sind.
Klar: Wenn ein Entwickler von außerhalb des Projekts Änderungen einsenden will – wie es bei FOSS-Projekten hoffentlich häufig geschieht – dann wird es völlig unabhängig von allen Überlegungen der internen Arbeit ein PR, der zu reviewen ist. Will man auch in dem Szenario trotzdem PRs soweit möglich vermeiden kann man so jemanden ja schnell ins eigene Team einladen, das mit dem direkten Zugriff auf den Masterbranch entwickelt sich dann meist nach etwas Zögern ganz natürlich.
Das ganze ist ein Balanceakt zwischen Qualität und Entwicklungsgeschwindigkeit, Motivation des Einzelnen und Einflussnahmemöglichkeiten der Gruppe. Man kann damit auf die Nase fallen, man kann aber auch schmerzhafte Blockaden lösen und Projekte besser am Laufen halten. Wichtig ist bei solchen Freiheiten besonders, dass das Entwicklungsteam sich ziemlich vertraut.
Auch ist es wichtig, dass keiner im Team ist, der vor sich hinstümpert und dauernd unlesbaren Code direkt in den Master pusht, am besten noch ohne erkennbare Commitstruktur. Solches Verhalten würde den Ansatz natürlich direkt kaputtmachen und dann braucht es unbedingt die Struktur von PRs und Codereviews, um das Projekt zu schützen. Wobei solche Entwickler dann meiner Erfahrung nach auch mit Codereviews nicht zu bändigen sind, aber das ist ein Thema für sich.
Eure Erfahrungen würden mich interessieren: Habt ihr selbst schon in Teamprojekten ohne PRs gearbeitet, und hat es gut funktioniert?
Linksammlung 04/2025
Diese Woche fand ich besonders erwähnenswert:
Creation | anyon_e ist der Zusammenschrieb der beeindruckenden Konstruktion eines Open-Source-Laptops.
Erfreulich ist auch A Look Back at 2024: F-Droid's Progress and What’s Coming in 2025. Der freie Appstore für Android scheint gut zu gedeihen.
Moving on from React, a Year Later ist eine weitere Empfehlung für eine Besinnung auf HTML als Grundlage für Webseiten.
Zum Abschluss zwei politische Artikel, zuerst Convicted US Capitol rioter turns down Trump pardon, überraschender Anstand der Aussteigerin.
Und Die Linke und der Nahost-Konflikt: Nun sag, wie hältst du es mit Gaza? Vor allem wegen der traurigen Realität, dass das Zitat „Wir stehen an der Seite des Völkerrechts und der Menschenrechte“ Ausdruck eines Alleinstellungsmerkmals ist.
Bondkommentar: Das Schlusswort zu allen Filmen
Alle Bondfilme sind hier kommentiert, viele eingeordnet und auf meine Art bewertet worden. Es ist Zeit für ein Fazit.
Was bei mir am Ende überwiegt ist Bewunderung für die Modernisierungsfähigkeit der Filmreihe. Zum einen sind die Bondfilme allen Klischees zum Trotz keineswegs alle auf ein festes Schema runterbrechbar. Ein Bondrezept war bei Connery und Moore zwar immer wieder prägend, aber spätestens nach Moore sind die Filme sehr anders geworden und auch bei den beiden klassischen Bonddarstellern gab es einige Experimente. Zweitens ist die Einbindung der jeweiligen aktuellen Themen beachtenswert. Gerade in den Neunzigern fällt das ins Auge, wie mit dem Wegfall der Sowjetunion als Feindbild umgegangen wird und plötzlich Medien, Überwachung und Energiekrisen (und genau, letzteres gab es vorher schonmal) ein Thema werden. Drittens wie sich die Art von Film unterschied die gemacht wurde, jeder Bondfilm hat auf der filmischen Ebene wenig gemeinsam mit den etwas späteren, die entwickelten sich immer sehr schnell gemäß der sonstigen Entwicklung von Kinofilmen. Viertens natürlich der Umgang mit Frauen: Die Bonds von Sean Connery und Roger Moore waren nicht immer, aber immer wieder chauvinistische Schweine. Aber das änderte sich. George Lazenbys Auftritt war dafür die große Vorankündigung, schaut man sich jetzt Daniel Craigs Bond bzw seinen Umgang mit Frauen an ist da ein himmelweiter Unterschied zu den Anfängen.
Ist Bond noch Bond?
Gerade Craigs Bondreihe, also 2006 bis 2021, war nochmal eine besonders enorme Modernisierung. Leider bestätigte sie völlig die Gefahr darin: Den Wegfall der Charakteristika. Ja, da sind noch M und Q und Moneypenny, aber sie sind nicht viel mehr als die alten Namen, kaum noch die alten Rollen. Ja, es gibt schöne Autos und Frauen und verrückte Bösewichte und Handlung an exotischen Orten. Aber sie werden nicht mehr so präsentiert wie zuvor, und gibt es all das heute nicht in vielen Actionfilmen?
Da Bond jetzt knapp 20 Jahre nie einfach Bond sein durfte sehe ich den Kern der Filmreihe als stark beschädigt. Besonders nach No Time to Die mit seinem harten Ende, und obwohl ich den Film als solchen sehr mochte, und obwohl ich gerade die Modernisierungsfähigkeit der Filmreihe lobte – ich sehe die Zukunft nicht. Es wird ein Riesenakt, sich aus der aktuellen Lage herauszumanövrieren. Vielleicht schafft es ein Ryan Gosling, wenn er bewusst charmant spielt und die alten Filme mehr noch Vorlagen als nur Sortiment für einzelne versteckte Rückbezüge werden. Vielleicht war der Auftritt von Ana de Armas im letzten Bond deswegen so komisch, weil es ein Testballon für sie als Bond war – und vielleicht könnte das sogar funktionieren. Ich mochte auch gerade Naomie Harris als Miss Moneypenny, sie hätte ebenfalls in Bonds Fußstapfen treten können, ist jetzt aber wahrscheinlich zu alt dafür. Aber ansonsten schätze ich die Chancen des nächsten Bonds, die Marke in ihrer Größe zu bewahren, für mich selbst überraschenderweise als gering ein. Gut, ich mag mich täuschen – gibt es doch kaum große Marken für Actionfilme, die nicht Marvel sind (und Marvels Kinofilme liegen im Sterben), es ist daher gut möglich, dass der Inhalt der Filme für den weiteren Erfolg recht egal ist.
Mit den modernen Bonds fallen mir noch zwei Dinge ins Auge. Zum einen sind die Filme seit den Nullerjahren sehr viel zugeknöpfter. Schaut man sich Ana de Armas Kleid in No Time to Die an möchte man mir wahrscheinlich widersprechen. Aber welche Rolle der Agent gegenüber Frauen einnimmt, und ob die auch mal riskante Rollen ausfüllen, die es in den 90ern noch gab – auf der Ebene sind die neuen Bondfilme komplett harmlos. Das vermeidet die negativen Seiten, aber dadurch hat die Actionseite der Bondfilme ein Gegengewicht weniger.
Außerdem ist da die Science-Fiction: Denn genau das ist es, wenn Bondfilme auf einmal über Nanobots reden und Laser ganze Komplexe ausmessen können. Im gleichen Atemzug werden dann besonders doofe moderne Klischees bedient, wie das des allmächtigen magischen Hackers. Klar, die typischen Gadgets waren seltenst realistisch und mit Moonraker gab es schon früh einen ganzen SciFi-Bondfilm. Aber das war eben damals schon Schrott. Der wiederholte Sprung in die Science-Fiction fühlt sich jedes mal sehr unpassend an, die betroffenen Filme entwertete er bisher immer ein ganzes Stück.
Schließlich, ohne es gemessen zu haben: Ich empfand das musikalische Bondmotiv in den Craig-Bonds als unterbenutzt. Während das früher oft die Actionszenen untermalte, war es jetzt seltener da und wenn, dann auch noch meist verkopft eingebunden in orchestrale Hintergrundmusik. Ein großer Gegensatz beispielsweise zu GoldenEye, mit dem industriellen Pochen samt Bondmotiv, das ich direkt hören kann wenn ich daran denke. Eine Alternative dazu wurde auch nicht platziert. So bauten diese Filme musikalisch keinen Wiedererkennungswert auf, der jetzt in der Zukunft entsprechend fehlen könnte.
Die Rangliste
Doch genug der Spekulation. Egal was die Zukunft bringt, die existierenden Filme sind gewaltig. Da nun alle Bonds besprochen wurden sei auch noch kurz meine Rangliste erwähnt, welche der Filme ich am besten fand:
- GoldenEye, mit der perfekten Mischung aus Action und Bondklischees ist er für mich der beste Vertreter der Reihe.
- Casino Royale folgt knapp dahinter. Er kann nicht der beste Bond sein, weil er dafür zu sehr damit bricht wie ein Bondfilm vorher war. Aber es ist für sich ein toller Film.
- Never say Never again, Sean Connery in seinem letzten Auftritt als Bond verkörperte zu gut den klassischen Bond um einen der anderen Filme zu wählen, dazu gab es die tollen anderen Schauspieler.
On Her Majesty's Secret Service gehört aber eigentlich auch auf die Liste mit einem Ehrenplatz, als der alternative und erst verschmähte Bond, der dann doch die Reihe prägte.
Meine empfohlene Nachholreihenfolge
Als Abschluss will ich eine Liste der Bondfilme geben, die ich in dieser Reihenfolge empfehlen würde, wollte ich jemanden in komprimierter Form die Essenz der Bondreihe zeigen. Denn dafür eignet sich alleine die Rangliste oben meiner Meinung nach nicht so gut, die drei besten Vertreter eine Reihe sind ja nicht die drei typischsten.
Starten würde ich stattdessen mit The Man with the Golden Gun. Roger Moore war zwar nicht der erste Bond, aber lieferte mit diesem einen ziemlich kompletten Bondfilm ab. Er hat ein paar campige Elemente, aber ansonsten ein gut funktionierendes Drehbuch und eine recht spannende Handlung, in der damaligen politischen Situation geeerdet, die gleichzeitig das charakteristische Bondrezept voll präsentiert. Und dass der Film gar nicht so toll ist macht ihn eben auch repräsentativ, klar besser waren die anderen alten Bonds ja auch nicht. Es ist sogar die Frauenfeindlichkeit der Vorgänger (bzw Moores Anfangszeit) voll zu sehen, schwer erträglich heute.
Folgen sollte Never say Never again. Der gealterte Sean Connery gibt einen besonders tollen Agenten ab, der sehr gut zeigt, wo der Reiz dieses Charakters überhaupt herrührt. Die Handlung in diesem seinen letzten Auftritt mischt dabei gelungen Elemente aus vorherigen Bondfilmen, die damit auch kennengelernt worden wären. Dazu zeigen Klaus Maria Brandauer und Kim Basinger in Ausnahmerollen, wie fantastisch ein Bond-Bösewicht und ein Bondgirl sein können – sie setzten definitiv den Maßstab für alles folgende.
Danach On Her Majesty's Secret Service. Auch wenn dieser Lazenby-Bond eigentlich älter ist, zeigt er doch eine Alternative zu Bond wie man ihn damals kannte und noch viele Jahre kennen sollte. Das dürfte ohne die Ursprungsversion gesehen zu haben aber kaum verfangen, daher die Platzierung nach je einem Film von Moore und Connery.
Licence to Kill wäre ein zweiter Ausreißer. Timothy Dalton spielte Bond hier bereits sehr anders, bekam aber vor allem eine ganz anderere Art Drehbuch vorgesetzt. Voller persönlicher Motivation und mit viel Action zeigt auch dieser Bondfilm, wie das alte Konzept gelungen durchbrochen werden kann. Etwas, was in diesem Jahrtausends immer wieder versucht wurde, meist vergeblich.
GoldenEye danach wäre das Ende der Ausreißer, stattdessen der essentielle 90er-Bond, mindestens. Fantastische Musikuntermalung, die beeindruckendsten Stunts der Filmreihe; auch ansonsten tolle Actionszenen, Bondgirls und Bösewichte. Pierce Brosnan spielte noch dazu diese Rolle mit einem solchen Charme und gleichzeitig so cool, dass er zumindest in diesem Film null hinter Connery und Moore zurückbleibt. Tatsächlich, sollte ich nur einen einzigen Film wählen, es wäre dieser hier. Nur schade, dass Brosnans Folgefilme dann nie wieder so gut waren.
Und schließen… würde ich mit Casino Royale. Aber es ist eine knappe Entscheidung. No Time to Die ist ebenfalls gelungen und ein guter Schlusspunkt für Bond insgesamt. Aber Casino Royale hat den Vorteil, auch ohne Kenntnis der Vorgängerfilme verständlich zu sein – war es doch der erste Bond mit Daniel Craig und ein Neubeginn bei Null. Dabei zeichnet dieser sehr atypische Bond genau durch diese seine Andersartigkeit, wie mit den Nullerjahren der Charakter bzw der alte Trott gebrochen werden sollte und wie anders mit den Bondklischees umgegangen wurde. Gleichzeitig ist es einfach ein spannender Agentenfilm mit tollen Actionszenen und Schauspielern und steht dabei für eine Filmqualität, die kein andere Serienvertreter rein als Film betrachtet erreichte.
Und damit sind wir am Ende des letzten Artikels dieser Reihe. Zumindest bis ein neuer Bondfilm veröffentlicht wird, vielleicht mache ich dann ein Update. Es war ein besonderes Projekt für diesen Blog, ein Experiment, aber ich zumindest hatte Spaß hierdran. Ich hoffe das ging ein paar von euch genauso.
Mass Effects Scheitern als Vorzeichen des Scheiterns von Bioware
Ein letzter Gedanke zu Mass Effect bzw der Legendary Edition von Mass Effect 3, damit ich das Thema endgültig abhaken kann. Ich glaube, dass man eine rote Linie vom verhunzten Trilogieende zu Biowares derzeitigem Zustand ziehen kann. Wobei diese Linie zeigen würde, dass man die Firma damals völlig falsch wahrnahm.
Wahrnehmung damals und heute
Mit dem ersten Mass Effect hatte Bioware einen Geniestreich gelandet. Ihr Rollenspielkonzept (für damals) filmreif zu inszenieren, es mit einem Shooter zu kombinieren, Entscheidungen und Konsequenzen noch weiter zu betonen und dabei eine einzigartige SciFi-Welt zu zeichnen, in der dann auch noch toll geschriebene Begleiter auftauchten – es war eine allzu verlockende Kombination. Und sie kam von Bioware, was damals als der beste Rollenspielhersteller galt, durch Baldur's Gate 2 und angesichts des gelungenen Sprungs zu 3D mit KotOR. Wenn diese Firma von tiefgreifenden Konsequenzen und einer epischen Trilogie redete, dann glaubte man ihr das. Vor allem, wenn man all die Stärken dieser Spiele sah, die unbestreitbar vorhanden sind. Und genau deswegen war die Enttäuschung so stark, als Mass Effect 3 (und in der Retrospektive auf der Ebene auch Mass Effect 2) diese Versprechungen nicht erfüllen konnte.
Heute schaut man sich diese Spiele an und merkt: Sie müssen von einem völlig überforderten Studio gekommen sein. Denn überall merkt man die Arbeitsvermeidungsmaßnahmen. Besonders in Mass Effect 1 ist das überdeutlich, dem dadurch schwächsten der Spiele, mit all den Recyclinginhalten in den sich dadurch sehr ziehenden Nebenmissionen. Aber auch in den beiden Folgespielen ist es teils erdrückend sichtbar, z.B. bei Kaidan und Ashley: Eine Schlüsselstelle in ME1, als nur einer der beiden überleben kann; in ME2 gibt es dann aber nur eine einzige Rolle für beide – soll heißen, wer überlebt ändert gar nichts. Übel auch, denn der originale Charakter des Überlebenden passt dann eventuell null zum neuen Charakter der Person. Und dann sieht man zusätzlich, wie kurz die Entwicklungszeit dieser Spiele war, liest vom Crunch als Biowares Entwicklungsmethode und plötzlich wird alles klar: Da war kein böser Wille. Es war Unfähigkeit, mit den arg begrenzten vorhandenen Ressourcen etwas wirklich großartiges abzuliefern, obwohl die Grundlage da gewesen wäre.
Ein kaputtes Studio…
Und auch das passt dann: Bei der Diskussion um die Spiele und ihre Linearität wurde in der Spielepresse immer wieder behauptet, Studios könnten keine echten Konsequenzen entwerfen; Inhalte zu bauen die dann nicht alle Spieler sehen sei viel zu aufwändig. Das war in dieser Allgemeinheit erzürnend da kompletter Unsinn – hatte doch mit Baldur's Gate 2 sogar ein Spiel von Bioware viele solcher optionalen Inhalte; zeitgenössisch brillierte Alpha Protocol dank ihnen; die Witcherreihe zeigte ihre Möglichkeit vor, während und nach der Mass-Effect-Trilogie; Baldur's Gate 3 (nicht mehr von Bioware stammend) wäre ein modernes Beispiel für ihre Machbarkeit. Aber offensichtlich konnte das Bioware dieser Zeit es nicht. Von ihnen wird diese Behauptung kommen, für das Studio wird sie wahr gewesen sein. Bioware konnte nicht mehr als absolute Linearität (und immerhin Unterschiede bei initial wichtig wirkenden Details), alles andere war für die Firma nicht zu stemmen.
Denn ein Studio, das trotz höchsten Erwartungen sich nur zwei Jahre für ein riesiges Trilogieende nimmt, ist wahnsinnig, in furchtbarer Not oder unter der Fuchtel des Publishers. Und ein solches Studio hat dann nicht die Fähigkeit und Willensstärke, eine große Trilogie sauber zu Ende zu bringen und wirkliche Konsequenzen in sein Spiel einzubauen. Dazu passt dann auch die Heuchelei, einerseits eine Geschichte um den größten vorstellbaren Genozid zu stricken und davon viel zu zeigen, andererseits (nach Teil 1) vor jeglicher Nacktheit zurückzuschrecken. Auch der Umgang mit den DLCs passt dann: Damals wirkte es wie die absolute Verkommenheit einer doch so gesunden Firma, wichtige Inhalte offensichtlich aus dem Spiel zu nehmen und nur separat gegen Geld abzuliefern. Bioware wie man es damals sah konnte sowas nicht nötig haben. Heute wirkt das anders, muss Bioware so schwach und kaputt gewesen sein und die sich um Spieler kehrenden Entwickler so entmündigt, dass für die Firma ihre Fans dergestalt auszunehmen alternativlos war. Am deutlichsten wird die beispiellose Durchsetzungsschwäche beim enorm selbstschädigenden Verhalten, nur aufgrund einer Vorgabe von Electronics Arts dem kostenlosen DLC für ein besseres Ende offiziell ein Ablaufsdatum zu geben (ohne das je einhalten zu wollen).
…das entsprechend scheiterte
Genau solch ein überfordertes Studio zerbricht dann so, wie wir es später gesehen haben. Und schafft es, mit ihren drei letzten Spielen auf jeweils eigene Art grandios zu scheitern: Bei Mass Effect Andromeda an gravierenden Qualitätsproblemen, die auszumerzen nicht die Zeit gegeben wurde. Bei Anthem an einem völlig falschen Konzept eines Lootershooters plus Crunch als Entwicklungsmethode, ohne auch nur den Hauch früherer Stärken einzubringen, also dem Bilderbuchbeispiel von Publisherdruck. Und bei Dragon Age: Veilguard ist das Scheitern kulturell, beim überzogenen Einbau politischer Korrektheit und der Bioware früher atypischen Verweigerung, in einem Rollenspiel auch mal härter auftreten zu dürfen.
Für mich ändert diese Einschätzung die Dinge. Es ist etwas anderes, ob ein Studio aus Arroganz und Gier ihre Kunden verarscht oder ob überforderte Entwickler schlicht nicht liefern können, was sie versprochen hatten. Dementsprechend werde ich Bioware als Konsequenz der Verbesserungen der Legendary Edition trotz des immer noch ungenügenden Trilogieabschlusses von meiner schwarzen Liste entfernen. Wobei das nicht heißt, dass ich derzeit weitere Spiele des Studios in Zukunft spielen will.
Linksammlung 03/2025
Diese Woche fand ich besonders erwähnenswert:
Sonos CEO Patrick Spence steps down after app update debacle, oder ein bisschen ausführlicher als Sonos CEO Patrick Spence steps down after disastrous app launch. Das Scheitern der App war aber auch wirklich spektakulär. Mit Sonos’ chief product officer is leaving the company gingen die Konsequenzen sogar noch weiter.
Read: Meta's memo to employees rolling back DEI programs. Im ersten Moment könnte man versucht sein das positiv zu lesen, immerhin waren diese Programme mit ihrem Fokus auf Herkunft durchaus eine Art institutionalisierte Diskriminierung. Aber der Zeitpunkt der Abschaffung offenbart, dass es hier vielmehr darum ging, den rassistischen Vorhaben der Trumpisten Platz zu geben. Positiv ist daran dann nichts mehr.
Mehr Wellen schlug die Abschaffung der Faktenprüfung, Meta is ending its fact-checking program in favor of a 'community notes' system similar to X's. Auch hier ist das Kauern vor Trump wieder überdeutlich, Faktenchecks gehen nicht zusammen mit einem faschistischen Führer, der in seiner Alterssenilität keine zwei Sätze ohne eine Lüge herausbringen kann. Wobei, LA wildfires disinformation reveals limits of fact-checking kann durchaus stimmen, die Faktenprüfung war schon vorher zu limitiert. Das rechtfertigte aber nicht ihre Abschaffung.
Wohl eine Reaktion darauf, ein Konkurrent sei "Beispiellos" gewachsen: Facebook sperrt Links zu Instagram-Alternative Pixelfed. Meta zahlt für seine auf die nazistischen Republikaner ausgelegte Neuausrichtung also mindestens erstmal durchaus einen Preis.
Bei Zuckerbergs Zerstörungen konnte Mullenwegs wohl nicht mehr an sich halten, daher ging die Woche nach einer Weihnachtspause sein Amoklauf weiter und WordPress is in trouble. Diesmal kamen gleich drei Geschichten zusammen, einmal Wegen Rechtsstreit: Automattic kündigt Mitarbeit an Wordpress fast komplett auf, d.h. die Software wird durch Mullenwegs zentrale Entscheiderrolle gar nicht weiterentwickelt werden, Mullenweg Shuts Down WordPress Sustainability Team, Igniting Backlash, und Matt Mullenweg deactivates WordPress contributor accounts over alleged fork plans, damit ja kein Fork zustandekommt. Wer von Wordpress zu Serendipity wechseln und dabei Unterstützung will kann sich jederzeit bei mir melden. Ernsthaft, auch wenn die Wahl nicht auf s9y fällt, es ist an der Zeit zu reagieren.
Auch nett, Amazon is selling radioactive products with no warnings | Ann reardon (Video). Man darf da wirklich nicht einkaufen.
Das war viel zu drei großen Firmen, nun zu einem kleineren Projekt, und zwar Reloaded: Elementary OS - und warum wir es nicht mögen. Ich habe die Distribution immer ähnlich negativ wahrgenommen.
Und um doch noch etwas positives in der Liste zu haben: A Brimful of ASHA verbessert die Integration von Hörgeräten in Linux. Bei allem großen Unbill gibt es doch auch positive Entwicklungen.
Bondkommentar: No Time to Die
Als die Überreste von Spectre eine Biowaffe samt Wissenschaftler stehlen, kommt Bond aus dem Ruhestand und jagt der Waffe hinterher.
No Time to Die dürfte der letzte Bond mit Daniel Craig sein. Damit hätte Craigs Bondreihe etwas erstaunliches geschafft: Die Hauptkonstante seiner Bondfilme ist es, kein typischer Bond zu sein. Denn auch auch hier ist Bond nicht wirklich Bond: Er ist im Ruhestand, M in einer arg negativen Rolle, Bond bekommt schnell eine private Motivation für sein Handeln und ohne Spectre gesehen zu haben ist die Handlung völlig unverständlich. Das alles war früher komplett untypisch. Als Ausgleich wird endlich wieder im richtigen Moment eine Bondmelodie gespielt; der Martini geschüttelt, nicht gerührt bestellt; es gibt gleich mehrere klassische Bondautos – sogar mit Maschinengewehr – und eine Gadgetuhr.
Auch wenn ich es etwas unglücklich finde, dass diese letzten Filme immer im Ausnahmezustand laufen mussten und obwohl ich wenig Zuversicht habe, dass hiernach ein neuer Bond gut folgen kann: Trotzdem war No Time to Die ein ziemlich guter Film, vielleicht sogar ein guter Bondfilm. Tolle Actionszenen, eine verständliche Handlung, ein paar hervorragende Kameraeinstellungen und dazu gute Auftritte von Daniel Craig selbst, aber auch von Ana de Armas (wenn auch etwas merkwürdig in einer Art Gastauftritt), Léa Seydoux (Hauptbondgirl), Rami Malek (als ordentlicher Bösewicht), auch mochte ich wieder Naomie Harris als Moneypenny. Dass Lashana Lynch als Alternativ-007 eher blass blieb würde ich nichtmal negativ werten wollen, alles andere wäre in einem Abschiedsfilm unangemessen gewesen.
Größte Schwäche des Films waren die Fehltritte bei der CGI, insbesondere Qs Katze und ein Flugboot waren unterirdisch umgesetzt. Dazu kamen einzelne schwache Szenen die mich rausrissen, z.B. als unglaubwürdigerweise ein Wissenschaftler im selten dämlichen Moment Drohungen ausstieß.
Ansonsten auffällig dafür, tatsächlich ein Abschiedsfilm und als solcher erkennbar zu sein. Sowas hatte noch nie ein Bonddarsteller bekommen. Und dafür, offenkundig eine Hommage an On Her Majesty's Secret Service zu sein – was unheimlich passend ist, war die damals gehasste Andersartigkeit von Lazenbys Bond doch immer eine starke Parallele zu Craigs Interpretation des Charakters.
Meine Spyfall-Lösung, oder: Bilder im Terminal
Im Oktober letzten Jahres hatte GNU/Linux.ch einen Programmierwettbewerb für das Spiel Spyfall veranstaltet. Spyfall ist ein Diskussionsspiel, bei dem eine Gruppe von Spielern durch Fragen den Spion in der Gruppe identifizieren müssen. In jeder Spielrunde wissen alle außer dem Spion an welchem zugeteilten Ort sie sind (z.B. in einem Bunker) und stellen einander in einem Zeitlimit Fragen. Die Programmieraufgabe war nun, dafür ein Helferprogramm zu schreiben, das einem der Spieler die Spionrolle zuweist und allen anderen den Ort verrät.
Mich hatte das (nicht nur wegen dem Preis) direkt interessiert, weil ich hier eine Möglichkeit sah Bilder im Terminal einzusetzen. Denn das geht überraschenderweise, wie mir kürzlich erst WezTerm nochmal gezeigt hatte. Ich erkläre im Folgenden meine in Bash implementierte Lösung im Detail.
Spiellogik
Die Spiellogik können wir schnell abhandeln. Am Anfang wird die Spielerzahl eingegeben:
while [[ -z $players || 0 == $players ]];do # ask for players and duration echo "Wie viele Spieler nehmen teil? [3-10]" read players done
Genauso wird die Rundenlänge abgefragt:
echo "Wie viele Minuten soll die Runde dauern? [Standard 8]" read duration if [[ -z $duration ]];then duration=8 fi
Mit den Informationen kann nun aus vorher vorbereiteten Arrays mittels Bashs Zufallsfunktion ein Ort und das passende Bild ausgewählt werden:
# Select a place placeindex=$((RANDOM%${#places[@]})) # Zufallszahl mod der Anzahl möglicher Orte, sodass sie nie größer sein kann place=${places[$placeindex]} # Der gewählte Index bestimmt dann den Ort place_image=${images[$placeindex]} # Und die Bilder, siehe unten place_image_ascii=${images_ascii[$placeindex]}
Und um die Spielerrollen zuzuweisen muss nur der Spion ausgewählt werden:
spy=$((RANDOM%players))
Die Spieler werden dann noch einer nach dem anderen über ihre Rolle informiert:
for i in $(seq 0 $((players - 1)));do echo "Hey Spieler $((i+1)), bist du da und alleine? Bitte bestätige mit Enter:" read confirmed if [[ $spy == $i ]];then # ask for players and duration echo "Hey Spieler $((i+1)), du bist diese Runde der Spion. Bitte bestätige mit Enter:" read confirmed else # ask for players and duration # Hierhin kommt nachher noch der Code zum Bilderanzeigen, siehe unten … echo "Hey Spieler $((i+1)), diese Runde spielt in $place. Bitte bestätige mit Enter:" read confirmed fi clear done
Das Skript hilft während des Spiels dabei das Zeitlimit anzuzeigen, was ich recht simpel durch ein sekündliches Herunterzählen des Countdowns umgesetzt habe:
# On start, start the timer countdown=$((duration*60)) echo "Das Spiel startet nun. Ihr habt $duration Minuten!" while [[ $countdown > 0 ]];do sleep 1 countdown=$((countdown - 1)) echo "Noch $countdown Sekunden!" done
Am Ende soll ein Ton abgespielt werden. Das war gar nicht so einfach. Ich wollte erst nur den Beeper im PC tönen lassen, aber der ist oft deaktiviert, war es bei mir im Terminal beispielsweise. Daher versucht das Skript zusätzlich das oft auf Systemen vorhandene Programm speaker-test
einzuspannen, um für einen Moment einen Ton über den Lautsprecher auszugeben:
# Now we signal the end of the game. # First with the bell, but that might be disabled echo -ne '\a' # Now with speaker-test, to use the regular sound system. Note how we kill it quietly thanks to wait if hash speaker-test 2>/dev/null ;then speaker-test -t sine -f 1000 -l 1 > /dev/null & speaker_pid=$! sleep .2 kill -9 $speaker_pid wait $speaker_pid 2>/dev/null fi
Der Test auf hash speaker-test
ist dabei eine der Möglichkeiten um zu testen, ob ein Befehl auf einem System verfügbar ist. Mir ist nicht mehr klar, warum ich diesen Weg und nicht einen anderen wählte, aber er funktioniert.
Das war der relevante Teil der Spielelogik. Er war verpackt in einer Funktion namens main
, sodass ich außenrum noch ein paar Variablen anlegen konnte. Denn die wurden für das eigentlich interessante gebraucht.
Bilder anzeigen
Denn wie kann ein solches Bashskript nun Bilder anzeigen? Es stellt sich raus, dass manche Terminals das einfach können. WezTerm beispielsweise bringt eine Befehlkombination wezterm imgcat
mit, die man auf eine Bilddatei loslassen kann, sodass die dann im Terminal angezeigt wird. Das nutzt mein Skript so:
if [[ "$TERM_PROGRAM" == "WezTerm" ]];then temp_file=$(mktemp) echo "$place_image" | base64 -d > "$temp_file" wezterm imgcat "$temp_file" else
Generisch scheint das Stichwort Sixel zu sein. Ein Protokoll, um Bilder an Terminals zu übertragen und von ihnen darstellen zu lassen. Darauf kann man testen, wobei ich mir von lsix
abschaute wie ein solcher Test aussehen kann. Das nutzt mein Skript alternativ:
# We detect for sixel support, partly how lsix does it stty -echo IFS=";?c" read -a REPLY -s -t 1 -d "c" -p $'\e[c' >&2 for code in "${REPLY[@]}"; do if [[ $code == "4" ]]; then hassixel="yup" break fi done hash lsix 2>/dev/null # hacky, but I did not want to fight with the syntax to have the hash inside the [[ if [[ $hassixel == "yup" && $? ]] ;then temp_file=$(mktemp) echo "$place_image" | base64 -d > "$temp_file" lsix "$temp_file" fi
Das funktioniert! Glaube ich, habe ich es doch letztendlich nur mit WezTerm getestet. Doch was hat es mit dem base64 auf sich, wo kommen die Bilder her?
Bilder im Skript mit ausliefern
Ich wollte, dass die Bilder nicht separat im Dateisystem liegen müssen, sondern dass ich sie an Ralf mit dem Programmcode in einer Datei schicken kann. Zuerst erstellte ich dafür ganz normale grafische Bilder mit einem KI-Bildergenerator (Bing, wie hier vorgestellt). Doch dann nutzte ich base64
um von der Bilddatei eine Textrepräsentation zu erstellen (es zu serialisieren) und es der Skriptdatei anzuhängen, z.B.so:
base64 Downloads/zoo.jpg >> spyfall.sh
Um diese Serialisierung auch nutzen zu können packte ich sie in eine Variable, indem ich sie mit Anführungszeichen umstellte und den Variablennamen davorstellte, also so:
zoo="…"
Diese Bilder landeten in der main in einem Array:
# Man beachte die wiederholte Nutzung der Anführungszeichen. images=("$cave" "$spacestation" "$desert" "$disco" "$bunker" "$corn" "$antarktis" "$zoo")
Das Array wurde im Spiel zur Auswahl des Bildes genutzt wie oben bei der Spiellogik gezeigt, indem nur die aktive Arrayposition festgelegt wurde.
Die ASCII-Ausweichlösung
Aber nicht alle Terminals können grafische Bilder anzeigen. Für die wollte ich auch eine Ausweichlösung haben. Dafür griff ich auf tiv
zurück. Das ist ein Programm, das aus Bildern eine ASCII-Grafik zaubert, samt den Escapesequenzen um sie einzufärben (was in xterm mir übrigens am besten zu funktionieren schien).
Ein Pluspunkt davon: Das Programm kann ich auf meiner Seite laufen lassen, es muss beim Spieler nicht installiert sein. Beim Spieler reicht es völlig, die gespeicherte Ausgabe des Programms auszugeben. Ich musste also nur wieder die Bildrepräsentation dem Skript anhängen:
tiv Downloads/zoo.jpg >> spyfall.sh
Die wieder in einer Variable speichern:
# Man beachte das einzelne Anführungszeichen, um die Escapesequenzen zu bewahren. zoo_ascii='…'
Und wieder ein Array vorbereiten:
images_ascii=("$cave_ascii" "$spacestation_ascii" "$desert_ascii" "$disco_ascii" "$bunker_ascii" "$corn_ascii" "$antarktis_ascii" "$zoo_ascii")
Nun ist es mit einem echo
darstellbar:
else # Our two graphical methods failed, so we fall back to the ascii images echo "$place_image_ascii" fi
Somit läuft das Skript vernünftig in allen Terminals mit Bash.
Das Spiel selbst zu programmieren war nicht schwer. Sicher, man hätte das besser machen können, so war mein Ansatz mit clear
einfach alte Ausgaben zu entfernen oder den Countdown schlicht mit echo untereinander herunterzuzählen nicht ideal. Hier hätte sich ein interaktives Terminalprogramm angeboten, das (wie nano, top, etc) seinen eigenen Platz schafft und alte Ausgaben überschreiben kann. Aber Bilder einzuarbeiten war mir neues genug.
Es hat auch Spaß gemacht, sowas mal wieder in Bash umzusetzen. Damit gute Lösungen zu finden ist mehr noch ein Knobelspiel als sonst und das Ergebnis trotzdem kompakt und gut lesbar. Vorausgesetzt man verirrt sich nicht in den Bilderdefinitionen (die Skriptdatei ist übrigens 2,6 MB groß). Dass meine Implementierung dann auch noch als valider Gewinnspielkandidat akzeptiert wurde hat mich durchaus gefreut.
Wer sich das im ganzen ansehen will, ich habe das Skript als Gist hochgeladen.