Archive

Archive for October, 2010

Cryptolaw

October 14th, 2010 No comments
Categories: nerdcore, political Tags: ,

High Speed Trading

October 13th, 2010 No comments

Es gibt ja Sachen in der Wirtschaftswelt die man als Otto-Normal-Nerd irgendwie nicht so richtig fassen kann. Zum Beispiel Hochgeschwindigkeitshandel. Da baut man Server um den Mainframe des jeweiligen Börsenplatzes und kauft/verkauft Aktien im Millisekundentakt. Die Gewinne betragen zwar immer nur zehntel-Cents aber dafür macht’s die Masse. So kann man quasi durch Nichtstun sch***e reich werden.

Und dabei ist es nicht nur wichtig so kurze –und damit latenzarme Verbindungen– wie möglich in Richtung Börsen-Datenbank-Mainframe zu haben, sondern auch die eingehenden “Signale” so schnell wie möglich verarbeiten zu können. Also wieder mal ein klassisches Beispiel dafür das Parallelität nicht immer was bringt. Über Parallelität werden dort nur mehrere Aktien nebenläufig Überwacht. Für eine spezifische Aktie aber zählt nichts anderes als Latenz … und wie bekommt man die? Genau, man übertaktet:

http://insidehpc.com/2010/10/12/appro-hf1-takes-overclocking-to-wall-street/

http://insidehpc.com/2010/10/13/video-inside-high-frequency-trading/

Der schlechte Scherz des Tages

October 13th, 2010 No comments

Der Werbehinweis auf dem Etikett meiner Flasche Wasser mit Geschmack, fällt wohl in die Kategorie “Man kann sich alles schön reden”.

Categories: fun, wtf Tags:

DVB Reloaded: Verbindungsauskunft auf der Shell

October 12th, 2010 No comments

Der Post von Jupp hat mich inspiriert einen Schritt weiter zugehen. Da ich nicht weiß, zu welcher Haltestelle ich jetzt laufen muss um den nächsten Bus zu bekommen, ist doch eine Verbindungsauskunft viel wichtiger. Das ganze funktioniert erst einmal nur auf der shell, aber den Ausgabeteil sollte man leicht nach seinen Wünschen anpassen können.

Wer sich den Umstand des code kopieren sparen will fragt mich am besten nach dem file.

Hier mal ein Beispieloutput:

$ ./dvb-trips.py Helmholzstrasse Saxoniastrasse
Zeit der Abfrage: 22:17
ab 22:08 an 22:35 dauer 00:27 umsteigen 0
 > ab          Fußweg           Helmholtzstraße
 > ab 22:25    Stadtbus 63      Dresden Westendstraße
 > ab          Fußweg           Dresden Tharandter Straße
ab 22:19 an 22:48 dauer 00:29 umsteigen 1
 > ab          Fußweg           Helmholtzstraße
 > ab 22:31    Straßenbahn 3    Dresden Plauen Nöthnitzer Straße
 > ab 22:42    Straßenbahn 7    Dresden Hauptbahnhof
ab 22:31 an 22:53 dauer 00:22 umsteigen 1
 > ab          Fußweg           Helmholtzstraße
 > ab 22:39    Regionalbus 360  Dresden Mommsenstraße
 > ab 22:42    Stadtbus 61      Dresden Technische Universität (Fritz-Foerster-Platz)
 > ab          Fußweg           Dresden Tharandter Straße
ab 22:37 an 23:04 dauer 00:27 umsteigen 0
 > ab          Fußweg           Helmholtzstraße
 > ab 22:54    Stadtbus 63      Dresden Westendstraße
 > ab          Fußweg           Dresden Tharandter Straße
#! /usr/bin/env python
# coding=utf-8
 
import sys
import datetime
import time
import xml.dom.minidom
import urllib
 
