SlideShare uma empresa Scribd logo
1 de 135
Baixar para ler offline
@FGRibreau
DEVELOPMENT
PRINCIPLES
&
PHILOSOPHY
François-Guillaume
RIBREAU
@FGRibreau
Bringr
Bringr
Performance oriented
Social MediaManagement
Bringr
Leader européen de
l'engagement client en
temps réel.
(click2chat, click2call,
click2video, community, ...)
#sold
Bringr
Developer oriented
real-time monitoring and
administration service
for Redis
@FGRibreau
COMPUTER SCIENCE IS
ABOUT TRADEOFFS
@FGRibreau
VS
WHEN YOU FIGHT TO SURVIVE
BETTER CHOOSE THE RIGHT PATH
@FGRibreau
How can I make the
right choice
while coding?
@FGRibreau
EASY.
@FGRibreau
FOLLOW AND DISCOVER
PRINCIPLES
@FGRibreau
SEPARATION OF
CONCERNS
@FGRibreau
SEPARATION OF
CONCERNS
@FGRibreau
A.K.A THINK ABOUT ____#ROLES
@FGRibreau
MONOLITH(S)
@FGRibreau
Bringr
#monolith
Use the Separation of Concerns Luke!
Morpheus
(not sure about this one)
@FGRibreau
Bringr
Bringr
Strategy
Bringr
Impact
Bringr
...
Bringr
Sourcing
Bringr
...
Bringr
Alerts
@FGRibreau
Bringr
Strategy
Bringr
Impact
Bringr
...
Bringr
Sourcing
Bringr
...
Bringr
Alerts
@FGRibreau
Bringr Strategy Bringr Impact
Bringr Backend
....
Bringr Sourcing Bringr Account
...
Bringr Alerts
@FGRibreau
Bringr Strategy Bringr Impact
Bringr Backend
....
Bringr Sourcing Bringr Account
...
Bringr Alerts
Filtering
Statistics
Rules EnginePublishing
Statistics Updater
UIUIUI
Indexing
G+
Vimeo
Facebook
Youtube
Wordpress
Twitter
Notifications
... ... ...
@FGRibreau
“DIVIDE MICROSERVICES
BETWEEN ACTIVE AND
PASSIVE ONES
@FGRibreau
MICROSERVICE TYPE DEFINITION
ACTIVE ACT ON SOMETHING
PASSIVE REACT TO SOMETHING
@FGRibreau
MICROSERVICE TYPE e.g. IN THE ASYNC WORLD
ACTIVE PUBLISHER
PASSIVE CONSUMER
#AMQP #RabbitMQ
@FGRibreau
THE LESS ACTIVE ONES, THE BETTER
@FGRibreau
THE LESS ACTIVE ONES, THE BETTER
THE MORE PASSIVE ONES, THE BETTER
@FGRibreau
“DIVIDE STATE AND LOGIC
INSIDE MICROSERVICESMICROSERVICES
@FGRibreau
“DIVIDE STATE AND LOGIC
INSIDE MICROSERVICESCOMPONENTS
@FGRibreau
My Worker My Worker My Worker
State Repository
#atomic
#concurrency #resilient #scaleOut
@FGRibreau
State Repository
#parallelism #resilient #scaleOut
State Repository
My Worker A My Worker B
@FGRibreau
EACH MICROSERVICE SHOULD
HAVE ITS OWN RESPONSIBILITY
@FGRibreau
EACH MICROSERVICE SHOULD
HAVE ITS OWN RESPONSIBILITY
limit bug
domain
@FGRibreau
EACH MICROSERVICE SHOULD
HAVE ITS OWN RESPONSIBILITY
limit bug
domain
clear
contracts
@FGRibreau
EACH MICROSERVICE SHOULD
HAVE ITS OWN RESPONSIBILITY
limit bug
domain
clear
contracts
easier
scaling
@FGRibreau
EACH MICROSERVICE SHOULD
HAVE ITS OWN RESPONSIBILITY
limit bug
domain
improved
velocity
clear
contracts
easier
scaling
LET’S ADD
ANOTHER
PRINCIPLE
@FGRibreau
“FAIL FAST, FAIL OFTEN
@FGRibreau
crash process as soon as possible
log errors
restart process
alert developer
@FGRibreau
(NodeJS) process
ramcpu I/O
OS
fail fast, fail often
@FGRibreau
(NodeJS) process
ramcpu I/O
OS
fail fast, fail often
CPU, RAM and I/O are limited
NodeJS process can’t always monitor himself
@FGRibreau
WE DO WANT
CONSTRAINTS
@FGRibreau
WE DO WANT
CONSTRAINTS
No more than 90% CPU during X mins
@FGRibreau
WE DO WANT
CONSTRAINTS
No more than 90% CPU during X mins
No more than 512Mo of RAM during X mins
LET’S ADD
ANOTHER
PRINCIPLE
@FGRibreau
“EVERYTHING SHOULD
BE LIMITED IN BOTH
SPACE & TIME
@FGRibreau
NodeJS process
ramcpu I/O
OS
fail fast, fail often
@FGRibreau
NodeJS process
ramcpu I/O
OS
fail fast, fail often
Supervisor
@FGRibreau
NodeJS process
ramcpu I/O
OS
fail fast, fail often
Supervisor
limited in space &
time
@FGRibreau
NodeJS process
dev staging prod
CONFIGURATION
MANAGEMENT
@FGRibreau
//	
  config.js
