SlideShare a Scribd company logo
1 of 67
I love my




http://www.flickr.com/photos/slushpup/3055613967/
Dennis Benkert
  Software Developer
      Coaching
      Coding
      Consulting
Things Your Mother Didn’t Tell
You About Bundle Configurations
app/config.yml
parameters:
    global.page_size:            10
    gloabl.page_num:             5
    global.tracking.key:         ASFDIPSADPFIHwer234123QSD

       # Various configuration
       webservices.timeout:      100
       content_check.enabled:    true
       birthdates.start:         1950 # TODO: Delete after release
       logging.registrations:    true

       # Tracking Bundle Configuration
       trackingbundle.user:               rebum
       trackingbundle.api.version:        1_0
       trackingbundle.use_ssl:            true    # Do not touch this!!!
       trackingbundle.track_super_users: false
       infobundle.god_mode:               true # Ticket 123456234
       infobundle.level:                  42
       # Connection data for some service
       some_webservice.url:
       some_webservice.user:
                                               This file was much
                                          http://example.com
                                          api
       some_webservice.key:               Sdfihwef $5sdf” SAFAWEF
       some_webservice.ssl:               true  loooooonger…
       # More configuration
       more.config:               100
       even.more.config:          true
       oh_my_option:              123
       foo.bar.baz:               true
       application.lock_user:     super
       misc.timeout:              300
       http.meta.title:           super page
       http.meta.keywords:
           - some
           - keywords
           - for
           - this
           - page
        http.description:         Some crazy description for the homepage that we all love so much

#...
app/config.yml
parameters:
    global.page_size: in
                  All      one context
                              10
    gloabl.page_num:          5
    global.tracking.key:      ASFDIPSADPFIHwer234123QSD

    # Various configuration                 Correct type?
    webservices.timeout:      '100'
    content_check.enabled:    true
    birthdates.start:         1950 # TODO: Delete after release
    logging.registrations:    true

    # Tracking Bundle Configuration
    trackingbundle.user:              rebum Only this bundle?!
    trackingbundle.api.version:       1_0
    trackingbundle.use_ssl:           true     # Do not touch this!!!
    trackingbundle.track_super_users: false
    infobundle.god_mode:              true # Ticket 123456234
    infobundle.levl:                  42
    # Connection data for some service
    some_webservice.url:              http://example.com
    some_webservice.user:             api Multiple connections?!
         Correct key?!
    some_webservice.key:               Sdfihwef $5sdf” SAFAWEF
    some_webservice.ssl:              true
app/config.yml
my_project_tracking:
    user:                   rebum
    api_version:            1_0
    use_ssl:                true    # Do not touch this!!!
    track_super_users:      false

my_project_info:
    god_mode:              More structure 123456234
                            true  # Ticket
    level:                  42

my_project_ webservice:
    connection:
        url:                http://example.com
        user:               api
        key:                Sdfihwef $5sdf” SAFAWEF
        ssl:                'true'
                                         Correct type?!!11one
parameters:
    global.page_size:       10
    gloabl.page_num:        5
    global.tracking.key:    ASFDIPSADPFIHwer234123QSD

    # ...
Bad configuration
   Worse than bad code
     (In terms of structure)
Bad validation
    Even worse
feature_x_bundle.redirct:   302


           Correct key?!
Config Component




    http://www.flickr.com/photos/capcase/2735500813/
Cache               Locate

           Config
Validate            Load
Cache               Locate

           Config
Validate            Load
Locate & Load




      http://www.flickr.com/photos/onthespiral/3406281939/
use SymfonyComponentConfigFileLocator;

$locator = new FileLocator(
    __DIR__.'/../Resources/config'
);
        Path(s) of resources
Available in path(s)?


$locator->locate('config.xml');
src/YourBundle/DependencyInjection/YourBundleExtension.php
             Special Loader for DIC
use SymfonyComponentDependencyInjectionLoader;

$loader = new LoaderXmlFileLoader(
    $container,
    new FileLocator('...')
);
                        Path(s) of resources
Load configuration in DIC


$loader->load('services.xml');


                Your services
$loader->load('services.xml');
$loader->load('other_services.xml');
Cache               Locate

           Config
