SlideShare a Scribd company logo
 
Studying Advantages  of  Components A very academic approach...
Why Components are better! ...better than  what ?
Components –  Have Better Toys! ...using awesome Apotomo* widgets  * the only  real  component framework for Rails!
Apotomo? ,[object Object]
Widgets
Statefulness
Events
Happiness
Dashboards.
Dashboards.
Dashboards.
Reuseability.
Dashboards.
Michał looks  thirsty.
Michał looks  thirsty.
The BeerCell ,[object Object]
Code.
Fix views.
Plug into controller.
Drink. dashboard$ script/generate widget Beer display exists  app/cells/ create  app/cells/beer create  app/cells/beer_cell.rb create  app/cells/beer/display.html.erb
The BeerCell ,[object Object]
Code.
Fix views.
Plug into controller.
Drink. class  BeerCell < Apotomo::StatefulWidget def  display render end end render display.html.erb!
The BeerCell ,[object Object]
Code.
Fix views.
Plug into controller.

More Related Content

What's hot

Device deployment
Device deploymentDevice deployment
Device deployment
Angelo van der Sijpt
 
Paras Holidays Europe USA Group Tours 2015 Brochure
Paras Holidays Europe USA Group Tours 2015 BrochureParas Holidays Europe USA Group Tours 2015 Brochure
Paras Holidays Europe USA Group Tours 2015 Brochure
Paras Holidays Pvt Ltd
 
Snp tables documentation
Snp tables documentationSnp tables documentation
Snp tables documentation
Mahesh Birajdar
 
Intro to Rails Give Camp Atlanta
Intro to Rails Give Camp AtlantaIntro to Rails Give Camp Atlanta
Intro to Rails Give Camp Atlanta
Jason Noble
 
Rails by example
Rails by exampleRails by example
Rails by example
Angelo van der Sijpt
 
Story Driven Development With Cucumber
Story Driven Development With CucumberStory Driven Development With Cucumber
Story Driven Development With Cucumber
Sean Cribbs
 
Evolving systems and the link to service orientation
Evolving systems and the link to service orientationEvolving systems and the link to service orientation
Evolving systems and the link to service orientationAngelo van der Sijpt
 
Julius Joseph-SAP BASIS Resume
Julius Joseph-SAP BASIS ResumeJulius Joseph-SAP BASIS Resume
Julius Joseph-SAP BASIS ResumeJulius Joseph
 
Contracts: Tips, Trends & Tactics
Contracts: Tips, Trends & TacticsContracts: Tips, Trends & Tactics
Contracts: Tips, Trends & Tactics
Kristi Casey Sanders, CMP, CMM, DES, HMCC
 
Continuous Integration Saves the Day
Continuous Integration Saves the DayContinuous Integration Saves the Day
Continuous Integration Saves the DayKurt Schrader
 
Perrée &amp; Partners, Collectief Pensioen
Perrée &amp; Partners, Collectief PensioenPerrée &amp; Partners, Collectief Pensioen
Perrée &amp; Partners, Collectief Pensioen
henk0610
 
Introduction à Ruby
Introduction à RubyIntroduction à Ruby
Introduction à Ruby
Microsoft
 
Advanced Views with Erector
Advanced Views with ErectorAdvanced Views with Erector
Advanced Views with Erector
Alex Chaffee
 
Ajroumiya
AjroumiyaAjroumiya
Ajroumiya
qienaja
 
Outside-in Development with Cucumber and Rspec
Outside-in Development with Cucumber and RspecOutside-in Development with Cucumber and Rspec
Outside-in Development with Cucumber and Rspec
Joseph Wilk
 
How to build testable UIs
How to build testable UIsHow to build testable UIs
How to build testable UIs
Shi Ling Tai
 
Django O/R Mapper
Django O/R MapperDjango O/R Mapper
Django O/R Mapper
Ian Lewis
 
jQuery For Developers Stack Overflow Dev Days Toronto
jQuery For Developers Stack Overflow Dev Days TorontojQuery For Developers Stack Overflow Dev Days Toronto
jQuery For Developers Stack Overflow Dev Days Toronto
Ralph Whitbeck
 

What's hot (20)

Device deployment
Device deploymentDevice deployment
Device deployment
 
Paras Holidays Europe USA Group Tours 2015 Brochure
Paras Holidays Europe USA Group Tours 2015 BrochureParas Holidays Europe USA Group Tours 2015 Brochure
Paras Holidays Europe USA Group Tours 2015 Brochure
 
