SlideShare a Scribd company logo
1 of 95
Download to read offline
Aplicações
dinâmicas em
    Rails
Rafael Felix


         @rs_felix


http://blog.rollingwithcode.com




  http://www.crafters.com.br
Backbone é uma estrutura para
aplicações que fazem uso pesado de JavaScript, e
  conecta-se a sua aplicação por uma interface
                    RESTful.
Backbone.Model
var MyModel = Backbone.Model.extend({})
save([attributes],[options])


var MyModel = Backbone.Model.extend({})
POST           PUT


       save([attributes],[options])


var MyModel = Backbone.Model.extend({})
save([attributes],[options])


 var MyModel = Backbone.Model.extend({})


fetch([options])
save([attributes],[options])


 var MyModel = Backbone.Model.extend({})


fetch([options])     setInterval(function(){
                       model.fetch();
                     }, 10000);
save([attributes],[options])


 var MyModel = Backbone.Model.extend({})


fetch([options])            validate(attributes)
var Chapter = Backbone.Model.extend({
  validate: function(attrs) {
    if (attrs.end < attrs.start) {
      return "can't end before it starts";
    }
  }
});

 var one = new Chapter({
   title : "Chapter One: The Beginning"
 });

 one.bind("error", function(model, error) {
   alert(model.get("title") + " " + error);
 });

 one.set({
  start: 15,
  end:   10
 });
var Chapter = Backbone.Model.extend({
  validate: function(attrs) {
    if (attrs.end < attrs.start) {
      return "can't end before it starts";
    }
  }
});

 var one = new Chapter({
   title : "Chapter One: The Beginning"
 });

 one.bind("error", function(model, error) {
   alert(model.get("title") + " " + error);
 });

 one.set({
  start: 15,
  end:   10
 });
Backbone.Model
Backbone.Model




Backbone.Collection
var Library = Backbone.Collection.extend({
 model: Book
});
add(models, [options])

    var Library = Backbone.Collection.extend({
     model: Book
    });
add(models, [options])                    url()

    var Library = Backbone.Collection.extend({
     model: Book
    });
url: '/library'
add(models, [options])                     url()

    var Library = Backbone.Collection.extend({
     model: Book
    });
add(models, [options])                    url()

    var Library = Backbone.Collection.extend({
     model: Book
    });

  fetch([options])
add(models, [options])                     url()

    var Library = Backbone.Collection.extend({
     model: Book
    });

  fetch([options])       Library.fetch()

                         GET '/library'
add(models, [options])                       url()

    var Library = Backbone.Collection.extend({
     model: Book
    });

  fetch([options])       create(attributes, [options])
var alibrary = new Library;
var book = alibrary.create({
   title: "A book",
   author: "Someone"
})
Backbone.Model




Backbone.Collection
Backbone.Model




Backbone.Collection



                      Backbone.Router
var Workspace = Backbone.Router.extend({

 routes: {
  "help":                 "help",
  "search/:query":        "search",
  "search/:query/p:page": "search"
 },

 help: function() {},

 search: function(query, page) {}

});
var Workspace = Backbone.Router.extend({

 routes: {
  "help":                 "help",          #help
  "search/:query":        "search",        #search/felix
  "search/:query/p:page": "search"         #search/felix/p2
 },

 help: function() {},

 search: function(query, page) {}

});
var Workspace = Backbone.Router.extend({

 routes: {
  "help":                 "help",          #help
  "search/:query":        "search",        #search/felix
  "search/:query/p:page": "search"         #search/felix/p2
 },

 help: function() {},

 search: function(query, page) {}

});
var Workspace = Backbone.Router.extend({

 routes: {
  "help":                 "help",          #help
  "search/:query":        "search",        #search/felix
  "search/:query/p:page": "search"         #search/felix/p2
 },

 help: function() {},

 search: function(query, page) {}

});
var Workspace = Backbone.Router.extend({

 routes: {
  "help":                 "help",          #help
  "search/:query":        "search",        #search/felix
  "search/:query/p:page": "search"         #search/felix/p2
 },

 help: function() {},
                   felix  2
 search: function(query, page) {}

});
Backbone.Model




Backbone.Collection



                      Backbone.Router
Backbone.Model




          Backbone.Collection



