WM im Ausland dank „port forwarding“ anschauen

Dienstag, 22. Juni 2010 20:12

Für all diejenigen, welche im Ausland sind und über den von ARD und ZDF angebotenen Livestream die WM-Spiele anschauen wollen, stehn erstmal blöd da, wenn sie auf dessen Mediathek-Seite gehen. So erging es zumindest mir… Denn aus rechtlichen Gründen ist es nicht möglich, ausserhalb von Deutschland den WM 2010 Live-Stream von ARD und ZDF anzuschauen.

Um das zu umgehen, muss man mit oder über eine deutsche IP online gehen. Nach ein paar recherchen bin ich letztendlich auf eine elegante und zuverlässige Lösung gestoßen, um mit einer deutschen IP zu surfen. Dazu baut man ein SSH-Tunnel zu einem Server in Deutschland auf und und lenkt alle Verbindungen des Browsers über diesen Tunnel mit Hilfe des Tools tsocks. Da ich Linux einsetzen ist folt nur eine kurze Beschreibung für Linux.

1. tsocks mittels aptitude installieren
aptitude install tsocks

2. SSH-Tunnel aufbauen
ssh -D 1080 -l user www.meinserver.de
Ab jetzt werden alle Verbindungen, welche lokal über den Port 1080 stattfinden über den deutschen SSH-Server geleitet.

3. tsocks konfigurieren (Datei: /etc/tsocks.conf)

...
server = 127.0.0.1
server_type = 5
server_port = 1080
...

Diese Einstellung führt dazu, dass alle Verbindungen auf den lokalen Port 1080 und somit über unseren aufgebauten SSH-Tunnel stattfinden. Wichtig: Die Einstellungen des lokalen IP-Bereichs (weiter oben in der Konfigurationsdatei) muss auch noch entsprechend angepasst werden.

4. Browser über tsocks starten
tsocks firefox
Durch die von tsocks gebotene Möglichkeit, Verbindungen eines Programms transparent weiterzuleiten, sind keinerlei Änderungen an den Einstellungen des Browsers notwendig!
Auch andere Programme, wie beispielsweise Zattoo können über tsocks gestartet werden, wodurch man noch weitere deutsche Sender anschauen kann 😉

Für all diejenigen, welche keinen eigenen Server in Deutschland haben oder Windows einsetzen, habe ich das anscheinend funktionierende Tool CyberGhost VPN. Anstatt eines SSH-Tunnels wird dort ein VPN aufgebaut, allerdings zu einem Fremdanbieter. Scheint aber auch zu funktionieren. Habe es aber noch nicht ausprobiert.

Weitere Informationen zu „port forwarding“ sind auf der folgenden Seite zu finden: http://www.ssh.com/support/documentation/online/ssh/adminguide/32/Port_Forwarding.html. Oder einfach googeln…

GWT setFocus() – Deferred Command

Freitag, 30. Oktober 2009 20:18

Ich hatte vor kurzem im heiß geliebten IE6 das Problem, dass das Setzen des Focus auf eine TextBox mittels der Methode „setFocus()“ keine Auswirkung hatte. Im Firefox hingegen hat es auf Anhieb geklappt. Nach kurzem rumprobieren hab ich es mit Hilfe eines sogenannten „Deferred Commands“ – durch die Klasse DeferredCommand – gelöst. Damit ist es möglich, ein Quellcode-Abschnitt, welcher in einem Command gekapselt wird (siehe Entwurfsmuster Command Pattern), ausserhalb des aktuellen Kontextes NACH allen Handlern auszuführen. Die Umsetzung sieht dann wie folgt aus:

 DeferredCommand.add(new Command() {
      public void execute() {
        myTextbox.setFocus(true);
      }
    });

Und siehe da… wenn der Focus erst ganz zum Schluss des aktuellen Call-Stacks ausgeführt wird, klappts auch mit dem IE6 !

Variable Parameteranzahl in Java5 mit „…“

Samstag, 08. August 2009 14:58

Wer von der PHP-Ecke kommt kennt die manchmal sehr nützliche Methode „func_get_args()“, bei der man alle Methodenparameter in einem Array geliefert bekommt. Dies ist an denjenigen Stellen sehr praktisch, bei denen die Parameteranzahl nicht immer „fix“ ist. Man kann das zwar auch durch ein Array lösen, jedoch ist die Syntax ohne Array weniger Overhead und somit einfacher zu lesen.

Zu meinem Erstaunen hab ich durch die Benutzung von EasyMock herausgefunden, dass es auch in Java 5 die Möglichkeit gibt die Parameteranzahl variabel zu halten. Dazu wird einfach das Token „…“ hinter den Datentyp geschrieben, und Java wandelt es dann intern in eine Array um. Innerhalb der Methoden kann der Parameter dann als ganz normales Array behandelt werden. Folgendes Beispiel soll das ganze kurz demonstrieren.

public class MyTestClass{
  public static String concat(String... tokens){
    StringBuffer sb = new StringBuffer();
    for(String token : tokens){
      sb.append(token);  
    }
    return sb.toString();
  }
}

Durch die „…“ kann die Methode nun wie folgt aufgerufen werden.

String result = MyTestClass.concat("foo", "bar", "blub");
System.out.println(result); // Ausgabe: foobarblub

Wie zu sehen ist kann man beliebig viele Strings in der Parameterliste angeben. In meinen Augen sehr schön zu lesen und findet mit Sicherheit an der ein oder anderen Stelle Verwendung 😉

Einen guten detailierteren Blog-Beitrag zur variablen Parameteranzahl in Java 5 Thema hab ich noch hier gefunden.

