Archive for the 'Migraene' Category

#Medien: Get a life!

Ja, es ist traurig. Es ist total schade. Es ist wirklich tragisch: Michael Jackson ist tot. Er war doch erst fünfzig Jahre. Und er war doch der King of Pop. Und überhaupt.

Und irgendwie scheint es heute zu sein, als hätten sämtliche Medien kein anderes Thema mehr, als seinen Tod. Da werden Umfragen gestartet (hier), da werden riesige Klickstrecken zusammengezimmert (hier, hier), da wird seine Diskographie von vorne bis hinten gewälzt (hier).

Habt ihr keine anderen Probleme? Get a life!

POLITIK: Ich bin schuldig!

Oh! Mein! Gott! Zensursula hat mich durchschaut, ich MUSS schuldig sein:

Wir wissen, dass bei den vielen Kunden, die es gibt, rund 80 Prozent die ganz normalen User des Internets sind. Und jeder, der jetzt zuhört, kann eigentlich sich selber fragen, wen kenne ich, der Sperren im Internet aktiv umgehen kann. Die müssen schon deutlich versierter sein. Das sind die 20 Prozent. Die sind zum Teil schwer Pädokriminelle. Die bewegen sich in ganz anderen Foren. Die sind versierte Internetnutzer, natürlich auch geschult im Laufe der Jahre in diesem widerwärtigen Geschäft

Okay. Machen wir aus den anderen 80% auch versierte Internetnutzer. Bitte befolgen Sie folgende Schritte:

Anleitung für gefährliches Wissen

Gehen Sie auf die Webseite www.hotspotshield.com.

Get Behind the Shield! Hotspot Shield by AnchorFree - Opera

Klicken Sie auf den Download-Button und laden Sie die angebotene Datei herunter:

Herunterladen der Datei HSS-1.15-install-anchorfree-76-conduit.zip

Entpacken Sie die Datei durch einen Rechtklick und die anschließende Auswahl von “Entpacken nach hier” aus dem Kontextmenü. Nun befindet sich eine EXE-Datei im Ordner:

InternetProfi

Führen Sie einen Doppelklick auf die EXE-Datei aus und folgen Sie die Anweisungen auf dem Bildschirm. Um Ihre Kenntnis des Internets zu bezeugen, entfernen Sie einfach alle Häkchen auf Ihrem Weg durch den Installer.

Hotspot Shield 1.15 Setup

Hotspot Shield 1.15 Setup (2) Hotspot Shield 1.15 Setup (3) Hotspot Shield 1.15 Setup Hotspot Shield 1.15 Setup  (2)

Achtung: Als versierter Internetbenutzer kann es Ihnen geschehen, dass Sie über rote Warnhinweise stolpern. Das geschieht stets dann, wenn Sie potentiell böse Sachen machen wollen – etwa einen VPN-Treiber für Ihr System installieren möchten. Tun Sie dies, verhindern Sie beispielsweise die Nutzung der Internetfilterliste. Überlegen Sie also gründlich, bevor Sie bei der folgenden Meldung die Option “Diese Treibersoftware trotzdem installieren” auswählen:

Windows-Sicherheit

Nach einer Weile ist die Operation abgeschlossen:

Hotspot Shield 1.15 Setup  (3)

Wenn Sie die Option “Launch Hotspot Shield” aktiviert lassen, wird der VPN-Tunnel sofort aufgebaut. Anderenfalls haben Sie in Ihrem Startmenü unter “Alle Programme” > “Hotspotshield” den Eintrag “Hotspot Shield Launch”, den Sie einfach anklicken können. Ggf. müssen Sie das mit Administratorrechten machen (Rechtsklick > “Als Administrator ausführen”). Aber das wird Sie versierten Internetbenutzer nicht vor unüberwindliche Probleme stellen. :-)

So, fassen wir zusammen: Von der 80%-Masse zu den 20% gefährlichen Internetbenutzern sind es etwa zehn Minuten, ein Download und weniger als zwanzig Klicks.

Zensursula hat Sie sicher bald auf dem Kieker. Und das BKA auch. Und der Gröfaz Grimaz auch – denn der kann nun nicht mehr sehen, wo und was Sie ansurfen.

Sie gefährliches, verkommenes Subjekt, Sie!

Sollten Sie Schwierigkeiten mit Hotspot Shield unter Vista X64 (hier übrigens ein Hinweis, wie Sie das Problem mit dem TAP-Treiber lösen können und hier finden Sie eine Anleitung für eine manuelle Konfiguration) oder anderen Systemen haben, dann können Sie u.a. auch auf die kostenpflichtige (aber dafür ohnehin deutlich schnellere) Alternative PersonalVPN ausweichen.

Beiden Ansätzen gemein ist, dass Sie über einen Tunnel nicht mehr direkt über ihren Provider in Deutschland ins Netz gehen, sondern IP- und DNS-technisch als Amerikaner oder Brite handeln und mit entsprechenden Adressen unterwegs sind. Nebenbei ist die Verbindung verschlüsselt, so dass der Kollege Grimaz und die Freunde von BND und BKA hier nicht mitlauschen können. Strafbares Verhalten bleibt aber strafbares Verhalten, soviel sollte auch klar sein.

Politik: Bananenrepublik

PriceWaterhouseCooper (PWC) hat einen eigenen Mitarbeiter im Wirtschaftsministerium. Der Mitarbeiter ist einerseits als Referent im Ministerium von KTvG, andererseits als Senior Consultant bei der Prüfungsgesellschaft tätig – und kann so Einfluss auf Auftragsvergaben aus dem Ministerium u.a. an seinen Arbeitnehmer nehmen. (via)

Direkt nach Beschluss des Zensurgesetzes Kinderpornographie-Gesetzes geschieht genau das, was jeder Mensch mit gesundem Menschenverstand gewusst hat: Es sollen nunmehr auch Sperren gegen Urheberrechtsverletzungen und gegen ausländische Glücksspielanbieter eingerichtet werden, fordern Vertreter des Buchhandels und der hessischen Landesregierung. (via)

