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.

Donnerstag, 19. November 2009

Stopp! Hier gehts nicht weiter

Es hat sich ja schon rum gesprochen. Ich will endlich von blogger.com weg und auf meine eigene Plattform.

Nun ist es endlich so weit! Weiter gehts auf http://feitel.indeedgeek.de/.

Ich würde mich freun wenn ihr alle eure RSS feeds aktualisiert und mit mir umzieht. Sehr gerne würde ich auch ein Ändern meiner Links in euren Kommentaren sehen. Aber natürlich nur wenn es euer Frontend/Datenbank auch hergibt.javascript:void(0)

Freitag, 2. Oktober 2009

vim-Mastery: Up and Down

Wie oft vertippt man sich und schreibt ein Wort klein statt groß oder man möchte eine Variable in Großbuchstaben haben? Mir geht es jedenfalls oft so, dass ich die Groß/Kleinschreibung von Buchstaben oder ganzen Worten ändern möchte. Und wer hätte es gedacht? Vim bietet natürlich auch genau das.

Toggle Case

Um ein Kleinen Buchstaben groß zu machen oder eben umgedreht reicht ein ~. Optional lässt sich das wie gewohnt mit den Bewegungsoperatoren verknüpfen. Dann braucht es ein g~{motion}. So würde zum Beispiel g~w die Groß- und Kleinschreibung eines Wortes ändern. Hilfreich ist auch ein b~w welches zu dem ersten Buchstaben des letzten Wortes springt, diesen entsprechend verändert und dann wieder ein Wort nach vorne geht damit man weiterschreiben kann. Das ganze geht natürlich auch im visuellen Modus. g~~ verändert die gesamte Zeile.

Groß und Klein

Um ein Bereich explizit groß oder klein zu schreiben ist u bzw. U zuständig. Da die Taste im Bewegenmodus allerdings schon belegt ist, muss man ein g davor schreiben. So würde zum Beispiel gUw das gesamte nächste Wort groß schreiben (guw äquivalent für klein). Im visuellen Modus wird das g davor nicht benötigt und es reicht ein u bzw. U. Wie oben beim Toogle schon gesehen, verändert gUU die gesamte Zeile.

Merkzettel

~
Invertieren der Groß-/Kleinschreibung für ein Wort

Der Rest ist gleich für ~-Toggle, u-Klein- und U-Großschreibung

g~{motion}
Invertieren des Textes während der Bewegung
g~~
Invertieren der gesamten Zeile
{Visual}~
Invertieren des selektieren Bereiches

Donnerstag, 1. Oktober 2009

Open Access im Mitmachweb - Teil 2

Open Street Map

Da ich schon im ersten Teil mit Geodaten angefangen habe, mache ich hier gerade weiter. Openstreetmap basiert genau auf dem bereits erwähnten Prinzip. Als Nutzer profitiert man von sehr aktuellem und detailierten Kartenmaterial. Vor allem in großen Städten übertrifft die Aktualität Google Maps bei weitem. Zudem finden sich dort noch viele zusätzliche Informationen wie Briefkästen oder Telefonzellen. Als Programmierer kann man über Abfragen auf die zentrale Datenbank zugreifen und so zum Beispiel alle Kindergärten im Umkreis von 10 km abfragen. Das Einfügen von neuen Daten funktioniert über verschiedene Editoren in die man aufgezeichnete GPS-Tracks einblenden lassen kann und dann dort Bereiche zum Beispiel als Straße oder Feldweg nachzeichnet.

Musicbrainz

Eines meiner liebsten Projekte und gleichzeitig wohl auch eines der unbekannteren ist Musicbrainz. Wer mal versucht hat seine Musiksammlung zu ordnen wir feststellen, dies ist ohne Hilfe fast unmöglich. Künstler veröffentlichen auf verschiedenen Alben und Compilations das selbe Lied in den unterschiedlichsten Variationen. Um also sagen zu können welches Lied man gerade vor sich hat müsste man eine Vielzahl von Parametern mit allen veröffentlichten Versionen vergleichen. Musicbrainz hat hier eine offene Datenbank mit über acht Millionen Tracks aufgebaut. Hier werden von Album Covern, Homepages, Lizenzen bis hin zu Covern der Lieder alle möglichen Metainformationen gespeichert. Bearbeitungen von Infos müssen erst durch ein Review-Verfahren, wodurch eine recht gute Qualität gewährleistet ist. Die Daten können über eine API abgefragt werden. Zusätzlich existiert ein sehr guter Client der sogar ein ganz brauchbares, automatisches Erkennen unterstützt. So lassen sich komfortabel Dateien Tracks zuordnen. Einmal diese Zuordnung erbracht wird eine eindeutige ID in den Metadaten gespeichert (die selbstverständlich auch mit den Daten abgeglichen wird).

Jamendo

Da man ja kommerzielle Musik kaum noch zahlen kann und die Radiosender auch immer schlechter werden, kann ich jedem nur einmal nahe legen sich freie Musik anzuhören. Jamendo bietet unglaublich viel Musik zum online hören und herunterladen. Es gibt dort viel schlechte Musik aber mit ein bisschen Suchen finden sich dort großartige Perlen. Zudem kann man selbstverständlich auch selbst Musik dazu betragen und auf etwas Geld durch Spenden oder zumindest Popularität hoffen.

Projekt Gutenberg

Dieses Projekt versucht Bücher, die aufgrund ihres Alters als Allgemeingut zählen (und somit von keinen Copyright-Ansprüchen betroffen sind), zu digitalisieren und frei zur Verfügung zu stellen. Ich selber habe damit noch nichts gemacht finde aber die Idee dahinter sehr unterstützenswert. Details gibt es bei Aaron, der vor längerem mal darüber berichtet hat.

Openlibrary

Openlibrary versucht die eindeutige Auflistung aller veröffentlichen Bücher mit ihren entsprechenden Metainformationen frei zugänglich zu machen. Dies funktioniert ähnlich wie bei librarything mit dem Unterschied, dass man bei Librarything ein Buch "forked" und dieses dann in seiner eigenen Sammlung editiert (wenn ich das richtig verstanden habe). Openlibrary funktioniert eher wie ein Wiki welches man bearbeiten kann.

Andere Projekte

Neben diesen Projekten, die ich mal beispielhaft herausgegriffen habe, gibt es noch eine Vielzahl von unterstützenswerten Projekten. Allein unter dem Dach der Wikimedia Foundation zu der auch Wikipedia gehört finden sich viele Interessante Ansatzpunkte die sicherlich ein Blick wert sind. Allerdings heißt es aufpassen, da einige Seiten wie zum Beispiel leo.org oder imdb, von denen ich eigentlich dachte sie geben ihre Daten ebenso frei, dies keineswegs tun. Im Zweifel lieber nach offen Alternativen Ausschau halten bevor man seine mühevoll erarbeiteten Daten an ein kommerzielles Unternehmen verschenkt.

Wenn ihr noch erwähnenswerte Projekte kennt, würde ich mich über eine Auflistung in den Kommentaren freuen!

Dienstag, 29. September 2009

Open Access im Mitmachweb - Teil 1

Ja, ich weiß, die meisten von euch können es schon nicht mehr hören. Spätestens seit die die gängigen Buzwords in den Massenmedien ihre Heimat gefunden haben, ist man froh wenn einem nicht ständig jemand Twitter und Co erklären will. Aber das habe ich auch gar nicht vor. Ich denke jeder der mich kennt, weiß das ich sehr viel Wert auf freien Zugang und offene Lizenzen lege. Das Problem ist nur, die meisten der Daten die wir täglich konsumieren sind eben nicht frei. Firmen haben diese Daten mit ausschließlich kommerziellen Hintergedanken gesammelt und verwenden sie auch, mehr oder weniger offensichtlich um damit mehr Geld zu erwirtschaften. Einfache Werbeeinblendungen sind da meist noch das geringere Übel. Zudem erlauben die Nutzungsauflagen nur eine sehr beschränkte Weiterverwendung. Dies kann gerade bei einem Kreativen "Remixen" also sprich aufbereiten, anreichern oder verknüpfen schnell zur unangenehmen Überraschung führen.

Um ein konkretes Beispiel zu nennen: Google Maps. Google Maps hat sich in den letzten Jahren den Platz als Allheilmittel für Geodaten wie Landkarten, Wegbeschreibung, Location Based Services oder Satellitenbilder, erkämpft. Man kann die Karten soweit kostenlos einfach über die Weboberfläche nutzen und es gibt sogar eine Schnittstelle über die man Karten auf der eigenen Seite anzeigen kann. Wo ist nun der Haken? Stellen wir uns einmal vor Google beschließt morgen doch evil zu sein und ändert die Nutzungsbedingungen, was sie ja beliebig tun können. Plötzlich muss man für das Einblenden Geld bezahlen oder man kann die Karten nur noch nach Registrierung einsehen. Nichts könnte man dagegen unternehmen. Google kann somit mit allen Nutzern machen was sie möchten ohne das man sich irgendwie dagegen wehren kann. Gut, Viele werden nun sagen, das macht Google sowieso nicht aber nehmen wir ein anderes Beispiel: Ich bin das nervige Webinterface leid und programmiere einen Desktop Client der Teile der Karten runterlädt und zwischenspeichert. Auch hier kommt mir Google in die Quere da sie mir auferlegen auf die Daten nur über ihre vorgegebenen Nutzungswege zugreifen zu können. Mir sind erneut die Hände gebunden da ich eben mit den Daten nicht das machen kann was ich gerne machen möchte. Zudem wird dem ein oder anderen schon die veralteten Daten aufgefallen sein. Google kauf nur in sehr unregelmäßigen Abständen aktualisierte Daten ein, so das einzelne Karten durchaus ein paar Jahre alt sein können. Nun weiß ich aber genau, dass die Straße vor meinem Haus anders heißt und trotzdem navigiert mich Google jedes mal falsch weil eben der Name nicht passt. Man könnte nun versuchen Google auf den Fehler aufmerksam zu machen aber glaubt mir ihr werdet damit kein Erfolg haben.

Wie schön wäre es wenn es nun neben Google Maps auch Datenbestände gäbe auf die ich frei zugreifen kann. Die ich frei bearbeiten, verteilen und weiterverarbeiten kann ohne das Google oder sonst wer mir vorschreiben kann wie und zu welchen Bedingungen ich diese nutzen darf. Das Problem hierbei ist allerdings der Preis solcher Daten. Gerade Geodaten sind sehr teuer wenn man diese einkaufen möchte. Da wird wohl kaum jemand her gehen und diese, nachdem er sehr viel Geld dafür ausgegeben hat, einfach verschenken. Deshalb geht man einen anderen Weg und nutzt die Masse der Leute. Wenn man jeden bittet seine Straße vor dem Haus in einer Karte einzutragen so hat man anschließend eine aktuelle, weitgehend fehlerfreie Karte die jeder nutzen kann, ohne das jemand sonderlich viel Mühe rein gesteckt hat.

So und hier fängt nun mein eigentliches Anliegen an. Es gibt viele Projekte die ein solches freies Wissen aufbauen. Doch man wird kaum alle überreden können ihre Straße einzutragen. Allerdings reicht es schon wenn sehr viele Leute möglichst viel eintragen. Dann hat man auch schon eine recht brauchbare Karte. Deshalb herrscht bei solch freien Projekten, die durch ihre Mitglieder angetrieben werden, ein notorischer Mangel an Arbeitskräften. Ich möchte deshalb an dieser Stelle einige mehr oder weniger bekannte Projekte vorstellen die meiner Meinung eine aktive Beteiligung verdient haben.

Da die Überlänge meiner Artikel allerdings langsam zu einem notorischen Problem wird und die Einleitung nun schon wieder den Rahmen Sprengt, gibt es die eigentliche Vorstellung der Projekte erst in den nächsten Tagen.

Sonntag, 27. September 2009

Wählen mit Bleistift

Ich habe heute zum ersten mal in Heilbronn gewählt und war doch schwer verwundert. Ich habe nur ein Faber Castell Bleistift vorgefunden, mit dem ich meine Kreuzchen machen sollte. Empört hab ich natürlich gleich mal gefragt wie das sein kann. Die Aufsicht hat mich mit den Worten "Wir haben sowieso keine Radiergummis hier" versucht zu beschwichtigen.

Anscheinend muss ich ein etwas entsetztes Gesicht gemacht haben denn die Frau neben ihm ist gleich eingesprungen und erklärte mir das es sich um einen Kopierstift handelt. Ich wusste gar nicht das es so etwas überhaupt gibt.

