03
Tradução: Merb ♡ Rails
on December 03, 2008
Conheci o Matt Aimonetti durante a QCon (veja no artigo dele). Ele faz parte da equipe principal do Merb e é o principal evangelizador. Conversamos muito, nos tornamos bons amigos e vamos colaborar em divulgar mais o Merb como uma boa alternativa de framework web em Ruby. Acompanhe o Matt (e este blog, claro), ele vai anunciar algumas novidades interessantes em breve.
Para explicar: o framework Merb foi criado por Ezra Zygmuntowicz. Depois o trabalho de mantenedor passou para Yehuda Katz, que já ajudava no projeto DataMapper também. Ezra e Yehuda são da Engine Yard, mas essa empresa não é dona nem dita o futuro do Merb. Trata-se de um projeto open source como qualquer outro e tem vida própria.
Recentemente iniciou-se uma animosidade implícita entre as equipes do Rails e do Merb. Quem acompanha de perto sabia que uma pequena Guerra Fria estava se armando (e foi um dos meus objetivos tentar apaziguar isso durante minhas entrevistas na QCon). Hoje o Matt blogou um cessar-fogo. Vou traduzir o post dele.
Merb
Antes da tradução, para quem não conhece Merb, as principais características técnicas que eu acho interessante para considerar são:
- Merb-Core e Merb-More: o Merb foi concebido para ser ultra-modular e usar bastante o sistema de RubyGems. Ele vem dividido em duas grandes coleções de Gems, o Core e o More. Só com o Core você já consegue criar micro-aplicações web “bare-bone”. Além disso ele usa o conceito de Merb Stacks : uma Gem somente com a spec de dependências para amarrar um pacote mínimo de Gems de Merb (no caso as coleções Core e More tanto do Merb quanto do DataMapper).
- No Rails sempre temos uma estrutura padrão com tudo pré-instalado e configurado, todos os componentes MVC incluindo o ORM ActiveRecord e tudo mais. E tudo começa com o comando-gerador ‘rails’. No Merb temos o comando gerador merb-gen – que substitui tanto o comando ‘rails’ quando os scripts que todo projeto Rails tem como ‘generate’. Porém, ele tem 4 possíveis maneiras de iniciar um projeto : 1) ‘app’ que é uma estrutura completa parecida com Rails e já com DataMapper configurado como padrão; 2) ‘core’ que é uma estrutura parecida com Rails mas sem ORM configurado; 3) ‘flat’ uma aplicação com estrutura mínima em um único arquivo, com uma configuração separada; 4) ‘very_flat’ que é o mínimo do mínimo para fazer uma micro-aplicação num único arquivo.
- Antigamente o Rails tinha o conceito de ‘components’, mas não deu muito certo pois a implementação original era simplesmente pesada demais. Atualmente temos um plugin de terceiros chamado Engines que ajuda na componentização e também começou-se um movimento no trunk da futura versão 2.3 para melhorar as Engines. O Merb já foi criado para ter uma coisa chamada Merb Slices, que são justamente mini-aplicações MVC completas que podem ser compostas numa única aplicação, como componentes. São simples de criar e de usar.
- Merb pode usar tanto ActiveRecord quanto DataMapper. Eles seguem paradigmas diferentes. O primeiro é mais completo, mais usado e mais conhecido dos Railers. Já o segundo é bem mais leve, mas suporta – por enquanto – menos bancos de dados – e tem menos funcionalidades. Você pode escolher qual dos dois quer usar. No caso de migrations, o DataMapper suporta as Rake Tasks “db:automigrate” e “db:autoupgrade” (digite rake -T, o Merb tem muitas tasks parecidas com os do Rails), a primeira sendo uma migração destrutiva e a outra não, isso porque o sistema dele é baseado em comparar os schemas entre Models e a Base e fazer o SQL-Diff entre os dois.
- O sistema de rotas dele parece mais simples de usar e também parece ser uma das partes muito mais rápidas. E falando em rapidez, o Merb foi planejado do início para ser thread-safe, o que o torna um excelente candidato para rodar no JRuby e tirar proveito das threads-nativas da JVM.
- No merb-gen – tanto ‘app’ quanto ‘core’ – ele pré-configura a estrutura de diretórios para comportar uma suíte de testes, como no Rails. Mas em vez de usar o Test::Unit padrão do Ruby, o Merb já pré-configura direto com RSpec, o que é uma ótima escolha. Mais do que isso, ele tem o conceito de fazer os equivalentes a testes funcionais com o WebRat, que é como se fosse um simulador de browser, sem precisar instanciar um browser mesmo (como fazem o Selenium ou Watir). Isso é muito útil para testes que não exigem suporte de Javascript.
- Rails é famoso pelo scaffold, a parte que mais atrai pessoas e também a parte que mais é editada (ninguém usa os arquivos gerados pelos scaffold exatatamente como são gerados). No Merb, o comando merb-gen também tem geradores como o ‘resource’ (parecido com o ‘scaffold’). Ele gera controller, model e views, mas as views não vêm preenchidas: em vez disso nas views em um link para o Wiki deles explicando o que fazer. Eu discuti com o Matt se isso era bom ou não e no fim foi o único ponto em que amigavelmente concordamos em não concordar :-) Acho que um scaffold (melhorado) ajudaria um pouco
- A equipe principal do Merb leva a sério o suporte a APIs padrão. Portanto, agora que já temos a versão 1.0, as APIs principais só vão mudar na versão 2.0. Até lá, eles mantém uma suíte de testes específica da versão 1.0, que sempre será garantida que vai funcionar até a 2.0.
Há muito o que se gostar sobre o Merb. Ele ainda não tem nem de longe o tamanho da comunidade Rails e, portanto, nem de longe a quantidade de plugins e gems específicas para ele. Aliás, ele já vem pré-configurado com uma versão de restful_authentication, portanto login já vem pré-configurado também, o que facilita a vida. Acredito que o Merb ainda vai evoluir muito e se tornará uma ótima alternativa quando você precisa de algo diferente do que o Rails oferece.
Isso tudo dito, tanto a equipe Merb quanto a equipe Rails entraram em discussões que elevaram o nível de estresse entre eles. Finalmente, a tradução do artigo do Matt para apaziguar isso. Como sempre se diz: “quando um não quer, dois não brigam”. Portanto, àqueles que pretendiam usar Merb como desculpa para alfinetar Rails, esqueçam, não é esse o foco, se foi o que estavam pensando. A equipe do Merb não vai mais fazer comparações de provocação e vão se focar exclusivamente em fazer o Merb ficar famoso por mérito próprio.
Merb ♡ Rails
Sim, é verdade e não, não estou sendo passivo agressivo ou cínico.
Como vocês devem ter ouvido falar tem havido alguma tensão entre a equipe Rails e a equipe Merb nas últimas semanas. Algumas vezes causadas por nós, algumas por eles. Eu já expliquei sobre isso neste post então vamos em frente.
Primeiro, deixe-me explicar a razão deste post. Eu acredito que temos uma grande comunidade mas também acho que gostamos de bater.
Como muitos Rubistas, eu uso um Mac e normalmente dou risada vendo as propagandas. Então eu vi uma propaganda de resposta da Microsoft e estava pensando … eles não entenderam, eu não sou um Mac, o cara na TV representa um computador Mac. Eu sou um ser humano.
Pensando na nossa comunidade acho que isso rapidamente se tornou: ‘Oi, sou um desenvolvedor Rails’ e ‘Oi, sou um desenvolvedor Merb’.
O que começou como uma simples comparação para explicar as diferenças entre Merb e Rails rapidamente escalaram em argumentos sobre qual framework é melhor e qual as pessoas deveriam usar.
Ouço pessoas na comunidade Ruby falando bobagens sobre Rails e criticando a equipe principal Rails. Eu até mesmo vi pessoas insultando o DHH no IRC enquanto ele nem estava no canal.
Eu mesmo tenho que admitir que tenho sido culpado de cruzar a linha algumas vezes e fiz alguns comentários que podem ser considerados “bater”.
Acho que é uma boa hora para me desculpar e dizer que esse tipo de comportamento não é apropriado.
Afinal, se quiséssemos nos definir como sendo “alguma coisa” provavelmente deveríamos dizer: “Oi, sou um desenvolvedor Ruby”. Rails não é perfeito, nem Merb é perfeito. Eu posso não concordar com algumas decisões feitas pela equipe principal do Rails mas eu ainda acho que Rails é um grande framework e que a equipe Rails fez um trabalho incrível e merece muito respeito por seus esforços. Somos todos partes da comunidade Ruby e eu acho que é hora de nós (começando por mim mesmo) agirmos como uma comunidade unida.
Sem mais delongas, aqui está minha lista:
10 Principais Razões de Porque Merb ♡ Rails:
- Sem Rails, a linguagem Ruby não seria uma das 10 maiores linguagens de programação.
- Sem Rails, ainda estaríamos escrevendo milhares de linhas de arquivos XML de configuração para começar uma pequena aplicação.
- Sem Rails, muitos desenvolvedores nem saberiam o que MVC significa.
- Sem Rails, eu não seria um desenvolvedor web Ruby.
- Sem Rails, não teríamos Merb.
- Sem Rails, não teríamos todos os outros frameworks super legais em Ruby.
- Sem Rails, testar seria alguma coisa que só a elite faz.
- Sem Rails, servir aplicações web Ruby seria um grande pesadelo.
- Sem Rails, Zed Shaw não seria famoso.
Ítens de Bônus:
- Sem Matz, não existiria Ruby,
- Sem Ruby, não existiria Rails.
Da próxima vez que pensar, sou um Merb ou sou um Rails, pense duas vezes ;-)






