Ihr Browser versucht gerade eine Seite aus dem sogenannten Internet auszudrucken. Das Internet ist ein weltweites Netzwerk von Computern, das den Menschen ganz neue Möglichkeiten der Kommunikation bietet.

Da Politiker im Regelfall von neuen Dingen nichts verstehen, halten wir es für notwendig, Sie davor zu schätzen. Dies ist im beidseitigen Interesse, da unnötige Angstzustiände bei Ihnen verhindert werden, ebenso wie es uns vor profilierungs- und machtsächtigen Politikern schützt.

Sollten Sie der Meinung sein, dass Sie diese Internetseite dennoch sehen sollten, so können Sie jederzeit durch normalen Gebrauch eines Internetbrowsers darauf zugreifen. Dazu sind aber minimale Computerkenntnisse erforderlich. Sollten Sie diese nicht haben, vergessen Sie einfach dieses Internet und lassen uns in Ruhe.

Die Umgehung dieser Ausdrucksperre ist nach §95a UrhG verboten.

Mehr Informationen unter www.politiker-stopp.de.



Monatsarchiv für September 2007

Provokaphilitaet

Freitag, den 28. September 2007

Neologismus. Laut Google und Duden existiert dieses Wort nicht. Provoka- stammt von Provokation, -Philitaet stammt vom griechischen philos (Liebe zu Freunden, Familie und Geschwistern), was auch in Woertern wie Lipophilitaet (= Fettliebe, Eigenschaft eines Stoffes, die die Loeslichkeit in Fett angibt) und Hydrophilitaet (= Wasserliebe, Eigenschaft eines Stoffes, die die Loeslichkeit in Wasser angibt) steckt. Ich musste dieses Wort gerade erfinden, da ich einen Begriff brauchte um meine Stimmung und Gesinnung zum Ausdruck zu bringen.

Sollte dieses Wort – wider Erwarten – irgendwann einmal populaer werden, so hoffe ich, dass man das auf mich zurueckfuehren kann, so wie man es bei Emoticons auch jetzt noch (/wieder) kann:

19-Sep-82 11:44    Scott E  Fahlman             :-)
From: Scott E  Fahlman <Fahlman at Cmu-20c>
 
I propose that the following character sequence for joke markers:
:-)
 
