Bitte Beachten: Dieser Blog wird hier nicht weiter geführt! Kommentare und neue Blogposts gibt es unter http://feitel.indeedgeek.de. Dort bitte auch neue Kommentare zu diesen Beiträge erstellen.

Dienstag, 11. Dezember 2007

Tutorials mal anders

Bisher habe ich ja immer neidisch zu Andreas und Denis schauen müssen. Die beiden sind Microsoft-Student-Partner und bekommen so haufenweise Unterstützung von Microsoft. Aber vor kurzem bin ich auf einen kleinen Lichtblick gestoßen.

Am Donnerstag, den 13. Dezember 2007 ist Kubuntu Tutorials Day!

Das heißt konkret: Ab 16:00 werden verschiedene Tutorials im IRC Channel der Kubuntu-Developers angeboten. Jeder der Interesse hat kann einfach über den #kubuntu-devel-Channel des Freenode Netzwerks (irc.freenode.net) daran teilnehmen.

Einige Interessante Themen sind dabei. Hier das ganze in der Kurzfassung:
Zeit (MEZ)TitelKurzbeschreibung
16:00 bis 17:00Packaging 101Quellcode in Debianpakete verpacken
17:00 bis 17:30Kubuntu bug triageFehlerberichte erstellen
17:30 bis 18:00Branch your svn with bzrEinführung in Bazaar
18:00 bis 19:00Get programming with PyKDE 4GUI Programmierung unter KDE4 mit Python
19:00 bis 20:00Get your work into KubuntuEinführung wie man sich aktiv an Kubuntu beteiligen kann
20:00 bis ...Kubuntu and KDE Q&AFragen und Antworten

Vor allem auf Bazaar und PyKDE4 freue ich mich besonders. Wird sicherlich interessant. Das ist doch mal Werbung für KDE4 wie man sie sich auch für andere Dinge wünschen würde! Ich glaube ich muss meine Standard Floskel "Ich hasse Werbung" noch einmal überdenken. Auch wenn alle Vorträge in Englisch gehalten werden hoffe ich, dass es so etwas öfters geben wird.

Stefan meinte schon er könnte das ganze für mich mitloggen. Das wäre natürlich perfekt dann kann man sich das ganze danach noch einmal in Ruhe durchlesen. Obwohl ich denke früher oder später wird das komplette Log sowieso irgendwo verfügbar sein.

Ich bin auf jeden Fall gespannt auf Donnerstag. Besonders wie das funktionieren soll, wenn da mal grob geschätzt 500 Leute, sich gleichzeitig in einem IRC-Channel unterhalten.

Donnerstag, 6. Dezember 2007

Was macht eine Programmiersprache gut?

Ich brauche euch glaube ich nicht mehr zu erklären was eine Programmiersprache ist. Jeder von euch hatte wahrscheinlich schon mit mehreren Sprachen zu tun gehabt. Jeder von euch mag die eine Sprache mehr und eine andere weniger. Aber im Grunde sind die meisten Sprachen alle gleich. Man hat seine Standardbefehle wie z.B. if oder for, und in den meisten Sprachen lassen sich Funktionen oder auch Klassen definieren.

Gut, zugegeben jede Sprache hat einige besondere Features. In C++ kann man z.B. vieles elegant über Pointer lösen hat aber an anderer Stelle dafür wieder andere Probleme damit. Java ist durch seine Virtuelle Maschine mehr oder weniger plattformunabhänig. Python zeichnet sich als Script Sprache aus und wird dynamisch typisiert und in Ruby ist Codeblöcke und Callback Möglichkeiten markant. Aber sind diese Features wirklich entscheidend welcher Sprache wir den Vorzug geben? Lassen sich nicht alle diese Features mehr oder weniger einfach auf alle anderen Sprachen übertragen?

Man kann mit allen Sprachen alles Programmieren. Man braucht nur ein einfachen Interpreter und ich kann mit C++ Webseiten programmieren. Ein extra Compiler und mit PHP lassen sich Desktop GUI Programme erstellen. Alles nur eine Frage des Aufwands den man rein stecken muss. Bestes Beispiel ist hier wohl Ruby on Rails (RoR) und PHP. Viele loben RoR schon als neues PHP. Etwas unfair wenn man bedenkt das RoR ein komplettes Framework ist und PHP nur eine Sprache. Aber ich kann doch ohne Probleme dieses Framework mit PHP nach programmieren (Wurde auch schon gemacht). Auch die Vorteile das RoR von der Sprache selbst besser ist trifft nicht unbedingt zu. Einfach nur ein Paar Librarys neu schreiben und schon hat man in PHP die Objektorientierung wie man sie aus RoR kennt. Warum soll also RoR eine bessere "Sprache" sein als PHP?