Immer noch etwas skeptisch über die Farbe, die aussah wie ein Bleistiftstrich, habe ich zuhause gleich nachgeforscht und tatsächlich gibt es Kopierstifte die trocken aussehen wie Bleistifte und erst wenn man sie nass macht ändern sie ihre Farbe in violett. Schade, dass ich das nicht schon beim wählen wusste. Den Selbstversuch hätte ich mir nicht entgehen lassen.

Ist das normal? Ich hatte bisher immer Briefwahl gemacht, von daher weiß ich nicht ob dies überall so ist. Nächstes mal spendiere ich denen ein Kulli (nachdem ich den Stift nass gemacht habe um zu testen ob die mich nicht angelogen haben).

Und wenn der Beitrag sowieso schon Off-Topic ist leg ich doch glatt noch eins darauf. Aktuelle Hochrechnung: Piraten 2%!! Sogar auf der Tagesschau-Webseite als eigene Partei gelistet und nicht unter "Andere" geführt! ... Nur das mit Schwarz-Gelb scheint wohl sicher :(

Samstag, 26. September 2009

vim-Mastery: Eingerückt

Tabs, Space (oder beides)?

Es ist ja ein längerer Streitpunkt zwischen Entwicklern, mit welchem Zeichen eingerückt wird. Vim bietet an dieser Stelle drei verschiedene Möglichkeiten:

  • Einrückung mit Tabs - Jede Einrückung wird einfach durch ein Tab-Zeichen ersetzt. Dies ist die Standardmethode in den meisten Editoren so auch in vim. Steuern lässt sich dies mit der Option noexpandtab
  • Einrückung mit Leerzeichen und Tabs - Da Tabs sehr schell sehr hässlich werden, wenn man sie nicht konsequent umsetzt gibt es die Möglichkeit die Breite eines Tabs konstant (default: acht Zeichen) zu lassen aber nur mit weniger einzurücken (shiftwidth). Also zum Beispiel Einrückung vier Zeichen, Tabbreite acht Zeichen: Einmal Tab bedeutet vier Leerzeichen werden eingefügt. Zweimal Tab machen ein wirkliches Tab. Und bei drei wären es ein Tab und 4 Leerzeichen. Setzen lässt sich das über smarttab.
  • Einrückung nur mit Leerzeichen - Jeder Tab wird einfach durch die angegebene Anzahl von Leerzeichen ersetzt. Dies ist auch die von mir favorisierte Methode da nichts irgendwie verhauen wird wenn jemand anderes eine andere Breite von Tabs verwendet. Einstellen lässt sich die Option einfach durch expandtab.

Breite der Einrückung

Hierfür gibt es zwei Optionen. Einmal tabstop und dann noch shiftwidth. Üblicherweise sollte man beides auf den selben Wert lassen. Nur wenn man, wie oben beschrieben, Tabs und Leerzeichen mischen möchte, dann gibt tabstop an wie viele Leerzeichen durch ein Tab ersetzt werden und shiftwidth setzt die Breite einer Einrückungsstufe

Automatische Einrückung

Vim unterstützt selbstverständlich auch eine automatische Einrückung. Hierfür gibt es verschiedene Mods. Einmal gibt es autoindent welches einfach die Einrückung der letzten Zeile in die nächste übernimmt. Etwas Schlauer ist da smartindent. Hierbei werden einige Keywords und geschweifte Klammern beachtet. Diese beiden Methoden bilden die Basis und können immer aktiviert bleiben.

Unabhängig davon gibt es spezielle Einrückungen für eine große Anzahl von Sprachen. Einmal wäre da das eingebaute cindent welches sich auf Einrückung für c spezialisiert. Da man meistens aber doch an anderen Sprachen als c arbeitet gibt es die Möglichkeit einige Einrückungs-Schematas, die in den meisten vim Installationen mitgeliefert werden, zu aktivieren. Hierzu reicht ein einfaches filetype plugin indent on. Hierdurch versucht vim beim laden der Datei durch die Dateiendung oder Shee-Bang-Zeile zu erkennen um welche Art von Datei es sich handelt und lädt das entsprechende Profil. Die installierten Profile liegen in einzelnen Dateien im indent Ordner von vim.

Für die vimrc

Merken wir uns also folgende Optionen für unsere vimrc:

" use only Spaces
set expandtab
" indent with two spaces
set tabstop=2
set shiftwidth=2
" nativ indent detection
set autoindent
set smartindent
" activate language detection
filetype plugin indent on

Commands

Kommen wir nun zu der Anwendung.

Ein-/Ausrücken

Ist man gerade im Einfügemodus kann man einfach mit strg+T eine Stufe einrücken bzw. mit strg+D eine Stufe wieder ausrücken. Viel flexibler ist man allerdings im Befehlsmodus. Hier lassen sich < und > verwenden um entsprechend die Einrückung zu verändern. Am einfachsten über << und >>. Dies verrückt einfach die aktuelle Zeile um eine Stufe. Möchte man nun mehrere Zeilen verrücken dann kann man auch <{motion} verwenden. Motion ist hier jede beliebige Bewegung wie man sie in vim kennt. (G = bis zum Ende des Dokumentes, 35G = bis zur Zeile 35, 3j = 3 Zeilen nach unten, etc...) Interessant ist hierbei das man auch wie gewohnt den letzten Befehl mit . wiederholen kann. Also würde >4.. vier Zeilen drei mal einrücken. Wer sich da noch etwas unsicher ist kann auch erstmal im visuellen Modus alles markieren und dann einfach die markierten Zeilen mit > einrücken. Beispiel: V2j3> rückt die nächsten zwei Zeilen drei mal ein.

Und zum Schluss noch der Kommandozeilenmodus: Hier kann man mittels :left X angeben, dass die Einrückung der aktuellen Zeile (mittels angegebenem Bereich auch mehr als nur die aktuelle Zeile) auf X gesetzt wird.

Für den Spickzettel:

Sorry aber ich habe mal das mehr oder weniger aus der vim Hilfe übernommen. Ich glaub übersichtlicher hätte ich es nicht ausdrücken können.

<{motion}
Shift {motion} lines one shiftwidth leftwards.
<<
Shift [count] lines one shiftwidth leftwards.
{Visual}[count]<
Shift the highlighted lines [count] shiftwidth leftwards.
:[range]<
Shift [range] lines one shiftwidth left. Repeat '<' for shifting multiple shiftwidths.
:[range]< {count}
Shift {count} lines one shiftwidth left, starting with [range] (default current line). Repeat '<' for shifting multiple shiftwidths.
:[range]le[ft] [indent]
left align lines in [range]. Sets the indent in the lines to [indent] (default 0).

Automatisch Einrücken

Und jetzt das Beste. Wer sich ärgert, dass seine Einrückung nicht mehr stimmt soll einfach mal ={motion} ausprobieren. == korrigiert die aktuelle Zeile und wie gewohnt lässt sich dies mit dem visuellen Modus etc kombinieren (siehe oben < Operator). So rückt zum Beispiel ein gg=G den kompletten Text ein.

Misc

Eigentlich wollte ich ja mit diesem Beitrag die komplette Einrückung in vim erschlagen aber irgendwie ist es schon wieder viel zu lange geworden und ich bin immer noch nicht fertig. Es gibt noch Plugins die bei der Einrückung unterstützen und Einstellungen die ein detailiertes Konfigurieren ermöglichen. Was man aber auf jeden Fall noch kurz erwähnen sollte ist einmal :retab welches hilft die Einrückung von Text zu ändern. Und ganz wichtig die Option paste welche, wenn aktiviert einige Optionen so verändert, dass der eingefügt Text nicht durch automatische Einrückung verunstaltet wird. Einfach das nächste mal testen, wenn ihr Text vom Browser in vim einfügt.

Sonntag, 13. September 2009

VPN Schmerzlos

Jedes mal wenn man es verwenden muss ärgert man sich erneut: Immer dann wen man es am wenigsten brauchen kann bricht die VPN Verbindung zusammen und der laufende Download, die SSH Verbindung oder was auch immer grade wichtig war, bricht zusammen. Oder anders herum: Man scheut das Einwählen da man ein Wechseln der IP Adresse grade nicht gebrauchen kann. Viele Applikationen reagieren darauf sehr ärgerlich.

Heute hat es mich einmal zu viel aufgeregt und ich habe beschlossen etwas dagegen zu tun!

Wo ist das Problem?

Schaut man sich ohne VPN seine Routing Table an schaut alles wunderbar aus. Netzinterner Verkehr (192.168.188.0/24) wird direkt ohne Router über das wlan0 Interface gerouted. 127.0.0.0/8 geht über das loopback Device und alles andere wird über wlan0 an den Router bei 192.168.188.1 geschickt.

# route -n
Kernel IP Routentabelle
Ziel            Router          Genmask         Flags Metric Ref    Use Iface
192.168.188.0   0.0.0.0         255.255.255.0   U     2000   0        0 wlan0
127.0.0.0       0.0.0.0         255.0.0.0       U     0      0        0 lo
0.0.0.0         192.168.188.1   0.0.0.0         UG    2000   0        0 wlan0

Wählt man sich nun ins VPN ein bekommt man folgendes Bild zu sehen:

# route -n
Kernel IP Routentabelle
Ziel            Router          Genmask         Flags Metric Ref    Use Iface
193.197.62.114  192.168.188.1   255.255.255.255 UGH   0      0        0 wlan0
141.7.73.73     0.0.0.0         255.255.255.255 UH    0      0        0 tun0
192.168.188.0   0.0.0.0         255.255.255.0   U     2000   0        0 wlan0
127.0.0.0       0.0.0.0         255.0.0.0       U     0      0        0 lo
0.0.0.0         0.0.0.0         0.0.0.0         U     0      0        0 tun0
0.0.0.0         192.168.188.1   0.0.0.0         UG    2000   0        0 wlan0

Was ist nun passiert? Zum einen wurde ein neues Device hinzugefügt (tun0). Alles zu der IP Adresse 192.197.62.144 geht über wlan0. Ich nehme mal an dies ist der Eintrittspunkt ins Netz. 141.7.73.73 geht über das tun0 Device. Dies ist der VPN Server auf dem man sich anmeldet. Nun kommen die bereits gekannten Regeln mit einer Ausnahme: Vor der default Route über meinen Router kommt eine andere Route die alles über das tun0 Device leitet. Das heißt so viel wie alles was nicht an 193.197.62.114, 192.168.188.0/24 oder 127.0.0.0/8 geht wird auf tun0 geleitet und geht somit nicht mehr über meinen Router raus. Möchte ich nun eine Webseite wie indeedgeek.de anschauen muss ich erst über VPN ins Hochschulnetzt gehen und dann von dort wieder raus zu indeedgeek.de. Als Beweis ein Traceroute (wer sich wundert: Das Tool heißt tcptraceroute und geht einfach auf Port 80 da ein normaler traceroute geblockt wird).

# tcptraceroute indeedgeek.de
Selected device tun0, address 141.7.73.73, port 34815 for outgoing packets
Tracing the path to indeedgeek.de (92.51.129.99) on TCP port 80 (http), 30 hops max
1  141.7.75.254  57.261 ms  56.569 ms  56.535 ms
2  FH-Heilbronn1.belwue.de (129.143.124.33)  57.533 ms  56.640 ms  56.714 ms
3  Ulm1.belwue.de (129.143.1.70)  63.486 ms  62.116 ms  61.594 ms
4  Stuttgart1.belwue.de (129.143.1.161)  64.684 ms  73.933 ms  62.531 ms
5  Stuttgart2.belwue.de (129.143.1.25)  62.430 ms  63.443 ms  64.647 ms
6  Frankfurt1.belwue.de (129.143.1.130)  68.713 ms  68.232 ms  70.087 ms
7  xe-0-3-0.cr-merak.fra2.hosteurope.de (80.81.193.239)  78.019 ms  74.123 ms  71.746 ms
8  * xe-0-1-0.cr-altair.cgn2.hosteurope.de (80.237.129.86) 74.100 ms  74.901 ms
9  xe-0-3-0.cr-pollux.cgn3.hosteurope.de (80.237.129.65)  74.367 ms  72.913 ms  75.388 ms
10  xe-16-1.cs-master.r1.cgn3.hosteurope.de (80.237.129.118)  80.181 ms  81.041 ms  74.501 ms
11  * * *
12  indeedgeek.de (92.51.129.99) [open]  81.123 ms  80.154 ms  82.230 ms

Das heißt ich habe von außen nicht mehr die IP Adresse meines DSL-Anschlusses sondern die IP Adresse des Hochschulnetzes. Dieser Wechsel der IP wird von den meisten Programmen sehr übel genommen. Vor allem da er zwei mal auftritt: Einmal beim Einwählen und dann wieder beim Trennen der Verbindung.

Die Lösung

Wenn man sich innerhalb des Hochschulnetzes befindet (z.B. Wlan) dann hat man keine andere Wahl: Wenn Internet dann nur über VPN. Da ist das Einwählen nicht so tragisch da zuvor ja noch keine Internetverbindung bestanden hat. Möchte man aber von Außen auf Dienste innerhalb der Hochschule zugreifen kommt mein Kritikpunkt ins Spiel. Dann hat bereits eine Verbindung bestanden die nun im Grunde getrennt wird und von einer anderen IP erneut aufgebaut werden muss.

Und genau dagegen möchte ich etwas tun. Die Lösung ist einfach. Wir lenken einfach nur den Verkehr über tun0 der auch darüber fließen muss. Der Rest nutzt einfach weiter wie vorher meinen Router. Erreichen kann man dies über zwei kleine Befehle:

route del default dev tun0
route add -net 141.7.0.0 netmask 255.255.0.0 dev tun0

Der erste Befehl löscht die default Route über tun0 und der zweite fügt eine neue Route ein. Diese soll jeden Verkehr an 141.7.0.0/16 über tun0 routen. Schauen wir uns nun die Routingtable an sieht man schön die Änderungen.

route -n
Kernel IP Routentabelle
Ziel            Router          Genmask         Flags Metric Ref    Use Iface
193.197.62.114  192.168.188.1   255.255.255.255 UGH   0      0        0 wlan0
141.7.73.73     0.0.0.0         255.255.255.255 UH    0      0        0 tun0
192.168.188.0   0.0.0.0         255.255.255.0   U     2000   0        0 wlan0
141.7.0.0       0.0.0.0         255.255.0.0     U     0      0        0 tun0
127.0.0.0       0.0.0.0         255.0.0.0       U     0      0        0 lo
0.0.0.0         192.168.188.1   0.0.0.0         UG    2000   0        0 wlan0

Zur Vollständigkeit noch der funktionierende traceroute:

tcptraceroute indeedgeek.de
Selected device wlan0, address 192.168.188.22, port 35522 for outgoing packets
Tracing the path to indeedgeek.de (92.51.129.99) on TCP port 80 (http), 30 hops max
1  192.168.188.1  1.855 ms  6.856 ms  1.530 ms
2  lo1.br63.dus.de.hansenet.net (213.191.64.107)  39.948 ms  47.024 ms  39.611 ms
3  ae0-101.cr02.dus.de.hansenet.net (62.109.110.62)  39.143 ms  38.726 ms  38.570 ms
4  so-0-1-0-0.cr02.fra.de.hansenet.net (213.191.66.34)  42.411 ms  51.295 ms  44.529 ms
5  ae1-0.pr03.decix.de.hansenet.net (62.109.109.236)  48.808 ms * 42.657 ms
6  xe-0-3-0.cr-polaris.fra1.hosteurope.de (80.81.192.239)  43.630 ms  43.009 ms  43.116 ms
7  xe-0-2-0.cr-nashira.cgn4.hosteurope.de (80.237.129.109)  45.807 ms  47.210 ms  72.683 ms
8  xe-2-1-0.cr-pollux.cgn3.hosteurope.de (80.237.129.10)  45.310 ms  45.984 ms  45.996 ms
9  xe-16-1.cs-master.r1.cgn3.hosteurope.de (80.237.129.118)  48.070 ms  46.861 ms  51.865 ms
10  * * *
11  indeedgeek.de (92.51.129.99) [open]  45.604 ms  46.741 ms  47.159 ms

Wie erreicht man nun dies am einfachsten? Zwei Möglichkeiten: Entweder man hindert vpnc daran die default Route zu ändern oder man gibt nach dem Verbindungsaufbau die beiden Befehle ein. Die erste Möglichkeit ist zwar die Elegantere da gar kein Abbruch statt findet. Allerdings war es mir zu nervig in der 530 Zeilen langen Bash Datei (/etc/vpnc/vpnc-script) herumzufummeln. (Zeile 467 ist der Verbrecher). Man müsste ein Schalter einbauen der die default Route im Hochschulnetz setzt und außerhalb eben nicht. Wer sich versuchen möchte nur zu, ich würde mich freuen!

Deshalb die zweite Lösung: Die beiden Zeilen einfach nach Verbindungsaufbau eingeben. Die Programme verkraften meistens eine kurze Trennung und so sollte diese Methode ausreichen.

vpnc in gentoo

Um die Pause möglichst kurz zu halten habe ich die Ausführung automatisiert. Ich glaube so funktioniert es nur in Gentoo aber andere Distributionen werden sich wohl ähnlich verhalten.

Ich habe zwei vpnc Profile angelegt einmal fhhn und einmal fhhn-int (intern). Unter gentoo reicht es einfach die Startscripte und Konfigdateien zu verlinken:

cd /etc/init.d/
ln -s vpnc vpnc.fhhn-int
ln -s vpnc vpnc.fhhn
cd /etc/vpnc/
ln -s default.conf fhhn.conf
ln -s default.conf fhhn-int.conf

Anschließend kann man über /etc/init.d/vpnc.fhhn und /etc/init.d/vpnc.fhhn-int vpnc starten. Es wird automatisch die korrekte Konfigdatei genutz (wobei beide sowieso identisch sind). Nun hat man zwei identische Verbindungen und jetzt kommt das Beste: Wir legen einfach die Datei /etc/vpnc/scripts.d/fhhn-postup.sh an. Diese wird nur bei fhhn aufgerufen (sonst müsste sie fhhn-int-postup.sh heißen). Dort scheiben wir nun unsere beiden route Befehle rein und machen sie ausführbar.

Nun kann ich einfach entscheiden ob ich die Routen umgeschrieben haben möchte (fhhn-int) oder eben nicht (fhhn). Leider bleibt immer noch das Problem, dass die Verbindung ab und zu abbricht. Daran kann ich leider nichts tun aber zumindest sind so nicht mehr alle Dienste davon betroffen.

Vielleicht konnte euch etwas helfen und auch Klaus kann nun Baseline testen ;-).

