Sebastians Blog Neues aus den Softwareminen…

Neuste Beiträge

Ruby: Testvollständigkeit testen

Eine Wissenschaft für sich im Test-Driven Development ist die Frage, wie jede einzelne Funktion getestet werden muss: Sind die Tests vollständig, hat man jeden Spezialfall bedacht? Hat man es zu gut gemeint und eine schwer überschaubare, redundante Testsuite geschaffen?

Einen recht ungewöhnlichen Weg zur Beantwortung der ersten Frage geht Markus Schirp. Sein Gem Mutant betrachtet Code und die zugehörigen, grünen Tests. Es verändert nun immer wieder bestimmte Teile des Applikations-Codes (nicht die Tests) und prüft, ob die Tests dadurch fehlschlagen. Tun sie dies nicht lässt sich schlussfolgern, dass diese Stellen des Codes nicht vollständig durch Tests abgedeckt oder tot sind. Weiterlesen

Veröffentlicht unter | Verschlagwortet mit , , , , | Hinterlasse einen Kommentar

Klassen- und Klassenhierarchievariablen in Ruby

Sucht man nach einem Klassenvariablenkonzept für Ruby trifft man über kurz oder lang auf das @@-Konzept. Wer sich darauf einlässt kann schnell Probleme bekommen. Der Grund ist relativ einfach: @@-Variablen sind keine Klassenvariablen.

Einfache „Klassenvariablen“

class Cat
  
  @@size = :small
  
  def self.size
    @@size
  end

  def self.size= new_size
    @@size = new_size
  end

  def size
    @@size
  end

end

Weiterlesen

Veröffentlicht unter | Verschlagwortet mit , , | Hinterlasse einen Kommentar
unittesting

Was beim Unit-Testing getestet werden sollte

Die zentrale Idee des Unit-Testings ist Isolation. Man testet einzelne Komponenten, Abhängigkeiten werden als gegeben und korrekt angesehen und ggf. gemockt. Dies macht das  Testen der einzelnen Komponente übersichtlicher, da nur ihre Pfade betrachtet werden müssen. In der Regel wird hierbei ein Blackbox-Ansatz verfolgt. Die zu testende Funktionalität (meist eine öffentliche Methode) wird nur von außen betrachtet: Was geht rein, was kommt raus, wie ändert sich der nach außen sichtbare Zustand?

Es gibt hilfreiche theoretische Betrachtungen, welche Funktionen getestet werden sollten und welche nicht. Zudem lässt sich argumentieren, wie ein bestimmer Funktionstyp zu testen ist. Dies kann helfen den Aufwand des Testschreibens zu reduzieren. Zudem sorgt die bessere Isolation dafür, dass eine Änderung in einer Komponente nicht länger das Umschreiben hiervon eigentlich unabhängiger Tests erfordert. Weiterlesen

Veröffentlicht unter | Verschlagwortet mit , , , | Hinterlasse einen Kommentar

RetroPie über WLAN befüllen und aktualisieren

Nachdem mein Pi für Retrospiele nun weitgehend konfiguriert ist, habe ich die Tastatur durch einen WLAN-Dongle ersetzt. Die Konfiguration habe ich etwas umständlich in die /etc/network/interfaces eintragen müssen, hierfür scheint es keinen Assistenten zu geben. Dafür wird das Romverzeichnis über Samba freigegeben, so dass es ohne jedes Zutun im Ubuntu-Dateimanager auftaucht und befüllt werden kann. Auch via SSH ist der kleine Rechenknecht erreichbar: Der Benutzername ist pi, das Passwort raspberry. Somit ist die Tastatur wirklich obsolet.

Dank der Internetverbindung bietet sich auch ein Update an. Debian lässt sich über Apt aktualisieren, für die Emulatorkomponenten gibt es einen eigenen Assistenten:

 sudo ./RetroPie-Setup/retropie_setup.sh

Hier sollte man zunächst das Setup-Script selbst und anschließend die Retro-Pie-Binaries auf den neuesten Stand bringen. Ich war etwas misstrauisch, ob die von mir gemachten Anpassungen durch das Update verloren gehen könnten. Dies war nicht der Fall. Im Gegenteil: Seit dem Update funktioniert auch der Ton des Osmose-Emulators, so dass ich nun auch zu Game-Gear- und Master-System-Klassikern greifen kann.

Veröffentlicht unter , | Verschlagwortet mit , , , | Hinterlasse einen Kommentar

Vim-Zwischenablage unter Ubuntu 14.04

