I’ve been spending the past couple of weeks trying out various new technologies I’ve had my eye on for awhile. I usually just stick to Rails and standard JS/jQuery for my own code, but every once in awhile I get an urge to see what else is out there and what is still on the horizon.

Meteor

Last weekend, I bought Discover Meteor, a recent book that serves as an introduction to the Meteor web framework. Meteor is a Node.js-based framework that aims to revolutionize the way we develop web applications. By taking “no boilerplate” as a philosophy to the maximum, Meteor does away with much of the standard data handling that comes with the territory by taking care of the database completely behind the scenes for you. It also uses a subscription service to keep a local copy of the parts of the db that the user needs in the user’s memory. By using Sock.js to keep a connection alive with the client, anytime something changes on the database located on the server, the client sees the change instantly without a browser refresh and without using AJAX.
While certainly interesting, Meteor is still very much in development. You are stuck with some of their infrastructure choices (e.g. currently only MongoDb can be used for persistence) and I am not aware of any major projects that have used Meteor as their basis. While it does have some kinks to be ironed out, I am excited to see where Meteor goes in the future. I feel like, more than most of the JS frameworks that have sprung up the past few years, Meteor has the biggest chance to really shake up the way we do things in the way that Rails did when it came on the scene 9 years ago.

AngularJS

The second JS framework of this post and the first of two products built by Google engineers is AngularJS. Most frontend JS development excitement for the past couple of years has been centered on Backbone.js, a lightweight library meant to help you write complicated JavaScript applications without having to wrestle with thousands of lines of spaghetti jQuery. While Backbone has proved exceedingly popular with front-end developers, it lacks a lot of features baked-in that many developers have come to expect from the larger frameworks out there (though, there are often libraries to cover the missing functionality). Ember.js and AngularJS have become the leading contenders to fill in the void of more full-featured frameworks and have differing approaches to accomplish this. While Ember (descended from SproutCore) takes a Rails-like mentality to front-end development (Yehuda Katz being a prominent developer associated strongly with both projects), AngularJS takes a novel approach to front-end development.

AngularJS uses a combination of in-line editing for views inside your HTML documents and dependency injection in its controllers to handle data. While this approach may seem odd at first (or worse, PHP-esque), it is hard not to realize how powerful and convenient this setup can be. On top of that, Angular allows you to define your own directives to make your own customized HTML syntax, along with a ton of other features only a detailed read through the documentation will explain fully. AngularJS is still a newer framework, so I expect (and hope) to see some changes. It can also be a little intimidating to someone who comes to it from a background only using backbone.js or Rails or other existing frameworks. I found Egghead.io’s videos to be the most helpful for learning the details, along with the excellent tutorial the Angular team provides.

Go

Go 1.1 was released Monday to much fanfare in the geek world. Go is another new programming language built by Google engineers (this time Ken Thompson & Rob Pike’s team of Unix and Plan 9 fame) that tries to either be the “anti-Java” or create the “new C” depending on your philosophical inclination. Go is great because it makes concurrency easy while still sticking to the general syntax of C-style languages. Considering even our phones have multiple cores these days, concurrent programming is more a hot topic than ever and unfortunately, usually just as difficult as ever. Go takes a similar approach as Erlang to concurrent programming, but with a more approachable syntax and has become very popular with Python and Ruby developers looking to write good, clean, fast code with the added benefits of using a static-typed compiled language. Go is already in use by numerous organizations and has been used to rewrite a few core Google services. I’ve already converted a couple of smaller Sinatra-based projects to Go (using the Gorilla Web Toolkit) and I feel that I’ll quickly start using Go as my go-to language (pun-intended) for simple JSON web APIs with something like AngularJS being used on the front-end.

RethinkDB

RethinkDB is the one that is newest to me, but also one that has as much of a chance to be a contender as the other three techs I’ve focused on here. According to this blog post regarding differences between MongoDB and RethinkDB, the first generation of NoSQL databases were roughly divided into two camps: developer-oriented (e.g. MongoDB or CouchDB) or operations-oriented (e.g. Cassandra or Riak). The intention of RethinkDB is to be the first of a second-generation of NoSQL databases that combines the benefits of both the developer- and operations-oriented approaches and diminish some of the downsides on both sides. RethinkDB comes with a powerful query language and makes sharding much easier than it is in MongoDB. RethinkDB also comes with a great web interface that makes it easy to handle database operations like replication and sharding visually along with a typical command line utility to handle the same sorts of operations. RethinkDB also has joins (like most traditional SQL-based databases) and other features that have become a thorn in the side for many NoSQL projects.

While I’m not quite ready to give up my Postgresql for the majority of my projects, it is nice to see a database out there that allows me to take advantage of the flexibility and development speed of NoSQL databases without giving up some of the things we take for granted with traditional RDBMS’s like Postgres.