SlideShare a Scribd company logo
1 of 43
Download to read offline
DESIGN PATTERNS
Teeeechhh taaaaalkkkk
A design pattern is a general reusable solution to a commonly
occurring problem within a given context in software design.A
design pattern is not a finished design that can be transformed
directly into source or machine code. It is a description or
template for how to solve a problem that can be used in many
different situations.
The Gang of Four (GoF)
•Template Method	

•Strategy	

•Observer	

•Composite	

•Iterator	

•Command	

•Adapter	

•Proxy	

•Decorator	

•Singleton	

•Factory	

•Builder	

•Interpreter
• Template Method
•Strategy	

•Observer	

•Composite	

•Iterator	

•Command	

•Adapter	

•Proxy	

•Decorator	

•Singleton	

•Factory	

•Builder	

•Interpreter
class Report!
def initialize!
@title = 'Monthly Report'!
@text = ['Things are going', 'really, really well.']!
end!
!
def output_report(format)!
if format == :plain!
puts("*** #{@title} ***")!
elsif format == :html!
puts('<html>')!
puts(' <head>')!
puts(" <title>#{@title}</title>")!
puts(' </head>')!
puts(' <body>')!
else!
raise "Unknown format: #{format}"!
end!
!
@text.each do |line|!
if format == :plain!
puts(line)!
else!
puts(" <p>#{line}</p>" )!
end!
end!
!
if format == :html!
puts(' </body>')!
puts('</html>')!
end!
end!
end!
class Report!
def initialize!
@title = 'Monthly Report'!
@text = ['Things are going', 'really, really well.']!
end!
!
def output_report!
output_start!
output_head!
output_body_start!
@text.each do |line|!
output_line(line)!
end!
output_body_end!
output_end!
end!
!
def output_start!
end!
!
def output_head!
raise 'Called abstract method: output_head'!
end!
!
def output_body_start!
end!
!
def output_line(line)!
raise 'Called abstract method: output_line'!
end!
!
def output_body_end!
end!
!
def output_end!
end!
end!
Template method
class HTMLReport < Report!
def output_start!
puts('<html>')!
end!
!
def output_head!
puts(' <head>')!
puts(" <title>#{@title}</title>")!
puts(' </head>')!
end!
!
def output_body_start!
puts('<body>')!
end!
!
def output_line(line)!
puts(" <p>#{line}</p>")!
end!
!
def output_body_end!
puts('</body>')!
end!
!
def output_end!
puts('</html>')!
end!
end!
•Template Method	

• Strategy
•Observer	

•Composite	

•Iterator	

•Command	

•Adapter	

•Proxy	

•Decorator	

•Singleton	

•Factory	

•Builder	

•Interpreter
class Report!
attr_reader :title, :text!
attr_accessor :formatter!
!
def initialize(formatter)!
@title = 'Monthly Report'!
@text = ['Things are going', 'really, really well.']!
@formatter = formatter!
end!
!
def output_report!
@formatter.output_report(self)!
end!
end!
!
Report.new(HTMLFormatter.new)
class HTMLFormatter!
def output_report(context)!
puts('<html>')!
puts(' <head>')!
# Output The rest of the report ...!
!
puts(" <title>#{context.title}</title>")!
puts(' </head>')!
puts(' <body>')!
context.text.each do |line|!
puts(" <p>#{line}</p>")!
end!
puts(' </body>')!
!
puts('</html>')!
end!
end!
•Template Method	

•Strategy	

• Observer
•Composite	

•Iterator	

•Command	

•Adapter	

•Proxy	

•Decorator	

•Singleton	

•Factory	

•Builder	

•Interpreter
class User!
def save!
save_to_database!
if new_record?!
notify_observers(:after_create)!
end!
notify_observers(:after_save)!
end!
end!
!
class UserEmailObserver!
def after_create(user)!
UserMailer.welcome_email(user)!
end!
end!
!
user = User.new!
user.add_observer(UserEmailObserver.new)!
•Template Method	

•Strategy	

•Observer	

• Composite
•Iterator	

•Command	

•Adapter	

•Proxy	

•Decorator	

•Singleton	

•Factory	

•Builder	

