19 April 2015

Videos per SourceReader der MediaFoundation lesen

Mein letzter Beitrag auf dieser Seite hatte das Schreiben von Videos per Media Foundation zum Thema, in diesem hier geht es entsprechend um das Lesen. Auch hier habe ich mich an die Vorlagen von Microsoft gehalten, beispielsweise dieses kurze Tutorial [1]. Die Klasse SourceReader der Media Foundation ist hierbei Dreh- und Angelpunkt. Mit ihr kann man eine neue Video-Datei anlegen und entsprechend alle Video-Frames einzeln übergeben. Alles nichts weltbewegendes, letzten Endes hat es mir aber trotzdem ein paar Tage gekostet, die Sache ordentlich zum Laufen zu kriegen. Wer denkt auch daran, dass Alpha-Werte vom SourceReader ignoriert werden? Weiterlesen

12 April 2015

Videos per SinkWriter der MediaFoundation schreiben

Aktuell arbeite ich in Vorbereitung für ein kommendes (Hobby-)Projekt wieder verstärkt mit der Media Foundation von MS. Erster Schritt war nun, per SinkWriter Videos direkt aus der 3D-Ansicht von Seeing# heraus schreiben zu können. Der zweite Schritt, Videos auch wieder auszulesen, ist noch in Arbeit [1]. Der SinkWriter ist eine Klasse der Media Foundation, welche dazu verwendet werden kann, von der Anwendung generierte Bilder direkt in eine Videodatei zu schreiben. Soll ein Video also etwa 30 Frames pro Sekunde haben, so kann die Anwendung eben diese 30 Frames pro Sekunde erzeugen und an den SinkWriter übergeben. Mein aktueller Stand ist damit der, dass ich direkt aus dem 3D-Rendering heraus nebenbei ein Video schreiben lassen kann. Weiterlesen

5 April 2015

Parameterprüfungen zur Laufzeit

Programmierfehler sollen auffallen, und zwar so bald wie möglich! So banal, wie dieser Satz klingt, so leicht drückt man sich um das Kernthema herum. Ich kann mich noch gut daran erinnern, wie ich früher mit den Gedanken entwickelt habe: Auslösen von Exceptions vermeiden, Aufpoppen von Fehlermeldungen vermeiden, … Getrieben von diesen Vorsätzen programmiert man Methoden beispielsweise so, dass im Fehlerfall ein Default-Wert zurückgegeben wird, welcher sicherstellen soll, dass das Programm halt doch noch irgendwie weiterläuft und niemand etwas merkt. Im Extremfall tauchen leere Catch-Blöcke auf oder es wird (wenigstens) in eine Protokolldatei reingeschrieben, in die sowieso nie jemand reinschaut. Zunächst einmal hat es ja etwas Gutes, dass Programm stürzt nicht ab, wirkt sogar stabil. Aber… irgendwann wird man von der Zeit eingeholt und man hat ein echtes Problem, die tatsächlichen Fehler im Hintergrund zu finden und auszumerzen. Weiterlesen

3 April 2015

Der Messenger in Seeing#

In Vorbereitung für ein neues Spiel habe ich heute die Kern-Logik von Seeing# an ein paar Stellen erweitert. Wichtigster Punkt dieser Tage ist der Messenger, welcher in den Klassen von Seeing# als SeeingSharpMessenger bezeichnet wird. Ursprünglich habe ich mich bei dem Konzept etwas vom EventAggregator des Prism-Frameworks inspirieren lassen [1]. Grundsätzlich geht es darum, eine gemeinsame Klasse zu haben, an der sich Ereignis-Empfänger registrieren können, um so Ereignisse von beliebigen Quellen der Anwendung zu empfangen, ohne diese Quellen selbst zu kennen. Bei Seeing# habe ich dieses im Grunde sehr einfache Prinzip hauptsächlich dahingehend erweitert, damit es besser mit verschiedenen Threads innerhalb des Programms umgehen kann. Weiterlesen

31 März 2015

Von MSTest nach xUnit.net

Das in Visual Studio integrierte Testframework von Microsoft verwende ich nun bereits seit zig Jahren – wenn ich mich richtig erinnere seit Visual Studio 2008. Im Grunde war ich meistens auch zufrieden damit. Performance war jetzt nicht schön, aber für meine Anwendungsfälle auch kein Problem. In den letzten Wochen/Monaten habe ich mich aber dazu entschlossen, nun endgültig auf xUnit umzusteigen. Warum? Das offensichtliche ist schon mal, dass von offizieller Seite nix mehr bei MSTest passiert. Weiterhin wird die Performance bei der steigenden Anzahl meiner automatischen Tests immer mehr zum Problem. Die Möglichkeit zur Parametrierung von Testfällen ist für mich kein Must-Have, aber auch dieses Feature macht xUnit schon interessant. Gestern und heute habe ich die Umstellung entsprechend gemacht und bin überrascht, wie wenig Arbeit das letzten Endes gemacht hat. Weiterlesen

