SlideShare ist ein Scribd-Unternehmen logo
1 von 238
Downloaden Sie, um offline zu lesen
Beyond

With
#whoami
RubyMasters 2011 - Beyond Ruby with NodeJS
#ruby
I
Ruby
Model

   class Product < ActiveRecord::Base
     after_create :set_initial_inventory

       has_many :variants, :dependent => :destroy
       has_many :images, :as => :viewable, :order => :position,
         :dependent => :destroy
       has_many :properties, :through => :product_properties
       belongs_to :tax_category

       validates_presence_of :name
       validates_presence_of :master_price
       validates_presence_of :description

     make_permalink :with => :name, :field => :permalink
   end




Friday, August 7, 2009
“Tornar as coisas
   simples fáceis e as
coisas difíceis possíveis”

       Fisolofia Ruby
Código Bonito
Código Bonito
Don’t Repeat Yourself
Código Bonito
    Don’t Repeat Yourself
Convention Over Configuration
class Booking < ActiveRecord::Base
  belongs_to :hotel
  belongs_to :user
  validates_presence_of :hotel
  validates_presence_of :user
  validates_presence_of :credit_card
  validates_presence_of :credit_card_name
  validates_length_of :credit_card, :within => 16..16
  validates_format_of :credit_card, :with => /^d*$/
  validates_length_of :credit_card_name, :within => 3..70

  def total
    hotel.price * nights
  end

  def nights
    ((checkout_date - checkin_date) / 1.day).round
  end

  def to_s
    "Booking(#{user},#{hotel})"
  end
end
RubyMasters 2011 - Beyond Ruby with NodeJS
RubyMasters 2011 - Beyond Ruby with NodeJS
#números
2010
~ 2 bilhões de
usuários de internet
  em todo mundo
RubyMasters 2011 - Beyond Ruby with NodeJS
68 milhões de usuários
68 milhões de usuários

37 milhões são ativos
Usuários de Internet no Mundo (em milhões)
                                      2.000 milhões
2000


1500


1000


 500     360 milhões


   0
           2000                          2010
Usuários de Internet no Brasil (em milhões)
                                        70 milhões
 70


52,5


 35


17,5
         10 milhões


  0
           2000                           2010
% de usuários ativos nas Redes Sociais
 90    86 %

                78 %      77 %
                                      75 %    74 %     74 %     73 %        72 %

67,5                                                                               63 %
                                                                                          59 %



 45




22,5




  0
       Brasil   Italia   Espanha     Japão    EUA    Inglaterra França Austrália Alemanha Suiça


                     Fonte: The Nielsen Company
RubyMasters 2011 - Beyond Ruby with NodeJS
2014
~ 70% dos adultos
 serão usuários
  regulares de
  redes sociais
RubyMasters 2011 - Beyond Ruby with NodeJS
RubyMasters 2011 - Beyond Ruby with NodeJS
RubyMasters 2011 - Beyond Ruby with NodeJS
RubyMasters 2011 - Beyond Ruby with NodeJS
Estrutura física de
servidores para escalar
Escalando na vertical
Escalando na vertical
Escalando na horizontal
Escalando na horizontal
Escalando na horizontal
Escalando na horizontal
RubyMasters 2011 - Beyond Ruby with NodeJS
Escalando DB na horizontal


                                   re
                                      ad
      ad
   re




                   write




           write           write
Escalando DB na horizontal




 Shard      Shard      Shard      Shard      Shard      Shard
Database   Database   Database   Database   Database   Database
RubyMasters 2011 - Beyond Ruby with NodeJS
Arquitetura pra fazer
 o software escalar
Pattern para atender
  muitos requests
Pattern para atender
  muitos requests

Finalize a requisição o
 mais rápido possível
HTTP GET
RubyMasters 2011 - Beyond Ruby with NodeJS
RubyMasters 2011 - Beyond Ruby with NodeJS
RubyMasters 2011 - Beyond Ruby with NodeJS
RubyMasters 2011 - Beyond Ruby with NodeJS
HTTP POST
RubyMasters 2011 - Beyond Ruby with NodeJS
RubyMasters 2011 - Beyond Ruby with NodeJS
RubyMasters 2011 - Beyond Ruby with NodeJS
RubyMasters 2011 - Beyond Ruby with NodeJS
RubyMasters 2011 - Beyond Ruby with NodeJS
Por que então mais
 uma tecnologia ?
