Freitag, 12. August 2016

Nicht alle Google-Kalender werden in Calendar.app auf iOS angezeigt

In solchen Fällen lohnt es sich, mit dem Browser als erstes folgende URL aufzurufen:

calendar.google.com/calendar/iphoneselect

Dort überprüft man, ob man den gewünschten Kalender tatsächlich zur Synchronisation mit iOS-Geräten (iPhone oder iPad) ausgewählt hat.

Quelle: HOW TO SYNC MULTIPLE GOOGLE CALENDARS TO YOUR IPHONE OR IPAD

Tags: , , , , , , ,
Labels: Apple

Keine Kommentare | neuen Kommentar verfassen

Montag, 8. August 2016

Spuren eines Abfallsünders

In meiner Metamorphose zu einem Schweizer-Bünzli bin ich beim nächsten Meilenstein angelangt: Ich rege mich tödlich ab den Abfallsündern auf, welche an der Glas- und Alusammelstelle an der Brunnmattstrasse hier in Bern ihren ganzen Hauskehricht liegen lassen.

Ich meine wie bescheuert muss man sein, den eigenen Abfall aus der Wohnung zur Recyclingstelle zu tragen und dann dort zu deponieren?

Heute war ich wieder mal vor Ort und habe unseren Glasabfall entsorgt. Mir fiel bei der Ankunft an den Containern sofort eine Denner-Papiertragetasche auf, welche bis oben mit leeren PET-Flaschen gefüllt war.

Da ich so oder so noch auf dem Weg ins Coop Brunnmatt war, um unsere PET-Flaschen zu entsorgen, nahm ich die Tragetasche kurzerhand mit. Beim Entleeren fiel mir auf, dass der Besitzer der Tragetasche einen zerknüllten Einkaufszettel zurückgelassen hatte:

Abfallsünder Einkaufsbeleg Denner 3008 Bern
image-6841

Welche Erkenntnisse ziehe ich aus diesem Beweismittel?

  • Die Person kauft im Denner ein.
  • Die Person — und/oder deren Familie — scheint Unmengen an Parfumreis-Reis zu konsumieren (2 Säcke à 1 Kilogramm).
  • Auch Milch ist hoch im Kurs (2 Liter).
  • Und dem Alkohol ist die Person ebenfalls zugeneigt (5 Dosen à 5 Deziliter)
  • Die Person scheint ohne Tragetaschen einkaufen zu gehen, weshalb sie im Laden selber ein Tasche kaufen muss.
  • Die Person ist ein skrupelloser Abfallsünder: Sie muss die leeren PET-Flaschen wenige Minuten nach ihrem Einkauf heute um 19:28 Uhr — am hellichten Abend — entsorgt haben; ich war gegen etwa 19:40 Uhr an der Entsorgungsstelle.
  • Das schlimmste am Ganzen: Sowohl der Denner als auch das benachbarte Coop haben PET-Sammelstellen. Im Laden drin.
  • Die Person bezahlt nicht bar, sondern besitzt eine EC Maestro-Karte mit den Endziffern XXXX XXXX XXXX XXX0 746
  • Die Person besitzt folglich ein Bankkonto.
  • Interessant ist der Passus “Débit” der Kartenbuchung — bei meinen Einkäufen steht dort “Buchung”. Ich gehe davon aus, dass die Person französischsprachig ist.

Tags: , , , , , ,
Labels: Bern, Gesellschaft, Leben

Keine Kommentare | neuen Kommentar verfassen

Montag, 1. August 2016

Unbekannte Kreditkartenbelastung

Nach unserer Rückkehr von unserer Weihnachtsreise nach Israel ging ich Ende Januar 2016 wie jeden Monat die Kreditkartenabrechnung durch.

Bei einer der aufgeführten Transaktion stockte ich, da ich mir nicht erklären konnte, wo ich was mit der Kreditkarte eingekauft hatte:

Gama Management and Clear Tel Aviv
image-6834

Tel Aviv? An dem Tag weilten wir am Morgen zwar noch in Tel Aviv, waren aber zum Zeitpunkt der Buchung längst in Jerusalem angekommen. Ausserdem sagte mir “Gama Management and Clear[ing]” rein überhaupt nichts. Eine säuberlich aufbewahrte Quittung fand sich in meinen Unterlagen auch nicht, was den Fall weiter verdächtig machte. Immerhin ergab sich aus dem Bloomberg-Porträt des Unternehmens die Erkenntnis, dass es sich wohl um einen israelischen Kreditkarten-Acquirer handeln muss.

Ein Anruf bei der Hotline des Kreditkartenherausgebers half mir nicht weiter, da die Hotline-Mitarbeiter in ihren Applikationen offenbar auch nur diejenigen Angaben zu einer Buchung sehen, welche ich bereits in der Smartphone-App hervorgeholt hatte. Eine Nachforschung nach einem Kaufbeleg sei nicht möglich; stattdessen bot man mir an, die Transaktion zu stornieren, meine bisherige Kreditkarte als ungültig zu erklären und mir kostenlos eine neue Kreditkarte auszustellen.

Da ich die Kreditkarte vielen Shops im Internet hinterlegt habe, fand ich das keine so tolle Idee, verstand aber die Motivation dahinter auf Anhieb: Für das Kreditkartenunternehmen kommt diese Massnahme deutlich günstiger, als mühsame Nachforschungen für Kunden durchzuführen. Ich lehnte das Angebot höflich ab, teilte der Mitarbeiterin mit, dass ich selber versuchen würde, Nachforschungen zu tätigen, und legte den Anruf auf.

Mittels Foursquare-Checkins (Zeitzonenumrechnung nicht vergessen!) hatte ich bereits vor dem Anruf eingrenzen können, dass die Transaktion in der Alrov Mamilla Avenue, einer Shopping-Mall amerikanischer Prägung, stattgefunden haben musste. Die Mall war 10 Fussminuten von unserem damaligen Hotel, dem Dan Panorama, entfernt.

Kaum hatte ich aufgelegt, kam meine Frau nach Hause. Ich erzählte ihr von der unbekannten Buchung und fragte sie, ob sie sich an eine Kreditkartenzahlung in dieser Mall erinnern konnte. Wie aus der Kanone kam aus ihr herausgeschossen: “Ja, da ich mein Portemonnaie im Hotel vergessen hatte, hast du mir doch im Zara einen Schal bezahlt … Weisst du nicht mehr?”.

Tags: , , ,
Labels: Reisen

Keine Kommentare | neuen Kommentar verfassen

Montag, 1. August 2016

WebEx benötigt keine Admin-Rechte

Die Verwendung der WebEx Screen Sharing-Lösung im Geschäftsalltag benötigt keine Administratorenberechtigungen.

Klickt man auf einen Sitzungs-Link, wählt man einfach den im unteren Teil der Homepage schlecht erkennbaren Link “Run a temporary application”.

WebEx Run temporary application
image-6828

Die zum Download angebotene Datei führt man mittels Klick auf “Run” aus.

WebEx Run or Save
image-6829

Der Browser frägt nach der Installation einer .cab-Datei, welche ich freundlicherweise abgelehnt habe — es klappt auch ohne. Nach etwa 30 Sekunden war ich im Testmeeting.

Testen kann man das am Besten auf der von Cisco freundlicherweise bereitgestellten Test-Seite unter Test a WebEx meeting on your device.

Tags: ,
Labels: IT

Keine Kommentare | neuen Kommentar verfassen

Montag, 1. August 2016

Twitter-Spammer blocken

Das geht ganz einfach, wenn man sich vowes (kürzlich aktualisierter) Liste bedient:

vowe Twitter Spammer
image-6825

Quelle: Updated list of impolite Twitter spammers

