Archive

Archive for August 2010

Feindbilder: Neuer Krieg erhitzt die Gemüter

Die Entscheidung der USA, mit dem Afghanistankrieg einen beliebten Ort für Spielhandlungen in echte Kämpfe zu verwickeln, hat heftige Reaktionen hervorgerufen. So wiederholte der Killerspielerverband „Blutpixel“ am heutigen Montag seine Forderung, Politiker sollen den „unspaßigen Krieg“, welcher am 7.10.2010 offiziell begann, endlich beenden.

Die Gamestar hatte am Wochenende erklärt, sie widere der neue Krieg an, weil echte Menschen kämpfen und andere Menschen brutal ermorden würden. Es sei schockierend, erklärte die Gamestar, „dass überhaupt jemand auf die Idee kommt, spielerische Gewalt in die Realität umzusetzen.“ Schließlich würden dabei Kinder durch die Hände der Gegner ihre Väter und Frauen ihre Ehemänner verlieren.

Die US-Regierung wies die Kritik zurück: „Das Mindestalter für die Teilnahme am Krieg sind 18 Jahre, deswegen dürfen nur Erwachsene mitmachen. Es ist die Entscheidung der Freiwilligen, ob sie zur Armee gehen oder nicht.“ Eingemischt hatt sich in die Diskussion unterdessen auch der deutsche E-Gamer-Verband: Sprecher Samuel Ernst äußerte gegenüber dem Nachrichtenmagazin Focus, es sei „widerwärtig, so einen Krieg anzufangen, während friedliche Spieler vor der Kulisse Afghanistans Kriegsspiele spielen“.

 

Dieser Beitrag ist Satire in Form eines Faketickers. Hintergrund/Vorlage ist die Kritik am Computerspiel „Medal of Honor“, in welchem der Spieler auch Taliban spielen können soll. Ich hoffe, der Text regt zum Nachdenken darüber an, ob es widerwärtig ist, ein Spiel über einen Krieg zu machen, oder ob es nicht eher widerwärtig ist, einen solchen Krieg zu veranstalten.

Genau deswegen hasse ich C/C++

2010-08-21 16 Kommentare

Hier mal ein schönes Beispiel, warum ich C und C++ hasse. Nehmen wir doch dieses schöne, einfache Programm:

#include <stdio.h>

int main() {
	int zahl = 23;
	if (zahl > 5) {
		printf("Das sollte reichen: " + zahl);
	} else {
		printf("Das reicht nicht: " + zahl);
	}
}

Was gibt dieses Programm aus, wenn man es startet?

(Runterscrollen für die Lösung)
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

Die Antwort lautet:

s reicht nicht: 

Also der Text aus dem else-Zweig, der eigentlich nicht aufgerufen werden kann, und auch noch am Anfang abgeschnitten, und die Zahl fehlt. Was ist passiert? Nun, die Zeichenketten werden hintereinander im Speicher abgelegt. Es wird sehr wohl der erste Zweig ausgeführt – aber es wird die Speicheradresse der ersten Zeichenkette genommen, die Zahl dazuaddiert und die Zeichenkette an dieser neuen Adresse ausgegeben. Logisch, oder? Und das ist nunmal ein Teil der zweiten Zeichenkette.

Ist ja auch völlig klar, dass man bei einer direkt im Quellcode konstant angegebenen Zeichenkette, wo man nicht einmal weiß, wo die landen wird, mit der Speicheradresse herumrechnen will. Klar ist das hier ein Fehler des Programmierers und der Compiler macht sicherlich nur das, was im Standard vorgesehen ist. Aber der gcc (3.4.5 mingw-vista special r3) hält es selbst mit gesetztem -Wall -Wextra (also sehr hohem Warnlevel) nicht im Geringsten für nötig, wenigstens eine Compilerwarnung auszugeben. (Angemessen wäre meiner Meinung nach gerade in diesem Fall schlichtweg ein Fehler. Wer wirklich auf den Pointern herumrechnen will, kann ja casten.) Natürlich hat das alles seine Richtigkeit: Der Text hat den Typ char* (also ein Pointer), und dazu kann man wunderbar einen int addieren. Was sonst sollte man denn damit machen…

