SlideShare a Scribd company logo
1 of 33
Download to read offline
Desenvolvendo	
  em	
  PHP-­‐Cli	
  
Thiago	
  Paes	
  –	
  PHPSC	
  Conference	
  -­‐	
  2013	
  
Thiago Paes
• 
• 
• 
• 

Evangelista	
  PHP	
  
Aficcionado	
  por	
  código	
  limpo	
  e	
  organizado	
  
Membro	
  do	
  PHP-­‐SC	
  
Programador	
  PHP	
  a	
  10+	
  
PHP	
  não	
  é	
  somente	
  Server	
  Side,	
  	
  
você	
  pode	
  fazer	
  poderosas	
  aplicações	
  	
  
rodando	
  localmente.	
  
	
  
SEM	
  um	
  servidor	
  web.	
  
VÁ	
  EM	
  FRENTE,	
  	
  
PEQUENO	
  
PADAWAN	
  
$ARGC	
  &	
  $ARGV	
  
FAÇA	
  DIREITO!!!!	
  
Symfony Console
namespace	
  AcmeDemoBundleCommand;	
  
	
  
use	
  SymfonyComponentConsoleCommandCommand;	
  
use	
  SymfonyComponentConsoleInputInputArgument;	
  
use	
  SymfonyComponentConsoleInputInputInterface;	
  
use	
  SymfonyComponentConsoleInputInputOp^on;	
  
use	
  SymfonyComponentConsoleOutputOutputInterface;	
  
	
  
class	
  GreetCommand	
  extends	
  Command	
  
{	
  
	
  	
  	
  	
  protected	
  func^on	
  configure()	
  
	
  	
  	
  	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  $this	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  -­‐>setName('demo:greet')	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  -­‐>setDescrip^on('Greet	
  someone')	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  -­‐>addArgument(	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  'name',	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  InputArgument::OPTIONAL,	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  'Who	
  do	
  you	
  want	
  to	
  greet?'	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  )	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  -­‐>addOp^on(	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  'yell',	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  null,	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  InputOp^on::VALUE_NONE,	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  'If	
  set,	
  the	
  task	
  will	
  yell	
  in	
  uppercase	
  lelers'	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  );	
  
	
  	
  	
  	
  }	
  
	
  	
  	
  	
  	
  

…	
  
Symfony Console
…	
  
	
  protected	
  func^on	
  execute(InputInterface	
  $input,	
  OutputInterface	
  $output)	
  
	
  	
  	
  	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  $name	
  =	
  $input-­‐>getArgument('name');	
  
	
  	
  	
  	
  	
  	
  	
  	
  if	
  ($name)	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  $text	
  =	
  'Hello	
  '.$name;	
  
	
  	
  	
  	
  	
  	
  	
  	
  }	
  else	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  $text	
  =	
  'Hello';	
  
	
  	
  	
  	
  	
  	
  	
  	
  }	
  
	
  
	
  	
  	
  	
  	
  	
  	
  	
  if	
  ($input-­‐>getOp^on('yell'))	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  $text	
  =	
  strtoupper($text);	
  
	
  	
  	
  	
  	
  	
  	
  	
  }	
  
	
  
	
  	
  	
  	
  	
  	
  	
  	
  $output-­‐>writeln($text);	
  
	
  	
  	
  	
  }	
  
}	
  
Silex
//Bootstrap our Silex application
$app = require __DIR__ . '/src/bootstrap.php';
//Include the namespaces of the components we plan to use
use SymfonyComponentConsoleApplication;
use SymfonyComponentConsoleInputInputInterface;
use SymfonyComponentConsoleInputInputArgument;
use SymfonyComponentConsoleInputInputOption;
use SymfonyComponentConsoleOutputOutputInterface;
//Instantiate our Console application
$console = new Application('ProjectName', '0.1');

…	
  
…	
  

Silex

//Register a command to run from the command line
//Our command will be started with "./console.php sync"
$console->register( 'sync' )
  ->setDefinition( array(
     //Create a "--test" optional parameter
     new InputOption('test', '', InputOption::VALUE_NONE, 'Test mode'),
    ) )
  ->setDescription('Synchronize with an external data source')
  ->setHelp('Usage: <info>./console.php sync [--test]</info>')
  ->setCode(
    function(InputInterface $input, OutputInterface $output) use ($app)
    {
      if ($input->getOption('test'))
      {
        $output->write("ntTest Mode Enablednn");
      }
 
 
 
 
 
 

   
   
   
   
  }
);