def getTrips(dep_start, dep_target, dep_datetime):
    url_template = 'http://www.dvb.de/de/Fahrplan/Verbindungsauskunft/direkt.do?vaform[starttypeswitch_stop]=1&vaform[zieltypeswitch_stop]=1&vaform[startort]=Dresden&vaform[startname]=%s&vaform[zielort]=Dresden&vaform[zielname]=%s&vaform[zeittyp]=dep&vaform[datum]=%s&vaform[zeit]=%s'
 
    now_url = url_template % (dep_start, dep_target, dep_datetime[0], dep_datetime[1])
 
    string = urllib.urlopen(now_url).read().replace('=voe&uk_id=', '=voe&uk_id=')
    dom = xml.dom.minidom.parseString(string)
 
    def getText(nodelist, recurse=False):
        rc = []
        for node in nodelist:
            if node.nodeType == node.TEXT_NODE:
                rc.append(node.data)
            elif recurse:
                rc.append(getText(node.childNodes, recurse))
        return ''.join(rc)
 
    overview_table = None
    detail_from = None
 
    for h2 in dom.getElementsByTagName('h2'):
        text = getText(h2.childNodes)
        if text[:15] == 'Verbindungen - ' and ord(text[15]) == 220 and text[16:] == 'bersicht':
            overview_table = h2.nextSibling
            while overview_table.nodeType != overview_table.ELEMENT_NODE:
                overview_table = overview_table.nextSibling
            if overview_table.nodeName != 'table':
                overview_table = None
        elif text == 'Verbindungen - Detailansicht':
            detail_from = h2.nextSibling
            while detail_from.nodeType != detail_from.ELEMENT_NODE:
                detail_from = detail_from.nextSibling
            if detail_from.nodeName != 'form':
                detail_from = None
 
    if not overview_table or not detail_from:
        sys.exit(1)
 
    for tbody in overview_table.childNodes:
        if tbody.nodeType == tbody.ELEMENT_NODE and tbody.tagName == 'tbody':
            break
 
    trips = []
    for tr in tbody.childNodes:
        if tr.nodeType != tr.ELEMENT_NODE or tr.tagName != 'tr':
            continue
        tds = []
        for td in tr.childNodes:
            if td.nodeType != tr.ELEMENT_NODE or td.tagName != 'td':
                continue
            tds.append(td)
        if len(tds) != 6:
            continue
        #print tds
        trip = []
        for td in tds:
            #if td.firstChild.nodeType == td.ELEMENT_NODE and td.firstChild.tagName == 'a':
            #    td = td.firstChild
            trip.append(getText(td.childNodes, True))
        trips.append(trip)
 
    trip_number = 0
    for tbody in detail_from.getElementsByTagName('tbody'):
 
        route = []
        for tr in tbody.childNodes:
            if tr.nodeType != tr.ELEMENT_NODE or tr.tagName != 'tr':
                continue
 
            section = []
            for td in tr.childNodes:
                if td.nodeType != tr.ELEMENT_NODE or td.tagName != 'td':
                    continue
                section.append(td)
 
            if getText(section[1].childNodes) != 'ab':
                continue
            route.append((
                getText(section[0].childNodes, True),
                getText(section[4].firstChild.childNodes, True),
                getText(section[2].childNodes),
            ))
 
        if len(route):
            #print route
            trips[trip_number].append(route)
        trip_number += 1
 
    return trips
 
def getDatetimeArg(dt):
    return ('%s.%s.%s' % (dt.day, dt.month, dt.year),
            '%s.%s' % (dt.hour, dt.minute))
 
if __name__ == '__main__':
    if len(sys.argv) != 3:
        print 'Usage %s [start-haltestelle] [end-haltestelle]' % sys.argv[0]
        sys.exit(0)
 
    try:
        while True:
            dep_dt = datetime.datetime.now()
            print 'Zeit der Abfrage:', dep_dt.strftime('%H:%M')
            trips = getTrips(sys.argv[1], sys.argv[2], getDatetimeArg(dep_dt))
            time_to_sleep = None
            for trip in trips:
                start = time.strptime(trip[1], '%H:%M')
                next_dt = datetime.datetime.combine(dep_dt.date(), datetime.time(start.tm_hour, start.tm_min))
                print 'ab %s an %s dauer %s umsteigen %s' % (trip[1], trip[2], trip[3], trip[4])
                for step in trip[6]:
                    print ' > ab %-8s %-16s %s' % step
 
            time.sleep(60)
            print
 
    except KeyboardInterrupt:
        sys.exit(0)

