I realized that it’s been quite a while since my last update. Unfortunately it seems like the amount of interesting stuff I have to write about is inversely proportional to the spare time I have available for writing… ;)
Anyway, I figure I’ll try to get back into the habit of publishing smaller posts, but hopefully more regularly. Let’s see how it goes…
Ever since I went back into startup life four months ago, I’ve had the chance to play with a lot of exciting technologies, so there’s plenty of stuff to write about. Below are just some quick notes and mini-reviews, but I’ll be writing more about the various topics in the future.
- This is quickly becoming my web framework of choice. It is well-thought-out, highly modular, and ideally suited for both small webservices as well as large scale websites.
- The default application layout is very similar to Rails, making it easy for Rails developers to get up to speed on Merb. However, it also supports highly compact app layouts that are ideal for smaller webservices.
- I’m sure I’ll write more about Merb later.
- An awesome ORM framework, and one of several supported by Merb. Like Merb it is still pre-1.0 and therefore still evolving a lot, but it is already quite solid and very powerful.
- For my new projects, I have been using RSpec exclusively, and after a small learning curve it has really grown on me. Granted, I’m probably not taking advantage of all its features (for example I haven’t actually written my own matchers yet), but with a bit of discipline (and a heavy dose of mocking and stubbing), specs written in RSpec are probably an order of magnitude clearer and more readable than with Test::Unit.
- I took the opportunity to get rid of test fixtures as well (and good riddance!)
- Ruby in general + Rails
- Right now I am working with a mix of Merb projects, Rails projects, and standalone Ruby apps.
- I’ve had the opportunity to build a Ruby based framework for SMS based mobile apps, consisting of a processing pipeline with several independent services that communicate via asynchronous message queues, with some DSLs and meta-programming thrown in for good measure. This has allowed me to become much more familiar with Ruby than I was back when I just played with some Rails apps.
- There’s definitely a right language for every task, but I have to admit that I find it harder and harder to imagine ever going back to Java…
- Amazon Web Services (EC2, SQS, and S3)
- Using Amazon AWS as a deployment platform is a whole new experience for me, and I am very impressed with the various services. They were already solid when I started working with them, but in the past few months Amazon managed to launch several major features (such as static IP addresses and persistent storage) that significantly lower the barrier of entry.
- EC2 is particularly well-suited for the type of loosely coupled architecture we are developing, and I envision eventually being able to dynamically start and stop instances to adjust both to general growth over time, as well as fluctuations throughout the day (as mobile apps tend to exhibit certain usage patterns.)
- SQS is a convenient way to tie the different components together (albeit with some limitations, such as an 8KB maximum message size), and of course S3 is available for any storage needs.
- I will definitely blog in more detail about various AWS strategies and recipes.
- We’ve been using Git (and GitHub) for all new applications. We’re definitely not exploiting it to its full potential so far (given that we’re only a few developers that mostly work on different products, we haven’t had much of a need to leverage Git’s distributed nature), but I am definitely growing quite fond of it.
- It is extremely fast, I love being able to commit code and browse the revision history even without a network connection, topic branches are convenient and powerful, and more.
- Tool support is definitely still a weak point, but for the most part I’ve been happy using Git on the command line.
- Lots of sysadmin / deployment stuff
- System administration is definitely not my forte, but I get by (at least on Linux; Joyent’s Solaris servers still manage to throw me off occasionally…).
- I have had a chance to get more exposure to deploying Rails apps (including Mongrel, Monit, Passenger, etc.), as well as building a deployment framework for AWS from scratch.
- Deploying applications to such a cloud based architecture is quite different from a typical Rails or LAMP stack, but I’m quite happy with the initial version of the deployment framework I’ve built. I’m essentially using S3 to store versioned app packages (which correspond directly to a Git tag) as well as third party gems, and a configuration file (also in S3) for each environment (such as production or staging) defines which version should be deployed on it. Each service regularly polls S3 for configuration changes and updates itself if appropriate. We use a single machine image and configure each instance via user data upon startup, which allows the instance to pull down the appropriate files from S3 and start running the service it is intended for. A small set of Rake tasks manage deploying releases and promoting them from one environment to another one.
- There are still some challenges ahead, though, such as a proper logging system (I’m planning to migrate our apps to log to a central syslog server.)
- Various web based services, including Google Apps, GitHub, Lighthouse, Scout, and Ylastic
- All of these are great utilities.
- Google Apps is a must-have; any startup should use it at least for email and calendaring, as well as collaborating on documents or spreadsheets. We also use Google Sites as our Intranet / Wiki.
- I have briefly blogged about Scout before and will likely blog about various Scout plugins in the future.
- GitHub is an amazing application, not only for hosting our own source code, but also for following the various open source projects we depend on (such as Rails, Merb, and DataMapper.)
- We haven’t had a chance to really dive into Lighthouse yet, so the jury is still out on it. I do believe that its refreshingly simple, tag based approach should work pretty well, though.
- Last not least, Ylastic has been invaluable and a great way to manage our EC2 instances, images, debug SQS based apps, browse S3, and more. I’ll probably write up a more thorough review soon.
- Honorary mention: Pandora and Airfoil
- For keeping us supplied with music and allowing us to stream it to our Airport Express. :)
That’s it for now. Hopefully it won’t be two months before my next post…