Seit einiger Zeit bin ich der stolze Besitzer eines (gebrauchten) SteamLinks. Das ist ein kleine Hardware-Box (oder alternativ eine Software für den Raspberry Pi o.ä.), mit der sich Steam-Spiele über Netzwerk an einen Fernseher streamen lassen. Das funktioniert erstaunlich gut (vor allem für eher „langsame“ Spiele, bei mir aktuell vor allem „The Witness„). Logischerweise funktioniert das ganze aber natürlich nur, wenn Steam auf dem Computer schon läuft. Wenn man sich also nicht erst an den Computer setzen will, um Steam zu starten, muss Steam also im Autostart sein. Für reine Gaming-PCs dürfte das kein großes Problem sein, da ich meinen Rechner auf vor allem für die Arbeit benutze, kam das für mich eigentlich nicht in Frage.
WeiterlesenC#
Dekodieren der Gameboy-CPU Instruktionen
Ich habe vor ein paar Tagen angefangen, einen einfachen Emulator für den GameBoy zu schreiben. Einfach so zum Spaß, und weil ich schon immer mal einen Emulator schreiben wollte 🙂
Der erste Schritt ist nun, einen CPU-Emulator zu bauen. Die CPU des Gameboy (LR35902) basiert auf dem Intel 8080 und dem Zilog Z80, kann aber nicht alle Instruktionen, dafür aber ein paar extra… Glücklicherweise gibt es aber unglaublich viele Ressourcen zum Gameboy im Netz, wie zum Beispiel diese tolle Tabelle mit allen Instruktionen.
WeiterlesenTipp: Schöner RegEx-Tester
Ja, es gibt circa 100.000 Websites, auf denen man reguläre Ausdrücke testen kann, aber eine finde ich besonders schön:
RegEx101 heißt die Seite, und hat ein paar schöne Features:
- Man kann die (Programmier-)Sprache einstellen, leider gibt es (noch) kein .NET, aber die PHP-Syntax ist sehr ähnlich
- Man kann Flags setzen
- Es gibt die übliche Kurzhilfe, aber auch eine etwas längere Version.
- Es gibt ein relativ gutes Syntax-Highlighting
- Ganz toll: Es werden die gefundenen Matches (also der Gruppen) angezeigt. Das habe ich lange gesucht!
- Die Seite hat einen Code-Genrator, der auch C# kann, auch wenn man den jetzt nicht wirklich braucht…
Ein weiteres nettes Feature ist der Debugger, der anzeigt, in welchen Schritten die Engine den Text absucht. Auf die Weise findet man schnell Fehler bei denen zu viel „gefressen“ wird. Leider ist die Seite nicht besonders schnell, vermutlich wird der RegEx per AJAX auf dem Server ausgeführt… Wer eine schnellere Alternative sucht (die ich bis jetzt benutzt habe): http://regexpal.com/ Sehr schnell (weil in JavaScript), versteht aber die .NET Eigenheiten nicht und kann auch die Matches/Gruppe nicht anzeigen. Darum habe ich eine neue Seite gebraucht…
Mit C# und Word Serienbriefe erstellen
Wie dem einen oder anderen ja vielleicht bekannt ist, kann man die ganzen Office-Anwendungen von Microsoft ja aus vielen Programmiersprachen fernsteuern. Dazu gibt es eine COM-Schnittstelle (leider :() Die ist zwar nicht gerade modern oder praktisch, aber sie funktioniert relativ gut.
Theoretisch geht das auch mit .NET 2.0, praktisch gesehen möchte man es aber erst mit .NET 4.0 probieren: Die Funktionen von Office nehmen oft wahnsinnig viele Parameter (15 sind da keine Seltenheit), und vor .NET 4.0 gab es keine optionalen Parameter, daher musste man für alles, was man nicht benutzen wollte Type.Missing angeben. Das war natürlich extrem unpraktisch. Mit dem neuen .NET ist Type.Missing jetzt der Standard-Wert der optionalen Parameter, und das ganze ist deutlich benutzbarer geworden.
Ich hatte mir zu Ziel gesetzt einen kleinen Serienbrief-Generator in C# zu schreiben. Ich weiß, Word hat so eine Funktion schon eingebaut, aber die Daten für die Briefe sollten automatisch generiert werden, und es hat mich auch einfach interessiert 🙂 Die Briefe basieren auf einem Template, was einfach ein normales Word-Dokument ist, das Platzhalter enthält. (Die Platzhalter sind auch einfach nur Text, keine Magie dahinter…) Diese Platzhalter werden durch ein einfaches Suchen&Ersetzen umgewandelt, und danach wird das Dokument ausgedruckt. Funktioniert auch recht gut, aber es gibt ein paar seltsame Dinge, auf die ich kurz eingehen will:
.NET Tipps 5: Optionale Parameter und Params sind keine gute Idee
Mal wieder ein neuer .NET Tipp!
C# hat ja so nette Funktionen wie optionale Parameter und „params„. Beide für sich sehr praktisch, mit dem ersten kann man Parametern Default-Werte mitgeben, die benutzt werden, wenn der Parameter nicht angegeben wird. Mit dem zweiten kann man einen Parameter kennzeichnen, der ein Array erwartet, statt diesem kann man dann auch einfach eine Kommata-getrennte Liste angeben.
Nur beides zusammen ist keine gute Idee: Ich hatte diese Funktion, welche eine optionale Sequenznummer erwartet, sowie eine Liste von NiboCommand-Objekten:
.NET Tipps 4: Test auf mehrere Werte
Naja, so richtig ist meine „Serie“ nicht in Fahrt gekommen… Der letzte Teil ist auch schon wieder etwas her 😉
Diesmal geht es um etwas, das mich immer richtig nervt: Ab und zu muss man einen Wert auf jede Menge Möglichkeiten testen. Doch dummerweise muss man den Wert immer wieder hinschreiben:
if(meinTollerWert == "mglk1" || meinTollerWert == "mglk2" ||meinTollerWert == "mglk3") { MessageBox.Show("1,2 oder 3!"); }
Ziemlich nervig sowas…
Doch es geht einfacher, wie mir vor kurzem aufgefallen ist, den implizit typisierten Arrays sei Dank:
if(new[] {"mglk1", "mglk2", "mglk3" }.Contains(meinTollerWert)) { MessageBox.Show("1,2 oder 3!"); }
DynamicLua
So, ich denke es ist Zeit, die Katze aus dem Sack zu lassen, und mein neues Projekt vorzustellen: DynamicLua
Kurz ein paar Worte zum Hintergrund: Mit .NET 4.0 wurde die sog. Dynamic Language Runtime (DLR) eingeführt. Die dient zum einen dazu, es Entwicklern einfacher zu machen, neue Sprache auf .NET Basis zu entwickeln (wie IronPython/IronRuby), hat aber auch ein paar tolle andere Features zu bieten. Eines davon ist das neue Schlüsselwort „dynamic“. Es funktioniert ähnlich wie „var“ kann also jeden Typ annehmen. Wenn man darin aber ein Objekt speichert, das von System.Dynamic.DynamicObject abgeleitet ist, kann man bestimmen was passiert, wenn etwas „nicht erlaubtes“ passiert, also wenn z.B. eine Methode aufgerufen wird, die es gar nicht gibt. Solche Aufrufe landen dann bei der Methode TryInvokeMember, und die kann dann entscheiden, was passieren soll.
Dieses Konzept habe ich jetzt genutzt, um einen Wrapper für das LuaInterface zu schreiben. Das Lua Interface ist eine Library für .NET, die es erlaubt, Lua in C# zu benutzen. Dabei kümmert sie sich auch darum, .NET Objekte in Lua abzubilden und vieles mehr. Diese Library ist wirklich unglaublich, man denkt wirklich, Lua hätte was mit Objekten am Hut.
Fischertecknik mit C# steuern
Im Zuge eines Schulprojektes muss ich mit einem PC die Spannungswerte eines Helligkeitssensors aufzeichnen. Also brauche ich in irgendeiner Form eine Messkarte mit Verbindung zum PC. Meine erste Idee war das mein altes Fischertechnik ROBO-Interface, dass mir früher immer treue Dienste geleistet hat. Natürlich wollte ich es jetzt nicht in ROBO-Pro programmieren, der grafischen Sprache von Fischertechnik (auch wenn die wirklich gut ist!), denn die hat keine Möglichkeit Daten auf dem PC dauerhaft zu speichern.
Also habe ich mich mal etwas im Netz umgesehen, und bin auf der Seite von Ulrich Müller gelandet, der sich die Mühe gemacht hat, allen möglichen Sprachen Bibliotheken zu schreiben. So gibt es auch ein in C#. Leider ist die Benutzung grade mit Windows 7 etwas kompliziert, daher will ich hier mal kurz erklären, wie es funktioniert. An dieser Stelle noch mal einen Dank an Ulrich Müller, der mit per Mail weiter geholfen hat.
Zufälliges Wort mit .NET
Für eine kleine Spielidee brauchte ich ein rein zufälliges Wort. Klingt im ersten Moment etwas trivial, doch woher soll man die Wörter nehmen? Es geht nicht um zufällige Buchstabenkombinationen, sondern um sinnvolle Wörter, am besten Substantive.
Die Lösung war dann das Wikitionary: Das hat, wie jedes auf MediaWiki basierendes Wiki eine API. Dort kann man zwar auch eine zufällige Seite (=Wort) abrufen, aber eben nicht aus einer bestimmten Kategorie. Ich wollte nun aber nur deutsche Substantive. Durch etwas rumsurfen bin dann auch folgende Lösung gekommen:
Statusupdate 2
Mal wieder ein paar Dinge, an denen ich grade so arbeite:
Zum einen ist da YaME: Yet another Minecraft Engine. Hier ein kleines Video:
Ich wollte mal etwas in 3D mit XNA machen, und habe aus Spaß dieses Projekt angefangen. Momentan gibt es schon endlose Landschaften (zumindest bis der Speicher voll ist ;)), und die Framerate ist noch akzeptabel. Ich werde wohl zumindest noch bessere Grafiken und etwas Physik einbauen, zusammen mit einem besseren Renderer (Octrees und Occlusion Culling wäre super)
Dann bin ich grade dabei das LuaInterface um die Fähigkeiten der DLR zu erweitern. Microsoft hat mit .NET 4 eine bessere Interoperabilität mit Scriptsprachen eingebaut: Mit dem Schlüsselwort „dynamic“ kann man Objekte definieren, die z.B deren genaues „Aussehen“ erst zu Laufzeit festgelegt wird. Außerdem ist es damit möglich viele expliziete Konvertierungen wegzulassen. Das passt natürlich wunderbar zu Lua, und dem LuaInterface, mit dem man schon jetzt sehr elegant aus .NET auf Lua zugreifen kann. Kleines Code-Beispiel gefällig?