SlideShare a Scribd company logo
Model of the Colossus
Mauro quem...
RSpec Best
Friends
maurogeorge.com.br
Seu model, um grande colosso
Seu model, um grande colosso
Rails 15 minutes blog
MVC
Rails way
Aplicações grandes
37 Signals stack
ERB
MySQL
MiniTest
Fat Models, Skinny Controllers

Prime stack
Haml
PostgreSQL
Rspec/Cucumber
Skinny models, controllers, and a service layer
AR quebra o SRP
Alto acoplamento
Callback
Observer
Finders
Falta de coesão
Persiste dados
Envia e-mail
Acessa Api externas
Anti-pattern
Model gerando conteúdo para a view
Anti-pattern: Model gerando conteudo para a view
app/models/user.rb
class User < ActiveRecord::Base

Alto acoplamento

# ...
def info
%Q{
<ul>
<li>#{name}</li>
<li>#{email}</li>
</ul>
}
end
end

Falta de coesão
Solução: Decorator
app/decorators/user_decorator.rb
require 'delegate'
class UserDecorator < SimpleDelegator
def info
%Q{
<ul>
<li>#{name}</li>
<li>#{email}</li>
</ul>
}
end
end

# Exemplo
user = User.find(1)
user_decorator = UserDecorator.new(user)
user_decorator.info
user_decorator.name

Baixo acoplamento
Alta coesão
Anti-pattern: Model gerando conteudo para a view
app/models/user.rb
class User < ActiveRecord::Base
# ...
def wrote_post?(post)
if post.user_id == id
"<p>O post #{post.title} foi escrito por #{name}</p>"
end
end
end

Alto acoplamento
Falta de coesão
Método de Post
ou User
Solução: Presenter
app/presenters/writter_post_presenter.rb
class WritterPostPresenter
def initialize(user, post)
@user, @post = user, post
end

Baixo acoplamento
Alta coesão

def post_is_wrote_by_writter?
if wrote_post?
"<p>O post #{post.title} foi escrito por #{user.name}</p>"
end
end

private
attr_reader :user, :post
# Exemplo
def wrote_post?
user == post.user user = User.find(1)
post = Post.find(1)
end
writter_post_presenter = WritterPostPresenter.new(user, post)
end
writter_post_presenter.post_is_wrote_by_writter?
Presenters, decorators, exhibit, View Objects e
helpers???
Helpers
Procedurais
Decorators
Para uma única entidade
Presenters
Para multiplas entidades
Anti-pattern
Model Callbacks
Anti-pattern: Model Callbacks
app/models/post.rb
class Post < ActiveRecord::Base

Alto acoplamento

# ...
after_save :notify_users
# ...
private
def notify_users
NotifyMailer.delay.notify(self)
end
end

Falta de coesão
Testes lentos
Solução: PORO model
app/models/post_creator.rb
class PostCreator
def initialize(post)
@post = post
end
def save
post.save && notify_users
end
private
attr_reader :post
def notify_users
NotifyMailer.delay.notify(post)
end
end

Baixo acoplamento
Alta coesão
Testes rápidos
Solução: PORO model
app/controllers/posts_controller.rb
class PostsController < ApplicationController
# ..
def create
@post = current_user.posts.new(post_params)
if @post.save
PostCreator.new(@post).save
redirect_to posts_path, notice: "Post criado com sucesso!"
else
render 'new'
end
end
end
Anti-pattern
Model salvando N models
Anti-pattern: Model salvando N models
app/models/user.rb
class User < ActiveRecord::Base

Alto acoplamento

# ...
accepts_nested_attributes_for :posts
end

Falta de coesão
Solução: Form Object
app/models/app/models/user_with_post.rb
class UserWithPost
include ActiveModel::Model
attr_accessor :user_name, :user_email, :post_title, :post_content
validates :user_name, :user_email, :post_title, :post_content, presence: true
def save
return false unless valid?
user = User.create(name: user_name, email: user_email)
user.posts.create(title: post_title, content: post_content)
true
end

Baixo acoplamento
Alta coesão

