Sonntag, 18. November 2012

Wenn Apple die SBB Web-Site inspiriert hätte …

Nachdem Apple bei SBB grosszügig abgekupfert hat, könnte nun die SBB mit einem Website Redesign zurückschlagen ;)

Ich persönlich finde das Design minimalistisch und sehr übersichtlich. Jedenfalls übersichtlicher, als es die aktuelle SBB Web-Site derzeit ist.

Notiz am Rande: Der Designer arbeitet bei Namics, der Web-Agentur, welche sich — neben anderen — für die überarbeitete SBB Web-Site verantwortlich zeichnet.

Tags: , ,
Labels: Web

Keine Kommentare | neuen Kommentar verfassen

Sonntag, 18. November 2012

Adobe Source Code Pro: Quelloffene Programmierer-Schrift

Adobe überrascht für einmal und offeriert mit Source Code Pro eine quelloffene OTF-Schrift, welche speziell für Entwickler geeignet ist, welche eine leicht lesbare Monospace-Schriftart benötigen.

Wer das Ding kompilieren möchte, kann sich an Adobes Git-Repository vergnügen:

adobe / source-code-pro

Alle anderen laden sich das OTF-Binary von hier herunter:

Free Font Source Code Pro by Adobe

Nicht mit Apple Terminal

Leider unterstützt Apples Terminal.app unter Mac OS X 10.7 keine OTF-Fonts:

Terminal.app won’t display OpenType fonts (.otf)

Mist! Dann verwende ich die Schrift halt nur in TextMate … Als Ersatz kommt in Terminal.app Microsofts Consolas zum Einsatz.

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

Keine Kommentare | neuen Kommentar verfassen

Sonntag, 18. November 2012

bash Startup-Konfigurationsdateien unter Mac OS X

Wer seine Shell unter Mac OS X nach eigenem Gusto konfigurieren möchte, legt an eine oder mehrere der nachfolgenden Dateien Hand an — je nachdem, ob man Anpassungen systemweit (/etc/profile, /etc/bashrc) oder nur für den eigenen Benutzer eingerichtet haben möchte (~/.*; siehe unten).

Es muss dabei zwischen Login- und Non-Login-Shells unterscheiden werden. Was für einen Shell-Typ man gerade verwendet, findet sich ganz leicht mit folgendem Befehl heraus:

$ shopt | grep login_shell
login_shell    	on

Login-Shell

  1. /etc/profile
  2. Die erste existierende der folgenden Dateien (nur eine!):
    1. ~/.bash_profile
    2. ~/.bash_login
    3. ~/.login

Non-Login Shell

  1. /etc/bashrc
  2. ~/.bashrc

Quelle: What startup files are read by the shell? (shell configuration)

Soweit so gut … Die Sache wird nun aber noch weiter verkompliziert, indem man beim Login mit dem persönlichen Benutzer standardmässig eine bash-Shell vorgesetzt bekommt:

$ echo $SHELL
/bin/bash

Nachdem man aber mit sudo su zum root-Benutzer wechselt, hat man „nur“ noch eine sh-Shell:

# echo $SHELL
/bin/sh

Wie in einem SuperUser-Thread dargelegt handelt es sich bei /bin/sh seit Mac OS X 10.6 um ein bash-Binary, welches aber mit dem Flag -enable-strict-posix-default kompiliert wurde. Da sich aber /bin/sh wie ein Bourne Shell verhält, werden gar keine Konfigurationsdateien eingelesen:

Note that when bash is invoked with the name „sh“, it tries to mimic the startup sequence of the Bourne shell („sh“). In particular, a non-login shell invoked as „sh“ does not read any dot files by default. See the bash man page for details.

Quelle: What startup files are read by the shell? (shell configuration)

Fazit

Wer möchte, dass /etc/bashrc auch bei einem sudo su ausgeführt wird, muss die Login-Shell des root-Benutzers ändern:

# chsh -s /bin/bash root
Changing shell for root.

In den root-Benutzer wechselt man dann mittels

$ sudo -i

Tags: , , ,
Labels: Apple

Keine Kommentare | neuen Kommentar verfassen

Sonntag, 18. November 2012

Goldmann Sachs

Gestern hatte ich endlich wieder einmal Zeit, um seit langem auf meiner Festplatte lagernde Dokumentarfilme zu schauen. Als erstes war die arte-Dokumentation GOLDMAN SACHS – LA BANQUE QUI DIRIGE LE MONDE an der Reihe.

Interessant, wie diese Bank — notabene ohne eine einzige Filiale — in den letzten 5 Jahren in jeder Finanzkrise und auf dem finanzpolitischen Parkett in den USA und Europa mitgemischt hat. Und natürlich — so der O-Ton — in völligem Eigeninteresse. Und massiven Gewinnen.

