Archiv der Kategorie: Programmierung

CI/CD mit Gitlab

Gitlab ist neben github eine der großen Plattformen für Softwareentwickler, um Quelltext in Git-Repos zu verwalten. Mir hat immer gut gefallen, dass die Plattform keine Probleme mit privaten Repos hat – github stellt sich etwas an und möchte hier nur ein privates Repo pro Nutzer kostenlos zur Verfügung stellen. Auch die Terms of Service von github bereiten mir zunehmend Bauchschmerzen. Hinzu kommt, dass sich github nicht auf eigener Infrastruktur hosten lässt. Gitlab dagegen bietet eine mächtige Community-Edition an. Das Projekt edugit des Teckids e.V. ist ein Vorstoß in die Richtung, diesen Dienst datenschutzkonform auch im Bildungsbereich in Deutschland anbieten zu können.

Zurück zu den Vorzügen von Gitlab. Ein tolles mir neues Feature sind sogenannte Runner. Das sind virtuelle Maschinen, Rechner oder Docker-Container, die meinen Quelltext automatisch prüfen können. Dieses Feature heißt CI/CD (für Continuous Integration/Continuous Delivery) und wird durch die Datei .gitlab-ci.yml konfiguriert. Ein Beispiel, das einen Pythontest in einem Python-Container auf alpine-Basis ausführt, sieht so aus.

image: python:alpine  # Das Basisimage des Containers

before_script:  # Wird vor jedem Task ausgeführt
 - echo nothing to do

tests:    # Ein Task mit Namen 'tests'
 script:  # Das Script hat mehrere Befehle
 - find ex.py test.py
 - python3 test.py
 - python3 -m doctest ex.py

Sobald nun Quelltext in das Repo gepusht wird, läuft ein sogenannter Runner und führt die Tasks einzeln aus. Gitlab selbst stellt auf seiner Plattform verschiedene Runner zur Verfügung, die von Digital Ocean gesponsert werden und in ihrer Laufzeit auf generöse 2000 CPU-Minuten pro Monat und User beschränkt sind. Wem das nicht reicht, der kann auch selbst einen Runner bei sich installieren, laufen lassen und darin die Tests ausführen. Wem Gitlab nicht behagt, der kann auch einen Runner mit drone.io betreiben. Diese haben den Vorzug, nicht auf Gitlab beschränkt zu sein und integrieren sich auch in andere Plattformen wie etwa github, gitea oder gogs.

MiniGameJam #3 gebar die StarFeetAcademy

Am Samstag, dem 10.2. ging der Mini Game Jam Dortmund in die dritte Runde. Wieder mussten Spielentwickler (Profis, Amateure und Dilettanten) an einem Tag in 8 Stunden ein Spiel erdenken und umsetzen. Es war das zweite mal, dass ich daran teilgenommen habe. Die Organisation war wieder einmal klasse und ich danke Moritz, der diese Veranstaltung immer wieder möglich macht. Mit Sven, Reinhard, Janis und Dominik haben wir uns diesmal als Team super ergänzt. Herausgekommen ist ein Multiplayer Spiel, das mit vier Spielern auf einer Tanzmatte auf einer LED-Matrix gespielt wird. Ein kräftiger Soundtrack erfüllte das Spiel mit Leben, so dass auch mir die ein oder andere Runde durchaus Spaß gemacht hast. 🙂 Mittlerweile gibt es sogar eine Umsetzung für Android. Der nächste Termin steht auch schon fest: am 12. Mai geht es weiter.

Blinken-Rocket

Auf dem 34C3 habe ich mir einen Bausatz (12 €) einer blinken rocket gekauft: eine Platine in Raketenform mit einer 8×8-LED-Matrix und zwei Buttons. Eine Anleitung erklärt, wie ich die Bauteile korrekt anlöten kann und ein Editor hilft bei den ersten Schritten, eine Schrift oder einfache Animationen über das Display laufen zu lassen. Das Programm wird über ein Audioschnittstelle übertragen und so kann man mit seinem Handy direkt ein kleines Programm erstellen und loslegen. Betrieben wird die Schaltung mit einer CR2023 Knopfzelle. Die Quellen für das Hardware-Design und auch die Firmware für den auf der Platine verbauten ATiny88 sind bei github verfügbar.

