Engine Yard hiring developers to help build our cloud

Posted by ezmobius Tue, 07 Apr 2009 20:19:00 GMT

I’m looking for a few good folks to join my team. You need to be able to work on site in San Francisco, we can assist with moving expenses for the right candidate.

You would work with my team(currently 5 devs). We do no bs agile style development with pairing where appropriate and test infected mentality . generally we have a fun, tight team and get to work on some of the hardest and most rewarding areas of software development relevant today.

You would be on my team working on http://engineyard.com/solo and it’s successors as well as Engine Yard’s on premises infrastructure.

You would be working on/with the following ruby technologies:

Event Machine
Many others..

You would be working on the following problem domains:

Scalable Ruby Deployment Architectures
Scalable Cloud Computing Architectures
Scalable Database Architecture
Distributed Computing
Key Value Data Stores
Infrastructure automation
Cloud provider API's
Multi-Cloud portability
Monitoring and alerting systems
Security in the Cloud
Horizontally Scalable Architectures
Many other interesting areas of computing

Familiarity with the following tech is nice but not necessarily required if you can learn fast:

Gentoo Linux
SSL Certs

If you think you have the “right stuff” and you have the kick ass take names attitude then send a resume with a short intro about who you are and why you are the person we should hire.


Tags , , , , , , ,  | 8 comments

Merb *is* Rails

Posted by ezmobius Tue, 23 Dec 2008 18:21:00 GMT

Wow this has been a hectic, emotional week. The Rails and Merb core teams have been silently working together towards this monumental announcement. The announcement is that Merb is Rails and Rails is Merb.

Merb and Rails are joining forces and merging the two code bases for Rails-3.0. We’re targeting RailsConf for the first cut of this magic.

When I first started merb way back in the day it was just a fun little project to hack on. But it became more serious as I explored the options. I always considered merb-core a clean room rewrite of ActionPack and I think this tended to upset some people who were very attached to rails.

Fast forward to current day and Merb-1.0 has been out for a while and there is a whole brouhaha of Rails VS Merb memes on the twitters and blogs. This has to stop as it is tearing apart the community and is very non productive.

So our two teams started talking to see if we could put our differences aside and come together for the common good. We’ve laid out a roadmap of what and how to integrate merb’s best features into rails-3.0. I think we have a great plan that will make Rails the best framework in existence. It will be a blend of the best things we have discovered while working on merb, while keeping the Rails aesthetic people have grown to love.

You can expect to get a kick ass, fast, memory efficient version of rails(merb) this spring!

Merb folks will not be left out in the cold. We will continue to support bug and security fixes for the merb 1.0.x line. And we will provide a clear upgrade path to Rails 3.0 for merb apps. We still have quite a few merb apps running internally at ey and will want an upgrade path for our own apps as well.

This is going to be a lot of work for everyone involved but in the end I think this may just be the most inspiring open source story in history.

I’m so impressed with everyone involved. All the core team members from both sides have been able to put away the weapons and egos and really come together, committed to making this transition work seamlessly.

2009 is going to be a seriously strong year for the ruby community. With everyone working together, we have such a kick ass team of smart people that this whole framework thing is going to be a solved issue.

Merb is dead, long live Merb(Rails-3.0)!


Tags , ,  | 65 comments

Merb 1.0

Posted by ezmobius Sat, 08 Nov 2008 06:08:00 GMT

Umm, w00t! It’s been a little over two years since merb was a twinkle in my eye, and a pastie. Since then it has undergone many drastic transformations, working its way towards a very solid, fast foundation for people to build their homesteads on.

It’s very exciting for me to see it grow into what it wants to be, based on the awesome merb community that has popped up around the project. It just shows that if you put in the work on something you love, polishing every little corner it will attract other like minded individuals and they will help you take the project to levels higher then your wildest dreams.

So, gem install merb and get the 1.0 final now, it is propogating its way through the rubyforge tubes. If you can’t get it from the ‘forge yet then you can get it from our gem server:

gem install merb—source http://edge.merbivore.com