Das mit der Sperre gegen ausländische Glücksspielanbieter wird aber nix werden, das hat Zensursurla bereits im letzten Jahr erfolgreich verhindert. Warum? Ihr Bruder ist Chef eines ausländischen Glücksspielanbieters… (via)

POLITIK: Eine Strafbarkeit…

“…liege schon in dem Moment vor, wenn nicht nachgewiesen werden könne, dass es sich um ein Versehen oder eine automatische Weiterleitung gehandelt habe.” (Brigitte Zypris, Bundesjustizministerin!)

Das ist schlichtweg die Abschaffung der Unschuldsvermutung.

via

POLITIK: Bad Bank – oder wer bezahlt das eigentlich?

Die Kollegen Steinbrück und KTzG haben einen neuen Vorschlag: Banken sollen eine Bad Bank gründen können und dort ihre Papiere einbringen dürfen. Der Staat gibt Bürgschaften und hält sich ansonsten raus.

Ziel dieser Idee: Die Banken werden ihre “giftigen” Papiere los, sie vertrauen einander wieder mehr und das Geld- und Kreditgeschäft kommt wieder in die Gänge.

Ich übersetze diesen Vorschlag mal kurz ins Deutsche: Die Banken gründen jeweils Zweckgesellschaften und übertragen auf diese Zweckgesellschaften die hochspekulativen und riskanten Papiere, die uns alle erst in diese Finanzkrise gebracht haben. Anschließend gibt der Staat Bürgschaften – er steht also dafür ein, dass die Zweckgesellschaften und die Banken nicht pleite gehen. Nach fünfzehn bis zwanzig Jahren werden die Zweckgesellschaften successive liquidiert – es sei denn, die Bank ist dann doch vorher schon pleite gegangen, aber dann greift ja die Bürgschaft und die Gläubiger und Geschäftspartner der Bank bekommen ihr Geld.

Nun könnte man vermuten, dass der Staat Anteile an den Banken als Gegenleistung für seine Sicherheiten erhält. Diese Anteile könnten dann auch Gewinne bringen, wenn die Banken wieder Gewinne machen würden (was sie recht schnell tun dürften, denn die wertlosen Papiere wären ja aus der Bilanz).

Dem ist aber nicht so. Der Staat hält keine Anteile. Der Staat sichert nur ab. Oder, wie ein Politiker (ja, ich weiß, Politikern sollte man nicht trauen) so richtig sagte: Die Gewinne werden privatisiert, die Risiken auf die Gesellschaft abgewälzt. Wieviel uns das kostet, sehen wir dann in zwanzig Jahren.

Mal abgesehen davon, dass man kotzen könnte, stellt sich eine weitere Frage: In wessen Interesse handeln Steinbrück, KTzG und die Bundesregierung eigentlich?

Entscheidung folgt.

AUA: Zensiert!

So, ab heute haben wir den Salat: Deutschland führt die Internetzensur ein. Merkt euch dieses Datum, ihr werdet später euren Kindern noch dafür Rede und Antwort stehen müssen.

Falls es jemand noch nicht mitbekommen hat: Es geht vordergründig um den Schutz vor Kinderpornographie. Ich bin selbst Vater und stehe voll und ganz dahinter, dass man Kinderpornographie, deren Herstellung, Verbreitung und Konsumierung verhindern muss. Die Konsumenten und auch die Anbieter gehören vor ein ordentliches Gericht gestellt und wenn sie schuldig sind, gehören sie verurteilt und weggesperrt.

Das vorweggeschickt, wurde heute vom Kabinett ein Gesetzesentwurf von Ursula von der Leyen verabschiedet, der technische Sperrmaßnahmen gegen den Konsum von Kinderpornographie vorsieht. Vordergründig jedenfalls.

Tatsächlich sieht es inhaltlich und auch technisch wie folgt aus:

Die Sperrliste, die genutzt werden soll, wird vom BKA erstellt. Diese Liste wird dann den Providern zugestellt, die ihrerseits dafür sorgen sollen, dass die entsprechenden Webseiten nicht mehr aufrufbar sind. Leider ist es jedoch so, dass mit Hilfe von Proxy-Servern, freien DNS-Servern oder auch VPN-Verbindungen (etwa HotspotShield, auch kommerzielle Lösungen) die entsprechenden Sperren ohne einen Funken technischer Ahnung umgangen werden können, was auch den Herrschaften in den diversen beteiligten Gremien und Ministerien klar sein muss. Und der Zielgruppe ohnehin.

Zweiter Aspekt: Die allermeisten Server, auf denen sich Kinderpornographie befinden soll, stehen in den westlichen Ländern, in denen Kinderpornographie ohnehin strafbar ist. Man benötigt also keine Filterliste, um diesen Kram aus dem Netz zu bekommen.

Drittens: Es wird unterstellt, dass es eine große und funktionierende Industrie rund um Kinderpornographie gibt, sonst würde ja eine Filterliste keinen Sinn machen. Seit der Operation Mikado vor einigen Jahren jedoch muss jedem Anbieter und Konsumenten klar sein, dass es über das Internet kommerziell nichts mehr zu holen gibt, denn die Möglichkeiten der Abgleichung von Personen- und Kreditkartendaten (oder von PayPal-Zahlungen, oder oder oder) sind schon lange gegeben. Und: Ob es so eine Industrie jemals gab, ist ohnehin fraglich.

Viertens: Im Grunde wird jeder Deutsche unter Generalverdacht gestellt, sonst würde ja eine derartige Liste keinen Sinn mehr machen. Wenn es nur einige tausend Menschen wären (was schlimm genug ist!), die über das Internet Kinderpornos konsumieren würden, dann wäre eine derartige Liste bei Millionen und Abermillionen von Internetnutzern komplett sinnlos und völlig überdimensioniert.

