My current strategy is just to try hacking on one new technology every week and create something simple. The primary goal is to learn new stuff and have fun. So here are some ideas I came up with during brainstorming.
1. Eventmachine & web crawling
Ever wondered how to write a fast distributed web-crawler? If you code in Ruby, you may use Eventmachine. It’s event-processing library for Ruby that implements Reactor pattern which provides you with non-blocking IO. Normally, if you send a http request it will block an entire process until the response is received. Even if you try to use threads it won’t help and crawling speed will suck.
Here are some libraries that work on the top of event machine and help you to make requests asynchronous.
Asynchronous HTTP client. em-http-request
Asynchronous Redis client em-redis
Non-blocking DNS-resolution em-resolv-replace
2. Brainwave sensing headsets
Currently, I’m aware of two affordable brainwave sensing headsets on the market:
Such headsets are measuring brainwave impulses from the forehead and generate interesting data based on it. What’s interesting about it is that there is number of amazing applications developed for such devices: from games that you control with your mind where you can just move objects with the power of your thought to researching tools for serious neurohackers. You can can develop your own applications using such languages as C++, C#, .NET or Java. Unfortunately I haven’t found any support for Ruby or Python yet, but we that’s not going to stop anyone, right? ;)
3. Face recognition API
Face.com looks like a great service that allows to detect, recognize and tag faces thought the REST API. You can combine different sources and, for instance, find Facebook friends in Flickr photos or a private photoalbum. As a dirty idea for a weekend hacking: spend a day and write a script that finds your girlfriend’s profile on match.com ;)
4. Bigdata: Hadoop, HBase, Hive and Pig
Technologies related to Bigdata are very interesting to hack on. Setting up a hadoop cluster, writing mappers and reducers to do some badass calculations and process huge amounts of data can fill up evenings with the real geek fun. Try to figure out how HBase and Hypertable work which are modeled after Google’s BigTable. Then set up Hive or Pig and learn how to run complex SQL- like queries without writing mappers in Java.
A couple of previous posts related to it:
Hadoop 1.0 + MongoDB: the Beginning
How to Set Up a Hadoop Cluster with Mongo Support on EC2
5. Amazon AWS
A lot of startups create their services based on Amazon AWS: dropbox, heroku, engine yard, mongohq, etc. Nowadays you don’t need to have your own datacenter to build anything like dropbox. So one of the days I was wondered how really complicated it would be to build something like dropbox. Basically it’s a simple client that connects to a bucket on Amazon S3 and allows you to upload files there by putting them to a specific folder on your computer. Sounds like a one-evening deal for a simple version.
7. Mobile development frameworks
The fastest ways to develop mobile applications
All three frameworks allow to write applications for a bunch of different platforms: iPhone IOS, Android, Symbian, etc. Phonegap and Appcelerator leverage HTML5, CSS and Javascript whereas Rhodes uses MVC Ruby framework. So it’s now easy to develop your first mobile app for all main platforms without knowing Java or Objective C.
8. Websockets, comet and socket.io
Ever wondered how real time notifications work on Facebook? Or any other web application that involves real-time interactions between users in the browser: chats, games, etc? There are number of techniques that can be used to allow a server (or rather to simulate it) to push a message to a browser: such as xhr- polling, jsonp-polling, web sockets or flash sockets. Some libraries to checkout:
faye – publish-subscribe messaging system. Very easy to use. Server is node.js based.
juggernaut – uses socket.io, node.js and redis.