module.exports	
  =	
  function(){
	
  	
  	
  	
  switch(process.env.NODE_ENV){
	
  	
  	
  	
  	
  	
  	
  	
  case	
  'development':
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  return	
  {dev	
  setting};
	
  	
  	
  	
  	
  	
  	
  	
  case	
  'production':
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  return	
  {prod	
  settings};
	
  	
  	
  	
  	
  	
  	
  	
  default:
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  return	
  {error	
  or	
  other	
  settings};
	
  	
  	
  	
  }
};
@FGRibreau
app.configure('development',	
  function(){
	
  	
  app.set('configPath',	
  './confLocal');
	
  	
  //	
  “./confLocal”	
  is	
  a	
  constant
});
app.configure('production',	
  function(){
	
  	
  app.set('configPath',	
  './confProduction');
	
  //	
  “./confProduction”	
  is	
  a	
  constant
});
@FGRibreau
NodeJS process
dev staging prod
SHOULD MY PROCESS KNOW
ITS OWN CONFIGURATION?
NOPE.
@FGRibreau
constants files
environment
variables
distributed
CONFIGURATION
@FGRibreau
constants files
environment
variables
distributed
Simplicity Genericity
Knowing every running
environments
One configuration
to rule them all
CONFIGURATION
LET’S INVENT
A NEW
PRINCIPLE
@FGRibreau
“EVERY CONSTANT
NUMBER, BOOLEAN OR STRING*
SHOULD BE
CONFIGURABLE
@FGRibreau
var env = require('common-env')(logger);
var config = env.getOrElseAll({
amqp: {
login: 'guest',
password: 'guest',
host: 'localhost',
port: 5672,
reconnect: false
}
});
var conn = require('amqp').createConnection(config.amqp);
AMQP_LOGIN="user" AMQP_PASSWORD="azerty" node server.js
npm install common-env
https://github.com/FGRibreau/common-env
@FGRibreau
NodeJS processLauncher
SoC FTW
env. vars.
@FGRibreau
But my cloud provider uses
AMQP_ADDON_LOGIN
what should I do?
@FGRibreau
?
var config = env.getOrElseAll({
amqp: {
addon:{
login: 'guest',
password: 'guest',
host: 'localhost',
port: 5672,
reconnect: false
}
}
});
var conn = amqp.createConnection(config.amqp.addon);
@FGRibreau
NOPE.
@FGRibreau
NodeJS processLauncher
SoC
env. vars.
@FGRibreau
NodeJS processLauncher
SoC
env. vars.
Internal code
is dependent from
external naming convention
@FGRibreau
var config = env.getOrElseAll({
amqp: {
login: {
$default: 'guest',
$aliases: ['AMQP_ADDON_LOGIN']
},
password: 'guest',
host: 'localhost',
port: 5672,
reconnect: false
}
});
var conn = amqp.createConnection(config.amqp);
// /config.js
var logger = require('my-logger').createLogger();
var env = require('common-env')(logger);
module.exports = env.getOrElseAll({
amqp: {
login: 'guest'
// ...
}
});
// /app.js
var config = require('./config');
// /src/my/own/module.js
var config = require('../../../config');
@FGRibreau
Does it respect
SoC?
NOPE.
var logger = require('my-logger').createLogger();
var env = require('common-env')(logger);
module.exports = env.getOrElseAll({
amqp: {
login: 'guest'
// ...
}
});
/config.js
var logger = require('my-logger').createLogger();
var env = require('common-env')(logger);
module.exports = env.getOrElseAll({
amqp: {
login: 'guest'
// ...
}
});
/config.js
var logger = require('my-logger').createLogger();
var env = require('common-env')(logger);
module.exports = env.getOrElseAll({
amqp: {
login: 'guest'
// ...
}
});
/config.js
// config now asks for logger
module.exports = function (logger) {
var env = require('common-env')(logger);
return env.getOrElseAll({
amqp: {
login: 'guest'
// ...
}
});
};
/config.js
// config now asks for logger
module.exports = function (logger) {
var env = require('common-env')(logger);
return env.getOrElseAll({
amqp: {
login: 'guest'
// ...
}
});
};
/config.js
// caller, must specify logger to use config
// app.js
var logger = require('my-logger').createLogger();
var config = require('./config')(logger);
HUM I THINK
I KNOW THIS
PRINCIPLE
@FGRibreau
DEPENDENCY
INVERSION
This is the D from S.O.L.I.D:
@FGRibreau
AGAIN.
// /app.js
var config = require('./config')(logger);
// /src/my/own/module.js
var config = require('../../../config')(logger);
✘ DI
✘ DRY
// /app.js
var config = require('./config')(logger);
// /src/my/own/module.js
module.exports = function (config) {
};
✔ DI
✔ DRY
HUM, LET CREATE US
A REMINDER
@FGRibreau
“”../“ IS A CODE SMELL
@FGRibreau
LET’S TALK ABOUT
CRON
@FGRibreau
CRON
@FGRibreau
CRON
#USERS
CRON IS NOT
WORKING ANYMORE
#YOU
@FGRibreau
CRON
@FGRibreau
CRON
#USERS
CRON IS NOT
WORKING ANYMORE
#YOU
@FGRibreau
@FGRibreau
Process (e.g. cron)
ramcpu I/O
OS
@FGRibreau
server
Process (e.g. cron)
ramcpu I/O
OS
Supervisor
@FGRibreau
@FGRibreau
?
@FGRibreau
?
@FGRibreau
IT’S ALL ABOUT
TRADEOFFS
LET’S INVENT
A NEW
PRINCIPLE
@FGRibreau
“I SHOULD ALWAYS BE
PROACTIVELY ALERTED
@FGRibreau
NOTIFICATIONS
ALERTS
!=
@FGRibreau
OK.
LET’S RECAP
@FGRibreau
“DIVIDE MICROSERVICES
BETWEEN ACTIVE AND
PASSIVE ONES
@FGRibreau
“DIVIDE STATE AND LOGIC
@FGRibreau
“EVERYTHING SHOULD
BE LIMITED IN BOTH
SPACE & TIME
@FGRibreau
“EVERY CONSTANT
NUMBER, BOOLEAN OR STRING*
SHOULD BE
CONFIGURABLE
@FGRibreau
“”../“ IS A CODE SMELL
@FGRibreau
“I SHOULD ALWAYS BE
PROACTIVELY ALERTED
@FGRibreau
“[add your own]...
@FGRibreau
THE MOST IMPORTANT
PRINCIPLE BEING
@FGRibreau
SEPARATION
of
CONCERNS
@FGRibreau
LET’S GO FURTHER
@FGRibreau
PRINCIPLE
Code dependencies should
always be up-to-date
@FGRibreau
AUTOMATION
Build should break if code dependencies are
not up-to-date
@FGRibreau
PRINCIPLE
Code style should
always be consistent
@FGRibreau
AUTOMATION
Run a style-checker at each build
@FGRibreau
PRINCIPLE
Every developers should follow D.R.Y.
(Don’t Repeat Yourself)
@FGRibreau
AUTOMATION
Run a structural code similarities tool
at each build
@FGRibreau
HERE IS WHAT
WE DID
@FGRibreau
https://github.com/FGRibreau/check-build
ONE LAST
THING
@FGRibreau
“DON’T CREATE
CONVENTIONS
YOU CAN’T
ENFORCE
@FGRibreau
PRINCIPLES
@FGRibreau
PRINCIPLES
CONSTRAINTS
@FGRibreau
PRINCIPLES
AUTOMATION
CONSTRAINTS
@FGRibreau
PRINCIPLES
CONVENTIONS
AUTOMATION
CONSTRAINTS
@FGRibreau
PRINCIPLES
CONVENTIONS
AUTOMATION
CONSTRAINTS
CODE
Follow me @FGRibreau
Questions?
Join us @iAdvize!
Thank you!

