SlideShare une entreprise Scribd logo
1  sur  162
Télécharger pour lire hors ligne
Development
By The Numbers
We Are Going To
Measure Complexity
Why Should We Care
About Complexity?
- Geer et al.
"The Central Enemy Of
Reliability is Complexity"
Complexity And
Quality Are Strongly
Related
Basic Metrics
Cyclomatic
Complexity
Cyclomatic Complexity
Number Of
"Decision Points"
In A Routine
function foo($a, $b) {
$c = 0;
if ($a) {
$c = $a;
} elseif ($b) {
$c = $b;
}
if ($a && $b) {
$c = $a + $b;
}
return $c;
}
function foo($a, $b) {
$c = 0;
if ($a) {
$c = $a;
} elseif ($b) {
$c = $b;
}
if ($a && $b) {
$c = $a + $b;
}
return $c;
}
function foo($a, $b) {
$c = 0;
if ($a) {
$c = $a;
} elseif ($b) {
$c = $b;
}
if ($a && $b) {
$c = $a + $b;
}
return $c;
}
4
Simple
Right?
Cyclomatic Complexity
(Single Method)
1 - 4: Low Complexity
5 - 7: Moderate Complexity
8 - 10: High Complexity
11+: Very High Complexity
Cyclomatic Complexity
(Average Per Method)
1 - 2: Low Complexity
2 - 4: Moderate Complexity
4 - 6: High Complexity
6+: Very High Complexity
Compare:
Average CC per Method
Wordpress: 6.28
Drupal 7: 3.02
Drupal 8: 2.10
Symfony 2: 1.81
Zend Framework 2: 2.62
Laravel: 1.79
Cyclomatic Complexity
(Average Per Line Of Code)
.01 - .05: Low Complexity
.05 - .10: Moderate Complexity
.10 - .15: High Complexity
.15+: Very High Complexity
Compare:
Average CC per LOC
Wordpress: 0.20
Drupal 7: 0.04
Drupal 8: 0.07
Symfony 2: 0.06
Zend Framework 2: 0.10
Laravel: 0.07
N-Path
Complexity
N-Path Complexity
Number Of
"Unique Paths"
In A Routine
function foo($a, $b) {
$c = 0;
if ($a) {
$c = $a;
} elseif ($b) {
$c = $b;
}
if ($a && $b) {
$c = $a + $b;
}
return $c;
}
function foo($a, $b) {
$c = 0;
if ($a) {
$c = $a;
} elseif ($b) {
$c = $b;
}
if ($a && $b) {
$c = $a + $b;
}
return $c;
}
function foo($a, $b) {
$c = 0;
if ($a) {
$c = $a;
} elseif ($b) {
$c = $b;
}
if ($a && $b) {
$c = $a + $b;
}
return $c;
}
function foo($a, $b) {
$c = 0;
if ($a) {
$c = $a;
} elseif ($b) {
$c = $b;
}
if ($a && $b) {
$c = $a + $b;
}
return $c;
}
function foo($a, $b) {
$c = 0;
if ($a) {
$c = $a;
} elseif ($b) {
$c = $b;
}
if ($a && $b) {
$c = $a + $b;
}
return $c;
}
function foo($a, $b) {
$c = 0;
if ($a) {
$c = $a;
} elseif ($b) {
$c = $b;
}
if ($a && $b) {
$c = $a + $b;
}
return $c;
}
4
They Are
The Same?
Not
Generally!
function foo2($a, $b, $c) {
$d = 0;
if ($a) {
$d += $a;
}
if ($b) {
$d += $b;
}
if ($c) {
$d += $c;
}
return $d;
}
CC:
NPath:
function foo2($a, $b, $c) {
$d = 0;
if ($a) {
$d += $a;
}
if ($b) {
$d += $b;
}
if ($c) {
$d += $c;
}
return $d;
}
CC:
NPath:
function foo2($a, $b, $c) {
$d = 0;
if ($a) {
$d += $a;
}
if ($b) {
$d += $b;
}
if ($c) {
$d += $c;
}
return $d;
}
CC: 4
NPath:
function foo2($a, $b, $c) {
$d = 0;
if ($a) {
$d += $a;
}
if ($b) {
$d += $b;
}
if ($c) {
$d += $c;
}
return $d;
}
CC: 4
NPath:
function foo2($a, $b, $c) {
$d = 0;
if ($a) {
$d += $a;
}
if ($b) {
$d += $b;
}
if ($c) {
$d += $c;
}
return $d;
}
CC: 4
NPath:
function foo2($a, $b, $c) {
$d = 0;
if ($a) {
$d += $a;
}
if ($b) {
$d += $b;
}
if ($c) {
$d += $c;
}
return $d;
}
CC: 4
NPath:
function foo2($a, $b, $c) {
$d = 0;
if ($a) {
$d += $a;
}
if ($b) {
$d += $b;
}
if ($c) {
$d += $c;
}
return $d;
}
CC: 4
NPath:
function foo2($a, $b, $c) {
$d = 0;
if ($a) {
$d += $a;
}
if ($b) {
$d += $b;
}
if ($c) {
$d += $c;
}
return $d;
}
CC: 4
NPath:
function foo2($a, $b, $c) {
$d = 0;
if ($a) {
$d += $a;
}
if ($b) {
$d += $b;
}
if ($c) {
$d += $c;
}
return $d;
}
CC: 4
NPath:
function foo2($a, $b, $c) {
$d = 0;
if ($a) {
$d += $a;
}
if ($b) {
$d += $b;
}
if ($c) {
$d += $c;
}
return $d;
}
CC: 4
NPath:
function foo2($a, $b, $c) {
$d = 0;
if ($a) {
$d += $a;
}
if ($b) {
$d += $b;
}
if ($c) {
$d += $c;
}
return $d;
}
CC: 4
NPath:
function foo2($a, $b, $c) {
$d = 0;
if ($a) {
$d += $a;
}
if ($b) {
$d += $b;
}
if ($c) {
$d += $c;
}
return $d;
}
CC: 4
NPath: 8
function foo2($a, $b, $c) {
$d = 0;
if ($a) {
$d += $a;
}
if ($b) {
$d += $b;
}
if ($c) {
$d += $c;
}
return $d;
}
CC: 4
NPath: 8
2^(CC-1)
N-Path Complexity
<16: Low Complexity
17-128: Moderate Complexity
129-1024: High Complexity
1025+: Very High Complexity
N-Path Complexity
Minimum Number Of
Tests Required To
Completely Test
A Routine
N-Path Complexity
entity_load()
CC:
N-Path:
N-Path Complexity
entity_load()
CC: 2
N-Path:
Cyclomatic Complexity
1 - 4: Low Complexity
5 - 7: Moderate Complexity
8 - 10: High Complexity
11+: Very High Complexity
N-Path Complexity
entity_load()
CC: 2
N-Path: 2
N-Path Complexity
drupal_http_request()
CC:
N-Path:
N-Path Complexity
drupal_http_request()
CC: 41
N-Path:
Cyclomatic Complexity
1 - 4: Low Complexity
5 - 7: Moderate Complexity
8 - 10: High Complexity
11+: Very High Complexity
N-Path Complexity
drupal_http_request()
CC: 41
N-Path: 25,303,344,960
To Completely Test
drupal_http_request()
At 1 Line Of Code Per Test
Would Require
2 Terabytes
Worth Of Tests
To Completely Test
drupal_http_request()
At 1 Line Of Code Per Test
Would Require
412 DVD's
Worth Of Tests
To Completely Test
drupal_http_request()
At 1 Line Of Code Per Test
Would Require
670k Drupals
Worth Of Tests
And That's Not
The Worst One!
N-Path Complexity
_date_repeat_rrule_process()
CC:
N-Path:
N-Path Complexity
_date_repeat_rrule_process()
CC: 81
N-Path:
N-Path Complexity
_date_repeat_rrule_process()
CC: 81
N-Path: 19,781,719,256
N-Path Complexity
_date_repeat_rrule_process()
CC: 81
N-Path: 19,781,719,256
,250,000,000,000
N-Path Complexity
_date_repeat_rrule_process()
CC: 81
N-Path: 19,781,719,256
,250,000,000,000
,000,000,000
To Completely Test
_date_repeat_rrule_process()
At 1 Line Of Code Per Test
Would Require
336T 2009's
Worth Of Tests
MicroSD Card
● About 387GB / cm^3
○ Current Density Record
MicroSD Card
● About 387GB / cm^3
○ Current Density Record
● About 184PB / Butt-Load
○ The text from every piece of written material in the
world...
MicroSD Card
● About 387GB / cm^3
○ Current Density Record
● About 184PB / Butt-Load
○ The text from every piece of written material in the
world...
● About 387PB / m^3
○ About 20 “MegaUpload.com Sites”
MicroSD Card
● About 387GB / cm^3
○ Current Density Record
● About 184PB / Butt-Load
○ The text from every piece of written material in the
world...
● About 387PB / m^3
○ About 20 “MegaUpload.com Sites”
● About 387YB / km^3
○ About 100,000 Google’s
To Completely Test
_date_repeat_rrule_process()
At 1 Line Of Code Per Test
Would Require
1 Greenland Ice Cap of
microSD cards
Worth Of Tests
N-Path Complexity
compose_pm()
CC:
N-Path:
N-Path Complexity
compose_pm()
CC: 331
N-Path:
Because Sending Private
Messages Is Hard...
N-Path Complexity
compose_pm()
CC: 331
N-Path:
N-Path Complexity
compose_pm()
CC: 331
N-Path: 12,334,686,665
N-Path Complexity
compose_pm()
CC: 331
N-Path: 12,334,686,665
,165,904,892,028
N-Path Complexity
compose_pm()
CC: 331
N-Path: 12,334,686,665
,165,904,892,028
,680,955,918,269
N-Path Complexity
compose_pm()
CC: 331
N-Path: 12,334,686,665
,165,904,892,028
,680,955,918,269
,333,860,397,338
N-Path Complexity
compose_pm()
CC: 331
N-Path: 12,334,686,665
,165,904,892,028
,680,955,918,269
,333,860,397,338
,867,187,500,000
N-Path Complexity
compose_pm()
CC: 331
N-Path: 12,334,686,665
,165,904,892,028
,680,955,918,269
,333,860,397,338
,867,187,500,000
,000,000,000,000
N-Path ComplexityCC: 331
N-Path: 12,334,686,665
,165,904,892,028
,680,955,918,269
,333,860,397,338
,867,187,500,000
,000,000,000,000
,000,000,000,000
To Completely Test
compose_pm()
At 1 Line Of Code Per Test
Would Require
1B BlackHoles
Worth Of Tests
CRAP
CRAP
(Change Risk Analysis Predictions)
CC = Cyclomatic Complexity (method)
COV = Test Coverage (percent)
CRAP = CC + (CC^2 * (1 - COV)^3)
CRAP
Relates Complexity
And Test Coverage
CRAP
Increasing Test Coverage Lowers CRAP
Decreasing Complexity Lowers CRAP
CRAP
A Low Complexity Method
With No Tests
Is Good
CRAP
A Low Complexity Method
With Good Tests
Is Great
CRAP
A Moderate Complexity Method
With Good Tests
Is OK
CRAP
A Moderate Complexity Method
With No Tests
Is CRAP
CRAP
< 5: GREAT Code
5 - 15: Acceptable Code
15-30: Eih... Code
30+: CRAPpy Code
A Word On
Refactoring
function foo2($a, $b, $c) {
$d = 0;
if ($a) {
$d += $a;
}
if ($b) {
$d += $b;
}
if ($c) {
$d += $c;
}
return $d;
}
function foo2($a, $b, $c) {
$d = 0;
$d += checkValue($a);
$d += checkValue($b);
$d += checkValue($c);
return $d;
}
function checkValue($v) {
if ($v) {
return $v;
}
return 0;
}
Quality Is A
Tradeoff
Between
Complexity And
Bloat
How Do We
Measure These
Metrics?
Quiz:
Only 2 Major QA Tools
NOT Made By Germans
What Are They?
PHP-CodeSniffer
Behat
Let’s Talk Tools
PHPLOC
PHPLOC
By Sebastian Bergmann
PHPLOC
By Sebastian Bergmann
Command Line Tool
PHPLOC
By Sebastian Bergmann
Command Line Tool
Summarizes An Entire
Codebase
$ phploc path/to/Drupal7/
Directories: 73
Files: 180
Lines of Code (LOC): 63347
Cyclomatic Complexity / Lines of Code: 0.04
Comment Lines of Code (CLOC): 19321
Non-Comment Lines of Code (NCLOC): 44026
Namespaces: 0
Interfaces: 1
Traits: 0
Classes: 38
Abstract: 2 (5.26%)
Concrete: 36 (94.74%)
Average Class Length (NCLOC): 197
Methods: 433
Scope:
Non-Static: 378 (87.30%)
Static: 55 (12.70%)
Visibility:
Public: 255 (58.89%)
Non-Public: 178 (41.11%)
Average Method Length (NCLOC): 17
Cyclomatic Complexity / Number of Methods: 3.02
Anonymous Functions: 0
Functions: 521
Constants: 22
Global constants: 15
Class constants: 7
PDepend
PDepend
By Manuel Pichler
(Also German)
PDepend
By Manuel Pichler
(Also German)
Like PHPLOC, But Granular
PDepend
By Manuel Pichler
(Also German)
Like PHPLOC, But Granular
Lower Level Analysis
Fanout: Describes Outward Dependencies
- Describes Dependence on Other Classes
ANDC: Average Num of Derived Classes
- Describes How Much Inheritance Is Used
AHH: Average Hiearchy Height
- Describes How Deep Of Inheritance Is Used
PHPMD
(Mess Detector)
PHPMD
By Manuel Pichler
(German)
PHPMD
By Manuel Pichler
(German)
Finds "Messy" Parts Of Code
PHPMD
By Manuel Pichler
(German)
Finds "Messy" Parts Of Code
Finds Rule Violations
PHPMD Rules
CodeSize
- (CC, NPath, Number of Methods, Size of Methods, etc)
Design
- (Eval, Goto, Exit(), Inheritance Depth)
Naming
- (Short names, Inconsistent Names)
Unused Code
Controversial
- (Superglobal Access, Naming Conventions)
Prevent Complex Code
From Even Getting In!
By Themselves
Useful
Over Time
Over Time
Invaluable
Jenkins-PHP
jenkins-php.org
Sonar
SonarSource.Com
Insight
insight.sensiolabs.com
Time For Some Fun!
Drupal 8.x Branch
Non-Comment Lines Of Code
Drupal 8.x Branch
Number Of Classes
Drupal 8.x Branch
Cyclomatic Complexity Per Method
Drupal 8.x Branch
Cyclomatic Complexity Per Line
Drupal 8.x Branch
One More Thing
To Keep In Mind
Do Not Rely Solely On
These Numbers
Instead,
Try To Understand At The
Bigger Picture
Anthony Ferrara
@ircmaxell
me@ircmaxell.com
blog.ircmaxell.com
github.com/ircmaxell
youtube.com/ircmaxell

