SlideShare ist ein Scribd-Unternehmen logo
1 von 64
Downloaden Sie, um offline zu lesen
Drupal 8 Configuration system for
coders and site builders
Friday 23 August 13
who am I?
Kristof De Jaeger
@swentel
Co-maintainer of Field API
Lead maintainer of Display Suite
Developer @ Wunderkraut
Friday 23 August 13
Outline
• What’s the problem
• How did we solve it
• Simple static settings
• Configuration entities
• Deployment - with demo
• Configuration schema
• Context, events and overrides
Friday 23 August 13
What problems are we
trying to solve?
• Variable soup
Live
Save
textSetting 1
Setting 2 label
Database Database
Dev
TEST
test test test test
test test test test
test test test test
test test
node/4admin/config/foo
Welcome
This is real
content on the
live site that end
users are viewing
node/4
Save
old textSetting 1
Setting 2 label
admin/config/foo
Friday 23 August 13
Live
Save
textSetting 1
Setting 2 label
Database Database
Dev
TEST
test test test test
test test test test
test test test test
test test
node/4admin/config/foo
Welcome
This is real
content on the
live site that end
users are viewing
node/4
Save
old textSetting 1
Setting 2 label
admin/config/foo
Danger!
Want to bring over configuration
changes from dev, but not
overwrite live content!
What problems are we
trying to solve?
Friday 23 August 13
What problems are we
trying to solve?
variable_set()/variable_get()
ctools_export_object()/
ctools_export_load_object()
db_select()/db_update()/
db_delete()
$conf[...];
hook_update_N()
drush fu
http://www.flickr.com/photos/bean/322616749
napkins
Friday 23 August 13
The solution
• Files using theYAML specification
• Active and staging directory
• Cached in the database using a standard
cache interface
• Config directory changed via settings.php
Friday 23 August 13
The anatomy of a
configuration file
Friday 23 August 13
system.site.yml
Friday 23 August 13
system.site.yml
Friday 23 August 13
system.site.yml
Friday 23 August 13
name: 'Configuration management'
mail: admin@example.com
slogan: 'makes Drupal 8 cex -y'
page:
403: ''
404: ''
front: node
system.site.yml
Friday 23 August 13
The API
Drupal::config()
->get()
->set()
->save()
Friday 23 August 13
Accessing data
Friday 23 August 13
name: 'Configuration management'
mail: admin@example.com
slogan: 'makes Drupal 8 cex -y'
page:
403: ''
404: ''
front: node
$site_name = Drupal::config('system.site')->get('name');
Friday 23 August 13
$page_data = Drupal::config('system.site')->get('page');
name: 'Configuration management'
mail: admin@example.com
slogan: 'makes Drupal 8 cex -y'
page:
403: ''
404: ''
front: node
Friday 23 August 13
$frontpage = Drupal::config('system.site')-
>get('page.front');
name: 'Configuration management'
mail: admin@example.com
slogan: 'makes Drupal 8 cex -y'
page:
403: ''
404: ''
front: node
Friday 23 August 13
$all_the_data = Drupal::config('system.site')->get();
name: 'Configuration management'
mail: admin@example.com
slogan: 'makes Drupal 8 cex -y'
page:
403: ''
404: ''
front: node
Friday 23 August 13
Saving data
Friday 23 August 13
name: 'CMI is good'
mail: admin@example.com
slogan: 'makes Drupal 8 cex -y'
page:
403: ''
404: ''
front: node
Drupal::config('system.site')
->set('name', 'CMI is good')
->save();
Friday 23 August 13
name: 'CMI is great'
mail: admin@example.com
slogan: 'makes Drupal 8 cex -y'
page:
403: access-denied
404: not-found
front: user
Drupal::config('system.site')
->set('name', 'CMI is great')
->set('page', array(
403 => 'access-denied',
404 => 'not-found',
front => 'user',
))
->save();
Friday 23 August 13
Friday 23 August 13
• system_settings_form is dead
• add your own submit callback
• you are responsible for saving configuration
• ship with default configuration file
simple settings
Friday 23 August 13
{system}
{date_format_locale}
{date_formats}
{date_format_type}
{field_config}
{field_config_instance}
{filter}
{filter_format}
{node_type} {role}{role_permission}
{variable}
{language}
Friday 23 August 13
Config all the things!
Friday 23 August 13
Config entities
Friday 23 August 13
use DrupalCoreConfigEntityConfigEntityBase;
use DrupalCoreAnnotationPlugin;
use DrupalCoreAnnotationTranslation;
/**
* Defines the contact category entity.
*
* @EntityType(
* id = "contact_category",
* label = @Translation("Category"),
* module = "contact",
* controllers = {
* controller_class = "DrupalcontactCategoryStorageController",
* list = "DrupalcontactCategoryListController",
* form = {
* "add" = "DrupalcontactCategoryFormController"
* "edit" = "DrupalcontactCategoryFormController"
* }
* }
* uri_callback = "contact_category_uri",
* config_prefix = "contact.category",
* entity_keys = {
* "id" = "id",
* "label" = "label",
* "uuid" = "uuid"
* }
* )
*/
class Category extends ConfigEntityBase implements CategoryInterface {
/**
* The category ID.Friday 23 August 13
use DrupalCoreConfigEntityConfigEntityBase;
use DrupalCoreAnnotationPlugin;
use DrupalCoreAnnotationTranslation;
/**
* Defines the contact category entity.
*
* @EntityType(
* id = "contact_category",
* label = @Translation("Category"),
* module = "contact",
* controllers = {
* controller_class = "DrupalcontactCategoryStorageController",
* list = "DrupalcontactCategoryListController",
* form = {
* "add" = "DrupalcontactCategoryFormController"
* "edit" = "DrupalcontactCategoryFormController"
* }
* }
* uri_callback = "contact_category_uri",
* config_prefix = "contact.category",
* entity_keys = {
* "id" = "id",
* "label" = "label",
* "uuid" = "uuid"
* }
* )
*/
class Category extends ConfigEntityBase implements CategoryInterface {
/**
* The category ID.Friday 23 August 13
namespace DrupalcontactPluginCoreEntity;
use DrupalCoreConfigEntityConfigEntityBase;
use DrupalCoreAnnotationPlugin;
use DrupalCoreAnnotationTranslation;
/**
* Defines the contact category entity.
*
* @Plugin(
* id = "contact_category",
* label = @Translation("Category"),
* module = "contact",
* controllers = {
* controller_class = "DrupalCoreConfigEntityConfigStorageController",
* list = "DrupalcontactCategoryListController",
* form = {
* "add" = "DrupalcontactCategoryFormController"
* }
* },
* uri_callback = "contact_category_uri",
* config_prefix = "contact.category",
* entity_keys = {
* "id" = "id",
* "label" = "label",
* "uuid" = "uuid"
* }
* )
*/
class Category extends ConfigEntityBase implements ContactInterface {
/**
* The category ID.
Friday 23 August 13
use DrupalCoreConfigEntityConfigEntityBase;
use DrupalCoreAnnotationPlugin;
use DrupalCoreAnnotationTranslation;
/**
* Defines the contact category entity.
*
* @EntityType(
* id = "contact_category",
* label = @Translation("Category"),
* module = "contact",
* controllers = {
* controller_class = "DrupalCoreConfigEntityConfigStorageController",
* list = "DrupalcontactCategoryListController",
* form = {
* "add" = "DrupalcontactCategoryFormController"
* "edit" = "DrupalcontactCategoryFormController"
* }
* }
* uri_callback = "contact_category_uri",
* config_prefix = "contact.category",
* entity_keys = {
* "id" = "id",
* "label" = "label",
* "uuid" = "uuid"
* }
* )
*/
class Category extends ConfigEntityBase implements ContactInterface {
/**
* The category ID.Friday 23 August 13
*/
class Category extends ConfigEntityBase {
/**
* The category ID.
*/
public $id;
/**
* The category UUID.
*/
public $uuid;
/**
* The category label.
*/
public $label;
/**
* List of recipient e-mail addresses.
*/
public $recipients = array();
/**
* An auto-reply message to send to the message author.
*/
public $reply = '';
/**
* Weight of this category (used for sorting).
*/
public $weight = 0;
}
Friday 23 August 13
id: feedback
uuid: de77e4f3-f94b-41a5-ad05-5c32fa08444f
label: 'Website feedback'
recipients:
- ''
reply: ''
weight: '0'
langcode: und
contact.category.feedback.yml
Friday 23 August 13
(config) entity API
• entity_load
• entity_save
• $object->any_method()
Friday 23 August 13
Deployment
Friday 23 August 13
Database
Development environment
Active
Directory
1
Friday 23 August 13
Database
Development environment
Active
Directory
1
Friday 23 August 13
Database
Development environment
Active
Directory
1
2
Friday 23 August 13
Database
Production environment
Staging
Directory
Active
Directory
3
admin/config/development/sync
Friday 23 August 13
Database
Production environment
Staging
Directory
Active
Directory
3
4
admin/config/development/sync
Friday 23 August 13
Demo time
• No partial imports !
Friday 23 August 13
Drush integration
Friday 23 August 13
Advanced workflows
• https://drupal.org/sandbox/dereine/2057465
Friday 23 August 13
Don’t hack core
Friday 23 August 13
Don’t hack active config
Friday 23 August 13
State API
Drupal::state()->set('update.last_check', $now);
//...
$last_check = Drupal::state()->get('update.last_check') ?: 0;
Only useful for this environment? Use state().
Friday 23 August 13
Configuration schema
Friday 23 August 13
system.maintenance.yml
enabled: '0'
message: '@site is currently under maintenance. We
should be back shortly. Thank you for your patience.'
Friday 23 August 13
system.schema.yml
system.maintenance:
type: mapping
label: 'Maintenance mode'
mapping:
"enabled":
type: boolean
label: "Put site into maintenance mode"
"message":
type: text
label: "Message to display when in maintenance mode"
Friday 23 August 13
Basic scalar types from typed data
boolean:
label: 'Boolean'
class: 'DrupalCoreTypedDataTypeBoolean'
email:
label: 'Email'
class: 'DrupalCoreTypedDataTypeEmail'
integer:
label: 'Integer'
class: 'DrupalCoreTypedDataTypeInteger'
string:
label: 'String'
class: 'DrupalCoreTypedDataTypeString'
uri:
label: 'Uri'
class: 'DrupalCoreTypedDataTypeUri'
Friday 23 August 13
Basic data types for configuration
undefined:
label: 'Undefined'
class: 'DrupalCoreConfigSchemaProperty'
mapping:
label: Mapping
class: 'DrupalCoreConfigSchemaMapping'
sequence:
label: Sequence
class: 'DrupalCoreConfigSchemaSequence'
Friday 23 August 13
Simple extended data types
# Human readable string that must be plain text and editable
with a text field.
label:
type: string
label: 'Label'
translatable: true
# Internal Drupal path
path:
type: string
label: 'Path'
# Human readable string that can contain multiple lines of text
or HTML.
text:
type: string
label: 'Text'
translatable: true
Friday 23 August 13
Complex extended data type
# Mail text with subject and body parts.
mail:
type: mapping
label: "Mail"
mapping:
"subject":
type: text
label: "Subject"
"body":
type: text
label: "Body"
Friday 23 August 13
Config inspector module
Friday 23 August 13
Context system,
Events & Overrides
Friday 23 August 13
global $conf;
$conf['system.maintenance']['message'] =
'Sorry, our site is down now.';
Global overrides
Friday 23 August 13
class ConfigGlobalOverrideSubscriber implements
EventSubscriberInterface {
static function getSubscribedEvents() {
$events['config.init'][] = array('configInit',
30);
return $events;
}
public function configInit(ConfigEvent $event) {
global $conf;
$config = $event->getConfig();
if (isset($conf[$config->getName()])) {
$config->setOverride($conf[$config->getName()]);
}
}
}
Global overrides
Friday 23 August 13
Break out of contexts
// Enter the override-free context, so we can ensure no
overrides are applied.
config_context_enter('config.context.free');
// Get system site maintenance message text from the original
config.
$message = config('system.maintenance')->get('message');
// Leave the override-free context.
config_context_leave();
Friday 23 August 13
Get into contexts
// Enter a user specific context.
$context = config_context_enter("DrupaluserUserConfigContext");
// Set the account to use on the context.
$context->setAccount($account);
$mail_config = Drupal::config('user.mail');
// Do stuff...
config_context_leave();
Friday 23 August 13
Language overrides
block.block.bartik.login.yml
id: bartik.login
uuid: 7012ebfd-7083-47ef-b...
weight: '0'
status: '1'
langcode: en
region: sidebar_first
plugin: user_login_block
settings:
label: 'User login'
module: user
label_display: visible
cache: '-1'
......
locale.hu.block.block.bartik.login.yml
settings:
label: 'Belépés'
locale.nl.block.block.bartik.login.yml
settings:
label: 'Inloggen'
Friday 23 August 13
recap and advice
• key names/properties should have meaning
• Use config entities instead of tables
• Use getters/setters/methods on entities
• Include config schema (translation!)
• Upgrade functions available in update.inc
Friday 23 August 13
Please try it out!
• #drupal-cmi - Dedicated IRC channel
• docs - https://drupal.org/node/1667894
• help along - http://drupal.org/core-mentoring-hours
Friday 23 August 13
• http://groups.drupal.org/cmi - Discussion
• http://v.gd/cmi_issues - Issues
• http://groups.drupal.org/core - Core announcements
• #drupal-cmi - Dedicated IRC channel
• http://drupal.org/core-mentoring-hours
Friday 23 August 13
Questions ?
Friday 23 August 13
Thanks
@heyrocker
@webchick
@moshe_weitzman
@GaborHojtsy
@alexpott
Friday 23 August 13

Weitere ähnliche Inhalte

Was ist angesagt?

Drupal Step-by-Step: How We Built Our Training Site, Part 1
Drupal Step-by-Step: How We Built Our Training Site, Part 1Drupal Step-by-Step: How We Built Our Training Site, Part 1
Drupal Step-by-Step: How We Built Our Training Site, Part 1
Acquia
 
international PHP2011_Bastian Feder_jQuery's Secrets
international PHP2011_Bastian Feder_jQuery's Secretsinternational PHP2011_Bastian Feder_jQuery's Secrets
international PHP2011_Bastian Feder_jQuery's Secrets
smueller_sandsmedia
 
Tips of CakePHP and MongoDB - Cakefest2011 ichikaway
Tips of CakePHP and MongoDB - Cakefest2011 ichikaway Tips of CakePHP and MongoDB - Cakefest2011 ichikaway
Tips of CakePHP and MongoDB - Cakefest2011 ichikaway
ichikaway
 
Unit and Functional Testing with Symfony2
Unit and Functional Testing with Symfony2Unit and Functional Testing with Symfony2
Unit and Functional Testing with Symfony2
Fabien Potencier
 
Decouple Your Code For Reusability (International PHP Conference / IPC 2008)
Decouple Your Code For Reusability (International PHP Conference / IPC 2008)Decouple Your Code For Reusability (International PHP Conference / IPC 2008)
Decouple Your Code For Reusability (International PHP Conference / IPC 2008)
Fabien Potencier
 

Was ist angesagt? (20)

Drupal Development (Part 2)
Drupal Development (Part 2)Drupal Development (Part 2)
Drupal Development (Part 2)
 
Drupal is Stupid (But I Love It Anyway)
Drupal is Stupid (But I Love It Anyway)Drupal is Stupid (But I Love It Anyway)
Drupal is Stupid (But I Love It Anyway)
 
Drupal Step-by-Step: How We Built Our Training Site, Part 1
Drupal Step-by-Step: How We Built Our Training Site, Part 1Drupal Step-by-Step: How We Built Our Training Site, Part 1
Drupal Step-by-Step: How We Built Our Training Site, Part 1
 
Как получить чёрный пояс по WordPress? v2.0
Как получить чёрный пояс по WordPress? v2.0Как получить чёрный пояс по WordPress? v2.0
Как получить чёрный пояс по WordPress? v2.0
 
Как получить чёрный пояс по WordPress?
Как получить чёрный пояс по WordPress?Как получить чёрный пояс по WordPress?
Как получить чёрный пояс по WordPress?
 
Building Lithium Apps
Building Lithium AppsBuilding Lithium Apps
Building Lithium Apps
 
Advanced Querying with CakePHP 3
Advanced Querying with CakePHP 3Advanced Querying with CakePHP 3
Advanced Querying with CakePHP 3
 
Alfredo-PUMEX
Alfredo-PUMEXAlfredo-PUMEX
Alfredo-PUMEX
 
international PHP2011_Bastian Feder_jQuery's Secrets
international PHP2011_Bastian Feder_jQuery's Secretsinternational PHP2011_Bastian Feder_jQuery's Secrets
international PHP2011_Bastian Feder_jQuery's Secrets
 
Tips of CakePHP and MongoDB - Cakefest2011 ichikaway
Tips of CakePHP and MongoDB - Cakefest2011 ichikaway Tips of CakePHP and MongoDB - Cakefest2011 ichikaway
Tips of CakePHP and MongoDB - Cakefest2011 ichikaway
 
Unit and Functional Testing with Symfony2
Unit and Functional Testing with Symfony2Unit and Functional Testing with Symfony2
Unit and Functional Testing with Symfony2
 
Top Ten Reasons to Use EntityFieldQuery in Drupal
Top Ten Reasons to Use EntityFieldQuery in DrupalTop Ten Reasons to Use EntityFieldQuery in Drupal
Top Ten Reasons to Use EntityFieldQuery in Drupal
 
Php unit the-mostunknownparts
Php unit the-mostunknownpartsPhp unit the-mostunknownparts
Php unit the-mostunknownparts
 
Laravel doctrine
Laravel doctrineLaravel doctrine
Laravel doctrine
 
The State of Lithium
The State of LithiumThe State of Lithium
The State of Lithium
 
Lithium: The Framework for People Who Hate Frameworks, Tokyo Edition
Lithium: The Framework for People Who Hate Frameworks, Tokyo EditionLithium: The Framework for People Who Hate Frameworks, Tokyo Edition
Lithium: The Framework for People Who Hate Frameworks, Tokyo Edition
 
The Origin of Lithium
The Origin of LithiumThe Origin of Lithium
The Origin of Lithium
 
Your Entity, Your Code
Your Entity, Your CodeYour Entity, Your Code
Your Entity, Your Code
 
Decouple Your Code For Reusability (International PHP Conference / IPC 2008)
Decouple Your Code For Reusability (International PHP Conference / IPC 2008)Decouple Your Code For Reusability (International PHP Conference / IPC 2008)
Decouple Your Code For Reusability (International PHP Conference / IPC 2008)
 
Zend Framework and the Doctrine2 MongoDB ODM (ZF1)
Zend Framework and the Doctrine2 MongoDB ODM (ZF1)Zend Framework and the Doctrine2 MongoDB ODM (ZF1)
Zend Framework and the Doctrine2 MongoDB ODM (ZF1)
 

Andere mochten auch (9)

Hazlo tú mismo
Hazlo tú mismoHazlo tú mismo
Hazlo tú mismo
 
Reforma del intercambiador de avenida de américa
Reforma del intercambiador de avenida de américaReforma del intercambiador de avenida de américa
Reforma del intercambiador de avenida de américa
 
3 rrr
3 rrr3 rrr
3 rrr
 
Guide de repas bilingue
Guide de repas bilingueGuide de repas bilingue
Guide de repas bilingue
 
Alumnos ayudantes 2015 2016
Alumnos ayudantes 2015 2016Alumnos ayudantes 2015 2016
Alumnos ayudantes 2015 2016
 
El e waste
El e wasteEl e waste
El e waste
 
cibersexo
cibersexocibersexo
cibersexo
 
SAP HANA SPS10- Extended Application Services (XS) Programming Model
SAP HANA SPS10- Extended Application Services (XS) Programming ModelSAP HANA SPS10- Extended Application Services (XS) Programming Model
SAP HANA SPS10- Extended Application Services (XS) Programming Model
 
Drupal 8 configuration management
Drupal 8 configuration managementDrupal 8 configuration management
Drupal 8 configuration management
 

Ähnlich wie Drupal 8 configuration system for coders and site builders - DrupalCamp Baltics 2013

Auto-loading of Drupal CCK Nodes
Auto-loading of Drupal CCK NodesAuto-loading of Drupal CCK Nodes
Auto-loading of Drupal CCK Nodes
nihiliad
 
BluePrints.classpathBluePrints.gitignoretargetl.docx
BluePrints.classpathBluePrints.gitignoretargetl.docxBluePrints.classpathBluePrints.gitignoretargetl.docx
BluePrints.classpathBluePrints.gitignoretargetl.docx
moirarandell
 
XQuery Triggers in Native XML Database Sedna
XQuery Triggers in Native XML Database SednaXQuery Triggers in Native XML Database Sedna
XQuery Triggers in Native XML Database Sedna
maria.grineva
 
Magento Attributes - Fresh View
Magento Attributes - Fresh ViewMagento Attributes - Fresh View
Magento Attributes - Fresh View
Alex Gotgelf
 

Ähnlich wie Drupal 8 configuration system for coders and site builders - DrupalCamp Baltics 2013 (20)

Drupal 8 configuration system for coders and site builders - Drupalaton 2013
Drupal 8 configuration system for coders and site builders - Drupalaton 2013Drupal 8 configuration system for coders and site builders - Drupalaton 2013
Drupal 8 configuration system for coders and site builders - Drupalaton 2013
 
Doctrine in FLOW3
Doctrine in FLOW3Doctrine in FLOW3
Doctrine in FLOW3
 
Drupal 8 Services And Dependency Injection
Drupal 8 Services And Dependency InjectionDrupal 8 Services And Dependency Injection
Drupal 8 Services And Dependency Injection
 
Debugging in drupal 8
Debugging in drupal 8Debugging in drupal 8
Debugging in drupal 8
 
Drupal 8 migrate!
Drupal 8 migrate!Drupal 8 migrate!
Drupal 8 migrate!
 
How Kris Writes Symfony Apps
How Kris Writes Symfony AppsHow Kris Writes Symfony Apps
How Kris Writes Symfony Apps
 
Auto-loading of Drupal CCK Nodes
Auto-loading of Drupal CCK NodesAuto-loading of Drupal CCK Nodes
Auto-loading of Drupal CCK Nodes
 
BluePrints.classpathBluePrints.gitignoretargetl.docx
BluePrints.classpathBluePrints.gitignoretargetl.docxBluePrints.classpathBluePrints.gitignoretargetl.docx
BluePrints.classpathBluePrints.gitignoretargetl.docx
 
Magento Live Australia 2016: Request Flow
Magento Live Australia 2016: Request FlowMagento Live Australia 2016: Request Flow
Magento Live Australia 2016: Request Flow
 
[Srijan Wednesday Webinars] Ruling Drupal 8 with #d8rules
[Srijan Wednesday Webinars] Ruling Drupal 8 with #d8rules[Srijan Wednesday Webinars] Ruling Drupal 8 with #d8rules
[Srijan Wednesday Webinars] Ruling Drupal 8 with #d8rules
 
XQuery Triggers in Native XML Database Sedna
XQuery Triggers in Native XML Database SednaXQuery Triggers in Native XML Database Sedna
XQuery Triggers in Native XML Database Sedna
 
Magento Attributes - Fresh View
Magento Attributes - Fresh ViewMagento Attributes - Fresh View
Magento Attributes - Fresh View
 
Symfony2 Building on Alpha / Beta technology
Symfony2 Building on Alpha / Beta technologySymfony2 Building on Alpha / Beta technology
Symfony2 Building on Alpha / Beta technology
 
Migrare da symfony 1 a Symfony2
 Migrare da symfony 1 a Symfony2  Migrare da symfony 1 a Symfony2
Migrare da symfony 1 a Symfony2
 
Singletons in PHP - Why they are bad and how you can eliminate them from your...
Singletons in PHP - Why they are bad and how you can eliminate them from your...Singletons in PHP - Why they are bad and how you can eliminate them from your...
Singletons in PHP - Why they are bad and how you can eliminate them from your...
 
G* on GAE/J 挑戦編
G* on GAE/J 挑戦編G* on GAE/J 挑戦編
G* on GAE/J 挑戦編
 
Unittests für Dummies
Unittests für DummiesUnittests für Dummies
Unittests für Dummies
 
Getting started with TDD - Confoo 2014
Getting started with TDD - Confoo 2014Getting started with TDD - Confoo 2014
Getting started with TDD - Confoo 2014
 
TYPO3 Flow 2.0 (T3CON13 San Francisco)
TYPO3 Flow 2.0 (T3CON13 San Francisco)TYPO3 Flow 2.0 (T3CON13 San Francisco)
TYPO3 Flow 2.0 (T3CON13 San Francisco)
 
Drupal Day 2012 - Automating Drupal Development: Make!les, Features and Beyond
Drupal Day 2012 - Automating Drupal Development: Make!les, Features and BeyondDrupal Day 2012 - Automating Drupal Development: Make!les, Features and Beyond
Drupal Day 2012 - Automating Drupal Development: Make!les, Features and Beyond
 

Kürzlich hochgeladen

Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
panagenda
 
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
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
Joaquim Jorge
 

Kürzlich hochgeladen (20)

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...
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 
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...
 
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
 
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)
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
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
 
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
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
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, ...
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 
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
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
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
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
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
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 

Drupal 8 configuration system for coders and site builders - DrupalCamp Baltics 2013