Validate            Load
Validate




http://www.flickr.com/photos/jeremybrooks/3214838875/
Your bundle context
app/config.yml

your_bundle:
    enabled: true
src/YourBundle/DependencyInjection/YourBundleExtension.php

public function load($configs, /*...*/)
{
     $config = $this unprocessed
            Matched and
         ->processConfiguration(/**/);

       if (true === $config['enabled']) {
            $loader->load('services.xml');
       }            Processed and validated
}
your_bundle:
    enabled: true


               Validate
               Convert

array('enabled' => true);
Build a Config Tree




          http://www.flickr.com/photos/jlscha/6226656013/
src/YourBundle/DependencyInjection/Configuration.php

public function getConfigTreeBuilder()
{           The config tree
    $treeBuilder = new TreeBuilder();
    $rootNode = $treeBuilder
        ->root('your_bundle');

       // tree definition ...
             Your root node

       return $treeBuilder;
}
your_bundle:
    enabled: true
$rootNode Node type           Node name
     ->children()
          ->booleanNode('enabled')
                ->defaultFalse()
          ->end()
     ->end()     More options
;
src/YourBundle/DependencyInjection/YourBundleExtension.php
                      Correct type
public function load($configs, /*...*/)
{
     if (true === $config['enabled']) {
         // ...
     }
}
Scalar

Boolean            Array


          Node
Scalar

Boolean            Array


          Node
->booleanNode('enabled')->end()
your_bundle:
    enabled: troo
Type validation
Scalar

Boolean            Array


          Node
your_bundle:
    timeout: 60
All scalar types


->scalarNode('timeout')
     ->defaultValue(3600)
     ->isRequired()
     ->cannotBeEmpty()
->end()
              Validation options
your_bundle:
    timeout: sixty seconds
->scalarNode('timeout')
        Custom validation
     // ...                      Validation logic
     ->validate()
          ->ifTrue(function ($v) {
                return !is_int($v);
          })
          ->thenInvalid('No integer')
     ->end()
->end()                   Custom error
Custom error
Scalar

Boolean            Array


          Node
connection:
    url: http://example.com
    user: api
    key: $ome35ecre7Ke$
Group of nodes

->arrayNode('connection')
    ->children()
        ->scalarNode('url')
            ->isRequired()
                              Specific validation
        ->end()
        ->scalarNode('user')->end()
        ->scalarNode('key')->end()
    ->end()
->end()
array('connection' =>
    array(
        'url' => 'http://example.com',
        'user' => 'api',
        'key' => '$ome35ecre7Ke$'
    )
);
connections:
     default:
          url:    http://example.com
          user:   api
          key:    $ome35ecre7Ke$
     fallback:
          url:    http://back.example.com
          user:   fallback_api
          key:    $ome35ecre7Ke$
->arrayNode('connections')
Prototype variations
    ->useAttributeAsKey('name')
    ->prototype('array')
        ->children()
              ->scalarNode('url')
                  ->isRequired()
              ->end()
              ->scalarNode('user')->end()
              ->scalarNode('key')->end()
        ->end() validation
        Prototype
    ->end()
    ->requiresAtLeastOneElement()
->end()
array (
    'connections' => array (
        'default' => array (
            'url' => '...',
            'user' => 'api',
            'key' => '$ome35ecre7Ke$'
        ),
        'fallback' => array (
            'url' => '...',
            'user' => 'fallback_api',
            'key' => '$ome35ecre7Ke$'
        )
));
Using Configuration




     http://www.flickr.com/photos/victornuno/222145881/
src/YourBundle/DependencyInjection/YourBundleExtension.php

public function load(/*...*/)
{               Load services
     if (true === $config['enabled']) {
          $loader->load('services.xml');
     }
}
src/YourBundle/DependencyInjection/YourBundleExtension.php

public function load(/*...*/)
{
    if (true === $config['enabled']) {
        $loader->load('services.xml');
    }            Split services

     if (true === $config['add_extras']) {
         $loader->load('extras.xml');
     }
}
Manipulate DIC
src/YourBundle/DependencyInjection/YourBundleExtension.php

$container->setParameter(
    'your_bundle.timeout',
    $config['timeout']
);
src/YourBundle/Controller/YourController.php

