SlideShare une entreprise Scribd logo
1  sur  103
Télécharger pour lire hors ligne
javascript & the future
Jeff Miccolis
Development Seed
Open Atrium
Features
Context
Strongarm
Jeff Miccolis
MapBox
First, a brief apology.
Three “war” stories
about things that are
hard with php & drupal
...and easier in node.js
Two lessons I learned
...from Drupal and
node.js work
SERVER SIDE
JAVASCRIPT
V8
CHROME ‘S
JAVASCRIPT ENGINE
ON YOUR SERVER
1. Sending lots of email
Open
Atrium
Single emails
Digests email
SMS
XMPP (jabber)
Twitter
etc, etc, etc...
channel independent messages

don’t send e-mails to users, send them 'messages'

        delivered by mail, IM, SMS, etc...



d.o/project/Messaging
Problems
Send an email to one user - 50 ms

        28 users - 1.4 seconds

        600 users - 30 seconds



Problems
Run cron every 5 minutes

   and you can send a lot more emails

   but if one run doesn’t complete...



Problems
<?php

$addresses = array(
   'jeff@mapbox.com',
   'alex@mapbox.com',
   'eric@mapbox.com'
);

$message = 'I am writing to inform you of a...';
$count = 0;

foreach($addresses as $sucker) {
  if (mail($sucker, 'New opportunity', $message)) {
     $count++;
  };
}

echo "$count messages sent";
var mail = require('mail');

var addresses = [
    'jeff@mapbox.com',
    'alex@mapbox.com',
    'eric@mapbox.com'
];

var message = 'I am writing to inform you of a...';
var count = 0;

addresses.forEach(function(sucker, i) {
    mail(sucker, 'New opportunity', message, function(err) {
        if (!err) { count++; }

            if (i == addresses.length - 1) {
                console.log(count +" messages sent");
            }
      });
});
// Attempt to send email.
if (mail($sucker, 'New opportunity', $message)) {
    $count++
};

// Once email is sent, get the next address.
echo 'next';




// Attempt to send email.
mail(sucker, 'New opportunity', message, function(err) {
    if (!err) { count++; }
});

// Don't wait, get the next address NOW.
console.log('next');
Send an email ~ 5 ms processing, 45 ms waiting

  28 emails ~ 140 ms to process, done 45 ms later.

600 users ~ 3 seconds to process, done 45 ms later.



Stop waiting around
600 emails w/Php: ~30 seconds

    600 emails w/node.js: ~3 seconds




Stop waiting around
DEMO




Stop waiting around
2. Handling feeds
Fetch RSS feeds
       Fetch original article
         Tag items (calais)
       Tag items (watchlist)
       Tag items (wikipedia)
          Geocode items



The task
Thousands of feeds.

         Millions of items.

       Gigs and Gigs of data.



The scale
cron.php




Problems
maggie
multi-threaded python daemon




maggied
4 “retriever” workers get batches of 50 items.

       they fetch/tag/geocode each item.




maggied
retrieve original story: 300ms

             tag: 100ms

          geocode: 150ms

           TOTAL: 550ms


maggied
Nearly all of that 550ms is spent idle.




Stop waiting around
...but we could run “packs” of retrievers!
Is that really the best
idea?
Replace the retrievers
with a single
HYPERACTIVE SQUID!
The squid runs up and down as fast as it
   can dealing with each item in turn.

It fires off any long running I/O operations
    and then moves on to the next item.

When the I/O operation reports progress,
it does a little more work on behalf of the
             corresponding item.
Event loop




100% async
Anything that leaves v8 takes a callback.




100% async
filesystem, network, stdio, timers, child processes




100% async
var fs = require('fs');

fs.readFile('/etc/passwd', function (err, data) {
  if (err) throw err;
  console.log(data);
});




var request = require('request');

request('http://example.com', function (err, resp, body) {
    if (!err && resp.statusCode == 200) {
        console.log(body);
    }
});
Limiting factors change:

  how many open sockets are you allowed?
    how much bandwidth can you grab?
     how fast can you issue requests?



100% async
3. Big files, long sessions.
gigabyte




What’s big?
hours




What’s long?
HTTP




What’s a session?
A category of stories...
upload_max_filesize

         post_max_size

         max_input_time

       max_execution_time


Big uploads in php
this approach caps out ~500mb




Big uploads in php
Opens the door to DOS.

        Tolerates application bloat.

 Problems in production can get really bad.

    Never gonna get gigabyte uploads.


Problems
Php makes you look elsewhere.