RubyMasters 2011 - Beyond Ruby with NodeJS
Escalando na horizontal
Escalando na horizontal
RubyMasters 2011 - Beyond Ruby with NodeJS
RubyMasters 2011 - Beyond Ruby with NodeJS
Qual é o problema
das tecnologias atuais ?
Como manter
conectados 10, 20 ou
   30 mil usuários
    simultâneos ?
Nosso código costuma
  ser escrito assim
Nosso código costuma
  ser escrito assim



O que o software está fazendo
 enquanto a querie executa ?
Na maioria dos casos
está travado esperando
       a resposta
Ruby on Rails


HTTPD           Database
Ruby on Rails


HTTPD           Database
Ruby on Rails


HTTPD           Database
Ruby on Rails
          RUBY
         PROCESS




HTTPD              Database
Ruby on Rails
          RUBY
                   BLOCK
         PROCESS




HTTPD                      Database
Ruby on Rails
          RUBY
                   BLOCK
         PROCESS




          RUBY
                   BLOCK
         PROCESS

HTTPD                      Database
          RUBY
                   BLOCK
         PROCESS




           EUBY
         PROCESS   BLOCK
RubyMasters 2011 - Beyond Ruby with NodeJS
RubyMasters 2011 - Beyond Ruby with NodeJS
RubyMasters 2011 - Beyond Ruby with NodeJS
RubyMasters 2011 - Beyond Ruby with NodeJS
Java
           Servlet Container




HTTPD          Servlet         Database
Java
           Servlet Container




HTTPD          Servlet         Database
Java
           Servlet Container




HTTPD          Servlet         Database
Java
                  Servlet Container
         Thread




HTTPD                 Servlet         Database
Java
                  Servlet Container
         Thread                 BLOCK




HTTPD                 Servlet           Database
Java
                  Servlet Container
         Thread                 BLOCK


         Thread                 BLOCK


         Thread                 BLOCK
HTTPD                 Servlet           Database
         Thread                 BLOCK


         Thread                 BLOCK


         Thread                 BLOCK


         Thread                 BLOCK
Apenas um processo
abrindo uma thread
 para cada request
RubyMasters 2011 - Beyond Ruby with NodeJS
RubyMasters 2011 - Beyond Ruby with NodeJS
Produtividade do
programador mais que
   performance da
      tecnologia
Apenas um processo
abrindo uma thread
 para cada request
Parece bom mas ...
Como manter
conectados 10, 20 ou
   30 mil usuários
    simultâneos ?
Como manter
conectados 10, 20 ou
   30 mil usuários
    simultâneos ?
  30 mil threads ?
concurrency × reqs/sec

 Apache vs NGINX
 concurrency × reqs/sec




 http://blog.webfaction.com/a-little-holiday-present
http://blog.webfaction.com/a-little-holiday-present
concurrency × reqs/sec

 Apache vs NGINX
 concurrency × memory




  http://blog.webfaction.com/a-little-holiday-present
http://blog.webfaction.com/a-little-holiday-present
Apache cria uma
thread por request
Troca de contexto
entre theads tem
    um custo
Cada OS Thread
cria uma pilha de
 execução nova
Pense bem antes de
usar uma thread por
   request quando
precisar suportar alta
    concorrência
RubyMasters 2011 - Beyond Ruby with NodeJS
Pattern para atender
  muitos requests

Finalize a requisição o
 mais rápido possível
Pattern para atender
 alta concorrência
Pattern para atender
 alta concorrência

   Evite threads
Pattern para atender
 alta concorrência

   Evite threads
Use um Event Loop
Performance
     !=
Escalabilidade
Performance
     !=
Escalabilidade
  mas ...
Uma performance
melhor ajuda a escalar
com menos recursos
RubyMasters 2011 - Beyond Ruby with NodeJS
RubyMasters 2011 - Beyond Ruby with NodeJS
Precisamos fazer I/O
 de outra maneira
Latência de I/O
Latência de I/O
L1          3 ciclos
Latência de I/O
L1          3 ciclos
L2          14 ciclos
Latência de I/O
 L1         3 ciclos
 L2         14 ciclos
RAM        250 ciclos
Latência de I/O
 L1           3 ciclos
 L2           14 ciclos
RAM          250 ciclos

Disco     41.000.000 ciclos
Latência de I/O
 L1            3 ciclos
 L2            14 ciclos
RAM           250 ciclos

