Desenvolvimento Web com Ruby sem Rails

Slides:



Advertisements
Apresentações semelhantes
Behaviour-Driven Development em Ruby
Advertisements

Um sistema de gerenciamento de conteúdo baseado em XML.
JBanana.
Desenvolvimento Web.
Programação de Computadores I Prof. Eduardo 2011
Segurança em Redes - Código Seguro
Desenvolvimento ágil: eXtreme Programming vs SCRUM Tiago Rodrigues de Mello CCO-230 – ENGENHARIA DE SOFTWARE / 2010.
XML - Extensible Markup Language
Programas Utilitários Básicos
Chain of Responsibility
ESTRUTURA DE COMUNICAÇÃO DE DADOS
Ci&T SPIN – Campinas Equipe de testes em projetos com CI e TDD.
Um framework para desenvolvimento de aplicações web Lucas Klassmann,
WebWork e JSP Keven andrade
Trabalho sobre Shell Script
Gerencie com clareza e praticidade as atividades de sua Equipe.
Software Livre - Ubuntu
KANBAN Por: Jessica Nunes e Karine Oliveira.
Chapter 1 Agile in a Nutshell (Ágil em uma casca de noz)
Programação Web com PHP
PHP em Windows WUX202 Nuno Nóbrega Batista Adminsaude
Plataforma de Serviços SMS (PS 2 ) Workshop Telesal Marcos Garcia 23 de Novembro de 2007.
Desenvolvendo para a web com Grails
Aula PHPdoc Prof. Naércio Filho Técnico em Informática
Selenium Componentes: Fábio Gomes Claver Pari Eni Conde
Conceitos.
A Coordenação de Portais da STIC/UFRJ "Eu não me envergonho de corrigir os meus erros e mudar as minhas opiniões, porque não me envergonho de raciocinar.
Cobertura Daniella de Oliveira Costa Jonathan Silva Pereira
Entrada e saída.
Introdução ao Framework Django
Tecnologias para Apresentação de Publicidade UMa | DME | 2009 Sistemas Multimédia Nuno Santos | Paulo Teixeira |
Contornos arquitetônicos Maria Helena Pereira Dias.
Interpretador Python.
Branch & Merge Claudio Leite.
Ruby Viviane Souza (vess).
Conceitos de J2EE para a WEB
ASP (Active Server Pages)
Henrique Gabriel Gularte Pereira
Oficina Plone Criação de Formulários
Arquitetura de Desenvolvimento Web MVC vs. Three Tiers
Ruby (2/2) André Braga Patrícia Lustosa. Intro Peguem a aula de ontem em /~plvr para ter como referência para os exercícios de hoje.
Implementação MVC Pedro Antonino.
Unidade 6 – Formulários HTML Prof.: Henrique Santos
Software Livre.
Redes Sociais Colaborativas Patrícia Ramos | 22/05/2006.
PROGRAMAÇÃO WEB AULA 01 Prof. Gustavo Linhares
Acabias Marques Luiz. I - Introdução ao Ruby Parte 1 – Introdução a linguagem  O que é Ruby  Instalação  O IRB  Operadores Aritméticos  Tipos de.
Padrões de Interação com o Usuário
Giuliana Barreto da Cruz Análise e Desenvolvimento de Sistemas, 2013.
Linguagem de programação. Histórico  Concebida em 1993 por Yukihiro Matsumoto  Primeiro livro em inglês saiu em setembro de 2000  Ruby on Rails é lançado.
Profª Angela Tissi Tracierra. É uma arquitetura de rede, onde existem dois módulos básicos na rede: o Servidor e os Clientes.
Projeto Supervisionado no Desenvolvimento de Aplicações Profissionais na Web Introdução a Aplicações Web.
Acabias Marques Luiz. III – Variáveis, constantes e executáveis Parte 1 – Introdução a linguagem  Variáveis e Constantes  Atalhos na manipulação de.
 Solucionar de forma otimizada os problemas que exijam alto esforço computacional e assim assegurar a satisfação dos clientes.
1 Programação eXtrema uma solução radical Seminário de Engenharia de Software Fabio Kon Departamento de Ciência da Computação 15 de maio de 2001.
Caio Piza Maio 12, 2015 Istanbul, May 11-14, 2015 Métodos Não-Experimentais.
Processos Concorrentes
Programação Computacional Aula 9: Meu primeiro programa em C
Programação para Internet
“O homem é um animal utilizador de ferramentas... Sem ferramentas ele não é nada, com ferramentas ele é tudo”. Thomas Carlyle.
Redes e Sistemas Distribuídos II – Cód Prof. MSc. Ronnison Reges Vidal.
Shell Script Parte 2.
Padrões de Projetos Orientados a Objetos I Wolley W. Silva.
Programação para Web I Aula 3 CONSTANTES & OPERADORES.
Universidade Federal de Sergipe Departamento de Sistemas de Informação Bruno Cruz Jessica Rodrigo Aragão – ASP.NET MVC 3.
Padrões de Projeto. O que são?  Soluções provenientes de diversos projetos e utilizados por diversos programadores;  Documentados em catálogos como.
Processo de expurgo No Contact / PROCON
1 AJAX em aplicações Rails Lívia Monnerat Castro
Wubi: como instalar o Ubuntu Linux sem mexer no Windows Valdir Barbosa
Variáveis, expressões e comandos Dilvan Moreira. Lembrando …  Instalação normal (para utilizar no PC com Windows) 
Transcrição da apresentação:

Desenvolvimento Web com Ruby sem Rails Merb Desenvolvimento Web com Ruby sem Rails Danilo Sato ThoughtWorks UK www.dtsato.com

Merb?

Rails não escala!

Aviso: Eu sou fã de Rails

Lembram?

Não é bem assim…

Rails = Revolução Mudou a forma de encarar o desenvolvimento Web Opinionated: Testes Migrations Convention over Configuration DRY

Opinião forte Estrutura da aplicação

Opinião forte Estrutura da aplicação MVC

Opinião forte Estrutura da aplicação MVC AJAX: Script.aculo.us / Prototype

Opinião forte Estrutura da aplicação MVC AJAX: Script.aculo.us / Prototype ORM: ActiveRecord

Opinião forte Estrutura da aplicação MVC AJAX: Script.aculo.us / Prototype ORM: ActiveRecord Testes: Test::Unit unit / functional / integration

Opinião forte Estrutura da aplicação MVC AJAX: Script.aculo.us / Prototype ORM: ActiveRecord Testes: Test::Unit unit / functional / integration Mailer/ActiveResource/ActiveSupport/…

Perfeito para Iniciantes Modelo de Dreyfus: Iniciante  Práticas e Regras independentes de contexto

Perfeito para Iniciantes Modelo de Dreyfus: Iniciante  Práticas e Regras independentes de contexto Competente  Contexto é importante, mas sem prioridade

Perfeito para Iniciantes Modelo de Dreyfus: Iniciante  Práticas e Regras independentes de contexto Competente  Contexto é importante, mas sem prioridade Proficiente  Contexto interpretado de forma holística

Perfeito para Iniciantes Modelo de Dreyfus: Iniciante  Práticas e Regras independentes de contexto Competente  Contexto é importante, mas sem prioridade Proficiente  Contexto interpretado de forma holística Expert  Decisões baseadas na intuição

Perfeito para Iniciantes Modelo de Dreyfus: Iniciante  Práticas e Regras independentes de contexto Competente  Contexto é importante, mas sem prioridade Proficiente  Contexto interpretado de forma holística Expert  Decisões baseadas na intuição Mestre  Ações sem prestar atenção na consciência

Mas e se quero algo diferente? Fugir do padrão é difícil, mas não impossível

Merb Framework web MVC em Ruby Desenvolvido pelo Ezra Mongrel + Erb EngineYard Brincando com Mongrel Handlers Mongrel + Erb

Menos mágica Symbol.to_proc (&:color)

Menos mágica Symbol.to_proc (&:color) returning {}

Menos mágica Symbol.to_proc (&:color) returning {} Active Support:

Menos mágica Symbol.to_proc (&:color) returning {} Active Support: distance_of_time_in_words_to_now

Menos mágica Symbol.to_proc (&:color) returning {} Active Support: distance_of_time_in_words_to_now auto_link_email_addresses

Menos mágica Symbol.to_proc (&:color) returning {} Active Support: distance_of_time_in_words_to_now auto_link_email_addresses cycle

Flexível merb-core

Flexível merb-core merb-more merb-action-args /merb-assets merb-builder / merb-cache merb-freezer / merb-gen merb-haml / merb-mailer merb-parts / merb-slices

Rack Ebb Evented Mongrel FastCGI Mongrel Thin Webrick

Leve Rails Merb Core Merb More LOC LOC (Testes) OBS: Linhas de Código desconsiderando comentários e linhas em branco Rails 2.1.0 vs. Merb-0.9.3 Script adaptado de code_statistics.rb (usado no Rails para fazer rake:stats)

Leve Rails Merb Core Merb More LOC 55393 LOC (Testes) 37639 OBS: Linhas de Código desconsiderando comentários e linhas em branco Rails 2.1.0 vs. Merb-0.9.3 Script adaptado de code_statistics.rb (usado no Rails para fazer rake:stats)

Leve Rails Merb Core Merb More LOC 55393 5406 1774 LOC (Testes) 37639 4529 1184 OBS: Linhas de Código desconsiderando comentários e linhas em branco Rails 2.1.0 vs. Merb-0.9.3 Script adaptado de code_statistics.rb (usado no Rails para fazer rake:stats)

Rápido Thread-safe

Rápido Thread-safe Consegue atender requisições sem bloquear

