Klickmaschine

Habe mal, ohne dass es benötigt würde, aus Spaß, eine Klickmaschine gebaut.

Diese Klickmaschine ruft jede Minute die angegebene Webseiten-URL auf um mögliche Besucherzähler zu erhöhen. Dabei werden Besucherzähler-Schutzmechanismen jedoch nicht umgangen.

Das Programm benötigt das .NET Framework Version 4.

DOWNLOAD Version 0.1

Standardbibliothek für Robot Karol

Habe heute anlässlich des Einstiegs in Robot Karol im Fach “Anwendungsentwicklung” eine kleine aber feine Standardbibliothek mit allerlei nützlichen Anweisungen und Bedingungen geschrieben. Dabei sind zum Beispiel Anweisungen zum Drehen in eine bestimmte Himmelsrichtung, Bedingungen ob man in einer Ecke ist und natürlich Helfer wie “SchrittBisWand”.

Eine ausführliche Liste aller Anweisungen und Bedinungen liegt dem Paket als “referenz.txt” bei.

Viel Spaß beim “programmieren” (falls man das bei Karol so nennen kann).

DOWNLOAD Version 0.1

SysCP auf Froxlor upgraden

Habe heute das auf meinem Server eingesetzte SysCP auf den Froxlor-Fork geupgradet.

Dazu entschlossen habe ich mich vorallem wegen der vielen kleinen Verbesserungen die mit Froxlor hinzu kommen, von den großen Neuerungen wie Unterstützung für zusätzliche PHP-Module mache ich keinen Gebrauch.

Nun zum Upgrade sei gesagt, dass die aktuelle Version von Froxlor (0.9.x) vollständig abwärtskompatibel zu den letzten SysCP-Versionen ist. Wer also eine aktuelle SysCP-Installation hat, dürfte keine Probleme mit dem Upgrade bekommen. Wer sich unsicher ist, kann mit mysqldump ein backup der SysCP-Datenbank anlegen.

Zuerst wird die aktuelle Froxlor-Version als Tarball heruntergeladen (ein Upgrade wird vom Repository aus wahrscheinlich nicht funktionieren) und in das Verzeichnis in dem SysCP liegt entpackt, sodass man hinterher einen syscp- und einen froxlor-Ordner hat.

cd /var/www # oder wo auch immer
wget http://files.froxlor.org/releases/froxlor-latest.tar.gz
tar -xf froxlor-latest.tar.gz

Danach wird die alte Konfigurationsdatei von SysCP nach Froxlor kopiert. Dadurch wird das Froxlor-Setup umgangen und die meisten Einstellungen werden übernommen, um die restlichen kümmern wir uns später. Auch benennen wir den SysCP-Ordner um, und linken auf Froxlor, damit alte Browser-Bookmarks auf das neue System zeigen.

cp syscp/lib/userdata.inc.php froxlor/lib/userdata.inc.php
mv syscp syscp_old
ln -s froxlor syscp

Danach besucht man seine neue Installation unter http://SERVER_IP/froxlor/ oder eben wie zuvor im Unterordner /syscp/. Froxlor weist einen darauf hin, dass sich ein Administrator einloggen muss um das Upgrade ab zu schließen, also loggt man sich mit einem Administrator-Account ein. Die Upgrade-Konfiguration sollte man sorgfältig lesen und auswählen was man benötigt. Zum Beispiel können beim aktivieren der Domain-Wildcards ungewollte Nebeneffekte auftreten.

Abschließend wird in /etc/cron.d/ der SysCP-Cronjob gelöscht oder deaktiviert und der Froxlor-Cronjob, vorzugsweise in der Datei froxlor, wie folgt eingetragen.

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
*/5 * * * *     root    /usr/bin/php5 -q /var/www/froxlor/scripts/froxlor_master_cronjob.php

Dann noch den CRON-Dienst neustarten, damit die Änderungen auch angenommen werden.

/etc/init.d/cron restart # bei SysVInit (sollte immer funktionieren)
service cron restart # bei Upstart (ab Debian Squeeze oder Ubuntu 10)

Dann ist man auch schon fertig.

Viel Erfolg!

htop für Linux-VServer Gäste

Da einem htop in einem Linux-VServer Gastsystem die Prozessorauslastung zeigt, welche von allen Benutzern auf dem Wirtssystem generiert wird, habe ich kurzerhand eine eigene Version geschrieben.

