Codecademy Hour of Code: Minute des Grauens

Hinter der Idee, das Programmieren möglichst einer breiten Masse zu erklären und damit auch noch möglichst früh anzufangen, stehe ich uneingeschränkt. So war ich von Codecademy, wie von vielen webbasierten Lernplattformen, sehr angetan. Gerade niedrigschwellige Kurse zu Grundlagen bekannter Programmiersprachen sind in vielen Fällen heute recht gut umsetzbar und können Hemmschwellen überwinden helfen. Wenn sie wie Codecademy zudem kostenlos sind, reißen sie einige Hürden sogar regelrecht ein.

Aber gerade bei Codecademy fehlt mir nach langer Zeit dort eine stringente didaktische Linie. Ihre Kurse sind meist fahrige Unterrichtseinheiten, die keiner erkennbaren Qualitätskontrolle unterliegen. Dabei kommt dann gerade der erwünschte Lerneffekt zu kurz, wenn Aufgaben irreführend oder nicht lösbar sind. Das Team hinter Codecademy wirbt, ganz von der eigenen Stärke überzeugt, in den höchsten Tönen vom eigenen Angebot, wirklich nachvollziehen kann ich das aber nicht. Zu oft bin ich auf Codecademy mittlerweile in schlecht geschriebene Kurse und andere Sackgassen gerannt, nur um dann zu erfahren, dass diese von ihren Entwicklerinnen und Entwicklern aus der Community verlassen wurden. Codecademy selbst hält sich dann meist zurück. Das können sie gerne machen, es ist ihr Dienst, ihr kostenloses Angebot, doch sehr im Einklang mit dem eigenen Anspruch erscheint es nicht.

Mein Eindruck ist also der einer gewissen Fahrigkeit, vielleicht sogar auch Gleichgültigkeit seitens des Dienstes. Neuestes Indiz ist die kürzlich im App Store aufgeschlagene Anwendung *Codecademy: Hour of Code". Hier kulminiert das Auseinanderklaffen von eigenem Anspruch und tatsächlicher Leistung in einer winzigen App, deren didaktischer Wert sich mir nicht erschließt.

Codecademy schließt sich dem Projekt der Hour of Code an, das sich an absolute Anfängerinnen und Anfänger richtet. Das ist allemal ein ehrenwertes Ziel, da kann ich verschmerzen, dass die App eigentlich nur ein aufgehübschter Multiple-Choice-Test in fingierter Editorumgebung ist. Ein wenig statische Eingabe kann vielleicht die Furcht nehmen, ohne dann mit absoluter Freiheit zu verwirren. Was aber nicht geht, sind die vielen Ungereimtheiten und Achtlosigkeiten, die Codecademy in der App an den Tag legt. Da soll ich dann mein Alter eingeben, kann aber genauso auch beliebige Strings eingeben. Die App feiert mein Alter von "jj" Jahren trotzdem als bahnbrechenden Erfolg in meinem kometenhaften Aufstieg als Programmierer.

Diese Unachtsamkeit häufen sich in dem Kurs voll simpler Aufgaben, die wenig einsteigerfreundlich vor die Füße geworfen werden. Wirkliche Erklärungen, was dort mit meinem Dummy-Code passiert, erhalte ich nicht. Aber das wäre anscheinend auch zuviel verlangt, denn Codecademy will mich anscheinend nicht einmal damit verwirren, mir mitzuteilen, welche Sprache sie mir hier beibringen. Es passt für mich ins Bild, wenn hinter dieser App mehr der Wunsch nach Wahrnehmung der eigenen Marke als das tatsächliche Interesse an durchdachten Lernkonzepten steckt. Für mich ist das enttäuschend, denn es droht doch, dass damit dann doch manche Leute eher abgeschreckt werden. Denn sie können nicht wissen, wie wenig ihnen die App tatsächlich erklärt, so könnten sie doch die eigene Verwirrung über die App so auslegen, als wäre das alles einfach eben doch nichts für sie.

Castro: Alter Spalter

Diese App muss ja spalten. Als Podcatcher setzt Castro klar auf ein stromlinienförmiges Design mit spartanischer Funktionalität.