Contenu connexe

Tendances

All I know about rsc.io/c2go
All I know about rsc.io/c2goAll I know about rsc.io/c2go
All I know about rsc.io/c2goMoriyoshi Koizumi
 
Как работает LLVM бэкенд в C#. Егор Богатов ➠ CoreHard Autumn 2019
Как работает LLVM бэкенд в C#. Егор Богатов ➠ CoreHard Autumn 2019Как работает LLVM бэкенд в C#. Егор Богатов ➠ CoreHard Autumn 2019
Как работает LLVM бэкенд в C#. Егор Богатов ➠ CoreHard Autumn 2019corehard_by
 
Tuga it 2016 - What's New In C# 6
Tuga it 2016 - What's New In C# 6Tuga it 2016 - What's New In C# 6
Tuga it 2016 - What's New In C# 6Paulo Morgado
 
C++ Programming - 2nd Study
C++ Programming - 2nd StudyC++ Programming - 2nd Study
C++ Programming - 2nd StudyChris Ohk
 
Ee 3122 numerical methods and statistics sessional credit
Ee 3122 numerical methods and statistics sessional  creditEe 3122 numerical methods and statistics sessional  credit
Ee 3122 numerical methods and statistics sessional creditRaihan Bin-Mofidul
 
C++ Question on References and Function Overloading
C++ Question on References and Function OverloadingC++ Question on References and Function Overloading
C++ Question on References and Function Overloadingmohamed sikander
 