Fünftens: Schon der Verweis auf kinderpornographische Seiten und auf Seiten, die Verweise auf diese Seiten bereitstellen, ist strafbar. Klingt harmlos, führt aber dazu, dass man sich bereits strafbar macht, wenn man beispielsweise nur die Liste über Mittelsmänner bekommt und ins Internet stellt (Stichworte: Kontrolle und Mitbestimmung).

Wir halten also bis hierher fest: Die Liste ist technisch leicht zu umgehen und macht auch sonst keinen Sinn. Die Liste von vom BKA bereitgestellt und ist nur den Providern zugänglich, also vom Volk auch nicht kontrollierbar und darf auch nicht veröffentlicht werden.

Dann stellen wir mal die Frage nach dem dahinter liegenden Gedanken. Worum geht es also bei der Einführung dieser Filter?

Es geht um Kontrolle und Zensur

Die Antwort ist erschreckend und liegt doch auf der Hand: Es geht um die Kontrolle des Internets und um Zensur. Es ist wirklich so einfach.

Mit der Liste und den zugehörigen rechtlichen Vorschriften erhalten Politik und Strafverfolgungsbehörden die Möglichkeit, bestimmte Inhalte vor dem gewöhnlichen Deutschen einfach auszublenden. Das geht heute mit (angeblicher) Kinderpornographie los und wird morgen auf bedenkliche politische Inhalte und irgendwann einfach auf kritische und andersdenkende Stimmen übergreifen. Das ist keine Frage, das wird so passieren – allein schon deshalb, weil es außerhalb von BKA (und Regierung) keine Kontrollinstanz geben wird. Da entscheiden ein paar Wenige, was wir sehen und lesen dürfen.

Weiterhin gibt es einen Generalverdacht: Wer versucht, die Filterung und Sperrung zu umgehen, der macht sich verdächtig. Wie schnell das geht, kann man zum Beispiel hier nachlesen:

Kundenanfrage vom 09.04.2009 19:42

Hinweis zur Bearbeitung: Hallo Herr Hxxx, hat er Recht
oder ist er nur ein potenzieller Nutzer der demnächst
gesperrten Seiten, der nun maulig wird? Bitte um Prüfung
oder Weiterleitung. Vielen Dank und frohe Ostertage! Anja
Hxxx, VCS Uelzen

Potentieller Nutzer = Potentieller Straftäter. Plus eine interessante Formulierung: “Hat er Recht oder ist er ein potentieller Nutzer”. Sehr schön.

Daneben gibt es einen weiteren charmanten Nebeneffekt: Man erhält ein wundervolles Totschlagargument: Die Webseite dieser Person / Vereinigung / Gruppierung steht auf der Sperrliste, also müssen die Inhalte dort per se ungesetzlich sein – sonst würden sie ja nicht draufstehen. Mag sein, dass der technisch und / oder politisch gebildetere Zeitgenosse das noch kritisch hinterfragt, aber Otto Normalverbraucher steht ohnehin ja schon auf dem Standpunkt, dass derjenige, der nichts zu verbergen hat, ja auch nichts zu befürchten habe. Das ist ganz einfach ein Argument, gegen das man nicht anstinken kann. Die da oben werden schon wissen, was richtig und was falsch ist.

Der Fall wikileaks.de

Unwahrscheinlich, dass es so kommt? Sicher?! Ich verweise nur mal auf den Fall wikileaks.de, bei dem genau das in abgeschwächter Form angewandt ist: Es gab eine Hausdurchsuchung unter dem Verdacht der Förderung von Kinderpornographie. Grund: Unter wikileaks.de ist die australische Filterliste einsehbar (nebenbei sollte man sich die tatsächlich mal zu Gemüte führen, da sind neben diversen Pornoseiten nämlich auch Abtreibungsgegner und regierungskritische Organisationen drauf). Natürlich wurde nichts gefunden und der Domaininhaber konnte auch keinen Zugang auf einen Server gewähren, der ihm nicht mal gehört – aber er ist jetzt stigmatisiert: Alle Welt denkt, wenn sie wikileaks.de hört, an Kinderpornographie. Zukünftig geht das, wie gesagt, noch um einiges einfacher.

Zusammenfassung bis zu dieser Stelle: Die Liste ist technisch wirkungslos, dient potentiell der Zensur und kann wundervoll als Totschlagargument dienen.

Jetzt setzen wir das Ganze nochmal in den Ausgangskontext: Wir haben ein Gesetz über die Sperrung von Webseiten (und von Webseiten, die auf gesperrte Webseiten verlinken). Wir haben wundervolle Totschlagargumente, die bei Lieschen Müller auf der Straße funktionieren (und sich auch per BILD-Zeitung prima verbreiten lassen). Jetzt kommen noch drei Dinge dazu:

Erstens: Fünf große deutsche Internetprovider haben bereits in der letzten Woche einen Vertrag unterzeichnet, mit dem sie sich dazu verpflichten, die Webseitensperrungen auch unabhängig von gesetzlichen Regelungen und zeitnah umzusetzen. Sowas nennt man vorauseilenden Gehorsam. Damit haben wir Deutschen bereits in der Vergangenheit so unsere Erfahrungen gemacht.

Zweitens sollen die Daten der Personen, die auf gesperrte Seiten zugreifen wollen, dem BKA gemeldet werden können:

Es kann auch jeder Zugriff auf diese Seiten “zeitgleich” protokolliert werden, wie von der Leyen sagte. Dem BKA steht es frei, diese Daten zur Strafverfolgung zu nutzen.

Anders formuliert: Ich komme durch Zufall auf eine dieser Seiten – und schon bin ich potentieller Kinderschänder, Terrorist oder Anarchist.

Drittens: Warum wird gegen die bereits bekannte Kinderpornographie außerhalb des Internets nichts unternommen? Was ist mit den Fällen von Kindesmißbrauch in der Kirche – egal, ob katholisch oder evangelisch? Wieso geschieht da nichts mehr und der Staat gibt sich damit zufrieden, dass die Organisationen dies selbst regeln?