Tags: , ,
Labels: Web

Keine Kommentare | neuen Kommentar verfassen

Montag, 1. August 2016

Zeichensatz einer .srt-Datei erkennen und nach UTF-8 konvertieren

Heute bin ich einer .srt Untertitel-Datei eines Films aus Asien über den Weg gelaufen, welche in VLC nur Zeichensalat anzeigte:

srt Subtitle SHIFT-JIS
image-6816

Ziel war es, diese Untertitel-Datei mit iconv in UTF-8 zu konvertieren. Doch bevor ich damit beginnen konnte, musste ich herausfinden, wie der Ursprungszeichensatz hiess.

Glücklicherweise existiert genau für solche Fragestellungen ein Python-Modul, welches einem das Rätselraten abnimmt. Das Modul heisst chardet, welches ich kurzerhand mittels MacPorts installierte:

# port install py27-chardet

Auf Grund einer Unterlassung früherer Tage musste ich einmalig noch das Python auswählen, welches auf der Kommandozeile standardmässig ausgeführt wird:

# port select --set python python27

Via: ImportError: No module named gnuradio

Anschliessend konnte ich die Untertitel von Python parsen lassen:

$ python -c 'import chardet,sys; print chardet.detect(sys.stdin.read())' < Sugihara\ Chiune.srt
{'confidence': 0.99, 'encoding': 'SHIFT_JIS'}

Via: How to auto detect text file encoding?

Bewaffnet mit dieser Information konnte ich nun iconv zu Hilfe ziehen:

$ iconv -f SHIFT-JIS -t UTF-8 Sugihara\ Chiune.srt > Sugihara\ Chiune.UTF-8.srt

Quelle: Japanese Encoding Conversion

Das Resultat sah nun so aus:

srt Subtitle UTF-8
image-6817

Tags: , , , , ,
Labels: IT

Keine Kommentare | neuen Kommentar verfassen

Montag, 1. August 2016

Automatische Alarmierung bei Verkaufsstart eines Apple-Geräts

Als Apple im Frühjahr 2016 das iPhone SE vorstellte, war für mich klar, dass ich mich (endlich) so rasch als möglich von meinem in die Jahre gekommenen iPhone 5s trennen würde.

Das Datum des Verkaufsstarts in der Schweiz war bald nach Apples Ankündigung bekannt (der 29. März 2016), doch wann genau das Gerät über den Apple Online Store bestellbar sein sollte war mir nicht klar (mittlerweile weiss ich es: 9 Uhr morgens, Schweizer Zeit).

Kurzerhand richtete ich mir am Tag vor dem angekündigten Verkaufsstart deshalb auf Pingdom einen Check auf die Produkteseite im Apple Store ein. Pingdom ist ein Dienst, der die Verfügbarkeit einer Web-Site alle 5 Minuten prüft und verfügt als “Bonus” die Möglichkeit, nach einem String in der HTML-Antwort des Web-Servers zu suchen.

Im vorliegenden Fall machte ich mir die Möglichkeit eines “Transaction Checks” zu Nutze, mit welchem man konkret definieren kann, welches DOM-Element welchen Text beinhalten sollte.

Ich erfasste die Parameter und konfigurierte, dass mich Pingdom alarmieren sollte, wenn der Text

Derzeit nicht verfügbar

nicht mehr auf der Seite iPhone SE 64 GB Silber angezeigt würde (was ich als Indiz wertete, dass die Bestellfunktion nun aktiviert war).

Der Check sah in der Pingdom-Oberfläche folgendermassen aus:

Pingdom Apple iPhone SE
image-6813

Als DOM-Element machte ich li.as-purchaseinfo-dudeinfo-deliverymsg aus.

Fertig! Und tatsächlich, kurz nach 9 Uhr morgens am 30. März 2016 erhielt ich den Alarm direkt auf mein Smartphone.

Tags: , , ,
Labels: Apple