Disco      41.000.000 ciclos
Rede      240.000.000 ciclos
Latência de I/O
 L1            3 ciclos
 L2            14 ciclos
RAM           250 ciclos

Disco      41.000.000 ciclos
Rede      240.000.000 ciclos
I/O não bloqueante
I/O não bloqueante
 L1          3 ciclos
 L2          14 ciclos
RAM         250 ciclos
I/O não bloqueante
 L1          3 ciclos
 L2          14 ciclos
RAM         250 ciclos
  I/O bloqueante
I/O não bloqueante
 L1           3 ciclos
 L2           14 ciclos
RAM          250 ciclos
   I/O bloqueante
Disco     41.000.000 ciclos
Rede     240.000.000 ciclos
Infraestrutura não bloqueante, puramente
  baseada em eventos, para desenvolver
      software de alta concorrência
Servidor TCP simples
      em NodeJS



O código acima faz com que a execução
 retorne imediatamente ao event loop
Por que já não
faziamos dessa forma ?
RubyMasters 2011 - Beyond Ruby with NodeJS
POSIX Assync I/O não
 suportado por todos
       os S.Os
POSIX Assync I/O não
 suportado por todos
       os S.Os

 libmysql_client não
permite query async
Filosofia do NodeJS
Filosofia do NodeJS


Todo I/O deveria ser feito desta forma
Arquitetura
Javascript   Node standard library




    C             Node Bindings


                    thread     event
                     pool      loop
             V8
                    (libeio)   (libev)
#reactor
RubyMasters 2011 - Beyond Ruby with NodeJS
Pilha de execução




          ev_loop()




 I/O em disco (bloqueante)
Pilha de execução



      socket_readdable(1)


           ev_loop()




 I/O em disco (bloqueante)
Pilha de execução


         http_parse(1)


      socket_readdable(1)


           ev_loop()




 I/O em disco (bloqueante)
Pilha de execução

       load(“index.html”)


         http_parse(1)


      socket_readdable(1)


           ev_loop()




 I/O em disco (bloqueante)
Pilha de execução


         http_parse(1)


      socket_readdable(1)


           ev_loop()




 I/O em disco (bloqueante)
Pilha de execução



      socket_readdable(1)


           ev_loop()




 I/O em disco (bloqueante)
Pilha de execução




          ev_loop()




 I/O em disco (bloqueante)
Pilha de execução




         ev_loop()




 I/O em RAM (não bloqueante)
Pilha de execução



      socket_readdable(2)


           ev_loop()




 I/O em RAM (não bloqueante)
Pilha de execução


         http_parse(2)


      socket_readdable(2)


           ev_loop()




 I/O em RAM (não bloqueante)
Pilha de execução

        http_respond(2)


         http_parse(2)


      socket_readdable(2)


           ev_loop()




 I/O em RAM (não bloqueante)
Pilha de execução


         http_parse(2)


      socket_readdable(2)


           ev_loop()




 I/O em RAM (não bloqueante)
Pilha de execução



      socket_readdable(2)


           ev_loop()




 I/O em RAM (não bloqueante)
Pilha de execução




         ev_loop()




 I/O em RAM (não bloqueante)
Pilha de execução




          ev_loop()




 Arquivo carregou do disco
Pilha de execução



        file_loaded()


          ev_loop()




 Arquivo carregou do disco
Pilha de execução


        http_respond(1)


         file_loaded()


           ev_loop()




 Arquivo carregou do disco
Pilha de execução



        file_loaded()


          ev_loop()




 Arquivo carregou do disco
Pilha de execução




          ev_loop()




 Arquivo carregou do disco
Arquitetura Web
Arquitetura Web


      Nginx
Arquitetura Web


                    Nginx




Ruby    Ruby    Ruby        Ruby    Ruby
 on      on      on          on      on
Rails   Rails   Rails       Rails   Rails
Arquitetura Web


                    Nginx




Ruby    Ruby    Ruby        Ruby    Ruby
 on      on      on          on      on     NodeJS
Rails   Rails   Rails       Rails   Rails
Arquitetura Web


      Nginx
Arquitetura Web


      Nginx




      NodeJS
Arquitetura Web


      NodeJS
RubyMasters 2011 - Beyond Ruby with NodeJS
RubyMasters 2011 - Beyond Ruby with NodeJS
#bizarrices
RubyMasters 2011 - Beyond Ruby with NodeJS
RubyMasters 2011 - Beyond Ruby with NodeJS
RubyMasters 2011 - Beyond Ruby with NodeJS
RubyMasters 2011 - Beyond Ruby with NodeJS
Isso é bonito?
RubyMasters 2011 - Beyond Ruby with NodeJS
em-syslog
em-dns
          em-syslog