Nach meinen ersten Lötversuchen mit SMD-Bauteilen, konnte ich die Rakete innerhalb kurzer Zeit in Betrieb nehmen. Leider lassen sich die Buttons nicht über das Interface programmieren – sie dienen lediglich zum Durchschalten verschiedener Programme und als Ausschalter. Da die Firmware aber offen ist, kann sie vielleicht einfach erweitert werden, so dass auch komplexe Programme ablaufen können. Mangels internen Zustands ist z.B. auch kein Game of Life möglich.

Update
Ich habe gesehen, dass die Rakete bei einem Shop aus dem Dunstkreis des Metalab in Wien vertrieben wird – dort allerdings für gut investierte 25€.

34C3 Packliste

Das wichtigste für den Congress in Leipzig – neben unwesentlichen Dingen wie einer Unterhose oder Zahnbürste.

  • Aufkleber
  • RasPi
  • Powerbank
  • DECT-Telefon
  • GSM-Handy
  • Batterien AAA
  • LED-Blink-Kram
  • Geräuschsensor
  • microbit
  • Lockpickingset
  • Lupe
  • ESP8266
  • Steckbrücken
  • USB-Kabel
  • USB-Steckladedingens
  • Servomotor
  • Laptop
  • Pegelwandler

Wie produziert man heute ein C64-Spiel?

Früher wurden Spiele für den C64 in Schachteln ausgeliefert. Die Schachtel kaufte man im Laden und darin befand sich eine Diskette oder Kassette sowie eine Anleitung. Aber wie produziert man ein Spiel für den C64 heutzutage? Der 8-Bit-Guy hat das Spiel Planet X2 für den C64 selbst produziert – inklusive Soundtrack, Schachtel, Grafiken, Anleitung und Vertrieb. Den Prozess der Entwicklung hat er in dem kurzweiligen Video Planet X2 for the Commodore 64 dokumentiert. Hier fließen Entscheidungen darüber, wie die 64 kB RAM des C64 genutzt werden können, ebenso ein wie das Beta-Testing und die Bestellung und Produktion von Disketten.

Ein eigener PyPI-Server

Der Python Package Index – kurz PyPI – ist die zentrale Anlaufstelle für die Installation von Pythonpaketen. Wenn das Internet mal streikt, der Dienst nicht verfügbar oder nur schlecht erreichbar ist, lohnt sich der Blick auf das Paket pypiserver. Der Server wird mit pip install pypiserver installiert und kann anschließend mit pypi-server gestartet werden

Die Pakete erwartet es im Verzeichnis ~/packages oder in einem Ordner, der als Parameter im Aufruf übergeben wird. Damit pip im Anschluss den neuen Server bei seiner Arbeit respektiert, muss er als Parameter übergeben werden: pip install --extra-index-url http://mein-server/ bottle oder bei einer Suche pip search --index http://mein-server bottle. Die Anleitung beschreibt zwei Möglichkeiten, die URL nicht immer übergeben zu müssen: via Konfiguration in einer Umgebungsvariable oder über eine Konfigurationsdatei.

Einmal installierte Pakete können mit pypi-server -U auf ihre Aktualität hin überprüft und ggf. mit einer neuen Version aus der offiziellen PyPI-Quelle aktualisiert werden.

Klein aber fein – der MiniGameJam in Dortmund

Am 10.06.2017 fand der erste Game Jam in Dortmund statt – noch ein wenig zaghaft als Mini Game Jam tituliert. An einem sonnigen Samstag fanden sich ca. 20 interessierte Entitäten im Dortmunder Künstlerhaus direkt hinter dem Hauptbahnhof ein, um in nur acht Stunden ein vollständiges Spiel zu programmieren. Nach einer kurzen Kennenlernrunde haben sie Teams gebildet und konnten ein Thema aus den Vorschlägen „Familie“, „Grenzen überwinden“, „old school“ und „Zwei Buttons“ auswählen.

Ich selbst bildete mit Reinhard und Miriam ein Team, das mit keiner konkreten Idee für ein Spiel, aber für dessen Ausgabemedium startete.

Wir wollten ein Oszilloskop als Bildschirm verwenden. Normalerweise werden diese Geräte benutzt, um Wechselspannungen in Kurven zu visualisieren. Wenn man den Elektronenstrahl jedoch geschickt umlenkt und als analoges Signal auf zwei Eingangskanäle sendet, kann im XY-Betrieb faktisch Beliebiges auf dem Geräte dargestellt werden – soweit zumindest die Theorie. Wir haben einen Digtial-Analog-Wandler aus Widerständen erstellt und mit einem RaspberryPi angesteuert. Damit waren wir in der Lage, eine bescheidene Auflösung von 32×64 Bildpunkten auf dem Gerät darzustellen. Bei höheren Auflösungen flackerte das Bild aus Gründen, die wir in der kurzen Zeit nicht ergründen konnten wollten.