Keine Kommentare | neuen Kommentar verfassen

Sonntag, 17. Juli 2016

Das jährliche Leid des Mieters mit der Nebenkostenabrechnung

Seit Juni 2012 lebe ich mit Stephanie in unserer ersten gemeinsamen Mietwohnung — es handelt sich zudem auch um mein erstes richtiges Mietverhältnis. Das sind nun bereits vier lehrreiche Jahre …

Abgesehen davon, dass man der Hausverwaltung ständig hinterherrennen muss (aktuelle Beispiele: Austausch Leuchtstoffröhre im öffentlichen Teil des Kellers; seit einem Jahr vergessene, aus dem Boden herausragende Eisenstangen vom Rückbau der Parkplätze vor dem Haus; jährlich wiederkehrend verstopfte Dachkännel) stört mich als ordnungsliebenden Schweizer Bünzli vor allem der Modus für die Rückerstattung der Nebenkostenabrechnungen.

Im 2012 unterzeichneten Vertrag steht:

Mietvertrag Nebenkosten
image-6794

Soweit nichts anderes vereinbart worden ist, erstellt die Vermieterin jährlich eine detaillierte Ge- samtabrechnung, […]

Ursprünglich ging ich davon aus, dass “jährlich” bedeutet, dass die Abrechnung per Ende Kalenderjahr erfolgt. Irrtum! Aus Sicht des Vermieters endet die Rechnungsperiode jeweils am 30. April (ich gehe davon aus, dass dieses Datum das Ende der Heizperiode signalisiert). Aus juristischer Sicht wohl zulässig, da im Vertrag nicht explizit steht “zum Ende des Kalenderjahres”.

Gute zweieinhalb Monate nach Ende der Rechnungsperiode (Mitte Juli) erhalten wir dann jeweils die Abrechnung (es muss extrem aufwändig sein, so eine Abrechnung zu erstellen):

Brief Nebenkostenabrechnung
image-6795

Der Vermieter verspricht, Beträge zu unseren Gunsten Ende August an uns zu überwiesen — Nachzahlungen von unserer Seite gab es in den vier Jahren notabene noch nie:

Saldo zu Ihren Gunsten
image-6796

Während der Vermieter sich für die Auszahlung des Überschusses nach der Abrechnung noch einmal eineinhalb Monate Zeit lässt, wäre man als Vermieter gezwungen, Differenzen (“Saldo zu unseren Gunsten”) innert 30 Tagen zu begleichen:

[…] wobei Unterschiede zugunsten oder zulasten des Mieters innert 30 Tagen nach Vorlage der Abrechnung auszugleichen sind.

Schöne asymmetrische Ausführung von Vertragsbestimmungen.

Doch jetzt kommt der eigentliche Hammer — wann trifft das Geld tatsächlich ein? Ich habe nachgeschaut:

  • 14. Oktober 2013
  • 25. September 2014
  • 2. November 2015

Zusammengefasst:

30. April Ende Rechnungsperiode
Mitte Juli Erhalt Brief Nebenkostenabrechnung
30. August versprochene Überweisung des Überschusses
Ende September-Anfang November effektive Überweisung des Überschusses

Im derzeitigen Tiefzinsumfeld fallen in den fünf bis sechs Monaten zwischen Abrechnung und Auszahlung zum Glück kaum Zinsgewinne an. Störend ist es aber allemal, und festigt in mir die Abneigung gegenüber Liegenschaftsverwaltungen wie auch Miethäuserbesitzer.

Tags: , , , ,
Labels: Leben, Schweiz

Keine Kommentare | neuen Kommentar verfassen

Mittwoch, 29. Juni 2016

Einen Outlook 2010-kompatiblen iCalendar (.ics) generieren

Nach einigem Üben habe ich es geschafft, einen iCalendar-Feed in Microsoft Outlook 2010 auf der Arbeit zu integrieren. Hier das finale Layout, welches keine Fehlermeldungen mehr produziert:

BEGIN:VCALENDAR
VERSION:2.0
X-WR-CALNAME:foursquare Check Ins
X-WR-TIMEZONE:Europe/Amsterdam
CALSCALE:GREGORIAN
PRODID:-//eMeidi.com//foursquare2ics 0.32//EN

BEGIN:VTIMEZONE
TZID:Mad
X-LIC-LOCATION:Europe/Amsterdam
BEGIN:STANDARD
TZOFFSETFROM:+0200
TZOFFSETTO:+0100
TZNAME:CET
DTSTART:19701025T030000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
TZNAME:CEST
DTSTART:19700329T020000
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
END:DAYLIGHT
END:VTIMEZONE

BEGIN:VEVENT
UID:5772a5d6498eef051c12ed37@domain.tld
DTSTART;TZID=Mad:20160628T182910
DTEND;TZID=Mad:20160628T183410
DTSTAMP:20160629T190304Z
SUMMARY:Bahnhof Bern
LOCATION:Bahnhof Bern
COMMENT:
END:VEVENT

BEGIN:VEVENT
UID:577297d6488e883164f01dd4@domain.tld
DTSTART;TZID=Mad:20160628T172926
DTEND;TZID=Mad:20160628T173426
DTSTAMP:20160629T190304Z
SUMMARY:Zürich Hauptbahnhof
LOCATION:Zürich Hauptbahnhof
COMMENT:
END:VEVENT

...

END:VCALENDAR

Wichtig war:

Outlook Calendar-Fehlermeldungen

Microsoft Outlook 0x00040023
image-6783

Microsoft Outlook 0x0004001A
image-6784

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

Keine Kommentare | neuen Kommentar verfassen

Mittwoch, 29. Juni 2016

StatusCake funktioniert mit Hostpoint nicht mehr

Vor einigen Monaten wurde ich durch die Ankündigung einer Preiserhöhung beim schwedischen Pingdom aufgeschreckt und sah mich deshalb etwas genauer auf dem Markt für Web-Site-Monitoring herum.

Fündig wurde ich beim us-amerikanischen StatusCake, welches kostenloses Monitoring einer unlimitierten Zahl an Web-Sites bietet — sofern man damit leben kann, das Checks nur alle fünf Minuten erfolgen. Im Nu hatte ich um die 50 Tests eingerichtet — von SSH, OpenVPN, PPTP über ordinäres HTTP/S bis hin zu Dashboards, welche Laufzeitdaten zusammenziehen und mich mittels von 200 abweichenden HTTP-Codes bei Problemen warnen.

Das Monitoring funktionierte wunderprächtig, bis Hostpoint letzte Woche damit begann, von Apache 2.2 auf Apache 2.4 zu migrieren:

Apache Update

21.06.2016, 00:00 Uhr – 31.07.2016, 00:00 Uhr

Wir aktualisieren derzeit auf sämtlichen Server die Apache Version von 2.2 auf 2.4. Dieses Update ist grösstenteils transparent, nur in den unten aufgeführten Szenarien muss eine Anpassung vorgenommen werden. Für das Update wird es eine Unterbrechung von wenigen Sekunden geben.

HTTP/2

Neu Unterstützen wir mit Apache 2.4 das Protokoll HTTP/2. Dieses steigert die Effizienz bei der Kommunikation zwischen Browser und Server: Mehr Durchsatz, mehr Parallelität, weniger Latenz. Vor allem moderne web-2.0-typische Webseiten mit vielen kleinen Resourcen profitieren davon. Voraussetzung für HTTP/2 ist eine TLS geschützte Verbindung (SSL Zertifikat). Dieses steht dank FreeSSL all unseren Kunden zur Verfügung.

Quelle: Hostpoint – Statusseite

Wahrscheinlich seit der Migration auf die neue Web-Server-Version meldete StatusCake für jede meiner bei Hostpoint gehosteten Web-Sites Folgendes:

StatusCake - Geschichtstage Down
image-6773

Die konkreten Ausfallzeiten sind:

bibliothek-neuenegg.ch
2016-06-21 13:02:54 (Server: sl51.web.hostpoint.ch / s20)
sek-neuenegg.ch
2016-06-21 13:09:48 (Server: sl58.web.hostpoint.ch / s27)
geschichtstage.ch
2016-06-27 12:41:58 (Server: sl103.web.hostpoint.ch / s36)
ahc-ch.ch
2016-06-27 12:44:38 (Server: sl103.web.hostpoint.ch / s36)

Erste Anlaufstelle: Hostpoint

Zuerst dachte ich mir: Klarer Fall, da hat Hostpoint geschludert.

Ich kontaktierte dementsprechend deren Support am 28. Juni um 14:51 Uhr, um 17:22 Uhr erhielt ich die fachkundige Antwort von Jonas. Mittels eines Auszugs aus dem Domain Log legte er mir glaubwürdig dar, dass die StatusCake Probes den Server der Bibliothek Neuenegg bis heute alle fünf Minuten anpingen:

...
107.170.219.46 - - [28/Jun/2016:16:45:57 +0200] "GET / HTTP/1.1" 200 8770 "-" "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.4 (KHTML, like Gecko) Chrome/98 Safari/537.4 (StatusCake)"
107.170.227.23 - - [28/Jun/2016:16:51:00 +0200] "GET / HTTP/1.1" 200 8770 "-" "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.4 (KHTML, like Gecko) Chrome/98 Safari/537.4 (StatusCake)"
217.148.43.202 - - [28/Jun/2016:16:56:00 +0200] "GET / HTTP/1.1" 200 8770 "-" "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.4 (KHTML, like Gecko) Chrome/98 Safari/537.4 (StatusCake)"
37.235.48.42 - - [28/Jun/2016:17:01:29 +0200] "GET / HTTP/1.1" 200 8770 "-" "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.4 (KHTML, like Gecko) Chrome/98 Safari/537.4 (StatusCake)"
46.101.110.32 - - [28/Jun/2016:17:06:37 +0200] "GET / HTTP/1.1" 200 8770 "-" "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.4 (KHTML, like Gecko) Chrome/98 Safari/537.4 (StatusCake)"
...

Eine manuelle Kontrolle meinerseits zeigte, dass dies auch bei allen anderen oben genannten Servern der Fall war.

Der Web-Server antwortet auf die HTTP/1.1-Anfrage mittels des HTTP-Codes 200 und liefert 8770 Bytes an Daten zurück. Ein kurzer Test mit wget von soeben zeigt, dass das durchaus hinkommt (wget erhält “nur” 8697 Bytes zurück, also ca. 100 Bytes weniger — dies auf Grund einer Anpassung im Inhalt der Homepage; sprich: vernachlässigbar):

$ wget bibliothek-neuenegg.ch
--2016-06-29 19:34:30--  http://bibliothek-neuenegg.ch/
Auflösen des Hostnamens »bibliothek-neuenegg.ch (bibliothek-neuenegg.ch)« … 217.26.52.30
Verbindungsaufbau zu bibliothek-neuenegg.ch (bibliothek-neuenegg.ch)|217.26.52.30|:80 … verbunden.
HTTP-Anforderung gesendet, auf Antwort wird gewartet … 301 Moved Permanently
Platz: https://bibliothek-neuenegg.ch/ [folgend]
--2016-06-29 19:34:31--  https://bibliothek-neuenegg.ch/
Verbindungsaufbau zu bibliothek-neuenegg.ch (bibliothek-neuenegg.ch)|217.26.52.30|:443 … verbunden.
HTTP-Anforderung gesendet, auf Antwort wird gewartet … 200 OK
Länge: nicht spezifiziert [text/html]
Wird in »»index.html«« gespeichert.