Bis jetzt gibt es keinen Podcatcher, der sich so nahtlos in iOS7 einfügt. Castro ist eine Augenweide. In der Podcastübersicht dominiert noch das schlichte Weiß, in das sich viele Apps tauchen. Doch darauf explodiert jede Seite zu den Podcast in den jeweiligen Farben der Logos, doch ohne dass Castro an Struktur verliert. im Zweifel gebe ich nicht viel auf Design, wenn es aber so schlüssig ist wie hier, bin auch ich einfach nur beeindruckt.

Aber nicht nur optisch überzeugt mich Castro, auch die komplett gestenbasierte Oberfläche könnte kaum komfortabler dein. Zumal konkurrierende Podcatcher gerne mal größere Klickstrecken sind, als die Webpräsenz einer beliebigen deutschen Lokalzeitung. Alles ist nah beieinander in Castro, denn es gibt auch gar nicht so viel, wohin man sich verirren könnte. Die Übersicht abonnierter Podcasts ist eine Liste, der Strom aktueller Episoden ist eine andere. Von dort folgen nur noch einzelne Seiten zu den Podcasts, deren Einstellungen, und den Episodenbeschreibungen. Schon der Player selbst ist in die Episodenansicht integriert und befindet sich sonst in der Fußzeile der App.

Aber es gibt ein Aber. Die gewollte Simplizität kommt auf Kosten vieler Funktionen, die zumindest die deutsche Podcasthörerschaft schmerzlich vermissen wird. Es fehlen Features über Features, die manche als essentiell betrachten werden. Es fängt schon damit an, dass die Podcastsuche wie angepriesen sehr schnell ist und sogar erlaubt Episoden zu laden, ohne den Podcast abonnieren zu müssen, aber Podcasts manuell über ihren Feed hinzuzufügen war mir bislang nicht möglich. Es fehlt auch ein Sleep-Timer, das können die meisten wohl verschmerzen. Ich für meinen Teil komme gut ohne Kapitelmarken und Social-Media-Optionen aus, das werden wiederum manche überhaupt nicht leiden können. Problematisch ist aber schon eher, dass es derzeit keinen OPML-Import und -Export gibt, was für mich schon eher ein Tabu ist.

Die Menschen sind verschieden, warum sollten Podcatcher das also nicht abbilden? Castro ist noch nicht fertig, so fühlt es sich zumindest an. Einige Features werden wie die OPML-Unterstützung mit Sicherheit noch folgen, andere werden nie folgen. Castro ist anzumerken, dass e keine Allzweckwaffe sein soll, sondern ein schlichter, reduzierter Player. Ich finde es gut, wenn eine solch minimalistische App für Podcasts sich von unten an eine gesunde Zahl von Features herantastet, um nicht überfrachtet zu werden.

Castro liefert mir Podcasts, ohne dass ich noch viel dafür tun muss. Aber noch stimmt nicht alles. So deutlich Usability und Design für mich als Nutzer da sind, so deutlich fallen die Kanten auf, die Castro noch immer hat. So begeht die App einen der Fehler, bei denen ich mir immer denke, ob wir uns alle nicht darauf einigen können, dass wir nicht mehr App-Einstellungen außerhalb der App vornehmen müssen. Es kann einfach nicht in meinem Sinne sein, in die Systemeigenschaften wechseln zu müssen, nur um einstellen zu können, wie viel Speicherplatz die Episoden etwa einnehmen dürfen. Und damit bin ich an dem Punkt, der mir noch nicht klar ist, weil Castro vielleicht sogar etwas über das Ziel hinausschießt: Castro wird mit einem intelligenten Downloadmanagement beworben, das im Hintergrund alte Episoden entfernt. Allerdings kommuniziert die App nicht, wie genau sie vorhat, das zu tun. Ich muss also darauf vertrauen, dass gehörte Episoden irgendwann gelöscht werden. Es gibt aber keine Downloadübersicht, also sehe ich nicht in einer Liste, welche Episode. noch tatsächlich auf meinem Gerät sind oder welche Downloads noch laufen oder sogar gescheitert sind. Ich habe ja überhaupt nichts gegen ein wenig Magie, aber so komplett machtlos auf sie vertrauen zu müssen, bereitet mir doch Bauchschmerzen. So ist das auch bei den Einstellungen selbst, wenn ich derzeit noch für jedes Abonnement manuell einstellen muss, dass ich nicht jede aktuelle Folge herunterladen möchte.