Problems
If only we could stream...
If only we could stream...
Deal with things bucket by bucket

   and you don’t need all that memory.




Streaming
write that files to disk as it comes in

         ...or stream it off to s3!




Streaming
var formidable = require('formidable');
var http = require('http');

http.createServer(function(req, res) {
  if (req.url == '/upload' && req.method == 'POST') {

    var form = new formidable.IncomingForm();
    form.parse(req);
    form.onPart = function(part) {
        part.addListener('data', function(chunk) {
            // Do cool stuff, like streaming!
            console.log(chunk.toString('utf8'));
        });
    };
  }
}).listen(80);
_changes
A persistent connection to your database,
 which feeds you new data when it has some.




_changes
it’s amazing




_changes
1. Map uploads to s3

      2. Save a record to CouchDB

  3. “Downloader” listens for new maps



MapBox uploads
node.js process

    very long-lived http connection

             to CouchDB



MapBox uploads
non-blocking I/O & single event loop




Everything is different
4. Package Management
Package management for Drupal




drush make
d.o - project namespace

     d.o - inclusive project policy




drush make
a way to stay sane.




drush make
...and is part of drush proper now!




drush make
But I’d been using Drupal for YEARS by then




drush make
pear
PHP Extension and Application Repository




pear
high threshold for new projects




pear
wildly inclusive

         awesomely useful

        awesomely successful



imagine if pear was...
wildly inclusive

       awesomely useful

      awesomely successful



npm
node package manager




npm
pear: 584

     d.o: 15, 296 (~3,600 for D7)

      npm: 7,976 (2 years old!)



packages
{
    "author": "Jeff Miccolis <jeff@miccolis.net>",
    "name": "portal",
    "description": "Data Catalog",
    "version": "0.0.0",
    "engines": {
       "node": "~v0.6.6"
    },
    "dependencies": {
       "couchapp": "https://github.com/.../attachment_operators",
       "underscore": "= 1.2.0",
       "request": "= 2.1.1"
    }
}


    npm - package.json
you’ll love it.




npm
5. Nice hammer
“Javascript, really?”




Nice hammer...
“Clearly he’s overly excited about this async stuff”




Nice hammer...
“...and thinks it’ll work for everything.”




Nice hammer...
“Do it with Drupal”, eh?
computationally heavy tasks
             databases




node.js is bad for...
interacting with other services.




node.js is awesome for...
databases, mail servers, web services, web clients..




services like...
http://substack.net/posts/b96642

http://blog.nelhage.com/2012/03/why-node-js-is-cool/




Other people’s words
“The primary focus of most node modules is on
using, not extending... A big part of what makes
node modules so great is how they tend to have
really obvious entry points as a consequence of
 focusing on usability and limited surface area”



Limited surface area
“Instead of the http server being an external
 service that we configure to run our code, it
  becomes just another tool in our arsenal”




Callback Austerity
"The upshot of this pressure is that, since
 essentially every node.js library works this way,
   you can pick and choose arbitrary node.js
     libraries and combine them in the same
program, without even having to think about the
             fact that you’re doing so."



Async by default
If nothing else you’ll get better at javascript.




Try it!
But I bet you’ll like it.




Try it!
Thanks!
Photo credit due to these wonderful people who offer
their photos on flickr under a creative commons
license:


Spam - http://www.flickr.com/photos/olivabassa/
Cows - http://www.flickr.com/photos/lynndombrowski/
Dogs - http://www.flickr.com/photos/photosightfaces/
Squid - http://www.flickr.com/photos/laughingsquid/
Ants - http://www.flickr.com/photos/fuzzcat/
Stream - http://www.flickr.com/photos/universalpops/
Boxes - http://www.flickr.com/photos/sillydog/
Pear - http://www.flickr.com/photos/reebob/
Hammer - http://www.flickr.com/photos/kefraya
What did you think?
 Locate this session on the
 DrupalCon Denver website
http://denver2012.drupal.org/program

 Click the “Take the Survey” link.


       Thank You!

Contenu connexe

Tendances

Java script at backend nodejs
Java script at backend   nodejsJava script at backend   nodejs
Java script at backend nodejs
Amit Thakkar
 
Node.js and How JavaScript is Changing Server Programming
Node.js and How JavaScript is Changing Server Programming  Node.js and How JavaScript is Changing Server Programming
Node.js and How JavaScript is Changing Server Programming
Tom Croucher
 
OSCON 2011 - Node.js Tutorial
OSCON 2011 - Node.js TutorialOSCON 2011 - Node.js Tutorial
OSCON 2011 - Node.js Tutorial
Tom Croucher
 