Nach ca. drei Stunden konnten wir beliebige Punkte auf dem Gerät positionieren und uns (endlich) um eine Spielidee kümmern. Wenig kreativ und motiviert durch die technischen Einschränkungen entschieden wir uns für eine Abwandlung des bekannten Spiels „flappy bird“, in dem ein Vogel zwischen Röhren hindurch manövriert werden muss. Gesteuert wird der Vogel mit nur einem Taster: beim Drücken fliegt der Vogel hinauf, lässt man den Button wieder los, sinkt er wieder. Diese Steuerung haben wir über eine kleine Platine mit zwei Tastern realisiert – der zweite Taster konnte das Spiel nach einem Game Over neu starten.

Da noch etwas Zeit übrig war, konnten wir uns Gedanken über eine Audioausgabe machen. Diese erfolgte über zwei kleine „Lautsprecher“, die wir ebenfalls über den Raspberry Pi angesteuert haben.

Das Projekt ist inklusive des Quelltextes bei github unter dem Namen osziflap abrufbar.

Am 7.10.2017 geht es (vielleicht?) weiter mit dem nächsten Game Jam – vielleicht nicht mehr Mini, vielleicht wieder in Dortmund, gewiss aber wieder mit mir.

 

FizzBuzz Katas – Programmierübungen für das FizzBuzz-Problem

(Das Video bei archive.org.)

Bei dem FizzBuzz-Spiel werden die Zahlen von 1 bis 100 durchlaufen. Nun können folgende Fälle eintreten:

  • Wenn die Zahl durch 3 teilbar ist, wird „Fizz“ ausgegeben
  • wenn sie durch 5 teilbar ist, wird „Buzz“ ausgegeben und
  • wenn sie durch 3 und 5 teilbar ist, wird „FizzBuzz“ ausgegeben.
  • Tritt keiner dieser Fälle ein, wird die Zahl ausgegeben.

Viele Lösungen gibt es auf meiner Webseite.

Micropython auf einem ESP8266

esp8266

Hinter Micropython verbirgt sich eine Variante von Python, die auf Mikrocontroller zugeschnitten ist. Der ESP8266 ist ein recht günstiger (~4$) Baustein mit WLAN-Funktionen, für den jetzt eine Micropython-Firmware erschienen ist. Über das Development-Kit, das auf dem Bild zu sehen ist, verfügt der Baustein über einen USB-Anschluss, über den man mit dem Chip kommunizieren kann. Die PINs sind herausgeführt und lassen sich in Schaltungen verwenden.

Nun soll die Firmware für Micropython installiert werden. Diese lässt sich von der Webseite herunterladen. Für die Installation gibt es das Tool esptool.py, das sich ebenso einfach installieren lässt.

$ sudo pip2 install esptool

Leider funktioniert esptool derzeit nur mit Python2.

Anschließend kann die vorhandene Firmware auf den ESP8266 zunächst gelöscht und mit dem zweiten Befehl die neue Firmware übertragen werden.

$ esptool.py --port /dev/ttyUSB0 erase_flash
$ esptool.py --port /dev/ttyUSB0 --baud 115200 write_flash --flash_size=8m 0 esp8266-20160825-v1.8.3-49-ga589fa3.bin

Bei mir kam es bei Geschwindigkeiten über 115200 Baud zu Probleme, weshalb ich die Geschwindigkeit reduziert habe. Die Befehle habe ich der Anleitung von mircopython entnommen.

Nun kann mit einem Terminalprogramm auf den Microcontroller zugegriffen werden. Das geht mit Putty, minicom oder auch miniterm.py.

$ miniterm.py /dev/ttyUSB0 115200

Sollte miniterm.py noch nicht installiert sein, so kann es mit „pip install pyserial“ nachinstalliert werden.

Im Anschluss erhält man eine Python-Konsole, die man für eigene Projekte verwenden kann. Beim Start steht der ESP als Access Point zur Verfügung, auf den sich Clients mit dem Standardpasswort ‚micropythoN‘ verbinden können. Für den Dateitransfer kann dann das Kommandozeilentool webrepl_cli.py verwendet werden.

Anlagen