index.html            [ <=>                ]   8,49K  --.-KB/s    in 0s      

2016-06-29 19:34:31 (49,4 MB/s) - »index.html« gespeichert [8697]

Zweite Anlaufstelle: StatusCake

Nun gut. Dementsprechend stellte ich alle wichtigen Infos zusammen, die einem Second-Level-Supporter nützlich erscheinen könnten und kontaktierte am selben Tag um 19:09 Uhr Schweizer Zeit den Support von StatusCake. Dan antwortete mir am folgenden Tag um 11:07 Uhr morgens, ging aber wie von us-amerikanischem Support-Personal gewohnt überhaupt nicht auf mein Anliegen ein. Stattdessen erhielt ich wohl einen Knowledge-Base-Artikel als Standardantwort:

We use a large global network of testing servers, it’s looking to me like you may need to whitelist our IPs on these servers, you can grab our full lists here – https://www.statuscake.com/kb/knowledge-base/what-are-your-ips/

9 Minuten später hatte ich ihm bereits geantwortet (wenn man einen Supporter schon mal “dran” hat, sollte man ihn nicht mehr gehen lassen): Ich wies ihn darauf hin, dass die Apache Access Logs zeigen, dass die Server alle fünf Minuten Besuch von der Probe bekämen, Whitelisting also definitiv nicht das Problem sei.

Um 15:43 Uhr schrieb mir Dan zurück:

Had a look into this one. The only thing I can see that might be causing this is the introduction of HTTP/2, we don’t currently support this and will be giving a down result for any HTTP/2-only enabled sites.

Immerhin schien er die Status-Seite von Hostpoint aufgerufen und dort gelesen zu haben, dass HTTP/2 eingeführt wurde. Das wäre durchaus ein Ansatz, doch wieso taucht die Probe dann mit HTTP/1.1 in den Logs auf? Ich habe Dan zurückgeschrieben, doch bis jetzt ist noch keine weiterführende Antwort eingetrudelt. Ich bleibe dran!

Test mit wget

In der Zwischenzeit kam mir nun auch noch die Idee, dass der Web-Server vielleicht auf Grund des StatusCake User-Agents plötzlich meint, dass die Gegenseite fähig ist, HTTP/2 zu sprechen — und die Verbindung auf HTTP/2 upgradet.

Mit meinem lokal installierten wget probierte ich es aus:

$ wget --server-response --user-agent="Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.4 (KHTML, like Gecko) Chrome/98 Safari/537.4 (StatusCake)" https://www.bibliothek-neuenegg.ch/
--2016-06-29 19:47:56--  https://www.bibliothek-neuenegg.ch/
Auflösen des Hostnamens »www.bibliothek-neuenegg.ch (www.bibliothek-neuenegg.ch)« … 217.26.52.30
Verbindungsaufbau zu www.bibliothek-neuenegg.ch (www.bibliothek-neuenegg.ch)|217.26.52.30|:443 … verbunden.
HTTP-Anforderung gesendet, auf Antwort wird gewartet … 
  HTTP/1.1 200 OK
  Date: Wed, 29 Jun 2016 17:47:56 GMT
  Server: Apache/2.4
  X-Powered-By: PHP/7.0.7
  Set-Cookie: PHPSESSID=dbneu9nses8n52ge8i4esj72b1; path=/
  Expires: Thu, 19 Nov 1981 08:52:00 GMT
  Cache-Control: no-store, no-cache, must-revalidate
  Pragma: no-cache
  Upgrade: h2,h2c
  Connection: Upgrade, Keep-Alive
  X-Frame-Options: SAMEORIGIN
  X-Content-Type-Options: nosniff
  Keep-Alive: timeout=5, max=100
  Transfer-Encoding: chunked
  Content-Type: text/html; charset=utf-8
Länge: nicht spezifiziert [text/html]
Wird in »»index.html«« gespeichert.