Disclaimer: Ich hoffe mal ich habe keine geheimen IP Adressen verraten. Ich denke an die Infos kommt jeder mit etwas motivation ran.

Samstag, 5. September 2009

vim-Mastery: Visualisiert

vim bietet viele Möglichkeiten einen bestimmten Bereich zu selektieren und darauf einen Befehl anzuwenden. Beispielsweise würde g~f? den Befehl g~ (Groß-/ Kleinschreibung umdrehen) auf alle Zeichen von der Cursor Position bis zum nächsten ? in der Zeile anwenden oder <3j würde die nächsten drei Zeilen ausrücken.

Aber manchmal ist man eben doch zu faul sich ein Konstrukt zusammen zu basteln welches genau den erforderlichen Text bearbeitet. Oder man möchte auf eine Selektion mehrere Befehle anwenden. Genau dann kommt der visuelle Modus ins Spiel.

Zu erst einmal gibt es drei unterschiedliche Möglichkeiten um Text zu selektieren. Einmal v welches wie man es von anderen Editoren gewöhnt ist Zeichen für Zeichen selektiert. V kann nur komplette Zeilen selektieren. Es ist somit nicht möglich nur halbe Zeilen zu bearbeiten. Und zu letzt noch strg+v welches blockweise selektiert.

Hat man nun angefangen zu selektieren und man merkt, dass am Anfang noch eine Zeile fehlt so kann man mit O zum Anfang der Selektion springen und mit o zum Ende.

Sobald man einmal seinen gewünschten Bereich selektiert kann man darauf dann den entsprechenden Befehl anzuwenden. Somit verschwindet aber der selektierte Bereich wieder. Mit gv ist es möglich die letzte Selektierung wieder herzustellen.

Notiz auf dem CheatSheet:

v
Zeichenweise selektieren
V
Zeilenweise selektieren
strg+v
Blockweise selektieren
gv
Selektierung wieder herstellen

Dienstag, 18. August 2009

HTML ist nutzlos!

Wofür brauchen wir überhaupt HTML? Mal ganz nüchtern betrachtet ist HTML doch nur ein gravierender Einschnitt in die Freiheit die XML uns bietet. Man muss ich plötzlich in eine Welt hinein zwängen, in der man zwar Videos abspielen kann aber maximal sechs Ordnungen von Überschriften haben darf. In der man zwar zwischen einem Akronym und einer Abkürzung unterscheiden kann aber nicht mal Überschriften automatisch numeriert werden.

Status Quo

Ok, ich bin nicht ganz fair mit meinen Beispielen. Aber mit welchem Grund machen wir diese Einschränkungen? Wäre es nicht einfach möglich XML frei Schnauze hinzuschreiben?

Betrachten wir doch erst einmal HTML. HTML gibt es im Grunde schon so lange wie es Webserver gibt (1987 - Tim Berners-Lee). Am Anfang eigentlich nur zur Textformatierung gedacht entwickelte sich später eher eine semantische Markup Sprache daraus. Mit der Entwicklung von CSS ging man immer mehr zu einer Trennung zwischen Aussehen (CSS) und Auszeichnung (HTML) über. In HTML sollte seit dem nicht mehr ein <b> (für bold - fett) stehen sondern ein <em> (für emphasized - hervorgehoben). Da so die Bedeutung und nicht das Aussehen definiert wird.

Da CSS lange Zeit (bedauerlicherweise bis heute noch) von vielen Browsern unterschiedlich implementiert (oder gar ignoriert) wurde, ist es schwer ein komplettes Layout in CSS abzubilden. Zudem hat bei Vielen nie ein Umdenken statt gefunden, so dass sich heute immer noch Webseiten mit <b> oder <font>-Tags finden. Auch Tabellen werden heute immer noch gerne für ein Layout missbraucht da man sich mit einer alternativen CSS Implementierung sehr schwer tut.

Eigentlich sollte man erst einmal jede Webseite komplett in HTML schreiben. Im HTML den Inhalt entsprechend auszeichnen (Zitate in <blockquote>, Abkürzungen mit <abbr>, etc) und erst anschließend das Ergebnis mit CSS formatieren. Dabei kann man dann auch entsprechend auf den Medientyp wie Bildschirm, Handy oder Screenreader eingehen. Aber leider sind wir wohl in der Praxis davon noch ein ganzes Stück entfernt.

Wo hilft mir nun also mein XML?

Der erste Punkt ist sicher die bereits erwähnte Freiheit. Ich kann jeden TAG den ich brauche einfach selbst definieren. Somit kann ich mein Text auch viel flexibler auszeichnen. Zusätzlich ist im Browser auch kein Standardverhalten (wie kursiv für <em>) vordefiniert. Ich kann sozusagen auf einer leeren Tafel anfangen zu malen und muss nicht jedes mal erst ein CSS-Reset implementieren. Zusätzlich erhält man eine klarere Struktur zwischen Semantik und Design da man erst gar nicht auf die Idee kommt eine Tabelle zum Positionieren zu missbrauchen - schließlich müsste man das Aussehen für ein table-Tag sowieso selbst in CSS implementieren.

Fassen wir zusammen: Formatieren muss ich mit CSS sowieso und durch XML wird die die semantische Aussagekraft ins Unendliche katapultiert. Wer sich noch nicht so ganz vorstellen kann wie ich mir das denke, für den habe ich mal ein kleines Beispiel erstellt.

Wo ist der Haken?

Also erstmal die beiden simpelsten Hindernisse: Zu erst einmal sind die meisten Webseitenbetreiber weder gewillt noch im Stande diese Änderung nachzuvollziehen. Wenn ihr euch die Verbreitung von Tabellenlayouts anschaut wisst ihr was ich meine. Zum anderen dürfte es an der ein oder anderen Browserunterstütung scheitern (Früher oder später bekommt der IE doch in jedem Webdesignartikel sein Fett weg).