public function someAction(/*...*/)
{
    $timeout = $container->getParameter(
        'global.timeout');
}
sfConfig::get('global.timeout');



           Good old symfony times…
Configure Services

     Not global options
src/YourBundle/DependencyInjection/YourBundleExtension.php

$container->setParameter(
    'your_bundle.timeout',
    $config['timeout']
);
src/YourBundle/Resources/config/services.xml
<?xml version="1.0" ?>       You config option
<container>
    <parameters>
        <parameter key="your_service_x.timeout"></parameter>
    </parameters>

    <services>
        <service id="your_service_x">
             <argument>%your_service_x.timeout%</argument>
        </service>
    </services>
</container>
src/YourBundle/DependencyInjection/YourBundleExtension.php

$container->setParameter(
    'your_service_x.timeout',
    $config['timeout']
);
Let‘s recap




http://www.flickr.com/photos/tine72/5464869042/
Configuration
needs structure
Configuration
needs validation
Configuration
needs conversion
http://joind.in/7209

More Related Content

What's hot

Introducing Assetic (NYPHP)
Introducing Assetic (NYPHP)Introducing Assetic (NYPHP)
Introducing Assetic (NYPHP)
Kris Wallsmith
 
Beyond symfony 1.2 (Symfony Camp 2008)
Beyond symfony 1.2 (Symfony Camp 2008)Beyond symfony 1.2 (Symfony Camp 2008)
Beyond symfony 1.2 (Symfony Camp 2008)
Fabien Potencier
 
Symfony & Javascript. Combining the best of two worlds
Symfony & Javascript. Combining the best of two worldsSymfony & Javascript. Combining the best of two worlds
Symfony & Javascript. Combining the best of two worlds
Ignacio Martín
 
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
 

What's hot (20)

CodeIgniter 3.0
CodeIgniter 3.0CodeIgniter 3.0
CodeIgniter 3.0
 
Introducing Assetic (NYPHP)
Introducing Assetic (NYPHP)Introducing Assetic (NYPHP)
Introducing Assetic (NYPHP)
 
Django - 次の一歩 gumiStudy#3
Django - 次の一歩 gumiStudy#3Django - 次の一歩 gumiStudy#3
Django - 次の一歩 gumiStudy#3
 
Symfony without the framework
Symfony without the frameworkSymfony without the framework
Symfony without the framework
 
How Kris Writes Symfony Apps
How Kris Writes Symfony AppsHow Kris Writes Symfony Apps
How Kris Writes Symfony Apps
 
Symfony tips and tricks
Symfony tips and tricksSymfony tips and tricks
Symfony tips and tricks
 
Guard Authentication: Powerful, Beautiful Security
Guard Authentication: Powerful, Beautiful SecurityGuard Authentication: Powerful, Beautiful Security
Guard Authentication: Powerful, Beautiful Security
 
Mashing up JavaScript – Advanced Techniques for modern Web Apps
Mashing up JavaScript – Advanced Techniques for modern Web AppsMashing up JavaScript – Advanced Techniques for modern Web Apps
Mashing up JavaScript – Advanced Techniques for modern Web Apps
 
Assetic (Symfony Live Paris)
Assetic (Symfony Live Paris)Assetic (Symfony Live Paris)
Assetic (Symfony Live Paris)
 
Silex Cheat Sheet
Silex Cheat SheetSilex Cheat Sheet
Silex Cheat Sheet
 
Fatc
FatcFatc
Fatc
 
Mashing up JavaScript
Mashing up JavaScriptMashing up JavaScript
Mashing up JavaScript
 
Virtual Madness @ Etsy
Virtual Madness @ EtsyVirtual Madness @ Etsy
Virtual Madness @ Etsy
 
Moving from Django Apps to Services
Moving from Django Apps to ServicesMoving from Django Apps to Services
Moving from Django Apps to Services
 
Beyond symfony 1.2 (Symfony Camp 2008)
Beyond symfony 1.2 (Symfony Camp 2008)Beyond symfony 1.2 (Symfony Camp 2008)
Beyond symfony 1.2 (Symfony Camp 2008)
 