Jetzt weiss ich übrigens auch, wer Fabulous Fab ist …

Tags: ,
Labels: Wirtschaft

Keine Kommentare | neuen Kommentar verfassen

Samstag, 17. November 2012

Bilddateien unter Mac OS X mit Rechtsklick auf Flickr laden (Python und Automator)

Rückblickend — wie so vieles — eine ganz simple Aufgabe.

WICHTIG: Das neueste, überarbeitete Script findet sich auf Github unter emeidi/flickrUpload

flickrUploaderLean.py

#!/usr/bin/env python

import os
import sys
import re
import flickrapi

api_key = ''
api_secret = ''

flickr = flickrapi.FlickrAPI(api_key, api_secret)

(token, frob) = flickr.get_token_part_one(perms='write')
if not token:
    raw_input("Press ENTER after you authorized this program")
flickr.get_token_part_two((token, frob))

numArgs = len(sys.argv)
if(numArgs < 1):
	sys.exit("Usage:" + sys.argv[0] + " ")

photo_path = sys.argv[1]

if(os.path.isfile(photo_path) == False):
	sys.exit("File not found: " + photo_path)

res = flickr.upload(filename=photo_path, is_public=u'1')

t = res[0]
if t.tag == 'photoid':
	print 'http://www.flickr.com/photos/upload/edit/?ids=' + t.text
else:
	print 'http://www.flickr.com/upload+failed'

sys.exit(0)

Anschliessend erstellt man mittels Apple Automator einen Service, welcher nach dem Abspeichern mittels eines Rechtsklick auf eine Datei im Untermenu „Services“ aufgeführt wird:

Konkret:

  • Service receives selected files or folders in Finder.app
  • Run Shell Script
    • Shell: /bin/bash
    • Pass Input: as arguments
    • (Textfeld): /Users/mario/Scripts/flickrUploadLean.py „$@“
  • Display Webpages

Tags: , , , , , ,
Labels: IT

Keine Kommentare | neuen Kommentar verfassen

Mittwoch, 7. November 2012

Microsoft Domain Policies mit grep unter Windows filtern

Herkules-Aufgabe am Tag, an welchem Barack Obama zum neuen alten Präsident der USA gewählt wurde: Ich musste aus über 150 Domain Policies im HTML-Format diejenigen Dokumente herausfiltern, welche Passworteinstellungen enthielten. Und dies – wohlgemerkt – unter Windows. Wie macht man das?

Im Grund genommen ist das ganze keine grosse Hexerei:

  1. msysgit herunterladen
  2. msysgit installieren
  3. Git bash starten
  4. Ins Verzeichnis mit den Policies wechseln
  5. Folgenden Befehl ausführen:
    $ grep "Enforce password" *.html

Doch oha! grep liefert keine einzige Datei zurück, welche Kennwortrichtlinien enthält? Ein cat auf eine Beispieldatei zeigt, dass zwischen jedem Buchstaben ein Leerzeichen folgt. Indem man eine Beispieldatei mit Notepad++ öffnet, findet man heraus, dass die Exporte vom Domain Controller mit UCS-2 Little Endian enkodiert sind (der Zeichensatz steht in Notepad++ unten rechts in der Statusleiste).

Was nun? Ich habe mir kurzerhand ein bash-Script geschrieben, um die Dateien on-the-fly in ein für grep verständliches Format (UTF-8) zu konvertieren:

#!/bin/sh