Aber gut lassen wir einmal solche trivialen Hindernisse außer acht. Das Hauptproblem was ich sehe ist das durch zuviel Semantikfreiheit jegliche Semantik verloren geht. Zwar kann der Entwickler jeden Tag nennen wie er will aber der Browser versteht trotzdem nicht das "Kontakt" für einen Kontakt steht so lange bis man es ihm sagt. Wenn ich also völlige Freiheit in der Benennung habe kann der Browser daraus auch keine Schlüsse mehr ziehen. Man müsste dazu der Maschine erst denken beibringen damit sie versteht was ich mit Kontakt meine (und auch checkt das "Contact" und ein falsch geschriebenes "Gondagde" das selbe meint).

Der einzige Ausweg wird es wohl sein nicht ein HTML zu haben sondern in sich abgeschlossene Semantikbereiche. Diese müssten dann in irgend einer Metasprache definiert werden so damit der Browser damit etwas anfangen kann. Diese übergeordnete Definition müsste einmal das Aussehen definieren aber im weiteren auch die Bedeutung welche die entsprechenden Tags mit sich bringen. Nehmen wir mal als Beispiel SVG, MathML oder was ganz anderes. Diese beschreiben für ein entsprechendes Themengebiet eine Auszeichnungssprache. Möchte ich nun Formeln darstellen kann ich MathML einfach "includen" und kann dann meine Formeln schreiben. Das Problem daran ist: Es kann wieder kein Browser anständig darstellen und selbst wenn versteht er trotzdem nicht den Sinn dahinter (solange man es ihm nicht explizit erklärt). Deshalb meine ich es müsste eine Art Metasprache geben (konsequenterweise wieder XML) in der man beschreibt wie zum Beispiel SVG oder MathML auszusehen hat. Bisher gibt es das soweit ich weiß nur eine Sprache zur Festlegung von Schemata die allerdings nur zur Validierung von XML verwendet werden.

Mein Fazit, was ich aus der Überlegung mitnehme: Eigentlich verwenden wir die gesamte Zeit schon XML denn eigentlich ist HTML ja auch nur ein Teil von XML welcher sich um die Auszeichnung von Text kümmert. Schön wäre es allerdings wenn man den vollem Umfang, der von XML geboten wird, auch nutzen kann. Bisher muss jede Erweiterung erst in jeden Browser implementiert werden was annähernd unmöglich ist. Schön wäre es wenn man einfach auf verschiedene "Libraries" zugreifen, bzw. selbst erstellen, kann. Diese muss man einfach nur einbinden und schon versteht der Browser meine Erweiterungen und kann Formeln darstellen und Überschriften nummerieren.

Was haltet ihr davon? Wäre XML eine brauchbare Alternative? Kennt ihr schon Ansätze um die Semantik von XML wieder in XML zu beschreiben? Und ganz wichtig: Verwendet ihr noch Tabellenlayouts? ;-)

Montag, 10. November 2008

ID3-Cover von Kopf bis Fuß

ID3 steht für Identify an MP3 wobei die aktuellen Versionen weit über das bloße Identifizieren hinaus gehen. In der Version 2.4 sind 83 Verschiedene Tags definiert die von "Internet radio station owner" bis "Original album/movie/show title" reichen. (Daneben kochen noch einige Player wie ITunes ihr eigenes Süppchen).

Versionen

In Version 1 gab es nur wenige Tags die auf eine fixe Größe begrenzt waren. (Zudem noch ein Haufen anderer Nachteile...) In Version 2 wurde vieles verbessert so ist zum Beispiel die Länge nicht mehr Fix und es gibt haufenweise neue Tag-Felder. Alle Versionen bis 2.3 gelten als veraltet. Und werden nur von wenigen Programmen und Geräten noch geschrieben. Die aktuelle Version ist 2.4 wobei man am häufigsten noch 2.3 antrifft.

Der Größte Unterschied zwischen 2.3 und 2.4 ist die Möglichkeit Tags nun auch als UFT-8 abzuspeichern (vorher nur ISO 8859-1 und UTF-16). Außerdem ist nun die Platzierung der Tags anpassbar. Bisher musste es immer am Anfang der Datei stehen was vor allem bei Streaming Probleme machen kann. Weiterführendes zu den Änderungen: in der offiziellen Doku.

Technische Umsetzung

Die gesamten ID3 Informationen beginnen immer mit einem Header. Dort ist gekennzeichnet, dass es sich um einen ID3 Tag mit der entsprechenden Version handelt außerdem sind dort noch Flags und die Größe angegeben.

Je nach dem wie es in den Flags angegeben wurde folgt danach ein extended Header. Dort lassen sich unter anderem einige Restriktionen machen die auch für das Cover interessant ist. So kann hier das Format (PNG oder JPEG) angegeben werden oder auch die maximale Auflösung wie zum Beispiel (256x256 oder kleiner).

Anschließend folgen die Tags auch Frames genannt. Der Header eines Frames besteht aus einer zum Teil kryptischen, eindeutigen Kennung wie TDEN für "Encoding time", der Länge der Daten und einigen Flags. Flags können zum Beispiel die Kodierung, ein Read-Only-Flag, Compression oder Verschlüsselung sein. Anschließend folgen die Daten selbst. Weiterführendes zu den Frames in der offiziellen Doku.

Zuletzt kann noch ein Buffer oder ein Footer kommen.

Image-Tag

Nun zum eigentlichen Image-Tag: Nicht erst seit ITunes Cover-Flow möchte man gerne die Cover eines Albums mit abspeichern. Ist das Cover einfach in einer Datei enthalten hat man wieder die Probleme wie man die Datei benennt und außerdem muss man aufpassen das sie nicht mal verloren geht. (So macht es glaub ich der Windows Media Player indem er eine Folder.jpg anlegt. (die nebenbei auch von meinem N95 erkannt wird (Siehe unten (fast wie LISP :D)))) Deshalb geht man dazu über die Cover-Informationen im Track selber zu speichern. Dazu gibt es ein extra Frame mit der Kennung APIC. Hier kann man allerdings nicht nur das Cover abspeichern sondern eine Vielzahl weiterer Bilder die den Track betreffen. Hier die Komplette Auflistung aus Version 2.4:

  • Other
  • 32x32 pixels 'file icon' (PNG only)
  • Other file icon
  • Cover (front)
  • Cover (back)
  • Leaflet page
  • Media (e.g. label side of CD)
  • Lead artist/lead performer/soloist
  • Artist/performer
  • Conductor
  • Band/Orchestra
  • Composer
  • Lyricist/text writer
  • Recording Location
  • During recording
  • During performance
  • Movie/video screen capture
  • A bright coloured fish
  • Illustration
  • Band/artist logotype
  • Publisher/Studio logotype

Es können auch mehrere Bilder pro Datei mit unterschiedlichen Typen angegeben werden. Zu Jedem Eintrag kann dann noch eine Beschreibung eingetragen werden (Kodierung hier nicht vergessen einzutragen). Das Bild selbst sollte entweder ein PNG oder ein JPEG-Format haben kann aber auch alles andere sein da man den MIME-Type sowieso angeben muss.

Außerdem besteht noch die Möglichkeit als MIME-Type "-->" anzugeben und dann als Bild nur den Verweis auf eine Bilddatei zu speichern. Beispiel wäre: "../cover.png" oder "http://example.com/cover.jpg". Aber ob das ein Player unterstützt??

Test-Script

Die Kompatibilität ist sowieso der Grund warum ich mich mit der Thematik beschäftigt habe. Mein neues Handy (Nokia N95) wollte nur ein Teil meiner Covers erkennen. Um zu Testen was es kann habe ich mir folgendes Skript gebastelt was MP3-Dateien in allen möglichen Kombinationen erstellt.

Also zum Beispiel das Bild als "Cover (front)" im PNG-Format und ID3v2.4 wäre eine denkbare Kombination.

Das Script benötigt Python und die eyeD3 Library. Zudem wird ein Soundfile benötigt (ich hatte complete.mp3 mit 4 Sekunden Länge) und ein Bild in den entsprechenden Formaten (ich hatte ok.{png,bmp,jpg,gif}). In dem Download-Package ist beides vorhanden.

import eyeD3
from shutil import copy

filename = "complete.mp3"
imagefile = "ok."
versions = [eyeD3.ID3_V2_3, eyeD3.ID3_V2_4]
formats = ["bmp", "gif", "jpg", "png"] 
id = 0 

for type in range(eyeD3.frames.ImageFrame.MIN_TYPE, eyeD3.frames.ImageFrame.MAX_TYPE + 1): 
  for version in versions:
    for format in formats:
      str = { 
            "id"      : id
          , "type"    : eyeD3.frames.ImageFrame.picTypeToString(type)
          , "version" : eyeD3.utils.versionToString(version)
          , "format"  : format
      }   
      newFilename  = "test-%(id)03d-%(type)s-%(version)s-%(format)s.mp3" % str 
      copy(filename, newFilename)
      tag = eyeD3.Tag(newFilename)
      tag.remove(eyeD3.ID3_ANY_VERSION)
      tag.header.setVersion(version)
      tag.addImage(type, imagefile+format, u"")
      tag.update()
      id+=1

Es werden so 167 Dateien erstellt die entsprechend benamt sind. Nun kann man damit sein Player füllen und sehen was er alles unterstützt. In meinem Fall konnte das Nokia N95 nur JPEG im korrekten "Cover (Front)"-Feld wobei ihm die Version (ID3v2.{3,4}) egal war.

Testen, Testen, Testen

Ich musste das ganze natürlich gleich mit ein paar Programmen ausprobieren. Amarok konnte natürlich alles darstellen ebenso ITunes. Der Windows-Explorer hingegen schafft unter Vista leider nur ID3v2 dafür aber auch alle Formate. Winamp schafft mit Plugin grade einmal JPEG-Formate.

Wenn ihr noch etwas testet dann lasst mir doch die Ergebnisse zukommen. Ich werde sie hier auch noch rein stellen. Dazu habe ich kein Archiv mit den benötigten Dateien gepackt welches hier runtergeladen werden kann: download

Der Fisch

Aufmerksamen Lesern wir das Feld "A bright coloured fish" aufgefallen sein. Ich habe echt kein Plan für was das gut sein soll. Ich finds ein sehr lustiges Easteregg :D. Wenn jemand den Fisch in freier Wildbahn findet muss er mir unbedingt Bescheid sagen!

eye3D kommentiert es nur folgendermaßen: BRIGHT_COLORED_FISH = 0x11; # There's always room for porno.

Montag, 4. August 2008

Backups

Für eine anständige Backup-Strategie bin ich schon fast so lange am überlegen wie für meine Groupware-Verwaltung. Nachdem ich mir extra dafür eine externe 500 GB Festplatte gekauft hatte, fehlte nur noch die passende Softwarelösung. Neidisch schaut man im ersten Moment auf Apple's TimeMachine. Rein Objektiv ist dies aber auch nichts anderes als ein Inkrementelles Backup mit kurzen Iterationszeiten und einer netten GUI. Alternativen für Linux wie Flyback sind vorhanden. Allerdings ist dies nicht die einzige Möglichkeit eines sinnvollen Backups.

Fakt ist wohl, ein Backup sollte möglichst nicht jedes mal eine eins-zu-eins Kopie anlegen, da so viel zu viel Speicher verbraucht wird. Lösung sind Inkrementelle oder Differenzielle Backups. So werden nur die Änderungen gespeichert die sich verändert haben. Fast jede Lösung bietet dieses Konzept mittlerweile an. Außerdem wollte ich ein Backup auf Datei-Ebene und nicht auf Partitionsebenen wie es zum Beispiel das Tool dd anbietet. Da ich denke so Flexibler bin und außerdem glaube ich nicht das Inkrementelle Backups auf Partitionsebene möglich ist.

Zuerst plante ich ein Backup mit einem Selbstgeschriebenden Skriptes. Über die Linux-Boardmittel lassen sich eine Vielzahl der der Anforderungen wie Verschlüsselung und Komprimierung recht einfach implementieren. Allerdings wenn man alle Möglichkeiten mit allen kombinieren möchte so wird es irgendwann richtig komplex. So habe ich meine ersten Versuche verworfen und plante mit einem umfangreichen Backup-Programm wie BoxBackup oder Bacula. Hier habe ich aber auch recht schnell erkannt das diese für große Netzwerke ausgelegt sind und für meinen kleinen Laptop etwas überdimensioniert sind. Etwas einfaches musste her!