Thank you to everyone who helped make this happen with code, feedback and blood, sweat and tears. It’s been totally worth the effort IMHO.

The merb is dead, long live the merb.

Tags  | 53 comments

Rubyology Podcast Interview

Posted by ezmobius Mon, 23 Jun 2008 02:06:00 GMT

Chris Matthieu and Steven Bristol interviewed me for the Rubyology Podcast a few days ago and they have posted the interview here. I talk about my early days of computing, merb, vertebra, rubinius and the story behind how Engine Yard got started and has grown. I’ll warn you though it’s a long interview, 120 minutes! Have a listen if you want to hear the story.

Tags , , ,  | 2 comments

Does it have to be a competition between Rails and Merb?

Posted by ezmobius Wed, 21 May 2008 20:12:00 GMT

It seems like a lot of folks out there want there to be a battle royal between Merb and Rails. I just wanted to dispel this myth.

Merb was written because it scratched an itch that I and many of my hosting customers had, mainly memory footprint, speed, concurrent requests and simple maintainable code. This does not mean that Merb has to be thought of as a Rails competitor. Merb stands on its own merits just as Rails does.

I feel that both of these frameworks have great strengths and weaknesses and that they compliment each other in many ways. Face it Merb would never be around if Rails had not come first. And I see Merb as a great experimentation playground for exploring web framework functionality while learning a great many things from Rails and building a fresh view based on Rails strengths and weaknesses.

There is no reason that a lot of the goodness in Merb cannot be applied back to Rails, but it is no small feat to trim down rails size without breaking backwards compatibility.

I view it like this, more choices make the Ruby ecosystem a better place. So let’s just stop with the Rails VS Merb stuff. How about people choose what framework they want to use based on the frameworks merits and features rather then religious arguments about how my framework can beat up your framework.

The Ruby community in general has been exceedingly nice as long as I have been a part of it. I wrote Merb for a reason, if Merb’s philosophies agree with your tastes then great, use Merb. If Rails is your thing then that’s great too! We do not need a monoculture.

Rails has been Ruby’s killer app and has brought Ruby to the masses. But Ruby is growing up, there are many alternate Ruby implementations now and they all work together for the common good of Ruby.

I’d like the same thing to happen with Rails, Merb and all the other ruby web frameworks. Let’s all work together to make the Ruby ecosystem stronger. We do not need to fight amongst ourselves when there are plenty of other Programming language communities to fight with :P

I guess what I am saying is that I see the proliferation of ruby web frameworks as a sign that Ruby itself has “arrived” and is here to stay. So can’t we all just get along in Ruby web framework land?

Tags ,  | 33 comments

So merb-core is built on rack you say? Why should I care?

Posted by ezmobius Sat, 16 Feb 2008 00:11:00 GMT

Rack is an awesome webserver abstraction that distills the idea of a ruby web app down to an object or Proc that has a call method. The call method takes the rack environment, which is all of the cgi style headers for the current request, and returns an array of [status, headers, body]. The status is a number like 200 or 404, the headers is a hash of header key value pairs for the response and the body is the output from your application, The body must respond to each and yield lines or chunks of strings to be flushed down the socket to the client.

Here is the most basic example of a rack app using the rackup builder DSL for mounting and running rack apps:

rack_app = Proc.new do |env|
  # env here has all the headers you would expect
  [200, {"Content-Type"=>"text/html"}, "hello world!"]

run rack_app

This app will return “hello world!” to the client. Pretty simple eh?

Now that merb-core is all based on rack, there are some very interesting things you can do with this knowledge. In the config/ directory of a freshly generated merb-core app you will see a rack.rb file. By default the file just contains this:

run Merb::Rack::Application.new

This will run the main merb rack app class that handles the standard dispatching of requests through the whole merb framework. Now merb-core is small and fast, but what if you have some certain requests that don’t really need the router or controllers/views of a full merb stack.

