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

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 AtencioLuis 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 Codemotion
 
"Немного о функциональном программирование в JavaScript" Алексей Коваленко
"Немного о функциональном программирование в JavaScript" Алексей Коваленко"Немного о функциональном программирование в JavaScript" Алексей Коваленко
"Немного о функциональном программирование в JavaScript" Алексей КоваленкоFwdays
 
LinkedIn TBC JavaScript 100: Functions
 LinkedIn TBC JavaScript 100: Functions LinkedIn TBC JavaScript 100: Functions
LinkedIn TBC JavaScript 100: FunctionsAdam Crabtree
 
PHP Enums - PHPCon Japan 2021
PHP Enums - PHPCon Japan 2021PHP Enums - PHPCon Japan 2021
PHP Enums - PHPCon Japan 2021Ayesh Karunaratne
 
Intro to Functional Programming
Intro to Functional ProgrammingIntro to Functional Programming
Intro to Functional ProgrammingHugo Firth
 
Functions, Types, Programs and Effects
Functions, Types, Programs and EffectsFunctions, Types, Programs and Effects
Functions, Types, Programs and EffectsRaymond Roestenburg
 
Functional Javascript
Functional JavascriptFunctional Javascript
Functional Javascriptguest4d57e6
 
JavaScript Functions
JavaScript FunctionsJavaScript Functions
JavaScript FunctionsBrian Moschel
 
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Łukasz Chruściel
 
Programmation fonctionnelle en JavaScript
Programmation fonctionnelle en JavaScriptProgrammation fonctionnelle en JavaScript
Programmation fonctionnelle en JavaScriptLoïc Knuchel
 
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...Codemotion
 
DIWE - Working with MySQL Databases
DIWE - Working with MySQL DatabasesDIWE - Working with MySQL Databases
DIWE - Working with MySQL DatabasesRasan Samarasinghe
 
Functional solid
Functional solidFunctional solid
Functional solidMatt Stine
 
Atomically { Delete Your Actors }
Atomically { Delete Your Actors }Atomically { Delete Your Actors }
Atomically { Delete Your Actors }John De Goes
 
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...Codemotion
 

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

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 AndroidTerry Kim
 
Formato hv foto sena copia2 sammymar
Formato hv foto sena   copia2 sammymarFormato hv foto sena   copia2 sammymar
Formato hv foto sena copia2 sammymarAndreita Gomez
 
Haris Hamza- Resume
Haris Hamza- ResumeHaris Hamza- Resume
Haris Hamza- ResumeHaris Hamza
 
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_tauHien Dinh
 
Ort business breakfast mailer deloitte final
Ort business breakfast mailer deloitte finalOrt business breakfast mailer deloitte final
Ort business breakfast mailer deloitte finalekagan
 
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...Matthias Schmitt
 
Institucional Agroads.com 2013
Institucional Agroads.com 2013Institucional Agroads.com 2013
Institucional Agroads.com 2013Daniel Rodríguez
 
REGIONE VENETO - Turismo flash - Febbraio 2011
REGIONE VENETO - Turismo flash - Febbraio 2011REGIONE VENETO - Turismo flash - Febbraio 2011
REGIONE VENETO - Turismo flash - Febbraio 2011BTO Educational
 
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 escribeCastilloPalma
 
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 130516Emma Tebbutt
 
Curriculum Vitae Gianluca Dusio
Curriculum Vitae Gianluca DusioCurriculum Vitae Gianluca Dusio
Curriculum Vitae Gianluca DusioGianluca Dusio
 
InstantFiler oct 2010
InstantFiler oct 2010InstantFiler oct 2010
InstantFiler oct 2010Uniport Ltd.
 
CLASE 5 Gruposde google
CLASE 5 Gruposde googleCLASE 5 Gruposde google
CLASE 5 Gruposde googlejemalaga
 
gestion infraestructura vial
gestion infraestructura vialgestion infraestructura vial
gestion infraestructura vialMiller2013
 

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

Php in the graph (Gremlin 3)
Php in the graph (Gremlin 3)Php in the graph (Gremlin 3)
Php in the graph (Gremlin 3)Damien Seguy
 
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 2014Damien Seguy
 
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 JavaScriptGuy Royse
 
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 SwingBuilderAndres Almiray
 
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 SwingBuilderAndres 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 Railselliando dias
 
Gpars concepts explained
Gpars concepts explainedGpars concepts explained
Gpars concepts explainedVaclav Pech
 
Introductionto fp with groovy
Introductionto fp with groovyIntroductionto fp with groovy
Introductionto fp with groovyIsuru Samaraweera
 