Über Chaosradio bin ich auf ZFS gestoßen. Ein Filesystem mit einer unglaublichen Feature-Liste. Angefangen von automatischer Größen-Anpassung von Partitionen über automatische Komprimierung bis hin zu gesicherter Konsistenz des Dateisystems bietet es alles was man sich wünschen kann. ZFS bietet auch die Möglichkeit von Snapshots auf Block-Ebene an. Man kann die Daten, die sich geändert haben, einfach über die alten drüber kopieren und anschließend ein Snapshot machen. So hat man im Grunde jedes mal ein Vollbackup obwohl man nur die geänderten Blöcke speichern muss. Leider kommt ZFS aus der Solaris-Welt und kann in den Linux-Kernel im Moment wegen Lizenzproblemen nicht integriert werden. Es existiert zwar eine FUSE-Erweiterung, aber alles noch recht Beta. Das Risiko wollte ich leider nicht beim Backup eingehen und musste mich so nach Alternativen umschauen.

Das System mit den Snapshots hat mir aber gefallen und so bin ich auf das recht populäre Tool rsnapshot gestoßen. Das Programm setzt auf Hardlinks auf. Bei normalen (Soft-)Links hat man eine Datei und erstellt dann Referenzen auf diese Datei. Löscht man eine Referenz interessiert das niemanden. Löscht man die ursprüngliche Datei werden alle Referenzen ungültig. Bei Hardlinks referenziert man nicht auf eine Datei sondern auf ein INode-Eintrag. Also sozusagen eine Ebene Tiefer. Der Vorteil ist, alle Hardlinks sind gleichberechtigt. Die eigentlichen Daten werden erst gelöscht, wenn kein Hardlink mehr darauf verweist. Das Prinzip von rsnapshot ist dadurch recht einfach: Man kopiert das letzte Backup mittels Hardlinks in ein neues Verzeichnis und ändert dann über rsync die veränderten Dateien. So erhält man jeden Tag ein Vollbackup welches nur den Speicherplatz der Änderungen verbraucht.

Ein weiters sehr nützliches Feature ist die Möglichkeit eigene Scripte (z.B. um ein Datenbankdump zu erstellen) in das Backup einzubinden. Und wenn man zum Beispiel einen zweiten Computer mit sichern will, so ist es möglich Daten von diesem über ssh+rsync zu hohlen. Somit sichere ich mein Laptop mein Server und die Datenbank auf meinem Server recht einfach mit nur einem Programm

Leider kann rsnapshot, anders wie ZFS nur auf Datei-Ebene arbeiten. So wird eine Datei in der sich nur ein Buchstabe ändert komplett neu übertragen. Auch wird es nicht erkannt wenn man ein Verzeichnis oder eine Datei umbenennt. Auch in diesem Fall wird die Datei neu abgespeichert. Aber wenn man sich der Problematik bewusst ist, stört sie kaum.

Programme wie Storebackup umgehen das Problem indem sie zu jeder Datei Prüfsummen anlegen und diese vergleichen. Allerdings ergibt sich so ein worst-case-Aufwand von O(n^2) da ja jede Checksumme erst einmal erstellt, und dann mit jeder Datei verglichen werden muss. Man sieht schon, diese Lösung braucht um einiges länger als mein rsnapshot. (180 GB in ca 10 Minuten täglich bei einem diff von gerade mal einigen hundert MB). Außerdem wollte ich auch ein gut getestetes Konzept und habe mich so für das weit verbreitete rsnapshot entschieden satt das (evtl gar nicht mehr weiter entwickelte) Storebackup.

Und nun die Zuschauerfrage: Wie macht ihr eure Backups? Ich denke jeder der am Computer arbeitet braucht ein Backup, da Datenverlust nur eine Frage des Wann ist. Und wenn die Dateien nur einmal pro Woche auf DVD gebrannt werden. Auf jeden Fall würde mich euer Setup interessieren. Gerne auch in einem eigenen Blog-Post bei euch. Verlinkt euch einfach in den Kommentaren!

Freitag, 1. August 2008

Groupware Protokolle

Wer träumt nicht von einer zentralen Verwaltung seiner PIM-Informationen? Groupware-Systeme unterstützten diesen Prozess indem sie die Daten zentral verwaltet und verschiedene Schnittstellen anbietet. In vielen Fällen wird eine Groupware nach ihrem Web-Frontend bewertet. Leider spielt diese eigentlich nur eine sehr untergeordnete Rolle. Das Hauptproblem konzentriert sich darauf, möglichst viele Clients mit dem System verbinden zu können. Deshalb möchte ich kurz einige interessante Techniken auflisten um den Austausch der Daten zu Realisieren.

Formate

Zumindest hier zeichnet sich langsam ein Standard ab. Für Termine hat iCalendar (oder kurz ical) langsam den älteren Konkurrenten vCalendar abgelöst. Mit iCalendar lassen sich allerdings nicht nur Termine sondern auch todo's oder Journaleinträge damit verwalten. Leider ist das Format nicht ganz so schön (man ist ja langsam überall XML gewohnt) aber zumindest die meisten Datenfelder werden überall verstanden. Da man aber auch selbst Erweiterungen definieren kann, ist es doch möglich das Details in verschiedenen Anwendungen anders verstanden werden. Bei Kontakten hat sich vCard durchgesetzt, wofür weitgehend das selbe wie bei iCalendar gilt.

Protokolle

Leider sind dies ja nur Dateiformate. Meistens möchte man ja aber diese Daten zentral hinterlegen und mit verschiedenen Clients darauf zugreifen. Dazu sind einige Protokolle nötig, die diesen Transport realisieren. Hier möchte ich auch mein eigentliches Hauptaugenmerk legen.

Email

Hier ist es noch am einfachsten. POP ist Tot. IMAP ist Standard. Viel mehr muss man dazu nicht sagen. Interessant sind allerdings einige Erweiterungen für IMAP. Einmal wäre da IMAP-IDLE. Dabei meldet sich der Client am Server an und senden anschließend nur ab und zu keep-alive-Pakete. Der Server hingegen antwortet sobald eine neue Mail eintrifft. So hat man ein wunderbaren Mail-PUSH ohne jeden Aufwand. Erwähnenswert ist noch Sieve. Sieve. Stieve ist eine Programmiersprache in der sich Regeln wie zum Beispiel Abwesenheitsnachrichten, oder Spamregeln definieren lassen. Außerdem ist meistens nicht bekannt das man mit IMAP auch komplexe ACL's definieren kann. So ist es möglich ein Postfach auch mehreren Personen zugänglich zu machen.

Kalender und Kontakte

XML-RPC

Einige Projekte wie eGroupware oder PHProject setzten auf XML-RPC zur Synchronisation. Zwar lässt sich so sehr einfach dagegen programmieren aber leider ist dies immer sehr Spezifisch auf die einzelne Anwendung. Deshalb finde ich diese Idee nicht sonderlich toll. Lieber ein standardisiertes Protokoll für alle!

WebDav

Eine sehr einfache Möglichkeit ist der Einsatz von WebDav wie er auch von subversion benutzt wird. WebDav ist eine Erweiterung zu HTTP, die es ermöglicht Dateien auch hochzuladen. So kann man einfach die jeweilige Datei (ical oder vcard) auf dem Server plazieren und diese herunter laden oder eben wieder schreiben. Das Problem ist nur: Jedes mal muss die gesamte Datei mit allen Einträgen heruntergeladen werden und bei Änderungen auf dem Server übertragen. Das kostet Zeit und macht verteiltes Arbeiten recht schwierig.

GroupDAV

GroupDav ist eine kleine Erweiterung zu WebDav die einfach nur festlegt jeder Event oder Kontakt liegt in einer einzelnen Datei in einem jeweiligen Unterordner. So muss immer nur eine Datei übertragen werden. Diese Idee finde ich noch von allen die beste Möglichkeit da man so auch einfach den Ordner lokal für offline Arbeit zwischenspeichern kann.

IMAP

Kolab definiert versteckte IMAP Ordner. Der jeweilige Client speichert Kontakte oder Termine als Email in den jeweiligen versteckten Ordner mit entsprechendem XML-Anhang. Die gesamte Kommunikation läuft so über IMAP Ordner. Ist eine nette Idee, allerdings finde ich den Gedanken sehr unschön meine Kontakte und Termine als XML-Anhang an eine versteckte Email ranzukleben. Ist irgendwie sehr umständlich und sicher nicht Sinn der Sache.

SyncML

SyncML hat sich ja längst auf allen Handys festgesetzt und auch erste Plugins für Desktop-Anwendungen sind verfügbar. Dazu beigetragen hat sicherlich funambol (früher Sync4J). Dies ist ein freier SyncML-Server der von Google-Anwendungen über Groupdav bis hin zum IPhone alles miteinander Syncen kann.

Kalender only

CalDav ist spätestens seit es Google in seinem Kalender unterstützt etwas populärer als GroupDAV. Es basiert ebenfalls auf WebDav allerdings kann man auch komplexere Abfrage-Queries an den Server stellen. Das macht es einerseits natürlich etwas effektiver als GroupDav allerdings auch komplexer zu Implementieren. Für Apache gibt es übrigens ein CalDav-Modul. Leider muss man Apache dafür neue übersetzten (was ich auf einem Server sehr ungern tue).

Kontakte only

Hier ist sicherlich eine der wichtigsten Lösungen LDAP. Fast jedes Programm kann auf LDAP zugreifen. Es bietet sehr gute Such Möglichkeiten und ist einfach zu erweitern. Leider hat man hier immer das Problem das man auf ein LDAP nur lesend zugreifen kann. Will man Einträge hinzufügen oder bearbeiten muss dies manuell auf dem Server geschehen. Deshalb wird von vielen Groupware-Systemen LDAP nur als Read-Only-Verzeichnis genutzt. Die eigentlichen Änderungen laufen über andere Protokolle. Serverseitig werden diese dann ins LDAP überführt.

Sonstiges

Eigentlich erwarte ich von einer Groupware, dass sie mehr als nur Emails, Kontakte, Termine und Todos unterstützt. Allerdings sieht es hier noch schlechter aus, als in den anderen Bereichen. Wünschenswerte Features wären zum Beispiel RSS (was leider meistens nur read-only für den Client ist. Also sprich der Client kann dem Server nicht mitteilen welche Items ich gelesen habe. Kennt hier jemand eine Lösung??), XMPP, IRC (Wäre doch Klasse wenn der komplette Verlauf, zum jeweiligen Kontakt, zentral abgespeichert wird) oder auch Bookmarks (ganz im grandiosen (neuen) delicious.com-Style). Aber von solchen Ideen sind wir wohl noch ähnlich weit entfernt wie zu dieser Vision: Assoziative Gedächtnishilfe für mobile Datensammler

Ich hoffe ich konnte kurz einen Überblick über mögliche Techniken geben. Vielleicht kanntet ihr ja das ein oder Andere noch nicht. Sollte ich was vergessen haben, einfach in den Kommentaren melden! Zum Schluss mein Wunsch-Setup: IMAP (mit IDLE und Sieve), GroupDav, LDAP (read-only) und Funambol-Connector. SOGo (ein Fork von OpenGroupware.org) bietet mir zwar genau das, allerdings habe ich mit dem Kompilieren des Objective-C Quellcodes einige Probleme ;-).

Anmerkung 1: Ich konnte (noch) nicht alle Produkte und Protokolle ausprobieren, deshalb sind die Kommentare alle nur persönliche Empfindungen

Anmerkung 2: Mir ist aufgefallen ich verlinke sehr wenig auf andere Seiten. Ich hab diesmal sehr viel (vor allen) auf Wikipedia verlinkt. Findet ihr das besser?

Freitag, 25. Juli 2008

Wissen ist nutzlos - Weisheit ist Macht!

Man wird die gesamte Schulzeit, und leider nun im Studium auch noch weitgehend, darauf getrimmt Dinge einfach zu Wissen. Großteils geschieht dieser Vorgang durch stupides Auswendiglernen relevanter Teilbereiche. Selbst bei Mathematik oder Physik, die beide sehr viel mit Verstehen zu tun haben, muss man manchmal einfach Definitionen oder Rechenvorschriften auswendig lernen. Und sogar Deutsch bleibt nicht verschont. (Ich erinnere mich noch mit Grauen daran, als ich die Gliederungssymbolreihenfolge im Inhaltsverzeichnis von Textanalysen auswendig lernen musste). Und am Ende hat kann man zwar Teile auswendig, aber wirklich viel mehr weiß man dadurch nicht. Das Beigebrachte beschränkt sich meist nur auf einige kleine Teilaspekte, die bis ins letzte Eck beleuchtet werden, und doch werden andere zum Teil grundlegende Themengebiete weg gelassen. Und spätestens nach der Prüfung ist sowieso alles vergessen.

