» Publishers, Monetize your RSS feeds with FeedShow: More infos (Show/Hide Ads)
- jQuery Deferred – one step closer to desktop apps
jQuery Deferred im Detail. Wie man sich eigene Deferreds für Funktionen baut, z. B. für Funktionen mit mit einem setTimout() oder auch andere länger andauernde Aufgaben. - Pragmatic jQuery Style
Tipps und Praktiken im Umgang mit jQuery - Avoiding Common Backbone.js Pitfalls
Vermeidung von typischen Problemen und Fallstricken bei der Verwendung von Backbone.js. - Introduction to WebSockets
Ein Tutorial über das WebSocket-Protokoll, inkl. dem Bau einer eigenen Klasse. - Single page apps in depth
Freie Version von Mixu’s Buch über Single Page Apps. Geht näher auf »code and concepts« ein.
- Principles of Writing Consistent, Idiomatic JavaScript
Praktiken und Grundsätze für gutes Programmieren in JavaScript. Mann nicht alles der Stilangaben umsetzen, aber für Anfänger ein guter Ansatz. - Developing Backbone.js Applications
Entwickeln mit backbone.js. Das komplette Buch von Addy Osmani unter einer CC Lizenz. - Common JavaScript »Gotchas«
Einige gewöhnliche und ungewöhnliche Eigenschaften von Javascript. Z. B. Geltungsbereich von Variablen und deren Deklaration; globaler Namensraum; was ist »this«, was ist Async; Vererbung. - A Simplified Universal Module Definition
Beispeil eines einfachen UMD von Andrea Giammarchi. - Indexed DB, die neue HTML5-Datenbank im Browser. Teil 1: ein kurzer Überblick
Peter Kröner über die derzeitige Indexed-DB-Implementierungen, Teil 1. - Indexed DB, die neue HTML5-Datenbank im Browser. Teil 2: Browsermacken, Tools und Polyfills
Peter Kröner über die derzeitige Indexed-DB-Implementierungen, Teil 2. - Important Considerations When Building Single Page Web Apps
Grundsätzliche Überlegungen wenn man vorhat eine Single Page App zu entwickeln. Welches Framework; welche Template-Engine; AMD; Packetmanagement, Versionontrolle etc. pp. - Building Backbone.js apps with Backlift Part 1: Views and Templates
Der erste Teil eines Backbone.js-HowTo
- Object-orientation and inheritance in JavaScript: a comprehensive explanation
Wir funktioniert eigentlich objektoriente Programmierung und Vererbung in JavaScript. - Named function expressions demystified
Tipps und Tricks im Umgang mit »named functions« in JavaScript. - JavaScript design patterns – Part 1: Singleton, composite, and façade
Der erste Teil einer Serie über Entwufsmuster in JavaScript. - JavaScript design patterns – Part 2: Adapter, decorator, and factory
Der zweite Teil einer Serie über Entwufsmuster in JavaScript. - JavaScript design patterns – Part 3: Proxy, observer, and command
Der dritte Teil einer Serie über Entwufsmuster in JavaScript.
Heute mal ein paar mehr Links, da die verschlampten Links aus dem Oktober wieder gefunden habe.
- Offline First – A better HTML5 User Experience
Eine kurze Beschreibung wie man eine JavaScript-API für eine offline App aussehen könnte. - My Name Is Bound, Method Bound …
Andrea Giammarchi über Methodenbindung am Beispiel eines objektgebundenensetTimeout(). - Explorations in Unix
Analyse von Daten die in verschiedenen Formaten daher kommen mit ein paar *nix-Boardmitteln wie coreutils. - Are your mixins ECMAScript 5 compatible?
Valide Mixins für ECMAScript 3 bis ECMAScript 5. - Designing Better JavaScript APIs
Der Rodney beschreibt in einem sehr ausführlichem Artikel auf dem Smashing Magazine die wichtigsten Punkte, die man beachten sollte, wenn man eine eigene JavaScript-Bibliothek baut. - JavaScript: Function Invocation Patterns
Vier Patterns für Funktionsaufrufe in JavaScript und deren Ergebnisse, die man wissen möchte. - Single page apps in depth
Kostenlosen Buch (HTML, PDF, epub, mobi) über Single Page Apps. Geht allerdings nicht so sehr auf die technischen Aspekte ein. Es behandelt eher allgemeine Probleme, Konzepte, Patterns und allgemeine Praktiken.
- Client-side error logging
Genauer geht es in dem Artikel im Opera-Entwicklerbereich um die serverseitige Speicherung (logging) von JavaScript-Fehlern beim Client. - Yet another newb guide to git
Eine umfangreiche Sammlung an Texten, Tutorials und eine kleine Referenz für git. - SQLZOO
Ein interaktives, praktisches Tutorial zum Lernen diverser SQL-Dialekte. - 20 All Too Common Coding Pitfalls For Beginners
Tipps und Hinweise für den Programmier-Anfänger (JavaScript-/PHP) und wie man gewöhnliche Fehler beim Programmieren vermeidet.
This is a generic Textpattern template for a section based 3-level navigation and can be used in most navigation modes and styles.
With this template you can easily build complex 3-level navigations as
* 1. Home
* 2. Navpoint
o 2.1 Navpoint
+ 2.1.1 Navpoint
+ 2.1.2 Navpoint
o 2.2 Navpoint
+ 2.2.1 Navpoint
+ 2.2.2 Navpoint
o 2.3 Navpoint
+ 2.3.1 Navpoint
+ 2.3.2 Navpoint
o 2.4 Navpoint
o 2.5 Navpoint
* 3. Navpoint
o 3.1 Navpoint
+ 3.1.1 Navpoint
+ 3.1.2 Navpoint
o 3.2 Navpoint
+ 3.2.1 Navpoint
+ 3.2.2 Navpoint
o 3.3 Navpoint
+ 3.3.1 Navpoint
+ 3.3.2 Navpoint
o 3.4 Navpoint
o 3.5 Navpoint
* 4. Navpoint
o 4.1 Navpoint
+ 4.1.1 Navpoint
+ 4.1.2 Navpoint
o 4.2 Navpoint
+ 4.2.1 Navpoint
+ 4.2.2 Navpoint
o 4.3 Navpoint
+ 4.3.1 Navpoint
+ 4.3.2 Navpoint
o 4.4 Navpoint
o 4.5 Navpoint
* 5. Navpoint
* 6. Navpoint
or a not so complex structures such as
* 1. Home
* 2. Navpoint
o 2.1 Navpoint
+ 2.1.1 Navpoint
+ 2.1.2 Navpoint
* 3. Navpoint
* 4. Navpoint
You can grab the template here yab_navigation_template.
Some help and other information you can find on the GitHub repo of this template.
- Linking the Hash Map
Hash Map, Array, Object – Eine kleine schicke JavaScript Klasse für Hash Maps. - Partial Application in JavaScript
Artikel über die Konzepte »partial application« und »currying« in JavaScript. - Landscaping With Frontend Tools
Cody Lindleys Sammlung von Tools und Progrämmchen fürs Frontend-Entwicklen auf Github. - Build Your First JavaScript Library
So baut man eine einfache eigene JavaScript-Biobliothek. - Understanding the Principles of Algorithm Design
Das Konzept des Algorithmus wird erklärt und warum das fürs Programmieren wo wichtig ist.
Ich hab mir ein kleines Shellskript geschrieben, dass mir sichere Diceware-Passwörter generiert. Wer nicht weiß, was Diceware ist und warum die relativ sicher sind, dem seien folgende Links ans Herz gelegt:
- Password Strength by XKCD
- Die original Diceware-Seite
- Wikipedia-Seite zu Diceware
- und ein wenig genauer über Schlüssellängen
Das ist natürlich ein typischer Fall von NIH, weil es für die Bash/Shell oder auch online wahrscheinlich hundert andere und gut funktionierende Tools dafür gibt, aber selber programmieren und grübeln macht einfach deutlich mehr Spaß.
Die Benutzung ist relativ einfach:
$ ./roll_password.sh
gibt ein Passwort mit fünf Wörtern (english) aus. Folgende Argumente können mit übergeben werden:
-cbestimmt die Anzahl der Wörter, die das Passwort haben soll (standard:5)-ldie minimale Zeichenanzahl des gesamten Passwortes (standard:14)-wWortlistendatei aus denen sich das Passwort generieren soll (standarddiceware_wordlist_en)
Für Schlüssel-Signierungen und Kryptographie würde ich die generierten Passwörter nicht benutzen, dafür ist die $RANDOM-Umgebungsvariable nicht zufällig genug, aber als Passwörter für typische Online-Dienste sind sie sehr gut geeignet.
Das Skript kann man hier herunterladen. Im Download enthalden sind das Shellskript, die englische und die deutsche Diceware-Wortlistendatei.
Und hier noch ein bisschen Skript, für die, die nur daran interessiert sein sollten.
#!/bin/bash # # Name: roll_password.sh # Description: This script rolls a random passphrase based of a wordlist (Diceware). # Author: Tommy Schmucker # Created: 2012-06-08 # Modified: 2012-09-25 # Version: 0.2 #usage() { cat << EOFThis script rolls a random pass phrase based of a wordlist (Diceware).usage: $0 [-h] [-c number] [-l number] [-w file]-h Show this message -c Count of words in the pass phrase -l Minimun length of the pass phrase -w Wordlist fileEOF }count=5 wordlist=diceware_wordlist_en min_length=14 phrase=while getopts "hc:l:w:" option; do case $option in h) usage exit 1 ;; c) count="$OPTARG" ;; l) min_length="$OPTARG" ;; w) wordlist="$OPTARG" ;; ?) usage exit ;; esac done[ -e "$wordlist" ] || { echo "$wordlist does not exists, exiting"; exit 1; }roll_number() { number= for i in `seq 5`; do roll=`expr $RANDOM % 6` digit[i]=`expr $roll + 1` number=$number${digit[i]} done }get_word() { word= roll_number word=`cat $wordlist | grep $number | awk '{print $2}'` }get_phrase() { for j in `seq $count`; do get_word if [ $j == 1 ]; then phrase="$word" else phrase="$phrase $word" fi done }get_phrase length=`echo -e "$phrase\c" | wc -m`if [ $length -lt $min_length ]; then echo $'\n'"Phrase \"$phrase\" is too short ($length chars)."$'\n'"You should run the command again!"$'\n' else echo $'\n'"$phrase"$'\n' fi
- Asynchronous JavaScript Programming. The Power Of $.Deferred for HTML5 Application
Asynchrone APIs in Web-Apps: Wie funtioniert das mit jQuery $.Deferred. - Functional Programming in JavaScript
Funktionales Programmieren in JavaScript - The TTY demystified
Erhellende Lektüre über das TTY (Terminal, xterm, Console) eines UNIX- oder Linux-Systems. - DOM Enlightenment
Ein Buch (Online und frei verfügbar) von Cody Lindley über JavaScript und den DOM.
Mann kennst es ja aus verschiedenen jQuery-Plugins. Argumente werden als Objekt in entsprechender Notation an eine Funktion übergeben und überschreiben dabei Default-Werte. Das ist schick und hat einige Vorteile:
- jedes Argument bekommt einen Namen und ist damit selbsterklärend
- die Reihenfolge ist dabei vollkommen egal genauso wie, das Auslassen von Argumenten
- sieht schick aus und ist einfach zu pflegen
Wie macht man das nun für eigene framework-unabhängige Funktionen. Ungefähr so:
var welcome = function(options) { // default settings var defaults = { 'name' : 'World', 'greeting' : 'Hello' }; // set options var o = {}; if (typeof options !== 'undefined') { o = options; } for (var i in defaults) { if (typeof o[i] === 'undefined') { o[i] = defaults[i]; } } // your function logic var text = o.greeting + ', ' + o.name + '!'; console.log(text); }welcome({'name': 'Tommy'}); // Hello, Tommy!welcome({ 'name': 'Tommy', 'greeting': 'Hi' } // Hi, Tommy!
Ich führe hier noch eine zusätzliche Variable o ein und kopiere das options-Objekt hinein. Das braucht es normalerweise nicht. Ich finde es nur schick, wenn man sieht, was in der Funktion namentlich übergeben wird (nämlich Optionen options) und im Nachhinein kürze ich das nur zu o ab. So muss ich nicht jedes mal options ausschreiben.
- So You Want to Accept Credit Cards Online?
Ein Tutorial wie den Kreditkartendienstleitser (Prozessor) Stripe benutzt. Vom Anlegen eines Kontos bis zum Testing/Debugging. - Parallax scrolling lib with zero dependencies
Eine JavaScript-Parallax-Scrolling-Bibliothek ohne Abhängikeiten. - Asynchronous programming and continuation-passing style in JavaScript
Asynchrones JavaScript mit Callbacks wird hier »continuation-passing style« (CPS) genannt und erklärt, wie es funktioniert. - HTML5, CSS3 and Web Development Resources
Peter Kröners Linksammlung zum Thema Webentwicklung - Understanding Design Patterns in JavaScript
Was sind Design-Patterns in JavaScript und was kann man damit machen. - Preparing Yourself for Modern JavaScript Development
Wie sieht modernes JavaScript aus. Vorstellung einiger »moderner« Konzepte.
Die Methode indexOf() für das Array-Objekt ist erst seit Ende 2009 standardisiert. Bis dahin war die Methode auch noch nicht im Internet Explorer (hier IE 8) implementiert; in fast allen anderen Browsern schon. Die Methode kann man jedoch nachträglich selbst in sein Script einfügen um, die Funktionalität auch für den Internet Explorer <= 8 zu gewährleisten.
if (!Array.prototype.indexOf) {
Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {
"use strict";
if (this == null) {
throw new TypeError();
}
var t = Object(this);
var len = t.length >>> 0;
if (len === 0) {
return -1;
}
var n = 0;
if (arguments.length > 0) {
n = Number(arguments[1]);
if (n != n) { // shortcut for verifying if it's NaN
n = 0;
} else if (n != 0 && n != Infinity && n != -Infinity) {
n = (n > 0 || -1) * Math.floor(Math.abs(n));
}
}
if (n >= len) {
return -1;
}
var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);
for (; k < len; k++) {
if (k in t && t[k] === searchElement) {
return k;
}
}
return -1;
}
}
(via)








