Sonntag, 6. Juni 2021

PHP-Scripts mit Xdebug profilen

Einleitung: Xdebug: Documentation » Profiling

Hierzu muss man PHP Xdebug auf seinem System installiert haben. Anschliessend lässt man ein PHP-Script folgendermassen laufen:

$ php -d xdebug.profiler_enable=On index.php

Nachdem das Script durchgelaufen ist, findet sich unter /tmp eine Datei im Namensformat cachegrind.out.%ZUFALLSNUMMER%. Bei mir war die Datei satte 140MB gross.

Doch was man nun damit? Zuerst einmal auf den Mac kopiert, dann mit qcachegrind (eigentlich: kcachegrind) analysiert. Dieses installiert man sich mit MacPorts:

# port install qcachegrind

Mittels Spotlight sucht man nach „qcachegrind“ und startet die präsentierte App. Man wählt cachegrind.out.%ZUFALLSNUMMER% und erhält folgendes zu Gesicht:

image-10252

Tags: , , , , , , ,
Labels: Web

Keine Kommentare | neuen Kommentar verfassen

Donnerstag, 27. Mai 2021

EdgeRouter ER-X wird mit aktiviertem hwnat bei Facetime-Anrufen instabil

Seit einiger Zeit fällt mir auf, dass FaceTime Video-Anrufe von mir (Fiber7, 1 Gbit/s symmetrisch) zu einem Bekannten (upc, mit ein paar 100 MBit/s up- and down, best effort) ruckeln und stocken.