In dieser Version gibt es das neue “Process CPU”-Meter, welches lediglich die vom Gastsystem produzierte CPU-Durchschnittsauslastung anzeigt. Zeigt das Meter also 100% an, so benützt der eigene VServer die gesamte verfügbare Rechenleistung.

htop-lvs.tar.gz

Hoster, welche virtuelle Server auf basis von Linux-VServer anbieten, sind z.B. netcup.

Den Sourcecode gibt’s unter svn://doenemeier.de/ahtop/branch/htop-lvs/ .

Viel Spaß!

Internet-Jitter beheben

Dieser Post ist ein kleines Tutorial, wie man seinen Jitter los wird.

Zu erst beschäftigen wir uns mit einer normalen kabelverbundenen Verbindung unter Windows. Windows legt von anfang an einige Dienste auf eine Internet- oder Netzwerkverbindung, einige davon sind Sinnvoll, andere weniger.

You’ll find services like

  • “Client für Microsoft-Netzwerke”
  • “Datei- und Druckerfreigabe für Microsoft-Netzwerke”
  • “QoS Paketplaner”
  • “Antwort für Verbindungsschicht-Topologieerkennung”
  • “Internetprotokoll Version 4/6 (TCP/IP)”

Ich habe die guten grün und die schlechten rot markiert. Wie man sieht ist der QoS-Paketplaner der einzige böse Bub. Der Dienst ist dazu da um die zur verfügung stehenden Bandbreite gleichmäßig an Programme zu verteilen, was dazu führen kann, dass Programme die viel Bandbreite benötigen (Onlinespiele, DL-Manager) nur wenig bekommen und dadurch anfangen zu “jittern”. Dieser Dienst ist nur auf langsamen Internetverbindungen von vorteil, da dann verhindert wird, dass Programme die Leitung blockieren. Ab Internetverbindungen von 6 MBit hat man dieses Problem nurnoch in den seltensten Fällen und der Dienst wird überflüssig.

ACHTUNG! Den QoS-Paketplaner nicht auf einer WLAN/WiFi-Verbindung deaktivieren!

Um Jitter mit einer WLAN/WiFi verbindung zu reduzieren kann man nicht viel tun. Es hilft an einem Ort mit sehr guten Empfang zu sein und der einzige WLAN/WiFi-Benutzer zu sein. Ansonsten ist die einzige wirkliche Hilfe eine Kabelverbindung.

Ich hoffe das ist dem ein oder anderen eine Hilfe, viel Glück.

Quandary 3.4 für Minecraft 1.7 & 1.7.3

Da ich das neue Quandary 4 texture pack nicht so ansprechend finde habe ich nun alle neuen Items in endsprechendem Design in Quandary 3.4 gebackported.

Quandary 3.4 with all new items, Minecraft 1.7 & 1.7.3 ready! (Download link below images)

» DOWNLOAD «

DXVA Hardwarebeschleunigung im Windows Media Center/Player

DXVA (DirectX Video Acceleration) nutzt die neueste Hardwarebeschleunigung zur wiedergabe von H.264 und VC1 Codecs, was vorallem auf langsameren Systemen einen enormen Performanceschub gibt. Leider ist diese Technologie ohne weiteres nur mit Media Player Classic HC verwendbar und fehlt im Windows Media Player.


FFMPEG schafft dem Abhilfe. Ich empfehle hierfür das “K-Lite Mega Codec Pack“, welches nicht nur jede menge aktueller Codecs sondern auch Konfigurationstools mitbringt.

Nach erfolgreicher Installation ruft man zunächst den Win7DSFilterTweaker aus dem Tools-Order im K-Lite-Startmenü-Order auf, geht in Preferrec Decoders und wählt ffdshow (DXVA) bei H.264 und VC1. Danach startet man den ffdshow DXVA video decoder aus dem Configuration-Ordner und aktiviert alle DXVA Codecs unter Hardware acceleration. Zuletzt alles speichern und Videobeschleunigung genießen!

Viel Spaß!

Trigonometrie und Projektion mit C#

Bei meinem aktuellen und umfangreichen Projekt “Galaxy War Commander” sind zahlreiche Trigonometrieverfahren unverzichtbar. So sind das errechnen von Himmelsrichtungen, Objektverschiebungen, Objektüberschneidungen, Projezieren sowie Unprojezieren zwischen 3D und 2D essenzielle bestandteile des Spiels.