Fazit: Es geht nicht um Kinderpornographie, es geht um Zensur

Es bleibt festzuhalten: Wir haben eine technisch wirkungslose Liste, wir haben die Vorgabe, dass diese Liste geheim zu halten ist, wir haben die Möglichkeit, dass bei Zugriffen auf diese Webseiten das BKA eingreifen kann und wir haben ein wundervolles Totschlagargument.

Für mich klingt das wie potentielle Zensur.

Und wenn ich mir die handelnden Personen anschaue, die sich teilweise das Internet noch ausdrucken lassen, dann ist mir auch klar, dass genau das gewollt ist: Die wollen das kontrollieren. Und jetzt können sie auch.

Es wird Zeit, dass sich hier was ändert.

BRAINDUMP: Windows Live auf Windows 2003 oder Windows 2008

Eigentlich ist es ganz einfach, wenn man es denn weiß – es geht nämlich doch, die Windows Live Suite (namentlich den Live Writer) auf offiziell nicht supporteten Microsoft-Systemen zu installieren.

Lädt man den Installer herunter (wlsetup-all.exe oder wlsetup-web.exe) und versucht dann die Installation, kommt eine kleine fiese Fehlermeldung, die besagt, dass die Installation auf einem nicht unterstützten Betriebssystem vorgenommen werden soll. Das ist jedoch reine Politik, technisch spricht überhaupt nix gegen W2K3 oder W2K8 als Systeme für den Live Writer.

Um das Setup davon zu überzeugen, sich auf einem nicht unterstützten System installieren zu lassen, ist nicht mehr als ein kleiner Ressourcen-Editor, etwa Resource Hacker, notwendig. In diesem öffnet man dann den Installer und führt folgende Schritte aus:

  1. Den Bereich CONFIG > CONFIG0 > 0 suchen
  2. Den XML-Bereich mit dem Namen IsValidOs löschen:

  3. Kompilieren des Skripts
  4. Speichern der geänderten Ressourcen

Einer nun folgenden Installation auf einem W2K3- oder W2K8-System steht nichts im Wege.

PS: Dieses Posting ist per Windows Live Writer auf Windows Server 2003 verfasst worden.

Via.

AUA: Berlin – Wiesbaden für nur 292,– EUR

Ja, super sowas: Ich muss morgen nach Wiesbaden fahren – Kundentermin, ggf. ein neuer Auftrag. Macht man ja gerne, und am Liebsten per Bahn. So von wegen Preis und Leistung und Umwelt.

Ein wenig unpässlich ist, dass ich erst gestern die genaue Zeit erfahren habe. Also konnte ich auch keinen Sparpreis o.ä. in Anspruch nehmen und eher buchen. Als ich heute früh die Preise online überprüft habe (Berlin – Wiesbaden, 1. Klasse, Bahncard 25 First), bin ich fast rückwärts vom Stuhl gekippt: 292,00 EUR will die Bahn für Hin- und Rückfahrt. Zuzuglich entweder Parken am Bahnhof für irgendwas um die 20 EUR am Tag oder Taxi für 2x 20 EUR. Da bin ich also im Bereich von 310-330 EUR. Man möchte sich das mal auf der Zunge zergehen lassen: 310 EUR für 1.200 Kilometer.

Nun mag man sich denken, dass man mit dem Flugzeug fliegen könne – klar, geht auch. Ab 380,00 EUR bei AirBerlin. Lufthansa will gepflegte 550,00 EUR. Dazu kommt dann nochmal die Bahn und 2x Taxi. WTF?

Nein, es wird wohl doch wieder so laufen: Ich werde mich in mein Auto setzen, etwa 150,00 EUR Sprit einplanen (die gehen in bar weg) und vielleicht nochmal 100,00 EUR für Reparaturkosten zurücklegen (die kommen vielleicht irgendwann mal dazu) und dann in kürzerer Zeit und ohne nervende Mitfahrer zu meinem Meeting fahren. Umwelttechnisch ist es Mist, aber die Preisunterschiede sind ernsthaft unglaublich.

