Development Principles & Philosophy

François-Guillaume Ribreau
François-Guillaume RibreauFull-stack CTO 🚀, iAdvize Architect & Lead Dev, ex-Bringr Co-founder, Redsmin Founder, Passionate Lecturer à iAdvize
@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
Development Principles & Philosophy
@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
... ... ...
Development Principles & Philosophy
@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
Development Principles & Philosophy
@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
Development Principles & Philosophy
@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);
Development Principles & Philosophy
// /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!
1 sur 135

Recommandé

⛳️ Votre API passe-t-elle le contrôle technique ? par
⛳️ Votre API passe-t-elle le contrôle technique ?⛳️ Votre API passe-t-elle le contrôle technique ?
⛳️ Votre API passe-t-elle le contrôle technique ?François-Guillaume Ribreau
3.2K vues204 diapositives
[BreizhCamp, format 15min] Construire et automatiser l'ecosystème de son Saa... par
[BreizhCamp, format 15min] Construire et automatiser l'ecosystème de son Saa...[BreizhCamp, format 15min] Construire et automatiser l'ecosystème de son Saa...
[BreizhCamp, format 15min] Construire et automatiser l'ecosystème de son Saa...François-Guillaume Ribreau
2.6K vues68 diapositives
Choisir entre une API RPC, SOAP, REST, GraphQL? 
Et si le problème était ai... par
Choisir entre une API  RPC, SOAP, REST, GraphQL?  
Et si le problème était ai...Choisir entre une API  RPC, SOAP, REST, GraphQL?  
Et si le problème était ai...
Choisir entre une API RPC, SOAP, REST, GraphQL? 
Et si le problème était ai...François-Guillaume Ribreau
2.7K vues57 diapositives
He stopped using for/while loops, you won't believe what happened next! par
He stopped using for/while loops, you won't believe what happened next!He stopped using for/while loops, you won't believe what happened next!
He stopped using for/while loops, you won't believe what happened next!François-Guillaume Ribreau
1.2K vues71 diapositives
Implementing pattern-matching in JavaScript (short version) par
Implementing pattern-matching in JavaScript (short version)Implementing pattern-matching in JavaScript (short version)
Implementing pattern-matching in JavaScript (short version)François-Guillaume Ribreau
2.3K vues41 diapositives
Introduction to Grunt.js on Taiwan JavaScript Conference par
Introduction to Grunt.js on Taiwan JavaScript ConferenceIntroduction to Grunt.js on Taiwan JavaScript Conference
Introduction to Grunt.js on Taiwan JavaScript ConferenceBo-Yi Wu
40.4K vues153 diapositives

Contenu connexe

Tendances

Psgi Plack Sfpm par
Psgi Plack SfpmPsgi Plack Sfpm
Psgi Plack Sfpmsom_nangia
1.8K vues92 diapositives
Jedi Mind Tricks in Git par
Jedi Mind Tricks in GitJedi Mind Tricks in Git
Jedi Mind Tricks in GitJohan Abildskov
710 vues98 diapositives
Intro to PSGI and Plack par
Intro to PSGI and PlackIntro to PSGI and Plack
Intro to PSGI and PlackTatsuhiko Miyagawa
4K vues79 diapositives
Plack at YAPC::NA 2010 par
Plack at YAPC::NA 2010Plack at YAPC::NA 2010
Plack at YAPC::NA 2010Tatsuhiko Miyagawa
3.7K vues117 diapositives
Mojolicious and REST par
Mojolicious and RESTMojolicious and REST
Mojolicious and RESTJonas Brømsø
3.8K vues11 diapositives
Plack - LPW 2009 par
Plack - LPW 2009Plack - LPW 2009
Plack - LPW 2009Tatsuhiko Miyagawa
2.4K vues93 diapositives

Tendances(19)