Catalog display
Catalog displayCatalog display
Catalog display
 
Snp tables documentation
Snp tables documentationSnp tables documentation
Snp tables documentation
 
Intro to Rails Give Camp Atlanta
Intro to Rails Give Camp AtlantaIntro to Rails Give Camp Atlanta
Intro to Rails Give Camp Atlanta
 
Rails by example
Rails by exampleRails by example
Rails by example
 
Story Driven Development With Cucumber
Story Driven Development With CucumberStory Driven Development With Cucumber
Story Driven Development With Cucumber
 
Evolving systems and the link to service orientation
Evolving systems and the link to service orientationEvolving systems and the link to service orientation
Evolving systems and the link to service orientation
 
Julius Joseph-SAP BASIS Resume
Julius Joseph-SAP BASIS ResumeJulius Joseph-SAP BASIS Resume
Julius Joseph-SAP BASIS Resume
 
NRI Report
NRI ReportNRI Report
NRI Report
 
Contracts: Tips, Trends & Tactics
Contracts: Tips, Trends & TacticsContracts: Tips, Trends & Tactics
Contracts: Tips, Trends & Tactics
 
Continuous Integration Saves the Day
Continuous Integration Saves the DayContinuous Integration Saves the Day
Continuous Integration Saves the Day
 
Perrée &amp; Partners, Collectief Pensioen
Perrée &amp; Partners, Collectief PensioenPerrée &amp; Partners, Collectief Pensioen
Perrée &amp; Partners, Collectief Pensioen
 
Introduction à Ruby
Introduction à RubyIntroduction à Ruby
Introduction à Ruby
 
Advanced Views with Erector
Advanced Views with ErectorAdvanced Views with Erector
Advanced Views with Erector
 
Ajroumiya
AjroumiyaAjroumiya
Ajroumiya
 
Outside-in Development with Cucumber and Rspec
Outside-in Development with Cucumber and RspecOutside-in Development with Cucumber and Rspec
Outside-in Development with Cucumber and Rspec
 
How to build testable UIs
How to build testable UIsHow to build testable UIs
How to build testable UIs
 
Django O/R Mapper
Django O/R MapperDjango O/R Mapper
Django O/R Mapper
 
jQuery For Developers Stack Overflow Dev Days Toronto
jQuery For Developers Stack Overflow Dev Days TorontojQuery For Developers Stack Overflow Dev Days Toronto
jQuery For Developers Stack Overflow Dev Days Toronto
 

Viewers also liked

Time to Stop Wasting Time
Time to Stop Wasting TimeTime to Stop Wasting Time
Time to Stop Wasting Time
angiebakke
 
Survive the First Day the Easy Way with Google Forms
Survive the First Day the Easy Way with Google FormsSurvive the First Day the Easy Way with Google Forms
Survive the First Day the Easy Way with Google Forms
angiebakke
 
Trevlar Portfolio0809
Trevlar Portfolio0809Trevlar Portfolio0809
Trevlar Portfolio0809
trevlar
 
Pensieri Sul Viaggio In Russia2009 2
Pensieri Sul Viaggio In Russia2009 2Pensieri Sul Viaggio In Russia2009 2
Pensieri Sul Viaggio In Russia2009 2Giusi Piras
 
Getting started
Getting startedGetting started
Getting started
REDA BITAR
 
Dra2 online course slide show
Dra2 online course slide showDra2 online course slide show
Dra2 online course slide showangiebakke
 
CRUD Is Not REST! Hypermedia For Y'All!
CRUD Is Not REST! Hypermedia For Y'All!CRUD Is Not REST! Hypermedia For Y'All!
CRUD Is Not REST! Hypermedia For Y'All!apotonick
 
Tecido osseo e nervoso
Tecido osseo e nervosoTecido osseo e nervoso
Tecido osseo e nervoso
Alexandre Reinas
 

Viewers also liked (10)

Dm Iss
Dm IssDm Iss
Dm Iss
 
Time to Stop Wasting Time
Time to Stop Wasting TimeTime to Stop Wasting Time
Time to Stop Wasting Time
 
Survive the First Day the Easy Way with Google Forms
Survive the First Day the Easy Way with Google FormsSurvive the First Day the Easy Way with Google Forms
Survive the First Day the Easy Way with Google Forms
 
