Samsung A3 (2016) auf Android 11/LineageOS 18.1 updaten
Monday, 30. January 2023
Das A3 (SM-A310F, oder: a3xelte) bekam von Samsung nur Android 7. Mit LineageOS als Custom Rom geht mehr, es wäre schade das kleine Telefon nicht damit zu versorgen.
Wer einfach nur die Anleitung haben will sollte unter Installation weiterlesen. Ich werde nämlich jetzt erstmal erklären, was ich von dem Gerät halte und wie meine Erfahrung mit dem Flashen war. Denn es lief diesmal nicht problemlos.
Kontext und Einschätzung
Es gibt mehrere verschiedene A3. Dieses "A3 (2016)" ist tatsächlich von Ende 2015 und ist damit nicht besonders neu. Bei sustaphones ist es gelistet, weil es früher offiziell von LineageOS 17.1 unterstützt wurde. Das ist leider vorbei, keines der größeren Projekte unterstützt das Telefon noch, die von mir installierte war eine inoffizielle Version. Vielleicht spielt da eine Rolle: Das Telefon war superzickig. Lief die erste Installation der TWRP-Recovery-Software noch durch, musste ich sie wiederholen (weil ich nicht schnell genug reagierte und Samsungs Androidversion sie beim Start löscht), was dann leider nicht mehr klappte. Daraufhin startete das Telefon nicht mehr, sondern blieb immer beim ersten Schritt im Bootvorgang mit dem "Galaxy A3[6]"-Logo hängen. Da der Odin-Download-Modus noch startete war das lösbar, aber nur mit einer speziellen Kombination aus einem Heimdall-Fork und einer älteren TWRP-Version, dazu unten mehr. Zwischendurch war ich sicher, das Gerät nur noch wegwerfen zu können.
Man sollte sich also gut fragen ob der Aufwand lohnt. Ich las zwar auch Berichte von Leuten, bei denen das A3 problemlos mit einer neuen Androidversion zu flashen war. Aber Fehlerberichte gibt es ebenfalls Unmengen. Und das alles wofür? Das A3 ist zwar hübsch klein, der Bildschirm und die Kamera wirkt auf dem ersten Blick nicht schlecht, der Speicher ist sogar erweiterbar. Aber der Prozessor ist langsamer als z.B. der des LG G5 aus der gleichen Zeit, der Lautsprecher ist schrottig, vor allem aber ist der Akku nicht einfach auswechselbar. Wenn man aber schon bei Telefonen mit nicht einfach auswechselbarem Akku ist, dann gibt es Unmengen an stärkeren Alternativen mit besserer Romversorgung (z.B. das OnePlus 7 Pro).
Doch andererseits: Das alte A3 wird ja eher deswegen gewählt, weil es schon da ist und nicht im Schrank versauern soll, es wird ja wohl nicht extra gekauft. Dann lohnt es sich in jedem Fall, die folgende Anleitung nachzuvollziehen.
Installation
Die Kurzfassung: Das A3 muss erst vorbereitet werden, dann wird mit Odin (Windows) oder Heimdall (Linux) TWRP als Recovery installiert, womit dann das Rom geflasht werden kann. Ich wählte hier LineageOS 18.1, es gibt aber im xda-Forum auch eine Alpha von LineageOS 20. Lokale Daten wie installierte Apps werden dabei gelöscht!
Ich nutze Linux, also ist auch die Anleitung auf Linux ausgerichtet. Für Windows habe ich aber jeweils dazugeschrieben wie es gehen sollte – üblicherweise sind solche Anleitungen für Windows (und der Windowssoftware Odin) geschrieben, daher findet man anderswo auch alles nochmal zum nachlesen. Statt Heimdall unter Linux ebenfalls Odin (mit Wine) zu benutzen wäre eine testenswerte Alternative, vor allem wenn man sich die Kompilierung des Heimdall-Forks sparen will.
0. PC vorbereiten
Auf dem PC sollte adb installiert sein, das liegt unter Linux in den Quellen, für Windows möge man dieser Anleitung folgen. Unter Windows könnten auch Samsungs USB-Treiber gebraucht werden.
1. Telefon vorbereiten
Zuerst alle Updates durchlaufen lassen, insbesondere die für das System selbst. Da gab es 2020 das letzte, das auf meinem Gerät z.B. noch fehlte.
Sicher nun die Daten auf dem Gerät, die du behalten willst, irgendwo extern.
Dann muss der Entwicklermodus aktiviert werden. In den Einstellungen auf "About Phone" und dort siebenmal auf den Eintrag "Build Number" drücken. Eine kleine Einblendung sollte die Aktion bestätigen.
Dadurch gibt es in den Einstellungen einen neuen Eintrag mit den Entwickleroptionen. Dort müssen zwei aktiviert werden:
- OEM Unlock
- USB Debugging
2. Linux: Heimdall installieren & Recovery installieren
Jetzt kann das A3 in den Downloadmodus gesetzt werden, indem zum Start gleichzeitig die Knöpfe Power + Home + Lautstärke runter gedrückt und gehalten werden.
Unter Linux könnte man nun mit Heimdall die Recovery-Software aufspielen. Doch leider ist Heimdall nicht ohne weiteres mit dem A3 kompatibel, die in den Quellen verfügbare Version wird nicht funktionieren. Stattdessen kompilieren wir diese Version selbst, die einen Workaround eingebaut hat. Dafür braucht es die Pakete git, build-essential und cmake sowie ein paar weitere, die auch der Readme entnommen werden können (zlib1g-dev, qt5-default, libusb-1.0-0-dev. libgl1-mesa-glx, libgl1-mesa-dev; Paketnamen können abweichen). Dann:
git clone https://github.com/changlinli/Heimdall cd Heimdall mkdir build cd build cmake -DCMAKE_BUILD_TYPE=Release .. make cd bin/
Als Test ziehen wir nun die PIT-Datei, mit der das Telefon später vielleicht gerettet werden könnte falls etwas schiefginge:
sudo ./heimdall print-pit --file a310f_orig.pit
Das Telefon sollte nun neustarten, mit der Tastenkombination direkt wieder in den Downloadmodus setzen.
Kommen wir zur Recovery. TWRP kann von der TWRP-Seite heruntergeladen werden. Allerdings funktionierte die derzeit aktuelle 3.7.0 bei mir nicht. Stattdessen sollte die twrp-3.4.0-0-a3xelte.img gewählt werden, die ging.
Mit dem Telefon im Download-Modus, verbunden mit dem PC via eines USB-Kabels, kann das frisch kompilierte Heimdall nun die Recovery installieren:
sudo ./heimdall flash --RECOVERY twrp-3.4.0-0-a3xelte.img --no-reboot
oder 2. Windows: Odin installieren & Recovery installieren
Ich habe die Installation unter Linux durchgeführt. Unter Windows würde man statt Heimdall Odin benutzen. Ich verweise auf netzwelts Android: So führt ihr ein Custom Recovery auf Samsung-Smartphones durch. Auch hier würde ich von TWRP die 3.4.0 installieren.
3. LineageOS flashen
TWRP ist frisch installiert, würde aber entfernt werden, wenn das Telefon regulär neustartet. Stattdessen beenden wir den Downloadmodus mit Power + Lautstärke runter und drücken und halten direkt die Kombination für den Recovery-Modus: Power + Home + Lautstärke hoch. Es startet TWRP.
Auf dem PC laden wir LineageOS 18.1 aus dem xda-Forum herunter.
In TWRP geht es zu Wipe -> Advanced Wipe, dort Cache, Data und System auswählen und wipen.
Dann zu Advanced -> Sideload, durch swipe bestätigen. Das gerade heruntergeladene zip kann nun installiert werden:
adb sideload lineage-18.1-20230118-UNOFFICIAL-a3xelte.zip
Wer mag installiert jetzt noch genauso die Open GApps (ARM64, Android 11), ich verzichtete.
Wenn TWRP eine TWRP-App installieren will sollte das verneint werden.
Jetzt neustarten und das A3 sollte direkt LineageOS laden.
Mit LineageOS soll das A3 komplett funktionieren. Ich testete den Lautsprecher, Anrufe und die Kamera, schien zu passen, auch der Akku hielt ordentlich.
Wer keine GApps installiert hat und das nicht gewöhnt ist, dem empfehle ich direkt F-Droid herunterzuladen. Von dort bezieht man dann Firefox (Fennec) mit Ublock und alles andere was man braucht, wenn es Apps aus dem Play Store sein müssen kann Aurora die installieren (nicht alle gehen dann auch ohne GApps, aber viele). Vielleicht ist ansonsten meine eigene App-Liste eine Orientierungshilfe.
Mein Ärger mit dem Kobo Glo HD
Monday, 23. January 2023
Mein Hauptproblem mit dem Kobo Glo HD – gekauft vor einigen Jahren nach dem Ableben des Kobo Touch – ist, dass er nicht zuverlässig ist. Er war es nie. Das fängt damit an, dass ich ihn desöfteren aufladen musste als ich eigentlich einen vollen Akku erwartete. Es kann sein, dass das einfach ein Konzeptproblem ist, der Leser sich nicht komplett abschaltet damit ein Öffnen der Hülle ihn aktivieren kann und er dabei mehr verbraucht als ich erwartete, aber so oder so überraschte mich das mehrmals negativ.
Dann das Wlan: Eben verband er sich, vorher ging das mehrmals nicht. Aber es ist auch nicht so, dass die Wlan-Verbindung irgendwas brächte – nur ein Netzwerkfehler begrüßt mich bei der Entdeckenfunktion, genauso funktioniert die Synchronisation (die auch Geräteupdates finden sollte) einfach nicht. Das ist auch deswegen bemerkenswert, weil ich das Gerät vor nicht allzulanger Zeit sich habe updaten lassen. Im August war das wohl (da war laut Anzeige die letzte Synchronisation), völlig veraltet ist die Software also nicht. Und ja, der Leser wird nicht mehr verkauft, aber dass die Serverinfrastruktur abgeschaltet wurde lese ich nirgends. Wäre auch überraschend, dürfte die Anbindung an den Büchershop doch die Haupteinnahmequelle Rakutens Kobo-Sparte sein.
Gut, so schlimm ist dieser Fehler für mich nicht, da ich nie besonders am Kobo-Shop mit seinen DRM-verseuchten Büchern interessiert war. Den Kobo habe ich ja gerade deswegen gewählt, weil er (wie schon sein Vorgänger) sich wie ein USB-Stick mit dem PC verbinden kann und dann durch Rüberkopieren regulärer .epubs einfach zu befüllen ist. Aber immer wieder funktioniert das nicht. Manchmal kann er gar nicht eingehangen werden, andermal erscheint nach dem Abhängen und nach dem Importvorgang das herüberkopierte Buch einfach nicht in der Oberfläche. Stattdessen zeigt mir dmesg
auf meinem Rechner solche Fehlermeldungen:
[ 178.944701] device offline error, dev sdc, sector 527 op 0x0:(READ) flags 0x0 phys_seg 1 prio class 2 [ 178.944707] Buffer I/O error on dev sdc, logical block 527, async page read [ 178.945458] udevd[13079]: inotify_add_watch(7, /dev/sdc, 10) failed: No such file or directory [ 178.960589] sd 4:0:0:0: [sdc] Synchronizing SCSI cache [ 178.960620] sd 4:0:0:0: [sdc] Synchronize Cache(10) failed: Result: hostbyte=0x01 driverbyte=DRIVER_OK [ 180.858826] usb usb3-port2: attempt power cycle [ 182.705765] usb usb3-port2: unable to enumerate USB device
Die sind höchst bedenklich. Nach einigen Wiederholungen funktionierte der Büchertransfer bisher immer doch, aber komfortabel ist anders. Das Befüllen über eine Netzwerkfreigabe scheint als Alternative nicht zu existieren (selbst wenn das Wlan funktionieren würde). Ich habe nie wirklich verstanden wie die Kobo-Softwarewelt eigentlich funktionieren soll (gibt es da einen Online-Account, dem ich woanders gekaufte Bücher auch hinzufügen könnte?), musste das über die USB-Laufwerksfunktion aber auch nicht. Wenn die aber nun nicht mehr ordentlich funktioniert wird die Kombination dieser beider Fakten zu einem Problem.
Wenn der erste Kobo komplett stabil gewesen wäre würde ich einfach an ein defektes Gerät glauben. Aber auch der Vorgänger hatte ähnliche Probleme, wollte sich manchmal nicht mit dem PC verbinden, brauchte gelegentlich sogar ein Komplett-Reset. Stabile Hardware sind meine beiden Kobos einfach nie gewesen.
Das finde ich derzeit ein bisschen trauriger als sonst, weil ich gerade viel Spaß damit hatte eine Science-Fiction-Buchreihe durchzulesen und dabei bemerkt habe, dass es mittlerweile DRM-freie .epubs im regulären Onlinehandel gibt. Nachdem die Humblebundles mich vergrault haben wäre anderswo Bücher zu kaufen daher vielleicht eine Option gewesen. Zudem bietet die lokale Bücherei auch ebooks zum Ausleihen an und ihre neue Webseite sieht sogar halbwegs benutzbar aus. Aber ob ich das mit einem so unzuverlässigem Gerät machen will weiß ich nicht, wahrscheinlich höchstens bei der nächsten längeren Reise.
Ansonsten ist der Kobo Glo HD übrigens bisher kein schlechtes Gerät gewesen. Ich mag die eingebaute Hintergrundbeleuchtung und das Gerät ist zwar nicht schnell, aber beim Umblättern schnell genug. Beim Verkleinern und Vergrößern von Text ist er unangenehm langsam, aber das macht man ja pro Buch meist nur einmal. Keinen Knopf zum Umblättern zu haben hat mich schon beim ersten Kobo nicht gestört. Texte sehen auf dem Bildschirm gut aus, die mitgelieferten Fonts sind hübsch. Ein ordentliches Wörterbuch fehlte allerdings, das eingebaute hat mir nie helfen können, aber gut, meist hat man ja doch ein Telefon mit Suchmaschine zur Hand.
Insgesamt habe ich mit diesem Leser über die Jahre einige Bücher gelesen, ein kompletter Fehlkauf war er nicht. Aber wenn er ganz kaputt geht wird angesichts der oben beschriebenen Probleme der Nachfolger nur bei völliger Alternativlosigkeit wieder ein Kobo.
Verbesserungen für sustaphones: Ankerlinks, Design, Romauswahl
Wednesday, 18. January 2023
Sustaphones, meine Webseite zum Finden reparierbarer und von Android-Roms unterstützten Telefonen, hat ein paar Updates bekommen.
Diese beiden Screenshots zeigen den Unterschied (die alte Version zuerst):
Kein großer Umbau, aber praktische Änderungen sind dabei:
- Die einzelnen Boxen haben nun oben einen Ankerlink, der die Seite an die jeweilige Stelle scrollt. Anlass dazu war dieser gnulinux.ch-Artikel zum Fairphone 2, der seine Erkenntnisse über ein spezielles Telefon nicht verlinken konnte. Jetzt ginge das.
- Um das Design etwas symmetrischer zu machen ist der Link zur iFixit-Akkuwechselanleitung nach vorne in das Label gerutscht und steht nicht mehr extra hinter dem Icon. Dadurch konnten die Software- und Hardwarebereiche in der Box gleich groß werden. Das trennt gleichzeitig den unteren Bereich visuell besser vom oberen Bereich ab, bei dem Bild und Titel immer noch 33% und 66% des Platzes einnehmen.
- MoKee gibt es nicht mehr, dementsprechend wurde es aus der Liste genommen.
- Da LineageOS so betont hat, dass die neue Version 20 und nicht 20.0 sei, habe ich auch bei den anderen Roms die Versionsnummern angepasst (zumindest wo das jeweilige Projekt sie nicht eindeutig als X.0 benennt, wie bei DivestOS).
- Generell lief ein Update aller Parser, insbesondere bei PixelExperience war das überfällig. Darüber wurden auch ein paar neue Telefone hinzugefügt, wie das Nothing Phone(1).
Ich möchte noch erwähnen, dass Havoc-OS auf meiner Abschussliste steht, dem Changelog zufolge ist das Projekt ziemlich inaktiv und auch bei ihrer Geräteliste hat sich nichts getan. Aber das werde ich noch etwas beobachten.
Änderungswünsche (die per Gitlab auch selbständig umgesetzt werden könnten) sind gern gesehen, ebenso Vorschläge zum Einbinden anderer Android-Projekte.
Zur Verteidigung von LibreWolf
Wednesday, 2. November 2022
Sören kritisiert in seinem Blog LibreWolf, eine dieser alternativen Firefoxkonfigurationen. Er hat nicht völlig unrecht mit seiner Kritik, ich möchte aber zweien seiner Argumente dagegenhalten.
Das fehlende Projektimpressum
Sören schreibt:
Nun wirbt also ein Projekt um Vertrauen, welches nicht einmal ein Impressum auf der eigenen Website hat. Die Argumentation, dass im Land des Betreibers ggfs. keine gesetzliche Impressumspflicht besteht, könnte zu kurz greifen, da hier ein Produkt auch innerhalb der Europäischen Union angeboten wird. Letztlich schafft es aber auch vollkommen unabhängig von der rechtlichen Perspektive nicht unbedingt Vertrauen, wenn darauf verzichtet wird. Denn auch wenn es sich hier um ein Community-Projekt handelt, so muss es am Ende des Tages eine Person geben, welche gesamtverantwortlich für den Browser sowie Inhalte der Website ist.
Er verkennt hier in welcher Softwarewelt wir uns bewegen. Jeder von uns benutzt täglich Software, dessen Autor wir nicht kennen. Ist das tatsächlich mal anders, benutzen trotzdem die Entwickler der Software Abhängigkeiten deren Autor sie nicht kennen. Die FOSS-Welt ist auf eine andere Basis aufgestellt als die einer Internet-Impressumspflicht, einer rein deutschen Erfindung deutscher Weltregulierungsbürokraten. Schon bei Webseiten ist diese lächerlich, bei FOSS-Softwareprojekten völlig unbekannt. Klar, viele große Softwareprojekte lassen sich einzelnen Firmen oder speziell für sie gegründeten Vereinigungen zuordnen, die Regel ist das aber nicht.
Dementsprechend ist es keinesfalls so, dass für Browser oder Webseite des Projekts eine einzelne Person gesamtverantwortlich sein muss. Selbst wenn gewisse Juristen und Politiker das gerne so hätten.
Nebenbei, eine gesetzliche Impressumspflicht für solch eine private Hobbyseite besteht auch in Deutschland nicht. Edit: Diese meine Auffassung wird in den Kommentaren von fachkundiger Seite allerdings bestritten. Ich bleibe dabei, dass ein Projekt an solchen juristisch-bürokratischen Maßstäben zu messen keine gewinnende Strategie ist.
Das harmlose DRM
Sören schreibt:
Interessant ist auch die Begründung, mit der LibreWolf standardmäßig Digital Rights Management (DRM) abgeschaltet hat: Dies sei eine Limitierung der Nutzer-Freiheit. Das ist natürlich völliger Quatsch, denn im Gegenteil erlaubt DRM dem Nutzer den Konsum von Filmen, Serien und Sportveranstaltungen, sowohl kostenlos als auch kostenpflichtig, die anders überhaupt nicht angeboten werden könnten und was für den Nutzer auch überhaupt keinen Nachteil besitzt, während es das LibreWolf-Projekt ist, welches sich hier eine standardmäßige Einschränkung seiner Nutzer anmaßt – wohlgemerkt während gleichzeitig groß mit Freiheit geworben wird.
Die Aktivierung von DRM (Digital Restriction Management) in Browsern wie Firefox ist keinesfalls ohne Nachteile für die Nutzer, denn es propagiert die Nutzung dieser Technologie. Mit DRM aber kontrollieren Firmen, was die Menschen mit ihren Rechnern machen können. Dann werden Bücher aus der Ferne gelöscht, das Abspielen auf dem gewünschten Anzeigegerät verboten, das Anfertigen von Screenshots für Kritiken verhindert, das völlig legale Verleihen unterbunden; Kurz: Jedwede nicht komplett vorgesehene Nutzung der Inhalte wird verhindert. Als Firefox damals DRM aktivierte war es eine Niederlage für die Freiheitsrechte von uns allen, es in einem relevanten Browser nicht aktivieren zu können wirkte vorher gegen die weitere Verbreitung.
Natürlich kann jeder für sich abwägen, ob in einem bestimmten Kontext wie z.B. für Netflix das DRM nicht doch akzeptabel ist. Aber das sollte definitiv ein Opt-In und nicht standardmäßig an sein und ist wie ausgeführt nicht grundsätzlich eine nachteilslose Geschichte.
Das waren nur die zwei Argumente, die bei mir den größten Widerspruch provozierten. Mit den anderen Argumenten haben ich weniger Probleme, aber die Gesamtkritik findet mein Gefallen nicht.
Denn ich denke zwar insgesamt auch, dass ein Projekt wie LibreWolf natürlich Nachteile hat. Gerade Updates etwas später zu erhalten ist nicht ideal. Dazu laufen solche Projekte tatsächlich in die Gefahr, Sachen zu deaktivieren, die im Großen und Ganzen positiv sind. In diese Richtung geht der Großteil Sörens Kritik. Aber sie ist mir zu negativ, zu einseitig, das Projekt wegen seiner vermeintlichen Gefährlichkeit sogar nicht zu Verlinken empfinde ich als überzogen und wirkt auf mich kindisch. Denn erstmal ist es doch eine gute Sache, wenn alternative Konfigurationen von Firefox ausprobiert werden, wenn es ein Korrektiv für Mozillas teils eben durchaus fragwürdige Entscheidungen gibt.
Das ist immerhin die Firma, die bei der Überarbeitung der Androidversion Erweiterungen unter großem Protest deaktivierte und forkverhindernd ihre rasche Wiedereinführung versprach, was mittlerweile jahrelanges Verschleppen als Lüge entlarvt hat und nichtmal den eigenen Entwicklern erklärt wird. Besonders bei einem solchen Akteur ist Diversität eine Stärke, so ist auch LibreWolfs Existenz zu begrüßen. Ich vermute daher auch, dass die heftige Kritik weniger gegen das Projekt geht als gegen das durch das Projekt durchscheinende negative Bild von Mozilla – ob dem Autor das jetzt bewusst ist oder nicht.
Hacktoberfest 2022 und meine vier Paketupdates für Void Linux
Monday, 10. October 2022
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.
Mehr FPS für lau unter Linux: Proton, FSR und vkBasalt
Monday, 19. September 2022
Wer die technische Entwicklung bei Spielen nicht genau verfolgt könnte es verpasst haben, doch tatsächlich sind die Upscale-Techniken von AMD, Nvidia und jetzt Intel revolutionär. Mit ihnen laufen Spiele intern auf einer kleineren Auflösung – also z.B. 1477x831 – und die Grafikkarte skaliert das Bild dann eigenständig auf die Zielauflösung hoch – hier 1920x1080. Und die Ergebnisse sehen toll aus. Ursprünglich wurde dieser Ansatz als Lösung präsentiert um 4K-Auflösungen erreichbarer zu machen, doch mir ist das obere Szenario viel sympathischer. Denn so werden alte Grafikkarten entlastet, die dann auf einmal moderne AAA-Spiele besser bewältigen können. Das Hochskalieren mittels der GPU ist praktisch kostenlos, das Herunterregeln der internen Auflösung spart Unmengen an Aufwand.
Damit das perfekt läuft muss das Spiel diese Techniken unterstützen. Doch unter Linux haben sich Entwickler auf das freie FSR gestürzt, das Upscaling von AMD. Dessen erste Version lässt sich an jedes Spiel anheften! Die Ergebnisse sind teilweise erstaunlich gut, zumindest wenn man etwas nachhilft. Und da kommt vkBasalt ins Spiel.
In Kurz
Installiere Proton-GE und vkBasalt sowie optional Mangohud. Benutze für vkBasalt diese Konfiguration. Starte ein Windowsspiel so:
mangohud ENABLE_VKBASALT=1 WINE_FULLSCREEN_FSR=1 WINE_FULLSCREEN_FSR_MODE=ultra %command%
Setze die Auflösung im Spiel auf die FSR-Startauflösung für die native Zielauflösung deines Monitors (Tabelle hier). Fertig, das Spiel läuft schneller als zuvor.
Die ausführliche Anleitung folgt.
FSR aktivieren
Doch erstmal muss man FSR überhaupt ankriegen. Auf dem Steamdeck hat Valve das mitgeliefert, im regulären Proton nicht. Dafür braucht es bisher noch eine alternative Protonvariante, nämlich GloriousEggrolls Proton. Die Installation ginge so:
- Download a release from the Releases page.
- Create a ~/.steam/root/compatibilitytools.d directory if it does not exist.
- Extract the release tarball into ~/.steam/root/compatibilitytools.d/.
- tar -xf GE-ProtonVERSION.tar.gz -C ~/.steam/root/compatibilitytools.d/
- Restart Steam.
- Enable proton-ge-custom.
Doch ist das unnötig kompliziert, wenn ProtonUp-Qt das mit ein paar Klicks machen kann. Also: Zieh dir das AppImage davon, mach es ausführbar, lass es Proton-GE installieren.
Danach kann das in den Einstellungen von Steam unter Steam Play für alle Spiele aktiviert werden, oder du setzt die Protonversion für das jeweilige Spiel unter "Kompatiblität".
Um jetzt ein Spiel mit FSR zu starten müssen die Startparameter gesetzt werden. Rechtsklick in Steam aufs Spiel, Eigenschaften, dann sind die Startoptionen direkt rechts. Schreibe dort:
WINE_FULLSCREEN_FSR=1 WINE_FULLSCREEN_FSR_MODE=ultra %command%
Wenn jetzt das Spiel gestartet wird läuft alles normal, FSR tut noch nichts. Dafür muss erst die Auflösung gewechselt werden. Durch den Start samt FSR-Befehl sollte in den Einstellungen jetzt eine passende auftauchen. Bei meiner 1080p-Auflösung als Ziel ist das 1477x831, bei 1440p oder 4K als Ziel entsprechend mehr. Die beste Liste dafür findet sich hier. Wird jetzt diese Auflösung gewählt greift FSR. Das Bild sieht etwas ausgewaschener aus, aber viel besser als wenn die Auflösung nicht automagisch hochskaliert werden würde.
vkBasalt aktivieren
Diesem ausgewaschenem Bild kann vkBasalt auf die Sprünge helfen. Das Programm zeichnet Filter über die Ausgabe von Programmen. Besonders interessant für uns, dass es das Bild mittels zweier Methoden nachschärfen kann, und dass es nochmal zwei Kantenglättungsfilter kennt.
vkBasalt kann manuell installiert werden, das ginge so:
git clone https://github.com/DadSchoorse/vkBasalt.git cd vkBasalt meson --buildtype=release --prefix=/usr builddir ninja -C builddir install
Wieder sollte das nicht nötig sein, es ist in einigen Repos bereits vertreten und kann daher direkt über den Paketmanager installiert werden. Bei mir mit Void Linux:
sudo xbps-install vkBasalt
Die Konfiguration fehlt aber noch. Geht auch per Spiel, was in der Readme erklärt wird, ich würde stattdessen die Datei $HOME/.config/vkBasalt/vkBasalt.conf anlegen und hiermit füllen:
#effects is a colon seperated list of effect to use #e.g.: effects = fxaa:cas #effects will be run in order from left to right #one effect can be run multiple times e.g. smaa:smaa:cas #cas - Contrast Adaptive Sharpening #dls - Denoised Luma Sharpening #fxaa - Fast Approximate Anti-Aliasing #smaa - Enhanced Subpixel Morphological Antialiasing #lut - Color LookUp Table effects = smaa:dls reshadeTexturePath = "/path/to/reshade-shaders/Textures" reshadeIncludePath = "/path/to/reshade-shaders/Shaders" depthCapture = off #toggleKey toggles the effects on/off toggleKey = Home #enableOnLaunch sets if the effects are emabled when started enableOnLaunch = True #casSharpness specifies the amount of sharpning in the CAS shader. #0.0 less sharp, less artefacts, but not off #1.0 maximum sharp more artefacts #Everything in between is possible #negative values sharpen even less, up to -1.0 make a visible difference casSharpness = 0.3 #dlsSharpness specifies the amount of sharpening in the Denoised Luma Sharpening shader. #Increase to sharpen details within the image. #0.0 less sharp, less artefacts, but not off #1.0 maximum sharp more artefacts dlsSharpness = 0.5 #dlsDenoise specifies the amount of denoising in the Denoised Luma Sharpening shader. #Increase to limit how intensely film grain within the image gets sharpened. #0.0 min #1.0 max dlsDenoise = 0.8 #fxaaQualitySubpix can effect sharpness. #1.00 - upper limit (softer) #0.75 - default amount of filtering #0.50 - lower limit (sharper, less sub-pixel aliasing removal) #0.25 - almost off #0.00 - completely off fxaaQualitySubpix = 0.75 #fxaaQualityEdgeThreshold is the minimum amount of local contrast required to apply algorithm. #0.333 - too little (faster) #0.250 - low quality #0.166 - default #0.125 - high quality #0.063 - overkill (slower) fxaaQualityEdgeThreshold = 0.1 #fxaaQualityEdgeThresholdMin trims the algorithm from processing darks. #0.0833 - upper limit (default, the start of visible unfiltered edges) #0.0625 - high quality (faster) #0.0312 - visible limit (slower) #Special notes: due to the current implementation you #Likely want to set this to zero. #As colors that are mostly not-green #will appear very dark in the green channel! #Tune by looking at mostly non-green content, #then start at zero and increase until aliasing is a problem. fxaaQualityEdgeThresholdMin = 0.0312 #smaaEdgeDetection changes the edge detection shader #luma - default #color - might catch more edges, but is more expensive smaaEdgeDetection = luma #smaaThreshold specifies the threshold or sensitivity to edges #Lowering this value you will be able to detect more edges at the expense of performance. #Range: [0, 0.5] #0.1 is a reasonable value, and allows to catch most visible edges. #0.05 is a rather overkill value, that allows to catch 'em all. smaaThreshold = 0.05 #smaaMaxSearchSteps specifies the maximum steps performed in the horizontal/vertical pattern searches #Range: [0, 112] #4 - low #8 - medium #16 - high #32 - ultra smaaMaxSearchSteps = 32 #smaaMaxSearchStepsDiag specifies the maximum steps performed in the diagonal pattern searches #Range: [0, 20] #0 - low, medium #8 - high #16 - ultra smaaMaxSearchStepsDiag = 16 #smaaCornerRounding specifies how much sharp corners will be rounded #Range: [0, 100] #25 is a reasonable value smaaCornerRounding = 25 #lutFile is the path to the LUT file that will be used #supported are .CUBE files and .png with width == height * height lutFile = "/path/to/lut"
Die Steam-Startparameter des Testspiels ergänzen wir nun ebenfalls um ENABLE_VKBASALT=1
, sodass sie so aussehen:
ENABLE_VKBASALT=1 WINE_FULLSCREEN_FSR=1 WINE_FULLSCREEN_FSR_MODE=ultra %command%
Die Home-Taste auf der Tastatur deaktiviert nun vkBasalt, der Effekt sollte deutlich sichtbar sein, nochmal Home aktiviert es wieder. Verschwunden ist das ausgewaschene der Standard-FSR-Hochskalierung.
MangoHud, optional
Wer den Bildunterschieden noch nicht ganz traut kann das ganze mit MangoHud überprüfen. Auch das war bei mir in den Quellen:
sudo xbps-install MangoHud
Die manuelle Installationsanleitung spare ich mir hier, sie ist ausführlich auf der Githubseite erklärt, samt vorkompilierten Releasedateien.
Auch Mangohud will konfiguriert werden. Setze in die $HOME/.config/MangoHud/MangoHud.conf diesen Inhalt:
### MangoHud configuration file ### Display the current GPU information gpu_stats ### Display the current CPU information cpu_stats ### Display FPS and frametime fps frametime ### Display the frametime line graph frame_timing ### Display GameMode / vkBasalt running status vkbasalt ### Display the current resolution resolution ### Disable / hide the hud by default no_display ################ WORKAROUNDS ################# ### Options starting with "gl_*" are for OpenGL ### Specify what to use for getting display size. Options are "viewport", "scissorbox" or disabled. Defaults to using glXQueryDrawable # gl_size_query=viewport ### (Re)bind given framebuffer before MangoHud gets drawn. Helps with Crusader Kings III # gl_bind_framebuffer=0 ### Don't swap origin if using GL_UPPER_LEFT. Helps with Ryujinx # gl_dont_flip=1 ################ INTERACTION ################# ### Change toggle keybinds for the hud & logging # toggle_hud=Shift_R+F12 # toggle_fps_limit=Shift_L+F1 # toggle_logging=Shift_L+F2 # reload_cfg=Shift_L+F4 # upload_log=Shift_L+F3
Das ist fast Standard, aktiviert aber die Optionen zur Erkennung von vkBasalt und der Auflösung. Noch die Startparameter anpassen:
mangohud ENABLE_VKBASALT=1 WINE_FULLSCREEN_FSR=1 WINE_FULLSCREEN_FSR_MODE=ultra %command%
Jetzt erscheint nach Druck auf rechtem Shift + F12 links oben eine Box, die neben den Frametimes und FPS auch die Auflösung anzeigt (was bei aktiviertem FSR also 1920x1080 bzw die Zielauflösung ist, selbst wenn das Spiel intern eine geringere gesetzt hat) und ob vkBasalt an ist. Shift_R + F12 versteckt die Box wieder.
Diskussion der Bildqualität
Wie gut ist jetzt noch das Bild? Ich habe hier mit Metro Exodus ein paar Vergleichsbilder gemacht. Zuerst einmal ist das Ziel die tolle 1080p-Qualität, wobei das nichtmal die hohen Einstellungen sind:
In meiner (recht einfachen) Testszene schwankte mein System hiermit zwischen 70 und 94 FPS.
Mit FSR im Ultra-Modus, also intern 1477x831, sieht das ganze leider viel weniger scharf aus:
Dafür sind die FPS besser, 80 bis 106 FPS sah mein Test. Und das ist die geringste FSR-Stufe, die anderen würden die interne Auflösung weiter verringern und die Performance verbessern.
Und schließlich das Bild mit Ultra-FSR samt vkBasalt:
Das erreicht nicht ganz die Qualität der nativen 1080p-Auflösung. Nicht, dass es nicht ähnlich scharf wäre. Aber FSR produziert eine Abrundung von Linien (gerade im hier nicht sichtbaren HUD) und einen grauen Körnereffekt über dem Bild. Das Schärfen mittels vkBasalt wirkt da leider nicht gegen. Trotzdem wertet vkBasalt das Bild wesentlich auf, die wahrnehmbare Unschärfe ist weg.
Die Performance mit vkBasalt war nur ein bisschen schlechter, die FPS lagen bei 80 bis 100.
Ich wollte hier zum einen FSR mit vkBasalt vorstellen. Gerade die Kombination von FSR mit vkBasalt als Schärfefilter sah ich noch nicht so oft diskutiert, dass Linux hier Spielern eine tolle Tuningoption gibt soll nicht untergehen. Der Umweg über Proton schafft unerwartete Möglichkeiten um Spielen einen gar nicht mal so kleinen Schubs zu geben. Immer noch auf Kosten der Grafikqualität, zugegeben, aber je nach Spielertyp ist es das wert.
Aber mich interessieren besonders auch Fehler in meiner Konfiguration. Gibt es zu vkBasalt sogar gute Alternativen? Wäre bei dessen Einsatz die Kombination der beiden Schärfefilter cas und dls sinnvoll? Sollte FXAA statt SMAA benutzt werden? Ich habe natürlich schon einiges auspobiert, aber bin keineswegs sicher, dass die Konfiguration oben die optimale ist. Nur dass sie ein guter Startpunkt ist, davon bin ich überzeugt.
Als Fazit reizt mich auch der Gedanke, dass dieses jetzt schon interessante Ergebnis die erste Version von FSR nutzt. DLSS 2.0, FSR 2.0 und XeSS sind nochmal deutlich besser. Wenn es irgendwie gelingen würde, sowas wie XeSS auch ohne Entwickleraufwand nutzbar zu machen und dann mit jedem Spiel kombinieren zu können...
DivestOS bei sustaphones
Wednesday, 14. September 2022
DivestOS ist ein Fork von LineageOS. Das Ziel: Gerade auch ältere Telefon mit einem möglichst sicherem Android ausstatten, sodass Nutzer die Kontrolle über ihr System bewahren. Dabei ist ein Fokus auf FOSS Teil der Projektphilosophie, sodass z.B. proprietäre Blobs an vielen Stellen entfernt werden.
Das passt natürlich perfekt zu sustaphones, meinem ROM-Finder für möglichst reparierbare Telefone. Nachdem ich über das ROM las kontaktierte ich daher das Projekt per Reddit. Ergebnis: DivestOS konnte gelistet werden. Der Parser ist zwar etwas komplexer als ideal (weil die Daten nicht in einem Rutsch heruntergeladen werden können), aber es waren doch alle notwendigen Informationen verfügbar – welches Gerät von welcher Version unterstützt wird, wobei bei diesem Projekt auch der Grad der Unterstützung (von "kaputt" bis "getestet, funktioniert") berücksichtigt werden musste.
Die Reihenfolge der Geräte auf der Webseite wird durch die neue Alternative durchaus etwas verändert, obwohl das als Lineage-Fork nicht unbedingt zu erwarten war. Doch werden teils neue Smartphones wie das FP4 offiziell unterstützt, wo bei LineageOS die Unterstützung noch fehlt, und werden einige alte Telefone wie das HTC One (M8) mit einer aktuellen Androidversion versorgt, die von anderen Projekten längst ignoriert werden.
Ich freue mich über das Projekt sowie über die erhaltene Möglichkeit, der Webseite eine weitere Alternative hinzuzufügen.
Der beachtenswerte langsame Snap-Firefoxstart
Monday, 29. August 2022
Firefox ist in Ubuntu 22.04 ein Snap geworden. Konsequenz ist, dass Nutzer sein Updaten nicht mehr kontrollieren können (völlig unverständlich, aber ein Thema für sich), andererseits Canonical das Bereitstellen von Updates vereinfacht wird. Befürchtete Konsequenz war aber auch, dass Firefox langsamer starten würde. Denn genau das passierte in vorherigen Ubuntuversionen mit Chromium, dessen Snapisierung zu elendig langen Startzeiten führte.
Diese Befürchtung griff Ubuntu – Wie du Firefox als PPA anstelle von Snap einbindest und wann du es tun solltest auf, der Autor verneinte aber ihre Berechtigung. Ich empfand den Artikel als herablassend und kommentierte entsprechend – aber nein, wurde mir versichert, Firefox starte jetzt wirklich immer noch schnell, Snap sei besser geworden. Das hätte der Präambel über die ewigen unqualifizierten Bedenkträger dann wirklich etwas Berechtigung gegeben, so trollig sie sonst auch wirkte. Ich war besänftigt.
Stellt euch mein Erstaunen vor, als ich auf einem Laptop nach einem Upgrade von Ubuntu 20.04 auf 22.04 dann Firefox startete und dieser erste Start keinesfalls schnell war. Er dauerte nicht 3 Sekunden, auch nicht 10, nicht 20; Es dauerte wahnsinnige 40 Sekunden bevor der Browser aufging. Unfassbar.
Nun: Das galt bisher wirklich nur für den allerersten Start nach dem Upgrade. Nachfolgende erste Startvorgänge, auch nach einem Reboot, waren wesentlich schneller. Ursache der Verzögerung könnte ein einmaliger Upgradetask gewesen sein und vielleicht gar nichts mit dem Umstieg auf Snap zu tun gehabt haben. Aber ist es da ein Wunder, dass bei Nutzern der Eindruck entsteht auch das Firefox-Snap wären furchtbar lahm? Wie unglücklich für Snap dieses Upgrade doch lief, sollte es eine Verstrickung mit etwas unzusammenhängendem gewesen sein – zum einen –, aber auch wie unfair die Herablassung, die von Teilen der Ubuntucommunity gegenüber dieser Befürchtung gezeigt wurde. Nicht nur, dass Chromium eben wirklich durch Snaps langsam startete, auch Firefox vermittelt eben doch diesen lahmen Start mindestens als Ersteindruck.
Meine Ersteinschätzung über den Ton des Artikels war sehr wohl berechtigt.
Das wäre ein Kommentar geworden, aber der verlinkte Artikel hat seine Kommentarfunktion deaktiviert.
BenQs ScreenBar
Wednesday, 10. August 2022
Mir wurde die ScreenBar von BenQ zum Testen angeboten. Was ich tatsächlich interessant fand und daher annahm. Die ScreenBar ist eine LED-Lampe, die oben am Monitor angebracht wird. Sie will so konstruiert sein, dass ihr Licht nicht auf den Monitor fällt, sondern den Bereich vor dem Monitor erhellt.
Was mich ansprach: Das soll augenschonend sein. Was ich direkt glauben konnte. Wenn ich nachts vor dem PC sitze, ist das ohne Rücksichtsnahme für meine Augen durchaus problematisch. Denn ist gar kein Licht an, ist der Monitor zu hell (praktisch egal wie dunkel er gestellt wird), wohl weil ich direkt in die einzige Lichtquelle gucke. Gut, man kann das Licht anmachen. Ist aber das Deckenlicht an ist wiederum das zu hell, das schadet meiner Konzentration und reißt mich aus der Arbeit oder dem Spiel raus.
Meine Lösung bisher war eine günstige LED-Plastiklampe, die vor dem Umzug hinter dem Monitor auf dem Fenstersims stand, jetzt hinter mir auf einer Kommode steht. Die mach ich abends an, mit ihrem Funzellicht schafft sie für mich eine gute Helligkeit um nicht abzulenken, aber eben doch ausreichend augenschonend den Raum aufzuhellen.
Aber dafür muss ich eben aufstehen und die Lampe anmachen. Eine Lampe am Monitor wäre direkt zur Hand. Und die ScreenBar hat einen automatischen Dimmer, der sie auf das Umgebungslicht anpasst. Und nicht nur die Helligkeit, auch die Farbtemperatur ist einstellbar. Klang also interessant, als professionelle Lösung anstatt meiner bisherigen improvisierten. Entsprechend war ich erfreut, als die Lampe hier tatsächlich ankam und ich sie an meinen Monitor anbringen konnte.
Der Ersteindruck
Die Verpackung ist nett gemacht, passt dazu, dass die ScreenBar auch nicht günstig ist. Im offenen Karton ist die Lampe, der Halter und ein Kabel gut gepolstert. Richtig nett: Die Knöpfe und Anschlüsse sind in der Verpackung direkt beschriftet, was eine Anleitung fast unnötig macht. Das ist gutes Design.
Auch der Halter ist ziemlich cool und wirkt sehr stabil. Die Konstruktion arbeitet mit einem Gegengewicht. Da wird also nichts geklemmt, sondern die Lampe wird vorne an den Monitorrahmen gehängt. Innen am Plastik ist ein Polster, verkratzen dürfte also auch da nichts. Das Plastik führt zu einem Gelenk mit dem Gegengewicht, das die Lampe dann eben hält. Geschickt, kam auch mit meinem abgerundeten Monitorrücken klar und sollte auch keine Probleme mit glatten Monitorrücken haben, da ist das Gewicht dann weiter unten.
Aber der Rahmen vorne am Monitor reichte in meinen Bildschirm hinein, dessen Rand also etwa 2mm zu schmal ist. Mir war erst nicht klar, ob das stören wird. Tatsächlich aber ist es ein Problem beim Filmsehen: Durch den leichten Druck ist dann an der Stelle die Hintergrundbeleuchtung sichtbar, was bei schwarzen Balken nicht geht. Ich habe daher die Polsterung verstärkt, indem ich diese Schaumpolster für Möbel angeklebt habe. Jetzt ragt die Halterung nicht mehr aus dem dauerhaft schwarzen Bereich des Bildschirms hinaus. Problem teilweise gelöst. Teilweise, denn obwohl nun der Monitorbereich mit Inhalt frei bleibt, ist noch leicht Druck da und führt weiterhin etwas zu diesem für IPS-Monitore typische Durchscheinen der Hintergrundbeleuchtung am Rahmen. Wobei das jetzt stark minimiert und ignorierbar ist. Doch je rahmenloser der Bildschirm, desto problematischer wird das sein.
Einmal angemacht wird direkt deutlich: Tatsächlich blendet die Lampe nicht und reflektiert auch erstmal nicht wahrnehmbar vom Bildschirm. Da funktioniert die interne Konstruktion wohl gut, die das Licht in einem Winkel vom Monitor weg auf den Schreibtisch sendet, nicht aber direkt auf den Monitor oder ins Auge.
Das gilt aber nur bei normal hellen Bildinhalten. Ist das Bild dagegen sehr dunkel sieht man die Reflektion der Lampe durchaus etwas, trotz des internen Lichtwinkels. Dann ist der obere Bereich des Monitors durch das Licht etwas aufgehellt. Natürlich möglich, dass die Polsterverstärkung da den Winkel etwas abgeändert hat und diese Unschönheit ohne nicht bestünde. Für Filme nachts würde ich die Lampe so aber ausmachen.
Das geht über einen der vier Touch-Schalter. Von rechts nach links: Ausschalter, Auto-Dimmer, Farbtemperatur und Helligkeit. Die ersten beiden berührt man einmal kurz zum aktivieren oder deaktivieren, die anderen beiden hält man gedrückt um dann immer in nur eine Richtung das Licht einzustellen. Also: Ich halte einmal gedrückt, und das Licht geht von ganz dunkel auf ganz hell. Loslassen, gedrückt halten, und es geht von ganz hell auf ganz dunkel. Genauso geht es bei der Farbtemperatur in acht Schritten von 2700K nach 6500K, also im Eindruck von rötlich nach weißem Tageslicht.
Ich bin eigentlich kein Fan von solchen Touchinterfaces. Habe aber beim Solo-Stick gelernt, dass ein Vorteil ihre Haltbarkeit ist, was dann wieder sympathisch ist. Hier passen die Berührungsknöpfe auch statt normalen Schaltern, weil die Lampe ja schon etwas locker am Monitor hängt, man sie daher mit wenig Druck bedienen können will. Sie sind also wohl die beste Designalternative gewesen.
Das mitgelieferte leicht abgeflachte USB-Kabel (USB-C zur Lampe, USB-A am anderen Ende) ist mehr als lang genug um zum Monitor zu gehen. Aber der hat bei mir keinen USB-Anschluss. Zum PC runter passte die Länge von 1.50m auch noch, aber viel Reserve ist da nicht mehr.
Einschätzung nach dem Praxistest
Mein Eindruck der Lampe hat sich mit Benutzung gewandelt. Denn es brauchte einen Moment, bis ich mich an sie gewöhnte.
Ich erwartete eine gute Alternative zu der LED-Lampe in meinem Rücken, um nachts die Augen zu schonen. Dafür ist die ScreenBar aber nicht ideal. Denn sie ist für die Dauernutzung nachts mir schlicht etwas zu hell. Ich halte das erhöhte Helligkeitsniveau dann auch nicht für besonders augenschonend, sie wird aber – zumindest in meiner Konfiguration – auch schlicht wahrnehmbar beim Filmschauen.
Aber zu früheren Tageszeiten erwies sich die ScreenBar durchaus als praktisch. Wenn tagsüber wegen der Hitze das Zimmer abgedunkelt war vor allem; Auch wenn es hier abends schon etwas dunkler wurde, es aber noch nicht nacht war. Dann erfüllt sie wohl ihr Ziel, ein gutes Lichtlevel für die Arbeit am Bildschirm zu halten. Da machte ich die Lampe oft an, weil ich sie als angenehm empfand und nicht mehr wie zu Beginn als bewusster Test.
Richtig praktisch war sie für die Arbeit mit Papier vor dem Bildschirm. Mache ich nicht jeden Tag, aber in letzter Zeit war ich etwas häufiger am Skizzieren. Da gibt die Monitorlampe dann eine gute und platzsparende Schreibtischlampe ab. Die habe ich vorher zwar nicht vermisst, aber sie hat mir wohl gefehlt.
Ich müsste allerdings bei meiner Polsterlösung nochmal nachbessern, denn mit der jetzigen bleibt die ScreenBar an meinem Monitor nicht immer gerade (wahrscheinlich ist das Polster zu weich, vielleicht müsste auch das Gegengewicht nun schwerer sein). Generell ist es schade, dass der Halter mit schmalen Rahmen nicht ohne weiteres zurechtkommt, BenQ nicht direkt eine Lösung anbieten konnte. Wobei ich mir außer einem alternativen Halter mit flacherem Plastikstück am Monitor bisher auch keine bessere vorstellen konnte.
Die Nachteile der ScreenBar sind klar: Sie kostet über 100€, sie passt nicht problemlos an jeden Monitor und sie ersetzt in meinen Augen andere Hintergrundbeleuchtungsmittel nicht völlig, gerade nachts. Dafür ist sie relativ schick, die Bedienung komplett unproblematisch und die Helligkeitsanpassung automatisiert. Für einen Bildschirmarbeiter mit geeignetem Monitorrahmen keine schlechte Idee.
Die ScreenBar wurde mir von BenQ zur Verfügung gestellt. Weder BenQ noch eine dritte Partei hatte ansonsten Einfluss auf den Inhalt oder die Veröffentlichung dieses Artikels.
Brainwavzs ProStock-Ohrenpolster für den ATH-M50x
Wednesday, 3. August 2022
Die Ohrpolster von Audio-Technicas M50x fand ich von Anfang an nicht wirklich toll. Nicht im Vergleich zu denen des sehr bequemen Logitech-Kopfhörers, den ich vorher hatte. Das wurde mit etwas Gewöhnung besser, aber nicht gut. Also habe ich sie mit Polstern von Brainwavz ausgewechselt.
Dieses Hybridmodel wollte ich eigentlich haben, aber die Bestellung erreichte mich nicht. Ich bekam das Geld zurück und kaufte ein wenig später bei kleinanzeigen das perforierte Modell – damals das einzige in Deutschland findbare.
Die benutze ich nun schon ein halbes Jahr. Ich bin mit ihnen zufrieden, denn sie sind definitiv bequemer als die mitgelieferten Ohrpolster. Gerade wenn man den Kopfhörer lange auf hat ist es ein angenehmer Unterschied. Jetzt bei der extremen Hitze wird es unter ihnen zwar auch warum, trotz der Perforierung, aber das wäre bei dem Standardmodell sicher schlimmer.
Hier liegt eher ein Problem: Da die Kopfhörer jetzt luftiger sind isolieren sie auch nochmal etwas schlechter. Und Isolation war schon vorher nicht die stärkste Disziplin des M50X. Andererseits testete ich die Isolation der Originalpolster vor kurzem nochmal, bevor ich den Lüfterlärm meines PCs in den Griff bekam, und der Unterschied war nicht ausreichend um den Lärm zu ignorieren. Was im Nachhinein ja eher gut war, brachte es mir doch die Motivation den PC lautlos zu konfigurieren.
Da die Isolation und der Tragekomfort etwas anders ist wird sich sicher auch der Sound verändert haben. Wobei die Klangqualität nicht negativ zu beeinflussen Anspruch des Herstellers ist. Letzten Endes kann ich es nicht bewerten. Mir persönlich fiel kein relevanter Unterschied auf, ich kann die beiden Polster aber auch nicht direkt hintereinander vergleichen. Sie zu wechseln war zwar nicht zu schwierig, aber doch etwas friemelig und dauerte eine Weile.
Nichts negatives beim Klang zu bemerken ist bei so einem Wechsel gut genug, finde ich, zumindest wenn die Polster wirklich bequemer sind. Und das sind sie. Schade, dass die Lieferung aus China so problematisch war.
Das war übrigens die zweite Modifikation des Kopfhörers. Die erste waren Klammern gegen die Sollbruchstelle.
Lüftersteuerung mit fan2go
Wednesday, 20. July 2022
Kommt ihr gut durch die Hitze? Wenn während der Hitzewelle der PC zu sehr brummt könnte eine Anpassung der Lüftersteuerung angesagt sein. Das Programm fan2go ist eine relativ neue Alternative zum altgedienten fancontrol, die leichter zu benutzen ist und ein paar Probleme bezüglich der sich ändernden Lüfter-Indexierung ausräumen will.
Warum sollte man solch ein Programm nutzen und nicht einfach die Fankurve im BIOS festlegen? Tatsächlich sollte man letzteres vorziehen. Aber manchmal hat das Mainboard diese Funktion einfach nicht, oder sie funktioniert nicht richtig. So war es bei mir; Ich hatte den Lüfter des Prozessorkühlers auf 12% runtergeregelt, trotzdem rödelte er relativ laut. Ich wunderte mich darüber ewig, bis ich jetzt darauf kam, dass das Mainboard (ein MSI Z97M-G43) da einfach den Lüfter nie unter 50% fallen ließ. Vielleicht ein fehlgeleiteter Abschaltschutz, sicher aber viel zu laut im Idle. Den Radiatorlüfter (mein System hat eine AIO) an Systemfan zu hängen und den Gehäuselüfter als CPU-Lüfter laufen zu lassen war ein Teil der Lösung meines Geräuschproblems, den Rest erledigt die Lüftersteuerung durch das neue Programm.
Installation
Als recht junges Projekt ist fan2go leider noch nicht in vielen Quellen. Um es zu installieren könnte man es wie in der Readme vorgeschlagen von Github herunterladen und in den $PATH
verschieben:
curl -L -o fan2go https://github.com/markusressel/fan2go/releases/latest/download/fan2go-linux-amd64 chmod +x fan2go sudo cp ./fan2go /usr/local/bin/fan2go # besser als direkt nach /usr/bin/ fan2go -h
Ohne Konfigurationsdatei erscheint nun erstmal eine Fehlermeldung im Terminal, aber immerhin.
Konfiguration
Die Konfiguration ist leider wieder etwas Handarbeit. Man muss wissen, welche Lüfter man steuern will, sie finden und ihnen Temperaturbereiche zuweisen. Immerhin hilft das Programm hier mit einer Übersicht:
onli@fallout:~$ fan2go detect > coretemp-isa-0 Sensors Index Label Value 1 Package id 0 (temp1_input) 43000 2 Core 0 (temp2_input) 41000 3 Core 1 (temp3_input) 43000 4 Core 2 (temp4_input) 40000 5 Core 3 (temp5_input) 43000 > amdgpu-pci-0100 Fans Index Label RPM PWM Auto 1 hwmon0 165 18 false Sensors Index Label Value 1 edge (temp1_input) 43000 > nct6792-isa-0 Fans Index Label RPM PWM Auto 1 hwmon3 0 127 true 2 hwmon3 534 59 false 3 hwmon3 408 64 false 4 hwmon3 1515 255 true 5 hwmon3 0 127 true Sensors Index Label Value 1 SYSTIN (temp1_input) 39000 2 CPUTIN (temp2_input) 127500 3 AUXTIN0 (temp3_input) 38000 4 AUXTIN1 (temp4_input) 70000 5 AUXTIN2 (temp5_input) 127000 6 AUXTIN3 (temp6_input) -60000 7 PECI Agent 0 (temp7_input) 41500 8 PCH_CHIP_CPU_MAX_TEMP (temp8_input) 0 9 PCH_CHIP_TEMP (temp9_input) 0 10 PCH_CPU_TEMP (temp10_input) 0 > acpitz-acpi-0 Sensors Index Label Value 1 hwmon1 (temp1_input) 27800 2 hwmon1 (temp2_input) 29800
In der Ausgabe von fan2go detect
konnte ich meine drei steuerbaren Lüfter finden: Die Einträge hwmon3 unter nct6792 verrieten sich mit der RPM-Angabe. Der bei 1515 stehende konnte nur die Pumpe der AIO sein und muss nur optional gesteuert werden. Es blieben Index 2 und 3 für die Lüfter, was in meinem Fall einmal der Lüfter auf dem Radiator und der im Gehäuse hinten sein musste.
Um die genau zu identifizieren musste ich einmal sudo su
aufmachen und dann die PWM-Regler unter /sys/ mit Werten füttern, z.B. so:
onli@fallout:~$ sudo su Password: # bash [root@fallout onli]# cat /sys/class/hwmon/hwmon3/pwm2 58 [root@fallout onli]# cat /sys/class/hwmon/hwmon3/pwm2_enable 1
Wenn da stattdessen bei pwm2_enable
eine 5 gestanden hätte, müsste noch eine 1 hineingeschrieben werden:
[root@fallout onli]# echo "1" > /sys/class/hwmon/hwmon3/pwm2_enable
Sonst kontrolliert das Mainboard die Lüfter. Genau so lässte sich auch der PWM-Wert erhöhen (0-255), dann dreht ein Lüfter hoch und man kann erkennen welcher welcher ist.
Jetzt mit allen Infos über das System ausgestattet ging es ans Anlegen der Konfiguration. Meine /etc/fan2go/fan2go.yaml sieht so aus:
# A list of fans to control fans: - id: casefan # The type of fan configuration, one of: hwmon | file hwmon: # The platform of the controller which is # connected to this fan (see sensor.platform below) platform: nct6792 # The index of this fan as displayed by `fan2go detect` index: 2 # Indicates whether this fan should never stop rotating, regardless of # how low the curve value is neverStop: false # The curve ID that should be used to determine the # speed of this fan curve: cpu_curve - id: radiatorfan # The type of fan configuration, one of: hwmon | file hwmon: # The platform of the controller which is # connected to this fan (see sensor.platform below) platform: nct6792 # The index of this fan as displayed by `fan2go detect` index: 3 # Indicates whether this fan should never stop rotating, regardless of # how low the curve value is neverStop: false # The curve ID that should be used to determine the # speed of this fan curve: cpu_curve - id: pump # The type of fan configuration, one of: hwmon | file hwmon: # The platform of the controller which is # connected to this fan (see sensor.platform below) platform: nct6792 # The index of this fan as displayed by `fan2go detect` index: 4 # Indicates whether this fan should never stop rotating, regardless of # how low the curve value is neverStop: true # The curve ID that should be used to determine the # speed of this fan curve: pump_curve # A list of sensors to monitor sensors: # A user defined ID, which is used to reference # a sensor in a curve configuration (see below) - id: cpu_package # The type of sensor configuration, one of: hwmon | file | cmd hwmon: # A regex matching a controller platform displayed by `fan2go detect`, f.ex.: # "coretemp", "it8620", "corsaircpro-*" etc. platform: coretemp # The index of this sensor as displayed by `fan2go detect` index: 1 - id: system_package # The type of sensor configuration, one of: hwmon | file | cmd hwmon: # A regex matching a controller platform displayed by `fan2go detect`, f.ex.: # "coretemp", "it8620", "corsaircpro-*" etc. platform: nct6792 # The index of this sensor as displayed by `fan2go detect` index: 1 curves: - id: cpu_curve # The type of the curve, one of: linear | function linear: # The sensor ID to use as a temperature input sensor: cpu_package # Sensor input value at which the curve is at minimum speed min: 30 # Sensor input value at which the curve is at maximum speed max: 80 - id: pump_curve # The type of the curve, one of: linear | function linear: # The sensor ID to use as a temperature input sensor: cpu_package # Sensor input value at which the curve is at minimum speed min: 40 # Sensor input value at which the curve is at maximum speed max: 80
Sie ist simpel abgeleitet von den Beispielen in der Readme. Man erkennt, wie die Zuordnung zu den Indezes und der Plattform der Lüfter funktioniert und dass jeweils ein Lüfter, ein Sensor und eine Kurve gebraucht wird – wobei natürlich zwei Lüfter sich auch eine Kurve teilen können. Zwischen Minimal- und Maximaltemperatur linear zu schalten ist ein sehr simpler Ansatz, kann auch funktionieren, wenn nicht können auch PWM-Schritte angegegen werden. Da erklärt die Githubseite mehr.
Nicht wundern: Die AIO-Pumpe über den PWM-Wert zu steuern macht man nicht immer, oft kann sie auf 100% laufen. Bei meiner alten Corsair H90 aber piepst sie dann zu arg.
Starten
Nun startet man das Programm einfach mit:
sudo fan2go
Das System sollte man nun ordentlich testen, dass es ja nicht überhitzt. Stimmt alles könnte man wie in der Readme vorgeschlagen einen Systemdienst anlegen, ich packte mir den Befehl stattdessen in die /etc/rc.local.
Ich bin mit dem Ergebnis ganz zufrieden, mein System ist deutlich leiser geworden und bei fancontrol wollte die alte Konfigurationsdatei nicht mehr funktionieren. Eine Alternative zu haben ist toll. Ich vermisse aber ein Interface, das die manuelle Konfiguration ersetzt. Müsste ja nicht gleich komplett grafisch sein, schon eine UI im Terminal würde mir reichen.
Wichtiger aber noch: Es fehlt die Unterscheidung zwischen dem Start-PWM-Wert und dem Stop-PWM-Wert, die ja oft sehr unterschiedlich sind, da ein Lüfter viel mehr Energie zum Losdrehen braucht als zum Weiterdrehen. Deswegen sollte die Option neverStop vermieden werden, sie setzt den Start-PWM-Wert als Minimum fest und ist daher für reguläre Lüfter ziemlich laut. Vielleicht der gleiche Fehler wie der meines Mainboards anfangs. Nur für die Pumpe passte das perfekt. Ich hoffe da entwickelt sich das Projekt noch weiter, sodass man die Option auch für Lüfter setzen kann.
Trotz der Einschränkungen finde ich das Programm schon jetzt ziemlich großartig. Vielleicht ist es auch für den ein oder anderen Leser hilfreich, gerade in dieser Phase des Sommers.
Keenetic Hero DSL mit Easybell-Benutzernamen nutzen
Monday, 6. June 2022
Der Keenetic Hero DSL ist ein ziemlich günstiger Router mit Supervectoring, der also auch für die schnellen VDSL-Anschlüsse bis zu 300 Mbit/s geeignet ist. Das ist für ein 80€-Gerät bemerkenswert, die günstigste Fritzboxalternative ist mit dem 7530 bei 150€. Taugt das Ding was? Es gibt bei heise hinter der Paywall einen Artikel darüber, dessen verfügbare Zusammenfassung positiv klingt.
Im Zusammenspiel mit easybell läuft man mit der aktuellen Firmware 3.07 allerdings anfangs unweigerlich in ein Problem: Der Einrichtungsassistent will den VDSL-Benutzernamen nicht akzeptieren. Der hat nämlich, wie man auch in der Einrichtungs-Hilfeseite sehen kann, beim Suffix %11
ein Prozentzeichen. Und das sei invalide.
Es gibt zwei Lösungen.
Man kann entweder mit den Browser-Devtools beim Schritt mit Providerauswahl, Name und Passwort die Daten eintragen und dann das disabled="true"
aus dem HTML-Code des Weiter-Buttons entfernen. Danach lässt sich der klicken und die Daten scheinen sauber übertragen zu werden.
Alternativ bricht man den Einrichtungswizard ab. Dann wird die normale Routerverwaltung aufrufbar. In ihr lässt sich der DSL-Provider manuell konfigurieren, die Einrichtung ist ziemlich einfach und lässt sich den folgenden Screenshots entnehmen:
Man setzt also das VDSL VLAN auf 7, die Authentifizierung auf PPoE und da Benutzername und Passwort auf die von easybell genannten Werte. Alle anderen Haken bleiben wie im Standard. Danach sollte die VDSL-Verbindung klappen.
Bei mir ging es erstmal nicht, das lag aber an einer falschen Verkabelung der Telefonbuchse und wurde von einem Techniker behoben, da konnte der Router nichts für. Jetzt funktioniert es, vom Ersteindruck her einwandfrei.
Laut (sehr schnellem und netten) Keenetic-Support soll der Bug übrigens mit Firmware 3.8 behoben werden, dann bräuchte es diesen Workaround nicht mehr.
Aus dem 3D-Drucker
Monday, 16. May 2022
Ich habe mir von einem Freund zwei Dinge 3D-drucken lassen. Was man mit solch einem Drucker anfangen kann ist ja nicht immer so ganz offensichtlich, ich fand diese beiden Objekte schöne Beispiele.
Klammer für ATH-M50X
Der M50X soll einen Designdefekt haben. Die Ohren können nach innen geklappt werden, mit der Zeit breche da ein Plastikhalter und sie klappten auch nach außen – was sie dann unnutzbar machen würde. Dagegen soll diese Klammer helfen, die vorsorglich um die zukünftige Bruchstelle angesteckt wird. So sieht das bei mir aus:
Es ist allerdings das zweite Klammerset, beim ersten sind die Klammern selbst nach einer Weile gebrochen. Ich bin gespannt, ob die neuen (die etwas stabiler wirken) besser halten oder ob das Konzept einfach nicht dauerhaft funktionieren kann.
Wäscheständerstabhalter
Bei meinem Wäscheständer haben sich schon zwei Stäbe gelöst. Es gibt da verschiedene Möglichkeiten die wieder anzubringen, mit einem Seil beispielsweise geht das ganz gut:
Oder man druckt ein Reparaturteil, das sich am Rahmen des Ständers hält und den Stab aufnimmt. Ich bin da auf thingiverse fündig geworden. Es gibt verschiedene Ansätze, wobei ja auch die Maße zum eigenen Gerät passen müssen. Das war bei diesem der Fall bei mir, der mir auch als eine der geschicktesten Lösungen erschien.
Auf dem Bild kann man sehen, dass ich noch mit etwas Kleber den Stab fixiert habe.
Der Drucker selbst kostet etwas, das Ausdrucken dann nicht mehr viel. Solche Kleinteile zu drucken ist daher schmerzlos – und ich freue mich daran, Zeug zu reparieren statt es wegschmeißen zu müssen bzw es beim Kopfhörer evtl länger zu erhalten.
Das perfekte Blogsystem
Wednesday, 11. May 2022
Ich fand mich bei einem Gedanken: Wie sähe das perfekte Blogsystem aus? Mit Serendipity bin ich mit dem hier laufendem klassischen PHP-Blogsystem ziemlich vertraut, mit ursprung habe ich mich an einem auf Ruby/Sinatra-basierendem Blogsystem mit ein paar alternativen Ideen versucht. Ich kenne Grundzüge von anderen Systemen wie Jekyll, Wordpress und ProcessWire, außerdem habe ich zwei Generatoren für statische Seiten geschrieben. All diese Lösungen haben Stärken und Schwächen, aber gibt es eine perfekte Kombination für Blogs?
Statisch und dynamisch
Wenn vom Leser eine Blogseite aufgerufen wird sollte diese nicht vom System dynamisch gerendert werden. Es sollte eine statische HTML-Seite sein, die der Webserver direkt ausliefern kann. Dem nahezukommen, das ist was die Cache-Plugins bei Wordpress und Serendipity versuchen, was aber nie optimal funktionieren kann wenn das Grundsystem dynamisch ist. Der Vorteil davon ist Performance: Zum einen geht der Server viel später in die Knie wenn ein Artikel mal populär wird, zudem ist im Normalbetrieb der statische Blog immer schneller als ein dynamisch generierter.
Das Blogsystem sollte aber nicht einfach ein statische Seiten auswerfender Generator sein. Denen fehlt zu viel was einen Blog ausmacht: Kommentare, Trackbacks/Pingbacks, auch das Backend mit seinen Moderatorfunktionen, dem Artikeleditor und der Mediendatenbank. Das sind nur ein paar der wichtigsten Funktionen, auf die ein perfektes System nicht verzichten würde. Dazu kommen beispielweise Dinge wie die Unterstützung mehrerer Nutzer, Veröffentlichungsworkflows, Rechteverwaltung und sicher noch viel mehr, was ich teilweise unten beschreibe.
Das perfekte Blogsystem wäre also zweigeteilt: Im Frontend würden statische Seiten generiert, aber parallel liefe ein dynamisches Backend, das Aufgaben wie das Entgegennehmen von Kommentaren übernimmt.
Stabilität, Erweiterbarkeit und Kompatibilität
Ein perfektes System wäre stabil. Damit meine ich inbesondere den Code und seine Sprache. PHP mit seinen fortwährenden Kompatiblitätsbrüchen ist beispielsweise eine besonders instabile Grundlage, die fortlaufend Entwicklungsarbeit verlangt. Das ist absurd für die Webumgebung, ist die doch grundsätzlich stabil: Selbst vor 30 Jahren erstellte HTML-Seiten können Browser von heute noch anzeigen. Es wäre also viel gewonnen, wenn das System um den Blog zu erstellen ebenfalls einmal gebaut werden könnte und dann gleichsam in 30 Jahren noch HTML/CSS und JS ausspuckt, dann zwar auf veraltetem Stand, der aber sicher noch verstanden werden würde.
Gleichzeitig sollte das System einfach erweiterbar sein. Was derzeit gute Blogsysteme auszeichnet ist ihr Pluginsystem und die Themebarkeit, sodass Entwickler mit wenig Aufwand das System anpassen können. Neue Logik hinzufügen und mit einem Theme die HTML-Ausgabe bzw das Design anpassen zu können, das ermöglicht die Anpassung an sich ändernde Zeiten ohne dauernd der Kern überarbeiten zu müssen.
Weil Blogs im Zweifel schon existieren bräuchte es im Sinne der Stabilität Importer. Die müssten Artikel so importieren können, dass ihre URL sich nicht ändert, wobei unter der alten URL Weiterleitungen auf eine neue sein könnten und Übersichtsseiten meiner Meinung nach nicht unbedingt erhalten bleiben müssen. Auch die Kommentare würden importiert. Bei der Frage wo die Daten dann landen bin ich zwiegespalten: Was ist perfekter, ein System das viele Datenbanken unterstützt oder eines, das sich auf SQLite konzentriert?
Umfassende Kompatibilität bedeutet auch die vollständige Unterstützung von Unicode. Wobei die Realität nunmal ist, dass alte Blogs in anderen Encodings geschrieben wurden. Ein perfekter Importer würde das konvertieren können.
Viele Standardfunktionen
In die großen Blogsysteme sind tausende Arbeitsstunden geflossen, in die meisten kleinen bestimmt immer noch hunderte. Entsprechend groß ist ihr Umfang. Schauen wir uns nur mal an was diesen Artikel hier von einem rohen handgeschriebenen HTML-Artikel unterscheidet.
So ist er nicht einfach in HTML geschrieben, sondern ist der rohe Text eine Mischung aus HTML und einer individuellen Markupsprache. Mit ihr sind Links einfacher setzbar. Umbrüche brauchen dank den nl2p-Plugin keine HTML-Tags. Zum Formatieren des Textes kann ich HTML oder die Markupsprache schreiben, aber alternativ sind hier auch Buttons beim Editor die das übernehmen können. Andere Systeme (und Serendipity optional) haben eine WYSIWYG-Ansicht oder eine Autovorschau, sodass der rohe Text schon beim Schreiben umgewandelt wird. Serendipity mit meinen Einstellungen hat dafür immerhin eine verlässliche Vorschau per Buttonklick, sodass ich Layoutfehler sehen kann bevor ich Artikel veröffentliche.
Im <head>
ist in der Artikelansicht eine Anweisung für Suchmaschinen den Artikel zu indexieren, auf Übersichtsseiten dagegen wird das indexieren verboten. Es sind Tags gesetzt um den Artikel auf Twitter etc hübscher zu machen wenn er verlinkt wird, dabei wird auch ein Vorschaubild gesetzt, falls ich diesem Text noch ein Bild aus der Bibliothek hinzufüge wird dieses dafür benutzt werden. Thema Bilder: Die sind responsiv, kleine Bildschirme bekommen so kleinere und sparen Bandbreite.
Beim Schreiben kann ich komfortabel Schlagwörter und Kategorien zuweisen. Ich könnte den Artikel als Entwurf speichern oder die Veröffentlichung auf einen Moment in der Zukunft festsetzen. Er könnte dann sogar passwortgeschützt werden. Veröffentliche ich ihn, werden automatisch Trackbacks ausgesendet, was ich im Backend aber auch abstellen kann.
Gibt es nachher Kommentare kümmern sich direkt drei Plugins mit verschiedenen Ansätzen darum Spam auszusondern. Die sind so gut, dass Spam nur selten durchkommt. Wenn doch bekomme ich eine Email, wie auch bei legitimen Kommentaren. So kann ich auf die schnell reagieren. Eingehende Kommentare werden in einer Thread-Ansicht dargestellt, sodass Kommentatoren einander antworten können. Und natürlich gibt es für die Kommentare einen RSS-Feed, wie auch für die Artikel selbst und alle Kategorien.
Würde ich den Artikel dagegen in ursprung schreiben wäre der Editor komfortabel im Frontend auf der Startseite, der Kontextwechsel in ein Backend unnötig. Auch das ist eine Qualität, die ein perfektes System abdecken oder trumpfen müsste.
Und so ginge das jetzt sicher noch eine Weile weiter wenn ich alles aufzählen wollte. Man sieht schnell wie breit dieses Feld ist, wie viel ein neues System unterstützen müsste um auch nur gleichwertig zu sein.
Konkurrenz und Entwickler
Es gibt ziemlich viele Blogengines und CMS. So viele, dass es unmöglich ist einen Überblick zu behalten. Gleichzeitig gibt es mit Wordpress einen absoluten Gewinner, mit dem das halbe Internet läuft. Tatsächlich sehe ich das als Faktor: Ein perfektes System würde in einer Umgebung existieren in der es sichtbar werden kann, sodass seine Existenzberechtigung auch klar wird. So erwarte ich fast, dass ein Kommentator mir ein System benennen wird was den oben beschriebenen Ansatz teilt.
Und klar: Ein perfektes Blogsystem würde von einem aktiven Team netter und fähiger Entwickler geschrieben. Es wäre so perfekt, dass ich es nicht schreiben müsste (und auch nicht könnte). FOSS wäre es selbstverständlich auch. Sein Code wäre minimal, hätte keine instabilen Abhängigkeiten und wäre hervorragend lesbar.
Fazit
Wie seht ihr das, was habe ich vergessen? Ist was ich oben beschreibe überhaupt perfekt oder hätte sogar das beschriebene schon Macken?
Natürlich juckt es mich in den Fingern mich an einem solchen System zu versuchen. Dabei wäre das Ergebnis unzweifelhaft nicht perfekt – viele der Details wie die richtige Unterstützung der Markupsprachen und ob man das Markup oder das HTML speichert haben nicht die eine richtige Lösung – und einige der Anforderungen oben wie die Importer sind eine fast umstemmbare Mammutaufgabe, aber die Grundidee des statischen Frontends und dynamischen Backends umzusetzen hätte was. Sie hat generell derzeit etwas Aufwind, so geht Jamstack in die gleiche Richtung, ich sah in dem Kontext nur noch keine Umsetzung eines vollständigen Blogsystems.
Aber selbst wenn ich alle meine anderen Projekte zur Seite legen und mich der perfekten Blogengine widmen wollte: Scheiterte es nicht schon an der Sprachwahl? PHP wäre hier wegen seiner Instabilität offensichtlich Unsinn, wobei sein riesiger Vorteil der Hosterunterstützung damit wegfällt und schon deswegen eine Lösung ohne PHP kaum perfekt sein kann. Ich liebe Ruby, aber auch diese Sprache liefert nicht die Stabilitätsgarantien die das Projekt bräuchte. Ob Python da besser wäre erscheint nach dem Sprung auf Python 3 unwahrscheinlich. Vielleicht bräuchte es statischere Sprachen wie Rust, C oder Golang, aber komfortabel für Webanwendungen sind die nicht – und bei ihnen stolpere ich immer wieder über Projekte, die sich auf meinem System nicht kompilieren lassen. Stabilitätsgarantien in meinem Sinne gibt es da also nicht.
Was bleibt da? Etwas Lispiges wie Erlang, Common Lisp oder Racket? Etwas altgedientes wie TCL oder Perl? Eine Nischenlösung wie D?
Da erscheint direkt der erste Schritt zu schwierig.
Man nehme trotzdem den Gedanken mit, dass unsere Blogsysteme ziemlich gut, bessere Lösungen aber vorstellbar sind.
ProtonUp-Qt erleichtert das Protonupdate noch mehr
Monday, 2. May 2022
Mit protonup installiert man im Terminal die neueste Version von Proton-GE, was eine aktuellere und verbesserte Variante von Proton ist. Oft lassen sich so mehr Windowsspiele besser unter Linux spielen. ProtonUp-Qt ist eine GUI für dieses Kommandozeilenprogramm und erleichtert die Bedienung doch erheblich. Zumindest das Entfernen alter Versionen ist damit einfacher. So sieht es aus:
Nett auch, dass damit trotz des Namens nicht nur Proton aktualisiert werden kann. Sondern es kann auch Luxtorpeda, Boxtron und Roberta installieren. Das sind jeweils Helferprogramme, die sich ähnlich wie Proton in Steam vor die Spiele schalten und sie dann durch Auswechseln der Engine (Luxtropeda, Roberta) bzw des Emulators (Boxtron) verbessern.
Da ProtonUp-Qt als AppImage von der Webseite heruntergeladen kann läuft es problemlos auf jeder Linuxdistribution, Nutzer müssen es nicht selbst kompilieren oder warten bis es in die Quellen kommt.