Sonntag, 31. August 2014

Verzeichnis ohne Inhalt in SVN Repository einchecken

In meinem Falle wollte ich ein Cache-Verzeichnis in ein SVN Repository einchecken, ohne die aber in der Zwischenzeit darin abgelegten Cache-Dateien. Nichts leichter als das — SVN sieht auch für diesen Fall eine passende Kommandozeilenoption vor:

$ svn add --depth=empty cache

Via: Add directory structure to SVN, without files

Tags: ,
Labels: Programmierung

Keine Kommentare | neuen Kommentar verfassen

Sonntag, 31. August 2014

Über die Herkunft von Hugo Reitzel Maiskolben

Nach der zweitägigen Wanderung von Innertkirchen zur Gaulihütte und zurück zum Parkplatz Mürvorsess im Urbachtal galt es heute Sonntag bei der Ankunft in Bern meinen Heisshunger zu bändigen. Was gibt es da besseres, als an einem wolkenbehangenen, kühlen Sonntag-Nachmittag die Raclette-Saison einzuläuten?

Nachdem ich viel zu viele Scheiben heissen Käse mitsamt Beilagen verschlungen hatte, fiel mir in einer ruhigen Minute plötzlich auf, dass sich die Etiketten der Hugo Reitzel Silberzwiebeln und Hugo Reitzel Maiskölbchen auf subtile Weise unterscheiden:

Hugo Reitzel Essigwaren

Den Maiskölbchen fehlt das Schweizer Kreuz! Wieso denn das, fragte ich mich — und wurde auf der Rückseite rasch fündig: Die Maiskölbchen sind „Fabriqué en Inde“. Ja Himmelheiland! Da tischt man sich nach einer Wanderung in urschweizerischen Gegenden (heute fand in Meiringen notabene auch noch das 12. Eidg. Scheller- und Trychlertreffen statt) ein urschweizerisches Mahl auf, und isst dann zusammen mit in einem in China hergestellten Raclette-Öfeli geschmolzenen Schweizer Käse und Schweizer Patatlis nicht etwa lokal hergestellte Maiskölbchen, sondern solche, welche aus Indien um die halbe Welt geschifft werden?

Nun gut, dachte ich mir — die Produkte hatte ich während einer Aktion als 3er-Combo-Pack im nahegelegenen Denner erstanden. Per Zufall hatte ich angesichts der in diesem enttäuschenden Sommer viel zu früh nahenden Raclette-Saison weitere Maiskolben angeschafft. Doch dieses Mal in der MIGROS. Und die Verwalter von Duttis Erbe würde ja sicherlich keinen solchen ökologischen Irrsinn befürworten. Denkste:

Hugo Reitzel Essigwaren Rückseite

Auch die MIGROS Classic-Maiskölbchen stammen aus Indien: „Elaboré en Inde“. Und analog zur Verpackung von Hugo Reitzel ist auch auf der MIGROS-Verpackung jeder Text in dreifacher Übersetzung (D/F/I) angebracht, ausser die Herkunftsbezeichnungen, welche erstaunlicherweise ausschliesslich in Französisch wiedergegeben sind. Zufall? Absicht?

Und aus aktuellem Anlass: Wie wissen in diesem Falle die armen Thurgauer- und Nidwaldner-Kinder eigentlich, wo ihre Speisebestandteile herkommen?

Tags: , , , , ,
Labels: Shopping

Keine Kommentare | neuen Kommentar verfassen

Donnerstag, 10. Juli 2014

Mit Python URLs dekodieren und JSON schön ausgeben

Ausgehend von dieser haarsträubenden URL der Credit Suisse …

https://www.credit-suisse.com/who_we_are/de/office_locator.jsp#%7B%22fs%22%3A%7B%22cid%22%3Anull%2C%22prid%22%3Anull%2C%22plid%22%3Anull%2C%22sid%22%3Anull%2C%22d%22%3A%5B0%2C0%2C0%2C0%2C0%2C0%2C0%2C0%2C0%2C0%5D%7D%2C%22ms%22%3A%7B%22c%22%3A%7B%22lat%22%3A46.94739121310314%2C%22lng%22%3A7.44410902261734%7D%2C%22z%22%3A18%7D%2C%22mk%22%3A%7B%22id%22%3A4451%7D%2C%22is%22%3A%7B%22id%22%3A%22mapPanel%22%2C%22ps%22%3A%7B%22id%22%3A4451%2C%22sid%22%3A11613%2C%22segid%22%3Anull%2C%22d%22%3A%5B0%2C0%2C0%2C0%2C0%2C0%2C0%2C0%2C0%2C0%5D%7D%7D%7D