Say we need to handle a ton of concurrent file uploads, and we don’t want to invoke the full merb stack just for these uploads. The solution is to use the config/rack.rb file in your merb app along with the Rack::Cascade middleware to mount a simple Proc object to handle the uploads instead of merb proper. Here is what a rack.rb file for this would look like:

uploader = Proc.new do |env|
  request = Merb::Request.new(env)
  if request.path =~ /\/images\/upload/
    #file uploads can get the params from request.params and do whatever 
    # you want with it, this allows for multiple concurrent uploads
    # with very minimal overhead, doesn't go through the merb 
    # framework at all
    params = request.params
    FileUtils.mv params[:file][:tempfile].path,
                 Merb.root / 'public' / 'uploads' / params[:file][:filename]

    headers = {"Content-Type"=>"text/html",
              "Location" => "/images"}
    [302, headers, "You are being redirected"]
    [404, {}, "No Upload here, move along"]

merb = Merb::Rack::Application.new

run Rack::Cascade.new([uploader, merb])

Rack::Cascade works by trying to call each app you specified in order and actually use the results from the first one that does not return a 404 error. So what our new uploader Proc/app does is creates a Merb::Request object and checks if the request.path matches /images/upload. If it does match then you can use code in here to handle the file upload and place it wherever you want. Once you’ve done whatever you need to the file upload you can redirect by setting the Location header like in the above example, or you can render out a page or return JSON or really anything you like.

Having the power of merb-core and also the power of raw rack access conveniently in the same app is very powerful. I think this is one very compelling thing merb-core has going for it now that we are all rack based.

Hopefully you enjoyed this installment of what is new and cool in merb. Hope to write some more articles shortly about special features in merb-core that go undernoticed.

Tags , ,  | 9 comments

On the road to Merb-1.0

Posted by ezmobius Mon, 14 Jan 2008 21:35:00 GMT

We are currently slaving away on a complete refactor/revamping of the merb framework on our way towards 1.0.

Here is a nice article about the progress and roadmap we are taking.


You can follow the merb-core development on github here:


Basically we are completely refactoring merb into a merb-core and merb-more gem plus many pliugins. This is to make it as tight as humanly possible going forward so merb1.0 will be a stable api and system upon release.

This means new documentation standards as well as full Rack support so merb will run on mongrel, evented_mongrel, swiftiplied_mongrel, thin, fcgi, webrick and ebb. Plus any other rack servers that come into existence.

This also means that merb’s app layout is no longer hard coded. You will be able to run a single file merb app or the current rails-like app layout or create your own with a flexible dsl.

I’m pretty excited about the future of Merb. Yehuda Katz and I are now working full time on Merb and related technologies. Engine Yard’s new control panel will be written in merb and EY is also offering the same level of support for Merb that it does for Rails apps. Cool stuff is on the horizon.

So bear with us a bit as we head for Merb 1.0 with a scalable API as well as scalable ruby web platform.

Tags  | 16 comments

Merb-0.5.0 is out.

Posted by ezmobius Thu, 10 Jan 2008 08:45:00 GMT

We’ve just cut the 0.5.0 release of merb. This release has numerous improvements and features, such as:

  • Improved Haml support including pre-compiling and fast inlining of haml partials.
  • built in Sass support, just add a sass directory in public/stylesheets, it will automatically regenerate the CSS in dev mode as well if you change the .sass files.
  • Refactor server.rb into config.rb and boot_loader.rb
  • Got rid of MERB_ROOT and other ugly constants and replaced them with Merb.root and friends.
  • Asset Bundling
  • New param protection plugin
  • Built in support for ruby-debug
  • New releases of the merb_datamapper, merb_sequel, merb_activerecord and merb_helpers plugins.
  • better support for namespaced routes
  • More generators, including Part generators
  • Removed FormControlMixin, use merb_helpers instead.
  • Improved spec and test helpers.

This release cleans up the merb boot and configuration process and got rid of a bunch of constants and replaced them with the Merb object. See this pastie for the mapping from the old constants used to the new way of accessing the same info. If you are updating your 0.4.x merb app to 0.5 you will need to update your merb_init.rb, boot.rb and dependencies.rb to reflect the new style of accessing config values. Generate a fresh app and make your app match the changes in these 3 files.