Backbone.View                   Backbone.Router
var DocumentRow = Backbone.View.extend({

 tagName: "li",

 className: "document-row",

 events: {
  "click .icon": "open",
  "click .button.edit": "openEditDialog",
  "click .button.delete": "destroy"
 },

 render: function() {
   ...
 }

});
var DocumentRow = Backbone.View.extend({

 tagName: "li",
                                      <li class="document-row"></li>
 className: "document-row",

 events: {
  "click .icon": "open",
  "click .button.edit": "openEditDialog",
  "click .button.delete": "destroy"
 },

 render: function() {
   ...
 }

});
var DocumentRow = Backbone.View.extend({

 tagName: "li",

 className: "document-row",

 events: {
  "click .icon": "open",                    $(".icon").click(open)
  "click .button.edit": "openEditDialog",
  "click .button.delete": "destroy"
 },

 render: function() {
   ...
 }

});
Exemplo
layout
layout
         application
layout
                   application
         ProductView
layout
                   application
         ProductView


                                 CartView
click
click
Passo 1
layout
         application
app/views/layouts/application.html.erb


...
  <div class="container">
    <div class="content" id="application">
    </div>

    <footer>
      <p></p>
    </footer>

  </div>
...
JavaScript Templates
var obj = "bla bla bla";
someDiv = document.getElementById("someDiv");
someDiv.innerHTML = "<span>" + obj + "</span>";
template.jst

<span> ${obj} </span>
template.jst

<span> ${obj} </span>
template.jst.ejs

<span> <%= obj %> </span>
app/assets/javascripts/templates/app.jst.ejs




      <div id="products" class="span10">
      </div>
      <div id="cart" class="span6">
      </div>
app/assets/javascripts/views/app_view.js


 window.AppView = Backbone.View.extend({
   template: JST["templates/app"],
   className: "row",

   initialize: function(){
   },

   render: function(){
     $(this.el).html(this.template());
     return this;
   }
 });
app/assets/javascripts/home.js




$(function(){
  view = new AppView().render().el;
  $(view).appendTo("#application");
});
app/assets/javascripts/home.js




             $(function(){
               view = new AppView().render().el;
               $(view).appendTo("#application");
             });



<div class="row">
  <div id="products" class="span12">
  </div>
  <div id="cart" class="span6">
  </div>
</div>
Passo 2
ProductView
app/assets/javascripts/templates/product.jst.ejs


<div class="product-image">
  <img class="thumbnail" src="http://placehold.it/90x90" alt="">
</div>
<div class="details">
  <span class="name"><%= model.get("name") %></span><br />
  <span class="price">R$ <%= model.get("price") %></span>
  <form class="add_product">
    <input type="hidden" name="id" value="<%= model.get("id") %>">
    <input type="submit" name="commit" value="Comprar" class="btn info">
  </form>
</div>
app/assets/javascripts/views/product_view.js


window.ProductView = Backbone.View.extend({
  template: JST["templates/product"],
  className: "product-detail",

  initialize: function(){
  },

  render: function(){
    $(this.el).html(this.template({model: this.model}));
    return this;
  }
});
rails g model product name:string price:decimal

           rails g controller products
         config/initializers/backbone.rb

   ActiveRecord::Base.include_root_in_json = false
rails g model product name:string price:decimal

           rails g controller products
         config/initializers/backbone.rb

   ActiveRecord::Base.include_root_in_json = false




           [
               {"product": { "name" : "" }},
               {"product": { "name": "" }},
           ]
rails g model product name:string price:decimal

           rails g controller products
         config/initializers/backbone.rb

   ActiveRecord::Base.include_root_in_json = false




           [
               {"name" : "" },
               {"name": "" },
           ]
app/controllers/products_controller.rb




class ProductsController < ApplicationController
  respond_to :json
  def index
    @products = Product.all
    respond_with @products
  end
end
app/assets/javascripts/models/product.js




window.Product = Backbone.Model.extend({

});

window.ProductsCollection = Backbone.Collections.extend({
  model: Product,
  url: '/products'
});
app/assets/javascripts/views/app_view.js

window.AppView = Backbone.View.extend({

  initialize: function(){
    _.bindAll(this, 'addOne', 'addAll');

       this.collection = new ProductsCollection;
       this.collection.bind('add', this.addOne);
       this.collection.bind('all', this.addAll);

       this.collection.fetch();
  },

  addAll: function(){
     $("#products").html("");
     this.collection.each(this.addOne);
  },

  addOne: function(product){
    view = new ProductView({model: product}).render().el;
    $(view).appendTo("#products");
  }
});
Passo 3
CartView
app/assets/javascripts/templates/cart.jst.ejs