$output->write( "Contacting external data source ...n");
//Do work here
//Example:
//  $app[ 'myExtension' ]->doStuff();

$console->run();
Silex
$> ./console.php
ProjectName version ProjectVersion
Usage:
[options] command [arguments]
Options:
--help
--quiet
--verbose
--version
--ansi
--no-ansi
--no-interaction

-h
-q
-v
-V

Display this help message.
Do not output any message.
Increase verbosity of messages.
Display this program version.
Force ANSI output.
Disable ANSI output.
-n Do not ask any interactive question.

Available commands:
help
Displays help for a command
list
Lists commands
sync
Synchronize with an external data source
Zend Console
//	
  	
  modules/applica.on/config/module.config.php	
  
array(
'router' => array(
'routes' => array(
// HTTP routes are defined here
)
),
'console' => array(
'router' => array(
'routes' => array(
// Console routes go here
)
)
),
)
Console Getopt Plus
$config = array(
      'header' => array('The command xyz is used to...',
        'Note that the header and the usage are optional.'),
      'usage' => array('--foo', '--bar <arg> -c [arg]'),
      'options' => array(
        array('long' => 'foo', 'type' => 'noarg', 'desc' => array(
          'An option without argument with only the long',
          'name defined.')),
        array('long' => 'bar', 'type' => 'mandatory', 'short' => 'b',
          'desc' => array('arg',
            'A mandatory option with both the long and',
            'the short names defined.')),
        array('short' => 'c', 'type' => 'optional',
          'desc' => array('arg',
            'An option with an optional argument with only',
            'the short name defined.'))),
        'parameters' => array('[param1] [param2]',
          'Some additional parameters.'),
        'footer' => array('Some additional information.',
          'Note that the footer is optional.'),
    );
 
 
$options = Console_Getoptplus::getoptplus($config); 
Console Command Line
// Include the Console_CommandLine package.
require_once 'Console/CommandLine.php';
// create the parser
$parser = new Console_CommandLine(array(
    'description' => 'zip given files using the php zip module.',
    'version'     => '1.0.0'
));
// add an option to make the program verbose
$parser->addOption(
    'verbose',
    array(
        'short_name'  => '-v',
        'long_name'   => '--verbose',
        'action'      => 'StoreTrue',
        'description' => 'turn on verbose output'
    )
);

…	
  
Console Command Line
…	
  
// add an option to delete original files after zipping
$parser->addOption(
    'delete',
    array(
        'short_name'  => '-d',
        'long_name'   => '--delete',
        'action'      => 'StoreTrue',
        'description' => 'delete original files after zip operation'
    )
);
// run the parser
try {
    $result = $parser->parse();
    // write your program here...
    print_r($result->options);
    print_r($result->args);
} catch (Exception $exc) {
    $parser->displayError($exc->getMessage());
}
Console Getargs

