tiny little gizmos

Colorflood für Commodore 64 – fertig

Vor zwei Wochen schrieb ich über das kleine Spielchen, dass ich für den Commodore 64 programmiere. Die Idee hatte ich bereits letzten Sommer. Das ganze alte Know-How über 6502 Assembler und die Systemarchitektur des C64 rauszukramen und sich wieder  daran zu gewöhnen, Daten direkt durch Speicher, Prozessor und Videochip zu schieben hat etwas gedauert. Nun ging es dann aber doch erstaunlich schnell. Das Spiel ist fertig (Download: siehe unten).

Stumm ist dumm

Die Spielmechanik hatte ich vor zehn Tagen fertig und nun wollte ich noch eine kleine Titelmelodie einbauen. Komponiert habe ich auf meiner Audioworkstation mit dem genialen Reason von Propellerheads. Um die Noten auf den C64 zu übertragen und abzuspielen habe ich den Soundmonitor von Chris Hülsbeck verwendet, der 1986 in der 64er erschienen ist. Die Software gilt als der erste Musik Tracker. Die Abspielroutine und die Daten verbrauchen leider sehr viel Speicherplatz und Prozessorzeit, aber da das Programm sehr klein ist und die Melodie nur im Titel und nicht während des Spiels läuft, macht das nichts.

So siehts aus

Das Spielprinzip ist absichtlich simpel, die Grafik und die Melodie ebenfalls. Spaß macht es (mir) trotzdem.

Colorflood - Titelscreen

Colorflood - Titelscreen

Farbwechsel von Braun zu Violett - Die Welle rauscht vorwärts

Farbwechsel von Braun zu Violett - Die Welle rauscht vorwärts

“Auch mal spielen?”

Alle Liebehaber des C64 sind herzlich eingeladen, Colorflood herunterzuladen und in ihre Spielsammlung aufzunehmen. Über Feedback freue ich mich natürlich auch.

Das Spiel ist Open Source; die Quelldateien und das fertige Programm (colorflood.prg) liegen auf GitHub:

https://github.com/dollmetzer/colorflood

Das fertige Spiel in einer D64 Datei (Diskettenimage) gibt es hier: colorflood.d64

Viel Spass!

Farbflut auf dem Commodore 64

Seit letztem Jahr treibe ich mich in Berlin regelmäßig auf diversen Veranstaltungen mit dem Thema Retrocomputing herum. Ich habe viele interessante und teils verblüffende Dinge gesehen, die man mit den alten 8-Bit Maschinchen machen kann. Ich fand heraus, dass es noch immer eine lebendige Szene für meinen Lieblingscomputer Commodore 64 gibt und noch immer neue Software für das über 30 Jahre alte Schätzchen erscheint.

Ich will auch mal wieder…

Im letzten Sommer – nachdem ich den Vortrag von Berthold Fritz über die Programmierung eines Spiels für die 8 Bit Atari Heimcomputer gehört hatte – nahm ich mir vor, auch mal wieder ein kleines Spielchen zu programmieren. Und zwar so richtig maschinennah in Assembler – wie man das damals meist getan hat.

Es muss nichts aufregend, originelles, großes sein. Irgendwas nettes kleines, was man gerne mal für 10 Minuten spielt. Berthold Fritz hatte sich an Boulderdash orientiert, aber von solchen Spielen gibt es gefühlt hunderte für den C64. Was also tun?

Als ich meinen Raspberry Pi das erste mal eingeschaltet hatte, stolperte ich über ein kleines, in Python programmierte Spiel, bei dem man ein buntes Spielfeld durch Farbwechsel einfarbig bekommen soll. Total simpel und einfach – aber ich saß wie gebannt davor und habe das tatsächlich elend lange gespielt. Das Prinzip macht Spaß und man benötigt weder bombastische Grafik noch umwerfenden Sound. Bingo – so machen wir es!

Proof of concept: colorflood in Basic

Proof of concept: colorflood in Basic

Den Algorithmus für den Farbwechsel habe ich zunächst in Basic programmiert, um zu überprüfen ob er wirklich so einfach ist, wie ich gedacht habe. Das Ergebnis war lauffähig, aber wie zu erwarten war auch unglaublich langsam. Immerhin – der Proof of Concept war erbracht. Den Programmcode habe ich bei Github hinterlegt.

Das Projekt colorflood ist mittlerweile in einem Stadium, in dem ich es auch mal zeigen kann. Es gibt:

  • Eine einfache Startseite. Los geht es mit Druck auf den Feuerknopf von Joystick 2.
  • Das Spielfeld wird aufgebaut
  • Die Farben werden zufällig gesetzt
  • Mit dem Joystick kann man die nächste Farbe auswählen und per “Feuer” setzen.
  • Der Farbwechsel wird animiert angezeigt
  • Die Anzahl der Farbwechsel wird gezählt (ist aber noch nicht limitiert)
  • Es gibt einen Countdown (der aber noch nicht bei 000 den Level beendet)
  • Wenn das komplette Spielfeld eingefärbt ist, wird der Level beendet (und damit zur Zeit auch das Spiel)

