The Merbist

Merb & Rails 3 news - consulting - training

Archive for the ‘Misc’ Category

Rails vs Merb ¿drama?

Posted by Matt Aimonetti On November - 15 - 2008 16 COMMENTS

That’s official, according to Twitter the fight has started.

In this corner, weighing in at XXX LOC, from 37signals in the white trunks: Rails and in this other corner,  weighing in at YYY LOC from Engine Yard: Merb!

Yehuda Katz

Yehuda Katz

David Heinemeier Hansson

David Heinemeier Hansson


I wish I had a more aggressive photo of Yehuda, but oh well…

So people love drama, from American Idol to the Elections without forgetting Survivor, Heroes and other TV shows. Few weeks ago there was a tentative from Giles to create some controversy but he did not really work so well. The last big drama we had in the Ruby community was Zed and his infamous blog post…

The plot

Once upon a time, in a world where .NET, JAVA and PHP were ruling the internet development world, a not so well known programming language was getting more and more traction in the far east. Ruby, as it was known in Japan, only had very little documentation in English and real ninjas had to translate docs from obscure Japanese writings in order to become enlightened. Nevertheless, a courageous Danish student named David decided to build an application called basecamp using this “exotic” language. David decided to extract a framework from his work for 37signals. He called his framework “Ruby on Rails” and offered it to the world under the MIT license. Pretty quickly, as Ruby was getting more popular in the West, people looked at “Rails” and loved the MVC architecture, the conventions over configuration, testing framework and especially the language: Ruby.

As Rails was getting popular, a man from Polish descent known as Ezra Zygmuntowicz and who was working for Engine Yard got frustrated with some of Rails limitations. He needed something simpler, easier and faster. In fact he just needed a Mongrel handler, a way to process a request really quickly without going through then entire stack and without slowing down the main app. That’s how Ezra started Merb.

Let’s fast forward 2 years. The year is 2008, the place is Orlando, Florida. Yehuda Katz, Merb’s lead developer announces the 1.0 release of a Ruby web framework started 2 years earlier by Ezra. The framework’s selling points are: performance, modularilty, flexibilty.  In the mean time other Ruby frameworks were developed such as camping, Sinatra, mack, waves

Read the rest of this entry »

merb 1.0 - tips part 1

Posted by Matt Aimonetti On November - 14 - 2008 5 COMMENTS

 

As you must know by now, last week, Merb 1.0 got released.

Because we wanted to assure the release was fine, we asked Engine Yard, Apple and YellowPages.com to help us by hiring the NSA to monitor Merb users. After all, we need to know what people complain about so we can fix it ASAP.

Turns out all the echelon monitoring sites were already busy. So we had to go back to good old IRC and twitter search ;)

The release looks pretty solid, thanks to all the people reported bugs during the release candidate cycle. Thanks guys!

However there are still few points of confusion I’d like to address.

Read the rest of this entry »

Merb 1.0 released

Posted by Matt Aimonetti On November - 9 - 2008 13 COMMENTS


On November 7, Yehuda Katz gave a talk at RubyConf and made 3 major announcements:

- Engine Yard to offer Merb support

- m|a agile to offer professional training

- Merb 1.0 released!

The first announcement is pretty substantial. Engine Yard has been financially supporting Merb by letting some of their staff work on Merb, fly them to different conferences and sponsoring events like Merb Camp. Engine Yard didn’t yet announce the price structure but having the option for enterprise level support for Merb is just awesome.

John Nunemaker made an interesting comment during RubyConf Pivotal Party. Something special about Merb is that it was designed to fit the needs of an audience instead of trying to create a series of tools to build a specific type of website. Having Engine Yard help to finance Merb dev and offer support is very reassuring. It’s something already done by many other OSS projects such as Ubuntu, MySQL etc…

The second announcement Yehuda made was about Merb Training. I’m probably pretty biased since I am at the origin of this project. I know for a fact that a lot of people were waiting for 1.0 to get started with Merb. We are also working on getting more documentation out, and 3 books are coming up. Still, the best way to learn is to sit down with people who know Merb who can teach you the way its intended to be used.

Training will allow you to benefit a lot from being with other people who also share the same desire to master Ruby’s most powerful and flexible web framework.

What’s also really exciting is that Yehuda Katz, Merb’s lead developer, agreed to be a tutor for the course. I can’t imagine a better way to learn. Check this page for more information about the next training session or get in contact with me if you want to organize a training session for your company.

Finally, the big news was the announcement of Merb 1.0!

Merb 1.0 went through 5 release candidates and was finally marked as final. In the last few months, the Merb team worked hard to make things easier for people who want to get started in no time.

