Start a hosting plan from $3.92/mo and get a free year on Tuts+ (normally $180)
At the end of December, you read Andrew's list of the hottest technologies, tools, and resources to come from 2010. Today, we're going to look forward, and take a peek at some exciting emerging technologies and trends.
A Word from the Author
The tools and technologies that we, as web developers, work with is in a state of constant flux, much like every other industry. What separates us from the rest is that we have to learn, unlearn and relearn new developments at a much faster rate, much more frequently.
Today, I'd like to talk about a few technologies and trends that I think are going to be quite important in the coming year: a pseudo prediction/wish list/what we're going to cover this year post of sorts.
The technologies listed below weren't exactly hatched recently. In fact, some are quite old and have been in use for a while now, in their insular niches. That said, I do feel that this is the year they gain even more mainstream awareness. As a great man once said, An invasion of armies can be resisted, but not an idea whose time has come. Let's get started!
Why are people excited about noSQL? And by people, I mean some of the big fishes including Google, Facebook and Twitter. For one, the concept of noSQL has redefined the way we perceive databases and the corresponding interactions.
Sometimes, you simply want to store and have access to your data, with low latency and excellent scalability.
Databases, historically, have almost always been about implementing the relational model and being fully ACID-compliant. If your transactions weren't ACID, or your database wasn't relational, people scoffed at you for being a "kiddie" database.
The issue is the relational model isn't really necessary everywhere. Neither is ACID, though many noSQL implementations enforce some sort of data integrity and consistency. Sometimes, you simply want to store and have access to your data, with low latency and excellent scalability. Applications with massive amounts of read/write operations are an excellent choice.
Another big factor for me is the simplicity it brings to my schema: your data models can now become a lot more sane. I can't wait to not muck around with my models just to make it fit into the relational model.
Implementations of Interest
noSQL at Facebook
There maybe no better example than Facebook when it comes to how to handle enormous traffic. It's no surprise that traditional methods of scaling won't quite work for Facebook.
Now part of the Apache Foundation, Cassandra, a noSQL implementation, was developed in-house to help with searching data. Currently, it powers Facebook's inbox search.
Facebook also makes use of another noSQL solution, HBase, for its messaging platform.
noSQL at Twitter
Twitter's reliability used to be, well, infamous. On of the main reasons was that their setup wasn't really scaling all that well. Twitter now uses a mix of SQL and noSQL to manage their data.
Just like Facebook, Twitter uses a mix of Cassandra and HBase. Cassandra is used for all the front facing applications while HBase is used to data mining, analysis and analytics.
Technologies of Interest
It doesn't spawn a separate thread for each connection like most others. Instead it works through asynchronous operation which significantly minimizes latency. If it has stopped making sense, remember to read a primer on node.js published right here on Nettuts+. We'll also be covering this topic extensively over the next few months so stay tuned!
3. Easier Hosting, Deployment and Scaling
Bottom line, scaling is a pain.
The rise of as a service businesses have only helped developer tangentially in the past. Most of them were ports of functionality that we required, with the exception of maybe project and bug tracking. Recently, a number of services have opened up that significantly ease up a developer's life.
Deployment has always been an issue with non-trivial web applications since you need to do more than copy over the files to the server. Scaling, too, has been an issue -- not just in bandwidth, but in computing capacity as well. We must setup load balancers, a caching system, maybe even a lightweight server to serve up static content. Bottom line, scaling is a pain. It's a rather involved activity, especially when you're strapped for time.
Platforms as a service, as they're popularly called, remove almost all of the hassle for a developer. Deploying? Merely push to a git repo and everything is handled for you. Expecting a massive rush of traffic and worried whether your application will buckle down? Merely add more nodes or workers to your instance and you're done.
Services of Interest
Heroku is a perfect example of the simplicity services like these can bring to the table. Deploying to my app is really just pushing code to my github repo. Computing capacity and memory, among others, can be dynamically allocated as well. As an added incentive, a lot of noSQL solutions are available as well to be used, including Redis and MongoDB.
Amazon Web Services is an umbrella term for a number of awesome services they run. The ones of interest today are:
- Amazon Elastic Compute Cloud [EC2] let's you create virtual servers that are incredibly scalable. You just need to choose the amount of power you require.
- Amazon Simple Storage Service [S3] provides cheap, reliable web based storage. All Envato sites and marketplaces use S3 almost exclusively to store and serve content.
4. Utility JS Libraries
We saw a number of utility libraries, such as Modernizr that gained immense popularity last year -- a sign that developers are always looking for nifty libraries that let them use cutting edge technology whilst saving time. This year should be even. Here are a few tools that might pique your interest.
Libraries of Interest
This library is a true powerhouse. It takes care of loading your scripts in a parallel nature, mimics Modernizr by adding specific classes to your document and much more. Definitely a much watch!
$ characters by default, underscore maps to the
_ character. Check out the site for a full rundown of the utility functions it contains.
This is a simple templating library that should make handling data much more simpler. You simply need to create a custom template, map it to your data and run the code. If you're even the least bit interested, you should check out a quick tip we published a couple of months ago!
Testing is an integral, intrinsic part of the software development process.
Unit testing, specifically, is the testing of individual software components.
The difference is that these tests are performed by the developer, since writing tests, in general, requires knowledge of the source.
Tools of Interest
FireUnit is implemented as a Firefox extension and requires Firebug. This may be good or bad depending on your perspective. For me, since Firebug already is a big part of my development workflow, this is a boon. FireUnit adds an additional test tab to Firebug through which you can access your tests and results.
6. Raphael-esque Libraries for Canvas
HTML5 brought us the canvas element which opened up new vistas for us. It provided low level, per pixel control over the drawing area which was unheard of before. Previously, you'd usually have to resort to either rendering an image in the backend and relay it or using a browser plugin.
Canvas is a game changer in that aspect.
The issue here is that it is truly low level. Per pixel control is nice but when you're trying to create something bigger, you'll want these details abstracted from you. Kind of like how Raphael abstracts the details from the SVG element. And mind you, SVG is a lot more easier to work with.
Libraries like the one I'm looking for aren't really limited to merely providing interfaces for shapes and so on. A number of game libraries have even been released which let you work at an ever higher level.
Libraries of Interest
The library completely abstracts you from the initialization and other trivialities of the canvas element and let's you create incredibly suave content.
Akihabara is an extensive library that let's you create games rapidly. As expected, it makes use of the canvas element.
It helps you with a large number of tasks including rendering, collisions and input. Even, relatively, esoteric features like z-indexed objects and double buffering* are supported.
* If you understand what this means, you get a cookie!
Server side development has it good.
Server side development has it good. You have plenty of choices, regardless of which language you've chosen to work with; you can choose anything between a modular pick-your-component frameworks, to all encompassing full stack frameworks, to everything in between.
Usually, you'd have to choose something for your templating needs, UI and widgets, dependency management, DOM manipulation, MVC and other assorted functionalities. A number of frameworks have been slowly gaining momentum that, even though aren't quite all encompassing, promise a much better front end development experience.
Technologies of Interest
The framework consists of a number of parts including a widget system to handle different parts of the UI and a key value observing system to wire up each part which significantly reduces the amount of glue code in your application.
One of the most public facing applications of SproutCore is Apple's MobileMe.
The platform itself consists of the language itself, Objective-J, and a comprehensive library which is a port of the Cocoa frameworks on OS X.
And That's a Wrap!
And there we go. I've listed seven trends that I'm hoping truly gains mainstream awareness this year. Did I miss anything important? Let us know in the comments. Thank you so much for reading