Tendances (20)

Java script at backend nodejs
Java script at backend   nodejsJava script at backend   nodejs
Java script at backend nodejs
 
Node.js and How JavaScript is Changing Server Programming
Node.js and How JavaScript is Changing Server Programming  Node.js and How JavaScript is Changing Server Programming
Node.js and How JavaScript is Changing Server Programming
 
Async and Non-blocking IO w/ JRuby
Async and Non-blocking IO w/ JRubyAsync and Non-blocking IO w/ JRuby
Async and Non-blocking IO w/ JRuby
 
Philly Tech Week Introduction to NodeJS
Philly Tech Week Introduction to NodeJSPhilly Tech Week Introduction to NodeJS
Philly Tech Week Introduction to NodeJS
 
A language for the Internet: Why JavaScript and Node.js is right for Internet...
A language for the Internet: Why JavaScript and Node.js is right for Internet...A language for the Internet: Why JavaScript and Node.js is right for Internet...
A language for the Internet: Why JavaScript and Node.js is right for Internet...
 
Non-blocking I/O, Event loops and node.js
Non-blocking I/O, Event loops and node.jsNon-blocking I/O, Event loops and node.js
Non-blocking I/O, Event loops and node.js
 
Nodejs in Production
Nodejs in ProductionNodejs in Production
Nodejs in Production
 
Node.js Explained
Node.js ExplainedNode.js Explained
Node.js Explained
 
NodeJS
NodeJSNodeJS
NodeJS
 
Node.js Workshop - Sela SDP 2015
Node.js Workshop  - Sela SDP 2015Node.js Workshop  - Sela SDP 2015
Node.js Workshop - Sela SDP 2015
 
Apache Zookeeper
Apache ZookeeperApache Zookeeper
Apache Zookeeper
 
Caching Up and Down the Stack
Caching Up and Down the StackCaching Up and Down the Stack
Caching Up and Down the Stack
 
OSCON 2011 - Node.js Tutorial
OSCON 2011 - Node.js TutorialOSCON 2011 - Node.js Tutorial
OSCON 2011 - Node.js Tutorial
 
Alternative Infrastucture
Alternative InfrastuctureAlternative Infrastucture
Alternative Infrastucture
 
Node.js - async for the rest of us.
Node.js - async for the rest of us.Node.js - async for the rest of us.
Node.js - async for the rest of us.
 
Not Only Drupal
Not Only DrupalNot Only Drupal
Not Only Drupal
 
Node.js
Node.jsNode.js
Node.js
 
PHP Backends for Real-Time User Interaction using Apache Storm.
PHP Backends for Real-Time User Interaction using Apache Storm.PHP Backends for Real-Time User Interaction using Apache Storm.
PHP Backends for Real-Time User Interaction using Apache Storm.
 
distributed tracing in 5 minutes
distributed tracing in 5 minutesdistributed tracing in 5 minutes
distributed tracing in 5 minutes
 
Kubernetes in 20 minutes - HDE Monthly Technical Session 24
Kubernetes in 20 minutes - HDE Monthly Technical Session 24Kubernetes in 20 minutes - HDE Monthly Technical Session 24
Kubernetes in 20 minutes - HDE Monthly Technical Session 24
 

En vedette

Birth & After Birth
Birth & After BirthBirth & After Birth
Birth & After Birth
yoshio121
 
Apex Apparel Power Point
Apex Apparel Power PointApex Apparel Power Point
Apex Apparel Power Point
brittbenditz
 
Understanding mechanisms underlying human gene expression variation with RNA ...
Understanding mechanisms underlying human gene expression variation with RNA ...Understanding mechanisms underlying human gene expression variation with RNA ...
Understanding mechanisms underlying human gene expression variation with RNA ...
Joseph Pickrell
 
Tax Efficient Investing For Life
Tax Efficient Investing For LifeTax Efficient Investing For Life
Tax Efficient Investing For Life
guesta5e2f9
 
E Research Chapter 1
E Research Chapter 1E Research Chapter 1
E Research Chapter 1
guest2426e1d
 

En vedette (20)

Material Enviado A Montana
Material Enviado A MontanaMaterial Enviado A Montana
Material Enviado A Montana
 
Birth & After Birth
Birth & After BirthBirth & After Birth
Birth & After Birth
 
What Your Jvm Has Been Trying To Tell You
What Your Jvm Has Been Trying To Tell YouWhat Your Jvm Has Been Trying To Tell You
What Your Jvm Has Been Trying To Tell You
 