Functional Programming in PHP
Functional Programming in PHPFunctional Programming in PHP
Functional Programming in PHPpwmosquito
 
C- Programs - Harsh
C- Programs - HarshC- Programs - Harsh
C- Programs - HarshHarsh Sharma
 
Being functional in PHP (PHPDay Italy 2016)
Being functional in PHP (PHPDay Italy 2016)Being functional in PHP (PHPDay Italy 2016)
Being functional in PHP (PHPDay Italy 2016)David de Boer
 

Tendances (20)

All I know about rsc.io/c2go
All I know about rsc.io/c2goAll I know about rsc.io/c2go
All I know about rsc.io/c2go
 
Как работает LLVM бэкенд в C#. Егор Богатов ➠ CoreHard Autumn 2019
Как работает LLVM бэкенд в C#. Егор Богатов ➠ CoreHard Autumn 2019Как работает LLVM бэкенд в C#. Егор Богатов ➠ CoreHard Autumn 2019
Как работает LLVM бэкенд в C#. Егор Богатов ➠ CoreHard Autumn 2019
 
Tuga it 2016 - What's New In C# 6
Tuga it 2016 - What's New In C# 6Tuga it 2016 - What's New In C# 6
Tuga it 2016 - What's New In C# 6
 
C++ Programming - 2nd Study
C++ Programming - 2nd StudyC++ Programming - 2nd Study
C++ Programming - 2nd Study
 