Man sieht oft nicht den Sinn hinter dem Ganzen. Das gesamte Lernen erscheint einem als unnötige Zeitverschwendung. Der beste Weg ist diese Methodik sicher nicht, allerdings darf man nicht in die Einstellung verfallen, man müsste nur lernen was man später auch einmal braucht. Vieles von dem was man lernt sollte als Allgemeinbildung angesehen werden. Außerdem denke ich, eine Schulnote im Zeugnis repräsentiert nicht zwingend den Wissenstand sondern viel mehr die Motivation etwas zu lernen (auch wenn es einem zeitweise als unwichtig erscheint).

Nun ist es aber so dass sich das gesamte Wissen unserer Gesellschaft ca. alle 5 Jahre verdoppelt!! (Leider habe ich für die Behauptung keine gute Quelle. Allerdings habe ich mehrere Angaben zwischen 2 und 7 Jahre gefunden). Dieser unglaubliche Wissenswachstum lässt jegliches Auswendiglernen gradezu lächerlich erscheinen. Früher gab es immer das Zitat "Wissen ist Macht" ich denke aber, im Kontrast zu der momentanen, rasanten Forschung sollte man dieses Zitat, nach fast 400 Jahren, doch noch einmal überdenken. Es ist heute schon unmöglich auch nur in einem Teilbereich alles zu wissen. Und so gewinnt die oben genannte Schul- oder vielmehr Lehrkritik wieder an Bedeutung.

Ich denke eine gewisse Allgemeinbildung muss vorhanden sein, allerdings sollte im allgemeinen (und nicht nur auf die Schulen bezogen) Detailwissen viel weniger von Bedeutung sein. Es sollte mehr auf Strukturierte Informationsaufbereitung und -verarbeitung Wert gelegt werden, als auf die Informationen selbst. Wie man so schön sagt: "... man muss nur wissen wo es steht". Zudem gewinnt Erfahrung und breitgefächertes Kenntnis immer mehr an Bedeutung.

Gerade für uns Informatiker stellt sich immer wieder das Problem der richtigen Informationsverwaltung. Ich habe zum Beispiel im Moment 174 Rss-Feeds abonniert, von denen ich pro Tag mehrere Hundert neue Beiträge bekomme. Davon schau ich mir ca. 60 an und lese vielleicht gerade einmal 10. Hinzu kommt noch IM und EMail. Um keine Informationen zu vergessen sammle ich seit langem Links bei Del.icio.us und habe mir ein privates Wiki aufgesetzt um Wichtiges länger zu speichern. Doch das wichtigste Mittel um den Informationen Herr zu werden ist und bleibt die Volltextsuche. Semantische Auszeichnung und automatisierte Verarbeitung durch KI ist noch ein ferner Traum obwohl die Grundsteine gelegt sind. Bleibt abzuwarten was sich auf diesem Feld tut. Ich persönlich denke diese maschinelle Verarbeitung wird über kurz oder lange ein wichtiger Hauptbestandteil unserer Informatik.

Wahrscheinlich lernt man irgendwann in der Schule keine Jahreszahlen mehr sondern nur noch Suchbegriffsyntax, reguläre Ausdrücke und ganz wichtig die Bewertung von gefundenen Informationen... Ist dann Wissen überflüssig? Ob diese Vorstellung so viel besser ist?

Sonntag, 13. Juli 2008

GEZ ein unabdingbares Übel - Teil 2

Heute wie versprochen den zweiten und letzten Teil meiner Pro-Contra-Argumentierung zur GEZ. Nachdem ich im ersten Teil geschrieben habe warum ich die Rundfunkgebühren gut finde gibts heut meine Meinung warum ich die GEZ schlecht finde.

Mhmm, interessting ... but!

Wie vorher schon angekündigt, stehe ich nicht dem Abrechnungssystem als ganzes Kritisch gegenüber, sondern viel mehr der GEZ an sich. Leider wird Kritik an den Methoden der GEZ und dem der gesamten Gebührenverwaltung oft vermischt obwohl sie eigentlich nicht viel miteinander zu tun haben.

Vor allem seit Anfang 2008 die sogenannte Abgabe auf neuartige Rundfunkempfangsgeräte in Kraft getreten ist, werden immer wieder Beispiele herangezogen um die Abbrechungen zu kritisieren. Sicherlich sind Fälle wie "Wenn der Sohn ein Einkommen hat, bei den Eltern wohn und einen eigenen Fernseher nutzt muss dieser auch angemeldet werden" oder "Wenn ein Computer bei einem Selbstständigen in einem abgetrennten Arbeitszimmer steht so ist zusätzlich ein gewerblicher Gebrauch anzumelden" nicht gerade schön zu lesen, allerdings halte ich nichts davon, ein System aufgrund von Einzelfällen zu bewerten. Ich denke die Berechnung hat einige gravierende Lücken und ist sicher nicht mehr auf dem aktuellen Stand, allerdings ist eine hundertprozentige Zufriedenheit aller Beteiligten bei solch komplexen Angelegenheiten unmöglich.

Ob nun eine Abgabe auf Computer und Handys zulässig sind oder nicht lässt sich lange diskutieren. Ich möchte in diesen Bereich auch gar nicht zu tief wühlen da ich mir selber keiner Meinung sicher bin. Einerseits ist es fraglich in wie weit, mit zum Beispiel dem Handy, Dienste der ÖR genutzt werden und ob eine Video-on-Demand Lösung, wie sie aktuell üblich ist, mit dem ursprünglichen Streaming-Gedanken von Radio oder Fernsehen vereinbar ist. Auf der anderen Seite bieten die ÖR ein sehr umfassendes und vor allem qualitativ hochwertiges Angebot im Internet, so dass eine Zahlung eigentlich schon gerechtfertigt ist. (Notiz am Rande: Selbst Chaosradio ist durch Rundfunkgebühren finanziert).

Sicherlich ein sehr größer Kritikpunkt ist die Datenspeicherung der GEZ. Die GEZ hat zentral mehr Daten über die Bundesbürger gespeichert, als alle Einwohnermeldeämter zusammen. Die GEZ bekommt nicht nur Adressdaten von Einwohnerämtern sondern kauft diese auch extern bei kommerziellen Adresshändlern ein. Zudem kommen noch einige freiberufliche Gebührenfahnder die provisionsbasierend Arbeiten. Sollte man einmal bei der GEZ gemeldet sein so bleiben die Daten auch vorhanden selbst wenn man sich wieder abmeldet. Somit verfügt die GEZ bundesweit über den umfassendsten Datenbestand zu Privatpersonen. Intern beschäftigt die GEZ zwar Datenschutzbeauftragte allerdings wird sie nicht extern kontrolliert so dass immer wieder Datenschutzvergehen auffliegen.

Die GEZ hat (zurecht) mit einem sehr negativen Bild zu kämpfen. Schaut man sich die Briefe, die Werbung oder auch das Vorgehen der Außendienstmitarbeiter an, so erkennt man ein sehr restriktives Vorgehen, bei dem der Anschein erweckt wird man muss augenblicklich mit drakonischen Strafen rechnen, da man ein zu einem Verdächtigen in einem Kapitalverbrechen degradiert wurde. Auf der anderen Seite versucht die GEZ ihren Ruf zu verbessern indem sie Medien abmahnte, die als Beispiel statt Rundfunkgebühr von einer GEZ-Gebühr sprachen oder das Wort Rundfunkgebührenbeauftragter durch einen GEZ-Fahnder vereinfachten. Leider scheinen die Verantwortlichen noch nicht begriffen zu haben dass man sein negatives Bild nicht durch Abmahnungen gegen eben diese negative Einstellung bereinigt.

Alles in allem muss ich sagen ich finde es gut, dass es die Rundfunkgebühren gibt und auch das System mit dem sie eingetrieben werden. Nur kann ich auf der einen Seite die Berechnungskriterien nicht immer nachvollziehen und auf der anderen Seite sind die Verfahren der GEZ in keinster Weise tolerierbar.

Disclaimer

ALLES was in diesem Text geschrieben wurde basiert auf meinen persönlichen Ansichten und Ansichtsweisen. Da ich auf diesem Gebiet selbst nur Laie bin, und mir die Infos nur angelesen habe, schließe ich auch Inhaltliche Fehler und Unvollständigkeiten nicht aus. Berichtigungen und Kritik sind aber auf jeden Fall willkommen.

Samstag, 12. Juli 2008

GEZ ein unabdingbares Übel - Teil 1

Ist es nicht manchmal seltsam? Man findet etwas persönlich schlecht, weiß aber eigentlich, dass der Sachverhalt so korrekt abläuft. Genauso geht es mir mit der GEZ. Ich kann die GEZ, wie so viele andere auch, nicht leiden und doch weiß ich, dass eine Gebührenpflicht für Öffentlich-rechtlicher Rundfunk notwendig und gut ist.

Fangen wir mit den positiven Punkten der Rundfunkgebühr an. Aufgrund von aktuellen Beschwerden werde ich diesen Beitrag in zwei Teile aufsplitten. Heute gibts Pro-GEZ und morgen folgt das große Aber. Zusätzlich zu den normalen Kommentaren bitte ich heute mal auch Kritik zu den Beiträgen in die Kommentare zu schreiben. Findet ihr Splitten gut? Sind Beiträge zu komplex bzw. zu lange?

Gebührenverteilung

Kurz möchte ich meine Sicht der Gebührenverteilung erläutern. Diese Sicht ist zum einen etwas vereinfacht und zum anderen an dieser Stelle ein deutlicher Verweiß auf den Disclaimer am Ende des Beitrags.

Zentral von Bedeutung sind sicher erst einmal die Öffentlich Rechtlichen (ÖR), die dazu verpflichtet sind (siehe Grundgesetz Artikel 5 - Rundfunkfreiheit) ein von staatlichen Einflüssen unabhängiges Programm zu senden. Zusätzlich dazu ist eine Wirtschaftliche Unabhängigkeit aber ebenso von Bedeutung. Ziel dieser Bestimmung ist es eben eine gezielte Beeinflussung der ÖR zu vermeiden. Statt dessen sollen die betroffen Medien frei über staatliche und wirtschaftliche Misstände berichten dürfen, ohne an dieser Stelle von einer höheren Instanz eingeschränkt zu werden. In so weit sollte, denke ich, jeder mit der Notwendigkeit einer solchen Einrichtung übereinstimmen.

Das große Problem an dieser Geschichte ist allerdings die Umsetzung. Fakt ist, dass eine Finanzierung über Steuern unmöglich ist, da Steuern vom Staat erhoben und verteilt werden. Somit wäre eine staatliche Unabhängigkeit nicht mehr gegeben. Der Staat könnte, mit einem steuerfinanzierten System, willkürlich die ÖR durch Geldzahlungen (oder vielmehr durch ausbleiben von Zahlungen) in eine gewollte Richtung lenken.

Auf der Anderen Seite ist eine Finanzierung über zum Beispiel Werbeeinnahmen ebenfalls ausgeschlossen, da man hier die Einflussnahme der Wirtschaft nicht ausschließen kann. In Deutschland ist es durch die Duale Finanzierung allerdings trotzdem möglich auch durch Werbung Geldeinnahmen verbuchen zu können. Wichtig ist allerdings hier die Tatsache, dass ÖR (eigentlich) kein Gewinn erwirtschaften können. Eine Handlung/Haltung ausschließlich zur Gewinnmaximierung fällt an dieser Stelle also schon mal weg.

Eine Lösung die man dafür geschaffen hat ist die Gebühreneinzugszentrale der öffentlich-rechtlichen Rundfunkanstalten in der Bundesrepublik Deutschland (GEZ). Diese Verwaltungsgemeinschaft ist zum einen ebenfalls staatsfern organisiert, aber auch unabhängig von den ÖR. Sie nimmt das Geld der Empfänger, zieht seinen Anteil ab (ca. 2,2%) und verteilt den Rest auf die ÖR. So ist eine gerechte Verteilung an alle beteiligten Programmen gegeben.

