more

Best Learning Resources for Meteor.js

Meteor.js is an open-source platform built on node.js for building web apps quite rapidly. It is designed to allow programmers to create applications in a modern fashion, using up-to-date paradigms. Thanks to their $11 million dollar budget the time until it will hit v1.0 should not be too long. If you’re interested to know what features will be available when, have a look at the Meteor Roadmap.

In the meantime, if you want to learn more about developing applications using JavaScript and Meteor, here’s a short compilations of things I found helpful to jumpstart.

JavaScript

First, you need to know JavaScript, obviously. But not any frontend library like jQuery or MooTools, but the actual language (plus it doesn’t hurt to know a bit or two about libraries, esp. jQuery).

General Meteor Resources

Once you know JavaScript basics you can dive into Meteor. Since the aim of Meteor.js is to radically simplify app development, you will very quickly be able to see good results.

Code Tutorials

Code examples

You may wish to study some projects that were developed using Meteor.js. Those can typically be found on Github as well.

  • See apps Made with Meteor.
  • Telesc.pe is a hacker-news clone built entirely on Meteor.
  • Doc-share is a document sharing site.
  • Subtitles allows you to easily create subtitles (SRT files) in your web browser. Using Meteor, of course.
  • BrowPie shows visitor stats as Browser charts.

Testing

Ready for Production

Once the coding is done and your app is tested, you want to go live. For that the following may be interesting:

Books

The internet is great for up-to-date information, but sometimes a book (on paper or electronic) provides better structure and didactic concept, so that you may wish to use one in the beginning to make the most of your learning experience.

Related Frameworks

  • Should you need to include Angular.js, you’ll find a good overview of learning resources at whydoifollow.com.
  • Learn Backbone.js Completely on JavaScript.is.

Packages I use

So I can find them again (and have a link to their documentation), here is a short list of some packages I like to use relatively often. (This list will grow!)

Know more?

Do you know any other resources that you find useful in getting productive with the Meteor framework? Let me know via Twitter or Email and I will add them here.

View Trello Boards as lists

I like Trello. It is my first choice when I plan any kind of activity or todo list. A lot of people think so too, for example the Meteor Roadmap uses a Trello board. Unfortunately having a board view does not allow you for easy sorting on various criteria.

Recently I prepared a lightning talk on localization of Meteor apps. This topic is still in its infancy and very few really helpful information is available on the subject. Out of curiosity I wanted to see how much interest the i18n topic had compared with other items, scheduled for an earlier release. Bascially I wanted to measure whether the things coming up next on the Roadmap are actually the ones with the most votes and/or comments, or whether postponed items such as i18n had actually a much higher demand.

As it turns out, writing a converter between Trello and the famous jQuery Datatables is really simple. I tried to do it in Meteor (and at some point I shall certainly port it over), but decided to do it the old-fashioned way as I am just a Javascript beginner and felt I needed to catch up on the basics before I should play with the fancy stuff.

The Trello API, or more specifically client.js, was not too helpful for me. It made things very complicated for a n00b such as me. I decided to use plain calls to their REST API instead. Together with some Twitter Bootstrap magic and the finishing jQuery touch I came up with trello2datatables. You can view any Trello board you like, but it defaults to the Meteor Roadmap.

