Schöne Debugausgaben mit VHDL

Aktuell arbeite ich fleißig an meiner Masterabeit (einer der Gründe, warum es hier auf dem Blog so still ist…), und entwickele dafür auch ein paar Sachen in VHDL (ich entwickele also Hardware 🙂 ). Am Ende soll das ganze natürlich auf einem FPGA laufen (vielleicht sogar mal in einem echtem Chip, einem ASIC!), aber aktuell wird das ganze nur simuliert. Das ist zwar ziemlich langsam (aktuell etwa um den Faktor 1000), aber dafür kann man sich jedes Signal in seiner Schaltung ganz genau ansehen und bei Bedarf auch Debug-Ausgaben tätigen. Besonders das hat sich aktuell als sehr hilfreich dargestellt.

VHDL unterstützt das im Prinzip mit assert und report, allerdings finde ich die Ausgaben recht unübersichtlich, vor allem weil sie über mehr als eine Zeile gehen. Zudem ist alles einfarbig, so dass man schnell die Übersicht verliert. Ich habe mir als etwas überlegt, was etwas schöner aussieht (siehe Screenshot)

Weiterlesen

Kombinatorik zu Ostern

Frohe Ostern!

Am Ostersamstag waren in in der Familie fleißig und haben Eier gefärbt. Meine Aufgabe war es danach, die Eier auf unsere zwei Osternester „hübsch“ zu verteilen. Nach einer kleinen Diskussion darüber, wie man das am besten macht, kam dann die Frage auf, wie viele Möglichkeiten es dazu eigentlich gibt.

Wir färben unsere Eier immer in fünf verschiedenen Farben (zumindest wenn ich nicht wieder die Farbtabletten mit blau und grün vertausche und wir daher zwei mal blaugrün haben 🙂 ) und haben dieses Jahr zwanzig Eier gefärbt. Es gibt also vier Eier in jeder Farbe. Wir haben zwei Osternester, in jedes kommen also 10 Eier. (Das Bild oben ist nur Demo 🙂 )

Wie viele Möglichkeiten gibt es also 20 Eier, von denen jeweils 4 identisch sind, in 2 Nestern à 10 Stück anzuordnen? Dabei zählen natürlich keine Möglichkeiten, bei denen zwei gleichfarbige Eier vertausch wurden, und auch keine, die man durch Drehen der Nestern ausgleichen kann. (Die Eier liegen in jedem Nest in einem Kreis). Ein klassisches Problem der Kombinatorik also 🙂

Weiterlesen

Null coalescing in PHP

Heute habe ein neuen Feature von PHP kennengelernt, das wirklich praktisch ist: Null coalesing mit dem tenären Operator. (Ok, das klingt für ungeübte Ohren vielleicht ein bisschen seltsam :))

Null coalescing ist ein Feature dass viele Programmiersprachen haben, meistens mit Hilfe des Operators „??“ (Zwei Fragezeichen). Der Ausdruck gibt den linken Wert zurück, wenn dieser nicht null ist, ansonsten den rechten. Also z.B. so:


action = getAction() ?? 'save';

Weiterlesen

Einfache Sättigungsarithmetik in VHDL

Für ein Projekt an der Uni habe ich mit zwei Kommilitonen ein Malprogram („FPGArt“) auf einem FPGA implementiert. Dabei wird eine Maus per PS/2-Schnittstelle angebunden und das Bild schließlich per VGA ausgegeben. Zu dem Projekt selber später vielleicht mehr, hier jetzt nur ein kleines VHDL-Snippet das man vielleicht man gebrauchen kann.

In dem Projekt wird regelmäßig die relative Bewegung der Maus abgefragt und zu dem alten Wert addiert. Natürlich hat das Bild eine begrenze Größe und der Mauszeiger muss in diesen Grenzen von 800×600 gehalten werden. Es wird also eine sog. Sättigungsarithmetik benötigt: Sollte das Ergebnis der Addition größer als 800 (bzw. 600) sein, oder kleiner als 0 wird es auf den Grenzwert gesetzt. Das ganze ist gar nicht so einfach in Hardware zu implementieren (zumindest ist uns nichts intelligentes eingefallen…).

In jedem Fall muss es ein Zwischenergebnis geben das ausreichend groß ist, um Überläufe überhaupt zu erkennen. Die Maus kann pro Intervall Maximal um 256 bewegt werden, entsprechend muss als ein Wert von 800+256 = 1056 gespeichert werden können. Mit 11 bit kommt man auf 2048, das reicht. Hiermit kann man auch Unterläufe erkennen: 0-256 = -256 was dann 1792 entspricht. Dieser Bereich überlappt auch nicht mit den 1056 nach oben. Es ist also immer einwandfrei erkennbar, dass ein Über/Unterlauf stattgefunden hat.