Als nächstes werde ich die verschiedenen Beendigungen eines Levels und die Erhöhung des Schwierigkeitsgrades im nächsten Level programmieren. Danach Sound und zum Abschluss hoffentlich noch eine Titelmelodie.
Die vollständigen Projektsourcen sind hier zu finden:

https://github.com/dollmetzer/colorflood

Wenn das Spiel fertig ist, werde ich es auch als fertig übersetztes Programm zur Verfügung stellen.

Bewegungserkennung per Webcam

Für ein kleines Projekt stand gerade vor der Aufgabe, Standbilder per Webcam aufzunehmen und zu speichern – aber nur, wenn sich etwas vor der Linse bewegt.
Das klingt zunächst reichlich kompliziert, aber mit den richtigen Werkzeugen ist es tatsächlich verblüffend einfach. Die Werkzeuge der Wahl sind:

  • Python – Eine populäre Skriptsprache
  • OpenCV – Eine Funktionsbibliothek für Bild-, Videobearbeitung, Mustererkennung u.ä.

Den rechten Weg wies mir Matthias Stein mit seinem Artikel “Motion detection using a webcam, Python, OpenCV and Differential Images“. Die Bewegungserkennung funktioniert so, dass drei kurz nacheinender aufgenommene Bilder übereinandergelegt werden und daraus ein Differenzbild errechnet wird. Dort wo sich nichts verändert hat, ist das Differenzbild schwarz. Stellen, die sich verändert haben, werden weiß. Das führt zu recht eigenwilligen, geisterhaften Bildern, wie man in dem Beispielvideo auf Youtube sehen kann.

Die Lösung

Die Methode musste ich nun nur noch etwas ergänzen. Aus dem Differenzbild errechnet die OpenCV Methode countNonZero die Anzahl, der weißen Pixel. Falls dieser Wert oberhalb eines gesetzten Schwellwertes (sinnvollen Wert ausprobieren) liegt, soll das Bild gespeichert werden. Jetzt muss man nur noch dafür sorgen, dass das Ursprungsbild in Farbe vorliegt und nur zur Differenzberechnung in Schwarz/Weiss gewandelt wird. Et voilá…

Für die interessierten ist hier der Code:

#! /usr/bin/python

import time
import cv2

def diffImg(t0, t1, t2):
    d1 = cv2.absdiff(t2, t1)
    d2 = cv2.absdiff(t1, t0)
    return cv2.bitwise_and(d1, d2)

print "Start Capturing"
cam = cv2.VideoCapture(0)

# Threshold for minimum movement
threshold = 130000
targetdir = './'
winName = "MovementIndicator"
cv2.namedWindow(winName, cv2.CV_WINDOW_AUTOSIZE)

# Read three images first:
colorimg = cam.read()[1]
t_minus = cv2.cvtColor(colorimg, cv2.COLOR_RGB2GRAY)
t = cv2.cvtColor(colorimg, cv2.COLOR_RGB2GRAY)
t_plus = cv2.cvtColor(colorimg, cv2.COLOR_RGB2GRAY)

start = time.time()
while True:
    dimg=diffImg(t_minus, t, t_plus)
    cv2.imshow( winName, dimg )

    # save picture, when movement above threshold
    print cv2.countNonZero(dimg)
    if cv2.countNonZero(dimg) > threshold:
        timestamp = round(time.time() - start)
        filename = targetdir + str(timestamp) + ".jpg"
        cv2.imwrite(filename, colorimg)

    # Read next image
    colorimg = cam.read()[1]
    t_minus = t
    t = t_plus
    t_plus = cv2.cvtColor(colorimg, cv2.COLOR_RGB2GRAY)

Firefox: URL vervollständigen ausschalten

Wenn ich etwas hasse, dann sind es Computer, die schlauer als der Nutzer sein wollen. Darunter fällt das unsägliche automatische Ergänzen der URL um www und .com, das Firefox ungefragt vornimmt. Die Grundannahme, dass eine Domain immer mit www. anfängt und mit .com aufhört ist ja totaler Quatsch. Das stimmt schon bei “richtigen” Domains häufig nicht, bei der Entwicklung aber schonmal gar nicht. Ich benutze gerne einfache URLs, wie zum Beispiel http://shop/.

In den normalen Einstellungen von Firefox steht dazu nichts. Wie wird man den Quatsch also los?

