Alle Artikel in: Codeschnipsel

Der twitternde Tiefkühlschrank

Ein Gastbeitrag von Torsten Dillenburg Als Papa eines kleinen Jungen muss man ja viel mitmachen. Ständig klaut der Sohn einem das iPad, um The Big Bang Theory zu schauen, oder er verstellt am iMac die Auflösung. Und letztens hat dann mein geliebter Filius die Küche für sich endeckt. War ja auch klar. 1. kommt da das lecker Essen her und 2. gibt es dort viele Knöpfe zu drücken. Zum Glück hat der Induktionsherd eine Kindersicherung! Aber den Tiefkühlschrank hat’s erwischt… Ein vernünftiger Dreijähriger muss natürlich auf den leuchtend grünen Knopf drücken: Und außerdem die Tür öffnen (diese Kraft, erstaunlich). Leider funktioniert der Temperaturalarm nur dann, wenn der Tiefkühlschrank auch eingeschaltet ist. Zugegeben, das musste ja alles mal abgetaut werden, aber doch nicht so! Nachdem die letzten Fischstäbchen ihr Seepferdchen gemacht hatten, der Rest an brauchbaren Nahrungsmitteln verputzt und die Küche wieder trocken gelegt war stand für mich fest: Das geht so nicht weiter! Was man zur Risikominimierung braucht ein Raspberry Pi Model B eine SD Karte (mindestens Class 10 mit 8GB) einen DS18B20-Temperatursensor einen 4,7k Ohm-Widerstand eine USB Tastatur …

Zum Frühlingsbeginn: Einfache Funktionsdefinitionen in Python

Nein, unsere Codeschnipsel-Ecke wurde nicht abgeschafft. Sie hat nur Winterschlaf gehalten. Zugegebenermaßen recht lange.  Nun, da der Frühling zwar nicht wettertechnisch, aber immerhin astronomisch beginnt, gibt’s endlich noch mal eine Erklärung mit Code. Im Fokus des folgenden Beitrags: Die leicht zu erlernende Programmiersprache Python, zwei Funktionsdefinitionen, Veronika – und der Lenz (Konzept/Originaltext von Allen B. Downey, Übersetzung von Stefan Fröhlich, redaktionelle Überarbeitung: AP). Eine Funktionsdefinition gibt den Namen einer neuen Funktion sowie die Reihe von Anweisungen an, die beim Aufruf der Funktion ausgeführt werden sollen. Hier ein Beispiel: >>> def zeige_text(): print "Veronika, der Lenz ist da." print "Die Mädchen singen trallala." >>> def zeige_text(): print "Veronika, der Lenz ist da." print "Die Mädchen singen trallala." def ist ein Schlüsselwort, das eine Funktionsdefinition kennzeichnet. Der Name dieser Funktion lautet zeige_text. Die Regeln für Funktionsnamen sind die gleichen wie für Variablennamen: Buchstaben, Zahlen und einige Interpunktionszeichen sind zulässig, aber das erste Zeichen darf keine Zahl sein. Außerdem dürfen Sie kein Schlüsselwort als Funktionsnamen wählen. Und Sie sollten vermeiden, für eine Funktion und eine Variable denselben Namen zu verwenden. Die leeren Klammern nach dem Namen zeigen an, …

iOS-Rezepte: STAR WARS Crawl basteln!