Ich finde es auf jeden Fall erfrischend, dass Castro sich traut, aus dem Einerlei der Podcatcher auszubrechen. Noch geht die Rechnung nicht ganz aus, verspricht aber enorm viel Gutes.

Joe Danger Touch: Mehr Gefahr als für den zweiten Vornamen gut wäre

Dieses Spiel schuldet mir eine Menge Stunden meines Lebens. Aber die kriege ich wohl nicht zurück, ich hab sie ja gern auf den Sandpisten gelassen. Joe Danger ist kein großes Spiel, aber ein richtig ordentliches. Von vorne bis hinten es auf Spielbarkeit getrimmt, selten stieß ich an eine Schwelle, wo die Motivation nachließ.

Allen voran ist die Langzeitmotivation den ausgefeilten Mechanismen geschuldet. Wir kennen das: Trophäen, Pokale, Boni und Plaketten. Alles mögliche wollen uns Designer an die Brust heften, nur um uns in die Versuchung zu führen, die Level wieder und wieder zu spielen. Damit sie uns hoffentlich etwas mehr Zeit – und damit vermeintlichen Mehrwert – aus den Rippen geschnitten haben.

Bei Joe Danger sind die spielzeitdehnenden Maßnahmeb aber so präzise austariert, es macht gar nichts aus. Die Level spielen sich durchaus unterschiedlich. Will ich möglichst Punkte machen, muss ich Stunts vorführen. Das schließt aber oft aus, einen Level im Profimodus, also mit allen Sammelgegenständen und Aufgaben zu bestehen. Und auf Zeit ist eine ganz andere Herausforderung. Aber alle Modi machen im Grunde genauso viel Spaß wie die jeweils anderen. Also wirkt sich das ganze Brimborium, das einem mobile Spiele auch so oft verleiden kann, hier nur zum Vorteil aus.

Joe Danger nimmt Canabalts minimale Spielmechanik und bläht sie wieder etwas auf. Ein One-Touch-Spiel ist es nicht mehr wirklich. Immerhin ist es noch nah dran, bietet aber kein Endlosrennen, sondern glücklicherweise kurze Abschnitte mit diversen Herausforderungen.

Pythonista: Zitatesammlung

Als ich morgens in der Ringbahn durch den App Store klickte, fielen mir einige Apps auf, die nichts anderes machten, als ein paar Zitate anzuzeigen. Da dachte ich mir, so etwas doch auch mal in Python klöppeln zu können. Gesagt, getan. Zumindest der Anfang ist gemacht.

# -*- coding: utf-8 -*-
from scene import *
from random import randrange, choice
 
class MyScene (Scene):
	def setup(self):
		self._changebackground()
		self._shownewquote()
		
	def _changebackground(self):
		background(randrange(50, 90)/100.0, 
		           randrange(50, 90)/100.0,
		           randrange(50, 90)/100.0)
	
	def _truncatestring(self, s, length=25):
		# Split into quote and author
		s, author = s
		# Truncate quote to fixed length, but
		# keeping word boundaries.
		output = []
		while len(s) > 0:
			if len(s) < length:
				output.append(s)
				break
			elif s[length - 1] == ' 'and len(s) > length:
				output.append(s[:length])
				s = s[length:]
			else:
				adjust = s[length:].find(' ')
				if adjust == -1:
					output.append(s)
					s = ''
				else:
					output.append(s[:length + adjust])
					s = s[length + adjust + 1:]
		# Strip all unnecessary blank spaces
		# from resulting strings.
		output = [line.strip() for line in output]
		# Righta-djust author and append to output
		w = max([len(data) for data in output])
		output.append(author.rjust(w))
		return '\n'.join(output)
		
	def _shownewquote(self):
		text(self._truncatestring(rq.next(), 20), x=self.size.w/2, y=self.size.h/2, font_name='DejaVuSansMono', font_size=12)
	
	def touch_began(self, touch):
		self._changebackground()
		self._shownewquote()
 