em-spec
em-proxy     em-dns
               em-syslog



                           em-ruby-irc
em-spec

 em-memcache-client
em-mysql


       em-proxy     em-dns
                                     em-mongo
em-syncrony       em-syslog



                               em-ruby-irc
  em-spec

   em-memcache-client         em-simplechat
em-mysql       em-resolv-replace
   em-http-request          em-websocket

       em-proxy     em-dns
                                em-s3 em-mongo
em-syncrony       em-syslog
                                em-dir-watcher
          em-ftpd
                    em-jabberbot
     em-redis                    em-ruby-irc
  em-spec         em-net-http

   em-memcache-client           em-simplechat
EM-*
WS-*
#simplicidade
Código bloqueante
Código bloqueante


Código não-bloqueante
RubyMasters 2011 - Beyond Ruby with NodeJS
RubyMasters 2011 - Beyond Ruby with NodeJS
RubyMasters 2011 - Beyond Ruby with NodeJS
Callback
Callback


Callback
#evolução
RubyMasters 2011 - Beyond Ruby with NodeJS
RubyMasters 2011 - Beyond Ruby with NodeJS
Don’t Repeat Yourself
RubyMasters 2011 - Beyond Ruby with NodeJS
RubyMasters 2011 - Beyond Ruby with NodeJS
RubyMasters 2011 - Beyond Ruby with NodeJS
RubyMasters 2011 - Beyond Ruby with NodeJS
RubyMasters 2011 - Beyond Ruby with NodeJS
RubyMasters 2011 - Beyond Ruby with NodeJS
Configurações
        Properties
XML                  YAML
Configurações
        Properties
XML                  YAML
          JSON

       Transporte
Configurações



    JSON
Configurações


    JSON
Configurações


    JSON



 Transporte
Configurações


Javascript Object Notation



     Transporte
Server Side

Java   Ruby   Python   PHP
Server Side

Java   Ruby   Python   PHP

       Client Side

        JavaScript
Server Side




 JavaScript
Server Side

 JavaScript
Server Side

 JavaScript



Client Side
#ecossistema
RubyMasters 2011 - Beyond Ruby with NodeJS
RubyMasters 2011 - Beyond Ruby with NodeJS
RubyMasters 2011 - Beyond Ruby with NodeJS
Sinatra detected !
RubyMasters 2011 - Beyond Ruby with NodeJS
Testes Automatizados
Testes Automatizados
#https://github.com/caolan/nodeunit
RubyMasters 2011 - Beyond Ruby with NodeJS
RubyMasters 2011 - Beyond Ruby with NodeJS
RubyMasters 2011 - Beyond Ruby with NodeJS
RubyMasters 2011 - Beyond Ruby with NodeJS
RubyMasters 2011 - Beyond Ruby with NodeJS
RubyMasters 2011 - Beyond Ruby with NodeJS
RubyMasters 2011 - Beyond Ruby with NodeJS
RubyMasters 2011 - Beyond Ruby with NodeJS
RubyMasters 2011 - Beyond Ruby with NodeJS
RubyMasters 2011 - Beyond Ruby with NodeJS
RubyMasters 2011 - Beyond Ruby with NodeJS
RubyMasters 2011 - Beyond Ruby with NodeJS
RubyMasters 2011 - Beyond Ruby with NodeJS
RubyMasters 2011 - Beyond Ruby with NodeJS
#LIVE
on
Client Ruby on Rails
Client Ruby on Rails
Servidor em Node.js
Servidor em Node.js
Código Client-Side ( JS )
Código Client-Side ( JS )
Código Server Coffeescript
#conclusão
I
Ruby
RubyMasters 2011 - Beyond Ruby with NodeJS
RubyMasters 2011 - Beyond Ruby with NodeJS
RubyMasters 2011 - Beyond Ruby with NodeJS
RubyMasters 2011 - Beyond Ruby with NodeJS
RubyMasters 2011 - Beyond Ruby with NodeJS
Obrigado !!!
    Emerson Macedo
        @emerleite
   http://nodecasts.org
  http://codificando.com

Más contenido relacionado

Was ist angesagt?

