SlideShare a Scribd company logo
1 of 83
Download to read offline
CAN WE STILL INNOVATE?
PIOTR SOLNICA RubyDay 2016, Florence
mojotech.com
rom-rb.org dry-rb.org
2005 - 2010
CONVENTION
OVER
CONFIGURATION
COMPLEXITY
ᕕ(˵•̀෴•́˵)ᕗ
“FAT MODEL” WAS
AN AMBIGUOUS IDEA
EXPLORING NEW
APPROACHES…
DDD
DCI
SPFDL
(TOTALLY MADE
THIS UP)
SEPARATING PERSISTENCE
FROM DOMAIN LOGIC
MAYBE REPOSITORY
PATTERN?
MAYBE A FULL-BLOWN
DATAMAPPER PATTERN?
MEANWHILE…
NEW LIBRARIES
AND FRAMEWORKS!
RAILS.MERGE(MERB)
2008-2010
2010+
NEW ABSTRACTIONS
▸ Form objects
▸ Value objects
▸ Service objects
▸ Query objects
▸ Policy objects
▸ View objects
SPFDL
DATAMAPPER 2
VIRTUS
ROM-RB.ORG
2016
ROM-RB.ORG
ROM-RB INNOVATIONS
▸ Read/Write separation
▸ Relations as first-class citizens
▸ Data transformations instead of object mutations
▸ Explicit relation composition instead of ambiguous query
DSLs
▸ Command API for custom db-specific database operations
▸ Externalized data validations
cfg = ROM::Configuration.new(:sql, 'sqlite::memory')
cfg.gateways[:default].create_table(:users) do
primary_key :id
column :name, String, null: false
column :age, Integer, null: true
end
cfg.gateways[:default].create_table(:tasks) do
primary_key :id
foreign_key :user_id, :users, null: false, on_delete: :cascade
column :title, String, null: true
end
class Users < ROM::Relation[:sql]
schema(infer: true)
end
class Tasks < ROM::Relation[:sql]
schema(infer: true)
end
SETS UP RELATION
ATTRIBUTES BASED ON DATABASE
SCHEMA SCHEMA
INFERS TABLE NAME FROM CLASS
NAME
rom = ROM.container(cfg)
NO GLOBAL
POLLUTION
REPOSITORIES
class UserRepo < ROM::Repository[:users]
commands :create
end
user_repo = UserRepo.new(rom)
user_repo.create(name: 'Jane', age: 33)
# => #<ROM::Struct[User] id=3 name="Jane" age=33>
CHANGESETS
class UserRepo < ROM::Repository[:users]
commands :create, update: :by_pk
end
user_repo = UserRepo.new(rom)
user = user_repo.create(name: 'Jane', age: 33)
changeset = user_repo.changeset(user.id, name: 'Jane Doe')
changeset.diff
# => {:name=>"Jane Doe"}
user_repo.update(user.id, changeset)
# => #<ROM::Struct[User] id=1 name="Jane Doe" age=33>
AGGREGATES
class Users < ROM::Relation[:sql]
schema(infer: true) do
associations do
has_many :tasks
end
end
end
class UserRepo < ROM::Repository[:users]
relations :tasks
def create_with_tasks(user)
command(:create, aggregate(:tasks)).call(user)
end
end
user_repo.aggregate(:tasks)
# [#<ROM::Struct[User] id=3 name="Jane" age=33
tasks=[#<ROM::Struct[Task] id=5 user_id=3 title="Jane task 1">,
#<ROM::Struct[Task] id=6 user_id=3 title="Jane task 2">]>>
CUSTOM OBJECTS
require 'dry-struct'
class Task < Dry::Struct
attribute :title, Types::Strict::String
end
class User < Dry::Struct
attribute :name, Types::Strict::String
attribute :age, Types::Strict::Int
attribute :tasks, Types::Strict::Array.member(Task)
end
user_repo.aggregate(:tasks).as(User).to_a
# => [#<User name="Jane" age=33 tasks=[#<Task title="Jane
task 1">, #<Task title="Jane task 2">]>, #<User
name="John" age=32 tasks=[#<Task title="John task 1">,
#<Task title="John task 2">]>]
DRY-RB.ORG
DRY-RB INNOVATIONS
▸ Advanced data validation
▸ Flexible type system with coercions and constraints
▸ Composable transactions with error handling based on
monads
▸ Simple yet powerful Dependency Injection
▸ Application state management with component lifecycles
DRY-STRUCT
class User < Dry::Struct
attribute :name, Types::Strict::String
attribute :age, Types::Strict::Int
end
module Types
include Dry::Types.module
Age = Types::Strict::Int.constrained(gt: 18)
end
class User < Dry::Struct
attribute :name, Types::Strict::String
attribute :age, Types::Age
end
User.new(name: 'John', age: 17)
# [User.new] 17 (Fixnum) has invalid type for :age
(Dry::Struct::Error)
DRY-VALIDATION
VALIDATION
SCHEMAS
UserSchema = Dry::Validation.Schema do
required(:login).value(:str?, size?: 2..64)
required(:age).maybe(:int?, gt?: 18)
end
IS IT A STRING WITH A SIZE
BETWEEN 2 AND 64 CHARS?
CAN BE NIL BUT
IF IT’S NOT THEN IS IT AN
INTEGER AND IS IT GREATER
THAN 18?
UserSchema.(login: "j", age: 19).errors
# {:login=>["length must be within 2 - 64"]}
UserSchema.(login: "jane", age: nil).errors
# {}
SHORTCUT FOR `#CALL` :)
COMPOSING
SCHEMAS
AddressSchema = Dry::Validation.Schema do
required(:street).value(:str?)
required(:city).filled(:str?)
required(:zipcode).filled(:int?)
end
UserSchema = Dry::Validation.Schema do
required(:login).value(:str?, size?: 2..64)
required(:age).maybe(:int?, gt?: 18)
required(:address).schema(AddressSchema)
end
VALIDATION HINTS
UserSchema.(login: 'jane', age: 'oops').errors
# {:age=>["must be an integer"]}
UserSchema.(login: 'jane', age: 'oops').hints
# {:age=>["must be greater than 18"]}
DRY-SYSTEM
MANAGING STATE
require 'dry/system/container'
class Application < Dry::System::Container
configure do |config|
config.root = Pathname.new('./my/app')
end
end
# now you can register a logger
require 'logger'
Application.register('utils.logger', Logger.new($stdout))
# and access it
Application['utils.logger']
AUTO-
REGISTRATION
require 'dry/system/container'
class Application < Dry::System::Container
configure do |config|
config.root = '/my/app'
config.auto_register = 'lib'
end
load_paths!('lib')
end
# under /my/app/lib/logger.rb we put
class Logger
# some neat logger implementation
end
# we can finalize the container which triggers auto-registration
Application.finalize!
# the logger becomes available
Application[‘logger']
BOOTING
COMPONENTS
# system/boot/persistence.rb
Application.finalize(:persistence) do
init do
require '3rd-party/database'
end
start do
container.register('database') do
3rdParty::Database.new
end
end
stop do
container['database'].disconnect
end
end
class Application < Dry::Component::Container
configure do |config|
config.root = '/my/app'
end
end
# requires needed files and boots your persistence component
Application.boot!(:persistence)
# and now `database` becomes available
Application['database']
# lib/worker.rb
require ‘application/import'
class Worker
include Import['database']
def do_stuff
users = database.read('select * from users')
# ..
end
end
THIS WILL INJECT “DATABASE”
OBJECT AND MAKE IT AVAILABLE
2016…
LET’S CONTINUE
EXPLORING & INNOVATING
ᕦʕ ՞ ౪ ՞ ʔᕤ
THANK YOU <3

More Related Content

Viewers also liked

Fp fm reporte aplicacion aamtic_g89_act.4-angelap.muñoz
Fp fm reporte aplicacion aamtic_g89_act.4-angelap.muñozFp fm reporte aplicacion aamtic_g89_act.4-angelap.muñoz
Fp fm reporte aplicacion aamtic_g89_act.4-angelap.muñozAngelaPatyMunoz
 
Adapting a Lesson Plan
Adapting a Lesson PlanAdapting a Lesson Plan
Adapting a Lesson PlanJoe Dillon
 
LES TIC I LA INCLUSIÓ EDUCATIVA
LES TIC I LA INCLUSIÓ EDUCATIVA LES TIC I LA INCLUSIÓ EDUCATIVA
LES TIC I LA INCLUSIÓ EDUCATIVA AniaLaRed
 
Welcome To Source A Tech
Welcome To Source A TechWelcome To Source A Tech
Welcome To Source A TechAdair Grover
 
Tipologies d'oci i temps lliure
Tipologies d'oci i temps lliure Tipologies d'oci i temps lliure
Tipologies d'oci i temps lliure Maria Rosa Roca
 
La retta
La rettaLa retta
La rettaalife24
 
Pakuranga Library Trip
Pakuranga Library TripPakuranga Library Trip
Pakuranga Library Tripsusieallen14
 
Individualni konsalting za menadžere
Individualni konsalting za menadžereIndividualni konsalting za menadžere
Individualni konsalting za menadžereNeda Mirkovic
 

Viewers also liked (12)

Scan
ScanScan
Scan
 
Fp fm reporte aplicacion aamtic_g89_act.4-angelap.muñoz
Fp fm reporte aplicacion aamtic_g89_act.4-angelap.muñozFp fm reporte aplicacion aamtic_g89_act.4-angelap.muñoz
Fp fm reporte aplicacion aamtic_g89_act.4-angelap.muñoz
 
Gnesis Invest
Gnesis InvestGnesis Invest
Gnesis Invest
 
Adapting a Lesson Plan
Adapting a Lesson PlanAdapting a Lesson Plan
Adapting a Lesson Plan
 
NHK WORLD
NHK WORLDNHK WORLD
NHK WORLD
 
LES TIC I LA INCLUSIÓ EDUCATIVA
LES TIC I LA INCLUSIÓ EDUCATIVA LES TIC I LA INCLUSIÓ EDUCATIVA
LES TIC I LA INCLUSIÓ EDUCATIVA
 
Welcome To Source A Tech
Welcome To Source A TechWelcome To Source A Tech
Welcome To Source A Tech
 
Tipologies d'oci i temps lliure
Tipologies d'oci i temps lliure Tipologies d'oci i temps lliure
Tipologies d'oci i temps lliure
 
La retta
La rettaLa retta
La retta
 
Pakuranga Library Trip
Pakuranga Library TripPakuranga Library Trip
Pakuranga Library Trip
 
Individualni konsalting za menadžere
Individualni konsalting za menadžereIndividualni konsalting za menadžere
Individualni konsalting za menadžere
 
Napza
NapzaNapza
Napza
 

Similar to RubyDay 2016 - Can we still innovate?

Where are yours vertexes and what are they talking about?
Where are yours vertexes and what are they talking about?Where are yours vertexes and what are they talking about?
Where are yours vertexes and what are they talking about?Roberto Franchini
 
JavaScript for Enterprise Applications
JavaScript for Enterprise ApplicationsJavaScript for Enterprise Applications
JavaScript for Enterprise ApplicationsPiyush Katariya
 
Exploiting the Data / Code Duality with Dali
Exploiting the Data / Code Duality with DaliExploiting the Data / Code Duality with Dali
Exploiting the Data / Code Duality with DaliCarl Steinbach
 
MongoDB SoCal 2020: Migrate Anything* to MongoDB Atlas
MongoDB SoCal 2020: Migrate Anything* to MongoDB AtlasMongoDB SoCal 2020: Migrate Anything* to MongoDB Atlas
MongoDB SoCal 2020: Migrate Anything* to MongoDB AtlasMongoDB
 
Offline first: application data and synchronization
Offline first: application data and synchronizationOffline first: application data and synchronization
Offline first: application data and synchronizationEatDog
 
Benefits of Using MongoDB Over RDBMSs
Benefits of Using MongoDB Over RDBMSsBenefits of Using MongoDB Over RDBMSs
Benefits of Using MongoDB Over RDBMSsMongoDB
 
MongoDB.local Paris Keynote
MongoDB.local Paris KeynoteMongoDB.local Paris Keynote
MongoDB.local Paris KeynoteMongoDB
 
DDS Advanced Tutorial - OMG June 2013 Berlin Meeting
DDS Advanced Tutorial - OMG June 2013 Berlin MeetingDDS Advanced Tutorial - OMG June 2013 Berlin Meeting
DDS Advanced Tutorial - OMG June 2013 Berlin MeetingJaime Martin Losa
 
Node.js for enterprise - JS Conference
Node.js for enterprise - JS ConferenceNode.js for enterprise - JS Conference
Node.js for enterprise - JS ConferenceTimur Shemsedinov
 
Vital AI MetaQL: Queries Across NoSQL, SQL, Sparql, and Spark
Vital AI MetaQL: Queries Across NoSQL, SQL, Sparql, and SparkVital AI MetaQL: Queries Across NoSQL, SQL, Sparql, and Spark
Vital AI MetaQL: Queries Across NoSQL, SQL, Sparql, and SparkVital.AI
 
Gordon Semantic Web 2008
Gordon Semantic Web 2008Gordon Semantic Web 2008
Gordon Semantic Web 2008bosc_2008
 
MongoDB Schema Design: Practical Applications and Implications
MongoDB Schema Design: Practical Applications and ImplicationsMongoDB Schema Design: Practical Applications and Implications
MongoDB Schema Design: Practical Applications and ImplicationsMongoDB
 
Object Oriented Concepts and Principles
Object Oriented Concepts and PrinciplesObject Oriented Concepts and Principles
Object Oriented Concepts and Principlesdeonpmeyer
 
Labeling all the Things with the WDI Skill Labeler
Labeling all the Things with the WDI Skill Labeler Labeling all the Things with the WDI Skill Labeler
Labeling all the Things with the WDI Skill Labeler Kwame Porter Robinson
 
Benefits of Using MongoDB Over RDBMS (At An Evening with MongoDB Minneapolis ...
Benefits of Using MongoDB Over RDBMS (At An Evening with MongoDB Minneapolis ...Benefits of Using MongoDB Over RDBMS (At An Evening with MongoDB Minneapolis ...
Benefits of Using MongoDB Over RDBMS (At An Evening with MongoDB Minneapolis ...MongoDB
 
The Clean Architecture
The Clean ArchitectureThe Clean Architecture
The Clean ArchitectureDmytro Turskyi
 
Confluent & MongoDB APAC Lunch & Learn
Confluent & MongoDB APAC Lunch & LearnConfluent & MongoDB APAC Lunch & Learn
Confluent & MongoDB APAC Lunch & Learnconfluent
 

Similar to RubyDay 2016 - Can we still innovate? (20)

Where are yours vertexes and what are they talking about?
Where are yours vertexes and what are they talking about?Where are yours vertexes and what are they talking about?
Where are yours vertexes and what are they talking about?
 
JavaScript for Enterprise Applications
JavaScript for Enterprise ApplicationsJavaScript for Enterprise Applications
JavaScript for Enterprise Applications
 
Exploiting the Data / Code Duality with Dali
Exploiting the Data / Code Duality with DaliExploiting the Data / Code Duality with Dali
Exploiting the Data / Code Duality with Dali
 
MongoDB SoCal 2020: Migrate Anything* to MongoDB Atlas
MongoDB SoCal 2020: Migrate Anything* to MongoDB AtlasMongoDB SoCal 2020: Migrate Anything* to MongoDB Atlas
MongoDB SoCal 2020: Migrate Anything* to MongoDB Atlas
 
Offline first: application data and synchronization
Offline first: application data and synchronizationOffline first: application data and synchronization
Offline first: application data and synchronization
 
AngularJS in large applications - AE NV
AngularJS in large applications - AE NVAngularJS in large applications - AE NV
AngularJS in large applications - AE NV
 
Benefits of Using MongoDB Over RDBMSs
Benefits of Using MongoDB Over RDBMSsBenefits of Using MongoDB Over RDBMSs
Benefits of Using MongoDB Over RDBMSs
 
MongoDB.local Paris Keynote
MongoDB.local Paris KeynoteMongoDB.local Paris Keynote
MongoDB.local Paris Keynote
 
Patterns for distributed systems
Patterns for distributed systemsPatterns for distributed systems
Patterns for distributed systems
 
DDS Advanced Tutorial - OMG June 2013 Berlin Meeting
DDS Advanced Tutorial - OMG June 2013 Berlin MeetingDDS Advanced Tutorial - OMG June 2013 Berlin Meeting
DDS Advanced Tutorial - OMG June 2013 Berlin Meeting
 
Node.js for enterprise - JS Conference
Node.js for enterprise - JS ConferenceNode.js for enterprise - JS Conference
Node.js for enterprise - JS Conference
 
Vital AI MetaQL: Queries Across NoSQL, SQL, Sparql, and Spark
Vital AI MetaQL: Queries Across NoSQL, SQL, Sparql, and SparkVital AI MetaQL: Queries Across NoSQL, SQL, Sparql, and Spark
Vital AI MetaQL: Queries Across NoSQL, SQL, Sparql, and Spark
 
Intro to Databases
Intro to DatabasesIntro to Databases
Intro to Databases
 
Gordon Semantic Web 2008
Gordon Semantic Web 2008Gordon Semantic Web 2008
Gordon Semantic Web 2008
 
MongoDB Schema Design: Practical Applications and Implications
MongoDB Schema Design: Practical Applications and ImplicationsMongoDB Schema Design: Practical Applications and Implications
MongoDB Schema Design: Practical Applications and Implications
 
Object Oriented Concepts and Principles
Object Oriented Concepts and PrinciplesObject Oriented Concepts and Principles
Object Oriented Concepts and Principles
 
Labeling all the Things with the WDI Skill Labeler
Labeling all the Things with the WDI Skill Labeler Labeling all the Things with the WDI Skill Labeler
Labeling all the Things with the WDI Skill Labeler
 
Benefits of Using MongoDB Over RDBMS (At An Evening with MongoDB Minneapolis ...
Benefits of Using MongoDB Over RDBMS (At An Evening with MongoDB Minneapolis ...Benefits of Using MongoDB Over RDBMS (At An Evening with MongoDB Minneapolis ...
Benefits of Using MongoDB Over RDBMS (At An Evening with MongoDB Minneapolis ...
 
The Clean Architecture
The Clean ArchitectureThe Clean Architecture
The Clean Architecture
 
Confluent & MongoDB APAC Lunch & Learn
Confluent & MongoDB APAC Lunch & LearnConfluent & MongoDB APAC Lunch & Learn
Confluent & MongoDB APAC Lunch & Learn
 

Recently uploaded

From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationSafe Software
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Scriptwesley chun
 
Top 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live StreamsTop 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live StreamsRoshan Dwivedi
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreternaman860154
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Paola De la Torre
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Drew Madelung
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Igalia
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slidespraypatel2
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking MenDelhi Call girls
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationRadu Cotescu
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEarley Information Science
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxMalak Abu Hammad
 
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
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024The Digital Insurer
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024Results
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking MenDelhi Call girls
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountPuma Security, LLC
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking MenDelhi Call girls
 

Recently uploaded (20)

From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
Top 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live StreamsTop 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live Streams
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slides
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
 
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...
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path Mount
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 

RubyDay 2016 - Can we still innovate?