Java und die Klasse „Void“

Samstag, 18. Juli 2009 18:51

Zur Erstellung einer Übersichtsseite einer REST-like WebService-Schnittstelle musste ich per Reflections mehrere Klassen analysieren. Dabei musste ich auch den Rückgabewert einer Methode ausgeben, an den man wie folgt gelangt:

Class returnType = method.getReturnType();

Dabei bin ich davon ausgegangen, dass bei Methoden, welche keinen Rückgabewert haben, null zurückgegeben wird. Jedoch habe ich mich darin getäuscht. Denn statt null wird wird ein Objekt der Klasse „void“ zurückgeliefert. In der Java API Doc steht zur Klasse folgende Beschreibung:

The Void class is an uninstantiable placeholder class to hold a reference to the Class object representing the Java keyword void.

Wurde bis jetzt noch nicht schlau daraus warum es die Platzhalter-Klasse „Void“ gibt… naja ich gebs halt einfach mal aus. 😉

GWT 1.7 released – Bugfixing, Safari 4, Firefox 3.5, IE 8

Dienstag, 14. Juli 2009 11:20

Wie ich gerade auf der GWT-Homepage entdeckt habe, wurde GWT 1.7 released. Das Release enthält hauptsächlich kritische Bugfixes und stellt die Kompatibilität zu IE 8, FF 3.5 und Safari 4 sicher.
Was mich jedoch besonders freut ist, dass mein gemeldeter Bug im Zuge der Version 1.7 gefixt wurde. Und das bei lediglich 8 Bug-Fixes… yiiiha 😉

GWT 1.6.4 – Timestamp.valueOf()

Montag, 22. Juni 2009 20:45

So wie es aussieht wurde ganz schön gepfuscht bei der Emulierung der paar Klassen im java.sql Package 😉

Nach dem von mir vor kurzem berichteten Bug  in der Date.valueOf()-Methode, bin ich nun auf ein abweichendes Verhalten bzw. Bug in der emulierten Timestamp.valueOf()-Methode (auch wieder im java.sql-Package) gestoßen. Denn bei einem String wie bspw. 2009-12-01 10:10:58.11 kann nicht einfach so wie vermutet, und wie es auch in JRE der Fall ist, ein Timestamp-Objekte mittels Timestamp.valueOf() erzeugt werden. Denn die emulierte Timetsamp.valueOf() Methode schmeißt eine IllegalArgumentException, wenn nicht hagenau das Format yyyy-mm-dd hh:mm:ss.fffffffff eingehalten wird. D.h. die Nanosekunden müssen genau 9 Zeichen lang sein… argh. So wie ich das Gefühl habe wurden die Klassen im java.sql Package auf die schnelle noch emuliert… oder zumindest versucht :)

GWT 1.6.4 – IlegalArgumentException in Date.valueOf()

Montag, 15. Juni 2009 20:27

Ich arbeite jetzt schon mehrere Monate an einem GWT-Client als Aufsatz zu einer J2EE Anwendung. Dabei kommt nicht GWT-RPC zum Einsatz, welches sich ja das Marshalling bzw. Unmarshalling direkt mitbringt, sondern diese Aufgaben wurden selbst implementiert. Der Grund dafür ist die Unabhängigkeit einer nicht proprietären Lösung, welche nötig für weitere Clients war.

Anscheinend nutzen jedoch wohl die meisten GWT-RPC, denn ich bin auf einen üblen Bug in einer recht wichtigen Methode, nähmlich in Date.valueOf(), gestoßen. Es ist darin nicht möglich ein Date-Objekt anhand bspw. dem String 2009-08-10 zu erstellen. Das fieße dabei ist noch, das im Hosted mode alles funktioniert aber im Web Mode dann die große Überraschung kommt… IllegalArgumentException innerhalb Date.valueOf().

Nach näherem Durchwühlen des Sourcecodes der emulierten Date.valueOf()-Methode war der Grund schnell klar. Die Monate und Tage werden mittels der Methode Integer.decode() in einen Integer umgewandelt. Das interessante ist jedoch, das diese Methode bei Zahlen mit führenden Nullen von einer Oktalzahl ausgeht. Da es die 8 jedoch nicht im Oktalsystem gibt, fliegt eine unerwartete Exception. Die Lösung dafür ist vor dem Aufruf von Date.valueOf() die Nullen vor dem Tag und dem Monat entfernen.

Das schöne daran war jedoch die schnelle Reaktion von google nach Erstellen eines Tickets (http://code.google.com/p/google-web-toolkit/issues/detail?id=3731&q=date.valueof). Innerhalb von 2 Tagen wurde das Ticket validiert, als kritisch eingestuft und der Bug wird beim nächsten Release gefixt sein. Bin sehr begeistert der schnellen Reaktion!

Willkommen auf Java-Stage!

Freitag, 17. April 2009 21:50

Parallel zu meinem PHP-Pendant php-stage.de beschäftigt sich dieser Blog run um das Thema Java, mit dem ich mich zurzeit intensiv geschäftlich beschäftige. Ziel dabei ist es, wie auch bei php-stage.de, einerseits mir selbst ein Nachschlagewerk zu erstellen, und andererseits meine Kenntnisse und Erfahrungen zu verbreiten.

Momentan treibe ich mich speziell in folgenden Bereichen rum:

  • GWT 1.6 – Google Web Toolkit
  • Spring 2.5 (core, mvc, aop)
  • Hibernate 3
  • Java SE + Java EE 1.5
  • Allgemeine Software-Entwicklung

Ihr könnt in nächster Zeit also mit interessanten Artikeln speziell zu diesen Themen rechnen.

So, stay tuned!