if [ $# -lt 2 ]
then
	echo "Usage: $0 [extension of files to search] [string to search for in files]"
	exit 1
fi

for i in *.$1
do
	RES=`iconv -f UCS-2LE -t UTF-8 "$i" | grep "$2"`
	RET=$?

	if [ $RET -eq 0 ]
	then
		echo "$RET - $i"
		echo $RES
		echo ""
	fi
done

exit 0

Das Script tut folgendes: Zuerst liest es alle Dateien im aktuellen Verzeichnis aus, welche auf .html enden. In einer Schleife wird nun jede gefundene Datei mittels iconv von UCS-2LE nach UTF-8 konvertiert und an grep weitergepipet. grep sucht im Zeichensalat nach „Enforce password“. Die bash-Variable $? speichert das Resultat dieses Befehls; sprich 0 falls die Zeichenkette gefunden wurde, 1 (oder eine andere Zahl ungleich 0), wenn grep gestolpert ist oder einfach nichts gefunden hat. Ist $RET gleich 0, wird der Dateiname ausgegeben.

Schlussendlich fanden sich in den 150 Dateien gerade mal 6 Stück, welche Passworteinstellungen enthalten. Doch statt dem fehleranfälligen manuellen Geklicke habe ich quelloffene Tools, gepaart mit ein wenig Scripting-Wissen für mich arbeiten lassen.

Gut zu Wissen

Wer die Namen der Zeichensätze nicht auswendig weiss, dem wird unter folgendem Link geholfen:

libiconv

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

Keine Kommentare | neuen Kommentar verfassen

Montag, 29. Oktober 2012

Web-Videos von arte, ARD, ZDF & Co. herunterladen

Das kriegt man offenbar mit folgendem Mac-Tool hin:

Mediathek for Mac

Leider ist ausgerechnet die arte-Doku, an welcher ich interessiert bin, offenbar nicht verfügbar:

Quelle: GOLDMAN SACHS – LA BANQUE QUI DIRIGE LE MONDE

Tags: , , , ,
Labels: Medien

Keine Kommentare | neuen Kommentar verfassen

Montag, 29. Oktober 2012

MySQL, das Windows unter den Datenbanken

Obwohl ich seit 12 Jahren mit dieser Datenbank arbeite, habe ich mir noch nie Gedanken darüber gemacht, wie unkonform MySQL mit Daten umgeht:

Via: PostgreSQL Rising

Trotz all seinen Fehlern: MySQL reicht für die Bedürfnisse von mindestens 80 Prozent seiner Benutzer. Normalerweise verfrachte ich die Prüfhandlungen und die Logik in PHP-Scripte und verwende MySQL als „dummen“ Datenspeicher. Doch in einigen Fällen habe ich mir doch einige MySQL-Funktionen und Feld-Attribute zu nutzen gemacht, um Fehleingaben auch auf Datenbankebene zu verhindern. Denn die Datenbank ist nun mal das letzte Bollwerk vor dem Datensalat.

PS: Wenn man schon den unangefochtenen Platzhirschen im Linux Shared Hosting-Bereich madig machen will, sollte man auf Comic Sans als Schrift verzichten. Helvetica oder Helvetica Neue gäbe dem Video mehr Seriosität.

Tags: , , ,
Labels: Web

Keine Kommentare | neuen Kommentar verfassen

Donnerstag, 18. Oktober 2012

Mit curl eine fortlaufend nummerierte Reihe von Photos in Gallery 2 herunterladen

Nichts leichter als das. Man öffne die Detailansicht des ersten Photos in Gallery 2, notiere sich den Wert der Variable und kopiere die URL. Dasselbe tut man für das letzte Photo des Albums.

Die URL und die zwei Zahlen fügt man in folgenden Kommandozeilenbefehl ein:

curl -f "http://domain.tld/main.php?g2_view=core.DownloadItem&g2_itemId=[39169-39632]&g2_serialNumber=2" -o "#1.jpg"

Erläuterung der Optionen:

  • -f verhindert, dass HTTP-Fehlermeldungen auch als Dateien gespeichert werden — denn es könnte ja sein, dass die Sequenz nicht durchlaufend ist.
  • [39169-39632] definiert den Anfangs und den Endwert der Sequenznummern von Gallery 2
  • -o Speichert die Rückmeldung des Web-Servers in eine Datei und gibt sie nicht auf im Shell aus
  • #1 ist die fortlaufende Nummer. So werden mit -o Dateien mit eindeutigen Dateinamen geschrieben

Quelle: trying to use curl to download a series of files

Tags: , , , , ,
Labels: Web

Keine Kommentare | neuen Kommentar verfassen

Dienstag, 16. Oktober 2012

Aus einer S/MIME verschlüsselten E-Mail-Nachricht das DER-Zertifikat des Senders extrahieren

Damit man Lotus Notes zur verschlüsselten S/MIME-Kommunikation mit anderen Internetbenutzern bewegen kann, sind einige Kapriolen nötig (ich habe bereits darüber gebloggt).

Heute hatte ich einen neuen Fall: Ein Kunde schickte auf ein von mir signiertes S/MIME-Mail eine S/MIME-verschlüsselte Antwort zurück. Lotus Notes entschlüsselte den Text brav im Hintergrund (ich habe mein VeriSign-Zertifikat im Mail-Client hinterlegt), doch wie immer landete trotz der abgenickten „Cross Certify“–Abfrage kein Zertifikat in meinem lokalen Adressbuchkontakt des Ansprechpartners. Ein mir bekanntes Problem, welches verhindert, dass ich der Person ebenfalls verschlüsselt antworten kann.

Wie nicht anders zu erwarten war, habe ich es irgendwann einmal dann doch noch geschafft, aus dieser Nachricht das X.509-Zertifikat des Ansprechpartners zu extrahieren. Rückblickend sieht es — unter uns gesagt — gar nicht so kompliziert aus:

Verschlüsselten Textblock ins Dateisystem abspeichern

Hierzu öffnet man die Nachricht zuerst einmal mit Doppelklick. Dann klickt man in den Body der Nachricht. Danach:

  1. View
  2. Show
  3. Page Source

Man selektiert den ganzen Text ab hier …

Content-Transfer-Encoding: base64
Content-class: urn:content-classes:message
Content-Type: application/x-pkcs7-mime;
		 name="smime.p7m"
Content-Disposition: attachment;
		 filename="smime.p7m"
Content-Description: smime.p7m

MIImFQYJ ...

… gefolgt vom Base64-enkodierten verschlüsselten Text.

Den Zeichensalat kopiert man in eine Textdatei, die man bspw. encrypted.p7m nennt.

openssl für Windows

Als nächstes besorgt man sich die Win32-Binaries von OpenSSL:

Win32 OpenSSL

Diese werden wie vorgeschlagen unter C:\OpenSSL-Win32 installiert. Dabei kann es nicht schaden, den Pfad auch gleich noch in die PATH-Variable des Environments aufzunehmen:

  1. System Properties
  2. Advanced
  3. Environment Variables
  4. User variables for %USER%
  5. PATH
  6. Edit

Eigenes Zertifikat verfügbar machen

Um eine Textdatei mit OpenSSL zu entschlüsseln, benötigt man selbstverständlich noch seinen eigenen privaten Schlüssel. Diesen habe ich als .pfx aus dem Microsoft Certificate Manager extrahiert und im Dateisystem abgelegt. Wichtig ist, dass man den Private Key explizit auch exportiert, sonst bringt die ganze Übung nichts.

Damit OpenSSL das Zertifikat versteht, muss es von PFX nach PEM umgewandelt werden:

openssl pkcs12 -in mario-aeby.pfx -out mario-aeby.pem -nodes

Quelle: How to Convert PFX Certificate to PEM Format for Use with Citrix Access Gateway

Wer sein Import Password vergessen hat … muss hier leider aufhören. Wer sich aber an das Passwort erinnern kann und es openssl übergibt, liest umgehend:

MAC verified OK

Schaut man sich die .pem-Datei an, liest man in meinem spezifischen Fall folgendes:

Bag Attributes
   localKeyID: 01 00 00 00
   friendlyName: le-f2f17a0f-253d-4395-a852-137b4c1ad697
   Microsoft CSP Name: Microsoft Strong Cryptographic Provider
Key Attributes
   X509v3 Key Usage: 10
-----BEGIN PRIVATE KEY-----
MII...

Ordnerinhalt

Der Ordner sollte nun enthalten:

  • smime.p7m
  • mario-aeby.pfx
  • mario-aeby.pem

Entschlüsseln

Nun geht es ans Eingemachte:

openssl smime -decrypt -in encrypted.p7m -inform SMIME -inkey mario-aeby.pem -out decrypted.p7m -outform SMIME

Wird von OpenSSL keine Fehlermeldung ausgegeben, konnte die Nachricht entschlüsselt werden. Die Nachricht liegt ebenfalls als Base64-kodierter Zeichenhaufen in der Datei decrypted.p7m

Zertifikat des Senders extrahieren

Nun kann man das Zertifikat des Senders aus der unverschlüsselten, aber signierten Nachricht extrahieren:

openssl smime -verify -noverify -in decrypted.p7m -signer sender.pem

Informationen über das Zertifikat

Wenn wir uns die sender.pem anschauen, finden wir heraus, wo der Absender sein Zertifikat gelöst hat (in dem vorliegenden Fall war es SwissSign):

openssl x509 -in sender.pem -text

Umwandlung in ein DER-Zertifikat

Fast haben wir es geschafft. Mit folgendem Befehl produzieren wir ein DER-Zertifikat, welches Lotus Notes versteht und in das Adressbuch importieren kann:

openssl x509 -in sender.pem -outform der -out sender.der

Import in Lotus Notes

Hierzu öffnet man das Adressbuch und öffnet die Adresskarte des Senders mittels Doppelklick. Anschliessend importiert man das Zertifikat:

  1. Actions
  2. Certificates
  3. Import Internet Certificates
  4. Files of type: Binary and Base64 Files (*.cer, *.der)
  5. <Auswahl der Datei sender.der im Dateisystem>
  6. Open

Fertig!

Links

Nebenbemerkung

Zertifikatanbieter wie bspw. QuoVadis Trustlink Schweiz AG bieten auf Ihren Homepages die Möglichkeit an, nach Angabe der E-Mail-Adresse des Zertifikatbesitzers dessen Public Key herunterzuladen.

Bei SwissSign fand ich — nur per Zufall und langem Suchen — folgendes Abfrageformular:

Search / Manage

Die E-Mail-Adresse des Ansprechpartners fand sich aber nicht in der Datenbank. Ansonsten hätte ich von hier den Public Key respektive das DER-Zertifikat herunterladen können.

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

Keine Kommentare | neuen Kommentar verfassen