The latest posts in full-text for feed readers.
Unser Haushalt hat die lokale Tageszeitung LVZ seit mindestens 50 Jahren abonniert. Vor einigen Wochen haben wir das Abo gekündigt.
Ein Punkt - wenn auch der kleinere - war, daß die Zeitung vormittags zu unregelmäßigen Zeiten zugestellt wurde. Ich lese die Zeitung beim Frühstück um 6:45, und in den letzten Jahren verschob sich die Zustellung von 6:30 auf 7:00, 7:30, 8:30. Manches Wochenende kam sie sogar erst Mittag, viel zu spät selbst für das späte Frühstück am Wochenende.
Der zweite aber viel schwerwiegendere Punkt war die abermalige Verringerung des lokalen Zeitungsinhalts. Ursprünglich gab es einen Wurzener Lokalteil, der schon vor sehr vielen Jahren mit dem Grimmaer Teil zusammengelegt wurde und seitdem der Muldentaler Lokalteil war.
Nun sollten offenbar noch mehr Redakteure gespart werden, und der Muldentaler Lokalteil wurde zum Lokalteil des ganzen Landkreises "Leipziger Land" zusammengefasst. Dadurch bekamen wir Nachrichten aus Ecken des Kreises, die uns überhaupt nicht interessieren - aber viel weniger Nachrichten aus unserem Umkreis.
Wir haben das LVZ-Tageszeitungsabo deshalb gekündigt, aber ein neues für Freitag+Sonnabend abgeschlossen (hauptsächlich der Todesanzeigen wegen).
Inzwischen probiere ich mich durch die überregionalen Wochenzeitungen durch, denn die haben zwar genausowenig regionale Nachrichten wie die LVZ, dafür aber besser und tiefer recherchierte überregionale Nachrichten.
Published on 2024-10-27 in leben
5 Jahre nach Projektstart haben wir endlich einen Glasfaseranschluss bekommen, und zwar mit der enviaTel als ISP.
Kurz nach der Umstellung bemerkte ich, daß SSH-Verbindungen nach einiger Zeit unterbrochen wurden und hängen blieben - anfangs konnte man sie normal benutzen, aber dann reagierten sie nicht mehr auf Eingaben.
Als Router bekamen wir eine Fritzbox 5530 Fiber, und diese machte ich auch erstmal für das Problem verantwortlich.
AVM selbst dokumentiert, daß FritzBoxen Verbindungen nach 15 Minuten trennen.
Weiterhin gibt es im Netz viele Berichte über dieses Problem, allerdings sind die meisten schon mehr als 15 Jahre alt:
lt. support ist der timeout der fritzbox hochoptimiert und kann daher nicht per einstellung geändert werden.:-Ö
Eine FRITZ!Box macht nach 15 Minuten TCP-Verbindungen einfach zu.
Bevor ich mit an den enviaTel-Support wandte, wollte ich aber erstmal genauere Daten haben.
Der Blogpost My ISP Is Killing My Idle SSH Sessions. Yours Might Be Too. verwies auf das Tool NAT-TCP-test, dessen Server aber leider nicht mehr läuft. Das Kompilieren des Codes auf dem Server war mir zu aufwändig, weshalb ich eine Alternative suchte.
Zuerst probierte ich es manuell, schwenkte dann aber schnell auf einen Automatismus um:
$ date && ssh cweiske.de "sleep 240; date"
Fr 20. Sep 10:25:30 CEST 2024
Fr 20. Sep 10:29:30 CEST 2024
Die aktuelle Zeit wird ausgegeben, dann die SSH-Verbindung aufgebaut, einige Sekunden gewartet und die Zeit auf dem Server ausgegeben. Wenn die Verbindung zwischendurch gekillt wird, wird das 2. Datum nicht zu sehen sein.
Den Befehl startete ich mit unterschiedlichen Wartezeiten in mehreren Shells und bekam 300 Sekunden - exakt 5 Minuten - als Grenze heraus. 300 Sekunden waren ok, 301 nicht mehr.
Da die FritzBox untätige Verbindungen erst nach 15 Minuten trennt, konnte ich sie als Problemursache ausschließen.
Nicht nur SSH machte Probleme, sondern auch andere Programme zeigten Fehlverhalten:
Das native E-mailprogramm auf dem DM7080HD-Satellitenreceiver blieb regelmäßig hängen und konnte auch mit dem sonst üblicherweise funktionierendem Programm-verlassen-und-wieder-reingehen keine neuen Mails empfangen.
Im Android-Emailprogramm K-9 Mail konnte ich keine neuen E-Mails mehr abholen bis ich es hart beendet und neu gestartet hatte.
Das Android-Synchronisationstool DAVx5 zeigte Fehlermeldungen an:
Weicher Fehler (maximale Anzahl an Wiederholungen erreicht)
Ich schilderte dem enviaTel-Support mein Problem. Der erläuterte, daß mein Internetanschluss Teil eines Carrier-Grade NAT (CG-NAT) ist. Das bedeutet, daß der Router keine echte öffentliche IPv4-Adresse bekommt, sondern nur eine enviaTel-interne. Beim Test mit ip.cweiske.de bekam ich die 212.99.194.23 als öffentliche IP angezeigt, während die FritzBox die externe IP 100.65.240.42 hatte.
CG-NAT verhindert zum einen Verbindungen aus dem Internet auf den Router (VPN ade) - und zum anderen heißt CG-NAT, daß es noch eine 2. Routerebene gibt, die IP-Verbindungen von der enviaTel-internen IP auf die öffentliche mappt.
Der Support bot mir an, zu Diagnosezwecken auf eine echte öffentliche IPv4-Adresse umzustellen. Sobald das getan war, waren die Verbindungsprobleme weg - SSH-Verbindungen blieben sogar mehr als eine Stunde offen.
Eine FritzBox im Jahr 2024 tötet inaktive SSH-Verbindungen also nicht nach 15 Minuten. Das früher mal existierende Problem existiert nicht mehr.
Ich verwies den Support auf Abschnitt 5 der RFC 5382:
REQ-5: If a NAT cannot determine whether the endpoints of a TCP connection are active, it MAY abandon the session if it has been idle for some time. In such cases, the value of the "established connection idle-timeout" MUST NOT be less than 2 hours 4 minutes. The value of the "transitory connection idle-timeout" MUST NOT be less than 4 minutes.
Das ist genau dasselbe Problem, das ato im oben verlinkten Blogbeitrag hatte.
Zum Schluß habe ich mich mit der enviaTel darauf geeinigt, daß ich die echte IPv4-Adresse kostenlos bekomme bis das Problem behoben ist (statt üblicherweise 3€/Monat).
weitere Stichwörter: NAT-Keep-Alive
Published on 2024-10-22 in network
Das Wurzener Gymnasium nutzt beste.schule als digitales Notenbuch. Dankenswerterweise bietet die Plattform eine dokumentierte API und im Benutzerbereich die Möglichkeit, ein Zugriffstoken zu erstellen.
Damit kann man dann nutzen um sich z.B. die Noten der Kinder direkt im Feedreader anzeigen zu lassen:
Der Code des Besten Notenfeed liegt auf meinem git-Server und auf Codeberg.
Auch auf: Mastodon.
Published on 2024-09-17 in leben
Immer mal wieder sind Waschmaschine oder Trockner fertig, aber wir vergessen danach zu schauen und nehmen die Wäsche dann zu spät raus. Idealerweise würde uns das Gerät Bescheid sagen wenn es fertig ist, aber bei uns sind weder Waschmaschine noch Trockner mit Netzwerkfähigkeit ausgestattet.
Nachdem ich den Shelly Plug S in den Volkszähler eingebunden hatte kam ich auf die Idee, daß ein Script einfach regelmäßig prüfen könnte, ob das Gerät in den letzten X Minuten Strom verbraucht hat und jetzt keinen mehr verbraucht. Das wäre das Signal, daß es fertig ist und der Trigger zum Verschicken der Benachrichtigung.
Das Ergebnis ist das Script washing-finished, welches auf meinem Git-Server und auf Codeberg zu finden ist.
Ich lasse es alle 5 Minuten per cron laufen; es prüft den Stromverbrauch der letzten 20 Minuten. Wenn der über 5 Watt war und jetzt unter 5 Watt liegt, dann beendet sich das Script mit Exitcode 0. Dadurch kann man es mit && mit dem nächsten Script verknüpfen:
*/5 * * * * /usr/local/src/washing-finished-vz/washing-finished.php 03baab00-6d01-11ef-829a-7bbe8571431b && xmppc -m message chat cweiske@cweiske.de "Waschmaschine fertig"
Das Handy zeigt das ganze dann an:
Auch auf: Mastodon.
Published on 2024-09-15 in hardware
This week the GameStick Fans community reached a milestone: Of the 188 games that were once available for the PlayJam GameStick, 163 have been archived and only 25 remain missing. That's 86.7%; a huge success for the project that started in 2024-04.
The lack of a GameStick community meant that nobody had backed up the available games before PlayJam announced the micro console's death in 2017.
After collecting cache files from GameSticks, 37 games could be downloaded from their AWS S3 URLs without authentication.
Another way to get the games is to contact the developers, but we had only limited success in getting answers to our e-mails, let alone .apk that the developers often did not have anymore.
Extracting installed games from existing GameSticks was the third option to get the game .apk files into our hands. It took a while and quite some effort until we were able to copy files off GameSticks - the devices were locked down and allowed neither file access nor sideloading.
The following people helped by copying games off their GameSticks or contacting developers to get .apks directly from them:
We do not yet have the .apk files for the following GameStick games:
# | Game name | Developer |
---|---|---|
1 | Animalz: Super Squad | InvaderGames |
2 | Baa Baa Bomber | RatJar Games |
3 | Beast Boxing Turbo | GoodHustle |
4 | Canabalt HD | Kittehface Software |
5 | CR Footy | Sacred Duck Games |
6 | Crumble Zone | Rebel Twins |
7 | CUBISTIC | Pytebyte |
8 | Dead Rushing | Dancing Cat Development |
9 | Dr. Bulbaceous Puzzle Solver | Wetgenes |
10 | EDGE | Mobigame |
11 | Finger Hoola+ | Plantpot |
12 | Furfur and Nublo | DevilishGames |
13 | Fuz Rush | Jet Stone Studios |
14 | Groundskeeper 2 | OrangePixel |
15 | Nimble Quest | Nimblebit |
16 | Orborun | Tiny Lab Productions |
17 | Pix'N Love Rush | Advanced Mobile Applications |
18 | RED | Knife Media |
19 | Sci-Fighters | Headup Games |
20 | ShaqDown | One Spear |
21 | SpaceCat | Platty Soft |
22 | Space Grunts | OrangePixel |
23 | Space Vermin | GameDisciples |
24 | Usagi Yojimbo | Happy Giant |
25 | Wasteland Bar Fight | Kybernesis |
If you have a GameStick with one or more of this games - follow the apk rescue instructions, or ask for help in chat.
The following games have been backed up and archived in the GameStick library at the Internet Archive.
Recent gameplay videos can be found on Wayne’s Gaming Den "PlayJam GameStick" playlist
Published on 2024-09-08 in gamestick
Ich bin bei meinem Stromanbieter Naturstrom auf einen flexiblen Tarif umgestiegen und muss deshalb jeden Monat den aktuellen Zählerstand melden, weil der kWh-Preis jeden Monat ein anderer ist.
Den Stromverbrauch erfasse ich bereits mit dem Volkszähler, d.h. Daten vom Stromzähler werden über einen USB-Infrarot-Lesekopf mit vzlogger ausgelesen, der die Daten an die middleware sendet, die sie in die Datenbank schreibt. Die Anzeige im Browser erledigt das Frontend.
Das Frontend zeigt allerdings nur relative Werte wie den aktuellen Verbrauch in Watt oder den Tagesverbrauch in kWh. Der SML-Zähler (Iskra MT175) liefert den absoluten Wert (1-0:1.8.0), und dieser steht auch in der Datenbank drin:
SELECT FROM_UNIXTIME(timestamp / 1000) AS `date`, `timestamp`, `value`
FROM `data` WHERE `channel_id`=2
ORDER BY `timestamp` DESC LIMIT 20
date | timestamp | value |
---|---|---|
2024-08-31 15:55:53 | 1725112553327 | 38402731.4 |
2024-08-31 15:50:52 | 1725112252638 | 38402711 |
2024-08-31 15:45:53 | 1725111953496 | 38402691.3 |
Im Wiki steht dazu:
In der Tabelle unter dem Graphen wird der absolute Zählerstand mit angezeigt wenn in den Kanaleigenschaften der Initialwert eingetragen ist (Zählerstand bei Inbetriebnahme des Volkszähler).
Ich habe den Kanal bearbeitet und bei "Initialverbrauch" eine 0 eingetragen. Nach 5 Minuten wurde mir der Gesamtverbrauch angezeigt, der allerdings zu niedrig war.
Nachdem ich die Differenz von aktuellem zu angezeigten Wert eingetragen hatte (8241) bekam ich den richtigen Wert angezeigt:
Published on 2024-08-31 in haus
To make space for a Linux installation, I tried to shrink the native MacOS partition that occupied the whole hard disk with the disk utility on macOS Monterey 12.7.6, both in normal and in recovery mode. It always failed:
APFS-Datenstrukturen verkleinern
Fehlercode beim Ändern der Größe des APFS-Containers: 49187
Bei der Größenänderung der Strukturen des APFS-Containers ist ein Problem
aufgetreten. : (-69606)
Aktion fehlgeschlagen ...
As usual with MacOS: The UI looks sleek, but once you try to do something more sophisticated than viewing an image, you'll stumble over unfixable errors.
There were no official documents describing this problem, and the Apple forums were full of "helpful" people repeating the question and then telling the user to reboot.
A ticket for the Asahi Linux installer had the solution:
- Boot into recovery and open a terminal
- diskutil unmountdisk /dev/disk3
- fsck_apfs /dev/disk3 (and hit y in response to the various prompts)
Published on 2024-08-23 in mac
One of our customers at work uses a TYPO3 CMS to manage the website's content, and files are stored on a S3-compatible MinIO server running on a files. subdomain. Uploading and using a .vtt subtitle file for a .mp4 video did not work - the video played, but the subtitles were not available.
Firefox showed the following (German) error:
Quellübergreifende (Cross-Origin) Anfrage blockiert:
Die Gleiche-Quelle-Regel verbietet das Lesen der externen Ressource auf
https://files.example.org/video.mp4.
(Grund: CORS-Anfrage schlug fehl). Statuscode: (null).
In the network tab it showed Not same-origin
.
Chromium's error message in English:
Unsafe attempt to load URL https://files.example.org/subtitles.vtt from frame with URL https://www.example.org/. Domains, protocols and ports must match.
At first I thought the MinIO server did not send CORS headers, but it automatically sets them already:
Your application has a bug - we support CORS by default on all requests. On the browser or your client you need to set the valid Origin: HTTP header
CORS headers were a red herring.
It turned out that the HTML <video> tag has a crossorigin attribute. Setting it to anonymous fixed the issue and subtitles were loaded:
]]>
Published on 2024-08-23 in html
Kind #2 hat sich letztens das Lego-Set 77013 "Indiana Jones: Escape from the Lost Tomb" gekauft und aufgebaut. Bei näherer Inspektion war auf einer der Säulen ein Bild von C3-PO und R2-D2 zusehen.
Am Anfang tat ich das als lustige Referenz ab, aber dann kam mir der Gedanke, daß die Lego-Entwickler das bestimmt nicht einfach so selbst gemacht hatten. Beim Erneuten anschauen der Tempelszenen in "Jäger des verlorenen Schatzes" entdeckte ich die beiden Star Wars-Protagonisten auf einer Säule - im Film sind die allerdings nur für eine Sekunde deutlich zu sehen.
Published on 2024-08-22 in video
One of our customers at work uses AWS CloudFront in front of a TYPO3 v11 installation. Clearing the frontend and backend cache in the TYPO3 backend fails:
403 ERROR
The request could not be satisfied.
Request blocked. We can't connect to the server for this app or website at this time. There might be too much traffic or a configuration error. Try again later, or contact the app or website owner.
If you provide content to customers through CloudFront, you can find steps to troubleshoot and help prevent this error by reviewing the CloudFront documentation.
Generated by cloudfront (CloudFront)
Request ID: 2342xxx
The problem occured only in Firefox, but not Chromium.
Clearing the caches from within the backend are HTTP POST requests to
https://example.org/typo3/record/commit?token=xxx&cacheCmd=pages
and
https://example.org/typo3/record/commit?token=xxx&cacheCmd=all
I copied the request as curl command and through trial-and-error narrowed it down to the following minimal example:
$ curl -i 'https://example.org/typo3/record/commit?token=xxx&cacheCmd=pages'\ -X POST\ -H 'Content-Type: multipart/form-data; boundary=2'\ --data-binary $'2--' HTTP/2 403
.. but it worked as soon as there was a letter in the form boundary:
$ curl -i 'https://example.org/typo3/record/commit?token=xxx&cacheCmd=pages'\ -X POST\ -H 'Content-Type: multipart/form-data; boundary=2a'\ --data-binary $'2a--' HTTP/2 302
The customer's administrators told me that a web application firewall (WAF) was activated, and that the rule AWS#AWSManagedRulesSQLiRuleSet#SQLi_BODY is the one blocking the request.
AWS support told me that since the requests with a numbers-only form boundary appear as --2342 on the wire, it looks like an SQL injection where the rest of the SQL was commented out with two dashes. This is something they want to block, and thus the WAF rule would stay as it is.
They will not fix their rule and advise us to build an own rule with higher priority that will give such requests a green light.
Cache clear requests with Chromium always worked because it uses multi-part form boundaries that have the "WebKitFormBoundary" prefix, e.g. ------WebKitFormBoundarynSAzt2srqKsb9dvj--. Firefox has no such prefix and will sometimes generate boundaries with numbers only - especially when there are no POST data, like here with the cache clear requests.
Published on 2024-08-21 in typo3