All posts by bert2002

Google Apps Domain DKIM Setup

Wenn man eine Domain bei Google Apps gehostet hat und schon einmal versucht hat sich mit einer Email Adresse die eine Gruppe ist bei Paypal, Amazon etc. zu verifizieren merkt man schnell dass die Emails nicht ankommen. Man kann sich die Email so oft zusenden wie man will, aber es wird nie eine ankommen.

Kurz gesagt, Unternehmen wie z.B. Paypal mögen keine Gruppen und man muss die Domain per DKIM authentifizieren. Den Key kann man sich schnell im Admin Panel von Google Apps erstellen und muss dann nur noch einen TXT Eintrag für die Domain erstellen. Anschließend ein paar Stunden/Tage warten und man kann Emails auch mit einer Gruppe empfangen.

dmesg mit Zeitangabe

Die dmesg Zeitangaben sind nicht wirklich zu lesen, aber manchmal braucht man sie dann doch eben. So einfach ist es dann doch wieder nicht:

# perl -e 'openf,"/proc/uptime";=~/\s/;$x=time-$`;for(qx{dmesg}){s/^\[\s*([\d.]+)\]\s+//;@t=(localtime($x+$1))[5,4,3,2,1,0];$t[0]+=1900;$t[1]+=1;printf"[%04d-%02d-%02d%02d:%02d:%02d] %s",@t,$_}'

MtGox Trader

Nachdem MtGox jetzt endgültig tot ist kann ich auch endlich mal meinen Trading Bot veröffentlichen. Eigentlich wollte ich das schon früher machen, aber bin noch nicht dazu gekommen.
Der Bot handelt nur wenn es auch einen Gewinn abwirft und somit kann man eigentlich nichts verlieren. Dadurch ist er natürlich sehr sehr langsam und meistens habe ich nur einen Trade pro Tag hinbekommen, aber dafür mit Gewinn.

Die Konfiguration ist nicht ganz einfach, weil man die sqlite Datenbank einmal per Hand befüllen muss. Wenn man Bitcoins kaufen will, muss man einen Eintrag in die Tabelle “sold” mit der Anzahl der Bitcoins und eines Preises füllen. Der Preis bestimmt wie niedrig der Preis des nächsten kaufes sein muss. Abhängig je nachdem wie hoch man die Gewinnschwelle einstellt.

Den Code gibt es auf github.com.

Wer nicht immer auf Logfiles lesen steht – es gibt auch ein kleines mini Webinterface dass die letzten Transkationen anzeigt und einen Graphen mit pchart erstellt.

Nagios check_disk wrapper für PHP

Manchmal muss man auch mal die Disk durch einen einfachen HTTP request abfragen. Warum also nicht bestehende Scripte, wie das Nagios Plugin check_disk dafür verwenden. Anbei ein kleines Script, dass genau dieses macht. Eine kleine Einschränkung, der HTTP Response Code ist bei Warning und Critial der gleiche – natürlich leicht zu erweitern ;)

<?php

// global binary
$NAGIOS_DISK = "/usr/lib/nagios/plugins/check_disk";
$DISK_KEY = "Uvg2kFMfy3DU";

if (isset($_GET['key'], $_GET['w'], $_GET['c'])) {
	// okay
	$key = $_GET['key'];
	$warning = $_GET['w'];
	$critical = $_GET['c'];

	if(! (preg_match('/^[0-9]+%$/', $warning) && preg_match('/^[0-9]+%$/', $critical)) ) {
		echo "Critical or Warning values are not a valid value.\n";
		header("HTTP/1.0 510 Not Extended");
		exit;
	}

	if ($key == $DISK_KEY ) {
		// correct key

		$return = shell_exec("$NAGIOS_DISK -l -x /dev/shm -w $warning -c $critical");

		if (stripos($return,"OK")) {
			print "$return\n";
			header("HTTP/1.0 200 Okay");
		} else {
			print "$return\n";
			header("HTTP/1.0 507 Insufficient Storage");
		}

	} else {
		print "ERROR\n";
		header("HTTP/1.0 401 Unauthorized");
	}

} else {
	// error
	print "ERROR\n";
	header("HTTP/1.0 418 I’m a teapot");
}

?>

Android und OpenVPN