Die Probleme beginnen wenige Sekunden nach der Etablierung des Anrufs. Symptome:

  • Pings von mir aus an die öffentliche IP-Adresse des Bekannten liegen normalerweise im 20-30ms Bereich. Während Facetime-Anrufen ist das in ca. 60-70 Prozent der Fälle weiter so, dann aber kommt es vor, dass die Latenz mehrerer aufeinanderfolgenden Pakete auf bis zu 600ms hochschnellt. Es kommt auch immer wieder vor, dass Ping-Pakete komplett verloren gehen.
  • Smokeping auf die öffentliche IP-Adresse des Bekannten zeigt einen besorgniserregenden Packet Loss.
  • Der Endpunkt eines OpenVPN-Tunnels beim Bekannten vermeldet zur selben Zeit wiederholt folgende Warnungen:
    Thu May 27 21:44:10 2021 Authenticate/Decrypt packet error: bad packet ID (may be a replay): [ #33668492 / time = (1621559394) Fri May 21 03:09:54 2021 ] -- see the man page entry for --no-replay and --replay-window for more info or silence this warning with --mute-replay-warnings

Screenshots:

image-10241

image-10242

Die (triviale) Lösung: Auf dem EdgeRouter ER-X mit Firmware v1.10.0 muss das sog. Hardware Offloading (kurz hwnat) deaktiviert werden:

Offizielle Anleitung (CLI), aber dasselbe geht auch über das GUI und den Config Tree: System > Offloading > hwnat = disable.

Das Problem ist im Support-Eintrag Connecting to wireguard on edgerouter messes up outgoing UDP packets #23 beschrieben, mitsamt der Lösung:

If you use a Mediatek device with hwnat your UDP packages might get lost. Currently the only solution is to disable hwnat


UDP re-order problem


With hwnat disabled, the wg0 interface works great and the ER-X routes all my internet traffic out of it just fine, although CPU has much more overhead.

As soon as I enable hwnat, I start seeing problems, but only in certain scenarios, not all. For example, with hwnat disabled, I can use OpenVPN as a client on a local machine. Thus that OpenVPN connection gets routed out through the wg interface first, then on to server. The OpenVPN server shows the endpoint IP of the server ER-X wg is connected to as the OpenVPN client’s IP, not my ISP IP (what I want). As soon as I enable hwnat, this breaks. I can still make the initial outgoing connection and bring up the OpenVPN tunnel, but packets get dropped so that OpenVPN through the wg interface is unusable with hwnat enabled.

Also noticed Apple FaceTime is broken when hwnat is enabled with wg interface. Lots of disconnects and moments of me hearing them but them not hearing me. Again, disabling hwnat fixes it instantly, but again, at the cost of CPU.

Nachtrag

Das Problem ist leider immer noch nicht gelöst. Zuerst einmal scheint die Deaktivierung von hwnat über das Web GUI erst dann zu greifen, wenn man den Router neu startet. Bei mir zeigte das GUI „disabled“ an, doch auf der Kommandozeile erschien folgendes:

$ configure
[edit]
user@ROUTER# show system offload hwnat
 hwnat disable

$ show ubnt offload
IPSec offload module: loaded

HWNAT offload module: loaded

Traffic Analysis    :
  export    : disabled
  dpi       : disabled
    version       : 1.354

Nach dem Neustart dann:

$ show ubnt offload
IPSec offload module: not loaded

HWNAT offload module: not loaded

Traffic Analysis    :
  export    : disabled
  dpi       : disabled
    version       : 1.354

Trotz alledem macht FaceTime weiterhin Probleme.

Via: ERX Hardware Offload won’t load

Tags: , , , , , , , , , , ,
Labels: IT

Keine Kommentare | neuen Kommentar verfassen

Sonntag, 9. Mai 2021

setlocale: LC_ALL: cannot change locale

Seit ich mein MacBook Air mit M1-Chip und macOS Big Sur verwende, erhalte ich beim Login auf meinen Raspberry Pi 3 über SSH folgende Warnung zu Gesicht:

ssh dashboard
Linux DASHBOARD 5.10.17-v7+ #1403 SMP Mon Feb 22 11:29:51 GMT 2021 armv7l
Last login: Sat May  8 05:00:24 2021
-bash: warning: setlocale: LC_ALL: cannot change locale (en_US.UTF-8)

Ursache des Problems: en_US.UTF-8 ist in /etc/locale.gen kommentiert:

$ cat /etc/locale.gen | grep -v "^#"

en_GB.UTF-8 UTF-8

Somit die Datei öffnen, die Zeile mit en_US.UTF-8 suchen, ent-kommentieren, speichern und dann folgenden Befehl ausführen:

# locale-gen

Via: warning: setlocale: LC_ALL: cannot change locale

Beim nächsten Login erscheint die Fehlermeldung nicht mehr.

Tags: , , , , , , , , , , ,
Labels: IT

Keine Kommentare | neuen Kommentar verfassen

Samstag, 8. Mai 2021

Objektdimensionen in einer STL-Datei anpassen

Stephanie hat während meines Spitalaufenthaltes den bei Gaffuri 3D-gedruckten Halter für unsere Philips Sonicare Diamondclean Zahnbürstenköpfe im Geschirrspüler gewaschen.

Die Hitze und das Wasser haben diesem Stück nicht gut getan (es hat sich verzogen/gewellt), weshalb ich diese Woche ein neues Stück bestellt habe.

Das grösste Problem ist, dass das Objekt in der STL-Datei nicht metrische Dimensionen folgt, sondern auf imperialen Einheiten (also Inches etc.) basiert. Ein Kommentator hat dies auf Thingiverse auch erkannt:

In Cura, when I load the STL the file have these dimensions : 3.5 x 3.5 x 1.8 mm

The correct dimensions are:
Metric: X: 88.9mm Y: 88.9mm Z: 44.45mm
Imperial: X: 3.5″ Y: 3.5″ Z: 1.75″

Quelle: harkor, September 15, 2017

Wie ich gelernt habe, enthält die STL-Datei keine Angabe der verwendeten Metrik, was für mich als Laien absolut nicht nachvollziehbar ist — Baupläne ohne Massstäbe? Wo gibt’s denn das? Und die meisten Software da draussen gehen deshalb davon aus, dass STL-Dateien im metrischen Format daherkommen.

Doch wie skaliere ich das Objekt nun um 2540 Prozent? (1 Zentimeter = 2.54 Inches). Hierzu fand ich Autodesks TinkerCAD STL, eine kostenlose, web-basierte Software zum Bearbeiten von STL-Dateien. Und im Forums-Post Scaling by percentage stand auch gleich die Anleitung, wie ich das Objekt gesamthaft auf die gewünschten 8.9 Zentimeter aufblase.

Beim Hochladen der STL-Datei auf Gaffuris Jellypipe kann man zum Glück vor der Auftragsübermittlung überprüfen, dass die Dimensionen nun korrekt sind:

image-10230

Tags: , , , , , , , ,
Labels: Shopping

Keine Kommentare | neuen Kommentar verfassen

Samstag, 8. Mai 2021

Jeder Film, in drei Wörtern

When you’re not being challenged practice it. And then when you are being challenged by little things that goes [sic!] wrong so to speak in daily life that tends to happen you might have noticed things don’t always go according to your expectations. Sometimes you miss the bus, or something, or you miss the plane, or something else goes wrong, it tends to happen actually quite a lot; it seems to be part of life.

By the way it’s the reason why people go to see movies because the substructure of every movie that you see examine every movie you see, we could call it, it applies to virtually every movie you see … if … you can examine any movie you see what actually happens in the movie, in fact I can describe every movie to you in three words: „something goes wrong“. Because there wouldn’t be a movie otherwise, nothing would happen, nobody would evolve. Everything would be dead.

But in your own life you complain. So you see movies to see something go wrong but when it happens in your own life you complain. […] But so the strange thing is things are not meant not to go wrong; going wrong is part of the totality of how life experiences itself. If things wouldn’t go wrong it would be very uninteresting and nobody would evolve through the challenges that they encounter.

And in a good movie the protagonist or the character changes as he or she faces that which goes wrong in the movie. In a bad movie, the character does not go through any changes, that which goes wrong is only solved on an external level. In the end the bad guy is killed, and nothing else matters.

So something going wrong is part of how life experiences itself. And again you can then bring awareness to that so that you don’t always fall into reactivity when something goes wrong but you immediately align with it. Or when people behave in a way that you find offensive or they behave in a way that they offensive or they behave in a way that they create difficulties for you because you wanted this and they want something else, you don’t. You don’t have to go into hostility or opposition.

Quelle: Living with Meaning, Purpose, and Wisdom in the Digital Age | Eckhart Tolle | Talks at Google

Die Ausführungen über Herausforderungen beginnen ab ca. 50 Minuten. Sehenswert!

Tags: ,
Labels: Gesundheit

Keine Kommentare | neuen Kommentar verfassen

Samstag, 10. April 2021

Dank Selbsttests wieder ein Gesellschaftstier?

Und dank der jetzt verfügbaren Selbsttests habe ich diese Woche einen äusserst gemütlichen Abend im Freundeskreis verbracht. Der erste seit wohl einem Jahr.

Quelle: Selbsttest zum Wochenende: Entspannter durch die Pandemie

Interessant, wie unterschiedliche Leute die Pandemie unterschiedlich erleben. Ich habe seit dem ersten SARS-CoV-2 Fall in der Schweiz mehrere dutzend gemütliche Nachmittage/Abende im Freundeskreis verbracht.

PS: In mir macht sich das ungute Gefühl breit, dass sehr bald durch die Impfungen und Selbsttests verursachte Sorglosigkeit meiner Mitmenschen der wirkliche Wahnsinn erst beginnt …

Tags: , , ,
Labels: Gesundheit

Keine Kommentare | neuen Kommentar verfassen

Samstag, 10. April 2021

Was gibt der DELL P2421DC über USB-C als Ladeleistung her?

Vor einigen Wochen habe ich einen DELL P2421DC für einen Bekannten ausgesucht, um diesen an seinen neuen Mac mini M1 anzuschliessen. Der Monitor macht einen guten Eindruck und funktioniert über USB-C tadellos.

Was aber, wenn man stattdessen einen Laptop per USB-C anschliessen will, um ihn gleichzeitig zu laden? Der Monitor kann gemäss Herstellerangaben USB-C Peripherie maximal mit 65W laden.

Doch mit wieviel Volt, und Ampère? Im Handbuch steht es auf Seite 12:

You can attach the monitor to PC using a USB type C cable (shipped with your monitor), to get the monitor experience as below: support data transmission speed up to USB 3.1. Display resolution up to 2560 x 1440@60 Hz on Display Port 1.2 alternate mode. Power delivery of 20 V/3.25 A, 15 V/3 A, 9 V/3 A, 5 V/3 A.

Quelle: Dell 24 USB-C Monitor – P2421DC User’s Guide

Auslöser für die Recherche war diese Kundenfrage auf Digitec.

Tags: , , , , , , , ,
Labels: IT, Shopping

Keine Kommentare | neuen Kommentar verfassen

Montag, 5. April 2021

Mit upower den Batteriestatus von Linux-Laptops überwachen und aufzeichnen

upower ist ein sehr nützliches Kommandozeilen-Tool, wenn man sich für den Batteriestatus seiner Linux-Laptops interessiert (Linux-Server meiner Wahl: Lenovo Thinkpads).

Ich verwende es auf zwei Arten (Anleitung zum Schnellstart):

  • Alarm wenn auf Batteriebetrieb geschaltet wird Ein cron-Script schreibt den Status der Batterie alle fünf Minuten in eine Datei. Die Datei wird von monit überwacht. Wenn das Gerät (1) auf Batteriebetrieb schaltet (wegen Stromausfall, oder weil das Stromkabel ausgezogen wurde) und (2) die Ladung der Batterie unter einen vordefinierten Grenzwert sinkt (aktuell: weniger als 80 Prozent), erhalte ich von monit regelmässig eine Meldung per Email. In einem Fall konnte ich so aus der Ferne zuschauen wie die Batterieladung kontinuierlich abnahm, bis dass Gerät offline ging.
  • Aufzeichnung mit cacti Die von upower ausgegebenen Vitaldaten speise ich in cacti ein, um den Verlauf der Vitaldaten darstellen zu können. Was ich derzeit aufzeichne: Verbleibende Maximalkapazität der Batterie in Prozent der Design Capacity, Ladung Batterie in Prozent, Ladung der Batterie in Wh, Ausgangsspannung, Ausgangsleistung („Draw“).

Problem

Der Parameter energy-rate (Dokumentation) …

Amount of energy being drained from the source, measured in W. If positive, the source is being discharged, if negative it’s being charged.

… enthält bei einigen Laptops plausible Werte …

...
# OPENVPN 1
energy-rate:         4.761 W
...
# OPENVPN 2
energy-rate:         3.298 W
...
# ELK (Elasticsearch Lucene Kibana)
energy-rate:         21.288 W
...

… bei anderen Laptops nicht:

...
# Web-Server
energy-rate:         0.00409639 W
...

Tags: , , , , ,
Labels: Linux

Keine Kommentare | neuen Kommentar verfassen

Sonntag, 4. April 2021

Netatmo Modulchaos: Nach Jahren gelöst

Kürzlich konnte ich ein langjähriges Problem mit einer Netatmo Weather Station-Installation eines Bekannten lösen.

Auf Grund der Beschränkung der Anzahl Innenmodule pro Basisstation betreibt er zwei Basisstationen.

Die Temperaturwerte der Module werden von einem Script über die Netatmo API abgefragt und dann auf einem Dashboard angezeigt.

Das Problem: Ein bestimmtes Innenmodul fehlte bisher in den API-Daten, obwohl dessen Werte in der Netatmo App problemlos angezeigt werden. Anstelle der Stationsdaten wurde im Dump der PHP-Variable mit den API-Nutzdaten null angezeigt, umgeben von den Daten anderer Innenmodule.

Vor einigen Wochen entschied ich mich, dem Problem ein für allemal auf den Grund zu gehen — und es zu lösen. Nach längerem hin- und her mit dem Netatmo Support gab mir Leslie letzte Woche den entscheidenden Hinweis: Er wies mich darauf hin, dass ein Innenmodul an beiden Basisstationen angemeldet sei. Aus Sicht der Entwickler könnte dies das Problem verursachen.

Darauf angesprochen erwähnte der Bekannte, dass er seinerzeit das Modul zuerst an der einen Basisstation angemeldet hatte, sich dann aber anders überlegt und es dann mit der anderen Basisstation verbunden hatte.

Bemerkung am Rande: Komisch, dass Netatmo sowas überhaupt zulässt (zuliess?). Meine Vermutung: In der Datenbank wird von einer Basisstation auf die Modul IDs verlinkt, weshalb verschiedene Basisstationen auf dasselbe Modul linken können (n:1). Besser wäre es umgekehrt: Ein Modul sollte zu einer Basisstation gelinkt sein (1:1).

In der iOS App wurde das Geister-Innenmodul nicht angezeigt. Im Web GUI hingegen gab pro Basisstation je ein Modul-Eintrag mit einem Fragezeichen, doch in den Einstellungen wurde das Modul dann doch nicht aufgelistet.

Schlussendlich entschied ich mich für einen anderen Weg: Ich lud die App NetatmoModulesManager.app herunter. Es handelt sich um eine macOS App, die man mit einer Google-Suche nicht einfach so zum Download findet — deshalb hier die Wegbeschreibung:

Wenn man auf dieser Seite startet und den Link No smartphone? No tablet? Click here for an alternative installation using your computer. klickt, loggt man sich in Netatmo ein und es wird einem dann der Download-Link präsentiert (meinem Verständnis nach setzt dies voraus, dass man bereits eine Weather Station in Betrieb hat?). Der Direktlink lautet derzeit (4. April 2021) fw.netatmo.net/NetatmoModulesManager_MacOS.dmg.

Nach der Installation verbanden wir nacheinander die zwei Basisstationen mit dem Mac (Screenshots der Oberfläche). Hierzu starteten wir zuerst die App, klickten auf Weiter und schlossen die Basisstation erst an, als wir dazu aufgefordert wurden. Nach 10-15 Sekunden warten erschien die Basisstation dann auf dem Bildschirm. Als erstes wurde ein Firmware-Update durchgeführt, anschliessend startete die Basisstation neu und uns wurde in der App die Liste der Aussen- und Innenmodule angezeigt.

Leider entsprachen die Namen der Module hier nicht dem Web GUI. Ich notierte deshalb die Modul ID in der App, und verglich diese mit dem Web GUI um sicher zu gehen, dass ich die richtigen Modulnamen notieren konnte.

Schlussendlich fand ich den Übeltäter; d.h. ein Modul, dessen ID bei beiden Basisstationen aufgeführt wurde. In der App löschte ich das richtige Modul von der richtigen Basisstation — und die App stürzte ab. Beim zweiten Versuch gelang es tatsächlich, das Modul zu löschen.

Seither ist das API-Problem gelöst.

Tags: , , , , , , , ,
Labels: IT

Keine Kommentare | neuen Kommentar verfassen

Samstag, 3. April 2021

Ubiquiti UniFi UAP-AC-M zurücksetzen

Da heute um ungefähr 4 Uhr morgens mein Ubiquiti UniFi AP AC PRO plötzlich und ohne Vorwarnung verstorben ist (vermutlich, weil ich dessen Sendeleistung letzte Woche manuell auf High gesetzt habe …), musste ich ihn mit einem hier ungenutzt herumliegenden Ubiquiti UniFi UAP-AC-M ersetzen.

Leider klappte der Reset des noch für den vorherige Standort konfigurierten Access Points mit fünf Sekunden langem Druck auf den physischen Reset-Knopf nicht (wie im Handbuch auf Seite 7 beschrieben).

Schlussendlich loggte ich mich deshalb mittels SSH auf den Access Point ein (natürlich muss man dazu die Zugangsdaten der vorher genutzten Installation kennen, sonst hat man Pech), und führte folgenden Befehl aus:

# syswrapper.sh restore-default
Clearing CFG ... [%100] done!

Nach dem Neustart erschien der Access Point im Device Tab meines UniFi Controllers und konnte dort problemlos adoptiert werden.

Tags: , , , , , , , , ,
Labels: IT

Keine Kommentare | neuen Kommentar verfassen