Try it out for yourself and then go fork it, port it to Meteor or let me know how badly I screwed up here, it’s my first useful Javascript project in a while (not counting this killer Meteor-app I’ve been working on silently behind the scenes – more on that later.

Check it out at lab.yauh.de/trello2datatables.

Konfigurationsmanagement mit Ansible

Ursprünglich habe ich meine Rechner mit ein paar Bash-Skripten automatisiert eingerichtet. Via SSH ist das alles kein Problem, aber mit der Zeit etwas fummelig. Daher war ich auf der Suche nach einem echten Konfigurationshilfsmittel für (virtuelle) Server.

Ansible

Wer Anwendungen im Internet bereitstellt, nutzt in der Regel mehrere Server. Um im Bedarfsfalle schnell einzelne Server auszutauschen und neu aufzusetzen, eignen sich Werkzeuge wie Ansible. Es gibt heute zahllose kostenfrei verfügbare Tools (siehe auch unten). Ansible habe ich besonders wegen seines schlanken Ansatzes (kein Daemon auf dem Server notwendig) ausgewählt. Auch, dass ich nicht extra eine weitere Programmiersprache lernen muss, ist ein großes Plus.

Szenario

Ich plane zwei Systeme mit Ansible zu nutzen. Die Anzahl der Server ist grundsätzlich beliebig anpassbar – entscheidend ist, dass ein Rechner (hier Laptop) für die Administration genutzt wird und alle Änderungen an bestimmte (oder bei Bedarf auch alle) Server verteilt werden:

  • Laptop – ein Mac OS X MacBook, von welchem aus ich den entfernten Server einrichten will
  • Wheezy – ein Debian 7 System

Ansible auf Mac OS X installieren

MacPorts und Ansible

Ansible baut auf Python auf. Nutzer der MacPorts haben es leicht, hier reicht ein simples

laptop$ sudo port install ansible

Nutzer von Homebrew haben noch keinen solch einfachen Weg – hier braucht es ein paar Schritte mehr.

Homebrew und Ansible

Achtung, jetzt wird es etwas unsauber. Mit ansible.rb als brew-Formel klappt die Installation nur mit einem kleinen Trick (sicher geht es auch sauberer, aber dafür ist mir die Python-Verwirrung zu groß).

laptop$ brew install python
laptop$ sudo easy_install pip
laptop$ pip install Distutils2
laptop$ brew install libyaml
laptop$ pip install PyYAML
laptop$ pip install paramiko
laptop$ pip install Jinja2
laptop$ sudo mkdir -p /usr/share/ansible/
laptop$ sudo chmod -R 777 /usr/share/ansible/
laptop$ brew install ansible

Hosts anlegen

laptop$ sudo mkdir /etc/ansible
laptop$ sudo vim /etc/ansible/hosts

In der Datei /etc/ansible/hosts sollten alle zu verwaltenden Systeme stehen. In diesem Beispiel gibt es nur ein System (natürlich ist die IP-Adresse anzupassen):

laptop$ cat /etc/ansible/hosts
[testnode]
400.300.200.100

Ansible auf Debian Wheezy installieren

Das Ziel ist nun, ein möglichst minimales System bereitzuhalten, um bei Bedarf mit Playbooks das System für bestimmte Aufgaben einzurichten. Der Release von Debian 7 (Wheezy) steht kurz bevor, und da ich bislang alle meine Server unter Debian laufen lasse, ist es für mich die erste Wahl für neue Server.

Alle Abhängigkeiten werden installiert:

$ sudo apt-get install python python-yaml python-paramiko python-jinja2 gcc make

Dann folgt Ansible

wheezy$ git clone git://github.com/ansible/ansible.git
wheezy$ cd ./ansible
wheezy$ sudo make install

Verbindung testen

Um zu sehen, ob die Verbindung klappt, nutze ich einen einfachen Test auf meinem Laptop:

laptop$ ansible all -m ping --ask-pass
SSH password: 
400.300.200.100 | success >> {
    "changed": false, 
    "ping": "pong"
}

Nächste Schritte

Als nächstes kann die eigentliche Konfiguration in Form von Playbooks definiert und angewendet werden. Mehr dazu später (oder in der offiziellen Dokumentation).

Zum Beispiel können Pakete (hier: vim) auf allen Server installiert werden:

laptop$ ansible all -m apt -a "name=vim state=latest"
400.300.200.100 | success >> {
    "changed": false
}

Alternativen zu Ansible

Neben Ansible gibt es noch zahlreiche ähnliche Lösungen: Chef, Puppet, Sprinkle, Salt, Quattor und wie sie alle heißen. Auch ausgefallenere Szenarien werden durch Blueprint (aktuelle Debian-Konfiguration als Ausgangsbasis für weitere Systeme) oder Boxen (Mac OS X Rechner als Entwicklungsmaschinen einrichten) abgedeckt.

Mehr Lesestoff

MacBook Pro 2010 mit SSD aufrüsten

Da mein MacBook schon ein wenig im Einsatz ist, war es Zeit für ein Upgrade. Ein komplett neues Laptop ist nicht notwendig, das MacBook Pro von Mitte 2010 ist eigentlich immer noch geeignet für alle möglichen Lebenslagen. Nur letztens, als ich ein Video mit vier HD-Streams schneiden wollte, war doch mehr Tee-trinken als schneiden angesagt. Also habe ich mich entschlossen, mein MacBook mit einer schnellen SSD auszustatten. Da intern nur eine SATA-II-Schnittstelle vorhanden ist, reicht mir die gute alte Crucial M4 512GB vollkommen aus.

Da eine SSD ein wenig anders als eine herkömmliche Festplatte funktioniert, empfiehlt es sich, ein paar Anpassungen unter Mac OS X vorzunehmen. Ich nutze derzeit 10.8.2 und habe alle Schritte in weniger als ein paar Minuten durchgeführt.

Lokale TimeMachine Backups

Backups mit TimeMachine gehen bei mir auf zwei verschiedene Platten, eine Firewire-800-HD und ein NAS. TimeMachine macht aber standardmäßig auch lokal ein Backup, welches unnötig Platz beansprucht. In den Systemeinstellungen kann man leicht erkennen, ob lokale Backups aktiv sind, wenn folgender Satz zu finden ist: “TimeMachine behält Lokale Schnappschüsse, solange Speicherplatz vorhanden ist.”

Lokale Backups mit TimeMachine

Da ich kein lokales Backup brauche, kann ich dies mit einem einfachen Befehl im Terminal ausschalten:

sudo tmutil disablelocal

Bei Bedarf lassen sich lokale Backups natürlich auch wieder einschalten.

sudo tmutil enablelocal

Hibernation

Wenn Mac OS X den Rechner schlafen lässt, sichert es vorher sorgfältig den gesamten Inhalt des RAMs auf die Platte. Meiner SSD möchte ich aber diese unnötigen Schreibvorgänge gerne ersparen. Ich kann mich nicht erinnern, wann ich das letzte Mal den Rechner schlafen geschickt habe, und er dann die gesamte Batterie geleert hätte.

sudo pmset -a hibernatemode 0

Das noch vorhandene Image kann übrigens auch weg:

sudo rm /var/vm/sleepimage

Sudden Motion Senson

Festplatten haben bewegliche Teile. Bei einem Sturz des Laptops kann es dann gerne mal zu einem sogenannten Head-Crash kommen. Die Schreib-/Leseköpfe werden dann unsanft aus ihrer Bahn gelenkt und der weitere Einsatz der Platte ist unmöglich. Der Sudden Motion Sensor bewahrt vor solch einem Fall, indem er merkt, dass das MacBook fällt und sofort die Köpfe in eine sichere Parkposition bringt.

Bei SSDs bewegt sich nicht, also kann ich auf den Bewegungssensor verzichten:

sudo pmset -a sms 0

Trim

Die Trim-Funktion arbeitet derzeit nur mit Apples Original-SSDs zusammen, so dass eine externe (kostenlose) Hilfe notwendig wird: der Trim-Enabler. Einfach einschalten, neustarten, fertig.

TrimEnabler

Einstellungen prüfen

Im Terminal kann man nun die vorhandenen Einstellungen prüfen:

pmset -g

Die Ausgabe von pmset -g

Bonus: noatime – Zugriffe protokollieren

Unter Mac OS X sorgt jeder Lesezugriff auf eine Datei dafür, dass der letzte Zugriff auf die Datei protokolliert wird (genannt atime, bzw. access time). Dies kann man ausschalten, um auch noch das letzte Prozent Leistung aus der SSD zu kitzeln. Hierzu muss man jedoch ein mehr als nur einen Befehl ausführen.

Zunächst muss eine Datei namens /Library/LaunchDaemons/com.noatime.plist mit dem folgenden Inhalt angelegt werden:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" 
        "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
    <dict>
        <key>Label</key>
        <string>com.nullvision.noatime</string>
        <key>ProgramArguments</key>
        <array>
            <string>mount</string>
            <string>-vuwo</string>
            <string>noatime</string>
            <string>/</string>
        </array>
        <key>RunAtLoad</key>
        <true/>
    </dict>
</plist>

Dann werden die Rechte im Terminal angepasst:

sudo chown root:wheel /Library/LaunchDaemons/com.noatime.plist

Dann folgt ein Neustart. Nun sollte im Terminal bei Eingabe des Befehls mount ein noatime hinter der Festplatte mit der Partition / stehen:

mount jetzt mit noatime

Wie schnell ist die SSD nun wirklich?

Natürlich kann man jetzt versucht sein, möglichst genau zu wissen, wie schnell die SSD ist. Dummerweise ist die Lebensdauer einer SSD jedoch durch die maximale Anzahl an Schreib-/Lesezugriffen begrenzt. Ein Benchmark bedingt jedoch, dass eine mehr oder weniger große Menge an Daten geschrieben und gelesen wird. Dauerhafte Benchmarks führen also eher zu einer kürzeren Lebensdauer der Platte und führen in der Regel sowieso zu keinem wirklich Erkenntnisgewinn.

Ich fand den Umstieg auf SSD nicht so überwältigend, wie ich es zunächst erwartet hätte. Doch im Alltag ist der Geschwindigkeitsgewinn deutlich zu spüren. Nicht nur beim Ein- und Ausschalten des Laptops, auch bei allen Programmstarts (mit Ausnahme des ersten Starts vielleicht) geht alles deutlich schneller.

Benchmarkergebnis

Es geht wieder los

Minimalismus ist in. Um mit dem Zeitgeist mitzuhalten, hat yauh.de auch gewaltig abgespeckt. Statt möglichst vieler Knöpfe, Links und Texten kommt der Neustart schlicht daher.

Fast ein Jahr lang hat es gedauert, jetzt begegnet mir immer wieder das ein oder andere Thema, was einfach nicht zum Feierabendyogi passen will. Also ist die Konsequenz, endlich wieder zurück zu den Wurzeln zu gehen. Alle neuen Errungenschaften wie Tags, Social Links und so ein Gedöns bleibt erst mal raus. Vielleicht steigert der Einfach-Schreiben-Ansatz auch die Produktivität ;-)