Ee 3122 numerical methods and statistics sessional credit
Ee 3122 numerical methods and statistics sessional  creditEe 3122 numerical methods and statistics sessional  credit
Ee 3122 numerical methods and statistics sessional credit
 
Static and const members
Static and const membersStatic and const members
Static and const members
 
Stl algorithm-Basic types
Stl algorithm-Basic typesStl algorithm-Basic types
Stl algorithm-Basic types
 
C++ Question on References and Function Overloading
C++ Question on References and Function OverloadingC++ Question on References and Function Overloading
C++ Question on References and Function Overloading
 
Functional Programming in PHP
Functional Programming in PHPFunctional Programming in PHP
Functional Programming in PHP
 
C++ file
C++ fileC++ file
C++ file
 
C- Programs - Harsh
C- Programs - HarshC- Programs - Harsh
C- Programs - Harsh
 
C++ TUTORIAL 7
C++ TUTORIAL 7C++ TUTORIAL 7
C++ TUTORIAL 7
 
Pratik Bakane C++
Pratik Bakane C++Pratik Bakane C++
Pratik Bakane C++
 
C++ TUTORIAL 8
C++ TUTORIAL 8C++ TUTORIAL 8
C++ TUTORIAL 8
 
Mpibhseguranca3
Mpibhseguranca3Mpibhseguranca3
Mpibhseguranca3
 