Categories: fun, nerdcore, software Tags:

Vortrag – heute

October 8th, 2010 No comments
Categories: c/c++, hpc, linux Tags: , , ,

Wenn die Disko geschlossen bleibt …

October 8th, 2010 1 comment

… dann könnte das am Tanzverbot liegen, dass es in Deutschland gibt.
Denn feiernd dürfen die aufgeklärten Deutschen weder den Opfern von Gewaltherrschaft, noch Jesus gedenken (obwohl letzterer ja auch irgendwie in die erste Gruppe gehört).
Das würde sich nicht gehören und käme wohl weder bei den Toten, noch bei Gott gut an. (Nietzsche würde den Zweiteren wohl wieder in die erstgenannte Gruppe einreihen.)
Nähere Informationen, wann wo öffentlich getanzt werden darf gibt es auf Wikipedia.

Categories: cultural, political Tags: , ,

ipod touch and ubuntu 10.04

October 6th, 2010 No comments

At first i was like wow, then i was like wtf, now i am like omg. Thats the short version 😉

I wanted to sync my ipod touch and was really astonished that ubuntu recognized the ipod out of box and i could play songs from the device right away. Trying to sync music from the pc to the pod created a pop-up-box per song stating: Error while getting peer-to-peer dbus connection. After some searching i found out that using gconf (apps->rhythmbox->plugins->ipod) and deactivating the ipod plugin actually makes it work (this, btw, was the wtf moment for me). I’d also like to share the comment of the person posting the solution:

I don’t know how or why it works, but this is true of most things I’ve learned about Linux.

I think there’s nothing more to add to that . . .

Willi

[followup]
Using my bluetooth headset i wanted to listen to music at work without the hassle of coping with cables. Setting up my Nokia BH-103 with a level one MDU-0005USB connected to the USB-port at my monitor worked out of the box. Then i added 2 cool plugins to rhythmbox as i’m rather fond of cover art:

http://code.google.com/p/albumartsearch/

http://nedrebo.org/code/rhythmbox/desktop_art/

This is it.

Categories: linux, software Tags: , ,

Dummheit so hart wie Eisen

October 6th, 2010 1 comment

http://www.bildblog.de/23262/und-galileo-rotiert-im-grab-immer-nach-sueden/

Categories: fun Tags:

Minecraft

October 2nd, 2010 No comments

… is a pretty cool openworld, sandbox game. It is still in the alpha-phase, but it is very promising, and fun.
We definitely need to make a nerdy room server, to built stuff together.

Ars Technica on Minecraft
Official Website
The Dev Blog

Since I am not able to record a video, I’ve included a screenshot of my latest creation. It is 27×27 squares big (which equals about 27×27 meters) and is made of stone and glass.

Categories: fun, games, nerdcore Tags: , , , ,

LCTP WS 2010/2011

October 1st, 2010 4 comments

Die Einschreibung für Linux-Cluster in Theorie und Praxis hat gerade offiziell begonnen. Einschreibung selbst erfolgt über jExam, alle die keinen Zugriff darauf haben sollten sich umgehend bei Andy Georgi melden.

Wie die Beschreibung schon verrät gibt es dieses Jahr einige interessante Neuigkeiten wie zum Beispiel ein CUDA fähiges Cluster. Außerdem haben wir einige nervige Sachen gekürzt und die spannenden Sachen erweitert. Insofern danke nochmal an die “Versuchskaninchen” von letztem Jahr 😉

Wer also schon Erfahrung mit Linux hat und schon immer mal wissen wollte wie sich “Cluster Computing” anfühlt ist bei uns bestens aufgehoben. In Vorträgen bekommt Ihr die Grundlagen vermittelt die Ihr dann jeweils direkt im Anschluss auf eurem eigenen Cluster ausprobieren könnt. So entsteht Schritt für Schritt im Laufe des Semesters ein voll funktionsfähiges Linux-Cluster auf dem dann nach Herzens Lust “gespielt”/programmiert/gebenchmarkt/geübt werden kann.

Und jetzt los zur Einschreibung, bzw. zum Weitersagen!