Docker Everywhere - MTAC Week
Docker Everywhere - MTAC WeekDocker Everywhere - MTAC Week
Docker Everywhere - MTAC WeekLuiz Carlos Faria
 
NodeJS - Tutorial de forma simples e pratica.
NodeJS - Tutorial de forma simples e pratica.NodeJS - Tutorial de forma simples e pratica.
NodeJS - Tutorial de forma simples e pratica.Filipe Morelli
 
Hangout Tempo Real Eventos - Nodejs - Os Primeiros Passos
Hangout  Tempo Real Eventos - Nodejs - Os Primeiros PassosHangout  Tempo Real Eventos - Nodejs - Os Primeiros Passos
Hangout Tempo Real Eventos - Nodejs - Os Primeiros PassosJackson F. de A. Mafra
 
Talk no Meetup LaravelSP #3
Talk no Meetup LaravelSP #3Talk no Meetup LaravelSP #3
Talk no Meetup LaravelSP #3Wellington Silva
 
Node.js - #1 - Introdução - Rodrigo Branas
Node.js - #1 - Introdução - Rodrigo BranasNode.js - #1 - Introdução - Rodrigo Branas
Node.js - #1 - Introdução - Rodrigo BranasRodrigo Branas
 

Was ist angesagt? (6)

Docker Everywhere - MTAC Week
Docker Everywhere - MTAC WeekDocker Everywhere - MTAC Week
Docker Everywhere - MTAC Week
 
NodeJS - Tutorial de forma simples e pratica.
NodeJS - Tutorial de forma simples e pratica.NodeJS - Tutorial de forma simples e pratica.
NodeJS - Tutorial de forma simples e pratica.
 
Hangout Tempo Real Eventos - Nodejs - Os Primeiros Passos
Hangout  Tempo Real Eventos - Nodejs - Os Primeiros PassosHangout  Tempo Real Eventos - Nodejs - Os Primeiros Passos
Hangout Tempo Real Eventos - Nodejs - Os Primeiros Passos
 
Java no linux
Java no linuxJava no linux
Java no linux
 
Talk no Meetup LaravelSP #3
Talk no Meetup LaravelSP #3Talk no Meetup LaravelSP #3
Talk no Meetup LaravelSP #3
 
Node.js - #1 - Introdução - Rodrigo Branas
Node.js - #1 - Introdução - Rodrigo BranasNode.js - #1 - Introdução - Rodrigo Branas
Node.js - #1 - Introdução - Rodrigo Branas
 

Andere mochten auch

Jogos com NodeJS e Browser - QCON SP 2011
Jogos com NodeJS e Browser - QCON SP 2011Jogos com NodeJS e Browser - QCON SP 2011
Jogos com NodeJS e Browser - QCON SP 2011Emerson Macedo
 
Microservices Case: GloboTV e Globosat Play
Microservices Case: GloboTV e Globosat PlayMicroservices Case: GloboTV e Globosat Play
Microservices Case: GloboTV e Globosat PlayEmerson Macedo
 
Javascript Orientado a Objetos - Fisl12
Javascript Orientado a Objetos - Fisl12Javascript Orientado a Objetos - Fisl12
Javascript Orientado a Objetos - Fisl12Emerson Macedo
 
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011Emerson Macedo
 
Beyond Ruby with NodeJS - RubyConf Brasil 2010
Beyond Ruby with NodeJS - RubyConf Brasil 2010Beyond Ruby with NodeJS - RubyConf Brasil 2010
Beyond Ruby with NodeJS - RubyConf Brasil 2010Emerson Macedo
 
DevInRio 2010 - NodeJS
DevInRio 2010 - NodeJSDevInRio 2010 - NodeJS
DevInRio 2010 - NodeJSEmerson Macedo
 

Andere mochten auch (6)

Jogos com NodeJS e Browser - QCON SP 2011
Jogos com NodeJS e Browser - QCON SP 2011Jogos com NodeJS e Browser - QCON SP 2011
Jogos com NodeJS e Browser - QCON SP 2011
 
Microservices Case: GloboTV e Globosat Play
Microservices Case: GloboTV e Globosat PlayMicroservices Case: GloboTV e Globosat Play
Microservices Case: GloboTV e Globosat Play
 
Javascript Orientado a Objetos - Fisl12
Javascript Orientado a Objetos - Fisl12Javascript Orientado a Objetos - Fisl12
Javascript Orientado a Objetos - Fisl12
 
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
 