… nachfolgend zwei Python Code-Snippets, mit welchen ihr die URL menschenlesbar machen könnt:

URLs dekodieren

urlClean = urllib.unquote(urlRaw).decode('utf8')

JSON schön ausgeben

json.dumps(json.loads(strJson), sort_keys=True, indent=4, separators=(',', ': '))

Tags: , , ,
Labels: Programmierung

Keine Kommentare | neuen Kommentar verfassen

Donnerstag, 10. Juli 2014

Öffnungszeiten Credit Suisse Bern-Bundesplatz

Da das Standortverzeichnis meiner Hausbank seit Jahr und Tag ein Usability-Nightmare ist, lege ich hier den Link ab, der mich direkt zu den Öffnungszeiten der Credit Suisse Bern-Bundesplatz führt:

Credit Suisse AG, Bern, Bundesplatz 2, Schweiz – Privatkunden

Falls ein Webmaster der Grossbank bei diesem Artikel vorbeischauen sollte, hier einige Anregungen:

  • Bitte das Standortverzeichnis mit — aus eurer Sicht — exotischen Browsern wie Apple Safari testen.
  • Bei diesen Tests solltet ihr am Besten auf den Google Maps fokussieren: Habe ich mich mit Safari auf Bern reingezoomt und klicke Bern–Bundesplatz an, springt die Karte wieder auf die Weltansicht und das Zoomen kann von vorne beginnen …
  • Die Verzögerung von 1-2 Sekunden nach der Auswahl eines Drop-Down-Elements ist Web 0.1, nicht Web 2.0 (ich glaube ich muss einen unfocus-Event generieren)
  • Wieso muss ich mich überhaupt wie ein Idiot durch vier Drop-Downs durchhangeln? Ist das State of the Art-Usability von 2014?
  • Wieso gibt es kein Suchfeld mit Autovervollständigung, in welches ich bspw. „Bundesplatz“ eingeben kann?
  • Wieso wird die URL nicht aktualisiert und wird eindeutig, wenn ich mich durch die Drop-Downs durchgekämpft habe und eine Filiale ausgewählt habe? Eine URL, welche ich als Lesezeichen ablegen kann und welche mich beim nächsten Aufruf direkt zu dem gewünschten Standort bringt?

Stattdessen übermittelt ihr in der URL solches URL-encodiertes JSON-Gefrickel:

https://www.credit-suisse.com/who_we_are/de/office_locator.jsp#%7B%22fs%22%3A%7B%22cid%22%3Anull%2C%22prid%22%3Anull%2C%22plid%22%3Anull%2C%22sid%22%3Anull%2C%22d%22%3A%5B0%2C0%2C0%2C0%2C0%2C0%2C0%2C0%2C0%2C0%5D%7D%2C%22ms%22%3A%7B%22c%22%3A%7B%22lat%22%3A46.94739121310314%2C%22lng%22%3A7.44410902261734%7D%2C%22z%22%3A18%7D%2C%22mk%22%3A%7B%22id%22%3A4451%7D%2C%22is%22%3A%7B%22id%22%3A%22mapPanel%22%2C%22ps%22%3A%7B%22id%22%3A4451%2C%22sid%22%3A11613%2C%22segid%22%3Anull%2C%22d%22%3A%5B0%2C0%2C0%2C0%2C0%2C0%2C0%2C0%2C0%2C0%5D%7D%7D%7D

… was auf Gut Deutsch lautet:

{
    "fs": {
        "cid": null,
        "d": [
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0
        ],
        "plid": null,
        "prid": null,
        "sid": null
    },
    "is": {
        "id": "mapPanel",
        "ps": {
            "d": [
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0
            ],
            "id": 4451,
            "segid": null,
            "sid": 11613
        }
    },
    "mk": {
        "id": 4451
    },
    "ms": {
        "c": {
            "lat": 46.94739121310314,
            "lng": 7.44410902261734
        },
        "z": 18
    }
}