<div id="cart-products">
</div>
<hr/>
Total: <%= model.get("quantity") %> R$ <%= model.get("total") %>
app/assets/javascripts/views/cart_view.js

window.CartView = Backbone.View.extend({
  template: JST["templates/cart"],
  className: "cart-detail",

  initialize: function(){
     _.bindAll(this, 'render');
     this.model.bind('change', this.render);
     this.model.fetch();
  },

  render: function(){
    $(this.el).html(this.template({model: this.model}));
    return this;
  }
});
app/assets/javascripts/models/cart.js




 window.Cart = Backbone.Model.extend({
   url: function(){
     return '/cart';
   }
 });
rails g model cart quantity:integer total:decimal

             rails g controller cart
app/controllers/cart_controller.rb




class CartController < ApplicationController
  respond_to :json

  def show
    @cart ||= Cart.first || Cart.create!
    respond_with @cart
  end
end
app/controllers/cart_controller.rb




    get 'cart' => "cart#show"
class CartController < ApplicationController
  respond_to :json

  def show
    @cart ||= Cart.first || Cart.create!
    respond_with @cart
  end
end
app/assets/javascripts/views/app_view.js


window.AppView = Backbone.View.extend({
    ...
  initialize: function(){
    ...

    this.cart = new Cart;
    this.cartView = new CartView({model: this.cart}).
       render().el;
  },
  render: function(){
     $(this.el).html(this.template());
     this.$("#cart").html(this.cartView);
     return this;
  },
  ...
});
Passo 4
click
click
rails g model cart_product cart:references product:references
rails g model cart_product cart:references product:references

                        app/models/cart.rb


 class Cart < ActiveRecord::Base
   has_many :cart_products
   has_many :products, through: :cart_products

   def add_product(product)
     self.update_attributes
        quantity: self.quantity + 1, total: total + product.price
     self.cart_products << CartProduct.new(cart: self, product: product)
   end
 end
app/assets/javascripts/models/cart_product.js




window.CartProduct = Backbone.Model.extend({
  url: function(){
     return "/cart/product/"+this.productId+"/add";
  },
  initialize: function(args){
     this.productId = args.productId;
  }
});
app/assets/javascripts/models/cart_product.js




window.CartProduct = Backbone.Model.extend({
  url: function(){
     return "/cart/product/"+this.productId+"/add";
  },
  initialize: function(args){
     this.productId = args.productId;
  }
});


    post 'cart/product/:id/add' => "cart#add_product"
app/controllers/cart_controller.rb


class CartController < ApplicationController
  respond_to :json

  def show
    ...
  end

  def add_product
    @product = Product.find params[:id]
    @cart = Cart.first
    @cart.add_product @product
    respond_with @cart
  end
end
app/assets/javascripts/views/product_view.js

 window.ProductView = Backbone.View.extend({
   ...

   events: {
      "submit form" : "addProductToCart"
   },

   initialize: function(args){
      ...
      this.cart = args.cart
   },

   ...

 });
app/assets/javascripts/views/product_view.js

              window.ProductView = Backbone.View.extend({
                ...

                 events: {
                    "submit form" : "addProductToCart"
                 },

                 initialize: function(args){
                    ...
                    this.cart = args.cart
                 },

                 ...
    app/assets/javascripts/views/app_view.js

              });
addOne: function(product){
  view = new ProductView({model: product, cart: this.cart}).render().el;
  $(view).appendTo("#products");
}
app/assets/javascripts/views/product_view.js

window.ProductView = Backbone.View.extend({
  ...

  addProductToCart: function(e){
    e.preventDefault();
    productId = this.$("form.add_product > input[name=id]").val();
    item = new CartProduct({productId: productId});
    view = this;
    item.save({}, {
      success: function(){
        view.cart.fetch();
      }
    });
  }
});
http://backbone-todos.heroku.com/
Obrigado
                  felix.rafael@gmail.com
                http://twitter.com/rs_felix
                 http://github.com/fellix

                        Links
       http://documentcloud.github.com/backbone/
           https://github.com/creationix/haml-js
       https://github.com/codebrew/backbone-rails
http://seesparkbox.com/foundry/better_rails_apis_with_rabl