Trevlar Portfolio0809
Trevlar Portfolio0809Trevlar Portfolio0809
Trevlar Portfolio0809
 
Pensieri Sul Viaggio In Russia2009 2
Pensieri Sul Viaggio In Russia2009 2Pensieri Sul Viaggio In Russia2009 2
Pensieri Sul Viaggio In Russia2009 2
 
Windows7sins
Windows7sinsWindows7sins
Windows7sins
 
Getting started
Getting startedGetting started
Getting started
 
Dra2 online course slide show
Dra2 online course slide showDra2 online course slide show
Dra2 online course slide show
 
CRUD Is Not REST! Hypermedia For Y'All!
CRUD Is Not REST! Hypermedia For Y'All!CRUD Is Not REST! Hypermedia For Y'All!
CRUD Is Not REST! Hypermedia For Y'All!
 
Tecido osseo e nervoso
Tecido osseo e nervosoTecido osseo e nervoso
Tecido osseo e nervoso
 

Similar to Have Better Toys

merb.intro
merb.intromerb.intro
merb.intro
pjb3
 
Boston Computing Review - Ruby on Rails
Boston Computing Review - Ruby on RailsBoston Computing Review - Ruby on Rails
Boston Computing Review - Ruby on Rails
John Brunswick
 
OSDC 2009 Rails Turtorial
OSDC 2009 Rails TurtorialOSDC 2009 Rails Turtorial
OSDC 2009 Rails TurtorialYi-Ting Cheng
 
What's new in Rails 2?
What's new in Rails 2?What's new in Rails 2?
What's new in Rails 2?
brynary
 
Writing Software not Code with Cucumber
Writing Software not Code with CucumberWriting Software not Code with Cucumber
Writing Software not Code with Cucumber
Ben Mabey
 
Page Caching Resurrected
Page Caching ResurrectedPage Caching Resurrected
Page Caching Resurrected
Ben Scofield
 
EPiServer Web Parts
EPiServer Web PartsEPiServer Web Parts
EPiServer Web Parts
EPiServer Meetup Oslo
 
Plone Interactivity
Plone InteractivityPlone Interactivity
Plone Interactivity
Eric Steele
 
Rails 3 And The Real Secret To High Productivity Presentation
Rails 3 And The Real Secret To High Productivity PresentationRails 3 And The Real Secret To High Productivity Presentation
Rails 3 And The Real Secret To High Productivity Presentationrailsconf
 
Building Web Interface On Rails
Building Web Interface On RailsBuilding Web Interface On Rails
Building Web Interface On RailsWen-Tien Chang
 
Widgets: Making Your Site Great and Letting Others Help - WordCamp Victoria
Widgets: Making Your Site Great and Letting Others Help - WordCamp VictoriaWidgets: Making Your Site Great and Letting Others Help - WordCamp Victoria
Widgets: Making Your Site Great and Letting Others Help - WordCamp Victoria
Jeff Richards
 
HTML5 Overview
HTML5 OverviewHTML5 Overview
HTML5 Overview
reybango
 
Working Effectively With Legacy Code
Working Effectively With Legacy CodeWorking Effectively With Legacy Code
Working Effectively With Legacy Code
scidept
 
Rails Antipatterns | Open Session with Chad Pytel
Rails Antipatterns | Open Session with Chad Pytel Rails Antipatterns | Open Session with Chad Pytel
Rails Antipatterns | Open Session with Chad Pytel
Engine Yard
 
Hacking Movable Type Training - Day 2
Hacking Movable Type Training - Day 2Hacking Movable Type Training - Day 2
Hacking Movable Type Training - Day 2Byrne Reese
 
Introduction to Ruby on Rails
Introduction to Ruby on RailsIntroduction to Ruby on Rails
Introduction to Ruby on Rails
Diki Andeas
 
Wai Aria - An Intro
Wai Aria - An IntroWai Aria - An Intro
Wai Aria - An Intro
Matt Machell
 
Merb Pluming - The Router
Merb Pluming - The RouterMerb Pluming - The Router
Merb Pluming - The Routercarllerche
 
Rich faces
Rich facesRich faces
Rich faces
BG Java EE Course
 

Similar to Have Better Toys (20)

merb.intro
merb.intromerb.intro
merb.intro
 
Boston Computing Review - Ruby on Rails
Boston Computing Review - Ruby on RailsBoston Computing Review - Ruby on Rails
Boston Computing Review - Ruby on Rails
 