This release has a lot of contributions from the growing merb community. Merb is still a young one though at 0.5 and we have some big(and little) plans for the next release. We will be splitting the framework into merb-core and merb-more. Merb-core will be all the HTTP tooling code as well as the dispatcher, router, controller, views and glue to hold them together. Everything else will be moved to merb-more or a plugin. There will still be a merb gem, but it will just install merb-core and merb-more as dependencies.

The whole idea of merb-core is to keep a very small tight core framework that deals with the infrastructure needed to write highly scalable, fast web services and back-ends. merb-core plus merb-more will be a more full featured framework. This way Merb can scale your apps from tiny to as large as you need instead of assuming you need the whole kitchen sink, allowing you to start with merb-core and cherry pick the features you need from merb-more.

So gem install merb should get you the 0.5.0 release now. If you want to follow or help with merb development the trac is here merb.devjavu.com/

This is the “Thanks Zed” release. Thanks for mongrel Zed, it has truly been a great dog. You will be missed.

Tags , ,  | 23 comments

Merb 0.4.2 released.

Posted by ezmobius Fri, 14 Dec 2007 08:53:00 GMT

Merb 0.4.2 is released as a gem. This release polishes up a number of rough spots and vastly improves performance in some areas. Should be a simple upgrade for anyone on 0.4.0 or later.

Here is the changelog:

== 0.4.2 “Surf’s up.” 2007-12-14
  • Super-huge speed boost for rendering Erubis templates with partials
  • Windows-specific fixes to Merb’s Rakefile
  • Blocking write is called when in development, test, Windows and jRuby environments and platforms.
  • merb_helpers: form field labels are now explicit, huge documentation update, added select, fieldset, more helpers
  • Fixed merb.show_routes within merb -i
  • Fixed image_tag, css_include_tag, and js_include_tag to work with path_prefix
  • Adds spec helper methods with_route and dispatch_to
  • fix rakefile cfor cygwin
  • add count with collection to partial()
  • Form control mixin is deprecated Use merb_helpers plugin.
  • add redirect matcher to rspec test helpers
  • allow r.resource(:foo, :myparam => 42) resource routes pass on params to underlying match() call
  • spit out error and help message if you call merb with no args
  • get rid of dependency on mongrel for escape and unescape
  • make sure not to use write_nonblock when logging to STDOUT
  • Fixed image_tag, css_include_tag, and js_include_tag to work with path_prefix
  • fix set_status to actually work, add docs,
  • config/merb.yml is now correctly loaded from Rake and test environment – using Merb::Server.load_config
  • added config option to disable loading of the JSON gem – still enabled by default
  • don’t raise if names local on a partial is nil
  • Use svn export instead of checkout upon merb:freeze_from_svn
  • Extracted url and other general methods out of ControllerMixin into GeneralControllerMixin
  • fix caching of @_buffer in render, form_for
  • Seperates spec helpers into the Merb::Test namespace to prevent spec methods leaking into specs
  • Changes the spec url helper method to the same used in the controller
  • Made Request#parse_multipart return an empty hash instead of nil if the request is not multipart
  • Changes throw_content so that it can be called without a block
  • Added :namespace option to routes.

Tags  | 3 comments

A Quick Jaunt Through Merb's Framework Code

Posted by ezmobius Sun, 02 Dec 2007 01:07:00 GMT

This is a tutorial for people that want to familiarize themselves with the merb framework code and how a request travels through the framework. This is not a complete walkthrough but it will definitely get you into the code base and peeking around at key areas.

To follow along at home with you should grab Merb trunk from svn here:

 svn co http://svn.devjavu.com/merb/trunk merb

This tutorial was written with svn rev #1058 which is trunk as of today. It is probably subject to some change but mostly covers code that is on the hot path and doesn’t change very often.


Tags  | 9 comments

Older posts: 1 2 3 4