•Interpreter
class Task!
attr_reader :name!
!
def initialize(name)!
@name = name!
end!
!
def get_time_required!
0.0!
end!
end
class CompositeTask < Task !
def initialize(name)!
super(name)!
@sub_tasks = []!
end!
!
def add_sub_task(task)!
@sub_tasks << task!
end!
!
def remove_sub_task(task)!
@sub_tasks.delete(task)!
end!
!
def get_time_required!
time=0.0!
@sub_tasks.each {|task| time += task.get_time_required}!
time!
end!
end!
class MakeCakeTask < CompositeTask!
def initialize!
super('Make cake')!
add_sub_task( MakeBatterTask.new )!
add_sub_task( FillPanTask.new )!
add_sub_task( BakeTask.new )!
add_sub_task( FrostTask.new )!
add_sub_task( LickSpoonTask.new )!
end!
end!
!
MakeCakeTask.new.get_time_required
•Template Method	

•Strategy	

•Observer	

•Composite	

• Iterator
•Command	

•Adapter	

•Proxy	

•Decorator	

•Singleton	

•Factory	

•Builder	

•Interpreter
External
array = ['red', 'green', 'blue']!
!
i = ArrayIterator.new(array)!
while i.has_next?!
puts "item: #{i.next_item}"!
end!
Hello Java ;-)
Internal
array = ['red', 'green', 'blue']!
array.each do |item|!
puts "item: #{item}"!
end!
External
array1 = [1, 2]!
array1 = [2, 3]!
!
sum = 0!
i1 = ArrayIterator.new(array1)!
i2 = ArrayIterator.new(array2)!
while i1.has_next? && i2.has_next?!
sum += i1.next_item * i2.next_item!
end!
•Template Method	

•Strategy	

•Observer	

•Composite	

•Iterator	

• Command
•Adapter	

•Proxy	

•Decorator	

•Singleton	

•Factory	

•Builder	