Cquestions
Cquestions Cquestions
Cquestions
 
C++ Programs
C++ ProgramsC++ Programs
C++ Programs
 
Functional C++
Functional C++Functional C++
Functional C++
 
Sol10
Sol10Sol10
Sol10
 
Being functional in PHP (PHPDay Italy 2016)
Being functional in PHP (PHPDay Italy 2016)Being functional in PHP (PHPDay Italy 2016)
Being functional in PHP (PHPDay Italy 2016)
 

En vedette

Development by the numbers
Development by the numbersDevelopment by the numbers
Development by the numbersAnthony Ferrara
 
Don't Be STUPID, Grasp SOLID - DrupalCon Prague
Don't Be STUPID, Grasp SOLID - DrupalCon PragueDon't Be STUPID, Grasp SOLID - DrupalCon Prague
Don't Be STUPID, Grasp SOLID - DrupalCon PragueAnthony Ferrara
 
Don't Be STUPID, Grasp SOLID - ConFoo Edition
Don't Be STUPID, Grasp SOLID - ConFoo EditionDon't Be STUPID, Grasp SOLID - ConFoo Edition
Don't Be STUPID, Grasp SOLID - ConFoo EditionAnthony Ferrara
 
Beyond design patterns phpnw14
Beyond design patterns   phpnw14Beyond design patterns   phpnw14
Beyond design patterns phpnw14Anthony Ferrara
 