$config = array(
            // Option takes 2 values
            'files|images' => array('short' => 'f|i',
                    'min' => 2,
                    'max' => 2,
                    'desc' => 'Set the source and destination image files.'),
            // Option takes 1 value
            'width' => array('short' => 'w',
                 'min' => 1,
                 'max' => 1,
                 'desc' => 'Set the new width of the image.'),
            // Option is a switch
            'debug' => array('short' => 'd',
                 'max' => 0,
                 'desc' => 'Switch to debug mode.'),
            // Option takes from 1 to 3 values, using the default value(s) if the arg is not pres
            'formats' => array('min' => 1,
                   'max' => 3,
                   'desc' => 'Set the image destination format.',
                   'default' => array('jpegbig', 'jpegsmall')),

…	
  
Console Getargs
…	
  

            // Option takes from 1 to an unlimited number of values
            'filters' => array('short' => 'fi',
                   'min' => 1,
                   'max' => -1,
                   'desc' => 'Set the filters to be applied to the image upon conversion. 
// The filters will be used in the order they are set.'),
            // Option accept 1 value or nothing. If nothing, then the default value is used
            'verbose' => array('short' => 'v',
                   'min' => 0,
                   'max' => 1,
                   'desc' => 'Set the verbose level.',
                   'default' => 3),
            // Parameters. Anything leftover at the end of the command line is added.
            CONSOLE_GETARGS_PARAMS => array('min' => 1,
                        'max' => 2,
                        'desc' =>
                        'Set the application parameters.',
                        'default' => 'DEFAULT')
            );
 
$args =& Console_Getargs::factory($config);
eZ	
  Components	
  -­‐	
  ConsoleTools
$input 
= new ezcConsoleInput();
$helpOption = $input->registerOption( 
    new ezcConsoleOption( 
        'h',
        'help'
    )
);
Try {
    $input->process();
} catch ( ezcConsoleOptionException $e ) {
    die( $e->getMessage() );
}
if ( $helpOption->value !== false ) {
    echo "Help requested.";
} else {
    echo "No help requested.";
}
TORNAR	
  EXECUTÁVEL	
  
o/	
  
#!/usr/bin/env	
  php	
  
Ha	
  Ha	
  Ha	
  
QUEM	
  DISSE?	
  
EMPACOTE!!!!
// create with alias "project.phar"
$phar = new Phar('project.phar', 0, 'project.phar');
$phar->buildFromIterator(
    new RecursiveIteratorIterator(
     new RecursiveDirectoryIterator('/path/to/project')),
    '/path/to/project');
$phar->setStub($phar->createDefaultStub('cli/index.php', 'www/index.php'));
Dúvidas?	
  
Obrigado	
  
• 
• 
• 
• 

E-­‐mail:	
  mrprompt@gmail.com	
  
Twiler:	
  @mrprompt	
  
Blog:	
  hlp://mrprompt.blogspot.com	
  
Mais:	
  hlp://about.me/mrprompt	
  

More Related Content

What's hot

2014 database - course 2 - php
2014 database - course 2 - php2014 database - course 2 - php
2014 database - course 2 - php
Hung-yu Lin
 
Good Evils In Perl (Yapc Asia)
Good Evils In Perl (Yapc Asia)Good Evils In Perl (Yapc Asia)
Good Evils In Perl (Yapc Asia)
Kang-min Liu
 

What's hot (20)

PHP 5.3 in practice
PHP 5.3 in practicePHP 5.3 in practice
PHP 5.3 in practice
 
What's new in PHP 8.0?
What's new in PHP 8.0?What's new in PHP 8.0?
What's new in PHP 8.0?
 
Introduction to PHP
Introduction to PHPIntroduction to PHP
Introduction to PHP
 
Data Validation models
Data Validation modelsData Validation models
Data Validation models
 
Just-In-Time Compiler in PHP 8
Just-In-Time Compiler in PHP 8Just-In-Time Compiler in PHP 8
Just-In-Time Compiler in PHP 8
 
2014 database - course 2 - php
2014 database - course 2 - php2014 database - course 2 - php
2014 database - course 2 - php
 
Intermediate PHP
Intermediate PHPIntermediate PHP
Intermediate PHP
 
Looping the Loop with SPL Iterators
Looping the Loop with SPL IteratorsLooping the Loop with SPL Iterators
Looping the Loop with SPL Iterators
 
Morpheus configuration engine (slides from Saint Perl-2 conference)
Morpheus configuration engine (slides from Saint Perl-2 conference)Morpheus configuration engine (slides from Saint Perl-2 conference)
Morpheus configuration engine (slides from Saint Perl-2 conference)
 
07 Introduction to PHP #burningkeyboards
07 Introduction to PHP #burningkeyboards07 Introduction to PHP #burningkeyboards
07 Introduction to PHP #burningkeyboards
 
New Symfony Tips & Tricks (SymfonyCon Paris 2015)
New Symfony Tips & Tricks (SymfonyCon Paris 2015)New Symfony Tips & Tricks (SymfonyCon Paris 2015)
New Symfony Tips & Tricks (SymfonyCon Paris 2015)
 
Good Evils In Perl (Yapc Asia)
Good Evils In Perl (Yapc Asia)Good Evils In Perl (Yapc Asia)
Good Evils In Perl (Yapc Asia)
 
Ruby 2.0
Ruby 2.0Ruby 2.0
Ruby 2.0
 
関西PHP勉強会 php5.4つまみぐい
関西PHP勉強会 php5.4つまみぐい関西PHP勉強会 php5.4つまみぐい
関西PHP勉強会 php5.4つまみぐい
 
Tobias Nyholm "Deep dive into Symfony 4 internals"
Tobias Nyholm "Deep dive into Symfony 4 internals"Tobias Nyholm "Deep dive into Symfony 4 internals"
Tobias Nyholm "Deep dive into Symfony 4 internals"
 
Introduction to php
Introduction to phpIntroduction to php
Introduction to php
 
Cli the other sapi pbc11
Cli the other sapi pbc11Cli the other sapi pbc11
Cli the other sapi pbc11
 
PHP PPT FILE
PHP PPT FILEPHP PPT FILE
PHP PPT FILE
 
Refactor like a boss
Refactor like a bossRefactor like a boss
Refactor like a boss
 
php 2 Function creating, calling, PHP built-in function
php 2 Function creating, calling,PHP built-in functionphp 2 Function creating, calling,PHP built-in function
php 2 Function creating, calling, PHP built-in function
 

Similar to Desenvolvendo em php cli

Phpne august-2012-symfony-components-friends
Phpne august-2012-symfony-components-friendsPhpne august-2012-symfony-components-friends
Phpne august-2012-symfony-components-friends
Michael Peacock
 
Kansai.pm 10周年記念 Plack/PSGI 入門
Kansai.pm 10周年記念 Plack/PSGI 入門Kansai.pm 10周年記念 Plack/PSGI 入門
Kansai.pm 10周年記念 Plack/PSGI 入門
lestrrat
 
The symfony platform: Create your very own framework (PHP Quebec 2008)
The symfony platform: Create your very own framework (PHP Quebec 2008)The symfony platform: Create your very own framework (PHP Quebec 2008)
The symfony platform: Create your very own framework (PHP Quebec 2008)
Fabien Potencier
 
PM : code faster
PM : code fasterPM : code faster
PM : code faster
PHPPRO
 
News of the Symfony2 World
News of the Symfony2 WorldNews of the Symfony2 World
News of the Symfony2 World
Fabien Potencier
 

Similar to Desenvolvendo em php cli (20)

Symfony2 - WebExpo 2010
Symfony2 - WebExpo 2010Symfony2 - WebExpo 2010
Symfony2 - WebExpo 2010
 
Symfony2 - WebExpo 2010
Symfony2 - WebExpo 2010Symfony2 - WebExpo 2010
Symfony2 - WebExpo 2010
 
Symfony2 - OSIDays 2010
Symfony2 - OSIDays 2010Symfony2 - OSIDays 2010
Symfony2 - OSIDays 2010
 
Symfony components in the wild, PHPNW12
Symfony components in the wild, PHPNW12Symfony components in the wild, PHPNW12
Symfony components in the wild, PHPNW12
 
Phpne august-2012-symfony-components-friends
Phpne august-2012-symfony-components-friendsPhpne august-2012-symfony-components-friends
Phpne august-2012-symfony-components-friends
 
Symfony internals [english]
Symfony internals [english]Symfony internals [english]
Symfony internals [english]
 
PHP and COM
PHP and COMPHP and COM
PHP and COM
 
Kansai.pm 10周年記念 Plack/PSGI 入門
Kansai.pm 10周年記念 Plack/PSGI 入門Kansai.pm 10周年記念 Plack/PSGI 入門
Kansai.pm 10周年記念 Plack/PSGI 入門
 
JSUG - Tech Tips1 by Christoph Pickl
JSUG - Tech Tips1 by Christoph PicklJSUG - Tech Tips1 by Christoph Pickl
JSUG - Tech Tips1 by Christoph Pickl
 
Symfony2 - extending the console component
Symfony2 - extending the console componentSymfony2 - extending the console component
Symfony2 - extending the console component
 
Do more, faster, by extending WP-CLI
Do more, faster, by extending WP-CLIDo more, faster, by extending WP-CLI
Do more, faster, by extending WP-CLI
 
The symfony platform: Create your very own framework (PHP Quebec 2008)
The symfony platform: Create your very own framework (PHP Quebec 2008)The symfony platform: Create your very own framework (PHP Quebec 2008)
The symfony platform: Create your very own framework (PHP Quebec 2008)
 
PM : code faster
PM : code fasterPM : code faster
PM : code faster
 
Symfony2, creare bundle e valore per il cliente
Symfony2, creare bundle e valore per il clienteSymfony2, creare bundle e valore per il cliente
Symfony2, creare bundle e valore per il cliente
 
News of the Symfony2 World
News of the Symfony2 WorldNews of the Symfony2 World
News of the Symfony2 World
 
JavaScript and UI Architecture Best Practices
JavaScript and UI Architecture Best PracticesJavaScript and UI Architecture Best Practices
JavaScript and UI Architecture Best Practices
 
Unittests für Dummies
Unittests für DummiesUnittests für Dummies
Unittests für Dummies
 
Fabric Python Lib
Fabric Python LibFabric Python Lib
Fabric Python Lib
 
Mastering Namespaces in PHP
Mastering Namespaces in PHPMastering Namespaces in PHP
Mastering Namespaces in PHP
 
Symfony console: build awesome command line scripts with ease
Symfony console: build awesome command line scripts with easeSymfony console: build awesome command line scripts with ease
Symfony console: build awesome command line scripts with ease
 

More from Thiago Paes

Distribua seu código
Distribua seu códigoDistribua seu código
Distribua seu código
Thiago Paes
 
Yaf - Um framework que roda sob uma extensão
Yaf - Um framework que roda sob uma extensãoYaf - Um framework que roda sob uma extensão
Yaf - Um framework que roda sob uma extensão
Thiago Paes
 
Alta perfomance de aplicações PHP com Nginx
Alta perfomance de aplicações PHP com NginxAlta perfomance de aplicações PHP com Nginx
Alta perfomance de aplicações PHP com Nginx
Thiago Paes
 

More from Thiago Paes (11)

Phpsc conference - 21019 - desmistificando o trabalho remoto
Phpsc conference - 21019 - desmistificando o trabalho remotoPhpsc conference - 21019 - desmistificando o trabalho remoto
Phpsc conference - 21019 - desmistificando o trabalho remoto
 
Integração contínua - Você não tem dsculpa para não usar
Integração contínua - Você não tem dsculpa para não usarIntegração contínua - Você não tem dsculpa para não usar
Integração contínua - Você não tem dsculpa para não usar
 
Integração Contínua com PHPCI
Integração Contínua com PHPCIIntegração Contínua com PHPCI
Integração Contínua com PHPCI
 
Distribua seu código
Distribua seu códigoDistribua seu código
Distribua seu código
 
Distribua seu código
Distribua seu códigoDistribua seu código
Distribua seu código
 
PHP além do ambiente LAMP
PHP além do ambiente LAMPPHP além do ambiente LAMP
PHP além do ambiente LAMP
 
Php além do LAMP
Php além do LAMPPhp além do LAMP
Php além do LAMP
 
Yaf - Um framework que roda sob uma extensão
Yaf - Um framework que roda sob uma extensãoYaf - Um framework que roda sob uma extensão
Yaf - Um framework que roda sob uma extensão
 
Alta Performance de Aplicações PHP com Nginx
Alta Performance de Aplicações PHP com NginxAlta Performance de Aplicações PHP com Nginx
Alta Performance de Aplicações PHP com Nginx
 
Alta Performance de Aplicações Web em PHP - Nginx
Alta Performance de Aplicações Web em PHP - NginxAlta Performance de Aplicações Web em PHP - Nginx
Alta Performance de Aplicações Web em PHP - Nginx
 
Alta perfomance de aplicações PHP com Nginx
Alta perfomance de aplicações PHP com NginxAlta perfomance de aplicações PHP com Nginx
Alta perfomance de aplicações PHP com Nginx
 

Recently uploaded

Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Safe Software
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Safe Software
 
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Victor Rentea
 

Recently uploaded (20)

ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
Platformless Horizons for Digital Adaptability
Platformless Horizons for Digital AdaptabilityPlatformless Horizons for Digital Adaptability
Platformless Horizons for Digital Adaptability
 
Exploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with MilvusExploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with Milvus
 
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWEREMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
 
Understanding the FAA Part 107 License ..
Understanding the FAA Part 107 License ..Understanding the FAA Part 107 License ..
Understanding the FAA Part 107 License ..
 
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdfRising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
Vector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptxVector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptx
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
MS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsMS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectors
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challenges
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
 
Six Myths about Ontologies: The Basics of Formal Ontology
Six Myths about Ontologies: The Basics of Formal OntologySix Myths about Ontologies: The Basics of Formal Ontology
Six Myths about Ontologies: The Basics of Formal Ontology
 
[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf
 

Desenvolvendo em php cli