•Interpreter
PrimerTemplate Method
class SlickButton!
def on_button_push!
raise "Abstract method on_button_push"!
end!
end!
!
class SaveButton < SlickButton!
def on_button_push!
document.save(filename)!
end!
end
So many subclasses :-(
class SlickButton!
attr_accessor :command!
!
def initialize(command)!
@command = command!
end!
!
def on_button_push!
@command.execute if @command!
end!
end!
!
class SaveCommand!
def execute!
# Save the current document...!
end!
end!
Command Pattern
class SlickButton!
attr_accessor :command!
!
def initialize(&block)!
@command = block!
end!
!
def on_button_push!
@command.call if @command!
end!
end!
!
save_button = SlickButton.new do!
document.save(filename)!
end!
Lambda
Composite, Command
PRIMER - INSTALLER
class Command!
attr_reader :description!
!
def initialize(description)!
@description = description!
end!
!
def execute!
end!
!
def unexecute!
end!
end!
!
class CreateFile < Command!
def initialize(path, contents)!
super "Create file: #{path}"!
@path = path!
@contents = contents!
end!
!
def execute!
f = File.open(@path, "w")!
f.write(@contents)!
f.close!
end!
!
def unexecute!
File.delete(@path)!
end!
end!
class CompositeCommand < Command!
def initialize!
@commands = []!
end!
!
def add_command(cmd)!
@commands << cmd!
end!
!
def execute!
@commands.each { |cmd| cmd.execute }!
end!
!
# ...!
!
def unexecute!
@commands.reverse.each { |cmd| cmd.unexecute }!
end!
!
# ...!
!
def description!
description = ''!
@commands.each { |cmd| description += cmd.description + "n" }!
return description!
end!
end!
class Installer < CompositeCommand!
def initialize!
add_command(CreateFile.new("file1.txt", "hello worldn"))!
add_command(CopyFile.new("file1.txt", "file2.txt"))!
add_command(DeleteFile.new("file1.txt"))!
end!
end!
!
installer = Installer.new!
installer.execute!
puts installer.description!
•Template Method	

•Strategy	

•Observer	

•Composite	

•Iterator	

•Command	

• Adapter
•Proxy	

•Decorator	

•Singleton	

•Factory	

•Builder	

•Interpreter
class Database!
def initialize(adapter)!
@adapter = adapter!
end!
!
def create_table(table_name, fields)!
@adapter.create_table(table_name)!
fields.each_pair do |name, type|!
@adapter.create_column(table_name, name, type)!
end!
end!
end!
!
db = Database.new(MySQLAdapter.new(DB_URI))!
db.create_table(:users, email: :string)!
•Template Method	

•Strategy	

•Observer	

•Composite	

•Iterator	

•Command	

•Adapter	

• Proxy
•Decorator	

•Singleton	

•Factory	

•Builder	

•Interpreter
class AccountProtectionProxy!
def initialize(real_account, owner_name)!
@subject = real_account!
@owner_name = owner_name!
end!
!
def withdraw(amount)!
check_access!
return @subject.withdraw(amount)!
end!
!
def check_access!
if Etc.getlogin != @owner_name !
raise "Illegal access: #{Etc.getlogin} cannot
access account."!
end!
end!
end!
•Template Method	

•Strategy	

•Observer	

•Composite	

•Iterator	

•Command	

•Adapter	

•Proxy	

• Decorator
•Singleton	

•Factory	

•Builder	

•Interpreter
class UserDecorator!
attr_reader :user!
delegate :first_name, :last_name,!
:position, :institution, to: :user!
!
def initialize(user)!
@user = user!
end!
!
def short_name!
"#{first_name[0]}. #{last_name}"!
end!
!
def description!
"#{short_name} is a #{position} at
#{institution}"!
end!
end!
<p>!
<b>Name:<b>!
{{short_name}}!
<br>!
{{description}}!
<p>!
•Template Method	

•Strategy	

•Observer	

•Composite	

•Iterator	

•Command	

•Adapter	

•Proxy	

•Decorator	

• Singleton
•Factory	

•Builder	

•Interpreter
class SimpleLogger!
@@instance = SimpleLogger.new!
!
def self.instance!
return @@instance!
end!
!
def warn(s)!
puts s!
end!
end!
!
SimpleLogger.instance.warn("I don't know what I'm doing")!
•Template Method	

•Strategy	

•Observer	

•Composite	

•Iterator	

•Command	

•Adapter	

•Proxy	

•Decorator	

•Singleton	

• Factory
•Builder	

•Interpreter
factory :user do!
first_name 'John'!
last_name 'Doe'!
admin false!
!
factory :admin do!
admin true!
end!
end!
!
FactoryGirl.build(:user)!
FactoryGirl.build(:admin)!
•Template Method	

•Strategy	

•Observer	

•Composite	

•Iterator	

•Command	

•Adapter	

•Proxy	

•Decorator	

•Singleton	

•Factory	

• Builder
•Interpreter
user = UserBuilder.new('John', 'Doe')!
.age(30)!
.phone('1234567')!
.address('Fake address 1234')!
.build()!
Hello Java ;-)
•Template Method	

•Strategy	

•Observer	

•Composite	

•Iterator	

•Command	

•Adapter	

•Proxy	

•Decorator	

•Singleton	

•Factory	

•Builder	

• Interpreter
AST (Abstract SyntaxTree)	

querying stuff, building SQL, etc.
# Files that are bigger than 20KB and not writable,!
# or are mp3 files!
expr = Or.new(!
And.new(Bigger.new(20.kilobytes), Not.new(Writable.new)),!
FileName.new('*.mp3'))!
expr.evaluate # => [File, File, ...]!
•teamleadi določite enega ki naj v naslednji 1 uri
uporabi na projektu enega od patternov	

•checkmarks

More Related Content

Similar to Techtalk design patterns

Refactoring Workshop (Rails Pacific 2014)
Refactoring Workshop (Rails Pacific 2014)Refactoring Workshop (Rails Pacific 2014)
Refactoring Workshop (Rails Pacific 2014)Bruce Li
 
Test Driven Development - Workshop
Test Driven Development - WorkshopTest Driven Development - Workshop
Test Driven Development - WorkshopAnjana Somathilake
 
Introduction to Drupal (7) Theming
Introduction to Drupal (7) ThemingIntroduction to Drupal (7) Theming
Introduction to Drupal (7) ThemingRobert Carr
 
