Archiv Juni 2013

Samstag, 29. Juni 2013

Die neue Welt nach Google Reader

Es ist vollbracht: Ich habe soeben alle meine Feeds unter Google Reader gelöscht, nachdem ich sie als OPML-Datei exportiert hatte.

Meine Feeds habe ich zu Feedbin gezügelt und habe mich nicht gescheut, den Jungs dort im Jahr einige paar Dollars für die Dienstleistung zu überweisen.

Mein initiales Setup zum Konsum von RSS Feeds sieht am 29. Juni 2013 folgendermassen aus:

Besonders geschmerzt hat der Umstand, dass Silvio Rizzis Reeder auf dem iPad weiterhin nur die Synchronisation mit Google Reader unterstützt. Ich musste mich deshalb schweren Herzens von dieser App trennen. Mr. Reader funktioniert tadellos mit Feedbin, aber das UI stört mich. Zu viele Schatten und Rundungen, wo doch der Trend bezüglich iOS-Applikationen klar Richtung flachem, skeumorph-losen Designs geht.

Tags: , , , , , , , ,
Labels: Blogosphäre, IT

2 Kommentare | neuen Kommentar verfassen

Samstag, 22. Juni 2013

Auf Twitter API 1.1 wechseln

Am 11. Juni wurden die in meinem Dashboard eingebundenen Twitter-Feeds plötzlich still. Der Grund: Twitter hat an diesem Tag API 1.0 deaktiviert und macht es seither Entwicklern und Script-Kiddies schwer, mit wenigen Zeilen Code auf öffentliche Twitter-Feeds zuzugreifen.

Wer vor dem selben Problem wie ich steht, sei hier eine kurze Anleitung präsentiert, um die Grundfunktionalität wieder online zu schalten:

Ich habe mich für die PHP-Klasse Codebird entschieden, da ich keine Lust hatte, OAuth-Requests und sonstigen Firlefanz auf eigene Faust zu programmieren.

Zuerst eröffnet man über den offiziellen Entwicklungsbereich mit dem persönlichen Twitter-Konto eine neue Twitter-Applikation. Wichtig ist, dass man sich den Consumer Key und das Consumer Secret merkt, denn diese beiden Variablen werden von der Klasse zur Kommunikation mit Twitter benötigt — authentifizieren sie doch die Applikation gegenüber dem Kurznachrichtendienst.