Worauf ich eigentlich hinaus will, es ist auf Sprachebene relativ egal welche Sprache ich benutze. Manche sind für den Verwendungszweck besser geeignet manche Schlechter aber vom Prinzip macht es kein Unterschied. Aber warum mag man nun eine Sprache mehr oder eine andere weniger? Meine Theorie ist einfach das es sehr viel auf das Umfeld ankommt. Wenn ich mir zum Beispiel so manche API Dokumentation von Ruby anschaue bleiben oft Fragen offen. Bei Java hingegen bekomme ich zu jeder popeligen API eine super Dokumentation. Wenn ich in Ruby eine Frage habe wartet man in Supportforen oft vergebens auf eine Antwort. Wo hingegen bei C++ so gut wie jede Frage schon einmal geklärt wurde. Oder um wieder auf Rails zurück zu kommen: Wenn ich in PHP ein Programm kurz testen will muss ich erst Apache einrichten und starten. RoR bringt sein Webserver bereits mit. Das ganze lässt sich noch beliebig fortsetzten aber meine Message ist denke ich klar: Die Sprache selbst macht wenig aus. Auf das Environment kommt es an!

Wobei ich nicht abstreiten mag das bei Vielen sich eine "Das kenne ich, das nehme ich" - Mentalität bei Programmiersprachen abzeichnet. Mir ist das vor kurzem wieder aufgefallen. Ich habe einige Beispielprogramme mit Java und aufwendiger Swing-GUI gesehen. In Ruby wäre in Kombination mit dem Kommandozeileninterpreter irb das Programm wahrscheinlich nur ein Zehntel so lange.

Aber gut, muss jedem selbst überlassen sein in welcher Sprache er gerne Programmiert. Ich kann nur jedem ausdrücklich empfehlen sich möglichst viele Sprachen mal anzuschauen um einfach über seinen Horizont zu sehen. Jede Sprache hat ihre eigene Mentalität ihre eigene Community und eigene Ideen warum sie so ist wie sie ist. Und alle Sprachen sind interessant!

Donnerstag, 29. November 2007

Faszination Shell

Für die meisten Leute mag die Shell total sinnlos und umständlich erscheinen. Die Syntax sieht absolut unverständlich aus. Man braucht für einfache Dinge komplizierte Konstrukte. Teilweise sind Leerzeichen zwischen Befehlen von Bedeutung. Alles in allem also absolut nicht zu gebrauchen.

Ich finde es genial! Das Prinzip dahinter ist total simpel, wenn auch die Anwendung etwas kryptisch erscheinen mag.

Wenn ich ein kleines Script schreibe mache ich im Grunde nichts anders als Shell Befehle aneinander zu reihen bzw. ineinander zu verschachteln. So zu sagen Komposition in ihrer Reinform (zumindest vom Prinzip, aber dazu später mehr).

Ein Shell Befehl ist vom Prinzip immer gleich aufgebaut:

Allgemein: Befehlsname Optionen
Beispiel:  Concatenate File1 File2
Umsetzung: cat old.log new.log

Im Grunde wird hier nichts anderes gemacht als die Datei old.log ausgegeben und anschließend die Datei new.log. Also beide Dateien aneinander gehängt (konkateniert). Dazu wird das Programm cat verwendet welches unter /bin/cat abgespeichert ist. Als Parameter werden die beiden Dateien angegeben die ausgegeben werden sollen.

Will ich nun ein neues Programm schreiben und ebenso aufrufen kann ich es einfach ins /bin/ oder /usr/bin/ Verzeichnis speichern.

Hier könnte der Beitrag zu Ende sein, aber ich will an Beispielen erklären warum das so genial ist.

if Befehl

if true; then
echo "hallo"
fi

Dieser Codeblock macht zugegebenermaßen nicht viel Sinn, er gibt einfach nur hallo aus. Aber die Funktionsweise ist interessant. if ist ein vordefiniertes Kommando. Deshalb schrieb ich oben auch das die Komposition einige Lücken hat. if ruft das Programm true auf welches unter /bin/true liegt. true macht nichts anderes als ein erfolgreichen exit-Status zurück zu geben. Das ; danach ist wichtig da es einfach sagt der Befehl if true ist abgeschlossen. Alternativ könnte man auch schreiben:

if true
then
echo "hallo"
fi

Anschließend kommt ein then welches aufgerufen wird wenn die if Bedingung korrekt war. then ist ebenfalls wie das if und das fi ein eingebautes Keyword. echo gibt einfach nur hallo aus.

Exit States

Ein kurzer Exkurs zu exit-States:

Jedes Programm gibt ein exit Status zurück. Wenn alles korrekt verlaufen ist wird eine 0 zurück gegeben. Ansonsten ein beliebiger Wert zwischen zwischen 1 und 255. Das ist dann ein Fehlercode der ausgewertet werden kann. Den exit Status des letzten Programmaufrufs wird in der Variable $? gespeichert.

Beispiel:

Ich mache einen ping auf einem Computernamen und schaue so ob dieser im Netzwerk erreichbar ist. localhost ist mein eigener Computer. Der ist also immer erreichbar. -c 1 gibt einfach nur an es soll nur ein einzelner ping gemacht werden und nicht mehrere.

ping -c 1 localhost
echo $?

Liefert eine 0 was so viel heißt wie: Jap, Ping war erfolgreich!

ping -c 1 asdf
echo $?

Liefert eine 2 was so viel heißt wie: Konnte asdf nicht finden!

true
echo $?

Ist also immer 0 wohingegen false (was ebenso wie true auch nur ein Programm ist) immer 1 zurück gibt.

if macht im Grunde nichts anderes als diese exit-States zu überprüfen. Das ist sehr komfortabel weil man kann so statt true oder false jedes beliebige Programm einfügen.

Beispiel:

Man könnte schauen ob der Computer www.google.de erreichbar ist und wenn ja einfach online ausgeben.

$ if ping -c 1 www.google.de > /dev/null; then
echo "online"
fi

> leitet die Ausgabe des Programms um. Wen man also cat old.log new.log > both.log schreibt, enthält die Datei both.log die Dateien old.log und new.log. /dev/null ist so was wie das Nirvana.

test Befehl