Symfony & Javascript. Combining the best of two worlds
Symfony & Javascript. Combining the best of two worldsSymfony & Javascript. Combining the best of two worlds
Symfony & Javascript. Combining the best of two worlds
 
Web::Machine - Simpl{e,y} HTTP
Web::Machine - Simpl{e,y} HTTPWeb::Machine - Simpl{e,y} HTTP
Web::Machine - Simpl{e,y} HTTP
 
With a Mighty Hammer
With a Mighty HammerWith a Mighty Hammer
With a Mighty Hammer
 
Building Cloud Castles
Building Cloud CastlesBuilding Cloud Castles
Building Cloud Castles
 
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)
 

Viewers also liked

Viewers also liked (8)

Cologne Web Performance Optimization Group Web - Varnish
Cologne Web Performance Optimization Group Web - VarnishCologne Web Performance Optimization Group Web - Varnish
Cologne Web Performance Optimization Group Web - Varnish
 
symfony live 2010 - Using symfony events to create clean class interfaces
symfony live 2010 - Using symfony events to create clean class interfacessymfony live 2010 - Using symfony events to create clean class interfaces
symfony live 2010 - Using symfony events to create clean class interfaces
 
Microservices Docker @Bonn Agile
Microservices Docker @Bonn AgileMicroservices Docker @Bonn Agile
Microservices Docker @Bonn Agile
 
Giant Swarm @Devhouse friday
Giant Swarm @Devhouse fridayGiant Swarm @Devhouse friday
Giant Swarm @Devhouse friday
 
Container Orchestration @Docker Meetup Hamburg
Container Orchestration @Docker Meetup HamburgContainer Orchestration @Docker Meetup Hamburg
Container Orchestration @Docker Meetup Hamburg
 
Introduction to Docker & CoreOS - Symfony User Group Cologne
Introduction to Docker & CoreOS - Symfony User Group CologneIntroduction to Docker & CoreOS - Symfony User Group Cologne
Introduction to Docker & CoreOS - Symfony User Group Cologne
 
CoreOS @Codetalks Hamburg
CoreOS @Codetalks HamburgCoreOS @Codetalks Hamburg
CoreOS @Codetalks Hamburg
 
Dockerizing Symfony Applications - Symfony Live Berlin 2014
Dockerizing Symfony Applications - Symfony Live Berlin 2014Dockerizing Symfony Applications - Symfony Live Berlin 2014
Dockerizing Symfony Applications - Symfony Live Berlin 2014
 

Similar to Things Your Mother Didnt Tell You About Bundle Configurations - Symfony Live…

What mom never told you about bundle configurations - Symfony Live Paris 2012
What mom never told you about bundle configurations - Symfony Live Paris 2012What mom never told you about bundle configurations - Symfony Live Paris 2012
What mom never told you about bundle configurations - Symfony Live Paris 2012
D
 
Puppet atbazaarvoice
Puppet atbazaarvoicePuppet atbazaarvoice
Puppet atbazaarvoice
Dave Barcelo
 
20130528 solution linux_frousseau_nopain_webdev
20130528 solution linux_frousseau_nopain_webdev20130528 solution linux_frousseau_nopain_webdev
20130528 solution linux_frousseau_nopain_webdev
Frank Rousseau
 
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
 
Puppet Camp Seattle 2014: Puppet: Cloud Infrastructure as Code
Puppet Camp Seattle 2014: Puppet: Cloud Infrastructure as CodePuppet Camp Seattle 2014: Puppet: Cloud Infrastructure as Code
Puppet Camp Seattle 2014: Puppet: Cloud Infrastructure as Code
Puppet
 
Keeping it small: Getting to know the Slim micro framework
Keeping it small: Getting to know the Slim micro frameworkKeeping it small: Getting to know the Slim micro framework
Keeping it small: Getting to know the Slim micro framework
Jeremy Kendall
 

Similar to Things Your Mother Didnt Tell You About Bundle Configurations - Symfony Live… (20)

What mom never told you about bundle configurations - Symfony Live Paris 2012
What mom never told you about bundle configurations - Symfony Live Paris 2012What mom never told you about bundle configurations - Symfony Live Paris 2012
What mom never told you about bundle configurations - Symfony Live Paris 2012
 