end
# Exemplo
params = { user_name: "Mauro", user_email: "maurogot@gmail.com",
post_title: "Post 1", post_content: "Content"}
user_with_post = UserWithPost.new(params)
user_with_post.save
Anti-pattern
Scopes para um único problema
Anti-pattern: Scopes para um único problema
app/models/post.rb
class Post < ActiveRecord::Base
# ...
scope
scope
scope
scope
# ...
end

:from, ->(user) { where(user_id: user.id) }
:recents, -> { order(created_at: :asc) }
:top_likeds, -> { order(like_count: :asc) }
:top_from, ->(user) { from(user).recents.top_likeds }

Falta de coesão
Solução: Query object
app/queries/top_post_query.rb
class TopPostQuery

Alta coesão

def initialize(relation = Post.all)
@relation = relation.extending(Scopes)
end
def top_from(user)
@relation.from(user).recents.top_likeds
end
module Scopes
def from(user)
where(user_id: user.id)
end
def recents
order(created_at: :asc)
end
def top_likeds
order(like_count: :asc)
end
# ...

# Exemplo
user = User.find(1)
top_post_query = TopPostQuery.new
top_post_query.top_from(user)
Anti-pattern
ActiveSupport::Concerns
Anti-pattern: ActiveSupport::Concerns
app/models/concerns/likeable.rb
module Likeable
extend ActiveSupport::Concern
def liked_by(user)
return false if user_already_liked?(user)
up_one_like
add_user_as_voted(user)
end
def unliked_by(user)
return false unless user_already_liked?(user)
down_one_like
remove_user_as_voted(user)
end
private
attr_reader :likeable, :user
def up_one_like
# ...
end
# ...

Alto acoplamento
Falta de coesão
Anti-pattern: ActiveSupport::Concerns
app/models/post.rb
class Post < ActiveRecord::Base
include Likeable
# ...
end

Esconde
responsabilidade
Solução: Service
app/services/like_manager.rb
class LikeManager
def initialize(likeable, user)
@likeable, @user = likeable, user
end
def like
return false if user_already_liked?
up_one_like
add_user_as_voted
end

Baixo acoplamento
Alta coesão
Única
responsabilidade
Duck Typing

def unlike
return false unless user_already_liked?
down_one_like
remove_user_as_voted
end
# Exemplo
user = User.find(1)
private
post = Post.find(1)
like_manager = LikeManager.new(post, user)
attr_reader :likeable, :user
like_manager.like
like_manager.unlike
def up_one_like
# ...
Bad Smells
Meu Model está virando um Colosso?
Bad Smell: N métodos com nome de outra entidade
app/models/post.rb
class Post < ActiveRecord::Base
# ...
def popular_comments
# ...
end
def most_viewed_comment
# ...
end
def most_replied_comment
# ...
end
end
Bad Smell: N métodos recebendo o mesmo
paramêtro
app/models/post.rb
class Post < ActiveRecord::Base
# ...
def self.most_popular_from(user)
self.top_posts_from(user)
self.more_social_media_repercussion_from(user)
# ...
end
private
def self.top_posts_from(user)
# ...
end
def self.more_social_media_repercussion_from(user)
# ...
end
end
Bad Smell: N métodos privados que são usados em
apenas um método
app/models/post.rb
class Post < ActiveRecord::Base
# ...
def self.most_popular
self.most_commented
self.more_social_media_repercussion
# ...
end
private
def self.most_commented
# ...
end
def self.more_social_media_repercussion
# ...
end
end
Bad Smell

Classe gigante
(Provavelmente uma God Class)
Prefira N classes pequenas
Futuro

DCI
Funcional
Conclusão

Crie classes
Quebre Model e Classes grandes em classes menores
Divida responsabilidades
Classes que façam apenas uma coisa bem feita
Obrigado
maurogeorge.com.br
Referências
http://rubyweekly.com/archive/124.html
http://rubyweekly.com/archive/126.html
http://robots.thoughtbot.com/post/14825364877/evaluating-alternative-decoratorimplementations-in
http://mikepackdev.com/blog_posts/31-exhibit-vs-presenter
samuelmullen.com/2013/05/the-problem-with-rails-callbacks
http://blog.codeclimate.com/blog/2012/10/17/7-ways-to-decompose-fat-activerecordmodels/
http://rubysource.com/ddd-for-rails-developers-part-1-layered-architecture/
http://blog.plataformatec.com.br/2012/03/barebone-models-to-use-with-actionpackin-rails-4-0/
http://www.youtube.com/watch?v=DC-pQPq0acs
http://objectsonrails.com/

