Sorcery! Teil 3
Der dritte Teil von Sorcery! verliert mich zu Beginn, ganz ähnlich wie der zweite. Gewinnt mich dann wieder zurück, nur um mich am Ende zu verärgern.
Eine direkte Fortsetzung
Natürlich gibt es Änderungen zu den ersten beiden Teilen, aber das Grundprinzip ist in Teil drei gleichgeblieben: Eine mit vielen grafischen Elementen aufgelockerte, immer noch textlastige Umsetzung eines unheimlich aufwendigen Spielebuchs, bei dem der Spieler auf der Suche nach einer magischen Krone durch eine Fantasiewelt wandern muss und viele Herausforderungen zu meistern hat. Im Artikel zu den beiden Vorgängern steht mehr zum Ansatz und zur Spielmechanik.
Die Geschichte knüpft direkt an den zweiten Teil an. Die Stadt wurde verlassen, ein Niemandsland muss durchwandert werden. Schnell wird klar: Es ist gar nicht ausschließlich Niemandsland. Das offenbart eine neue Spielmechanik: Diesmal stehen einige Türme in der Landschaft, bei denen ein Teleskop und damit ein magischer Kegel bewegt werden kann. In seiner Reichweite wird die Landschaft verändert, grün und bevölkert. Das Spiel erklärt die Hintergrundgeschichte dazu früh.
Ein weiteres neues Spielelement: Diesmal geht es nicht um das Finden eines Zauberspruches, sondern um das Besiegen von sieben Schlangenwesen. Die seien unterwegs zum Oberbösen, um ihn vor der eigenen Ankunft zu warnen. Man solle sie töten oder schneller als sie sein, sagt ein Hinweisgeber direkt zu Beginn.
Wieder anfängliches Chaos
Dementsprechend versucht man hier, schnell durch die Landschaft zu kommen – und das ist ein Fehler. Ich weiß nicht, ob es nicht doch ein Zeitlimit gibt. Aber zumindest sind die Schlangen an festen Orten in der Gegend verteilt, scheinbar egal wie lange man braucht. Man soll wieder nachts rasten und Nahrung wird zur Heilung benötigt, aber davon gibt es genug zu finden. Anstatt zu hetzen und dann die Ereignisse als Blockade wahrzunehmen sollte man das Spiel also ganz entspannt angehen, kann das aber anfangs nicht wissen. Nur für ein solches systematisches Vorgehen eignet sich aber die Spielkarte mit ihren vielen verschiedenen Wegen, wobei diesmal die auch als Teleporter fungierenden Türme beim Gebietswechsel und mehrmaligem Durchsuchen helfen.
Versteht man das erstmal wird die Mission auf einmal wieder spannend. Denn wie beim Vorgänger hilft der gewonnene Fokus dem Spiel dann sehr. Besonders der Kniff, dass die zu besiegenden Schlangen besondere Schwächen haben. So gibt es eine Feuerschlange, deren Schwäche man sich vorstellen kann. Die Informationen dazu zu finden, die verschiedenen Begegnungen möglichst gut aufzulösen, die Karte langsam zu erkunden und zu beherrschen – all das macht Spaß. Vor allem, wenn die ersten Schlangen fallen und der Weg vorwärts klar scheint.
Doch genau bei der weiteren Entwicklung dieser Dynamik ging mir das Spiel später arg auf die Nerven. Denn der Weg ist ab einem gewissen Zeitpunkt keinesfalls klar, die meisten der Schlangen haben doch keine offensichtlichen Auffindeorte. Am Ende musste ich für zwei davon sogar im Internet nachrecherchieren. Das schlimmste: Die letzte Schlange fand ich gar nicht. Um sie zu besiegen muss man in einem bestimmten Moment das richtige antworten und hat dazu nur eine Chance, die meine war verpasst. Das ist einfach kein gutes Spieldesign, der Fokus von zuvor zerfasert, verwandelte sich bei mir in Frustration.
Auch ärgerten mich manche der kaum vermeidbaren Rückschläge. Beispielsweise eine Begegnung, in der unweigerlich ein magischer Gegenstand geklaut wird, ohne den dann später ein bestimmter Zauberspruch nicht benutzt werden kann. Man kann später einen zweiten solchen Gegenstand finden, aber auch das wäre leicht zu verpassen. Solche unnötigen Einschränkungen der eigenen Fähigkeiten halfen dem Spielspaß nicht.
Am Ende prophezeite mir das Spiel ein durch mein Scheitern erschwertes Finale im vierten Teil, wobei das Internet diese Konsequenz verneint. Ich werde es sehen, befriedigend war das Ende des Spiels bezüglich dieser Mission so aber auf jeden Fall nicht. Immerhin waren einige andere Geheimnisse erfahrbar, z.B. welche Zaubersprüche andere kontern, was im Zauberbuch dauerhaft vermerkt wird. Und die im Spiel erzählte Geschichte wurde etwas weiter ausgebaut, eine Handlungsalternative angedeutet. Es war also kein totales Scheitern. Und auch vom Spielspaß nicht, denn die vielen kleinen Rätsel zu lösen, Kämpfe zu gewinnen und die Karte so vollständig zu erkunden machte zwischendurch richtig viel Spaß.
Die Serie geht also nicht völlig unter, das ganze bewahrt sich auch einen Teil der Anfangsfaszination. Aber ich hatte mit dem dritten Teil die gleichen Probleme wie mit dem zweiten: Die schwierige Anfangsmotivation durch anfängliche Unklarheit, die Schwierigkeit ein akzeptables Ende zu erreichen. Wie ich die Spieleserie als ganzes bewerte wird daher stark vom finalen Teil abhängen.
Linksammlung 43/2022
Diese Woche fand ich etwas mehr Artikel als sonst besonders erwähnenswert:
Collections: Strategic Airpower 101 ist ein weiterer interessanter Militärgeschichte-Erklärartikel mit Bezug zu Russlands Ukrainekrieg.
Bei My thoughts on the Framework laptop wird erzählt, dass die neuen Modelle mit 12th-Gen-Intelprozessor nicht problemlos unter Linux funktionieren und Framework das nicht ordentlich darstellt. Der Autor findet Frameworks Konzept und Laptop trotzdem toll, das zeigt die Stärke von beidem.
Der einzige mir bekannte Linuxdistrotester widmet sich Unity: The Unity desktop in 2022 - A trick of nostalgia or the real deal?
In Why Signal won’t compromise on encryption, with president Meredith Whittaker, vertritt sie die einzige akzeptable Haltung zu Verschlüsselung, die eben für niemanden knackbar sein darf. Ich selbst schrieb über die notwendige Kompromisslosigkeit. Das Gespräch gefiel mir also, würde Signal bei F-Droid auftauchen würde ich es installieren.
Ich sah Travelynx-Erinnerung mit iOS als nette Lösung für eine ansonsten fehlende Softwarefunktion. Das geschickte Zusammenspiel unterschiedlicher Software ist immer nett.
I use a Raspberry Pi as my daily computer for over a year now zeigt, dass es geht. Ich frage mich wie groß die Einschränkung in der Praxis wirklich wäre, bei solchen Experimenten war mir bisher meistens der Browser zu lahm.
Steve Jackson's Sorcery! Teil 1 und 2
Sorcery! 1 und 2 sind Umsetzungen einer Spielebuchreihe, die auf Steam als ein Spiel zusammengefügt wurden. Es überrascht dabei, weil es wesentlich komplexer ist als man von einer Spielebuchumsetzung erwarten würde. Zu einem großen Teil liegt das wohl an der (von mir nicht gespielten) ebenfalls nicht simplen Vorlage.
Prinzip Spielebuch?
Was sich einem Spielebuch gleicht ist die Erzählform: Was passiert wird per Text erzählt, hier ergänzt um viele Visualisierungen wie der Inventaransicht und der Karte. Auf dieser wird dafür die Spielfigur von einem Punkt zum nächsten bewegt – was man als Blättern zu einer Seite übersetzen könnte. An jedem Punkt erscheint eine Textbox, manchmal ergänzt um eine kleine Zeichnung, beschreibt was passiert und verlangt Entscheidungen. Welche der Antwortmöglichkeiten soll gewählt, welche Aktion durchgeführt werden? Entscheidungen haben Konsequenzen, dann geht es zum nächsten Punkt auf der Karte. Oftmals gibt es dafür mehr als eine Möglichkeit. Gefällt eine Konsequenz nicht kann frei zurückgeblättert werden.
Aber damit erschöpfen sich die Übereinstimmungen mit dem einfachen Spielebuch meiner Kindheit auch schon. So gibt es eben ein Inventar, dessen Inhalt in manchen Ereignissen neue Möglichkeiten eröffnet, ansonsten als Material für Zaubersprüche dient. Die werden aus Buchstaben zusammengeklickt, was Sternenkonstellationen symbolisieren soll, im Grunde aber nur die Zauberspruchauswahl während der Ereignisse auf ein vernünftiges Maß einschränkt. Kämpfe werden Runde pro Runde durch die Auswahl der sich langsam regenerierenden Angriffsstärke bzw einer Verteidigungshaltung bestritten, im zweiten Teil kommt ein Minispiel dazu. Vor allem aber wird Fortschritt von Spiel zu Spiel weitergetragen.
Wie es sich spielt
Doch wie genau erreicht man in solch einem Spiel Fortschritt? Die Spielmechanik lässt sich hier schwieriger als sonst beschreiben, da was im Spiel passiert aufgrund der Textform so frei ist. Doch aufs spielmechanische reduziert macht der Spieler grob etwas hiervon:
- Er zieht seine Spielfigur zu einem Punkt auf der Karte.
- Es erscheint eine Textbox, die beschreibt was passiert.
- In ihr können nicht immer, aber oft, Entscheidungen getroffen werden. Der Spiele wählt also aus einer Option eine aus, was oft weitere Entscheidungen ermöglicht.
- Manchmal führt man nach dem gleichen Prinzip Gespräche.
- Manche Begegnungen enden im Kampf, was sein eigene Minispiel ist, in dem man entweder mit einer gewählten Stärke angreift oder sich verteidigt, dabei mehr Schaden macht wenn der Gegner ebenfalls, aber schwächer angreift.
- Immer vor Kämpfen, aber auch in vielen anderen Situationen gibt es eine Option einen Zauberspruch zusammenzuklicken, dessen Effekt dann abgehandelt wird und sehr vorteilhaft sein kann.
- Zum Ende des Ereignisses wurden Statuswerte und Inventar verändert, die Textbox schließt sich, neue Punkte auf der Karte erscheinen.
Nach dieser Grundlage funktionieren beide Spiele.
Der Start mit Sorcery! 1
Im ersten dieser Spiele bricht der Analander, unser Protagonist, zu einem Abenteuer auf. Ein vorher Entsandter ist nicht zurückgekehrt vom Versuch, eine gestohlene magische Krone zurückzuergattern. Die sei so mächtig, dass sie die gesamte Realität bedrohe. Ob man selbst es besser machen wird?
Doch erstmal führt das Spiel langsam in die Spielmechaniken ein. Direkt gibt es einen ersten Trainingskampf, optional, und einige Erklärungen zur sonstigen Spielmechanik wie dem Magiesystem. Danach geht es los, durch das Tor einer steinernen Mauer, dann durch ein Niemandsland, mit der Stadt Kharé als Ziel.
Es sind die ersten Ereignisse außerhalb der Stadtmauern, die dann den Effekt der Spielmechaniken offenbaren: Es bleibt viel im unklaren, was viel mehr einem im Kopf gespielten Rollenspiel als einem Computer-Rollenspiel gleicht. Was wird passieren, wie soll man sich verhalten – wofür die Ereignisoptionen so viele Möglichkeiten geben! –, wie begrenzt sind die sich bei Kämpfen und Zaubersprüchen erschöpfenden Ressourcen? Das lädt zum Zurückdrehen der Zeit und neu ausprobieren ein. Andererseits geht es fast immer vorwärts, das Spiel sich ausspielen zu lassen ist zumindest zu Beginn eine komfortabel einnehmbare Haltung. Läuft ein Kampf mal zu schlecht oder führt eine Entscheidung zum Tod blättert man etwas zurück, sowas ist wenig frustrierend und wirkt niemals blockierend.
Die Geschichte greift dabei auf viele Motive aus Pen&Paper-Rollenspielen zurück. Ein Beispiel: Ziemlich früh lässt sich ein Höhlensystem finden, was eindeutig nicht der normale Weg vorwärts ist. Es lässt sich trotzdem erkunden und drinnen sind Gegner mit ihren eigenen Zielen. Ein Nebenquest vielleicht – aber hier entspricht das mehr dem, was ein Spielmeister sich ausdenken würden, wenn seine Spieler einfach nicht dem ausgebauten Pfad folgen wollen und Ablenkung suchend in einen Brunnen klettern. Solche eingebauten Rollenspielverweise sehe ich positiv, sie geben Struktur. Gerade im ersten Teil sind sie häufig, was das Spiel für Rollenspieler einfacher macht. Das wiederum wirkt der drohenden Unsicherheit entgegen und motiviert. Paradebeispiel dafür ist das sehr klassische Finale, was ich hier aber natürlich nicht spoilern werde.
Sorcery! 2 – Die Verkomplizierung folgt
Der zweite Teil spielt dann in der Stadt Kharé. Wie genau der Spieler hier ankam hängt von seinen Entscheidungen im ersten Spiel ab. Die werden über einen Code übertragen, der am Ende des Vorgängers angezeigt wurde und jetzt zu Spielstart eingegeben werden kann. Auch Inventar und der Charakterstatus werden so beibehalten. Natürlich ist das optional, aber direkt den zweiten Teil zu spielen wäre desorientierend und die Konsequenzen zu ignorieren viel weniger spaßig.
Im Grunde funktioniert das zweite Spiel wie das erste auf einer Stadtkarte, aber es ist weniger eine direkte Fortsetzung als es zuerst wirkt. Zuerst, noch der kleinste Unterschied, wird die Spielmechanik fast direkt zu Beginn um ein weiteres Minispiel erweitert: Diesmal wirklich ein Spiel, ein Würfelpoker, bei dem die eigenen Würfel geheimgehalten werden und trotzdem die Gesamtzahl aller gleicher Würfel einer Zahl angesagt werden muss, was durch eine höhere Prognose gekontert werden kann, wobei die Behauptung jederzeit angezweifelt werden kann und dann in dem Moment stimmen muss.
Dann ist die Spielerführung eine andere. Vorher war der Weg klar: Es ging mit wenigen Ausnahmen immer vorwärts. In der Stadt jetzt ist zuerst nichtmal klar, wo vorwärts überhaupt ist. Die Punkt auf der Karte zeigen diesmal oft in gegensätzliche Richtungen und an einigen Stellen kann man im Kreis gehen. Dazu kommen Ereignisse, bei denen man plötzlich an ganz anderer Stelle wieder auftaucht. Die Stadt ist also ein Dschungel, Orientierungslosigkeit die Folge.
Findet man sich damit erstmal ab und beißt sich durch wird irgendwann klar: Es gibt ein Ziel dieser Stadtreise, das unweigerlich erreicht wird. Auf dieser Reise gibt es ein paar Schlüsselmomente, bei denen das richtige Verhalten das Ende beeinflusst. In einem Durchlauf sind sie nicht alle erreichbar, daher kann das alles (allerdings ohne manuelles Zurückblättern nicht unbegrenzt oft) wiederholt werden und so sie alle gesammelt werden. Hier war dann irgendwann der Moment, an dem ich zur Komplettlösung griff – ohne hätte ich das perfekte Ende zu knapp verpasst, mindestens einer der Schlüsselmomente war mir zu gut versteckt um organisch gefunden zu werden. Selbst wenn man auf den kam, sie alle ohne externe Hilfe zu erwischen erscheint mir unrealistisch.
Weitere Unterschiede: Magie scheint eine etwas größere Rolle zu spielen, in mehr Momenten der richtige Zauberspruch eine größere Wirkung zu haben. Und wieder wird ein Rollenspielklischee aufgegriffen, wenn das Stadtgebiet auch dafür geeignet ist viel Geld zu verdienen und viel Ausrüstung für die kommende Spieletappe anzusammeln, was dann der dritte Teil der Spielreihe wäre. Dafür ist die erzählte Geschichte diesmal viel weniger rollenspieltypisch, wodurch die Struktur unklarer als im ersten Teil bleibt.
Dementsprechend hat mich der zweite Teil erstmal erschlagen. Es war zuerst unheimlich motivierend, mit dem Hintergrund des ersten Teils vor Kharés Stadtmauern zu stehen. Doch als dann mir zu lange völlig unklar blieb, was in der Stadt getan werden kann und mein Proviant zu schrumpfen begann, war ich ziemlich genervt – gestresst trifft es vll besser. Glücklicherweise klärt sich dann einiges auf, woraufhin sich auch meine Einstellung zum Spiel wieder verbesserte.
Wären es zwei unabhängige Spiele, würde ich den ersten Teil uneingeschränkt empfehlen und den zweiten vorsichtiger. Und dabei bedauern, dadurch den experimentelleren Ansatz zu bestrafen. Aber so fühlte es sich eben an; Orientierungslosigkeit ist nicht motivierend und wäre auch im Kharé-Setting durchaus vermeidbar gewesen. Eine für mich akzeptable Auflösung der (Teil-)Handlung zu finden war im ersten Spiel gut möglich – wobei es auch dort Ereignisse gab, in denen mir Informationsschnipsel aus vorher nicht entsprechend erlebten Ereignissen fehlten –, im zweiten brauchte es dafür das Internet als Hilfe, was einfach weniger gut ist. Andererseits werden beide Spiele zusammen verkauft und fließen Handlung und Konsequenzen vom ersten zum zweiten, wodurch sicher nahezu jeder nach dem ersten Teil auch den zweiten spielen will und spielen sollte.
Als Spielkonzept selbst finde ich sowieso beide toll. Die Idee ist großartig, simpel mit Text und Entscheidungen ein Spiel aufzubauen, es aber computerunterstützt aufzubauschen und beherrschbar zu machen. Der Kniff dabei, eben kein altes Textadventure zu erschaffen, was den Kampf mit dem Textparser vermeidet. Allerdings: Wenn ich oben von Pen&Paper-Rollenspielen schreibe und wie sehr sich Sorcery! bzw das Konzept daran anlehnt, klingt das vielleicht besser als es sich dann wirklich spielt. Weil die ständige Unsicherheit was passieren wird durchaus erschöpfend ist, genau wie das kaum unterbrochene Lesen (anders als bei selbst textlastigen CRPGs wie Baldur's Gate) englischer Texte sowie die unzähligen Entscheidungen. Das muss die Spielerfreiheit und das gebotene Erlebnis erstmal aufwiegen! Was aber andererseits bei ehrlicher Erinnerung an meine Midgard/DSA/D&D-Spielerunden mit leicht anderen Herausforderungen nicht groß anders war, gleichzeitig für die Buchvorlage ähnlich gegolten haben dürfte…
Unterm Strich sind Sorcery! 1 und 2 gute Umsetzungen eines interessanten Konzepts. Sie bieten eine ungewöhnliche Rollenspielerfahrung, versetzen in eine sehr eigene Welt und erzählen dabei eine motivierende Geschichte. Zwar bleibt die verbindende Hintergrundgeschichte vage, doch reicht sie im ersten Spiel durch das klare Ziel aus; Das zweite Spiel funktioniert dann sehr konkret als eigenes Handlungskapitel.
Gleichzeitig kämpfen beide Spiele mit den Schwächen des sie definierenden Konzepts, was gerade zu Beginn des zweiten Teils als demotivierende Unklarheit voll durchschlägt und den Gesamteindruck etwas trübt.
Linksammlung 42/2022
Diese Woche fand ich besonders erwähnenswert:
Sound ist eine umfangreiche multi-mediale Erklärung, wie Geräusche entstehen. Sie ist vom gleichen Autor wie die umwerfende Erklärung mechanischer Uhren.
Bei dieser Petition ist das Ziel Kein Konnektortausch (via), dem unnötigen Vernichten von komplett funktionstüchtiger Hardware in Arztpraxen. Meine Unterschrift ist da.
Eine Kleinigkeit für CSS: Links unterstreichen. Aber ich hatte da lange nicht mehr dran gedacht und hier im Blog irgendwann nur mit Farben gearbeitet, was ich jetzt anlässlich dieses Artikels umgestellt habe. Es ist besser zugänglich so.
Und schließlich: How boring should your team's codebases be? Es geht ums Abwägen von Interessen, von Vorteilen und Nachteilen, wofür der Artikel ein paar gute Perspektiven erwähnt.
Helsinki
Helsinki im September war kühl, aber nicht zu kalt. Die Stadt überrascht mit ihrer bombastigkeit, den vielen großen Gebäuden, was nicht zu meinem Bild von Finnland passte (und Sankt Petersburg imitiere). Ähnlich überraschend die vielen und teils sehr tollen asiatischen Restaurants, die ich so gehäuft noch in keiner Stadt gesehen habe. Ansonsten Ozean, Inseln und außerhalb der Stadt viel Wald. Unsere Interaktionen mit Finnen waren sehr freundlich; Bus, Metro und Straßenbahn funktionierten einwandfrei.
Kann man mögen.
Linksammlung 41/2022
Diese Woche fand ich besonders erwähnenswert:
Sehr schön zu lesen und mit vielen interessanten Einblicken war dieser Artikel zu 30 Jahre PC Games – eine persönliche Einordnung.
Es heißt Chatkontrolle stoppen! Die Webseite zur Kampagne schafft es hoffentlich wirklich Aufmerksamkeit auf die unmöglichen Überwachungsvorhaben der EU zu lenken. Verschlüsselung allen zu verbieten geht nicht gegen Kriminelle, das geht eben gegen alle.
An unexpected revival of Firefox OS wurde beschrieben, wobei es eine sehr kleine Wiederbelebung des Projekts mit fragwürdigem Einschlag ist. Einen Ableger von Firefox OS in die Reihen der aktiven Linuxtelefonprojekte aufzunehmen wäre aber schon cool.
Zwei Kommentare zur deutschen Politik vom gleichen Autor: Bei Gaspreisbremsstreifen werden die Probleme treffend beschrieben, beim 49-Euro-Ticket fehlt mir der Zorn. Ein 9€-Ticket war revolutionär, nahezu kostenloser Nahverkehr für alle. Ein 49-Euro-Ticket ist nichts weiter als eine Preisobergrenze für die Monatstickets der Berufspendler.
Hacktoberfest 2022 und meine vier Paketupdates für Void Linux
Das Hacktoberfest belohnt Beiträge zu FOSS-Projekten, Ausrichter ist der US-Hoster Digitalocean. Void Linux macht dabei mit und ich empfand deren Beschreibung als sehr einladend: Die Ziele sinnvoll, klarer Einstiegspunkt und alle wichtigen Informationen wurden verlinkt. Wie war es dann, vier verwaiste Pakete für alle Void-Nutzer zu aktualisieren?
Das Prinzip
Das Hacktoberfest funktioniert so: Man meldet sich auf der Webseite an und gibt Leserechte auf den Github/Gitlab-Account. Projekte müssen über ihre Projektbeschreibung ihre Teilnahme signalisieren. Kommen dann im Projektzeitraum vier Pull-Requests an, bekommt der Teilnehmer ein T-Shirt oder es wird in seinem Namen ein Baum gepflanzt (beschränkt auf die 40.000 schnellsten erfolgreichen Teilnehmer). Der Fortschritt wird auf der Webseite in einer Übersicht angezeigt.
Void Linux hat auf seiner Webseite eine News veröffentlicht und da klar beschrieben, was sie brauchen:
- Updates für verwaiste Pakete, und zwar lieber als Rezepte für neue Pakete
- Upstream-Patches für Pakete, die nicht auf allen unterstützten Plattformen kompilieren
- Fixes für ihre eigene Infrastruktur
- Erweiterung der Dokumentation
Sie wollen also die Aktion nutzen um die anfallende Arbeit zu erleichtern, das fand ich super. Updates für verwaiste Pakete einzubringen sei zudem recht simpel.
Darüber kann man streiten, aber die Dokumentation dazu half auf jeden Fall. Zuerst gibt es eine Updateliste, die dort gelisteten Updates für Pakete von orphan@voidlinux.org sind die Ziele. Dann gibt es die Dokumentation, die etwas verteilt alles weitere erklärt: Das Readme des Paketrepos, die Anleitung und besonders hilfreich die Contributing-Hinweise.
Das Grundprinzip erklärt am besten die Readme: Klone das Git-Repo, führe darin ./xbps-src binary-bootstrap
aus um Voids Paketinfrastruktur zu bauen. Aber wer Änderungen einbringen will liest sich besser durch Contributing, das erklärt neben dem Git-Drumherum das Vorgehen für Paketupdates: Editiere die Rezeptdatei ./srcpkgs/Paketname/template des Pakets (was oft einfach nur eine Anhebung der Versionsnummer sein wird), aktualisiere die Prüfsumme mit xgensum -i Paketname
, baue das Paket mit ./xbps-src pkg <package_name>
, dann installiere es mit xbps-install --repository hostdir/binpkgs <package_name>
. Testen und einen PR mit einem einzelnem Commit an void senden. Das mit dem einen Commit wird oft bedeuten mit git rebase
Commits zusammenzufügen, vor allem wenn nachträgliche Änderungen gefordert werden (was bei mir passierte).
Bei ihrem Github sind automatisierte Tests eingerichtet, die einen Syntaxcheck über die Rezeptdatei laufen lassen und zudem schauen, ob das Paket wirklich gebaut werden kann. Die sollten durchlaufen, ansonsten am besten direkt reagieren und den Fehler korrigieren.
Das musste ich teils auch bei meinen folgenden Paketupdates machen.
Update 1: memcached 1.6.10 -> 1.6.17
Memchached ist nicht Memcache, trotzdem fiel mit der Name wegen seiner Webentwicklerrelevanz auf. Das Update war nicht ganz so einfach: Erst wollte das Paket nicht bauen, dann wusste ich nicht wie ich es testen könnte.
Ich setzte also die Versionsnummer auf 1.6.17 und der Paketbau warf einen Fehler:
configure.ac:65: error: possibly undefined macro: AS_IF If this token and others are legitimate, please use m4_pattern_allow. See the Autoconf documentation.
Zum Glück war dafür ein Fehlerbericht bereits im memchached-Github, pkg-config würde gebraucht. Das zum Template hinzugefügt und der Bau lief durch. Hier als Beispiel ein Sreenshot der Änderungsübersicht, damit deutlich wird um wie wenige Codezeilen es letzten Endes geht:
Aber wie testet man memcached ohne herumliegenden Programmcode? Mit echo und nc ist die Antwort, wobei ich bei mir echo -e
schreiben musste.
Daraufhin ging der PR durch.
Update 2: ruby-mime-types 3.3 -> 3.4.1
Eigentlich wollte ich ruby-httparty aktualisieren, aber das stolperte über diese Abhängigkeit. Das Gem mime-types war zu alt, um mit einer aktuellen Ruby-Version zu funktionieren. Ich musste da an mein altes Projekt music-streamer denken, das die MIME-Daten ausgelesen hat, wobei ich damals ruby-filemagic benutzte.
Hier war nur die Frage wie das Gem getestet werden kann, denn der Bau der neuen Version lief direkt durch. Die Antwort war irb
, der Testcode entstammt der Projektreadme:
require 'mime/types' MIME::Types['text/plain']
Im PR kam dann nur der Vorschlag, die Changelog-Datei zu verlinken.
Update 3: ruby-mime-types-data 3.2019.1009 -> 3.2022.0105
Ich fand es naheliegend, ruby-mime-types-data direkt mitzuaktualisieren. So ein Datenpaket sollte keine Abhängigkeiten haben und ist daher einfach, aber es vermeidet im Zweifel Bugs in anderen Paketen wenn die Datenbank aktuell ist. Der Test war genau wie bei ruby-mime-types (das dieses Paket als Datenquelle lädt), nur dass beide neue Versionen installiert waren.
Im PR lief ich nur in ein Miniproblem mit einem Leerzeichen nach der Versionsnummer, was xlint nicht mochte. Das konnte ich mit commit -v --amend
und einem folgendem git push --force
reparieren, ohne rebase, wobei ich beim ersten mal vergessen hatte meine Änderung vorher auch mit git add
sichtbar zu machen.
Update 4: minitube 3.9.1 -> 3.9.3
Ich hatte mir vor einer Weile mal einige Linux-Youtubeclients angeschaut, da fiel mir minitube direkt auf. Dem Versionsummersprung entsprechend war es ein kleines Update und lief problemlos durch, ich testete hier auch wieder die ARM-Crosskompilierung, was bei Void mit ./xbps-src -a armv6l pkg minitube
einfach anzuleiern ist.
Funktionstest bei so einem Anwenderprogramm war dann viel einfacher als bei memcached, ich startete das Programm und schaute ob Videos abgespielt werden konnten.
Das wurde dann dieser PR.
Ein paar Gedanken zum Schluss: Das Hacktoberfest gefiel mir gut. Die früheren Probleme scheinen ausgeräumt. Natürlich wäre es noch cooler jemanden neu zur FOSS-Welt zur Teilnahme zu bringen, aber auch ich empfand den vom Void-Projekt bereitgestellten klaren Einstiegspunkt hilfreich. Manchmal ist ein klares "Wir wollen wirklich Hilfe, und zwar genau diese" sehr überzeugend.
Aber ohne mich zu sehr beweihräuchern zu wollen: Mir hat das auch nochmal vor Augen geführt, wie groß die Hürde eigentlich ist. Git mit seinen Konzepten ist schon nicht simpel, wenn dann noch rebase
und Force-Push dazukommen wird es nicht einfacher. Ich erinnere mich zum Beispiel, dass mir sehr lange schlicht nicht klar war wie man PRs überhaupt aktualisieren kann, als ich git schon längst für meine eigene Versionsverwaltung nutzte. Jetzt scheint es simpel, damals fehlte mir einfach das mentale Modell dafür. Davon abgesehen, das Prüfen durch andere Entwickler machte mich anfangs nervös, alternativ genervt, wenn PRs ignoriert wurden (letzteres gilt immer noch, trifft mittlerweile aber weniger hart und bei Serendipity habe ich Vermeidungsstrategien entwickelt). Und das ist eine Hürde, die fast jede Code-Beisteuerung nehmen muss. Selbst man nicht direkt Linux-Paketmaintainer spielen will. Projekte tun gut daran möglichst viel davon zu dokumentieren, selbst wenn es redundant wirkt, einen ganzen Monat für diese Aktion zu geben ist ebenfalls angemessen.
Wie schwer bei Void das Aktualisieren von Paketen dann wirklich war hing natürlich stark vom Paket und vom jeweiligen Updatefehler ab. Ich wäre zum Beispiel ohne den existierenden Fehlerbericht über die nichtssagende Fehlermeldung bei memcached nie auf pkg-config als fehlende Abhängigkeit gekommen, und das obwohl ich pkg-config schon selbst bei simdock eingesetzt habe. Wer kein Ruby-Entwickler ist könnte das Testen vom Ruby-Gems schwierig finden. Überhaupt, dass man beim Kompilieren Fehlermeldungen wirklich lesen und interpretieren kann hat mir vor vielen Jahren Unki auf UbuntuUsers.de erst erklären müssen. Es baut alles aufeinander auf…
Der Blickwinkel macht für mich dann das Hacktoberfest nochmal wertvoller – wenn es bei einigen der Teilnehmern ein paar der benötigten Grundlagen schafft, ist das einfach eine gute Sache. Man kann es auf zwei Ebenen zwar auch kritisieren: Der Gamification-Ansatz ist manipulierend, via den T-shirts extrinsische Motivation einzuführen könnte intrinsische zerstören. Aber ich glaube, der Anreiz an Projekte die Unterstützbarkeit klar zu beschreiben wiegt das auf, und ein kleiner Motivationsanschub durch eine Aktion im Jahr dürfte auch langfristig wenig schädlich sein.
Linksammlung 40/2022
Diese Woche fand ich besonders erwähnenswert:
Nord Stream sabotage and hybrid war on Europe (Video) erklärt überzeugend, warum die Nordstreambomben eben doch von Russland gelegt wurden.
Ein interessanter Hintergrundartikel zu UML: My Part in its Downfall. Dass Gruppen sich so einfach in so absurde Vorstellungen verrennen können… Aber auch wie bezeichnend für die damalige Denke, dass die Struktur eines Programms als wichtig, der eigentlich handelnde Code als trivial bezeichnet werden konnten. Gegen die Überbleibsel davon zu schwimmen war für mich prägend, glaube ich.
Bei Notes Against Note-Taking Systems musste ich an ein paar befreundete Blogger denken.
Hilfreich: Aktiven Fork bei Github finden. Ich selbst habe dafür die Bowsererweiterung Lovely forks installiert.
Steam-Kurator: Die Statistiken nach 100 Reviews
Mitte 2020 bekam dieser Blog von mir eine Steam-Kuratorenseite. Zwei Jahre später ist sie mit 100 Reviews gefüllt – wobei die Seite beim Start 2020 dank vorheriger Blogartikel schon 63 Einträge hatte. Wie ist es gelaufen?
Aufrufe und Abonnenten
Steam stellt gar nicht viele Daten bereit. Zentral ist die Statistik der Beeinflussungen:
Insgesamt seien es derzeit 10764. Der große Anstieg ungefähr um Juli 2021 zeigt, welches Potential eine entsprechende Platzierung durch Steam hätte. Leider zeigt die Statistik nicht, was damals passiert ist, welche Reviews da wo gezeigt wurde. Generell ist im Graph einiges an Bewegung ab dem zweiten Jahr erkennbar, ein (vielleicht schon wieder abflachender?) Aufwärtstrend, wobei mehr Sichtbarkeit bei mehr anzeigbaren Kritiken zu erwarten war.
Doch wie "Beeinflussungen" zustande kommen kann nicht ganz stimmen. Denn die Beschreibung sagt:
When you write a review, the game then shows up to your followers in a number of places throughout Steam. When one of your followers clicks on one of those places, we count that as an app view influcenced by your review. This includes clicks on a game in the main capsule on the home page of Steam or clicks through your Curator home page.
Die Kuratorenseite hat dafür zu wenige Abonnenten – es sind seit nahezu dem Beginn konstant 4 (meines Wissen Freunde des Blogs). Die Rezensionsboxen müssen also anderen Steam-Nutzern angezeigt worden sein, aber ohne dass diese deswegen die Kuratorenseite abonniert hätten.
Ich habe hier im Blog keine Statistiken um nachvollziehen, ob die Spiele-Blogartikel durch die Steamseite Leser gewonnen haben. Aber sie werden nicht besonders oft kommentiert, ein großer Leserzustrom ist nicht wahrscheinlich.
Aufrufe einzelner Reviews
Steam kann noch eine Auflistung nach Review. Vorne stehen da bei mir diese:
Seht ihr da Regelmäßigkeiten?
Mir fällt auf: Die Rezensionen mit mehr Ansichten sind alle von vor 2022, größtenteils vom Beginn. Das ist logisch, je länger sie existieren so häufiger können sie gesehen werden. Sie alle sind positiv. Es handelt sich um bekannte Spiele, die aber nicht unbedingt die allergrößten waren – Shadow Tactics: Blades of the Shogun beispielsweise ist ein Nischenspiel, aber kein Indieding. Mad Max war ein großer Name und ein gutes Spiel, aber wohl kommerziell nicht sehr erfolgreich. Ich würde vermuten, dass die Sichtbarkeit hier einfach dadurch bestimmt wird, wieviele Aufrufe die Spiele generieren (positiv) und wieviele alternative Kuratorenreviews es für sie gibt (negativ).
Am wenigsten "Beeinflussungen" haben diese:
Reviews zu DLCs werden wohl generell nicht groß aufgerufen – was mich überrascht hat, ich hätte da weniger alternative Bewertungen und daher mehr Sichtbarkeit erwartet. Crusader Kings 2 und Path of Exile sind kostenlos, bei ihren Steamseiten sehe ich ausgeloggt gar keinen Verweis auf Kuratoren, das würde es erklären. Manche der anderen Spiele wie VoidExpanse sind obskur, weniger oft besprochen zu werden wiegt das wohl nicht auf. Aber die wenigen Aufrufe von Dishonored z.B. kann ich nicht erklären.
Soweit die Zahlen. Ich will gar nicht groß ein Fazit ziehen. Steam zeigt die Kuratoren nur an ein paar Stellen, bei denen wiederum es hilfreich ist mehr Abonnenten zu haben um sichtbar zu werden. Die Rezensionen selbst sehen im Normalfall nur Abonnenten prominent, soweit ich weiß. Doch die Reviews einzutragen ist einfach, die durch die Seite gewinnbare Übersicht der eigenen Einschätzungen angenehm. Da kein großer Aufwand ist die Kuratorenseite weiterbetreibbar.