Mais conteúdo relacionado

Mais procurados

Psgi Plack Sfpm
Psgi Plack SfpmPsgi Plack Sfpm
Psgi Plack Sfpm
som_nangia
 
Building a desktop app with HTTP::Engine, SQLite and jQuery
Building a desktop app with HTTP::Engine, SQLite and jQueryBuilding a desktop app with HTTP::Engine, SQLite and jQuery
Building a desktop app with HTTP::Engine, SQLite and jQuery
Tatsuhiko Miyagawa
 
Single Page Web Applications with CoffeeScript, Backbone and Jasmine
Single Page Web Applications with CoffeeScript, Backbone and JasmineSingle Page Web Applications with CoffeeScript, Backbone and Jasmine
Single Page Web Applications with CoffeeScript, Backbone and Jasmine
Paulo Ragonha
 
Remedie: Building a desktop app with HTTP::Engine, SQLite and jQuery
Remedie: Building a desktop app with HTTP::Engine, SQLite and jQueryRemedie: Building a desktop app with HTTP::Engine, SQLite and jQuery
Remedie: Building a desktop app with HTTP::Engine, SQLite and jQuery
Tatsuhiko Miyagawa
 
Plack perl superglue for web frameworks and servers
Plack perl superglue for web frameworks and serversPlack perl superglue for web frameworks and servers
Plack perl superglue for web frameworks and servers
Tatsuhiko Miyagawa
 
