Der "Was hast du heute gelernt?" Thread

Ich habe am Freitag gelernt, das MySQL scheiße ist. Die Eigenarten sind mir bekannt und wenn man sie kennt, kann man sie ja umschiffen. Das es aber so krass ist, hätte ich nicht gedacht.

Ich hatte in einer Anwendung einen Fehler, wodurch Nutzer falsche Punktzahlen und Prozente in einer Kategorie und entsprechend bei den Gesamtpunkten und Prozenten erhalten haben. Kunde wies mich darauf hin und ich hab das mit einem UPDATE JOIN korrigiert und dem Kunden Bescheid gesagt. Am Freitag rief dieser an und sagte, die Punkte stimmen, aber die Prozente sind falsch. Ich mir also ein Backup auf meine lokale Maschine gezogen und die Query ausgeführt, alles korrekt. Backup der Tabelle auf den Live-Server eingespielt und Query dort noch mal ausgeführt. Stichproben geprüft und dort wurden die Punkte richtig berechnet, aber die Prozente nicht. WTF! Gab aber keine Fehlermeldung oder einen Hinweis. Einen Blick auf die Versionen geworfen und gesehen, dass auf Live ein 5.5 lief, und bei mir lokal ein 5.7. Also lokal einen 5.5 installiert, das Backup eingespielt, Query abgefeuert und ebenfalls keine Updates der Prozentwerte erhalten. Letztendlich habe ich dann ein Backup der Tabelle auf meinem lokalen MySQL 5.7 gemacht und es auf dem Live-Server eingespielt.

Vielleicht wäre ja Oracle der passendere Name für MySQL. Ich fand den Namen schon immer seltsam für eine DB.
 
Dass man bei der Überprüfung einer Verbindung zu einer REST API keinen REST endpoint verwenden sollte, bei dem keine Antwort eine gute Antwort ist.
Bei Splunk kann man via REST die Anzahl der Lizenzverstösse abfrage in einem 30 Tage Zeitraum... Keine Verstösse sind gut, geben aber halt keine Antwort auf die Suche. Also ein typischer "negativ ist positiv" Fall wie man ihn eher aus der Medizin kennt
 
Versteh ich nicht. Eine Resource, die eine Anzahl darstellt, ist doch nicht plötzlich "nicht existent", nur weil diese Anzahl gerade 0 ist? Und selbst wenn es so wäre würde ich doch immer noch einen HTTP 404 als Antwort erwarten und nicht -- "nichts"? (was genau ist denn "nichts" -- ein Request, der in einen Timeout läuft?).

Irgendwie beschleicht mich das Gefühl, dass das gar nicht so wirklich REST ist, was da zu testen ist :D
 
Irgendwie beschleicht mich das Gefühl, dass das gar nicht so wirklich REST ist, was da zu testen ist :D

Ja - Nein... Jein

Eine curl abfrage hätte eigenlich eine ähnliche Antwort wie folgende auswerfen müssen
Code:
<?xml version="1.0" encoding="UTF-8"?>
<!--This is to override browser formatting; see server.conf[httpServer] to disable. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .-->
<?xml-stylesheet type="text/xml" href="/static/atom.xsl"?>
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:s="http://dev.splunk.com/ns/rest" xmlns:opensearch="http://a9.com/-/spec/opensearch/1.1/">
  <title>licensermessages</title>
  <id>https://xxxxxx.xxxxxx.xxxxxx:8089/services/licenser/messages</id>
  <updated>2019-05-28T10:49:05+02:00</updated>
  <generator build="c0bf0f679ce9" version="7.2.6"/>
  <author>
    <name>Splunk</name>
  </author>
  <link href="/services/licenser/messages/_acl" rel="_acl"/>
  <opensearch:totalResults>0</opensearch:totalResults>
  <opensearch:itemsPerPage>30</opensearch:itemsPerPage>
  <opensearch:startIndex>0</opensearch:startIndex>
  <s:messages/>
</feed>
Da die Server im Cluster über diesen Port aber so dermassen verbandeld sind, bleibt eigentlich nur die REST Schnittstelle/Suche auf dem web-ui.
Und die bringt die gleiche Antwort halt so:
Bildschirmfoto 2019-05-28 um 11.01.37.webp
 