Read it sideways.  Actually, it is probably more economical to mark
things that are NOT jokes, given current trends.  For this, use
:-(

Uebrigens ist das fast genau 25 Jahre her. Happy Birthday Emoticon.

BSD-Lizenz vs. GPLvX

Sonntag, den 23. September 2007

Ich frage mich schon seit einer Weile, unter welche Lizenz ich meine Software/meinen Quellcode stelle. Aber irgendwie renne ich andauernd gegen die Wand. Ich kann mich nicht zwischen der BSD-Lizenz und der GPL(v2/3) entscheiden. Beide haben ihre Vorteile. Ich wuerde gerne mal eure Meinung zu dem Thema hoeren. Eine Seite, durch die ich mich noch schlaengeln muss, aber die ich trotzdem fuer eventuell hinreich halte ist die hier:

http://www.softpanorama.org/Copyright/License_classification/index.shtml

Line-Line-Intersection

Freitag, den 21. September 2007

Viele Programmierer, die sich mit Geometrie beschaeftigen (haeufig Spieleprogrammierer) treffen auf das Problem: Line-Line-Intersection. Auch ich bin vor kurzem darauf gestossen und da ist mir aufgefallen, dass es nicht so einfach ist wie ich zuvor dachte. Nachfolgend werde ich meinen Loesungsweg mathematisch erlaeutern und dann mit C++ Quellcode anreichern.

Mathematische Herleitung

Gegeben sind zwei Strecken, die durch jeweils zwei Punkte P, Q definiert sind:

P1, Q1, P2, Q2

Eine Gerade durch die Punkte P und Q kann mit folgender Formel definiert werden:

g: A * x + B * y = C

Also habe ich zwei Geraden:

g1: A1 * x + B1 * y = C1
g2: A1 * x + B2 * y = C2

Bei dieser Form sind A, B, C wie folgt definiert:

A = Qy – Py
B = Px – Qx
C = A * Px + B * Qy

Um einen Schnittpunkt zu errechnen setze ich beide Geradengleichungen gleich. Zuvor multipliziere ich aber beide Gleichungen mit B1 bzw. B2, was beim Loesen spaeter von Vorteil ist.

A1 * B2 * x + B1 * B2 * y = C1 * B2
A2 * B1 * x + B1 * B2 * y = C2 * B1

Nun subtrahiere ich die zweite Zeile von der ersten und forme noch etwas um:

A1 * B2 * x – A2 * B1 * x + B1 * B2 * y – B1 * B2 * y = C1 * B2 – C2 * B1
=> A1 * B2 * x – A2 * B1 * x = C1 * B2 – C2 * B1

=> (A1 * B2 – A2 * B1) * x = C1 * B2 – C2 * B1 | / (A1 * B2 – A2 * B1)

=> x = (C1 * B2 – C2 * B1) / (A1 * B2 – A2 * B1)

Wenn kein Schnittpunkt existiert, ist der Nenner 0, also muss eigentlich nur ueberprueft werden, ob A1 * B2 – A2 * B1 = 0 erfuellt ist.

Spass mit C++

Nachdem ich die mathematische Seite auf ein Blatt Papier gekritzelt habe, baute ich daraus eine nette Funktion, mit den Argumenten A1, B1, A2, B2 des Typs Point[1]. Der Rueckgabetyp ist bool, da wir ja nur wissen wollen, ob die Strecken sich schneiden oder nicht.

bool Intersection::LineLine(Point A1, Point B1, Point A2, Point B2)

Jetzt folgen die Definitionen von A, B, C fuer die beiden Strecken A1B1 und A2B2:

double A_1 = B1.y - A1.y;
double B_1 = A1.x - B1.x;
double C_1 = A_1 * A1.x + B_1 * A1.y;
 
double A_2 = B2.y - A2.y;
double B_2 = A2.x - B2.x;
double C_2 = A_2 * A2.x + B_2 * A2.y;

Und dann lasse ich den Nenner (siehe oben) berechnen:

double determinator = A_1 * B_2 - A_2 * B_1;

Nun lasse ich den Nenner ueberpruefen:

if (determinator == 0)

Wenn der Nenner 0 ist, heisst das nicht, dass es keinen Schnittpunkt gibt, sondern dass es auch unendlich viele Schnittpunkte geben kann (die Geraden sind identisch). Also muss ich ueberpruefen, ob die Geraden parallel sind. Das mache ich, indem ich einfach die bekannten Punkte einsetze:

if (A_1 * A2.x + B_1 * A2.y == C_1 && A_1 * B2.x + B_1 * B2.y == C_1)

Wenn die Geraden gleich sind, heisst das noch lange nicht, dass die Strecken sich auch schneiden. Also muss das auch noch ueberprueft werden. Das mache ich, indem ich pruefe, ob die Laengen der Strecken laenger sind, als die Abstaende der Punkte A1, A2 und B1,B2:

Vector A1B1 = ((Vector) (B1 - A1));
Vector A2B2 = ((Vector) (B2 - A2));
Vector A1A2 = ((Vector) (A2 - A1));
Vector B1B2 = ((Vector) (B2 - B1));
 
if (A1A2.Length2() < A1B1.Length2() || B1B2.Length2() < A2B2.Length2())
{
    return true;
}

Ich verwende Length2(), also das Quadrat der Laenge, da Length ueber den Satz des Pythagoras die Laenge des Vektors berechnet. Length2 zieht im Gegensatz zu Length nicht die Wurzel, ist also schneller.

So jetzt nochmal zu dem Fall, dass ein Schnittpunkt gefunden wird: Er muss sich auf den Strecken befinden. Liegt er ausserhalb der Strecke, so ist er irrelevant:

Point S;
 
S.x = (B_2 * C_1 - B_1 * C_2) / determinator;
S.y = (A_1 * C_2 - A_2 * C_1) / determinator;
 
if (min(A1.x, B1.x) <= S.x && S.x <= max(A1.x, B1.x)
 && min(A1.y, B1.y) <= S.y && S.y <= max(A1.y, B1.y)
 && min(A2.x, B2.x) <= S.x && S.x <= max(A2.x, B2.x)
 && min(A2.y, B2.y) <= S.y && S.y <= max(A2.y, B2.y))
{
    return true;
}

Den zusammengesetzten Code gibt es hier: Intersection.cpp, Intersection.h.

[1] Die verwendeten Klassen Vector und Point habe ich schon vorher mal gepostet. Hier gehts zu den Klassen: Vektoren fuer C++ Programmierer

Stargate SG-1 und C#

Dienstag, den 18. September 2007

In der Folge S07E09 (Staffel 7 Episode 9) – Avenger gibt es eine Szene, in der Samantha Carter an einem Whiteboard einen “Virus fuer das Stargate Anwaehlprogramm” schreiben will. Man erkennt klar und deutlich was sie schreibt:

FileStream fout = new FileStream(outfile, FileMode.OpenOrCreate, FileAccess.Read);
fout.SetLength(0);
byte[] bin = new byte[4096];
long totlen = fin.Length;
long rdlen = // <-- an der Zeile schreibt sie in der Szene
 
// Create symmetric objects
SymmetricAlgorithm des = new Des_CSP();
// Create the storage
StoreCryptoStream store = new StoreCryptoStream(fout);

Mehr konnte ich leider nicht erkennen, da ihr Arm im Weg ist. Aber das fand ich sehr interessant. Vor allem, als ich dann feststellte, dass der Code tatsaechlich funktioniert und es einen Ausschnitt aus dem Quellcode darstellt, der es moeglich macht Daten zu verschluesseln oder steganografisch zu verstecken.

Ich googelte und stellte bemerkenswerte parallelen zum Quellcode auf der folgenden Seite fest (man vergleiche vor allem die Methode EncryptData(), in der sogar die Variablennamen uebereinstimmen):
http://mastercsharp.com/article.aspx?ArticleID=29&&TopicID=6

Sucht man nach StoreCryptoStream bei Google findet man nur die eine Webseite. Ich habe Koders und andere Codesuchmaschinen durchsucht, aber keine anderen Uebereinstimmungen gefunden. Also muessen die Autoren von Stargate sich tatsaechlich jemanden geholt haben, der C# beherrscht und darin sogar sehr gut zu sein scheint, da der Namespace System.Security.Cryptography nicht gerade haeufig verwendet wird und auch eher anspruchsvoller ist als andere Namespaces.

Imdb enthaelt bisher keine Informationen darueber.

Jetzt ist ALDI auch peinlich

Donnerstag, den 13. September 2007

ALDI hat einen Medionlaptop verscheuert, der den Bootsektorvirus Stoned.Angelina in sich traegt. Bei Golem gibt es mehr Informationen dazu. Echt krass.

Quelle: http://www.golem.de/0709/54738.html

Vektoren fuer C++ Programmierer

Mittwoch, den 12. September 2007

Es ist aetzend Spiele oder etwas anderes grafisches in C(++/#) ohne Vektoren zu programmieren. In C(++) gibt es leider keine Vektorfunktionen bzw. -methoden. Da ich das nun fuer ein Projekt in C++ brauchte, habe ich mir alles so zusammengesucht wie ich es brauche. Ich glaube es sind alle wichtigen Bestandteile (wie Kreuz-/Vektorprodukt, Vektor-Punkt-Multiplikation, Vektorlaenge, 2D und 3D und alle moeglichen Operationen) enthalten. Viel Spass damit.

Hier mal ein Auszug aus meinem aktuellen Projekt mit Vorher/Nachher-Beispiel:

Vorher:

/*
 * int x;
 * int y;
 * double xSpeed;
 * double ySpeed;
 */
this->x += time * this->xSpeed;
this->y += time * this->ySpeed;

Nachher:

/*
 * Point location;
 * Vector speed;
 */
this->location += time * this->speed;

Dateien umbenennen fuer Faule

Dienstag, den 11. September 2007

Viele kennen das: Man hat hunderte Dateien und muss sie alle nach einem Muster umbenennen. Ich hab ein bisschen herumgesucht, aber kein Programm war mir uebersichtlich und schlicht genug, also habe ich mal wieder die Keule geschwungen und dabei kam ein simpler Dateirenamer heraus. Ich bin gerade sogar so faul, sodass ich ihn einfach Renamer nenne. Lizenz gibts nicht. Wie so oft interessiert es mich nicht die Bohne, was andere damit machen. Wenn jemand den Quellcode haben moechte, dann gebe ich den natuerlich raus.

Mindestvorraussetzungen (ueberprueft):

  • Windows® 2000, 2003, XP, Vista
  • .NET Framework >=2.0
  • IQ >=90
  • 28 KB Festplattenspeicher

Und hier gehts zum Download: renamer.zip

Rockade im Sauerland

Samstag, den 1. September 2007

Nachdem ich heute um 5:43 Uhr aufgestanden bin und von 8:00-16:00 Uhr beim THW Dienst hatte, bin ich mit Babelduo und Stefan im Gepaeck zum Tobi ins Sauerland gefahren. Tobi hat uns gerade Spaghetti Bolognese serviert (das hatte ich heute Mittag schon beim THW…). Gleich fahren wir zur Rockade. Das ist irgend so ein unbekanntes OpenAir Festival im Sauerland. Da ich heute Fahrer bin darf ich nicht trinken, waehrend die Anderen um mich herum schon gut dabei sind. Ich bin mal gespannt wie das Festival gleich wird. Die einzige Band, die ich da kenne ist Sondaschule (aus Oberhausen) und die sind nicht wirklich gut, geschweige denn erfolgreich. Ich werde heute Nacht oder morgen mal schreiben wie es war.

Das Sauerland ist echt komisch…