Back from Brazil

We struggled and fought and reached the 4th place at the RoboCup@Home competition. More posts are coming again from now on.

Running ipython notebook on a remote (outdated) ubuntu system

Note: Jump to the end of this post to install a basic ipython-notebook environment.

ipython notebook is one of the most impressive things I’ve seen the last few years. You can reache outstanding results wich are documented and calculated on the same page. So no more paper war and mixed solutions for my problems anymore ;).

But while I get more and more different systems/computers and laptops, it’s hard to keep track of a consistent notebook. One could say: Use git or subversion. But then it comes to the point where you want to show some other guys your results in the bus and you want to change some variables, or add some new ideas (Assuming that you have internet everywhere nowadays). At that point even the notebook-viewer in combination with git becomes (more or less) futile.

So what do we want:

  1. An remote ipython notebook with up-to-date packages
  2. Secured from the rest of the world
  3. A secured write/execute-mode
  4. A read-only mode (so that we can distribute our achivements to privileged poeple)
  5. git (optional and not discussed here)

What do we have: A remote server running Debian, with a stable but non up-to-date repository.

While the points 2.-4. can be solved using this solution, the remote server becomes a problem, due to the fact that it has mostly a very stable but very outdated package repository. This leads to ugly outdated or non existing packages. In my case even the standard install routine from the ipython webpage did not work:

In this case, you have to use pip, which downloads the current packages from PyPI and compiles them for your system. As you can imagine, you need a bunch of dev packages. So here comes the solution at a glance:

A nice conversion from notebook to a PDF document:

# Update [2014-04-15]

The new version of ipython was released: ipython 2.0.0 which needs python > 2.6. So you cannot use pip together with PyPi for installing/upgrading ipython 1.* anymore, if your system still runs python 2.6 or older.

The workaround is as follows:
Grep the newest 1.* release from the ipython archive
Then install the version (here 1.2.1) you need with pip explicitly:

Blocking bad IPs using badips.com API

Regarding this post http://www.badips.com/blog/scores-are-here now the API for scores work. Now it is possible to use it for e.g. enhance your iptables to block all the bad IPs which have been reported to http://www.badips.com/.
Afterwards you’ll find two  scripts which are able to use the API and block the reported IPs. The first one is able to use the hosts.deny file. The second one defines rules in iptables. Another way could be the use of ipset, but for now you can choose between these two ways.

Script for hosts.deny:

Script for iptables:

bad IPs

After nmap-ing my on of my servers, I found some ugly IPs trying to bruteforce my SSH accounts.
After writing a script for my SSH deamon which logs bad IPs and add them to hosts.deny, I thought about all the other deamons on my server.

Not willing to write fancy scripts for all the others, I installed the nice tool fail2ban which add bad IPs to a local banlist.
It works like a charm and the best of all: There is a nice frontend call bad IPs.
A nice visualization for every server owner ;-)

Erlösung des UnityMedia Technicolor tc7200

Einer meiner größten Fehler den ich je begangen habe, war zu UnityMedia (UM) zu wechseln. Geblendet von den tollen Angeboten konnte ich mir vor ca. einem Monat noch nicht ausmalen, welche Probleme da auf mich zukommen. Neben dem DS-Lite, was ja noch so gerade zu verkraften ist, wird von UM ein absolut fehlerhaftes, nicht funktionsfähiges und sicherheitstechnisch bedenklicher Modem/Router ausgeliefert:
Das Technicolor tc7200
Hier ist ein schöner Blog der den ganzen Frust konzentriert und auf dem ich in den Kommentaren selbst partizipiert habe:
kabelbw-technicolor-freies-internet-ist-uns-egal
Nach sehr viel Hin und Her habe ich beim technischen Service eine Person am Hörer gehabt, welche mir erklärte, wie man es denn am wahrscheinlichsten schafft ein Cisco Modem zu erhalten. Zunächst ist es erst einmal unmöglich dies am Telefon zu schaffen, da die Leute nicht die Berechtigungen haben Gerät A gegen B zu tauschen (nur A gegen A). Somit bleibt nur die Mail an den Kundenservice (die dürfen A gegen B tauschen) von UM mit dem Betreff “Beschwerde”.

Nachfolgend die Mail, woraufhin mir ein “Cisco EPC3208G EuroDocsis 3.0 2-PORT” und ein “DLink DIR-600” geschickt wurde:


Date: Wed, 09 Oct 2013 09:31:48 +0200
From: Timo ???
To: kundenservice@unitymedia.de
Subject: Beschwerde - Kundenummer ???????? - tc7200 Problem

Sehr geehrte Damen und Herren von UnityMedia,

nach Rücksprache mit ihrem telefonischen Kundendienst wende ich mich,
unter deren Anweisungen, nun an Sie.