Beyond Ruby with NodeJS - RubyConf Brasil 2010
Beyond Ruby with NodeJS - RubyConf Brasil 2010Beyond Ruby with NodeJS - RubyConf Brasil 2010
Beyond Ruby with NodeJS - RubyConf Brasil 2010
 
DevInRio 2010 - NodeJS
DevInRio 2010 - NodeJSDevInRio 2010 - NodeJS
DevInRio 2010 - NodeJS
 

Ähnlich wie RubyMasters 2011 - Beyond Ruby with NodeJS

Nodejs - A performance que eu sempre quis ter
Nodejs - A performance que eu sempre quis terNodejs - A performance que eu sempre quis ter
Nodejs - A performance que eu sempre quis terEmerson Macedo
 
Node.js: 5 razões para começar a utilizar
Node.js: 5 razões para começar a utilizarNode.js: 5 razões para começar a utilizar
Node.js: 5 razões para começar a utilizarFilipe Falcão
 
Uma visão rápida sobre Nodejs
Uma visão rápida sobre NodejsUma visão rápida sobre Nodejs
Uma visão rápida sobre NodejsRafael Soares
 
TDC2015 - Internet das Coisas - OpenDevice
TDC2015 - Internet das Coisas - OpenDeviceTDC2015 - Internet das Coisas - OpenDevice
TDC2015 - Internet das Coisas - OpenDeviceRicardo Rufino
 
O bom, o mau, o vilão... e o node.js
O bom, o mau, o vilão... e o node.jsO bom, o mau, o vilão... e o node.js
O bom, o mau, o vilão... e o node.jsNuno Paz
 
Você não deveria escrever uma API para isso
Você não deveria escrever uma API para issoVocê não deveria escrever uma API para isso
Você não deveria escrever uma API para issoJunior Conte
 
SAPO Broker
SAPO BrokerSAPO Broker
SAPO Brokercodebits
 
Criando Webservice REST com NodeJS, NoSQL & Docker
Criando Webservice REST com NodeJS, NoSQL & DockerCriando Webservice REST com NodeJS, NoSQL & Docker
Criando Webservice REST com NodeJS, NoSQL & DockerGiovanni Kenji Shiroma
 
Palestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAPalestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAThiago Cifani
 
Desenvolvimento web com python e web2py
Desenvolvimento web com python e web2pyDesenvolvimento web com python e web2py
Desenvolvimento web com python e web2pyRelsi Maron
 
Conhecendo o Novo REST Framework
Conhecendo o Novo REST FrameworkConhecendo o Novo REST Framework
Conhecendo o Novo REST FrameworkMario Guedes
 
Navegando em um mar de siglas do mundo java
Navegando em um mar de siglas do mundo javaNavegando em um mar de siglas do mundo java
Navegando em um mar de siglas do mundo javaAndrei Tognolo
 
Rest Java One
Rest Java OneRest Java One
Rest Java OneDextra
 
Desenvolvimento web com Ruby on Rails (parte 1)
Desenvolvimento web com Ruby on Rails (parte 1)Desenvolvimento web com Ruby on Rails (parte 1)
Desenvolvimento web com Ruby on Rails (parte 1)Joao Lucas Santana
 

Ähnlich wie RubyMasters 2011 - Beyond Ruby with NodeJS (20)

Nodejs - A performance que eu sempre quis ter
Nodejs - A performance que eu sempre quis terNodejs - A performance que eu sempre quis ter
Nodejs - A performance que eu sempre quis ter
 
Node.js no Pagar.me
Node.js no Pagar.meNode.js no Pagar.me
Node.js no Pagar.me
 
Node.js: 5 razões para começar a utilizar
Node.js: 5 razões para começar a utilizarNode.js: 5 razões para começar a utilizar
Node.js: 5 razões para começar a utilizar
 
Uma visão rápida sobre Nodejs
Uma visão rápida sobre NodejsUma visão rápida sobre Nodejs
Uma visão rápida sobre Nodejs
 
TDC2015 - Internet das Coisas - OpenDevice
TDC2015 - Internet das Coisas - OpenDeviceTDC2015 - Internet das Coisas - OpenDevice
TDC2015 - Internet das Coisas - OpenDevice
 
Web Sphere
Web SphereWeb Sphere
Web Sphere
 
O bom, o mau, o vilão... e o node.js
O bom, o mau, o vilão... e o node.jsO bom, o mau, o vilão... e o node.js
O bom, o mau, o vilão... e o node.js
 