Nun kann die GEZ nicht nach belieben Geld eintreiben. Die ÖR vermelden an die jeweiligen Länder (Rundfunkgebühren ist Ländersache) ihren Bedarf, der diese Vorschläge objektiv bewertet (Kommission zur Ermittlung des Finanzbedarfs der Rundfunkanstalten - KEF) und die Höhe der zu zahlenden Rundfunkgebühren festsetzt.

Missverständnisse

Durch dieses gesamte, zugegeben recht komplexe Modell, ist eine Unabhängige Berichterstattung der ÖR weitgehend sichergestellt. Da allerdings der Bürger unzufrieden ist wenn er Geld abdrücken muss, gibt es immer wieder rufe nach einem Abschaffen der Rundfunkgebühren beziehungsweise einem alternativen Abrechnungssystem. Vor allem Sätze wie "Warum soll ich für ÖR zahlen wenn ich doch nur RTL schaue?" hört man immer wieder. Aber auch wenn sich, vor allem bildungsfernere Gesellschaftsschichten, mit dem Angebot der aktuellen Privatsender zufrieden geben so ist eine Abbrechung nach Nutzen sehr fatal (und sogar per Gesetz ausgeschlossen). Die ÖR müsste mit ihrem Programm so versuchen ein möglichst breites Publikum zu erreichen, da sie auf die Zahlungen angewiesen sind. Resultat wäre kaum mehr ein wirtschaftlich und staatlich unabhängiges Medium sondern viel mehr eine sensationslüstere und unseriöse Berichterstattung wie sie bei den Privatsendern schon zum Standard geworden ist. Außerdem leben die ÖR davon dass Alle einzahlen und vielleicht kann man doch noch hoffen dass ich der ein oder andere Privatsendergeschädigte auf einen Öffentlich-rechtlichen Kanal verirrt.

Soweit zum Positiven Gedanken der GEZ. Morgen gibts den zweiten Teil mit meinen Negativen Erfahrungen.

Disclaimer

ALLES was in diesem Text geschrieben wurde basiert auf meinen persönlichen Ansichten und Ansichtsweisen. Da ich auf diesem Gebiet selbst nur Laie bin, und mir die Infos nur angelesen habe, schließe ich auch Inhaltliche Fehler und Unvollständigkeiten nicht aus. Berichtigungen und Kritik sind aber auf jeden Fall willkommen.

Mittwoch, 18. Juni 2008

Peinlich, Mozilla, Peinlich!

Mozilla wirbt seit Tagen für seinen Rekordversuch bei dem sie mit Firefox 3.0 die meisten Downloads in 24 Stunden erreichen wollen. Seit dies bekannt gegeben worden ist, steht die Frage im Raum, wie viele Downloads überhaupt nötig sind. Gerade habe ich die Antwort darauf gelesen:

Das Guiness muss den Rekord allerdings noch anerkennen, denn die Kategorie gab es bisher noch nicht. (via)

Das heißt im Grunde die Frage ist nicht ob man genug Rekordversuche zusammen bekommt sondern legentlich ob der Rekordversuch auch anerkannt wird. Wird er anerkannt hätte wohl auch ein Download gereicht. Wird er nicht anerkannt war sowieso alles umsonst. Und die ganzen 8,2 Millionen Leute hätten ihr Zertifikat wohl ganz umsonst ausgedruckt.

Ich fand die gesamte Aktion nur eine schlechte Marketing-Aktion die mein sowieso schon schlechtes Bild auf Mozilla nur noch mehr beschädigt hat. Allgemein scheint sich die PR-Abteilung, im Moment, komplett im Urlaub zu befinden. Nur so kann ich mir solche Vergleiche erklären. Allgemein versucht man die Masse durch absolut blödsinnige Werbetexte zu begeistern. So scheut man sich auch nicht davor, mit 100% Bio-Software zu werben. Traut man den Firefox Nutzern gar keine Intelligenz zu? Es ist jedenfalls schön zu lesen das ich mein Studium damit zubringe Blaupausen zu malen, die zeigen wie Software im innersten funktioniert. Wie muss man sich Bio-Software vorstellen? Darf ich nun meine Software nicht mehr zur Konservierung radioaktiv bestrahlen? Oder darf ich einfach nur keine synthetischen Schutzmittel mehr verwenden um meine Software frei von Bugs zu halten? Ich finde es gut das eine Firma auf die Idee gekommen ist mit Freier Software zu werben, aber dann soll man dem Kunden doch dies auch zumuten und nicht noch mehr verwirren.

Etwas weiter am Anfang lobt sich Mozilla damit nicht von "Profitmaximierung" getrieben zu werden. Auch diese Erkenntnis war neu für mich. Hat man nicht noch Ende letzten Jahres Thunderbird abgestoßen da dieser zu wenig Geld einspielt? Bei Firefox sieht das schon anders aus. Allein was Google, für die Suchleiste, an Geld rein steckt! Wenn man nun etwas die Gerüchte schüren möchte könnte man glatt behaupten Thunderbird geht zugunsten gmails unter. Wie man kurz darauf gesehen hat wurde es sogar den Core-Entwicklern zu bunt. Auch schön finde ich die Datensammlungspläne von Mozilla um "Einschaltquoten" von Webseiten zu ermitteln. Also so rein, wie sie Mozilla gerne hätte, ist ihre Weste nicht.

Was mich aber nun direkt an Firefox stört? Generell lässt sich das Problem mit dem Satz "Was die Masse gut findet kann nur schlecht sein!" beschreiben. Allerdings will ich mich, zumindest in diesem Post, nur auf das Problem Firefox beziehen. Am meisten stört mich Mozilla! Einmal aus den oben genannten Gründen auf der anderen Seite aber auch ihre Open-Source Politik. Klar Firefox ist (u.a.) unter der GPL veröffentlicht allerdings versucht, meiner Meinung nach Mozilla möglichst alles unter sich zu behalten. Wenn man mal überlegt was alle Open-Source Produkte gemeinsam haben sind dies wohl die Forks. Bei Firefox ist mir nur Flock bekannt. Alle anderen sind gescheitert weil Mozilla keinerlei Hilfe gibt. Ich erinnere mich noch an den Versuch Firefox der auf GTK+ basiert auf QT zu portieren. Leider ist das Projekt unter gegangen da Mozilla hier komplett dicht gemacht hat. Ein anderes Beispiel ist der Namensstreit zwischen Debian und Mozilla bei dem sich Debian vom Namen und Logo gelöst hat. Seit dem bin auch ich bin seit dem demonstrativ auf Iceweasle umgestiegen.

An Firefox merkt man finde ich ganz deutlich: Dieser Browser ist für die Masse gemacht! Es finden sich kaum Einstellungsmöglichkeiten und die Konfiguration erinnert mich an den GAU namens Windows Registry. Schon mal versucht Tastenkombinationen anzupassen? Oder gar einzustellen, welcher Dateityp mit welchem Programm zu öffnen ist? Klar, die Masse an Windowsnutzer braucht so was nicht. Die sind schon froh wenn im Gegensatz zum IE Webseiten korrekt angezeigt werden. Für die Windowsnutzer scheint die Software auch optimiert zu sein. Ich kann mir sonst nicht erklären warum Firefox unter Linux so langsam rendert. Allgemein leidet Firefox an dem Problem der Plattformunabhängigkeit. Dazu kann zwar Firefox selbst nichts, aber ich finde es immer unschön wenn sich ein Programm in keinster Weiße in den Desktop integriert. Bestes Beispiel ist hier wohl der Passwort-Manager. Klar Windowsnutzer kennen so etwas wie Integration nicht, aber gerade Mac OS und auch unter den Linux Desktops werden den Anwendern schöne Systeme geboten um gerade so etwas wichtiges wie Passwörter zentral abzuspeichern. Andere Beispiele finden sich ebenfalls zu Haufen.

Wozu allerdings Firefox etwas kann ist die Integration ins Internet. Klar, Firefox zeigt Webseiten an, aber damit ist es auch schon getan. Zum Beispiel die ursprüngliche Angekündigte Unterstützung von Microformats im Firefox 3 wurde schon nach kurzem in eine API für Erweiterungen herabgestuft. Flock geht, meiner Meinung nach, hier schon eher den richtigen allerdings ist auch dieser Browser weit davon entfernt mir zu gefallen.

Alternativen? Ich nutze auch noch Firefox! ... Leider. Es gibt zwar schon noch einige Browser wie, allerdings sind die alle nicht besser. Konqueror zum Beispiel gefällt mir echt gut, aber leider fehlen mir hier die Plugins. Das ist auch eins der wenigen Dinge die Firefox absolut genial hinbekommen hat! Opera ist leider nicht Frei, weshalb ich ihn auch nie ausprobiert habe. Und sonst? Für den Gnome Desktop gibt es noch einige kleinere Browser wie Epiphany oder Galeon allerdings sind auch diese nicht das Gelbe vom Ei.

Ich warte gespannt auf einen minimalistischen Linux-Fork. Einfach so Dinge wie Bookmarkverwaltung und Passwort-Manager weglassen und statt dessen auf Performance und Konfigurierbarkeit achten. Features sollten dann bei Bedarf einfach über Plugins nachgerüstet werden können. Auf jeden Fall denke ich das Firefox langsam aber sicher seinen Höhepunkt erreicht hat. Zeit für einen neuen Browser!

PS: Dieser Blogbeitrag ist zu 100% Biologisch abbaubar... Wenn er schon nicht ganz Objektiv ist ;-)

Sonntag, 25. Mai 2008

Wissenswertes über Erlang(en)

Viele haben es ja schon mitbekommen, aber nun noch mal für den Rest der Welt: Ich habe ein neues Spielzeug gefunden! Ich bin vor kurzem durch eine Folge im Chaosradio auf die Programmiersprache Erlang gestoßen. Erlang lässt sich mit nur einem Wort beschreiben: anders (alternativ auch genial ;-).

Erlang bezeichnet sich selbst als COPL (Concurrency Oriented Programming Language). Diese Bezeichnung halte ich für sehr treffend. In Objektorientierten Sprachen dreht sich alles um Objekte und in Erlang sind es statt dessen die Prozesse. Ich habe vor kurzem einen Artikel gelesen, in dem es darum ging, dass Prozesse in Erlang doch im Grunde nichts anderes als Objekte in anderen Sprachen sind. Ich halte diesen Vergleich etwas unglücklich, da Erlang eine Funktionale Sprache ist. Am ehesten erinnerte mich Erlang an Prolog, da ich hier auch eine Art Regeln spezifizieren kann und es möglich ist darauf durch Abfragen über Matching zu zugreifen. Allerdings ist Erlang weitaus mächtiger.

Erlang wurde ursprünglich 1987 von Ericsson für Telefonanlagen entwickelt. Und ich muss sagen sie haben sehr gute Arbeit geleistet. Nichts passt besser zu Telefonanlagen als Erlang: In Erlang läuft so gut wie alles parallel. Die Prozesse sind so leichtgewichtig das auch mehrere tausende gleichzeitig von der Performance kaum Auswirkungen haben. Erlang ist hochgradig Fehlertolerant: Sollte ein Prozess abstürzen kann ein anderer diesen einfach neu starten. Und zu guter Letzt: Es ist in Erlang einfach möglich während der Laufzeit Codeteile durch neue zu ersetzen; ohne Unterbrechung der Ausführung.

Durch die Entwicklung in der Praxis ist Erlang keine akademische Sprache sondern (relativ) oft in freier Wildbahn anzutreffen. Spätestens nach der Open Source Variante, die 1998 veröffentlicht wurde, stieg die Beliebtheit rasch an. So gibt es heute eine Vielzahl von Projekten die auf Erlang aufbauen: Das berühmteste Beispiel ist wohl ejabberd ein Jabberserver. Außerdem setzt Amazon mit ihrer SimpleDB ebenso wie Facebook auf Erlang. Es gibt einen hochperformanten Webserver namens yaws und einem gigantischen Benchmark-Tool (Tsung) für z.B. Webserver. Außerdem gibt es eine Datenbank namens Mnesia die sich perfekt in Erlang integriert. Man hat so keine Tabellen mehr wie in Relationale Datenbanken sondern nutzt die Erlang eigenen Datentypen um mit der Datenbank zu kommunizieren. Außerdem kann Mnesia wie eigentlich alles in Erlang verteilt laufen so das es möglich wäre, auf einem Computer die DB im RAM (für Performance) zu halten und auf einem anderen die Datenbank auf Festplatte als Backup. Eine weitere Datenbank die auf Erlang setzt ist couchdb die Dokumenten-orientiert arbeitet.