OSDC 2009 Rails Turtorial
OSDC 2009 Rails TurtorialOSDC 2009 Rails Turtorial
OSDC 2009 Rails Turtorial
 
What's new in Rails 2?
What's new in Rails 2?What's new in Rails 2?
What's new in Rails 2?
 
Writing Software not Code with Cucumber
Writing Software not Code with CucumberWriting Software not Code with Cucumber
Writing Software not Code with Cucumber
 
Page Caching Resurrected
Page Caching ResurrectedPage Caching Resurrected
Page Caching Resurrected
 
EPiServer Web Parts
EPiServer Web PartsEPiServer Web Parts
EPiServer Web Parts
 
Plone Interactivity
Plone InteractivityPlone Interactivity
Plone Interactivity
 
Rails 3 And The Real Secret To High Productivity Presentation
Rails 3 And The Real Secret To High Productivity PresentationRails 3 And The Real Secret To High Productivity Presentation
Rails 3 And The Real Secret To High Productivity Presentation
 
Building Web Interface On Rails
Building Web Interface On RailsBuilding Web Interface On Rails
Building Web Interface On Rails
 
Widgets: Making Your Site Great and Letting Others Help - WordCamp Victoria
Widgets: Making Your Site Great and Letting Others Help - WordCamp VictoriaWidgets: Making Your Site Great and Letting Others Help - WordCamp Victoria
Widgets: Making Your Site Great and Letting Others Help - WordCamp Victoria
 
Front End on Rails
Front End on RailsFront End on Rails
Front End on Rails
 
HTML5 Overview
HTML5 OverviewHTML5 Overview
HTML5 Overview
 
Working Effectively With Legacy Code
Working Effectively With Legacy CodeWorking Effectively With Legacy Code
Working Effectively With Legacy Code
 
Rails Antipatterns | Open Session with Chad Pytel
Rails Antipatterns | Open Session with Chad Pytel Rails Antipatterns | Open Session with Chad Pytel
Rails Antipatterns | Open Session with Chad Pytel
 
Hacking Movable Type Training - Day 2
Hacking Movable Type Training - Day 2Hacking Movable Type Training - Day 2
Hacking Movable Type Training - Day 2
 
Introduction to Ruby on Rails
Introduction to Ruby on RailsIntroduction to Ruby on Rails
Introduction to Ruby on Rails
 
Wai Aria - An Intro
Wai Aria - An IntroWai Aria - An Intro
Wai Aria - An Intro
 
Merb Pluming - The Router
Merb Pluming - The RouterMerb Pluming - The Router
Merb Pluming - The Router
 
Rich faces
Rich facesRich faces
Rich faces
 

Recently uploaded

FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdfFIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance
 
Monitoring Java Application Security with JDK Tools and JFR Events
Monitoring Java Application Security with JDK Tools and JFR EventsMonitoring Java Application Security with JDK Tools and JFR Events
Monitoring Java Application Security with JDK Tools and JFR Events
Ana-Maria Mihalceanu
 
Essentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FMEEssentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FME
Safe Software
 
DevOps and Testing slides at DASA Connect
DevOps and Testing slides at DASA ConnectDevOps and Testing slides at DASA Connect
DevOps and Testing slides at DASA Connect
Kari Kakkonen
 
Introduction to CHERI technology - Cybersecurity
Introduction to CHERI technology - CybersecurityIntroduction to CHERI technology - Cybersecurity
Introduction to CHERI technology - Cybersecurity
mikeeftimakis1
 
A tale of scale & speed: How the US Navy is enabling software delivery from l...
A tale of scale & speed: How the US Navy is enabling software delivery from l...A tale of scale & speed: How the US Navy is enabling software delivery from l...
A tale of scale & speed: How the US Navy is enabling software delivery from l...
sonjaschweigert1
 
UiPath Test Automation using UiPath Test Suite series, part 5
UiPath Test Automation using UiPath Test Suite series, part 5UiPath Test Automation using UiPath Test Suite series, part 5
UiPath Test Automation using UiPath Test Suite series, part 5
DianaGray10
 
Large Language Model (LLM) and it’s Geospatial Applications
Large Language Model (LLM) and it’s Geospatial ApplicationsLarge Language Model (LLM) and it’s Geospatial Applications
Large Language Model (LLM) and it’s Geospatial Applications
Rohit Gautam
 
Unlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdf
Unlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdfUnlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdf
Unlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdf
Malak Abu Hammad
 
