SlideShare a Scribd company logo
PHP 7.1
ELEGANCE OF OUR LEGACY
010 PHP, Rotterdam, Netherlands, October 2016
[RC4]
AGENDA
• PHP 7.0 is already on the way out
• PHP 7.1
• RC4 at the moment, so 2 more weeks to wait
• What's new in this version
• What is incompatible with the previous version
• How to do migration
SPEAKER
• Damien Seguy
• Exakat CTO
• Ik ben een boterham
• Static analysis of PHP code
• Get a full report of
compliance for your code
with the exakat engine
ALS JE BLIJFT
QUESTIONS
DONEC QUIS NUNC
LIVING ON THE BLEEDING EDGE
http://php.net/manual/en/migration71.php
https://github.com/php/php-src/blob/master/UPGRADING
https://github.com/php/php-src/blob/master/NEWS
https://wiki.php.net/rfc
http://bugs.php.net/
QUAM UT PRÆPARATE PRO AGENTIBUS
HOW TO PREPARE FOR MIGRATION
• Code knowledge
• lint
• Grep / Search
• Static analysis
• Logs / error_reporting
• You know your code
• php -l on every file
• Fast, universal, false positives
• Exakat, phan
• Run the tests, check logs
QUAM UT PRÆPARATE PRO AGENTIBUS
HOW TO PREPARE FOR MIGRATION
• Code knowledge
• lint
• Grep / Search
• Static analysis
• Logs / error_reporting
• You know your code
• php -l on every file
• Fast, universal, false positives
• Exakat, phan
• Run the tests, check logs
PHP 7.1 : elegance of our legacy
INCOMPATIBILITIES
MODERNIZATIONS
NEW FEATURES
INCOMPATIBILITIES
MCRYPT IS DEPRECATED
• "libmcrypt is a dead project, unmaintained for ~8 years, last
version 2.5.8 was released in February 2007!"
• It emits a E_DEPRECATED notice
• Switch to OpenSSL for serious cryptography
• phpseclib (http://phpseclib.sourceforge.net/)
$THIS IS NOT A WARNING ANYMORE
<?php
function foo($this) { /**/ }
// Fatal error: Cannot use $this as parameter
?>
• Parameter
• Static variable
• Global variable
• Foreach variable
• Catch'ed variable
• Variable variable
• Reference
• Result of extract() or parse_str
RAND() IS NOW AN ALIAS OF MT_RAND()
• RAND() is on its way out
• Since PHP 7.0, use random_int() and random_bytes()
• They provide CSPRN
• Throws exception if it can't
• RAND() is replaced by mt_rand(), better random
• In case the order of the serie is important, beware!
RAND() TO MT_RAND() TO MT_RAND() *
<?php
  srand(10);
  print rand()."n";
  print rand()."n";
  print rand()."n";
?>
1215069295
1311962008
1086128678
1656398468
641584702
44564466
502355954
641584702
2112621188
  mt_srand(10, MT_RAND_PHP);
PHP 7.1
PHP 7.1
PHP 7.0
RAND MT_RAND
PHP 7.0
MISSING ARG IS EXCEPTION
<?php
function test($param){}
test();
PHP Warning: Missing argument 1 for test()
Fatal error: Uncaught ArgumentCountError: Too few
arguments to function test(), 0 passed
PHP 7.0
PHP 7.1
CAN'T BE CALLED DYNAMICALLY ANYMORE
• extract()
• compact()
• get_defined_vars()
• func_get_args()
• func_get_arg()
• func_num_args()
• parse_str() with one argument
• mb_parse_str() with one argument
• assert() with a string argument
Creates too many variables, 

in too many different ways
<?php
namespace {
    function test($a, $b, $c) {
        var_dump(call_user_func('func_num_args'));
    }
    test(1, 2, 3);
}
 
namespace Foo {
    function test($a, $b, $c) {
        var_dump(call_user_func('func_num_args'));
    }
    test(1, 2, 3);
}
?>
PHP 7.0 : int(3)
PHP 7.1 : int(1)
PHP 7.0 : int(1)
PHP 7.1 : int(1)
__DESTRUCTOR ONLY WHEN OBJECT IS COMPLETE
<?php
function throwme($arg) {
   throw new Exception;
}
try {
  $bar = new foo;
} catch(Exception $exc) {
  echo "Caught exception!n";
}
?>
Inside constructor
Caught exception!
Inside constructor
Inside destructor
Caught exception!
https://bugs.php.net/bug.php?id=29368
MODERNIZATION
VOID TYPE
• New pseudo-type for functions that don't return a value
• Not for type hint
<?php
function fooEmpty ($arg) : void {
    return ;
}
function foo ($arg) : void {
}
function fooWithNull ($arg) : void {
    return NULL; // not OK : explicit
}
?>
ITERABLE TYPE
<?php 
function bar($option): iterable { 
   if ($option == 'array') {
     return [1, 2, 3]; 
  } else {
     return new ArrayAccessClass([1,2,3]);
  }
} 
?>
• New pseudo-type that represents arrays and ArrayAccess
• Both may be given to a foreach() loop
• This doesn't work on Closure nor Generators
NULLABLE TYPES
<?php
function foo(): ?int  {
    return null; //ok
    return 3;    //ok
    return "3";  //ok, no strict
    return "no"; //never OK
}
function bar(): ?void  { }
 
?>
• Accepts ? before the type hint
• This means that null is accepted
Fatal error: Void type cannot be nullable
NULLABLE TYPES AND DEFAULT
<?php
function bar(?string $msg = “default”) {
    if ($msg!== null) {
        echo $msg;
    }
}
bar("ok") ;       // OK
bar(4) ;          // OK, cast to string
bar(null) ;       // OK, displays nothing
bar() ;           // OK, display 'default'
bar([1,2,3]) ;    // Not OK
?>
CATCHING MORE EXCEPTIONS
<?php
try {
   attemptSomething();
} catch (RuntimeException $e) {
  fixSomething();
} catch (InvalidArgumentException $e) {
  fixSomething();
} catch (BadFunctioncallException $e) {
  fixSomethingElse();
} 
EVEN MORE CATCHING EXCEPTIONS
Federate error catching in catch clause
Only for Catch
no Type Hint, no Return Type Hint, no instanceof
<?php
try {
   attemptSomething();
} catch (RuntimeException| 
InvalidArgumentException $e) {
  fixSomething();
} catch (BadFunctioncallException $e) {
  fixSomethingElse();
} 
OCTAL SEQUENCES
• Octal sequences that are beyond 377 are now reported
<?php
print "123n"; // Prints S
print "523n"; // Prints S too
?>
Octal escape sequence overflow 523 is greater than 377
STRING SEQUENCES REMINDER
• 0, x, u{}
<?php   
echo "123";
echo "x53";
echo chr(83);
echo "xe4xbaxba";
echo "u{4EBA}";
S
ARITHMETIC NOTICE
<?php
‘1’ + 3 === 4;
‘1 elephpant’ + 3 === 4;
?>
Notice: A non well formed numeric string encountered
ARITHMETIC NOTICE
<?php
$a = "12.00 $CAD" + 1;
$b = "1 023,45" + 2;
$c = "  234  " + 4;
// Don't filter with + 0 !
$amount = abs($_GET['amount']) + 0 ; 
// Unless it is scientific notation
echo "1.2345e9" + 0;
echo (int) "1.2345e9";
?>
SESSION ID SIZE
• Session ID are not hashed anymore
• Speed bump!
• Session ID size is now session.sid_length. sid_length is CSPRN
• 22 to 256 chars; 32 as default; 48 recommended.
• session.sid_bits_per_character specifies 4/5/6 bits characters : 

(hexa, [0-9a-v], [0-9a-zA-Z-,])
• Recommended settings : 48 / 5
• Beware about your filters and storages
SESSION ID ERRORS ARE CATCHABLE
<?php
try{
  session_regenerate_id ();
} catch (Error $e) {
// Log error
// deal with missing session ID
}
?>
• When generated ID are not strings, an Error is emitted
• Catch them to be safe
CSPRN THROW ERRORS
<?php 
try { 
  $random = random_bytes(10);  
} catch( TypeError $e) { 
  // invalid parameter
} catch( Error $e) { 
  // invalid length
} catch( Exception $e) { 
  // no source of randomness
} 
MB_EREGI?_REPLACE ALSO DROPS /E IN 7.1
<?php   
$code = "abc de";  
echo mb_eregi_replace( ' ', 
'"ren";',
$code, 
'e');
abcrende
FUNCTIONS CHANGES
• getenv(), without argument : === $_ENV
• parse_url() now checks that user and pass have no @ chars.
• ext/filter has now FILTER_FLAG_EMAIL_UNICODE, to filter
unicode email, like üser@[IPv6:2001:db8:1ff::a0b:dbd0]
• imap now checks that email is not larger than 16385 bytes
• pg_last_notice() gets 3 constants : 

PGSQL_NOTICE_LAST, PGSQL_NOTICE_ALL, and
PGSQL_NOTICE_CLEAR
NEW FEATURES
LIST() WITH KEYS
<?php
// PHP 7.0 
$array = [0 => 'a', 1 => 'b', 2 => 'c'] ;
list($a, $b, $c) = $array ;
// $a is 'a', $b is 'b', $c is 'c'
?>
LIST() WITH KEYS
<?php
// PHP 7.1
$array = [0 => 'a', 1 => 'b', 2 => 'c'] ;
list(1 => $b, 2 => $c, 0 => $a) = $array ;
// $a is 'a', $b is 'b', $c is 'c'
?>
LIST() WITH KEYS
<?php
class foo {
    private $a, $b = [1]; 
private static $c;
 
    public function __construct(array $bar) {
        list(
            "a" => $this->a,
            "b" => $this->b[],
            "c" => static::$c
        ) = $bar;
    }
}
?>
LIST() WITHOUT LIST
<?php
class foo {
    private $a, $b = [1]; 
private static $c;
 
    public function __construct(array $bar) {
        [
            "a" => $this->a,
            "b" => $this->b[],
            "c" => static::$c
        ] = $bar;
    }
}
?>
NEW TRICKS WITH LIST
<?php
$points = [
    ["x" => 1, "y" => 2],
    ["x" => 2, "y" => 1]
];
 
list(list("x" => $x1, "y" => $y1), 
list("x" => $x2, "y" => $y2)) = $points;
// repeated usage
[ 4 => $a, 4 => $b, 4 => $c] = [ 4 => 5, 6 => 7];
// $a, $b and $c, all, contain 5 
$a = $b = $c = [ 4 => 5, 6 => 7][4];
?>
NEGATIVE OFFSET FOR STRINGS
<?php
    echo substr("abcde", 1, 1) ;  // display b
    echo substr("abcde", -1, 1) ; // display d
    echo "abcde"[1]; // display b
    echo "abcde"[-1]; // display d
    echo "$a[-1]";  // Fatal error
    echo "{$a[-1]}";  // display d
?>
NEW FUNCTIONS
• mb_ord() and mb_chr() : multi-byte version of ord/chr
• mb_scrub() : cleans a string of gremlins
• curl_share_strerror(), curl_multi_errno() and curl_share_errno() : 

access to various kind of errors
• pcntl_async_signals() for

asynchronous signal 

handling, with 

pcntl_signal()
<?php
pcntl_async_signals(1);
pcntl_signal(SIGTERM, function ($signo
echo "Start!n";
posix_kill(posix_getpid(), SIGTERM);
$i = 0; // dummy
echo "Done!n";
CLASS CONSTANT VISIBILITY
• Constants may only be used inside the class or its children
• Interfaces' constants are still public only
• trait's constants are still science-fiction
<?php
class Foo {
    // PHP 7.0 behavior. Nothing changes.
        const PUBLIC_CONST = 0;
 
    // Explicit visibilities
        private const PRIVATE_CONST  = 1;
        protected const PROTECTED_CONST = 2;
        public const PUBLIC_CONST_TWO  = 3, 

PUBLIC_CONST_THREE = 4;
}
?>
CLOSURE::FROMCALLABE()
<?php 
$validator = new Validator(); 
// so PHP 4! 
$callback = array($validator, 'emailValidation'); 
// private methods!
class Validator {   
    private function emailValidation($userData)  {}
    private function genericValidation($userData){}
}   
?>
CLOSURE::FROMCALLABLE()
<?php 
class Validator {   
   public function getValidatorCallback($validationType) {   
      if ($validationType == 'email') { 
         return Closure::fromCallable(

[$this, 'emailValidation']); 
      }   
      return Closure::fromCallable(

[$this, 'genericValidation']); 
   }   
}   
$validator = new Validator(); 
$callback = $validator->getValidatorCallback('email');
$callback($userData);
?>
DONEC QUIS NUNC
TEST PHP 7.1 NOW
• https://github.com/php/php-src
• RC4 : compile, run unit tests, fix your bugs or report PHP's
• Test online : https://3v4l.org/
• Compile your current code with it
• Use static analysis
• Watch out for PHP.Next : PHP 7.2 or PHP 8.0
• Exit with PEAR and PECL, in with composer/Pickle
• Class Friendship, __autoload() deprecations, Automatic SQL injection
protection, INI get/set aliases…
BEDANKT!
@EXAKAT - HTTP://WWW.EXAKAT.IO/
https://legacy.joind.in/talk/view/19421

More Related Content

What's hot (20)

PDF
Debugging PHP with Xdebug - PHPUK 2018
Mark Niebergall
 
PPTX
Php7 hhvm and co
Pierre Joye
 
ODP
The why and how of moving to php 5.4/5.5
Wim Godden
 
PDF
Php 7 compliance workshop singapore
Damien Seguy
 
PPTX
PHP 7 Crash Course - php[world] 2015
Colin O'Dell
 
PPTX
Php internal architecture
Elizabeth Smith
 
ODP
Caching and tuning fun for high scalability @ FrOSCon 2011
Wim Godden
 
PPTX
Php’s guts
Elizabeth Smith
 
PDF
Static Analysis of PHP Code – IPC Berlin 2016
Rouven Weßling
 
PPTX
PHP 5.6 New and Deprecated Features
Mark Niebergall
 
PDF
Variety of automated tests
Артём Курапов
 
ODP
The why and how of moving to PHP 5.4/5.5
Wim Godden
 
ODP
The why and how of moving to PHP 5.5/5.6
Wim Godden
 
PPTX
Php extensions
Elizabeth Smith
 
PPTX
Php 7 hhvm and co
Pierre Joye
 
ODP
Is your code ready for PHP 7 ?
Wim Godden
 
PDF
Yapc::NA::2009 - Command Line Perl
Bruce Gray
 
PDF
What is the Joomla Framework and why do we need it?
Rouven Weßling
 
PDF
Modern Perl for the Unfrozen Paleolithic Perl Programmer
John Anderson
 
Debugging PHP with Xdebug - PHPUK 2018
Mark Niebergall
 
Php7 hhvm and co
Pierre Joye
 
The why and how of moving to php 5.4/5.5
Wim Godden
 
Php 7 compliance workshop singapore
Damien Seguy
 
PHP 7 Crash Course - php[world] 2015
Colin O'Dell
 
Php internal architecture
Elizabeth Smith
 
Caching and tuning fun for high scalability @ FrOSCon 2011
Wim Godden
 
Php’s guts
Elizabeth Smith
 
Static Analysis of PHP Code – IPC Berlin 2016
Rouven Weßling
 
PHP 5.6 New and Deprecated Features
Mark Niebergall
 
Variety of automated tests
Артём Курапов
 
The why and how of moving to PHP 5.4/5.5
Wim Godden
 
The why and how of moving to PHP 5.5/5.6
Wim Godden
 
Php extensions
Elizabeth Smith
 
Php 7 hhvm and co
Pierre Joye
 
Is your code ready for PHP 7 ?
Wim Godden
 
Yapc::NA::2009 - Command Line Perl
Bruce Gray
 
What is the Joomla Framework and why do we need it?
Rouven Weßling
 
Modern Perl for the Unfrozen Paleolithic Perl Programmer
John Anderson
 

Viewers also liked (16)

PDF
Dealing With Legacy PHP Applications
Viget Labs
 
PDF
Dealing with Legacy PHP Applications
Clinton Dreisbach
 
PPTX
Working with Legacy Code
Eyal Golan
 
KEY
Working Effectively With Legacy Code
scidept
 
PDF
Transforming legacy PHP applications with Symfony2 and Varnish
Craig Marvelley
 
PDF
Working With Legacy Code
Andrea Polci
 
PDF
Pimp legacy PHP apps with Apigility - TrueNorthPHP 2014
Michelangelo van Dam
 
PPTX
XPDays Ukraine: Legacy
Victor_Cr
 
PPTX
XP Days Ukraine 2014 - Refactoring legacy code
Dmytro Mindra
 
PDF
From Legacy to DDD in PHP | Tech Talks | Privalia
Jordi Vila Gallardo
 
PPTX
ITGM#4 Технический долг 2.0
Maxim Shulga
 
PPTX
Club of anonimous developers "Refactoring: Legacy code"
Victor_Cr
 
PPTX
Legacy: как победить в гонке (Joker)
Victor_Cr
 
PDF
Living With Legacy Code
Rowan Merewood
 
PPT
Working Effectively With Legacy Code
Naresh Jain
 
PDF
Refactoring 101
Adam Culp
 
Dealing With Legacy PHP Applications
Viget Labs
 
Dealing with Legacy PHP Applications
Clinton Dreisbach
 
Working with Legacy Code
Eyal Golan
 
Working Effectively With Legacy Code
scidept
 
Transforming legacy PHP applications with Symfony2 and Varnish
Craig Marvelley
 
Working With Legacy Code
Andrea Polci
 
Pimp legacy PHP apps with Apigility - TrueNorthPHP 2014
Michelangelo van Dam
 
XPDays Ukraine: Legacy
Victor_Cr
 
XP Days Ukraine 2014 - Refactoring legacy code
Dmytro Mindra
 
From Legacy to DDD in PHP | Tech Talks | Privalia
Jordi Vila Gallardo
 
ITGM#4 Технический долг 2.0
Maxim Shulga
 
Club of anonimous developers "Refactoring: Legacy code"
Victor_Cr
 
Legacy: как победить в гонке (Joker)
Victor_Cr
 
Living With Legacy Code
Rowan Merewood
 
Working Effectively With Legacy Code
Naresh Jain
 
Refactoring 101
Adam Culp
 
Ad

Similar to PHP 7.1 : elegance of our legacy (20)

ODP
The why and how of moving to php 7.x
Wim Godden
 
ODP
The why and how of moving to php 7.x
Wim Godden
 
PDF
Last 2 Months in PHP - July & August 2016
Eric Poe
 
PDF
Php 7.2 compliance workshop php benelux
Damien Seguy
 
PDF
The why and how of moving to php 7
Wim Godden
 
PDF
Everything new with PHP 7.3
Damien Seguy
 
PDF
Last train to php 7
Damien Seguy
 
PDF
Preparing for the next php version
Damien Seguy
 
PDF
What's new with PHP7
SWIFTotter Solutions
 
PDF
Damien seguy php 5.6
Damien Seguy
 
PPTX
Migrating to PHP 7
John Coggeshall
 
PDF
The new features of PHP 7
Zend by Rogue Wave Software
 
PDF
The new features of PHP 7 - Enrico Zimuel - Codemotion Milan 2016
Codemotion
 
PPTX
Learning php 7
Ed Lomonaco
 
PPTX
20 cool features that is in PHP 7, we missed in PHP 5. Let walkthrough with t...
DrupalMumbai
 
PPTX
New in php 7
Vic Metcalfe
 
PDF
Preparing for the next PHP version (5.6)
Damien Seguy
 
KEY
Let's creating your own PHP (tejimaya version)
Kousuke Ebihara
 
PDF
What To Expect From PHP7
Codemotion
 
PDF
The most exciting features of PHP 7.1
Zend by Rogue Wave Software
 
The why and how of moving to php 7.x
Wim Godden
 
The why and how of moving to php 7.x
Wim Godden
 
Last 2 Months in PHP - July & August 2016
Eric Poe
 
Php 7.2 compliance workshop php benelux
Damien Seguy
 
The why and how of moving to php 7
Wim Godden
 
Everything new with PHP 7.3
Damien Seguy
 
Last train to php 7
Damien Seguy
 
Preparing for the next php version
Damien Seguy
 
What's new with PHP7
SWIFTotter Solutions
 
Damien seguy php 5.6
Damien Seguy
 
Migrating to PHP 7
John Coggeshall
 
The new features of PHP 7
Zend by Rogue Wave Software
 
The new features of PHP 7 - Enrico Zimuel - Codemotion Milan 2016
Codemotion
 
Learning php 7
Ed Lomonaco
 
20 cool features that is in PHP 7, we missed in PHP 5. Let walkthrough with t...
DrupalMumbai
 
New in php 7
Vic Metcalfe
 
Preparing for the next PHP version (5.6)
Damien Seguy
 
Let's creating your own PHP (tejimaya version)
Kousuke Ebihara
 
What To Expect From PHP7
Codemotion
 
The most exciting features of PHP 7.1
Zend by Rogue Wave Software
 
Ad

More from Damien Seguy (20)

PDF
Strong typing @ php leeds
Damien Seguy
 
PPTX
Strong typing : adoption, adaptation and organisation
Damien Seguy
 
PDF
Qui a laissé son mot de passe dans le code
Damien Seguy
 
PDF
Analyse statique et applications
Damien Seguy
 
PDF
Top 10 pieges php afup limoges
Damien Seguy
 
PDF
Top 10 php classic traps DPC 2020
Damien Seguy
 
PDF
Meilleur du typage fort (AFUP Day, 2020)
Damien Seguy
 
PDF
Top 10 php classic traps confoo
Damien Seguy
 
PDF
Tout pour se préparer à PHP 7.4
Damien Seguy
 
PDF
Top 10 php classic traps php serbia
Damien Seguy
 
PDF
Top 10 php classic traps
Damien Seguy
 
PDF
Top 10 chausse trappes
Damien Seguy
 
PDF
Code review workshop
Damien Seguy
 
PDF
Understanding static analysis php amsterdam 2018
Damien Seguy
 
PDF
Review unknown code with static analysis php ce 2018
Damien Seguy
 
PDF
Php 7.3 et ses RFC (AFUP Toulouse)
Damien Seguy
 
PDF
Tout sur PHP 7.3 et ses RFC
Damien Seguy
 
PDF
Review unknown code with static analysis php ipc 2018
Damien Seguy
 
PDF
Code review for busy people
Damien Seguy
 
PDF
Static analysis saved my code tonight
Damien Seguy
 
Strong typing @ php leeds
Damien Seguy
 
Strong typing : adoption, adaptation and organisation
Damien Seguy
 
Qui a laissé son mot de passe dans le code
Damien Seguy
 
Analyse statique et applications
Damien Seguy
 
Top 10 pieges php afup limoges
Damien Seguy
 
Top 10 php classic traps DPC 2020
Damien Seguy
 
Meilleur du typage fort (AFUP Day, 2020)
Damien Seguy
 
Top 10 php classic traps confoo
Damien Seguy
 
Tout pour se préparer à PHP 7.4
Damien Seguy
 
Top 10 php classic traps php serbia
Damien Seguy
 
Top 10 php classic traps
Damien Seguy
 
Top 10 chausse trappes
Damien Seguy
 
Code review workshop
Damien Seguy
 
Understanding static analysis php amsterdam 2018
Damien Seguy
 
Review unknown code with static analysis php ce 2018
Damien Seguy
 
Php 7.3 et ses RFC (AFUP Toulouse)
Damien Seguy
 
Tout sur PHP 7.3 et ses RFC
Damien Seguy
 
Review unknown code with static analysis php ipc 2018
Damien Seguy
 
Code review for busy people
Damien Seguy
 
Static analysis saved my code tonight
Damien Seguy
 

Recently uploaded (20)

PDF
Darley - FIRST Copenhagen Lightning Talk (2025-06-26) Epochalypse 2038 - Time...
treyka
 
PDF
ArcGIS Utility Network Migration - The Hunter Water Story
Safe Software
 
PPTX
01_Approach Cyber- DORA Incident Management.pptx
FinTech Belgium
 
PDF
Proactive Server and System Monitoring with FME: Using HTTP and System Caller...
Safe Software
 
PDF
ICONIQ State of AI Report 2025 - The Builder's Playbook
Razin Mustafiz
 
PDF
Pipeline Industry IoT - Real Time Data Monitoring
Safe Software
 
PDF
Dev Dives: Accelerating agentic automation with Autopilot for Everyone
UiPathCommunity
 
PPTX
MARTSIA: A Tool for Confidential Data Exchange via Public Blockchain - Pitch ...
Michele Kryston
 
PDF
Understanding AI Optimization AIO, LLMO, and GEO
CoDigital
 
PDF
TrustArc Webinar - Navigating APAC Data Privacy Laws: Compliance & Challenges
TrustArc
 
PDF
My Journey from CAD to BIM: A True Underdog Story
Safe Software
 
PDF
How to Comply With Saudi Arabia’s National Cybersecurity Regulations.pdf
Bluechip Advanced Technologies
 
PDF
Simplify Your FME Flow Setup: Fault-Tolerant Deployment Made Easy with Packer...
Safe Software
 
PDF
Kubernetes - Architecture & Components.pdf
geethak285
 
PPTX
Paycifi - Programmable Trust_Breakfast_PPTXT
FinTech Belgium
 
PDF
5 Things to Consider When Deploying AI in Your Enterprise
Safe Software
 
PDF
🚀 Let’s Build Our First Slack Workflow! 🔧.pdf
SanjeetMishra29
 
PPTX
Reimaginando la Ciberdefensa: De Copilots a Redes de Agentes
Cristian Garcia G.
 
PPTX
Wondershare Filmora Crack Free Download 2025
josanj305
 
PDF
Understanding The True Cost of DynamoDB Webinar
ScyllaDB
 
Darley - FIRST Copenhagen Lightning Talk (2025-06-26) Epochalypse 2038 - Time...
treyka
 
ArcGIS Utility Network Migration - The Hunter Water Story
Safe Software
 
01_Approach Cyber- DORA Incident Management.pptx
FinTech Belgium
 
Proactive Server and System Monitoring with FME: Using HTTP and System Caller...
Safe Software
 
ICONIQ State of AI Report 2025 - The Builder's Playbook
Razin Mustafiz
 
Pipeline Industry IoT - Real Time Data Monitoring
Safe Software
 
Dev Dives: Accelerating agentic automation with Autopilot for Everyone
UiPathCommunity
 
MARTSIA: A Tool for Confidential Data Exchange via Public Blockchain - Pitch ...
Michele Kryston
 
Understanding AI Optimization AIO, LLMO, and GEO
CoDigital
 
TrustArc Webinar - Navigating APAC Data Privacy Laws: Compliance & Challenges
TrustArc
 
My Journey from CAD to BIM: A True Underdog Story
Safe Software
 
How to Comply With Saudi Arabia’s National Cybersecurity Regulations.pdf
Bluechip Advanced Technologies
 
Simplify Your FME Flow Setup: Fault-Tolerant Deployment Made Easy with Packer...
Safe Software
 
Kubernetes - Architecture & Components.pdf
geethak285
 
Paycifi - Programmable Trust_Breakfast_PPTXT
FinTech Belgium
 
5 Things to Consider When Deploying AI in Your Enterprise
Safe Software
 
🚀 Let’s Build Our First Slack Workflow! 🔧.pdf
SanjeetMishra29
 
Reimaginando la Ciberdefensa: De Copilots a Redes de Agentes
Cristian Garcia G.
 
Wondershare Filmora Crack Free Download 2025
josanj305
 
Understanding The True Cost of DynamoDB Webinar
ScyllaDB
 

PHP 7.1 : elegance of our legacy