More Related Content

Viewers also liked

Testes automatizados o time e o cliente saem ganhando! @ Agile Vale 2014
Testes automatizados o time e o cliente saem ganhando! @ Agile Vale 2014Testes automatizados o time e o cliente saem ganhando! @ Agile Vale 2014
Testes automatizados o time e o cliente saem ganhando! @ Agile Vale 2014
Mauro George
 
Minicurso GIT PET Computação
Minicurso GIT PET ComputaçãoMinicurso GIT PET Computação
Minicurso GIT PET Computação
Bruno Orlandi
 
RSpec Best Friends @ Rupy Natal 2014
RSpec Best Friends @ Rupy Natal 2014RSpec Best Friends @ Rupy Natal 2014
RSpec Best Friends @ Rupy Natal 2014
Mauro George
 
Minicurso Git Semcomp Beta
Minicurso Git   Semcomp BetaMinicurso Git   Semcomp Beta
Minicurso Git Semcomp BetaBruno Orlandi
 
Git em ambiente Subversion
Git em ambiente SubversionGit em ambiente Subversion
Git em ambiente Subversion
Willian Fernandes
 
A startup de 1500 funcionários
A startup de 1500 funcionáriosA startup de 1500 funcionários
A startup de 1500 funcionários
Luis Fabiano Figaro, CAPM, COBIT, ITIL
 
Git para iniciantes v1.3.0 @ PHP Conference Brasil 2012
Git para iniciantes v1.3.0 @ PHP Conference Brasil 2012Git para iniciantes v1.3.0 @ PHP Conference Brasil 2012
Git para iniciantes v1.3.0 @ PHP Conference Brasil 2012
Mauro George
 
RSpec Best Friends @ TDC São Paulo 2014
RSpec Best Friends @ TDC São Paulo 2014RSpec Best Friends @ TDC São Paulo 2014
RSpec Best Friends @ TDC São Paulo 2014
Mauro George
 
TDC2016POA | Trilha Empreendedorismo - Faça mais, reclame menos.
TDC2016POA | Trilha Empreendedorismo - Faça mais, reclame menos.TDC2016POA | Trilha Empreendedorismo - Faça mais, reclame menos.
TDC2016POA | Trilha Empreendedorismo - Faça mais, reclame menos.
tdc-globalcode
 
TDC2016POA | Trilha Ruby - Testes de contrato em um contexto de services e mi...
TDC2016POA | Trilha Ruby - Testes de contrato em um contexto de services e mi...TDC2016POA | Trilha Ruby - Testes de contrato em um contexto de services e mi...
TDC2016POA | Trilha Ruby - Testes de contrato em um contexto de services e mi...
tdc-globalcode
 
Minicurso Git
Minicurso GitMinicurso Git
Minicurso Git
Bruno Orlandi
 
Mini-curso de git -- SECOMP-UFS
Mini-curso de git -- SECOMP-UFSMini-curso de git -- SECOMP-UFS
Mini-curso de git -- SECOMP-UFSFelipe Carvalho
 
Aula 4 - Curso Git e Github - Webschool
Aula 4 - Curso Git e Github - WebschoolAula 4 - Curso Git e Github - Webschool
Aula 4 - Curso Git e Github - Webschool
Bruno Orlandi
 
Git e contibuição com projetos open source usando GitHub
Git e contibuição com projetos open source usando GitHubGit e contibuição com projetos open source usando GitHub
Git e contibuição com projetos open source usando GitHub
Bruno Orlandi
 
Aula 6 - Curso Git e Github - Webschool
Aula 6 - Curso Git e Github - WebschoolAula 6 - Curso Git e Github - Webschool
Aula 6 - Curso Git e Github - Webschool
Bruno Orlandi
 
Aula 5 - Curso Git e Github - Webschool
Aula 5 - Curso Git e Github - WebschoolAula 5 - Curso Git e Github - Webschool
Aula 5 - Curso Git e Github - Webschool
Bruno Orlandi
 