class RandomQuotes():
	def __init__(self):
		self.quotes = list(open('quotes.txt'))
		self.currentquote = self._newquote()
 
	def next(self):
		while True:
			next = self._newquote()
			if next != self.currentquote:
				self.currentquote = next
				break
		return self.currentquote
		
	def _newquote(self):
		 return choice(self.quotes).split('#-#')
		
if __name__ == '__main__':
	rq = RandomQuotes()
	run(MyScene())

Das Script nimmt sich aus einer weiteren Textdatei (quotes.txt), die auch auf Gist liegt, einige Zitate* und gibt sie dann aus. Bei jedem Touch auf das Display wird ein neues Zitat angezeigt und die Hintergrundfarbe geändert. Feinschliff ist noch überhaupt nicht angesetzt, dafür musste ich zu früh aus der Bahn aussteigen. Aber es tut immerhin ganz ordentlich.

* Die Zitate selbst stammen von Wikiquote.

Fantastical 2: Bleibt an der Spitze

Auch in seiner jüngsten Inkarnation hat Fantastical gegenüber anderen Kalenderanwendungen auf iOS die Nase vorn.

Äußerlich hat sich die App nun iOS 7 angepasst, aber auch unter der flachen Haube gibt es genug Änderungen. Nun gibt es nämlich auch noch Erinnerungen, womit der Terminkalender seine Funktionalität noch deutlich ausweitet. Im Herzen schlägt aber immer noch Fantasticals Parser. So schnell und einfach in natürlicher Sprache kann ich sonst kaum irgendwo meine Termine und Aufgaben eingeben. Fantastical lässt sich dabei auch noch von anderen Apps über ein URL-Schema fernsteuern, weshalb ich mit meiner Kommandozentrale Drafts es noch einfacher habe, meine Termine zu strukturieren.

Drafts-Rezepte XI: Sprachausgabe

Endlich wurde das Update von Pythonista durch Apples Schleusen gespült. Und wie gewohnt, kommt mit einem Update noch einmal eine Menge Qualität zu Pythonista hinzu. Unter den vielen Änderungen sind wieder so viele dabei, ich will das mal am Beispiel eines der neuen Module feiern. Die Version 1.4 von Pythonista bringt das speech-Modul, mit dem eine einfache Text-to-speech-Ausgabe unter iOS genutzt wird. Viel ist da gar nicht zu machen.

import speech
import sys

speech.say(sys.argv[1])

Die Action für Drafts ist auch nicht viel länger.

pythonista://texttospeech?action=run&argv=[[draft]]

Import-Link

Dieses kleine Skript macht natürlich nicht mehr als die Sprachausgabe – und das auch nur in der Systemsprache. Ich war zu faul, auf die Schnelle noch eine Option für die Sprache zu basteln. Ich muss ja auch noch den Rest des Updates kennenlernen.

Aviate Launcher: Abheben

Noch ist es lange nicht so weit, dass ich mich wirklich mit Aviate vertraut machen konnte. Die ersten Stunden mit diesem alternativen Launcher für Android sind richtig gut gewesen.

Das Video versucht ein Gefühl zu verkaufen, damit komme ich ja selten mit klar. Hier ist es auch noch überflüssiger, denn Aviate hat tatsächlich was auf dem Kasten. Es ist hübsch, allem Anschein nach nützlich und erstaunlich zugänglich. Bevor ich mir ein abschließendes Urteil erlaube, wird wohl noch etwas Zeit vergehen müssen, für den Anfang hat mich Aviate aber wieder enger an Android gebunden, als es in den letzten Wochen der Fall war. Übrigens, wer es testen will, aber an der Beta-Invite-Schranke hängt, kann mir gerne über die Kommentare ein paar Zeilen schicken. Ein paar Invites habe ich noch.

