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

Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...apidays
 
Corporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxCorporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxRustici Software
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfsudhanshuwaghmare1
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)wesley chun
 
Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024The Digital Insurer
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processorsdebabhi2
 
Navi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Navi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot ModelNavi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Navi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot ModelDeepika Singh
 
Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...
Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...
Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...apidays
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?Igalia
 
MS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsMS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsNanddeep Nachan
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...apidays
 
A Beginners Guide to Building a RAG App Using Open Source Milvus
A Beginners Guide to Building a RAG App Using Open Source MilvusA Beginners Guide to Building a RAG App Using Open Source Milvus
A Beginners Guide to Building a RAG App Using Open Source MilvusZilliz
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Miguel Araújo
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingEdi Saputra
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...apidays
 
ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesrafiqahmad00786416
 
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
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonAnna Loughnan Colquhoun
 

Recently uploaded (20)

Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
Corporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxCorporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptx
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
Navi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Navi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot ModelNavi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Navi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot Model
 
Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...
Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...
Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 
MS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsMS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectors
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 
A Beginners Guide to Building a RAG App Using Open Source Milvus
A Beginners Guide to Building a RAG App Using Open Source MilvusA Beginners Guide to Building a RAG App Using Open Source Milvus
A Beginners Guide to Building a RAG App Using Open Source Milvus
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 
ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challenges
 
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
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 

Aplicacoes dinamicas Rails com Backbone