Wie Sie wahrscheinlich aus dem Verlauf, den Sie in Ihrer Datenbank unter
meiner Kundennummer, herauslesen, besteht seit Inbetriebnahme der
Internetverbindung ein kontinuierlich Problem mit der Internetverbindung.
Sie ist entweder gar nicht, oder nur sporadisch vorhanden.
Ihre Techniker, die sowohl die Leitung bis zu meinem Hausanschluss, als
auch den Anschluss innerhalb der Wohnung geprüft haben, konnten Seitens
der Verkabelung keinen Fehler feststellen.
Sowohl die Techniker, als auch verschiedene Kontaktpersonen Ihres
telefonischen Kundenservices haben mir bestätigt, dass der Fehler
eindeutig durch das Gerät tc7200 verursacht wird.

Unter der Anweisung Ihres Kundendienstes wende ich mich nun mit der
folgenden Bitte an Sie:
Tauschen Sie das Gerät gegen ein Funktionierendes, nicht tc7200, aus.

Einer meiner Arbeitskollege hat sich mit der gleichen Problematik an Sie
gewandt, und das folgende Produkt im Austausch von Ihnen erhalten:
Cisco EPC3208 EuroDocsis 3.0 2-PORT EMTA
Seitdem erfreut er sich einer funktionierenden und unterbrechungsfreien
Internetverbindung.

Ich bitte Sie den Fehler schnellst möglich zu beheben, ohne mich auf ein
bald kommendes Firmwareupdate des tc7200 zu verweisen.
Andernfalls nehme ich mein Sonderkündigungsrecht in Anspruch, welches
bei einer unzureichenden Bereitstellung des Internets und
Nichtbeseitigung des Fehlers innerhalb von 4 Wochen, greift.

Mit freundlichen Grüßen,
Timo ???

Using vncviewer without typing in the password

Hi,

it is more convenient to use vncviewer without typing in the password all the time.
To do so, just create an own password-file in the following way:

After you typed in the password twice in plain text, just use the created file to connect to the server:

Greetz!

Remapping Caps-Lock under XServer to call e.g. konsole

Hi there,

isn’t it horrible if you write a text and suddenly THIS HAPPens.
So while Caps-Lock is the most useless key, one could ask for a remapping to a more usefull key or action (call the console).

So let’s check out how to remap the Caps-Lock key using xmodmap:
First we need to unmap the Caps-Lock from the special mappings:

Now we need to figure it out, which keycode belongs to the Caps-Lock key. While using th tool xev and pressing Caps-Lock, we can see that keycode 66 belongs to the key Caps-Lock and that it is mapped to Caps_Lock. (The number of the keycode is the unique identyfier regarding a key and the keysymname like Caps_Lock is the reinterpretation of the XServer).

Whit the keycode we can now do a remap to any other key like … let us use an unused one like F13:

Now what can we do with F13? Using KDE and global shortcuts (SystemSettings -> Shortcuts and Gestures -> Edit -> New -> Global Shortcut -> Command/URL), we can bind any action to F13. I use it for calling “konsole” which saves a lot of time while working.

The keymapping will be lost after the next login, so we need to make the remapping permanent. Create a new file in your homefolder which will be executed by xmodmap after every login:

Now add the following lines:

Well done!

Matlab: Build-In vs. MEX vs. “naiv” loops

Hi,

ich wurde vor kurzem nach einem Minimalbeispiel für eine MEX-Funktion in MATLAB gefragt, da ich so davon geprahlt habe. Wer MEX nicht kennt, dass sind “MATLAB EXecutables”, welche in C/C++ oder Fortran geschrieben werden können. Sofern man diese dann mit dem MEX-Compiler übersetzen kann, ruft man sie straight-forward aus einem Matlab-Skript auf. Dies führt unter Umständen zu einem gewaltigen Geschwindigkeitsschub, in Bezug auf eine gleiche Implementierung in MATLAB.

Als Minimalbeispiel habe ich mir die Spaltensummenfunktion überlegt, welche alle Zeileneinträge einer Spalte subsummiert. In Matlab ist diese bereits implementiert und kann wie folgt genutzt werden:

Eine äquivalente MEX-Funktion sieht wie folgt aus:

Der obige code kann als colsum.cpp gespeichert werden und wie folgt kompiliert und ausgeführt werden:

Evaluierung

Nun kommt der spannende Teil. Wie macht sich die MEX-Funktion im Vergleich zu einer naiven Schleifen-, semi-naiven Schleifen- und der MATLAB-Build-In-Implementierung. Hier ein kleines Evaluationsskript in MATLAB:

Hier die Auswertung des Skriptes auf einem i7 970:

(1) ist buchstäblich die Umsetzung der Mex-Funktion in Matlab -> ca 8 s
(2) unter Teil-Ausnutzung der sum()-Funktion von Matlab -> ca 0.25 s
(3) unter Ausnutzung der sum()-Funktion von Matlab -> ca 0.07 s
(4) MEX-Funktion -> ca 0.4 s
Es gilt also bei MATLAB immer folgendes zu beachten, wenn es um Implementierungen mittels Schleifen geht:

MATLAB-BuildIn-Funktionen vor MEX-Funktionen evtl. vor Schleifen verwenden!