Cuba
A tiny Ruby web framework built on top of rack. It has a nice DSL for minimising duplication in routes but seems to be missing a lot of the helpers that make Sinatra so easy to use.
As I always say when I’m introducing Cuba to someone, it’s a verbose, DSL-ish way to define web applications and it doesn’t match Sinatra’s maturity. But it provides the right abstraction and it’s freaking fast.
Vim Introduction
Best Vim introduction I’ve read so far in that it just gives you a list of really useful commands.
The Pry Ecosystem
Great post detailing the evolution of Pry an irb alternative that also turned out to be a useful ruby debugger. The article also provides an overview of some of the more useful extensions. My favourite of which is ruby-debug-pry which allows you to start a pry session from within ruby-debug.
Backbone and Ember
Interesting post comparing Ember to Backbone. The author also intersperses the article with snippets of an IRC chat between the founders of each project.
Ember and Backbone are both promising JavaScript frameworks but have completely different philosophies. In this post, I’ll compare the two, both from a practical and philosophical perspective.
Tower.js
Another one of those node full stack frameworks. This one looks heavily modelled after Rails so expect it to be opinionated.
Includes a database-agnostic ORM with browser (memory) and MongoDB support, modeled after ActiveRecord and Mongoid for Ruby. Includes a controller architecture that works the same on both the client and server, modeled after Rails. The routing API is pretty much exactly like Rails 3’s. Templates work on client and server as well
It seems to be well documented though so might be worth a look if you’re looking to build something seizable in node and don’t mind a bit of CoffeeScript.
Our Backwards DOM Event Libraries
Nice reminder that you can pass handler objects (anything with a handleEvent method) into .addEventListener(). This has the massive advantage of retaining the context of the callback.
document.body.addEventListener('click', function () {
console.log(this === document.body); /* true */
}, false);
var obj = {handleEvent: function () { console.log(this === obj); /* true */ }}
document.body.addEventListener('click', obj, false);
Sadly this functionality isn’t supported by jQuery which will just try to call your object as a function.
When We Build
Awe inspiring talk from Wilson Minor at last year’s Build conference on how our tools shape us. Exploring the work of Marshall McLuhan and Robert Irwin through imagery, sound and video this is one of the best talks I’ve seen in a long time.
There’s also comprehensive notes to supplement the talk available on Wilson’s website.
chrome://appcache-internals/
Saved me hours of tearing my hair out today. Now just need one of these for other browsers.
Haters gonna HATEOAS
Nice summary of the Richardson Maturity Model which describes a series of levels that a website/API can conform to the principals of REST.
Useful Principals for designing URLs
Great StackOverflow answer collating a list of best practices when designing a url scheme.