Ich sage übrigens nicht, dass automatisch mehr Speicher allokiert, die Zahl in einen Text umgewandelt, an den ursprünglichen String drangehängt und ausgegeben werden muss – eine schlichte Fehlermeldung, dass „Text“ und „Zahl“ sich nicht addieren lassen, wäre völlig ausreichend.

Dieses einfache Beispiel zeigt aber, wie maschinennah man bei C/C++ programmiert. (Update: Ein weiteres, mindestens genauso fieses Beispiel siehe hier.) Dadurch, dass man so direkt auf dem Speicher arbeitet, und sich um viele Kleinigkeiten manuell kümmern muss, entsteht viel Code, mit vielen Fehlern, und „Fehler“ heißen beim Umgang mit rohem Speicher und fremden Daten desöfteren „Sicherheitslücke wegen der man sich schon beim Anschauen einer Website nen Virus fängt“. Ergänzung – zum Beispiel so (Hervorhebung von mir):

Adobe hat seinen Shockwave Player auf Version 11.5.8.612 aktualisiert und schließt damit wieder einmal zahlreiche Sicherheitslücken, von denen Angreifer mindestens 18 zum Einschleusen von Schadcode missbrauchen können. Ursache für die meisten Schwachstellen sind Speicherfehler in diversen Funktionen […]

Die meisten Exploits der letzten Jahre dürften wir tatsächlich C/C++ verdanken.

Zudem habe ich noch den Eindruck, dass entweder durch den üblichen Programmierstil und/oder durch die vielen Kleinigkeiten, die man manuell machen muss, C/C++-Programme im Vergleich zu anderen Sprachen deutlich schlechter lesbar sind.

Für mein Tool DarkLock hatte ich das „Vergnügen“, die Windows-API aus C++ heraus aufrufen zu müssen. Insbesondere die Funktion PowerDuplicateScheme gefällt mir, weil sie stellvertretend für viele andere Funktionen zeigt, wie viel „Spaß“ C++ macht. Diese erhält als Parameter die Konstante NULL (ist halt so…), einen Pointer auf die GUID des einen Schemas, und einen Pointer auf einen Pointer auf eine GUID. Richtig gelesen. Macht auch absolut Sinn, denn wenn der Pointer auf einen Nullpointer pointet, wird eine neue GUID erzeugt und der Nullpointer durch den Pointer auf die GUID ersetzt. Alles klar? (Man muss danach nur noch den Speicher richtig freigeben…)

Den Rest von DarkLock hab ich dann in C# geschrieben, einer Sprache die mehr Java als C ähnelt und deutlich weniger Schmerzen hervorruft. (Und ja, ich weiß, dass es für C durchaus Libraries gibt, die obiges Problem lösen würden.)

Es gibt sicherlich Fälle, wo C und C++ noch Sinn machen (Embedded-Systeme, Dinge die mit hoher Leistung laufen müssen, Sachen die aus sonst einem Grund derart maschinennah sein sollen, …) – für die alltägliche Programmierung von Desktopanwendungen will ich den Kram aber nicht mehr sehen. Wem meine Kritik auf viel zu niedrigem Niveau ist, darf sich gern bei Fefe bedienen.

Gibt es eigentlich einen GUI-Editor für Java, der ähnlich gut ist wie der von Visual Studio? Ich habe nämlich keine Lust, 70% der Zeit damit zu verbringen GUIs zu schreiben. Auch nett wäre, wenn die „höheren“ Sprachen eine einfache Möglichkeit bieten würden, bei Bedarf doch mal auf ein niedrigeres Level zu wechseln (mit den damit verbundenen Nachteilen), oder zumindest (gerade Java) irgendwas, um bequem mit „rohen“ Bytes (gerne durchaus in verwaltetem, geschützem Speicher!) sinnvoll arbeiten und rechnen zu können.

Polizeigewerkschaftswahnsinn

2010-08-08 3 Kommentare