Louvável seu esforço para tentar acabar com a richa.
Contudo, convenhamos: não deveríamos perder tempo criando richas desse ou de nenhum tipo. Não deveria precisar que alguém explicasse pq uma richa é ruim. : )
Acredito que o “bater” não é o problema, nem que uma guerra fria seja ruim, a grande evolução das industrias ocorreu justamente durante a Guerra Fria, acredito que a troca de farpas vai continuar, mas acredito que um rival para o Rails faça ambos, o Merb e o Rails crescerem mais ainda, como você citou cada um tem suas vantagens, quem sabe um dia elas não possam ser combinadas.
[]’s
Acredito que as richas não são ‘criadas’ por este ou aquele, as richas se criam a partir do momento em que há algum tipo de comparação. Entre Rails e Merb é impossível não haver comparações, e isso cria a chamada ‘richa’ automaticamente. Ao contrário do Joca, eu penso que esta atitude do Matt Aimonetti (e do Akita com a tradução) não é perda de tempo ‘criando’ richas, e sim uma tentativa de acabar com algo que ja foi ‘criado’, mas que só traz prejuízos à comunidade.
Ainda está pra nascer um rubista que não tenha “partido pra porrada” contra alguma coisa que não gosta. Brigas entre especialistas costuma ajudar a computação a ir pra frente e a combater opiniões preconcebidas de alguns ou marketing pesado de outros. Sem falar que esse negócio de “todo mundo deveria dar as mãos” é muito chato e falso.
Por isso, acho que as brigas deveriam continuar e, se possível, inflamadas. Já que, no dia que todo mundo disser “sim”, o mundo da programação ficará estagnado.
Great! :)
Acho tudo isso muito errado… não interessa se é Rails ou Merb… vc usa o que for melhor para cada situação, um não é mais gordo que outro, apenas um serve para uma coisa e outro para outra coisa… no final tudo é ruby do mesmo jeito e se tivermos richas entre isso ou aquele não teremos novas pessoas entrando no Ruby. DHH começou tudo, e continua ditando regras incriveis (também nao concordo com tudo), frameworks como Django, Seaside, Cake não tem o boom do Rails pq não tem alguem como DHH por trás.
O anúncio da apple não serve para isso, pois eu sou pc eu sou mac é uma zueira não sobre sou gordo e pesado e demoro para rodar e etc… é sobre ser sleek, fácil, visualmente melhor e mais simples, ou seja atender melhor a situação… e o merb não é melhor que o Rails para tudo e nem o contrário.
Então temos que parar de brigar entre uma tecnologia e outra e aprender a usar a que for melhor para o problema certo e não ficar defendendo as coisas…
Rails para mim é genial e mudou a industria de software… merb é mais um framework, so que de ruby, e em algumas situacoes vai ser melhor usa-lo ao invés de usar Rails… assim como alguma vez pode ser melhor fazer algo em PHP do que em Ruby.
Bem essa é minha opnião…
Hehehe
Ótimo isso
Eu só acrescentaria
“Without Ruby and DHH, there would be no Rails”
Acho que quase sempre a competição é saudável e faz os envolvidos evoluirem mais rapidamente, mas acho que o que houve entre aquipe do Rails e do Merb já tinha ultrapassado a competição e estava indo em direção a antipatia mútua, e essa última não é nada positiva para a comunidade como um todo.
Além disso, estou começando a achar que certos comportamentos estão se repetindo. Muitos pessoas tem dito coisas como “Não importa se é Merb, Rails ou Ramaze, sendo Ruby está tudo certo”. Acontece que era exatamente esse pensamento que combatíamos quando viemos para o Rails, onde tentávamos convencer os outros que não existe apenas duas alternativas válidas pra desenvolvimento de software sério (Java e .NET). E agora eu acho que começo a ver o mesmo xenofobismo começando a nascer na comunidade Ruby.
O Ruby atualmente é a minha linguagem preferida, e o Rails o meu framework preferido, e eu realmente gosto muito de trabalhar com ambos. Mas eu me decepcionarei terrivelmente se daqui a uns 10 anos isso ainda for verdade. As coisas mudam, e com o tempo novas tecnologias surgirão, mas temos que dar uma chance a elas, e avaliá-las com sinceridade. Caso contrário, algo “melhor” surgirá, e simplesmente deixaremos passar, permanecendo no mundo Ruby/Rails apenas por hábito.
É o típico caso de alguém que defendeu uma posição por tanto tempo e com tanta dificuldade que acabou se acostumando a ela.
Enfim, acho que temos que lembrar que estamos nessa pra desenvolver software da melhor maneira possível, usando a ferramenta mais adequada, e não pra desenvolver software em Ruby, ou qualquer outra linguagem específica.
Legal Akita, parabéns.
Quando você fala de testes, “a elite” tem um significado bem diferente no Brasil… Você poderia ter usado “experts” :)
Legal, mas só um ajuste…
A forma com que o datamapper monta certas queries SQL é muito mais otimizado comparado ao ActiveRecord. Do jeito que falastes, parece que a única coisa boa do Datamapper é ser leve e não é apenas isso não
;)
abraços