SlideShare a Scribd company logo
1 of 33
MAINTAINING LEGACY
APPLICATIONS
by Bernhard Breytenbach
ABOUT ME
Started with PHP in 2005
Developer at MDS Technologies
@BBreyten on Twitter
lanyrd.com/cfmmrb | joind.in/14838
WHAT IS LEGACY SOFTWARE?
“The secondary value of software is its
behavior... It’s achieved when the current
software meets the current needs of the
current user... But the needs of the users
change, and they do so frequently... Thus the
primary value of software is its ability to
change.”
— Robert C. Martin (Uncle Bob)
WHAT IS LEGACY SOFTWARE?
Legacy software is software that is unable to change easily
Software that is difficult to read and reuse
“DON’T MAINTAIN, REWRITE!”
NETSCAPE NAVIGATOR
THE DANGERS OF REWRITE
REFACTORING
Refactoring is the process of restructuring
existing code without changing its external
behavior, in order to improve readability and
reduce code complexity, as to improve source
code maintainability and create a more
expressive internal architecture or object
model to improve extensibility.
https://en.wikipedia.org/wiki/Code_refactoring
RULES OF REFACTORING
Small iterative changes
Make sure everything still works
Send to QA, Push to Production
Do the next small change
TYPES OF LEGACY SYSTEMS
Standalone App
Framework (MVC)
Plugins/Modules
VERSION CONTROL
DEPLOYMENT
PICK A CODING STANDARD
PSR1 & PSR2
Only one standard
SETUP AUTOLOADING
spl_autoload_register(function ($class)
{
    $prefix = 'FooBar';
    $base_dir = __DIR__ . '/src/';
    $len = strlen($prefix);
    if (strncmp($prefix, $class, $len) !== 0) {
        return;
    }
    $relative_class = substr($class, $len);
    $file = $base_dir . str_replace('', '/', $relative_class) . '.php';
    // if the file exists, require it
    if (file_exists($file)) {
        require $file;
    }
});
COMPOSER AUTOLOADING
{
    "autoload": {
        "psr­0": {
            "FooBar":"src/",
        },
        "psr­4": {
            "FooBar":"src/",
        }
    }
}
bootstrap.php
require "vendor/autoload.php"
DIRECTORY STRUCTURE
public/
src/
vendor/
bootstrap.php
MOVE FUNCTIONALITY INTO CLASSES
Get rid of includes
One class per file
Files should declare new symbols, or cause side effects, but
not do both.
REPLACE MAGIC NUMBERS WITH CONSTANTS
if ($status­>id === 15)
if ($user­>type === 3)
if ($code === 418)
if ($status­>id === Status::CANCELLED)
if ($user­>type === User::TYPE_ADMIN)
if ($code === Response::HTTP_I_AM_A_TEAPOT)
DEPENDENCY INJECTION
<?php
class UserRepository
{
    public function getUsers()
    {
        global $db;
        $sql = 'select * from users;';
        return $db­>select($sql);
    }
}
DEPENDENCY INJECTION
<?php
class UserRepository
{
    public function getUsers()
    {
        $db = Db::getInstance();
        $sql = 'select * from users;';
        return $db­>select($sql);
    }
}
DEPENDENCY INJECTION
<?php
class UserRepository
{
    protected $db;
    public function __construct()
    {
        global $db;
        $this­>db = $db;
    }
    public function getUsers()
    {
        $sql = 'select * from users;';
        return $this­>db­>select($sql);
    }
}
DEPENDENCY INJECTION
<?php
class UserRepository
{
    protected $db;
    public function __construct($db)
    {
        $this­>db = $db;
    }
    public function getUsers()
    {
        $sql = 'select * from users;';
        return $this­>db­>select($sql);
    }
}
BREAK UP LARGE CLASSES/FUNCTIONS
Large functions is where classes go to hide.
PROTECTION LAYER
<?php
class User
{
    protected $attributes = [];
    public function __construct($attributes)
    {
        $this­>attributes = $attributes;
    }
    public function getId()
    {
        return $this­>attributes['UserName'];
    }
    public function getUserName()
    {
        return $this­>attributes['UserName'];
    }
}
PLAN OF ACTION
Take Charge!
Baby steps
Fail fast, fail cheap
PLUGINS/MODULES
Globals only allowed in the master file
If global is a class, initialize in construct
All globals should be passed on as is
PLUGINS/MODULES
<?php
include('autoload.php');
class some_required_class_name extends some_base_class
{
    private $db;
    public function __construct()
    {
        global $db;
        $this­>db = $db;
    }
    public function get_info($data)
    {
        global $token;
        $infoGetter = new InfoGetter($this­>db);
        return $infoGetter­>get($data­>id, $token);
    }
}
PRESTASHOP
<?php
// Avoid direct access to the file
if (!defined('_PS_VERSION_')) {
    exit;
}
require_once('bootstrap.php');
class MdsCollivery extends CarrierModule
{
    protected $collivery;
    protected $db;
    protected $hooks = array(
        'displayFooter',
        'displayShoppingCart',
        'displayAdminOrder',
    );
    public function __construct()
    {
        $this­>name = 'mds';
        $this­>tab = 'shipping_logistics';
        $this­>version = '1.0';
PRESTASHOP
<?php
define('_MDS_DIR_', __DIR__);
class MdsColliveryAutoloader
{
  protected static $classMap = array(
    'Mds_View'         => 'MdsPrestashopHelpersView',
    'Mds_ColliveryApi' => 'MdsPrestashopColliveryColliveryApi'
    'Mds_Install'      => 'MdsPrestashopInstallerInstall',
  );
  public static function autoload($class)
  {
    if (array_key_exists($class, self::$classMap)) {
      class_alias(self::$classMap[$class], $class);
    } else {
      $classParts = explode('', $class);
      $vendor = array_shift($classParts);
      if ($vendor === 'Mds') {
        require _MDS_DIR_ . '/' . implode('/', $classParts
      }
    }
  }
}
IS IT NEVER GOOD TO REWRITE?
WHEN CAN I REWRITE?
The new system is vastly out of scope, or the current system
simply can’t meet the new requirements.
You have to change Programming Language/Framework
You have lots of time, money and resources
RULES OF A REWRITE
Both systems need to run in parallel
Spend as little time as possible between deploys
Fail fast, fail cheap
Don’t try and change everything
Use @deprecated
Work closely with the current devs
Always be ready to implement new features
The key to success is not perfection, but making peace with the
term good enough, and then moving on.

More Related Content

Viewers also liked

Jelly baby task
Jelly baby taskJelly baby task
Jelly baby tasktaiam98
 
Directional Drilling Basics
Directional Drilling BasicsDirectional Drilling Basics
Directional Drilling BasicsRobert Smith
 
Происхождение артиллерийских ударов по позициям украинских военных в восточ...
Происхождение артиллерийских ударов по  позициям украинских военных  в восточ...Происхождение артиллерийских ударов по  позициям украинских военных  в восточ...
Происхождение артиллерийских ударов по позициям украинских военных в восточ...Dmytro Lysiuk
 
Giver introduction giver
Giver introduction   giverGiver introduction   giver
Giver introduction giverJulie Hendrix
 
Bevel Brands Investor Presentation 12.28.15v3
Bevel Brands Investor Presentation 12.28.15v3Bevel Brands Investor Presentation 12.28.15v3
Bevel Brands Investor Presentation 12.28.15v3Bruce Shalett
 
Giver chp 4 characters
Giver chp 4 charactersGiver chp 4 characters
Giver chp 4 charactersJulie Hendrix
 
Когда нужно подумать о пенсии?
Когда нужно подумать о пенсии?Когда нужно подумать о пенсии?
Когда нужно подумать о пенсии?Aleksandr Cryptoved
 
Genre research
Genre research Genre research
Genre research taiam98
 
E.E D.l.W training report BY Ankit Kumar EN 2 year
E.E  D.l.W training report BY Ankit Kumar EN 2 yearE.E  D.l.W training report BY Ankit Kumar EN 2 year
E.E D.l.W training report BY Ankit Kumar EN 2 yearankit kumar
 
Ukrainian Municipal Survey, 20 January – 8 February, 2016
Ukrainian Municipal Survey, 20 January – 8 February, 2016Ukrainian Municipal Survey, 20 January – 8 February, 2016
Ukrainian Municipal Survey, 20 January – 8 February, 2016Dmytro Lysiuk
 
Chap 17 themes peter rabbit homophone quiz
Chap 17 themes peter rabbit homophone quizChap 17 themes peter rabbit homophone quiz
Chap 17 themes peter rabbit homophone quizJulie Hendrix
 
RFID Reader 125KHz USB Serial
RFID Reader 125KHz USB SerialRFID Reader 125KHz USB Serial
RFID Reader 125KHz USB SerialRaghav Shetty
 
Interrogative pronouns
Interrogative pronounsInterrogative pronouns
Interrogative pronounsMaisara Harun
 

Viewers also liked (13)

Jelly baby task
Jelly baby taskJelly baby task
Jelly baby task
 
Directional Drilling Basics
Directional Drilling BasicsDirectional Drilling Basics
Directional Drilling Basics
 
Происхождение артиллерийских ударов по позициям украинских военных в восточ...
Происхождение артиллерийских ударов по  позициям украинских военных  в восточ...Происхождение артиллерийских ударов по  позициям украинских военных  в восточ...
Происхождение артиллерийских ударов по позициям украинских военных в восточ...
 
Giver introduction giver
Giver introduction   giverGiver introduction   giver
Giver introduction giver
 
Bevel Brands Investor Presentation 12.28.15v3
Bevel Brands Investor Presentation 12.28.15v3Bevel Brands Investor Presentation 12.28.15v3
Bevel Brands Investor Presentation 12.28.15v3
 
Giver chp 4 characters
Giver chp 4 charactersGiver chp 4 characters
Giver chp 4 characters
 
Когда нужно подумать о пенсии?
Когда нужно подумать о пенсии?Когда нужно подумать о пенсии?
Когда нужно подумать о пенсии?
 
Genre research
Genre research Genre research
Genre research
 
E.E D.l.W training report BY Ankit Kumar EN 2 year
E.E  D.l.W training report BY Ankit Kumar EN 2 yearE.E  D.l.W training report BY Ankit Kumar EN 2 year
E.E D.l.W training report BY Ankit Kumar EN 2 year
 
Ukrainian Municipal Survey, 20 January – 8 February, 2016
Ukrainian Municipal Survey, 20 January – 8 February, 2016Ukrainian Municipal Survey, 20 January – 8 February, 2016
Ukrainian Municipal Survey, 20 January – 8 February, 2016
 
Chap 17 themes peter rabbit homophone quiz
Chap 17 themes peter rabbit homophone quizChap 17 themes peter rabbit homophone quiz
Chap 17 themes peter rabbit homophone quiz
 
RFID Reader 125KHz USB Serial
RFID Reader 125KHz USB SerialRFID Reader 125KHz USB Serial
RFID Reader 125KHz USB Serial
 
Interrogative pronouns
Interrogative pronounsInterrogative pronouns
Interrogative pronouns
 

Similar to Maintaining legacy applications

Building Large Scale PHP Web Applications with Laravel 4
Building Large Scale PHP Web Applications with Laravel 4Building Large Scale PHP Web Applications with Laravel 4
Building Large Scale PHP Web Applications with Laravel 4Darwin Biler
 
Beyond MVC: from Model to Domain
Beyond MVC: from Model to DomainBeyond MVC: from Model to Domain
Beyond MVC: from Model to DomainJeremy Cook
 
2009 Dotnet Information Day: More effective c#
2009 Dotnet Information Day: More effective c#2009 Dotnet Information Day: More effective c#
2009 Dotnet Information Day: More effective c#Daniel Fisher
 
Osiąganie mądrej architektury z Symfony2
Osiąganie mądrej architektury z Symfony2 Osiąganie mądrej architektury z Symfony2
Osiąganie mądrej architektury z Symfony2 3camp
 
OWASP TOP 10 for PHP Programmers
OWASP TOP 10 for PHP ProgrammersOWASP TOP 10 for PHP Programmers
OWASP TOP 10 for PHP Programmersrjsmelo
 
Code decoupling from Symfony (and others frameworks) - PHP Conference Brasil ...
Code decoupling from Symfony (and others frameworks) - PHP Conference Brasil ...Code decoupling from Symfony (and others frameworks) - PHP Conference Brasil ...
Code decoupling from Symfony (and others frameworks) - PHP Conference Brasil ...Miguel Gallardo
 
Real World Dependency Injection - phpday
Real World Dependency Injection - phpdayReal World Dependency Injection - phpday
Real World Dependency Injection - phpdayStephan Hochdörfer
 
A resource oriented framework using the DI/AOP/REST triangle
A resource oriented framework using the DI/AOP/REST triangleA resource oriented framework using the DI/AOP/REST triangle
A resource oriented framework using the DI/AOP/REST triangleAkihito Koriyama
 
How to code to code less
How to code to code lessHow to code to code less
How to code to code lessAnton Novikau
 
Introduction To Code Igniter
Introduction To Code IgniterIntroduction To Code Igniter
Introduction To Code IgniterAmzad Hossain
 
Nt1310 Unit 3 Language Analysis
Nt1310 Unit 3 Language AnalysisNt1310 Unit 3 Language Analysis
Nt1310 Unit 3 Language AnalysisNicole Gomez
 
Come abbiamo scalato Dazn con micro-architetture
Come abbiamo scalato Dazn con micro-architettureCome abbiamo scalato Dazn con micro-architetture
Come abbiamo scalato Dazn con micro-architettureCommit University
 
Create a res tful services api in php.
Create a res tful services api in php.Create a res tful services api in php.
Create a res tful services api in php.Adeoye Akintola
 
Benefit of CodeIgniter php framework
Benefit of CodeIgniter php frameworkBenefit of CodeIgniter php framework
Benefit of CodeIgniter php frameworkBo-Yi Wu
 
Domain Driven Design using Laravel
Domain Driven Design using LaravelDomain Driven Design using Laravel
Domain Driven Design using Laravelwajrcs
 
Dependency injection Drupal Camp Wrocław 2014
Dependency injection Drupal Camp Wrocław 2014Dependency injection Drupal Camp Wrocław 2014
Dependency injection Drupal Camp Wrocław 2014Greg Szczotka
 
Real World Dependency Injection - phpugffm13
Real World Dependency Injection - phpugffm13Real World Dependency Injection - phpugffm13
Real World Dependency Injection - phpugffm13Stephan Hochdörfer
 

Similar to Maintaining legacy applications (20)

Building Large Scale PHP Web Applications with Laravel 4
Building Large Scale PHP Web Applications with Laravel 4Building Large Scale PHP Web Applications with Laravel 4
Building Large Scale PHP Web Applications with Laravel 4
 
Beyond MVC: from Model to Domain
Beyond MVC: from Model to DomainBeyond MVC: from Model to Domain
Beyond MVC: from Model to Domain
 
2009 Dotnet Information Day: More effective c#
2009 Dotnet Information Day: More effective c#2009 Dotnet Information Day: More effective c#
2009 Dotnet Information Day: More effective c#
 
Osiąganie mądrej architektury z Symfony2
Osiąganie mądrej architektury z Symfony2 Osiąganie mądrej architektury z Symfony2
Osiąganie mądrej architektury z Symfony2
 
OWASP TOP 10 for PHP Programmers
OWASP TOP 10 for PHP ProgrammersOWASP TOP 10 for PHP Programmers
OWASP TOP 10 for PHP Programmers
 
Code decoupling from Symfony (and others frameworks) - PHP Conference Brasil ...
Code decoupling from Symfony (and others frameworks) - PHP Conference Brasil ...Code decoupling from Symfony (and others frameworks) - PHP Conference Brasil ...
Code decoupling from Symfony (and others frameworks) - PHP Conference Brasil ...
 
Real World Dependency Injection - phpday
Real World Dependency Injection - phpdayReal World Dependency Injection - phpday
Real World Dependency Injection - phpday
 
A resource oriented framework using the DI/AOP/REST triangle
A resource oriented framework using the DI/AOP/REST triangleA resource oriented framework using the DI/AOP/REST triangle
A resource oriented framework using the DI/AOP/REST triangle
 
How to code to code less
How to code to code lessHow to code to code less
How to code to code less
 
Introduction To Code Igniter
Introduction To Code IgniterIntroduction To Code Igniter
Introduction To Code Igniter
 
Nt1310 Unit 3 Language Analysis
Nt1310 Unit 3 Language AnalysisNt1310 Unit 3 Language Analysis
Nt1310 Unit 3 Language Analysis
 
Come abbiamo scalato Dazn con micro-architetture
Come abbiamo scalato Dazn con micro-architettureCome abbiamo scalato Dazn con micro-architetture
Come abbiamo scalato Dazn con micro-architetture
 
Create a res tful services api in php.
Create a res tful services api in php.Create a res tful services api in php.
Create a res tful services api in php.
 
Benefit of CodeIgniter php framework
Benefit of CodeIgniter php frameworkBenefit of CodeIgniter php framework
Benefit of CodeIgniter php framework
 
Domain Driven Design using Laravel
Domain Driven Design using LaravelDomain Driven Design using Laravel
Domain Driven Design using Laravel
 
Dependency injection Drupal Camp Wrocław 2014
Dependency injection Drupal Camp Wrocław 2014Dependency injection Drupal Camp Wrocław 2014
Dependency injection Drupal Camp Wrocław 2014
 
SOLID Ruby SOLID Rails
SOLID Ruby SOLID RailsSOLID Ruby SOLID Rails
SOLID Ruby SOLID Rails
 
Real World Dependency Injection - phpugffm13
Real World Dependency Injection - phpugffm13Real World Dependency Injection - phpugffm13
Real World Dependency Injection - phpugffm13
 
Hexagonal architecture in PHP
Hexagonal architecture in PHPHexagonal architecture in PHP
Hexagonal architecture in PHP
 
Spout
SpoutSpout
Spout
 

Recently uploaded

Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityPrincipled Technologies
 
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
 
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
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsMaria Levchenko
 
[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
 
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
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Igalia
 
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
 
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 organizationRadu Cotescu
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonetsnaman860154
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
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
 
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
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Miguel Araújo
 
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 2024Rafal Los
 
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
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Servicegiselly40
 
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
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc
 

Recently uploaded (20)

Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
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
 
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
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
[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
 
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 ...
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
 
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
 
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
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 
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...
 
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
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
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
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 
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
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 

Maintaining legacy applications