![Pond in Flora Cologne/Teich in Flora Köln. Tommy Schmucker 2013-04-01. [CC BY-SA 3.0] Pond in Flora Cologne/Teich in Flora Köln. Tommy Schmucker 2013-04-01. [CC BY-SA 3.0]](http://www.yablo.de/images/87t.jpg)
![Abtei Maria Laach/Maria Laach Abbey. Tommy Schmucker 18/08/2012. [CC BY-SA 3.0] Abtei Maria Laach/Maria Laach Abbey. Tommy Schmucker 18/08/2012. [CC BY-SA 3.0]](http://www.yablo.de/images/86t.jpg)
![Hafen Koeln-Niehl/Docks Cologne-Niehl. Tommy Schmucker 12/08/2012. [CC BY-SA 3.0] Hafen Koeln-Niehl/Docks Cologne-Niehl. Tommy Schmucker 12/08/2012. [CC BY-SA 3.0]](http://www.yablo.de/images/85t.jpg)
![Barley/Gerste. Tommy Schmucker 12/08/2012. [CC BY-SA 3.0] Barley/Gerste. Tommy Schmucker 12/08/2012. [CC BY-SA 3.0]](http://www.yablo.de/images/84t.jpg)
![Cactus/Kaktus. Tommy Schmucker 12/08/2012. [CC BY-SA 3.0] Cactus/Kaktus. Tommy Schmucker 12/08/2012. [CC BY-SA 3.0]](http://www.yablo.de/images/83t.jpg)
![Cologne/Köln. Tommy Schmucker 08/08/2012. [CC BY-SA 3.0] Cologne/Köln. Tommy Schmucker 08/08/2012. [CC BY-SA 3.0]](http://www.yablo.de/images/82t.jpg)
![Cartwheel. Tommy Schmucker 04/08/2012. [CC BY-SA 3.0] Cartwheel. Tommy Schmucker 04/08/2012. [CC BY-SA 3.0]](http://www.yablo.de/images/81t.jpg)
![Police Car. Tommy Schmucker 29/07/2012. [CC BY-SA 3.0] Police Car. Tommy Schmucker 29/07/2012. [CC BY-SA 3.0]](http://www.yablo.de/images/80t.jpg)