20160905 - BrisJS - nightwatch testing
20160905 - BrisJS - nightwatch testing20160905 - BrisJS - nightwatch testing
20160905 - BrisJS - nightwatch testing
 
Service discovery and configuration provisioning
Service discovery and configuration provisioningService discovery and configuration provisioning
Service discovery and configuration provisioning
 
[Coscup 2012] JavascriptMVC
[Coscup 2012] JavascriptMVC[Coscup 2012] JavascriptMVC
[Coscup 2012] JavascriptMVC
 
Perl web app 테스트전략
Perl web app 테스트전략Perl web app 테스트전략
Perl web app 테스트전략
 
Best Practices in Plugin Development (WordCamp Seattle)
Best Practices in Plugin Development (WordCamp Seattle)Best Practices in Plugin Development (WordCamp Seattle)
Best Practices in Plugin Development (WordCamp Seattle)
 
Puppet atbazaarvoice
Puppet atbazaarvoicePuppet atbazaarvoice
Puppet atbazaarvoice
 
20130528 solution linux_frousseau_nopain_webdev
20130528 solution linux_frousseau_nopain_webdev20130528 solution linux_frousseau_nopain_webdev
20130528 solution linux_frousseau_nopain_webdev
 
Phpne august-2012-symfony-components-friends
Phpne august-2012-symfony-components-friendsPhpne august-2012-symfony-components-friends
Phpne august-2012-symfony-components-friends
 
Apostrophe (improved Paris edition)
Apostrophe (improved Paris edition)Apostrophe (improved Paris edition)
Apostrophe (improved Paris edition)
 
What's New In Laravel 5
What's New In Laravel 5What's New In Laravel 5
What's New In Laravel 5
 
Drupal as a web framework
Drupal as a web frameworkDrupal as a web framework
Drupal as a web framework
 
Zend Framework Study@Tokyo #2
Zend Framework Study@Tokyo #2Zend Framework Study@Tokyo #2
Zend Framework Study@Tokyo #2
 
Future of Web Apps: Google Gears
Future of Web Apps: Google GearsFuture of Web Apps: Google Gears
Future of Web Apps: Google Gears
 
ACL in CodeIgniter
ACL in CodeIgniterACL in CodeIgniter
ACL in CodeIgniter
 
CodeIgniter PHP MVC Framework
CodeIgniter PHP MVC FrameworkCodeIgniter PHP MVC Framework
CodeIgniter PHP MVC Framework
 
Puppet Camp Seattle 2014: Puppet: Cloud Infrastructure as Code
Puppet Camp Seattle 2014: Puppet: Cloud Infrastructure as CodePuppet Camp Seattle 2014: Puppet: Cloud Infrastructure as Code
Puppet Camp Seattle 2014: Puppet: Cloud Infrastructure as Code
 
Keeping it small: Getting to know the Slim micro framework
Keeping it small: Getting to know the Slim micro frameworkKeeping it small: Getting to know the Slim micro framework
Keeping it small: Getting to know the Slim micro framework
 
Unit testing after Zend Framework 1.8
Unit testing after Zend Framework 1.8Unit testing after Zend Framework 1.8
Unit testing after Zend Framework 1.8
 
Keeping It Small with Slim
Keeping It Small with SlimKeeping It Small with Slim
Keeping It Small with Slim
 

More from D

The Dog Ate My Deployment - PHP Uncoference September 2013
The Dog Ate My Deployment - PHP Uncoference September 2013The Dog Ate My Deployment - PHP Uncoference September 2013
The Dog Ate My Deployment - PHP Uncoference September 2013
D
 
The Dog Ate My Deployment - Symfony Usergroup Cologne July 2013
The Dog Ate My Deployment - Symfony Usergroup Cologne July 2013The Dog Ate My Deployment - Symfony Usergroup Cologne July 2013
The Dog Ate My Deployment - Symfony Usergroup Cologne July 2013
D
 
Dennis Benkert - The Dog Ate My Deployment - Symfony Usergroup Berlin March ...
Dennis Benkert -  The Dog Ate My Deployment - Symfony Usergroup Berlin March ...Dennis Benkert -  The Dog Ate My Deployment - Symfony Usergroup Berlin March ...
Dennis Benkert - The Dog Ate My Deployment - Symfony Usergroup Berlin March ...
D
 