Wenn in den Medien wieder einmal berichtet wird, dass die/eine Polizeigewerkschaft irgendetwas fordert, muss man immer daran denken zu fragen, welche. Es gibt nämlich drei, die sich regelmäßig zu politischen Themen äußern:

  • DPolG (Deutsche Polizeigewerkschaft)
  • BDK (Bund Deutscher Kriminalbeamter)
  • GdP (Gewerkschaft der Polizei)

Hält man die nicht auseinander, macht man schnell eine halbwegs vernünftige Gewerkschaft für die Äußerungen einer anderen, weniger vernünftigen, verantwortlich.

Der BDK ist bekannt dafür, dass er gerade was der Internet betrifft, gerne viel und vor allem viel Unsinniges fordert, ohne wirklich Ahnung zu haben. Die aktuellste respektable Leistung hierbei ist die Forderung eines „Reset-Knopfs“ (gemeint ist ein Not-Aus), mit dem das Internet bei Angriffen abgeschaltet werden kann. Ich denke, die folgende Karikatur bringt die „Sinnhaftigkeit“ des Vorschlags auf den Punkt:

Die BDK-Meldungen zeichnen sich aus meiner Sicht meist mit recht starkem Populismus und Polemik aus, teilweise hat man den Eindruck, dass einfach irgendwo aufgeschnappte Ideen zur eigenen Forderung werden, um in die Presse zu kommen. (Mit dem Internet-Notaus-Knopf machen sich in Amerika seit längerem Leute lächerlich.)

Zumindest eine der anderen Polizeigewerkschaften hatte ich eigentlich als halbwegs vernünftig in Erinnerung und hatte den Eindruck, die Existenz von Bürgerrechten sei ihnen zumindest bekannt. Sicher bin ich mir nicht, ich glaube es war die DPolG, die auch das BKA-Gesetz wegen mangelndem Schutz von Bürgerrechten kritisierte. (UPDATE: Ich hab mir die alten Meldungen nochmal angeschaut, kann genausogut die GdP gewesen sein, ich weiß es nicht.)

Das hat sich geändert. Zum BDK muss ich ja nicht mehr viel sagen. Die GdP hat sich vor kurzem durch eine Aussage ihres Chefs hervorgetan, nach der er sich nicht vorstellen kann, dass die Sicherungsverwahrung Bürgerrechte verletzen könnte. Jetzt hat auch die DPolG nachgelegt, und gleich mal einen Pranger gefordert.

Derzeit kann man also von keiner der drei Gewerkschaften sagen, dass sie Bürgerrechte und die freiheitlichen Grundsätze unserer Gesellschaft auch nur ansatzweise verinnerlicht hätte. (Ergänzung:) Ab und zu schaffen sie es was überraschend positives zu veröffentlichen, aber kurz danach greifen sie wieder daneben. Dennoch sollte man bei Nachrichten unterscheiden, welche der Gewerkschaften was absondert, da es doch noch Unterschiede gibt. BDK-Äußerungen führen bei mir inzwischen nichtmal zu Kopfschütteln – von denen bin ich das gewohnt. Die anderen Gewerkschaften nehme ich zumindest noch etwas ernst. Schade, dass die Presse üblicherweise jede Äußerung einer dieser drei Gewerkschaften aufgreift und verbreitet, fast als wäre es eine offizielle Meldung einer Behörde. Bei vielen Bürgern kommt leider meist nur „Polizeigewerkschaft“ und somit „Polizei“ und somit „offiziell“ und somit „gut“ an…

UPDATE 2: Die FAZ hat es soeben geschafft, ein schönes Gegenbeispiel für den letzten Satz zu liefern. Leider dürfte das die Ausnahme sein, die die Regel bestätigt… UPDATE 3: Hrmpf. Die FAZ hat Constanze Kurz vom CCC für sich schreiben lassen, kein Wunder dass die Meldung was taugt. Immerhin gut, dass sie wenigstens auf Kompetenz setzen, aber lieber wäre mir, wenn die Medien von alleine mit ihren üblichen Autoren auf sowas kämen – so wird es viel zu selten was.