App-Entwicklung muss nicht staubtrocken sein. Das illustriert ein weiteres Beispiel aus unserem neuen Kochbuch iOS-Rezepte. Matt Drance und Paul Warren erklären darin, wie man seine iPhone- oder iPad-App mit einem perspektisch scrollenden Vor-, Zwischen- oder Abspann austattet, auch bekannt als „Star Wars Crawl“. Wir rufen allen jungen iOS-Padawanen ein herzliches  „Möge die Macht mit euch sein!“ zu – und übergeben an die Autoren: Obwohl das Beispiel eher spielerischer Natur ist, illustriert es einige wichtige Techniken. Die drei Elemente, die eine genauere Betrachtung wert sind, sind die Verwendung einer Transformation zur Verzerrung des Texts, der Einsatz von Core Animation, um den Text-View automatisch scrollen zu lassen, und der Einsatz des AVAudio-Frameworks zur Musikwiedergabe. Die  Arbeit  mit  3-D-Transformationen  kann  eine  Herausforderung  sein, aber üblicherweise nutzen wir dazu Matrizen, mit denen wir die Transformationen über die Bibliotheksmethoden erstellen, die für uns von Core Animation definiert   werden,  z.B. Skalierung (CATransform3DMakeScale), Rotation (CATransform3DMakeRotation) und Translation (CATransform-3DMakeTranslation).  Wir können auch direkt auf die einzelnen Elemente der Matrizen zugreifen, um einige sehr interessante Effekte zu gestalten. Im folgenden Code können Sie sehen, …

jQuery-Rezept: Textfelder automatisch vervollständigen

Problem Es gibt zwei HTML-Eingabefeld-Typen, bei denen ein Anwender einen Wert aus einer Liste bestehender Werte auswählen kann: Radio Buttons und Selects. Radio Buttons sind für Listen mit bis zu acht Einträgen sinnvoll, während Selects bis zu 30 oder 150 Einträgen noch gut anwendbar sind – abhängig von der Art der Daten. Wenn der Anwender aber auch einen neuen Wert eintragen kann, helfen sie nicht weiter – meist wird ihnen dann ein Feld »Andere« beigestellt. Wird die Liste richtig groß – 500 oder sogar 500.000 Einträge, dann sind auch sie nicht mehr verwendbar. Lösung Das Autocomplete-Widget von jQuery UI kann die verschiedenen Situationen abdecken, in denen ein Select nicht ausreichend ist. Im einfachsten Fall sind die anzuzeigenden Daten in einem JavaScript-Array verfügbar: Wählen Sie einen Monat aus: var months = [’Januar’, ’Februar’, ’März’, ’April’, ’Mai’, ’Juni’, ’Juli’, ’August’, ’September’, ’Oktober’, ’November’, ’Dezember’]; $(„#month“).autocomplete({ source: months }); Hier wenden wir das Autocomplete-Plugin auf ein Eingabefeld für einen Monat an, wobei die Daten in einem einfachen JavaScript-Array bereitgestellt werden. Sind die Daten noch nicht auf Client-Seite vorhanden, …

Ist das ein Bug von jQuery?

Problem Sie nutzen jQuery-Code, um ein verborgenes Element anzuzeigen und dessen HTML-Inhalt nach einer Zeitverzögerung zu setzen, die Sie mit setTimeout() erzeugen: function delayLog(text) { setTimeout( „$(’#log’).show().html(text)“, 1000); } // Irgendwo weiter unten im Code delayLog(’Hello’); Der Aufruf von .show() funktioniert, aber der von .html(text) führt nicht zum gewünschten Ergebnis. Die Firebug-Konsole zeigt, dass die Variable text nicht definiert ist. Der gleiche jQuery-Code funktioniert, wenn er nicht per setTimeout() aufgerufen wird. Gibt es ein Problem, wenn jQuery zusammen mit setTimeout() genutzt wird? Lösung Eine Möglichkeit, herauszufinden, ob jQuery die Ursache des Problems ist, ist das Ersetzen Ihres jQuery-Codes durch anderen JavaScript-Code, der kein jQuery verwendet. In diesem Beispiel können wir den jQuery-Code durch ein einfaches alert() austauschen: function delayLog( text ) { setTimeout( „alert(text)“, 1000 ); } Wenn wir diese Version des Codes auszuprobieren, taucht das gleiche Problem auf – es gibt keinen Alert und Firebug meldet wieder, dass text nicht definiert ist. Damit haben wir das Problem zwar noch nicht gelöst, es aber deutlich eingeschränkt. Es ist ganz offensichtlich nicht jQuery (sofern nicht die …