You are currently browsing the category archive for the 'IT' category.

WordPress.com ist eine gute Sache, vor allem für Anfänger was Blogging oder Webklitsche im allgemeinen angeht. Doch die meisten einigermaßen ambitionierten Blogger kommen mit den konzeptbedingten Einschränkungen irgendwann an ihre Grenzen, so also auch ich.

Der Käse war so lieb mir auf  p-shuttle.de etwas Platz zu leihen, wo seit einigen Monaten nun mein eigenes WordPress tuckert. Bevor ich aber entgültig umzog, wollte ich erst einmal abwarten bis die Seite korrekt von Googles’ Spinnchen erfasst wird. Da alles soweit funktioniert und ich mein Blog in der neuen Form wohl behalte hier die neue Adresse, von mir, für euch:

>>mumpitz.p-shuttle.de <<

Bitte seid so nett und ändert die Adresse in eurem Blogroll ab, da ich die wordpress.com-Adresse zwar noch eine Weile leben lasse, jedoch ab jetzt nicht mehr aktualisieren werde.

Ich möchte mich abschließend formell bei den Machern von WordPress.com bedanken: es ist großartig wie solche Projekte es heute wirklich jedermann ermöglichen eine eigene Stimme im Web zu bekommen ohne sich mit Webspace, Domainredirection, Suchmaschinenoptimierung etc. auseinandersetzen zu müssen! Kudos!

Bis bald auf mumpitz.p-shuttle.de :)

Johannes

Ich arbeite ja im Moment sehr fleißig an meiner Grafikengine. Ein Problem über dass ich stolperte, erinnerte mich wieder daran wie wichtig es ist über die Sprache und die Bibliotheken mit denen man arbeitet Bescheid zu wissen. Diese Erfahrung möchte ich euch natürlich nicht vorenthalten :)

Schauen wir uns mal folgenden Versuchsaufbau an:

class Drawable{
public:
float position3f[3];
}

Irgendwo rufe ich nun auf: glLightfv(GL_LIGHT+light.index,GL_POSITION,light.position), wobei light natürlich von Drawable abgeleitet wird.

Das alles funktioniert so lange, wie ich den Code nicht folgendermaßen erweitere:

class Drawable{
public:
float position3f[3];
bool active;
}

Die Änderung führt dazu dass die OpenGL-Beleuchtung nicht mehr funktioniert. Idee warum?
Ein kleiner Tipp: Die Beleuchtung funktionierte wieder wenn ich active vor position deklariere.

Gelöst? Nicht schlimm, auch ich kam nicht auf Anhieb darauf.
Die Lösung des Ganzen erfordert Hintergrundwissen sowohl in OpenGL als auch in Speicherverwaltung:

  1. OpenGL arbeitet wenn es um Positionierung (= Verschiebung) geht mit affinen Abbildungen (3×3 Matrix + Verschiebung), was durch die Nutzung von 4×4 Matrizen umgesetzt wird. Jetzt schnackelts. Ich nutze einen Vektor mit 3 Komponenten, OpenGL will aber 4. Die Vierte (sogenannte w-)Komponente ist eigentlich überflüssig, kann aber als Flag genutzt werden(wie in diesem Fall). Ich gehe mal davon aus dass openGL auf irgendeine Art eine 0 aus dem bad-pointer machte, so genau will ich das gar nicht wissen.
  2. Die Variable position3f liegt auf dem Stack. Durch das übergeben des Pointers an glLightfv wurde für das vierte Element „ins Leere gegriffen“. Sicher warf dies irgendwo intern eine Exception, aber openGL verzichtet in solchen Fällen vollständig auf Funktionsrückgaben – Warum auch immer o.O
  3. Jedenfalls. Durch Erstellen einer zweiten Variable auf dem Stack war der Bereich nach der 3. Float-Komponente nicht mehr leer, ganz fatal: Er war sogar von einem anderen Datentyp belegt. Und OpenGL liefert keinen Fehlercode, nein, die ganze Beleuchtung schaltet sich einfach aus.

Ich behob das Ganze natürlich damit dass ich position um eins vergrößerte. Kudos an Prof. Hahn und Prof. Kriha für die 1A-Vorlesungen in dem Bereich. An solchen Fehlern wird man ohne eingehendes Wissen über Kompiler und Sprache verzweifeln. Darum mein Aufruf:

Leute guckt euch gut an mit was ihr arbeitet!  Im Java-Sandkasten mag man sich austoben können, aber gerade in C hat man kaum eine Chance sauber zu programmieren, wenn man die Konzepte nicht versteht!

PS.: Bevor Missverständnisse aufkommen: C ist natürlich trotzdem (oder gerade deshalb) viel cooler als Java :)

Als ich mich heute auf mein Projekt einstellen wollte, mich reflektierend in meiner mitgenommenen schwarzen Cherry Tastatur verlor und nachsinnend in einer Welt von Templates, Makros und Funktionspointern zu driften drohte, fiel mein Blick auf einige unauffällige Tasten auf eben jener Tastatur. Wie wunderlich, waren diese doch nahezu unberührt von der vielzahl von Ablagerungen, welche sich doch sonst überall auf den Tasten breit machten. Nur eine dezente Staubschicht hatte sich sanft um die Objekte meiner Aufmerksamkeit gelegt:

Das man mit der PRINT-Taste unter Windows Screenshots erzeugt gilt als Common Knowledge, aber wusstet ihr dass die Kombination [ALT]+[PRINT] einen Screenshot des aktiven Fensters erzeugt? Sehr geschickt für Blogger.

Die SCROLL-LOCK-Taste, (oder einfach Rollen) erfüllte in längst vergangenen Zeiten die Funktion des Scroll-Rades, man konnte also den Bildausschnitt mit [ROLLEN]+[PFEIL OBEN/UNTEN] bewegen ohne den Cursor verschieben zu müssen. Die gleiche Funktion unterstützt das Visual Studio, allerdings nicht mehr mit der ROLLEN-Taste, sondern mit [STRG], sehr geschickt wenn man beim Programmieren keine Lust hat immer zwischen Tastatur und Maus zu wechseln.

Heute ist diese Taste unter Windows im Grunde völlig unsinnig geworden.  Mit [STRG]+2x[ROLLEN] lässt sich unter Windows XP zwar noch ein Memory Dump generieren, allerdings ist dies nur für Fehleranalysen nötig und die Funktion standardmäßig deaktiviert, in Vista soll diese Funktion gar nicht mehr existieren.

Jemand sollte sich die Mühe machen auszurechnen wieviel Geld gespart würde wenn die Taste mitsamt der damit verbundenen LED von den Tastaturen verbannt würde.

Die PAUSE/UNTBR-Taste war einmal dafür da das laufende Programm abzuschießen.

Ich erinnere mich an meine VB-Zeit (hach ja, als Programmierung noch so einfach war…), damals ließ sich mit [STRG]+[PAUSE] die Ausführung abbrechen, ein Relikt aus der DOS-Basic Zeit. Heute funktioniert das nur noch bei der Ausführung von Batches.
Gemeinerweise wird diese Abschießen-Funktion unter Linux durch die Kombination [STRG]+[C] erfüllt, ein hinterhältiger Kniff um Windows-User zu verwirren.

Für alle interessant: der BIOS-Start lässt sich noch heute mit einem Druck auf [PAUSE] pausieren und mit erneutem Druck wieder fortgesetzt werden.

Damit ist auch dieses Thema abgehandelt und der geneigte Leser hoffentlich wieder ein wenig klüger geworden :)

Es gibt kaum einen Rechtsbereich der für eine so breite Masse relevant ist und über den gleichzeitig so viel halbwissen herumschwirrt: Das deutsche Urheberrecht, kopieren von Medien und Nutzung von Tauschbörsen.

Da ich mir selbst über einige Sachen nicht klar war (und mich ein wenig von den anstehenden Klausuren ablenken musste) habe ich mir einige Zeit genommen und das Internetz nach Informationen von offizieller Seite durchsucht. Um ein wenig Klarheit in das Rechtsgewuschel zu bringen hier einige Erkenntnisse:

  • Generell
    liegt Recht liegt auf der Seite des Urhebers, das heißt: Wenn es zu irgendetwas noch keine gesetzliche Schrankenbestimmung gibt ist es verboten. Diese Schrankenbestimmungen interessieren den Bürger natürlich am meisten.
  • Privatkopie
    Da die Verbreitung von urheberrechtlich geschützten Inhalten in Haushalten irgendwann nicht mehr kontrollierbar war, wurde das Recht auf Privatkopien eingeführt, dafür allerdings die Urheberabgaben eingeführt (das heißt für euren Brenner habt ihr ca. 10€ an die Musik-, Film- und Verlagsindustrie abgegeben).  Der Bundesgerichtshof legt die Privatkopie so aus dass bis zu 7 Kopien im kleinen privaten Kreis herrumschwirren dürfen, im digitalen Umfeld jedoch weniger.
    Verboten sind Kopien aus offensichtlich rechtswidrig hergestellten Vorlagen und neuerdings auch aus offensichtlich rechtswidrig öffentlich zugänglich gemachten Vorlagen. Letzterer Zusatz wird allerdings kaum Auswirkungen haben, da sich sowas im Internet nur sehr schwer nachvollziehen lässt.
    Die Privatkopie darf sowohl analog als auch digital angefertigt werden.
  • Gemeinsam genutzter Anschluss
    Auch wenn die Medienindustrie versucht zu verunsichern:
    Es besteht keine Störhaftung. Das heißt wenn ein Mitnutzer illegal Musik verbreitet besteht in der Regel keine Haftung, auch wenn die Abmahnung an den Eigner adressiert ist.
  • Kopierschutz
    Kopiergeschützte Medien dürfen nicht kopiert werden. Das betrifft einige im Umlauf befindlichen Audio-CDs und fast alle DVDs.
    Allerdings(1): Interessanterweise gilt diese Regelung nicht für Computerprogramme(!).
    Das bedeutet: Von Computerspielen darf man trotz SecureRom und SaveDisk Sicherungen erstellen. Read the rest of this entry »