Tsssss… :-(

POLITIK: Was nicht passt…

…wird halt passend gemacht, denkt sich der Grimaz.

Nachdem sein BKA-Gesetz letzte Woche von den Sachsen gestoppt worden ist (wobei es spannend zu beobachten ist, welche Länder anschließend aus ihren Löchern krochen), will der Grimaz jetzt mal eben schnell das Grundgesetz ändern, um seinen Willen zukünftig leichter durchdrücken zu können: Geht es nach W.S., soll zukünftig im Bundesrat die einfache Mehrheit statt der absoluten Mehrheit ausreichend sein, um Gesetze beschließen zu können.

Klingt banal? Naja, das ist es nicht ganz: Bisher haben Enthaltungen mitgezählt (d.h. eine Enthaltung war quasi ein “Nein”), zukünftig würden Enthaltungen als nicht abgegebene Stimmen gelten und somit unter den Tisch fallen. Oder anders gesagt: Das BKA-Gesetz wäre durchgegangen.

Zum Glück findet die Idee des Grimaz bisher keinen echten Widerhall auf Länderebene – und gerade die Länder müssten die Grundgesetzänderung, die zur Durchsetzung dieser lächerlichen Idee notwendig wäre, mit beschließen. So doof können die jedoch nicht sein, jedenfalls bleibt das zu hoffen.

Ich finde: Der Grimaz sollte in Rente gehen. Ginge es nach ihm, hätten wir heute schon einen echten Überwachungsstaat samt Bundeswehreinsatz im Inneren und einer entmachteten Länderkammer, in dem Flugzeuge schon bei einem simplen Verdacht abgeschossen und potentielle Gefährder mal eben schnell nach Guantanamo ins Gefängnis kommen könnten, natürlich ohne Gerichtsverfahren.

Da kann man nur von Glück sprechen, dass es bisher nicht so gekommen ist. Au Backe.

APPLE: Full switch

Dieser Blogbeitrag kann die Gefühle von Apple-Hassern verletzten.

So, Schnauze voll. Nachdem die Herrschaften in Redmond es auch nach gut eineinhalb Jahren nicht geschafft haben, Vista nur mal annähernd so schnell wie ein gutes XP zu bekommen, ich aber keine Lust mehr auf das Vista-Warterädchen hatte, habe ich komplett geswitcht:

xp_vista

Dank Thomas, der vor einigen Tagen gefragt hatte, wie sich die ASP.NET-Entwicklung unter OS X so macht, hab ich es mir selbst nochmal angeschaut: Hmm, naja, etwas langsamer ist es schon. Aber eigentlich nur, wenn man im OS X zwei virtuelle Maschinen parallel betreibt (was unter Vista schon mal fast gar nicht geht) und dazu noch dutzende Mac-Programme am Laufen hat. Eine reine Entwickler-VM mit Windows XP oder Windows 2003 läuft subjektiv nur minimal langsamer, als ein natives Vista.

Jedenfalls läuft es so gut, als dass ich das OS X jetzt als primäres System nehme. Und wenn irgendwann Windows 7 rauskommt und so läuft, wie ich es mir in Bezug auf Performance und Stabilität vorstelle, dann kann ich die VMs ja auch wieder unter Windows nutzen. Wenn…

Weitere Erfahrungsberichte folgen!

ASP.NET: Handarbeit statt DataSource!

Achtung: Polemik, Zuspitzung, Gemeinheit!

Das ASP.NET-Framework bietet diverse datengebundene Controls an, die der Visualisierung von Listen dienen. Die bekanntesten sind Repeater, DataGrid und GridView, gefolgt von einigen Exoten, etwa der DataList. Dazu gibt es wundervolle DataSource-Steuerelemente, die es erlauben, komplett ohne eine einzige Zeile an .NET-Code, Datenbanken an diese Steuerelemente zu binden.

Wenn man sich nun den Spaß macht, mal durch die Foren zu hirschen, dann bekommt man das kalte Grausen, denn die Kombination DataSource-Steuerelement + GridView-Steuerelement beherrscht seit .NET 2.0 quasi die Programmierung im ASP.NET-Umfeld. Was auch letztlich kein Wunder ist, denn sie sind idiotensicher einzusetzen und bringen Ergebnisse in wenigen Sekunden. Mit dabei sind dann gleich Features, wie etwa Paging und Sorting. Geil.

Nur leider ist es totaler Mumpitz und absoluter Schwachsinn, diese Controls extensiv und in Kombination miteinander einzusetzen. Denn sie räumen gründlich auf mit allem, was gemeinhin als Schichtentrennung, Wartbarkeit, Skalierbarkeit oder Qualität bekannt ist.

Die Gründe liegen auf der Hand:

Schichtentrennung ist nicht mehr gegeben, da der Code zum Abrufen von Daten – samt SQL-Statements! – speziell bei Verwendung vom SqlDataSource-Steuerelement in der WebForm selbst liegt. Statt also eine dedizierte Geschäftslogik damit zu beauftragen, Daten zu laden (zu cachen, aufzubereiten, zu analysieren, …), wird hier direkt auf die Datenquelle zugegriffen. Die komplette Verarbeitungslogik wandert dann in irgendwelche Ereignisbehandlungsmethoden im Code-Bereich der WebForm, statt in einer eigenen Verarbeitungsschicht zu liegen, wo sie ggf. auch gegen andere Implementierungen, Weiterentwicklungen oder sonstwas ausgetauscht werden könnte. Einzige akzeptierbare Ausnahme hier: Das ObjectDataSource-Steuerelement, das es erlaubt, gegen statische Methoden von Geschäftsobjekten zu arbeiten. Doof nur, dass mir dann dabei quasi vorgegeben wird, dass ich eben eine statische Methode brauche. Was ist mit meiner Factory (Provider, Builder, Broker, …), die ich ggf. habe?

Wartbarkeit? Gibts nicht mehr. Wie auch? Ein Beispiel: Es gibt zwanzig WebForms in einer Applikation, die auf diese Art arbeiten – also GridView + DataSource-Steuerelement. Jetzt wird das Datenmodell geändert, was im Rahmen von Weiterentwicklungen durchaus vorkommen soll. Das Ergebnis? Ich darf an mindestens zwanzig WebForms Änderungen vornehmen, statt es an nur einer Stelle in meiner Geschäfts- oder Datenlogik zu haben. Klasse. Nicht zu reden von der quasi nicht mehr vorhandenen Lesbarkeit des Codes. Neee, Wartbarkeit gibt es damit nicht.

Die Skalierbarkeit verschwindet ebenfalls hinter dem Horizont, denn ich habe schlicht keine brauchbare Möglichkeit mehr, in Datenhaltungs- und Caching-Prozesse einzugreifen. Geht nicht, ist ja alles inline. Klar, die SqlDataSource kann auch cachen – aber das kann ich im Code über das Application Data Caching viel zielgerichteter und genauer umsetzen. Wie also soll es skalieren? Zumal ich ja nicht mal in der Lage bin, einfach per Konfiguration etwa auf eine Web-Service-basierende Lösung umzustellen – ich müsste es halt überall ändern, wo ich auf die Daten zugreife. Oder eben eine andere Implementierung der Geschäfts- oder Datenhaltungslogik zu verwenden. Klar, es gibt die ObjectDataSource, aber… siehe oben. Dazu kommt: DataGrid und GridView sind zwar mächtig, aber eben auch langsam, denn die ganzen Funktionalitäten müssen ja irgendwo eingebunden werden. Auch, wenn man sie unter Umständen nicht benötigt. Und Tschüss, Skalierbarkeit!

Qualität? ROTFL! Wie denn, wo denn? Wie soll denn mit solch einem Gewurschtel, mit nicht mehr vorhandenen anerkannten Entwurfs- und Design-Patterns noch sowas wie Qualität erzeugt werden? Wenn man auch nur einen kurzen Moment mal nicht nur an die persönliche Bequemlichkeit denkt, dann muss man eigentlich zwangsläufig erkennen, dass man so ganz sicher alles baut, aber keine qualitativ hochwertige Software.

Die Lösung?

Back to the roots! Wenn datengebundene Listensteuerelemente, dann einen Repeater, keine komplett überdimensionierten GridViews und DataGrids. Und aus dem Code heraus die Daten binden. Kontrolle zurück gewinnen! Weiß denn eigentlich überhaupt noch jemand, wie man händisch die Daten binden lässt? Nein? Na, dann hier ein wenig Beispielcode:

protected override void OnPreRender(EventArgs e)
{
   // Factory für den Business-Layer
   BusinessLayer bl = BusinessLayer.GetInstance();

   // Personen laden
   IList persons = bl.GetPersons();

   // Personen binden
   rptPersons.DataSource = persons;

   // Datenbindung
   DataBind();
}

Oh je, sieben Zeilen Code! Wie schrecklich!

Leute, seid mir nicht böse, aber von nix kommt auch nix. Sicher, ich spitze hier zu, aber Webseiten entwickeln hat eben tatsächlich was mit Entwicklung, mit Code, mit Abläufen, mit Architektur, mit Denken zu tun. Ihr müsst das nicht machen, keine Frage – aber genau so werden dann eure Ergebnisse aussehen: Zusammengestückelt, unprofessionell, langsam, nicht pflegbar. You get, what you pay for – kein Einsatz, kein Ergebnis.

Zu den Themen Paging, Sorting und Caching dann ein anderes Mal. Google hilft sicher bis dahin weiter – Stichworte: PagedDataSource, IComparer und Cache.

Update: Ihr wollt, dass man mal was über bestimmte Themen schreibt? Dann sagt es mir.

SICHERHEIT: Schutz vor SQL-Injection

Das klassische Argument für den Einsatz parametrisierter Statements ist der Schutz vor SQL-Injection. SQL-Injection bezeichnet dabei den Vorgang des Einschleusens von fremden SQL-Statements in eigene SQL-Statements.

Beispiel: Die klassische Benutzer-Authentifizierung, bei der Benutzername und Kennwort übergeben werden. Der typische (C#-) Code für das generieren des SQL-Statements sieht dann in etwa so aus:

   // Werte einlesen
   String username = tbLoginName.Text;
   String password = tbPassword.Text;

   // Statement bauen
   String sqlStatement = “SELECT COUNT(1) FROM Users ” +
      “WHERE Username = ‘” + username + “‘ ” +
      “AND Password = ‘” + password + “‘”;

   // Command erzeugen
   DbCommand command = conn.CreateCommand();
   command.CommandText = sqlStatement;

   // Statement ausführen
   int result = (int) command.ExecuteScalar();

Lassen Sie uns mal einige Varianten für Benutzernamen und Kennwörter durchspielen.

Variante #1:

  • Benutzername: foo
  • Kennwort bla
  • SQL-Statement: SELECT COUNT(1) FROM Users
    WHERE Username = ‘foo‘ AND Password = ‘bla

Kein Problem hier, alles gut. Wenn Benutzername und Kennwort passen, dann ist es fein.

Variante #2:

  • Benutzername: ‘ OR 1=1 –
  • Kennwort: Weiß nicht
  • SQL-Statement: SELECT COUNT(1) FROM Users
    WHERE Username = ‘‘ OR 1=1 –‘ AND Password = ‘Weiß nicht

Großes Problem hier. Das SQL-Statement sieht irgendwie krank aus und kann ganz sicher nicht funktionieren. Sicher?! Doch, es funktioniert, denn die beiden aufeinanderfolgenden Bindestriche interpretiert ein SQL-Server beispielsweise als Kommentar – alles, was danach kommt, wird also ignoriert. Das tatsächlich ausgeführte SQL-Statement sieht also so aus:

  • SQL-Statement: SELECT COUNT(1) FROM Users WHERE Username = ” OR 1=1

Ganz gewaltiges Problem jetzt: Die Abfrage selektiert alle Datensätze, deren Username-Spalte entweder leer ist, oder für die 1=1 gilt. Und da 1=1 immer gilt, werden also alle Datensätze selektiert. Die Anmeldung wird jetzt also klappen.

Variante #3:

  • Benutzername: ‘; INSERT INTO Users (‘karsten’, ‘sicher’) –
  • Kennwort: Keine Ahnung
  • SQL-Statement: SELECT COUNT(1) FROM Users
    WHERE Username = ‘‘; INSERT INTO Users (‘karsten’, ‘sicher’) –‘ AND Password = ‘Keine Ahnung

Ebenfalls großes Problem: Nun werden zwei SQL-Statements ausgeführt, denn das Semikolon trennt SQL-Statements voneinander. Alles, was nach dem Kommentar-Zeichen kommt, wird komplett ignoriert. Das eigentliche SQL-Statement sieht also so aus:

  • SQL-Statement: SELECT COUNT(1) FROM Users WHERE Username = ”; INSERT INTO Users (‘karsten’, ‘sicher’)

Super, jetzt haben wir einen zweiten Datensatz in der Tabelle!

Die Lösung

Der Lösungsansatz ist ganz einfach: Parametrisierte SQL-Statements verwenden. Dazu muss der obenstehende Code nur ein wenig abgewandelt werden:

   // Werte einlesen
   String username = tbLoginName.Text;
   String password = tbPassword.Text;

   // Statement bauen
   String sqlStatement = “SELECT COUNT(1) FROM Users ” +
      “WHERE Username = @Username ” +
      “AND Password = @Password”;

   // Command erzeugen
   DbCommand command = conn.CreateCommand();
   command.CommandText = sqlStatement;

   // Parameter anfügen
   DbParameter param = command.CreateParameter();
   param.ParameterName = “@Username”;
   param.Value = username;
   command.Parameters.Add(param);

   param = command.CreateParameter();
   param.ParameterName = “@Password”;
   param.Value = password;
  command.Parameters.Add(param);


   // Statement ausführen
   int result = (int) command.ExecuteScalar();

Nun werden die Daten anders an die Datenbank übergeben – nämlich in zwei Schritten: Zuerst wird das Statement übergeben, anschließend erfolgt die Übergabe der Parameter. Auf Ebene der Datenbank wird nun nicht etwa ein SQL-Statement dynamisch zusammengebaut, sondern es wird wie in Form eines Prozeduraufrufs verarbeitet. Für die Beispiele gilt also:

Variante #1:

  • Benutzername: foo
  • Kennwort bla
  • SQL-Statement: SELECT COUNT(1) FROM Users
    WHERE Username = @Username AND Password = @Password

Kein Problem hier, alles gut. Wenn Benutzername und Kennwort passen, dann ist es fein.

Variante #2:

  • Benutzername: ‘ OR 1=1 –
  • Kennwort: Weiß nicht
  • SQL-Statement: SELECT COUNT(1) FROM Users
    WHERE Username = @Username AND Password = @Password

Kein Problem hier. Wenn es nicht zufällig einen Datensatz mit dem Benutzernamen ‘ OR 1=1 – und dem Kennwort Weiß nicht gibt, dann wird nix gefunden. Und wenn es den Datensatz gibt, ist der Benutzer ordnungsgemäß authentifiziert.

Variante #3:

  • Benutzername: ‘; INSERT INTO Users (‘karsten’, ‘sicher’) –
  • Kennwort: Keine Ahnung
  • SQL-Statement: SELECT COUNT(1) FROM Users
    WHERE Username = @Username AND Password = @Password

Kein Problem hier. Wenn es nicht zufällig einen Datensatz mit demBenutzernamen ‘; INSERT INTO Users (‘karsten’, ‘sicher’) – und dem Kennwort Keine Ahnung gibt, dann wird nix gefunden. Und wenn es den Datensatz gibt, ist der Benutzer ordnungsgemäß authentifiziert.

Also, keine Sicherheitsprobleme bei Verwendung von parametrisierten Statements.

Wer mehr über SQL-Injection wissen möchte, sollte dringend einen Blick in die Wikipedia werfen.

DOTNET: Nehmt endlich parametrisierte SQL-Statements!

Meine Güte, ich halts langsam nicht mehr aus: Viel zu viele “Entwickler” verwenden klassische (=dynamisch zusammengestellte) SQL-Statements und wundern sich dann über komischste Seiteneffekte. Dabei kann es doch so einfach sein, wenn man nur mal auf die Ratschläge hören würde, die einem an jeder Ecke entgegen gerufen werden.

Die wichtigsten Gründe für parametrisierte Statements sind:

  • Schutz vor SQL-Injection
  • Keine “komischen” Effekte beim Einfügen von Daten
  • Höhere Performance von SQL-Statements
  • Bessere Wartbarkeit von Applikationen

Für die klassischen SQL-Statements spricht heutzutage nichts mehr. Das gilt sowohl für Java, als auch für .NET-Applikationen. Um so schlimmer, dass es immer noch Bücher und Tutorials gibt, die dennoch diese völlig veraltete, unperformante und unsichere Art der Datenbankansprache postulieren.

HOAX: Ericsson verschenkt Mobiltelefone

Ja, nee, ist klar. Das kam heute per Mail rein:

Hallo zusammen,

die Firma Ericsson verteilt Handys…. und das gratis übers Internet, um der Marke Nokia entgegen zu wirken, welche dasselbe macht. Ericsson will sich damit bekannter machen. Deshalb verteilt das Unternehmen jetzt gratis das neue WAP-Handy. Alles was zu tun ist, ist diese Mail an acht Leute zu schicken.

In etwa zwei Wochen erhält man dann ein Ericsson T 18. Wenn die Nachricht an 20 oder mehr Personen verschickt wird, erhält man sogar ein Ericsson R320 WAP-Phone.

Kleine Anmerkung am Rande: Die Mobiltelefonsparte von Ericsson ist bereits 2001 mit der von Sony verschmolzen worden. Das Unternehmen nennt sich seit fast sieben Jahren SonyEricsson. Aber egal, wollen wir uns die guten Stücke mal anschauen:

Ericsson T18

  • Vorgestellt 1999
  • GSM 900 / GSM 1800 Dualband
  • 105x49x24mm
  • 146g
  • Uhr mit Alarm
  • Rechner
  • Bis zu 4 Stunden Gesprächszeit
  • Bis zu 200 Stunden Stand-By
  • Monochrom-Display mit 3 Zeilen

Ericsson R320

  • Vorgestellt 2000
  • GSM 900 / GSM 1800 Dualband
  • 130x51x15mm
  • 99g
  • WAP
  • Infrarot
  • Bis zu 4:30 Stunden Gesprächszeit
  • Bis zu 100 Stunden Stand-By
  • Monochrom-Display mit 5 Zeilen

Die Dinger sind beide so alt, dass es sich fast schon wieder lohnen würde, die Mails weiter zu senden… :-)

NERVEND: Als ob es nix wichtigeres gäbe

Boah, wie bin ich genervt: Diese Steuersache mit dem (mittlerweile ehemaligen) Postchef Zumwinkel geht mir nur noch auf den Keks. Nein, nicht, dass er Steuern hinterzogen haben könnte (fast jeder versucht, den Staat zu bescheißen – doof nur, wer sich so dämlich anstellt und sich dann erwischen lässt), sondern das die Medien über nichts anderes mehr berichten.

Ich bin Donnerstag abend von München nach Berlin gefahren – und auf jedem Radiosender war das das Top-Thema. Echt, als ob es nichts wichtigeres gäbe. Jede Nachrichtensendung begann mit dieser Thematik, es wurden Sondersendungen noch und nöcher gebracht. Und dabei ist dieses Thema einfach nur vergleichsweise unwichtig – oder hat irgendjemand dadurch seine Meinung über Manager geändert?

Was ich viel spannender fände, wurde nicht beleuchtet: Könnte es sein, dass es einen Zusammenhang mit dem Fall Z. und den von Liechtensteiner Banken entwendeten Kunden- und Kontendaten geben? Könnte es sein, dass Z. das auch schon wusste und deshalb seinen Rücktritt zum Jahresende angekündigt hatte? Ging es hier u.U. um Erpressung? DAS wären mal interessante Fragen.

Aber eigentlich sind selbst die nicht wirklich interessant. Über Hunger, Klimawandel, Bankenaffären (Bayern -> Huber?!) u.ä. wurde – wenn überhaupt – nur am Rande berichtet. Muss man ja auch nicht – der Fall Z. verfügt über Aufregungs- und Boulevardpotential, die anderen Themen nicht. Find ich traurig.

AUA: Das erklärt einiges…

Au weia, das erklärt dann doch so einiges:

Und sowas will über meine Daten entscheiden. :-(

Via Operator!

AUA: …vs. Karsten

Ist das noch frech oder schon unverschämt von diesem Herrn?

  • Sag mal Stefan, wie ist denn die Erfahrung in Eurer Gruppe, ist es möglich mit Karsten sachlich zu reden, oder soll ich das einfach ignorieren. (hier)

Eigentlich zum Lachen, wenn es nicht so lächerlich wäre.

Wer will, kann es gerne hier diskutieren.

AUA: …vs. Java

In der C# vs. PHP-Diskussion ist erfolgreich die Java-Keule rausgeholt worden:

  • Java hat bei den Möglichkeiten “nachgeholt”, es ist wohl evtl. auch eher ein Problem, dass die Java-Entwickler ihre eigene Umgebung teilweise nicht mehr komplett verstehen/ausnutzen und so zu einem Grossteil imperformante (ich spreche gerade eher übers Web) Web-Applikationen herauskommen. (hier)

Das ist einfach nur Müll und Polemik. Muss wohl daran liegen, das Freitag ist.

AUA: Web vs. Client

Oh je, in der C#-Newsgroups gehts ab: Da hat eine gestandene Entwicklerin wohl Stress mit ihrem Chef, weil der (abgesehen davon, dass er letztlich die Weisungsbefugnis hat) eine Applikation auf Basis von Webtechnologien (egal, ob jetzt wirklich C# oder PHP, ob SQL Server, Oracle oder Postgre-SQL) erstellen lassen möchte. Sie möchte das nicht und hat dann unter dem Deckmäntelchen von “C# vs. PHP” versucht, sich argumentativ zu wappnen.

Das mag für sich durchaus zulässig sein bzw. ist schnell zu entlarven. Wenn ich mir dann aber die Kommentare der gestandenen Client-Entwickler-Fraktion (egal, ob C# oder VB) ansehe, dann bekomme ich das kalte Grausen über so viel Unwissenheit oder auch Ignoranz. Hier mal ein paar Auszüge:

  • PHP ist von der Performance her nicht konkurrenzfähig mit vorkompilierten Assemblies aus .NET. PHP selbst wird diesbzgl. sogar überholt von seinen Perl oder Pyton-Kollegen. Auch Erweiterungen wie Zend Optimizer etc. können das Loch da nicht stopfen. (hier)
  • Web-Anwendungen erfordern deutlich erhöhten Aufwand, im Gegensatz zu Windows Forms Anwendungen. (hier)
  • Um eine gewisse Usability zu erreichen, muss in Web-Anwendungen deutlich mehr Aufwand getrieben werden, als zum Beispiel in eine Windows Forms Anwendung. (hier)
  • Die ‘Usability’ sollte IMHO entscheidend sein! Heute akzeptieren leider viel zu viele Anwender noch jeden Unsinn im Web-Browser. Ich hoffe, dass sich dies bald mal bessern wird und die Programmierer+Anwender ‘reifer’ werden. (hier)
  • Heute sind zu viele ‘Kunden’ entweder (noch) inkompetent oder vom Web ‘geblendet’ (hier)
  • Bei ernsthafter Betrachtung fallen aber heute IMHO 99% aller Web-Sites schlicht durch. (hier)
  • Ein Web/Browser ist IMHO brauchbar um zB ganz rasch ein paar diverse Informationsquellen durchzusurfen/filtern. Aber überall wo man länger interaktiv & produktiv mit _arbeiten_ soll, gehören _native_ Apps hin, ohne den Browser-Quatsch drum herum. (hier)
  • Es ist ein Armutszeugins aktueller Informatik sondergleichen, wenn die Leistungsfähigkeit heutiger PCs wegen HTML/Browser usw völlig brach liegt. (hier)

Aua, das tut wirklich weh. Die Diskussion läuft übrigens noch – hier als Webversion, hier als Newsgruppen-Version und wer will kanns auch hier im Form besprechen.

MIGRÄNE: Lieber Projektmanager…

…wenn ich Dich bitte, mir eine Liste der offenen Punkte eines Projektes fertig zu machen, was könnte ich dann damit wohl meinen:

  • Mache mir eine Liste mit einigen offenen Punkten fertig, warte zwei Wochen und schicke mir dann die restlichen Punkte am Freitag nachmittag vor Weihnachten zu?
  • Mache mir eine Liste mit allen offenen Punkten fertig?

Ich verstehe, dass es etwas zweideutig ist, wenn ich dich um sowas bitte, lieber Projektmanager. Bitte verzeihe mir meine Unbedarftheit.

Nächste Seite »