Let’s quickly look at why Merb is awesome:

  • Merb is Modular. Merb is not a monolithic framework. You can pick and choose what you need. Create a 1 file app “à la Sinatra” or a rich web app “à la Rails”. Merb has many components. Only requires the ones you need and save precious resources. (Merb doesn’t believe in 1 size fits all)
  • Merb is agnostic (kinda). Because people have different needs and different believes, Merb won’t force you to use one ORM or another. Same thing goes for the template engine or for the JavaScript library you want to use. ActiveRecord, DataMapper, Sequel, RelaxDb, Haml, Erb, Prototype, jQuery… choose which one you want and change whenever you want.
  • Merb can be opinionated. Merb offers a default stack using DataMapper and jQuery, authentication, exceptions and caching setup for you. However, creating your own stack is dead easy. As a matter of fact, the guys at yellowpages.com are using Merb and were talking about creating their own stack using Sequel.
  • Merb let you reuse your code. Borrowed from Django, Merb has something called “slices”. Slices are mini apps you can run standalone or mounted within another app. A slice is a great way to write code you can reuse. Unlike plugins which extend the framework features, slices are a way to provide encapsulated content. (David Chelimsky, RSpec’s author and maintainer actually said that slices where his favorite feature in Merb 1.0)
  • Merb has an API. You might be wondering why having an API is awesome. Well, the truth is that the Merb Team spent time marking methods public, which are guaranteed to not break until the next major release (any change to the public API will be well documented). There is also a plugin API meaning that plugin developers won’t have to worry about upgrades if they stick to the plugin API.
  • Merb is fast. Even though Ruby the language isn’t really fast and contrary to popular opinion, Ruby for the web is one of the fastest solutions out there. (Even Rails is way faster than all the mainstream PHP frameworks) And that’s what Merb is proving by being one of the fastest web framework available on the market. Jason Seifer will be interested to know that Merb isn’t scared to scale ;) As a matter of fact, Merb is going to scale even better in the next few months as we are planning to integrate Swiftiply and do some totally awesome stuff to spawn/reap workers based load. (more about that in few weeks).
  • Matz likes Merb. Ruby’s daddy, Yukihiro Matsumoto told us he likes the flexibility of Merb and the fact that the framework doesn’t create a DSL on top of Ruby. He even told us that he’s going to introduce his company to Merb! We were obviously very honored and for us, it validates months of work by dozens of contributors. Here is a transcript of Matz comments about Merb and the Ruby web world:
    Yukihiro Matsumoto aka Matz

    Yukihiro Matsumoto aka Matz

    “Everyone outside of the Ruby community understands that we only have 1 web application framework, named Rails, but it’s not true in any sense. We have several post-Rails frameworks, which is very good, and I believe in diversity.

    Merb has a bright future for the people who are not satisfied by the fixed ways in Rails.  I think that Merb will give users more freedom in a Ruby-ish way of programming.

    I’m not really a web-guy, so i don’t judge any of them [frameworks], but Rails does some kind of drastic change on the language itself like in Active Support.  But Ruby has its own culture and technological atmosphere in the language so that keeping that makes me feel easier.”

  • Merb is memory friendly and therefore cheap. Merb is Open Source and free, but hosting an application costs money. Merb memory footprint is tiny compared to other solutions and that means that hosting will cost you less. (interesting when you think that EngineYard help developing Merb :p) Using Ruby Entreprise Edition, you will even use less memory, meaning you save even more money ;) By the way, Matz told me this morning that the Ruby core team is working on their own solution for a better GC and it should be available soon. (Ruby 1.9.x)
  • Merb source code is easy to read. Because Merb code is modular and because Merb has a concept of an API, reading Merb’s source code is pretty easy. On top of that, Merb itself uses RSpec making tests really easy to read and understand.  What’s great when the source code is easy to read is that developers can quickly check the source code if they want to understand how things work. We also get better patches from contributors and we keep our code clean. We believe in the theory of the “Broken Windows” by James Q. Wilson and George L. Kelling:

    “Consider a building with a few broken windows. If the windows are not repaired, the tendency is for vandals to break a few more windows. Eventually, they may even break into the building, and if it’s unoccupied, perhaps become squatters or light fires inside.

    Or consider a sidewalk. Some litter accumulates. Soon, more litter accumulates. Eventually, people even start leaving bags of trash from take-out restaurants there or breaking into cars.”

I guess I could keep on going with other reasons why Merb is so awesome, but let’s keep some for another post ;)

In conclusion, on behalf of the Merb core team, I’d like to thank all the Merb contributors, Ezra Zygmuntowic (creator of Merb), Yehuda Katz (Merb lead developer), Matz (Ruby creator) and finally DHH & the Rails core team. One more thing:


$ sudo gem install merb
$ merb-gen app my-awesome-merb-app

Merb 1.0 RC5

Posted by Matt Aimonetti On November - 3 - 2008 10 COMMENTS

As you might have noticed, we’ve been pushing a lot of Release Candidates out the door. The reason is that we want to make sure 1.0 is really ready for showtime!

We are also getting a lot of bug reports that help us focusing on the main issues. Today RC5 was pushed to a RubyForge mirror close to you and here is a report from Yehuda Katz, Merb lead developer.

This is the final RC before we ship 1.0 final at RubyConf. Here is a really quick rundown of the bugfixes and improvement added to this release:

  • Webrat integration out of the box. (see example)
  • Improved Merb bundling
  • spec view helpers now use nokogiri (with rexml as fallback )
  • new have_selector spec helper using CSS3 compatible selector.
  • The entire Merb spec suite now runs correctly on JRuby & Windows.
  • Once again improved jRuby support.

