Okt 16

Gemeinsame Icon-Bibliothek in größeren Desktop-Apps

IconJe umfangreicher Desktop-Apps werden, desto größer wird auch ein Problem, welches zumeist zu Beginn der Entwicklung unterschätzt wird: Wo werden Icons abgelegt, welche von verschiedenen Programmteilen verwendet werden? Viele verschiedene Programmteile und Module (und wie sie auch immer genannt werden…), bei denen jeweils lokal Icons abgelegt werden, können nach einigen Jahren stetiger Entwicklung für Chaos sorgen. Bei meinen Projekten verstärkt sich das Problem zusätzlich aufgrund der Tatsache, dass sich ältere Windows.Forms- und neuere WPF-Komponenten mischen. Weiterlesen

Jul 13

Ein Sommerloch, RKVideoMemory, SmartGlasses und Seeing#

Recon-Jet-Black-Left-AngleMein letzter Beitrag hier ist jetzt eine ganze Zeit lang her… ich betrachte das einmal ein kleines Sommerloch. Hohe Temperaturen, eine Hochzeit in der Verwandtschaft und die Urlaubszeit haben meine Aktivitäten hier stetig verhindert. In den letzten Beiträgen habe ich mich relativ viel mit Video-Verarbeitung mit der Media Foundation beschäftigt. Dies lag unter anderen an dem Spiel RKVideoMemory, welches ich für oben genannte Hochzeit als kleines Geschenk programmiert habe. Quasi ein Memory, welches alte und neue Bilder des Ehepaars als Spielkarten verwendet und beim Aufdecken das Ein oder Andere peinliche Video abspielt. Gespielt wurde dann am Tablet und angezeigt am 46″ Fernseher. War am Ende seine sehr witzige Geschichte… aber jetzt wird es wieder Zeit für andere Themen. Eines davon sieht man hier links im Titelbild: SmartGlasses. Weiterlesen

Apr 05

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

Apr 03

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

Mrz 31

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

Feb 23

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

Feb 01

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

Aug 24

Kein MEF für Universal Apps?

Das Konzept hinter den Universal Apps finde ich sehr gut, wie in den letzten Beiträgen geschrieben wende ich es gerade testhalber bei RK 2048 an. Ein Negativpunkt für mich ist aber die fehlende Unterstützung für System.Composition. Bei WinRT für Tablets / Desktop gibt es den Umweg über MEF 2, welcher eigentlich auch relativ gut funktioniert. Für das Windows Phone scheint es das aber nach wie vor nicht zu geben, derweil ist die Funktionalität m. E. schon sehr praktisch. Damit ich trotzdem etwas Ähnliches habe, habe ich mir entsprechend selber Klassen dafür geschrieben, die auch mit dem Universal App Template laufen. Weiterlesen

Aug 02

MSTest, oder wie ich es verwende

UnitTests oder Ansätze der testgetriebenen Entwicklung werden aktuell häufig bei Usergroups oder Fachkonferenzen angesprochen. Erst diese Woche war ich auf einem Usergroup-Treffen in Nürnberg genau zu diesem Thema. Ich persönlich beschäftige mich damit schon etwas länger, habe testgetriebene Ansätze bereits mehrmals bei passenden Anwendungsfällen durchgeführt und war damit auch stets sehr zufrieden. Bei dem genannten Vortrag musste ich aber feststellen, dass sich das, was ich persönlich mit diesen Tests mache, mittlerweile schon teils deutlich von der Theorie unterscheidet. Hier in diesem Beitrag möchte ich entsprechend meine Sicht auf UnitTests und testgetriebene Ansätze im Allgemeinen beschreiben. Weiterlesen

Jan 12

Triangulation von WPF-Path Objekten

WPF Path TriangulatorZugegeben, der Titel dieses Beitrags hört sich etwas komisch an. Was Besseres ist mir aber leider nicht eingefallen. Im Grunde habe ich mir folgendes in den Kopf gesetzt: Ich möchte in meinem Programm diverse 3D-Objekte wie Pfeile, Böden (nicht nur rein rechteckige) o. Ä. relativ einfach dynamisch erzeugen können. Eigentlich habe ich etwas Ähnliches im Kopf, wie ich hier mit Text-Objekten gemacht habe – nur mit anderen Formen. Die Path-Objekte aus WPF bieten mir dafür schon die Grundlage, die ich brauche, nur leider lediglich in 2D. Daher habe ich ein kleines Programm geschrieben, welches aus einen Path per Triangulation-Algorithmus ein Modell aus Dreiecken errechnen kann. Daraus im Anschluss ein wirkliches 3D-Objekt zu machen, ist bekanntlich kein großes Problem mehr. Weiterlesen