Weiterlesen

7 kostenlose Spiele bei Ubisoft

Ein kleiner Tipp: An diesem Wochenende verschenkt Ubisoft zum 30jährigen Jubiläum 7 Spiele. Es gibt:

  • Prince of Persia: The Sands of Time
  • Tom Clancy’s Splinter Cell
  • Rayman Origins
  • The Crew
  • Beyond Good and Evil
  • FarCry 3: Blood Dragon
  • Assassin’s Creed III

Voraussetzung ist ein Uplay-Account, und die Software gibt es natürlich auch nur digital über Uplay. Hier geht es zu der Aktion.

Weiterlesen

CakePHP – Ein Review

Heute fragte mich jemand, ob ich eigentlich etwas kennen würde, um mit PHP „schöner“ zu programmieren. Ich dachte zugegebener Maßen erst an einen Editor (da würde ich PhpStorm (gibt’s für Studenten umsonst!) empfehlen), es wurde dann aber relativ schnell klar, das es eher um sowas wie ein PHP-Framework geht. Um es gleich mal klar zu sagen: Ohne irgendein Framework würde ich nichts in PHP schreiben, was länger als 100 Zeilen ist. Man muss das Rad ja nicht immer neu erfinden, und dabei die gleichen Sicherheitslücken wieder einbauen 🙂

Nun entwickele ich für meinen Hiwi-Job schon rund 4 Jahre in PHP. Dabei habe ich die erste Zeit eine Anwendung weiter gepflegt, die ohne ein Framework geschrieben war. Nach einiger Zeit war klar, das es so nicht weitergehen konnte, die Anwendung war, auch durch ihr Alter und die Weiterentwicklung von PHP, unwartbar geworden und lief mit schnellen Schritten auf das End-Of-Life „ihrer“ PHP-Version zu. (Mehr sage ich jetzt nicht, der Autor ließt hier mit 🙂 ). Es musste also eine Neuentwicklung her, natürlich auf Basis eines Frameworks. Damals wurde mir CakePHP empfohlen (damals noch Version 2), was ich dann relativ unreflektiert übernommen habe. Jetzt nähert sich die Anwendung langsam der Fertigstellung, inzwischen basierend auf CakePHP 3. Im Laufe der Entwicklung hat sich eine gewisse Hassliebe zu Cake entwickelt…

Weiterlesen

HTTPS mit Umwegen

So, dieser Blog ist jetzt auch vollständig per HTTPS erreichbar, dank eines kleinen „Schubses“ von Google.

Aber der Reihe nach: Vor einiger Zeit hatte ich ein wenig am Blog umgebaut (es gibt auch seitdem ein neues Theme, falls das noch niemanden aufgefallen sein sollte…) und dabei ein paar Links kaputt gemacht. (Ok, alle Links). Freundlicherweise bekam ich kurz darauf eine Mail von Google, auf meiner Website wäre die Anzahl der 404s ein bisschen angestiegen. Der Fehler war schnell gefunden, und die meisten Links waren wieder heile. Ein paar waren immer noch kaputt, was an dem Theme-Wechsel lag, aber auch die hatte ich recht schnell repariert. Und dann sah es so in der Search Console aus:2016-08-09-21_32_12-search-console-dashboard-http___niklas-rother-de_Irgendwie brach der Traffic von Google „etwas“ ein. Auch Piwik zeigte das gleiche Problem: (Zeigt auch schön, wie viel Traffic von Google kommt…)2016-09-22-23_04_19-niklas-rother-computer-mehr-woche-19-25-september-2016-webanalytik-berDer erste Knick nach unten waren die komplett kaputten Links, dann kam der Zeitraum wo einige Links kaputt waren. Der komplette Absturz passierte, als ich alle Links repariert hatte, und die Reparatur in der Search Console von Google auch bestätigt hatte. Jetzt war ich verwirrt. Alle Links waren in Ordnung und Google wirft mich aus dem Index?! Erst dachte ich, das wäre vielleicht nur ein temporäres Problem weil Google die Seite neu indexieren müsste, aber es wurde nicht besser. Laut Google war auch alles in Ordnung.

Was war passiert? Wie bei allen gemeinen Fehlern eine Kombination von mehreren Ursachen. Erstes Problem: Google unterscheidet streng nach URL, man muss in der Search Console mindestens vier Varianten der URL hinzufügen, wenn man alle „typischen“ Kombinationen haben will: HTTP/HTTPS sowie mit und ohne „www“. Heute habe ich dann gemerkt, das ich sehr wohl noch Traffic von Google bekommen habe, aber auf die HTTPS-Seite! Scheinbar hat Google durch das neu-indexieren spitz gekriegt, dass ich hier mehr oder weniger aus Spaß mal ein Let’s Encrypt Zertifikat installiert hatte (automatisch, über netcup), und hat die Besucher auf die sichere Variante geschickt. An sich natürlich lobenswert. Dort sind also schon mal die Besucher geblieben. Glück gehabt, doch nicht aus dem Index geflogen *phew*.