Symfony2 Building on Alpha / Beta technology
Symfony2 Building on Alpha / Beta technologySymfony2 Building on Alpha / Beta technology
Symfony2 Building on Alpha / Beta technologyDaniel Knell
 
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.0Pierre De Wilde
 
Art of Javascript
Art of JavascriptArt of Javascript
Art of JavascriptTarek Yehia
 
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 JasminePaulo Ragonha
 
Advanced jQuery
Advanced jQueryAdvanced jQuery
Advanced jQuerysergioafp
 
FunctionalJS - George Shevtsov
FunctionalJS - George ShevtsovFunctionalJS - George Shevtsov
FunctionalJS - George ShevtsovGeorgiy Shevtsov
 
1. George Shevtsov - Functional JavaScript
1. George Shevtsov - Functional JavaScript1. George Shevtsov - Functional JavaScript
1. George Shevtsov - Functional JavaScriptInnovecs
 

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

Strong typing @ php leeds
Strong typing  @ php leedsStrong typing  @ php leeds
Strong typing @ php leedsDamien Seguy
 
Strong typing : adoption, adaptation and organisation
Strong typing : adoption, adaptation and organisationStrong typing : adoption, adaptation and organisation
Strong typing : adoption, adaptation and organisationDamien Seguy
 
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 codeDamien Seguy
 
Analyse statique et applications
Analyse statique et applicationsAnalyse statique et applications
Analyse statique et applicationsDamien Seguy
 
Top 10 pieges php afup limoges
Top 10 pieges php   afup limogesTop 10 pieges php   afup limoges
Top 10 pieges php afup limogesDamien Seguy
 
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 2020Damien Seguy
 
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)Damien Seguy
 
Top 10 php classic traps confoo
Top 10 php classic traps confooTop 10 php classic traps confoo
Top 10 php classic traps confooDamien Seguy
 
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.4Damien Seguy
 
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 serbiaDamien Seguy
 
Top 10 php classic traps
Top 10 php classic trapsTop 10 php classic traps
Top 10 php classic trapsDamien Seguy
 
Top 10 chausse trappes
Top 10 chausse trappesTop 10 chausse trappes
Top 10 chausse trappesDamien Seguy
 
Code review workshop
Code review workshopCode review workshop
Code review workshopDamien Seguy
 
Understanding static analysis php amsterdam 2018
Understanding static analysis   php amsterdam 2018Understanding static analysis   php amsterdam 2018
Understanding static analysis php amsterdam 2018Damien Seguy
 
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 2018Damien Seguy
 
Everything new with PHP 7.3
Everything new with PHP 7.3Everything new with PHP 7.3
Everything new with PHP 7.3Damien Seguy
 
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)Damien Seguy
 
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 RFCDamien Seguy
 
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 2018Damien Seguy
 
Code review for busy people
Code review for busy peopleCode review for busy people
Code review for busy peopleDamien 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

Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsMark Billinghurst
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxMalak Abu Hammad
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupFlorian Wilhelm
 
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersEnhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersThousandEyes
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Allon Mureinik
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesSinan KOZAK
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubKalema Edgar
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...Fwdays
 
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Alan Dix
 
Build your next Gen AI Breakthrough - April 2024
Build your next Gen AI Breakthrough - April 2024Build your next Gen AI Breakthrough - April 2024
Build your next Gen AI Breakthrough - April 2024Neo4j
 
Benefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksBenefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksSoftradix Technologies
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Mattias Andersson
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationSlibray Presentation
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationSafe Software
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machinePadma Pradeep
 
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptx
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptxMaking_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptx
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptxnull - The Open Security Community
 
Artificial intelligence in the post-deep learning era
Artificial intelligence in the post-deep learning eraArtificial intelligence in the post-deep learning era
Artificial intelligence in the post-deep learning eraDeakin University
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking MenDelhi Call girls
 

Recently uploaded (20)

Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR Systems
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project Setup
 
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersEnhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
 
The transition to renewables in India.pdf
The transition to renewables in India.pdfThe transition to renewables in India.pdf
The transition to renewables in India.pdf
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen Frames
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding Club
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
 
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
 
Build your next Gen AI Breakthrough - April 2024
Build your next Gen AI Breakthrough - April 2024Build your next Gen AI Breakthrough - April 2024
Build your next Gen AI Breakthrough - April 2024
 
Benefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksBenefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other Frameworks
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck Presentation
 
DMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special EditionDMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special Edition
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machine
 
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptx
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptxMaking_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptx
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptx
 
Artificial intelligence in the post-deep learning era
Artificial intelligence in the post-deep learning eraArtificial intelligence in the post-deep learning era
Artificial intelligence in the post-deep learning era
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 

A Gremlin ate my graph