Ein anderes Programm welches oft genutzt wird ist test bzw. das (fast) synonyme Alias [.

Beispiel:

Einfach Prüfen ob die Variable $DEBUG größer 1 ist und wenn ja "Debug on" ausgeben.

if [ $DEBUG -gt 1 ]; then
echo "Debug on"
fi

[ ist ein Programm Aufruf und -gt ist nur ein Parameter der so viel sagt wie: Prüfe ob der Wert vorher größer (greater) als der wert danach ist. Das Programm [ prüft alle Ausdrücke bis er zu dem Parameter ] kommt.

Also noch einmal vereinfacht:

[                 $DEBUG -gt 1 ]
^                   ^     ^  ^ ^
Programmname      4 Parameter

Man sieht hier schon. Die wirklich einfachen Befehle können richtig ineinander verschachtelt werden und werden so noch mächtiger.

if [ \( $CHECKOUT -eq 1 \) -o \( $IMPORT -eq 1 \) ]

-eq steht für equal also gleich und das -o ist ein oder. Das \ vor den Klammern Maskiert die Klammern nur, da diese eigentlich von der Shell schon vordefiniert sind.

Arithmetik

Auch einfaches Rechnen ist interessant. Man kann nicht einfach wie in anderen Programmiersprachen I = 1 + 1 schreiben. Die Rechnung ist wieder ein Befehlsaufruf:

I=`expr 1 + 1`

`...` ist ein Unterprogrammaufruf. Also würde ich echo pwd angeben würde ich pwd zurück bekommen. Gebe ich echo `pwd` an bekomme ich das aktuelle Arbeitsverzeichnis (Print Working Directory), da erst der Befehl pwd ausgeführt wird und dann echo.

Für viele ist das unverständlich, aber wenn man sich wieder in Erinnerung ruft wie ein Befehl aufgebaut ist wird es klar. Zuerst kommt der Befehlsname und dann die Parameter. Nutzt man also die Normale Infix Notation 1 + 1 kann es nicht funktionieren. Man müsste schreiben + 1 1. + Wäre also der Programmname und 1 und 1 die Parameter. expr ist etwas Allgemeiner gefasst da der Befehl auch Subtrahieren etc. könnte.

for Schleifen

Aus der normalen Programmiersprache kennt man das ja in der Form:

for (int i = 0; i < 10; i++)

Die Shell unterscheidet sich hier Grundlegend. Es gibt nur for i in $ARRAY; do .. ; done. Also es kann nur alle Elemente in einem Array durchgehen und nicht etwa alle Zahlen von 1 bis 10. Und genau das macht es so mächtig!

Ich kann z.B. schreiben:

PCS="lola redbull flens jever becks wodka coke pommes hotdog kebap bigmac twix"
for PC in `echo $PCS`; do
echo $PC
done

PCS ergibt ein String welcher durch das echo ausgegeben wird so als würde ich alle Wörter einzeln nach das in schreiben. So bekomme ich ein Array was ich anschließend mit der for-Schleife durchlaufen kann. Man sieht schon, ich kann für den echo Befehl auch alles andere einsetzen was mir ein Array zurück gibt. Wobei Arrays einfach nur eine Aneinanderreihung von Wörtern sind: array=( zero one two three four five )

Das mag erst einmal total umständlich erscheinen da man so nicht wie gewohnt Zahlen durchlaufen kann. Man muss aber einfach nur den richtigen Befehl einsetzen:

for NUMBER in `seq 4 5`; do
echo $NUMBER
done

seq gibt eine Zahlenfolge zurück. In diesem Fall startet die Folge bei 4 und endet mit 5 so das als Ausgabe die 4 und 5 erscheint.

Gibt man seq jetzt noch eine Formatierung mit kann man das ganze noch verändern:

for  i in `seq -f"%03g" 1 10`; do
echo $i
done

Gibt alle Zahlen zwischen 1 und 10 mit führenden Nullen aus: 001, 002, 003, ... 010

Zusammenfassung

Man sieht schon, durch die richtige Kombination können die simplen Befehle viel bewirken. Leider sind nicht alle Befehle Programme. Vor allem Grundlegende Befehle wie if, while, case, else, for, then etc. sind bereits vordefiniert. Ich habe dummerweise keine Ahnung warum. Meine einzige Vermutung wäre das dann die Aufrufe zu Komplex werden. Ich muss ja alles als Postfix definieren und das kann etwas unübersichtlich werden. Beispielsweise kann ich dann nicht mehr schreiben cat test.log > test2.log da das > am Anfang stehen müsste. Also dann: > `cat test.log` test2.log.

Eigentlich sollte dieser Eintrag nicht wie ein Shell Tutorial aussehen sondern erklären warum Shellbefehle nicht umständlich sondern anpassbar sind. Wenn ich mir die Länge des Beitrags anschaue wurde es an manchen Stellen etwas ausführlich. Ich hoffe aber trotzdem die Botschaft kam durch. Durch Schachtelung kann man erstaunliche Effekte erzielen. Außerdem ist es natürlich vorteilhaft das man jedes Script das man schreibt wieder in anderen Scripten verwenden kann, indem man es einfach wie ein Befehl ausführt.

Mittwoch, 28. November 2007

++ Überwachungsticker ++

Gefunden bei Fliers Welt - [via] Dazu passen die Schlagzeile:

Der Durchschnittsbürger wird in über 700 Datenbanken erfasst [weiter]
Und zu guter Letzt: Eine sehr lustige Podcastreihe die leider seit Juni keine Updates mehr erscheinen. Reinhören lohnt sich trotzdem! Vorteile des Ueberwachungsstaats

Dienstag, 27. November 2007

Fingerabdrücke für Anfänger

Gerade bin ich durch die aktuelle Pressemitteilung des CCC's auf ein nettes kleines Video gestoßen. Das Video ist zwar schon von 2004 allerdings zeigt es sehr schön wie einfach es ist ein Fingerabdruckscanner zu überlisten. Dazu gibt es auch noch die passende Anleitung von damals.

Besonders interessant wird es, da man seit 1. November 2007 seine Fingerabdrücke abgeben muss um ein Reisepass zu bekommen. Bei der oben beschriebenen Fälschungsmethode sieht man erst bei genauer Betrachtung das etwas auf dem Finger klebt. So wäre es ja ohne Probleme möglich einen falschen Fingerabdruck in die Datenbank einzuschleusen. Bleibt noch zu klären ob beim erstellen eines neuen Reisepasses geprüft wird ob der Fingerabdruck, den man abliefert, eindeutig ist. Allerdings bin ich mir relativ sicher das dies nicht gemacht wird, da es sehr aufwendig wäre erst alle Fingerabdrücke die bisher registriert sind mit dem neuen zu Vergleichen.

Dazu fällt mir wieder die nette Kampagne ein bei der dazu aufgerufen wurde Fingerabdrücke von Abgeordneten zu sammeln. In Berlin sollte das in den richtigen Bars etc. denke ich nicht allzu schwer sein. Leider finde ich aber nichts genaueres darüber was aus dem Aufruf geworden ist.

Stelle ich mir aber schon lustig vor wenn plötzlich der Fingerabdruck von Schäuble 1000 Mal in der Datenbank auftaucht.

UPDATE
Gesten Abend kam im Ersten bei dem Magazin plusminus ein Beitrag über genau das Thema. Leider etwas unvollständig und nicht wirklich gut gemacht. Aber für alles die es interessiert: Hier kann man sich den Beitrag anschauen.

Schneckenalarm

Kennt ihr das wenn man von irgendeiner Aufgabe hört die eigentlich total trivial ist. Man weiß genau man hat keine Zeit. Aber man kann einfach nicht anders als diese Aufgabe jetzt und hier zu lösen und vergisst dabei alles andere um sich herum.

So ging es mir gestern wieder einmal. Unsere Erstsemester dürfen sich gerade mit der berühmt berüchtigten "Schnecke" herumschlagen. Ich musste das Programm auch schon im ersten Semester schreiben und muss sagen ist etwas Tricky. Ich habe das gestern so mit bekommen weil viele damit Probleme haben und nach einem Tipp gefragt haben.

Ich hab das ganze im Kopf durchgespielt und meinte: "Ach des sind nur 20 Zeilen Code...". Zuhause habe ich mir mein alten Code angeschaut und bin erschrocken. ich habe fast 200 Zeilen gebraucht und so beim darüber schauen erschien mir alles total kompliziert. Also was mach ich? Genau, ich hab mein Texteditor aufgemacht (noch nicht mal eclipse) und drauf los geschrieben.

Im ersten Semester weiß ich noch das ich mir Seitenweise Schnecken aufgemalt habe um zu verstehen wie sie funktionieren. Gestern waren es genau zwei Schnecken. Bei einer habe ich getestet wie es geht und bei der anderen überprüft. Man könnte ja sagen ich wusste ja schon wie es geht, allerdings habe ich nach einem anderen Ansatz gesucht als den vom ersten Semester.

Die Lösung soll übrigens so aussehen.

Das ganze hat einige erstaunliche Erfahrungen an den Tag gebracht und mir gezeigt das mein Studium vielleicht doch nicht ganz umsonst ist.

Vor allem aus der Vorlesung SEKS (Software Engineering komplexer Systeme) ist sehr viel in das Programm eingeflossen. Normalerweise würde man für das Problem ein zwei dimensionales Array nutzen und das immer über zwei Koordinaten ansprechen. Allerdings habe ich die Idee mit dem eindimensionalen Array aus SEKS geklaut und hier erstmalig angewendet. Prinzip ist: Wenn ich ein Feld nach rechts will addiere ich zur aktuellen Position eins hinzu. Für links wird eins subtrahiert. Für rauf wird die Größe des Arrays abgezogen und für runter das selbe darauf addiert. Also habe ich eine Matrix von 8x8 Feldern komme ich mit pos-8 nach oben und eben mit pos+8 nach unten. Das vereinfacht schon einmal viel da ich nicht immer mit zwei Koordinaten arbeiten muss sondern nur noch eine Position habe.

Auch von meiner Algo (Algorithmen und Datenstrukturen) floss viel in meine Schnecke ein. In Algo war immer eine sehr kurze und performante Lösung gefragt. Auch war es nicht ungewöhnlich das man einfach mal 30 Minuten vor 10 Zeilen sitzt und überlegt wie man das noch anders / einfacher gestalten kann.

Ich habe unbewusst meine Schnecke in mehrere Abschnitte unterteilt. Also zuerst Parameter von Außen geprüft und übernommen, dann Konstanten und anschließend Variablen definiert. Dann kam die eigentliche Ausführung gefolgt von der Ausgabe. Jeder dieser Teile habe ich glaub ich mehrmals neu geschrieben um jeden Teil für sich zu optimieren.

Hier erstmal der Code:

public class Schnecke {
  public static int aktuellerBuchstabe = 0;
  public static String[] output;
  public static String word;

  public static void main (String[] args) {
    if (args.length < 2) { System.err.println("Falsche Parameter"); System.exit(1); }
    int size = Integer.parseInt(args[0]);
    word = args[1];

    final int runter = size;
    final int rauf   = -size;
    final int links  = -1;
    final int rechts = 1;

    int height = size - 1;
    int width  = size - 1;
    int[] richtungen = {runter, links, rauf, rechts};
    output = new String[size * size];
    int pos = fill(size-1, 0, rechts);  // Da sich erster Schritt anders Verhällt

    while (height >= 1 && width >= 1) {
      for (int r : richtungen) {
        if (r == runter || r == rauf) { pos = fill(height, pos, r); height -=2; }
        else                          { pos = fill(width,  pos, r); width  -=2; }
        if (height < 1 || width < 1)  break;
      }
    }

    for(int i = 0; i < output.length; i++) {
      System.out.print((output[i] != null)? output[i]: " ");
      if (i % size == size-1 ) System.out.print("\n");
    }
  }

  public static int fill(int count, int pos, int richtung) {
    output[pos] = getNextChar();
    return (count == 0)? pos: fill(--count, (pos+richtung), richtung);
  }

  public static String getNextChar() {
    int pos = aktuellerBuchstabe++ % word.length();  // ++ sehr unschön
    return word.substring(pos, pos+1);
  }
}

Während der Implementierung sind mir wieder einmal die Grenzen von Java aufgefallen. Dadurch das es z.B. primitive Datentypen gibt stößt man schnell an die Grenzen des Machbaren. Deshalb habe ich mir schon vorgenommen das selbe Programm demnächst mit Ruby zu schreiben und mich überraschen zu lassen in wie weit sich das unterscheiden wird.

Mir ist durchaus bewusst das dieses Programm nichts tolles ist. Aber ich fand es gestern sehr interessant mir selbst beim Programmieren zu zuschauen. Viele interessante Dinge sind mir dadurch bewusst geworden. Bevor sich noch jemand beschwert, ich würde so komprimiert und mit so vielen kleinen Tricks nie etwas schreiben was ich öfters verwenden will, da es einfach zu undurchsichtig ist. Dann würde ich eher eine 200 Zeilen Variante bevorzugen. Diese Schnecke war einfach nur zum Testen gedacht.

Freitag, 23. November 2007

Warum Blogger.com?

"Don’t be evil" - Der Leitspruch von Google. Angesichts der immer umfassenderen Datensammelwut von Google schwer zu glauben. Mittlerweile gibt es Google Desktop auch für Linux. Google kauf Doubleclick und kann so über Cookies Seitenaufrufe der User Tracken. Und das alle E-Mails von Google durchsucht werden um passende Werbung anzuzeigen ist schon lange kein Geheimnis mehr. Ich sehe durchaus das Problem und trotzdem nutze ich eine Vielzahl von Google Diensten. Seit neustem eben auch blogger.com was auch nur ein Teil von Google ist.

Es gibt einige Gründe für mich Google zu nutzen. Aber der ausschlaggebendste ist wohl einfach: Es gibt nichts besseres. Google bietet mir ein Komplettpacket an Webdiensten die ich von überall abrufen kann. Zusätzlich wurden diese Dienste intelligent miteinander verknüpft so das beispielsweise E-Mail und Kalender relativ gut Hand in Hand arbeiten. Die Oberfläche ist dank Java-Script intelligent gestaltet und lässt sich wirklich einfach und vor allem effektiv bedienen. Und das beste: Ich habe vor kurzem gesehen es gibt für eine Vielzahl der Dienste sogar eine API für Python.

Die Frage ob ein Client wie Kontact mir viele dieser Dienste nicht auch bietet ist berechtigt. Allerdings gefällt mir es nicht das meine Daten dann nur auf einem Computer gespeichert sind und ich auch nur mit diesem einen Client darauf zugreifen kann. Seit Googlemail IMAP anbietet nutze ich dies auch in Verbindung mit Kontact und habe so auch einige neue Möglichkeiten wie z.B. Verschlüsselung mit GPG. Aber leider nicht ganz ohne Probleme da mein Client Kontact Features wie Tagging von Nachrichten nicht wirklich unterstützt. Auch bietet sich diese Möglichkeit der Synchronisation nur für E-Mails an, da sich meinen Google Kalender zwar abrufen lässt, allerdings ich keine Änderungen wieder zurück übertragen kann.

Man sieht schon, beides hat Vor- und Nachteile. Allerdings überwiegen für mich im Moment noch Features wie der Webclient, die Interaktion zwischen den einzelnen Diensten und einige wirklich gut gemachte Features wie Tagging gegenüber dem Clientmodell. Obwohl ich sagen muss, seit IMAP verfügbar ist macht das Arbeiten mit Kontact auch sehr Spaß. Über kurz oder lang werde ich sicher von Google ablassen, allerdings dann nicht zu Gunsten eines Clients. Wahrscheinlicher ist wohl ein eigener Server mit eigenem Webfrontend und einer Synchronisation mit meinen Clients.

Doch stellt sich noch die Frage: Warum dann Blogger.com? Die meisten, obengenannten Ausreden zählen hier nicht: Der Webclient ist nicht sonderlich toll, es warten keine super Features auf mich, und Einstellungen sind auch eher rare. Mein erster Grund war einfach, dass dieser Blog erstmal nur ein Versuch bleibt. Wenn ich Pech habe wird das ganze in ein paar Wochen wieder eingestellt. Und so war blogger.com erst mal die schnellste und einfachste Lösung. Im nach hinein muss ich sagen das die Python API ebenfalls etwas für sich hat, allerdings wusste ich das zu dem Zeitpunkt, als dieser Blog erstellt wurde, noch nicht.

So bleibt abzuwarten. Ich weiß das Google schlecht ist, aber es bietet im Moment einfach noch zu viele Vorteile. Und ich denke das der Satz "Google ist eine der wenigen Firmen die das Internet verstanden haben", durchaus zutrifft. Irgendwann werde ich wechseln, aber so schnell wohl noch nicht.

Guerilla Gardening

Ich bin gerade über netzpolitik auf ein Video der Grünen Jugend Berlin gestoßen. Betitelt was das ganze mit Guerilla Gardening Ich dachte zuerst das ist nur ein Scherz aber nachdem ich etwas rumgeklickt habe bin ich sogar auf ein Wikipedia Artikel gestoßen:

Wie Guerillas vermeiden auch Guerilla-Gärtner die offenen Konfrontation und bevorzugen abgelegene und unzugängliche Standorte oder nehmen ihre Aktionen bevorzugt heimlich durch „Überraschungspflanzungen“ vor.
[via]

oh man und ich dachte wir Informatiker wären Freaks...

X-Forwarding unter Windows

Wäre es nicht super wenn man einfach seine Software nur auf einen Rechner installieren müsste um sich dann nur noch mit einem anderen Computer darauf zu verbinden und sich die GUI anzeigen zu lassen. Die gesamte Konfiguration liegt zentral auf dem Server, die gesamte Rechenleistung übernimmt ebenfalls der Server. Völlig egal welches Betriebssystem der Client hat, er stell einfach nur die GUI da. Und das ohne komplizierte Remote Zugriffe.

Alles einfacher als man denkt. Vor kurzem bin ich schon auf X-Forwarding gestoßen. Das Prinzip ist simpel. Auf meinem Client läuft nur ein X-Server und ein ssh Client mit dem man sich auf den gewünschten Server verbindet. Dort wird dann eine Applikation wie z.B. Psi gestartet, die allerdings nicht auf dem X-Server des Servers angezeigt wird, sondern getunnelt über ssh lokal auf dem X-Server meines Clients.

Und das ganze mit nur einem Konfigurationsaufwand von ca. fünf Minuten! Zumindest wenn Host und Client beides Unix Systeme sind.

Heute hatte ich die Gelegenheit etwas länger an einem Windowsrechner zu sitzen. Und da ich sowieso nichts besseres zu tun hatte, musste das gesamte X-Forwarding natürlich auch unter Windows versucht werden.

Mein erster Ansatz war cygwin. Das ist eine kleine Sammlung von Programmen die mir auf meinem Windowsrechner ein Unix emuliert. Also z.B. eine bash ein Windowmanager oder eben für mein Zweck auch ein X-Server. Leider ist das Ganze sehr groß da die Library an Programmen sehr umfassend ist. Für meinen Zweck waren die 200MB die allein das Grundsystem und der X-Server brauchen, etwas zu viel Speicher. Auch wenn diese Sammlung an einer anderer Stelle durchaus ein Blick Wert ist, musste für den X-Server etwas anderes her.

Nachdem ich schon wieder von Windows genervt war, da es mal wieder nicht so wollte wie ich, bin ich auf Xming gestoßen. Xming ist ein Port eines X-Servers ohne großartige Programmsammlung außen rum. Also genau das was ich brauche. Die 6 MB waren auch schnell installiert und ohne großen Konfigurationsaufwand konnte ich auch gleich erfolgreich testen.

Ich muss sagen, ich bin schwer beeindruckt. Auch wenn aufwendigere Effekte wie Schatten oder Transparenz teilweise etwas langsam sind läuft sonst alles wunderbar:

Wenn man sich die Screenshots von Xming etwas genauer anschaut erkennt man noch so einige interessante Details. Ich bin also noch nicht am Ende mit spielen. Da wünscht man sich ja schon fast öfters vor einem Windowsrechner sitzen zu müssen :D.

Update
Ich habe heute noch ein bisschen damit herum gespielt. Herausgekommen ist dieser nette Screenshot:

Man sieht ich kann eigentlich alle Einzelheiten meines Linux Desktops laden. Den Desktop selbst mit kdesktop, die Tasklines mit kicker und auch katapult funktioniert mehr oder weniger.

Natürlich alles mit gewissen Einschränkungen, aber es läuft! Und es läuft nicht schlecht!

Donnerstag, 22. November 2007

Das 2010 Problem

Ich hatte mich gestern schon über das Video bei Ehrensenf über die "Exaflood" gewundert. Demnach gibt es unser Video nur noch bis 2010 weil der neu aufkommende Traffic nicht mehr von unseren ISP verwaltet werden kann.

Ich dachte mir zuerst "Was für ein Unsinn", bin aber kurz darauf bei netzpolitik auf einen ähnlichen Artikel gestoßen. Ich sehe das ganze genauso wie Markus von netzpolitik: Einfach nur Propaganda gegen Netzneutralität.

Was mich aber an dem ganzen Wirklich erschreckt ist die Sensationsgeilheit die anscheinend alle möglichen Newsportale darauf reinfallen lässt. Würde mich nicht wundern wenn gerade einige Telekommunikationsunternehmen schon Dollarscheine in den Augen haben und sich freuen das ihre Panikmache so gut ankommt.

Gerade noch gefunden (hätte wohl vor dem schreiben erstmal Informationen suchen sollen): Ein weiterer Eintrag bei netzpolitik über das 2010 Problem

Hello World

Gestern habe ich noch mit Andreas über meinen Blog geredet, den ich vor langem einmal registriert habe, aber auf dem es nie zu einem Post gekommen ist. Jetzt möchte ich dies ändern!

Heute an einem Tag der normaler nicht hätte sein können ist doch so viel passiert was alles die richtige Richtung deutet:

  • Ich habe ein weiteres mal gemerkt das mein Studium eigentlich total super ist. Bis ein Block später die Ernüchterung kam und ich feststellen musste das diese Begeisterung doch sehr vom jeweiligen Prof abhängt. Halten wir fest: Wenn Prof gut dann Studium gut.
  • Außerdem habe ich als überzeugter Webmail-Nutzer nun endlich mein Umstieg auf Mailclient begonnen. Ein hoch auf IMAP!
  • In Folge dessen habe ich mir auch endlich GPG eingerichtet!
  • Der nächste Bahnbrechende Erfolg ist auf jeden Fall: KDE RC1 erschienen! ... und gleich die Live-CD heruntergeladen. Leider mit OpenSUSE und leider noch sehr Beta.

Und jetzt zum Abschluss der erste Blogeintrag. Ich sehe das ganze ja noch etwas kritisch. Aber gut, mal schauen ob ich, als Rhetorisches Wrack, es tatsächlich schaffe regelmäßig hier meine Meinung auszulassen. Wahrscheinlich ist der erste Beitrag (trotz dem heiligen Gral der Rechtschreibung: aspell) schon gespickt mit Rechtschreibfehlern und falschen Kommas. (Wer hat eigentlich diese blöden Kommas erfunden? Sollen die Leute doch kürzere Sätze schreiben. Dann bräuchte man keine Kommas und würde trotzdem alles verstehen.)