In other news, we setup a nightly gem server so people who want to be on Edge don’t have to deal with git and we call also test gem releases before pushing to RubyForge. More about that coming up during RubyConf.

Talking about RubyConfYehuda and I will be in Orlando enjoying a good Ruby meetup. Come and chat with us if you are interested in starting using Merb, or if you have been using Merb. Also, please come and see us if you hate Merb and care tell us why. We’re looking forward to meet you all.

Merb Pre Sprint Meeting

Posted by Matt Aimonetti On October - 7 - 2008 ADD COMMENTS

Some of Los Señores del Merb, AKA the Merb “core team” met tonight in a secret location in San Diego, CA. Obviously, we had to meet in a Mexican restaurant and enjoy Tuesday Fish Taco night special ;)

While not everybody could make the trip, Yehuda, Andy, Daniel, Carl and myself met to plan the very first Merb Sprint.

Unfortunately, Michael and Fabien could not make it, but will work remotely during the next few days.

Yehuda sent attendees the following explanations about the Scrum:

“Tomorrow morning, the Merb core team will be setting up around 9am in the sprint room, setting up the git infrastructure for the event, and setting up CI and a wiki for the sprint.

We’re going to be breaking up into a few teams: an inline documentation team, a getting-up-and-running team, and merb-stack team. Each team will be led by a core team member, who will be responsible for pushing the work of the team up to the main merb repository, which will be manned by me throughout the sprint.”

The sprint will focus on 4 main points:

  • inline documentation
  • getting-up-and-running
  • Merb-stack
  • reported tickets (lead remotely by Michael)

This is a really exciting time and things are looking good.

For those wondering about Merb-Stack… well just wait few days and you’ll see ;)

Merb Edge update (Oct 6th 2008)

Posted by Matt Aimonetti On October - 6 - 2008 ADD COMMENTS
  • Mode changes to init.rb, user updating to a newer version or Merb will need to add
    c[:log_file] = Merb.root / "log" / "development.log"

    to their init.rb file or config/environments/development.rb for instance. (Newly generated apps are already setup properly)

  • We made some changes to the way Rake files work. Merb-core doesn’t require the rspec tasks anymore so Test::Unit see annoying rspec tasks. Once again people upgrading to the latest version of Merb need to make a small change and add:
    require 'spec/rake/spectask'

    to their rake file. Newly generated applications using RSpec already have that line setup.

  • In the last few days, Yehuda merged in his branch with the new “request-testing feature”. This is a new way of testing your apps. It makes testing a real request going through a controller and being rendered in a view, something quite easy, Merb interegration tests here we go!. Check here to see a example of what you can now do. Rails + Rspec users might be surprised by this choice, and I’ve scheduled to interview Yehuda so he can explain why and when you want to use this way of testing your app. (Don’t miss his talk at MerbCamp next week)
  • Talking about full stack testing, Merb is almost entirely full stack tested. What does that mean? Take a look at merb-helpers specs in merb-more. Form builders are tested through a real app available from spec/fixture/app, the views are rendered in the specs and the results are check to make sure they will work for you in your real application. Avoiding using too many mocks and stubs helped us really test things in the contet of a real app and avoid a great amount of ghost bugs. Specs might run a bit slower but we believe Merb now has better testing suite than before. More coming up about this topic.
  • Ohh and we released Merb 0.9.8 “Time Machine”, last release before 1.0RC1 ;)

problems with urls in Merb HEAD?

Posted by Matt Aimonetti On September - 30 - 2008 ADD COMMENTS

I actually run into a small problem when updated an older Merb app. Here was how my router looked like:

Merb::Router.prepare do |r|
  r.resources :channels do |channels|
    channels.resources :shows do |shows|
      shows.resources :episodes
    end
  end
end

But after updating to the latest version of Merb, I got links looking like:

http://localhost:4000/channels/#<Channel:0x27b7300>/shows

The first thing to do is to read Carl’s wiki about the latest Router changes.

Carl explains that things got cleaned up in the router code and my routes should now look like:

Merb::Router.prepare do |r|
  r.resources :channels do
    resources :shows do |shows|
      resources :episodes
    end
  end
end

However that won’t be enough.. You see my url used to look like that:

url(:channel_shows, :channel_id =&gt; channel)

Now I can simplify it to:

url(:channel_shows, channel)

That still won’t fix the problem, since the real problem comes from the fact that I was on Merb HEAD but not DataMapper HEAD. Updating DM clears things up. That’s the price to pay to be on HEAD ;)

FYI the problem comes from the fact that DM doesn’t add a to_params method to its objects. Rails users might recognize that method used to convert an object into a string to create a route, something not really ORM agnostic and frowned upon by the DM/Merb teams.

Merb lets you specify the param to use for your routes using the identify method. Read Carl’s wiki page for more cool stuff and see how to create some cool stuff like url slugs etc..

Note that even if you are using ActiveRecord, you’ll need to update merb_activerecord as the new identify rules were updated in the ORM plugins.