Nice Weather: Der Name sagt alles

Schon länger nichts mehr zu Android-Apps geschrieben. Das wird sich mit Nice Weather auch nicht wirklich ändern. Einfach weil die App macht, was ihr Name verspricht: Sie zeigt das Wetter für beliebige Orte an. Fertig.

Gut, ein paar Worte mehr kann ich noch verlieren. Da wäre, dass die App im minimalistischen Design eher nach iOS7 aussieht, was für manche ja nicht unbedingt ein Gütesiegel ist. Aber rufen wir uns in Erinnerung, wie hässlich Android sein kann, ist das ein großes Lob. Mir gefällt auch hier das versteckte Feature, auf dem Zeitstrahl für den angezeigten Tag hin und her zu fahren, um die Wetteränderungen verfolgen zu können. Aber wirklich, minimalistischer und effizienter geht eine Wetter-App nicht, als es Nice Weather hier vormacht. Einfach anschauen, kostet nichts. Zumindest ein Standort nicht, wer mehr braucht, zahlt 1.50€ im Jahr.

Bild: Google Play Store

UntilOff: Feine kleine Akkuverbrauchsvorhersage

So ein bisschen spiele ich gerade noch mit UntilOff rum. Im Grunde ist das ja eine sehr überschaubare App, die aufgrund bestehender Messdaten vorherzusagen versucht, wie lange der Akku meines iPhones noch halten wird. Es hängt dabei vor allem doch sehr von meiner Disziplin ab, um die App für die Messpunkte zu öffnen. Je mehr ich habe, umso besser für die zuverlässige Vorhersage. Diese Vorhersage finde ich sehr hübsch gemacht.

Mit dem Geofencing muss ich aber noch ein wenig spielen, denn dazu kam ich bis jetzt nicht. Die Idee ist allerdings ziemlich gut, beim Verlassen einer von mir definierten Zone einen Messpunkt auszulösen. Wegen meines Bewegungsmangels und auch weil ich die Ortungsdienste in der Regel nicht nutze, habe ich diese Funktion bislang nur theoretisch wahrgenommen. Aber ich schrieb ja schon: Ich spiele noch mit der App rum.

Viz – Ich mach da mal ein Diagramm draus

Normalerweise habe ich nicht unbedingt den Bedarf, mal eben unterwegs ein Kreisdiagramm zusammenklöppeln zu müssen. Mit Viz könnte ich das aber locker auf meinem iPhone machen.

Es ist nicht reichlich komplex. Vizsoll aber gar nicht so überfrachtet wie eine Tabellenkalkulation sein. Umfassende Datenverarbeitung ist absichtlich nicht drin. Die Daten haben einen Namen und einen Wert. Mehr geht nicht. Dann noch schnell mal auswählen, welcher der fünf Diagrammtypen es denn sein soll. Dazu noch aus der Handvoll fertiger Farbpalette diejenige auswähleb, die am besten aussieht. Schon ist das Diagramm fertig. Am Ende habe ich dann ein flaches, aber schickes Diagramm für einfache Daten, das ich schnell in den großen sozialen Netzwerken verteilen kann. Ist mir nicht danach, das Diagramm öffentlich zu verbreiten, kann ich es auch in der App für später speichern. Oder auch als Bild in die Fotogalerie exportieren.

Umfassend ist also anders. Für Viz spricht, wie schnell ich ein paar simple Datensätze in Form gebracht habe. Das lässt sich durchaus sehen. Sehr viel mehr will ich auf einem Mobilgerät auch nicht machen. Daher ist Viz für mich eine nützliche Ergänzung. Aber schon bei größeren Datenmengen wird es lästig werden, diese alle einzeln einzuhacken. Viz ist also eer für kleine Appetithäppchen von Daten, die durch eine schnelle Visualisierung aufgelockert werden sollen. Alles über diese Beschreibung hinaus wäre eine Überforderung der App. Das kann sie einfach nich leisten.

Heute ist ein Versuch sogar besonders lohnenswert: Viz ist gerade kostenlos im App Store zu haben.

Bild: App Store