OpenGL Injektor nun veröffentlicht!

Hochgeladen auf GitHub

Ich habe bereits einige Male über dieses Projekt geredet weil es mich weiterhin fasziniert, dass etwas derartiges möglich ist: Man kann sich (in diesem Fall unter Linux, aber eigentlich generell) beliebig in andere Programme hängen, Funktionen überschreiben und auf diese Weise den OpenGL Context stehlen und mit eigenen Bildern erweitern! Aus Interesse entstand ein Projekt, um sich in OpenGL Programme einzuklinken und eigene Daten anzuzeigen, die über die Grafikbibliothek Cairo gerendert werden sollten. Es sollten in diesem Ansatz beliebige Grafiken möglich werden, was mit dieser Grafikbibliothek auch sehr gut möglich geworden ist.

Der Rendering-Lag ist zwar etwas hoch, da nichts tiefer für diese Proof-of-Concept Arbeit optimiert wurde, aber dennoch ist diese Variante, sich in andere Programme zu hängen, eine spannende Möglichkeit. Später kann man diesen Ansatz natürlich auch noch erweitern, falls sich andere Möglichkeiten auftun.

Ich hoffe, jemand findet die Möglichkeiten hinter derartigen Tricks ebenfalls interessant und kann etwas mit diesem Projekt anfangen!

Liebe Grüße,
Max

Script zum automatischen Testen eines Programms mit festgelegten Inputs und Outputs

Um in Systems Programming automatisch Tests der letzten C Exercise durchführen zu können, wurde ein kleines Script praktisch, welches automatisch die eigene Binary für alle input.txt Dateien überprüft. Man legt es neben zwei Ordner namens „input“ und „output“, welche die passenden Dateien für die Tests beinhalten (wie im gegebenen Beispielordner)

# Aufruf
./test.sh build/minesweeper

Das Script ist hier in einem eigenen Gist enthalten, im folgenden als Auszug dabei und als Archiv auch als Datei an diesen Artikel angehängt.

#! /usr/bin/env bash

# This test script tries all inputs and compares them with
# their respective outputs. Supply it with
# the name of the executable.

name=$1

# Color Constants
SUCCESS_COLOR='\033[0;32m'
ERROR_COLOR='\033[0;31m'
NO_COLOR='\033[0m'

DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null && pwd )"

if [ "$#" -ne 1 ]; then
    echo "Must supply path to minesweeper executable!"
    exit
fi

if [[ ! -x "$name" ]]; then
    echo "The file must be the executable!"
    exit
fi

echo "Running tests for binary in \"$name\"."
echo "Path of tests: \"$DIR\""

for file in $DIR/input/*.txt; do
    testname="${file##*/}"
    outputname="${testname/input/output}"

    expected=$(cat $DIR/output/$outputname)
    result=$($name $file)

    (diff <(echo "$result") <(echo "$expected") && printf "${SUCCESS_COLOR}Test in $file ran successful! $NO_COLOR \n") || printf "${ERROR_COLOR}Test in $file failed! $NO_COLOR\n"
done

CMake Templates veröffentlicht auf GitHub

Ich habe in den letzten Sommerferien zwei kleine CMake Templates geschrieben, die eine Vorlage zur Verwendung dieses Build-System Generators für noch unerfahrene Programmierer/Innen liefern soll. Wenn man CMake verwendet, verschafft man sich ohne viel Aufwand viele Möglichkeiten, die man nicht außer Acht lassen sollte. Die wohl größte Möglichkeit ist die vollständige Integration in IDEs wie dem Qt Creator, welche die Entwicklungserfahrung von C/C++ Code stark verbessern können.

Da ich mir jetzt gedacht habe, diese Vorlagen könnten anderen Leuten ebenfalls sehr nützlich sein, habe ich sie jetzt auf GitHub unter der MIT Lizenz veröffentlicht! Ich hoffe, jemand findet Nutzen und Spaß an dem kleinen Projekt und, dass es anderen Lernenden helfen kann, etwas mehr in die alte Welt von C/C++ Native Programming hineinzukommen.

Viel Spaß also mit dem Projekt und viele Grüße,
Max