Rápido Thread-safe Consegue atender requisições sem bloquear “Benchmark” (replies/s): Fonte: http://www.trawlr.com/items/5757847-rails-or-merb-what-s-best-for-you Mínimo Média Máximo D.P. Rails Merb

Rápido Thread-safe Consegue atender requisições sem bloquear “Benchmark” (replies/s): Fonte: http://www.trawlr.com/items/5757847-rails-or-merb-what-s-best-for-you Mínimo Média Máximo D.P. Rails 0.0 43.4 75.2 30.8 Merb

Rápido Thread-safe Consegue atender requisições sem bloquear “Benchmark” (replies/s): Fonte: http://www.trawlr.com/items/5757847-rails-or-merb-what-s-best-for-you Mínimo Média Máximo D.P. Rails 0.0 43.4 75.2 30.8 Merb 73.3 143.0 65.8

A vida fora do Mutex

O famoso exemplo Upload de arquivo: Operação demorada Rails padrão bloqueia até terminar de responder

O famoso exemplo Upload de arquivo: Operação demorada Rails padrão bloqueia até terminar de responder Isso significa: Mongrel não responde mais nenhuma requisição!

O famoso exemplo Upload de arquivo: Operação demorada Rails padrão bloqueia até terminar de responder Isso significa: Mongrel não responde mais nenhuma requisição! Soluções: BackgroundDb Custom Mongrel Handler …

Lock Rails (dispatcher.rb)

Lock Rails (dispatcher.rb)

Lock Rails segura o mutex antes de: Determinar o roteamento Atender a requisição

Lock Rails segura o mutex antes de: Algoritmo de rotas no Rails: Determinar o roteamento Atender a requisição Algoritmo de rotas no Rails: Não thread-safe ~ 1100 linhas de código complexo

Lock Rails segura o mutex antes de: Algoritmo de rotas no Rails: Determinar o roteamento Atender a requisição Algoritmo de rotas no Rails: Não thread-safe ~ 1100 linhas de código complexo ActiveRecord

Lock Algoritmo de rotas no Merb: ~ 600 linhas de código complexo Thread-safe Não é executado dentro do mutex

Lock Algoritmo de rotas no Merb: Não acoplado ao ActiveRecord ~ 600 linhas de código complexo Thread-safe Não é executado dentro do mutex Não acoplado ao ActiveRecord

Lock Algoritmo de rotas no Merb: Não acoplado ao ActiveRecord ~ 600 linhas de código complexo Thread-safe Não é executado dentro do mutex Não acoplado ao ActiveRecord

Coisas legais no Merb

Retorno da action flexível render: String Template (formato, status_code, layout) redirect proc: Libera o mutex e continua executando o bloco

Exemplo

render_deferred Recebe um bloco que será executado fora do mutex

render_then_call Renderiza a String e executa o bloco for a do mutex

render_chunked Um bloco que enviará pedaços de dados cada vez que for chamado Teste no Firefox para ver os “pedaços” chegando aos poucos

Rotas Flexíveis Padrão

Rotas Flexíveis Padrão Subdomains

Rotas Flexíveis Padrão Subdomains RESTful

Rotas Flexíveis Padrão Subdomains RESTful Aninhadas

Rotas Flexíveis Padrão Subdomains RESTful Aninhadas Regex

Rotas Flexíveis Padrão Subdomains RESTful Aninhadas Regex Ver rotas

Plugins são Gems! merb_activerecord / merb_datamapper / merb_sequel merb_helpers merb_param_protection merb_stories / merb_test_unit merb_has_flash merb-auth / merbful_authentication merb_paginate … http://wiki.merbivore.com/pages/plugins

Estrutura da Aplicação Padrão

Estrutura da Aplicação Padrão Flat

Estrutura da Aplicação Padrão Flat Very Flat

Migrar do Rails é fácil

Coisas não tão legais no Merb

Lembram?

Merb??

Mas… O código é legível Documentação está crescendo: Livros: http://www.merbivore.org http://www.merbunity.com http://wiki.merbivore.com Livros: http://peepcode.com/products/meet-merb-pdf-draft http://manning.com/ivey (em breve) http://merb.4ninjas.org (online - em desenvolvimento)

Imaturo Ainda não chegou na versão 1.0 Menos tempo de vida Comunidade menor Bem menos plugins

Conclusão

Resumo Merb: Menos mágica Flexível Leve Rápido Familiar para quem conhece Rails Em desenvolvimento…

Rails ou Merb? Depende  Rails é melhor para iniciantes Merb é para quem gosta de “brincar” com coisas novas

Use a ferramenta certa! Tem muito mais (só em Ruby): Ramaze Sinatra Camping Nitro IOWA …

Desenvolvimento Web com Ruby sem Rails Merb Desenvolvimento Web com Ruby sem Rails Danilo Sato ThoughtWorks UK www.dtsato.com