Artificial Intelligence for XMLDevelopment
Artificial Intelligence for XMLDevelopmentArtificial Intelligence for XMLDevelopment
Artificial Intelligence for XMLDevelopment
Octavian Nadolu
 
20 Comprehensive Checklist of Designing and Developing a Website
20 Comprehensive Checklist of Designing and Developing a Website20 Comprehensive Checklist of Designing and Developing a Website
20 Comprehensive Checklist of Designing and Developing a Website
Pixlogix Infotech
 
Full-RAG: A modern architecture for hyper-personalization
Full-RAG: A modern architecture for hyper-personalizationFull-RAG: A modern architecture for hyper-personalization
Full-RAG: A modern architecture for hyper-personalization
Zilliz
 
zkStudyClub - Reef: Fast Succinct Non-Interactive Zero-Knowledge Regex Proofs
zkStudyClub - Reef: Fast Succinct Non-Interactive Zero-Knowledge Regex ProofszkStudyClub - Reef: Fast Succinct Non-Interactive Zero-Knowledge Regex Proofs
zkStudyClub - Reef: Fast Succinct Non-Interactive Zero-Knowledge Regex Proofs
Alex Pruden
 
GraphSummit Singapore | The Art of the Possible with Graph - Q2 2024
GraphSummit Singapore | The Art of the  Possible with Graph - Q2 2024GraphSummit Singapore | The Art of the  Possible with Graph - Q2 2024
GraphSummit Singapore | The Art of the Possible with Graph - Q2 2024
Neo4j
 
Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !
KatiaHIMEUR1
 
National Security Agency - NSA mobile device best practices
National Security Agency - NSA mobile device best practicesNational Security Agency - NSA mobile device best practices
National Security Agency - NSA mobile device best practices
Quotidiano Piemontese
 
Removing Uninteresting Bytes in Software Fuzzing
Removing Uninteresting Bytes in Software FuzzingRemoving Uninteresting Bytes in Software Fuzzing
Removing Uninteresting Bytes in Software Fuzzing
Aftab Hussain
 
Video Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the FutureVideo Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the Future
Alpen-Adria-Universität
 
Epistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI supportEpistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI support
Alan Dix
 
UiPath Test Automation using UiPath Test Suite series, part 6
UiPath Test Automation using UiPath Test Suite series, part 6UiPath Test Automation using UiPath Test Suite series, part 6
UiPath Test Automation using UiPath Test Suite series, part 6
DianaGray10
 

Recently uploaded (20)

FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdfFIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
 
Monitoring Java Application Security with JDK Tools and JFR Events
Monitoring Java Application Security with JDK Tools and JFR EventsMonitoring Java Application Security with JDK Tools and JFR Events
Monitoring Java Application Security with JDK Tools and JFR Events
 
Essentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FMEEssentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FME
 
DevOps and Testing slides at DASA Connect
DevOps and Testing slides at DASA ConnectDevOps and Testing slides at DASA Connect
DevOps and Testing slides at DASA Connect
 
Introduction to CHERI technology - Cybersecurity
Introduction to CHERI technology - CybersecurityIntroduction to CHERI technology - Cybersecurity
Introduction to CHERI technology - Cybersecurity
 
A tale of scale & speed: How the US Navy is enabling software delivery from l...
A tale of scale & speed: How the US Navy is enabling software delivery from l...A tale of scale & speed: How the US Navy is enabling software delivery from l...
A tale of scale & speed: How the US Navy is enabling software delivery from l...
 
UiPath Test Automation using UiPath Test Suite series, part 5
UiPath Test Automation using UiPath Test Suite series, part 5UiPath Test Automation using UiPath Test Suite series, part 5
UiPath Test Automation using UiPath Test Suite series, part 5
 
Large Language Model (LLM) and it’s Geospatial Applications
Large Language Model (LLM) and it’s Geospatial ApplicationsLarge Language Model (LLM) and it’s Geospatial Applications
Large Language Model (LLM) and it’s Geospatial Applications
 
Unlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdf
Unlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdfUnlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdf
Unlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdf
 
Artificial Intelligence for XMLDevelopment
Artificial Intelligence for XMLDevelopmentArtificial Intelligence for XMLDevelopment
Artificial Intelligence for XMLDevelopment
 