Things Your Mother Didn't Tell You About Bundle Configurations - Symfony Live...
Things Your Mother Didn't Tell You About Bundle Configurations - Symfony Live...Things Your Mother Didn't Tell You About Bundle Configurations - Symfony Live...
Things Your Mother Didn't Tell You About Bundle Configurations - Symfony Live...
D
 
symfony Live 2010 - Using Doctrine Migrations
symfony Live 2010 -  Using Doctrine Migrationssymfony Live 2010 -  Using Doctrine Migrations
symfony Live 2010 - Using Doctrine Migrations
D
 
Railslove Lightningtalk 20 02 09 - Web Debug Toolbars
Railslove Lightningtalk 20 02 09 - Web Debug ToolbarsRailslove Lightningtalk 20 02 09 - Web Debug Toolbars
Railslove Lightningtalk 20 02 09 - Web Debug Toolbars
D
 

More from D (9)

Monitoring und Metriken im Wunderland
Monitoring und Metriken im WunderlandMonitoring und Metriken im Wunderland
Monitoring und Metriken im Wunderland
 
The Dog Ate My Deployment - PHP Uncoference September 2013
The Dog Ate My Deployment - PHP Uncoference September 2013The Dog Ate My Deployment - PHP Uncoference September 2013
The Dog Ate My Deployment - PHP Uncoference September 2013
 
The Dog Ate My Deployment - Symfony Usergroup Cologne July 2013
The Dog Ate My Deployment - Symfony Usergroup Cologne July 2013The Dog Ate My Deployment - Symfony Usergroup Cologne July 2013
The Dog Ate My Deployment - Symfony Usergroup Cologne July 2013
 
Dennis Benkert - The Dog Ate My Deployment - Symfony Usergroup Berlin March ...
Dennis Benkert -  The Dog Ate My Deployment - Symfony Usergroup Berlin March ...Dennis Benkert -  The Dog Ate My Deployment - Symfony Usergroup Berlin March ...
Dennis Benkert - The Dog Ate My Deployment - Symfony Usergroup Berlin March ...
 
Things Your Mother Didn't Tell You About Bundle Configurations - Symfony Live...
Things Your Mother Didn't Tell You About Bundle Configurations - Symfony Live...Things Your Mother Didn't Tell You About Bundle Configurations - Symfony Live...
Things Your Mother Didn't Tell You About Bundle Configurations - Symfony Live...
 
symfony Live 2010 - Using Doctrine Migrations
symfony Live 2010 -  Using Doctrine Migrationssymfony Live 2010 -  Using Doctrine Migrations
symfony Live 2010 - Using Doctrine Migrations
 
symfony and immobilienscout24.de - Dennis Benkert
symfony and immobilienscout24.de - Dennis Benkertsymfony and immobilienscout24.de - Dennis Benkert
symfony and immobilienscout24.de - Dennis Benkert
 
symfony and immobilienscout24.de - Rob Bors
symfony and immobilienscout24.de - Rob Borssymfony and immobilienscout24.de - Rob Bors
symfony and immobilienscout24.de - Rob Bors
 
Railslove Lightningtalk 20 02 09 - Web Debug Toolbars
Railslove Lightningtalk 20 02 09 - Web Debug ToolbarsRailslove Lightningtalk 20 02 09 - Web Debug Toolbars
Railslove Lightningtalk 20 02 09 - Web Debug Toolbars
 

Recently uploaded

+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
?#DUbAI#??##{{(☎️+971_581248768%)**%*]'#abortion pills for sale in dubai@
 
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
 

Recently uploaded (20)

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...
 
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
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdf
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
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...
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
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
 
HTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation StrategiesHTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation Strategies
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
 
Top 10 Most Downloaded Games on Play Store in 2024
Top 10 Most Downloaded Games on Play Store in 2024Top 10 Most Downloaded Games on Play Store in 2024
Top 10 Most Downloaded Games on Play Store in 2024
 
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
 
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
 
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
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
 
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
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 

Things Your Mother Didnt Tell You About Bundle Configurations - Symfony Live…