Auf einem aktuellen Android (4.x) einen OpenVPN Client einzurichten ist dank OpenVPN for Android auch kein Problem mehr. Einfach die App installieren und man könnte eigentlich schon fast loslegen, wenn man auch einen OpenVPN Server hätte.

Die Jungs von Tinfoil Security haben sich ein paar Minuten hingesetzt und haben ein sicheres Script geschrieben, dass einen Server in Minuten aufsetzt. Dieses ist zwar nur für Debian basierte Systeme geeignet, aber das sollten die meisten sein die man mal so hat. Notfalls kann man sich schnell ein Droplet bei DigitalOcean, etc. einrichten.
Das Script muss man als root ausführen und es erstellt die Server und Client Konfiguration, sowie das Zertifikat. Anschließend muss man nur noch /etc/openvpn/client.ovpn sicher (nein nicht per Email!) auf sein Android laden und man kann sich per ipv4 sicher in öffentlichen Netzen herumtreiben. Happy VPN!

Offene SSH Verbindungen anzeigen

Wow! Ich glaube das ich den Blog ein bisschen vernachlässigt habe. Es sind schon ein paar Monate vergangen seitdem ich das letzte mal etwas geschrieben habe, aber natürlich war ich in der IT nicht untätig. Bin jedoch seit ein paar Wochen kein Blackberry jünger, sondern ein Android Evangelist geworden und bin mit dem Nexus 5 super zufrieden.

In den vergangenen Monaten habe ich selber natürlich in vielen Blogs und Seiten gelesen und dabei recherchiert. So viele Leute beteiligen sich am Open Source und so will ich auch mal wieder was der Community zurückgeben – so gut es geht.

Fangen wir mal etwas klein an und als erstes gibt es ein Script das ganz einfach offene SSH Verbindungen anzeigt und man sich somit schnell auf einen Server einloggen kann. Das ist sehr Hilfreich, wenn man auf vielen Server unterwegs ist und deren DNS oder IP man nicht immer im Kopf hat. Leider hatte ich noch nicht die Lust das Script “IPv6 ready” zu machen, aber vielleicht findet sich da ja jemand ;)

Update: Das Script kann jetzt ordentlich mit v6 umgehen und auch Optionen der SSH Verbindung. Läuft wunderbar unter Linux und MacOSX.

Update 2: noch besser: https://github.com/bert2002/ossh

Blackberry BB10 Webworks SDK auf Linux

Bisher musste ich immer ein Windows oder MacOSX dafür missbrauchen meine Blackberry Applikationen zu bauen, aber das wird sich für BB10 sehr schnell ändern. Das BB10 Webworks SDK wird zwar nicht offiziell unterstützt, aber badtoyz ist es gelungen, relativ einfach, das SDK auf Linux zu portieren.

Was brauchen wir?

  • Java
  • Signing Keys (entweder von einer alten Installation oder über das Native SDK erstellbar)
  • BB10 Webworks SDK von badtoyz

Falls man seine Singin Keys von einer vorherigen Installation benutzen will, benötigt man ein paar Dateien: yourkeyname.p12, barsigner.csk and barsigner.db. Die befinden sich, je nach Betriebssystem, an unterschiedlichen stellen:

  • Windows® XP:  %HOMEPATH%\Local Settings\Application Data\Research In Motion
  • Windows Vista® and Windows 7®:  %HOMEPATH%\AppData\Local\Research In Motion
  • Mac OS:  ~/Library/Research In Motion

Die Keys kopieren wir nach: ~/.rim/ Wenn jedoch das Native SDK benutzt werden soll,brauchen wir nach Erhalt der Keys diese noch aktivieren:

blackberry-signer -register -csjpin PIN -storepass KeystorePassword AppSigningCSJFile DebugTokenCSJFile

Als nächstes brauchen wir das SDK und das bekommen wir am besten direkt über guthub:

$ git clone https://github.com/badtoyz/BB10-WebWorks-SDK-Linux.git
Cloning into ‘BB10-WebWorks-SDK-Linux’…
remote: Counting objects: 527, done.
remote: Compressing objects: 100% (413/413), done.
remote: Total 527 (delta 65), reused 525 (delta 63)
Receiving objects: 100% (527/527), 10.54 MiB | 887 KiB/s, done.
Resolving deltas: 100% (65/65), done.