20 Comprehensive Checklist of Designing and Developing a Website
20 Comprehensive Checklist of Designing and Developing a Website20 Comprehensive Checklist of Designing and Developing a Website
20 Comprehensive Checklist of Designing and Developing a Website
 
Full-RAG: A modern architecture for hyper-personalization
Full-RAG: A modern architecture for hyper-personalizationFull-RAG: A modern architecture for hyper-personalization
Full-RAG: A modern architecture for hyper-personalization
 
zkStudyClub - Reef: Fast Succinct Non-Interactive Zero-Knowledge Regex Proofs
zkStudyClub - Reef: Fast Succinct Non-Interactive Zero-Knowledge Regex ProofszkStudyClub - Reef: Fast Succinct Non-Interactive Zero-Knowledge Regex Proofs
zkStudyClub - Reef: Fast Succinct Non-Interactive Zero-Knowledge Regex Proofs
 
GraphSummit Singapore | The Art of the Possible with Graph - Q2 2024
GraphSummit Singapore | The Art of the  Possible with Graph - Q2 2024GraphSummit Singapore | The Art of the  Possible with Graph - Q2 2024
GraphSummit Singapore | The Art of the Possible with Graph - Q2 2024
 
Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !
 
National Security Agency - NSA mobile device best practices
National Security Agency - NSA mobile device best practicesNational Security Agency - NSA mobile device best practices
National Security Agency - NSA mobile device best practices
 
Removing Uninteresting Bytes in Software Fuzzing
Removing Uninteresting Bytes in Software FuzzingRemoving Uninteresting Bytes in Software Fuzzing
Removing Uninteresting Bytes in Software Fuzzing
 
Video Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the FutureVideo Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the Future
 
Epistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI supportEpistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI support
 
UiPath Test Automation using UiPath Test Suite series, part 6
UiPath Test Automation using UiPath Test Suite series, part 6UiPath Test Automation using UiPath Test Suite series, part 6
UiPath Test Automation using UiPath Test Suite series, part 6
 