Making the Most of Social Media: 7 Lessons from Successful Cities
Making the Most of Social Media: 7 Lessons from Successful CitiesMaking the Most of Social Media: 7 Lessons from Successful Cities
Making the Most of Social Media: 7 Lessons from Successful Cities
 
Blewis Session 3 Automating Your Windows 7 Deployment With The Mdt 2010 Pres...
Blewis  Session 3 Automating Your Windows 7 Deployment With The Mdt 2010 Pres...Blewis  Session 3 Automating Your Windows 7 Deployment With The Mdt 2010 Pres...
Blewis Session 3 Automating Your Windows 7 Deployment With The Mdt 2010 Pres...
 
Employer Health Asset Mgt Roadmap
Employer Health Asset Mgt RoadmapEmployer Health Asset Mgt Roadmap
Employer Health Asset Mgt Roadmap
 
Blewis Session 1 Fy10 Q3 Azure
Blewis  Session 1 Fy10 Q3 AzureBlewis  Session 1 Fy10 Q3 Azure
Blewis Session 1 Fy10 Q3 Azure
 
The Truth About Prevention
The Truth About PreventionThe Truth About Prevention
The Truth About Prevention
 
Money laundering
Money laundering Money laundering
Money laundering
 
Interdisciplinary Science Biosphere Student Document
Interdisciplinary Science Biosphere Student DocumentInterdisciplinary Science Biosphere Student Document
Interdisciplinary Science Biosphere Student Document
 
Ncm
NcmNcm
Ncm
 
Apex Apparel Power Point
Apex Apparel Power PointApex Apparel Power Point
Apex Apparel Power Point
 
Designs
DesignsDesigns
Designs
 
سپاس
سپاسسپاس
سپاس
 
New Rules of Successful Job Hunting
New Rules of Successful Job Hunting New Rules of Successful Job Hunting
New Rules of Successful Job Hunting
 
Understanding mechanisms underlying human gene expression variation with RNA ...
Understanding mechanisms underlying human gene expression variation with RNA ...Understanding mechanisms underlying human gene expression variation with RNA ...
Understanding mechanisms underlying human gene expression variation with RNA ...
 
Sepas
SepasSepas
Sepas
 
Tax Efficient Investing For Life
Tax Efficient Investing For LifeTax Efficient Investing For Life
Tax Efficient Investing For Life
 
E Research Chapter 1
E Research Chapter 1E Research Chapter 1
E Research Chapter 1
 
Trela(2)
Trela(2)Trela(2)
Trela(2)
 

Similaire à node.js, javascript and the future

PuppetDB: Sneaking Clojure into Operations
PuppetDB: Sneaking Clojure into OperationsPuppetDB: Sneaking Clojure into Operations
PuppetDB: Sneaking Clojure into Operations
grim_radical
 
Synchronous Reads Asynchronous Writes RubyConf 2009
Synchronous Reads Asynchronous Writes RubyConf 2009Synchronous Reads Asynchronous Writes RubyConf 2009
Synchronous Reads Asynchronous Writes RubyConf 2009
pauldix
 
Writing robust Node.js applications
Writing robust Node.js applicationsWriting robust Node.js applications
Writing robust Node.js applications
Tom Croucher
 
BigDataCloud meetup - July 8th - Cost effective big-data processing using Ama...
BigDataCloud meetup - July 8th - Cost effective big-data processing using Ama...BigDataCloud meetup - July 8th - Cost effective big-data processing using Ama...
BigDataCloud meetup - July 8th - Cost effective big-data processing using Ama...
BigDataCloud
 
Using RAG to create your own Podcast conversations.pdf
Using RAG to create your own Podcast conversations.pdfUsing RAG to create your own Podcast conversations.pdf
Using RAG to create your own Podcast conversations.pdf
Richard Rodger
 
Advanced off heap ipc
Advanced off heap ipcAdvanced off heap ipc
Advanced off heap ipc
Peter Lawrey
 
SD, a P2P bug tracking system
SD, a P2P bug tracking systemSD, a P2P bug tracking system
SD, a P2P bug tracking system
Jesse Vincent
 

Similaire à node.js, javascript and the future (20)

Original slides from Ryan Dahl's NodeJs intro talk
Original slides from Ryan Dahl's NodeJs intro talkOriginal slides from Ryan Dahl's NodeJs intro talk
Original slides from Ryan Dahl's NodeJs intro talk
 
PuppetDB: Sneaking Clojure into Operations
PuppetDB: Sneaking Clojure into OperationsPuppetDB: Sneaking Clojure into Operations
PuppetDB: Sneaking Clojure into Operations
 