How I Learned to Stop Worrying and Love Legacy Code - Ox:Agile 2018
How I Learned to Stop Worrying and Love Legacy Code - Ox:Agile 2018How I Learned to Stop Worrying and Love Legacy Code - Ox:Agile 2018
How I Learned to Stop Worrying and Love Legacy Code - Ox:Agile 2018Mike Harris
 
TypeScript . the JavaScript developer best friend!
TypeScript . the JavaScript developer best friend!TypeScript . the JavaScript developer best friend!
TypeScript . the JavaScript developer best friend!Alessandro Giorgetti
 
Ingo Muschenetz: Titanium Studio Deep Dive
Ingo Muschenetz: Titanium Studio Deep DiveIngo Muschenetz: Titanium Studio Deep Dive
Ingo Muschenetz: Titanium Studio Deep DiveAxway Appcelerator
 
Coder sans peur du changement avec la meme pas mal hexagonal architecture
Coder sans peur du changement avec la meme pas mal hexagonal architectureCoder sans peur du changement avec la meme pas mal hexagonal architecture
Coder sans peur du changement avec la meme pas mal hexagonal architectureThomas Pierrain
 
Introduction to JavaScript design patterns
Introduction to JavaScript design patternsIntroduction to JavaScript design patterns
Introduction to JavaScript design patternsJeremy Duvall
 
Milot Shala - C++ (OSCAL2014)
Milot Shala - C++ (OSCAL2014)Milot Shala - C++ (OSCAL2014)
Milot Shala - C++ (OSCAL2014)Open Labs Albania
 
Drupal module development
Drupal module developmentDrupal module development
Drupal module developmentDamjan Cvetan
 
Real World Selenium Testing
Real World Selenium TestingReal World Selenium Testing
Real World Selenium TestingMary Jo Sminkey
 
RubyConf Portugal 2014 - Why ruby must go!
RubyConf Portugal 2014 - Why ruby must go!RubyConf Portugal 2014 - Why ruby must go!
RubyConf Portugal 2014 - Why ruby must go!Gautam Rege
 
Continuous improvements of developer efficiency with modern IDE
Continuous improvements of developer efficiency with modern IDEContinuous improvements of developer efficiency with modern IDE
Continuous improvements of developer efficiency with modern IDEMikalai Alimenkou
 
HTML5 Is the Future of Book Authorship
HTML5 Is the Future of Book AuthorshipHTML5 Is the Future of Book Authorship
HTML5 Is the Future of Book AuthorshipSanders Kleinfeld
 
JUG Münster 2014 - Code Recommenders & Codetrails - Wissenstransfer 2.0
JUG Münster 2014 - Code Recommenders & Codetrails - Wissenstransfer 2.0JUG Münster 2014 - Code Recommenders & Codetrails - Wissenstransfer 2.0
JUG Münster 2014 - Code Recommenders & Codetrails - Wissenstransfer 2.0Marcel Bruch
 
Play framework: lessons learned
Play framework: lessons learnedPlay framework: lessons learned
Play framework: lessons learnedPeter Hilton
 

Similar to Techtalk design patterns (20)

Refactoring Workshop (Rails Pacific 2014)
Refactoring Workshop (Rails Pacific 2014)Refactoring Workshop (Rails Pacific 2014)
Refactoring Workshop (Rails Pacific 2014)
 
Test Driven Development - Workshop
Test Driven Development - WorkshopTest Driven Development - Workshop
Test Driven Development - Workshop
 
Introduction to Drupal (7) Theming
Introduction to Drupal (7) ThemingIntroduction to Drupal (7) Theming
Introduction to Drupal (7) Theming
 
How I Learned to Stop Worrying and Love Legacy Code - Ox:Agile 2018
How I Learned to Stop Worrying and Love Legacy Code - Ox:Agile 2018How I Learned to Stop Worrying and Love Legacy Code - Ox:Agile 2018
How I Learned to Stop Worrying and Love Legacy Code - Ox:Agile 2018
 
TypeScript . the JavaScript developer best friend!
TypeScript . the JavaScript developer best friend!TypeScript . the JavaScript developer best friend!
TypeScript . the JavaScript developer best friend!
 
Ingo Muschenetz: Titanium Studio Deep Dive
Ingo Muschenetz: Titanium Studio Deep DiveIngo Muschenetz: Titanium Studio Deep Dive
Ingo Muschenetz: Titanium Studio Deep Dive
 