Testing of javacript
Testing of javacriptTesting of javacript
Testing of javacript
Lei Kang
 

Mais procurados (19)

Psgi Plack Sfpm
Psgi Plack SfpmPsgi Plack Sfpm
Psgi Plack Sfpm
 
Jedi Mind Tricks in Git
Jedi Mind Tricks in GitJedi Mind Tricks in Git
Jedi Mind Tricks in Git
 
Intro to PSGI and Plack
Intro to PSGI and PlackIntro to PSGI and Plack
Intro to PSGI and Plack
 
Plack at YAPC::NA 2010
Plack at YAPC::NA 2010Plack at YAPC::NA 2010
Plack at YAPC::NA 2010
 
Mojolicious and REST
Mojolicious and RESTMojolicious and REST
Mojolicious and REST
 
Plack - LPW 2009
Plack - LPW 2009Plack - LPW 2009
Plack - LPW 2009
 
Building a desktop app with HTTP::Engine, SQLite and jQuery
Building a desktop app with HTTP::Engine, SQLite and jQueryBuilding a desktop app with HTTP::Engine, SQLite and jQuery
Building a desktop app with HTTP::Engine, SQLite and jQuery
 
Introduction to Griffon
Introduction to GriffonIntroduction to Griffon
Introduction to Griffon
 
Single Page Web Applications with CoffeeScript, Backbone and Jasmine
Single Page Web Applications with CoffeeScript, Backbone and JasmineSingle Page Web Applications with CoffeeScript, Backbone and Jasmine
Single Page Web Applications with CoffeeScript, Backbone and Jasmine
 
Remedie: Building a desktop app with HTTP::Engine, SQLite and jQuery
Remedie: Building a desktop app with HTTP::Engine, SQLite and jQueryRemedie: Building a desktop app with HTTP::Engine, SQLite and jQuery
Remedie: Building a desktop app with HTTP::Engine, SQLite and jQuery
 
Plack perl superglue for web frameworks and servers
Plack perl superglue for web frameworks and serversPlack perl superglue for web frameworks and servers
Plack perl superglue for web frameworks and servers
 
Plack at OSCON 2010
Plack at OSCON 2010Plack at OSCON 2010
Plack at OSCON 2010
 
