Archiv ‘Uncategorized’

Donnerstag, 23. April 2020

Corona-Rechnen an Hand des Kantons Genf

Nachdem ich zu besten Zeiten die Corona-Zahlen mehrmals täglich in Erfahrung gebracht habe, gehen mir die meisten Zahlen mittlerweile sprichwörtlich am Hintern vorbei. Je länger die Krise dauert, je mehr man liest und vergleicht, desto offensichtlicher werden die Schwächen der Corona-Statistiken. Weltweit. Jedes Land wurstelt irgendwie rum.

Mittlerweile interessieren mich eigentlich nur noch die Zahl der Corona-Toten, da ich bis vor kurzem glaubte, dass dies die einzige Zahl ist, die man nicht verfälschen kann. Typisch Menschlich, sich an etwas vermeintlich simplen festzuklammern, um das Geschehen um einen herum zu erklären.

Doch nun hat sogar die Diskussion über die Zahlen der schweizerischen Corona-Toten begonnen. So wie ich die neuesten Erkenntnisse verstanden habe, gilt man hierzulande als Corona-Toter, sobald man positiv getestet wurde und danach das Zeitliche segnet. Wie der K-Tipp in seiner jüngsten Ausgabe aufgezeigt hat, hat man das bspw. mit den Grippetoten in den letzten Jahren nie so gemacht. Die starben jeweils an Krebs, Lungenentzündung, Organversagen, schlag-mich-tot, aber fast nie an der Grippe selbst. Wieso kehrt man das übliche Vorgehen nun um?

Henusode. Die Universitätsspitäler in Genf haben heute Zahlen einer „repräsentativen“ Stichprobe der Bevölkerung auf Covid-19 Antikörper präsentiert. 760 Personen wurden auf diese untersucht. Die Statistiker errechneten aus den Resultaten der zweiten Woche (14. bis 17. April, 471 Personen), dass hochgerechnet 5.5 Prozent der Bevölkerung des Kantons bereits mit Covid-19 infiziert worden sind. 5.5 Prozent ist der Mittelwert der Bandbreite von 3.3 bis 7.7 Prozent.

Wo die Medienmitteilung aufhört, beginnt aus meiner Sicht eigentlich die interessante Rechenaufgabe: Der Kanton zählt knapp 500’000 Einwohner. 5.5 Prozent entsprächen 27’500 Einwohnern. Gemäss corona-data.ch wurden in Genf bisher 4710 Personen positiv getestet.

Erste Erkenntnis: Die Zahl der Infektionen sind also um den Faktor 5.8 höher als angegeben („Dunkelziffer“). Knapp 23’000 Personen haben also Corona überlebt; entweder, weil sie nicht bemerkt haben, dass sie überhaupt krank sind, oder aber, weil die Symptome viel zu mild waren, dass man sie zu einem Test zugelassen hätte.

Doch viel wichtiger ist diese Information, um die Letalität zu berechnen. Von 27’500 infizierten Einwohnern sind Stand heute 205 Personen gestorben (selbe Quelle).

Zweite Erkenntnis: Die Letalität über alle Altersgruppen hinweg beträgt 0.74 Prozent. Eine „normale“ Grippe rafft gemäss dem Robert Koch Institut zwischen 0.1 und 0.2 Prozent der Infizierten dahin. Covid-19 tötet also drei bis vier Mal mehr Leute als die Grippe.

Aber — und so schliesst sich der Kreis wieder — wie oben erwähnt scheinen es sich in der jetzigen Pandemie die Leute einfach zu machen, welche die Todesurkunden ausfüllen: Corona-Opfer. Ende der Diskussion. Dementsprechend könnten die offiziellen Todeszahlen übertrieben sein.

(Einschub: Ein Kollege schreibt mir, dass in Deutschland der Grippe-Ansatz gefahren werde; d.h. Corona-Tote sind an ihren Vorerkrankungen gestorben. Ob das stimmt kann ich nicht beurteilen. Dies jedenfalls könnte erklären, wieso Deutschland pro Capita deutlich weniger Tote zu beklagen hat als andere Länder. Sprich: Sind die Schutzmassnahmen dort gar nicht so viel besser, sondern primär einfach die, die die Statistiken dort verfassen?).

Ob also Corona (in der Schweiz) wirklich drei bis vier Mal mehr Leute getötet hat, wird sich vermutlich erst in Monaten oder gar Jahren zeigen. War ich anfangs wissenschafts- und politgläubig, werde ich immer skeptischer.