public static bool Intersect
(Vector2f Pos1, float Rad1, Vector2f Pos2, float Rad2)
{
    float D = (float)(
        Math.Sqrt(((Pos1.X - Pos2.X) * (Pos1.X - Pos2.X))
        + ((Pos1.Y - Pos2.Y) * (Pos1.Y - Pos2.Y))));
    if (D <= (Rad1 + Rad2)) return true;
    return false;
}

Zeigt den Code, welcher verwendet wird um heraus zu finden ob zwei Kreise sich überschneiden. Durch vergleichen von Entfernung der beiden Kreismittelpunkte und der Summe der Radi ergibt sich ein eindeutiges Ergebnis.

public static Vector2f Reposition
(Vector2f Pos, float Ang, float Hyp)
{
    float r = Ang * (float)Math.PI / 180.0f;
    float a = (float)(Math.Sin(r)) * Hyp;
    float b = (float)(Math.Cos(r)) * Hyp;
    return new Vector2f((Pos.X + b), (Pos.Y + a));
}

Verschiebt einen Punkt in die gegebene Himmelsrichtung Ang mit der Entfernung Hyp. Hier bediene ich mich dem rechtwinkligen Dreieck in dem ich durch die Katethenfunktionen die X sowie Y Verschiebung errechnen kann.

private Vector3f unproject2Dto3D(Vector3 Pos2D)
{
    Matrix4 finalMatrix;
    Vector4 _in = new Vector4(Pos2D, 2.0f);
    Vector4 _out;
    float[] view = new float[4];
    GL.GetFloat(GetPName.Viewport, view);
 
    Matrix4 modelMatrix = this.ModelView;
    Matrix4 projMatrix = this.Projection;
    Matrix4.Transpose(ref modelMatrix, out modelMatrix);
    Matrix4.Transpose(ref projMatrix, out projMatrix);
 
    finalMatrix = Matrix4.Mult(modelMatrix, projMatrix);
    finalMatrix.Invert();
 
    _in.X = (_in.X - view[0]) / view[2];
    _in.Y = (_in.Y - view[1]) / view[3];
 
    _in.X = _in.X * 2.0f - 1.0f;
    _in.Y = _in.Y * 2.0f - 1.0f;
    _in.Z = _in.Z * 2.0f - 1.0f;
 
    _out = Vector4.Transform(_in, finalMatrix);
    if (_out.W == 0.0)
        throw new InvalidOperationException("_out.W went 0!");
 
    Vector3f Out = new Vector3f(
        (_out.X / _out.W),
        (_out.Y / _out.W),
        (_out.Z / _out.W)
    );
 
    return Out;
}

Dieser Code unprojeziert Bildschirmkoordinaten auf 3D Koordinaten ohne auf eine spezielle Y oder Z ebene zu Zielen. Dabei wird, entgegen der Projektion, der Bildschirmpunkt anhand der invertierten Ergebnismatrix aus der multiplikation der ModelView- sowie Projektions-Matrix transformiert. Zu beachten ist auch das die per GL.GetFloat() ausgelesenen Matritzen in die Row-Major form umgewandelt werden müssen.
Um den unprojezierten Punkt nun auf eine Ebene zu versetzen auf der er verwendet werden kann unprojezieren wir die gleichen Bildschirmkoordinaten zwei mal mit unterschiedlicher virtueller Tiefe, was uns zwei Punkte gibt durch welche wir eine dreidimensionale Linie ziehen können. Anhand dieser Linie ist es dann möglich den unprojezierten Punkt auf der gewünschten Ebene zu errechnen.

private Vector3 unproject2Dto3D
(Vector2f Pos2D, float TargetY)
{
    Vector3f near = unproject2Dto3D(
        new Vector3(Pos2D.X, Pos2D.Y, 0.0f));
    Vector3f far = unproject2Dto3D(
        new Vector3(Pos2D.X, Pos2D.Y, 10.0f));
 
    float dist = VectorHelper.Distance(near, far);
 
    float u = -near.Y / (far.Y - near.Y);
 
    float ex = near.X + (far.X - near.X) * u;
    float ez = near.Z + (far.Z - near.Z) * u;
 
    return new Vector3(ex, TargetY, ez);
}

Bei den gezeigten Beispielen wurden Klassen und Funktionen des OpenToolkit zur hilfe genommen um die Masse an Daten effizienter speichern zu können.