Netbeans Slides
Netbeans SlidesNetbeans Slides
Netbeans Slides
 
Você não deveria escrever uma API para isso
Você não deveria escrever uma API para issoVocê não deveria escrever uma API para isso
Você não deveria escrever uma API para isso
 
SAPO Broker
SAPO BrokerSAPO Broker
SAPO Broker
 
Criando Webservice REST com NodeJS, NoSQL & Docker
Criando Webservice REST com NodeJS, NoSQL & DockerCriando Webservice REST com NodeJS, NoSQL & Docker
Criando Webservice REST com NodeJS, NoSQL & Docker
 
Palestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAPalestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVA
 
Desenvolvimento web com python e web2py
Desenvolvimento web com python e web2pyDesenvolvimento web com python e web2py
Desenvolvimento web com python e web2py
 
Rest Teoria E Pratica
Rest Teoria E PraticaRest Teoria E Pratica
Rest Teoria E Pratica
 
Conhecendo o Novo REST Framework
Conhecendo o Novo REST FrameworkConhecendo o Novo REST Framework
Conhecendo o Novo REST Framework
 
Navegando em um mar de siglas do mundo java
Navegando em um mar de siglas do mundo javaNavegando em um mar de siglas do mundo java
Navegando em um mar de siglas do mundo java
 
Rest Java One
Rest Java OneRest Java One
Rest Java One
 
Rest workshop
Rest workshopRest workshop
Rest workshop
 
Continuous Deployment e DevOps na Nuvem
Continuous Deployment e DevOps na NuvemContinuous Deployment e DevOps na Nuvem
Continuous Deployment e DevOps na Nuvem
 
Desenvolvimento web com Ruby on Rails (parte 1)
Desenvolvimento web com Ruby on Rails (parte 1)Desenvolvimento web com Ruby on Rails (parte 1)
Desenvolvimento web com Ruby on Rails (parte 1)
 

Mehr von Emerson Macedo

ElixirConf 2019 - 10M Monthly Ad Insertions with Phoenix and Broadway
ElixirConf 2019 - 10M Monthly Ad Insertions with Phoenix and BroadwayElixirConf 2019 - 10M Monthly Ad Insertions with Phoenix and Broadway
ElixirConf 2019 - 10M Monthly Ad Insertions with Phoenix and BroadwayEmerson Macedo
 
The Conf 2019 - Elixir - Emerson Macedo
The Conf 2019 - Elixir - Emerson MacedoThe Conf 2019 - Elixir - Emerson Macedo
The Conf 2019 - Elixir - Emerson MacedoEmerson Macedo
 
Wanna be a manager? Not today - QCon São Paulo 2019
Wanna be a manager? Not today - QCon São Paulo 2019Wanna be a manager? Not today - QCon São Paulo 2019
Wanna be a manager? Not today - QCon São Paulo 2019Emerson Macedo
 
TheConf 2018 - How does your app behave when everything goes wrong
TheConf 2018 - How does your app behave when everything goes wrongTheConf 2018 - How does your app behave when everything goes wrong
TheConf 2018 - How does your app behave when everything goes wrongEmerson Macedo
 
DevConf OpenSanca 2018 - How does your application behaves when everything go...
DevConf OpenSanca 2018 - How does your application behaves when everything go...DevConf OpenSanca 2018 - How does your application behaves when everything go...
DevConf OpenSanca 2018 - How does your application behaves when everything go...Emerson Macedo
 
How your app behaves when everything goes wrong - Ruby Conf BR 2017
How your app behaves when everything goes wrong - Ruby Conf BR 2017How your app behaves when everything goes wrong - Ruby Conf BR 2017
How your app behaves when everything goes wrong - Ruby Conf BR 2017Emerson Macedo
 
Beyond your daily coding - The Conf Brazil 2017 Keynote
Beyond your daily coding - The Conf Brazil 2017 KeynoteBeyond your daily coding - The Conf Brazil 2017 Keynote
Beyond your daily coding - The Conf Brazil 2017 KeynoteEmerson Macedo
 
CEJS 2016 - Please learn that shit
CEJS 2016 - Please learn that shitCEJS 2016 - Please learn that shit
CEJS 2016 - Please learn that shitEmerson Macedo
 
How Elixir helped us scale our Video User Profile Service for the Olympics
How Elixir helped us scale our Video User Profile Service for the OlympicsHow Elixir helped us scale our Video User Profile Service for the Olympics
How Elixir helped us scale our Video User Profile Service for the OlympicsEmerson Macedo
 