More Related Content

What's hot

Hacking Your Way To Better Security - Dutch PHP Conference 2016
Hacking Your Way To Better Security - Dutch PHP Conference 2016Hacking Your Way To Better Security - Dutch PHP Conference 2016
Hacking Your Way To Better Security - Dutch PHP Conference 2016Colin O'Dell
 
jQuery from the very beginning
jQuery from the very beginningjQuery from the very beginning
jQuery from the very beginningAnis Ahmad
 
Min-Maxing Software Costs - Laracon EU 2015
Min-Maxing Software Costs - Laracon EU 2015Min-Maxing Software Costs - Laracon EU 2015
Min-Maxing Software Costs - Laracon EU 2015Konstantin Kudryashov
 
Angular.js Fundamentals
Angular.js FundamentalsAngular.js Fundamentals
Angular.js FundamentalsMark
 
Design Patterns avec PHP 5.3, Symfony et Pimple
Design Patterns avec PHP 5.3, Symfony et PimpleDesign Patterns avec PHP 5.3, Symfony et Pimple
Design Patterns avec PHP 5.3, Symfony et PimpleHugo Hamon
 
The History of PHPersistence
The History of PHPersistenceThe History of PHPersistence
The History of PHPersistenceHugo Hamon
 
Database Design Patterns
Database Design PatternsDatabase Design Patterns
Database Design PatternsHugo Hamon
 
Building Single Page Apps with Backbone.js, Coffeescript and Rails 3.1
Building Single Page Apps with Backbone.js, Coffeescript and Rails 3.1Building Single Page Apps with Backbone.js, Coffeescript and Rails 3.1
Building Single Page Apps with Backbone.js, Coffeescript and Rails 3.1Vagmi Mudumbai
 
AngularJS Services
AngularJS ServicesAngularJS Services
AngularJS ServicesEyal Vardi
 
Avinash Kundaliya: Javascript and WordPress
Avinash Kundaliya: Javascript and WordPressAvinash Kundaliya: Javascript and WordPress
Avinash Kundaliya: Javascript and WordPresswpnepal
 
Introduction to Zend Framework web services
Introduction to Zend Framework web servicesIntroduction to Zend Framework web services
Introduction to Zend Framework web servicesMichelangelo van Dam
 
06 jQuery #burningkeyboards
06 jQuery  #burningkeyboards06 jQuery  #burningkeyboards
06 jQuery #burningkeyboardsDenis Ristic
 
Introduction to ReasonML
Introduction to ReasonMLIntroduction to ReasonML
Introduction to ReasonMLRiza Fahmi
 
Perkenalan ReasonML
Perkenalan ReasonMLPerkenalan ReasonML
Perkenalan ReasonMLRiza Fahmi
 
Decoupling with Design Patterns and Symfony2 DIC
Decoupling with Design Patterns and Symfony2 DICDecoupling with Design Patterns and Symfony2 DIC
Decoupling with Design Patterns and Symfony2 DICKonstantin Kudryashov
 
Template syntax in Angular 2.0
Template syntax in Angular 2.0Template syntax in Angular 2.0
Template syntax in Angular 2.0Eyal Vardi
 
jQuery and Rails, Sitting in a Tree
jQuery and Rails, Sitting in a TreejQuery and Rails, Sitting in a Tree
jQuery and Rails, Sitting in a Treeadamlogic
 
05 JavaScript #burningkeyboards
05 JavaScript #burningkeyboards05 JavaScript #burningkeyboards
05 JavaScript #burningkeyboardsDenis Ristic
 

What's hot (20)

Hacking Your Way To Better Security - Dutch PHP Conference 2016
Hacking Your Way To Better Security - Dutch PHP Conference 2016Hacking Your Way To Better Security - Dutch PHP Conference 2016
Hacking Your Way To Better Security - Dutch PHP Conference 2016
 
jQuery from the very beginning
jQuery from the very beginningjQuery from the very beginning
jQuery from the very beginning
 
Min-Maxing Software Costs - Laracon EU 2015
Min-Maxing Software Costs - Laracon EU 2015Min-Maxing Software Costs - Laracon EU 2015
Min-Maxing Software Costs - Laracon EU 2015
 
jQuery PPT
jQuery PPTjQuery PPT
jQuery PPT
 
