SlideShare a Scribd company logo
1 of 51
Download to read offline
A gremlin
ate my graph
Barcelona, Spain, October, 30th 2015
Agenda
Discover the Graph
Steps with a gremlin
The state of the Gremlin
Damien Seguy
CTO at Exakat
PHP code as Dataset
Speaker
What is gremlin?
V :Vertices, or nodes or objects
E : Edges, or links or relations
G : graph, or the dataset
The Vertices
g.vrepresents all the vertices
g.v(1) is one of the nodes
Vertices always have an id
g.v(1) => v(1)
1
g.v(1).id => 1
g.v(1).name => apply_filter
g.v(1).version => true
g.v(1).compat => [4.0, 4.1, 4.2, 4.3]
// non-existing properties
g.v(1).isFedAfterMidnight => null
Properties
Graph is schemaless
apply_filter
Vertice discovery
Use map to discover the graph
g.v(2).map => {name=wp_die, leaf=true}
wp_die
The Edges
Edges have id, properties
also : start, end and label
g.E represents all the edges
g.e(1) is the edge with Id 1
g.e(1) => e(1)
g.e(1).map => { }
g.e(1).id => 1
g.e(1).label => CALLS
Edge discovery
wp_diewp_ajax_fetch
_list
CALLS
Edges link the vertices
g.e(5).outV => v(2)
g.e(6).outV => v(3)
g.e(1).inV => v(4)
Running on the Edges
2
3
4
1
5
6
7
Directed graph
g.v(1).out => v(2)
v(3)
g.v(1).in => v(4)
g.v(1).both => v(2)
v(3)
v(4)
Following Edges
2
3
4
1
5
6
7
g.v(1).inE => e(7)
g.v(1).out.id => 2
3
g.v(2).in.in.id => 4
g.v(1).both.id => 2
3
4
Chaining
2
3
4
1
5
6
7
Wordpress Calls Graph
The graph of all Wordpress internal function calls
function
:name
function
:name
CALLS
function functionCALLS
g.v(19).out(‘CALLS’).name => wp_hash_password
wp_cache_delete
g.v(19).in(‘CALLS’).name => reset_password
wp_check_password
Calling home
wp_set_
password
reset_
password
wp_hash_
password
wp_check_
password
wp_cache_
delete
CALLS
CALLS
CALLS
CALLS
g.v(30).out(‘CALLS’)
.retain([g.v(30)])