19 März 2015

Einstiegs-Tutorial für Seeing#

SeeingSharp TutorialSeitdem ich den Code auf Github hochgeladen habe, bastle ich daran auch relativ viel rum. Ziel ist für mich aktuell, nicht nur einen Haufen Quellcode-Dateien auf Github zu haben, stattdessen sollen auch einige Einstiegshilfen und Wiki-Einträge verfügbar sein, dass sich andere Interessenten möglichst einfach einarbeiten können. Der erste Schritt zu diesem Ziel ist ein kleines Einstiegstutorial bestehend aus vier C#-Projekten, jeweils angelegt als Windows Store Apps. Warum jetzt genau Windows Store war für mich erst einmal Nebensache, wichtig und für alle Plattformen gleich ist der Aufbau der Szene, die Konfiguration der Kamera, die Definition von Animationen oder die Suche nach Objekten unterhalb des Maus-Cursors. Weiterlesen

8 März 2015

3D-Engine Seeing# goes OpenSource #2

Pallet-Sample-SmallEndlich erledigt, heute früh habe ich Seeing# zusammen mit dem Quellcode von RK 2048 auf GitHub unter diesem Link hochgeladen [1]. Wie im letzten Post geschrieben, steht der Code unter GPLv3 und kann somit von jedem frei eingesehen, verwendet und modifiziert werden, sofern man sich an die Bedingungen der GPL hält. Für mich soll die Library in Zukunft als Basis für weitere Hobby-Entwicklungen, meine Vorträge/Artikel und für Posts auf dieser Homepage dienen. Weiterlesen

1 März 2015

3D-Engine Seeing# goes OpenSource

Screenshot SeeingSharp-BeispielSeit einer ganzen Weile schiebe ich das schon vor mir her: Das Grundgerüst, welches ich die letzten Jahre für eigene Test-Entwicklungen, kleine Spiele etc. verwendet habe, möchte ich als OpenSource bereitstellen. Die Feature-Liste kann sich hierbei sehen lassen: Integration Direct3D/Direct2D, Integration in WPF/Win.Forms/WinRT, hohe Parallelisierung (Multithreading), Software-Rendering, Unterstützung mehrerer Grafikkarten und noch vieles mehr. Nun, da ich mein Studium im Januar dieses Jahres abgeschlossen habe, kann ich mich nun um das Thema OpenSource kümmern. ABER: Ganz so einfach wie „ich lads einfach mal hoch..“ ist es leider nicht. Weiterlesen

23 Februar 2015

Vortrag in Nürnberg zu Bewegungssteuerung mit MS Kinect 2.0

Mit der Kinect-Technologie habe ich mich zum ersten Mal intensiver beschäftigt, als zur ersten Kinect das SDK in Version 1.7 veröffentlicht wurde. Das ist natürlich schon ein paar Jährchen her und in der Zwischenzeit ist auch schon einiges mit der Technologie passiert. Ich finde es sehr spannend, wie schnell sich Kinect in eigene Programme integrieren lässt – sei es bei der Oberflächensteuerung mit der KinectRegion, bei der Spracherkennung oder bei eigenen Bilderkennungstechniken mit den zur Verfügung gestellten Streams. Diese Woche donnerstags werde ich bei der .Net Usergroup in Nürnberg einen Vortrag zum Thema halten, worin ich einige Grundlagen der Technologie nebst einigen Stolpersteinen vorstellen werde [1]. Ich bin gespannt drauf und freue mich auch auf die Diskussionen mit den Entwicklern aus Nürnberg und Umgebung 🙂 Weiterlesen

1 Februar 2015

Um was geht es beim Testen?

BugNeulich stand am .Net Usergroup-Treffen in Regensburg das automatisierte Testen auf der Agenda [1]. Grundsätzlich ein wichtiges Thema, nicht nur für mich, sondern auch für viele andere Softwareentwickler – alleine die hohe Teilnehmerzahl macht dies deutlich. An dieser Stelle direkt ein Dank an den Sprecher Kenny Pflug, er hat das Thema gut dargestellt – auch wenn es die eine oder andere Kritik an dem Beispielprogramm gab ;). Bei dem Vortrag konnte ich einige Dinge dazulernen, beispielsweise nennt sich das, was ich normalerweise als „Testdriven Development“ in der Arbeit vorantreibe, in Wirklichkeit „Behavior Driven Development“. Naja.. ich mache mir halt nicht viel aus Schlagworten 😉 Weiterlesen