Have Better Toys

  • 1.  
  • 2. Studying Advantages of Components A very academic approach...
  • 3. Why Components are better! ...better than what ?
  • 4. Components – Have Better Toys! ...using awesome Apotomo* widgets * the only real component framework for Rails!
  • 5.
  • 15. Michał looks thirsty.
  • 16. Michał looks thirsty.
  • 17.
  • 18. Code.
  • 21. Drink. dashboard$ script/generate widget Beer display exists app/cells/ create app/cells/beer create app/cells/beer_cell.rb create app/cells/beer/display.html.erb
  • 22.
  • 23. Code.
  • 26. Drink. class BeerCell < Apotomo::StatefulWidget def display render end end render display.html.erb!
  • 27.
  • 28. Code.
  • 31. Drink. <%= image_tag 'beer.png' , :id => 'beer' %> <%= draggable_element 'beer' %> <%= image_tag 'beer.png' , :id => 'beer' %> <%= draggable_element 'beer' %> <%= image_tag 'beer.png' , :id => 'beer' %> <%= draggable_element 'beer' %> <%= image_tag 'beer.png' , :id => 'beer' %> <%= draggable_element 'beer' %> <%= image_tag 'beer.png' , :id => 'beer' %> <%= draggable_element 'beer' %> I'm ERB .
  • 32.
  • 33. Code.
  • 36. Drink. class ExamplesController < ApplicationController def drink use_widgets do |root| root << cell(:beer, :display, 'a_beer') end @content = render_widget 'a_beer' render end class ExamplesController < ApplicationController def drink use_widgets do |root| root << cell(:beer, :display, 'a_beer') end @content = render_widget 'a_beer' render end class ExamplesController < ApplicationController def drink use_widgets do |root| root << cell (:beer, :display, 'a_beer') end @content = render_widget 'a_beer' render end class ExamplesController < ApplicationController def drink use_widgets do |root| root << cell (:beer, :display, 'a_beer') end @content = render_widget 'a_beer' render end I'm a Rails controller .
  • 37.
  • 38. Code.
  • 42. Wow!
  • 43.
  • 44. Render widgets. I'm a Rails controller with 6 widgets.
  • 45.
  • 46. Render widgets. class DesktopController < ApplicationController def index use_widgets do |root| root << cell(:weather, :forecast, 'my_weather') root << cell(:michal, :sober, 'drinker') root << cell(:todo, :add_item, 'my_form') root << cell(:todo, :count, 'my_counter') root << cell(:beer, :display, 'a_beer') class DesktopController < ApplicationController def index use_widgets do |root| root << cell(:weather, :forecast, 'my_weather') root << cell(: michal , :sober, 'drinker') root << cell(:todo, :add_item, 'my_form') root << cell(:todo, :count, 'my_counter') root << cell(:beer, :display, 'a_beer') class DesktopController < ApplicationController def index use_widgets do |root| root << cell(:weather, :forecast, 'my_weather') root << cell(: michal , : sober , 'drinker') root << cell(:todo, :add_item, 'my_form') root << cell(:todo, :count, 'my_counter') root << cell(:beer, :display, 'a_beer') class DesktopController < ApplicationController def index use_widgets do |root| root << cell(:weather, :forecast, 'my_weather') root << cell(: michal , : sober , ' drinker ') root << cell(:todo, :add_item, 'my_form') root << cell(:todo, :count, 'my_counter') root << cell(:beer, :display, 'a_beer') class DesktopController < ApplicationController def index use_widgets do |root| root << cell(:weather, :forecast, 'my_weather') root << cell(: michal , : sober , ' drinker ') root << cell(:todo, :add_item, 'my_form') root << cell(:todo, :count, 'my_counter') root << cell(:beer, :display, 'a_beer') end @slot_2 = render_widget ('drinker')
  • 47. Michał looks thirsty.
  • 48.
  • 51. Implement drinking state class MichalCell < Apotomo::StatefulWidget def sober @beers = 0 render end class MichalCell < Apotomo::StatefulWidget def sober @beers = 0 render end class MichalCell < Apotomo::StatefulWidget def sober @beers = 0 render end class MichalCell < Apotomo::StatefulWidget def sober @beers = 0 render end class MichalCell < Apotomo::StatefulWidget def sober @beers = 0 render end render sober.html.erb !
  • 52.
  • 55. Implement drinking state <%= image_tag 'michal-sober.jpg', :id => :michal %> <%= drop_receiving_element :michal, :url => trigger_event (:beerDropped) %> <%= image_tag 'michal-sober.jpg', :id => :michal %> <%= drop_receiving_element :michal, :url => trigger_event (:beerDropped) %> <%= image_tag 'michal-sober.jpg', :id => :michal %> <%= drop_receiving_element :michal, :url => trigger_event (:beerDropped) %> I'm sober.html.erb !
  • 56.
  • 59. Implement drinking state beerDropped !
  • 60.
  • 63. Implement drinking state class MichalCell < Apotomo::StatefulWidget def sober @beers = 0 render end class MichalCell < Apotomo::StatefulWidget def sober respond_to_event @beers = 0 render end class MichalCell < Apotomo::StatefulWidget def sober @beers = 0 render end class MichalCell < Apotomo::StatefulWidget def sober respond_to_event :beerDropped, :with => :drinking @beers = 0 render end
  • 64.
  • 67. Implement drinking state def sober respond_to_event :beerDropped, :with => :drinking @beers = 0 render end def drinking @beers += 1 render end def sober respond_to_event :beerDropped, :with => :drinking @beers = 0 render end def drinking @beers += 1 render end def sober respond_to_event :beerDropped, :with => :drinking @beers = 0 render end def drinking @beers += 1 render end def sober respond_to_event :beerDropped, :with => :drinking @beers = 0 render end def drinking @beers += 1 render end def sober respond_to_event :beerDropped, :with => :drinking @beers = 0 render end def drinking @beers += 1 render end I'm stateful ! Render drinking.html.erb !
  • 68.
  • 71. Implement drinking state <%= image_tag &quot;michal-having-#{@beers}-beers.jpg&quot;, :id => :michal %> <%= drop_receiving_element :michal, :url => trigger_event(:beerDropped) %> <%= image_tag &quot;michal-having-#{@beers}-beers.jpg&quot;, :id => :michal %> <%= drop_receiving_element :michal, :url => trigger_event(:beerDropped) %> <%= image_tag &quot;michal-having-#{ @beers }-beers.jpg&quot;, :id => :michal %> <%= drop_receiving_element :michal, :url => trigger_event(:beerDropped) %> I'm drinking.html.erb ! Load michal-having-1-beers.jpg! Load michal-having-2-beers.jpg! Load michal-having-3-beers.jpg! Load michal-having-4-beers.jpg!
  • 72. Wow!
  • 73.
  • 79. ... def drinking @beers += 1 respond_to_event
  • 80.