.name => get_category_parents
Is it Recursive
get_permalink get_category_
link
get_category_
parents
id : 30
CALLS
CALLS
CALLS
Is it Recursive
g.v(30).in(‘CALLS’)
.retain([g.v(30)])
.name => get_category_parents
get_permalink get_category_
link
get_category_
parents
id : 30
CALLS
CALLS
CALLS
g.v(47).out(‘CALLS’).except([g.v(47)])
.out('CALLS').retain([g.v(47)])
.name
=> wp_trash_comment
Ping-Pong Function
CALLS
wp_trash
_comment
id: 47
wp_delete
_comment
id : 148
CALLS
CALLS
CALLS
CALLS
CALLS
CALLS
CALLS
CALLS
Up to now
nodes and vertices : basic blocs
in and out (and both) : navigation
except(), retain(), in(‘label’) : filtering
Starting at the vertices
Traversing the graph
Finding nodes in the graph that satisfy criteria
Traversing involves listing nodes, following
links, applying filters, processing data until all
conditions are met
Starting point : g.V and g.E
Counting
g.V.count() => 2691
g.E.count() => 9013
function functionCALLS
Sampling
g.V[0..3].name => do_activate_header
do_action
wpmu_activate_stylesheet
comment_footer_die
g.V[0..3].id => 1
3
5
4
Filtering
g.V.has('name','wp_die') => v(25);
wp_die
Dying Functions
g.V.out('CALLS')
.has('name','wp_die')
.count() => 84
???? wp_dieCALLS
g.V.out('CALLS')
.has('name','wp_die')
.name =>
Dying Functions
???? wp_dieCALLS
PROCESSING
wp_die
wp_die
wp_die
wp_die
wp_die
wp_die
wp_die
wp_die
wp_die
g.V.has('name','wp_die')
.in('CALLS')
.name => wp_ajax_trash_post
wp_ajax_delete_post
wp_ajax_delete_meta
wp_ajax_delete_link
wp_ajax_delete_tag
wp_ajax_delete_comment
wp_ajax_oembed_cache
wp_ajax_imgedit_preview
we_ajax_fetch_list
Dying Functions
???? wp_dieCALLS
PROCESSING
g.V.as('start')
.out('CALLS')
.has('name','wp_die')
.back('start')
.name => wp_ajax_trash_post
wp_ajax_delete_post
wp_ajax_delete_meta
wp_ajax_delete_link
wp_ajax_delete_tag
wp_ajax_delete_comment
wp_ajax_oembed_cache
wp_ajax_imgedit_preview
Dying Functions
???? wp_dieCALLS
PROCESSING
Relay Functions
g.V.filter{ it.out('CALLS').count() == 1}
.count() => 650
CALLS
CALLS
CALLS
Closures
Steps often offer possibility for closure
Closure is between {} , uses ‘it’ as current node,
is written in Groovy (or else)
Closure often have a standard default behavior,
so they are sometimes stealth
Applied to properties
Non standard functions
g.V.filter{ it.name != it.name.toLowerCase()}
.count() => 73
Leaf and Roots
LEAF
ROOT
g.V.filter{ it.out('CALLS').any() == false}
.count() => 407
g.V.filter{ it.in('CALLS').any() == false}
.count() => 1304
Get Linking Index
g.V.transform{['name':it.name,
'links':it.in('CALLS').count()]}
=> ...
{'name':wpmu_signup_stylesheet, 'links':0}
{'name':show_blog_form, 'links':7}
{'name':validate_blog_form, 'links':3}
{'name':show_user_form, 'links':4}
Get Called Index
g.V.transform{['name':it.name,
'links':it.in('CALLS').count()]
}
.order{ it.a.links <=> it.b.links}
=> {'name':get_post, 'links':191}
{'name':get_option, 'links':218}
{'name':_deprecated_function, 'links':296}
{'name':__, 'links':442}
{'name':apply_filters, 'links':598}
Most linked Function
groupCount(m)
m = [:];
g.V.groupCount(m);
m;
=> {
v[1] = 1,
v[2] = 1,
...
v[47] = 1,
}
Most linked Function
groupCount(m){key}{value}
m = [:];
g.V.groupCount(m){it.name}
{it.in('CALLS').count()};
m;
=> {
wp_restore_image = 1,
press_this_media_buttons = 0,
WP_Filesystem = 3,
...
}
Most linked Function
groupCount(m){key}{value}
m = [:];
g.V.groupCount(m){it.name}
{it.in('CALLS').count()};
m.sort{ -it.value }[0..2];
=> {
apply_filters = 598,
__ = 442,
_deprecated_function = 296
}
Most linked Function
m = [:];n = [:];
g.V.groupCount(m){it.name}
{it.in('CALLS').count()}
.groupCount(n){it.name}
{it.out('CALLS').count()};
n.sort{ -it.value}[0..2];
=> {
redirect_canonical = 60,
export_wp = 47,
edit_post = 36
SideEffect Steps
sideEffect : emit incoming but allows for side
computation
m = [:];n = [:];
g.V.groupCount(m){it.name}
{it.in('CALLS').count()}
.groupCount(n){it.name}
{it.out('CALLS').count()}
.count();
=> 2692
Nature of Steps
filter step : emit input if condition is satisfied :
has(), filter(), retain(), except()
map step : transform input into another object :
in(), out(), BOTH()
sideEffect step : emit input but allows for side
computation : transform, groupCount, each,
sideEffect
Branch and flatMap
Lonely Functions
g.V.filter{ it.in('CALLS').any() == false}
.filter{ it.out('CALLS').any() == false}
.sideEffect{ it.lonely = true; }
.count()
=> 184
SELECT, UPDATE AND COUNT
Updating a node
g.V.sideEffect{
incoming = it.in('CALLS').count();
}
.each{
it.setProperty('incoming', incoming);
it.setProperty('outgoing',
it.out('CALLS').count());
}
Updating The Graph
// removing deprecated functions
g.V.filter{ it.out('CALLS')
.has('name', '_deprecated_function'
.any()
}
.each{
it.bothE.each{ g.removeEdge(it); }
g.removeVertex(it);
}
State of Gremlin
Apache TinkerPop
http://tinkerpop.incubator.apache.org/
Version : 3.0.2
TP2 and TP3
groupCount{}{}
map
group().by().by()
ValueMap()
Vendors
StarDog
sqlg
Gremlin Variants
Gremlin For PHP
https://github.com/PommeVerte/gremlin-php
Get up and running with Tinkerpop 3 and PHP :
https://dylanmillikin.wordpress.com/2015/07/20/
get-up-and-running-with-tinkerpop-3-and-php/
Using with Neo4j : REST API
Older API : neo4jPHP, rexpro-php
Thanks
dseguy@exakat.io @exakat
http://www.slideshare.net/dseguy/
on the http://2015.phpconference.es//

More Related Content

What's hot

"Немного о функциональном программирование в JavaScript" Алексей Коваленко
"Немного о функциональном программирование в JavaScript" Алексей Коваленко"Немного о функциональном программирование в JavaScript" Алексей Коваленко
"Немного о функциональном программирование в JavaScript" Алексей Коваленко
Fwdays
 
LinkedIn TBC JavaScript 100: Functions
 LinkedIn TBC JavaScript 100: Functions LinkedIn TBC JavaScript 100: Functions
LinkedIn TBC JavaScript 100: Functions
Adam Crabtree
 

What's hot (20)

Functional Programming in JavaScript by Luis Atencio
Functional Programming in JavaScript by Luis AtencioFunctional Programming in JavaScript by Luis Atencio
Functional Programming in JavaScript by Luis Atencio
 
Davide Cerbo - Kotlin: forse è la volta buona - Codemotion Milan 2017
Davide Cerbo - Kotlin: forse è la volta buona - Codemotion Milan 2017 Davide Cerbo - Kotlin: forse è la volta buona - Codemotion Milan 2017
Davide Cerbo - Kotlin: forse è la volta buona - Codemotion Milan 2017
 
"Немного о функциональном программирование в JavaScript" Алексей Коваленко
"Немного о функциональном программирование в JavaScript" Алексей Коваленко"Немного о функциональном программирование в JavaScript" Алексей Коваленко
"Немного о функциональном программирование в JavaScript" Алексей Коваленко
 
LinkedIn TBC JavaScript 100: Functions
 LinkedIn TBC JavaScript 100: Functions LinkedIn TBC JavaScript 100: Functions
LinkedIn TBC JavaScript 100: Functions
 
Java Script Best Practices
Java Script Best PracticesJava Script Best Practices
Java Script Best Practices
 
PHP Enums - PHPCon Japan 2021
PHP Enums - PHPCon Japan 2021PHP Enums - PHPCon Japan 2021
PHP Enums - PHPCon Japan 2021
 
ES6 in Real Life
ES6 in Real LifeES6 in Real Life
ES6 in Real Life
 
Intro to Functional Programming
Intro to Functional ProgrammingIntro to Functional Programming
Intro to Functional Programming
 
Functions, Types, Programs and Effects
Functions, Types, Programs and EffectsFunctions, Types, Programs and Effects
Functions, Types, Programs and Effects
 
Functional Javascript
Functional JavascriptFunctional Javascript
Functional Javascript
 
Akka tips
Akka tipsAkka tips
Akka tips
 
JavaScript Functions
JavaScript FunctionsJavaScript Functions
JavaScript Functions
 
Symfony World - Symfony components and design patterns
Symfony World - Symfony components and design patternsSymfony World - Symfony components and design patterns
Symfony World - Symfony components and design patterns
 
Programmation fonctionnelle en JavaScript
Programmation fonctionnelle en JavaScriptProgrammation fonctionnelle en JavaScript
Programmation fonctionnelle en JavaScript
 
Joe Bew - Apprendi un nuovo linguaggio sfruttando il TDD e il Clean Code - Co...
Joe Bew - Apprendi un nuovo linguaggio sfruttando il TDD e il Clean Code - Co...Joe Bew - Apprendi un nuovo linguaggio sfruttando il TDD e il Clean Code - Co...
Joe Bew - Apprendi un nuovo linguaggio sfruttando il TDD e il Clean Code - Co...
 
DIWE - Working with MySQL Databases
DIWE - Working with MySQL DatabasesDIWE - Working with MySQL Databases
DIWE - Working with MySQL Databases
 
Functional solid
Functional solidFunctional solid
Functional solid
 
Atomically { Delete Your Actors }
Atomically { Delete Your Actors }Atomically { Delete Your Actors }
Atomically { Delete Your Actors }
 
Java script
Java scriptJava script
Java script
 
Lucio Floretta - TensorFlow and Deep Learning without a PhD - Codemotion Mila...
Lucio Floretta - TensorFlow and Deep Learning without a PhD - Codemotion Mila...Lucio Floretta - TensorFlow and Deep Learning without a PhD - Codemotion Mila...
Lucio Floretta - TensorFlow and Deep Learning without a PhD - Codemotion Mila...
 

Viewers also liked

Haris Hamza- Resume
Haris Hamza- ResumeHaris Hamza- Resume
Haris Hamza- Resume
Haris Hamza
 
Ort business breakfast mailer deloitte final
Ort business breakfast mailer deloitte finalOrt business breakfast mailer deloitte final
Ort business breakfast mailer deloitte final
ekagan
 
1945 PHI brochure EN final lowres 130516
1945 PHI brochure EN final lowres 1305161945 PHI brochure EN final lowres 130516
1945 PHI brochure EN final lowres 130516
Emma Tebbutt
 
Curriculum Vitae Gianluca Dusio
Curriculum Vitae Gianluca DusioCurriculum Vitae Gianluca Dusio
Curriculum Vitae Gianluca Dusio
Gianluca Dusio
 
CLASE 5 Gruposde google
CLASE 5 Gruposde googleCLASE 5 Gruposde google
CLASE 5 Gruposde google
jemalaga
 

Viewers also liked (20)

E2M - Full 3D Black Box Navigation Application for Android
E2M - Full 3D Black Box Navigation Application for AndroidE2M - Full 3D Black Box Navigation Application for Android
E2M - Full 3D Black Box Navigation Application for Android
 
Formato hv foto sena copia2 sammymar
Formato hv foto sena   copia2 sammymarFormato hv foto sena   copia2 sammymar
Formato hv foto sena copia2 sammymar
 
Haris Hamza- Resume
Haris Hamza- ResumeHaris Hamza- Resume
Haris Hamza- Resume
 
1 han va cat_trong_dong_tau
1 han va cat_trong_dong_tau1 han va cat_trong_dong_tau
1 han va cat_trong_dong_tau
 
5 cuento fran
5 cuento fran5 cuento fran
5 cuento fran
 
Ort business breakfast mailer deloitte final
Ort business breakfast mailer deloitte finalOrt business breakfast mailer deloitte final
Ort business breakfast mailer deloitte final
 
Gbpa porcina
Gbpa porcinaGbpa porcina
Gbpa porcina
 
50 Highlights der 37. Auktion am 18. April 2015 - 50 Highlights of Scripophil...
50 Highlights der 37. Auktion am 18. April 2015 - 50 Highlights of Scripophil...50 Highlights der 37. Auktion am 18. April 2015 - 50 Highlights of Scripophil...
50 Highlights der 37. Auktion am 18. April 2015 - 50 Highlights of Scripophil...
 
Institucional Agroads.com 2013
Institucional Agroads.com 2013Institucional Agroads.com 2013
Institucional Agroads.com 2013
 
REGIONE VENETO - Turismo flash - Febbraio 2011
REGIONE VENETO - Turismo flash - Febbraio 2011REGIONE VENETO - Turismo flash - Febbraio 2011
REGIONE VENETO - Turismo flash - Febbraio 2011
 
Cuidadores Clase Lorena Javet
Cuidadores Clase Lorena JavetCuidadores Clase Lorena Javet
Cuidadores Clase Lorena Javet
 
La imagen educativa - Cómo se escribe
La imagen educativa - Cómo se escribeLa imagen educativa - Cómo se escribe
La imagen educativa - Cómo se escribe
 
Cumple de luis
Cumple de luisCumple de luis
Cumple de luis
 
Bases premios i certamen de arte. el valor del vino y el aceite en la cultura...
Bases premios i certamen de arte. el valor del vino y el aceite en la cultura...Bases premios i certamen de arte. el valor del vino y el aceite en la cultura...
Bases premios i certamen de arte. el valor del vino y el aceite en la cultura...
 
1945 PHI brochure EN final lowres 130516
1945 PHI brochure EN final lowres 1305161945 PHI brochure EN final lowres 130516
1945 PHI brochure EN final lowres 130516
 
Curriculum Vitae Gianluca Dusio
Curriculum Vitae Gianluca DusioCurriculum Vitae Gianluca Dusio
Curriculum Vitae Gianluca Dusio
 
InstantFiler oct 2010
InstantFiler oct 2010InstantFiler oct 2010
InstantFiler oct 2010
 
CLASE 5 Gruposde google
CLASE 5 Gruposde googleCLASE 5 Gruposde google
CLASE 5 Gruposde google
 
Mercado de valores
Mercado de valores Mercado de valores
Mercado de valores
 
gestion infraestructura vial
gestion infraestructura vialgestion infraestructura vial
gestion infraestructura vial
 

Similar to A Gremlin ate my graph

CodeMash - Building Rich Apps with Groovy SwingBuilder
CodeMash - Building Rich Apps with Groovy SwingBuilderCodeMash - Building Rich Apps with Groovy SwingBuilder
CodeMash - Building Rich Apps with Groovy SwingBuilder
Andres Almiray
 
Rapid Development with Ruby/JRuby and Rails
Rapid Development with Ruby/JRuby and RailsRapid Development with Ruby/JRuby and Rails
Rapid Development with Ruby/JRuby and Rails
elliando dias
 
A walk in graph databases v1.0
A walk in graph databases v1.0A walk in graph databases v1.0
A walk in graph databases v1.0
Pierre De Wilde
 
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
 

Similar to A Gremlin ate my graph (20)

Php in the graph (Gremlin 3)
Php in the graph (Gremlin 3)Php in the graph (Gremlin 3)
Php in the graph (Gremlin 3)
 
A gremlin in my graph confoo 2014
A gremlin in my graph confoo 2014A gremlin in my graph confoo 2014
A gremlin in my graph confoo 2014
 
jQuery & 10,000 Global Functions: Working with Legacy JavaScript
jQuery & 10,000 Global Functions: Working with Legacy JavaScriptjQuery & 10,000 Global Functions: Working with Legacy JavaScript
jQuery & 10,000 Global Functions: Working with Legacy JavaScript
 
Svcc Building Rich Applications with Groovy's SwingBuilder
Svcc Building Rich Applications with Groovy's SwingBuilderSvcc Building Rich Applications with Groovy's SwingBuilder
Svcc Building Rich Applications with Groovy's SwingBuilder
 
CodeMash - Building Rich Apps with Groovy SwingBuilder
CodeMash - Building Rich Apps with Groovy SwingBuilderCodeMash - Building Rich Apps with Groovy SwingBuilder
CodeMash - Building Rich Apps with Groovy SwingBuilder
 
Rapid Development with Ruby/JRuby and Rails
Rapid Development with Ruby/JRuby and RailsRapid Development with Ruby/JRuby and Rails
Rapid Development with Ruby/JRuby and Rails
 
Gpars concepts explained
Gpars concepts explainedGpars concepts explained
Gpars concepts explained
 
Clojure And Swing
Clojure And SwingClojure And Swing
Clojure And Swing
 
Groovy
GroovyGroovy
Groovy
 
Introductionto fp with groovy
Introductionto fp with groovyIntroductionto fp with groovy
Introductionto fp with groovy
 
Griffon @ Svwjug
Griffon @ SvwjugGriffon @ Svwjug
Griffon @ Svwjug
 
Symfony2 Building on Alpha / Beta technology
Symfony2 Building on Alpha / Beta technologySymfony2 Building on Alpha / Beta technology
Symfony2 Building on Alpha / Beta technology
 
A walk in graph databases v1.0
A walk in graph databases v1.0A walk in graph databases v1.0
A walk in graph databases v1.0
 
Closure
ClosureClosure
Closure
 
Art of Javascript
Art of JavascriptArt of Javascript
Art of Javascript
 
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
 
Advanced jQuery
Advanced jQueryAdvanced jQuery
Advanced jQuery
 
FunctionalJS - George Shevtsov
FunctionalJS - George ShevtsovFunctionalJS - George Shevtsov
FunctionalJS - George Shevtsov
 
1. George Shevtsov - Functional JavaScript
1. George Shevtsov - Functional JavaScript1. George Shevtsov - Functional JavaScript
1. George Shevtsov - Functional JavaScript
 
Groovy
GroovyGroovy
Groovy
 

More from Damien Seguy

More from Damien Seguy (20)

Strong typing @ php leeds
Strong typing  @ php leedsStrong typing  @ php leeds
Strong typing @ php leeds
 
Strong typing : adoption, adaptation and organisation
Strong typing : adoption, adaptation and organisationStrong typing : adoption, adaptation and organisation
Strong typing : adoption, adaptation and organisation
 
Qui a laissé son mot de passe dans le code
Qui a laissé son mot de passe dans le codeQui a laissé son mot de passe dans le code
Qui a laissé son mot de passe dans le code
 
Analyse statique et applications
Analyse statique et applicationsAnalyse statique et applications
Analyse statique et applications
 
Top 10 pieges php afup limoges
Top 10 pieges php   afup limogesTop 10 pieges php   afup limoges
Top 10 pieges php afup limoges
 
Top 10 php classic traps DPC 2020
Top 10 php classic traps DPC 2020Top 10 php classic traps DPC 2020
Top 10 php classic traps DPC 2020
 
Meilleur du typage fort (AFUP Day, 2020)
Meilleur du typage fort (AFUP Day, 2020)Meilleur du typage fort (AFUP Day, 2020)
Meilleur du typage fort (AFUP Day, 2020)
 
Top 10 php classic traps confoo
Top 10 php classic traps confooTop 10 php classic traps confoo
Top 10 php classic traps confoo
 
Tout pour se préparer à PHP 7.4
Tout pour se préparer à PHP 7.4Tout pour se préparer à PHP 7.4
Tout pour se préparer à PHP 7.4
 
Top 10 php classic traps php serbia
Top 10 php classic traps php serbiaTop 10 php classic traps php serbia
Top 10 php classic traps php serbia
 
Top 10 php classic traps
Top 10 php classic trapsTop 10 php classic traps
Top 10 php classic traps
 
Top 10 chausse trappes
Top 10 chausse trappesTop 10 chausse trappes
Top 10 chausse trappes
 
Code review workshop
Code review workshopCode review workshop
Code review workshop
 
Understanding static analysis php amsterdam 2018
Understanding static analysis   php amsterdam 2018Understanding static analysis   php amsterdam 2018
Understanding static analysis php amsterdam 2018
 
Review unknown code with static analysis php ce 2018
Review unknown code with static analysis   php ce 2018Review unknown code with static analysis   php ce 2018
Review unknown code with static analysis php ce 2018
 
Everything new with PHP 7.3
Everything new with PHP 7.3Everything new with PHP 7.3
Everything new with PHP 7.3
 
Php 7.3 et ses RFC (AFUP Toulouse)
Php 7.3 et ses RFC  (AFUP Toulouse)Php 7.3 et ses RFC  (AFUP Toulouse)
Php 7.3 et ses RFC (AFUP Toulouse)
 
Tout sur PHP 7.3 et ses RFC
Tout sur PHP 7.3 et ses RFCTout sur PHP 7.3 et ses RFC
Tout sur PHP 7.3 et ses RFC
 
Review unknown code with static analysis php ipc 2018
Review unknown code with static analysis   php ipc 2018Review unknown code with static analysis   php ipc 2018
Review unknown code with static analysis php ipc 2018
 
Code review for busy people
Code review for busy peopleCode review for busy people
Code review for busy people
 

Recently uploaded

+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
?#DUbAI#??##{{(☎️+971_581248768%)**%*]'#abortion pills for sale in dubai@
 
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
 

Recently uploaded (20)

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...
 
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
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
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
 
Top 10 Most Downloaded Games on Play Store in 2024
Top 10 Most Downloaded Games on Play Store in 2024Top 10 Most Downloaded Games on Play Store in 2024
Top 10 Most Downloaded Games on Play Store in 2024
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
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
 
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
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
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
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024
 
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
 
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
 
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
 
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
 
Top 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live StreamsTop 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live Streams
 
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
 

A Gremlin ate my graph