Password Storage And Attacking In PHP - PHP Argentina
Password Storage And Attacking In PHP - PHP ArgentinaPassword Storage And Attacking In PHP - PHP Argentina
Password Storage And Attacking In PHP - PHP ArgentinaAnthony Ferrara
 
PHP, Under The Hood - DPC
PHP, Under The Hood - DPCPHP, Under The Hood - DPC
PHP, Under The Hood - DPCAnthony Ferrara
 

En vedette (6)

Development by the numbers
Development by the numbersDevelopment by the numbers
Development by the numbers
 
Don't Be STUPID, Grasp SOLID - DrupalCon Prague
Don't Be STUPID, Grasp SOLID - DrupalCon PragueDon't Be STUPID, Grasp SOLID - DrupalCon Prague
Don't Be STUPID, Grasp SOLID - DrupalCon Prague
 
Don't Be STUPID, Grasp SOLID - ConFoo Edition
Don't Be STUPID, Grasp SOLID - ConFoo EditionDon't Be STUPID, Grasp SOLID - ConFoo Edition
Don't Be STUPID, Grasp SOLID - ConFoo Edition
 
Beyond design patterns phpnw14
Beyond design patterns   phpnw14Beyond design patterns   phpnw14
Beyond design patterns phpnw14
 
Password Storage And Attacking In PHP - PHP Argentina
Password Storage And Attacking In PHP - PHP ArgentinaPassword Storage And Attacking In PHP - PHP Argentina
Password Storage And Attacking In PHP - PHP Argentina
 
PHP, Under The Hood - DPC
PHP, Under The Hood - DPCPHP, Under The Hood - DPC
PHP, Under The Hood - DPC
 

Similaire à Development By The Numbers - ConFoo Edition

Static Optimization of PHP bytecode (PHPSC 2017)
Static Optimization of PHP bytecode (PHPSC 2017)Static Optimization of PHP bytecode (PHPSC 2017)
Static Optimization of PHP bytecode (PHPSC 2017)Nikita Popov
 
Graph Databases
Graph DatabasesGraph Databases
Graph DatabasesJosh Adell
 
CoffeeScript
CoffeeScriptCoffeeScript
CoffeeScriptMark
 
Super TypeScript II Turbo - FP Remix (NG Conf 2017)
Super TypeScript II Turbo - FP Remix (NG Conf 2017)Super TypeScript II Turbo - FP Remix (NG Conf 2017)
Super TypeScript II Turbo - FP Remix (NG Conf 2017)Sean May
 
Simple Ways To Be A Better Programmer (OSCON 2007)
Simple Ways To Be A Better Programmer (OSCON 2007)Simple Ways To Be A Better Programmer (OSCON 2007)
Simple Ways To Be A Better Programmer (OSCON 2007)Michael Schwern
 
PHPCon 2016: PHP7 by Witek Adamus / XSolve
PHPCon 2016: PHP7 by Witek Adamus / XSolvePHPCon 2016: PHP7 by Witek Adamus / XSolve
PHPCon 2016: PHP7 by Witek Adamus / XSolveXSolve
 
From typing the test to testing the type
From typing the test to testing the typeFrom typing the test to testing the type
From typing the test to testing the typeWim Godden
 
lldb – Debugger auf Abwegen
lldb – Debugger auf Abwegenlldb – Debugger auf Abwegen
lldb – Debugger auf Abwegeninovex GmbH
 
Lessons learned from functional programming
Lessons learned from functional programmingLessons learned from functional programming
Lessons learned from functional programmingBryceLohr
 
C - programming - Ankit Kumar Singh
C - programming - Ankit Kumar Singh C - programming - Ankit Kumar Singh
C - programming - Ankit Kumar Singh AnkitSinghRajput35
 
JavaScript for PHP developers
JavaScript for PHP developersJavaScript for PHP developers
JavaScript for PHP developersStoyan Stefanov
 
How to not write a boring test in Golang
How to not write a boring test in GolangHow to not write a boring test in Golang
How to not write a boring test in GolangDan Tran
 
Advanced php
Advanced phpAdvanced php
Advanced phpAnne Lee
 
Concurrent applications with free monads and stm
Concurrent applications with free monads and stmConcurrent applications with free monads and stm
Concurrent applications with free monads and stmAlexander Granin
 