PSGI/Plack OSDC.TW
PSGI/Plack OSDC.TWPSGI/Plack OSDC.TW
PSGI/Plack OSDC.TW
 
"Swoole: double troubles in c", Alexandr Vronskiy
"Swoole: double troubles in c", Alexandr Vronskiy"Swoole: double troubles in c", Alexandr Vronskiy
"Swoole: double troubles in c", Alexandr Vronskiy
 
SDPHP - Percona Toolkit (It's Basically Magic)
SDPHP - Percona Toolkit (It's Basically Magic)SDPHP - Percona Toolkit (It's Basically Magic)
SDPHP - Percona Toolkit (It's Basically Magic)
 
Speed up web APIs with Expressive and Swoole (PHP Day 2018)
Speed up web APIs with Expressive and Swoole (PHP Day 2018) Speed up web APIs with Expressive and Swoole (PHP Day 2018)
Speed up web APIs with Expressive and Swoole (PHP Day 2018)
 
Release with confidence
Release with confidenceRelease with confidence
Release with confidence
 
Tatsumaki
TatsumakiTatsumaki
Tatsumaki
 
Testing of javacript
Testing of javacriptTesting of javacript
Testing of javacript
 

Semelhante a Development Principles & Philosophy

DDD on example of Symfony (Webcamp Odessa 2014)
DDD on example of Symfony (Webcamp Odessa 2014)DDD on example of Symfony (Webcamp Odessa 2014)
DDD on example of Symfony (Webcamp Odessa 2014)
Oleg Zinchenko
 
DDD on example of Symfony (SfCampUA14)
DDD on example of Symfony (SfCampUA14)DDD on example of Symfony (SfCampUA14)
DDD on example of Symfony (SfCampUA14)
Oleg Zinchenko
 
Bfg Ploneconf Oct2008
Bfg Ploneconf Oct2008Bfg Ploneconf Oct2008
Bfg Ploneconf Oct2008
Jeffrey Clark
 

Semelhante a Development Principles & Philosophy (20)

Introduction to Domain-Driven Design
Introduction to Domain-Driven DesignIntroduction to Domain-Driven Design
Introduction to Domain-Driven Design
 
Mojolicious
MojoliciousMojolicious
Mojolicious
 
Deployment talk dpc 13
Deployment talk dpc 13Deployment talk dpc 13
Deployment talk dpc 13
 
"I have a framework idea" - Repeat less, share more.
"I have a framework idea" - Repeat less, share more."I have a framework idea" - Repeat less, share more.
"I have a framework idea" - Repeat less, share more.
 
Deploying Symfony | symfony.cat
Deploying Symfony | symfony.catDeploying Symfony | symfony.cat
Deploying Symfony | symfony.cat
 
DDD on example of Symfony (Webcamp Odessa 2014)
DDD on example of Symfony (Webcamp Odessa 2014)DDD on example of Symfony (Webcamp Odessa 2014)
DDD on example of Symfony (Webcamp Odessa 2014)
 
Mojolicious - A new hope
Mojolicious - A new hopeMojolicious - A new hope
Mojolicious - A new hope
 
2014-11-11 Multiple Approaches to Managing Puppet Modules @ Puppet Camp Seattle
2014-11-11 Multiple Approaches to Managing Puppet Modules @ Puppet Camp Seattle2014-11-11 Multiple Approaches to Managing Puppet Modules @ Puppet Camp Seattle
2014-11-11 Multiple Approaches to Managing Puppet Modules @ Puppet Camp Seattle
 
JavaScript, React Native and Performance at react-europe 2016
JavaScript, React Native and Performance at react-europe 2016JavaScript, React Native and Performance at react-europe 2016
JavaScript, React Native and Performance at react-europe 2016
 
Hybrid Tips & Tricks
Hybrid Tips & TricksHybrid Tips & Tricks
Hybrid Tips & Tricks
 
Advanced Topics in Continuous Deployment
Advanced Topics in Continuous DeploymentAdvanced Topics in Continuous Deployment
Advanced Topics in Continuous Deployment
 
DDD on example of Symfony (SfCampUA14)
DDD on example of Symfony (SfCampUA14)DDD on example of Symfony (SfCampUA14)
DDD on example of Symfony (SfCampUA14)
 
Bfg Ploneconf Oct2008
Bfg Ploneconf Oct2008Bfg Ploneconf Oct2008
Bfg Ploneconf Oct2008
 
Rapid Prototyping FTW!!!
Rapid Prototyping FTW!!!Rapid Prototyping FTW!!!
Rapid Prototyping FTW!!!
 
Vagrant for real
Vagrant for realVagrant for real
Vagrant for real
 
How we integrate & deploy Mobile Apps with Travis CI
How we integrate & deploy Mobile Apps with Travis CIHow we integrate & deploy Mobile Apps with Travis CI
How we integrate & deploy Mobile Apps with Travis CI
 
Mojolicious lite
Mojolicious liteMojolicious lite
Mojolicious lite
 
NanoSec Conference 2019: Code Execution Analysis in Mobile Apps - Abdullah Jo...
NanoSec Conference 2019: Code Execution Analysis in Mobile Apps - Abdullah Jo...NanoSec Conference 2019: Code Execution Analysis in Mobile Apps - Abdullah Jo...
NanoSec Conference 2019: Code Execution Analysis in Mobile Apps - Abdullah Jo...
 
TYPO3 Extension development using new Extbase framework
TYPO3 Extension development using new Extbase frameworkTYPO3 Extension development using new Extbase framework
TYPO3 Extension development using new Extbase framework
 
Php task runners
Php task runnersPhp task runners
Php task runners
 

Mais de François-Guillaume Ribreau

Mais de François-Guillaume Ribreau (12)

REX LEAN- Créer un SaaS et être rentable après 6 mois
REX LEAN- Créer un SaaS et être rentable après 6 moisREX LEAN- Créer un SaaS et être rentable après 6 mois
REX LEAN- Créer un SaaS et être rentable après 6 mois
 
Une plateforme moderne pour le groupe SIPA/Ouest-France 
Une plateforme moderne pour le groupe SIPA/Ouest-France Une plateforme moderne pour le groupe SIPA/Ouest-France 
Une plateforme moderne pour le groupe SIPA/Ouest-France 
 
[BreizhCamp, format 15min] Une api rest et GraphQL sans code grâce à PostgR...
[BreizhCamp, format 15min] Une api rest et GraphQL sans code grâce à PostgR...[BreizhCamp, format 15min] Une api rest et GraphQL sans code grâce à PostgR...
[BreizhCamp, format 15min] Une api rest et GraphQL sans code grâce à PostgR...
 
RedisConf 2016 - Redis usage and ecosystem
RedisConf 2016 - Redis usage and ecosystemRedisConf 2016 - Redis usage and ecosystem
RedisConf 2016 - Redis usage and ecosystem
 
Implementing pattern-matching in JavaScript (full version)
Implementing pattern-matching in JavaScript (full version)Implementing pattern-matching in JavaScript (full version)
Implementing pattern-matching in JavaScript (full version)
 
Automatic constraints as a team maturity accelerator for startups
Automatic constraints as a team maturity accelerator for startupsAutomatic constraints as a team maturity accelerator for startups
Automatic constraints as a team maturity accelerator for startups
 
Les enjeux de l'information et de l'algorithmique dans notre société
Les enjeux de l'information et de l'algorithmique dans notre sociétéLes enjeux de l'information et de l'algorithmique dans notre société
Les enjeux de l'information et de l'algorithmique dans notre société
 
How I monitor SaaS products
How I monitor SaaS productsHow I monitor SaaS products
How I monitor SaaS products
 
Continous Integration of (JS) projects & check-build philosophy
Continous Integration of (JS) projects & check-build philosophyContinous Integration of (JS) projects & check-build philosophy
Continous Integration of (JS) projects & check-build philosophy
 
Introduction to Redis
Introduction to RedisIntroduction to Redis
Introduction to Redis
 
Approfondissement CSS3
Approfondissement CSS3Approfondissement CSS3
Approfondissement CSS3
 
Découverte HTML5/CSS3
Découverte HTML5/CSS3Découverte HTML5/CSS3
Découverte HTML5/CSS3
 

Último

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
Safe Software
 
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
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
WSO2
 

Último (20)

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...
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
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...
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
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...
 
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
 
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, ...
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
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
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 
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
 
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
 
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
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
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?
 
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
 
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
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
 

Development Principles & Philosophy