Angular.js Fundamentals
Angular.js FundamentalsAngular.js Fundamentals
Angular.js Fundamentals
 
Design Patterns avec PHP 5.3, Symfony et Pimple
Design Patterns avec PHP 5.3, Symfony et PimpleDesign Patterns avec PHP 5.3, Symfony et Pimple
Design Patterns avec PHP 5.3, Symfony et Pimple
 
The History of PHPersistence
The History of PHPersistenceThe History of PHPersistence
The History of PHPersistence
 
Database Design Patterns
Database Design PatternsDatabase Design Patterns
Database Design Patterns
 
Building Single Page Apps with Backbone.js, Coffeescript and Rails 3.1
Building Single Page Apps with Backbone.js, Coffeescript and Rails 3.1Building Single Page Apps with Backbone.js, Coffeescript and Rails 3.1
Building Single Page Apps with Backbone.js, Coffeescript and Rails 3.1
 
Min-Maxing Software Costs
Min-Maxing Software CostsMin-Maxing Software Costs
Min-Maxing Software Costs
 
AngularJS Services
AngularJS ServicesAngularJS Services
AngularJS Services
 
Avinash Kundaliya: Javascript and WordPress
Avinash Kundaliya: Javascript and WordPressAvinash Kundaliya: Javascript and WordPress
Avinash Kundaliya: Javascript and WordPress
 
Introduction to Zend Framework web services
Introduction to Zend Framework web servicesIntroduction to Zend Framework web services
Introduction to Zend Framework web services
 
06 jQuery #burningkeyboards
06 jQuery  #burningkeyboards06 jQuery  #burningkeyboards
06 jQuery #burningkeyboards
 
Introduction to ReasonML
Introduction to ReasonMLIntroduction to ReasonML
Introduction to ReasonML
 
Perkenalan ReasonML
Perkenalan ReasonMLPerkenalan ReasonML
Perkenalan ReasonML
 
Decoupling with Design Patterns and Symfony2 DIC
Decoupling with Design Patterns and Symfony2 DICDecoupling with Design Patterns and Symfony2 DIC
Decoupling with Design Patterns and Symfony2 DIC
 
Template syntax in Angular 2.0
Template syntax in Angular 2.0Template syntax in Angular 2.0
Template syntax in Angular 2.0
 
jQuery and Rails, Sitting in a Tree
jQuery and Rails, Sitting in a TreejQuery and Rails, Sitting in a Tree
jQuery and Rails, Sitting in a Tree
 
05 JavaScript #burningkeyboards
05 JavaScript #burningkeyboards05 JavaScript #burningkeyboards
05 JavaScript #burningkeyboards
 

Similar to Aplicacoes dinamicas Rails com Backbone

Understanding backbonejs
Understanding backbonejsUnderstanding backbonejs
Understanding backbonejsNick Lee
 
Backbone.js — Introduction to client-side JavaScript MVC
Backbone.js — Introduction to client-side JavaScript MVCBackbone.js — Introduction to client-side JavaScript MVC
Backbone.js — Introduction to client-side JavaScript MVCpootsbook
 
Backbone.js Simple Tutorial
Backbone.js Simple TutorialBackbone.js Simple Tutorial
Backbone.js Simple Tutorial추근 문
 
Taming that client side mess with Backbone.js
Taming that client side mess with Backbone.jsTaming that client side mess with Backbone.js
Taming that client side mess with Backbone.jsJarod Ferguson
 
Javascript MVC & Backbone Tips & Tricks
Javascript MVC & Backbone Tips & TricksJavascript MVC & Backbone Tips & Tricks
Javascript MVC & Backbone Tips & TricksHjörtur Hilmarsson
 
Jarv.us Showcase — SenchaCon 2011
Jarv.us Showcase — SenchaCon 2011Jarv.us Showcase — SenchaCon 2011
Jarv.us Showcase — SenchaCon 2011Chris Alfano
 
Big Data for each one of us
Big Data for each one of usBig Data for each one of us
Big Data for each one of usOSCON Byrum
 
前端MVC 豆瓣说
前端MVC 豆瓣说前端MVC 豆瓣说
前端MVC 豆瓣说Ting Lv
 
Experience Manager 6 Developer Features - Highlights
Experience Manager 6 Developer Features - HighlightsExperience Manager 6 Developer Features - Highlights
Experience Manager 6 Developer Features - HighlightsCédric Hüsler
 