Nodejs a-practical-introduction-oredev
Nodejs a-practical-introduction-oredevNodejs a-practical-introduction-oredev
Nodejs a-practical-introduction-oredev
 
TorqueBox: The beauty of Ruby with the power of JBoss. Presented at Devnexus...
TorqueBox: The beauty of Ruby with the power of JBoss.  Presented at Devnexus...TorqueBox: The beauty of Ruby with the power of JBoss.  Presented at Devnexus...
TorqueBox: The beauty of Ruby with the power of JBoss. Presented at Devnexus...
 
Golang Performance : microbenchmarks, profilers, and a war story
Golang Performance : microbenchmarks, profilers, and a war storyGolang Performance : microbenchmarks, profilers, and a war story
Golang Performance : microbenchmarks, profilers, and a war story
 
Synchronous Reads Asynchronous Writes RubyConf 2009
Synchronous Reads Asynchronous Writes RubyConf 2009Synchronous Reads Asynchronous Writes RubyConf 2009
Synchronous Reads Asynchronous Writes RubyConf 2009
 
Django at Scale
Django at ScaleDjango at Scale
Django at Scale
 
Node.js: The What, The How and The When
Node.js: The What, The How and The WhenNode.js: The What, The How and The When
Node.js: The What, The How and The When
 
Apache Spark Workshop, Apr. 2016, Euangelos Linardos
Apache Spark Workshop, Apr. 2016, Euangelos LinardosApache Spark Workshop, Apr. 2016, Euangelos Linardos
Apache Spark Workshop, Apr. 2016, Euangelos Linardos
 
Erik Skytthe - Monitoring Mesos, Docker, Containers with Zabbix | ZabConf2016
Erik Skytthe - Monitoring Mesos, Docker, Containers with Zabbix | ZabConf2016Erik Skytthe - Monitoring Mesos, Docker, Containers with Zabbix | ZabConf2016
Erik Skytthe - Monitoring Mesos, Docker, Containers with Zabbix | ZabConf2016
 
All of Javascript
All of JavascriptAll of Javascript
All of Javascript
 
Apidays Paris 2023 - Forget TypeScript, Choose Rust to build Robust, Fast and...
Apidays Paris 2023 - Forget TypeScript, Choose Rust to build Robust, Fast and...Apidays Paris 2023 - Forget TypeScript, Choose Rust to build Robust, Fast and...
Apidays Paris 2023 - Forget TypeScript, Choose Rust to build Robust, Fast and...
 
Node.js: A Guided Tour
Node.js: A Guided TourNode.js: A Guided Tour
Node.js: A Guided Tour
 
Writing robust Node.js applications
Writing robust Node.js applicationsWriting robust Node.js applications
Writing robust Node.js applications
 
GWT is Smarter Than You
GWT is Smarter Than YouGWT is Smarter Than You
GWT is Smarter Than You
 
BigDataCloud meetup - July 8th - Cost effective big-data processing using Ama...
BigDataCloud meetup - July 8th - Cost effective big-data processing using Ama...BigDataCloud meetup - July 8th - Cost effective big-data processing using Ama...
BigDataCloud meetup - July 8th - Cost effective big-data processing using Ama...
 
Regex Considered Harmful: Use Rosie Pattern Language Instead
Regex Considered Harmful: Use Rosie Pattern Language InsteadRegex Considered Harmful: Use Rosie Pattern Language Instead
Regex Considered Harmful: Use Rosie Pattern Language Instead
 
Using RAG to create your own Podcast conversations.pdf
Using RAG to create your own Podcast conversations.pdfUsing RAG to create your own Podcast conversations.pdf
Using RAG to create your own Podcast conversations.pdf
 
Advanced off heap ipc
Advanced off heap ipcAdvanced off heap ipc
Advanced off heap ipc
 
SD, a P2P bug tracking system
SD, a P2P bug tracking systemSD, a P2P bug tracking system
SD, a P2P bug tracking system
 

Dernier

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
 

Dernier (20)

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, ...
 
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
 
A Beginners Guide to Building a RAG App Using Open Source Milvus
A Beginners Guide to Building a RAG App Using Open Source MilvusA Beginners Guide to Building a RAG App Using Open Source Milvus
A Beginners Guide to Building a RAG App Using Open Source Milvus
 
"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 ...
 
Navi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Navi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot ModelNavi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Navi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot Model
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
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...
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdf
 
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
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
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
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor Presentation
 
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...
 
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
 
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...
 
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
 
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
 

node.js, javascript and the future