Weiterlesen

3DS Reparatur

Nachdem ich bis jetzt in schöner Tradition jedes Jahr immer ein Zelda-Spiel im Urlaub gespielt habe, gingen mir vorletztes Jahr die Nintendo DS Spiele aus, neue Zelda-Spiele gab es nur noch für den 3DS. So ein (neuer) 3DS ist aber nicht ganz günstig, daher hatte ich mir in den Kopf gesetzt, einen günstigen gebrauchten zu kaufen.

Besonders günstig sind bekanntermaßen defekte Geräte 🙂 Beim 3DS gibt es einen sehr häufigen Fehler, bei dem das Gerät beim Einschalten nur noch ein Mal klickt und dann wieder ausgeht. Das passiert, wenn die Verbindung zur oberen Gerätehälfte verloren geht, was scheinbar recht häufig passiert, weil die Flachbandkabel nicht sehr fest sitzen. Das ist aber ein Problem, dass sich recht leicht beheben lässt (man steckt den Stecker eben wieder rein :)) Gesagt getan, ein kurzer Blick bei eBay Kleinanzeigen, und schon war ein Gerät mit der passenden (Fehler-)Beschreibung  gefunden.

Leider war der 3DS doch etwas defekter als gedacht, das Flachbandkabel war beschädigt. Beim Versuch, den 3DS zu zerlegen ist das Flachbandkabel dann komplett gerissen. Hier war also nichts zu machen. Der 3DS ist nach ein wenig Lagerzeit in meiner Schublade schlussendlich wieder bei eBay Kleinanzeigen verkauft worden, mir einer etwas knappen Fehlerbeschreibung *pfeif*

Weiterlesen

ftRoboExt: Software

Nach einiger Pause gibt es mal wieder etwas neues zu meinem selbstgebauten Erweiterungsmodul „ftRoboExt“. Hardware und Gehäuse waren ja schon fertig, nun fehlte eine finale Version der Software. Inzwischen ist das ganze Projekt übrigens auf GitHub zu finden.

Das Protokoll für die Kommunikation zwischen Interface und Extension ist recht einfach, es ist im Prinzip ein SPI-Bus mit einem zusätzlichen Bestätigungssignal und einer Adresse. Über drei Adressleitungen wählt das Interface aus, mit welcher Extension es sprechen möchte. Die originalen Extensions lassen sich verketten, dabei wird das Signal aber nicht ganz unverändert durchgeschleift, sondern die Adresse wird von jedem Modul um ein verringert. Auf diese Weise ist jedes Modul adressiert, wenn es Adresse 0 sieht (das erste direkt, das zweite weil es 1-1=0 sieht). Eine sehr intelligente Lösung, denn dadurch wird die Adresse des Moduls einfach durch die Verkabelung bestimmt.

Wenn das Modul die Adresse 0 sieht, zieht es EM-ACK (die Bestätigungsleitung) auf Low. Nun beginnt das Interface 6 Bytes zu senden, die Extension gibt nach jedem Byte einen kurzen High-Puls auf der EM-ACK Leitung aus. Die originale Extension scheint recht langsam zu sein, so braucht sie etwa 700µs um die Adressierung zu bestätigen. Das Interface hat aber scheinbar auch kein Problem damit, wenn man schneller ist. Die 6 Bytes übertragenen Bytes enthalten die Nutzdaten, genaueres bei thkais.

Weiterlesen

Cubemaps aus Portal-Leveln erstellen (und anderen Source-Spielen)

Ein ganz kurzes Intro: Für das Rendering von reflektierenden Oberflächen braucht man eine Cubemap, was im Wesentlichen 6 Bilder in alle sechs Richtungen sind. Davon gibt es haufenweise welche im Netz, aber man kann auch selber welche aus seinem Lieblingsspiel extrahieren, wenn man unbedingt will. In unserem Fall für ein Uni-Projekt, da schreibe ich hoffentlich auch noch mal was zu.

Ich habe das in Portal getestet, grundsätzlich sollte das aber in allen Source-Spielen funktionieren. Ich gehe mal davon aus, das man grundsätzlich mit der Konsole umgehen kann. Die Grundidee ist, sich per Konsole in alle sechs Richtungen zu drehen, und dann immer einen Screenshot zu machen. Zunächst muss das Spiel in der passenden Auflösung gestartet werden, dazu in Steam unter Eigenschaften diese Startoptionen angeben:


-windowed -width 1024 -height 1024

Weiterlesen