Wenn man ganz sauber sein will, berechnet man die Letalität über die Bandbreite der drei angegebenen Zahlen:

Infizierte (Prozent) 3.3 5.5 7.7
Infizierte (absolut) 16’500 27’500 38’500
Tote 205 205 205
Letalität (Prozent) 1.24 0.74 0.53

Tags: , , , , , , , , , , , ,
Labels: Uncategorized

Keine Kommentare | neuen Kommentar verfassen

Donnerstag, 26. März 2020

Corona KW13: Medienschau

Pandemie

“Massachusetts (not shown here) had been a contender, after reaping the bitter harvest of a super-spread incident involving, somewhat ironically, a biotech conference.”

Quelle: Hottest Battlegrounds in the CoronaWar: Is “Social Distancing” Kicking In?

“one person[’s antibodies in their blood plasma] can treat two people.”

Quelle: COVID-19’s Stop-Gap Solution Until Vaccines and Antivirals Are Ready

Medizinisches

“If emergency rooms and ICUs are overloaded from COVID-19, we will see more deaths from everything else: from traffic accidents, heart attacks, infections, seasonal influenza, falls and traumas—basically anything that requires an emergency-room response to survive.”

Quelle: A Failure of Systemic Thinking

… aber gleichzeitig auch:

Social distancing is slowing not only Covid-19, but other diseases too

Quelle: Social distancing is slowing not only Covid-19, but other diseases too

Wirtschaft

Gold wird knapp – wegen Tessiner Lockdown

[…] wichtige Schmelzen im Tessin [mussten] ihre Produktion herunterfahren […] “Rund 70 Prozent des weltweit geförderten Goldes wird hierzulande verarbeitet, insbesondere im Tessin, wo drei der fünf grossen hiesigen Barrenhersteller beheimatet sind.”

Quelle: Gold wird knapp – wegen Tessiner Lockdown

Quelle: The day that Bern stood still

Politik

Just wait for Trump to demand that China pay for the pandemic

Quelle: Just wait for Trump to demand that China pay for the pandemic

Quelle:

Tags: , , , , , ,
Labels: Uncategorized

Keine Kommentare | neuen Kommentar verfassen

Dienstag, 3. September 2019

Eine veraltete MacTeX-Installation auf den letzten historischen Stand bringen

Da ich erst jetzt Zeit hatte, MacTeX von Version 2018 auf 2019 zu aktualisieren, wollte ich in der Zeit von Mai bis September 2019 meine MacTeX 2018er Installation auf den letzten verfügbaren Stand lüpfen. Hierzu habe ich ein kleines Script geschrieben:

#!/bin/bash

if [[ $UID -ne 0 ]]; then
   echo "$0 must be run as root"
   exit 1
fi

echo "Updating the TeXLive manager ..."
tlmgr update --self
echo "Done."
echo ""

echo "Updating the TeXLive packages ..."
echo "Done."
tlmgr update --all
echo ""

exit 0

Als ich dieses nach der Veröffentlichung von MacTeX 2019 ausführen wollte, erschien folgende Fehlermeldung:

...
Updating the TeXLive manager ...
tlmgr: Remote repository is newer than local (2018 < 2019)
Cross release updates are only supported with
  update-tlmgr-latest(.sh/.exe) --update
Please see https://tug.org/texlive/upgrade.html for details.
...

Was tun, wenn man MacTeX 2019 (noch) nicht installieren will, aber die vorhandenen 2018er-Pakete aufdatieren möchte? Folgender Befehl löste für mich das Problem:

# tlmgr option repository ftp://tug.org/historic/systems/texlive/2018/tlnet-final

Quelle: tlmgr: Remote repository is newer than local (2017 < 2018)

WICHTIG: Je nach Version muss die Jahrzahl "2018" in der o.g. URL auf die eigenen Bedürfnisse angepasst werden.

Nach dieser Anpassung lief das Script wieder durch und die Pakete waren auf dem letzten für Version 2018 verfügbaren Stand.

Tags: ,
Labels: Uncategorized

Keine Kommentare | neuen Kommentar verfassen

Sonntag, 10. März 2019

Warnlampen im Auto: Eigentlich ganz simpel!

20 Minuten weiss zu schreiben:

Viele Autofahrer haben keine Ahnung, was die Symbole auf der Anzeige bedeuten. Kein Wunder – es kommen immer mehr neue dazu.

Quelle: Kein Plan beim Warnsignal