index.html                   [ <=>                              ]   8,49K  --.-KB/s    in 0s      

2016-06-29 19:47:56 (30,9 MB/s) - »index.html« gespeichert [8697]

Wie man sieht antwortet der Hostpoint-Server brav mit HTTP/1.1 200 OK (wget spricht KEIN HTTP/2; hätte der Server also — nicht-standardkonform notabene — mit HTTP/2 geantwortet, hätte wget mir einen Fehler angezeigt.).

Dritte Reaktion: Hostpoint entdeckt Blog-Post

Heute (1. Juli 2016) trudelte kurz nach 11 Uhr morgens eine neue Nachricht zu meinem eigentlich als geschlossen geglaubten Support-Ticket bei Hostpoint ein: Jessica nahm Bezug auf meinen kürzlich veröffentlichten Blog-Artikel und teilte mir mit, dass die Angelegenheit intern noch einmal genauer angeschaut worden war. Sie war es, welche mir in diesem E-Mail den entscheidenden Hinweis gab:

StatusCake scheint NodeJS zu verwenden. Dieses hat einen Bug, wenn Apache einen Upgrade Header mitschickt. Dies ist HTTP-Konform und ist so korrekt.

Sie können die Details in folgendem Threads nachlesen:

NodeJS unable to make https requests when h2 enabled in Apache 2.4.18 #73
http: do not emit `upgrade` on advertisement #4337

Hostpoint hatte mit ein wenig Recherche herausgefunden, dass ältere Versionen von NodeJS HTTP/HTTPS-Verbindungen zu Web-Servern abbrechen, wenn dieser mit einer HTTP/2-Upgrade-Anforderung antwortet. Und irgendwie hatte Hostpoint weiter bemerkt, dass StatusCake höchstwahrscheinlich NodeJS für die Abfragen einsetzt.

Klasse, genau solches Debugging liebe ich an meinem Beruf so sehr — und umso mehr freut es mich, wenn sich Dienstleister in einen Bug verbeissen und alles tun möchten, um diesen zu beheben.

Ich bedankte mich bei Jessica und wendete mich anschliessend gleich Dan von StatusCake zu.

Vierte Reaktion: StatusCake

Da ich von Dan seit meiner Rückmeldung nichts mehr gehört hatte, antwortete ich erneut auf sein letztes Mail und beschrieb ihm auf Englisch die von Hostpoint vermutete Ursache hinter dem Problem. Ich hatte ehrlich gesagt nicht viel Hoffnung, dass ich jemals wieder von StatusCake hören würde (Kunde, der (noch) keinen Umsatz generiert, und mit komischen Problemen nervt) — doch ich täuschte mich auch hier.

Um 11:35 Uhr ging meine Anfrage an Dan raus, um 11:44 Uhr (innert 9 Minuten!) lag bereits seine Antwort in der INBOX. Und dieses Mal nichts aus der Büchse, sondern eine tatsächlich auf meine Anfrage Bezug nehmende Antwort.

Dies wahrscheinlich aus verschiedenen Gründen:

  • Ich teilte ihm mit, dass Hostpoint der grösste Hoster in der Schweiz sei
  • Ich erwähnte NodeJS
  • Ich erwähnte die Nachricht von Jessica von Hostpoint und fügte die Links auf die NodeJS-Bugs ein
  • Ich erwähnte, dass auf Grund der weltweit laufenden Upgrades auf Apache 2.4 dieses Problem exponentiell zunehmen würde

Dan schrieb mir:

[…] this has been escalated to our engineers. We are working on this and we will have it sorted asap, it’s a big job so you’ll appreciate that the resolution will not be instant. Sorry if I wasn’t great at troubleshooting this at first – the results we were seeing did not make sense.

Dann warten wir also geduldig, bis StatusCake ihre NodeJS-Installation upgegradet hat …

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

Keine Kommentare | neuen Kommentar verfassen