Man gibt in der Adresszeile about:config ein und bestätigt, dass man vorsichtig ist. Dann sucht man nach dem Schlüssel keyword.enabled und ändert den Wert von true auf false.

Zur Sicherheit löscht man auch noch die Werte der Schlüssel browser.fixup.alternate.prefix und browser.fixup.alternate.suffix.

Happy browsing!

The next big (little) things?

In den letzten 3-4 Jahren las man immer mal wieder etwas über 3D Druck. In technischen Veröffentlichungen ging es meist um die Technik an sich und in den normalen Medien wurde – wie leider mittlerweile üblich – wieder nur stupide Stimmungsmache und Panik verbreitet. Beide Arten der Veröffentlichungen finde ich mindestens sinnlos, wenn nicht sogar eher schädlich, weil sie eine sachliche Diskussion verhindern.

Einerseits, werden keine möglichen positiven Anwendungen, wie z.B. die Herstellung selten gebrauchter Ersatzteile gezeigt. Die Suche nach Chancen findet mal wieder nicht statt.

Andererseits werden aber die wirklich relevanten Herausforderungen, wie die möglichen Umwälzungen auf Produktion und Beschäftigung ebenfalls nicht thematisiert. Stattdessen werden ausschliesslich sensationsheischende Schlagzeilen wie “Waffen aus dem 3D Drucker” thematisiert. Mein Gott! Als ob man Waffen nicht aus allem möglichen Zeug herstellen kann, wenn man es denn darauf anlegt. 3D Drucker sind da schon vom Metrial her eher nicht geeignet, wie ein Praxistest gezeigt hat, den die Zeitschrift C’t in Zusammenarbeit mit einem Büchsenmacher durchführte.

Wo liegen denn nun mögliche Einsatzzwecke?

Der eigentliche Witz beim 3D Druck ist, dass das Open Source Prinzip nach der Software nun auch in der Harware angekommen ist. Das wiederum gibt einem weiteren, interessanten Zukunftsthema weiteren Schwung: Der Robotik.

Robotik an sich ist zwar keinesfalls ein neues Gebiet, aber die Entwicklung erfolgte bisher Top-Down. Konzerne mit millionenschweren Forschungsbudgets und Universitäten haben sich hier hervorgetan und auch bereits beachtliches geleistet. Der wirkliche Durchbruch in der Alltagswelt der Menschen wird aber vermutlich eher durch eine Bewegung “von unten” vorangetrieben werden. Genauso, wie erst die zunächst belächelten Microcomputerbasteleien einiger Freaks in den 70er Jahren den Computer als Alltagsgerät für die Massen ermöglichte.

3D Druck als Bottom-Up Treiber in der Robotik

3D Drucker selbst sind ja bereits eine spezielle Art von Robotern. Bei den meisten Modellen sind auch bereits viele Teile selbst per 3D Druck hergestellt, die Steuerelektronik basiert meist auf offenen Hardwarespezifikationen, wie dem Arduino und die Software von der Konstruktion bis zum Hardwaretreiber sind ebenfalls meist Open Source.

Dieses bei dieser mittlerweile bewährten Art der offenen Entwicklung durch eine motivierte Gruppe enstandene Know-How, wird nun zunehmend auf andere Bereiche der Mechatronik transferiert. Zwei wie ich finde interessante Projekte sind Shellmo und Poppy.

Während sich das insektenähnliche Shellmo eher als ein interessantes technisches Spielzeug darstellt, merkt man dem humanoiden Poppy Project sein ambitioniertes Ziel deutlich an. Viel Spass beim Ansehen.

 

 

 

Versionsmanagement mit Git

Denselben Effekt hat man aber auch mit Subversion oder ähnlichen Systemen.

Wieder mal ein Treffer von XKCD. Bin eben vor Lachen fast vom Stuhl gerollt. Schade, dass das nur Entwickler richtig verstehen…

Oxid Usergroup Berlin am 19.11.

Am letzten Dienstagabend fand nach längerer Pause wieder einmal das Treffen der Oxid Usergroup Berlin statt.

Die Veranstaltung fand ab 18:00 in den Räumen von SysEleven in Kreuzberg statt. Nach einer kurzen Vorstellungsrunde ging es gleich sehr technisch zur Sache. Felix Gilcher von Asquera startete mit einem Vortrag über den Suchindex Elasticsearch. Er begann mit einem Überblick über die Architektur (Clusterserver, Shards, Indizes, Documents…) und die grundlegende Benutzung per JSON Calls mit Indexern, Analyzern und Filtern.

eCommerce im Umspannwerk

eCommerce im Umspannwerk