Wenn in Vim von Ubuntu 14.04 die Zugriffe auf das System-Clipboard (etwa "+p oder "+y) nicht funktionieren, ist in aller Regel eine Version ohne Clipboard-Modul installiert:

vim --version
VIM - Vi IMproved 7.4 (2013 Aug 10, compiled Jan  2 2014 19:39:32)
...
Riesige Version ohne GUI. Ein- (+) oder ausschließlich (-) der Eigenschaften:
...
-clipboard       +iconv           +path_extra      -toolbar
...

Weiterlesen

Veröffentlicht unter , | Verschlagwortet mit , , | Hinterlasse einen Kommentar

RetroPie: Master System und Game Gear mit PS3-Controller

Das Image vom Retro-Pie-Projekt setzt für Sega Master System und Sega Game Gear auf den Emulator Osmose, für den die Tastenbelegung leider nicht durch eine Oberfläche konfiguriert werden kann. Stattdessen sind die Keycodes des Controllers als Argumente zu übergeben. Der folgende Test funktioniert mit meinem Playstation-3-Controller:

./RetroPie/emulators/osmose-0.8.1+rpi20121122/osmose RetroPie/roms/mastersystem/rom.sms -joy -joy1 15 -joy2 14 -joystart 3

Dies belegt die Tasten Quadrat, X und Start. Somit kann dies in Emulationstation hinterlegt werden, damit dies auch aus dem Kioskmodus funktioniert. Weiterlesen

Veröffentlicht unter , | Verschlagwortet mit , , | Hinterlasse einen Kommentar

RetroPie: Playstation-3-Controller nutzen

Der Controller der Playstation 3 macht im Retro-Pie-System und insbesondere Emulationstation einige Probleme. So scheint der Controller-Einrichtungsassistent permanent Tastendrücke (-drucke(?), -drucks(!?)) zu registrieren, was wohl auf die Bewegungssensoren zurückzuführen ist. Wird nichts registriert muss man ihn mit einem Druck auf die Playstation-Taste aktivieren.

Nach der verkorksten Kalibrierung sollte man Emulationstation mit F4 verlassen und sich manuell an den Konfigurationsdateien versuchen. Ich hoffe mal dass die Keycodes dieses Controllertyps immer gleich sind und meine Konfigurationen auch anderen helfen können. Weiterlesen

Veröffentlicht unter , | Verschlagwortet mit , , | Hinterlasse einen Kommentar

RetroPie: Retrospiele auf dem Raspberry Pi

Das Retro-Pie-Projekt bringt alte Spieleklassiker auf den Raspberry Pi. Ob Nintendo, Sega oder Atari, das fertige Image bringt bereits eine interessante Auswahl an Emulatoren mit. Der Pi schlägt sich dabei bis ins 16-Bit-Zeitalter ohne Probleme. Super-Nintendo-Spiele laufen in der Regel mit 50 Bildern in der Sekunde. Weiterlesen

Veröffentlicht unter , | Verschlagwortet mit , , | 3 Kommentare

YAML-Manipulation mit Python

Ich mache es zwanzig mal am Tag: t('admin.users.show.name'), die YAML-Datei öffnen, in denen sich die Übersetzungen befinden, den Pfad absuchen und ggf. fehlende Teile einfügen und zuletzt die Übersetzung hineinschreiben und speichern. Wirklich kreativ ist dabei nur das Formulieren, den Rest würde ich gern automatisieren. Dies sollte jedem Rails-Entwickler eine Hilfe sein.

Mein erster Schritt ist eine simple Kommandozeilen-Applikation, die eine YAML-Datei und einen Pfad liest, den Pfad findet oder erstellt, den aktuellen Wert anzeigt, einen neuen entgegennimmt, einträgt und alles in eine Datei schreibt. Das alles möglichst nah an Vim und Sublime, so dass man das ganze später in ein Plugin überführen kann. Somit bietet sich Python an, schon allein um mal wieder was neues zu nutzen.

Weiterlesen

Veröffentlicht unter | Verschlagwortet mit , , , , | Hinterlasse einen Kommentar

Guard erkennt keine Sublime-3-Änderungen

Sublime Text 3 hat das Speichern von Dateien umgestellt, so dass Guard dieses nicht mehr als Änderung registriert. Abhilfe schafft hier eine Rückkehr zum alten Ansatz. Hierfür unter „Preferences“ > „Settings — User“ die folgende Option setzen:

{
  ...
  "atomic_save": false,
  ...
}
Veröffentlicht unter | Verschlagwortet mit , , , | Hinterlasse einen Kommentar