Use o git e perca o medo de errar
Use o git e perca o medo de errarUse o git e perca o medo de errar
Use o git e perca o medo de errar
Bruno Calheira
 
Aula 2 - Curso Git e Github - Webschool
Aula 2 - Curso Git e Github - WebschoolAula 2 - Curso Git e Github - Webschool
Aula 2 - Curso Git e Github - Webschool
Bruno Orlandi
 
RSpec Best Friends @ TDC Florianópolis 2014
RSpec Best Friends @ TDC Florianópolis 2014RSpec Best Friends @ TDC Florianópolis 2014
RSpec Best Friends @ TDC Florianópolis 2014
Mauro George
 

Viewers also liked (20)

Testes automatizados o time e o cliente saem ganhando! @ Agile Vale 2014
Testes automatizados o time e o cliente saem ganhando! @ Agile Vale 2014Testes automatizados o time e o cliente saem ganhando! @ Agile Vale 2014
Testes automatizados o time e o cliente saem ganhando! @ Agile Vale 2014
 
Minicurso GIT PET Computação
Minicurso GIT PET ComputaçãoMinicurso GIT PET Computação
Minicurso GIT PET Computação
 
Posix
PosixPosix
Posix
 
RSpec Best Friends @ Rupy Natal 2014
RSpec Best Friends @ Rupy Natal 2014RSpec Best Friends @ Rupy Natal 2014
RSpec Best Friends @ Rupy Natal 2014
 
Minicurso Git Semcomp Beta
Minicurso Git   Semcomp BetaMinicurso Git   Semcomp Beta
Minicurso Git Semcomp Beta
 
Git em ambiente Subversion
Git em ambiente SubversionGit em ambiente Subversion
Git em ambiente Subversion
 
A startup de 1500 funcionários
A startup de 1500 funcionáriosA startup de 1500 funcionários
A startup de 1500 funcionários
 
Git para iniciantes v1.3.0 @ PHP Conference Brasil 2012
Git para iniciantes v1.3.0 @ PHP Conference Brasil 2012Git para iniciantes v1.3.0 @ PHP Conference Brasil 2012
Git para iniciantes v1.3.0 @ PHP Conference Brasil 2012
 
RSpec Best Friends @ TDC São Paulo 2014
RSpec Best Friends @ TDC São Paulo 2014RSpec Best Friends @ TDC São Paulo 2014
RSpec Best Friends @ TDC São Paulo 2014
 
TDC2016POA | Trilha Empreendedorismo - Faça mais, reclame menos.
TDC2016POA | Trilha Empreendedorismo - Faça mais, reclame menos.TDC2016POA | Trilha Empreendedorismo - Faça mais, reclame menos.
TDC2016POA | Trilha Empreendedorismo - Faça mais, reclame menos.
 
TDC2016POA | Trilha Ruby - Testes de contrato em um contexto de services e mi...
TDC2016POA | Trilha Ruby - Testes de contrato em um contexto de services e mi...TDC2016POA | Trilha Ruby - Testes de contrato em um contexto de services e mi...
TDC2016POA | Trilha Ruby - Testes de contrato em um contexto de services e mi...
 
Minicurso Git
Minicurso GitMinicurso Git
Minicurso Git
 
Mini-curso de git -- SECOMP-UFS
Mini-curso de git -- SECOMP-UFSMini-curso de git -- SECOMP-UFS
Mini-curso de git -- SECOMP-UFS
 
Aula 4 - Curso Git e Github - Webschool
Aula 4 - Curso Git e Github - WebschoolAula 4 - Curso Git e Github - Webschool
Aula 4 - Curso Git e Github - Webschool
 
Git e contibuição com projetos open source usando GitHub
Git e contibuição com projetos open source usando GitHubGit e contibuição com projetos open source usando GitHub
Git e contibuição com projetos open source usando GitHub
 
Aula 6 - Curso Git e Github - Webschool
Aula 6 - Curso Git e Github - WebschoolAula 6 - Curso Git e Github - Webschool
Aula 6 - Curso Git e Github - Webschool
 