Josha Krug von der Agentur Marmalade ergänzte das Thema mit den Erkenntnissen, die beim Einsatz von Elasticsearch bei einem Online Buchhändler gewonnen wurden. Es wird dort nicht nur für die Suche, sondern auch für das Ausspielen der Kategorieseiten genutzt.

Im Verlauf der Diskussion wurde als weiterer möglicher Einsatzzweck System- und Eventlogging besprochen. Dafür gibt es mit Kibana und Logstash auch bereits gute Frontends.

Es folgte ein etwas weniger technischer Teil. Ein Shopbetreiber fragte in die Runde nach Erfahrungen bei der Auswahl geeigneter ERP Systeme. Es wurde auf die hohe Anzahl an Spezialanbietern (z.B. jewils unterschiedliche Systeme für Tischler und Zimmerleute) hingewiesen und auch das Thema Cloud ERP mit Vorteilen beim Dropshipping wurde angerissen.

Im Abschluss wurde es wiederum sehr technisch. Daniel Niedergesäß von SysEleven führte anhand von OXID 4.7 CE vor, welch großer Performancegewinn sich durch den Einsatz von Facebooks HipHop Virtual Machine erzielen lässt. Mit HipHop compiliert man aus einer PHP Applikation samt PHP selbst und den notwendigen Libs eine Binärcode Anwendung.

Da HipHop aber noch nicht den vollständigen Sprachumfang von PHP unterstützt und an einigen wichtigen Stellen, wie der Sessionverwaltung von Standardverhalten abweicht, sind leider einige recht tiefe Eingriffe in den Core von Oxid, der vollständige Verzicht auf verschlüsselten Code und recht speziell eingerichtete Server nötig, um den Shop zum Laufen zu bekommen.

Für den Produktiveinsatz ist solch ein System daher leider noch nicht geeignet, aber es zeigt auf, welches Potential hier vorhanden ist.

Nach dem offiziellen Ende der Veranstaltung um 21:00 ließen einige Teilnehmer den Abend noch gemeinsam in einer Gaststätte ausklingen.

Brauchst’n Rechner? Bau ihn doch einfach schnell selber…

Auch in dieser Woche gab es wieder einen hervorragenden Vortrag aus der Reihe Shift-Restore-Escape an der Humboldt Universität. Nachdem die bisherigen technischen Vorträge stets davon handelten, neue Software auf bekannter alter Hardware zum Laufen zu bringen, ging es diesmal ans Eingemachte. Das Thema des Abends lautete

Mit Lötkolben, Wire-Wrap-Pistole und Assembler – Z80 Selbstbaurechner

Prof. Dr. Bernd Ulmann – Spitzname “Vaxman” – ist eigentlich für den Umgang mit richtig grossen Geräten bekannt. Er sammelt alte VAX Rechner von Digital Equipment. Dennoch hatte er Lust “schnell mal eben” einen kleinen Z80 Rechner selbst zu bauen. Gesagt, getan. Das Projekt hat er auf seiner Homepage unter http://www.vaxman.de/projects/tiny_z80/ ausführlich dokumentiert, so dass ich mir hier Details spare.

Die naheliegende Frage “Warum macht man sowas?” beantwortete er gleich am Anfang augenzwinkernd mit “wegen einer kleinen Midlife-Crisis” und weil man an solch einfachen Systemen den heutigen Studenten die Grundfunktion von Rechnern gut erklären kann.

Die Idee - Handskizze

Die Idee - Handskizze

Das Ergebnis der Arbeit ist ein Einplatinenrechner, der per serieller Schnittstelle an andere Rechner angeschlossen wird. Er ist mit einem Mini-Betriebssystem, einem Monitorprogramm, einem Forth-Interpreter und experimentiell mit einem kleinen Basic Interpreter ausgestattet. Die weitaus meiste Arbeit steckt in dem Massenspeicher in Form eines CF-Karten Laufwerkes.

Hardware Revision 1

Hardware Revision 1

Mitten während der Entwicklung entdeckte Ulmann, dass mit dem N8VEM bereits ein vergleichbares Projekt existierte. Er hatte in der Veranstaltung sowohl den N8VEM, als auch die zweite Revision seines eigenen Rechners dabei, der mit einer deutlich kleineren Platine auskommt und mich ein wenig an den seeligen Sinclair ZX81 einnerte, der aus nur vier Chips bestand.

N8VEM

N8VEM

Hardware Revision 2

Hardware Revision 2

Die abschliessende Live Präsentation wurde mit einer Aufgabe durchgeführt, die in den 80er Jahren sehr populär war: Der Berechnung einer Mandelbrot-Menge. Einmal in Basic und einmal in Assembler. Ein- und Ausgabe erfolgten dabei in ASCII Code auf dem Terminalprogramm eines aktuellen Apple Laptops.

Live Demo

Live Demo

 

 

« Previous PageNext Page »