Man kann usb-rs232-wandler direkt am Android-Smartphone betreiben was für mich gleich in mehreren Situationen sehr praktisch ist.
 
Damit kann man sich unter Android mit einem weiteren Pegelwandler mit einer Simatic S5 über Step5 das in einer Dosbox installiert ist verbinden. :) Oder auch mit einem älteren Multimeter.
 
Wie?! Schon 2 Jahre kein Post mehr hier im Thread? Das muss ich mal ändern.

Nicht heute gelernt, aber diese Woche endlich ausprobiert: Man kann SSH und SSHd so konfigurieren, dass die sudo-Authentifizierung auf dem Server per PAM über die SSH-Anmeldung läuft! Damit kann man vermeiden, (immer wieder) ein Password für administrative Aufgaben mit sudo eingeben zu müssen UND gleichzeitig auch das riskante passwort-lose sudo!

Mag sein, dass das auch in Michael W. Lucas' SSH Mastery drin gewesen wäre... Ich hörte erst kürzlich von Bernard Spil auf Twitter davon. Auf Nachfrage war er dann so freundlich, ein kleines Howto dazu zu veröffentlichen. Das habe ich diese Woche auf verschiedenen Servern bzw. Jails angewendet und bin glücklich.
 
Oh wow.... wenn man über die Ports das OpenJDK17 bauen will, baut er das OpenJDK16, weil die Abhängigkeit besteht. Dies hat OpenJDK15 als Abhängigkeit. Dies hat OpenJDK14 als Abhängigkeit... das wiederum OpenJDK13, das wiederum OpenJDK12. Erst 12 hat boostrap-openjdk11 an als Endstation.

:ugly:
 
Ich bin so alt, dass ich diesen Thread noch kenne.

Heute habe ich stundenlang versucht, authpf wieder einzurichten. In einem alten VPS lief das, im neuen nicht. Und ich suche und teste und suche und teste... Bis ich auf eine Antwort in einem Mailing-List-Archiv von 2006 stoße, der mich darauf bringt, dass authpf das file-descriptor file system (fdescfs) braucht!

Das muss ich also per # mount -t fdescfs fdescfs /dev/fd mounten und dann für die Zukunft gleich in /etc/fstab eintragen:
Code:
# Device                       Mountpoint              FStype   Options         Dump    Pass#
fdesc                          /dev/fd                 fdescfs  rw              0       0
...

Wie so oft: Kleines Detail, große Wirkung!

Wofür ich authpf nutze? Ich habe in meinem PHP einiges an Debug-Code, der direkt in der Seite angezeigt werden kann, wenn eine entsprechende Environment-Variable gesetzt ist. Die Webverbindung läuft standardmäßig auf Port 443 (HTTPS). Wenn ich mich nun per ssh als "debugging" user einlogge, leitet mich PF nun aber auf port 8443 weiter - und der ist im Webserver so konfiguriert, dass die Environment-Variable für den Debug-Code eingeschaltet ist. Nun kann ich die Debug-Ausgaben direkt auf der Webseite sehen - aber nur ich, weil ich mich als user "debugging" auf dem Server eingeloggt habe.
 
Ich habe heute meinen E3DC zu MQTT Service angepasst. Der Service läuft auf OpenBSD mit runit. Runit benutze ich schon seit Jahren und es ist meine erste Wahl, wenn ich einen Supervisor für Programme brauche. Aber irgendwie vergisst man immer die Hälft. :) Mein neue Rust-Implementierung lief zwar wunderbar, aber mit sv stop oder sv restart konnte man sie nicht stoppen. Da erinnerte mich, dass ich für Python auch einen Signal-Handler brauchte. Gedacht, getan, habe ich das eingabaut und das Ergebnis blieb davon völllig unberührt. Nach langem hin und her viel mir dann auf, dass chpst ohne exec aufgerufen wurde. Runit killte also nur die Shell und nicht das darin laufende Programm. Kaum stand ein exec vor dem chpst Aufruf, funktionierte alles wie geplant.
Bash:
#!/bin/sh
exec 2>&1
exec chpst -u e3dc-mqtt /home/e3dc-mqtt/e3dc-mqtt-rs -c ./config.toml
 
Zurück
Oben