Aula 5 - Curso Git e Github - Webschool
Aula 5 - Curso Git e Github - WebschoolAula 5 - Curso Git e Github - Webschool
Aula 5 - Curso Git e Github - Webschool
 
Use o git e perca o medo de errar
Use o git e perca o medo de errarUse o git e perca o medo de errar
Use o git e perca o medo de errar
 
Aula 2 - Curso Git e Github - Webschool
Aula 2 - Curso Git e Github - WebschoolAula 2 - Curso Git e Github - Webschool
Aula 2 - Curso Git e Github - Webschool
 
RSpec Best Friends @ TDC Florianópolis 2014
RSpec Best Friends @ TDC Florianópolis 2014RSpec Best Friends @ TDC Florianópolis 2014
RSpec Best Friends @ TDC Florianópolis 2014
 

Similar to Model of the colossus @ Rupy Brazil 2013

Ruby/Rails
Ruby/RailsRuby/Rails
Ruby/Rails
rstankov
 
Rails3 changesets
Rails3 changesetsRails3 changesets
Rails3 changesets
Wen-Tien Chang
 
Rspec API Documentation
Rspec API DocumentationRspec API Documentation
Rspec API Documentation
SmartLogic
 
One does not simply "Upgrade to Rails 3"
One does not simply "Upgrade to Rails 3"One does not simply "Upgrade to Rails 3"
One does not simply "Upgrade to Rails 3"
testflyjets
 
Ams adapters
Ams adaptersAms adapters
Ams adapters
Bruno Alló Bacarini
 
MongoDB & Mongoid with Rails
MongoDB & Mongoid with RailsMongoDB & Mongoid with Rails
MongoDB & Mongoid with Rails
Justin Smestad
 
RubyOnRails-Cheatsheet-BlaineKendall
RubyOnRails-Cheatsheet-BlaineKendallRubyOnRails-Cheatsheet-BlaineKendall
RubyOnRails-Cheatsheet-BlaineKendalltutorialsruby
 
RubyOnRails-Cheatsheet-BlaineKendall
RubyOnRails-Cheatsheet-BlaineKendallRubyOnRails-Cheatsheet-BlaineKendall
RubyOnRails-Cheatsheet-BlaineKendalltutorialsruby
 
Python RESTful webservices with Python: Flask and Django solutions
Python RESTful webservices with Python: Flask and Django solutionsPython RESTful webservices with Python: Flask and Django solutions
Python RESTful webservices with Python: Flask and Django solutions
Solution4Future
 
Rails3 for Rails2 developers
Rails3 for Rails2 developersRails3 for Rails2 developers
Rails3 for Rails2 developersalkeshv
 
Emberjs as a rails_developer
Emberjs as a rails_developer Emberjs as a rails_developer
Emberjs as a rails_developer
Sameera Gayan
 
Migration from Rails2 to Rails3
Migration from Rails2 to Rails3Migration from Rails2 to Rails3
Migration from Rails2 to Rails3
Umair Amjad
 
Active record(1)
Active record(1)Active record(1)
Active record(1)
Ananta Lamichhane
 
Laurens Van Den Oever Xopus Presentation
Laurens Van Den Oever Xopus PresentationLaurens Van Den Oever Xopus Presentation
Laurens Van Den Oever Xopus PresentationAjax Experience 2009
 
Extending Rails with Plugins (2007)
Extending Rails with Plugins (2007)Extending Rails with Plugins (2007)
Extending Rails with Plugins (2007)
lazyatom
 
Rails 3 Beautiful Code
Rails 3 Beautiful CodeRails 3 Beautiful Code
Rails 3 Beautiful Code
GreggPollack
 
Rails 3 overview
Rails 3 overviewRails 3 overview
Rails 3 overviewYehuda Katz
 
Growing Rails Apps - Dmitry Zhlobo | Ruby Meditation #23
Growing Rails Apps - Dmitry Zhlobo | Ruby Meditation #23Growing Rails Apps - Dmitry Zhlobo | Ruby Meditation #23
Growing Rails Apps - Dmitry Zhlobo | Ruby Meditation #23
Ruby Meditation
 