Über git kann man dann auch das SDK aktuell halten und ich empfehle jedem @bbdevlinux und @badtoyz zu folgen um auf dem aktuellen Stand zu bleiben.

Jetzt haben wir das BB10 Webworks SDK auf Linux und können direkt die erste Applikationen bauen. Ich habe dazu die bbui.js samples genommen:

bbwp samples.zip -g KeyStorePassword -buildID number -o /path/to/folder

So einfach ist das und da fragt man sich doch warum RIM das nicht selber unterstützt…

BB10 auf dem Blackberry Playbook

In den letzten Tagen wurde viel über das neue BB10 von Blackberry berichtet und man konnte erste Einblicke von dem neuen Betriebssystem erhalten. In der Regel kommt man jedoch nur in den genuss von dem neuen OS auf einem Entwickler Gerät oder einem Emulator. Alles nicht wirklich handlich, aber findigen Leuten ist es gelungen das BB10 auf das Playbook zu installieren. Die Anleitung basiert auf der von BlackberryBase.net.

UPDATE: Am besten vorher das Gerät von allen Programmen befreien, sonst wird das ein durcheinander und direkt mit der Winchester 10.0.9.388 Firmware beginnen.

UPDATE 2: Ich habe das Playbook einmal ge-bricked als ich es mit der Winchester Firmware auf Werkseinstellungen zurücksetzten wollte.

Auf gehts! Um BB10 zu installieren brauchen wir erst einmal Dingleberry und die BB10 Firmware (alte Firmware – besser die hier). Die Firmware kopieren wir in ein Unterrichtens von Dingleberry:

unzip Dingleberry-3.3.3-Linux.zip
mkdir Firmware/Custom
cp /path/to/winchester.sdk-10.0.9.388-nto+armle-v7+signed.bar Firmware/Custom/

Das kniffelige kommt jetz das Playbook mit dem Computer zu verbinden. Das Playbook selber muss im Developer Mode sein und im Mac Mode sein.

Nachdem unser Playbook mit dem Computer verbunden ist und eine IP Adresse hat können wir Dingleberry starten. Ich musste beim Playbook die IP “169.254.0.1” wählen, weil Dingleberry sich sonst nicht verbinden wollte (hard coded IP?).

Die Installation dauert ein paar Minuten und man kann sich ruhig einen Tee holen gehen. Wenn man noch welchen hat (unbedingt neuen Tee in Japan kaufen nächsten Monat).

Am Ende der Installation wird das Playbook neu gestartet und es verharrt in der Ansicht mit dem Bokeh und “Blackberry Playbook” als anzeige und verändert fröhlich seine Farbe – genau jetzt “Continue” klicken, weil sich ansonsten nichts ändert. Anschließend hat man sein BB10 installiert und, nicht wundern, es sieht nicht wirklich anders aus. Es sind nur noch die installierten Programme geblieben (vielleicht sollte man vorher das Playbook einmal auf Werkseinstellungen zurückstellen).

Aber wo sind die ganzen Applikationen? BBM? Die müssen wir noch zusätzlich installieren und bekommen ein schönes Paket von hier. Zum Installieren von Applikationen bevorzuge ich das Greasemonkey Script Playbook App Manager. Funktioniert wunderbar unter Linux :)

ABER nicht so voreilig damit, als erstes installieren wir ein BB10 Update auf 10.0.9.388 aus dem Paket mit den Applikationen. Also das ganze nochmal, aber diesmal mit der “winchester.sdk-10.0.9.388-nto+armle-v7+signed.bar” Firmware.

Vielleicht mag jemand testen ob man direkt die Winchester Firmware installieren kann? Das wäre super :) Funktioniert! Über den App Manager kann man jetzt alle Dateien auf einmal auswählen und installieren.

Und schon kann man sich einen kleinen Einblick auf BB10 machen, aber so wirklich gut sieht das ganze auf dem Playbook nicht aus. Nach einem Neustart werden alle Programme doppelt angezeigt und das ändern der BBID funktioniert auch nicht. Es ist und bleibt ein Hack und ist nicht wirklich brauchbar. Ich werde mal schauen ob es möglich ist selbst kompilierte BB10 Apps zu installieren. Wer also einen richtigen Einblick von BB10 erhalten will, sollte sich ein Dev Alpha besorgen oder noch warten..

