SlideShare une entreprise Scribd logo
1  sur  87
Télécharger pour lire hors ligne
LIONS AND TIGERS AND 
HANDLING USER 
CAPABILITIES
HI, I’M TIFFANY 
@THEOPHANI
LIONS AND TIGERS AND 
HANDLING USER 
CAPABILITIES
(EXAMPLES)
ON A HUNT FOR 
WAYS TO APPROACH 
USER CAPABILITIES
PART I 
THE UX OF USER CAPABILITIES 
PART II 
IMPLEMENTING USER CAPABILITIES
PART I 
THE UX OF 
USER CAPABILITIES
GOOD USER CAPABILITY UX 
HELPS PEOPLE TO 
1. AVOID MISTAKES 
2. UNDERSTAND THEIR CAPABILITIES 
3. EASILY MANAGE PERMISSIONS
GOOD USER CAPABILITY UX 
HELPS PEOPLE TO 
1. AVOID MISTAKES
WHY ADD USER 
ACCESS RESTRICTIONS 
TO A SYSTEM ANYWAY?
PEOPLE SHOULD NOT BE ABLE 
TO DO THINGS THAT THEY 
ARE NOT ALLOWED DO
PEOPLE SHOULD NOT BE ABLE 
TO DO THINGS THAT THEY 
ARE NOT ALLOWED DO
PEOPLE SHOULD NOT BE ABLE 
TO DO THINGS THAT THEY 
DO NOT NEED TO DO
THIS IS KNOWN AS THE 
PRINCIPLE OF 
LEAST PRIVILEGE
Following this principle limits the potential damage 
of any security breach, whether accidental or malicious.
GOOD USER CAPABILITY UX 
HELPS PEOPLE TO 
2. UNDERSTAND THEIR 
CAPABILITIES
INTERACTION DESIGN ASKS 
HOW DOES THE USER: 
affect change? 
understand the change? 
understand what they can change?
INTERACTION DESIGN ASKS 
HOW DOES THE USER: 
affect change? 
understand the change? 
→ understand what they can change? ←
YOUR UI MUST COMMUNICATE 
WHAT THE PERSON CAN DO
YOUR UI MUST NOT COMMUNICATE 
THAT THE PERSON CAN DO 
SOMETHING THEY CAN’T
GOOD USER CAPABILITY UX 
HELPS PEOPLE TO 
3. EASILY MANAGE 
PERMISSIONS
FIRST, SOME 
DEFINITIONS
SUBJECT, OBJECT, 
OPERATION & 
PERMISSION, CAPABILITY
SUBJECT: ACTIVE ENTITY, 
SUCH A USER OR A PROCESS.
OBJECT: THING 
THE SUBJECT ACTS UPON.
OPERATION: ACTION 
ATTEMPTED BY THE SUBJECT ON THE OBJECT.
PERMISSION: THE RIGHT 
TO PERFORM THE OPERATION.
CAPABILITY: ALLOWED OPERATION 
THE SUBJECT HAS PERMISSION 
TO PERFORM ON AN OBJECT.
SUBJECT: PERSON 
OBJECT: THING 
OPERATION: ACTION 
PERMISSION: GIVES CAPABILITY 
TO A PERSON TO PERFORM AN ACTION ON A THING
ACL , RBAC 
ACL: ACCESS CONTROL LIST 
RBAC: ROLE-BASED ACCESS CONTROL
ACL 
ACCESS CONTROL 
LIST
ACCESS CONTROL LIST
THE UX OF MAINTAINING 
AN ACCESS CONTROL LIST
HOW DO YOU KNOW 
WHICH ACTIONS TO ALLOW 
ON WHICH THINGS?
WHAT IF YOU NEEDED TO 
UPDATE SUCH A LIST?
GROSS
NOT GOOD UX
PERMISSION 
GROUPS?
ROLE-BASED ACCESS 
CONTROL TO THE RESCUE!
RBAC 
ROLE-BASED 
ACCESS CONTROL
ROLE: JOB FUNCTION 
IN AN ORGANIZATION
ROLE: COLLECTION OF 
CAPABILITIES
PEOPLE CAN HAVE 
MORE THAN ONE ROLE
WHEN A ROLE IS CHANGED, 
PEOPLE’S CAPABILITIES CHANGE TOO
ROLE-BASED ACCESS CONTROL 
or 
ACCESS CONTROL LISTS?
BAD UX LEADS TO 
MISTAKES
MISTAKES 
CAN LEAD TO VIOLATIONS OF THE 
PRINCIPLE OF 
LEAST PRIVILEGE
ROLE-BASED ACCESS CONTROL 
is better UX than 
ACCESS CONTROL LISTS
RECAP 
PART I
GOOD USER CAPABILITY UX 
HELPS PEOPLE TO 
1. AVOID MISTAKES 
2. UNDERSTAND THEIR CAPABILITIES 
3. EASILY MANAGE PERMISSIONS
1. AVOID MISTAKES 
BY FOLLOWING THE 
PRINCIPLE OF LEAST PRIVILEGE
PEOPLE SHOULD BE ABLE TO 
2. UNDERSTAND THEIR 
CAPABILITIES 
BECAUSE YOUR IU COMMUNICATES THEM
3. EASILY MANAGE 
PERMISSIONS 
BY USING ROLE-BASED ACCESS CONTROL
PART II 
IMPLEMENTING 
USER CAPABILITIES
BUT FIRST, MY 
ASSUMPTIONS
▸ Client-side rendered apps, 
▸ that use REST APIs to 
load and save data asynchronously, 
▸ and the server can tell the client details 
about the authenticated user. 
(Though, same ideas can apply to server-side rendered views)
IMPLEMENTATION CONSTRAINTS: 
1. ONLY GRANT NECESSARY CAPABILITIES 
2. UI MUST COMMUNICATE CAPABILITIES 
3. USE ROLE-BASED ACCESS CONTROL
0. THE SERVER-SIDE MUST 
ENFORCE THE RESTRICTIONS
THE SERVER-SIDE MUST 
ENFORCE THE RESTRICTIONS 
← OR ELSE STUFF LIKE THIS IS POSSIBLE
THE SERVER-SIDE MUST 
ENFORCE THE RESTRICTIONS, 
AND THE CLIENT-SIDE MUST 
REFLECT THE RESTRICTIONS
// Don’t do this 
if ( "Junior Warehouse Clerk" in user.roles || 
"Warehouse Clerk" in user.roles || 
"Warehouse Manager" in user.roles ) { 
// Show "View Orders" button ... 
}
// Do it like this! 
if ( "view orders" in user.capabilities ) { 
// Show "View Orders" button ... 
}
$.ajax( 
url: "/_api/me/capabilities", 
success: function (response) { 
user.capabilities = response.capabilities 
} 
})
// Checking for one capability 
if ( "view orders" in user.capabilities ) { 
// Show "View Orders" button ... 
}
// Checking for more than one capability 
if ( "view orders" in user.capabilities || 
"edit orders" in user.capabilities || 
"manage customers" in user.capabilities ) { 
// Show drop down menu icon ... 
}
[ THIS KIND OF ] 
CAPABILITY CHECKING 
IS ADDITIVE
can ( user, ["view orders"] ) 
// returns true if user can view orders 
can ( user, ["action one", "action two", "action three"] ) 
// returns true if the user can do any of the actions
function can (user, requiredCapabilities) { 
return requiredCapabilities.some(function (capability) { 
return capability in user.capabilities 
}) 
}
if ( can (user, ["do something"]) ) { 
// ... 
}
if ( can (user, ["do action", "do another action"]) ) { 
// ... 
}
WHAT ABOUT 
“LOGIC-LESS” TEMPLATES?
// in your view code 
mustache.render(template, { 
can: user.capabilities, 
// ... 
}) 
<!-- in your mustache template --> 
{{#can.viewOrders}} 
<a link=“/orders">View Orders</a> 
{{/can.viewOrders}}
<nav> 
{{#can.viewOrders}} 
<a link="/orders">View Orders</a> 
{{/can.viewOrders}} 
{{#can.createOrders}} 
<a link="/orders/new">Add Order</a> 
{{/can.createOrders}} 
</nav>
<!-- This doesn’t work --> 
{{#can.viewOrders}} 
{{#can.createOrders}} 
<nav> ... </nav> 
{{/can.createOrders}} 
{{/can.viewOrders}}
// Augment capabilities with view-specific ones 
if ( can(user, ["view orders", "create orders"]) ) { 
user.capabilities.viewMenu = true; 
} 
mustache.render(template, { 
can: user.capabilities, 
// ... 
})
{{#can.viewMenu}} 
<nav> ... </nav> 
{{/can.viewMenu}}
<!-- Handlebar template containing a “can” block helper --> 
{{#can "viewOrders editOrder"}} 
<nav> ... </nav> 
{{/can}} 
// Define the block helper ... 
function canBlockHelper (requiredCapabilities, options) { 
// ... 
return hasSomeCapabilities ? options.fn(this) : "" 
} 
// ... and register it as “can” 
Handlebars.registerHelper("can", canBlockHelper);
{{#can "viewOrders editOrder"}} 
<nav> 
{{#can "viewOrders"}} 
<a link="/orders">View Orders</a> 
{{/can}} 
{{#can "createOrders"}} 
<a link="/orders/new">Add Order</a> 
{{/can}} 
</nav> 
{{/can}}
# Use the same kind of “can” per route server-side 
get "/_api/orders" 
can ( user, "view orders" ) do 
# ... 
end 
end 
post "/_api/orders" 
can ( user, "add orders" ) do 
# ... 
end 
end
IN CONCLUSION …
IMPLEMENTATION CONSTRAINTS: 
1. ONLY GRANT NECESSARY CAPABILITIES 
2. UI MUST COMMUNICATE CAPABILITIES 
3. USE ROLE-BASED ACCESS CONTROL
CONSIDER WHEN IMPLEMENTING: 
1. ENFORCE IN BOTH SERVER AND CLIENT 
BUT MAKE THE SERVER THE AUTHORITY 
2. CHECK AGAINST CAPABILITIES, NOT ROLES
THANK YOU! TIFFANY CONROY – @THEOPHANI

Contenu connexe

Similaire à Lions and tigers and handling user capabilities - Tiffany Conroy - Codemotion Milan 2014

USER INTERFACE ANALYSIS - SAMPLE_for_PORTFOLIO
USER INTERFACE ANALYSIS - SAMPLE_for_PORTFOLIOUSER INTERFACE ANALYSIS - SAMPLE_for_PORTFOLIO
USER INTERFACE ANALYSIS - SAMPLE_for_PORTFOLIO
Frederick Zoreta
 

Similaire à Lions and tigers and handling user capabilities - Tiffany Conroy - Codemotion Milan 2014 (20)

Akka: Arquitetura Orientada a Atores
Akka: Arquitetura Orientada a AtoresAkka: Arquitetura Orientada a Atores
Akka: Arquitetura Orientada a Atores
 
Keeping Things Simple In A Growing AngularJS App.
Keeping Things Simple In A Growing AngularJS App.Keeping Things Simple In A Growing AngularJS App.
Keeping Things Simple In A Growing AngularJS App.
 
From Big to Massive – Scalability in AngularJS Applications
From Big to Massive – Scalability in AngularJS ApplicationsFrom Big to Massive – Scalability in AngularJS Applications
From Big to Massive – Scalability in AngularJS Applications
 
Introduction to UX
Introduction to UX Introduction to UX
Introduction to UX
 
Operations as a Service: Because Failure Still Happens
Operations as a Service: Because Failure Still Happens Operations as a Service: Because Failure Still Happens
Operations as a Service: Because Failure Still Happens
 
Troubleshooting Urouter Problems: WebEx Presentation
Troubleshooting Urouter Problems: WebEx PresentationTroubleshooting Urouter Problems: WebEx Presentation
Troubleshooting Urouter Problems: WebEx Presentation
 
User Tracking with Google Analytics and how it survives the break of the Glo...
 User Tracking with Google Analytics and how it survives the break of the Glo... User Tracking with Google Analytics and how it survives the break of the Glo...
User Tracking with Google Analytics and how it survives the break of the Glo...
 
Awright fedgeo
Awright fedgeoAwright fedgeo
Awright fedgeo
 
USER INTERFACE ANALYSIS - SAMPLE_for_PORTFOLIO
USER INTERFACE ANALYSIS - SAMPLE_for_PORTFOLIOUSER INTERFACE ANALYSIS - SAMPLE_for_PORTFOLIO
USER INTERFACE ANALYSIS - SAMPLE_for_PORTFOLIO
 
Use Cases
Use CasesUse Cases
Use Cases
 
Use Cases
Use CasesUse Cases
Use Cases
 
What is Flow? The lean principle demystified
What is Flow? The lean principle demystifiedWhat is Flow? The lean principle demystified
What is Flow? The lean principle demystified
 
Supporting Transactions
Supporting TransactionsSupporting Transactions
Supporting Transactions
 
Using and reusing CakePHP plugins
Using and reusing CakePHP pluginsUsing and reusing CakePHP plugins
Using and reusing CakePHP plugins
 
Why DevOps Needs to Embrace Distributed Tracing
Why DevOps Needs to Embrace Distributed TracingWhy DevOps Needs to Embrace Distributed Tracing
Why DevOps Needs to Embrace Distributed Tracing
 
Self-Service Operations: Because Failure Still Happens (Developer Edition)
Self-Service Operations: Because Failure Still Happens (Developer Edition)Self-Service Operations: Because Failure Still Happens (Developer Edition)
Self-Service Operations: Because Failure Still Happens (Developer Edition)
 
An Introduction to Usability
An Introduction to UsabilityAn Introduction to Usability
An Introduction to Usability
 
Why DevOps Needs to Embrace Distributed Tracing
Why DevOps Needs to Embrace Distributed TracingWhy DevOps Needs to Embrace Distributed Tracing
Why DevOps Needs to Embrace Distributed Tracing
 
KKBOX WWDC17 Notification and Autolayout - Jefferey
KKBOX WWDC17 Notification and Autolayout - JeffereyKKBOX WWDC17 Notification and Autolayout - Jefferey
KKBOX WWDC17 Notification and Autolayout - Jefferey
 
Specialization template
Specialization templateSpecialization template
Specialization template
 

Plus de Codemotion

Plus de Codemotion (20)

Fuzz-testing: A hacker's approach to making your code more secure | Pascal Ze...
Fuzz-testing: A hacker's approach to making your code more secure | Pascal Ze...Fuzz-testing: A hacker's approach to making your code more secure | Pascal Ze...
Fuzz-testing: A hacker's approach to making your code more secure | Pascal Ze...
 
Pompili - From hero to_zero: The FatalNoise neverending story
Pompili - From hero to_zero: The FatalNoise neverending storyPompili - From hero to_zero: The FatalNoise neverending story
Pompili - From hero to_zero: The FatalNoise neverending story
 
Pastore - Commodore 65 - La storia
Pastore - Commodore 65 - La storiaPastore - Commodore 65 - La storia
Pastore - Commodore 65 - La storia
 
Pennisi - Essere Richard Altwasser
Pennisi - Essere Richard AltwasserPennisi - Essere Richard Altwasser
Pennisi - Essere Richard Altwasser
 
Michel Schudel - Let's build a blockchain... in 40 minutes! - Codemotion Amst...
Michel Schudel - Let's build a blockchain... in 40 minutes! - Codemotion Amst...Michel Schudel - Let's build a blockchain... in 40 minutes! - Codemotion Amst...
Michel Schudel - Let's build a blockchain... in 40 minutes! - Codemotion Amst...
 
Richard Süselbeck - Building your own ride share app - Codemotion Amsterdam 2019
Richard Süselbeck - Building your own ride share app - Codemotion Amsterdam 2019Richard Süselbeck - Building your own ride share app - Codemotion Amsterdam 2019
Richard Süselbeck - Building your own ride share app - Codemotion Amsterdam 2019
 
Eward Driehuis - What we learned from 20.000 attacks - Codemotion Amsterdam 2019
Eward Driehuis - What we learned from 20.000 attacks - Codemotion Amsterdam 2019Eward Driehuis - What we learned from 20.000 attacks - Codemotion Amsterdam 2019
Eward Driehuis - What we learned from 20.000 attacks - Codemotion Amsterdam 2019
 
Francesco Baldassarri - Deliver Data at Scale - Codemotion Amsterdam 2019 -
Francesco Baldassarri  - Deliver Data at Scale - Codemotion Amsterdam 2019 - Francesco Baldassarri  - Deliver Data at Scale - Codemotion Amsterdam 2019 -
Francesco Baldassarri - Deliver Data at Scale - Codemotion Amsterdam 2019 -
 
Martin Förtsch, Thomas Endres - Stereoscopic Style Transfer AI - Codemotion A...
Martin Förtsch, Thomas Endres - Stereoscopic Style Transfer AI - Codemotion A...Martin Förtsch, Thomas Endres - Stereoscopic Style Transfer AI - Codemotion A...
Martin Förtsch, Thomas Endres - Stereoscopic Style Transfer AI - Codemotion A...
 
Melanie Rieback, Klaus Kursawe - Blockchain Security: Melting the "Silver Bul...
Melanie Rieback, Klaus Kursawe - Blockchain Security: Melting the "Silver Bul...Melanie Rieback, Klaus Kursawe - Blockchain Security: Melting the "Silver Bul...
Melanie Rieback, Klaus Kursawe - Blockchain Security: Melting the "Silver Bul...
 
Angelo van der Sijpt - How well do you know your network stack? - Codemotion ...
Angelo van der Sijpt - How well do you know your network stack? - Codemotion ...Angelo van der Sijpt - How well do you know your network stack? - Codemotion ...
Angelo van der Sijpt - How well do you know your network stack? - Codemotion ...
 
Lars Wolff - Performance Testing for DevOps in the Cloud - Codemotion Amsterd...
Lars Wolff - Performance Testing for DevOps in the Cloud - Codemotion Amsterd...Lars Wolff - Performance Testing for DevOps in the Cloud - Codemotion Amsterd...
Lars Wolff - Performance Testing for DevOps in the Cloud - Codemotion Amsterd...
 
Sascha Wolter - Conversational AI Demystified - Codemotion Amsterdam 2019
Sascha Wolter - Conversational AI Demystified - Codemotion Amsterdam 2019Sascha Wolter - Conversational AI Demystified - Codemotion Amsterdam 2019
Sascha Wolter - Conversational AI Demystified - Codemotion Amsterdam 2019
 
Michele Tonutti - Scaling is caring - Codemotion Amsterdam 2019
Michele Tonutti - Scaling is caring - Codemotion Amsterdam 2019Michele Tonutti - Scaling is caring - Codemotion Amsterdam 2019
Michele Tonutti - Scaling is caring - Codemotion Amsterdam 2019
 
Pat Hermens - From 100 to 1,000+ deployments a day - Codemotion Amsterdam 2019
Pat Hermens - From 100 to 1,000+ deployments a day - Codemotion Amsterdam 2019Pat Hermens - From 100 to 1,000+ deployments a day - Codemotion Amsterdam 2019
Pat Hermens - From 100 to 1,000+ deployments a day - Codemotion Amsterdam 2019
 
James Birnie - Using Many Worlds of Compute Power with Quantum - Codemotion A...
James Birnie - Using Many Worlds of Compute Power with Quantum - Codemotion A...James Birnie - Using Many Worlds of Compute Power with Quantum - Codemotion A...
James Birnie - Using Many Worlds of Compute Power with Quantum - Codemotion A...
 
Don Goodman-Wilson - Chinese food, motor scooters, and open source developmen...
Don Goodman-Wilson - Chinese food, motor scooters, and open source developmen...Don Goodman-Wilson - Chinese food, motor scooters, and open source developmen...
Don Goodman-Wilson - Chinese food, motor scooters, and open source developmen...
 
Pieter Omvlee - The story behind Sketch - Codemotion Amsterdam 2019
Pieter Omvlee - The story behind Sketch - Codemotion Amsterdam 2019Pieter Omvlee - The story behind Sketch - Codemotion Amsterdam 2019
Pieter Omvlee - The story behind Sketch - Codemotion Amsterdam 2019
 
Dave Farley - Taking Back “Software Engineering” - Codemotion Amsterdam 2019
Dave Farley - Taking Back “Software Engineering” - Codemotion Amsterdam 2019Dave Farley - Taking Back “Software Engineering” - Codemotion Amsterdam 2019
Dave Farley - Taking Back “Software Engineering” - Codemotion Amsterdam 2019
 
Joshua Hoffman - Should the CTO be Coding? - Codemotion Amsterdam 2019
Joshua Hoffman - Should the CTO be Coding? - Codemotion Amsterdam 2019Joshua Hoffman - Should the CTO be Coding? - Codemotion Amsterdam 2019
Joshua Hoffman - Should the CTO be Coding? - Codemotion Amsterdam 2019
 

Dernier

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
panagenda
 

Dernier (20)

ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challenges
 
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
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
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
 
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
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
"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 ...
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 
Apidays Singapore 2024 - Modernizing Securities Finance by Madhu Subbu
Apidays Singapore 2024 - Modernizing Securities Finance by Madhu SubbuApidays Singapore 2024 - Modernizing Securities Finance by Madhu Subbu
Apidays Singapore 2024 - Modernizing Securities Finance by Madhu Subbu
 
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
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...
Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...
Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...
 
Apidays 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...
 
FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 
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
 

Lions and tigers and handling user capabilities - Tiffany Conroy - Codemotion Milan 2014