Vor kurzem kam ich bei einem Java-Projekt zum ersten Mal in die Situation externe Pakete einbinden zu müssen. Das sollte eigentlich auch gar kein so großes Problem sein, jedoch machten die zusätzlichen entstandenen Abhängigkeiten Probleme. Genau genommen musste ich letztendlich 4 zusätzliche Pakete finden und herunterladen, wobei innerhalb dieser Pakete wiederum probleme mit den unterschiedlichen Versionen entstanden. Man kann sich das Chaos also gut vorstellen.

Es sei X Anbieter eines freien Java-Paketes zum Automatisieren von Webseitenzugriffen. Y sei Anbieter eines extern Abhängigen Pakets zum verarbeiten der Log-Ströme. Nun stellt X die Entwicklung ein, während in Y eine revolutionäre Neuerung implementiert wird, die die Hälfte der Klassen des Pakets überflüssig macht. Ab Version 1.3.24 werden diese Klassen also einfach gelöscht. Noch besser: X nutzt in einigen seiner Klassen das com.*-package, in dem der Programmierer wohl wundersame und aufregende Klassen fand.

Fakt ist dass eben dieses Paket von Sun NICHT für den öffentlichen Gebrauch bestimmt ist, es enthält nur Klassen die sich in der Testphase befinden. Durchlaufen besagte Klassen diese Testphase erfolgreich, werden sie in die bekannten java.* bzw javax.*-Pakete geschoben. Wer das com.*-Paket nutzt kann also darauf wetten dass früher oder später die genutzte Klasse weg ist. Das selbst Entwickler wie Apache dies nicht kapieren, ist traurig.

Warum schreibe ich diesen Artikel?

  1. Wenn offene Klassen verwendet werden, bindet diese in euer fertiges Paket ein!
  2. Falls ihr doch nicht im Stande sein solltet externe Abhängigkeiten einzubinden bzw. falls lizenzielle Einschränkungen vorliegen, packt die VERSIONSNUMMER der externen Abhängigkeiten in die Dokumentation. Und betet dass der Hersteller der Abhängigkeiten ein Archiv früherer Versionen führt.
  3. Schmeißt nicht einfach eine releaste Klassenstruktur um, und wenn dann dokumentiert das richtig.
  4. Verwendet keine com.* Klassen. Falls das doch nötig sein sollte, siehe unten.

Da ich in einem anderen Projekt eben doch auf eine com.*-Klasse zurückgreifen musste (durchsichtige Fenster in AWT), hier ein Tipp falls ihr auch in so eine Situation kommt:

system.getProperty(„java.version“)

…gibt einen String mit der Version der JRE zurück. Nutzt ihr ein com.*-Paket, so checkt die Version und packt das Ganze in eine Bedingung.

Für alle die noch nichts davon mitbekommen haben:http://image.ebuyer.com/UK/R0143036-01.jpg

Der „Neural Impuls Actuator“, kurz NIA ist „the new Thing“ in der Spiele-HW und soll es ermöglichen Spiele mit den Gedanken zu steuern. Maus und Tastatur wären damit überflüssig. Klingt abstrus,  ist aber durchaus ernst gemeint und, man kann es kaum glauben, preislich massenkompatibel (ca. 170€).

Das ganze erinnert ein Wenig an die Mitte 90er, als viele bunte bewegte Bilder auf den Röhrenmonitor fanden und die IT-Welt ein bisschen zukunftsgeil war, ihr wisst schon, Virtual Reality und so, handliche Caves, kopfwehschwangere3D-Brillen und, Klassiker, der Cyberhelm:

Wundervoll, oder? Wär hätte damals gedacht dass wir 15 Jahre später immer noch nicht unseren Cyberhelm zur LAN-Party nehmen würden? o.O

Naja ist ja auch egal, jetzt haben wir ja NIA. Um den begeisterten Leser wieder runterzuholen: Die Maus benutzt man besser doch noch, der Einstieg kann wohl etwas deprimierend sein und mit Gedankensteuerung hat das Ganze wenig zu tun. Vielmehr werden Muskel- und Nervenimpulse auf der Haut überwacht. Dadurch werden Unterhaltungen während man Spielt sehr kompliziert, ein riesen Problem da parallel zum Spiel meist TS genutzt wird.
Ach ja, ein Kontra noch, beim Spielen sieht man selten bescheuert aus, siehe die Videos unten.

Potential hat das Ganze sicherlich nichtsdestotrotz:
In einem Testmatch gegen Klaus Widmann, dem aktuellen UT3-Weltmeister erzielte NIA-Entwickler Klaus Schuetten immerhin ein respektables Ergebnis von 5:12.
Ohne eine Ahnung von Shootern zu haben (sein Argument für NIA war er käme beim Spielen mit den vielen Tasten einfach nie zurecht o.O )

Wer sich gerne selbst ein Bild machen möchte, möge hier, hier und hier klicken.
Ein Interview gibts auch hier.