Introduction to backbone presentation
Introduction to backbone presentationIntroduction to backbone presentation
Introduction to backbone presentationBrian Hogg
 
Django Class-based views (Slovenian)
Django Class-based views (Slovenian)Django Class-based views (Slovenian)
Django Class-based views (Slovenian)Luka Zakrajšek
 
Drupal & javascript
Drupal & javascriptDrupal & javascript
Drupal & javascriptAlmog Baku
 
Writing Maintainable JavaScript
Writing Maintainable JavaScriptWriting Maintainable JavaScript
Writing Maintainable JavaScriptAndrew Dupont
 
Rails 3 overview
Rails 3 overviewRails 3 overview
Rails 3 overviewYehuda Katz
 

Similar to Aplicacoes dinamicas Rails com Backbone (20)

Understanding backbonejs
Understanding backbonejsUnderstanding backbonejs
Understanding backbonejs
 
Backbone.js — Introduction to client-side JavaScript MVC
Backbone.js — Introduction to client-side JavaScript MVCBackbone.js — Introduction to client-side JavaScript MVC
Backbone.js — Introduction to client-side JavaScript MVC
 
Backbone.js Simple Tutorial
Backbone.js Simple TutorialBackbone.js Simple Tutorial
Backbone.js Simple Tutorial
 
Taming that client side mess with Backbone.js
Taming that client side mess with Backbone.jsTaming that client side mess with Backbone.js
Taming that client side mess with Backbone.js
 
Backbone.js
Backbone.jsBackbone.js
Backbone.js
 
Javascript MVC & Backbone Tips & Tricks
Javascript MVC & Backbone Tips & TricksJavascript MVC & Backbone Tips & Tricks
Javascript MVC & Backbone Tips & Tricks
 
Jarv.us Showcase — SenchaCon 2011
Jarv.us Showcase — SenchaCon 2011Jarv.us Showcase — SenchaCon 2011
Jarv.us Showcase — SenchaCon 2011
 
Big Data for each one of us
Big Data for each one of usBig Data for each one of us
Big Data for each one of us
 
前端MVC 豆瓣说
前端MVC 豆瓣说前端MVC 豆瓣说
前端MVC 豆瓣说
 
Experience Manager 6 Developer Features - Highlights
Experience Manager 6 Developer Features - HighlightsExperience Manager 6 Developer Features - Highlights
Experience Manager 6 Developer Features - Highlights
 
JQuery Flot
JQuery FlotJQuery Flot
JQuery Flot
 
Introduction to backbone presentation
Introduction to backbone presentationIntroduction to backbone presentation
Introduction to backbone presentation
 
Django Class-based views (Slovenian)
Django Class-based views (Slovenian)Django Class-based views (Slovenian)
Django Class-based views (Slovenian)
 
Backbone js
Backbone jsBackbone js
Backbone js
 
Drupal & javascript
Drupal & javascriptDrupal & javascript
Drupal & javascript
 
Rails is not just Ruby
Rails is not just RubyRails is not just Ruby
Rails is not just Ruby
 
Writing Maintainable JavaScript
Writing Maintainable JavaScriptWriting Maintainable JavaScript
Writing Maintainable JavaScript
 
Rails 3 overview
Rails 3 overviewRails 3 overview
Rails 3 overview
 
Django at the Disco
Django at the DiscoDjango at the Disco
Django at the Disco
 
Django at the Disco
Django at the DiscoDjango at the Disco
Django at the Disco
 

Recently uploaded

How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | DelhiFULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhisoniya singh
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Patryk Bandurski
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...shyamraj55
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitecturePixlogix Infotech
 
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure serviceWhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure servicePooja Nehwal
 
Pigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationRidwan Fadjar
 
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...HostedbyConfluent
 
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024BookNet Canada
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreternaman860154
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsMemoori
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)Gabriella Davis
 
Maximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxMaximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxOnBoard
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptxHampshireHUG
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxMalak Abu Hammad
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountPuma Security, LLC
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsMaria Levchenko
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 3652toLead Limited
 

Recently uploaded (20)

How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | DelhiFULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC Architecture
 
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure serviceWhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
 
Pigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping Elbows
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 Presentation
 
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
 
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial Buildings
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
Maximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxMaximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptx
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path Mount
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
 

Aplicacoes dinamicas Rails com Backbone