Bravo, ihr habt gerade JSON-over-URL JoU erfunden!

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

Keine Kommentare | neuen Kommentar verfassen

Donnerstag, 10. Juli 2014

MySQL meldet „Using unique option prefix X instead of Y is deprecated“

Warning: Using unique option prefix database instead of databases is deprecated and will be removed in a future release.
Please use the full name instead.

MySQL reklamiert dies, weil die Namen einiger Argumente und Konfigurationsparameter in den kommenden Releases umbenannt werden.

Im Script zur Sicherung meiner Datenbanken war die Anpassung simpel:

...
$MYSQLDUMP --user=$USER --password=$PW --database $DATABASE > "$DUMPFILE"
...

… wurde zu …

...
$MYSQLDUMP --user=$USER --password=$PW --databases $DATABASE > "$DUMPFILE"
...

Man beachte, dass in der ursprünglichen Version der Parameter databases noch im Singular (database) aufgeführt war.

Denkanstoss: Thread: Using unique option prefix pass instead of password is deprecated

Tags: ,
Labels: Linux

Keine Kommentare | neuen Kommentar verfassen

Samstag, 5. Juli 2014

E-Mail bei Verwendung von sudo

Auch das ist dank Google und dem Internet ein äusserst simples Unterfangen:

# visudo

In der Konfigurationsdatei fügt man unterhalb der bestehenden Default-Einträge folgende Zeilen ein:

...
Defaults mail_always
Defaults mailerpath=/usr/sbin/sendmail
Defaults mailto="logger@domain.tld"
Defaults mailsub="*** Command run via sudo on %h ***"
Defaults mailerflags="-t"
...

Quelle: Email notification everytime users run “sudo” on Linux

Tags: , , ,
Labels: Linux

Keine Kommentare | neuen Kommentar verfassen

Samstag, 5. Juli 2014

E-Mail bei (erfolgreichem) SSH-Login

Dank Google und dem Internet war dieses unterfangen in einer Minute erledigt:

/etc/pam.d/sshd

Am Ende der Datei (die ich weder kannte und deren Inhalt ich nicht verstehe) fügte ich folgende Zeile ein:

...
session optional pam_exec.so seteuid /usr/local/bin/ssh-login-notify.sh

/usr/local/bin/ssh-login-notify.sh

Auch mailx kannte ich nicht, bisher habe ich immer mail verwendet (Erläuterungen zum Unterschied) — diese Ubuntu-Benutzer sind am „bleeding edge“ unterwegs!

#!/bin/sh
EMAILTO="logger@domain.tld"

if [ "$PAM_TYPE" != "close_session" ]; then
HOST="`hostname`"
SUBJECT="SSH Login: $PAM_USER from $PAM_RHOST on $HOST"
MESSAGE="`env`"

echo "$MESSAGE" | mailx -s "$SUBJECT" "$EMAILTO" &
fi

Quelle: How do I set up an email alert when a ssh login is successful?

Tags: , , , , , , , ,
Labels: Linux

Keine Kommentare | neuen Kommentar verfassen

Sonntag, 29. Juni 2014

Pestemal (Hamamtücher): Qualitativ hochstehende Frotteewäsche

Vor einigen Monaten machte ich es mir zum Ziel, meinen heterogenen Vorrat an Frotteewäsche zu homogenisieren. Nach einigen Internetrecherchen kam ich zum Schluss, dass die türkischen Pestemal (hierzulande eventuell auch als „Hamamtuch“ bekannt) aus dem gesuchten Material hergestellt werden: Leicht, aber extrem saugfähig. Wichtigste Erkenntnis aus den Recherchen war jedoch, dass man Frotteewäsche nicht mit Weichspüler waschen sollte, weil dies die Aufnahme von Feuchtigkeit verhindert.

Ich schaute mich deshalb im Internet um, wo ich hier in der Schweiz solche Pestemal beziehen könnte. Es scheint durchaus einige Anbieter zu geben, einige mit karikativem Charakter, welche die Fabrikanten im anatolischen Hochland finanziell unterstützen möchten, andere mit binationaler Ehe und somit prädestiniert für einen solchen Handel. Andere schlussendlich haben sich auf den Vertrieb mit „Luxusware“ eingeschworen.

