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.

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ß)

Montag, 7. April 2008

Ich kann nicht Programmieren...

... zumindest kam es mir letzte Woche so vor. Für eine Vorlesung musste ich einen (bis jetzt) vereinfachten Single Sign On - Server schreiben. Da wie gesagt dies bisher nur ein Prototyp ist, war die Implementierung relativ simpel und die Anwendung lief recht schnell. Die nächste Aufgabe bestand daraus den Prototyp mit vorgegebenen Unittests zu testen.

GRAUSAM! Ich dachte naja, zwei drei Tests werden wohl rot sein, aber das gut 60% fehlschlägt hat mich dann doch sehr betroffen gemacht. Die meisten Fehler waren einfach eine fehlende Überprüfung auf Null oder eine vergessene Negation in einer If Abfrage. Ich habe mich darauf hin gleich gefragt warum die Tests so schlecht ausgefallen sind bzw. was man besser machen könnte um solche Fehler zu vermeiden.

Natürlich Methoden wie Unittests, Design by Contract, TDD, etc. sind in aller Munde aber mal ehrlich, nutzt ihr die bei jedem Projekt so ausführlich wie man sollte? Ich bestreite nicht den Nutzen dieser Techniken, auch bin ich mir durchaus benutzt das diese bzw. vergleichbare Techniken in ernsthaften Projekten unabdingbar sind aber ich finde es sind immer noch zu viele Barrieren vorhanden so das die Techniken wirklich Sinn geben. Ich weiß nicht genau wie ich sagen soll, deshalb gibt es mal paar Beispiele:

Ein Unittest ist schnell geschrieben, aber man muss ja prinzipiell jede Mögliche Kombination von Input und Output Werten bzw. auch an Zuständen im System Abdecken. Ein enges System aus Unittests halte ich für sehr sinnvoll, aber wenn sich beispielsweise ein Nutzer mit Name und Passwort an einem Server anmelden will. Was muss ich alles Testen? Was ist wenn Nutzername und/oder Passwort Null sind? Was ist wenn Nutzer und/oder Passwort falsch sind? Was ist wenn der Server nicht erreichbar ist? Was ist wenn der Nutzer bereits angemeldet ist? Was ist wenn der Nutzer überhaupt nicht im System vorhanden ist? Was ist wenn Nutzername und/oder Passwort ein Leerer String sind? Und so weiter. Mir fällt bestimmt noch mehr ein. Und das nur für einen Vorgang! Man stelle sich das mal in einem Komplexen System vor! Außerdem ergibt sich früher oder später die otwendigkeit von Mock Objekten und GUI Tests. Diese Spirale dreht sich so lange hoch bis ich irgendwann mehr Testcode als produktiven Code habe. Und genau hier tritt für mich ein Widerspruch zwischen Theorie und Praxis auf. Ich weiß das es gut ist, ich weiß das man es braucht, aber ich habe keine Ahnung wie man sinnvoll (sowohl logistisch als auch zeitlich) alle Fälle abdecken soll.

Andere Möglichkeit sind Pre- Postconditons. Hier tritt, außer dem Umfangproblem der Unittests, auch noch das Problem der Mangelnden Verbreitung auf. Die Sprachen, die ich mehr oder weniger kenne (Java, Ruby, C(++), Python, Bash, Prolog(:D), ...) bringen Conditions von Haus aus nicht mit. Deshalb bleiben mir zwei Möglichkeiten: Entweder ich lade mir eine zusätzliche Erweiterung der Programmiersprache dazu (was leider wieder andere Probleme wie Kompatibilität und Overhead mit sich bringt) oder ich arbeite mit Asserts. Bringt meine Sprache der Wahl schon Asserts mit habe ich es etwas einfacher. Ansonsten muss man sich erst eine Assert Funktion schreiben (wofür es gerade in Ruby einige sehr schöne Ansätze gibt!). Das Problem was ich hier wieder sehe ist einfach das es keine gezielte Notation der Conditions gibt. Ich habe einfach am Anfang (oder auch am Ende) meiner Funktion 10,20 oder auch mehr Zeilen mit Assert Statements die alle Fälle die mir einfallen abdecken sollten. Blöd nur wenn die Methode selbst nur 5 Zeilen hat. Besser wäre ein Ansatz mit dem man durch die Erweiterung der Sprache eine gesonderte Syntax innerhalb des Methodenkopfes einführt. Und selbst da macht einem die Vielzahl der Möglichen Input- und Output-Werte Kopfzerbrechen.

Ich habe jetzt mal die beiden Methoden herausgegriffen und meine Bedenken dazu geäußert. Ich komme aber irgendwie aus diesem Widerspruch nicht heraus. Um robusten Code zu schreiben muss ich alle Fälle abdecken, wenn ich alle Fälle abdecke, komme ich nicht dazu Code zu schreiben. Klar der Mittelweg ist der beste, aber das dachte ich bei meinem Projekt auch und dann waren doch 60% rot. Es muss doch eine Möglichkeit geben schnell und kurz während ich die Methode schreibe alle Fälle auszuschließen die nicht auftreten dürfen. So eine Technik kann nur funktionieren wenn sei nebenbei, schon fast automatisch, abläuft (sei es nun wirklich automatisiert oder einfach nur durch den Autor). Aber irgendwie kämpfen die Methoden die mir spontan einfallen alle mit massig Overhead.

Wie handhabt ihr das? Schon mal TDD versucht? Geht es euch Ähnlich? Ich bin für Vorschläge dankbar!