GIT auf Low-End Server

Wenn man auf einem System mit wenig Arbeitsspeicher, aber einem großen Repo arbeite kann es beim pushen von dem git zu Speicherproblemen kommen. Als Abhilfe ist es möglich dem git einen Limit für der verbrauch vom Speicher zu setzen.

$ git push master
user@example.orge’s password:
Counting objects: 139, done.
Delta compression using up to 2 threads.
error: pack-objects died of signal 9
error: pack-objects died with strange error
[…]

Lösung:

$ git config –global pack.windowMemory “32m”
$ git config –global pack.SizeLimit “32m”
$ git config –global pack.threads “1”

WordPress XMLRCP API

Ich glaube die WordPress API ist einer der am wenigsten dokumentierten API die ich jemals gesehen habe. Deswegen gibt es jetzt ein Beispiel um in Perl ein Bild hochzuladen, einen Post zu erstellen mit Categories, Custom Fields und einem Featured Image.

#!/usr/bin/perl
# script: publish article to a wordpress blog using XMLRPC interface. Uploading a picture and setting this as a featured image. Additionally add custom fields.
# author: <bert2002>
use strict;
use utf8;
use XMLRPC::Lite;
use IO::Socket::SSL;
my ($buf,$contents);
my $pictureid;
my @categories;
# settings
my $username = “USERNAME”;
my $password = “PASWORT”;
my $server = “https://www.yourblog.com/xmlrpc.php”;
my $image = “PATHtoIMAGE”
my $htmlpost = “THErealCONTENT”;
# upload picture to wordpress
open(FILE, “$image”) or die “$!”;
while (read(FILE, $buf, 60*57)) {
        $contents .= $buf;
}
close(FILE);
my $res = XMLRPC::Lite
->proxy($server)
->call(‘metaWeblog.newMediaObject’, 1, $username, $password,
{ name => $image, type => ‘image/jpeg’, bits => $contents } )
->result;
if (defined ($res)) {
$pictureid = $res->{id};
print “. picture uploaded with id $pictureid\n”;
} else {
        print ” .. uploading picture failed: $!”;
}
# post article to wordpress
my $publishdate = “20100220T12:34:56”;
# prepare categories
my $multicategories = “cat1 cat2 cat3”;
@categories = split(/ /, $multicategories);
# finally create that fucking post
my $res = XMLRPC::Lite
->proxy($server)
->call(‘metaWeblog.newPost’, 1, $username, $password,
{
        categories => \@categories,
        custom_fields => [
                { “key” => “keyone”, “value” => “value one” },
                { “key” => “keytwo”, “value” => “value two” }
        ],
        description => $htmlpost,
        title => $productname,
# dateCreated => $publishdate,
        mt_allow_comments => 0,
        wp_post_thumbnail => $pictureid,
}, 1)->result;
if (defined ($res)) {
        print “. posted article id $res and picture id $pictureid\n”;
} else {
        print “.. posting article with id $res failed: $!”;
}
 oder auf gist.github.com

Google Nexus 7 Review

Ich habe mir mein erstes Android gekauft und es wurde das Nexus 7 von Google. Die Veröffentlichung hatte ich wegen einem Urlaub nicht mitbekommen und erst ein paar Tage später erfahren. Direkt in England bei Google  bestellt und nachdem TNT es endlich geschafft hatte das Paket zu liefern war es dann vor ein paar Tagen auch bei mir in Deutschland angekommen.

Bis jetzt hatte ich mein Blackberry Playbook welches auch ein 7 Zoll Bildschirm hat. Ich liebe diese Größe einfach, weil es schön handlich ist und in fast jede Tasche passt. Bei den unzähligen Reviews von dem Nexus wurde dies auch immer hervorgehoben. Da frage ich mich doch ob die jemals ein anderes 7 Zoll Tablet in der Hand hatten? Es ist jetzt nicht wirklich was bahnbrechendes und eine Innovation aus jahrelanger Forschung…

Hardware