Einerseits gefielen mir entweder die etwas altbackenen Designs nicht, oder ich vermisste die Option, die Designs online einzusehen und zu bestellen oder die Auswahl war zu dürftig. Und manche waren schlicht zu teuer.

Schlussendlich würde ich bei einem Online-Shop von Vertreibern aus München fündig, welche frische, sehr moderne Designs anbieten:

Hamamista

(Zum Zeitpunkt der Bestellung hiess der Web-Shop noch Avacasa)

Seit mehreren Monaten trockne ich mich jeden Morgen mit solchen Tüchern und könnte mir nicht mehr vorstellen, jemals wieder normale Frotteetücher zu benutzen …

Alternativen in der Schweiz

  • average.beach, Online-Shop, Hergiswil
  • FanaFillah, mit Ladenlokal, Zürich
  • Jaliya, Online-Shop, Oetwil
  • fouta, Online-Shop sowie diverse Vertriebspartner (u.a. Kitchener Bern), Zürich
  • Bodytreats, Seebad Enge, Zürich (?)
  • treat you, Online-Shop, Zürich (gemäss Hinweis des Shop-Betreibers über die Kommentarfunktion, siehe unten)

Alternativen im Ausland

Tags: , , , ,
Labels: Shopping

8 Kommentare | neuen Kommentar verfassen

Sonntag, 29. Juni 2014

PHP kann unter Mac OS X nicht mit MySQL kommunizieren

Da war ich am Donnerstag in den beeindruckenden neuen Räumlichkeiten meines ehemaligen Arbeitgebers Liip und nahm am Hackday teil, wo ich mich anfänglich mit der Konfiguration von Docker befasste — und war dann auf meinem MacBook Air in einem anderen Zusammenhang mit Verbindungsproblemen zwischen PHP und der MySQL-Datenbank konfrontiert.

PHPs mysqli meldete:

Error: 2002 - No such file or directory

Das Problem lag gemäss dieser Diskussion auf Stack Overflow darin begründet, dass ich nach dem Upgrade auf Mavericks die mitgelieferte php.ini unter /etc/php.ini verwendete, welche für Mac OS X nicht anwendbare Standardwerte für die Verbindung zu MySQL enthielt.

Nachdem ich die Einträge

...
pdo_mysql.default_socket=/var/mysql/mysql.sock
mysql.default_socket = /var/mysql/mysql.sock
mysqli.default_socket = /var/mysql/mysql.sock
...

in

...
pdo_mysql.default_socket=/tmp/mysql.sock
mysql.default_socket = /tmp/mysql.sock
mysqli.default_socket = /tmp/mysql.sock
...

geändert hatte und Apache mittels

# apachectl graceful

neugestartet hatte, sprach PHP problemlos mit MySQL.

Solche Handstände sind künftig nicht mehr nötig, da ich nun endlich meine Vagrant-Installation vom Mac mini hier auf das MacBook transferiert habe.

Tags: , , , ,
Labels: Uncategorized

Keine Kommentare | neuen Kommentar verfassen

Sonntag, 29. Juni 2014

Kolonne A ist in Microsoft Excel kaum sichtbar

Ich verursachte im Büro kürzlich mit Excel einen Betriebsunfall: Auf den ersten Blick sah es zudem so aus, als wäre Kolonne A ausgeblendet worden. Doch alle Hantiererei brachte die Kolonne nicht mehr zum Vorschein. Nach etwas pröbeln realisiert ich, dass die Kolonne immer noch sichtbar war — aber einfach gefühlte 1 Pixel breit. Wenn ich in Kolonne B navigierte und die ausgewählte Zelle mit dem Tastencursor nach links bewegte, wurde der erwartete Wert der Kolonne A angezeigt. Die Spalte konnte aber nicht verbreitert werden. Was nun?

Google half, die Lösung aufzuzeigen:

From your worksheet menu click on Window > Unfreeze Panes. Then select any cell and hit the Home key.

Quelle: column A is missing. not hidden.

Danach war alles wieder gut.

Tags: , , , , , ,
Labels: IT

Keine Kommentare | neuen Kommentar verfassen