Nachdem man codebird.php sowie — ganz wichtig — cacert.pem in einem Unterverzeichnis des Web-Roots abgelegt hat, integriert man die Klasse in die bestehen Infrastrukutur:

        function __construct() {
            parent::__construct();
            
            require_once(dirname(__FILE__) . '/twitter/codebird.php');
            \Codebird\Codebird::setConsumerKey('AAAAAAAAAAAAAAAAAAAAA', 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAA');
            $this->cb = \Codebird\Codebird::getInstance();
        }

Als nächstes benötigt man einen sog. Bearer Token. Einmal generiert kann dieser für jeden weiteren Request an die Twitter API wiederverwendet werden — sofern man den Token nicht manuell deaktiviert. Alternativ kann man diesen Token auch bei jedem Aufruf des PHP-Scripts neu von Twitters Server abholen, was aber nicht einer guten Entwicklungspraxis (Cacheing!) entspricht.

Den Bearer Token erhält man in etwa folgendermassen:

$reply = $this->cb->oauth2_token();
$bearerToken = $reply->access_token;
\Codebird\Codebird::setBearerToken($bearerToken);

Jetzt also ist man wie mit API 1.0 in der Lage, eine simple Abfrage abzusetzen — im vorliegenden Fall rufe ich die letzten Tweets von John Gruber ab:

$this->cb->setReturnFormat(CODEBIRD_RETURNFORMAT_JSON);
$jsonData = $this->cb->statuses_userTimeline(array('screen_name' => 'daringfireball','count' => 25),true); // 'true' is needed for app only auth

Damit die Kompatibilität von bestehendem Code mit der neuen Klasse gewahrt wird, nenne ich JSON explizit als Antwortformat. Ganz wichtig ist, dass die Codebird-Methode als zweiten Paramenter true übergeben erhält — dies weist die Klasse an, die Anfrage im Kontext einer Applikation und nicht eines bestimmten Benutzers abzusetzen.

Tags: , , , , , ,
Labels: Web

Keine Kommentare | neuen Kommentar verfassen

Montag, 10. Juni 2013

Wochenlang parkiertes Auto: Äusserst speditive Stadtpolizei Bern

Nachfolgend ein E-Mail, welches ich soeben der Kantonspolizei Bern zugestellt habe:

Sehr geehrte Damen und Herren

Ich bin Anwohner der Schlösslistrasse hier in Bern.

In einem Parkfeld der blauen Zone vor unserem Haus (Nr. 39) ist seit mindestens Mitte April 2013 (!) ein Opel Meriva 1.7 DTI mit spanischem Nummernschild „7329 CZG“ parkiert. Nach der Anbringung von Parkbussen haben Kontrolleure des ruhenden Verkehrs das Auto spätestens am 29. April 2013 mit einer Fussfessel versehen (vgl. Foto im Anhang).

An einem Mai-Wochenende habe ich bemerkt, dass zwei Ihrer Beamten vor dem Gefährt gestanden sind und über die Zentrale die Nummer nach Spanien zu übermitteln versucht haben (inklusive der üblichen Sprachprobleme).

Das Auto steht nun nachweislich seit mindestens 45 Tagen in der blauen Zone (vgl. EXIF-Tags).

Meine Vermutungen als Laie:

  1. Dem Besitzer des Fahrzeugs ist in oder um Bern etwas Schlimmes zugestossen
  2. Das Fahrzeug wurde in Spanien gestohlen und wurde in die Schweiz gefahren. Dies würde bedeuten, dass der ursprüngliche Besitzer das Fahrzeug in Spanien nicht als gestohlen gemeldet hat, ansonsten dessen Nummer in einer international zugänglichen Datenbank auch für die Kantonspolizei Bern einsehbar wäre und so hätte zurückgeschafft werden können

Item. Gerne möchte ich Sie über diesen Kanal bitten, das Fahrzeug doch endlich abzuschleppen, damit der Parkplatz für Besucher freigemacht werden kann. Ich jedenfalls gehe nicht davon aus, dass sich der Besitzer nach dieser langen Zeit noch bei Ihnen melden wird.

Danke für Ihre Bemühungen
Viele Grüsse
Mario Aeby

Quelle: E-Mail von Mario Aeby an beschwerdestelle@police.be.ch

7329 CZG

Nachtrag

Am 20. Juni 2013 — nur gerade 10 Tage nach meiner elektronischen Anfrage — habe ich folgende offizielle Antwort erhalten:

die Abklärungen betreffend des Fahrzeughalters eines ausländischen Fahrzeugs nehmen leider immer viel Zeit in Anspruch. Die Kantonspolizei Bern verfügt leider nicht über den notwendigen Platz, wo die blockierten Fahrzeuge aufbewahrt werden können. Daher muss das Fahrzeug bis zum Abschluss der Abklärungen an der Schlösslistrasse abgestellt bleiben.

Wahrscheinlich kann ich im Juni 2014 darüber bloggen, dass das Fahrzeug erfolgreich aus der blauen Zone entfernt wurde.

Merke: Parkplatzterrorismus à la 2013. Gegner des Individualverkehrs reiben sich die Hände.

Tags: , , , , , , , ,
Labels: Gesellschaft

1 Kommentar | neuen Kommentar verfassen

Sonntag, 9. Juni 2013

Mit postfix über cyons SMTP E-Mails versenden

Wer wie ich zu Hause einen Linux-Server betreibt, benötigt manchmal auch die Möglichkeit, E-Mails zu versenden.

Mit folgenden Einstellungen versende ich mit Linux E-Mails über meinen schweizerischen Qualitätshoster cyon:

/etc/postfix/main.cf

...
relayhost = [server00.cyon.ch]
smtp_use_tls = yes
smtp_sasl_auth_enable = yes
smtp_sasl_mechanism_filter = login
smtp_sasl_password_maps = hash:/etc/postfix/sasl/outgoing
smtp_sasl_security_options = noanonymous

Damit der Versand aber effektiv klappt, muss ich wie im Attribut smtp_sasl_password_maps angegeben noch die Zugangsdaten eines cyon-Mail-Kontos hinterlegen:

/etc/postfix/sasl/outgoing

[server00.cyon.ch] user@domain.tld:password

Bevor postfix zum ersten Mal gestartet wird, muss diese Datei gehasht werden:

# postmap /etc/postfix/sasl/outgoing

Damit wird eine neue Datei unter /etc/postfix/sasl/outgoing.db angelegt, welche von postfix beim nächsten Start eingelesen wird.

Test

Zu Testzwecken versende ich nun per Kommandozeile eine E-Mail:

$ echo "Bla" | mail -s "Test" user@domain.tld

WICHTIG: Es empfiehlt sich, im cyon-Control Panel eine dediziertes E-Mail-Konto anzulegen, welches nur dem E-Mail-Versand dient. Sollte der Server gehackt werden, kann sich der Angreifer so nicht im privaten E-Mail-Verkehr herumtummeln.

Die beiden Dateien /etc/postfix/sasl/outgoing und /etc/postfix/sasl/outgoing.db sollten zudem nur für den Besitzer lesbar gemacht werden:

# chmod 600 /etc/postfix/sasl/outgoing /etc/postfix/sasl/outgoing.db

Tags: , , , ,
Labels: Linux

Keine Kommentare | neuen Kommentar verfassen

Sonntag, 9. Juni 2013

RAM-Speicherauslastung unter Mac OS X über SNMP auslesen

Ich habe heute Sonntag ein wenig Zeit in dieses Projekt investiert und stelle die Scripts, Konfigurationsanpassungen und Installationsanleitung über GitHub zur Verfügung:

macosx-memory-snmp

Tags: , , , , , ,
Labels: Apple

Keine Kommentare | neuen Kommentar verfassen

Sonntag, 9. Juni 2013

SNMP unter Mac OS X 10.8 Mountain Lion aktivieren

Mac OS X 10.8 (Mountain Lion) bringt Out-of-the-box alles mit, um einen SNMP-Server bereitzustellen. In Verbindung mit cacti zeichne ich so in Echtzeit Systeminformationen meines Mac minis, MacBook Airs und Stephanies Mac mini auf.

Wer Rechner ausschliesslich in seinem heimischen LAN betreibt, kann nachfolgende Minimal-Konfiguration einrichten, damit cacti auf einem Drittserver per SNMP v1 und ohne Passwort darauf zurückgreifen kann:

/etc/snmp/snmpd.conf (Desktop-Rechner)

sysContact  Vorname Nachname 
sysLocation Strasse Strassennummer, PLZ Ort

rocommunity public

includeAllDisks 10%
load    30 10 5

Auf einem portablen Gerät würde ich SNMP abriegeln und den Zugriff nur mittels Benutzernamen und Passwort zugänglich machen. Verwendet man obige Lösung, kann im Flughafen-WiFi oder im Uni-WiFi jedes Script-Kiddie mit nmap-Portscans auf den SNMP-Server aufmerksam werden und mehr oder weniger sensitive Informationen abrufen.

Hierzu eignet sich folgende Konfiguration:

/etc/snmp/snmpd.conf (portabler Rechner)

createUser <username>     MD5 "<password>" DES "<secret>"
authuser   read -s usm  <username> priv  .1

sysContact  Vorname Nachname 
sysLocation Strasse Strassennummer, PLZ Ort

includeAllDisks 10%
load    30 10 5

Sowohl password als auch secret können frei gewählt werden (alphanumerische Zeichenfolge).

Quelle: Setup SNMP V3 USM with encryption.

Daemon (neu) starten

Nach der Konfigurationsanpassung heisst es, den SNMP-Server (neu) zu starten. Dies habe ich mit folgendem Script automatisiert:

#!/bin/sh

echo "Stopping SNMP daemon ..."
sudo launchctl unload /System/Library/LaunchDaemons/org.net-snmp.snmpd.plist

echo "Starting SNMP daemon ..."
sudo launchctl load -w /System/Library/LaunchDaemons/org.net-snmp.snmpd.plist

exit 0

Daemon bei jedem Neustart von Mac OS X laden

Hierzu habe ich die von Apple mitgelieferte plist-Datei /System/Library/LaunchDaemons/org.net-snmp.snmpd.plist angepasst:

	<key>Disabled</key>
	<false/>

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

Keine Kommentare | neuen Kommentar verfassen

Samstag, 8. Juni 2013

Mit cacti einen Xerox-Drucker überwachen

Vor Jahren habe ich unter Mit Cacti SNMP-fähige Netzwerkdrucker abfragen cacti-Templates bereitgestellt, mit welchen die Attribute vernetzter HP Laserjet-Drucker per SNMP aufgezeichnet werden können.

Da ich mittlerweile in einer nächtlichen Aktion cacti auf meiner brandneuen Synology DS413j zum Laufen gebracht habe, hiess es heute Samstag-Morgen, meinen Xerox Phaser 3250DN ebenfalls in das Monitoring aufzunehmen. Dies war komplizierter als gedacht, weil zwar offenbar die OIDs für den Page Count standardisiert sind, nicht aber für den Supply Level des Toners. Bei Xerox handelt es sich um die OID 1.3.6.1.2.1.43.11.1.1 respektive 1.3.6.1.2.1.43.11.1.1.9.1.1, um den Füllstand des schwarzen Toners in Prozenten zu eruieren.

Damit ich diesen Wert ebenfalls auslesen konnte, lud ich mir folgende zwei cacti-Template-Sammlungen herunter:

Der Einfachheit halber biete ich hier alle benötigten Dateien in einer einzigen ZIP-Datei an:

SNMP Printer Supplies (27 KB)

Nachdem die XML-Dateien in SNMP Printer.zip über die cacti Web-Oberfläche eingelesen wurden (Import Templates), musste ich die printer_supply.xml aus dem zweiten Download im Web-Server-Verzeichnis von cacti unter cacti/resource/snmp_queries ablegen.

Anschliessend fügte ich beim bestehenden Eintrag des Xerox-Druckers unter Associated Data Queries das Query SNMP – Get Printer Supply ein und erstellte mit Create Graphs for this Host den neuen, zusätzlichen Graphen. Fertig!

Xerox 3250DN Used Level

Labels: Uncategorized

1 Kommentar | neuen Kommentar verfassen

Freitag, 7. Juni 2013

Mac OS X Mountain Lion und die immer wiederkehrenden Log-Einträge

Console.app zeigt mir in regelmässig wiederkehrenden Zeitabschnitten folgende Fehlermeldungen an:

07.06.13 22:43:03.898 mdworker[27399]: Unable to talk to lsboxd
07.06.13 22:43:03.904 mdworker[27401]: Unable to talk to lsboxd
07.06.13 22:43:03.910 mdworker[27400]: Unable to talk to lsboxd
07.06.13 22:43:04.003 sandboxd[27404]: ([27399]) mdworker(27399) deny mach-lookup com.apple.ls.boxd
07.06.13 22:43:04.012 sandboxd[27404]: ([27401]) mdworker(27401) deny mach-lookup com.apple.ls.boxd
07.06.13 22:43:04.022 sandboxd[27404]: ([27400]) mdworker(27400) deny mach-lookup com.apple.ls.boxd
07.06.13 22:43:04.000 kernel[0]: Sandbox: sandboxd(27404) deny mach-lookup com.apple.coresymbolicationd

Das Problem ist an einschlägigen Orten im Internet sehr gut dokumentiert — nur leider ist mir die ultimative Lösung des Problems bisher nicht angeboten worden. Werte Apple-Ingenieure, könnt ihr euch nicht einmal um einen Bugfix bemühen? Danke.

Nachtrag: Mac OS X 10.8.4 scheint das Problem endlich zu beheben:

I’ve had 10.8.4 running for about eight hours now (installed via combo update), and it appears to have have partially fixed my issues. I no longer am getting sandboxd[296] ([299]): mdworker(299) deny mach-lookup com.apple.ls.boxd and kernel[0]: Sandbox: sandboxd(314) deny mach-lookup com.apple.coresymbolicationd messages.

I’ve only gotten one mdworker[299]: Unable to talk to lsboxd message during that time.

Quelle: 10.8.2 – mdworker: Unable to talk to lsboxd

Tags: , , , , ,
Labels: Apple

Keine Kommentare | neuen Kommentar verfassen