QCon SP 2016 - Video Authorization: from chaos to 25ms response time
QCon SP 2016 - Video Authorization: from chaos to 25ms response timeQCon SP 2016 - Video Authorization: from chaos to 25ms response time
QCon SP 2016 - Video Authorization: from chaos to 25ms response timeEmerson Macedo
 
Qcon Rio 2015 - Microservices
Qcon Rio 2015 - MicroservicesQcon Rio 2015 - Microservices
Qcon Rio 2015 - MicroservicesEmerson Macedo
 
1 encontro Node.JS Brasil
1 encontro Node.JS Brasil1 encontro Node.JS Brasil
1 encontro Node.JS BrasilEmerson Macedo
 
BrazilJS - Node.JS Realtime Web Applications
BrazilJS - Node.JS Realtime Web ApplicationsBrazilJS - Node.JS Realtime Web Applications
BrazilJS - Node.JS Realtime Web ApplicationsEmerson Macedo
 

Mehr von Emerson Macedo (13)

ElixirConf 2019 - 10M Monthly Ad Insertions with Phoenix and Broadway
ElixirConf 2019 - 10M Monthly Ad Insertions with Phoenix and BroadwayElixirConf 2019 - 10M Monthly Ad Insertions with Phoenix and Broadway
ElixirConf 2019 - 10M Monthly Ad Insertions with Phoenix and Broadway
 
The Conf 2019 - Elixir - Emerson Macedo
The Conf 2019 - Elixir - Emerson MacedoThe Conf 2019 - Elixir - Emerson Macedo
The Conf 2019 - Elixir - Emerson Macedo
 
Wanna be a manager? Not today - QCon São Paulo 2019
Wanna be a manager? Not today - QCon São Paulo 2019Wanna be a manager? Not today - QCon São Paulo 2019
Wanna be a manager? Not today - QCon São Paulo 2019
 
TheConf 2018 - How does your app behave when everything goes wrong
TheConf 2018 - How does your app behave when everything goes wrongTheConf 2018 - How does your app behave when everything goes wrong
TheConf 2018 - How does your app behave when everything goes wrong
 
DevConf OpenSanca 2018 - How does your application behaves when everything go...
DevConf OpenSanca 2018 - How does your application behaves when everything go...DevConf OpenSanca 2018 - How does your application behaves when everything go...
DevConf OpenSanca 2018 - How does your application behaves when everything go...
 
How your app behaves when everything goes wrong - Ruby Conf BR 2017
How your app behaves when everything goes wrong - Ruby Conf BR 2017How your app behaves when everything goes wrong - Ruby Conf BR 2017
How your app behaves when everything goes wrong - Ruby Conf BR 2017
 
Beyond your daily coding - The Conf Brazil 2017 Keynote
Beyond your daily coding - The Conf Brazil 2017 KeynoteBeyond your daily coding - The Conf Brazil 2017 Keynote
Beyond your daily coding - The Conf Brazil 2017 Keynote
 
CEJS 2016 - Please learn that shit
CEJS 2016 - Please learn that shitCEJS 2016 - Please learn that shit
CEJS 2016 - Please learn that shit
 
How Elixir helped us scale our Video User Profile Service for the Olympics
How Elixir helped us scale our Video User Profile Service for the OlympicsHow Elixir helped us scale our Video User Profile Service for the Olympics
How Elixir helped us scale our Video User Profile Service for the Olympics
 
QCon SP 2016 - Video Authorization: from chaos to 25ms response time
QCon SP 2016 - Video Authorization: from chaos to 25ms response timeQCon SP 2016 - Video Authorization: from chaos to 25ms response time
QCon SP 2016 - Video Authorization: from chaos to 25ms response time
 
Qcon Rio 2015 - Microservices
Qcon Rio 2015 - MicroservicesQcon Rio 2015 - Microservices
Qcon Rio 2015 - Microservices
 
1 encontro Node.JS Brasil
1 encontro Node.JS Brasil1 encontro Node.JS Brasil
1 encontro Node.JS Brasil
 
BrazilJS - Node.JS Realtime Web Applications
BrazilJS - Node.JS Realtime Web ApplicationsBrazilJS - Node.JS Realtime Web Applications
BrazilJS - Node.JS Realtime Web Applications
 

RubyMasters 2011 - Beyond Ruby with NodeJS