Alle Artikel in: Codeschnipsel

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 …

Arrays mit jQuery.grep filtern

Wenn man über jQuery spricht, geht es häufig um die Hauptkonzepte – das Bearbeiten des DOM und der Styles sowie die Events. Es gibt aber noch eine ganze Reihe weiterer “Core”-Features und Hilfsfunktionen, die dem Entwickler entgegenkommen. Dies ist eine der nicht so bekannten Hilfsmethoden von jQuery. Problem Sie müssen Elemente in einem Array filtern und entfernen. Lösung (function($) { $(document).ready(function() { var months = [ ‘Januar’, ‘Februar’, ‘März’, ‘April’, ‘Mai’, ‘Juni’, ‘Juli’, ‘August’, ‘September’, ‘Oktober’, ‘November’, ‘Dezember’]; months = $.grep(months, function(value, i) { return ( value.indexOf(‘J’) == 0 ); }); $(‘#months’).html( ‘<li>’+ months.join (‘</li><li>’) + ‘</li>’); }); })(jQuery); Diskussion Dieses Rezept nutzt die Methode $.grep(), um das Array months so zu filtern, dass es nur Einträge entält, die mit dem Großbuchstaben J beginnen. Die Methode $.grep gibt das gefilterte Array zurück. Der vom Entwickler definierten Callback-Methode werden zwei Argumente übergeben. Sie muss den Booleschen Wert true zurückgeben, wenn ein Element beibehalten werden soll, oder false, wenn es verworfen werden kann. Das erste Argument ist der Wert des Array-Elements (in diesem Fall der Monat), während …

Von Hamstern und Systemadministratoren – cucumber-nagios

In seinem Gastbeitrag beleuchtet  Tobias Scherbaum, Autor vom Praxisbuch Nagios, das interessante Nagios-Check-Plugin cucumber-nagios, das automatisch die Verfügbarkeit von Web-Diensten prüft. Mit den üblichen Check-Plugins, welche Nagios von Haus aus mitbringt, lässt sich die Verfügbarkeit von Diensten wunderbar prüfen. Hier beginnt aber auch schon das Dilemma: Die Verfügbarkeit eines Dienstes sagt noch nicht wirklich viel über die praktische Nutzbarkeit des Dienstes aus. Ein Webserver kann weiter munter Webseiten mit dem Status-Code 200 ausliefern, auch wenn die Webseite für den Nutzer praktisch nicht mehr nutzbar ist. Stellen Sie sich die eBay-Webseite ohne funktionierende Suchmöglichkeit vor – die Seite ist zwar grundsätzlich verfügbar, ein für den Nutzer wichtiger Bestandteil der Funktionalität  jedoch nicht. Brauchte man bisher entweder einen Hamster, der regelmäßig genau diese Funktionalität prüfte, oder zumindest grundlegende Perl-Kenntnisse und etwas Zeit um ein eigenes Check-Plugin zu programmieren, gibt es mit cucumber-nagios eine echte Alternative. Exemplarisch wollen wir die Suchfunktion auf der O’Reilly Webseite prüfen und sicherstellen, dass das Praxisbuch Nagios im Online-Katalog gefunden werden kann. Lassen Sie uns den Hamster wieder in den Käfig bringen ;) …