SproutCore and the Future of Web Apps
SproutCore and the Future of Web AppsSproutCore and the Future of Web Apps
SproutCore and the Future of Web Apps
Mike Subelsky
 

Similar to Model of the colossus @ Rupy Brazil 2013 (20)

Ruby/Rails
Ruby/RailsRuby/Rails
Ruby/Rails
 
Rails3 changesets
Rails3 changesetsRails3 changesets
Rails3 changesets
 
Rspec API Documentation
Rspec API DocumentationRspec API Documentation
Rspec API Documentation
 
One does not simply "Upgrade to Rails 3"
One does not simply "Upgrade to Rails 3"One does not simply "Upgrade to Rails 3"
One does not simply "Upgrade to Rails 3"
 
Ams adapters
Ams adaptersAms adapters
Ams adapters
 
MongoDB & Mongoid with Rails
MongoDB & Mongoid with RailsMongoDB & Mongoid with Rails
MongoDB & Mongoid with Rails
 
RubyOnRails-Cheatsheet-BlaineKendall
RubyOnRails-Cheatsheet-BlaineKendallRubyOnRails-Cheatsheet-BlaineKendall
RubyOnRails-Cheatsheet-BlaineKendall
 
RubyOnRails-Cheatsheet-BlaineKendall
RubyOnRails-Cheatsheet-BlaineKendallRubyOnRails-Cheatsheet-BlaineKendall
RubyOnRails-Cheatsheet-BlaineKendall
 
Python RESTful webservices with Python: Flask and Django solutions
Python RESTful webservices with Python: Flask and Django solutionsPython RESTful webservices with Python: Flask and Django solutions
Python RESTful webservices with Python: Flask and Django solutions
 
Rails3 for Rails2 developers
Rails3 for Rails2 developersRails3 for Rails2 developers
Rails3 for Rails2 developers
 
Emberjs as a rails_developer
Emberjs as a rails_developer Emberjs as a rails_developer
Emberjs as a rails_developer
 
Migration from Rails2 to Rails3
Migration from Rails2 to Rails3Migration from Rails2 to Rails3
Migration from Rails2 to Rails3
 
Active record(1)
Active record(1)Active record(1)
Active record(1)
 
Laurens Van Den Oever Xopus Presentation
Laurens Van Den Oever Xopus PresentationLaurens Van Den Oever Xopus Presentation
Laurens Van Den Oever Xopus Presentation
 
Extending Rails with Plugins (2007)
Extending Rails with Plugins (2007)Extending Rails with Plugins (2007)
Extending Rails with Plugins (2007)
 
Rails 3 Beautiful Code
Rails 3 Beautiful CodeRails 3 Beautiful Code
Rails 3 Beautiful Code
 
Intro to Rails 4
Intro to Rails 4Intro to Rails 4
Intro to Rails 4
 
Rails 3 overview
Rails 3 overviewRails 3 overview
Rails 3 overview
 
Growing Rails Apps - Dmitry Zhlobo | Ruby Meditation #23
Growing Rails Apps - Dmitry Zhlobo | Ruby Meditation #23Growing Rails Apps - Dmitry Zhlobo | Ruby Meditation #23
Growing Rails Apps - Dmitry Zhlobo | Ruby Meditation #23
 
SproutCore and the Future of Web Apps
SproutCore and the Future of Web AppsSproutCore and the Future of Web Apps
SproutCore and the Future of Web Apps
 

Recently uploaded

Key Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdfKey Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdf
Cheryl Hung
 
Generating a custom Ruby SDK for your web service or Rails API using Smithy
Generating a custom Ruby SDK for your web service or Rails API using SmithyGenerating a custom Ruby SDK for your web service or Rails API using Smithy
Generating a custom Ruby SDK for your web service or Rails API using Smithy
g2nightmarescribd
 
Mission to Decommission: Importance of Decommissioning Products to Increase E...
Mission to Decommission: Importance of Decommissioning Products to Increase E...Mission to Decommission: Importance of Decommissioning Products to Increase E...
Mission to Decommission: Importance of Decommissioning Products to Increase E...
Product School
 
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdfFIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance
 
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdfSmart TV Buyer Insights Survey 2024 by 91mobiles.pdf
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf
91mobiles
 