Dazu meine persönliche Anekdote: Mein damaliges Studentenauto, ein altehrwürdiger Peugeot 205 (kein GTI), habe ich seinerzeit auf diese Weise „zerstört“:

Bei einem unüberlegten Manöver hatte ich mir die Ölwanne des Motors aufgerissen (Details bei einem Bier). Obwohl der Weihnachtsbaum am Armaturenbrett losging (insbesondere die rote Ölkanne), versuchte ich, mit dem kollabierenden Auto die 13 Kilometer nach Hause zu fahren. Ich kam schlussendlich ein paar Kilometer weiter, bis dann nichts mehr ging. Motorschaden mangels ausreichendem Öl, wie ich später lernte.

Ich bin seither vermutlich nicht viel schlauer geworden und kenne die Bedeutung kaum einer zusätzliche Warnleuchte auswendig. Doch was ich seit diesem (für einen Studenten teuren) Unfall weiss: Leuchtet ein Lämpchen rot, stoppt man das Fahrzeug sofort und ruft den Pannendienst. Orange Leuchten, wie beispielsweise bei den Mietwagen in den USA (und Island!) regelmässig aufflammend und von zu tiefem Reifendruck warnend, kann man etwas lockerer nehmen — die Situation beobachten, und gegebenenfalls als Messproblem abtun.

Tags: , , , , , , ,
Labels: Uncategorized

1 Kommentar | neuen Kommentar verfassen

Sonntag, 3. Februar 2019

host löst einen lokalen Domain-Namen auf, wget und Python requests3 hingegen nicht

Vor einigen Tagen habe ich meinen Web-Server im lokalen LAN aufgeräumt und viele Services, welche über eine DynDNS-Adresse gegen das Internet zugänglich waren, deaktiviert. Ab sofort können diese Web-Services nur noch mit einer privaten FQDN à la service.server.location.domain.local aus dem LAN angesprochen werden.

Diese Anpassung führte dazu, dass mein Bluetooth-Scanner, welchen ich auf meinem Raspberry Pi betreibe, seine Scan-Resultate nicht mehr an den Web-Server übermitteln konnte. Ein Python-Script führt auf dem RPi alle 5 Minuten einen Bluetooth-Scan durch, übersetzt die Resultate ins JSON-Format und versendet die Daten dann mit requests3 per HTTP an den Web-Server.

Die Fehlermeldung, die das Script ab der Umstellung ausspuckte, lautete folgendermassen:

$ /usr/bin/python /usr/local/bin/bluelog/bluetooth-scan.py --output api
Traceback (most recent call last):
  File "/usr/local/bin/bluelog/bluetooth-scan.py", line 424, in <module>
    response = requests.post(url, json=macs, auth=HTTPDigestAuth('user','password'))
  File "/usr/lib/python2.7/dist-packages/requests/api.py", line 110, in post
    return request('post', url, data=data, json=json, **kwargs)
  File "/usr/lib/python2.7/dist-packages/requests/api.py", line 56, in request
    return session.request(method=method, url=url, **kwargs)
  File "/usr/lib/python2.7/dist-packages/requests/sessions.py", line 488, in request
    resp = self.send(prep, **send_kwargs)
  File "/usr/lib/python2.7/dist-packages/requests/sessions.py", line 609, in send
    r = adapter.send(request, **kwargs)
  File "/usr/lib/python2.7/dist-packages/requests/adapters.py", line 487, in send
    raise ConnectionError(e, request=request)
requests.exceptions.ConnectionError: HTTPConnectionPool(host='service.server.location.domain.local', port=80): Max retries exceeded with url: /index.php (Caused by NewConnectionError('<requests.packages.urllib3.connection.HTTPConnection object at 0x75e41b10>: Failed to establish a new connection: [Errno -2] Name or service not known',))

Auf dem RPi eingeloggt funktionierte die Namensauflösung mit dem host-Kommando aber problemlos:

$ host service.server.location.domain.local
service.server.location.domain.local has address 10.1.2.3

Doch als ich die Verbindung zum Web-Server mit wget überprüfen wollte schlug auch das fehl:

$ wget http://service.server.location.domain.local/index.php
--2019-02-02 15:56:22--  http://service.server.location.domain.local/index.php
Resolving service.server.location.domain.local (service.server.location.domain.local)... failed: Name or service not known.
wget: unable to resolve host address "service.server.location.domain.local"

Herumgooglen brachte nicht die gewünschte Lösung. Deshalb griff ich zur nächstbesten Lösung und rief wget mit strace auf. Im Trace dann der entscheidende Hinweis:

$ strace wget http://service.server.location.domain.local/index.php
...
connect(3, {sa_family=AF_UNIX, sun_path="/var/run/avahi-daemon/socket"}, 110) = 0
fcntl64(3, F_GETFL)                     = 0x2 (flags O_RDWR)
fstat64(3, {st_mode=S_IFSOCK|0777, st_size=0, ...}) = 0
write(3, "RESOLVE-HOSTNAME-IPV4 service.serv."..., 55) = 55
read(3, "-15 Timeout reached\n", 4096)  = 20
close(3)                                = 0
...

Was zum Teufel hat der Avahi-Daemon mit /var/run/avahi-daemon/socket im strace zu suchen? Jetzt hatte ich ausreichend Infos, um Google noch einmal zu befragen. Und siehe da:

Is Avahi running or installed? Avahi uses .local domain for its usage and puts its config in /etc/nsswitch.conf. My experience with it, using a .local domain name for my internal use is that it can be a little flaky (for lack of a better technical term), and would show behavior similar to what you are seeing.

Quelle: [SOLVED] resolver weirdness – avahi and .local

Die Lösung war im selben Beitrag gepostet:

/etc/nsswitch.conf

Aus …

...
hosts:      files mdns4_minimal [NOTFOUND=return] dns
...

… wird folgender Eintrag:

...
hosts:          files dns mdns4_minimal
...

Und seither lösen sich auch die .local-Adressen reibungslos auf.

Tags: , , , , , , , , ,
Labels: Uncategorized

Keine Kommentare | neuen Kommentar verfassen

Freitag, 14. Dezember 2018

Nicht selbst erwirtschaftetes Geld „verschenkt“ man gerne auch an Betrüger

[…] a letter via snail mail suggesting the search engine rankings for a domain registered in my name would suffer if I didn’t pay a bill for some kind of dubious-looking service I’d never heard of.

“Which naturally raises the question: Should we really be trusting these people with our money?” Guilmette said. “What kind of people or organizations are most likely to pay a bill that is utterly phony baloney, and that actually isn’t due and payable? The answer is people and organizations that are not spending their own money.”

Quelle: How Internet Savvy are Your Leaders?

Tags: , ,
Labels: Uncategorized

Keine Kommentare | neuen Kommentar verfassen

Sonntag, 14. Oktober 2018

Touristenattraktion KZ Dachau

Die KZ Gedenkstätte Dachau habe ich anlässlich eines Sommer-Ausflugs nach München bereits vor einigen Jahren besucht. Im September dieses Jahres kamen wir anlässlich einer Auto-Rundreise durch Österreich in der Nähe des Dorfes Mauthausen vorbei und besuchten die dortige Gedenkstätte ebenfalls.

Mauthausen ist für mich klar eindrücklicher — wieso genau kann ich nicht sagen: Ob es die Jahreszeit war — grauer Himmel, morgendliche Kälte? Der Blick auf den Steinbruch, in Kombination mit der Schilderung der Morde an den Inhaftierten im Audio-Guide für das Smartphone? Allgemein der Audio-Guide mit unzähligen Erläuterungen beim Rundgang? Der Garten voller Monumente zur Erinnerung der Auslöschung von Bürgern unzähliger Nationen? Die sehr gut gemachte interaktive Museumsaustellung? Das äusserst gut erhaltene Lagergelände mit unzähligen Bauten?

Was ich nach der Rückkehr erst erfuhr: Bereits in den 1930ern, also während der aktiven Nutzung von Dachau, schien das dortige KZ Touristen angezogen zu haben respektive von den Nazis aktiv beworben worden zu sein:

The German authorities, initially at least, proved so willing to show off their concentration camp to foreigners that by the mid-1930s Dachau had become something of a tourist attraction for American and British visitors, particularly politicians and journalists.

Quelle: To Heil, or Not To Heil, When Traveling in the Third Reich

Tags: , , , , , , , ,
Labels: Uncategorized

Keine Kommentare | neuen Kommentar verfassen

Freitag, 30. März 2018

Wenn US-Amerikanerinnen (insbesondere Kalifornierinnen) so komisch sprechen …

Meine Frau legt diese Sprechweise zum Glück nicht zu Tage, aber bei einigen ihrer Kolleginnen und bei flüchtigen Bekanntschaften auf unseren Kalifornien-Reisen ist es mir bereits unzählige Male aufgefallen: Dieses ganz-hinten-im-Rachen-sprechen, die Angehörige des weiblichen Geschlechts an den Tag legen. Und einem immer wieder auffällt, sobald man sich einmal darauf geachtet hat.