Coder sans peur du changement avec la meme pas mal hexagonal architecture
Coder sans peur du changement avec la meme pas mal hexagonal architectureCoder sans peur du changement avec la meme pas mal hexagonal architecture
Coder sans peur du changement avec la meme pas mal hexagonal architecture
 
Introduction to JavaScript design patterns
Introduction to JavaScript design patternsIntroduction to JavaScript design patterns
Introduction to JavaScript design patterns
 
Refactoring
RefactoringRefactoring
Refactoring
 
Milot Shala - C++ (OSCAL2014)
Milot Shala - C++ (OSCAL2014)Milot Shala - C++ (OSCAL2014)
Milot Shala - C++ (OSCAL2014)
 
Pruexx User's guide for beta testing
Pruexx User's guide for beta testingPruexx User's guide for beta testing
Pruexx User's guide for beta testing
 
Drupal module development
Drupal module developmentDrupal module development
Drupal module development
 
Real World Selenium Testing
Real World Selenium TestingReal World Selenium Testing
Real World Selenium Testing
 
RubyConf Portugal 2014 - Why ruby must go!
RubyConf Portugal 2014 - Why ruby must go!RubyConf Portugal 2014 - Why ruby must go!
RubyConf Portugal 2014 - Why ruby must go!
 
Oreilly
OreillyOreilly
Oreilly
 
Continuous improvements of developer efficiency with modern IDE
Continuous improvements of developer efficiency with modern IDEContinuous improvements of developer efficiency with modern IDE
Continuous improvements of developer efficiency with modern IDE
 
HTML5 Is the Future of Book Authorship
HTML5 Is the Future of Book AuthorshipHTML5 Is the Future of Book Authorship
HTML5 Is the Future of Book Authorship
 
JUG Münster 2014 - Code Recommenders & Codetrails - Wissenstransfer 2.0
JUG Münster 2014 - Code Recommenders & Codetrails - Wissenstransfer 2.0JUG Münster 2014 - Code Recommenders & Codetrails - Wissenstransfer 2.0
JUG Münster 2014 - Code Recommenders & Codetrails - Wissenstransfer 2.0
 
Writing clean code
Writing clean codeWriting clean code
Writing clean code
 
Play framework: lessons learned
Play framework: lessons learnedPlay framework: lessons learned
Play framework: lessons learned
 

Recently uploaded

Platformless Horizons for Digital Adaptability
Platformless Horizons for Digital AdaptabilityPlatformless Horizons for Digital Adaptability
Platformless Horizons for Digital AdaptabilityWSO2
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businesspanagenda
 
Exploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with MilvusExploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with MilvusZilliz
 
Vector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptxVector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptxRemote DBA Services
 
Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​Bhuvaneswari Subramani
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProduct Anonymous
 
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
 
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
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MIND CTI
 
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot ModelMcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot ModelDeepika Singh
 
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
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FMESafe Software
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoffsammart93
 
Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)Zilliz
 
WSO2's API Vision: Unifying Control, Empowering Developers
WSO2's API Vision: Unifying Control, Empowering DevelopersWSO2's API Vision: Unifying Control, Empowering Developers
WSO2's API Vision: Unifying Control, Empowering DevelopersWSO2
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAndrey Devyatkin
 
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...Orbitshub
 
CNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In PakistanCNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In Pakistandanishmna97
 
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...Zilliz
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherRemote DBA Services
 

Recently uploaded (20)

Platformless Horizons for Digital Adaptability
Platformless Horizons for Digital AdaptabilityPlatformless Horizons for Digital Adaptability
Platformless Horizons for Digital Adaptability
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 
Exploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with MilvusExploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with Milvus
 
Vector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptxVector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptx
 
Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
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
 
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
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot ModelMcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
 
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
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)
 
WSO2's API Vision: Unifying Control, Empowering Developers
WSO2's API Vision: Unifying Control, Empowering DevelopersWSO2's API Vision: Unifying Control, Empowering Developers
WSO2's API Vision: Unifying Control, Empowering Developers
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
 
CNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In PakistanCNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In Pakistan
 
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 

Techtalk design patterns