Das auspacken war nach den unendlichen Unboxing Videos auch kein Problem und das erste was mich überraschte war wie leicht das Gerät ist. Verglichen zum Playbook ist es ein kleines Fliegengewicht und sehr gut in einer Hand zu halten. Die Verarbeitung ist sehr gut und von den bekannten Hardware Problemen ist bis jetzt noch nichts zu spüren. Die Abstände vom Display zum Rand sind auch ausreichend und man tippt nicht aus versehen auf dem Display herum. Wenn man das Gerät eine weile benutzt. bemerke ich dass auf der hinteren linke Seite etwas warm wird. Ich muss das noch etwas beobachten, aber das fühlt sich nicht ganz super an und ist ziemlich mittig mit einer Größe von ein paar Zentimeter. Vielleicht versteckt sich dort die CPU? Den Akku musste ich nach fünf Tagen das erste mal wieder Laden und im Moment spiele ich recht viel mit dem Gerät herum und das sollte schon passen. Für knapp 200 Euro für die 8GB Variante ist das ein sehr guter Deal. Da kann man nichts falsch machen.

Software

Die Hardware ist sehr wichtig, aber so ist es auch die Software. Mein erstes Android! Ich war schon ein bisschen aufgeregt. Das Nexus 7 bringt natürlich das reine Android 4.1 alias Jelly Beans mit und wird nicht noch halb umgeschrieben, wie das bei anderen Herstellen normal ist. Angeschaltet, WLan eingerichtet, mit einem Google Account registriert und schon war es voll Betriebsbereit. Ich musste mich erst einmal an das neue OS gewöhnen und vermisste sofort das schöne “wischen” bzw. die Gesten von dem Playbook. Aber auch an die digitalen Knöpfe von Android kann man sich schnell gewöhnen. Was mir sofort auffiel war, dass das Menü nicht im Querformat verfügbar ist. Nur wenn Applikationen dies unterstützen funktioniert es. Ich benutzte ein 7 Zoll Tablet eigentlich fast immer im Querformat. Wieso passt sich das Menü nicht an? Das nervt enorm! Die Geschwindigkeit ist jedoch sehr gut. Kein ruckeln oder langes warten, dass Programme gestartet werden.

Android

Ich kenne die vorherigen Versionen von Android nicht, aber kann sagen das sich Jelly Bean sehr gut anfühlt. Wie bereits angesprochen läuft es sehr flüssig. Die Notification Bar ist schnell zu erreichen und ist recht übersichtlich. Die Anzeige der Batterie ist jedoch nicht dazu zu bringen sich in Prozent anzuzeigen. Man muss immer in die Einstellungen gehen um sich den Status in Prozent anzuschauen (aber auch dazu gibt es bestimmt ein Widget). Viel Einstellen lässt sich in dem Android nicht wirklich. Ich konnte noch nicht mal herausfinden wie ich einen globalen Proxy einrichten kann. Geht das überhaubt? Etwas was ich auf dem Playbook vermisse, aber auf Android standard ist, sind die Eingabemöglichkeiten von asiatischen Zeichen. Fantastisch!

Das System ist noch kein mal eingefroren oder abgestürzt und reagiert immer gut. Android 4.1 sieht nach einem stabilen Betriebssystem aus und ich denke Google ist da auf einem richtigen Weg.

Apps

Im “Play Store” von Google befinden sich unzählige Programme. Nicht mit den von der App World vergleichbar. Die Qualität ist jedoch auch nicht immer die beste. Viele Programme die ich im Store gefunden habe, sind für kleine Displays gemacht und sehen nicht zu gut auf dem 7 Zoll großen Display aus. Ein Filter fehlt komplett. Dafür gibt es Programme die ich auf dem Playbook schmerzlichst vermisse wie z.B. Kindle, TED, Skype und ein paar kleinere. Der Chrome Browser ist auch recht schnell und neue Tabs werden im Hintergrund geöffnet (ein Traum). Leider werden viele Seiten nicht mit der Mobile Seite geöffnet sondern mit der normale Desktop Ansicht. Diese ist nicht immer optimal und man muss sich auf die Suche von der mobilen Seite machen.

Fazit

Ich finde das Gerät sehr gut gelungen und der Preis ist fantastisch. Wenn jetzt noch ein paar gute Hüllen veröffentlicht werden, könnte das Nexus ein täglicher Begleiter werden (3G wäre auch super). Wie sich der Akku und die Programme auch ohne W-LAN verhalten werde ich die nächsten Tag mal testen und auf einen ersten Trip mitnehmen. Es muss sich erst noch Beweisen…