Bis vor einigen Tagen war ich der Meinung, dass dieses Phänomen bisher nur mir aufgefallen ist und es keinen Namen dafür gibt.

Falsch gedacht! Als Kollege Schaad und seine Catherine kürzlich bei uns auf ein Raclette vorbeikamen, fiel die Konversation irgendwann einmal auf die Kardashians. Und bei diesem Thema erwähnte Raphael den Begriff „Vocal Fry“, der diese froschartige Sprechweise bezeichnet.

Ein Zeitgenosse, der sich wohl wie ich derart ab den Kardashians aufregt, hat dazu auch gleich ein sehr illustratives Video auf YouTube aufgeschaltet, das man kaum in voller Länge schauen sollte, wenn man Wert auf seine geistige Gesundheit legt:

Nachtrag

Naomi Wolf redet ihren Geschlechtergenossinnen in einem Meinungsstück mit dem Titel Young women, give up the vocal fry and reclaim your strong female voice ins Gewissen.

Tags: , , , , , , , ,
Labels: Uncategorized

Keine Kommentare | neuen Kommentar verfassen

Freitag, 23. März 2018

Was verändert sich mit meinem nächsten Subversion Checkin?

Der folgende Befehl zeigt analog zu einem diff zwischen zwei Dateien an, welche Änderungen an den lokalen Dateien gegenüber dem letzten versionierten Stand vorgenommen wurden:

$ svn diff -r head

Tags: , ,
Labels: Uncategorized

Keine Kommentare | neuen Kommentar verfassen

Samstag, 25. November 2017

Normalen Benutzern den SSH-Login auf Synology DiskStations erlauben

Mit dem Synology DiskStation Manager DSM 6.0 kam es zu Sicherheitsanpassungen beim SSH-Login: Selbst wenn ein Administrator auf einem Synology NAS SSH aktiviert, können sich normale Benutzer per SSH nicht auf dem NAS einloggen. Dies ist nur mit Benutzern möglich, die der Administrator-Gruppe zugeteilt sind.

Um diese Anpassung im Namen der Sicherheit rückgängig zu machen, bin ich dem Blog-Artikel Howto: (re-)Enable SCP/SSH Login on Synology DSM 6.0 for non admin users [UPDATE] gefolgt. Der Grund ist trivial: Synology setzt für normale Benutzer in /etc/passwd ein unbrauchbares Login-Shell: /sbin/nologin

Die Lösung: Ein auf dem NAS hinterlegtes bash-Script wird mittels Cron-Job unter root laufend alle fünf Minuten ausgeführt und ersetzt die Login-Shell ausgewählter Benutzer mit /bin/sh.

/volume1/homes/admin/enable-ssh-logins.sh

#!/bin/bash
/usr/bin/awk -i inplace -F: 'BEGIN{OFS=":"}/^dagobert\:/{gsub(/.*/,"/bin/sh",$7)}1' /etc/passwd
/usr/bin/awk -i inplace -F: 'BEGIN{OFS=":"}/^donald\:/{gsub(/.*/,"/bin/sh",$7)}1' /etc/passwd
/usr/bin/awk -i inplace -F: 'BEGIN{OFS=":"}/^daisy\:/{gsub(/.*/,"/bin/sh",$7)}1' /etc/passwd
/usr/bin/awk -i inplace -F: 'BEGIN{OFS=":"}/^huey\:/{gsub(/.*/,"/bin/sh",$7)}1' /etc/passwd
/usr/bin/awk -i inplace -F: 'BEGIN{OFS=":"}/^dewey\:/{gsub(/.*/,"/bin/sh",$7)}1' /etc/passwd
/usr/bin/awk -i inplace -F: 'BEGIN{OFS=":"}/^louie\:/{gsub(/.*/,"/bin/sh",$7)}1' /etc/passwd

exit 0

Cron-Job über DiskStation Manager Web-Oberfläche einrichten

  • Control Panel
  • Task Scheduler
  • Create
  • User-defined script
  • General
    • Task: „Enable Login Shell“
    • User: root
  • Schedule
    • [x] Run on the following days: Daily
    • Frequency: Every 5 minute(s)
  • Task Settings
    • Run command: User-defined script: /volume1/homes/admin/enable-ssh-logins.sh

Tags: , , , ,
Labels: Uncategorized

1 Kommentar | neuen Kommentar verfassen