ECCV2008: MAP Estimation Algorithms in Computer Vision - Part 1
ECCV2008: MAP Estimation Algorithms in Computer Vision - Part 1ECCV2008: MAP Estimation Algorithms in Computer Vision - Part 1
ECCV2008: MAP Estimation Algorithms in Computer Vision - Part 1zukun
 

Similaire à Development By The Numbers - ConFoo Edition (20)

Static Optimization of PHP bytecode (PHPSC 2017)
Static Optimization of PHP bytecode (PHPSC 2017)Static Optimization of PHP bytecode (PHPSC 2017)
Static Optimization of PHP bytecode (PHPSC 2017)
 
Data Binding in qooxdoo
Data Binding in qooxdooData Binding in qooxdoo
Data Binding in qooxdoo
 
Graph Databases
Graph DatabasesGraph Databases
Graph Databases
 
C test
C testC test
C test
 
CoffeeScript
CoffeeScriptCoffeeScript
CoffeeScript
 
Super TypeScript II Turbo - FP Remix (NG Conf 2017)
Super TypeScript II Turbo - FP Remix (NG Conf 2017)Super TypeScript II Turbo - FP Remix (NG Conf 2017)
Super TypeScript II Turbo - FP Remix (NG Conf 2017)
 
Functional php
Functional phpFunctional php
Functional php
 
Simple Ways To Be A Better Programmer (OSCON 2007)
Simple Ways To Be A Better Programmer (OSCON 2007)Simple Ways To Be A Better Programmer (OSCON 2007)
Simple Ways To Be A Better Programmer (OSCON 2007)
 
PHPCon 2016: PHP7 by Witek Adamus / XSolve
PHPCon 2016: PHP7 by Witek Adamus / XSolvePHPCon 2016: PHP7 by Witek Adamus / XSolve
PHPCon 2016: PHP7 by Witek Adamus / XSolve
 
From typing the test to testing the type
From typing the test to testing the typeFrom typing the test to testing the type
From typing the test to testing the type
 
lldb – Debugger auf Abwegen
lldb – Debugger auf Abwegenlldb – Debugger auf Abwegen
lldb – Debugger auf Abwegen
 
Lessons learned from functional programming
Lessons learned from functional programmingLessons learned from functional programming
Lessons learned from functional programming
 
C - programming - Ankit Kumar Singh
C - programming - Ankit Kumar Singh C - programming - Ankit Kumar Singh
C - programming - Ankit Kumar Singh
 
JavaScript for PHP developers
JavaScript for PHP developersJavaScript for PHP developers
JavaScript for PHP developers
 
How to not write a boring test in Golang
How to not write a boring test in GolangHow to not write a boring test in Golang
How to not write a boring test in Golang
 
Method::Signatures
Method::SignaturesMethod::Signatures
Method::Signatures
 
Advanced php
Advanced phpAdvanced php
Advanced php
 
Ai4 heuristic2
Ai4 heuristic2Ai4 heuristic2
Ai4 heuristic2
 
Concurrent applications with free monads and stm
Concurrent applications with free monads and stmConcurrent applications with free monads and stm
Concurrent applications with free monads and stm
 
ECCV2008: MAP Estimation Algorithms in Computer Vision - Part 1
ECCV2008: MAP Estimation Algorithms in Computer Vision - Part 1ECCV2008: MAP Estimation Algorithms in Computer Vision - Part 1
ECCV2008: MAP Estimation Algorithms in Computer Vision - Part 1
 

Dernier

Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Drew Madelung
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)Gabriella Davis
 
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 StreamsRoshan Dwivedi
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024Results
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slidespraypatel2
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking MenDelhi Call girls
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfEnterprise Knowledge
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024The Digital Insurer
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxKatpro Technologies
 
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘RTylerCroy
 
Developing An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of BrazilDeveloping An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of BrazilV3cube
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountPuma Security, LLC
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdfhans926745
 
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...gurkirankumar98700
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...apidays
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptxHampshireHUG
 
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
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024The Digital Insurer
 

Dernier (20)

Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
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
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slides
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
 
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
Developing An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of BrazilDeveloping An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of Brazil
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path Mount
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
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
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024
 

Development By The Numbers - ConFoo Edition