The Future of Platform Engineering
The Future of Platform EngineeringThe Future of Platform Engineering
The Future of Platform Engineering
Jemma Hussein Allen
 
Assuring Contact Center Experiences for Your Customers With ThousandEyes
Assuring Contact Center Experiences for Your Customers With ThousandEyesAssuring Contact Center Experiences for Your Customers With ThousandEyes
Assuring Contact Center Experiences for Your Customers With ThousandEyes
ThousandEyes
 
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered QualitySoftware Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
Inflectra
 
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
 
Leading Change strategies and insights for effective change management pdf 1.pdf
Leading Change strategies and insights for effective change management pdf 1.pdfLeading Change strategies and insights for effective change management pdf 1.pdf
Leading Change strategies and insights for effective change management pdf 1.pdf
OnBoard
 
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
 
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdfFIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance
 
UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4
DianaGray10
 
FIDO Alliance Osaka Seminar: Overview.pdf
FIDO Alliance Osaka Seminar: Overview.pdfFIDO Alliance Osaka Seminar: Overview.pdf
FIDO Alliance Osaka Seminar: Overview.pdf
FIDO Alliance
 
Neuro-symbolic is not enough, we need neuro-*semantic*
Neuro-symbolic is not enough, we need neuro-*semantic*Neuro-symbolic is not enough, we need neuro-*semantic*
Neuro-symbolic is not enough, we need neuro-*semantic*
Frank van Harmelen
 
Accelerate your Kubernetes clusters with Varnish Caching
Accelerate your Kubernetes clusters with Varnish CachingAccelerate your Kubernetes clusters with Varnish Caching
Accelerate your Kubernetes clusters with Varnish Caching
Thijs Feryn
 
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
Tobias Schneck
 
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
Sri Ambati
 
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Albert Hoitingh
 
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
 

Recently uploaded (20)

Key Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdfKey Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdf
 
Generating a custom Ruby SDK for your web service or Rails API using Smithy
Generating a custom Ruby SDK for your web service or Rails API using SmithyGenerating a custom Ruby SDK for your web service or Rails API using Smithy
Generating a custom Ruby SDK for your web service or Rails API using Smithy
 
Mission to Decommission: Importance of Decommissioning Products to Increase E...
Mission to Decommission: Importance of Decommissioning Products to Increase E...Mission to Decommission: Importance of Decommissioning Products to Increase E...
Mission to Decommission: Importance of Decommissioning Products to Increase E...
 
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdfFIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
 
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdfSmart TV Buyer Insights Survey 2024 by 91mobiles.pdf
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf
 
The Future of Platform Engineering
The Future of Platform EngineeringThe Future of Platform Engineering
The Future of Platform Engineering
 
Assuring Contact Center Experiences for Your Customers With ThousandEyes
Assuring Contact Center Experiences for Your Customers With ThousandEyesAssuring Contact Center Experiences for Your Customers With ThousandEyes
Assuring Contact Center Experiences for Your Customers With ThousandEyes
 
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered QualitySoftware Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
 
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
 
Leading Change strategies and insights for effective change management pdf 1.pdf
Leading Change strategies and insights for effective change management pdf 1.pdfLeading Change strategies and insights for effective change management pdf 1.pdf
Leading Change strategies and insights for effective change management pdf 1.pdf
 
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
 
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdfFIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
 
UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4
 
FIDO Alliance Osaka Seminar: Overview.pdf
FIDO Alliance Osaka Seminar: Overview.pdfFIDO Alliance Osaka Seminar: Overview.pdf
FIDO Alliance Osaka Seminar: Overview.pdf
 
Neuro-symbolic is not enough, we need neuro-*semantic*
Neuro-symbolic is not enough, we need neuro-*semantic*Neuro-symbolic is not enough, we need neuro-*semantic*
Neuro-symbolic is not enough, we need neuro-*semantic*
 
Accelerate your Kubernetes clusters with Varnish Caching
Accelerate your Kubernetes clusters with Varnish CachingAccelerate your Kubernetes clusters with Varnish Caching
Accelerate your Kubernetes clusters with Varnish Caching
 
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
 
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
 
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
 
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
 

Model of the colossus @ Rupy Brazil 2013