Hadoop: Type mismatch in key from map: expected org.apache.hadoop.io.Text, received org.apache.hadoop.io.LongWritable

April 28th, 2015

I got this weird error after copying a MapReduce program from one project to the other one. The output types of Map match the ones defined in the job. I found that Netbeans replaced public void map(Object key, Text value, Context context) by public void map(Object key, Text value, Reducer.Context context). This caused the method not to override its default parent implementation, which has - surprise - LongWritable as output key by default.

WooCommerce shows double cart totals after update to 2.3.8

April 23rd, 2015

This issue is due to a change in the functionality of WooCommerce in combination with a custom theme. Up to now, the template file cart.php used both do_action('woocommerce_cart_collaterals'); and woocommerce_cart_totals(); to show the cart totals. In the current version, the second method should not be used anymore in this context. After removing the second method call in the theme override of THEMENAME/woocommerce/cart/cart.php, the totals appear once again.

Full story »

My daily WTF: Thunderbird

April 23rd, 2015

Bash string concatenation does strange things

April 19th, 2015

With a bash script, I tried to process a file that contains one e-mailaddress per line. I wanted to create a new file with an SQL command per e-mailaddress, something like UPDATE tt_address SET deleted=1 where email='$EMAIL';

Executing it manually on the command line works as expected. If I set the variable EMAIL and echo the update code in quotation marks, it returns the correct SQL code.

If I do the same with in a bash script with the input file, it returns ';DATE tt_address SET deleted=1 where email='abc@def.ghi

The issue was the encoding of the input data file. The command dos2unix replaces windows line breaks by linux ones.

AqHBCI + Hypovereinsbank: Transaktionen abfragen

April 14th, 2015

Gängige Buchhaltungssoftware für kleine Unternehmen ist typischerweise Windows-Desktop-basiert und durchweg schlecht an verteilten Standorten per VPN nutzbar. Alle mir bekannten Lösungen sind sehr teuer, weniger wegen laufender Updates, sondern hauptsächlich weil sie viele unnötige manuelle Arbeitsschritte erfordern.

Bei dem Unterfangen, eine bestehende Windows-basierte Buchhaltungssoftware durch eine effizientere webbasierte Eigenlösung zu ersetzen, stieß ich auf AqBanking (http://www.aquamaniac.de/sites/aqbanking/index.php). Es scheint die im Moment einzige wirklich funktionierende Lösung für deutsche Banken zu sein, um automatisiert auf Kontotransaktionen zugreifen und solche durchführen zu können. Die Java-Alternative http://sourceforge.net/projects/hbci4java ist veraltet und deren aktuellen Fork https://github.com/willuhn/hbci4java habe ich nicht zum Laufen bringen können.

Um automatisiert Kontotransaktionen auf Ubuntu einsehen zu können, muss man das Paket aqbanking-tools installieren. Da die unter Ubuntu 14.04 vorhandenen Pakete als Beta markiert sind (5.3.4beta), habe ich die aktuelle stabile Version aus den Quellen compiliert, was aber nicht notwendig ist.

Um eine Kontoabfrage für die Hypovereinsbank zu machen, ist folgendes nötig:

aqhbci-tool4 adduser -s https://hbci-01.hypovereinsbank.de/bank/hbci 
-b 70020270 -u ZEHNSTELLIGEDIRECTBANKINGNUMMER -N "EIGENERNAME" 
-t pintan --hbciversion=300

Es ist wichtig, die zentrale Bankleitzahl der Hypovereinsbank 70020270 anzugeben anstatt der eigenen lokalen. Man kann den Parameter der HBCI-Version auch weglassen. Dann wird statt der Version 3 die ältere Version 2.2 genutzt, was keine Einschränkung zu sein scheint.

Folgender Befehl holt die hinterlegten Konten zu der angegebenen Direct Banking Nummer und speichert Informationen dazu lokal im Ordner ~/.aqbanking:

aqhbci-tool4 getsysid

Folgender Befehl listet im Erfolgsfall die importieren Konten auf:

aqhbci-tool4 listaccounts

Folgender Befehl liefert die Kontostände aller hinterlegten Konten:

aqbanking-cli request --balance

Mit dem folgenden Befehl kann man Transaktionen zu einem bestimmten Konto abrufen. Es werden allerdings nur Transaktionen zurückgeliefert, die nach dem ersten Aufruf durch HBCI entstanden sind! Es geht 1-2 Tage, bis nach dem ersten HBCI-Aufruf Transaktionen angezeigt werden. Alle älteren Transaktionen kann man nur durch CSV-Export aus dem Direct Banking importieren.

aqbanking-cli request --transactions -a KONTONUMMERMITFUEHRENDENNULLEN 
--fromdate=YYYYMMDD --todate=YYYYMMDD

Sollte etwas nicht wie erwartet klappen, findet man Log-Dateien unter ~/.aqbanking/backends/aqhbci/data/banks/de/70020270/logs