Doch was macht Erlang so besonders? Programmiert man in einer der üblichen Sprachen macht man immer ein neuen Thread auf wenn man muss. In Erlang macht man immer einen neuen Prozess auf sobald man kann. So ist es theoretisch möglich das ein Erlang Programm auf einer Maschine mit 16 Prozessoren 16 mal schneller als auf einem Prozessor läuft. Die Prozesse in Erlang sind extrem leicht zu erstellen (sowohl von der Syntax als auch von dem Ressourcenverbrauch). Es ist möglich in Millisekunden einfach so mal 30000 Prozesse zu erstellen und wieder zu beenden ohne das die Prozessorauslastung sonderlich steigt.

Threads? Prozesse? Was den nun? So gut wie alle Sprachen bieten Threads für Nebenläufigkeiten an. Erlang hingegen nur Prozesse. Der Hauptunterschied ist: Threads haben gemeinsam genutzten Speicher. Dadurch kommt es immer wieder zu Verklemmungen und Konflikte. Ein Hoher Aufwand muss betrieben werden um dies zu vermeiden. In Erlang geht man einen anderen Weg: Dort hat jeder Prozess exklusiv einen festen Speicher. Kein anderer Prozess kann ihm dazwischen funken. Die Prozesse kommunizieren untereinander durch einfache Nachrichten. Durch dieses Prinzip ist es zum Beispiel möglich ein Programm (fast) ohne umschreiben von einer Einplatzlösung auf mehrere Computer zu verteilen so dass die Programmteile miteinander kommunizieren.

Der andere Vorteil von Erlang ist seine Eigenschaft als funktionale Sprache. So gut wie alle Probleme werden Rekursiv gelöst weshalb es auch keine Schleifen gibt. Außerdem kann man Funktionen einfach in Variablen speichern wodurch man gigantische Möglichkeiten bekommt. Am Anfang muss man sich doch sehr daran gewöhnen das Variablen, die einmal gesetzt wurden nicht wieder überschrieben werden können. Erlang arbeitet nur mit simplen Datentypen wie Tupeln und Listen, allerdings ist die Sprache so gebaut das diese einfachen Konstrukte vollkommen ausreichen. Und das Beste von allem: Der Index dieser Datentypen fängt bei 1 an! (und nicht wie üblich bei 0)

Die Sprache eignet sich perfekt für Serveranwendungen auf die gleichzeitig viele Benutzer zugreifen, allerdings lässt sich auch das tk-GUI Toolkit verwenden wodurch GUI Anwendungen ebenso möglich sind. Sogar ein 3D-Modellierer namens Wings3D ist in Erlang geschrieben.

Wer mehr über Erlang wissen will, dem kann ich nur die oben schon verlinkte Chaosradio-Sendung empfehlen. Die Dokumentation findet Großteils in man-Pages statt, was für Viele etwas ungewohnt ist. Allerdings findet man auch ein sehr gutes Tutorial welches einem die Konzepte näher bringt. Zu der Entstehung der Sprache existiert ein großartiges Video welches ihr unbedingt anschauen müsst! Und zu Letzt muss ich noch unbedingt das Outro von Chaosradio verlinken welches auch ein Grund war die Sprache zu lernen (Foyer des Arts - Wissenswertes über Erlangen).

Ich dachte mir, evtl. besteht ja Interesse an einem kleinen Tutorial hier auf diesem Blog? Wenn ihr sagt euch würde die Sprache interessieren starte ich mal den Versuch ein kleines Tutorial über Erlang zu schreiben.

Donnerstag, 8. Mai 2008

Massendownload

Wie oft steht man vor einem Problem wie es simpler nicht sein könnte? Doch weil man eine besonders elegante Lösung möchte verrenkt man sich dabei beide Arme... So erging es mir gestern wieder. Mein Gedanke war aus einem Directory-Index, wie er von jedem Webserver generiert wird, alle Dateien auszulesen und herunter zu laden. Das Ergebnis sollte allerdings möglichst kurz sein und in nur einem Befehl, ohne irgendwelche Hilfsdateien anlegen zu müssen, abgeschlossen sein.

Nach stundenlangen Versuchen mit sed habe ich nun endlich heute eine Lösung gefunden mit der ich leben kann:

wget -qO- $PARAM | ruby -e "STDIN.each_line{|line| file=line.gsub!(/^<img .*> <a href=\"(.*)\">.*$/, '\1'); puts('wget '+'$PARAM'+file) unless file.nil?}"

Dabei enthält die Variable PARAM meine Webseite und evtl. weitere Parameter. Ein Beispiel wäre eine benötigte Authentifizierung: PARAM="--http-user=XY --http-passwd=XYZ http://example.org/";.

Allerdings ist meine Lösung ist mit ca. 300 Zeichen sicher nicht die kürzeste/eleganteste deshalb hier mein Aufruf: Wer schafft es besser??

Anmerkung: 1.) Überprüft meine Zeile nicht ob es sich wirklich um eine Index Seite handelt und 2.) weiß ich nicht ob es bei allen Index-Seiten funktioniert. Bisher habe ich es glaube ich nur mit Apache-generierten Standard Seiten getestet. Diese kann man allerdings nach belieben anpassen so das es dann evtl. nicht mehr funktioniert. Beim ISS bin ich recht sicher das es nicht geht ... wird der getrost ignoriert. Wenn jemand sonst noch ein Szenario hat, immer her damit!

Montag, 5. Mai 2008

Sinnlose Spielerei ...

... aber trotzdem interessant. Gerade habe ich etwas mit meinen Boot Optionen herum gespielt. Dabei bin ich zufällig auf ein nettes Tool namens Bootchart gestoßen. Dieses Programm analysiert den Boot Prozess und stellt diesen Grafisch da. Ich geb mal eine Kurzeinführung wie man das Programm unter Gentoo zum laufen bringt. Für andere Distributionen sollte die Installation ähnlich verlaufen. Alternativ gibt es in der README noch eine andere Möglichkeit.

Zuerst muss das Paket app-benchmarks/bootchart installiert werden. Da das Programm als masked gekennzeichnet ist muss man die folgende Zeile in die Datei einfügen: echo "~app-benchmarks/bootchart-0.9 ~x86" > /etc/portage/package.keywords. Anschließend das Paket gleich mergen. Dabei unbedingt darauf achten, dass das Java UseFlag aktiviert ist, da sonst später nicht automatisch Bilder erstellt werden.

Nun kommt die Konfiguration dran. In der Datei /etc/conf.d/rc die folgende Option einstellen: RC_BOOTCHART="yes" außerdem in /etc/bootchartd.conf die Option AUTO_RENDER="yes" aktivieren. Wenn man sonst noch etwas wünscht wie zum Beispiel ein anderer Outputpfad oder ein anderes Format kann man dies hier ebenfalls angeben.

Wenn man nun neu startet kann man eine grafische Darstellung des Bootprozesses unter /var/log/bootchart.png (oder so ähnlich, je nach Einstellungen in der Config-Datei) bewundern.

Um ehrlich zu sein ist das ganze (wie Benchmarks allgemein) relativ sinnlos, aber nett anzusehen. Deshalb los, los, ich will euren Bootprozess bewundern ;-). Ich mach schon mal den Anfang:

Donnerstag, 24. April 2008

R.I.P. Lidl

Lidl ist durch ihre Mitarbeiter / Kundenüberwachung in letzter Zeit eigentlich genug in Kritik geraten. Man sollte sich nach diesen Vorwürfen nochmal überlegen ob man dort wirklich einkaufen will. Aber bei diesem Super Angebot heute konnte ich nicht widerstehen:

500 GB externe SATA Festplatte in Aluminiumgehäuse mit Netzwerk-, eSATA- und USB-Anschluss für gerade mal 139 EURO

Und da meine eine externe Festplatte vor kurzem sowieso seinen Geist aufgegeben hat, war dies (trotz Lidl) ein verlockendes Angebot. Soweit zur Theorie... Ich also vor genau drei Wochen um 9:00 Uhr vor dem Lidl gestanden und wollte eben diese Festplatte. Nachdem ich sie nirgends gefunden habe bin ich gleich an die Kasse um dort nachzufragen. Ich dachte ja ich höre nicht recht als man mir sagte, dass die Filiale nur zwei Festplatten geliefert bekommen hat. Ich mich natürlich erstmal total aufgeregt da dies ja nicht das erste Mal ist, dass Lidl vorher groß Werbung macht und dann kaum Exemplare auf Lager hat.

Die Mitarbeiterin, verwies mich allerdings sofort (anscheinend passiert das öfters...) auf die Service-Hotline die groß über dem Ausgang hängt. Ich natürlich gleich mein Handy ausgepackt und versucht dort anzurufen. Aber ich war wohl nicht der Einzige, der mit Lidl seine Probleme hatte. Gegen 11:30 habe ich dann endlich jemanden erreicht, der mir versicherte, dass es eigentlich nicht möglich sei. Er würde versuchen eine andere Festplatte vom Lager zu meiner Filiale zu schicken. Nachdem ich ihm (zugegeben etwas ungern) meine Kontaktdaten gegeben habe versprach er die Festplatte auf meinem Namen zu hinterlegen.

Eine Woche später wurde ich wieder angerufen. Im Lager sind noch Festplatten verfügbar und wenn ich noch Interesse habe, würde man mir eine in meine Filiale schicken. Ich hab mich natürlich erstmal gefreut und gewartet das sich, wie versprochen, meine Filiale meldet sobald die Platte dort eingetroffen ist.

Nachdem ich am Dienstag noch immer nichts von meiner Platte gehört habe, fragte ich halt nochmal nach (Die Nummer hatte ich ja mittlerweile eingespeichert). Wer hätte es gedacht? Mein Platte ist natürlich schon längst in der Filiale, man hatte nur vergessen mich anzurufen. Ich also gleich Abends zum Lidl und Platte abgeholt.

Ab hier wird es Technisch: Nachdem das Teil ja ein Netzwerkanschluss mitbringt bin ich davon ausgegangen das dort ein UNIX sein Dienst verrichtet und mir die Daten per SMB, FTP, NFS etc. zur Verfügung stellt. Das ganze kann man dann über ein Webinterface Verwalten (IP/DHCP etc.). Die Realität sah leider etwas anders aus: Das Laufwerk war von Targa und arbeitete mit ndas dazu in Wikipedia:

Network Direct Attached Storage (NDAS) ist ein proprietäres System für Speichermedien (meist Festplatten), die ohne einen PC oder Server direkt an ein Netzwerk angeschlossen werden können und auf dem Zielsystem wie ein lokaler Datenträger erscheinen.

Software war natürlich dafür nur Windows dabei allerdings habe ich auf der Herstellerseite auch ein "Source"-Paket gefunden. Bis auf ein paar Libs, die nur binär vorliegen, kann man es sich also kompilieren. Das Gentoo-Paket hat etwas ärger gemacht, deswegen habe ich es selbst kompiliert.

Das ganze läuft nun so ab: Die Platte hat eine eindeutige ID. Über die muss man die Platte auf jedem PC, auf dem man sie nutzen möchte, registrieren. Anschließend muss man einen ndas Dienst starten der schaut ob die Platte im Netzwerk ist. Wenn ja erscheint sie dann als Blockdevice und man kann sie wie gewohnt mounten. Blöder weiße kann immer nur ein Computer die Festplatte mounten und zwei mal ist mir beim unmount mein Laptop eingefroren (was mir unter Linux zuvor noch nie passiert ist). Und was das Fass zum überlaufen brachte: Die Funktion mit der ich ein erneutes Suchen nach der Platte anstoßen kann ist nicht eingebaut. So muss man immer den Dienst neu starten um zu suchen. Alles in allem muss ich sagen die Technik ist absoluter Bullshit!

Fazit: Ich habe die Platte gestern zurück getragen und hab mein Geld wieder abgeholt. Auch wenn das Angebot wirklich gut war, ist die Technik dahinter einfach nicht zu gebrauchen. Dann leg ich lieber noch 20€ drauf und hab eine funktionierende Festplatte. Ich muss sagen ich bin einerseits davon enttäuscht wie Lidl verkauft, da sie einfach absichtlich möglichst wenig Festplatten ausliefern. Andererseits auch was Lidl verkauft. Würde nicht mein Miteinkäufer unbedingt immer bei Lidl einkaufen wollen, würde ich wohl in nächster Zeit einen großen Bogen um Lidl machen. (Außer evtl. zum Spaß)