Psgi Plack Sfpm par som_nangia
Psgi Plack SfpmPsgi Plack Sfpm
Psgi Plack Sfpm
som_nangia1.8K vues
Building a desktop app with HTTP::Engine, SQLite and jQuery par Tatsuhiko Miyagawa
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 Miyagawa4.2K vues
Single Page Web Applications with CoffeeScript, Backbone and Jasmine par Paulo Ragonha
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 Ragonha24.6K vues
Remedie: Building a desktop app with HTTP::Engine, SQLite and jQuery par Tatsuhiko Miyagawa
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 Miyagawa39.1K vues
Plack perl superglue for web frameworks and servers par Tatsuhiko Miyagawa
Plack perl superglue for web frameworks and serversPlack perl superglue for web frameworks and servers
Plack perl superglue for web frameworks and servers
Tatsuhiko Miyagawa6.7K vues
"Swoole: double troubles in c", Alexandr Vronskiy par Fwdays
"Swoole: double troubles in c", Alexandr Vronskiy"Swoole: double troubles in c", Alexandr Vronskiy
"Swoole: double troubles in c", Alexandr Vronskiy
Fwdays872 vues
SDPHP - Percona Toolkit (It's Basically Magic) par Robert Swisher
SDPHP - Percona Toolkit (It's Basically Magic)SDPHP - Percona Toolkit (It's Basically Magic)
SDPHP - Percona Toolkit (It's Basically Magic)
Robert Swisher1.9K vues
Release with confidence par John Congdon
Release with confidenceRelease with confidence
Release with confidence
John Congdon1.8K vues
Testing of javacript par Lei Kang
Testing of javacriptTesting of javacript
Testing of javacript
Lei Kang3K vues

Similaire à Development Principles & Philosophy

Introduction to Domain-Driven Design par
Introduction to Domain-Driven DesignIntroduction to Domain-Driven Design
Introduction to Domain-Driven DesignYoan-Alexander Grigorov
1K vues68 diapositives
Mojolicious par
MojoliciousMojolicious
MojoliciousMarcus Ramberg
4.4K vues56 diapositives
Deployment talk dpc 13 par
Deployment talk dpc 13Deployment talk dpc 13
Deployment talk dpc 13Robbert van den Bogerd
1.4K vues76 diapositives
"I have a framework idea" - Repeat less, share more. par
"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.Fabio Milano
1.3K vues80 diapositives
Deploying Symfony | symfony.cat par
Deploying Symfony | symfony.catDeploying Symfony | symfony.cat
Deploying Symfony | symfony.catPablo Godel
2.8K vues149 diapositives
DDD on example of Symfony (Webcamp Odessa 2014) par
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
783 vues60 diapositives

Similaire à Development Principles & Philosophy(20)

"I have a framework idea" - Repeat less, share more. par Fabio Milano
"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.
Fabio Milano1.3K vues
Deploying Symfony | symfony.cat par Pablo Godel
Deploying Symfony | symfony.catDeploying Symfony | symfony.cat
Deploying Symfony | symfony.cat
Pablo Godel2.8K vues
DDD on example of Symfony (Webcamp Odessa 2014) par Oleg Zinchenko
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 Zinchenko783 vues
2014-11-11 Multiple Approaches to Managing Puppet Modules @ Puppet Camp Seattle par garrett honeycutt
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
garrett honeycutt1.6K vues
JavaScript, React Native and Performance at react-europe 2016 par Tadeu Zagallo
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
Tadeu Zagallo2.1K vues
Advanced Topics in Continuous Deployment par Mike Brittain
Advanced Topics in Continuous DeploymentAdvanced Topics in Continuous Deployment
Advanced Topics in Continuous Deployment
Mike Brittain8.4K vues
DDD on example of Symfony (SfCampUA14) par Oleg Zinchenko
DDD on example of Symfony (SfCampUA14)DDD on example of Symfony (SfCampUA14)
DDD on example of Symfony (SfCampUA14)
Oleg Zinchenko4.6K vues
Rapid Prototyping FTW!!! par cloudbring
Rapid Prototyping FTW!!!Rapid Prototyping FTW!!!
Rapid Prototyping FTW!!!
cloudbring991 vues
How we integrate & deploy Mobile Apps with Travis CI par Marcio Klepacz
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
Marcio Klepacz4K vues
NanoSec Conference 2019: Code Execution Analysis in Mobile Apps - Abdullah Jo... par Hafez Kamal
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...
Hafez Kamal155 vues
TYPO3 Extension development using new Extbase framework par Christian Trabold
TYPO3 Extension development using new Extbase frameworkTYPO3 Extension development using new Extbase framework
TYPO3 Extension development using new Extbase framework
Christian Trabold5.2K vues

Plus de François-Guillaume Ribreau

REX LEAN- Créer un SaaS et être rentable après 6 mois par
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 moisFrançois-Guillaume Ribreau
62 vues71 diapositives
Une plateforme moderne pour le groupe SIPA/Ouest-France  par
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 François-Guillaume Ribreau
1.1K vues75 diapositives
[BreizhCamp, format 15min] Une api rest et GraphQL sans code grâce à PostgR... par
[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...François-Guillaume Ribreau
2.8K vues57 diapositives
RedisConf 2016 - Redis usage and ecosystem par
RedisConf 2016 - Redis usage and ecosystemRedisConf 2016 - Redis usage and ecosystem
RedisConf 2016 - Redis usage and ecosystemFrançois-Guillaume Ribreau
720 vues28 diapositives
Implementing pattern-matching in JavaScript (full version) par
Implementing pattern-matching in JavaScript (full version)Implementing pattern-matching in JavaScript (full version)
Implementing pattern-matching in JavaScript (full version)François-Guillaume Ribreau
2.1K vues55 diapositives
Automatic constraints as a team maturity accelerator for startups par
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 startupsFrançois-Guillaume Ribreau
3.6K vues120 diapositives

Plus de François-Guillaume Ribreau(12)

[BreizhCamp, format 15min] Une api rest et GraphQL sans code grâce à PostgR... par François-Guillaume Ribreau
[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...

Dernier

Melek BEN MAHMOUD.pdf par
Melek BEN MAHMOUD.pdfMelek BEN MAHMOUD.pdf
Melek BEN MAHMOUD.pdfMelekBenMahmoud
14 vues1 diapositive
Kyo - Functional Scala 2023.pdf par
Kyo - Functional Scala 2023.pdfKyo - Functional Scala 2023.pdf
Kyo - Functional Scala 2023.pdfFlavio W. Brasil
400 vues92 diapositives
NET Conf 2023 Recap par
NET Conf 2023 RecapNET Conf 2023 Recap
NET Conf 2023 RecapLee Richardson
10 vues71 diapositives
Automating a World-Class Technology Conference; Behind the Scenes of CiscoLive par
Automating a World-Class Technology Conference; Behind the Scenes of CiscoLiveAutomating a World-Class Technology Conference; Behind the Scenes of CiscoLive
Automating a World-Class Technology Conference; Behind the Scenes of CiscoLiveNetwork Automation Forum
34 vues35 diapositives
SAP Automation Using Bar Code and FIORI.pdf par
SAP Automation Using Bar Code and FIORI.pdfSAP Automation Using Bar Code and FIORI.pdf
SAP Automation Using Bar Code and FIORI.pdfVirendra Rai, PMP
23 vues38 diapositives
PharoJS - Zürich Smalltalk Group Meetup November 2023 par
PharoJS - Zürich Smalltalk Group Meetup November 2023PharoJS - Zürich Smalltalk Group Meetup November 2023
PharoJS - Zürich Smalltalk Group Meetup November 2023Noury Bouraqadi
132 vues17 diapositives

Dernier(20)

Automating a World-Class Technology Conference; Behind the Scenes of CiscoLive par Network Automation Forum
Automating a World-Class Technology Conference; Behind the Scenes of CiscoLiveAutomating a World-Class Technology Conference; Behind the Scenes of CiscoLive
Automating a World-Class Technology Conference; Behind the Scenes of CiscoLive
PharoJS - Zürich Smalltalk Group Meetup November 2023 par Noury Bouraqadi
PharoJS - Zürich Smalltalk Group Meetup November 2023PharoJS - Zürich Smalltalk Group Meetup November 2023
PharoJS - Zürich Smalltalk Group Meetup November 2023
Noury Bouraqadi132 vues
ESPC 2023 - Protect and Govern your Sensitive Data with Microsoft Purview in ... par Jasper Oosterveld
ESPC 2023 - Protect and Govern your Sensitive Data with Microsoft Purview in ...ESPC 2023 - Protect and Govern your Sensitive Data with Microsoft Purview in ...
ESPC 2023 - Protect and Govern your Sensitive Data with Microsoft Purview in ...
Serverless computing with Google Cloud (2023-24) par wesley chun
Serverless computing with Google Cloud (2023-24)Serverless computing with Google Cloud (2023-24)
Serverless computing with Google Cloud (2023-24)
wesley chun11 vues
6g - REPORT.pdf par Liveplex
6g - REPORT.pdf6g - REPORT.pdf
6g - REPORT.pdf
Liveplex10 vues
HTTP headers that make your website go faster - devs.gent November 2023 par Thijs Feryn
HTTP headers that make your website go faster - devs.gent November 2023HTTP headers that make your website go faster - devs.gent November 2023
HTTP headers that make your website go faster - devs.gent November 2023
Thijs Feryn22 vues
"Running students' code in isolation. The hard way", Yurii Holiuk par Fwdays
"Running students' code in isolation. The hard way", Yurii Holiuk "Running students' code in isolation. The hard way", Yurii Holiuk
"Running students' code in isolation. The hard way", Yurii Holiuk
Fwdays17 vues
Unit 1_Lecture 2_Physical Design of IoT.pdf par StephenTec
Unit 1_Lecture 2_Physical Design of IoT.pdfUnit 1_Lecture 2_Physical Design of IoT.pdf
Unit 1_Lecture 2_Physical Design of IoT.pdf
StephenTec12 vues

Development Principles & Philosophy